{"version":3,"sources":["_main.min.js","ViewModels/MasterViewModel.ts","Tapas.ts","Util.ts","Asg/Asg.ts","Asg/AsgMasterViewModel.ts","Asg/Util.ts","CustomBindings/ApplyBindingsWithContextBinding.ts","CustomBindings/AsyncPriceLoadBinding.ts","CustomBindings/BoostrapModal.ts","CustomBindings/BootstrapDatePickerBinding.ts","CustomBindings/BreadCrumbBackBinding.ts","CustomBindings/ClickToggleClassActiveBinding.ts","CustomBindings/ClickToggleClassBinding.ts","CustomBindings/FadeVisibleBinding.ts","CustomBindings/FileUploadBinding.ts","CustomBindings/FilterBinding.ts","CustomBindings/FloatingMenuBinding.ts","CustomBindings/FocusFirstInputOnClickBinding.ts","CustomBindings/FormSubmitOnChangeBinding.ts","CustomBindings/InstantSearchButtonControlBinding.ts","CustomBindings/InstantSearchHandler.ts","CustomBindings/LightSliderBinding.ts","CustomBindings/LightSliderDealer.ts","CustomBindings/LoadMoreItems.ts","CustomBindings/LoadMoreProductsBinding.ts","CustomBindings/LoadOnBoolBinding.ts","CustomBindings/LoadOnClickBinding.ts","CustomBindings/LoadSubGroupBinding.ts","CustomBindings/MenuBinding.ts","CustomBindings/PostFilterOnChangeBinding.ts","CustomBindings/QuickOrderBinding.ts","CustomBindings/QuillEditor.ts","CustomBindings/ScrollToTop.ts","CustomBindings/SpinEditBinding.ts","CustomBindings/SweetAlertBinding.ts","CustomBindings/ToggleClickBinding.ts","CustomBindings/ToggleParentClassBinding.ts","CustomBindings/VideoPopupBinding.ts","ViewModels/CartViewModel.ts","ViewModels/CustomerCenterViewModel.ts","ViewModels/EditStorefrontViewModel.ts","ViewModels/FrontpageViewModel.ts","ViewModels/InstantSearchViewModel.ts","ViewModels/LoginViewModel.ts","ViewModels/MiniCartViewModel.ts","ViewModels/NewsViewModel.ts","ViewModels/OrderDetailsViewModel.ts","ViewModels/OrderTemplatePageViewModel.ts","ViewModels/OrderTemplateViewModel.ts","ViewModels/PopularProductsViewModel.ts","ViewModels/ProductListViewModel.ts","ViewModels/ProductPageViewModel.ts","ViewModels/ProductViewModel.ts","ViewModels/QuickOrderExcelViewModel.ts","ViewModels/QuickOrderViewModel.ts","Asg/CustomBindings/AddToGtmDatalayerBinding.ts","Asg/CustomBindings/AsyncLoadPricesAndStock.ts","Asg/CustomBindings/CampaignPopUpBinding.ts","Asg/CustomBindings/ClickCalculateNlwiCart.ts","Asg/CustomBindings/ClickToggleClassOnElementBinding.ts","Asg/CustomBindings/DetectElementHeightBinding.ts","Asg/CustomBindings/FloatMenuAndAddClassToElement.ts","Asg/CustomBindings/focusFirstInputOfTypeOnClickBinding.ts","Asg/CustomBindings/GetQuantityPricesBinding.ts","Asg/CustomBindings/IfElementAvailableAddLoaderToPage.ts","Asg/CustomBindings/IfElementInDomOpenModal.ts","Asg/CustomBindings/LoadMoreProductsInfiniteBinding.ts","Asg/CustomBindings/MouseTrapBinding.ts","Asg/CustomBindings/OwlCarouselBinding.ts","Asg/CustomBindings/QuickOrderOnPage.ts","Asg/CustomBindings/ScrollLoadBinding.ts","Asg/CustomBindings/SpinEditBinding.ts","Asg/CustomBindings/SuggestedPricesBinding.ts","Asg/Dataservies/NlwiDataService.ts","Asg/Dataservies/RaptorDataService.ts","Asg/Dataservies/SolrDataService.ts","Asg/Events/Events.ts","Asg/Model/NameValue.ts","Asg/Model/SolrResult.ts","Asg/ViewModels/ApprovalStepViewModel.ts","Asg/ViewModels/AsgProductViewModel.ts","ViewModels/Checkout/ShowCartViewModel.ts","Asg/ViewModels/CartStepViewModel.ts","Asg/ViewModels/InformationStepViewModel.ts","Asg/ViewModels/LoginViewModel.ts","Asg/ViewModels/NewsletterRecipientViewModel.ts","Asg/ViewModels/SolrSearchViewModel.ts","Asg/ViewModels/RaptorProductListViewModel.ts","Asg/ViewModels/SolrSearchResultPageViewModelts.ts"],"names":["__extends","this","d","b","__","constructor","p","hasOwnProperty","prototype","Object","create","Tapas","ViewModels","MasterViewModel","_super","_this","call","LoginViewModel","menuOpen","ko","observable","showCookie","newsletterModal","newsletterSubscriptionStatus","showResponsiveMenu","windowWidth","$","window","width","UserDataService","Ftw","Dataservice","UserDataservice","User","Core","InstanceManager","get","miniCartVisible","closeMenu","removeClass","showCookieWarning","document","cookie","indexOf","cookieAccept","data","showNewsletterWidgetAfterDelay","localStorage","getItem","setTimeout","showNewsletterWidget","hideNewsletterWidget","setItem","toggleNewsletterWidget","submitNewsletterSubscription","form","postForm","serialize","then","result","modal","fail","error","toggleResponsiveMenu","load","Load","Data","GetCurrent","Events","cartLineAdded","subscribe","args","resize","responsive","computed","owner","read","notLoggedIn","IsLoggedIn","BaseViewModel","active","text","Init","config","FrameworkConfig","DebugMode","validation","locale","Base","init","Util","back","history","print","Asg","options","deferUpdates","nlwiDataService","NlwiDataService","solrSearchQuery","dataLayer","push","event","query","q","getParameterByName","name","url","location","href","replace","regex","RegExp","results","exec","decodeURIComponent","Bindings","ApplyBindingsWithContext","update","element","valueAccessor","allBindingsAccessor","viewModel","bindingContext","console","log","parents","unwrap","applyBindings","getElementById","bindingHandlers","AsyncPriceLoad","ele","priceMissing","find","length","ids","count","each","ERPStatus","Success","key","priceEle","html","PriceInfo","Tags","parent","attr","StockInfo","StockQuantity","HasQuantityPrices","addClass","BootstrapModal","DismissonClick","params","click","target","is","Id","hasClass","toggle","AutoFocus","on","focus","Bootstrap","Modal","ModalArray","modalElement","i","Selector","Show","Hide","selector","Active","DatePicker","startDate","Date","datepicker","format","autoclose","keyboardNavigation","language","todayHighlight","endDate","calendarWeeks","daysOfWeekDisabled","weekStart","orientation","fn","dates","days","daysShort","daysMin","months","monthsShort","today","clear","monthsTitle","BreadCrumbBack","previousMenu","thisSubMenu","e","show","fadeOut","nextAll","remove","stopPropagation","ClickToggleClassActive","elementClass","elementclass","activeClass","activeclass","utils","registerEventHandler","ClickToggleClass","toggleClass","FadeVisible","value","delayIn","delayOut","duration","delay","fadeIn","FileUpload","container","input","label","uploadedText","fileUploadedText","alreadyUploaded","defautlLabelText","val","change","Filter","filter","__filters","__filterSelectors","__filterSearch","__filterSearchLastValue","__filterIds","__documentsContainer","__documents","__distinctFilterValues","__resetBtn","__timeout","__primaryFilterId","__update","map","filterid","distinctValues","id","values","jQuery","unique","sort","filterSelect","append","off","base","onFilterChange","onFilterSearchChange","onResetBtnClick","array","grep","el","index","inArray","_event","prop","newdistinctValues","hide","optionsToShow","updateFilter","clearTimeout","resetFilter","updateFilterFacets","documentsToShow","activeFilters","documentsFilter","toLowerCase","visibleDocuments","filterAttr","FloatingMenu","_ele","floatingPosition","offset","scroll","y","scrollTop","top","FocusFirstInputOnClick","first","FormSubmitOnChange","timeout","$root","submit","unload","InstantSearchButtonControl","upAndDown","resultRows","resultRowClassName","resultCount","number","targetElement","which","preventDefault","bind","code","instantSearchButtonControl","LightSlider","$data","lightSlider","LightSliderDealer","gallery","item","loop","thumbItem","thumbMargin","slideMargin","enableDrag","slideEndAnimation","onSliderLoad","lightGallery","LoadMoreItems","currentPage","totalPages","layoutTemplate","http","currentlyLoading","nextPage","loadElement","height","LayoutTemplate","page","ajaxTapas","pathname","itemData","children","before","childBindingContext","createChildContext","applyBindingsToDescendants","toString","LoadMoreProducts","origin","search","productsHtml","productListLoad","LoadOnBool","observableBool","LoadOnClick","LoadSubGroup","parentElement","subGroupHtml","subGroupNumber","after","Menu","not","PostFilterOnChange","QuickOrder","selectProduct","productId","productName","variantId","unitId","alreadyInCart","select","quantity","reset","parseInt","quantityFocus","QuillEditor","setErrorMessage","pasteErrorMessage","quill","Quill","theme","modules","toolbar","header","newValue","firstChild","innerHTML","onpaste","ondragover","App","ScrollToTop","scrollItem","animate","SpinEdit","updateObservable","spinedit","minimum","SweetAlert","callBack","headline","headLine","type","success","confirmation","confirmationText","closeOnConfirm","confirmationButtonColor","cancelButtonText","failHeadline","failText","failType","succesHeadline","successHeadline","successText","successType","warningHeadline","warningText","warningType","swal","title","showCancelButton","confirmButtonColor","confirmButtonText","ToggleClick","ToggleClassParent","VideoPopup","startUrl","videoID","urlId","settings","videoUrl","videoModal","modalSelector","modalClosewButtonSelector","prepend","CartViewModel","Cart","CartDataService","CartDataserviceDynamicweb","CartLoading","CheckoutPageId","CartHtml","CartTotal","CartState","EmptyCartStatus","GetCurrentFromModule","cartObject","ID","TotalProductQuantity","AddProduct","_target","AddProductOnSubmit","getAttribute","AddProductOnSubmitPage","QuickOrderAddExistingProduct","ResetQuickOrder","QuickOrderAddExistingProductPage","AddProductFromProductViewModel","vm","ProductId","Quantity","VariantId","UnitId","orderLineFields","systemName","Comment","AlreadyInCart","UpdateQuantity","orderLineId","DeleteOrderLine","UpdateCartLineQuantity","DeleteCartLine","ConfirmEmptyCart","EmptyCart","CartHtmlDefined","CustomerCenterViewModel","UserContacts","observableArray","OrderTemplateDetailsLink","OrderTemplateList","OrderTemplateDataService","OrderTemplateDataservice","OrderTemplateNewListName","OrderTemplateListVisible","NewUserStatus","UserContactListVisible","UserEditContactInfoVisible","EditName","EditPhone","EditEmail","EditId","UserId","editUser","Name","Phone","Email","SaveEditUser","json","Code","GetContacts","save","user","makeNewUser","deleteUser","makeNewList","listName","isValid","CreateNewOrderTemplate","unshift","GlobalInstanceUpdateOnSuccess","GetOrderTemplates","extend","required","minLength","GetOrderTemplateDetailLink","Key","EditStorefrontViewModel","storeImages","webshopScreenshot","webshopPageHeader","loading","address","zip","city","country","customLat","customLng","geocodingApiKey","addressComplete","fullAddress","UpdateImages","GetStoreImages","GetWebshopScreenshot","GetWebshopPageHeader","getTime","DeleteShopImage","imagename","DeleteWebshopScreenshot","DeletePageHeader","UploadImage","FormData","cmd","ajax","processData","contentType","OpenModal","SetErrorMessageForWebsiteInput","undefined","errorMessage","oninvalid","setCustomValidity","oninput","GetLatLang","encodedAddress","encodeURI","response","geometry","lat","lng","currentTarget","geolocationTimeouts","to","FrontpageViewModel","lightSliderConfig","auto","speed","pause","pauseOnHover","pager","controls","InstantSearchViewModel","allResults","asyncSearch","searchQuery","timeOut","searchLoading","getSearchUrl","AddonQueryString","instantSearchPageId","quickOrderOpen","UserName","Password","logger","Config","Logger","Loader","ForgottenLoader","newUserLoader","LoginFailed","ToggleForgottenPassword","rememberMe","email","addFocus","makeNewUserOpen","loginModal","newUserModal","setFocusLogin","loginId","companyName","contactperson","useremail","phone","address1","address2","ean","cvr","successOrFail","group","Login","login","Dto","LoginRequest","debug","reload","recover","AccessUserEmail","ForgotPasswordMailTemplate","ForgotPasswordSenderEmail","ForgotPasswordMailSubject","LogOff","newUser","saveNewUser","company","vatregnumber","zipcode","groups","MiniCartViewModel","ShowEmptyMiniCart","TotalProductLines","ShowCartIndicator","NewsViewModel","newsDetailHtml","newsModal","OrderDetailsViewModel","OrderDetailsOrderlineElements","GetProductViemodelsFromDom","$items","elm","productViewModel","dataFor","AddAllToCart","all","addToCartArgs","Array","addToCartObj","AddMultipleProducts","OrderTemplatePageViewModel","OrderTemplateListElement","OrderTemplateName","OrderTemplateId","Saved","OrderTemplateStatus","OrderTemplateEdit","ConfirmDelete","orderLineField","SaveAll","otName","otId","lines","OrderTemplateViewModel","line","otlid","OrderTemplateLineId","comment","SaveOrderTemplate","SaveName","Delete","DeleteOrderTemplate","OrderTemplateSelectedList","OrderTemplateShowNewList","OrderTemplateDialogOpen","OrderTemplateQuantity","ShowOrderTemplateDialog","Remove","ShowInFavourite","OrderTemplateRelationCount","DeleteOrderTemplateLine","RemoveLineFromOrderTemplate","ToggleOrderTemplateDialog","AddProductToOrderTemplate","selectedObject","Count","Value","CurrentProductInTemplate","CreateNewOrderTemplateList","newOrderTemplate","PopularProductsViewModel","slideMove","easing","breakpoint","nextSlide","goToNextSlide","prevSlide","goToPrevSlide","Mode","ProductListViewModel","toggleView","mode","Grid","List","ProductPageViewModel","favoriteVisible","tabToggle","lightSliderGalleryConfig","tabOne","tabTwo","ProductViewModel","Visible","QuickOrderRow","stocknr","amount","QuickOrderExcelViewModel","Quickorders","QuickOrderHelpVisible","QuickOrderInput","QuickOrderExcelInputDisabled","QuickOrderInputDisabled","QuickOrderInstantSearchPageId","NoProductText","SweetAlertVisible","SweetAlertType","CheckInput","rows","split","arrayForEach","row","quickOrderRow","productNumber","match","arrayFirst","SearchQuery","AddEmptyQuickOrderLine","prodArray","order","link","join","orders","dataitem","productVariantId","productUnidId","ResetQuickOrderLines","removeAll","fadeBeforeRemove","RemoveQuickOrderLine","AddAmount","RemoveAmount","GetProductsById","productStringArray","SetSweetAlert","QuickOrderViewModel","ASG","AddToGtmDatalayer","dataAttributeName","windowAny","AsyncLoadPricesAndStock","observableValue","stockQty","stockQtyInt","CampaignPopUp","$popItmWrap","$closeBtn","$wrapOpen","$closeBtnHeight","outerHeight","$wrapOpenHeight","$wrapHeight","css","onload","ClickCalculateNlwiCart","CalculateCart","ClickToggleClassOnElementBinding","elementselector","activeselector","DetectHeightOnElement","maxHeight","maxheight","FloatMenuAndAddClassToElement","otherElement","otherelement","elementToHide","elementtohide","FocusFirstInputOfTypeOnClick","one","GetQuantityPrices","method","dataType","done","IfElementAvailableAddLoaderToPage","IfElementInDomOpenModal","modalselector","LoadMoreProductsInfinite","MouseTrap","ms","Mousetrap","keySequence","keyboardEvent","combo","handler","owlSlider","unwrapObservable","$owlElement","owlCarousel","QuickOrderOnPage","ScrollLoad","updating","domNodeDisposal","addDisposeCallback","loadFunc","loadFunction","loadMore","SpinEditASG","SuggedstedPrices","prices","defer","Q","serviceName","Error","promise","BaseDataservice","RaptorDataService","ItemClick","methodName","SolrParameterStore","start","qf","from","others","AsNameValue","arr","Model","NameValue","nv","SolrDataService","solrCoreName","parameterStore","Search","trigger","solrSearchResult","resolve","Event","solrSearchSuccessAction","SolrResult","responseHeader","SolrReponse","docs","ApprovalStepViewModel","CartBackorderTotal","CartAvailableItems","PricesFromAjax","EmptyMsg","CartV2.GotoStep2","agrs","lineadded","ShowCartViewModel","OrderTemplateDataServive","OrderTemplateSavedSweetAlert","OrderTemplateSaveAsListName","OrderTemplateShowFavListModalOpen","CartLines","changes","SaveCurrentCartAsOrderTemplate","newLine","CartStepViewModel","orderTemplateViewModel","BackorderTotal","InformationStepViewModel","optionalDeliveryAddressChecked","inputDisabled","boolValue","confirm","areaId","mailSubject","NewsletterRecipient","ModalSelector","ModuleInitialized","NewListEmail","AllSubscribers","NewsletterGroupId","FormSelector","NeedsUpdate","State","GetAllSubscribers","InterceptForm","UpdatePreferences","command","SolrSearchViewModel","solrProductDataService","cart","searchResult","timeoutId","selectedIndex","productPageId","showSeeAllResults","resultPageId","delayBeforeSearchInMiliseconds","pageNumber","CurrentRegionFilterValue","totalResults","_return","facet_counts","facet_fields","ProductNumber","div","Math","floor","next","previous","hasNext","hasPrevious","numFound","style","display","doc","AddToCart","product","addArgs","ProductID","handleKeys","newIndex","resultsIndex","gotoProductPage","gotoResultPage","encodeURIComponent","newPage","newQuery","isNumeric","newResult","RaptorProductList","raptorDataService","raptorMethodName","numberOfItems","owlSliderConfig","items","navigation","pagination","rewindNav","navigationText","itemsCustom","SolrSearchResultPageViewModel","combinedResult","showMore","newRows","replaceState","state"],"mappings":"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","file":"../_main.min.js","sourcesContent":["/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Tapas;\n(function (Tapas) {\n    var ViewModels;\n    (function (ViewModels) {\n        var MasterViewModel = (function (_super) {\n            __extends(MasterViewModel, _super);\n            function MasterViewModel() {\n                var _this = this;\n                _super.call(this);\n                this.LoginViewModel = new Tapas.ViewModels.LoginViewModel;\n                this.menuOpen = ko.observable(false);\n                this.showCookie = ko.observable(false);\n                this.newsletterModal = ko.observable(\"\");\n                this.newsletterSubscriptionStatus = ko.observable(false);\n                this.showResponsiveMenu = ko.observable(false);\n                this.windowWidth = ko.observable($(window).width());\n                this.UserDataService = new Ftw.Dataservice.UserDataservice();\n                this.User = Ftw.Core.InstanceManager.get('User');\n                this.miniCartVisible = ko.observable(false);\n                this.closeMenu = function () {\n                    if (_this.menuOpen()) {\n                        $(\".item.visible\").removeClass('visible');\n                        _this.menuOpen(false);\n                        _this.miniCartVisible(false);\n                    }\n                };\n                this.showCookieWarning = function () {\n                    if (document.cookie.indexOf('Dynamicweb.CookieOptInLevel') == -1) {\n                        _this.showCookie(true);\n                    }\n                };\n                this.cookieAccept = function () {\n                    _this.data.get(\"/admin/public/CookieOptInLevelConfig.aspx?cmd=SetCookieOptInLevel&OptInLevel=2\");\n                    _this.showCookie(false);\n                };\n                this.showNewsletterWidgetAfterDelay = function () {\n                    if (!localStorage.getItem(\"newsletterHide\")) {\n                        setTimeout(function () {\n                            _this.showNewsletterWidget(true);\n                        }, 10000);\n                    }\n                };\n                this.hideNewsletterWidget = function () {\n                    localStorage.setItem(\"newsletterHide\", \"1\");\n                    _this.toggleNewsletterWidget();\n                };\n                this.toggleNewsletterWidget = function () {\n                    _this.showNewsletterWidget(!_this.showNewsletterWidget());\n                };\n                this.submitNewsletterSubscription = function (form) {\n                    _this.data.postForm(\"/\", $(form).serialize())\n                        .then(function (result) {\n                        localStorage.setItem(\"newsletterHide\", \"1\");\n                        _this.newsletterSubscriptionStatus(true);\n                        $(_this.newsletterModal).modal();\n                        _this.showNewsletterWidget(false);\n                    })\n                        .fail(function (error) {\n                        _this.newsletterSubscriptionStatus(false);\n                        $(_this.newsletterModal).modal();\n                    });\n                };\n                this.toggleResponsiveMenu = function () {\n                    _this.showResponsiveMenu(!_this.showResponsiveMenu());\n                };\n                this.showCookieWarning();\n                this.showNewsletterWidgetAfterDelay();\n                this.load = ko.observable(new Load());\n                this.data = new Ftw.Data();\n                this.showNewsletterWidget = ko.observable(false);\n                this.UserDataService.GetCurrent();\n                Ftw.Events.cartLineAdded.subscribe(function (args) {\n                    if (_this.menuOpen()) {\n                        _this.miniCartVisible(false);\n                    }\n                    else {\n                        _this.miniCartVisible(true);\n                        _this.menuOpen(true);\n                    }\n                });\n                $(window).resize(function () {\n                    _this.windowWidth($(window).width());\n                });\n                this.responsive = ko.computed({\n                    owner: this,\n                    read: function () {\n                        return _this.windowWidth() <= 991 ? true : false;\n                    }\n                });\n            }\n            //Can be used to invoke login modal when user is not logged in\n            MasterViewModel.prototype.notLoggedIn = function () {\n                if (this.User().IsLoggedIn()) {\n                    $('.loginModal').modal('show');\n                }\n            };\n            return MasterViewModel;\n        }(Ftw.ViewModels.BaseViewModel));\n        ViewModels.MasterViewModel = MasterViewModel;\n        var Load = (function () {\n            function Load() {\n                this.active = ko.observable(false);\n                this.text = ko.observable(\"\");\n            }\n            return Load;\n        }());\n        ViewModels.Load = Load;\n    })(ViewModels = Tapas.ViewModels || (Tapas.ViewModels = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../scripts/typings/q/q.d.ts\" />\n/// <reference path=\"../../../../../../scripts/typings/breeze/breeze.d.ts\" />\n/// <reference path=\"../../../../../../scripts/typings/knockout.validation/knockout.validation.d.ts\" />\n/// <reference path=\"viewmodels/masterviewmodel.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Init = (function () {\n        function Init() {\n            //var masterViewModel = new Tapas.ViewModels.MasterViewModel();\n            var config = new Ftw.FrameworkConfig();\n            config.DebugMode = true;\n            config.MasterViewModel = Tapas.ViewModels.MasterViewModel;\n            ko.validation.locale('da-DK');\n            Ftw.Base.init(config);\n        }\n        return Init;\n    }());\n    Tapas.Init = Init;\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"viewmodels/masterviewmodel.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Util = (function () {\n        function Util() {\n        }\n        Util.back = function () {\n            window.history.back();\n        };\n        Util.print = function () {\n            window.print();\n        };\n        return Util;\n    }());\n    Tapas.Util = Util;\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout.validation/knockout.validation.d.ts\" />\n/// <reference path=\"../viewmodels/masterviewmodel.ts\" />\n/// <reference path=\"../../../../../../../../packages/FTW.Frontend.1.0.47/content/scripts/Ftw1.0.47/Ftw.d.ts\" />\nvar Asg;\n(function (Asg) {\n    var Init = (function () {\n        function Init() {\n            //var masterViewModel = new Tapas.ViewModels.MasterViewModel();\n            var config = new Ftw.FrameworkConfig();\n            config.DebugMode = false;\n            config.MasterViewModel = Asg.ViewModels.MasterViewModel;\n            ko.validation.locale('da-DK');\n            ko.options.deferUpdates = true;\n            Ftw.Base.init(config);\n        }\n        return Init;\n    }());\n    Asg.Init = Init;\n})(Asg || (Asg = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Asg;\n(function (Asg) {\n    var ViewModels;\n    (function (ViewModels) {\n        var MasterViewModel = (function (_super) {\n            __extends(MasterViewModel, _super);\n            function MasterViewModel() {\n                _super.call(this);\n                this.nlwiDataService = new Asg.Dataservice.NlwiDataService();\n                Asg.Events.solrSearchQuery.subscribe(function (args) {\n                    window.dataLayer.push({\n                        event: 'SolrSearch',\n                        query: args.q()\n                    });\n                });\n            }\n            return MasterViewModel;\n        }(Tapas.ViewModels.MasterViewModel));\n        ViewModels.MasterViewModel = MasterViewModel;\n    })(ViewModels = Asg.ViewModels || (Asg.ViewModels = {}));\n})(Asg || (Asg = {}));\n\nvar Asg;\n(function (Asg) {\n    var Util = (function () {\n        function Util() {\n        }\n        Util.getParameterByName = function (name, url) {\n            if (!url)\n                url = window.location.href;\n            name = name.replace(/[\\[\\]]/g, \"\\\\$&\");\n            var regex = new RegExp(\"[?&]\" + name + \"(=([^&#]*)|&|#|$)\"), results = regex.exec(url);\n            if (!results)\n                return null;\n            if (!results[2])\n                return '';\n            return decodeURIComponent(results[2].replace(/\\+/g, \" \"));\n        };\n        return Util;\n    }());\n    Asg.Util = Util;\n})(Asg || (Asg = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var ApplyBindingsWithContext = (function () {\n            function ApplyBindingsWithContext() {\n            }\n            ApplyBindingsWithContext.prototype.update = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                console.log(valueAccessor().parents);\n                console.log(ko.unwrap(valueAccessor().query));\n                var query = ko.unwrap(valueAccessor().query);\n                if (query != \"\") {\n                    ko.applyBindings(viewModel, document.getElementById(query));\n                }\n            };\n            return ApplyBindingsWithContext;\n        }());\n        Bindings.ApplyBindingsWithContext = ApplyBindingsWithContext;\n        ko.bindingHandlers['applyBindingsWithContext'] = new ApplyBindingsWithContext();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var AsyncPriceLoad = (function () {\n            function AsyncPriceLoad() {\n            }\n            AsyncPriceLoad.prototype.update = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var forceUpdate = ko.unwrap(valueAccessor());\n                var data = new Ftw.Data();\n                //TODO: Rewrite from jQuery\n                var ele = $(element);\n                var priceMissing = ele.find(\".price.asyncLoad\");\n                if (priceMissing.length > 0) {\n                    var ids = \"count=\" + priceMissing.length;\n                    var count = 0;\n                    priceMissing.each(function () {\n                        ids += \"&productid[\" + count + \"]=\" + $(this).data(\"productid\");\n                        ids += \"&key[\" + count + \"]=\" + $(this).data(\"productkey\");\n                        count += 1;\n                    });\n                    data.postForm('/Handlers/Firstweb.ERP.PriceCache.ashx?cmd=getpricesandstocks', ids).then(function (result) {\n                        if (result.ERPStatus.Success) {\n                            $.each(result.Data, function (key, data) {\n                                var priceEle = $(\".price.asyncLoad[data-productkey='\" + key + \"']\");\n                                priceEle.find(\".brutto .bPrice\").html(data.PriceInfo.Tags[\"Firstweb:ErpPriceInfo.BruttoAmountFormattedNoSymbol\"]);\n                                priceEle.find(\".netto .nPrice\").html(data.PriceInfo.Tags[\"Firstweb:ErpPriceInfo.NettoPriceFormattedNoSymbol\"]);\n                                priceEle.parent().parent().find(\".stock\").attr(\"data-stock\", data.StockInfo.StockQuantity);\n                                if (data.PriceInfo.HasQuantityPrices == true) {\n                                    priceEle.parent().find(\"#dLabel\").removeClass(\"hideQuantity\").addClass(\"loadQuantity\");\n                                }\n                            });\n                        }\n                        else {\n                            //TODO : Show some sort of error to the user based on the status\n                            console.log('ErpStatus not Successfull');\n                        }\n                    })\n                        .catch(function (error) {\n                        //TODO : Show some sort of error to the user - shut down shopping?\n                        console.log(\"We catch fatal errors here - ex : no access to the ERP on local dev machines\");\n                    })\n                        .finally(function () {\n                        //Allways remove the loaders\n                        $(\".price.asyncLoad\").removeClass(\"asyncLoad\");\n                    });\n                }\n            };\n            return AsyncPriceLoad;\n        }());\n        Bindings.AsyncPriceLoad = AsyncPriceLoad;\n        ko.bindingHandlers['asyncPriceLoad'] = new AsyncPriceLoad();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var BootstrapModal = (function () {\n            function BootstrapModal() {\n            }\n            BootstrapModal.DismissonClick = function (params) {\n                $('body').click(function (event) {\n                    if ($(event.target).is(params.Id))\n                        if ($(params.Id).hasClass(\"in\"))\n                            params.toggle(false);\n                });\n            };\n            BootstrapModal.AutoFocus = function () {\n                $('.modal').on('shown.bs.modal', function () {\n                    $(this).find('[autofocus]').focus();\n                });\n            };\n            BootstrapModal.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                var params = valueAccessor();\n                var modal = new Bootstrap.Modal(params.Id);\n                BootstrapModal.ModalArray.push(modal);\n                var modalElement = $(params.Id);\n                modalElement.attr('data-backdrop', 'static');\n                modalElement.attr('data-keyboard', \"false\");\n                modalElement.attr(\"role\", \"dialog\");\n                BootstrapModal.DismissonClick(params);\n            };\n            BootstrapModal.prototype.update = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                var params = valueAccessor();\n                var modal;\n                for (var i = 0; i < BootstrapModal.ModalArray.length; i++) {\n                    if (BootstrapModal.ModalArray[i].Selector === params.Id)\n                        modal = BootstrapModal.ModalArray[i];\n                }\n                if (modal) {\n                    if (params.toggle()) {\n                        modal.Show();\n                        BootstrapModal.AutoFocus();\n                    }\n                    else {\n                        modal.Hide();\n                    }\n                }\n            };\n            BootstrapModal.ModalArray = [];\n            return BootstrapModal;\n        }());\n        Bindings.BootstrapModal = BootstrapModal;\n        ko.bindingHandlers['bootstrapModal'] = new BootstrapModal();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\nvar Bootstrap;\n(function (Bootstrap) {\n    var Modal = (function () {\n        function Modal(selector) {\n            this.selector = selector;\n            this.Active = false;\n            this.Selector = selector;\n        }\n        Modal.prototype.Show = function () {\n            $(this.selector).modal('show');\n            $(this.selector).focus();\n            this.Active = true;\n        };\n        Modal.prototype.Hide = function () {\n            $(this.selector).modal('hide');\n            this.Active = false;\n        };\n        return Modal;\n    }());\n    Bootstrap.Modal = Modal;\n})(Bootstrap || (Bootstrap = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/bootstrap.datepicker/bootstrap.datepicker.d.ts\" />\n//https://github.com/eternicode/bootstrap-datepicker\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var DatePicker = (function () {\n            function DatePicker() {\n            }\n            DatePicker.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var ele = $(element);\n                var params = valueAccessor() || {};\n                var startDate = params.startDate || new Date();\n                ele.datepicker({\n                    format: params.format || 'dd-mm-yyyy',\n                    autoclose: params.autoclose || true,\n                    keyboardNavigation: params.keyboardNavigation || true,\n                    language: params.language || 'da',\n                    todayHighlight: params.todayHighlight || true,\n                    startDate: startDate,\n                    endDate: params.endDate || null,\n                    calendarWeeks: params.calendarWeeks || false,\n                    daysOfWeekDisabled: params.daysOfWeekDisabled || null,\n                    weekStart: params.weekStart || 1,\n                    orientation: params.orientation || \"bottom\"\n                });\n                ele.datepicker(\"setDate\", startDate);\n            };\n            return DatePicker;\n        }());\n        Bindings.DatePicker = DatePicker;\n        ko.bindingHandlers['datePicker'] = new DatePicker();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n//languages\n//DK\n$.fn.datepicker.dates['da'] = {\n    days: [\"søndag\", \"mandag\", \"tirsdag\", \"onsdag\", \"torsdag\", \"fredag\", \"lørdag\"],\n    daysShort: [\"søn\", \"man\", \"tir\", \"ons\", \"tor\", \"fre\", \"lør\"],\n    daysMin: [\"sø\", \"ma\", \"ti\", \"on\", \"to\", \"fr\", \"lø\"],\n    months: [\"januar\", \"februar\", \"marts\", \"april\", \"maj\", \"juni\", \"juli\", \"august\", \"september\", \"oktober\", \"november\", \"december\"],\n    monthsShort: [\"jan\", \"feb\", \"mar\", \"apr\", \"maj\", \"jun\", \"jul\", \"aug\", \"sep\", \"okt\", \"nov\", \"dec\"],\n    today: \"I Dag\",\n    clear: \"Nulstil\"\n};\n//EN\n$.fn.datepicker.dates['en-GB'] = {\n    days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n    daysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n    daysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n    months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n    monthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n    today: \"Today\",\n    monthsTitle: \"Months\",\n    clear: \"Clear\",\n    weekStart: 1,\n    format: \"dd/mm/yyyy\"\n};\n//SV\n$.fn.datepicker.dates['sv'] = {\n    days: [\"Söndag\", \"Måndag\", \"Tisdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lördag\"],\n    daysShort: [\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"],\n    daysMin: [\"Sö\", \"Må\", \"Ti\", \"On\", \"To\", \"Fr\", \"Lö\"],\n    months: [\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\", \"Oktober\", \"November\", \"December\"],\n    monthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\n    today: \"Idag\",\n    format: \"yyyy-mm-dd\",\n    weekStart: 1,\n    clear: \"Rensa\"\n};\n//NO\n$.fn.datepicker.dates['no'] = {\n    days: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag'],\n    daysShort: ['Søn', 'Man', 'Tir', 'Ons', 'Tor', 'Fre', 'Lør'],\n    daysMin: ['Sø', 'Ma', 'Ti', 'On', 'To', 'Fr', 'Lø'],\n    months: ['Januar', 'Februar', 'Mars', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Desember'],\n    monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],\n    today: 'I dag',\n    clear: 'Nullstill',\n    weekStart: 1,\n    format: 'dd.mm.yyyy'\n};\n//FI\n$.fn.datepicker.dates['fi'] = {\n    days: [\"sunnuntai\", \"maanantai\", \"tiistai\", \"keskiviikko\", \"torstai\", \"perjantai\", \"lauantai\"],\n    daysShort: [\"sun\", \"maa\", \"tii\", \"kes\", \"tor\", \"per\", \"lau\"],\n    daysMin: [\"su\", \"ma\", \"ti\", \"ke\", \"to\", \"pe\", \"la\"],\n    months: [\"tammikuu\", \"helmikuu\", \"maaliskuu\", \"huhtikuu\", \"toukokuu\", \"kesäkuu\", \"heinäkuu\", \"elokuu\", \"syyskuu\", \"lokakuu\", \"marraskuu\", \"joulukuu\"],\n    monthsShort: [\"tam\", \"hel\", \"maa\", \"huh\", \"tou\", \"kes\", \"hei\", \"elo\", \"syy\", \"lok\", \"mar\", \"jou\"],\n    today: \"tänään\",\n    clear: \"Tyhjennä\",\n    weekStart: 1,\n    format: \"d.m.yyyy\"\n};\n//Get more languages at: https://github.com/eternicode/bootstrap-datepicker/tree/master/js/locales \n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var BreadCrumbBack = (function () {\n            function BreadCrumbBack() {\n            }\n            BreadCrumbBack.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var ele = $(element);\n                var previousMenu = document.getElementById(valueAccessor());\n                var thisSubMenu = ele.parent().parent();\n                ele.click(function (e) {\n                    $(previousMenu).addClass('active').show();\n                    thisSubMenu.fadeOut(200, function () {\n                        $(previousMenu).nextAll('div').remove();\n                    });\n                    e.stopPropagation();\n                });\n            };\n            return BreadCrumbBack;\n        }());\n        Bindings.BreadCrumbBack = BreadCrumbBack;\n        ko.bindingHandlers['breadCrumbBack'] = new BreadCrumbBack();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var ClickToggleClassActive = (function () {\n            function ClickToggleClassActive() {\n            }\n            ClickToggleClassActive.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var params = valueAccessor();\n                var value = ko.unwrap(params.observable);\n                var elementClass = params.elementclass;\n                var activeClass = params.activeclass;\n                ko.utils.registerEventHandler(element, \"click\", function () {\n                    if ($(element).hasClass(activeClass)) {\n                        $(element).removeClass(activeClass);\n                    }\n                    else {\n                        $(elementClass).removeClass(activeClass);\n                        $(element).addClass(activeClass);\n                    }\n                });\n            };\n            return ClickToggleClassActive;\n        }());\n        Bindings.ClickToggleClassActive = ClickToggleClassActive;\n        ko.bindingHandlers['clickToggleClassActive'] = new ClickToggleClassActive();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var ClickToggleClass = (function () {\n            function ClickToggleClass() {\n            }\n            ClickToggleClass.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var value = valueAccessor();\n                ko.utils.registerEventHandler(element, \"click\", function () {\n                    $(element).toggleClass(valueAccessor);\n                });\n            };\n            return ClickToggleClass;\n        }());\n        Bindings.ClickToggleClass = ClickToggleClass;\n        ko.bindingHandlers['clickToggleClass'] = new ClickToggleClass();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var FadeVisible = (function () {\n            function FadeVisible() {\n            }\n            FadeVisible.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                element = $(element);\n                var value = valueAccessor();\n                element.toggle(ko.unwrap(value)); // Use \"unwrapObservable\" so we can handle values that may or may not be observable\n            };\n            FadeVisible.prototype.update = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var value = valueAccessor();\n                var delayIn = allBindingsAccessor.get('delayIn') || 0; // set a delay in\n                var delayOut = allBindingsAccessor.get('delayOut') || 0; // set a delay out\n                var duration = allBindingsAccessor.get('duration') || 'fast'; // set the fade in/out speed\n                ko.unwrap(value) ? $(element).delay(delayIn).fadeIn(duration) : $(element).delay(delayOut).fadeOut(duration);\n            };\n            return FadeVisible;\n        }());\n        Bindings.FadeVisible = FadeVisible;\n        ;\n        ko.bindingHandlers['Fadevisible'] = new FadeVisible();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var FileUpload = (function () {\n            function FileUpload() {\n            }\n            FileUpload.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var value = valueAccessor();\n                var container = $(element);\n                var input = container.find(value.input);\n                var label = container.find(value.label);\n                var uploadedText = value.fileUploadedText;\n                var alreadyUploaded = !value.alreadyUploaded;\n                var defautlLabelText = label.html();\n                if (alreadyUploaded) {\n                    $('.js-update-upload').val('false');\n                    label.html(uploadedText);\n                    container.addClass('active');\n                }\n                input.change(function () {\n                    $('.js-update-upload').val('true');\n                    if (input.val()) {\n                        label.html(uploadedText);\n                        container.addClass('active');\n                    }\n                    else {\n                        label.html(defautlLabelText);\n                        container.removeClass('active');\n                    }\n                });\n            };\n            return FileUpload;\n        }());\n        Bindings.FileUpload = FileUpload;\n        ko.bindingHandlers['fileUpload'] = new FileUpload();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var Filter = (function () {\n            function Filter() {\n            }\n            Filter.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var filter = {\n                    __filters: null,\n                    __filterSelectors: null,\n                    __filterSearch: null,\n                    __filterSearchLastValue: \"\",\n                    __filterIds: null,\n                    __documentsContainer: null,\n                    __documents: null,\n                    __distinctFilterValues: [],\n                    __resetBtn: null,\n                    __timeout: null,\n                    __primaryFilterId: null,\n                    __update: null,\n                    init: function () {\n                        var _this = this;\n                        this.__primaryFilterId = $(\".filters\").attr(\"ftw-filter-primary\");\n                        this.__update = ($(\".filters\").attr(\"ftw-filter-update\") == \"true\");\n                        this.__filters = $(\".filters .filter\");\n                        this.__filterSelectors = $(\".filters .filter select\");\n                        this.__filterSearch = $(\".freetext\");\n                        this.__filterIds = this.__filters.map(function () { return $(this).attr('ftw-filter-id'); });\n                        this.__documentsContainer = $(\".filterrows\");\n                        this.__documents = $(\".filterrows .filterrow\");\n                        this.__resetBtn = $(\".filters .resetbtn\");\n                        this.__filterIds.each(function () {\n                            var filterid = this;\n                            var distinctValues = { id: filterid, values: jQuery.unique(_this.__documents.filter(\"[ftw-filter-\" + filterid + \"!='']\").map(function () { return $(this).attr(\"ftw-filter-\" + filterid); })) };\n                            distinctValues.values.sort();\n                            _this.__distinctFilterValues.push(distinctValues);\n                            var filterSelect = _this.__filterSelectors.filter(\"[ftw-filter-id='\" + filterid + \"']\");\n                            if (distinctValues.values.length > 0) {\n                                _this.__filters.filter(\"[ftw-filter-id  ='\" + filterid + \"']\").show();\n                                distinctValues.values.each(function () {\n                                    if (filterSelect.find(\"option[value='\" + this + \"']\").length < 1)\n                                        filterSelect.append($(\"<option>\").attr(\"value\", this).text(this));\n                                });\n                            }\n                        });\n                        this.__filterSelectors.off('change').on('change', { base: this }, this.onFilterChange);\n                        this.__filterSearch.off('keyup').on('keyup', { base: this }, this.onFilterSearchChange);\n                        this.__resetBtn.off('click').on('click', { base: this }, this.onResetBtnClick);\n                    },\n                    unique: function (array) {\n                        return $.grep(array, function (el, index) {\n                            return index == $.inArray(el, array);\n                        });\n                    },\n                    onFilterChange: function (_event) {\n                        var base = _event.data.base;\n                        if ($(this).attr(\"ftw-filter-id\") == base.__primaryFilterId) {\n                            if ($(this).val() == \"\") {\n                                $(base.__filterSelectors[1]).val('').prop(\"disabled\", true);\n                            }\n                            else {\n                                var newdistinctValues = { id: \"attr2\", values: jQuery.unique(base.__documents.filter(\"[ftw-filter-attr1='\" + $(this).val() + \"']\").map(function () { return $(this).attr(\"ftw-filter-attr2\"); })) };\n                                if (newdistinctValues.values.length > 1) {\n                                    $(base.__filterSelectors[1]).find(\"option\").hide();\n                                    var optionsToShow = $(base.__filterSelectors[1]).find(\"option\").filter(function () {\n                                        if (jQuery.inArray($(this).val(), newdistinctValues.values) > -1)\n                                            return true;\n                                        return false;\n                                    });\n                                    if (optionsToShow.length > 1) {\n                                        optionsToShow.show();\n                                        $(base.__filterSelectors[1]).val('').prop(\"disabled\", false);\n                                    }\n                                    else {\n                                        $(base.__filterSelectors[1]).val('').prop(\"disabled\", true);\n                                    }\n                                }\n                                else {\n                                    $(base.__filterSelectors[1]).val('').prop(\"disabled\", true);\n                                }\n                            }\n                        }\n                        base.updateFilter();\n                    },\n                    onFilterSearchChange: function (_event) {\n                        var base = _event.data.base;\n                        if (base.__filterSearchLastValue == base.__filterSearch.val())\n                            return;\n                        clearTimeout(base.__timeout);\n                        base.__timeout = setTimeout(function () {\n                            base.updateFilter();\n                        }, 400);\n                    },\n                    onResetBtnClick: function (_event) {\n                        var base = _event.data.base;\n                        base.resetFilter();\n                    },\n                    resetFilter: function () {\n                        this.__documents.show();\n                        this.__filterSelectors.val(\"\");\n                        this.__filterSearch.val(\"\");\n                        $(\".doccount .count\").text(this.__documents.length);\n                        // this.__documentsContainer.hide();\n                        if (this.__update)\n                            this.updateFilterFacets(this.__documents);\n                    },\n                    updateFilter: function () {\n                        var base = this;\n                        var documentsToShow = this.__documents;\n                        var activeFilters = this.__filterSelectors.filter(function () { return $(this).val() != \"\"; });\n                        if (activeFilters.length == 0 && this.__filterSearch.val() == \"\") {\n                            this.__documents.fadeIn();\n                        }\n                        else {\n                            this.__documents.hide();\n                            var documentsFilter = \"\";\n                            activeFilters.each(function () {\n                                documentsFilter += \"[ftw-filter-\" + $(this).attr('ftw-filter-id') + \"='\" + $(this).val() + \"']\";\n                            });\n                            if (documentsFilter != \"\")\n                                documentsToShow = documentsToShow.filter(documentsFilter);\n                            if (base.__filterSearch != null && base.__filterSearch.length > 0) {\n                                base.__filterSearchLastValue = base.__filterSearch.val();\n                                if (base.__filterSearch.val() != \"\") {\n                                    var q = base.__filterSearch.val().toLowerCase();\n                                    documentsToShow = documentsToShow.filter(function () {\n                                        return (($(this).attr('ftw-filter-freetext').toLowerCase().indexOf(q) > -1)\n                                            ||\n                                                ($(this).attr('ftw-filter-attr1') != null && $(this).attr('ftw-filter-attr1').toLowerCase().indexOf(q) > -1)\n                                            ||\n                                                ($(this).attr('ftw-filter-attr2') != null && $(this).attr('ftw-filter-attr2').toLowerCase().indexOf(q) > -1)\n                                            ||\n                                                ($(this).attr('ftw-filter-attr3') != null && $(this).attr('ftw-filter-attr3').toLowerCase().indexOf(q) > -1)\n                                            ||\n                                                ($(this).attr('data-filter-attr4') != null && $(this).attr('ftw-filter-attr4').toLowerCase().indexOf(q) > -1)\n                                            ||\n                                                ($(this).attr('ftw-filter-attr5') != null && $(this).attr('ftw-filter-attr5').toLowerCase().indexOf(q) > -1));\n                                    });\n                                }\n                            }\n                            base.__documentsContainer.show();\n                            documentsToShow.fadeIn();\n                        }\n                        $(\".doccount .count\").text(documentsToShow.length);\n                        if (base.__update)\n                            base.updateFilterFacets(documentsToShow);\n                    },\n                    updateFilterFacets: function (visibleDocuments) {\n                        var base = this;\n                        base.__filterSelectors.each(function () {\n                            var filterAttr = $(this).data(\"filter\");\n                            var newdistinctValues = { id: filterAttr, values: jQuery.unique(visibleDocuments.map(function () { return $(this).attr(\"ftw-filter-\" + filterAttr); })) };\n                            $(this).find(\"option\").hide();\n                            $(this).find(\"option[value='']\").show();\n                            $(this).find(\"option[value='\" + $(this).val() + \"']\").show();\n                            var optionsToShow = $(this).find(\"option\").filter(function () {\n                                if (jQuery.inArray($(this).val(), newdistinctValues.values) > -1)\n                                    return true;\n                                return false;\n                            });\n                            if (optionsToShow.length > 0) {\n                                optionsToShow.show();\n                            }\n                        });\n                    }\n                };\n                filter.init();\n            };\n            return Filter;\n        }());\n        Bindings.Filter = Filter;\n        ko.bindingHandlers['filter'] = new Filter();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var FloatingMenu = (function () {\n            function FloatingMenu() {\n            }\n            FloatingMenu.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var _ele = $(element);\n                var floatingPosition = _ele.offset();\n                $(document).scroll(function () {\n                    var y = $(this).scrollTop();\n                    if (y >= floatingPosition.top) {\n                        _ele.addClass(\"float\");\n                    }\n                    else {\n                        _ele.removeClass(\"float\");\n                    }\n                });\n            };\n            return FloatingMenu;\n        }());\n        Bindings.FloatingMenu = FloatingMenu;\n        ko.bindingHandlers['floatingMenu'] = new FloatingMenu();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var FocusFirstInputOnClick = (function () {\n            function FocusFirstInputOnClick() {\n            }\n            FocusFirstInputOnClick.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                ko.utils.registerEventHandler(element, \"click\", function (e) {\n                    if (element == e.target) {\n                        $(element).find(\"input[type='text']\").first().focus();\n                    }\n                });\n            };\n            return FocusFirstInputOnClick;\n        }());\n        Bindings.FocusFirstInputOnClick = FocusFirstInputOnClick;\n        ko.bindingHandlers['focusFirstInputOnClick'] = new FocusFirstInputOnClick();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var FormSubmitOnChange = (function () {\n            function FormSubmitOnChange() {\n            }\n            FormSubmitOnChange.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var load = bindingContext.$root.load();\n                var timeout;\n                var text = valueAccessor().text;\n                var delay = valueAccessor().delay;\n                $(element).on(\"change\", function () {\n                    if (!delay) {\n                        load.active(true);\n                        load.text(text);\n                        $(element).submit();\n                    }\n                    else {\n                        clearTimeout(timeout);\n                        timeout = setTimeout(function () {\n                            load.active(true);\n                            load.text(text);\n                            $(element).submit();\n                        }, delay);\n                    }\n                });\n                $(window).unload(function () {\n                    load.active(false);\n                });\n            };\n            return FormSubmitOnChange;\n        }());\n        Bindings.FormSubmitOnChange = FormSubmitOnChange;\n        ko.bindingHandlers['formSubmitOnChange'] = new FormSubmitOnChange();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var InstantSearchButtonControl = (function () {\n            function InstantSearchButtonControl() {\n            }\n            InstantSearchButtonControl.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var resultRowClassName = valueAccessor();\n                var number = -1;\n                var resultCount = -1;\n                var targetElement = $(element);\n                var resultRows = $(resultRowClassName);\n                targetElement.on('submit', function () {\n                    if (number > -1) {\n                        var url = $(resultRowClassName + '.active a').attr('href');\n                        window.location.href = url;\n                        return false;\n                    }\n                    return true;\n                });\n                targetElement.on(\"keydown\", function (e) {\n                    if (e.which == 38 || e.which == 40)\n                        e.preventDefault();\n                });\n                targetElement.bind('input', function (e) {\n                    number = -1;\n                });\n                function upAndDown() {\n                    var resultRows = $(resultRowClassName);\n                    resultCount = resultRows.length - 1;\n                    //Make sure user cant go over or under\n                    if (number > resultCount) {\n                        number = -1;\n                    }\n                    else if (number < -1) {\n                        number = resultCount;\n                    }\n                    resultRows.removeClass('active');\n                    $(resultRowClassName + '.' + number).addClass('active');\n                }\n                targetElement.on(\"keyup\", function (e) {\n                    var code = e.which;\n                    if (code == 40) {\n                        number++;\n                        upAndDown();\n                    }\n                    else if (code == 38) {\n                        number--;\n                        upAndDown();\n                    }\n                });\n            };\n            return InstantSearchButtonControl;\n        }());\n        Bindings.InstantSearchButtonControl = InstantSearchButtonControl;\n        ko.bindingHandlers['instantSearchButtonControls'] = new InstantSearchButtonControl();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var instantSearchButtonControl = (function () {\n            function instantSearchButtonControl() {\n            }\n            instantSearchButtonControl.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var resultRowClassName = valueAccessor();\n                var number = -1;\n                var resultCount = -1;\n                var targetElement = $(element);\n                targetElement.on(\"keydown\", function (e) {\n                    if (e.which == 38 || e.which == 40)\n                        e.preventDefault();\n                });\n                targetElement.bind('input', function (e) {\n                    number = -1;\n                });\n                function upAndDown() {\n                    var resultRows = $(resultRowClassName);\n                    resultCount = resultRows.length - 1;\n                    //Make sure user cant go over or under\n                    if (number > resultCount) {\n                        number = resultCount;\n                    }\n                    else if (number < 1) {\n                        number = 0;\n                    }\n                    resultRows.removeClass('active');\n                    $(resultRowClassName + '.' + number).addClass('active');\n                }\n                targetElement.on(\"keyup\", function (e) {\n                    var code = e.which;\n                    if (code == 40) {\n                        number++;\n                        upAndDown();\n                    }\n                    else if (code == 38) {\n                        number--;\n                        upAndDown();\n                    }\n                    e.preventDefault();\n                });\n            };\n            return instantSearchButtonControl;\n        }());\n        Bindings.instantSearchButtonControl = instantSearchButtonControl;\n        ko.bindingHandlers['instantsearchbuttoncontrols'] = new instantSearchButtonControl();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\n/// <reference path=\"../interfaces/lightsliderconfig.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var LightSlider = (function () {\n            function LightSlider() {\n            }\n            LightSlider.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                //TODO: JQUERY HACK NNO\n                var ele = $(element);\n                bindingContext.$data.lightSlider = ele;\n                ele.lightSlider(valueAccessor());\n            };\n            return LightSlider;\n        }());\n        Bindings.LightSlider = LightSlider;\n        ko.bindingHandlers['lightSlider'] = new LightSlider();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\n/// <reference path=\"../interfaces/lightsliderconfig.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var LightSliderDealer = (function () {\n            function LightSliderDealer() {\n            }\n            LightSliderDealer.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                //TODO: JQUERY HACK NNO\n                var ele = $(element);\n                bindingContext.$data.lightSlider = ele;\n                ele.lightSlider({\n                    gallery: true,\n                    item: 1,\n                    loop: false,\n                    thumbItem: 3,\n                    thumbMargin: 20,\n                    slideMargin: 0,\n                    enableDrag: false,\n                    slideEndAnimation: false,\n                    onSliderLoad: function (el) {\n                        el.lightGallery({});\n                    }\n                });\n            };\n            return LightSliderDealer;\n        }());\n        Bindings.LightSliderDealer = LightSliderDealer;\n        ko.bindingHandlers['lightSliderDealer'] = new LightSliderDealer();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var LoadMoreItems = (function () {\n            function LoadMoreItems() {\n            }\n            LoadMoreItems.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var load = bindingContext.$root.load();\n                var currentPage = valueAccessor().currentPage;\n                var totalPages = valueAccessor().totalPages;\n                var layoutTemplate = valueAccessor().layoutTemplate;\n                var http = new Ftw.Data();\n                var currentlyLoading = false;\n                $(document).scroll(function () {\n                    if (totalPages > currentPage) {\n                        var nextPage = currentPage + 1;\n                        var loadElement = $(element).offset().top;\n                        var y = $(document).scrollTop() + $(window).height();\n                        if (y >= loadElement && currentlyLoading == false) {\n                            currentlyLoading = true;\n                            load.active(true);\n                            load.text(valueAccessor().text);\n                            var data = {\n                                LayoutTemplate: layoutTemplate,\n                                page: nextPage,\n                                ajaxTapas: true\n                            };\n                            http.get(window.location.pathname, data)\n                                .then(function (data) {\n                                var itemData = $(data).children().html();\n                                $(element).before(itemData);\n                                var childBindingContext = bindingContext.createChildContext(viewModel);\n                                currentPage++;\n                                ko.applyBindingsToDescendants(childBindingContext, document.getElementById(nextPage.toString()));\n                            })\n                                .finally(function () {\n                                load.active(false);\n                                load.text(\"\");\n                                currentlyLoading = false;\n                            });\n                        }\n                    }\n                });\n                $(window).unload(function () {\n                    load.active(false);\n                });\n            };\n            return LoadMoreItems;\n        }());\n        Bindings.LoadMoreItems = LoadMoreItems;\n        ko.bindingHandlers['loadMoreItems'] = new LoadMoreItems();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var LoadMoreProducts = (function () {\n            function LoadMoreProducts() {\n            }\n            LoadMoreProducts.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var load = bindingContext.$root.load();\n                var currentPage = valueAccessor().currentPage;\n                var totalPages = valueAccessor().totalPages;\n                var data = new Ftw.Data();\n                var currentlyLoading = false;\n                $(document).scroll(function () {\n                    if (totalPages > currentPage) {\n                        var nextPage = currentPage + 1;\n                        var loadElement = $(element).offset().top;\n                        var y = $(document).scrollTop() + $(window).height();\n                        if (y >= loadElement && currentlyLoading == false) {\n                            currentlyLoading = true;\n                            load.active(true);\n                            load.text(valueAccessor().text);\n                            data.get(window.location.origin + window.location.pathname + (window.location.search ? window.location.search + \"&\" : \"?\") + \"LayoutTemplate=Designs/Tapas/ajax_page.cshtml&ajaxTapas=true&pagenum=\" + nextPage)\n                                .then(function (data) {\n                                var productsHtml = $(data).children().html();\n                                $(element).before(productsHtml);\n                                var childBindingContext = bindingContext.createChildContext(viewModel);\n                                ko.applyBindingsToDescendants(childBindingContext, document.getElementById(nextPage));\n                                currentPage++;\n                                bindingContext.$data.productListLoad(!bindingContext.$data.productListLoad());\n                            })\n                                .finally(function () {\n                                load.active(false);\n                                load.text(\"\");\n                                currentlyLoading = false;\n                            });\n                        }\n                    }\n                });\n                $(window).unload(function () {\n                    load.active(false);\n                });\n            };\n            return LoadMoreProducts;\n        }());\n        Bindings.LoadMoreProducts = LoadMoreProducts;\n        ko.bindingHandlers['loadMoreProducts'] = new LoadMoreProducts();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var LoadOnBool = (function () {\n            function LoadOnBool() {\n            }\n            LoadOnBool.prototype.update = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var load = bindingContext.$root.load();\n                if (ko.unwrap(valueAccessor().observableBool)) {\n                    load.active(true);\n                    load.text(valueAccessor().text);\n                }\n                else {\n                    load.active(false);\n                    load.text(\"\");\n                }\n                $(window).unload(function () {\n                    load.active(false);\n                });\n            };\n            return LoadOnBool;\n        }());\n        Bindings.LoadOnBool = LoadOnBool;\n        ko.bindingHandlers['loadOnBool'] = new LoadOnBool();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var LoadOnClick = (function () {\n            function LoadOnClick() {\n            }\n            LoadOnClick.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var load = bindingContext.$root.load();\n                ko.utils.registerEventHandler(element, \"click\", function () {\n                    load.active(true);\n                    load.text(valueAccessor());\n                });\n                $(window).unload(function () {\n                    load.active(false);\n                });\n            };\n            return LoadOnClick;\n        }());\n        Bindings.LoadOnClick = LoadOnClick;\n        ko.bindingHandlers['loadOnClick'] = new LoadOnClick();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var LoadSubGroup = (function () {\n            function LoadSubGroup() {\n            }\n            LoadSubGroup.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var data = new Ftw.Data();\n                var ele = $(element);\n                ele.click(function (e) {\n                    var parentElement = document.getElementById(valueAccessor().parent);\n                    $(parentElement).addClass(\"load\");\n                    data.get(window.location.origin + \"/\" + valueAccessor().href + \"&LayoutTemplate=Designs/Tapas/ajax_page.cshtml&ajaxTapas=true\")\n                        .then(function (data) {\n                        var subGroupHtml = $(data).html();\n                        var subGroupNumber = $(data).children().attr(\"id\");\n                        $(parentElement).after(subGroupHtml).removeClass(\"active\").delay(200).fadeOut(0);\n                        $(\"#\" + subGroupNumber + \".setSubmenu\").fadeIn(200);\n                        ko.applyBindings(viewModel, document.getElementById(subGroupNumber));\n                    })\n                        .finally(function () {\n                        $(parentElement).removeClass(\"load\");\n                    });\n                    e.stopPropagation();\n                });\n            };\n            return LoadSubGroup;\n        }());\n        Bindings.LoadSubGroup = LoadSubGroup;\n        ko.bindingHandlers['loadSubGroup'] = new LoadSubGroup();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var Menu = (function () {\n            function Menu() {\n            }\n            Menu.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var ele = $(element);\n                ele.click(function (e) {\n                    var _this = $(this);\n                    var target = $(e.target);\n                    if (target.hasClass('visible')) {\n                        _this.removeClass('visible');\n                        if (_this.hasClass(\"menu\")) {\n                            _this.children().fadeOut(200);\n                        }\n                    }\n                    else if (target.hasClass('mobileReset')) {\n                        $('.visible').removeClass('visible').children().fadeOut(200);\n                        bindingContext.$data.menuOpen(true);\n                    }\n                    else if (target.hasClass('item')) {\n                        $('.item.visible').removeClass('visible');\n                        _this.addClass('visible');\n                        bindingContext.$data.menuOpen(true);\n                    }\n                    else if (target.hasClass('hasDrop')) {\n                        $('.visible').removeClass('visible').children().hide();\n                        _this.addClass('visible');\n                        !bindingContext.$data.menuOpen() ? _this.children().fadeIn(200) : _this.children().show();\n                        bindingContext.$data.menuOpen(true);\n                    }\n                    if (target.hasClass('ecom')) {\n                        _this.children().addClass('active').not(':first').remove();\n                    }\n                    e.stopPropagation();\n                });\n            };\n            return Menu;\n        }());\n        Bindings.Menu = Menu;\n        ko.bindingHandlers['menu'] = new Menu();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var PostFilterOnChange = (function () {\n            function PostFilterOnChange() {\n            }\n            PostFilterOnChange.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var load = bindingContext.$root.load();\n                var timeout;\n                $(element).on(\"change\", function () {\n                    clearTimeout(timeout);\n                    timeout = setTimeout(function () {\n                        load.active(!load.active());\n                        load.text(valueAccessor());\n                        $(element).submit();\n                    }, 1000);\n                });\n                $(window).unload(function () {\n                    load.active(false);\n                });\n            };\n            return PostFilterOnChange;\n        }());\n        Bindings.PostFilterOnChange = PostFilterOnChange;\n        ko.bindingHandlers['postFilterOnChange'] = new PostFilterOnChange();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var QuickOrder = (function () {\n            function QuickOrder() {\n            }\n            QuickOrder.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var resultRowClassName = valueAccessor();\n                var number = -1;\n                var resultCount = -1;\n                var targetElement = $(element);\n                var resultRows = $(resultRowClassName);\n                var productName;\n                //Prevent default behaviour \n                targetElement.on(\"keydown\", function (e) {\n                    if (e.which == 38 || e.which == 40 || e.which == 9)\n                        e.preventDefault();\n                });\n                //The function for going up and down        \n                function upAndDown() {\n                    var resultRows = $(resultRowClassName);\n                    resultCount = resultRows.length - 1;\n                    $('#instantBuySearch').focus();\n                    //Make sure user cant go over or under\n                    if (number > resultCount) {\n                        number = -1;\n                    }\n                    else if (number < -1) {\n                        number = resultCount;\n                    }\n                    resultRows.removeClass('active');\n                    $(resultRowClassName + '.' + number).addClass('active');\n                }\n                //The function where we select the product\n                //This is used both with mouse and keyboard\n                function selectProduct() {\n                    var productId;\n                    var productName;\n                    var variantId;\n                    var unitId;\n                    var alreadyInCart;\n                    if ($(\".QuickAddproductCount\").length == 1) {\n                        productId = $(resultRowClassName).attr(\"ftw-productid\");\n                        variantId = $(resultRowClassName).attr(\"ftw-variantId\");\n                        unitId = $(resultRowClassName).attr(\"ftw-unitId\");\n                        alreadyInCart = $(resultRowClassName).attr(\"ftw-alreadyincart\");\n                        productName = $(resultRowClassName).text().replace(/\\s+/g, \" \");\n                    }\n                    else {\n                        productId = $(resultRowClassName + '.' + number).attr(\"ftw-productid\");\n                        variantId = $(resultRowClassName + '.' + number).attr(\"ftw-variantId\");\n                        unitId = $(resultRowClassName + '.' + number).attr(\"ftw-unitId\");\n                        alreadyInCart = $(resultRowClassName + '.' + number).attr(\"ftw-alreadyincart\");\n                        productName = $(resultRowClassName + '.active').text().replace(/\\s+/g, \" \");\n                    }\n                    $(\"#quickOrderForm\").attr(\"ftw-productid\", productId);\n                    $(\"#quickOrderForm\").attr(\"ftw-variantId\", variantId);\n                    $(\"#quickOrderForm\").attr(\"ftw-unitId\", unitId);\n                    $(\"#quickOrderForm\").attr(\"ftw-alreadyincart\", alreadyInCart);\n                    $('.productName').val(productName);\n                    $('#quickOrderQuantity').focus().select();\n                    $(\"#quickOrderQuantity\").bind('input', function () {\n                        var quantity = $('#quickOrderQuantity').val();\n                        $(\"#quickOrderForm\").attr(\"ftw-quantity\", quantity);\n                    });\n                }\n                //The function for resetting everything\n                //This is used both with mouse and keyboard \n                function reset() {\n                    $('.productName').val(\"\");\n                    $(\"#quickOrderForm\").attr(\"ftw-productid\", \"\");\n                    $(\"#quickOrderForm\").attr(\"ftw-variantId\", \"\");\n                    $(\"#quickOrderForm\").attr(\"ftw-quantity\", \"1\");\n                    $(\"#quickOrderForm\").attr(\"ftw-unitid\", \"\");\n                    $(\"#quickOrderForm\").attr(\"ftw-alreadyincart\", \"\");\n                    $(\"#quickOrderQuantity\").val(\"1\");\n                    $('#instantBuySearch').val(\"\").focus();\n                    $('.result').hide();\n                    number = -1;\n                }\n                //On hover we want to set number to the correct product\n                //And we want to add class 'active'\n                $('.result').on('mouseenter', '.customTable .tableRow', function () {\n                    $('.customTable .tableRow').removeClass('active');\n                    $(this).addClass('active');\n                    number = parseInt($(this).attr('ftw-count'));\n                });\n                $('.result').on('mouseleave', '.customTable .tableRow', function () {\n                    $(this).removeClass('active');\n                });\n                $('.result').on('click', '.customTable .tableRow', function () {\n                    selectProduct();\n                });\n                //$('.quickAdd').on('click', function (e) {\n                //    if ($(e.target).hasClass('quickAdd') && productName !== '') {\n                //        $('#quickOrderForm').submit();\n                //        //reset();\n                //    }\n                //});\n                //Here we run the function for going up and down\n                //The select, put to cart and reset functionality\n                targetElement.on(\"keyup\", function (e) {\n                    var code = e.which;\n                    var quantityFocus = $(\"#quickOrderQuantity\").is(\":focus\");\n                    var count = $(\".QuickAddproductCount\").length;\n                    if (code == 40) {\n                        number++;\n                        upAndDown();\n                    }\n                    else if (code == 38) {\n                        number--;\n                        upAndDown();\n                    }\n                    else if ((code == 9 || code == 13) && (number < 0 && count != 1)) {\n                        e.preventDefault();\n                    }\n                    else if ((code == 9 || code == 13) && (number >= 0 || count == 1)) {\n                        resultCount = resultRows.length;\n                        if (quantityFocus == false) {\n                            selectProduct();\n                        }\n                        else if (code !== 9) {\n                            if ($(\"#quickOrderForm\").attr(\"ftw-alreadyincart\")) {\n                                number = -1;\n                            }\n                            else {\n                                reset();\n                            }\n                        }\n                    }\n                    else if (quantityFocus == false) {\n                        number = -1;\n                    }\n                });\n            };\n            return QuickOrder;\n        }());\n        Bindings.QuickOrder = QuickOrder;\n        ko.bindingHandlers['quickOrder'] = new QuickOrder();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var QuillEditor = (function () {\n            function QuillEditor() {\n            }\n            QuillEditor.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var params = valueAccessor();\n                var input = $('input[name=\"' + params.input + '\"]');\n                // @ts-ignore\n                var quill = new Quill(element, {\n                    theme: 'snow',\n                    modules: {\n                        toolbar: [\n                            [{ header: [1, 2, 3, 4, 5, 6, false] }],\n                            ['bold', 'italic', 'underline']\n                        ]\n                    }\n                });\n                quill.on('text-change', function () {\n                    var newValue = quill.container.firstChild.innerHTML;\n                    input.val(newValue);\n                });\n                element.onpaste = function () {\n                    setErrorMessage();\n                    return false;\n                };\n                element.ondragover = function () {\n                    setErrorMessage();\n                    return false;\n                };\n                function setErrorMessage() {\n                    $(params.pasteErrorMessage).addClass('edit-storefront__paste-error--active');\n                }\n            };\n            return QuillEditor;\n        }());\n        Bindings.QuillEditor = QuillEditor;\n        ko.bindingHandlers['quillEditor'] = new QuillEditor();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\nvar App;\n(function (App) {\n    var Bindings;\n    (function (Bindings) {\n        var ScrollToTop = (function () {\n            function ScrollToTop() {\n            }\n            ScrollToTop.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                var value = valueAccessor();\n                var scrollItem = $(element);\n                ko.utils.registerEventHandler(element, \"click\", function () {\n                    $(\"html, body\").animate({ scrollTop: 0 }, \"ease\");\n                });\n                $(window).scroll(function () {\n                    if ($(\"html, body\").scrollTop() > 300) {\n                        scrollItem.addClass(\"active\");\n                    }\n                    else {\n                        scrollItem.removeClass(\"active\");\n                    }\n                });\n            };\n            return ScrollToTop;\n        }());\n        Bindings.ScrollToTop = ScrollToTop;\n        ko.bindingHandlers['scrollToTop'] = new ScrollToTop();\n    })(Bindings = App.Bindings || (App.Bindings = {}));\n})(App || (App = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var SpinEdit = (function () {\n            function SpinEdit() {\n            }\n            SpinEdit.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var params = valueAccessor();\n                if (params.updateObservable) {\n                    $(element).val(params.updateObservable());\n                    $(element).spinedit(params.updateObservable);\n                }\n                else {\n                    $(element).spinedit(params.minimum);\n                }\n                $(element).on(\"valueChanged\", function (e) {\n                    $(element).parent().parent().find(\".addToCart\").attr(\"ftw-quantity\", e.value);\n                    //$(element).parent().parent().find(\".ordertemplatedialogquantity\").attr(\"ftw-quantity\", e.value);\n                    if (params.updateObservable) {\n                        params.updateObservable(e.value);\n                    }\n                    //params.updateObservable(e.value);\n                });\n            };\n            return SpinEdit;\n        }());\n        Bindings.SpinEdit = SpinEdit;\n        ko.bindingHandlers['spinEdit'] = new SpinEdit();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/sweetalert/sweetalert.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var SweetAlert = (function () {\n            function SweetAlert() {\n            }\n            SweetAlert.prototype.update = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var params = valueAccessor();\n                var value = ko.unwrap(params.observable);\n                if (value != '') {\n                    //Confirmation\n                    var callBack = params.callBack;\n                    var headline = params.headLine || 'Are you sure?'; // set a swal headline.\n                    var text = params.text || ''; // set a swal text.\n                    var type = params.success || 'warning'; // set the type of the swal \"success\"(default), \"error\" or \"warning\".\n                    var confirmation = params.confirmation || true; // control if you want a confirmation button\n                    var confirmationText = params.confirmationText || 'Ok'; // set confirmation text on button\n                    var closeOnConfirm = params.closeOnConfirm || true; // Close on confirm\n                    var confirmationButtonColor = params.confirmationButtonColor || '#DD6B55'; // Close on confirm\n                    var cancelButtonText = params.cancelButtonText || 'Annuller';\n                    //fail\n                    var failHeadline = params.failHeadline || '';\n                    var failText = params.failText || '';\n                    var failType = 'error';\n                    //succes\n                    var succesHeadline = params.successHeadline || '';\n                    var successText = params.successText || '';\n                    var successType = 'success';\n                    //warning\n                    var warningHeadline = params.warningHeadline || '';\n                    var warningText = params.warningText || '';\n                    var warningType = 'warning';\n                    // The user confirms then exit or confirms, on confirm run the callback function \n                    if (value == 'confirmation') {\n                        swal({\n                            title: headline,\n                            text: text,\n                            type: type,\n                            showCancelButton: confirmation,\n                            confirmButtonColor: confirmationButtonColor,\n                            confirmButtonText: confirmationText,\n                            closeOnConfirm: closeOnConfirm,\n                            cancelButtonText: cancelButtonText\n                        }, function () {\n                            callBack();\n                        });\n                    }\n                    //The user recieves the fail info provided in the dom\n                    if (value == 'fail') {\n                        swal({\n                            title: failHeadline,\n                            text: failText,\n                            type: failType\n                        });\n                    }\n                    //The user recieves the success info in the dom\n                    if (value == 'success') {\n                        swal({\n                            title: succesHeadline,\n                            text: successText,\n                            type: successType\n                        });\n                    }\n                    //The user recieves the warning info in the dom\n                    if (value == 'warning') {\n                        swal({\n                            title: warningHeadline,\n                            text: warningText,\n                            type: warningType\n                        });\n                    }\n                    params.observable('');\n                }\n            };\n            return SweetAlert;\n        }());\n        Bindings.SweetAlert = SweetAlert;\n        ko.bindingHandlers['sweetAlert'] = new SweetAlert();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var ToggleClick = (function () {\n            function ToggleClick() {\n            }\n            ToggleClick.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var value = valueAccessor();\n                ko.utils.registerEventHandler(element, \"click\", function () {\n                    value(!value());\n                });\n            };\n            return ToggleClick;\n        }());\n        Bindings.ToggleClick = ToggleClick;\n        ko.bindingHandlers['toggleClick'] = new ToggleClick();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var ToggleClassParent = (function () {\n            function ToggleClassParent() {\n            }\n            ToggleClassParent.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                element = $(element);\n                var value = valueAccessor();\n                $(element).click(function () {\n                    $(this).parent().toggleClass(value);\n                });\n            };\n            return ToggleClassParent;\n        }());\n        Bindings.ToggleClassParent = ToggleClassParent;\n        ;\n        ko.bindingHandlers['toggleClassParent'] = new ToggleClassParent();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\nvar Tapas;\n(function (Tapas) {\n    var Bindings;\n    (function (Bindings) {\n        var VideoPopup = (function () {\n            function VideoPopup() {\n            }\n            VideoPopup.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                element = $(element);\n                var values = valueAccessor(), startUrl = values.startUrl, videoID = values.urlId, settings = values.settings, videoUrl = startUrl + videoID + settings, videoModal = values.modalSelector, modalClosewButtonSelector = values.modalClosewButtonSelector;\n                element.on('click', function () {\n                    $(videoModal).prepend(\"<iframe width class='modal-embed' src=\" + videoUrl + \" allowfullscreen=''></iframe>\");\n                });\n                $(modalClosewButtonSelector).on('click', function () {\n                    $(\".modal-embed\").remove();\n                });\n            };\n            return VideoPopup;\n        }());\n        Bindings.VideoPopup = VideoPopup;\n        ;\n        ko.bindingHandlers['videoPopup'] = new VideoPopup();\n    })(Bindings = Tapas.Bindings || (Tapas.Bindings = {}));\n})(Tapas || (Tapas = {}));\n\n\n\n\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../interfaces/lightsliderconfig.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Tapas;\n(function (Tapas) {\n    var ViewModels;\n    (function (ViewModels) {\n        var CartViewModel = (function (_super) {\n            __extends(CartViewModel, _super);\n            function CartViewModel() {\n                var _this = this;\n                _super.call(this);\n                this.Cart = Ftw.Core.InstanceManager.get('Cart');\n                this.CartDataService = new Ftw.Dataservice.CartDataserviceDynamicweb;\n                this.CartLoading = ko.observable(false);\n                this.CheckoutPageId = ko.observable(0);\n                this.CartHtml = ko.observable(\"\");\n                this.CartTotal = ko.observable(\"\");\n                this.CartState = ko.observable(\"notVisible\"); //empty //populated\n                this.data = new Ftw.Data();\n                this.EmptyCartStatus = ko.observable('');\n                this.GetCurrentFromModule = function () {\n                    var cartObject = _this.Cart();\n                    if (_this.CheckoutPageId() != 0) {\n                        var data = {\n                            ID: _this.CheckoutPageId(),\n                            LayoutTemplate: \"Designs/Tapas/ajax_page.cshtml\",\n                            ajaxTapas: true\n                        };\n                        _this.data.postForm(\"Default.aspx\", data)\n                            .then(function (data) {\n                            if (cartObject.TotalProductQuantity() == 0) {\n                                _this.CartState(\"empty\");\n                            }\n                            else {\n                                // We maybe need to reverse the minicart order RSH 23-05-16\n                                // Here we put the products in a array and reverse them\n                                //var dataReversed = $($(data).find(\".orderline\").get().reverse());\n                                //console.log(dataReversed);\n                                _this.CartState(\"populated\");\n                                _this.CartHtml($(data).find(\".lines\").html());\n                                _this.CartTotal($(data).find(\".total\").html());\n                                ko.applyBindings(_this, document.getElementById(\"orderlines\"));\n                            }\n                        })\n                            .finally(function () {\n                            _this.CartLoading(false);\n                        });\n                    }\n                    else {\n                        _this.CartLoading(false);\n                    }\n                };\n                this.AddProduct = function (data, event) {\n                    var _target = $(event.target);\n                    var quantity = parseInt(_target.attr(\"ftw-quantity\"));\n                    var productId = _target.attr(\"ftw-productid\");\n                    var comment = _target.attr(\"ftw-comment\");\n                    var variantId = _target.attr(\"ftw-variantId\");\n                    var unitId = _target.attr(\"ftw-unitId\");\n                    if (productId != '') {\n                        _this.CartLoading(true);\n                        //Ex p� at added noget med et custom order linje felt der har systemnavnet \"Comment\"\n                        //this.CartDataService.AddProduct({ productId, quantity, orderLineFields: [{ systemName: 'Comment', value: 'Dette er en kommentar' }] })\n                        _this.CartDataService.AddProduct({ productId: productId, quantity: quantity, variantId: variantId, unitId: unitId })\n                            .finally(function () {\n                            _this.CartLoading(false);\n                        });\n                    }\n                };\n                this.AddProductOnSubmit = function (data, event) {\n                    var quantity = parseInt(data.getAttribute(\"ftw-quantity\"));\n                    var productId = data.getAttribute(\"ftw-productid\");\n                    var variantId = data.getAttribute(\"ftw-variantid\");\n                    var unitId = data.getAttribute(\"ftw-unitId\");\n                    var alreadyInCart = data.getAttribute(\"ftw-alreadyincart\");\n                    if (alreadyInCart) {\n                        $('.js-quickorder-already-in-cart-modal').modal('show');\n                    }\n                    else if (productId != '') {\n                        _this.CartLoading(true);\n                        _this.CartDataService.AddProduct({ productId: productId, quantity: quantity, variantId: variantId, unitId: unitId })\n                            .finally(function () {\n                            _this.CartLoading(false);\n                        });\n                    }\n                };\n                this.AddProductOnSubmitPage = function (data, event) {\n                    var quantity = parseInt(data.getAttribute(\"ftw-quantity\"));\n                    var productId = data.getAttribute(\"ftw-productid\");\n                    var variantId = data.getAttribute(\"ftw-variantid\");\n                    var unitId = data.getAttribute(\"ftw-unitId\");\n                    var alreadyInCart = data.getAttribute(\"ftw-alreadyincart\");\n                    if (alreadyInCart) {\n                        $('.js-quickorder-page-already-in-cart-modal').modal('show');\n                    }\n                    else if (productId != '') {\n                        _this.CartLoading(true);\n                        _this.CartDataService.AddProduct({ productId: productId, quantity: quantity, variantId: variantId, unitId: unitId })\n                            .finally(function () {\n                            _this.CartLoading(false);\n                        });\n                    }\n                };\n                this.QuickOrderAddExistingProduct = function (data, event) {\n                    var form = $(\"#quickOrderForm\");\n                    var quantity = parseInt(form.attr(\"ftw-quantity\"));\n                    var productId = form.attr(\"ftw-productid\");\n                    var variantId = form.attr(\"ftw-variantid\");\n                    var unitId = form.attr(\"ftw-unitId\");\n                    if (productId != '') {\n                        _this.CartLoading(true);\n                        _this.CartDataService.AddProduct({ productId: productId, quantity: quantity, variantId: variantId, unitId: unitId })\n                            .finally(function () {\n                            _this.CartLoading(false);\n                            _this.ResetQuickOrder();\n                        });\n                    }\n                };\n                this.QuickOrderAddExistingProductPage = function (data, event) {\n                    var form = $(\"#quickOrderFormPage\");\n                    var quantity = parseInt(form.attr(\"ftw-quantity\"));\n                    var productId = form.attr(\"ftw-productid\");\n                    var variantId = form.attr(\"ftw-variantid\");\n                    var unitId = form.attr(\"ftw-unitId\");\n                    if (productId != '') {\n                        _this.CartLoading(true);\n                        _this.CartDataService.AddProduct({ productId: productId, quantity: quantity, variantId: variantId, unitId: unitId })\n                            .finally(function () {\n                            _this.CartLoading(false);\n                            _this.ResetQuickOrder();\n                        });\n                    }\n                };\n                this.AddProductFromProductViewModel = function (vm) {\n                    _this.CartLoading(true);\n                    _this.CartDataService.AddProduct({ productId: vm.ProductId(), quantity: vm.Quantity(), variantId: vm.VariantId(), unitId: vm.UnitId(), orderLineFields: [{ systemName: 'Comment', value: vm.Comment() }] })\n                        .finally(function () {\n                        _this.CartLoading(false);\n                        vm.AlreadyInCart(true);\n                    });\n                };\n                this.ResetQuickOrder = function () {\n                    $('.productName').val(\"\");\n                    $(\"#quickOrderForm\").attr(\"ftw-productid\", \"\");\n                    $(\"#quickOrderForm\").attr(\"ftw-variantId\", \"\");\n                    $(\"#quickOrderForm\").attr(\"ftw-quantity\", \"1\");\n                    $(\"#quickOrderForm\").attr(\"ftw-unitid\", \"\");\n                    $(\"#quickOrderForm\").attr(\"ftw-alreadyincart\", \"\");\n                    $(\"#quickOrderQuantity\").val(\"1\");\n                    $('#instantBuySearch').val(\"\").focus();\n                    $('.result').hide();\n                    $('.productNamePage').val(\"\");\n                    $(\"#quickOrderFormPage\").attr(\"ftw-productid\", \"\");\n                    $(\"#quickOrderFormPage\").attr(\"ftw-variantId\", \"\");\n                    $(\"#quickOrderFormPage\").attr(\"ftw-quantity\", \"1\");\n                    $(\"#quickOrderFormPage\").attr(\"ftw-unitid\", \"\");\n                    $(\"#quickOrderQuantityPage\").val(\"1\");\n                    $('#instantBuySearchPage').val(\"\").focus();\n                };\n                this.UpdateQuantity = function (data, event) {\n                    clearTimeout(_this.timeout);\n                    var _target = $(event.target);\n                    var orderLineId = _target.attr(\"ftw-olid\");\n                    var quantity = parseInt(_target.val());\n                    if (quantity === 0) {\n                        _this.DeleteOrderLine(data, event);\n                        return;\n                    }\n                    _this.timeout = setTimeout(function () {\n                        _this.CartLoading(true);\n                        _this.CartDataService.UpdateCartLineQuantity(orderLineId, quantity)\n                            .then(function () {\n                            _this.GetCurrentFromModule();\n                        })\n                            .fail(function () {\n                            _this.CartLoading(false);\n                        });\n                    }, 1000);\n                };\n                this.DeleteOrderLine = function (data, event) {\n                    var _target = $(event.target);\n                    var orderLineId = _target.attr(\"ftw-olid\");\n                    _this.CartLoading(true);\n                    _this.CartDataService.DeleteCartLine(orderLineId)\n                        .then(function (result) {\n                        //this.GetCurrentFromModule();\n                    }).fail(function () {\n                        _this.CartLoading(false);\n                    });\n                };\n                this.ConfirmEmptyCart = function () {\n                    _this.EmptyCartStatus('confirmation');\n                };\n                this.EmptyCart = function () {\n                    _this.CartLoading(true);\n                    _this.CartDataService.EmptyCart()\n                        .then(function (result) {\n                        _this.GetCurrentFromModule();\n                    }).fail(function () {\n                        _this.CartLoading(false);\n                    });\n                };\n                this.CartHtmlDefined = ko.computed({\n                    owner: this,\n                    read: function () {\n                        return _this.CartHtml() == \"\" ? false : true;\n                    }\n                });\n            }\n            return CartViewModel;\n        }(Ftw.ViewModels.BaseViewModel));\n        ViewModels.CartViewModel = CartViewModel;\n    })(ViewModels = Tapas.ViewModels || (Tapas.ViewModels = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/knockout.validation/knockout.validation.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/sweetalert/sweetalert.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Tapas;\n(function (Tapas) {\n    var ViewModels;\n    (function (ViewModels) {\n        var CustomerCenterViewModel = (function (_super) {\n            __extends(CustomerCenterViewModel, _super);\n            function CustomerCenterViewModel() {\n                var _this = this;\n                _super.call(this);\n                this.UserDataService = new Ftw.Dataservice.UserDataservice();\n                this.data = new Ftw.Data();\n                this.UserContacts = ko.observableArray([]);\n                this.OrderTemplateDetailsLink = ko.observable('');\n                this.OrderTemplateList = ko.observableArray([]);\n                this.OrderTemplateDataService = new Ftw.Dataservice.OrderTemplateDataservice();\n                this.OrderTemplateNewListName = ko.observable('');\n                this.OrderTemplateListVisible = ko.observable(false);\n                this.NewUserStatus = ko.observable('');\n                this.UserContactListVisible = ko.observable(false);\n                this.UserEditContactInfoVisible = ko.observable(false);\n                this.EditName = ko.observable('');\n                this.EditPhone = ko.observable('');\n                this.EditEmail = ko.observable('');\n                this.EditId = ko.observable('');\n                this.UserId = ko.observable('');\n                //function for editing user\n                this.editUser = function (data) {\n                    _this.EditName(data.Name());\n                    _this.EditPhone(data.Phone());\n                    _this.EditEmail(data.Email());\n                    _this.EditId(data.Id());\n                };\n                //Function for saving edited user\n                this.SaveEditUser = function (form) {\n                    var data = $(form).serialize();\n                    _this.data.postForm('/Handlers/Firstweb.ERP.Users.ashx?cmd=saveuser', data)\n                        .then(function (json) {\n                        if (json.ERPStatus.Code != 0) {\n                            $('.status').removeClass('show');\n                            $('.error-' + json.ERPStatus.Code).addClass('show');\n                        }\n                        else {\n                            $('#UserEdit').modal('hide');\n                            $('.status').removeClass('show');\n                            _this.UserDataService.GetContacts().then(function (data) {\n                                _this.UserContacts(data);\n                            });\n                        }\n                    }).fail(function () {\n                        _this.NewUserStatus('error');\n                    });\n                };\n                //Function for editing user info\n                this.save = function (form) {\n                    var data = $(form).serialize();\n                    _this.data.postForm('/Handlers/Firstweb.ERP.Users.ashx?cmd=saveuser', data)\n                        .then(function (json) {\n                        if (json.ERPStatus.Code != 0) {\n                            $('.status').removeClass('show');\n                            $('.error-' + json.ERPStatus.Code).addClass('show');\n                        }\n                        else {\n                            $('.status').removeClass('show');\n                            $('.userInfo').modal('hide');\n                            _this.NewUserStatus('success');\n                            _this.UserDataService.GetCurrent().then(function (user) {\n                            });\n                        }\n                    }).fail(function () {\n                        _this.NewUserStatus('error');\n                    });\n                };\n                //Function for making a new user\n                //TODO : loading and finaly\n                this.makeNewUser = function (form) {\n                    var data = $(form).serialize();\n                    _this.data.postForm('/Handlers/Firstweb.ERP.Users.ashx?cmd=createuser', data)\n                        .then(function (json) {\n                        var user = json.Data;\n                        if (json.ERPStatus.Code != 0) {\n                            $('.status').removeClass('show');\n                            $('.error-' + json.ERPStatus.Code).addClass('show');\n                        }\n                        else {\n                            $('.status').removeClass('show');\n                            _this.UserDataService.GetContacts().then(function (data) {\n                                _this.UserContacts(data);\n                            });\n                            $('#Users').modal('hide');\n                            _this.NewUserStatus('success');\n                            $(\"#Users #EditForm input\").val(\"\");\n                            $(\"#Users #EditForm #userid\").val(\"0\");\n                        }\n                    }).fail(function () {\n                        _this.NewUserStatus('error');\n                    });\n                };\n                this.delete = function (data) {\n                    _this.NewUserStatus('confirmation');\n                    _this.UserId(data.Id());\n                };\n                //Function for deleting a user\n                //TODO : Loading animation and finaly\n                this.deleteUser = function () {\n                    _this.data.get('/Handlers/Firstweb.ERP.Users.ashx?cmd=deleteuser&userid=' + _this.UserId()).then(function () {\n                        _this.UserDataService.GetContacts().then(function (data) {\n                            _this.UserContacts(data);\n                            _this.NewUserStatus('success');\n                        }).fail(function () {\n                            _this.NewUserStatus('error');\n                        }).finally(function () {\n                        });\n                    });\n                };\n                //Function for making a new list\n                this.makeNewList = function () {\n                    var listName = _this.OrderTemplateNewListName();\n                    if (!_this.OrderTemplateNewListName.isValid()) {\n                        return;\n                    }\n                    _this.OrderTemplateDataService.CreateNewOrderTemplate(listName)\n                        .then(function (result) {\n                        _this.OrderTemplateList.unshift(result);\n                        $('.productListPopup').modal('hide');\n                    }).fail(function () {\n                        _this.NewUserStatus('error');\n                    });\n                };\n                //this.UserDataService.GetCurrent().then((user) => {\n                //});\n                this.UserDataService.GlobalInstanceUpdateOnSuccess = false;\n                this.UserDataService.GetContacts().then(function (data) {\n                    _this.UserContacts(data);\n                });\n                this.OrderTemplateDataService.GetOrderTemplates().then(function (result) {\n                    _this.OrderTemplateList(result);\n                });\n                this.OrderTemplateNewListName.extend({\n                    required: true,\n                    minLength: 3\n                });\n                var Id = 0;\n            }\n            CustomerCenterViewModel.prototype.GetOrderTemplates = function (productId) {\n                var _this = this;\n                this.OrderTemplateDataService.GetOrderTemplates(productId || '').then(function (result) {\n                    _this.OrderTemplateList(result);\n                });\n            };\n            CustomerCenterViewModel.prototype.GetOrderTemplateDetailLink = function (item) {\n                return this.OrderTemplateDetailsLink() + '&otid=' + item.Key();\n            };\n            return CustomerCenterViewModel;\n        }(Ftw.ViewModels.BaseViewModel));\n        ViewModels.CustomerCenterViewModel = CustomerCenterViewModel;\n    })(ViewModels = Tapas.ViewModels || (Tapas.ViewModels = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/knockout.validation/knockout.validation.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Tapas;\n(function (Tapas) {\n    var ViewModels;\n    (function (ViewModels) {\n        var EditStorefrontViewModel = (function (_super) {\n            __extends(EditStorefrontViewModel, _super);\n            function EditStorefrontViewModel() {\n                var _this = this;\n                _super.call(this);\n                this.data = new Ftw.Data();\n                this.storeImages = ko.observableArray();\n                this.webshopScreenshot = ko.observable(\"\");\n                this.webshopPageHeader = ko.observable(\"\");\n                this.loading = ko.observable(false);\n                this.address = ko.observable('');\n                this.zip = ko.observable('');\n                this.city = ko.observable('');\n                this.country = ko.observable('');\n                this.customLat = ko.observable('');\n                this.customLng = ko.observable('');\n                this.geocodingApiKey = ko.observable('');\n                this.addressComplete = ko.computed(function () {\n                    if (_this.address() != '' && _this.zip() != '' && _this.city() != '' && _this.country() != '') {\n                        return true;\n                    }\n                    else {\n                        return false;\n                    }\n                });\n                this.fullAddress = ko.computed(function () {\n                    return _this.address() + ', ' + _this.zip() + ' ' + _this.city() + ', ' + _this.country();\n                });\n                this.UpdateImages = function () {\n                    _this.GetStoreImages();\n                    _this.GetWebshopScreenshot();\n                    _this.GetWebshopPageHeader();\n                };\n                this.GetStoreImages = function () {\n                    _this.data.get('/Handlers/DealerImageHandler.ashx?cmd=getshopimages')\n                        .then(function (json) {\n                        _this.storeImages(json.Data);\n                        if (json.ERPStatus.Success == true) {\n                            _this.storeImages(json.Data);\n                        }\n                    });\n                };\n                this.GetWebshopScreenshot = function () {\n                    _this.data.get('/Handlers/DealerImageHandler.ashx?cmd=getscreenshot')\n                        .then(function (json) {\n                        if (json.ERPStatus.Success == true) {\n                            var query = new Date().getTime();\n                            _this.webshopScreenshot(json.Data);\n                            if (_this.webshopScreenshot()) {\n                                _this.webshopScreenshot(_this.webshopScreenshot() + '?' + query);\n                            }\n                        }\n                    });\n                };\n                this.GetWebshopPageHeader = function () {\n                    _this.data.get('/Handlers/DealerImageHandler.ashx?cmd=getheaderimage')\n                        .then(function (json) {\n                        if (json.ERPStatus.Success == true) {\n                            var query = new Date().getTime();\n                            _this.webshopPageHeader(json.Data);\n                            if (_this.webshopPageHeader()) {\n                                _this.webshopPageHeader(_this.webshopPageHeader() + '?' + query);\n                            }\n                        }\n                    });\n                };\n                this.DeleteShopImage = function (imagename, modal) {\n                    _this.data.get('/Handlers/DealerImageHandler.ashx?cmd=deleteshopimage&imagename=' + imagename)\n                        .then(function (json) {\n                        if (json.ERPStatus.Success == true) {\n                            $(modal).modal('hide');\n                            $(modal).on('hidden.bs.modal', function () {\n                                _this.UpdateImages();\n                            });\n                        }\n                    });\n                };\n                this.DeleteWebshopScreenshot = function (modal) {\n                    _this.data.get('/Handlers/DealerImageHandler.ashx?cmd=deletewebshopscreenshot')\n                        .then(function (json) {\n                        if (json.ERPStatus.Success == true) {\n                            $(modal).modal('hide');\n                            _this.UpdateImages();\n                        }\n                    });\n                };\n                this.DeletePageHeader = function (modal) {\n                    _this.data.get('/Handlers/DealerImageHandler.ashx?cmd=deletewebshopheader')\n                        .then(function (json) {\n                        if (json.ERPStatus.Success == true) {\n                            $(modal).modal('hide');\n                            _this.UpdateImages();\n                        }\n                    });\n                };\n                this.UploadImage = function (form) {\n                    var data = new FormData(form[0]);\n                    var cmd = form.data('function');\n                    _this.loading(true);\n                    $.ajax({\n                        type: \"POST\",\n                        url: '/Handlers/DealerImageHandler.ashx?cmd=' + cmd + '&imagekey=uploadimage',\n                        data: data,\n                        processData: false,\n                        contentType: false,\n                        success: function (data) {\n                            if (data.ERPStatus.Success) {\n                                _this.UpdateImages();\n                            }\n                            else {\n                                if (cmd == \"uploadshopimage\") {\n                                    _this.OpenModal('.js-upload-error-modal');\n                                }\n                                else {\n                                    _this.OpenModal('.js-upload-error-small-modal');\n                                }\n                            }\n                            _this.loading(false);\n                        }\n                    });\n                };\n                this.OpenModal = function (modalSelector) {\n                    $(modalSelector).modal('show');\n                };\n                this.SetErrorMessageForWebsiteInput = function () {\n                    var el = $('.js-website-regex')[0];\n                    if (el != null && el != undefined) {\n                        var errorMessage = el.getAttribute('data-error');\n                        //@ts-ignore\n                        el.oninvalid = function () {\n                            //@ts-ignore\n                            this.setCustomValidity(errorMessage);\n                            el.oninput = function () {\n                                //@ts-ignore\n                                this.setCustomValidity('');\n                            };\n                        };\n                    }\n                };\n                this.GetLatLang = function () {\n                    var encodedAddress = encodeURI(_this.fullAddress());\n                    $.ajax({\n                        type: \"GET\",\n                        url: 'https://maps.googleapis.com/maps/api/geocode/json?address=' + encodedAddress + '&key=' + _this.geocodingApiKey()\n                    }).then(function (response) {\n                        if (response.results.length > 0) {\n                            _this.customLat(response.results[0].geometry.location.lat);\n                            _this.customLng(response.results[0].geometry.location.lng);\n                        }\n                    });\n                };\n                $('.js-image-upload').change(function (e) {\n                    var form = $(e.currentTarget).parent('form');\n                    _this.UploadImage(form);\n                });\n                this.UpdateImages();\n                this.SetErrorMessageForWebsiteInput();\n                var geolocationTimeouts = [];\n                this.fullAddress.subscribe(function () {\n                    for (var i = 0; i < geolocationTimeouts.length; i++) {\n                        clearTimeout(geolocationTimeouts[i]);\n                    }\n                    if (_this.addressComplete()) {\n                        var to = setTimeout(function () {\n                            _this.GetLatLang();\n                        }, 500);\n                        geolocationTimeouts.push(to);\n                    }\n                });\n            }\n            return EditStorefrontViewModel;\n        }(Ftw.ViewModels.BaseViewModel));\n        ViewModels.EditStorefrontViewModel = EditStorefrontViewModel;\n    })(ViewModels = Tapas.ViewModels || (Tapas.ViewModels = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../interfaces/lightsliderconfig.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/knockout.validation/knockout.validation.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Tapas;\n(function (Tapas) {\n    var ViewModels;\n    (function (ViewModels) {\n        var FrontpageViewModel = (function (_super) {\n            __extends(FrontpageViewModel, _super);\n            function FrontpageViewModel() {\n                _super.call(this);\n                this.lightSliderConfig = {\n                    item: 1,\n                    auto: true,\n                    loop: true,\n                    slideMargin: 0,\n                    speed: 700,\n                    pause: 7000,\n                    pauseOnHover: true,\n                    pager: true,\n                    enableDrag: false,\n                    controls: false\n                };\n            }\n            return FrontpageViewModel;\n        }(Ftw.ViewModels.BaseViewModel));\n        ViewModels.FrontpageViewModel = FrontpageViewModel;\n    })(ViewModels = Tapas.ViewModels || (Tapas.ViewModels = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Tapas;\n(function (Tapas) {\n    var ViewModels;\n    (function (ViewModels) {\n        var InstantSearchViewModel = (function (_super) {\n            __extends(InstantSearchViewModel, _super);\n            function InstantSearchViewModel() {\n                var _this = this;\n                _super.call(this);\n                this.allResults = ko.observable(false);\n                this.asyncSearch = function () {\n                    var query = _this.searchQuery();\n                    clearTimeout(_this.timeOut);\n                    _this.searchLoading(false);\n                    if (query.length > 1) {\n                        _this.allResults(true);\n                        _this.searchLoading(true);\n                        _this.timeOut = setTimeout(function () {\n                            _this.data.get(_this.getSearchUrl())\n                                .then(function (data) {\n                                _this.result(data);\n                                if (!($(data).children().hasClass(\"quickOrder\") || $(data).children().hasClass(\"instantSearchNoResult\"))) {\n                                    ko.applyBindings(_this, document.getElementById(query));\n                                }\n                            }).finally(function () {\n                                _this.searchLoading(false);\n                            });\n                        }, 250);\n                    }\n                    else {\n                        _this.allResults(false);\n                    }\n                };\n                this.searchQuery = ko.observable(\"\");\n                this.AddonQueryString = ko.observable(\"\");\n                this.searchQuery.subscribe(this.asyncSearch);\n                this.instantSearchPageId = ko.observable(0);\n                this.result = ko.observable(\"\");\n                this.data = new Ftw.Data();\n                this.quickOrderOpen = ko.observable(false);\n                this.searchLoading = ko.observable(false);\n                this.getSearchUrl = ko.computed({\n                    owner: this,\n                    read: function () {\n                        return \"Default.aspx?ID=\" + _this.instantSearchPageId() + \"&Search=\" + (_this.searchQuery() + _this.AddonQueryString()).replace(/ /g, '+');\n                    }\n                });\n            }\n            return InstantSearchViewModel;\n        }(Tapas.ViewModels.CartViewModel));\n        ViewModels.InstantSearchViewModel = InstantSearchViewModel;\n    })(ViewModels = Tapas.ViewModels || (Tapas.ViewModels = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../interfaces/lightsliderconfig.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Tapas;\n(function (Tapas) {\n    var ViewModels;\n    (function (ViewModels) {\n        var LoginViewModel = (function (_super) {\n            __extends(LoginViewModel, _super);\n            function LoginViewModel() {\n                _super.call(this);\n                this.UserName = ko.observable('');\n                this.Password = ko.observable('');\n                this.logger = Ftw.Base.Config.Logger;\n                this.UserDataService = new Ftw.Dataservice.UserDataservice();\n                //this.User = ko.observable(new Ftw.Dto.User);      \n                this.Loader = ko.observable(true);\n                this.ForgottenLoader = ko.observable(false);\n                this.newUserLoader = ko.observable(false);\n                this.LoginFailed = ko.observable(false);\n                this.ToggleForgottenPassword = ko.observable(true);\n                //this.GetCurrent();\n                this.rememberMe = ko.observable(false);\n                this.email = ko.observable('');\n                this.data = new Ftw.Data();\n                this.confirmation = ko.observable(\"\");\n                this.addFocus = ko.observable(false);\n                this.makeNewUserOpen = ko.observable(false);\n                this.loginModal = ko.observable(\"\");\n                this.newUserModal = ko.observable(\"\");\n                this.setFocusLogin();\n                this.loginId = ko.observable(0);\n                this.companyName = ko.observable(\"\");\n                this.contactperson = ko.observable(\"\");\n                this.useremail = ko.observable(\"\");\n                this.phone = ko.observable(\"\");\n                this.address1 = ko.observable(\"\");\n                this.address2 = ko.observable(\"\");\n                this.ean = ko.observable(\"\");\n                this.zip = ko.observable(\"\");\n                this.country = ko.observable(\"\");\n                this.cvr = ko.observable(\"\");\n                this.successOrFail = ko.observable(false);\n                this.group = ko.observable(\"\");\n                this.city = ko.observable(\"\");\n            }\n            //Set focus when user clicks login\n            LoginViewModel.prototype.setFocusLogin = function () {\n                var _this = this;\n                $(this.loginModal).on(\"shown.bs.modal\", function () {\n                    _this.addFocus(true);\n                });\n            };\n            //Login function, checksfor fails and gives the user a message\n            LoginViewModel.prototype.Login = function () {\n                var _this = this;\n                var login = new Ftw.Dto.LoginRequest(this.UserName(), this.Password(), this.rememberMe());\n                this.UserDataService.Login(login).then(function (user) {\n                    if (user.IsLoggedIn()) {\n                        _this.logger.debug('login successfull');\n                        //this.User(user);\n                        setTimeout(function () {\n                            return window.location.reload();\n                        }, 1000);\n                    }\n                    else {\n                        _this.logger.debug('login failed');\n                        _this.LoginFailed(true);\n                        setTimeout(function () {\n                            return _this.LoginFailed(false);\n                        }, 2000);\n                    }\n                    setTimeout(function () {\n                        return _this.Loader(true);\n                    }, 2000);\n                }).catch(function (error) {\n                    _this.logger.debug(error);\n                });\n            };\n            //Recover password function\n            LoginViewModel.prototype.recover = function () {\n                var _this = this;\n                this.ForgottenLoader(true);\n                var data = {\n                    AccessUserEmail: this.email(),\n                    ForgotPasswordMailTemplate: 'Usermanagement/Login/mail.html',\n                    ForgotPasswordSenderEmail: 'robot@1stweb.dk',\n                    ForgotPasswordMailSubject: 'Her er dit password'\n                };\n                this.data.postForm('/Default.aspx?ID=' + this.loginId + '&LoginAction=Recovery', data)\n                    .then(function (data) {\n                    _this.confirmation(data);\n                    _this.ForgottenLoader(false);\n                })\n                    .fail(function (error) {\n                    _this.logger.debug(error);\n                });\n            };\n            //Get the logged in user\n            LoginViewModel.prototype.GetCurrent = function () {\n                this.UserDataService.GetCurrent().then(function (user) {\n                    //this.User(user);                 \n                });\n            };\n            //Logoff function\n            LoginViewModel.prototype.LogOff = function () {\n                this.UserDataService.LogOff().then(function () {\n                    //this.User(new Ftw.Dto.User);\n                    window.location.reload();\n                });\n            };\n            //Get all users   \n            LoginViewModel.prototype.GetContacts = function () {\n                this.UserDataService.GetContacts().then(function (data) {\n                });\n            };\n            //Make new user popup function\n            LoginViewModel.prototype.newUser = function () {\n                var _this = this;\n                $(this.loginModal).modal('hide');\n                $(this.loginModal).on(\"hidden.bs.modal\", function () {\n                    $(_this.newUserModal).modal('show');\n                    $(_this.loginModal).off();\n                });\n                this.addFocus(false);\n                this.makeNewUserOpen(true);\n            };\n            LoginViewModel.prototype.saveNewUser = function () {\n                var _this = this;\n                this.newUserLoader(true);\n                var data = {\n                    company: this.companyName,\n                    name: this.contactperson,\n                    vatregnumber: this.cvr,\n                    address: this.address1,\n                    address2: this.address2,\n                    zipcode: this.zip,\n                    email: this.useremail,\n                    phone: this.phone,\n                    ean: this.ean,\n                    country: this.country,\n                    groups: this.group,\n                    city: this.city\n                };\n                this.data.postForm('/Handlers/Firstweb.ERP.Users.ashx?cmd=createcustomer', data)\n                    .then(function (json) {\n                    if (json.ERPStatus.Code != 0) {\n                        $('.status').removeClass('show');\n                        $('.error-' + json.ERPStatus.Code).addClass('show');\n                    }\n                    else {\n                        $('.status').removeClass('show');\n                        _this.successOrFail(true);\n                    }\n                    _this.newUserLoader(false);\n                })\n                    .fail(function (error) {\n                    _this.logger.debug(error);\n                });\n            };\n            return LoginViewModel;\n        }(Ftw.ViewModels.BaseViewModel));\n        ViewModels.LoginViewModel = LoginViewModel;\n    })(ViewModels = Tapas.ViewModels || (Tapas.ViewModels = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../interfaces/lightsliderconfig.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Tapas;\n(function (Tapas) {\n    var ViewModels;\n    (function (ViewModels) {\n        var MiniCartViewModel = (function (_super) {\n            __extends(MiniCartViewModel, _super);\n            function MiniCartViewModel() {\n                var _this = this;\n                _super.call(this);\n                this.CartDataService.GetCurrent();\n                this.ShowEmptyMiniCart = ko.computed({\n                    owner: this,\n                    read: function () {\n                        return _this.Cart().TotalProductLines() == 0 ? false : true;\n                    }\n                });\n                this.ShowCartIndicator = ko.computed({\n                    owner: this,\n                    read: function () {\n                        return _this.Cart().TotalProductLines() == 0 ? false : true;\n                    }\n                });\n            }\n            return MiniCartViewModel;\n        }(Tapas.ViewModels.CartViewModel));\n        ViewModels.MiniCartViewModel = MiniCartViewModel;\n    })(ViewModels = Tapas.ViewModels || (Tapas.ViewModels = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../interfaces/lightsliderconfig.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/knockout.validation/knockout.validation.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Tapas;\n(function (Tapas) {\n    var ViewModels;\n    (function (ViewModels) {\n        var NewsViewModel = (function (_super) {\n            __extends(NewsViewModel, _super);\n            function NewsViewModel() {\n                var _this = this;\n                _super.call(this);\n                this.data = new Ftw.Data;\n                this.newsDetailHtml = ko.observable(\"\");\n                this.newsModal = function (url, selector) {\n                    _this.data.get(url + \"&LayoutTemplate=Designs/Tapas/ajax_page.cshtml&ajaxTapas=true\")\n                        .then(function (data) {\n                        _this.newsDetailHtml($(data).html());\n                        $(selector).modal();\n                    });\n                };\n            }\n            return NewsViewModel;\n        }(Ftw.ViewModels.BaseViewModel));\n        ViewModels.NewsViewModel = NewsViewModel;\n    })(ViewModels = Tapas.ViewModels || (Tapas.ViewModels = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Tapas;\n(function (Tapas) {\n    var ViewModels;\n    (function (ViewModels) {\n        var OrderDetailsViewModel = (function (_super) {\n            __extends(OrderDetailsViewModel, _super);\n            function OrderDetailsViewModel() {\n                _super.call(this);\n                this.OrderDetailsOrderlineElements = ko.observable();\n            }\n            OrderDetailsViewModel.prototype.GetProductViemodelsFromDom = function () {\n                //Get all the elements that the productviewmodel is bound to\n                var $items = $(this.OrderDetailsOrderlineElements()).children();\n                var result = [];\n                $items.each(function (i, elm) {\n                    var productViewModel = ko.dataFor(elm);\n                    result.push(productViewModel);\n                });\n                return result;\n            };\n            OrderDetailsViewModel.prototype.AddAllToCart = function () {\n                var _this = this;\n                var all = this.GetProductViemodelsFromDom();\n                if (all.length < 1)\n                    return;\n                this.CartLoading(true);\n                var addToCartArgs = new Array();\n                $.each(all, (function (i, vm) {\n                    var addToCartObj = {\n                        productId: vm.ProductId(),\n                        quantity: vm.Quantity()\n                    };\n                    addToCartArgs.push(addToCartObj);\n                }));\n                this.CartDataService.AddMultipleProducts(addToCartArgs).then(function (result) {\n                }).finally(function () {\n                    _this.CartLoading(false);\n                });\n            };\n            return OrderDetailsViewModel;\n        }(Tapas.ViewModels.CartViewModel));\n        ViewModels.OrderDetailsViewModel = OrderDetailsViewModel;\n    })(ViewModels = Tapas.ViewModels || (Tapas.ViewModels = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Tapas;\n(function (Tapas) {\n    var ViewModels;\n    (function (ViewModels) {\n        var OrderTemplatePageViewModel = (function (_super) {\n            __extends(OrderTemplatePageViewModel, _super);\n            function OrderTemplatePageViewModel() {\n                var _this = this;\n                _super.call(this);\n                this.OrderTemplateDataService = new Ftw.Dataservice.OrderTemplateDataservice();\n                this.OrderTemplateList = ko.observableArray([]);\n                this.OrderTemplateListElement = ko.observable();\n                this.OrderTemplateName = ko.observable('');\n                this.OrderTemplateId = ko.observable('');\n                this.Saved = ko.observable('');\n                this.OrderTemplateStatus = ko.observable('');\n                this.OrderTemplateEdit = ko.observable(false);\n                this.ConfirmDelete = function () {\n                    _this.OrderTemplateStatus('confirmation');\n                };\n            }\n            OrderTemplatePageViewModel.prototype.GetProductViemodelsFromDom = function () {\n                //Get all the elements that the productviewmodel is bound to\n                var $items = $(this.OrderTemplateListElement()).children();\n                var result = [];\n                $items.each(function (i, elm) {\n                    var productViewModel = ko.dataFor(elm);\n                    result.push(productViewModel);\n                });\n                return result;\n            };\n            OrderTemplatePageViewModel.prototype.AddAllToCart = function () {\n                var _this = this;\n                var all = this.GetProductViemodelsFromDom();\n                if (all.length < 1)\n                    return;\n                this.CartLoading(true);\n                var addToCartArgs = new Array();\n                $.each(all, (function (i, vm) {\n                    var orderLineFields = new Array();\n                    var orderLineField = {\n                        systemName: 'Comment',\n                        value: vm.Comment()\n                    };\n                    orderLineFields.push(orderLineField);\n                    var addToCartObj = {\n                        productId: vm.ProductId(),\n                        quantity: vm.Quantity(),\n                        variantId: vm.VariantId(),\n                        unitId: vm.UnitId(),\n                        orderLineFields: orderLineFields\n                    };\n                    addToCartArgs.push(addToCartObj);\n                }));\n                this.CartDataService.AddMultipleProducts(addToCartArgs).then(function (result) {\n                }).finally(function () {\n                    _this.CartLoading(false);\n                });\n            };\n            OrderTemplatePageViewModel.prototype.SaveAll = function () {\n                var _this = this;\n                var all = this.GetProductViemodelsFromDom();\n                if (all.length < 1)\n                    return;\n                var otName = this.OrderTemplateName();\n                var otId = '';\n                var lines = new Array();\n                $.each(all, (function (i, vm) {\n                    otId = vm.OrderTemplateViewModel.OrderTemplateId();\n                    var line = {\n                        otlid: vm.OrderTemplateViewModel.OrderTemplateLineId(),\n                        comment: vm.Comment(),\n                        productId: vm.ProductId(),\n                        quantity: vm.Quantity()\n                    };\n                    lines.push(line);\n                }));\n                this.OrderTemplateDataService.SaveOrderTemplate(otName, otId, lines).then(function (result) {\n                    _this.Saved('success');\n                });\n            };\n            OrderTemplatePageViewModel.prototype.SaveName = function () {\n                var _this = this;\n                var all = this.GetProductViemodelsFromDom();\n                if (all.length < 1)\n                    return;\n                var otName = this.OrderTemplateName();\n                this.OrderTemplateDataService.SaveOrderTemplate(otName, this.OrderTemplateId()).then(function (result) {\n                    _this.OrderTemplateEdit(false);\n                });\n            };\n            OrderTemplatePageViewModel.prototype.Delete = function () {\n                this.OrderTemplateDataService.DeleteOrderTemplate(this.OrderTemplateId()).then(function (result) {\n                });\n            };\n            return OrderTemplatePageViewModel;\n        }(Tapas.ViewModels.CartViewModel));\n        ViewModels.OrderTemplatePageViewModel = OrderTemplatePageViewModel;\n    })(ViewModels = Tapas.ViewModels || (Tapas.ViewModels = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Tapas;\n(function (Tapas) {\n    var ViewModels;\n    (function (ViewModels) {\n        var OrderTemplateViewModel = (function (_super) {\n            __extends(OrderTemplateViewModel, _super);\n            function OrderTemplateViewModel() {\n                var _this = this;\n                _super.call(this);\n                this.OrderTemplateSelectedList = ko.observable();\n                this.OrderTemplateNewListName = ko.observable('');\n                this.OrderTemplateShowNewList = ko.observable(false);\n                this.OrderTemplateDataService = new Ftw.Dataservice.OrderTemplateDataservice();\n                this.OrderTemplateList = ko.observableArray([]);\n                this.OrderTemplateDialogOpen = ko.observable(false);\n                this.OrderTemplateQuantity = ko.observable(1);\n                this.ShowOrderTemplateDialog = ko.observable(false);\n                this.OrderTemplateId = ko.observable('');\n                this.OrderTemplateLineId = ko.observable('');\n                this.Remove = ko.observable(false);\n                this.ShowInFavourite = ko.observable(false);\n                this.count = ko.observable();\n                this.OrderTemplateRelationCount = ko.observable(0);\n                this.DeleteOrderTemplateLine = function () {\n                    _this.OrderTemplateDataService.RemoveLineFromOrderTemplate(_this.OrderTemplateId(), _this.OrderTemplateLineId()).then(function (result) {\n                        _this.Remove(true);\n                    });\n                };\n                this.count(1);\n            }\n            OrderTemplateViewModel.prototype.ToggleOrderTemplateDialog = function () {\n                if (this.ShowOrderTemplateDialog()) {\n                    this.ShowOrderTemplateDialog(false);\n                    return;\n                }\n                this.GetOrderTemplates();\n                this.ShowOrderTemplateDialog(true);\n            };\n            OrderTemplateViewModel.prototype.GetOrderTemplates = function (productId) {\n                var _this = this;\n                this.OrderTemplateDataService.GetOrderTemplates(productId || '').then(function (result) {\n                    _this.OrderTemplateList(result);\n                });\n            };\n            OrderTemplateViewModel.prototype.AddProductToOrderTemplate = function (productId, quantity) {\n                var _this = this;\n                var selectedObject = this.OrderTemplateSelectedList();\n                if (!selectedObject)\n                    return;\n                this.OrderTemplateDataService.AddProductToOrderTemplate(selectedObject.Key(), productId, quantity || this.OrderTemplateQuantity()).then(function (result) {\n                    _this.ShowOrderTemplateDialog(false);\n                    _this.ShowInFavourite(true);\n                    _this.OrderTemplateRelationCount(result.Count());\n                    selectedObject.Value.CurrentProductInTemplate(true);\n                    selectedObject.Value.Count(selectedObject.Value.Count() + 1);\n                });\n            };\n            OrderTemplateViewModel.prototype.CreateNewOrderTemplateList = function (productId, quantity) {\n                var _this = this;\n                var name = this.OrderTemplateNewListName();\n                if (name !== '') {\n                    //Create the template\n                    this.OrderTemplateDataService.CreateNewOrderTemplate(name).then(function (result) {\n                        var newOrderTemplate = result;\n                        //Add the product\n                        _this.OrderTemplateDataService.AddProductToOrderTemplate(result.Key(), productId, quantity || _this.OrderTemplateQuantity()).then(function (result) {\n                            //Put the new ordertemplate in the list\n                            newOrderTemplate.Value.Count(1);\n                            _this.OrderTemplateList.push(newOrderTemplate);\n                            //Show it on the button and count up\n                            _this.ShowInFavourite(true);\n                            _this.OrderTemplateRelationCount(result.Count());\n                            //Set the new list as selected\n                            _this.OrderTemplateSelectedList(newOrderTemplate);\n                            _this.ShowOrderTemplateDialog(false);\n                            _this.ShowInFavourite(true);\n                        });\n                    });\n                }\n            };\n            return OrderTemplateViewModel;\n        }(Ftw.ViewModels.BaseViewModel));\n        ViewModels.OrderTemplateViewModel = OrderTemplateViewModel;\n    })(ViewModels = Tapas.ViewModels || (Tapas.ViewModels = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../interfaces/lightsliderconfig.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Tapas;\n(function (Tapas) {\n    var ViewModels;\n    (function (ViewModels) {\n        var PopularProductsViewModel = (function (_super) {\n            __extends(PopularProductsViewModel, _super);\n            function PopularProductsViewModel() {\n                _super.call(this);\n                this.lightSlider = $();\n                this.lightSliderConfig = {\n                    item: 4,\n                    loop: false,\n                    slideMove: 1,\n                    easing: 'cubic-bezier(0.25, 0, 0.25, 1)',\n                    speed: 600,\n                    pager: false,\n                    controls: false,\n                    slideEndAnimation: false,\n                    responsive: [\n                        {\n                            breakpoint: 1100,\n                            settings: {\n                                item: 3,\n                                slideMove: 1,\n                                slideMargin: 10\n                            }\n                        },\n                        {\n                            breakpoint: 800,\n                            settings: {\n                                item: 2,\n                                slideMove: 1,\n                                slideMargin: 6\n                            }\n                        },\n                        {\n                            breakpoint: 580,\n                            settings: {\n                                item: 1,\n                                slideMove: 1\n                            }\n                        }\n                    ]\n                };\n            }\n            //NEW SLIDER CONTROLS - FUNCTIONS\n            //NEXT\n            PopularProductsViewModel.prototype.nextSlide = function () {\n                this.lightSlider.goToNextSlide();\n            };\n            //PREV\n            PopularProductsViewModel.prototype.prevSlide = function () {\n                this.lightSlider.goToPrevSlide();\n            };\n            return PopularProductsViewModel;\n        }(Ftw.ViewModels.BaseViewModel));\n        ViewModels.PopularProductsViewModel = PopularProductsViewModel;\n    })(ViewModels = Tapas.ViewModels || (Tapas.ViewModels = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Tapas;\n(function (Tapas) {\n    var ViewModels;\n    (function (ViewModels) {\n        (function (Mode) {\n            Mode[Mode[\"List\"] = \"list\"] = \"List\";\n            Mode[Mode[\"Grid\"] = \"grid\"] = \"Grid\";\n        })(ViewModels.Mode || (ViewModels.Mode = {}));\n        var Mode = ViewModels.Mode;\n        ;\n        var ProductListViewModel = (function (_super) {\n            __extends(ProductListViewModel, _super);\n            function ProductListViewModel() {\n                var _this = this;\n                _super.call(this);\n                this.productListLoad = ko.observable(false);\n                this.toggleView = function () {\n                    switch (_this.mode()) {\n                        case \"list\":\n                            _this.mode(Mode.Grid);\n                            break;\n                        case \"grid\":\n                            _this.mode(Mode.List);\n                            break;\n                    }\n                };\n                this.mode = ko.observable(Mode.List);\n            }\n            return ProductListViewModel;\n        }(Tapas.ViewModels.CartViewModel));\n        ViewModels.ProductListViewModel = ProductListViewModel;\n    })(ViewModels = Tapas.ViewModels || (Tapas.ViewModels = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../interfaces/lightsliderconfig.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Tapas;\n(function (Tapas) {\n    var ViewModels;\n    (function (ViewModels) {\n        var ProductPageViewModel = (function (_super) {\n            __extends(ProductPageViewModel, _super);\n            function ProductPageViewModel() {\n                _super.call(this);\n                this.lightSlider = $();\n                this.favoriteVisible = ko.observable(false);\n                this.tabToggle = ko.observable(1);\n                this.lightSliderGalleryConfig = {\n                    gallery: true,\n                    item: 1,\n                    loop: false,\n                    thumbItem: 3,\n                    thumbMargin: 20,\n                    slideMargin: 0,\n                    slideEndAnimation: false,\n                    onSliderLoad: function (el) {\n                        el.lightGallery({\n                            enableDrag: false\n                        });\n                    }\n                };\n            }\n            //TOGGLE SPEC TABS\n            ProductPageViewModel.prototype.tabOne = function () {\n                this.tabToggle(1);\n            };\n            //TOGGLE SPEC TABS\n            ProductPageViewModel.prototype.tabTwo = function () {\n                this.tabToggle(2);\n            };\n            return ProductPageViewModel;\n        }(Tapas.ViewModels.CartViewModel));\n        ViewModels.ProductPageViewModel = ProductPageViewModel;\n    })(ViewModels = Tapas.ViewModels || (Tapas.ViewModels = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Tapas;\n(function (Tapas) {\n    var ViewModels;\n    (function (ViewModels) {\n        var ProductViewModel = (function (_super) {\n            __extends(ProductViewModel, _super);\n            function ProductViewModel(data) {\n                _super.call(this);\n                this.ProductId = ko.observable('');\n                this.Quantity = ko.observable(1);\n                this.Comment = ko.observable('');\n                this.Visible = ko.observable(true);\n                this.OrderTemplateViewModel = new ViewModels.OrderTemplateViewModel();\n                this.VariantId = ko.observable('');\n                this.UnitId = ko.observable('');\n                this.AlreadyInCart = ko.observable(false);\n            }\n            return ProductViewModel;\n        }(Ftw.ViewModels.BaseViewModel));\n        ViewModels.ProductViewModel = ProductViewModel;\n    })(ViewModels = Tapas.ViewModels || (Tapas.ViewModels = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Tapas;\n(function (Tapas) {\n    var ViewModels;\n    (function (ViewModels) {\n        var QuickOrderRow = (function () {\n            function QuickOrderRow() {\n                this.stocknr = ko.observable(\"\");\n                this.amount = ko.observable(1);\n                this.comment = ko.observable(\"\");\n                this.name = ko.observable(\"\");\n                this.Id = ko.observable(\"\");\n                this.VariantId = ko.observable(\"\");\n                this.UnitId = ko.observable(\"\");\n            }\n            return QuickOrderRow;\n        }());\n        ViewModels.QuickOrderRow = QuickOrderRow;\n        var QuickOrderExcelViewModel = (function (_super) {\n            __extends(QuickOrderExcelViewModel, _super);\n            function QuickOrderExcelViewModel() {\n                var _this = this;\n                _super.call(this);\n                this.Quickorders = ko.observableArray();\n                this.QuickOrderHelpVisible = ko.observable(false);\n                this.QuickOrderInput = ko.observable(\"\");\n                this.QuickOrderExcelInputDisabled = ko.observable(false);\n                this.QuickOrderInputDisabled = ko.observable(false);\n                this.QuickOrderInstantSearchPageId = ko.observable();\n                this.Loader = \"<img src='/Files/Templates/Designs/Tapas/assets/img/loading.gif' />\";\n                this.NoProductText = ko.observable(\"\");\n                this.SweetAlertVisible = ko.observable(false);\n                this.SweetAlertType = ko.observable('');\n                this.CheckInput = function () {\n                    var input = _this.QuickOrderInput();\n                    var rows = input.toString().split(/\\n/);\n                    ko.utils.arrayForEach(rows, function (row) {\n                        if (row != \"\") {\n                            var quickOrderRow = new QuickOrderRow();\n                            var item = row.split(/\\t|;|,|:/);\n                            if (item.length > 1) {\n                                var productNumber = item[0];\n                                var quantity = parseInt(item[1]);\n                                quickOrderRow.stocknr(productNumber);\n                                quickOrderRow.amount(quantity);\n                                if (item.length > 2)\n                                    quickOrderRow.comment(item[2]);\n                                quickOrderRow.name(_this.Loader);\n                                var match = ko.utils.arrayFirst(_this.Quickorders(), function (item) {\n                                    return item.stocknr() === quickOrderRow.stocknr() && item.comment() === quickOrderRow.comment() && item.amount() === quickOrderRow.amount();\n                                });\n                                if (!match) {\n                                    _this.Quickorders.push(quickOrderRow);\n                                }\n                            }\n                        }\n                    });\n                    _this.SearchQuery();\n                };\n                this.AddEmptyQuickOrderLine = function () {\n                    _this.Quickorders.push(new QuickOrderRow());\n                };\n                this.SearchQuery = function () {\n                    _this.QuickOrderInput(\"\");\n                    var prodArray = new Array();\n                    ko.utils.arrayForEach(_this.Quickorders(), function (order) {\n                        prodArray.push(order.stocknr());\n                    });\n                    var link = \"/Default.aspx?ID=\" + _this.QuickOrderInstantSearchPageId() + \"&ProductNumbers=\" + prodArray.join(\",\") + \"&View=eCom/Productlist/jsonProductOutput.cshtml&pagesize=1000\";\n                    var orders = _this.Quickorders();\n                    if (orders.length > 0) {\n                        _this.data.get(link).then(function (data) {\n                            ko.utils.arrayForEach(orders, function (item) {\n                                item.name(_this.NoProductText());\n                                ko.utils.arrayForEach(data, function (dataitem) {\n                                    if (item.stocknr() === dataitem.productNumber) {\n                                        item.name(dataitem.productName);\n                                        item.Id(dataitem.productId);\n                                        item.VariantId(dataitem.productVariantId);\n                                        item.UnitId(dataitem.productUnidId);\n                                    }\n                                });\n                            });\n                        }).catch(function (error) {\n                        });\n                    }\n                };\n                this.ResetQuickOrderLines = function () {\n                    _this.QuickOrderInput(\"\");\n                    _this.Quickorders.removeAll();\n                    _this.SweetAlertVisible(false);\n                };\n                this.fadeBeforeRemove = function (element, index) {\n                    $(element).fadeOut(function () {\n                        $(element).remove();\n                    });\n                };\n                this.fadeIn = function (element) {\n                    $(element).hide().fadeIn();\n                };\n                this.QuickOrderInput.subscribe(function () {\n                    _this.CheckInput();\n                });\n                this.RemoveQuickOrderLine = function (data) {\n                    _this.Quickorders.remove(data);\n                };\n                this.AddAmount = function (data) {\n                    data.amount(data.amount() + 1);\n                };\n                this.RemoveAmount = function (data) {\n                    data.amount(data.amount() - 1);\n                };\n                this.GetProductsById = function () {\n                    var productStringArray = new Array();\n                    ko.utils.arrayForEach(_this.Quickorders(), function (item) {\n                        productStringArray.push(item.stocknr().toString());\n                    });\n                    _this.SearchQuery();\n                };\n            }\n            QuickOrderExcelViewModel.prototype.SetSweetAlert = function () {\n                if (this.SweetAlertVisible()) {\n                    this.SweetAlertType('');\n                    this.SweetAlertVisible(false);\n                }\n                else {\n                    this.SweetAlertVisible(true);\n                    this.SweetAlertType('confirmation');\n                }\n            };\n            QuickOrderExcelViewModel.prototype.AddAllToCart = function () {\n                var _this = this;\n                var all = this.Quickorders();\n                if (all.length < 1)\n                    return;\n                this.CartLoading(true);\n                var addToCartArgs = new Array();\n                $.each(all, (function (i, row) {\n                    if (row.name() !== _this.NoProductText()) {\n                        var orderLineFields = new Array();\n                        var orderLineField = {\n                            systemName: 'Comment',\n                            value: row.comment()\n                        };\n                        orderLineFields.push(orderLineField);\n                        var addToCartObj = {\n                            productId: row.Id(),\n                            quantity: row.amount(),\n                            orderLineFields: orderLineFields,\n                            variantId: row.VariantId(),\n                            unitId: row.UnitId()\n                        };\n                        addToCartArgs.push(addToCartObj);\n                    }\n                }));\n                this.CartDataService.AddMultipleProducts(addToCartArgs).then(function (result) {\n                }).finally(function () {\n                    _this.CartLoading(false);\n                    _this.ResetQuickOrderLines();\n                });\n            };\n            return QuickOrderExcelViewModel;\n        }(Tapas.ViewModels.CartViewModel));\n        ViewModels.QuickOrderExcelViewModel = QuickOrderExcelViewModel;\n    })(ViewModels = Tapas.ViewModels || (Tapas.ViewModels = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Tapas;\n(function (Tapas) {\n    var ViewModels;\n    (function (ViewModels) {\n        var QuickOrderViewModel = (function (_super) {\n            __extends(QuickOrderViewModel, _super);\n            function QuickOrderViewModel() {\n                _super.call(this);\n                this.AddonQueryString('&View=eCom/Productlist/QuickOrderSearch.cshtml&pagesize=10');\n                this.searchQuery('');\n            }\n            return QuickOrderViewModel;\n        }(Tapas.ViewModels.InstantSearchViewModel));\n        ViewModels.QuickOrderViewModel = QuickOrderViewModel;\n    })(ViewModels = Tapas.ViewModels || (Tapas.ViewModels = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar ASG;\n(function (ASG) {\n    var Bindings;\n    (function (Bindings) {\n        var AddToGtmDatalayer = (function () {\n            function AddToGtmDatalayer() {\n            }\n            AddToGtmDatalayer.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                var params = valueAccessor();\n                var json = $(element).data(params.dataAttributeName);\n                var windowAny = window;\n                windowAny.dataLayer.push(json);\n                windowAny.dataLayer.push({\n                    event: 'SendTransactionToGoogleAnalyctics'\n                });\n            };\n            return AddToGtmDatalayer;\n        }());\n        Bindings.AddToGtmDatalayer = AddToGtmDatalayer;\n        ko.bindingHandlers['addToGtmDatalayer'] = new AddToGtmDatalayer();\n    })(Bindings = ASG.Bindings || (ASG.Bindings = {}));\n})(ASG || (ASG = {}));\n\n/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Asg;\n(function (Asg) {\n    var Bindings;\n    (function (Bindings) {\n        var AsyncLoadPricesAndStock = (function () {\n            function AsyncLoadPricesAndStock() {\n            }\n            AsyncLoadPricesAndStock.prototype.update = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var observableValue = ko.unwrap(valueAccessor());\n                var data = new Ftw.Data();\n                if (!observableValue) {\n                    //TODO: Rewrite from jQuery\n                    var ele = $(element);\n                    var priceMissing = ele.find(\".price.asyncLoad:not(.busy)\");\n                    priceMissing.addClass(\"busy\");\n                    if (priceMissing.length > 0) {\n                        var ids = \"count=\" + priceMissing.length;\n                        var count = 0;\n                        priceMissing.each(function () {\n                            ids += \"&productid[\" + count + \"]=\" + $(this).data(\"productid\");\n                            ids += \"&key[\" + count + \"]=\" + $(this).data(\"productkey\");\n                            count += 1;\n                        });\n                        data.postForm('/Handlers/Firstweb.ERP.PriceCache.ashx?cmd=getpricesandstocks', ids).then(function (result) {\n                            if (result.ERPStatus.Success) {\n                                $.each(result.Data, function (key, data) {\n                                    var priceEle = $(\".price.asyncLoad[data-productkey='\" + key + \"']\");\n                                    priceEle.removeClass(\"asyncLoad\").removeClass(\"busy\");\n                                    priceEle.find(\".brutto .bPrice\").html(data.PriceInfo.Tags[\"Firstweb:ErpPriceInfo.BruttoAmountFormattedNoSymbol\"]);\n                                    priceEle.find(\".netto .nPrice\").html(data.PriceInfo.Tags[\"Firstweb:ErpPriceInfo.NettoPriceFormattedNoSymbol\"]);\n                                    priceEle.parent().parent().find(\".stock\").attr(\"data-stock\", data.StockInfo.StockQuantity);\n                                    var stockQty = data.StockInfo.StockQuantity;\n                                    var stockQtyInt = parseInt(stockQty);\n                                    if (stockQtyInt >= 12) {\n                                        priceEle.parent().find(\".stock .instock\").show();\n                                    }\n                                    else if (stockQtyInt > 0 && stockQtyInt < 12) {\n                                        priceEle.parent().find(\".stock .lowstock\").show();\n                                    }\n                                    else if (stockQtyInt < 1) {\n                                        priceEle.parent().find(\".stock .notinstock\").show();\n                                    }\n                                    if (data.PriceInfo.HasQuantityPrices == true) {\n                                        priceEle.parent().find(\"#dLabel\").removeClass(\"hideQuantity\").addClass(\"loadQuantity\");\n                                    }\n                                    if ($('.stock-product-details').length > 0 && stockQtyInt > 0 && stockQtyInt < 12) {\n                                        priceEle.parent().parent().find(\".stock-product-details\").html(data.StockInfo.StockQuantity);\n                                    }\n                                });\n                            }\n                            else {\n                                //TODO : Show some sort of error to the user based on the status\n                                console.log('ErpStatus not Successfull');\n                            }\n                        })\n                            .catch(function (error) {\n                            //TODO : Show some sort of error to the user - shut down shopping?\n                            console.log(\"We catch fatal errors here - ex : no access to the ERP on local dev machines\");\n                        })\n                            .finally(function () {\n                        });\n                    }\n                }\n            };\n            return AsyncLoadPricesAndStock;\n        }());\n        Bindings.AsyncLoadPricesAndStock = AsyncLoadPricesAndStock;\n        ko.bindingHandlers['asyncLoadPricesAndStock'] = new AsyncLoadPricesAndStock();\n    })(Bindings = Asg.Bindings || (Asg.Bindings = {}));\n})(Asg || (Asg = {}));\n\n/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Asg;\n(function (Asg) {\n    var Bindings;\n    (function (Bindings) {\n        var CampaignPopUp = (function () {\n            function CampaignPopUp() {\n            }\n            CampaignPopUp.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var $popItmWrap = $('.popup-itm-wrap');\n                var $closeBtn = $('.popup-itm-close');\n                var $wrapOpen = $('.popup-itm-open-wrap');\n                var $closeBtnHeight = $closeBtn.outerHeight();\n                var $wrapOpenHeight = $wrapOpen.outerHeight();\n                var $wrapHeight = $popItmWrap.outerHeight();\n                $popItmWrap.css('transform', \"translateY(\" + ($closeBtnHeight + $wrapHeight) + \"px)\");\n                $wrapOpen.css('transform', \"translateY(\" + $wrapOpenHeight + \"px)\");\n                window.onload = function () {\n                    setTimeout(function () {\n                        $popItmWrap.show(10);\n                        $popItmWrap.css('transform', \"translateY(0px)\");\n                    }, 2000);\n                    $closeBtn.click(function () {\n                        var $closeBtnHeight = $closeBtn.outerHeight();\n                        var $wrapHeight = $popItmWrap.outerHeight();\n                        $wrapOpen.show(10);\n                        $popItmWrap.css('transform', \"translateY(\" + ($closeBtnHeight + $wrapHeight) + \"px)\");\n                        $wrapOpen.css('transform', 'translateY(0px)');\n                    });\n                    $wrapOpen.click(function () {\n                        var $wrapOpenHeight = $wrapOpen.outerHeight();\n                        $popItmWrap.css('transform', \"translateY(0px)\");\n                        $wrapOpen.css('transform', \"translateY(\" + $wrapOpenHeight + \"px)\");\n                    });\n                };\n            };\n            return CampaignPopUp;\n        }());\n        Bindings.CampaignPopUp = CampaignPopUp;\n        ko.bindingHandlers['campaignPopUp'] = new CampaignPopUp();\n    })(Bindings = Asg.Bindings || (Asg.Bindings = {}));\n})(Asg || (Asg = {}));\n\n/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Asg;\n(function (Asg) {\n    var Bindings;\n    (function (Bindings) {\n        var ClickCalculateNlwiCart = (function () {\n            function ClickCalculateNlwiCart() {\n            }\n            ClickCalculateNlwiCart.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                ko.utils.registerEventHandler(element, \"click\", function () {\n                    var NlwiDataService = new Asg.Dataservice.NlwiDataService();\n                    NlwiDataService.CalculateCart();\n                });\n            };\n            return ClickCalculateNlwiCart;\n        }());\n        Bindings.ClickCalculateNlwiCart = ClickCalculateNlwiCart;\n        ko.bindingHandlers['ClickCalculateNlwiCart'] = new ClickCalculateNlwiCart();\n    })(Bindings = Asg.Bindings || (Asg.Bindings = {}));\n})(Asg || (Asg = {}));\n\n/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Asg;\n(function (Asg) {\n    var Bindings;\n    (function (Bindings) {\n        var ClickToggleClassOnElementBinding = (function () {\n            function ClickToggleClassOnElementBinding() {\n            }\n            ClickToggleClassOnElementBinding.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var params = valueAccessor();\n                var elementClass = params.elementselector;\n                var activeClass = params.activeselector;\n                ko.utils.registerEventHandler(element, \"click\", function () {\n                    if ($(elementClass).hasClass(activeClass)) {\n                        $(elementClass).removeClass(activeClass);\n                    }\n                    else {\n                        $(elementClass).removeClass(activeClass);\n                        $(elementClass).addClass(activeClass);\n                    }\n                });\n            };\n            return ClickToggleClassOnElementBinding;\n        }());\n        Bindings.ClickToggleClassOnElementBinding = ClickToggleClassOnElementBinding;\n        ko.bindingHandlers['clickToggleClassOnElementBinding'] = new ClickToggleClassOnElementBinding();\n    })(Bindings = Asg.Bindings || (Asg.Bindings = {}));\n})(Asg || (Asg = {}));\n\n/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Asg;\n(function (Asg) {\n    var Bindings;\n    (function (Bindings) {\n        var DetectHeightOnElement = (function () {\n            function DetectHeightOnElement() {\n            }\n            DetectHeightOnElement.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var ele = $(element);\n                var params = valueAccessor();\n                var activeClass = params.activeclass || 'active';\n                var maxHeight = params.maxheight || 250;\n                if ($(ele).height() > maxHeight) {\n                    $(ele).addClass(activeClass);\n                }\n            };\n            return DetectHeightOnElement;\n        }());\n        Bindings.DetectHeightOnElement = DetectHeightOnElement;\n        ko.bindingHandlers['detectHeightOnElement'] = new DetectHeightOnElement();\n    })(Bindings = Asg.Bindings || (Asg.Bindings = {}));\n})(Asg || (Asg = {}));\n\n/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Asg;\n(function (Asg) {\n    var Bindings;\n    (function (Bindings) {\n        var FloatMenuAndAddClassToElement = (function () {\n            function FloatMenuAndAddClassToElement() {\n            }\n            FloatMenuAndAddClassToElement.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var _ele = $(element);\n                var floatingPosition = _ele.offset();\n                var otherElement = valueAccessor().otherelement || \"\";\n                var elementToHide = valueAccessor().elementtohide || \"\";\n                $(document).scroll(function () {\n                    var y = $(this).scrollTop();\n                    if (y >= floatingPosition.top) {\n                        $(elementToHide).addClass('hide');\n                        _ele.addClass(\"float\");\n                        $(otherElement).addClass(\"float\");\n                    }\n                    else {\n                        _ele.removeClass(\"float\");\n                        $(otherElement).removeClass(\"float\");\n                        $(elementToHide).removeClass('hide');\n                    }\n                });\n            };\n            return FloatMenuAndAddClassToElement;\n        }());\n        Bindings.FloatMenuAndAddClassToElement = FloatMenuAndAddClassToElement;\n        ko.bindingHandlers['floatMenuAndAddClassToElement'] = new FloatMenuAndAddClassToElement();\n    })(Bindings = Asg.Bindings || (Asg.Bindings = {}));\n})(Asg || (Asg = {}));\n\n/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Asg;\n(function (Asg) {\n    var Bindings;\n    (function (Bindings) {\n        var FocusFirstInputOfTypeOnClick = (function () {\n            function FocusFirstInputOfTypeOnClick() {\n            }\n            FocusFirstInputOfTypeOnClick.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var params = valueAccessor();\n                var type = params.type || 'text';\n                ko.utils.registerEventHandler(element, \"click\", function (e) {\n                    if (element == e.target) {\n                        $(element).one('transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd', function () {\n                            var focus = $(element).find(\"input[type='\" + type + \"']\").first();\n                            focus.focus();\n                        });\n                        var focus = $(element).find(\"input[type='\" + type + \"']\").first();\n                        focus.focus();\n                    }\n                });\n            };\n            return FocusFirstInputOfTypeOnClick;\n        }());\n        Bindings.FocusFirstInputOfTypeOnClick = FocusFirstInputOfTypeOnClick;\n        ko.bindingHandlers['focusFirstInputOfTypeOnClick'] = new FocusFirstInputOfTypeOnClick();\n    })(Bindings = Asg.Bindings || (Asg.Bindings = {}));\n})(Asg || (Asg = {}));\n\n/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Asg;\n(function (Asg) {\n    var Bindings;\n    (function (Bindings) {\n        var GetQuantityPrices = (function () {\n            function GetQuantityPrices() {\n            }\n            GetQuantityPrices.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                //TODO: Rewrite from jQuery\n                var ele = $(element);\n                ele.click(function () {\n                    if (ele.hasClass(\"loadQuantity\")) {\n                        var id = \"productid=\" + ele.attr(\"ftw-productid\"); //.parent().parent().find(\".price\").data(\"productid\");\n                        $.ajax({\n                            method: \"POST\",\n                            dataType: \"json\",\n                            url: \"/Handlers/Firstweb.ERP.PriceCache.ashx?cmd=getquantityprices\",\n                            data: id\n                        })\n                            .done(function (json) {\n                            if (json.ERPStatus.Success) {\n                                ele.parent().find(\".dropdown-menu li\").remove();\n                                $.each(json.Data, function (key, data) {\n                                    ele.parent().find(\".dropdown-menu\").append(\"<li class='quantityPrice' ftw-quantity='\" + data.Quantity + \"'>\" + data.Quantity + \" \" + ele.attr(\"ftw-unit\") + \" \" + this.Tags[\"Firstweb:ErpPriceInfo:QuantityPrices.NettoPriceFormattedNoSymbol\"] + \" \" + ele.attr(\"ftw-priceperunit\") + \"</li>\").removeClass(\"load-drop\");\n                                    ele.removeClass(\"loadQuantity\");\n                                });\n                                $(\".quantityPrice\").click(function () {\n                                    $(this).parent().parent().parent().find(\"input.quantity\").val($(this).attr(\"ftw-quantity\"));\n                                    $(this).parent().parent().parent().parent().find(\".addToCart\").attr(\"ftw-quantity\", $(this).attr(\"ftw-quantity\"));\n                                });\n                            }\n                        });\n                    }\n                });\n            };\n            return GetQuantityPrices;\n        }());\n        Bindings.GetQuantityPrices = GetQuantityPrices;\n        ko.bindingHandlers['getQuantityPrices'] = new GetQuantityPrices();\n    })(Bindings = Asg.Bindings || (Asg.Bindings = {}));\n})(Asg || (Asg = {}));\n\n/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Asg;\n(function (Asg) {\n    var Bindings;\n    (function (Bindings) {\n        var IfElementAvailableAddLoaderToPage = (function () {\n            function IfElementAvailableAddLoaderToPage() {\n            }\n            IfElementAvailableAddLoaderToPage.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var ele = $(element);\n                var params = valueAccessor();\n                var activeClass = params.activeclass;\n                setTimeout(function () { ele.addClass(activeClass); }, 500);\n                $(window).load(function () {\n                    setTimeout(function () { ele.removeClass(activeClass); }, 2000);\n                    $(ele).delay(2500).fadeOut('slow');\n                });\n            };\n            return IfElementAvailableAddLoaderToPage;\n        }());\n        Bindings.IfElementAvailableAddLoaderToPage = IfElementAvailableAddLoaderToPage;\n        ko.bindingHandlers['ifElementAvailableAddLoaderToPage'] = new IfElementAvailableAddLoaderToPage();\n    })(Bindings = Asg.Bindings || (Asg.Bindings = {}));\n})(Asg || (Asg = {}));\n\n/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Asg;\n(function (Asg) {\n    var Bindings;\n    (function (Bindings) {\n        var IfElementInDomOpenModal = (function () {\n            function IfElementInDomOpenModal() {\n            }\n            IfElementInDomOpenModal.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                var params = valueAccessor();\n                var modalSelector = params.modalselector;\n                $(modalSelector).modal('show');\n            };\n            return IfElementInDomOpenModal;\n        }());\n        Bindings.IfElementInDomOpenModal = IfElementInDomOpenModal;\n        ko.bindingHandlers['ifElementInDomOpenModal'] = new IfElementInDomOpenModal();\n    })(Bindings = Asg.Bindings || (Asg.Bindings = {}));\n})(Asg || (Asg = {}));\n\n/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Asg;\n(function (Asg) {\n    var Bindings;\n    (function (Bindings) {\n        var LoadMoreProductsInfinite = (function () {\n            function LoadMoreProductsInfinite() {\n            }\n            LoadMoreProductsInfinite.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var load = bindingContext.$root.load();\n                var currentPage = valueAccessor().currentPage;\n                var totalPages = valueAccessor().totalPages;\n                var data = new Ftw.Data();\n                var currentlyLoading = false;\n                $(document).scroll(function () {\n                    var loadElement = $(element).offset().top;\n                    var y = $(document).scrollTop() + ($(window).height() - 100);\n                    if (y >= loadElement && currentlyLoading == false && totalPages > currentPage) {\n                        bindingContext.$data.productListLoad(true);\n                        var nextPage = currentPage + 1;\n                        currentlyLoading = true;\n                        load.active(true);\n                        load.text(valueAccessor().text);\n                        data.get(window.location.origin + window.location.pathname + (window.location.search ? window.location.search + \"&\" : \"?\") + \"LayoutTemplate=Designs/Tapas/ajax_page.cshtml&ajaxTapas=true&pagenum=\" + nextPage)\n                            .then(function (data) {\n                            var productsHtml = $(data).children().html();\n                            $(element).before(productsHtml);\n                            var childBindingContext = bindingContext.createChildContext(viewModel);\n                            ko.applyBindingsToDescendants(childBindingContext, document.getElementById(nextPage));\n                            currentPage++;\n                            bindingContext.$data.productListLoad(false);\n                        })\n                            .finally(function () {\n                            load.active(false);\n                            load.text(\"\");\n                            currentlyLoading = false;\n                        });\n                    }\n                });\n                $(window).unload(function () {\n                    load.active(false);\n                });\n            };\n            return LoadMoreProductsInfinite;\n        }());\n        Bindings.LoadMoreProductsInfinite = LoadMoreProductsInfinite;\n        ko.bindingHandlers['loadMoreProductsInfinite'] = new LoadMoreProductsInfinite();\n    })(Bindings = Asg.Bindings || (Asg.Bindings = {}));\n})(Asg || (Asg = {}));\n\n/// <reference path=\"../../../../../../../../../packages/mousetrap.TypeScript.DefinitelyTyped.0.2.5/Content/Scripts/typings/mousetrap/mousetrap.d.ts\" />\nvar Asg;\n(function (Asg) {\n    var Bindings;\n    (function (Bindings) {\n        var MouseTrap = (function () {\n            function MouseTrap() {\n            }\n            MouseTrap.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                var input = valueAccessor();\n                var ms = new Mousetrap(element);\n                ms.bind(input.keySequence, function (keyboardEvent, combo) {\n                    input.handler(keyboardEvent, combo);\n                });\n            };\n            return MouseTrap;\n        }());\n        Bindings.MouseTrap = MouseTrap;\n        ko.bindingHandlers['mouseTrap'] = new MouseTrap();\n    })(Bindings = Asg.Bindings || (Asg.Bindings = {}));\n})(Asg || (Asg = {}));\n\nvar Asg;\n(function (Asg) {\n    var Bindings;\n    (function (Bindings) {\n        var owlSlider = (function () {\n            function owlSlider() {\n            }\n            owlSlider.prototype.init = function (element, valueAccessor) {\n                // The options that have been configured with the owlCarousel binding\n                var options = ko.utils.unwrapObservable(valueAccessor()) || {};\n                // The bound element as a jQuery object\n                var $owlElement = $(element);\n                // Initialize carousel with options\n                $owlElement.owlCarousel(options);\n                $owlElement.on(\"click\", function () {\n                    // when dropdown is showing add class\n                    setTimeout(function () {\n                        if ($owlElement.find(\".favoriteDropdown\").hasClass(\"active\")) {\n                            $owlElement.addClass(\"activate-owl-height-step1\");\n                        }\n                        else {\n                            $owlElement.removeClass(\"activate-owl-height-step1\");\n                        }\n                        if ($owlElement.find(\".dropdown-menu\").is(\":visible\")) {\n                            $owlElement.addClass(\"activate-owl-height-step2\");\n                        }\n                        else {\n                            $owlElement.removeClass(\"activate-owl-height-step2\");\n                        }\n                    }, 50);\n                });\n            };\n            return owlSlider;\n        }());\n        Bindings.owlSlider = owlSlider;\n        ko.bindingHandlers['owlSlider'] = new owlSlider();\n    })(Bindings = Asg.Bindings || (Asg.Bindings = {}));\n})(Asg || (Asg = {}));\n\n/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Asg;\n(function (Asg) {\n    var Bindings;\n    (function (Bindings) {\n        var QuickOrderOnPage = (function () {\n            function QuickOrderOnPage() {\n            }\n            QuickOrderOnPage.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var resultRowClassName = valueAccessor();\n                var number = -1;\n                var resultCount = -1;\n                var targetElement = $(element);\n                var resultRows = $(resultRowClassName);\n                var productName;\n                //Prevent default behaviour \n                targetElement.on(\"keydown\", function (e) {\n                    if (e.which == 38 || e.which == 40 || e.which == 9)\n                        e.preventDefault();\n                });\n                //The function for going up and down        \n                function upAndDown() {\n                    var resultRows = $(resultRowClassName);\n                    resultCount = resultRows.length - 1;\n                    $('#instantBuySearchPage').focus();\n                    //Make sure user cant go over or under\n                    if (number > resultCount) {\n                        number = -1;\n                    }\n                    else if (number < -1) {\n                        number = resultCount;\n                    }\n                    resultRows.removeClass('active');\n                    $(resultRowClassName + '.' + number).addClass('active');\n                }\n                //The function where we select the product\n                //This is used both with mouse and keyboard\n                function selectProduct() {\n                    var productId;\n                    var productName;\n                    var variantId;\n                    var unitId;\n                    var alreadyInCart;\n                    if ($(\".QuickAddproductCount\").length == 1) {\n                        productId = $(resultRowClassName).attr(\"ftw-productid\");\n                        variantId = $(resultRowClassName).attr(\"ftw-variantId\");\n                        unitId = $(resultRowClassName).attr(\"ftw-unitId\");\n                        alreadyInCart = $(resultRowClassName).attr(\"ftw-alreadyincart\");\n                        productName = $(resultRowClassName).text().replace(/\\s+/g, \" \");\n                    }\n                    else {\n                        productId = $(resultRowClassName + '.' + number).attr(\"ftw-productid\");\n                        variantId = $(resultRowClassName + '.' + number).attr(\"ftw-variantId\");\n                        unitId = $(resultRowClassName + '.' + number).attr(\"ftw-unitId\");\n                        alreadyInCart = $(resultRowClassName + '.' + number).attr(\"ftw-alreadyincart\");\n                        productName = $(resultRowClassName + '.active').text().replace(/\\s+/g, \" \");\n                    }\n                    $(\"#quickOrderFormPage\").attr(\"ftw-productid\", productId);\n                    $(\"#quickOrderFormPage\").attr(\"ftw-variantId\", variantId);\n                    $(\"#quickOrderFormPage\").attr(\"ftw-unitId\", unitId);\n                    $(\"#quickOrderFormPage\").attr(\"ftw-alreadyincart\", alreadyInCart);\n                    $('.productNamePage').val(productName);\n                    $('#quickOrderQuantityPage').focus().select();\n                    $(\"#quickOrderQuantityPage\").bind('input', function () {\n                        var quantity = $('#quickOrderQuantityPage').val();\n                        $(\"#quickOrderFormPage\").attr(\"ftw-quantity\", quantity);\n                    });\n                }\n                //The function for resetting everything\n                //This is used both with mouse and keyboard \n                function reset() {\n                    $('.productNamePage').val(\"\");\n                    $(\"#quickOrderFormPage\").attr(\"ftw-productid\", \"\");\n                    $(\"#quickOrderFormPage\").attr(\"ftw-variantId\", \"\");\n                    $(\"#quickOrderFormPage\").attr(\"ftw-quantity\", \"1\");\n                    $(\"#quickOrderFormPage\").attr(\"ftw-unitid\", \"\");\n                    $(\"#quickOrderQuantityPage\").val(\"1\");\n                    $('#instantBuySearchPage').val(\"\").focus();\n                    $('.result').hide();\n                    number = -1;\n                }\n                //On hover we want to set number to the correct product\n                //And we want to add class 'active'\n                $('.resultPage').on('mouseenter', '.customTable .tableRow', function () {\n                    $('.customTable .tableRow').removeClass('active');\n                    $(this).addClass('active');\n                    number = parseInt($(this).attr('ftw-count'));\n                });\n                $('.resultPage').on('mouseleave', '.customTable .tableRow', function () {\n                    $(this).removeClass('active');\n                });\n                $('.resultPage').on('click', '.customTable .tableRow', function () {\n                    selectProduct();\n                });\n                //Here we run the function for going up and down\n                //The select, put to cart and reset functionality\n                targetElement.on(\"keyup\", function (e) {\n                    var code = e.which;\n                    var quantityFocus = $(\"#quickOrderQuantityPage\").is(\":focus\");\n                    var count = $(\".QuickAddproductCount\").length;\n                    if (code == 40) {\n                        number++;\n                        upAndDown();\n                    }\n                    else if (code == 38) {\n                        number--;\n                        upAndDown();\n                    }\n                    else if ((code == 9 || code == 13) && (number < 0 && count != 1)) {\n                        e.preventDefault();\n                    }\n                    else if ((code == 9 || code == 13) && (number >= 0 || count == 1)) {\n                        resultCount = resultRows.length;\n                        if (quantityFocus == false) {\n                            selectProduct();\n                        }\n                        else if (code !== 9) {\n                            if ($(\"#quickOrderFormPage\").attr(\"ftw-alreadyincart\")) {\n                                number = -1;\n                            }\n                            else {\n                                reset();\n                            }\n                        }\n                    }\n                    else if (quantityFocus == false) {\n                        number = -1;\n                    }\n                });\n            };\n            return QuickOrderOnPage;\n        }());\n        Bindings.QuickOrderOnPage = QuickOrderOnPage;\n        ko.bindingHandlers['quickOrderOnPage'] = new QuickOrderOnPage();\n    })(Bindings = Asg.Bindings || (Asg.Bindings = {}));\n})(Asg || (Asg = {}));\n\n/// <reference path=\"../../../../../../../../../packages/mousetrap.TypeScript.DefinitelyTyped.0.2.5/Content/Scripts/typings/mousetrap/mousetrap.d.ts\" />\nvar Asg;\n(function (Asg) {\n    var Bindings;\n    (function (Bindings) {\n        var ScrollLoad = (function () {\n            function ScrollLoad() {\n                this.updating = false;\n            }\n            ScrollLoad.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                this.updating = true;\n                ko.utils.domNodeDisposal.addDisposeCallback(element, function () {\n                    $(window).off(\"scroll.ko.scrollHandler\");\n                    this.updating = false;\n                });\n            };\n            ScrollLoad.prototype.update = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                var settings = valueAccessor();\n                var offset = settings.offset ? settings.offset : 0;\n                var loadFunc = settings.loadFunction;\n                if (settings.loadMore) {\n                    $(window).on(\"scroll.ko.scrollHandler\", function () {\n                        if (($(document).height() - offset <= $(window).height() + $(window).scrollTop())) {\n                            if (this.updating) {\n                                loadFunc();\n                                this.updating = false;\n                            }\n                        }\n                        else {\n                            this.updating = true;\n                        }\n                    });\n                }\n                else {\n                    $(window).off(\"scroll.ko.scrollHandler\");\n                    this.updating = false;\n                }\n            };\n            return ScrollLoad;\n        }());\n        Bindings.ScrollLoad = ScrollLoad;\n        ko.bindingHandlers['scrollLoad'] = new ScrollLoad();\n    })(Bindings = Asg.Bindings || (Asg.Bindings = {}));\n})(Asg || (Asg = {}));\n\n/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar ASG;\n(function (ASG) {\n    var Bindings;\n    (function (Bindings) {\n        var SpinEditASG = (function () {\n            function SpinEditASG() {\n            }\n            SpinEditASG.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                if (!bindingContext)\n                    return;\n                var params = valueAccessor();\n                //Setup                         \n                $(element).spinedit(params);\n                //Spin edit changes do crazy stuff \n                $(element).on(\"valueChanged\", function (e) {\n                    $(element).parent().parent().find(\".addToCart\").attr(\"ftw-quantity\", e.value);\n                    if (params.updateObservable) {\n                        params.updateObservable(e.value);\n                    }\n                });\n                if (params.updateObservable) {\n                    //IF the observable is defined it will set the internal state to its value on load\n                    $(element).spinedit('setValue', params.updateObservable());\n                    //Observable changes set SpinEdit internal state\n                    params.updateObservable.subscribe(function (newValue) {\n                        $(element).spinedit('setValue', newValue);\n                    });\n                }\n            };\n            return SpinEditASG;\n        }());\n        Bindings.SpinEditASG = SpinEditASG;\n        ko.bindingHandlers['spinEditASG'] = new SpinEditASG();\n    })(Bindings = ASG.Bindings || (ASG.Bindings = {}));\n})(ASG || (ASG = {}));\n\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Asg;\n(function (Asg) {\n    var Bindings;\n    (function (Bindings) {\n        var SuggedstedPrices = (function () {\n            function SuggedstedPrices() {\n            }\n            SuggedstedPrices.prototype.init = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n                var value = valueAccessor();\n                var select = $(element).find('select');\n                var prices = $(element).find('.js-suggested-price');\n                select.change(function () {\n                    prices.each(function () {\n                        $(this).removeClass('suggested-prices__price--active');\n                        if ($(this).data('key') == select.val()) {\n                            $(this).addClass('suggested-prices__price--active');\n                        }\n                    });\n                });\n            };\n            return SuggedstedPrices;\n        }());\n        Bindings.SuggedstedPrices = SuggedstedPrices;\n        ko.bindingHandlers['suggestedPrices'] = new SuggedstedPrices();\n    })(Bindings = Asg.Bindings || (Asg.Bindings = {}));\n})(Asg || (Asg = {}));\n\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Asg;\n(function (Asg) {\n    var Dataservice;\n    (function (Dataservice) {\n        var NlwiDataService = (function (_super) {\n            __extends(NlwiDataService, _super);\n            function NlwiDataService() {\n                _super.call(this, \"session/nlwi\");\n            }\n            /**\n             * Calculates a Nlwi cart if has not been calcualted and cached         *\n             */\n            NlwiDataService.prototype.CalculateCart = function () {\n                var _this = this;\n                var defer = Q.defer();\n                this.data.get(this.serviceName + '/calculatecart')\n                    .then(function (data) {\n                    _this.Success(data, defer);\n                })\n                    .catch(function (error) { return _this.Error(error, defer); });\n                return defer.promise;\n            };\n            return NlwiDataService;\n        }(Ftw.Dataservice.BaseDataservice));\n        Dataservice.NlwiDataService = NlwiDataService;\n    })(Dataservice = Asg.Dataservice || (Asg.Dataservice = {}));\n})(Asg || (Asg = {}));\n\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Asg;\n(function (Asg) {\n    var Dataservice;\n    (function (Dataservice) {\n        var RaptorDataService = (function (_super) {\n            __extends(RaptorDataService, _super);\n            function RaptorDataService() {\n                _super.call(this, 'session/raptor');\n            }\n            RaptorDataService.prototype.ItemClick = function (productId, methodName) {\n                var _this = this;\n                var defer = Q.defer();\n                var data = {\n                    productId: productId,\n                    methodName: methodName\n                };\n                this.data.get(this.serviceName + '/ItemClick', data)\n                    .then(function (result) { return _this.Success(result, defer); })\n                    .catch(function (error) { return _this.Error(error, defer); });\n                return defer.promise;\n            };\n            return RaptorDataService;\n        }(Ftw.Dataservice.BaseDataservice));\n        Dataservice.RaptorDataService = RaptorDataService;\n    })(Dataservice = Asg.Dataservice || (Asg.Dataservice = {}));\n})(Asg || (Asg = {}));\n\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Asg;\n(function (Asg) {\n    var Dataservice;\n    (function (Dataservice) {\n        var SolrParameterStore = (function () {\n            function SolrParameterStore() {\n                var _this = this;\n                this.q = ko.observable(\"\");\n                this.rows = ko.observable(0);\n                this.start = ko.observable(0);\n                this.qf = ko.observableArray([]);\n                this.from = ko.observable(0);\n                this.sort = ko.observable(\"\");\n                this.others = ko.observableArray([]);\n                this.AsNameValue = ko.computed({\n                    read: function () {\n                        var arr = new Array();\n                        arr.push(new Asg.Model.NameValue(\"q\", _this.q()));\n                        ko.utils.arrayForEach(_this.qf(), function (qf) {\n                            arr.push(new Asg.Model.NameValue(\"qf\", qf));\n                        });\n                        arr.push(new Asg.Model.NameValue(\"rows\", _this.rows()));\n                        arr.push(new Asg.Model.NameValue(\"start\", _this.start()));\n                        ko.utils.arrayForEach(_this.others(), function (nv) {\n                            arr.push(nv);\n                        });\n                        arr.push(new Asg.Model.NameValue(\"sort\", _this.sort()));\n                        return arr;\n                    }\n                });\n            }\n            return SolrParameterStore;\n        }());\n        Dataservice.SolrParameterStore = SolrParameterStore;\n        var SolrDataService = (function (_super) {\n            __extends(SolrDataService, _super);\n            function SolrDataService(solrCoreName) {\n                _super.call(this, \"Solr/\" + solrCoreName);\n                this.parameterStore = new SolrParameterStore();\n                //Make paging the right way http://jsfiddle.net/LAbCv/\n            }\n            /**\n             * Execute a search\n             * @param query if supplied if will be added or replaced in the parameter store with id \"q\"\n             */\n            SolrDataService.prototype.Search = function (query) {\n                var _this = this;\n                var defer = Q.defer();\n                if (query) {\n                    this.parameterStore.q(query);\n                }\n                this.data.get(this.serviceName, this.parameterStore.AsNameValue())\n                    .then(function (data) {\n                    Asg.Events.solrSearchQuery.trigger(_this.parameterStore);\n                    Asg.Events.solrSearchResult.trigger(data);\n                    defer.resolve(data);\n                })\n                    .catch(function (error) { return _this.Error(error, defer); });\n                return defer.promise;\n            };\n            return SolrDataService;\n        }(Ftw.Dataservice.BaseDataservice));\n        Dataservice.SolrDataService = SolrDataService;\n    })(Dataservice = Asg.Dataservice || (Asg.Dataservice = {}));\n})(Asg || (Asg = {}));\n/*{\nresponseHeader: {\nstatus: 0,\nQTime: 1\n},\nresponse: {\nnumFound: 1856,\nstart: 0,\nmaxScore: 1,\ndocs: [\n{\nProductLanguageID: \"LANG2\",\nProductName: \"Airsoftrifle, SL, spring, AW .308 sniper, blue\",\nProductVariantID: \"\",\nGroupID: \"1000-at-SHOP1\",\nProductID: \"18414-at-SHOP1\",\nProductPrice: 635.78658,\nProductLongDescription: \"<p><span style=\"color: rgb(133, 148, 163);\">A very powerful spring operated sniper is the licensed Accuracy International AW .308. Out of the box it shoots close to 2 joule and weight 3 kilos with its solid metal construction. The Sportline AW .308 has adjustable Hop-Up for accuracy and top rail for mounting aiming device.</span></p> <p><span style=\"color: rgb(133, 148, 163);\"><br /> </span></p> <p><span style=\"color: rgb(133, 148, 163);\">This version has a blue body to accommodate UK players with being VCRA compliant and no UKARA is needed.</span></p>\",\nProductNumber: \"18414\",\nShopGroupShopID: \"SHOP1\",\nscore: 1\n}\n]\n}\n}*/\n\nvar Asg;\n(function (Asg) {\n    var Events;\n    (function (Events) {\n        Events.solrSearchQuery = new Ftw.Core.Event('solrSearchQuery');\n        Events.solrSearchResult = new Ftw.Core.Event('solrSearchResult');\n        Events.solrSearchSuccessAction = new Ftw.Core.Event('solrSearchSuccessAction');\n    })(Events = Asg.Events || (Asg.Events = {}));\n})(Asg || (Asg = {}));\n\nvar Asg;\n(function (Asg) {\n    var Model;\n    (function (Model) {\n        var NameValue = (function () {\n            function NameValue(name, value) {\n                this.name = name;\n                this.value = value;\n            }\n            return NameValue;\n        }());\n        Model.NameValue = NameValue;\n    })(Model = Asg.Model || (Asg.Model = {}));\n})(Asg || (Asg = {}));\n/*{\nresponseHeader: {\nstatus: 0,\nQTime: 1\n},\nresponse: {\nnumFound: 1856,\nstart: 0,\nmaxScore: 1,\ndocs: [\n{\nProductLanguageID: \"LANG2\",\nProductName: \"Airsoftrifle, SL, spring, AW .308 sniper, blue\",\nProductVariantID: \"\",\nGroupID: \"1000-at-SHOP1\",\nProductID: \"18414-at-SHOP1\",\nProductPrice: 635.78658,\nProductLongDescription: \"<p><span style=\"color: rgb(133, 148, 163);\">A very powerful spring operated sniper is the licensed Accuracy International AW .308. Out of the box it shoots close to 2 joule and weight 3 kilos with its solid metal construction. The Sportline AW .308 has adjustable Hop-Up for accuracy and top rail for mounting aiming device.</span></p> <p><span style=\"color: rgb(133, 148, 163);\"><br /> </span></p> <p><span style=\"color: rgb(133, 148, 163);\">This version has a blue body to accommodate UK players with being VCRA compliant and no UKARA is needed.</span></p>\",\nProductNumber: \"18414\",\nShopGroupShopID: \"SHOP1\",\nscore: 1\n}\n]\n}\n}*/\n\nvar Asg;\n(function (Asg) {\n    var Model;\n    (function (Model) {\n        var SolrResult = (function () {\n            function SolrResult() {\n                this.responseHeader = {};\n                this.response = new SolrReponse();\n            }\n            return SolrResult;\n        }());\n        Model.SolrResult = SolrResult;\n        var SolrReponse = (function () {\n            function SolrReponse() {\n                this.docs = new Array();\n            }\n            return SolrReponse;\n        }());\n    })(Model = Asg.Model || (Asg.Model = {}));\n})(Asg || (Asg = {}));\n/*{\nresponseHeader: {\nstatus: 0,\nQTime: 1\n},\nresponse: {\nnumFound: 1856,\nstart: 0,\nmaxScore: 1,\ndocs: [\n{\nProductLanguageID: \"LANG2\",\nProductName: \"Airsoftrifle, SL, spring, AW .308 sniper, blue\",\nProductVariantID: \"\",\nGroupID: \"1000-at-SHOP1\",\nProductID: \"18414-at-SHOP1\",\nProductPrice: 635.78658,\nProductLongDescription: \"<p><span style=\"color: rgb(133, 148, 163);\">A very powerful spring operated sniper is the licensed Accuracy International AW .308. Out of the box it shoots close to 2 joule and weight 3 kilos with its solid metal construction. The Sportline AW .308 has adjustable Hop-Up for accuracy and top rail for mounting aiming device.</span></p> <p><span style=\"color: rgb(133, 148, 163);\"><br /> </span></p> <p><span style=\"color: rgb(133, 148, 163);\">This version has a blue body to accommodate UK players with being VCRA compliant and no UKARA is needed.</span></p>\",\nProductNumber: \"18414\",\nShopGroupShopID: \"SHOP1\",\nscore: 1\n}\n]\n}\n}*/\n\n/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Asg;\n(function (Asg) {\n    var ViewModels;\n    (function (ViewModels) {\n        var ApprovalStepViewModel = (function (_super) {\n            __extends(ApprovalStepViewModel, _super);\n            function ApprovalStepViewModel() {\n                var _this = this;\n                _super.call(this);\n                this.CartBackorderTotal = ko.observable(\"\");\n                this.CartAvailableItems = ko.observable(\"\");\n                this.PricesFromAjax = ko.observable(false);\n                this.EmptyMsg = ko.observable(false);\n                //Overwrite function from CartViewModel         \n                this.GetCurrentFromModule = function () {\n                    var cartObject = _this.Cart();\n                    if (_this.CheckoutPageId() != 0) {\n                        var data = {\n                            ID: _this.CheckoutPageId(),\n                            LayoutTemplate: \"Designs/Tapas/ajax_page.cshtml\",\n                            \"CartV2.GotoStep2\": \"true\",\n                            ajaxTapas: true\n                        };\n                        _this.data.postForm(\"Default.aspx\", data)\n                            .then(function (data) {\n                            _this.CartHtml($(data).find(\".lines\").html());\n                            _this.CartAvailableItems($(data).find(\".orderavailable\").html());\n                            _this.CartBackorderTotal($(data).find(\".backorderval\").html());\n                            setTimeout(function () {\n                                ko.applyBindings(_this, document.getElementById(\"orderlines\"));\n                            }, 50);\n                            _this.PricesFromAjax(true);\n                            if (cartObject.TotalProductQuantity() == 0) {\n                                _this.EmptyMsg(true);\n                            }\n                        })\n                            .finally(function () {\n                            _this.CartLoading(false);\n                        });\n                    }\n                    else {\n                        _this.CartLoading(false);\n                    }\n                };\n                this.GetCurrentFromModule();\n                Ftw.Events.cartLineAdded.subscribe(function (agrs) {\n                    _this.GetCurrentFromModule();\n                });\n            }\n            return ApprovalStepViewModel;\n        }(Tapas.ViewModels.CartViewModel));\n        ViewModels.ApprovalStepViewModel = ApprovalStepViewModel;\n    })(ViewModels = Asg.ViewModels || (Asg.ViewModels = {}));\n})(Asg || (Asg = {}));\n\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Asg;\n(function (Asg) {\n    var ViewModels;\n    (function (ViewModels) {\n        var ProductViewModel = (function (_super) {\n            __extends(ProductViewModel, _super);\n            function ProductViewModel() {\n                var _this = this;\n                _super.call(this, '');\n                Ftw.Events.cartLineAdded.subscribe(function (lineadded) {\n                    _this.Quantity(1);\n                });\n            }\n            return ProductViewModel;\n        }(Tapas.ViewModels.ProductViewModel));\n        ViewModels.ProductViewModel = ProductViewModel;\n    })(ViewModels = Asg.ViewModels || (Asg.ViewModels = {}));\n})(Asg || (Asg = {}));\n\n/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../interfaces/lightsliderconfig.ts\" />\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Tapas;\n(function (Tapas) {\n    var ViewModels;\n    (function (ViewModels) {\n        var ShowCartViewModel = (function (_super) {\n            __extends(ShowCartViewModel, _super);\n            function ShowCartViewModel() {\n                var _this = this;\n                _super.call(this);\n                this.OrderTemplateDataServive = new Ftw.Dataservice.OrderTemplateDataservice();\n                this.OrderTemplateSavedSweetAlert = ko.observable('');\n                this.OrderTemplateSaveAsListName = ko.observable('');\n                this.OrderTemplateShowFavListModalOpen = ko.observable(false);\n                // Here we listen to changes in the cartline when product is added\n                // Next we update the cart\n                this.Cart().CartLines.subscribe(function (changes) {\n                    _this.GetCurrentFromModule();\n                }, null, \"arrayChange\");\n            }\n            ShowCartViewModel.prototype.SaveCurrentCartAsOrderTemplate = function () {\n                var _this = this;\n                var cartObject = this.Cart();\n                var lines = [];\n                for (var i = 0; i < cartObject.CartLines().length; i++) {\n                    var line = cartObject.CartLines()[i];\n                    //var comment = line.CustomFields()[0].Value();\n                    //if (!comment) {\n                    //    comment = \"\"; \n                    //}\n                    var newLine = {\n                        productId: line.ProductId(),\n                        quantity: line.Quantity()\n                    };\n                    lines.push(newLine);\n                }\n                if (this.OrderTemplateSaveAsListName()) {\n                    this.OrderTemplateDataServive.CreateNewOrderTemplate(this.OrderTemplateSaveAsListName(), lines).then(function (result) {\n                        _this.OrderTemplateShowFavListModalOpen(false);\n                    }).finally(function () {\n                    });\n                }\n            };\n            return ShowCartViewModel;\n        }(Tapas.ViewModels.CartViewModel));\n        ViewModels.ShowCartViewModel = ShowCartViewModel;\n    })(ViewModels = Tapas.ViewModels || (Tapas.ViewModels = {}));\n})(Tapas || (Tapas = {}));\n\n/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\n/// <reference path=\"../../viewmodels/checkout/showcartviewmodel.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Asg;\n(function (Asg) {\n    var ViewModels;\n    (function (ViewModels) {\n        var CartStepViewModel = (function (_super) {\n            __extends(CartStepViewModel, _super);\n            function CartStepViewModel() {\n                var _this = this;\n                _super.call(this);\n                this.orderTemplateViewModel = new Tapas.ViewModels.OrderTemplateViewModel();\n                this.BackorderTotal = ko.observable(\"\");\n                //Overwrite function from CartViewModel         \n                this.GetCurrentFromModule = function () {\n                    var cartObject = _this.Cart();\n                    if (_this.CheckoutPageId() != 0) {\n                        var data = {\n                            ID: _this.CheckoutPageId(),\n                            LayoutTemplate: \"Designs/Tapas/ajax_page.cshtml\",\n                            ajaxTapas: true\n                        };\n                        _this.data.postForm(\"Default.aspx\", data)\n                            .then(function (data) {\n                            if (cartObject.TotalProductQuantity() == 0) {\n                                _this.CartState(\"empty\");\n                            }\n                            else {\n                                _this.CartState(\"populated\");\n                                _this.CartHtml($(data).find(\".lines\").html());\n                                _this.CartTotal($(data).find(\".total\").html());\n                                _this.BackorderTotal($(data).find(\".js-backorder\").html());\n                                setTimeout(function () {\n                                    ko.applyBindings(_this, document.getElementById(\"orderlines\"));\n                                }, 50);\n                            }\n                        })\n                            .finally(function () {\n                            _this.CartLoading(false);\n                        });\n                    }\n                    else {\n                        _this.CartLoading(false);\n                    }\n                };\n                //Overwrite function from CartViewModel\n                //We do not want to call getcurrentfrommodule in this function\n                this.UpdateQuantity = function (data, event) {\n                    clearTimeout(_this.timeout);\n                    var _target = $(event.target);\n                    var orderLineId = _target.attr(\"ftw-olid\");\n                    var quantity = parseInt(_target.val());\n                    if (quantity === 0) {\n                        _this.DeleteOrderLine(data, event);\n                        return;\n                    }\n                    _this.timeout = setTimeout(function () {\n                        _this.CartLoading(true);\n                        _this.CartDataService.UpdateCartLineQuantity(orderLineId, quantity)\n                            .fail(function () {\n                            _this.CartLoading(false);\n                        });\n                    }, 1000);\n                };\n                this.CartLoading(true);\n            }\n            //Overwrite function from CartViewModel  \n            CartStepViewModel.prototype.SaveCurrentCartAsOrderTemplate = function () {\n                var _this = this;\n                var cartObject = this.Cart();\n                var lines = [];\n                for (var i = 0; i < cartObject.CartLines().length; i++) {\n                    var line = cartObject.CartLines()[i];\n                    var newLine = {\n                        productId: line.ProductId(),\n                        quantity: line.Quantity()\n                    };\n                    lines.push(newLine);\n                }\n                if (this.OrderTemplateSaveAsListName()) {\n                    this.OrderTemplateDataServive.CreateNewOrderTemplate(this.OrderTemplateSaveAsListName(), lines).then(function (result) {\n                        _this.OrderTemplateShowFavListModalOpen(false);\n                    }).finally(function () {\n                    });\n                }\n            };\n            return CartStepViewModel;\n        }(Tapas.ViewModels.ShowCartViewModel));\n        ViewModels.CartStepViewModel = CartStepViewModel;\n    })(ViewModels = Asg.ViewModels || (Asg.ViewModels = {}));\n})(Asg || (Asg = {}));\n\n/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Asg;\n(function (Asg) {\n    var ViewModels;\n    (function (ViewModels) {\n        var InformationStepViewModel = (function () {\n            function InformationStepViewModel() {\n                var _this = this;\n                this.optionalDeliveryAddressChecked = ko.observable(false);\n                this.inputDisabled = ko.observable(true);\n                this.optionalDeliveryAddressChecked.subscribe(function (boolValue) {\n                    if (boolValue)\n                        _this.inputDisabled(false);\n                    else\n                        _this.inputDisabled(true);\n                });\n            }\n            return InformationStepViewModel;\n        }());\n        ViewModels.InformationStepViewModel = InformationStepViewModel;\n    })(ViewModels = Asg.ViewModels || (Asg.ViewModels = {}));\n})(Asg || (Asg = {}));\n\n/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Asg;\n(function (Asg) {\n    var ViewModels;\n    (function (ViewModels) {\n        var LoginViewModel = (function (_super) {\n            __extends(LoginViewModel, _super);\n            function LoginViewModel() {\n                _super.call(this);\n                this.confirm = ko.observable(false);\n                this.error = ko.observable(false);\n                this.areaId = ko.observable(\"1\");\n                this.mailSubject = ko.observable(\"\");\n            }\n            //Overwrite function from LoginViewModel\n            //Recover password function\n            LoginViewModel.prototype.recover = function () {\n                var _this = this;\n                this.ForgottenLoader(true);\n                var data = {\n                    AccessUserEmail: this.email(),\n                    ForgotPasswordMailTemplate: 'Usermanagement/Login/firstweb.forgottenMailTemplate.cshtml',\n                    ForgotPasswordSenderEmail: 'robot@actionsportgames.com',\n                    ForgotPasswordMailSubject: this.mailSubject()\n                };\n                this.data.postForm('/Default.aspx?ID=' + this.loginId + '&LoginAction=Recovery', data)\n                    .then(function (data) {\n                    _this.confirmation(data);\n                    _this.ForgottenLoader(false);\n                    _this.confirm(true);\n                })\n                    .fail(function (error) {\n                    _this.ForgottenLoader(false);\n                    _this.confirm(false);\n                    _this.error(true);\n                });\n            };\n            //Overwrite function from Tapas\n            //Login function, checksfor fails and gives the user a message\n            LoginViewModel.prototype.Login = function () {\n                var _this = this;\n                var login = new Ftw.Dto.LoginRequest(this.UserName(), this.Password(), this.rememberMe(), this.areaId());\n                this.UserDataService.Login(login).then(function (user) {\n                    if (user.IsLoggedIn()) {\n                        setTimeout(function () {\n                            return window.location.reload();\n                        }, 1000);\n                    }\n                    else {\n                        _this.LoginFailed(true);\n                        setTimeout(function () {\n                            return _this.LoginFailed(false);\n                        }, 2000);\n                    }\n                    setTimeout(function () {\n                        return _this.Loader(true);\n                    }, 2000);\n                });\n            };\n            return LoginViewModel;\n        }(Tapas.ViewModels.LoginViewModel));\n        ViewModels.LoginViewModel = LoginViewModel;\n    })(ViewModels = Asg.ViewModels || (Asg.ViewModels = {}));\n})(Asg || (Asg = {}));\n\n/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\nvar Asg;\n(function (Asg) {\n    var ViewModels;\n    (function (ViewModels) {\n        var NewsletterRecipient = (function () {\n            function NewsletterRecipient() {\n                var _this = this;\n                this.ModalSelector = ko.observable(\"\");\n                this.ModuleInitialized = ko.observable(false);\n                this.NewListEmail = ko.observable(\"\");\n                this.Modal = ko.observable(\"\");\n                this.Data = new Ftw.Data;\n                this.AllSubscribers = ko.observableArray([]);\n                this.NewsletterGroupId = ko.observable(0);\n                this.FormSelector = ko.observable(\"\");\n                this.NeedsUpdate = ko.observable(false);\n                this.State = ko.observable(0);\n                //0 Idle\n                //1 In progress\n                //2 Complete\n                this.GetAllSubscribers = function () {\n                    _this.Data.get('/api/session/user/EmailRecipients?userGroupId=' + _this.NewsletterGroupId()).then(function (json) {\n                        _this.AllSubscribers(json);\n                        if (!_this.ModuleInitialized()) {\n                            _this.ModuleInitialized(true);\n                            if (_this.NeedsUpdate()) {\n                                $(_this.ModalSelector()).modal(\"show\");\n                            }\n                        }\n                    });\n                };\n                this.InterceptForm = function () {\n                    var form = $(_this.FormSelector() + \" form\");\n                    form.on(\"submit\", function (e) {\n                        e.stopPropagation();\n                        e.preventDefault();\n                        var callUrl = form.attr(\"action\");\n                        var data = form.serialize();\n                        _this.State(1);\n                        _this.Data.postForm(form.attr('action'), data).finally(function () {\n                            _this.State(2);\n                            setTimeout(function () {\n                                _this.State(0);\n                            }, 2000);\n                            _this.GetAllSubscribers();\n                            _this.NewListEmail(\"\");\n                        });\n                    });\n                };\n                this.UpdatePreferences = function (command) {\n                    _this.Data.get('/Handlers/CustomUserHandler.ashx?cmd=setconfirmnewslettersettingstimestamp&type=' + command);\n                };\n                this.ModalSelector.subscribe(function () {\n                    _this.InterceptForm();\n                });\n                this.NewsletterGroupId.subscribe(function () {\n                    _this.GetAllSubscribers();\n                });\n            }\n            return NewsletterRecipient;\n        }());\n        ViewModels.NewsletterRecipient = NewsletterRecipient;\n    })(ViewModels = Asg.ViewModels || (Asg.ViewModels = {}));\n})(Asg || (Asg = {}));\n\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Asg;\n(function (Asg) {\n    var ViewModels;\n    (function (ViewModels) {\n        var SolrSearchViewModel = (function (_super) {\n            __extends(SolrSearchViewModel, _super);\n            function SolrSearchViewModel() {\n                var _this = this;\n                _super.call(this);\n                this.solrProductDataService = new Asg.Dataservice.SolrDataService(\"Products\");\n                this.cart = new Ftw.Dataservice.CartDataserviceDynamicweb();\n                this.searchResult = ko.observable(new Asg.Model.SolrResult());\n                this.query = ko.observable(\"\");\n                this.searchLoading = ko.observable(false);\n                this.timeoutId = 0;\n                this.selectedIndex = ko.observable(-1);\n                this.productPageId = ko.observable(12);\n                this.showSeeAllResults = ko.observable(false);\n                this.resultPageId = ko.observable(1684);\n                this.delayBeforeSearchInMiliseconds = ko.observable(150);\n                this.pageNumber = ko.observable(0);\n                this.CartLoading = ko.observable(false);\n                //public numPerPage = 20; //rows?\n                this.CurrentRegionFilterValue = ko.observable(\"\");\n                this.totalResults = ko.computed({\n                    owner: this,\n                    read: function () {\n                        var results = _this.searchResult();\n                        var _return = 0;\n                        if (results.facet_counts != null) {\n                            _return = results.facet_counts.facet_fields.ProductNumber.length;\n                            if (_return > 0)\n                                _return = _return / 2;\n                        }\n                        return _return;\n                    }\n                });\n                this.totalPages = ko.computed({\n                    owner: this,\n                    read: function () {\n                        var results = _this.totalResults();\n                        if (!results) {\n                            results = 1;\n                        }\n                        var div = Math.floor(results / _this.solrProductDataService.parameterStore.rows());\n                        div += results % _this.solrProductDataService.parameterStore.rows() > 0 ? 1 : 0;\n                        return div - 1;\n                    }\n                });\n                this.next = function () {\n                    if (_this.pageNumber() < _this.totalPages()) {\n                        _this.pageNumber(_this.pageNumber() + 1);\n                    }\n                };\n                this.previous = function () {\n                    if (_this.pageNumber() != 0) {\n                        _this.pageNumber(_this.pageNumber() - 1);\n                    }\n                };\n                this.hasNext = ko.computed({\n                    owner: this,\n                    read: function () {\n                        return _this.pageNumber() !== _this.totalPages();\n                    }\n                });\n                this.hasPrevious = ko.computed({\n                    owner: this,\n                    read: function () {\n                        return _this.pageNumber() !== 0;\n                    }\n                });\n                this.Search = function () {\n                    clearTimeout(_this.timeoutId);\n                    _this.searchLoading(true);\n                    _this.timeoutId = setTimeout(function () {\n                        _this.solrProductDataService.Search(_this.query())\n                            .then(function (result) {\n                            // Check whetever there are results or not before displaying \"No products\"\n                            if ($(\".instant-search .customTable.resultContainer > div\").length > 0) {\n                                if (result.response.numFound <= 0) {\n                                    document.getElementById(\"noproductsfound\").style.display = \"block\";\n                                }\n                            }\n                            else {\n                                document.getElementById(\"noproductsfound\").style.display = \"none\";\n                            }\n                            _this.searchResult(result);\n                        }).finally(function () {\n                            _this.searchLoading(false);\n                        });\n                    }, _this.delayBeforeSearchInMiliseconds());\n                };\n                this.UpdateQuantity = function (doc, event) {\n                    var _target = $(event.target);\n                    var val = _target.val();\n                    doc.Quantity = val;\n                };\n                this.AddToCart = function (product, event) {\n                    var _target = $(event.target);\n                    var quantity = _target.parent().parent().find(\".instantSearchQuantity, .resultPageQuantity\");\n                    _this.CartLoading(true);\n                    var addArgs = {\n                        productId: product.ProductID,\n                        quantity: quantity.val()\n                    };\n                    _this.cart.AddProduct(addArgs).then(function (cart) {\n                        Asg.Events.solrSearchSuccessAction.trigger(_this.solrProductDataService.parameterStore.AsNameValue());\n                    }).finally(function () {\n                        _this.CartLoading(false);\n                    });\n                };\n                this.handleKeys = function (keyboardEvent, combo) {\n                    var newIndex = -1;\n                    var resultsIndex = _this.searchResult().response.docs.length - 1;\n                    switch (combo) {\n                        case 'up':\n                            newIndex = _this.selectedIndex() - 1;\n                            if (newIndex < 0) {\n                                newIndex = resultsIndex;\n                            }\n                            _this.selectedIndex(newIndex);\n                            break;\n                        case 'down':\n                            newIndex = _this.selectedIndex() + 1;\n                            if (newIndex > resultsIndex) {\n                                newIndex = 0;\n                            }\n                            _this.selectedIndex(newIndex);\n                            break;\n                        case 'enter':\n                            // Check if searchfield is focus to prevent users from clicking enter when in quantity field\n                            // #instantSearch exists twice when on searchpage, so we can't check directly on this id\n                            if ($(\".dropDown-header > input\").is(\":focus\")) {\n                                if (_this.selectedIndex() > -1) {\n                                    var product = _this.searchResult().response.docs[_this.selectedIndex()];\n                                    _this.gotoProductPage(product);\n                                }\n                                if (_this.totalResults() == 1) {\n                                    var product = _this.searchResult().response.docs[0];\n                                    _this.gotoProductPage(product);\n                                }\n                                else if (_this.totalResults() > 1) {\n                                    _this.gotoResultPage();\n                                }\n                                else {\n                                    _this.gotoResultPage();\n                                }\n                            }\n                            break;\n                    }\n                };\n                this.gotoProductPage = function (product) {\n                    Asg.Events.solrSearchSuccessAction.trigger(_this.solrProductDataService.parameterStore.AsNameValue());\n                    var link = '/Default.aspx?Id=' + _this.productPageId() + '&ProductId=' + product.ProductID;\n                    window.location.href = link;\n                };\n                this.gotoResultPage = function () {\n                    Asg.Events.solrSearchSuccessAction.trigger(_this.solrProductDataService.parameterStore.AsNameValue());\n                    var query = encodeURIComponent(_this.solrProductDataService.parameterStore.q());\n                    var link = '/Default.aspx?Id=' + _this.resultPageId() + '&q=' + query;\n                    window.location.href = link;\n                };\n                //How many rows we want to return - subscribe                                        \n                this.solrProductDataService.parameterStore.rows(5);\n                //Forhindre dubletter i resultatet\n                this.solrProductDataService.parameterStore.others.push(new Asg.Model.NameValue(\"group\", \"true\"));\n                this.solrProductDataService.parameterStore.others.push(new Asg.Model.NameValue(\"group.field\", \"ProductNumber\"));\n                this.solrProductDataService.parameterStore.others.push(new Asg.Model.NameValue(\"group.main\", \"true\"));\n                //Giver en facet at taelle det samlede antal paa da numFound ikke laengere passer\n                this.solrProductDataService.parameterStore.others.push(new Asg.Model.NameValue(\"facet\", \"true\"));\n                this.solrProductDataService.parameterStore.others.push(new Asg.Model.NameValue(\"facet.field\", \"ProductNumber\"));\n                this.solrProductDataService.parameterStore.others.push(new Asg.Model.NameValue(\"facet.limit\", \"-1\"));\n                this.solrProductDataService.parameterStore.others.push(new Asg.Model.NameValue(\"facet.mincount\", \"1\"));\n                //Values set from the DOM with initValue are not present in the constructor - so we subscribe. We need a better concept for handling constructor values\n                this.CurrentRegionFilterValue.subscribe(function (newValue) {\n                    _this.solrProductDataService.parameterStore.others.push(new Asg.Model.NameValue(\"fq\", \"ShowOnShop:\" + newValue));\n                });\n                //Search when pageNumber changes\n                this.pageNumber.subscribe(function (newPage) {\n                    var start = newPage * _this.solrProductDataService.parameterStore.rows();\n                    _this.solrProductDataService.parameterStore.start(start);\n                    _this.Search();\n                });\n                //Search from start when new query is entered\n                this.query.subscribe(function (newQuery) {\n                    //Reset\n                    _this.solrProductDataService.parameterStore.qf.removeAll();\n                    _this.solrProductDataService.parameterStore.sort(\"\");\n                    _this.solrProductDataService.parameterStore.q(newQuery);\n                    _this.solrProductDataService.parameterStore.start(0);\n                    _this.pageNumber(0);\n                    //We sort on ProductNumber when users are searching for product numbers.                                \n                    if ($.isNumeric(newQuery)) {\n                        _this.solrProductDataService.parameterStore.qf.push(\"productnumberngram\");\n                        _this.solrProductDataService.parameterStore.sort(\"ProductNumber ASC, score DESC\");\n                    }\n                    else {\n                        _this.solrProductDataService.parameterStore.qf.push(\"nameexact^100\");\n                        _this.solrProductDataService.parameterStore.qf.push(\"textexact^50\");\n                        _this.solrProductDataService.parameterStore.qf.push(\"namengram^30\");\n                        _this.solrProductDataService.parameterStore.qf.push(\"textngram^10\");\n                    }\n                    _this.Search();\n                });\n                this.searchResult.subscribe(function (newResult) {\n                    _this.showSeeAllResults((newResult.response.docs.length > 0));\n                });\n            }\n            return SolrSearchViewModel;\n        }(Ftw.ViewModels.BaseViewModel));\n        ViewModels.SolrSearchViewModel = SolrSearchViewModel;\n    })(ViewModels = Asg.ViewModels || (Asg.ViewModels = {}));\n})(Asg || (Asg = {}));\n/*{\nresponseHeader: {\nstatus: 0,\nQTime: 1\n},\nresponse: {\nnumFound: 1856,\nstart: 0,\nmaxScore: 1,\ndocs: [\n{\nProductLanguageID: \"LANG2\",\nProductName: \"Airsoftrifle, SL, spring, AW .308 sniper, blue\",\nProductVariantID: \"\",\nGroupID: \"1000-at-SHOP1\",\nProductID: \"18414-at-SHOP1\",\nProductPrice: 635.78658,\nProductLongDescription: \"<p><span style=\"color: rgb(133, 148, 163);\">A very powerful spring operated sniper is the licensed Accuracy International AW .308. Out of the box it shoots close to 2 joule and weight 3 kilos with its solid metal construction. The Sportline AW .308 has adjustable Hop-Up for accuracy and top rail for mounting aiming device.</span></p> <p><span style=\"color: rgb(133, 148, 163);\"><br /> </span></p> <p><span style=\"color: rgb(133, 148, 163);\">This version has a blue body to accommodate UK players with being VCRA compliant and no UKARA is needed.</span></p>\",\nProductNumber: \"18414\",\nShopGroupShopID: \"SHOP1\",\nscore: 1\n}\n]\n}\n}*/\n\n/// <reference path=\"solrsearchviewmodel.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Asg;\n(function (Asg) {\n    var ViewModels;\n    (function (ViewModels) {\n        var RaptorProductList = (function (_super) {\n            __extends(RaptorProductList, _super);\n            function RaptorProductList() {\n                var _this = this;\n                _super.call(this);\n                this.raptorDataService = new Asg.Dataservice.RaptorDataService();\n                this.raptorMethodName = ko.observable('');\n                this.numberOfItems = ko.observable(4);\n                this.Visible = ko.observable(true);\n                //private checkIfMoreSlides = (el: any):void => {\n                //    if (el) {\n                //        let $elm: JQuery = $(el.context);\n                //        if ($elm) {\n                //            // enable arrow control\n                //            if (this.enableLoop() === false) {\n                //                // all the css classes are generated by the slider itself\n                //                // check if first item is active\n                //                if (this.firstItemClass()) {\n                //                    if ($elm.find(\".\" + this.firstItemClass()).offset().left > 0) {\n                //                        $elm.parent().find(\".lSPrev\").addClass(\"hide\");\n                //                    }\n                //                    else {\n                //                        $elm.parent().find(\".lSPrev\").removeClass(\"hide\");\n                //                    }\n                //                }\n                //                // check if last item is active\n                //                if (this.lastItemClass()) {\n                //                    let $children: JQuery = $elm.find(\".lslide\");\n                //                    let $sliderContainer: JQuery = $elm.closest(\".lSSlideOuter\");\n                //                    let containerWidth: number = $sliderContainer.outerWidth();\n                //                    if ($elm.find(\".\" + this.lastItemClass()).offset().left < containerWidth) {\n                //                        $elm.parent().find(\".lSNext\").addClass(\"hide\");\n                //                    }\n                //                    else {\n                //                        $elm.parent().find(\".lSNext\").removeClass(\"hide\");\n                //                    }\n                //                }\n                //            }\n                //            // enable arrow control\n                //        }\n                //    }\n                //};\n                ////NEW SLIDER CONTROLS - FUNCTIONS\n                ////NEXT\n                //public nextSlide() {\n                //    this.lightSlider.goToNextSlide();\n                //}\n                ////PREV\n                //public prevSlide() {\n                //    this.lightSlider.goToPrevSlide();\n                //}\n                this.ItemClick = function (product) {\n                    _this.raptorDataService.ItemClick(product.ProductId(), _this.raptorMethodName());\n                    //Let the event bubble\n                    return true;\n                };\n                this.owlSlider = $();\n                this.owlSliderConfig = {\n                    items: 4,\n                    navigation: true,\n                    responsive: true,\n                    pagination: false,\n                    rewindNav: false,\n                    navigationText: [\"<i class='fa fa-angle-left'></i>\", \"<i class='fa fa-angle-right'></i>\"],\n                    itemsCustom: [\n                        [0, 1],\n                        [580, 1],\n                        [800, 2],\n                        [1100, 4]\n                    ]\n                };\n                //this.lightSliderConfig = {\n                //    item: this.numberOfItems(),\n                //    loop: this.enableLoop(),\n                //    slideMove: 1,\n                //    easing: 'cubic-bezier(0.25, 0, 0.25, 1)',\n                //    speed: 600,\n                //    pager: false,\n                //    controls: true,\n                //    slideEndAnimation: false,\n                //    onAfterSlide: this.checkIfMoreSlides,\n                //    onSliderLoad: this.checkIfMoreSlides,\n                //    responsive: [\n                //        {\n                //            breakpoint: 1100,\n                //            settings: {\n                //                item: 3,\n                //                slideMove: 1,\n                //                slideMargin: 10\n                //            }\n                //        },\n                //        {\n                //            breakpoint: 800,\n                //            settings: {\n                //                item: 2,\n                //                slideMove: 1,\n                //                slideMargin: 6,\n                //            }\n                //        },\n                //        {\n                //            breakpoint: 580,\n                //            settings: {\n                //                item: 1,\n                //                slideMove: 1\n                //            }\n                //        }\n                //    ]\n                //};\n            }\n            return RaptorProductList;\n        }(Tapas.ViewModels.ProductListViewModel));\n        ViewModels.RaptorProductList = RaptorProductList;\n    })(ViewModels = Asg.ViewModels || (Asg.ViewModels = {}));\n})(Asg || (Asg = {}));\n\n/// <reference path=\"solrsearchviewmodel.ts\" />\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Asg;\n(function (Asg) {\n    var ViewModels;\n    (function (ViewModels) {\n        var SolrSearchResultPageViewModel = (function (_super) {\n            __extends(SolrSearchResultPageViewModel, _super);\n            function SolrSearchResultPageViewModel() {\n                var _this = this;\n                _super.call(this);\n                this.combinedResult = ko.observable(new Asg.Model.SolrResult());\n                this.rows = ko.observable(20);\n                this.showMore = (function () {\n                    var newRows = _this.rows() + _this.solrProductDataService.parameterStore.rows();\n                    _this.solrProductDataService.parameterStore.rows(newRows);\n                    _this.Search();\n                });\n                this.solrProductDataService.parameterStore.rows(this.rows());\n                var query = Asg.Util.getParameterByName('q');\n                if (query.length > 0) {\n                    this.query(query);\n                    this.Search();\n                }\n                this.query.subscribe(function (query) {\n                    history.replaceState({ state: 'search' }, '', window.location.pathname + '?q=' + query);\n                });\n                this.searchResult.subscribe(function (result) {\n                    _this.combinedResult();\n                });\n            }\n            return SolrSearchResultPageViewModel;\n        }(Asg.ViewModels.SolrSearchViewModel));\n        ViewModels.SolrSearchResultPageViewModel = SolrSearchResultPageViewModel;\n    })(ViewModels = Asg.ViewModels || (Asg.ViewModels = {}));\n})(Asg || (Asg = {}));\n","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\nmodule Tapas.ViewModels {\r\n\r\n    export class MasterViewModel extends Ftw.ViewModels.BaseViewModel {\r\n        public LoginViewModel = new Tapas.ViewModels.LoginViewModel;\r\n\r\n        public menuOpen = ko.observable<boolean>(false);\r\n        public showCookie = ko.observable(false);\r\n        public load: KnockoutObservable<Load>;\r\n        public data: Ftw.Data;\r\n        public showNewsletterWidget: KnockoutObservable<boolean>;\r\n        public newsletterModal = ko.observable(\"\");\r\n        public newsletterSubscriptionStatus = ko.observable(false);\r\n        public showResponsiveMenu = ko.observable(false);\r\n        public responsive: KnockoutObservable<boolean>;\r\n        public windowWidth = ko.observable($(window).width());\r\n        public UserDataService = new Ftw.Dataservice.UserDataservice();\r\n        public User = Ftw.Core.InstanceManager.get<Ftw.Dto.User>('User');\r\n        public miniCartVisible = ko.observable(false)\r\n         \r\n        constructor() {\r\n            super();\r\n            \r\n            this.showCookieWarning();\r\n            this.showNewsletterWidgetAfterDelay();\r\n            this.load = ko.observable<Load>(new Load());\r\n            this.data = new Ftw.Data();\r\n            this.showNewsletterWidget = ko.observable(false);\r\n            this.UserDataService.GetCurrent();\r\n\r\n            Ftw.Events.cartLineAdded.subscribe((args) => {\r\n                if (this.menuOpen()) {\r\n                    this.miniCartVisible(false);\r\n                } else {\r\n                    this.miniCartVisible(true);\r\n                    this.menuOpen(true);\r\n                }\r\n            });\r\n\r\n            $(window).resize(() => {\r\n                this.windowWidth($(window).width());\r\n            });\r\n\r\n            this.responsive = ko.computed({\r\n                owner: this,\r\n                read: () => {\r\n                    return this.windowWidth() <= 991 ? true : false;\r\n                }\r\n            });\r\n        }\r\n\r\n        public closeMenu = () => {\r\n            if (this.menuOpen()) {\r\n                $(\".item.visible\").removeClass('visible');\r\n                this.menuOpen(false);\r\n                this.miniCartVisible(false);\r\n            }\r\n        }\r\n\r\n        public showCookieWarning = () => {\r\n            if (document.cookie.indexOf('Dynamicweb.CookieOptInLevel') == -1) {\r\n                this.showCookie(true);\r\n            }\r\n        }\r\n\r\n        public cookieAccept = () => {\r\n            this.data.get(\"/admin/public/CookieOptInLevelConfig.aspx?cmd=SetCookieOptInLevel&OptInLevel=2\");\r\n            this.showCookie(false);\r\n        }\r\n\r\n        public showNewsletterWidgetAfterDelay = () => {\r\n            if (!localStorage.getItem(\"newsletterHide\")) {\r\n                setTimeout(() => {\r\n                    this.showNewsletterWidget(true);\r\n                }, 10000);\r\n            }\r\n        }\r\n\r\n        public hideNewsletterWidget = () => {\r\n            localStorage.setItem(\"newsletterHide\", \"1\");\r\n            this.toggleNewsletterWidget()\r\n        }\r\n\r\n        public toggleNewsletterWidget = () => {\r\n            this.showNewsletterWidget(!this.showNewsletterWidget());\r\n        }\r\n\r\n        public submitNewsletterSubscription = (form) => {\r\n            this.data.postForm(\"/\", $(form).serialize())\r\n                .then((result) => {\r\n                    localStorage.setItem(\"newsletterHide\", \"1\");\r\n                    this.newsletterSubscriptionStatus(true);\r\n                    $(this.newsletterModal).modal();\r\n                    this.showNewsletterWidget(false);\r\n                })\r\n                .fail((error) => {\r\n                    this.newsletterSubscriptionStatus(false);\r\n                    $(this.newsletterModal).modal();\r\n                });\r\n        }\r\n\r\n        public toggleResponsiveMenu = () => {\r\n            this.showResponsiveMenu(!this.showResponsiveMenu());\r\n        }\r\n\r\n        //Can be used to invoke login modal when user is not logged in\r\n        public notLoggedIn() {\r\n            if (this.User().IsLoggedIn()) {\r\n                $('.loginModal').modal('show');\r\n            }\r\n        }\r\n\r\n    }\r\n\r\n    export class Load {\r\n        public active = ko.observable(false);\r\n        public text = ko.observable(\"\");\r\n    }\r\n}\r\n","/// <reference path=\"../../../../../../scripts/typings/q/q.d.ts\" />\r\n/// <reference path=\"../../../../../../scripts/typings/breeze/breeze.d.ts\" />\r\n/// <reference path=\"../../../../../../scripts/typings/knockout.validation/knockout.validation.d.ts\" />\r\n/// <reference path=\"viewmodels/masterviewmodel.ts\" />\r\nmodule Tapas {\r\n    export class Init {\r\n\r\n        constructor() {            \r\n            //var masterViewModel = new Tapas.ViewModels.MasterViewModel();\r\n            var config = new Ftw.FrameworkConfig();\r\n            config.DebugMode = true;\r\n            config.MasterViewModel = Tapas.ViewModels.MasterViewModel;\r\n            ko.validation.locale('da-DK');\r\n            \r\n            Ftw.Base.init(config);    \r\n        }\r\n    }\r\n    //Example of creating an event \r\n    //export namespace Events {\r\n    //        export var excel = new Ftw.Core.Event<any>('ExcelOrderLineAdded');\r\n    //}\r\n}","/// <reference path=\"viewmodels/masterviewmodel.ts\" />\r\n\r\nmodule Tapas {\r\n    export class Util {\r\n\r\n        public static back = () => {\r\n            window.history.back();\r\n        }\r\n\r\n        public static print = () => {\r\n            window.print()\r\n        }\r\n\r\n    }\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout.validation/knockout.validation.d.ts\" />\r\n/// <reference path=\"../viewmodels/masterviewmodel.ts\" />\r\n/// <reference path=\"../../../../../../../../packages/FTW.Frontend.1.0.47/content/scripts/Ftw1.0.47/Ftw.d.ts\" />\r\nmodule Asg {\r\n    export class Init {\r\n\r\n        constructor() {            \r\n            //var masterViewModel = new Tapas.ViewModels.MasterViewModel();\r\n            var config = new Ftw.FrameworkConfig();\r\n            config.DebugMode = false;\r\n            config.MasterViewModel = Asg.ViewModels.MasterViewModel;\r\n            ko.validation.locale('da-DK');\r\n            ko.options.deferUpdates = true;\r\n            Ftw.Base.init(config);           \r\n        }\r\n    }\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\n\r\nmodule Asg.ViewModels {\r\n    export class MasterViewModel extends Tapas.ViewModels.MasterViewModel {\r\n        public nlwiDataService = new Asg.Dataservice.NlwiDataService();\r\n        constructor() {\r\n            super();                        \r\n\r\n            Asg.Events.solrSearchQuery.subscribe((args) => {                        \r\n                (<any>window).dataLayer.push({\r\n                    event: 'SolrSearch',\r\n                    query: args.q() \r\n                });\r\n            });                      \r\n        }\r\n    }\r\n}","module Asg {\r\n    export class Util {\r\n\r\n        public static getParameterByName(name, url?): string {\r\n            if (!url) url = window.location.href;\r\n            name = name.replace(/[\\[\\]]/g, \"\\\\$&\");\r\n            var regex = new RegExp(\"[?&]\" + name + \"(=([^&#]*)|&|#|$)\"),\r\n                results = regex.exec(url);\r\n            if (!results) return null;\r\n            if (!results[2]) return '';\r\n            return decodeURIComponent(results[2].replace(/\\+/g, \" \"));\r\n        }\r\n\r\n    }\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class ApplyBindingsWithContext {\r\n        public update(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\t\t\t\r\n\t\t\tconsole.log(valueAccessor().parents);\r\n\t\t\tconsole.log(ko.unwrap(valueAccessor().query));\r\n\r\n\t\t\tvar query = ko.unwrap(valueAccessor().query);\r\n\t\t\t\r\n\t\t\tif (query != \"\") {\r\n\t\t\t\tko.applyBindings(viewModel, document.getElementById(query));\r\n\t\t\t}\r\n        }\r\n    }\r\n    ko.bindingHandlers['applyBindingsWithContext'] = new ApplyBindingsWithContext();\r\n} ","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class AsyncPriceLoad {\r\n        public update(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var forceUpdate = ko.unwrap(valueAccessor());\r\n            var data = new Ftw.Data();        \r\n            \r\n            //TODO: Rewrite from jQuery\r\n            var ele = $(element);\r\n            var priceMissing = ele.find(\".price.asyncLoad\");\r\n            if (priceMissing.length > 0) {\r\n                \r\n                var ids = \"count=\" + priceMissing.length;\r\n                var count = 0;\r\n\r\n                priceMissing.each(function () {\r\n                    ids += \"&productid[\" + count + \"]=\" + $(this).data(\"productid\");\r\n                    ids += \"&key[\" + count + \"]=\" + $(this).data(\"productkey\");\r\n                    count += 1;\r\n                })               \r\n                data.postForm('/Handlers/Firstweb.ERP.PriceCache.ashx?cmd=getpricesandstocks', ids).then((result) => {\r\n                    if (result.ERPStatus.Success) {\r\n                        \r\n                        $.each(result.Data, function (key, data) {\r\n                            var priceEle = $(\".price.asyncLoad[data-productkey='\" + key + \"']\");\r\n                            priceEle.find(\".brutto .bPrice\").html(data.PriceInfo.Tags[\"Firstweb:ErpPriceInfo.BruttoAmountFormattedNoSymbol\"]);\r\n                            priceEle.find(\".netto .nPrice\").html(data.PriceInfo.Tags[\"Firstweb:ErpPriceInfo.NettoPriceFormattedNoSymbol\"]);\r\n                            priceEle.parent().parent().find(\".stock\").attr(\"data-stock\", data.StockInfo.StockQuantity);\r\n\r\n                            if (data.PriceInfo.HasQuantityPrices == true) {\r\n                                priceEle.parent().find(\"#dLabel\").removeClass(\"hideQuantity\").addClass(\"loadQuantity\");\r\n                            }\r\n                        });\r\n                    }\r\n                    else {\r\n                        //TODO : Show some sort of error to the user based on the status\r\n                        console.log('ErpStatus not Successfull');\r\n                        \r\n                    }})\r\n                    .catch((error) => {\r\n                        //TODO : Show some sort of error to the user - shut down shopping?\r\n                        console.log(\"We catch fatal errors here - ex : no access to the ERP on local dev machines\");\r\n                    })\r\n                    .finally(() => {\r\n                        //Allways remove the loaders\r\n                        $(\".price.asyncLoad\").removeClass(\"asyncLoad\");\r\n                    });\r\n            }\r\n        }\r\n    }\r\n    ko.bindingHandlers['asyncPriceLoad'] = new AsyncPriceLoad();\r\n}\r\n","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export interface IBootstrapModal {\r\n        Id: string;\r\n        toggle: KnockoutObservable<boolean>;\r\n    }\r\n    export class BootstrapModal {\r\n        public static ModalArray: Array<Bootstrap.Modal> = [];\r\n        public static DismissonClick(params: IBootstrapModal) {\r\n            $('body').click(function (event) {\r\n                if ($(event.target).is(params.Id))\r\n                    if ($(params.Id).hasClass(\"in\"))\r\n                        params.toggle(false);\r\n            });\r\n        }\r\n        public static AutoFocus() {\r\n            $('.modal').on('shown.bs.modal', function () {\r\n                $(this).find('[autofocus]').focus();\r\n            });\r\n        }\r\n\r\n\r\n        public init(element: HTMLElement, valueAccessor: () => IBootstrapModal, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            var params = valueAccessor();\r\n            var modal = new Bootstrap.Modal(params.Id);\r\n            BootstrapModal.ModalArray.push(modal);\r\n            var modalElement = $(params.Id);\r\n            modalElement.attr('data-backdrop', 'static');\r\n            modalElement.attr('data-keyboard', \"false\");\r\n            modalElement.attr(\"role\", \"dialog\");\r\n            BootstrapModal.DismissonClick(params);\r\n        }\r\n\r\n        public update(element: HTMLElement, valueAccessor: () => IBootstrapModal, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            var params = valueAccessor();\r\n            var modal;\r\n\r\n            for (var i = 0; i < BootstrapModal.ModalArray.length; i++) {\r\n                if (BootstrapModal.ModalArray[i].Selector === params.Id)\r\n                    modal = BootstrapModal.ModalArray[i];\r\n            }\r\n            if (modal) {\r\n                if (params.toggle()) {\r\n                    modal.Show();\r\n                    BootstrapModal.AutoFocus();\r\n                }\r\n                else {\r\n                    modal.Hide();\r\n                }\r\n            }\r\n        }\r\n    }\r\n    ko.bindingHandlers['bootstrapModal'] = new BootstrapModal();\r\n}\r\n\r\n\r\nmodule Bootstrap {\r\n\r\n    export class Modal {\r\n        constructor(private selector: string) {\r\n            this.Selector = selector;\r\n        }\r\n        public Show() {\r\n            $(this.selector).modal('show');\r\n            $(this.selector).focus();\r\n            this.Active = true;\r\n        }\r\n        public Hide() {\r\n            $(this.selector).modal('hide');\r\n            this.Active = false;\r\n        }\r\n        public Selector: string;\r\n        public Active = false;\r\n    }\r\n}\r\n","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/bootstrap.datepicker/bootstrap.datepicker.d.ts\" />\r\n\r\n//https://github.com/eternicode/bootstrap-datepicker\r\n\r\nmodule Tapas.Bindings {\r\n    export class DatePicker {\r\n        public init(element: HTMLElement, valueAccessor: () => DatepickerOptions, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var ele = $(element);\r\n            var params = valueAccessor() || {};\r\n            var startDate = params.startDate || new Date()\r\n\r\n            ele.datepicker({\r\n                format: params.format || 'dd-mm-yyyy', //skal komme fra server\r\n                autoclose: params.autoclose || true,\r\n                keyboardNavigation: params.keyboardNavigation || true,\r\n                language: params.language || 'da', //skal komme fra server\r\n                todayHighlight: params.todayHighlight || true,\r\n                startDate: startDate,\r\n                endDate: params.endDate || null,\r\n                calendarWeeks: params.calendarWeeks || false,\r\n                daysOfWeekDisabled: params.daysOfWeekDisabled || null,\r\n                weekStart: params.weekStart || 1,\r\n                orientation: params.orientation || \"bottom\"\r\n            });\r\n\r\n            ele.datepicker(\"setDate\", startDate);\r\n        }\r\n    }\r\n    ko.bindingHandlers['datePicker'] = new DatePicker();\r\n}\r\n\r\n//languages\r\n//DK\r\n$.fn.datepicker.dates['da'] = {\r\n    days: [\"søndag\", \"mandag\", \"tirsdag\", \"onsdag\", \"torsdag\", \"fredag\", \"lørdag\"],\r\n    daysShort: [\"søn\", \"man\", \"tir\", \"ons\", \"tor\", \"fre\", \"lør\"],\r\n    daysMin: [\"sø\", \"ma\", \"ti\", \"on\", \"to\", \"fr\", \"lø\"],\r\n    months: [\"januar\", \"februar\", \"marts\", \"april\", \"maj\", \"juni\", \"juli\", \"august\", \"september\", \"oktober\", \"november\", \"december\"],\r\n    monthsShort: [\"jan\", \"feb\", \"mar\", \"apr\", \"maj\", \"jun\", \"jul\", \"aug\", \"sep\", \"okt\", \"nov\", \"dec\"],\r\n    today: \"I Dag\",\r\n    clear: \"Nulstil\"\r\n};\r\n\r\n//EN\r\n$.fn.datepicker.dates['en-GB'] = {\r\n    days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\r\n    daysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\r\n    daysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\r\n    months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\r\n    monthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\r\n    today: \"Today\",\r\n    monthsTitle: \"Months\",\r\n    clear: \"Clear\",\r\n    weekStart: 1,\r\n    format: \"dd/mm/yyyy\"\r\n};\r\n\r\n//SV\r\n$.fn.datepicker.dates['sv'] = {\r\n    days: [\"Söndag\", \"Måndag\", \"Tisdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lördag\"],\r\n    daysShort: [\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"],\r\n    daysMin: [\"Sö\", \"Må\", \"Ti\", \"On\", \"To\", \"Fr\", \"Lö\"],\r\n    months: [\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\", \"Oktober\", \"November\", \"December\"],\r\n    monthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\r\n    today: \"Idag\",\r\n    format: \"yyyy-mm-dd\",\r\n    weekStart: 1,\r\n    clear: \"Rensa\"\r\n};\r\n\r\n//NO\r\n$.fn.datepicker.dates['no'] = {\r\n    days: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag'],\r\n    daysShort: ['Søn', 'Man', 'Tir', 'Ons', 'Tor', 'Fre', 'Lør'],\r\n    daysMin: ['Sø', 'Ma', 'Ti', 'On', 'To', 'Fr', 'Lø'],\r\n    months: ['Januar', 'Februar', 'Mars', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Desember'],\r\n    monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],\r\n    today: 'I dag',\r\n    clear: 'Nullstill',\r\n    weekStart: 1,\r\n    format: 'dd.mm.yyyy'\r\n};\r\n\r\n//FI\r\n$.fn.datepicker.dates['fi'] = {\r\n    days: [\"sunnuntai\", \"maanantai\", \"tiistai\", \"keskiviikko\", \"torstai\", \"perjantai\", \"lauantai\"],\r\n    daysShort: [\"sun\", \"maa\", \"tii\", \"kes\", \"tor\", \"per\", \"lau\"],\r\n    daysMin: [\"su\", \"ma\", \"ti\", \"ke\", \"to\", \"pe\", \"la\"],\r\n    months: [\"tammikuu\", \"helmikuu\", \"maaliskuu\", \"huhtikuu\", \"toukokuu\", \"kesäkuu\", \"heinäkuu\", \"elokuu\", \"syyskuu\", \"lokakuu\", \"marraskuu\", \"joulukuu\"],\r\n    monthsShort: [\"tam\", \"hel\", \"maa\", \"huh\", \"tou\", \"kes\", \"hei\", \"elo\", \"syy\", \"lok\", \"mar\", \"jou\"],\r\n    today: \"tänään\",\r\n    clear: \"Tyhjennä\",\r\n    weekStart: 1,\r\n    format: \"d.m.yyyy\"\r\n};\r\n\r\n//Get more languages at: https://github.com/eternicode/bootstrap-datepicker/tree/master/js/locales","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class BreadCrumbBack {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n\t\t\tvar ele = $(element);\r\n\t\t\tvar previousMenu = document.getElementById(valueAccessor());\r\n\t\t\tvar thisSubMenu = ele.parent().parent();\r\n\r\n\t\t\tele.click(function (e) {\r\n\t\t\t\t$(previousMenu).addClass('active').show();\r\n\t\t\t\tthisSubMenu.fadeOut(200, () => {\r\n\t\t\t\t\t$(previousMenu).nextAll('div').remove()\r\n\t\t\t\t});\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n        }\r\n    }\r\n    ko.bindingHandlers['breadCrumbBack'] = new BreadCrumbBack();\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export interface IClassActiveArgs {\r\n        elementClass: string;\r\n        activeClass: string;\r\n    }\r\n    export class ClickToggleClassActive {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var params = valueAccessor();\r\n            var value = ko.unwrap(params.observable);\r\n\r\n            var elementClass = params.elementclass;\r\n            var activeClass = params.activeclass;\r\n\r\n            ko.utils.registerEventHandler(element, \"click\", function () {\r\n\r\n                if ($(element).hasClass(activeClass)) {\r\n                    $(element).removeClass(activeClass);\r\n                } else {\r\n                    $(elementClass).removeClass(activeClass);\r\n                    $(element).addClass(activeClass);\r\n                }\r\n            });\r\n        }\r\n    }\r\n    ko.bindingHandlers['clickToggleClassActive'] = new ClickToggleClassActive();\r\n} \r\n","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class ClickToggleClass {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var value = valueAccessor();\r\n\r\n            ko.utils.registerEventHandler(element, \"click\", function () {\r\n                $(element).toggleClass(valueAccessor);\r\n            });\r\n        }\r\n    }\r\n    ko.bindingHandlers['clickToggleClass'] = new ClickToggleClass();\r\n} \r\n","module Tapas.Bindings {\r\n    export class FadeVisible {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            element = $(element);\r\n            var value = valueAccessor();\r\n            element.toggle(ko.unwrap(value)); // Use \"unwrapObservable\" so we can handle values that may or may not be observable\r\n        }\r\n\r\n        public update(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var value = valueAccessor();\r\n            var delayIn = allBindingsAccessor.get('delayIn') || 0; // set a delay in\r\n            var delayOut = allBindingsAccessor.get('delayOut') || 0; // set a delay out\r\n            var duration = allBindingsAccessor.get('duration') || 'fast'; // set the fade in/out speed\r\n\r\n            ko.unwrap(value) ? $(element).delay(delayIn).fadeIn(duration) : $(element).delay(delayOut).fadeOut(duration);\r\n\r\n        }\r\n    };\r\n    ko.bindingHandlers['Fadevisible'] = new FadeVisible();\r\n}\r\n","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class FileUpload {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n            var value = valueAccessor();\r\n            var container = $(element);\r\n            var input = container.find(value.input);\r\n            var label = container.find(value.label);\r\n            var uploadedText = value.fileUploadedText;\r\n            var alreadyUploaded = !value.alreadyUploaded;\r\n            var defautlLabelText = label.html();\r\n\r\n            if (alreadyUploaded) {\r\n                $('.js-update-upload').val('false');\r\n                label.html(uploadedText);\r\n                container.addClass('active');\r\n            }\r\n\r\n            input.change(function () {\r\n\r\n                $('.js-update-upload').val('true');\r\n\r\n                if (input.val()) {\r\n                    label.html(uploadedText);\r\n                    container.addClass('active');\r\n                }\r\n                else {\r\n                    label.html(defautlLabelText);\r\n                    container.removeClass('active');\r\n                }\r\n\r\n            });\r\n\r\n        }\r\n    }\r\n    ko.bindingHandlers['fileUpload'] = new FileUpload();\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class Filter {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n            \r\n            var filter = {\r\n                __filters: null,\r\n                __filterSelectors: null,\r\n                __filterSearch: null,\r\n                __filterSearchLastValue: \"\",\r\n                __filterIds: null,\r\n                __documentsContainer: null,\r\n                __documents: null,\r\n                __distinctFilterValues: [],\r\n                __resetBtn: null,\r\n                __timeout: null,\r\n                __primaryFilterId: null,\r\n                __update: null,\r\n\r\n                init: function () {\r\n                    var _this = this;\r\n                    this.__primaryFilterId = $(\".filters\").attr(\"ftw-filter-primary\");\r\n                    this.__update = ($(\".filters\").attr(\"ftw-filter-update\") == \"true\");\r\n                    this.__filters = $(\".filters .filter\");\r\n                    this.__filterSelectors = $(\".filters .filter select\");\r\n                    this.__filterSearch = $(\".freetext\");\r\n                    this.__filterIds = this.__filters.map(function () { return $(this).attr('ftw-filter-id'); });\r\n                    this.__documentsContainer = $(\".filterrows\");\r\n                    this.__documents = $(\".filterrows .filterrow\");\r\n                    this.__resetBtn = $(\".filters .resetbtn\");\r\n                    this.__filterIds.each(function () {\r\n                        var filterid = this;\r\n                        var distinctValues : any = { id: filterid, values: jQuery.unique(_this.__documents.filter(\"[ftw-filter-\" + filterid + \"!='']\").map(function () { return $(this).attr(\"ftw-filter-\" + filterid); })) };\r\n                        distinctValues.values.sort();\r\n                        _this.__distinctFilterValues.push(distinctValues);\r\n\r\n                        var filterSelect = _this.__filterSelectors.filter(\"[ftw-filter-id='\" + filterid + \"']\");\r\n                        if (distinctValues.values.length > 0) {\r\n                            _this.__filters.filter(\"[ftw-filter-id  ='\" + filterid + \"']\").show();\r\n                            distinctValues.values.each(function () {\r\n                                if (filterSelect.find(\"option[value='\" + this + \"']\").length < 1) //Ekstra IE tjek for dubletter\r\n                                    filterSelect.append($(\"<option>\").attr(\"value\", this).text(this));\r\n                            });\r\n                        }\r\n                    });\r\n\r\n                    this.__filterSelectors.off('change').on('change', { base: this }, this.onFilterChange);\r\n                    this.__filterSearch.off('keyup').on('keyup', { base: this }, this.onFilterSearchChange);\r\n\r\n                    this.__resetBtn.off('click').on('click', { base: this }, this.onResetBtnClick);\r\n                },\r\n                unique: function (array) {\r\n                    return $.grep(array, function (el, index) {\r\n                        return index == $.inArray(el, array);\r\n                    });\r\n                },\r\n                onFilterChange: function (_event) {\r\n                    var base = _event.data.base;\r\n                    \r\n                    if ($(this).attr(\"ftw-filter-id\") == base.__primaryFilterId) {\r\n                        if ($(this).val() == \"\") {\r\n                            $(base.__filterSelectors[1]).val('').prop(\"disabled\", true);\r\n                        }\r\n                        else {\r\n                            var newdistinctValues = { id: \"attr2\", values: jQuery.unique(base.__documents.filter(\"[ftw-filter-attr1='\" + $(this).val() + \"']\").map(function () { return $(this).attr(\"ftw-filter-attr2\"); })) };\r\n                            if (newdistinctValues.values.length > 1) {\r\n                                $(base.__filterSelectors[1]).find(\"option\").hide();\r\n\r\n                                var optionsToShow = $(base.__filterSelectors[1]).find(\"option\").filter(function () {\r\n\r\n                                    if (jQuery.inArray($(this).val(), newdistinctValues.values) > -1)\r\n                                        return true;\r\n\r\n                                    return false;\r\n                                });\r\n\r\n                                if (optionsToShow.length > 1) {\r\n                                    optionsToShow.show();\r\n                                    $(base.__filterSelectors[1]).val('').prop(\"disabled\", false);\r\n                                }\r\n                                else {\r\n                                    $(base.__filterSelectors[1]).val('').prop(\"disabled\", true);\r\n                                }\r\n                            }\r\n                            else {\r\n                                $(base.__filterSelectors[1]).val('').prop(\"disabled\", true);\r\n                            }\r\n                        }\r\n\r\n\r\n                    }\r\n\r\n                    base.updateFilter();\r\n                },\r\n\r\n                onFilterSearchChange: function (_event) {\r\n                    var base = _event.data.base;\r\n                    if (base.__filterSearchLastValue == base.__filterSearch.val())\r\n                        return;\r\n\r\n                    clearTimeout(base.__timeout);\r\n                    base.__timeout = setTimeout(function () {\r\n                        base.updateFilter();\r\n                    }, 400);\r\n\r\n                },\r\n\r\n                onResetBtnClick: function (_event) {\r\n                    var base = _event.data.base;\r\n                    base.resetFilter();\r\n                },\r\n\r\n                resetFilter: function () {\r\n                    this.__documents.show();\r\n                    this.__filterSelectors.val(\"\");\r\n                    this.__filterSearch.val(\"\");\r\n\r\n                    $(\".doccount .count\").text(this.__documents.length);\r\n                   // this.__documentsContainer.hide();\r\n\r\n                    if (this.__update)\r\n                        this.updateFilterFacets(this.__documents);\r\n                },\r\n\r\n                updateFilter: function () {\r\n                    var base = this;\r\n                    var documentsToShow = this.__documents;\r\n                    var activeFilters = this.__filterSelectors.filter(function () { return $(this).val() != \"\"; })\r\n\r\n                    if (activeFilters.length == 0 && this.__filterSearch.val() == \"\") {\r\n                        this.__documents.fadeIn();\r\n\r\n                    }\r\n                    else {\r\n                        this.__documents.hide()\r\n\r\n                        var documentsFilter = \"\";\r\n                        activeFilters.each(function () {\r\n                            documentsFilter += \"[ftw-filter-\" + $(this).attr('ftw-filter-id') + \"='\" + $(this).val() + \"']\";\r\n                        });\r\n\r\n                        if (documentsFilter != \"\")\r\n                            documentsToShow = documentsToShow.filter(documentsFilter);\r\n\r\n                        if (base.__filterSearch != null && base.__filterSearch.length > 0)\r\n                        {\r\n                            base.__filterSearchLastValue = base.__filterSearch.val();\r\n\r\n                            if (base.__filterSearch.val() != \"\") //If search \r\n                            {\r\n                                var q = base.__filterSearch.val().toLowerCase();\r\n                                documentsToShow = documentsToShow.filter(function () {\r\n\r\n                                    return (\r\n                                        ($(this).attr('ftw-filter-freetext').toLowerCase().indexOf(q) > -1)\r\n                                        ||\r\n                                        ($(this).attr('ftw-filter-attr1') != null && $(this).attr('ftw-filter-attr1').toLowerCase().indexOf(q) > -1)\r\n                                        ||\r\n                                        ($(this).attr('ftw-filter-attr2') != null && $(this).attr('ftw-filter-attr2').toLowerCase().indexOf(q) > -1)\r\n                                        ||\r\n                                        ($(this).attr('ftw-filter-attr3') != null && $(this).attr('ftw-filter-attr3').toLowerCase().indexOf(q) > -1)\r\n                                        ||\r\n                                        ($(this).attr('data-filter-attr4') != null && $(this).attr('ftw-filter-attr4').toLowerCase().indexOf(q) > -1)\r\n                                        ||\r\n                                        ($(this).attr('ftw-filter-attr5') != null && $(this).attr('ftw-filter-attr5').toLowerCase().indexOf(q) > -1)\r\n                                    );\r\n                                });\r\n                            }\r\n                        }\r\n\r\n                        base.__documentsContainer.show();\r\n                        documentsToShow.fadeIn();\r\n\r\n                    }\r\n\r\n                    $(\".doccount .count\").text(documentsToShow.length);\r\n\r\n                    if (base.__update)\r\n                        base.updateFilterFacets(documentsToShow);\r\n                },\r\n                updateFilterFacets: function (visibleDocuments) {\r\n                    var base = this;\r\n\r\n                    base.__filterSelectors.each(function () {\r\n                        var filterAttr = $(this).data(\"filter\");\r\n\r\n                        var newdistinctValues = { id: filterAttr, values: jQuery.unique(visibleDocuments.map(function () { return $(this).attr(\"ftw-filter-\" + filterAttr); })) };\r\n                        $(this).find(\"option\").hide();\r\n                        $(this).find(\"option[value='']\").show();\r\n                        $(this).find(\"option[value='\" + $(this).val() + \"']\").show();\r\n\r\n                        var optionsToShow = $(this).find(\"option\").filter(function () {\r\n\r\n                            if (jQuery.inArray($(this).val(), newdistinctValues.values) > -1)\r\n                                return true;\r\n\r\n                            return false;\r\n                        });\r\n\r\n                        if (optionsToShow.length > 0) {\r\n                            optionsToShow.show();\r\n                        }\r\n                    });\r\n                }\r\n            }\r\n\r\n            filter.init();\r\n\r\n\r\n        }\r\n    }\r\n    ko.bindingHandlers['filter'] = new Filter();\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class FloatingMenu {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n\t\t\tvar _ele = $(element);\r\n\t\t\tvar floatingPosition = _ele.offset();\r\n\r\n\t\t\t$(document).scroll(function () {\r\n\t\t\t\tvar y = $(this).scrollTop();\r\n\r\n\t\t\t\tif (y >= floatingPosition.top) {\r\n\t\t\t\t\t_ele.addClass(\"float\");\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t_ele.removeClass(\"float\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n        }\r\n    }\r\n    ko.bindingHandlers['floatingMenu'] = new FloatingMenu();\r\n} \r\n","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class FocusFirstInputOnClick {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            ko.utils.registerEventHandler(element, \"click\", (e) => {\r\n\t\t\t\tif (element == e.target) {\r\n\t\t\t\t\t$(element).find(\"input[type='text']\").first().focus();\r\n\t\t\t\t}\r\n            });\r\n        }\r\n    }\r\n    ko.bindingHandlers['focusFirstInputOnClick'] = new FocusFirstInputOnClick();\r\n} \r\n","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class FormSubmitOnChange {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n\t\t\tvar load = bindingContext.$root.load();\r\n\t\t\tvar timeout;\r\n\t\t\t\r\n\t\t\tvar text = valueAccessor().text;\r\n\t\t\tvar delay = valueAccessor().delay;\r\n           \r\n\r\n            $(element).on(\"change\", function () {\r\n\t\t\t\tif (!delay) {\r\n\t\t\t\t\tload.active(true);\r\n\t\t\t\t\tload.text(text);\r\n\t\t\t\t\t$(element).submit();\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tclearTimeout(timeout);\r\n\r\n\t\t\t\t\ttimeout = setTimeout(function () {\r\n\t\t\t\t\t\tload.active(true);\r\n\t\t\t\t\t\tload.text(text);\r\n\r\n\t\t\t\t\t\t$(element).submit();\r\n\t\t\t\t\t}, delay);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t$(window).unload(function () {\r\n\t\t\t\tload.active(false);\r\n\t\t\t});\r\n        }\r\n    }\r\n    ko.bindingHandlers['formSubmitOnChange'] = new FormSubmitOnChange();\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class InstantSearchButtonControl {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var resultRowClassName = valueAccessor();\r\n            var number = -1;\r\n            var resultCount = -1;\r\n            var targetElement = $(element);\r\n            var resultRows = $(resultRowClassName); \r\n\r\n            targetElement.on('submit', function () {\r\n                if (number > -1) {\r\n                    var url = $(resultRowClassName + '.active a').attr('href');\r\n                    window.location.href = url;\r\n                    return false;\r\n                }\r\n                return true;\r\n            });          \r\n\t\t\t\r\n            targetElement.on(\"keydown\", function (e) {\r\n                if (e.which == 38 || e.which == 40)\r\n                    e.preventDefault();\r\n            });            \r\n            targetElement.bind('input', function (e) { \r\n                number = -1;\r\n            });\r\n            function upAndDown() {\r\n                var resultRows = $(resultRowClassName);\r\n                resultCount = resultRows.length - 1;\r\n                //Make sure user cant go over or under\r\n                if (number > resultCount) {\r\n                    number = -1;\r\n                } else if (number < -1) {\r\n                    number = resultCount;\r\n                }\r\n                resultRows.removeClass('active');\r\n                $(resultRowClassName + '.' + number).addClass('active');\r\n            }\r\n            targetElement.on(\"keyup\", function (e) {\r\n                var code = e.which;\r\n                if (code == 40) { // Up key\r\n                    number++;\r\n                    upAndDown();\r\n                } else if (code == 38) { //Down key\r\n                    number--;\r\n                    upAndDown();\r\n                }\r\n            });\r\n        }\r\n    }\r\n    ko.bindingHandlers['instantSearchButtonControls'] = new InstantSearchButtonControl();\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class instantSearchButtonControl {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var resultRowClassName = valueAccessor();\r\n            var number = -1;\r\n            var resultCount = -1;\r\n            var targetElement = $(element);           \r\n\r\n            targetElement.on(\"keydown\", function (e) {\r\n                if (e.which == 38 || e.which == 40)\r\n                    e.preventDefault();\r\n            });            \r\n            targetElement.bind('input', function (e) { \r\n                number = -1;\r\n            });\r\n            function upAndDown() {\r\n                var resultRows = $(resultRowClassName);\r\n                resultCount = resultRows.length - 1;\r\n\r\n                //Make sure user cant go over or under\r\n                if (number > resultCount) {\r\n                    number = resultCount;\r\n                } else if (number < 1) {\r\n                    number = 0;\r\n                }\r\n                resultRows.removeClass('active');\r\n                $(resultRowClassName + '.' + number).addClass('active');\r\n            }\r\n            targetElement.on(\"keyup\", function (e) {\r\n                var code = e.which;\r\n                if (code == 40) {\r\n                    number++;\r\n                    upAndDown();\r\n                } else if (code == 38) {\r\n                    number--;\r\n                    upAndDown();\r\n                }\r\n                e.preventDefault();\r\n            });\r\n        }\r\n    }\r\n    ko.bindingHandlers['instantsearchbuttoncontrols'] = new instantSearchButtonControl();\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n/// <reference path=\"../interfaces/lightsliderconfig.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class LightSlider {\r\n        public init(element: HTMLElement, valueAccessor: () => LightSliderConfig, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n            //TODO: JQUERY HACK NNO\r\n            var ele = $(element);\r\n            bindingContext.$data.lightSlider = ele;\r\n            ele.lightSlider(valueAccessor());\r\n        }\r\n       \r\n    }\r\n    ko.bindingHandlers['lightSlider'] = new LightSlider();\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n/// <reference path=\"../interfaces/lightsliderconfig.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class LightSliderDealer {\r\n        public init(element: HTMLElement, valueAccessor: () => LightSliderConfig, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n            //TODO: JQUERY HACK NNO\r\n            var ele = $(element);\r\n            bindingContext.$data.lightSlider = ele;\r\n            ele.lightSlider({\r\n                gallery: true,\r\n                item: 1,\r\n                loop: false,\r\n                thumbItem: 3,\r\n                thumbMargin: 20,\r\n                slideMargin: 0,\r\n                enableDrag: false,\r\n                slideEndAnimation: false,\r\n                onSliderLoad: function (el) {\r\n                    el.lightGallery({\r\n                    })\r\n                }\r\n            });\r\n        }\r\n       \r\n    }\r\n    ko.bindingHandlers['lightSliderDealer'] = new LightSliderDealer();\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export interface ILoadMoreItemsArgs {\r\n        currentPage: number;\r\n        totalPages: number;\r\n        layoutTemplate: string;\r\n        text: string;\r\n    }\r\n    export class LoadMoreItems {\r\n        public init(element: any, valueAccessor: () => ILoadMoreItemsArgs, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var load = bindingContext.$root.load();\r\n            var currentPage = valueAccessor().currentPage;\r\n            var totalPages = valueAccessor().totalPages;\r\n            var layoutTemplate = valueAccessor().layoutTemplate;\r\n            \r\n            var http = new Ftw.Data();\r\n            var currentlyLoading = false;\r\n\r\n            $(document).scroll(() => {\r\n                if (totalPages > currentPage) {\r\n\r\n                    var nextPage = currentPage + 1;\r\n                    var loadElement = $(element).offset().top;\r\n                    var y = $(document).scrollTop() + $(window).height();\r\n                    if (y >= loadElement && currentlyLoading == false) {\r\n                        currentlyLoading = true;\r\n                        load.active(true);\r\n                        load.text(valueAccessor().text);\r\n\r\n                        var data = {\r\n                            LayoutTemplate: layoutTemplate,\r\n                            page: nextPage,\r\n                            ajaxTapas: true\r\n                        };                       \r\n\r\n                        http.get(window.location.pathname, data)\r\n                            .then((data) => {\r\n\r\n                                var itemData = $(data).children().html();\r\n                                $(element).before(itemData);\r\n                                var childBindingContext = bindingContext.createChildContext(viewModel);\r\n                                currentPage++;\r\n\r\n                                ko.applyBindingsToDescendants(childBindingContext, document.getElementById(nextPage.toString()));\r\n                            })\r\n                            .finally(() => {\r\n                                load.active(false);\r\n                                load.text(\"\");\r\n                                currentlyLoading = false;\r\n                            });\r\n                    }\r\n                }\r\n            });\r\n\r\n            $(window).unload(function () {\r\n                load.active(false);\r\n            });\r\n        }\r\n    }\r\n    ko.bindingHandlers['loadMoreItems'] = new LoadMoreItems();\r\n} \r\n\r\n\r\n","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class LoadMoreProducts {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var load = bindingContext.$root.load();\r\n\t\t\tvar currentPage = valueAccessor().currentPage;\r\n\t\t\tvar totalPages = valueAccessor().totalPages;\r\n\r\n            var data = new Ftw.Data();\r\n\t\t\tvar currentlyLoading = false;\r\n\r\n\t\t\t$(document).scroll(function () {\r\n\t\t\t\tif (totalPages > currentPage) {\r\n\t\t\t\t\tvar nextPage = currentPage + 1;\r\n\r\n\t\t\t\t\tvar loadElement = $(element).offset().top;\r\n\t\t\t\t\tvar y = $(document).scrollTop() + $(window).height();\r\n\t\t\t\t\tif (y >= loadElement && currentlyLoading == false) {\r\n\t\t\t\t\t\tcurrentlyLoading = true;\r\n\t\t\t\t\t\tload.active(true);\r\n\t\t\t\t\t\tload.text(valueAccessor().text);\r\n\r\n\t\t\t\t\t\tdata.get(window.location.origin + window.location.pathname + (window.location.search ? window.location.search + \"&\" : \"?\") + \"LayoutTemplate=Designs/Tapas/ajax_page.cshtml&ajaxTapas=true&pagenum=\" + nextPage )\r\n\t\t\t\t\t\t.then((data) => {\r\n\t\t\t\t\t\t\tvar productsHtml = $(data).children().html();\r\n                            $(element).before(productsHtml);\r\n                            var childBindingContext = bindingContext.createChildContext(viewModel);\r\n                            ko.applyBindingsToDescendants(childBindingContext, document.getElementById(nextPage));\r\n\t\t\t\t\t\t\tcurrentPage++;\r\n\t\t\t\t\t\t\tbindingContext.$data.productListLoad(!bindingContext.$data.productListLoad());\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t.finally(() => {\r\n\t\t\t\t\t\t\tload.active(false);\r\n\t\t\t\t\t\t\tload.text(\"\");\r\n\t\t\t\t\t\t\tcurrentlyLoading = false;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\t$(window).unload(function () {\r\n\t\t\t\tload.active(false);\r\n\t\t\t});\r\n        }\r\n    }\r\n    ko.bindingHandlers['loadMoreProducts'] = new LoadMoreProducts();\r\n} \r\n","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class LoadOnBool {\r\n        public update(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var load = bindingContext.$root.load();\r\n\r\n\t\t\tif (ko.unwrap(valueAccessor().observableBool)) {\r\n\t\t\t\tload.active(true);\r\n\t\t\t\tload.text(valueAccessor().text);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tload.active(false);\r\n\t\t\t\tload.text(\"\");\r\n\t\t\t}\r\n\r\n\t\t\t$(window).unload(function () {\r\n\t\t\t\tload.active(false);\r\n\t\t\t});\r\n        }\r\n    }\r\n    ko.bindingHandlers['loadOnBool'] = new LoadOnBool();\r\n} \r\n","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class LoadOnClick {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var load = bindingContext.$root.load();\r\n\r\n\t\t\tko.utils.registerEventHandler(element, \"click\", function () {\r\n                load.active(true);\r\n\t\t\t\tload.text(valueAccessor());\r\n            });\r\n            \r\n\t\t\t$(window).unload(function () {\r\n\t\t\t\tload.active(false);\r\n\t\t\t});\r\n        }\r\n    }\r\n    ko.bindingHandlers['loadOnClick'] = new LoadOnClick();\r\n} \r\n","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class LoadSubGroup {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var data = new Ftw.Data();\r\n\t\t\tvar ele = $(element);\r\n\r\n\t\t\tele.click(function (e) {\r\n\t\t\t\tvar parentElement = document.getElementById(valueAccessor().parent);\r\n\t\t\t\t$(parentElement).addClass(\"load\");\r\n\r\n\t\t\t\tdata.get(window.location.origin + \"/\" + valueAccessor().href + \"&LayoutTemplate=Designs/Tapas/ajax_page.cshtml&ajaxTapas=true\")\r\n\t\t\t\t.then((data) => {\r\n\t\t\t\t\tvar subGroupHtml = $(data).html();\r\n\t\t\t\t\tvar subGroupNumber = $(data).children().attr(\"id\");\r\n\t\t\t\t\t$(parentElement).after(subGroupHtml).removeClass(\"active\").delay(200).fadeOut(0);\r\n\t\t\t\t\t$(\"#\" + subGroupNumber + \".setSubmenu\").fadeIn(200);\r\n\t\t\t\t\tko.applyBindings(viewModel, document.getElementById(subGroupNumber));\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\t$(parentElement).removeClass(\"load\");\r\n\t\t\t\t});\r\n\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n        }\r\n    }\r\n    ko.bindingHandlers['loadSubGroup'] = new LoadSubGroup();\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class Menu {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var ele = $(element);\r\n            ele.click(function (e) {\r\n                var _this = $(this);\r\n\t\t\t\tvar target = $(e.target);\r\n\r\n\t\t\t\tif (target.hasClass('visible')) {\r\n\t\t\t\t\t_this.removeClass('visible');\r\n\r\n\t\t\t\t\tif (_this.hasClass(\"menu\")) {\r\n\t\t\t\t\t\t_this.children().fadeOut(200)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse if (target.hasClass('mobileReset')) {\r\n\t\t\t\t\t$('.visible').removeClass('visible').children().fadeOut(200);\r\n\t\t\t\t\tbindingContext.$data.menuOpen(true);\r\n                } else if (target.hasClass('item')) {\r\n                    $('.item.visible').removeClass('visible');\r\n                    _this.addClass('visible');\r\n                    bindingContext.$data.menuOpen(true);\r\n                }\r\n\t\t\t\telse if (target.hasClass('hasDrop')) {\r\n\t\t\t\t\t$('.visible').removeClass('visible').children().hide();\r\n\t\t\t\t\t_this.addClass('visible');\r\n\r\n\t\t\t\t\t!bindingContext.$data.menuOpen() ? _this.children().fadeIn(200) : _this.children().show();\r\n\r\n\t\t\t\t\tbindingContext.$data.menuOpen(true);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif (target.hasClass('ecom')) {\r\n\t\t\t\t\t_this.children().addClass('active').not(':first').remove();\r\n\t\t\t\t}\r\n\r\n\t\t\t\te.stopPropagation();\r\n            });\r\n        }\r\n    }\r\n    ko.bindingHandlers['menu'] = new Menu();\r\n} \r\n","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class PostFilterOnChange {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n\t\t\tvar load = bindingContext.$root.load();\r\n\t\t\tvar timeout;\r\n\r\n            $(element).on(\"change\", function () {\r\n\t\t\t\tclearTimeout(timeout);\r\n\r\n\t\t\t\ttimeout = setTimeout(function () {\r\n\t\t\t\t\tload.active(!load.active());\r\n\t\t\t\t\tload.text(valueAccessor());\r\n\r\n\t\t\t\t\t$(element).submit();\r\n\t\t\t\t}, 1000);\r\n\t\t\t});\r\n\r\n\t\t\t$(window).unload(function () {\r\n\t\t\t\tload.active(false);\r\n\t\t\t});\r\n        }\r\n    }\r\n    ko.bindingHandlers['postFilterOnChange'] = new PostFilterOnChange();\r\n} \r\n","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class QuickOrder {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var resultRowClassName = valueAccessor();\r\n            var number = -1;\r\n            var resultCount = -1;\r\n            var targetElement = $(element);\r\n            var resultRows = $(resultRowClassName);    \r\n            var productName;\r\n\t\t\t\r\n            //Prevent default behaviour \r\n            targetElement.on(\"keydown\", function (e) {\r\n                if (e.which == 38 || e.which == 40 || e.which == 9)\r\n                    e.preventDefault();\r\n            });    \r\n            \r\n            //The function for going up and down        \r\n            function upAndDown() {\r\n                var resultRows = $(resultRowClassName);\r\n                resultCount = resultRows.length - 1;\r\n                $('#instantBuySearch').focus();\r\n                //Make sure user cant go over or under\r\n                if (number > resultCount) {\r\n                    number = -1;\r\n                } else if (number < -1) {\r\n                    number = resultCount;\r\n                }\r\n                resultRows.removeClass('active');\r\n                $(resultRowClassName + '.' + number).addClass('active');\r\n            }\r\n\r\n            //The function where we select the product\r\n            //This is used both with mouse and keyboard\r\n            function selectProduct() {\r\n\t\t\t\tvar productId;\r\n                var productName;\r\n                var variantId;\r\n                var unitId;\r\n                var alreadyInCart;\r\n\r\n\t\t\t\tif ($(\".QuickAddproductCount\").length == 1) {\r\n                    productId = $(resultRowClassName).attr(\"ftw-productid\");\r\n                    variantId = $(resultRowClassName).attr(\"ftw-variantId\");\r\n                    unitId = $(resultRowClassName).attr(\"ftw-unitId\");\r\n                    alreadyInCart = $(resultRowClassName).attr(\"ftw-alreadyincart\");\r\n\t\t\t\t\tproductName = $(resultRowClassName).text().replace(/\\s+/g, \" \");\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n                    productId = $(resultRowClassName + '.' + number).attr(\"ftw-productid\");\r\n                    variantId = $(resultRowClassName + '.' + number).attr(\"ftw-variantId\");\r\n                    unitId = $(resultRowClassName + '.' + number).attr(\"ftw-unitId\");\r\n                    alreadyInCart = $(resultRowClassName + '.' + number).attr(\"ftw-alreadyincart\");\r\n\t\t\t\t\tproductName = $(resultRowClassName + '.active').text().replace(/\\s+/g, \" \");\r\n                }                \r\n                $(\"#quickOrderForm\").attr(\"ftw-productid\", productId);\r\n                $(\"#quickOrderForm\").attr(\"ftw-variantId\", variantId);\r\n                $(\"#quickOrderForm\").attr(\"ftw-unitId\", unitId);\r\n                $(\"#quickOrderForm\").attr(\"ftw-alreadyincart\", alreadyInCart);\r\n\r\n                $('.productName').val(productName);\r\n                $('#quickOrderQuantity').focus().select();\r\n\r\n                $(\"#quickOrderQuantity\").bind('input', function () {\r\n                    var quantity = $('#quickOrderQuantity').val();\r\n                    $(\"#quickOrderForm\").attr(\"ftw-quantity\", quantity);\r\n                });\r\n            }\r\n\r\n            //The function for resetting everything\r\n            //This is used both with mouse and keyboard \r\n            function reset() {\r\n                $('.productName').val(\"\");\r\n                $(\"#quickOrderForm\").attr(\"ftw-productid\", \"\");\r\n                $(\"#quickOrderForm\").attr(\"ftw-variantId\", \"\");\r\n                $(\"#quickOrderForm\").attr(\"ftw-quantity\", \"1\");\r\n                $(\"#quickOrderForm\").attr(\"ftw-unitid\", \"\");\r\n                $(\"#quickOrderForm\").attr(\"ftw-alreadyincart\", \"\");\r\n                $(\"#quickOrderQuantity\").val(\"1\");\r\n                $('#instantBuySearch').val(\"\").focus();\r\n                $('.result').hide();\r\n                number = -1;\r\n            }\r\n\r\n            //On hover we want to set number to the correct product\r\n            //And we want to add class 'active'\r\n            $('.result').on('mouseenter', '.customTable .tableRow', function () {\r\n                $('.customTable .tableRow').removeClass('active');\r\n                $(this).addClass('active');\r\n                number = parseInt($(this).attr('ftw-count'));\r\n            });\r\n            $('.result').on('mouseleave', '.customTable .tableRow', function () {\r\n                $(this).removeClass('active');\r\n            });\r\n\r\n            $('.result').on('click', '.customTable .tableRow', function () {\r\n                selectProduct();\r\n            });\r\n\r\n            //$('.quickAdd').on('click', function (e) {\r\n            //    if ($(e.target).hasClass('quickAdd') && productName !== '') {\r\n            //        $('#quickOrderForm').submit();\r\n                    \r\n            //        //reset();\r\n            //    }\r\n            //});\r\n\r\n\r\n            //Here we run the function for going up and down\r\n            //The select, put to cart and reset functionality\r\n            targetElement.on(\"keyup\", function (e) {\r\n                var code = e.which;\r\n\t\t\t\tvar quantityFocus = $(\"#quickOrderQuantity\").is(\":focus\");\r\n\t\t\t\tvar count = $(\".QuickAddproductCount\").length;\r\n\r\n                if (code == 40) { // Up key\r\n                    number++;\r\n                    upAndDown();\r\n                }\r\n\t\t\t\telse if (code == 38) { //Down key\r\n                    number--;\r\n                    upAndDown();\r\n                }\r\n\t\t\t\telse if ((code == 9 || code == 13) && (number < 0 && count != 1)) {\r\n                    e.preventDefault();\r\n\t\t\t\t}\r\n\t\t\t\telse if ((code == 9 || code == 13) && (number >= 0 || count == 1)) {\r\n                    resultCount = resultRows.length;\r\n                    if (quantityFocus == false) {\r\n                        selectProduct();\r\n                    } else if (code !== 9) {\r\n                        if ($(\"#quickOrderForm\").attr(\"ftw-alreadyincart\")) {\r\n                            number = -1;\r\n                        }\r\n                        else {\r\n                            reset();\r\n                        }\r\n                    }\r\n                }\r\n                else if(quantityFocus == false) {\r\n                    number = -1;\r\n                }\r\n            });\r\n        }\r\n    }\r\n    ko.bindingHandlers['quickOrder'] = new QuickOrder();\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n\r\n    export class QuillEditor {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var params = valueAccessor();\r\n            var input: JQuery = $('input[name=\"' + params.input + '\"]');\r\n            \r\n            // @ts-ignore\r\n            var quill = new Quill(element, {\r\n                theme: 'snow',\r\n                modules: {\r\n                    toolbar: [\r\n                        [{ header: [1, 2, 3, 4, 5, 6, false] }],\r\n                        ['bold', 'italic', 'underline']\r\n                    ]\r\n                }\r\n            });\r\n\r\n            quill.on('text-change', function () {\r\n                var newValue = quill.container.firstChild.innerHTML;\r\n                input.val(newValue);\r\n            });\r\n\r\n            element.onpaste = function () {\r\n                setErrorMessage();\r\n                return false;\r\n            }\r\n\r\n            element.ondragover = function () {\r\n                setErrorMessage();\r\n                return false;\r\n            }\r\n\r\n            function setErrorMessage() {\r\n                $(params.pasteErrorMessage).addClass('edit-storefront__paste-error--active');\r\n            }\r\n        }\r\n    }\r\n    ko.bindingHandlers['quillEditor'] = new QuillEditor();\r\n} \r\n","module App.Bindings {\r\n    export class ScrollToTop {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            var value = valueAccessor();\r\n            var scrollItem = $(element);\r\n\r\n            ko.utils.registerEventHandler(element, \"click\", function () {\r\n                $(\"html, body\").animate({ scrollTop: 0 }, \"ease\");\r\n            });\r\n\r\n            $(window).scroll(function () {\r\n                if ($(\"html, body\").scrollTop() > 300) {\r\n                    scrollItem.addClass(\"active\");\r\n                }\r\n                else {\r\n                    scrollItem.removeClass(\"active\");\r\n                }\r\n            });\r\n        }\r\n    }\r\n    ko.bindingHandlers['scrollToTop'] = new ScrollToTop();\r\n} ","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export interface ISpinEditBindingParams {\r\n        minimum: number;\r\n        updateObservable: KnockoutObservable<number>;\r\n    }\r\n\r\n    export class SpinEdit {\r\n        public init(element: any, valueAccessor: () => ISpinEditBindingParams, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var params = valueAccessor();\r\n            if (params.updateObservable) {\r\n                $(element).val(params.updateObservable());\r\n                $(element).spinedit(params.updateObservable);\r\n\r\n            } else {\r\n                $(element).spinedit(params.minimum);\r\n\r\n            }\r\n\r\n            $(element).on(\"valueChanged\", (e: any) => {\r\n                $(element).parent().parent().find(\".addToCart\").attr(\"ftw-quantity\", e.value);\r\n                //$(element).parent().parent().find(\".ordertemplatedialogquantity\").attr(\"ftw-quantity\", e.value);\r\n                if (params.updateObservable) {\r\n                    params.updateObservable(e.value);\r\n                }\r\n                //params.updateObservable(e.value);\r\n            });\r\n\r\n\r\n        }\r\n    }\r\n    ko.bindingHandlers['spinEdit'] = new SpinEdit();\r\n} \r\n","/// <reference path=\"../../../../../../../scripts/typings/sweetalert/sweetalert.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export interface ISweetAlertArgs {\r\n        // confirmation \r\n        observable: KnockoutObservable<any>;\r\n        headLine?: string;\r\n        text?: string;\r\n        success?: string;\r\n        confirmation?: boolean;\r\n        confirmationText?: string;\r\n        closeOnConfirm?: boolean;\r\n        callBack?: any;\r\n        confirmationButtonColor?: string;\r\n        cancelButtonText?: string;\r\n        // fail\r\n        failHeadline?: string;\r\n        failText?: string;\r\n        failType?: string;\r\n        //Succes\r\n        successHeadline?: string;\r\n        successText?: string;\r\n        successType?: string;\r\n        //Warning\r\n        warningHeadline?: string;\r\n        warningText?: string;\r\n        warningType?: string;\r\n    }\r\n    export class SweetAlert {\r\n        \r\n        public update(element: any, valueAccessor: () => ISweetAlertArgs, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\t\t\tvar params = valueAccessor();\r\n\t\t\tvar value = ko.unwrap(params.observable);\r\n\r\n\t\t\tif (value != ''){\r\n\t\t\t\t//Confirmation\r\n\t\t\t\tvar callBack = params.callBack;\r\n\t\t\t\tvar headline = params.headLine || 'Are you sure?'; // set a swal headline.\r\n\t\t\t\tvar text = params.text || ''; // set a swal text.\r\n\t\t\t\tvar type = params.success || 'warning'; // set the type of the swal \"success\"(default), \"error\" or \"warning\".\r\n\t\t\t\tvar confirmation = params.confirmation || true; // control if you want a confirmation button\r\n\t\t\t\tvar confirmationText = params.confirmationText || 'Ok'; // set confirmation text on button\r\n\t\t\t\tvar closeOnConfirm = params.closeOnConfirm || true; // Close on confirm\r\n\t\t\t\tvar confirmationButtonColor = params.confirmationButtonColor || '#DD6B55'; // Close on confirm\r\n\t\t\t\tvar cancelButtonText = params.cancelButtonText || 'Annuller';\r\n\t\t\t\t//fail\r\n\t\t\t\tvar failHeadline = params.failHeadline || '';\r\n\t\t\t\tvar failText = params.failText || '';\r\n\t\t\t\tvar failType = 'error';\r\n\t\t\t\t//succes\r\n\t\t\t\tvar succesHeadline = params.successHeadline || '';\r\n\t\t\t\tvar successText = params.successText || '';\r\n\t\t\t\tvar successType = 'success';\r\n\t\t\t\t//warning\r\n\t\t\t\tvar warningHeadline = params.warningHeadline || '';\r\n\t\t\t\tvar warningText = params.warningText || '';\r\n\t\t\t\tvar warningType = 'warning';\r\n\r\n\t\t\t\t// The user confirms then exit or confirms, on confirm run the callback function \r\n\t\t\t\tif (value == 'confirmation') {\r\n\t\t\t\t\tswal({\r\n\t\t\t\t\t\ttitle: headline,\r\n\t\t\t\t\t\ttext: text,\r\n\t\t\t\t\t\ttype: type,\r\n\t\t\t\t\t\tshowCancelButton: confirmation,\r\n\t\t\t\t\t\tconfirmButtonColor: confirmationButtonColor,\r\n\t\t\t\t\t\tconfirmButtonText: confirmationText,\r\n\t\t\t\t\t\tcloseOnConfirm: closeOnConfirm,\r\n\t\t\t\t\t\tcancelButtonText: cancelButtonText\r\n\t\t\t\t\t},\r\n\t\t\t\t\t() => {\r\n\t\t\t\t\t\tcallBack();\r\n\t\t\t\t\t});\r\n\t\t\t\t} \r\n\r\n\t\t\t\t//The user recieves the fail info provided in the dom\r\n\t\t\t\tif (value == 'fail') {\r\n\t\t\t\t\tswal({\r\n\t\t\t\t\t\ttitle: failHeadline,\r\n\t\t\t\t\t\ttext: failText,\r\n\t\t\t\t\t\ttype: failType\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t\t//The user recieves the success info in the dom\r\n\t\t\t\tif (value == 'success') {\r\n\t\t\t\t\tswal({\r\n\t\t\t\t\t\ttitle: succesHeadline,\r\n\t\t\t\t\t\ttext: successText,\r\n\t\t\t\t\t\ttype: successType\r\n\t\t\t\t\t})\r\n\t\t\t\t} \r\n\t\t\t\t//The user recieves the warning info in the dom\r\n\t\t\t\tif (value == 'warning') {\r\n\t\t\t\t\tswal({\r\n\t\t\t\t\t\ttitle: warningHeadline,\r\n\t\t\t\t\t\ttext: warningText,\r\n\t\t\t\t\t\ttype: warningType\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t\tparams.observable('');\r\n\t\t\t}\r\n        }\r\n    }\r\n    ko.bindingHandlers['sweetAlert'] = new SweetAlert();\r\n} ","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Tapas.Bindings {\r\n    export class ToggleClick {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var value = valueAccessor();\r\n\r\n            ko.utils.registerEventHandler(element, \"click\", function () {\r\n                value(!value());\r\n            });\r\n        }\r\n    }\r\n    ko.bindingHandlers['toggleClick'] = new ToggleClick();\r\n} \r\n","module Tapas.Bindings {\r\n    export class ToggleClassParent {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            element = $(element);\r\n            var value = valueAccessor();\r\n\r\n            $(element).click(function () {\r\n                $(this).parent().toggleClass(value);\r\n            });\r\n        }\r\n    };\r\n    ko.bindingHandlers['toggleClassParent'] = new ToggleClassParent();\r\n}\r\n","module Tapas.Bindings {\r\n    export interface IVideoPopupArgs {\r\n        startUrl?: string;\r\n        urlId?: string;\r\n        settings?: string;\r\n        videoUrl?: string;\r\n        modalSelector?: string;\r\n        modalClosewButtonSelector?: string;\r\n    }\r\n    export class VideoPopup {\r\n        public init(element: any, valueAccessor: () => IVideoPopupArgs, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            element = $(element);\r\n            var values = valueAccessor(),\r\n            startUrl = values.startUrl,\r\n            videoID = values.urlId,\r\n            settings = values.settings,\r\n            videoUrl = startUrl + videoID + settings,\r\n            videoModal = values.modalSelector,\r\n            modalClosewButtonSelector = values.modalClosewButtonSelector\r\n\r\n            element.on('click', function(){\r\n                $(videoModal).prepend(\"<iframe width class='modal-embed' src=\" + videoUrl + \" allowfullscreen=''></iframe>\");\r\n            });\r\n\r\n            $(modalClosewButtonSelector).on('click', function () {\r\n                $(\".modal-embed\").remove();\r\n            });\r\n\r\n        }\r\n    };\r\n    ko.bindingHandlers['videoPopup'] = new VideoPopup();\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../interfaces/lightsliderconfig.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\nmodule Tapas.ViewModels {\r\n    export class CartViewModel extends Ftw.ViewModels.BaseViewModel {\r\n        public Cart = Ftw.Core.InstanceManager.get<Ftw.Dto.Cart>('Cart');\r\n        public CartDataService = new Ftw.Dataservice.CartDataserviceDynamicweb;\r\n        public CartLoading = ko.observable(false);\r\n        public CheckoutPageId = ko.observable(0);\r\n        public CartHtml = ko.observable(\"\");\r\n        public CartTotal = ko.observable(\"\");\r\n        public CartState = ko.observable(\"notVisible\"); //empty //populated\r\n        public CartHtmlDefined: KnockoutComputed<boolean>;\r\n        public data = new Ftw.Data();\r\n        public timeout;\r\n        public EmptyCartStatus = ko.observable('');\r\n\r\n        constructor() {\r\n            super();\r\n\r\n            this.CartHtmlDefined = ko.computed({\r\n                owner: this,\r\n                read: () => {\r\n                    return this.CartHtml() == \"\" ? false : true;\r\n                }\r\n            });\r\n        }\r\n\r\n        public GetCurrentFromModule = () => {\r\n            var cartObject = this.Cart();\r\n            if (this.CheckoutPageId() != 0) {\r\n                var data = {\r\n                    ID: this.CheckoutPageId(),\r\n                    LayoutTemplate: \"Designs/Tapas/ajax_page.cshtml\",\r\n                    ajaxTapas: true\r\n                };\r\n                this.data.postForm(\"Default.aspx\", data)\r\n                    .then((data) => {\r\n                        if (cartObject.TotalProductQuantity() == 0) {\r\n                            this.CartState(\"empty\");\r\n                        } else {\r\n                            // We maybe need to reverse the minicart order RSH 23-05-16\r\n                            // Here we put the products in a array and reverse them\r\n                            //var dataReversed = $($(data).find(\".orderline\").get().reverse());\r\n                            //console.log(dataReversed);\r\n                            this.CartState(\"populated\");\r\n                            this.CartHtml($(data).find(\".lines\").html());\r\n                            this.CartTotal($(data).find(\".total\").html());\r\n                            ko.applyBindings(this, document.getElementById(\"orderlines\"));\r\n                        }\r\n                    })\r\n                    .finally(() => {\r\n                        this.CartLoading(false);\r\n                    });\r\n            }\r\n            else {\r\n                this.CartLoading(false);\r\n            }\r\n        }\r\n\r\n        public AddProduct = (data, event: Event) => {            \r\n            var _target = $(event.target);\r\n            var quantity = parseInt(_target.attr(\"ftw-quantity\"));\r\n            var productId = _target.attr(\"ftw-productid\");\r\n            var comment = _target.attr(\"ftw-comment\");   \r\n            var variantId = _target.attr(\"ftw-variantId\");\r\n            var unitId = _target.attr(\"ftw-unitId\");\r\n           \r\n            if (productId != '') {\r\n\r\n                this.CartLoading(true);\r\n                //Ex p� at added noget med et custom order linje felt der har systemnavnet \"Comment\"\r\n                //this.CartDataService.AddProduct({ productId, quantity, orderLineFields: [{ systemName: 'Comment', value: 'Dette er en kommentar' }] })\r\n                this.CartDataService.AddProduct({ productId: productId, quantity: quantity, variantId: variantId, unitId: unitId })\r\n                    .finally(() => {\r\n                        this.CartLoading(false);\r\n                    });\r\n            }\r\n        }\r\n\r\n        public AddProductOnSubmit = (data, event: Event) => {            \r\n            var quantity = parseInt(data.getAttribute(\"ftw-quantity\"));\r\n            var productId = data.getAttribute(\"ftw-productid\"); \r\n            var variantId = data.getAttribute(\"ftw-variantid\"); \r\n            var unitId = data.getAttribute(\"ftw-unitId\"); \r\n            var alreadyInCart = data.getAttribute(\"ftw-alreadyincart\");\r\n            if (alreadyInCart) {\r\n                $('.js-quickorder-already-in-cart-modal').modal('show');\r\n            }\r\n            else if (productId != '') {\r\n                this.CartLoading(true);\r\n                this.CartDataService.AddProduct({ productId: productId, quantity: quantity, variantId: variantId, unitId: unitId })\r\n                    .finally(() => {\r\n                        this.CartLoading(false);\r\n                    });\r\n            }\r\n        }\r\n\r\n        public AddProductOnSubmitPage = (data, event: Event) => {\r\n            var quantity = parseInt(data.getAttribute(\"ftw-quantity\"));\r\n            var productId = data.getAttribute(\"ftw-productid\");\r\n            var variantId = data.getAttribute(\"ftw-variantid\");\r\n            var unitId = data.getAttribute(\"ftw-unitId\");\r\n            var alreadyInCart = data.getAttribute(\"ftw-alreadyincart\");\r\n            if (alreadyInCart) {\r\n                $('.js-quickorder-page-already-in-cart-modal').modal('show');\r\n            }\r\n            else if (productId != '') {\r\n                this.CartLoading(true);\r\n                this.CartDataService.AddProduct({ productId: productId, quantity: quantity, variantId: variantId, unitId: unitId })\r\n                    .finally(() => {\r\n                        this.CartLoading(false);\r\n                    });\r\n            }\r\n        }\r\n\r\n        public QuickOrderAddExistingProduct = (data, event: Event) => {\r\n            var form = $(\"#quickOrderForm\");\r\n            var quantity = parseInt(form.attr(\"ftw-quantity\"));\r\n            var productId = form.attr(\"ftw-productid\");\r\n            var variantId = form.attr(\"ftw-variantid\");\r\n            var unitId = form.attr(\"ftw-unitId\");\r\n            if (productId != '') {\r\n                this.CartLoading(true);\r\n                this.CartDataService.AddProduct({ productId: productId, quantity: quantity, variantId: variantId, unitId: unitId })\r\n                    .finally(() => {\r\n                        this.CartLoading(false);\r\n                        this.ResetQuickOrder();\r\n                    });\r\n            }\r\n        }\r\n\r\n        public QuickOrderAddExistingProductPage = (data, event: Event) => {\r\n            var form = $(\"#quickOrderFormPage\");\r\n            var quantity = parseInt(form.attr(\"ftw-quantity\"));\r\n            var productId = form.attr(\"ftw-productid\");\r\n            var variantId = form.attr(\"ftw-variantid\");\r\n            var unitId = form.attr(\"ftw-unitId\");\r\n            if (productId != '') {\r\n                this.CartLoading(true);\r\n                this.CartDataService.AddProduct({ productId: productId, quantity: quantity, variantId: variantId, unitId: unitId })\r\n                    .finally(() => {\r\n                        this.CartLoading(false);\r\n                        this.ResetQuickOrder();\r\n                    });\r\n            }\r\n        }\r\n\r\n        public AddProductFromProductViewModel = (vm: Tapas.ViewModels.ProductViewModel) => {            \r\n            this.CartLoading(true);\r\n            this.CartDataService.AddProduct({ productId: vm.ProductId(), quantity: vm.Quantity(), variantId: vm.VariantId(), unitId: vm.UnitId(), orderLineFields: [{ systemName: 'Comment', value: vm.Comment() }] }) \r\n                .finally(() => {\r\n                    this.CartLoading(false);\r\n                    vm.AlreadyInCart(true);\r\n                });\r\n        }\r\n\r\n        public ResetQuickOrder = () => {\r\n\r\n            $('.productName').val(\"\");\r\n            $(\"#quickOrderForm\").attr(\"ftw-productid\", \"\");\r\n            $(\"#quickOrderForm\").attr(\"ftw-variantId\", \"\");\r\n            $(\"#quickOrderForm\").attr(\"ftw-quantity\", \"1\");\r\n            $(\"#quickOrderForm\").attr(\"ftw-unitid\", \"\");\r\n            $(\"#quickOrderForm\").attr(\"ftw-alreadyincart\", \"\");\r\n            $(\"#quickOrderQuantity\").val(\"1\");\r\n            $('#instantBuySearch').val(\"\").focus();\r\n            $('.result').hide();\r\n            $('.productNamePage').val(\"\");\r\n            $(\"#quickOrderFormPage\").attr(\"ftw-productid\", \"\");\r\n            $(\"#quickOrderFormPage\").attr(\"ftw-variantId\", \"\");\r\n            $(\"#quickOrderFormPage\").attr(\"ftw-quantity\", \"1\");\r\n            $(\"#quickOrderFormPage\").attr(\"ftw-unitid\", \"\");\r\n            $(\"#quickOrderQuantityPage\").val(\"1\");\r\n            $('#instantBuySearchPage').val(\"\").focus();\r\n\r\n        }\r\n\r\n        public UpdateQuantity = (data, event: Event) => {\r\n            clearTimeout(this.timeout);\r\n            var _target = $(event.target);\r\n            var orderLineId = _target.attr(\"ftw-olid\");\r\n            var quantity = parseInt(_target.val());\r\n            if (quantity === 0) {\r\n                this.DeleteOrderLine(data, event);\r\n                return;\r\n            }\r\n\r\n            this.timeout = setTimeout(() => {\r\n                this.CartLoading(true);\r\n                this.CartDataService.UpdateCartLineQuantity(orderLineId, quantity)\r\n                .then(() => {\r\n                    this.GetCurrentFromModule();\r\n                })\r\n                .fail(() => {\r\n                    this.CartLoading(false);\r\n                });\r\n            }, 1000);\r\n        }\r\n\r\n        public DeleteOrderLine = (data, event: Event) => {\r\n            var _target = $(event.target);\r\n            var orderLineId = _target.attr(\"ftw-olid\");\r\n            this.CartLoading(true);\r\n\r\n            this.CartDataService.DeleteCartLine(orderLineId)\r\n            .then((result) => {\r\n                //this.GetCurrentFromModule();\r\n            }).fail(() => {\r\n                this.CartLoading(false);\r\n            });\r\n        }\r\n\r\n        public ConfirmEmptyCart = () => {\r\n            this.EmptyCartStatus('confirmation');\r\n        }\r\n\r\n        public EmptyCart = () => {\r\n            this.CartLoading(true);\r\n            this.CartDataService.EmptyCart()\r\n            .then((result) => {\r\n                this.GetCurrentFromModule();\r\n            }).fail(() => {\r\n                this.CartLoading(false);\r\n            });\r\n        }\r\n    }\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/knockout.validation/knockout.validation.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/sweetalert/sweetalert.d.ts\" />\r\n\r\nmodule Tapas.ViewModels {\r\n    export class CustomerCenterViewModel extends Ftw.ViewModels.BaseViewModel {\r\n        public UserDataService = new Ftw.Dataservice.UserDataservice();        \r\n        public data = new Ftw.Data();\r\n        public UserContacts = ko.observableArray([]);\r\n        public OrderTemplateDetailsLink = ko.observable('');\r\n        public OrderTemplateList = ko.observableArray([]);\r\n        public OrderTemplateDataService = new Ftw.Dataservice.OrderTemplateDataservice();\r\n        public OrderTemplateNewListName = ko.observable('');\r\n        public OrderTemplateListVisible = ko.observable(false);\r\n        public NewUserStatus = ko.observable('');\r\n        public UserContactListVisible = ko.observable(false);\r\n        public UserEditContactInfoVisible = ko.observable(false);\r\n        public EditName = ko.observable('');\r\n        public EditPhone = ko.observable('');\r\n        public EditEmail = ko.observable('');\r\n        public EditId = ko.observable('');\r\n\r\n        public UserId = ko.observable('');\r\n\r\n\r\n        constructor() {            \r\n            super();\r\n            //this.UserDataService.GetCurrent().then((user) => {\r\n                \r\n            //});\r\n            this.UserDataService.GlobalInstanceUpdateOnSuccess = false;\r\n            this.UserDataService.GetContacts().then((data) => {\r\n                this.UserContacts(data);\r\n            });\r\n            this.OrderTemplateDataService.GetOrderTemplates().then((result) => {\r\n                this.OrderTemplateList(result);\r\n            });\r\n            this.OrderTemplateNewListName.extend({\r\n                required: true,\r\n                minLength: 3\r\n            });\r\n            var Id = 0;\r\n        }\r\n\r\n        //function for editing user\r\n        public editUser = (data: Ftw.Interfaces.IUser) => {\r\n            this.EditName(data.Name());\r\n            this.EditPhone(data.Phone());\r\n            this.EditEmail(data.Email());\r\n            this.EditId(data.Id());\r\n        }\r\n\r\n        //Function for saving edited user\r\n        public SaveEditUser = (form) => {\r\n            var data = $(form).serialize();\r\n\r\n            this.data.postForm('/Handlers/Firstweb.ERP.Users.ashx?cmd=saveuser', data)\r\n                .then((json) => {\r\n                    if (json.ERPStatus.Code != 0) {\r\n                        $('.status').removeClass('show');\r\n                        $('.error-' + json.ERPStatus.Code).addClass('show');\r\n                    } else {\r\n                        $('#UserEdit').modal('hide');\r\n                        $('.status').removeClass('show');\r\n                        this.UserDataService.GetContacts().then((data) => {\r\n                            this.UserContacts(data);\r\n                        });\r\n                    }\r\n                }).fail(() => {\r\n                    this.NewUserStatus('error');\r\n              \r\n                });\r\n        }\r\n\r\n        //Function for editing user info\r\n        public save = (form) => {\r\n            var data = $(form).serialize();\r\n            this.data.postForm('/Handlers/Firstweb.ERP.Users.ashx?cmd=saveuser', data)\r\n                .then((json) => {\r\n                    if (json.ERPStatus.Code != 0) {\r\n                        $('.status').removeClass('show');\r\n                        $('.error-' + json.ERPStatus.Code).addClass('show');\r\n                    } else {\r\n                        $('.status').removeClass('show');\r\n                        $('.userInfo').modal('hide');\r\n                        this.NewUserStatus('success');\r\n                        this.UserDataService.GetCurrent().then((user) => {\r\n                        });\r\n                    }\r\n                }).fail(() => {\r\n                    this.NewUserStatus('error');\r\n                });\r\n        }\r\n\r\n        //Function for making a new user\r\n        //TODO : loading and finaly\r\n        public makeNewUser = (form) => {\r\n\r\n            var data = $(form).serialize();\r\n            this.data.postForm('/Handlers/Firstweb.ERP.Users.ashx?cmd=createuser', data)\r\n                .then((json) => {\r\n                    var user = <Ftw.Interfaces.IUser>json.Data;\r\n                    if (json.ERPStatus.Code != 0) {\r\n                        $('.status').removeClass('show');\r\n                        $('.error-' + json.ERPStatus.Code).addClass('show');\r\n                    } else {\r\n                        $('.status').removeClass('show');\r\n                        this.UserDataService.GetContacts().then((data) => {\r\n                            this.UserContacts(data);\r\n                        });\r\n                        $('#Users').modal('hide');\r\n                        this.NewUserStatus('success');\r\n                        $(\"#Users #EditForm input\").val(\"\");\r\n                        $(\"#Users #EditForm #userid\").val(\"0\");\r\n                    }\r\n                }).fail(() => {\r\n                    this.NewUserStatus('error');\r\n              \r\n                });\r\n        }       \r\n\r\n        public delete = (data: Ftw.Interfaces.IUser) => {\r\n            this.NewUserStatus('confirmation');\r\n            this.UserId(data.Id());\r\n        }\r\n\r\n        //Function for deleting a user\r\n        //TODO : Loading animation and finaly\r\n        public deleteUser = () => {\r\n            this.data.get('/Handlers/Firstweb.ERP.Users.ashx?cmd=deleteuser&userid=' + this.UserId()).then(() => {\r\n                this.UserDataService.GetContacts().then((data) => {\r\n                    this.UserContacts(data);\r\n                    this.NewUserStatus('success');\r\n                }).fail(() => {\r\n                    this.NewUserStatus('error');\r\n                }).finally(() => {\r\n                    \r\n                });\r\n            });\r\n        }\r\n\r\n        //Function for making a new list\r\n        public makeNewList = () => {\r\n            var listName = this.OrderTemplateNewListName();\r\n            if (!this.OrderTemplateNewListName.isValid()) {\r\n                return;\r\n            }\r\n            this.OrderTemplateDataService.CreateNewOrderTemplate(listName)\r\n                .then((result) => {\r\n                    this.OrderTemplateList.unshift(result);\r\n                    $('.productListPopup').modal('hide');\r\n                }).fail(() => {\r\n                    this.NewUserStatus('error');\r\n                });\r\n        }\r\n        public GetOrderTemplates(productId?: string) {\r\n            this.OrderTemplateDataService.GetOrderTemplates(productId || '').then((result) => {\r\n                this.OrderTemplateList(result);\r\n            })\r\n        }\r\n        public GetOrderTemplateDetailLink(item: any): string {\r\n            return this.OrderTemplateDetailsLink() + '&otid=' + item.Key();\r\n\r\n        }\r\n    }\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/knockout.validation/knockout.validation.d.ts\" />\r\n\r\nmodule Tapas.ViewModels {\r\n    export class EditStorefrontViewModel extends Ftw.ViewModels.BaseViewModel {        \r\n        public data = new Ftw.Data();\r\n        public storeImages = ko.observableArray();\r\n        public webshopScreenshot = ko.observable(\"\");\r\n        public webshopPageHeader = ko.observable(\"\");\r\n        public loading = ko.observable(false);\r\n        public address = ko.observable('');\r\n        public zip = ko.observable('');\r\n        public city = ko.observable('');\r\n        public country = ko.observable('');\r\n        public customLat = ko.observable('');\r\n        public customLng = ko.observable('');\r\n        public geocodingApiKey = ko.observable('');\r\n\r\n        public addressComplete = ko.computed<boolean>(() => {\r\n            if (this.address() != '' && this.zip() != '' && this.city() != '' && this.country() != '') {\r\n                return true;\r\n            }\r\n            else {\r\n                return false;\r\n            }\r\n        });\r\n\r\n        public fullAddress = ko.computed<string>(() => {\r\n            return this.address() + ', ' + this.zip() + ' ' + this.city() + ', ' + this.country(); \r\n        });\r\n\r\n        constructor() {            \r\n            super();\r\n\r\n            $('.js-image-upload').change((e) => {\r\n                var form = $(e.currentTarget).parent('form');\r\n                this.UploadImage(form);\r\n            });\r\n\r\n            this.UpdateImages();\r\n\r\n            this.SetErrorMessageForWebsiteInput(); \r\n\r\n            var geolocationTimeouts = [];\r\n\r\n            this.fullAddress.subscribe(() => {\r\n                for (var i = 0; i < geolocationTimeouts.length; i++) {\r\n                    clearTimeout(geolocationTimeouts[i]);\r\n                }\r\n                if (this.addressComplete()) {\r\n                    var to = setTimeout(() => {\r\n                        this.GetLatLang();\r\n                    }, 500);\r\n                    geolocationTimeouts.push(to);\r\n                }\r\n            });\r\n\r\n        }\r\n\r\n        public UpdateImages = () => {\r\n\r\n            this.GetStoreImages();\r\n            this.GetWebshopScreenshot();\r\n            this.GetWebshopPageHeader();\r\n\r\n        }\r\n\r\n        public GetStoreImages = () => {\r\n\r\n            this.data.get('/Handlers/DealerImageHandler.ashx?cmd=getshopimages')\r\n                .then((json) => {\r\n                    this.storeImages(json.Data);\r\n                    if (json.ERPStatus.Success == true) {\r\n                        this.storeImages(json.Data);\r\n                    }\r\n                });\r\n\r\n        }\r\n\r\n        public GetWebshopScreenshot = () => {\r\n\r\n            this.data.get('/Handlers/DealerImageHandler.ashx?cmd=getscreenshot')\r\n                .then((json) => {\r\n                    if (json.ERPStatus.Success == true) {\r\n                        var query = new Date().getTime();\r\n                        this.webshopScreenshot(json.Data);\r\n                        if (this.webshopScreenshot()) {\r\n                            this.webshopScreenshot(this.webshopScreenshot() + '?' + query);\r\n                        }\r\n                    }\r\n                });\r\n\r\n        }\r\n\r\n        public GetWebshopPageHeader = () => {\r\n\r\n            this.data.get('/Handlers/DealerImageHandler.ashx?cmd=getheaderimage')\r\n                .then((json) => {\r\n                    if (json.ERPStatus.Success == true) {\r\n                        var query = new Date().getTime();\r\n                        this.webshopPageHeader(json.Data);\r\n                        if (this.webshopPageHeader()) {\r\n                            this.webshopPageHeader(this.webshopPageHeader() + '?' + query);\r\n                        }\r\n                    }\r\n                });\r\n\r\n        }\r\n\r\n        public DeleteShopImage = (imagename, modal) => {\r\n\r\n            this.data.get('/Handlers/DealerImageHandler.ashx?cmd=deleteshopimage&imagename=' + imagename)\r\n                .then((json) => {\r\n                    if (json.ERPStatus.Success == true) {\r\n                        $(modal).modal('hide');\r\n                        $(modal).on('hidden.bs.modal', () => {\r\n                            this.UpdateImages();\r\n                        });\r\n                    }\r\n                });\r\n\r\n        }\r\n\r\n        public DeleteWebshopScreenshot = (modal) => {\r\n\r\n            this.data.get('/Handlers/DealerImageHandler.ashx?cmd=deletewebshopscreenshot')\r\n                .then((json) => {\r\n                    if (json.ERPStatus.Success == true) {\r\n                        $(modal).modal('hide');\r\n                        this.UpdateImages();\r\n                    }\r\n                });\r\n\r\n        }\r\n\r\n        public DeletePageHeader = (modal) => {\r\n\r\n            this.data.get('/Handlers/DealerImageHandler.ashx?cmd=deletewebshopheader')\r\n                .then((json) => {\r\n                    if (json.ERPStatus.Success == true) {\r\n                        $(modal).modal('hide');\r\n                        this.UpdateImages();\r\n                    }\r\n                });\r\n\r\n        }\r\n\r\n        public UploadImage = (form) => {\r\n\r\n            var data = new FormData(form[0]);\r\n            var cmd = form.data('function');\r\n            this.loading(true);\r\n\r\n            $.ajax({\r\n                type: \"POST\",\r\n                url: '/Handlers/DealerImageHandler.ashx?cmd=' + cmd + '&imagekey=uploadimage',\r\n                data: data,\r\n                processData: false,\r\n                contentType: false,\r\n                success: (data) => {\r\n                    if (data.ERPStatus.Success) {\r\n                        this.UpdateImages();\r\n                    }\r\n                    else {\r\n                        if (cmd == \"uploadshopimage\") {\r\n                            this.OpenModal('.js-upload-error-modal');\r\n                        }\r\n                        else {\r\n                            this.OpenModal('.js-upload-error-small-modal');\r\n                        }\r\n                    }\r\n                    this.loading(false);\r\n                }\r\n            });\r\n\r\n        }\r\n\r\n        public OpenModal = (modalSelector) => {\r\n\r\n            $(modalSelector).modal('show');\r\n\r\n        }\r\n\r\n        public SetErrorMessageForWebsiteInput = () => {\r\n\r\n            var el = $('.js-website-regex')[0];\r\n\r\n            if (el != null && el != undefined) {\r\n\r\n                var errorMessage = el.getAttribute('data-error');\r\n                //@ts-ignore\r\n                el.oninvalid = function () {\r\n                    //@ts-ignore\r\n                    this.setCustomValidity(errorMessage);\r\n\r\n                    el.oninput = function () {\r\n                        //@ts-ignore\r\n                        this.setCustomValidity('');\r\n                    }\r\n                }\r\n\r\n            }\r\n\r\n\r\n        }\r\n\r\n        public GetLatLang = () => {\r\n\r\n            const encodedAddress = encodeURI(this.fullAddress());\r\n\r\n            $.ajax({\r\n                type: \"GET\",\r\n                url: 'https://maps.googleapis.com/maps/api/geocode/json?address=' + encodedAddress + '&key=' + this.geocodingApiKey()\r\n            }).then(response => {\r\n                if (response.results.length > 0) {\r\n                    this.customLat(response.results[0].geometry.location.lat);\r\n                    this.customLng(response.results[0].geometry.location.lng);\r\n                }\r\n            });\r\n\r\n        }\r\n        \r\n    }\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../interfaces/lightsliderconfig.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/knockout.validation/knockout.validation.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\nmodule Tapas.ViewModels {\r\n    export class FrontpageViewModel extends Ftw.ViewModels.BaseViewModel {\r\n        public lightSliderConfig: LightSliderConfig;\r\n        public username: KnockoutObservable<string>;\r\n        public password: KnockoutObservable<string>;\r\n\r\n        constructor() {\r\n            super();       \r\n\r\n            this.lightSliderConfig = {\r\n                item: 1,\r\n                auto: true,\r\n                loop: true,\r\n                slideMargin: 0,\r\n                speed: 700,\r\n                pause: 7000,\r\n                pauseOnHover: true,\r\n                pager: true,\r\n                enableDrag: false,\r\n                controls: false\r\n            };\r\n        }\r\n    }\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\nmodule Tapas.ViewModels {\r\n    export class InstantSearchViewModel extends Tapas.ViewModels.CartViewModel {\r\n\t\tpublic searchQuery: KnockoutObservable<string>;\r\n        public result: KnockoutObservable<string>;\r\n        public instantSearchPageId: KnockoutObservable<number>;\r\n        public getSearchUrl: KnockoutComputed<string>;\r\n        public allResults = ko.observable<boolean>(false);\r\n\t\tpublic data: Ftw.Data;\r\n        public timeOut;\r\n        public quickOrderOpen: KnockoutObservable<boolean>;\r\n        public AddonQueryString: KnockoutObservable<string>;\r\n        public searchLoading: KnockoutObservable<boolean>;\r\n\r\n\t\tconstructor() {\r\n            super();\r\n            this.searchQuery = ko.observable(\"\");\r\n            this.AddonQueryString = ko.observable(\"\");\r\n\t\t\tthis.searchQuery.subscribe(this.asyncSearch);\r\n\t\t\tthis.instantSearchPageId = ko.observable(0);\r\n\t\t\tthis.result = ko.observable(\"\");\t\t\t\r\n            this.data = new Ftw.Data();\r\n            this.quickOrderOpen = ko.observable(false);\r\n            this.searchLoading = ko.observable(false);\r\n\r\n            this.getSearchUrl = ko.computed({\r\n                owner: this,\r\n                read: () => {\r\n                    return \"Default.aspx?ID=\" + this.instantSearchPageId() + \"&Search=\" + (this.searchQuery() + this.AddonQueryString()).replace(/ /g, '+');\r\n                }\r\n            });\r\n\t\t}\r\n\t\t\r\n\t\tpublic asyncSearch = () => {\r\n            var query = this.searchQuery();\r\n            clearTimeout(this.timeOut);\r\n            this.searchLoading(false);\r\n\r\n\t\t\tif (query.length > 1) {\r\n                this.allResults(true);\r\n                this.searchLoading(true);\r\n\r\n                this.timeOut = setTimeout(() => {\r\n                    this.data.get(this.getSearchUrl())\r\n\t\t\t\t\t\t.then((data) => {\r\n\t\t\t\t\t\t\tthis.result(data);\r\n\t\t\t\t\t\t\tif (!($(data).children().hasClass(\"quickOrder\") || $(data).children().hasClass(\"instantSearchNoResult\"))) {\r\n\t\t\t\t\t\t\t\tko.applyBindings(this, document.getElementById(query));\r\n                            }\r\n                        }).finally(() => {\r\n                            this.searchLoading(false);\r\n                        });\r\n\t\t\t\t}, 250);\r\n\r\n\t\t\t} else {\r\n\t\t\t\tthis.allResults(false);\r\n            }            \r\n        }\r\n\t}\r\n} \r\n","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../interfaces/lightsliderconfig.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\nmodule Tapas.ViewModels {\r\n    export class LoginViewModel extends Ftw.ViewModels.BaseViewModel {\r\n        //public User: KnockoutObservable<Ftw.Interfaces.IUser>;\r\n        public Loader: KnockoutObservable<boolean>;\r\n        public ForgottenLoader: KnockoutObservable<boolean>;\r\n        public LoginFailed: KnockoutObservable<boolean>;\r\n        public ToggleForgottenPassword: KnockoutObservable<boolean>;\r\n        public rememberMe: KnockoutObservable<boolean>;\r\n        public email: KnockoutObservable<string>;\r\n        public data: Ftw.Data;\r\n        public confirmation: KnockoutObservable<string>;\r\n        public addFocus: KnockoutObservable<boolean>;\r\n        public loginModal: KnockoutObservable<string>;\r\n        public newUserModal: KnockoutObservable<string>;\r\n        public makeNewUserOpen: KnockoutObservable<boolean>;\r\n        public newUserLoader: KnockoutObservable<boolean>;\r\n        public loginId: KnockoutObservable<number>;\r\n        public successOrFail: KnockoutObservable<boolean>;\r\n\r\n        public companyName: KnockoutObservable<string>;\r\n        public contactperson: KnockoutObservable<string>;\r\n        public address1: KnockoutObservable<string>;\r\n        public address2: KnockoutObservable<string>;\r\n        public ean: KnockoutObservable<string>;\r\n        public zip: KnockoutObservable<string>;\r\n        public country: KnockoutObservable<string>;\r\n        public useremail: KnockoutObservable<string>;\r\n        public phone: KnockoutObservable<string>;\r\n        public cvr: KnockoutObservable<string>; \r\n        public group: KnockoutObservable<string>;\r\n        public city: KnockoutObservable<string>;\r\n        public UserName = ko.observable('');\r\n        public Password = ko.observable('');\r\n\r\n\r\n        public UserDataService: Ftw.Dataservice.UserDataservice;\r\n        private logger = Ftw.Base.Config.Logger;\r\n\r\n\r\n        constructor() {\r\n            super();\r\n            this.UserDataService = new Ftw.Dataservice.UserDataservice();\r\n            //this.User = ko.observable(new Ftw.Dto.User);      \r\n            this.Loader = ko.observable(true);\r\n            this.ForgottenLoader = ko.observable(false);\r\n            this.newUserLoader = ko.observable(false);\r\n            this.LoginFailed = ko.observable(false);\r\n            this.ToggleForgottenPassword = ko.observable(true);\r\n            //this.GetCurrent();\r\n            this.rememberMe = ko.observable(false);\r\n            this.email = ko.observable('');\r\n            this.data = new Ftw.Data();\r\n            this.confirmation = ko.observable(\"\");\r\n            this.addFocus = ko.observable(false);\r\n            this.makeNewUserOpen = ko.observable(false);\r\n            this.loginModal = ko.observable(\"\");\r\n            this.newUserModal = ko.observable(\"\");\r\n            this.setFocusLogin();\r\n            this.loginId = ko.observable(0);\r\n            this.companyName = ko.observable(\"\");\r\n            this.contactperson = ko.observable(\"\");\r\n            this.useremail = ko.observable(\"\");\r\n            this.phone = ko.observable(\"\");\r\n            this.address1 = ko.observable(\"\");\r\n            this.address2 = ko.observable(\"\");\r\n            this.ean = ko.observable(\"\");\r\n            this.zip = ko.observable(\"\");\r\n            this.country = ko.observable(\"\");\r\n            this.cvr = ko.observable(\"\");\r\n            this.successOrFail = ko.observable(false);\r\n            this.group = ko.observable(\"\");\r\n            this.city = ko.observable(\"\");\r\n\r\n\r\n        }\r\n\r\n        //Set focus when user clicks login\r\n        public setFocusLogin() {\r\n            $(this.loginModal).on(\"shown.bs.modal\", () => {\r\n                this.addFocus(true);\r\n            });\r\n        }\r\n\r\n        //Login function, checksfor fails and gives the user a message\r\n        public Login() {\r\n            var login = new Ftw.Dto.LoginRequest(this.UserName(), this.Password(), this.rememberMe());\r\n            this.UserDataService.Login(login).then((user) => {\r\n\r\n                if (user.IsLoggedIn()) {\r\n                    this.logger.debug('login successfull');\r\n                    //this.User(user);\r\n                    setTimeout(() =>\r\n                        window.location.reload(),\r\n                        1000);\r\n                } else {\r\n                    this.logger.debug('login failed');\r\n                    this.LoginFailed(true);\r\n                    setTimeout(() =>     \r\n                        this.LoginFailed(false),\r\n                        2000);\r\n                } setTimeout(() =>\r\n                    this.Loader(true),\r\n                    2000);\r\n            }).catch((error) => {\r\n                this.logger.debug(error);\r\n            });\r\n        }\r\n        //Recover password function\r\n        public recover() {\r\n            this.ForgottenLoader(true);\r\n            var data = {\r\n                AccessUserEmail: this.email(),\r\n                ForgotPasswordMailTemplate: 'Usermanagement/Login/mail.html',\r\n                ForgotPasswordSenderEmail: 'robot@1stweb.dk',\r\n                ForgotPasswordMailSubject: 'Her er dit password'\r\n            };\r\n\r\n            this.data.postForm('/Default.aspx?ID=' + this.loginId + '&LoginAction=Recovery', data)\r\n                .then((data) => {\r\n                    this.confirmation(data);\r\n                    this.ForgottenLoader(false);\r\n                })\r\n                .fail((error) => {\r\n                    this.logger.debug(error);\r\n                });\r\n        }\r\n\r\n        //Get the logged in user\r\n        public GetCurrent() {\r\n            this.UserDataService.GetCurrent().then((user) => {\r\n                //this.User(user);                 \r\n            });\r\n        }\r\n        //Logoff function\r\n        public LogOff() {\r\n            this.UserDataService.LogOff().then(() => {\r\n                //this.User(new Ftw.Dto.User);\r\n                window.location.reload();\r\n            });\r\n        }\r\n        //Get all users   \r\n        public GetContacts() {\r\n            this.UserDataService.GetContacts().then((data) => {\r\n            })\r\n        }\r\n\r\n        //Make new user popup function\r\n        public newUser() {\r\n\r\n            $(this.loginModal).modal('hide');\r\n\r\n            $(this.loginModal).on(\"hidden.bs.modal\", () => {\r\n                $(this.newUserModal).modal('show');\r\n\r\n                $(this.loginModal).off();\r\n            });\r\n\r\n            this.addFocus(false);\r\n            this.makeNewUserOpen(true);\r\n        }\r\n\r\n        public saveNewUser() {\r\n            this.newUserLoader(true);\r\n\r\n            var data = {\r\n                company: this.companyName,\r\n                name: this.contactperson,\r\n                vatregnumber: this.cvr,\r\n                address: this.address1,\r\n                address2: this.address2,\r\n                zipcode: this.zip,\r\n                email: this.useremail,\r\n                phone: this.phone,\r\n                ean: this.ean,\r\n                country: this.country,\r\n                groups: this.group,\r\n                city: this.city\r\n            };\r\n\r\n            this.data.postForm('/Handlers/Firstweb.ERP.Users.ashx?cmd=createcustomer', data)\r\n                .then((json) => {\r\n\r\n                    if (json.ERPStatus.Code != 0) {\r\n                        $('.status').removeClass('show');\r\n                        $('.error-' + json.ERPStatus.Code).addClass('show');\r\n                    } else {\r\n                        $('.status').removeClass('show');\r\n                        this.successOrFail(true);\r\n                    }\r\n\r\n                    this.newUserLoader(false);\r\n                })\r\n                .fail((error) => {\r\n                    this.logger.debug(error);\r\n                });\r\n        }\r\n    }\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../interfaces/lightsliderconfig.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\nmodule Tapas.ViewModels {\r\n    export class MiniCartViewModel extends Tapas.ViewModels.CartViewModel {\r\n        public ShowEmptyMiniCart: KnockoutComputed<boolean>;\r\n        public ShowCartIndicator: KnockoutComputed<boolean>;        \r\n        constructor() {            \r\n            super();\r\n\r\n            this.CartDataService.GetCurrent();\r\n            \r\n            this.ShowEmptyMiniCart = ko.computed({\r\n                owner: this,\r\n                read: () => {\r\n                    return this.Cart().TotalProductLines() == 0 ? false : true;\r\n                }\r\n            });   \r\n\r\n\t\t\tthis.ShowCartIndicator = ko.computed({\r\n\t\t\t\towner: this,\r\n\t\t\t\tread: () => {\r\n\t\t\t\t\treturn this.Cart().TotalProductLines() == 0 ? false : true;\r\n\t\t\t\t}\r\n            });   \r\n        }      \r\n    }\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../interfaces/lightsliderconfig.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/knockout.validation/knockout.validation.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\nmodule Tapas.ViewModels {\r\n    export class NewsViewModel extends Ftw.ViewModels.BaseViewModel {\r\n\t\tpublic data = new Ftw.Data;\r\n        public newsDetailHtml = ko.observable(\"\");\r\n\r\n        constructor() {\r\n            super();\r\n        }\r\n\r\n\t\tpublic newsModal = (url, selector) => {\r\n\r\n\t\t\tthis.data.get(url + \"&LayoutTemplate=Designs/Tapas/ajax_page.cshtml&ajaxTapas=true\")\r\n\t\t\t.then((data) => {\r\n\t\t\t\tthis.newsDetailHtml($(data).html());\r\n\t\t\t\t$(selector).modal();\r\n\t\t\t});\r\n\t\t}\r\n    }\r\n}\r\n\r\n","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\nmodule Tapas.ViewModels {\r\n    export class OrderDetailsViewModel extends Tapas.ViewModels.CartViewModel {\r\n        public OrderDetailsOrderlineElements = ko.observable<HTMLElement>();\r\n\r\n        constructor() {\r\n            super();\r\n        }\r\n        public GetProductViemodelsFromDom(): Array<ProductViewModel> {\r\n            //Get all the elements that the productviewmodel is bound to\r\n            var $items = $(this.OrderDetailsOrderlineElements()).children();\r\n            var result = [];\r\n            $items.each((i, elm) => {\r\n                var productViewModel: ProductViewModel = ko.dataFor(elm);\r\n                result.push(productViewModel);\r\n            });\r\n            return result;\r\n        }\r\n        public AddAllToCart() {\r\n            var all = this.GetProductViemodelsFromDom();\r\n            if (all.length < 1) return;\r\n            this.CartLoading(true);\r\n            var addToCartArgs = new Array<Ftw.Dataservice.ICartAddArgs>();\r\n\r\n            $.each(all, ((i, vm: ProductViewModel) => {\r\n                var addToCartObj = <Ftw.Dataservice.ICartAddArgs>{\r\n                    productId: vm.ProductId(),\r\n                    quantity: vm.Quantity(),\r\n                };\r\n                addToCartArgs.push(addToCartObj);\r\n            }));\r\n            this.CartDataService.AddMultipleProducts(addToCartArgs).then((result) => {\r\n\r\n            }).finally(() => {\r\n                this.CartLoading(false);\r\n            });\r\n        } \r\n\r\n    }\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\nmodule Tapas.ViewModels {    \r\n\r\n    export class OrderTemplatePageViewModel extends Tapas.ViewModels.CartViewModel {        \r\n        \r\n        public OrderTemplateDataService = new Ftw.Dataservice.OrderTemplateDataservice();\r\n        public OrderTemplateList = ko.observableArray([]);\r\n        public OrderTemplateListElement = ko.observable<HTMLElement>();\r\n        public OrderTemplateName = ko.observable('');\r\n        public OrderTemplateId = ko.observable('');        \r\n        public Saved = ko.observable('');\r\n        public OrderTemplateStatus = ko.observable('');\r\n        public OrderTemplateEdit = ko.observable(false);\r\n        constructor() {\r\n            super();\r\n        }          \r\n        public GetProductViemodelsFromDom(): Array<ProductViewModel> {\r\n            //Get all the elements that the productviewmodel is bound to\r\n            var $items = $(this.OrderTemplateListElement()).children(); \r\n            var result = [];\r\n            $items.each((i, elm) => {                                \r\n                var productViewModel: ProductViewModel = ko.dataFor(elm);                                                \r\n                result.push(productViewModel);                             \r\n            });            \r\n            return result;   \r\n        }     \r\n        public AddAllToCart() {\r\n            var all = this.GetProductViemodelsFromDom();\r\n            if (all.length < 1) return;\r\n            this.CartLoading(true);\r\n            var addToCartArgs = new Array<Ftw.Dataservice.ICartAddArgs>();\r\n                        \r\n            $.each(all, ((i, vm: ProductViewModel) => {\r\n                var orderLineFields = new Array<Ftw.Dataservice.ICartAddOrderLineField>();\r\n                var orderLineField = <Ftw.Dataservice.ICartAddOrderLineField>{\r\n                    systemName: 'Comment',\r\n                    value: vm.Comment()\r\n                };\r\n                orderLineFields.push(orderLineField);\r\n                var addToCartObj = <Ftw.Dataservice.ICartAddArgs>{\r\n                    productId: vm.ProductId(),\r\n                    quantity: vm.Quantity(),\r\n                    variantId: vm.VariantId(),\r\n                    unitId: vm.UnitId(),\r\n                    orderLineFields: orderLineFields                    \r\n                };\r\n                addToCartArgs.push(addToCartObj);                \r\n            }));\r\n            this.CartDataService.AddMultipleProducts(addToCartArgs).then((result) => {\r\n\r\n            }).finally(() => {\r\n                this.CartLoading(false);\r\n            });\r\n        } \r\n        public SaveAll() {\r\n            var all = this.GetProductViemodelsFromDom();\r\n            if (all.length < 1) return;\r\n            var otName = this.OrderTemplateName();\r\n            var otId = '';\r\n            var lines = new Array<Ftw.Dataservice.ISaveOrderTemplateLine>();\r\n             \r\n            $.each(all, ((i, vm: ProductViewModel) => {\r\n                otId = vm.OrderTemplateViewModel.OrderTemplateId();\r\n                var line: Ftw.Dataservice.ISaveOrderTemplateLine = {\r\n                    otlid : vm.OrderTemplateViewModel.OrderTemplateLineId(),\r\n                    comment : vm.Comment(),\r\n                    productId : vm.ProductId(),\r\n                    quantity : vm.Quantity()\r\n                };\r\n                lines.push(line);\r\n\r\n            }));\r\n            this.OrderTemplateDataService.SaveOrderTemplate(otName, otId, lines).then((result) => {\r\n                this.Saved('success');                \r\n            });\r\n        }      \r\n\r\n        public SaveName() {\r\n            var all = this.GetProductViemodelsFromDom();\r\n            if (all.length < 1) return;\r\n            var otName = this.OrderTemplateName();\r\n            \r\n            this.OrderTemplateDataService.SaveOrderTemplate(otName, this.OrderTemplateId()).then((result) => {                \r\n                this.OrderTemplateEdit(false);\r\n            });\r\n        }\r\n\r\n        public ConfirmDelete = () => {\r\n            this.OrderTemplateStatus('confirmation');\r\n        }\r\n        public Delete() {\r\n            this.OrderTemplateDataService.DeleteOrderTemplate(this.OrderTemplateId()).then((result) => {                \r\n            });                \r\n        }\r\n    }\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\nmodule Tapas.ViewModels {    \r\n\r\n    export class OrderTemplateViewModel extends Ftw.ViewModels.BaseViewModel {        \r\n\r\n        constructor() {\r\n            super();\r\n            this.count(1);\r\n        }          \r\n        public OrderTemplateSelectedList = ko.observable<any>();\r\n        public OrderTemplateNewListName = ko.observable('');        \r\n        public OrderTemplateShowNewList = ko.observable(false);\r\n        public OrderTemplateDataService = new Ftw.Dataservice.OrderTemplateDataservice();\r\n        public OrderTemplateList = ko.observableArray([]);\r\n        public OrderTemplateDialogOpen = ko.observable(false);\r\n        public OrderTemplateQuantity = ko.observable(1);        \r\n        public ShowOrderTemplateDialog = ko.observable(false);\r\n        public OrderTemplateId = ko.observable('');\r\n        public OrderTemplateLineId = ko.observable('');\r\n        public Remove = ko.observable(false);\r\n        public ShowInFavourite = ko.observable(false);\r\n        public count = ko.observable();\r\n        public OrderTemplateRelationCount = ko.observable(0);\r\n\r\n        public ToggleOrderTemplateDialog() {\r\n            if (this.ShowOrderTemplateDialog())\r\n            {\r\n                this.ShowOrderTemplateDialog(false);    \r\n                return;            \r\n            }                       \r\n            this.GetOrderTemplates();\r\n            this.ShowOrderTemplateDialog(true);\r\n        }\r\n        public GetOrderTemplates (productId?: string) {\r\n            this.OrderTemplateDataService.GetOrderTemplates(productId || '').then((result ) => {\r\n                this.OrderTemplateList(result);\r\n            })\r\n        }\r\n\r\n        public AddProductToOrderTemplate(productId: string, quantity: number) {    \r\n            var selectedObject = this.OrderTemplateSelectedList();\r\n            if (!selectedObject) return;\r\n            this.OrderTemplateDataService.AddProductToOrderTemplate(selectedObject.Key(), productId, quantity || this.OrderTemplateQuantity()).then((result) => {\r\n                this.ShowOrderTemplateDialog(false);\r\n                this.ShowInFavourite(true);\r\n                this.OrderTemplateRelationCount(result.Count());\r\n                \r\n                selectedObject.Value.CurrentProductInTemplate(true);\r\n                selectedObject.Value.Count(selectedObject.Value.Count() + 1);\r\n            });\r\n        }       \r\n       \r\n        public CreateNewOrderTemplateList(productId : string, quantity : number) {\r\n            var name = this.OrderTemplateNewListName();\r\n            if (name !== '') {\r\n                //Create the template\r\n                this.OrderTemplateDataService.CreateNewOrderTemplate(name).then((result) => {\r\n                    var newOrderTemplate = result;                                        \r\n                    //Add the product\r\n                    this.OrderTemplateDataService.AddProductToOrderTemplate(result.Key(), productId, quantity || this.OrderTemplateQuantity()).then((result) => {                        \r\n                        //Put the new ordertemplate in the list\r\n                        newOrderTemplate.Value.Count(1);\r\n                        this.OrderTemplateList.push(newOrderTemplate);\r\n                        //Show it on the button and count up\r\n                        this.ShowInFavourite(true);\r\n                        this.OrderTemplateRelationCount(result.Count());\r\n                        //Set the new list as selected\r\n                        this.OrderTemplateSelectedList(newOrderTemplate);\r\n                        this.ShowOrderTemplateDialog(false); \r\n                        this.ShowInFavourite(true);\r\n                    });\r\n                });\r\n            }\r\n        }\r\n        public DeleteOrderTemplateLine = () =>\r\n        {\r\n            this.OrderTemplateDataService.RemoveLineFromOrderTemplate(this.OrderTemplateId(), this.OrderTemplateLineId()).then((result) => {\r\n                this.Remove(true);\r\n            });\r\n        }\r\n    }\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../interfaces/lightsliderconfig.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\nmodule Tapas.ViewModels {\r\n    export class PopularProductsViewModel extends Ftw.ViewModels.BaseViewModel {\r\n\r\n        public lightSliderConfig: LightSliderConfig;\r\n        public lightSlider: JQuery; \r\n\r\n        constructor() {\r\n\r\n            super();\r\n\r\n            this.lightSlider = $();\r\n\r\n            this.lightSliderConfig = {\r\n                item: 4,\r\n                loop: false,\r\n                slideMove: 1,\r\n                easing: 'cubic-bezier(0.25, 0, 0.25, 1)',\r\n                speed: 600,\r\n                pager: false,\r\n                controls: false,\r\n                slideEndAnimation: false,\r\n                responsive: [\r\n                    {\r\n                        breakpoint: 1100,\r\n                        settings: {\r\n                            item: 3,\r\n                            slideMove: 1,\r\n                            slideMargin: 10\r\n                        }\r\n                    },\r\n                    {\r\n                        breakpoint: 800,\r\n                        settings: {\r\n                            item: 2,\r\n                            slideMove: 1,\r\n                            slideMargin: 6,\r\n                        }\r\n                    },\r\n                    {\r\n                        breakpoint: 580,\r\n                        settings: {\r\n                            item: 1,\r\n                            slideMove: 1\r\n                        }\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        //NEW SLIDER CONTROLS - FUNCTIONS\r\n        //NEXT\r\n        public nextSlide() {\r\n            this.lightSlider.goToNextSlide();\r\n        }\r\n\r\n        //PREV\r\n        public prevSlide() {\r\n            this.lightSlider.goToPrevSlide();\r\n        }\r\n    }\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\nmodule Tapas.ViewModels {\r\n    export enum Mode { List = \"list\" as any, Grid = \"grid\" as any };\r\n\r\n    export class ProductListViewModel extends Tapas.ViewModels.CartViewModel {\r\n        public mode: KnockoutObservable<Mode>;\r\n        public productListLoad = ko.observable(false);      \r\n\r\n        constructor() {\r\n            super();\r\n            this.mode = ko.observable<Mode>(Mode.List);\r\n        }\r\n        public toggleView = () => {\r\n            switch (this.mode() as any) {\r\n                case \"list\":\r\n                    this.mode(Mode.Grid);\r\n                    break;\r\n\r\n                case \"grid\":\r\n                    this.mode(Mode.List);\r\n                    break;\r\n            }\r\n        }        \r\n    }\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../interfaces/lightsliderconfig.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\nmodule Tapas.ViewModels {\r\n    export class ProductPageViewModel extends Tapas.ViewModels.CartViewModel {\r\n\r\n        public favoriteVisible: KnockoutObservable<boolean>;\r\n        public tabToggle: KnockoutObservable<number>;\r\n        public lightSliderConfig: LightSliderConfig;\r\n        public lightSliderGalleryConfig: LightSliderConfig;\r\n        public lightSlider: JQuery; //TODO Make interface to lightSlider\r\n\r\n        constructor() {\r\n\r\n            super();\r\n\r\n            this.lightSlider = $();\r\n            this.favoriteVisible = ko.observable(false);\r\n            this.tabToggle = ko.observable(1);\r\n\r\n            this.lightSliderGalleryConfig = {\r\n                gallery: true,\r\n                item: 1,\r\n                loop: false,\r\n                thumbItem: 3,\r\n                thumbMargin: 20,\r\n                slideMargin: 0,\r\n                slideEndAnimation: false,\r\n                onSliderLoad: function (el) {\r\n                    el.lightGallery({\r\n                        enableDrag: false,\r\n                    })\r\n                }\r\n            }\r\n        }\r\n\r\n        //TOGGLE SPEC TABS\r\n        public tabOne() {\r\n            this.tabToggle(1);\r\n        }\r\n        //TOGGLE SPEC TABS\r\n        public tabTwo() {\r\n            this.tabToggle(2);\r\n        }\r\n    }\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\nmodule Tapas.ViewModels {\r\n    export class ProductViewModel extends Ftw.ViewModels.BaseViewModel {\r\n        public ProductId = ko.observable('');\r\n        public Quantity = ko.observable<number>(1);\r\n        public Comment = ko.observable('');\r\n        public Visible = ko.observable(true);\r\n        public OrderTemplateViewModel = new OrderTemplateViewModel();\r\n        public VariantId = ko.observable('');\r\n        public UnitId = ko.observable('');\r\n        public AlreadyInCart = ko.observable<boolean>(false);\r\n        constructor(data) {\r\n            super();\r\n        }    \r\n    }\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\nmodule Tapas.ViewModels {\r\n    export class QuickOrderRow {\r\n        stocknr = ko.observable(\"\");\r\n        amount = ko.observable(1);\r\n        comment = ko.observable(\"\");\r\n        name = ko.observable(\"\");\r\n        Id = ko.observable(\"\");\r\n        VariantId = ko.observable(\"\");\r\n        UnitId = ko.observable(\"\");\r\n    }\r\n    export class QuickOrderExcelViewModel extends Tapas.ViewModels.CartViewModel {\r\n        public Quickorders = ko.observableArray<QuickOrderRow>();\r\n        public QuickOrderHelpVisible = ko.observable(false);\r\n        public QuickOrderInput = ko.observable(\"\");\r\n        public QuickOrderExcelInputDisabled = ko.observable(false);\r\n        public QuickOrderInputDisabled = ko.observable(false);\r\n        public QuickOrderInstantSearchPageId = ko.observable();\r\n        public Loader = \"<img src='/Files/Templates/Designs/Tapas/assets/img/loading.gif' />\";\r\n        public NoProductText = ko.observable(\"\");\r\n        public ResetQuickOrderLines;\r\n        public SweetAlertVisible = ko.observable(false);\r\n\r\n        public SetSweetAlert() {\r\n            if (this.SweetAlertVisible()) {\r\n                this.SweetAlertType('');\r\n                this.SweetAlertVisible(false);\r\n            } else {\r\n                this.SweetAlertVisible(true);\r\n                this.SweetAlertType('confirmation');\r\n            }\r\n        }\r\n\r\n        public SweetAlertType = ko.observable('');\r\n        public CheckInput = () => {\r\n            var input = this.QuickOrderInput();\r\n            var rows = input.toString().split(/\\n/);\r\n            ko.utils.arrayForEach(rows, (row: string) => {                \r\n                if (row != \"\") {\r\n                    var quickOrderRow = new QuickOrderRow();                    \r\n                    var item = row.split(/\\t|;|,|:/);\r\n                    if (item.length > 1) {\r\n                        var productNumber = item[0];\r\n                        var quantity = parseInt(item[1]);\r\n                        quickOrderRow.stocknr(productNumber);\r\n                        quickOrderRow.amount(quantity);                        \r\n                        if (item.length > 2)\r\n                            quickOrderRow.comment(item[2]);                        \r\n\r\n                        quickOrderRow.name(this.Loader);\r\n\r\n                        var match = ko.utils.arrayFirst(this.Quickorders(), (item: QuickOrderRow) => {\r\n                            return item.stocknr() === quickOrderRow.stocknr() && item.comment() === quickOrderRow.comment() && item.amount() === quickOrderRow.amount();\r\n                        });\r\n\r\n                        if (!match) {\r\n                            this.Quickorders.push(quickOrderRow);\r\n                        }                        \r\n                    }\r\n                }\r\n            });\r\n\r\n            this.SearchQuery();\r\n        };\r\n        public GetProductsById;\r\n        public RemoveQuickOrderLine;\r\n        public AddEmptyQuickOrderLine = () => {\r\n            this.Quickorders.push(new QuickOrderRow());\r\n\r\n\r\n        };\r\n        public AddAmount;\r\n        public RemoveAmount;\r\n        public fadeBeforeRemove;\r\n        public fadeIn;\r\n        public SearchQuery = () => {\r\n            this.QuickOrderInput(\"\");\r\n            var prodArray = new Array<string>();\r\n            ko.utils.arrayForEach(this.Quickorders(), (order: QuickOrderRow) => {\r\n                prodArray.push(order.stocknr());\r\n            });\r\n\r\n            var link = \"/Default.aspx?ID=\" + this.QuickOrderInstantSearchPageId() + \"&ProductNumbers=\" + prodArray.join(\",\") + \"&View=eCom/Productlist/jsonProductOutput.cshtml&pagesize=1000\";\r\n\r\n            var orders = this.Quickorders();\r\n            if (orders.length > 0) {\r\n                this.data.get(link).then((data) => {\r\n                    ko.utils.arrayForEach(orders, (item: QuickOrderRow) => {\r\n                       \r\n                            item.name(this.NoProductText());\r\n                        \r\n\r\n                        ko.utils.arrayForEach(data, (dataitem: any) => {\r\n                           \r\n\r\n                            if (item.stocknr() === dataitem.productNumber) {\r\n                                item.name(dataitem.productName);\r\n                                item.Id(dataitem.productId);\r\n                                item.VariantId(dataitem.productVariantId);\r\n                                item.UnitId(dataitem.productUnidId);\r\n\r\n                            }\r\n                      \r\n\r\n\r\n                        });\r\n                    });\r\n\r\n\r\n\r\n                }).catch((error) => {\r\n\r\n                });\r\n            }\r\n        };\r\n        public AddAllToCart() {\r\n            var all = this.Quickorders();\r\n            if (all.length < 1) return;\r\n            this.CartLoading(true);\r\n\r\n            var addToCartArgs = new Array<Ftw.Dataservice.ICartAddArgs>();\r\n\r\n            $.each(all, ((i, row: QuickOrderRow) => {\r\n                if (row.name() !== this.NoProductText()) {\r\n                    var orderLineFields = new Array<Ftw.Dataservice.ICartAddOrderLineField>();\r\n                    var orderLineField = <Ftw.Dataservice.ICartAddOrderLineField>{\r\n                        systemName: 'Comment',\r\n                        value: row.comment()\r\n                    };\r\n                    orderLineFields.push(orderLineField);\r\n                    var addToCartObj = <Ftw.Dataservice.ICartAddArgs>{\r\n                        productId: row.Id(),\r\n                        quantity: row.amount(),\r\n                        orderLineFields: orderLineFields,\r\n                        variantId: row.VariantId(),\r\n                        unitId: row.UnitId()\r\n                    };\r\n                    addToCartArgs.push(addToCartObj);\r\n                }\r\n            }));\r\n\r\n            this.CartDataService.AddMultipleProducts(addToCartArgs).then((result) => {\r\n\r\n            }).finally(() => {\r\n                this.CartLoading(false);\r\n                this.ResetQuickOrderLines();\r\n            });\r\n        }\r\n        constructor() {\r\n            super();\r\n\r\n\r\n\r\n            this.ResetQuickOrderLines = () => {\r\n                this.QuickOrderInput(\"\");\r\n                this.Quickorders.removeAll();\r\n\r\n                this.SweetAlertVisible(false);\r\n            }\r\n\r\n            this.fadeBeforeRemove = (element, index) => {\r\n\r\n                $(element).fadeOut(function () {\r\n                    $(element).remove();\r\n                });\r\n\r\n            };\r\n\r\n\r\n            this.fadeIn = (element) => {\r\n                $(element).hide().fadeIn();\r\n            };\r\n\r\n            this.QuickOrderInput.subscribe(() => {                \r\n                this.CheckInput();\r\n            });\r\n\r\n\r\n\r\n            this.RemoveQuickOrderLine = (data: QuickOrderRow) => {\r\n                this.Quickorders.remove(data);\r\n\r\n            };\r\n\r\n            this.AddAmount = (data: QuickOrderRow) => {\r\n                data.amount(data.amount() + 1);\r\n\r\n            };\r\n            this.RemoveAmount = (data: QuickOrderRow) => {\r\n                data.amount(data.amount() - 1);\r\n\r\n            };\r\n\r\n            this.GetProductsById = () => {\r\n\r\n                var productStringArray = new Array<string>();\r\n                ko.utils.arrayForEach(this.Quickorders(), (item: QuickOrderRow) => {\r\n                    productStringArray.push(item.stocknr().toString());\r\n                });\r\n\r\n                this.SearchQuery();\r\n            };\r\n\r\n\r\n\r\n\r\n\r\n        }\r\n    }\r\n}","/// <reference path=\"../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\nmodule Tapas.ViewModels {\r\n    export class QuickOrderViewModel extends Tapas.ViewModels.InstantSearchViewModel {\r\n        constructor() {\r\n            super();\r\n            this.AddonQueryString('&View=eCom/Productlist/QuickOrderSearch.cshtml&pagesize=10');\r\n            this.searchQuery('');\r\n        }       \r\n\t}\r\n} \r\n\r\n","/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule ASG.Bindings {\r\n    export interface IaddToGtmDatalayerParams {        \r\n        dataAttributeName : string\r\n    }\r\n\r\n    export class AddToGtmDatalayer {\r\n        public init(element: any, valueAccessor: () => IaddToGtmDatalayerParams, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            var params = valueAccessor();\r\n            var json = $(element).data(params.dataAttributeName);   \r\n            var windowAny = (window as any);          \r\n            windowAny.dataLayer.push(json);\r\n            windowAny.dataLayer.push({\r\n                event: 'SendTransactionToGoogleAnalyctics'\r\n            });\r\n            \r\n            \r\n        }\r\n    }\r\n    ko.bindingHandlers['addToGtmDatalayer'] = new AddToGtmDatalayer();\r\n} \r\n","/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Asg.Bindings {\r\n    export class AsyncLoadPricesAndStock {\r\n        public update(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var observableValue = ko.unwrap(valueAccessor());\r\n            var data = new Ftw.Data();\r\n\r\n            if (!observableValue) {\r\n                //TODO: Rewrite from jQuery\r\n                var ele = $(element);\r\n                var priceMissing = ele.find(\".price.asyncLoad:not(.busy)\");\r\n                priceMissing.addClass(\"busy\");\r\n                if (priceMissing.length > 0) {\r\n                    var ids = \"count=\" + priceMissing.length;\r\n                    var count = 0;\r\n\r\n                    priceMissing.each(function () {\r\n                        ids += \"&productid[\" + count + \"]=\" + $(this).data(\"productid\");\r\n                        ids += \"&key[\" + count + \"]=\" + $(this).data(\"productkey\");\r\n                        count += 1;\r\n                    })\r\n                    data.postForm('/Handlers/Firstweb.ERP.PriceCache.ashx?cmd=getpricesandstocks', ids).then((result) => {\r\n                        if (result.ERPStatus.Success) {\r\n                            $.each(result.Data, function (key, data) {\r\n                                var priceEle = $(\".price.asyncLoad[data-productkey='\" + key + \"']\");\r\n                                priceEle.removeClass(\"asyncLoad\").removeClass(\"busy\");\r\n                                priceEle.find(\".brutto .bPrice\").html(data.PriceInfo.Tags[\"Firstweb:ErpPriceInfo.BruttoAmountFormattedNoSymbol\"]);\r\n                                priceEle.find(\".netto .nPrice\").html(data.PriceInfo.Tags[\"Firstweb:ErpPriceInfo.NettoPriceFormattedNoSymbol\"]);\r\n                                priceEle.parent().parent().find(\".stock\").attr(\"data-stock\", data.StockInfo.StockQuantity);\r\n\r\n                                var stockQty = data.StockInfo.StockQuantity;\r\n                                var stockQtyInt = parseInt(stockQty);\r\n                                if (stockQtyInt >= 12) {\r\n                                    priceEle.parent().find(\".stock .instock\").show();\r\n                                }\r\n                                else if (stockQtyInt > 0 && stockQtyInt < 12) {\r\n                                    priceEle.parent().find(\".stock .lowstock\").show();\r\n                                }\r\n                                else if (stockQtyInt < 1) {\r\n                                    priceEle.parent().find(\".stock .notinstock\").show();\r\n                                }\r\n                                if (data.PriceInfo.HasQuantityPrices == true) {\r\n                                    priceEle.parent().find(\"#dLabel\").removeClass(\"hideQuantity\").addClass(\"loadQuantity\");\r\n                                }\r\n\r\n                                if ($('.stock-product-details').length > 0 && stockQtyInt > 0 && stockQtyInt < 12) {\r\n                                    priceEle.parent().parent().find(\".stock-product-details\").html(data.StockInfo.StockQuantity);\r\n                                }\r\n                            });\r\n                        }\r\n                        else {\r\n                            //TODO : Show some sort of error to the user based on the status\r\n                            console.log('ErpStatus not Successfull');\r\n                        }\r\n                    })\r\n                        .catch((error) => {\r\n                            //TODO : Show some sort of error to the user - shut down shopping?\r\n                            console.log(\"We catch fatal errors here - ex : no access to the ERP on local dev machines\");\r\n                        })\r\n                        .finally(() => {\r\n                        });\r\n                }\r\n\r\n            }\r\n            \r\n        }\r\n    }\r\n    ko.bindingHandlers['asyncLoadPricesAndStock'] = new AsyncLoadPricesAndStock();\r\n}\r\n","/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Asg.Bindings {\r\n    export class CampaignPopUp {\r\n\t\t\tpublic init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n\t\t\t\tif (!bindingContext)\r\n\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\r\n\t\t\t\tconst $popItmWrap = $('.popup-itm-wrap');\r\n\t\t\t\tconst $closeBtn = $('.popup-itm-close');\r\n\t\t\t\tconst $wrapOpen = $('.popup-itm-open-wrap');\r\n\t\t\t\tlet $closeBtnHeight = $closeBtn.outerHeight();\r\n\t\t\t\tlet $wrapOpenHeight = $wrapOpen.outerHeight();\r\n\t\t\t\tlet $wrapHeight = $popItmWrap.outerHeight();\r\n\t\t\t\t$popItmWrap.css('transform', `translateY(${$closeBtnHeight + $wrapHeight}px)`);\r\n\t\t\t\t$wrapOpen.css('transform', `translateY(${$wrapOpenHeight}px)`);\r\n\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\twindow.onload = () => { // or maybe \"DOMContentLoaded\" event because of the Firefox jQuery .outerHeight() bug\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\t$popItmWrap.show(10);\r\n\t\t\t\t\t\t\t$popItmWrap.css('transform', `translateY(0px)`);\r\n\t\t\t\t\t\t}, 2000);\r\n\r\n\t\t\t\t\t\t$closeBtn.click(() => {\r\n\t\t\t\t\t\t\tlet $closeBtnHeight = $closeBtn.outerHeight();\r\n\t\t\t\t\t\t\tlet $wrapHeight = $popItmWrap.outerHeight();\r\n\t\t\t\t\t\t\t$wrapOpen.show(10);\r\n\t\t\t\t\t\t\t$popItmWrap.css('transform', `translateY(${$closeBtnHeight + $wrapHeight}px)`);\r\n\t\t\t\t\t\t\t$wrapOpen.css('transform', 'translateY(0px)');\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t$wrapOpen.click(() => {\r\n\t\t\t\t\t\t\tlet $wrapOpenHeight = $wrapOpen.outerHeight();\r\n\t\t\t\t\t\t\t$popItmWrap.css('transform', `translateY(0px)`);\r\n\t\t\t\t\t\t\t$wrapOpen.css('transform', `translateY(${$wrapOpenHeight}px)`);\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n        }\r\n    }\r\n    ko.bindingHandlers['campaignPopUp'] = new CampaignPopUp();\r\n} ","/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Asg.Bindings {\r\n\r\n    export class ClickCalculateNlwiCart {        \r\n\r\n        public init(element: any, valueAccessor: () => void, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            \r\n            ko.utils.registerEventHandler(element, \"click\", () => {\r\n                var NlwiDataService = new Asg.Dataservice.NlwiDataService();\r\n                NlwiDataService.CalculateCart();\r\n            });\r\n        }\r\n    }\r\n    ko.bindingHandlers['ClickCalculateNlwiCart'] = new ClickCalculateNlwiCart();\r\n} ","/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Asg.Bindings {\r\n    export interface IClassElementActiveArgs {\r\n        elementselector: string;\r\n        activeselector: string;\r\n    }\r\n    export class ClickToggleClassOnElementBinding {\r\n        public init(element: any, valueAccessor: () => IClassElementActiveArgs, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var params = valueAccessor(); \r\n            var elementClass = params.elementselector;\r\n            var activeClass = params.activeselector;\r\n\r\n            ko.utils.registerEventHandler(element, \"click\", function () {\r\n\r\n                if ($(elementClass).hasClass(activeClass)) {\r\n                    $(elementClass).removeClass(activeClass);\r\n                } else {\r\n                    $(elementClass).removeClass(activeClass);\r\n                    $(elementClass).addClass(activeClass);\r\n                }\r\n            });\r\n        }\r\n    }\r\n    ko.bindingHandlers['clickToggleClassOnElementBinding'] = new ClickToggleClassOnElementBinding();\r\n} ","/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Asg.Bindings {\r\n    export interface IDetectHeightArgs {\r\n        activeClass: string;\r\n        maxHeight: number;\r\n    }\r\n    export class DetectHeightOnElement {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var ele = $(element);\r\n            var params = valueAccessor();\r\n            var activeClass = params.activeclass || 'active';\r\n            var maxHeight = params.maxheight || 250;\r\n\r\n            if ($(ele).height() > maxHeight) {\r\n                $(ele).addClass(activeClass);\r\n            }\r\n        }\r\n    }\r\n    ko.bindingHandlers['detectHeightOnElement'] = new DetectHeightOnElement();\r\n} ","/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Asg.Bindings {\r\n    export class FloatMenuAndAddClassToElement {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var _ele = $(element);\r\n            var floatingPosition = _ele.offset();\r\n            var otherElement = valueAccessor().otherelement || \"\";\r\n            var elementToHide = valueAccessor().elementtohide || \"\";\r\n\r\n            $(document).scroll(function () {\r\n                var y = $(this).scrollTop();\r\n\r\n                if (y >= floatingPosition.top) {\r\n                    $(elementToHide).addClass('hide');\r\n                    _ele.addClass(\"float\");\r\n                    $(otherElement).addClass(\"float\"); \r\n                }\r\n                else {\r\n                    _ele.removeClass(\"float\");\r\n                    $(otherElement).removeClass(\"float\");\r\n                    $(elementToHide).removeClass('hide');\r\n                }\r\n            });\r\n        }\r\n    }\r\n    ko.bindingHandlers['floatMenuAndAddClassToElement'] = new FloatMenuAndAddClassToElement();\r\n} \r\n","/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Asg.Bindings {\r\n    export interface IClassFocusFirstTypeArgs {\r\n        type: string;\r\n    }\r\n    export class FocusFirstInputOfTypeOnClick {\r\n        public init(element: any, valueAccessor: () => IClassFocusFirstTypeArgs, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var params = valueAccessor();\r\n            var type = params.type || 'text';\r\n\r\n            ko.utils.registerEventHandler(element, \"click\", (e) => {\r\n\r\n                if (element == e.target) {\r\n                    $(element).one('transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd', function () {\r\n                        var focus = $(element).find(\"input[type='\" + type + \"']\").first();\r\n                        focus.focus();\r\n                    });\r\n                    var focus = $(element).find(\"input[type='\" + type + \"']\").first();\r\n                    focus.focus();\r\n                }\r\n            });\r\n        }\r\n    }\r\n    ko.bindingHandlers['focusFirstInputOfTypeOnClick'] = new FocusFirstInputOfTypeOnClick();\r\n} ","/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Asg.Bindings {\r\n    export class GetQuantityPrices {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            //TODO: Rewrite from jQuery\r\n            var ele = $(element);\r\n\t\t\t\r\n\t\t\tele.click(function () {\r\n\t\t\t\tif (ele.hasClass(\"loadQuantity\")) {\r\n                    var id = \"productid=\" + ele.attr(\"ftw-productid\");//.parent().parent().find(\".price\").data(\"productid\");\r\n                    $.ajax({\r\n                        method: \"POST\",\r\n                        dataType: \"json\",\r\n                        url: \"/Handlers/Firstweb.ERP.PriceCache.ashx?cmd=getquantityprices\",\r\n                        data: id\r\n                    })\r\n                    .done(function (json) {\r\n                        if (json.ERPStatus.Success) {\r\n                            ele.parent().find(\".dropdown-menu li\").remove();\r\n                            $.each(json.Data, function (key, data) {\r\n                                ele.parent().find(\".dropdown-menu\").append(\"<li class='quantityPrice' ftw-quantity='\" + data.Quantity + \"'>\" + data.Quantity + \" \" + ele.attr(\"ftw-unit\") + \" \" + this.Tags[\"Firstweb:ErpPriceInfo:QuantityPrices.NettoPriceFormattedNoSymbol\"] + \" \" + ele.attr(\"ftw-priceperunit\") + \"</li>\").removeClass(\"load-drop\");\r\n                                ele.removeClass(\"loadQuantity\");\r\n                            });\r\n\r\n\t\t\t\t\t\t\t$(\".quantityPrice\").click(function () {\r\n\t\t\t\t\t\t\t\t$(this).parent().parent().parent().find(\"input.quantity\").val($(this).attr(\"ftw-quantity\"));\r\n\t\t\t\t\t\t\t\t$(this).parent().parent().parent().parent().find(\".addToCart\").attr(\"ftw-quantity\", $(this).attr(\"ftw-quantity\"));\r\n\t\t\t\t\t\t\t});\r\n                        }\r\n                    });\r\n                }\r\n\t\t\t});\r\n        }\r\n    }\r\n    ko.bindingHandlers['getQuantityPrices'] = new GetQuantityPrices();\r\n}","/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Asg.Bindings {\r\n    export interface IClassElementLoaderArgs {\r\n        activeclass: string;\r\n    }\r\n    export class IfElementAvailableAddLoaderToPage {\r\n        public init(element: any, valueAccessor: () => IClassElementLoaderArgs, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var ele = $(element);\r\n            var params = valueAccessor();\r\n            var activeClass = params.activeclass;\r\n\r\n            setTimeout(function () { ele.addClass(activeClass); }, 500);\r\n            \r\n            \r\n            $(window).load(function () {\r\n                setTimeout(function () { ele.removeClass(activeClass); }, 2000);\r\n                $(ele).delay(2500).fadeOut('slow');\r\n            });\r\n        }\r\n    }\r\n    ko.bindingHandlers['ifElementAvailableAddLoaderToPage'] = new IfElementAvailableAddLoaderToPage();\r\n} ","/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Asg.Bindings {\r\n    export interface IClassCallModalTypeArgs {\r\n        modalselector: string\r\n    }\r\n    export class IfElementInDomOpenModal {\r\n        public init(element: any, valueAccessor: () => IClassCallModalTypeArgs, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n\r\n            var params = valueAccessor();\r\n            var modalSelector = params.modalselector;\r\n\r\n            $(modalSelector).modal('show');\r\n        \r\n        }\r\n    }\r\n    ko.bindingHandlers['ifElementInDomOpenModal'] = new IfElementInDomOpenModal();\r\n} ","/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Asg.Bindings {\r\n    export class LoadMoreProductsInfinite {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var load = bindingContext.$root.load();\r\n            var currentPage = valueAccessor().currentPage;\r\n            var totalPages = valueAccessor().totalPages;\r\n\r\n            var data = new Ftw.Data();\r\n            var currentlyLoading = false;\r\n\r\n            $(document).scroll(function () {\r\n                var loadElement = $(element).offset().top;\r\n                var y = $(document).scrollTop() + ($(window).height() - 100);\r\n                if (y >= loadElement && currentlyLoading == false && totalPages > currentPage) {\r\n                    bindingContext.$data.productListLoad(true);\r\n                    var nextPage = currentPage + 1;\r\n                    currentlyLoading = true;\r\n                    load.active(true);\r\n                    load.text(valueAccessor().text);\r\n                    data.get(window.location.origin + window.location.pathname + (window.location.search ? window.location.search + \"&\" : \"?\") + \"LayoutTemplate=Designs/Tapas/ajax_page.cshtml&ajaxTapas=true&pagenum=\" + nextPage)\r\n                        .then((data) => {\r\n                        var productsHtml = $(data).children().html();\r\n                        $(element).before(productsHtml);\r\n                        var childBindingContext = bindingContext.createChildContext(viewModel);\r\n                        ko.applyBindingsToDescendants(childBindingContext, document.getElementById(nextPage));\r\n                        currentPage++;\r\n                        bindingContext.$data.productListLoad(false);\r\n                    })\r\n                    .finally(() => {\r\n                        load.active(false);\r\n                        load.text(\"\");\r\n                        currentlyLoading = false;\r\n                    });\r\n                }\r\n            });\r\n\r\n            $(window).unload(function () {\r\n                load.active(false);\r\n            });\r\n        }\r\n    }\r\n    ko.bindingHandlers['loadMoreProductsInfinite'] = new LoadMoreProductsInfinite();\r\n} ","/// <reference path=\"../../../../../../../../../packages/mousetrap.TypeScript.DefinitelyTyped.0.2.5/Content/Scripts/typings/mousetrap/mousetrap.d.ts\" />\r\nmodule Asg.Bindings {\r\n    export interface IMouseTrapArgs {\r\n        keySequence: string | Array<string>;\r\n        //https://craig.is/killing/mice\r\n        handler: (keyboardEvent: KeyboardEvent, combo: string) => void;       \r\n    }\r\n    export class MouseTrap {\r\n        public init(element: any, valueAccessor: () => IMouseTrapArgs, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n\r\n            var input = valueAccessor();\r\n            var ms = new Mousetrap(element);\r\n            ms.bind(input.keySequence, (keyboardEvent, combo) => {\r\n                input.handler(keyboardEvent, combo);                                                \r\n            });\r\n        }\r\n    }\r\n    ko.bindingHandlers['mouseTrap'] = new MouseTrap();\r\n} \r\n","interface IOwlCarouselOptions {\r\n\r\n    // options\r\n    items?: number;\r\n    itemsDesktop?: number[];\r\n    itemsDesktopSmall?: number[];\r\n    itemsTablet?: number[];\r\n    itemsTabletSmall?: any;\r\n    itemsMobile?: number[];\r\n    itemsCustom?: any;\r\n    singleItem?: boolean;\r\n    itemsScaleUp?: boolean;\r\n    slideSpeed?: number;\r\n    paginationSpeed?: number;\r\n    rewindSpeed?: number;\r\n    autoPlay?: any;\r\n    stopOnHover?: boolean;\r\n    navigation?: boolean;\r\n    navigationText?: any;\r\n    rewindNav?: boolean;\r\n    scrollPerPage?: boolean;\r\n    pagination?: boolean;\r\n    paginationNumbers?: boolean;\r\n    responsive?: boolean;\r\n    responsiveRefreshRate?: number;\r\n    responsiveBaseWidth?: JQuery;\r\n    baseClass?: string;\r\n    theme?: string;\r\n    lazyLoad?: boolean;\r\n    lazyFollow?: boolean;\r\n    lazyEffect?: any;\r\n    autoHeight?: boolean;\r\n    jsonPath?: any;\r\n    jsonSuccess?: (data: any) => void;\r\n    dragBeforeAnimFinish?: boolean;\r\n    mouseDrag?: boolean;\r\n    touchDrag?: boolean;\r\n    addClassActive?: boolean;\r\n    transitionStyle?: any;\r\n\r\n    // callbacks\r\n    beforeUpdate?: (params?: any) => void;\r\n    afterUpdate?: (params?: any) => void;\r\n    beforeInit?: (params?: any) => void;\r\n    afterInit?: (params?: any) => void;\r\n    beforeMove?: (params?: any) => void;\r\n    afterMove?: (params?: any) => void;\r\n    afterAction?: (params?: any) => void;\r\n    startDragging?: (params?: any) => void;\r\n    afterLazyLoad?: (params?: any) => void;\r\n}\r\n\r\ninterface JQuery {\r\n    owlCarousel(options?: any): JQuery;\r\n}\r\n\r\nmodule Asg.Bindings {\r\n    export class owlSlider {\r\n        public init(element: HTMLElement, valueAccessor: () => IOwlCarouselOptions) {\r\n\r\n            // The options that have been configured with the owlCarousel binding\r\n            var options = ko.utils.unwrapObservable(valueAccessor()) || {};\r\n\r\n            // The bound element as a jQuery object\r\n            var $owlElement = $(element);\r\n\r\n            // Initialize carousel with options\r\n            $owlElement.owlCarousel(options);\r\n\r\n            $owlElement.on(\"click\", function () {\r\n                // when dropdown is showing add class\r\n                setTimeout(function () {\r\n                    if ($owlElement.find(\".favoriteDropdown\").hasClass(\"active\")) {\r\n                        $owlElement.addClass(\"activate-owl-height-step1\");\r\n                    }\r\n                    else {\r\n                        $owlElement.removeClass(\"activate-owl-height-step1\");\r\n                    }\r\n\r\n                    if ($owlElement.find(\".dropdown-menu\").is(\":visible\")) {\r\n                        $owlElement.addClass(\"activate-owl-height-step2\");\r\n                    }\r\n                    else {\r\n                        $owlElement.removeClass(\"activate-owl-height-step2\");\r\n                    }\r\n                }, 50);\r\n            });\r\n\r\n        }\r\n\r\n    }\r\n    ko.bindingHandlers['owlSlider'] = new owlSlider();\r\n}\r\n","/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Asg.Bindings {\r\n    export class QuickOrderOnPage {\r\n        public init(element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;\r\n\r\n            var resultRowClassName = valueAccessor();\r\n            var number = -1;\r\n            var resultCount = -1;\r\n            var targetElement = $(element);\r\n            var resultRows = $(resultRowClassName);\r\n            var productName;\r\n\t\t\t\r\n            //Prevent default behaviour \r\n            targetElement.on(\"keydown\", function (e) {\r\n                if (e.which == 38 || e.which == 40 || e.which == 9)\r\n                    e.preventDefault();\r\n            });    \r\n            \r\n            //The function for going up and down        \r\n            function upAndDown() {\r\n                var resultRows = $(resultRowClassName);\r\n                resultCount = resultRows.length - 1;\r\n                $('#instantBuySearchPage').focus();\r\n                //Make sure user cant go over or under\r\n                if (number > resultCount) {\r\n                    number = -1;\r\n                } else if (number < -1) {\r\n                    number = resultCount;\r\n                }\r\n                resultRows.removeClass('active');\r\n                $(resultRowClassName + '.' + number).addClass('active');\r\n            }\r\n\r\n            //The function where we select the product\r\n            //This is used both with mouse and keyboard\r\n            function selectProduct() {\r\n                var productId;\r\n                var productName;\r\n                var variantId;\r\n                var unitId;\r\n                var alreadyInCart;\r\n\r\n                if ($(\".QuickAddproductCount\").length == 1) {\r\n                    productId = $(resultRowClassName).attr(\"ftw-productid\");\r\n                    variantId = $(resultRowClassName).attr(\"ftw-variantId\");\r\n                    unitId = $(resultRowClassName).attr(\"ftw-unitId\");\r\n                    alreadyInCart = $(resultRowClassName).attr(\"ftw-alreadyincart\");\r\n                    productName = $(resultRowClassName).text().replace(/\\s+/g, \" \");\r\n                }\r\n                else {\r\n                    productId = $(resultRowClassName + '.' + number).attr(\"ftw-productid\");\r\n                    variantId = $(resultRowClassName + '.' + number).attr(\"ftw-variantId\");\r\n                    unitId = $(resultRowClassName + '.' + number).attr(\"ftw-unitId\");\r\n                    alreadyInCart = $(resultRowClassName + '.' + number).attr(\"ftw-alreadyincart\");\r\n                    productName = $(resultRowClassName + '.active').text().replace(/\\s+/g, \" \");\r\n                }\r\n                $(\"#quickOrderFormPage\").attr(\"ftw-productid\", productId);\r\n                $(\"#quickOrderFormPage\").attr(\"ftw-variantId\", variantId);\r\n                $(\"#quickOrderFormPage\").attr(\"ftw-unitId\", unitId);\r\n                $(\"#quickOrderFormPage\").attr(\"ftw-alreadyincart\", alreadyInCart);\r\n\r\n                $('.productNamePage').val(productName);\r\n                $('#quickOrderQuantityPage').focus().select();\r\n\r\n                $(\"#quickOrderQuantityPage\").bind('input', function () {\r\n                    var quantity = $('#quickOrderQuantityPage').val();\r\n                    $(\"#quickOrderFormPage\").attr(\"ftw-quantity\", quantity);\r\n                });\r\n            }\r\n\r\n            //The function for resetting everything\r\n            //This is used both with mouse and keyboard \r\n            function reset() {\r\n                $('.productNamePage').val(\"\");\r\n                $(\"#quickOrderFormPage\").attr(\"ftw-productid\", \"\");\r\n                $(\"#quickOrderFormPage\").attr(\"ftw-variantId\", \"\");\r\n                $(\"#quickOrderFormPage\").attr(\"ftw-quantity\", \"1\");\r\n                $(\"#quickOrderFormPage\").attr(\"ftw-unitid\", \"\");\r\n                $(\"#quickOrderQuantityPage\").val(\"1\");\r\n                $('#instantBuySearchPage').val(\"\").focus();\r\n                $('.result').hide();\r\n                number = -1;\r\n            }\r\n\r\n            //On hover we want to set number to the correct product\r\n            //And we want to add class 'active'\r\n            $('.resultPage').on('mouseenter', '.customTable .tableRow', function () {\r\n                $('.customTable .tableRow').removeClass('active');\r\n                $(this).addClass('active');\r\n                number = parseInt($(this).attr('ftw-count'));\r\n            });\r\n            $('.resultPage').on('mouseleave', '.customTable .tableRow', function () {\r\n                $(this).removeClass('active');\r\n            });\r\n\r\n            $('.resultPage').on('click', '.customTable .tableRow', function () {\r\n                selectProduct();\r\n            });\r\n\r\n            //Here we run the function for going up and down\r\n            //The select, put to cart and reset functionality\r\n            targetElement.on(\"keyup\", function (e) {\r\n                var code = e.which;\r\n                var quantityFocus = $(\"#quickOrderQuantityPage\").is(\":focus\");\r\n                var count = $(\".QuickAddproductCount\").length;\r\n\r\n                if (code == 40) { // Up key\r\n                    number++;\r\n                    upAndDown();\r\n                }\r\n                else if (code == 38) { //Down key\r\n                    number--;\r\n                    upAndDown();\r\n                }\r\n                else if ((code == 9 || code == 13) && (number < 0 && count != 1)) {\r\n                    e.preventDefault();\r\n                }\r\n                else if ((code == 9 || code == 13) && (number >= 0 || count == 1)) {\r\n                    resultCount = resultRows.length;\r\n                    if (quantityFocus == false) {\r\n                        selectProduct();\r\n                    } else if (code !== 9) {\r\n                        if ($(\"#quickOrderFormPage\").attr(\"ftw-alreadyincart\")) {\r\n                            number = -1;\r\n                        }\r\n                        else {\r\n                            reset();\r\n                        }\r\n                    }\r\n                }\r\n                else if (quantityFocus == false) {\r\n                    number = -1;\r\n                }\r\n            });\r\n        }\r\n    }\r\n    ko.bindingHandlers['quickOrderOnPage'] = new QuickOrderOnPage();\r\n}","/// <reference path=\"../../../../../../../../../packages/mousetrap.TypeScript.DefinitelyTyped.0.2.5/Content/Scripts/typings/mousetrap/mousetrap.d.ts\" />\r\nmodule Asg.Bindings {\r\n    export interface IScrollArgs {\r\n        loadMore: KnockoutObservable<boolean>,\r\n        loadFunction: () => void,\r\n        offset?: number\r\n    \r\n    }\r\n    export class ScrollLoad {\r\n        public updating = false;\r\n        public init(element: any, valueAccessor: () => IScrollArgs, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {            \r\n            this.updating = true;\r\n            ko.utils.domNodeDisposal.addDisposeCallback(element, function () {\r\n                $(window).off(\"scroll.ko.scrollHandler\") \r\n                this.updating = false\r\n            });\r\n        }\r\n\r\n        public update(element: any, valueAccessor: () => IScrollArgs, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            var settings = valueAccessor();\r\n            var offset = settings.offset ? settings.offset : 0\r\n            var loadFunc = settings.loadFunction;\r\n            if (settings.loadMore) {                \r\n                $(window).on(\"scroll.ko.scrollHandler\", function () {\r\n                    if (($(document).height() - offset <= $(window).height() + $(window).scrollTop())) {\r\n                        if (this.updating) {\r\n                            loadFunc()\r\n                            this.updating = false;\r\n                        }\r\n                    }\r\n                    else {\r\n                        this.updating = true;\r\n                    }\r\n                });\r\n            }\r\n            else {                \r\n                \r\n                $(window).off(\"scroll.ko.scrollHandler\")\r\n                this.updating = false\r\n            }\r\n        }\r\n         \r\n    }\r\n    ko.bindingHandlers['scrollLoad'] = new ScrollLoad();\r\n} \r\n","/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule ASG.Bindings {\r\n    export interface ISpinEditBindingParams {\r\n        minimum: number;\r\n        maximum: number;\r\n        updateObservable: KnockoutObservable<number>;\r\n    }\r\n\r\n    export class SpinEditASG {\r\n        public init(element: any, valueAccessor: () => ISpinEditBindingParams, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n            if (!bindingContext)\r\n                return;            \r\n            var params = valueAccessor();\r\n            //Setup                         \r\n            $(element).spinedit(params);\r\n\r\n            //Spin edit changes do crazy stuff \r\n            $(element).on(\"valueChanged\", (e: any) => {                                \r\n                $(element).parent().parent().find(\".addToCart\").attr(\"ftw-quantity\", e.value);\r\n                if (params.updateObservable) {                                        \r\n                    params.updateObservable(e.value);\r\n                }\r\n            });\r\n            \r\n            \r\n            if (params.updateObservable)\r\n            {\r\n                //IF the observable is defined it will set the internal state to its value on load\r\n                $(element).spinedit('setValue', params.updateObservable());                              \r\n                //Observable changes set SpinEdit internal state\r\n                params.updateObservable.subscribe((newValue) => {                    \r\n                    $(element).spinedit('setValue', newValue);\r\n                });\r\n                \r\n            }            \r\n        }\r\n    }\r\n    ko.bindingHandlers['spinEditASG'] = new SpinEditASG();\r\n} \r\n","/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\nmodule Asg.Bindings {\r\n    export class SuggedstedPrices {\r\n        public init(element: any, valueAccessor: () => IMouseTrapArgs, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) {\r\n\r\n            var value = valueAccessor();\r\n            var select = $(element).find('select');\r\n            var prices = $(element).find('.js-suggested-price');\r\n\r\n            select.change(function () {\r\n\r\n                prices.each(function () {\r\n\r\n                    $(this).removeClass('suggested-prices__price--active');\r\n                    if ($(this).data('key') == select.val()) {\r\n                        $(this).addClass('suggested-prices__price--active');\r\n                    }\r\n\r\n                });\r\n\r\n            });\r\n\r\n        }\r\n    }\r\n    ko.bindingHandlers['suggestedPrices'] = new SuggedstedPrices();\r\n} \r\n","\r\nmodule Asg.Dataservice {\r\n    export class NlwiDataService extends Ftw.Dataservice.BaseDataservice<any> {        \r\n        constructor() {\r\n            super(\"session/nlwi\");\r\n        }\r\n        /**\r\n         * Calculates a Nlwi cart if has not been calcualted and cached         * \r\n         */\r\n        public CalculateCart(): Q.Promise<void> {\r\n            var defer = Q.defer<void>();\r\n                        \r\n            this.data.get(this.serviceName + '/calculatecart')\r\n                .then((data) => {\r\n                    this.Success(data, defer);\r\n                })\r\n                .catch((error) => this.Error(error, defer));\r\n            return defer.promise;\r\n        }        \r\n    }\r\n}","\r\nmodule Asg.Dataservice {   \r\n\r\n    export class RaptorDataService extends Ftw.Dataservice.BaseDataservice<any> {                        \r\n        \r\n        constructor() {\r\n            super('session/raptor');            \r\n        }        \r\n        public ItemClick(productId: string, methodName: string): Q.Promise<void> {\r\n            var defer = Q.defer<void>();\r\n            var data = {\r\n                productId: productId,\r\n                methodName: methodName\r\n            };\r\n            this.data.get(this.serviceName + '/ItemClick', data)\r\n                .then((result) => this.Success(result, defer))\r\n                .catch((error) => this.Error(error, defer));\r\n            return defer.promise;\r\n        }             \r\n    }\r\n}\r\n\r\n","\r\nmodule Asg.Dataservice {\r\n    export class SolrParameterStore {\r\n        public q = ko.observable(\"\");\r\n        public rows = ko.observable(0);\r\n        public start = ko.observable(0);\r\n        public qf = ko.observableArray<string>([]);\r\n        public from = ko.observable(0);\r\n        public sort = ko.observable(\"\");\r\n\r\n        public others = ko.observableArray<Model.NameValue>([]);\r\n\r\n        public AsNameValue = ko.computed({\r\n            read: () => {\r\n                var arr = new Array<Model.NameValue>();\r\n                arr.push(new Model.NameValue(\"q\", this.q()));\r\n                ko.utils.arrayForEach(this.qf(), (qf) => {\r\n                    arr.push(new Model.NameValue(\"qf\", qf));          \r\n                });                \r\n                arr.push(new Model.NameValue(\"rows\", this.rows()));                    \r\n                arr.push(new Model.NameValue(\"start\", this.start()));   \r\n\r\n                ko.utils.arrayForEach(this.others(), (nv) => {\r\n                    arr.push(nv);\r\n                });\r\n                arr.push(new Model.NameValue(\"sort\", this.sort()));             \r\n                        \r\n                return arr;\r\n            }\r\n        }) \r\n    }\r\n\r\n    export class SolrDataService extends Ftw.Dataservice.BaseDataservice<Model.SolrResult> {        \r\n        public parameterStore = new SolrParameterStore();\r\n\r\n        constructor(solrCoreName: string) {\r\n            super(\"Solr/\" + solrCoreName);\r\n            //Make paging the right way http://jsfiddle.net/LAbCv/\r\n\r\n        }\r\n        /**\r\n         * Execute a search\r\n         * @param query if supplied if will be added or replaced in the parameter store with id \"q\"\r\n         */\r\n        public Search(query?: string): Q.Promise<Model.SolrResult> {\r\n            var defer = Q.defer<Model.SolrResult>();\r\n            if (query) {\r\n                this.parameterStore.q(query);\r\n                //this.AddParameter(\"q\", \"q\", query);\r\n            }\r\n\r\n            this.data.get(this.serviceName, this.parameterStore.AsNameValue())\r\n                .then((data: Model.SolrResult) => {\r\n                    Asg.Events.solrSearchQuery.trigger(this.parameterStore);\r\n                    Asg.Events.solrSearchResult.trigger(data);\r\n                    defer.resolve(data);\r\n                })\r\n                .catch((error) => this.Error(error, defer));\r\n            return defer.promise;\r\n        }        \r\n    }\r\n}\r\n\r\n/*{\r\nresponseHeader: {\r\nstatus: 0,\r\nQTime: 1\r\n},\r\nresponse: {\r\nnumFound: 1856,\r\nstart: 0,\r\nmaxScore: 1,\r\ndocs: [\r\n{\r\nProductLanguageID: \"LANG2\",\r\nProductName: \"Airsoftrifle, SL, spring, AW .308 sniper, blue\",\r\nProductVariantID: \"\",\r\nGroupID: \"1000-at-SHOP1\",\r\nProductID: \"18414-at-SHOP1\",\r\nProductPrice: 635.78658,\r\nProductLongDescription: \"<p><span style=\"color: rgb(133, 148, 163);\">A very powerful spring operated sniper is the licensed Accuracy International AW .308. Out of the box it shoots close to 2 joule and weight 3 kilos with its solid metal construction. The Sportline AW .308 has adjustable Hop-Up for accuracy and top rail for mounting aiming device.</span></p> <p><span style=\"color: rgb(133, 148, 163);\"><br /> </span></p> <p><span style=\"color: rgb(133, 148, 163);\">This version has a blue body to accommodate UK players with being VCRA compliant and no UKARA is needed.</span></p>\",\r\nProductNumber: \"18414\",\r\nShopGroupShopID: \"SHOP1\",\r\nscore: 1\r\n}\r\n]\r\n}\r\n}*/\r\n","module Asg {\r\n    export namespace Events {\r\n        export var solrSearchQuery = new Ftw.Core.Event<Asg.Dataservice.SolrParameterStore>('solrSearchQuery');\r\n        export var solrSearchResult = new Ftw.Core.Event<Model.SolrResult>('solrSearchResult');    \r\n        export var solrSearchSuccessAction = new Ftw.Core.Event<any>('solrSearchSuccessAction');   \r\n    }\r\n}","\r\nmodule Asg.Model {\r\n    \r\n    export class NameValue {          \r\n        public name: string;\r\n        public value: any;\r\n        constructor(name: string, value: any) {            \r\n            this.name = name;\r\n            this.value = value;\r\n        }\r\n\r\n    }\r\n} \r\n/*{\r\nresponseHeader: {\r\nstatus: 0,\r\nQTime: 1\r\n},\r\nresponse: {\r\nnumFound: 1856,\r\nstart: 0,\r\nmaxScore: 1,\r\ndocs: [\r\n{\r\nProductLanguageID: \"LANG2\",\r\nProductName: \"Airsoftrifle, SL, spring, AW .308 sniper, blue\",\r\nProductVariantID: \"\",\r\nGroupID: \"1000-at-SHOP1\",\r\nProductID: \"18414-at-SHOP1\",\r\nProductPrice: 635.78658,\r\nProductLongDescription: \"<p><span style=\"color: rgb(133, 148, 163);\">A very powerful spring operated sniper is the licensed Accuracy International AW .308. Out of the box it shoots close to 2 joule and weight 3 kilos with its solid metal construction. The Sportline AW .308 has adjustable Hop-Up for accuracy and top rail for mounting aiming device.</span></p> <p><span style=\"color: rgb(133, 148, 163);\"><br /> </span></p> <p><span style=\"color: rgb(133, 148, 163);\">This version has a blue body to accommodate UK players with being VCRA compliant and no UKARA is needed.</span></p>\",\r\nProductNumber: \"18414\",\r\nShopGroupShopID: \"SHOP1\",\r\nscore: 1\r\n}\r\n]\r\n}\r\n}*/\r\n","\r\nmodule Asg.Model {\r\n    \r\n    export class SolrResult {        \r\n        \r\n        public responseHeader = {};\r\n        public response = new SolrReponse();\r\n      \r\n    }\r\n    class SolrReponse {\r\n        public numFound: number;\r\n        public start: number;\r\n        public maxScore: number;\r\n        public docs = new Array<{}>();        \r\n    }\r\n    \r\n} \r\n/*{\r\nresponseHeader: {\r\nstatus: 0,\r\nQTime: 1\r\n},\r\nresponse: {\r\nnumFound: 1856,\r\nstart: 0,\r\nmaxScore: 1,\r\ndocs: [\r\n{\r\nProductLanguageID: \"LANG2\",\r\nProductName: \"Airsoftrifle, SL, spring, AW .308 sniper, blue\",\r\nProductVariantID: \"\",\r\nGroupID: \"1000-at-SHOP1\",\r\nProductID: \"18414-at-SHOP1\",\r\nProductPrice: 635.78658,\r\nProductLongDescription: \"<p><span style=\"color: rgb(133, 148, 163);\">A very powerful spring operated sniper is the licensed Accuracy International AW .308. Out of the box it shoots close to 2 joule and weight 3 kilos with its solid metal construction. The Sportline AW .308 has adjustable Hop-Up for accuracy and top rail for mounting aiming device.</span></p> <p><span style=\"color: rgb(133, 148, 163);\"><br /> </span></p> <p><span style=\"color: rgb(133, 148, 163);\">This version has a blue body to accommodate UK players with being VCRA compliant and no UKARA is needed.</span></p>\",\r\nProductNumber: \"18414\",\r\nShopGroupShopID: \"SHOP1\",\r\nscore: 1\r\n}\r\n]\r\n}\r\n}*/\r\n","/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\nmodule Asg.ViewModels {\r\n    export class ApprovalStepViewModel extends Tapas.ViewModels.CartViewModel {\r\n\r\n        public CartBackorderTotal = ko.observable(\"\");\r\n        public CartAvailableItems = ko.observable(\"\");\r\n        public PricesFromAjax = ko.observable(false);\r\n        public EmptyMsg = ko.observable(false);\r\n\r\n        constructor() {\r\n            super();\r\n            this.GetCurrentFromModule();\r\n\r\n            Ftw.Events.cartLineAdded.subscribe((agrs) => {\r\n                this.GetCurrentFromModule();\r\n            });\r\n        }      \r\n        //Overwrite function from CartViewModel         \r\n        public GetCurrentFromModule = () => {\r\n            var cartObject = this.Cart();\r\n            if (this.CheckoutPageId() != 0) {        \r\n                var data = {\r\n                    ID: this.CheckoutPageId(),\r\n                    LayoutTemplate: \"Designs/Tapas/ajax_page.cshtml\",\r\n                    \"CartV2.GotoStep2\": \"true\",\r\n                    ajaxTapas: true\r\n                };\r\n                this.data.postForm(\"Default.aspx\", data)\r\n                    .then((data) => {\r\n                        this.CartHtml($(data).find(\".lines\").html());\r\n                        this.CartAvailableItems($(data).find(\".orderavailable\").html());\r\n                        this.CartBackorderTotal($(data).find(\".backorderval\").html());\r\n                        setTimeout(() => {\r\n                            ko.applyBindings(this, document.getElementById(\"orderlines\"));\r\n                        }, 50);\r\n                        this.PricesFromAjax(true);\r\n\r\n                        if (cartObject.TotalProductQuantity() == 0) {\r\n                            this.EmptyMsg(true);\r\n                        }\r\n                    })\r\n                    .finally(() => {\r\n                        this.CartLoading(false);\r\n                    });\r\n            }\r\n            else {\r\n                this.CartLoading(false);\r\n            }\r\n        }\r\n    }\r\n}\r\n","\r\nmodule Asg.ViewModels {\r\n    export class ProductViewModel extends Tapas.ViewModels.ProductViewModel {\r\n                  \r\n        constructor() {\r\n            super('');            \r\n            \r\n            Ftw.Events.cartLineAdded.subscribe(lineadded => {\r\n                this.Quantity(1);\r\n            });             \r\n        }           \r\n    }\r\n}\r\n\r\n","/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../interfaces/lightsliderconfig.ts\" />\r\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\nmodule Tapas.ViewModels {\r\n    export class ShowCartViewModel extends Tapas.ViewModels.CartViewModel {\r\n\r\n        public OrderTemplateDataServive = new Ftw.Dataservice.OrderTemplateDataservice();\r\n        public OrderTemplateSavedSweetAlert = ko.observable('');\r\n        public OrderTemplateSaveAsListName = ko.observable('');\r\n        public OrderTemplateShowFavListModalOpen = ko.observable(false);\r\n\r\n        constructor() {\r\n            super();\r\n\r\n            // Here we listen to changes in the cartline when product is added\r\n            // Next we update the cart\r\n            this.Cart().CartLines.subscribe((changes) => {\r\n                this.GetCurrentFromModule();\r\n            }, null, \"arrayChange\");\r\n        }\r\n\r\n        public SaveCurrentCartAsOrderTemplate() {\r\n            var cartObject = this.Cart();\r\n            var lines: Array<Ftw.Dataservice.IOrderTemplateLine> = [];\r\n            for (var i = 0; i < cartObject.CartLines().length; i++) {\r\n                var line: Ftw.Interfaces.ICartLine = cartObject.CartLines()[i];\r\n                //var comment = line.CustomFields()[0].Value();\r\n\r\n                //if (!comment) {\r\n                //    comment = \"\"; \r\n                //}\r\n\r\n                var newLine: Ftw.Dataservice.IOrderTemplateLine = {\r\n                    productId: line.ProductId(),\r\n                    quantity: line.Quantity()\r\n                    //comment: comment\r\n                };\r\n                lines.push(newLine);\r\n            }\r\n           \r\n            if (this.OrderTemplateSaveAsListName()) {\r\n\r\n                this.OrderTemplateDataServive.CreateNewOrderTemplate(this.OrderTemplateSaveAsListName(), lines).then((result) => {\r\n\r\n                    this.OrderTemplateShowFavListModalOpen(false);\r\n                }).finally(() => {\r\n\r\n                });\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n","/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n/// <reference path=\"../../viewmodels/checkout/showcartviewmodel.ts\" />\r\n\r\nmodule Asg.ViewModels {\r\n    export class CartStepViewModel extends Tapas.ViewModels.ShowCartViewModel {\r\n        public orderTemplateViewModel = new Tapas.ViewModels.OrderTemplateViewModel();\r\n        public BackorderTotal = ko.observable(\"\");\r\n\r\n        constructor() {\r\n            super();\r\n            this.CartLoading(true);\r\n        }      \r\n        //Overwrite function from CartViewModel         \r\n        public GetCurrentFromModule = () => {\r\n            var cartObject = this.Cart();\r\n            if (this.CheckoutPageId() != 0) {\r\n                var data = {\r\n                    ID: this.CheckoutPageId(),\r\n                    LayoutTemplate: \"Designs/Tapas/ajax_page.cshtml\",\r\n                    ajaxTapas: true\r\n                };\r\n                this.data.postForm(\"Default.aspx\", data)\r\n                    .then((data) => {\r\n                        if (cartObject.TotalProductQuantity() == 0) {\r\n                            this.CartState(\"empty\");\r\n                        } else {\r\n                            this.CartState(\"populated\");\r\n                            this.CartHtml($(data).find(\".lines\").html());\r\n                            this.CartTotal($(data).find(\".total\").html());\r\n                            this.BackorderTotal($(data).find(\".js-backorder\").html());\r\n                            setTimeout(() => {\r\n                                ko.applyBindings(this, document.getElementById(\"orderlines\"));\r\n                            }, 50);\r\n\r\n                        }\r\n                    })\r\n                    .finally(() => {\r\n                        this.CartLoading(false);\r\n                    });\r\n            }\r\n            else {\r\n                this.CartLoading(false);\r\n            }\r\n        }\r\n\r\n        //Overwrite function from CartViewModel  \r\n        public SaveCurrentCartAsOrderTemplate() {\r\n            var cartObject = this.Cart();\r\n            var lines: Array<Ftw.Dataservice.IOrderTemplateLine> = [];\r\n            for (var i = 0; i < cartObject.CartLines().length; i++) {\r\n                var line: Ftw.Interfaces.ICartLine = cartObject.CartLines()[i];\r\n\r\n                var newLine: Ftw.Dataservice.IOrderTemplateLine = {\r\n                    productId: line.ProductId(),\r\n                    quantity: line.Quantity()\r\n                };\r\n                lines.push(newLine);\r\n            }\r\n\r\n            if (this.OrderTemplateSaveAsListName()) {\r\n\r\n                this.OrderTemplateDataServive.CreateNewOrderTemplate(this.OrderTemplateSaveAsListName(), lines).then((result) => {\r\n\r\n                    this.OrderTemplateShowFavListModalOpen(false);\r\n                }).finally(() => {\r\n\r\n                });\r\n            }\r\n        }\r\n\r\n\r\n        //Overwrite function from CartViewModel\r\n        //We do not want to call getcurrentfrommodule in this function\r\n        public UpdateQuantity = (data, event: Event) => {\r\n            clearTimeout(this.timeout);\r\n            var _target = $(event.target);\r\n            var orderLineId = _target.attr(\"ftw-olid\");\r\n            var quantity = parseInt(_target.val());\r\n            if (quantity === 0) {\r\n                this.DeleteOrderLine(data, event);\r\n                return;\r\n            }\r\n\r\n            this.timeout = setTimeout(() => {\r\n                this.CartLoading(true);\r\n                this.CartDataService.UpdateCartLineQuantity(orderLineId, quantity)\r\n                    .fail(() => {\r\n                        this.CartLoading(false);\r\n                    });\r\n            }, 1000);\r\n        }\r\n\r\n\r\n\r\n    }\r\n\r\n}","/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\nmodule Asg.ViewModels {\r\n    export class InformationStepViewModel {\r\n\r\n        public optionalDeliveryAddressChecked = ko.observable(false);\r\n        public inputDisabled = ko.observable(true);\r\n        constructor() {\r\n            this.optionalDeliveryAddressChecked.subscribe((boolValue: boolean) => {\r\n                if (boolValue)\r\n                    this.inputDisabled(false);\r\n                else\r\n                    this.inputDisabled(true);\r\n            });\r\n        }\r\n    }\r\n}\r\n","/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\n\r\nmodule Asg.ViewModels {\r\n    export class LoginViewModel extends Tapas.ViewModels.LoginViewModel {\r\n        public confirm = ko.observable(false);\r\n        public error = ko.observable(false);\r\n        public areaId = ko.observable(\"1\");\r\n        public mailSubject = ko.observable(\"\");\r\n        constructor() {\r\n            super();\r\n        }      \r\n        //Overwrite function from LoginViewModel\r\n        //Recover password function\r\n        public recover() {\r\n            this.ForgottenLoader(true);\r\n            var data = {\r\n                AccessUserEmail: this.email(),\r\n                ForgotPasswordMailTemplate: 'Usermanagement/Login/firstweb.forgottenMailTemplate.cshtml',\r\n                ForgotPasswordSenderEmail: 'robot@actionsportgames.com',\r\n                ForgotPasswordMailSubject: this.mailSubject()\r\n            };\r\n\r\n            this.data.postForm('/Default.aspx?ID=' + this.loginId + '&LoginAction=Recovery', data)\r\n                .then((data) => {\r\n                    this.confirmation(data);\r\n                    this.ForgottenLoader(false);\r\n                    this.confirm(true);\r\n                })\r\n                .fail((error) => {\r\n                    this.ForgottenLoader(false);\r\n                    this.confirm(false);\r\n                    this.error(true);\r\n                });\r\n        }   \r\n        //Overwrite function from Tapas\r\n        //Login function, checksfor fails and gives the user a message\r\n        public Login() {\r\n            var login = new Ftw.Dto.LoginRequest(this.UserName(), this.Password(), this.rememberMe(), this.areaId());\r\n            this.UserDataService.Login(login).then((user) => { \r\n                if (user.IsLoggedIn()) {\r\n                    setTimeout(() =>\r\n                        window.location.reload(),\r\n                        1000);\r\n                } else {\r\n                    this.LoginFailed(true);\r\n                    setTimeout(() =>\r\n                        this.LoginFailed(false),\r\n                        2000);\r\n                } setTimeout(() =>\r\n                    this.Loader(true),\r\n                    2000);\r\n            });\r\n        }\r\n    }\r\n}\r\n","/// <reference path=\"../../../../../../../../scripts/typings/knockout/knockout.d.ts\" />\r\n/// <reference path=\"../../../../../../../../scripts/typings/jquery/jquery.d.ts\" />\r\n\r\nmodule Asg.ViewModels {    \r\n\r\n    export class NewsletterRecipient {        \r\n\r\n        public ModalSelector = ko.observable<string>(\"\");\r\n        public ModuleInitialized = ko.observable<boolean>(false);\r\n        public NewListEmail = ko.observable<string>(\"\");\r\n        public Modal = ko.observable<string>(\"\");\r\n        public Data = new Ftw.Data;\r\n        public AllSubscribers = ko.observableArray<any>([]);\r\n        public NewsletterGroupId = ko.observable<number>(0);\r\n        public FormSelector = ko.observable<string>(\"\");\r\n        public NeedsUpdate = ko.observable<boolean>(false);\r\n        public State = ko.observable<number>(0);\r\n        //0 Idle\r\n        //1 In progress\r\n        //2 Complete\r\n        \r\n\r\n        public GetAllSubscribers = () => {\r\n\r\n            this.Data.get('/api/session/user/EmailRecipients?userGroupId=' + this.NewsletterGroupId()).then((json) => {\r\n                this.AllSubscribers(json);\r\n                if (!this.ModuleInitialized()) {\r\n                    this.ModuleInitialized(true);\r\n                    if (this.NeedsUpdate()) {\r\n                        $(this.ModalSelector()).modal(\"show\");\r\n                    }\r\n                }\r\n            });\r\n\r\n        }\r\n\r\n        public InterceptForm = () => {\r\n\r\n            const form = $(this.FormSelector() + \" form\");\r\n\r\n            \r\n            form.on(\"submit\", (e) => {\r\n\r\n                e.stopPropagation();\r\n                e.preventDefault();\r\n\r\n                const callUrl = form.attr(\"action\");\r\n                const data = form.serialize();\r\n\r\n                this.State(1);\r\n                this.Data.postForm(form.attr('action'), data).finally(() => {\r\n                    this.State(2);\r\n                    setTimeout(() => {\r\n                        this.State(0);\r\n                    }, 2000);\r\n                    this.GetAllSubscribers();\r\n                    this.NewListEmail(\"\");\r\n                });\r\n\r\n            });\r\n\r\n        }\r\n\r\n        public UpdatePreferences = (command: string) => {\r\n\r\n            this.Data.get('/Handlers/CustomUserHandler.ashx?cmd=setconfirmnewslettersettingstimestamp&type=' + command);\r\n\r\n        }\r\n\r\n        constructor() {\r\n\r\n            this.ModalSelector.subscribe(() => {\r\n\r\n                this.InterceptForm();\r\n\r\n            });\r\n\r\n            this.NewsletterGroupId.subscribe(() => {\r\n\r\n                this.GetAllSubscribers();\r\n\r\n            });          \r\n\r\n        }\r\n    }\r\n}","\r\nmodule Asg.ViewModels {\r\n    export class SolrSearchViewModel extends Ftw.ViewModels.BaseViewModel {\r\n        public solrProductDataService = new Asg.Dataservice.SolrDataService(\"Products\");\r\n        public cart = new Ftw.Dataservice.CartDataserviceDynamicweb();\r\n        public searchResult = ko.observable(new Asg.Model.SolrResult());\r\n        public query = ko.observable(\"\");\r\n        public searchLoading = ko.observable(false);\r\n        public timeoutId = 0;\r\n        public selectedIndex = ko.observable(-1);\r\n        public productPageId = ko.observable(12);\r\n        public showSeeAllResults = ko.observable(false);\r\n        public resultPageId = ko.observable(1684);\r\n        public delayBeforeSearchInMiliseconds = ko.observable(150);\r\n        public pageNumber = ko.observable(0);\r\n        public CartLoading = ko.observable(false);        \r\n        //public numPerPage = 20; //rows?\r\n        public CurrentRegionFilterValue = ko.observable(\"\");\r\n\r\n        public totalResults = ko.computed({\r\n            owner: this,\r\n            read: () => {\r\n                var results = this.searchResult() as any;\r\n                var _return = 0;\r\n                 \r\n                if (results.facet_counts != null) {\r\n                    _return = results.facet_counts.facet_fields.ProductNumber.length;\r\n                    if (_return > 0)\r\n                        _return = _return / 2;\r\n                }\r\n                return _return;\r\n            }\r\n        });\r\n\r\n        public totalPages = ko.computed({\r\n            owner: this,\r\n            read: () => {\r\n                var results = this.totalResults();\r\n                if (!results) {\r\n                    results = 1;\r\n                }\r\n                var div = Math.floor(results / this.solrProductDataService.parameterStore.rows());\r\n                div += results % this.solrProductDataService.parameterStore.rows() > 0 ? 1 : 0;\r\n                return div - 1;\r\n            }\r\n        });\r\n        constructor() {\r\n            super();\r\n\r\n            //How many rows we want to return - subscribe                                        \r\n            this.solrProductDataService.parameterStore.rows(5);\r\n            \r\n            \r\n\r\n            //Forhindre dubletter i resultatet\r\n            this.solrProductDataService.parameterStore.others.push(new Model.NameValue(\"group\", \"true\"));\r\n            this.solrProductDataService.parameterStore.others.push(new Model.NameValue(\"group.field\", \"ProductNumber\"));\r\n            this.solrProductDataService.parameterStore.others.push(new Model.NameValue(\"group.main\", \"true\"));\r\n\r\n            //Giver en facet at taelle det samlede antal paa da numFound ikke laengere passer\r\n            this.solrProductDataService.parameterStore.others.push(new Model.NameValue(\"facet\", \"true\"));\r\n            this.solrProductDataService.parameterStore.others.push(new Model.NameValue(\"facet.field\", \"ProductNumber\"));\r\n            this.solrProductDataService.parameterStore.others.push(new Model.NameValue(\"facet.limit\", \"-1\"));\r\n            this.solrProductDataService.parameterStore.others.push(new Model.NameValue(\"facet.mincount\", \"1\"));\r\n            \r\n            //Values set from the DOM with initValue are not present in the constructor - so we subscribe. We need a better concept for handling constructor values\r\n            this.CurrentRegionFilterValue.subscribe((newValue) => {                \r\n                this.solrProductDataService.parameterStore.others.push(new Model.NameValue(\"fq\", \"ShowOnShop:\" + newValue));\r\n            });\r\n\r\n            //Search when pageNumber changes\r\n            this.pageNumber.subscribe((newPage) => {\r\n                var start = newPage * this.solrProductDataService.parameterStore.rows();\r\n                this.solrProductDataService.parameterStore.start(start);\r\n                this.Search();\r\n            });\r\n\r\n            //Search from start when new query is entered\r\n            this.query.subscribe((newQuery) => { \r\n                //Reset\r\n                this.solrProductDataService.parameterStore.qf.removeAll();\r\n                this.solrProductDataService.parameterStore.sort(\"\");                    \r\n                this.solrProductDataService.parameterStore.q(newQuery);\r\n                this.solrProductDataService.parameterStore.start(0);\r\n                this.pageNumber(0);\r\n                //We sort on ProductNumber when users are searching for product numbers.                                \r\n                if ($.isNumeric(newQuery)) {                    \r\n                    this.solrProductDataService.parameterStore.qf.push(\"productnumberngram\");             \r\n                    this.solrProductDataService.parameterStore.sort(\"ProductNumber ASC, score DESC\");\r\n                }\r\n                else {\r\n                    this.solrProductDataService.parameterStore.qf.push(\"nameexact^100\");\r\n                    this.solrProductDataService.parameterStore.qf.push(\"textexact^50\");\r\n                    this.solrProductDataService.parameterStore.qf.push(\"namengram^30\");\r\n                    this.solrProductDataService.parameterStore.qf.push(\"textngram^10\");                    \r\n                }                                \r\n                this.Search();\r\n            });\r\n\r\n            this.searchResult.subscribe((newResult) => {\r\n                this.showSeeAllResults((newResult.response.docs.length > 0));\r\n            });\r\n        }\r\n\r\n        public next = () => {\r\n            if (this.pageNumber() < this.totalPages()) {\r\n                this.pageNumber(this.pageNumber() + 1);\r\n            }\r\n\r\n       } \r\n        public previous = () => {\r\n            if (this.pageNumber() != 0) {\r\n                this.pageNumber(this.pageNumber() - 1);\r\n            }\r\n\r\n        }\r\n        public hasNext = ko.computed({\r\n            owner: this,\r\n            read: () => {\r\n                return this.pageNumber() !== this.totalPages();\r\n            }\r\n        });\r\n        public hasPrevious = ko.computed({\r\n            owner: this,\r\n            read: () => {\r\n                return this.pageNumber() !== 0;\r\n            }\r\n        });\r\n        public Search = () => {\r\n            clearTimeout(this.timeoutId);\r\n            this.searchLoading(true);\r\n            this.timeoutId = setTimeout(() => {\r\n                this.solrProductDataService.Search(this.query())\r\n                    .then((result) => {\r\n                        // Check whetever there are results or not before displaying \"No products\"\r\n                        if($(\".instant-search .customTable.resultContainer > div\").length > 0) {\r\n                            if(result.response.numFound <= 0) {\r\n                                document.getElementById(\"noproductsfound\").style.display = \"block\";\r\n                            }\r\n                        } else {\r\n                            document.getElementById(\"noproductsfound\").style.display = \"none\";\r\n                        }\r\n                        this.searchResult(result);\r\n                    }).finally(() => {\r\n                        this.searchLoading(false);\r\n                    });\r\n            }, this.delayBeforeSearchInMiliseconds());\r\n        }\r\n        public UpdateQuantity = (doc: any, event: Event) => {\r\n            var _target = $(event.target);\r\n            var val = _target.val();\r\n            doc.Quantity = val;\r\n\r\n        }\r\n        public AddToCart = (product: any, event: Event) => {\r\n            var _target = $(event.target);\r\n            var quantity = _target.parent().parent().find(\".instantSearchQuantity, .resultPageQuantity\");\r\n            this.CartLoading(true);\r\n            var addArgs: Ftw.Dataservice.ICartAddArgs = {\r\n                productId: product.ProductID,\r\n                quantity: quantity.val()\r\n            };\r\n            this.cart.AddProduct(addArgs).then((cart) => {\r\n                Asg.Events.solrSearchSuccessAction.trigger(this.solrProductDataService.parameterStore.AsNameValue());\r\n            }).finally(() => {\r\n                this.CartLoading(false);\r\n            });\r\n        }\r\n        public handleKeys = (keyboardEvent: KeyboardEvent, combo: string) => {\r\n            var newIndex = -1;\r\n            var resultsIndex = this.searchResult().response.docs.length - 1;\r\n            switch (combo) {\r\n                case 'up':\r\n                    newIndex = this.selectedIndex() - 1;\r\n                    if (newIndex < 0) {\r\n                        newIndex = resultsIndex;\r\n                    }\r\n                    this.selectedIndex(newIndex);\r\n                    break;\r\n                case 'down':\r\n                    newIndex = this.selectedIndex() + 1;\r\n                    if (newIndex > resultsIndex) {\r\n                        newIndex = 0;\r\n                    }\r\n                    this.selectedIndex(newIndex);\r\n                    break;\r\n                case 'enter':\r\n                    // Check if searchfield is focus to prevent users from clicking enter when in quantity field\r\n                    // #instantSearch exists twice when on searchpage, so we can't check directly on this id\r\n                    if ($(\".dropDown-header > input\").is(\":focus\")) {\r\n                        if (this.selectedIndex() > -1) {\r\n                            var product = this.searchResult().response.docs[this.selectedIndex()];\r\n                            this.gotoProductPage(product);\r\n                        }\r\n                        if (this.totalResults() == 1) {\r\n                            var product = this.searchResult().response.docs[0];\r\n                            this.gotoProductPage(product);\r\n                        } else if (this.totalResults() > 1) {\r\n                            this.gotoResultPage();\r\n                        } else {\r\n                            this.gotoResultPage();\r\n                        }\r\n                    }\r\n                    break;\r\n            }\r\n        }\r\n        public gotoProductPage = (product: any) => {\r\n            Asg.Events.solrSearchSuccessAction.trigger(this.solrProductDataService.parameterStore.AsNameValue());\r\n            var link = '/Default.aspx?Id=' + this.productPageId() + '&ProductId=' + product.ProductID;\r\n            window.location.href = link;\r\n        }\r\n        public gotoResultPage = () => {\r\n            Asg.Events.solrSearchSuccessAction.trigger(this.solrProductDataService.parameterStore.AsNameValue());\r\n            var query = encodeURIComponent(this.solrProductDataService.parameterStore.q());\r\n            var link = '/Default.aspx?Id=' + this.resultPageId() + '&q=' + query;\r\n            window.location.href = link;\r\n        }\r\n    }\r\n}\r\n/*{\r\nresponseHeader: {\r\nstatus: 0,\r\nQTime: 1\r\n},\r\nresponse: {\r\nnumFound: 1856,\r\nstart: 0,\r\nmaxScore: 1,\r\ndocs: [\r\n{\r\nProductLanguageID: \"LANG2\",\r\nProductName: \"Airsoftrifle, SL, spring, AW .308 sniper, blue\",\r\nProductVariantID: \"\",\r\nGroupID: \"1000-at-SHOP1\",\r\nProductID: \"18414-at-SHOP1\",\r\nProductPrice: 635.78658,\r\nProductLongDescription: \"<p><span style=\"color: rgb(133, 148, 163);\">A very powerful spring operated sniper is the licensed Accuracy International AW .308. Out of the box it shoots close to 2 joule and weight 3 kilos with its solid metal construction. The Sportline AW .308 has adjustable Hop-Up for accuracy and top rail for mounting aiming device.</span></p> <p><span style=\"color: rgb(133, 148, 163);\"><br /> </span></p> <p><span style=\"color: rgb(133, 148, 163);\">This version has a blue body to accommodate UK players with being VCRA compliant and no UKARA is needed.</span></p>\",\r\nProductNumber: \"18414\",\r\nShopGroupShopID: \"SHOP1\",\r\nscore: 1\r\n}\r\n]\r\n}\r\n}*/\r\n","/// <reference path=\"solrsearchviewmodel.ts\" />\r\n\r\nmodule Asg.ViewModels {\r\n    export class RaptorProductList extends Tapas.ViewModels.ProductListViewModel {\r\n        public raptorDataService = new Asg.Dataservice.RaptorDataService();\r\n        public raptorMethodName = ko.observable('');\r\n        public owlSliderConfig: IOwlCarouselOptions;\r\n        public owlSlider: JQuery;\r\n        public numberOfItems: KnockoutObservable<number> = ko.observable(4);\r\n        public Visible: KnockoutObservable<boolean> = ko.observable(true);\r\n\r\n        constructor() {\r\n            super();\r\n            this.owlSlider = $();\r\n            this.owlSliderConfig = {\r\n                items: 4,\r\n                navigation: true,\r\n                responsive: true,\r\n                pagination: false,\r\n                rewindNav: false,\r\n                navigationText: [\"<i class='fa fa-angle-left'></i>\", \"<i class='fa fa-angle-right'></i>\"],\r\n                itemsCustom: [\r\n                    [0, 1],\r\n                    [580, 1],\n                    [800, 2],\r\n                    [1100, 4]\r\n                ]\r\n            };\r\n\r\n            //this.lightSliderConfig = {\r\n            //    item: this.numberOfItems(),\r\n            //    loop: this.enableLoop(),\r\n            //    slideMove: 1,\r\n            //    easing: 'cubic-bezier(0.25, 0, 0.25, 1)',\r\n            //    speed: 600,\r\n            //    pager: false,\r\n            //    controls: true,\r\n            //    slideEndAnimation: false,\r\n            //    onAfterSlide: this.checkIfMoreSlides,\r\n            //    onSliderLoad: this.checkIfMoreSlides,\r\n            //    responsive: [\r\n            //        {\r\n            //            breakpoint: 1100,\r\n            //            settings: {\r\n            //                item: 3,\r\n            //                slideMove: 1,\r\n            //                slideMargin: 10\r\n            //            }\r\n            //        },\r\n            //        {\r\n            //            breakpoint: 800,\r\n            //            settings: {\r\n            //                item: 2,\r\n            //                slideMove: 1,\r\n            //                slideMargin: 6,\r\n            //            }\r\n            //        },\r\n            //        {\r\n            //            breakpoint: 580,\r\n            //            settings: {\r\n            //                item: 1,\r\n            //                slideMove: 1\r\n            //            }\r\n            //        }\r\n            //    ]\r\n            //};\r\n\r\n        }\r\n\r\n\r\n        //private checkIfMoreSlides = (el: any):void => {\r\n        //    if (el) {\r\n        //        let $elm: JQuery = $(el.context);\r\n        //        if ($elm) {\r\n        //            // enable arrow control\r\n        //            if (this.enableLoop() === false) {\r\n        //                // all the css classes are generated by the slider itself\r\n        //                // check if first item is active\r\n        //                if (this.firstItemClass()) {\r\n        //                    if ($elm.find(\".\" + this.firstItemClass()).offset().left > 0) {\r\n        //                        $elm.parent().find(\".lSPrev\").addClass(\"hide\");\r\n        //                    }\r\n        //                    else {\r\n        //                        $elm.parent().find(\".lSPrev\").removeClass(\"hide\");\r\n        //                    }\r\n        //                }\r\n\r\n        //                // check if last item is active\r\n        //                if (this.lastItemClass()) {\r\n        //                    let $children: JQuery = $elm.find(\".lslide\");\r\n        //                    let $sliderContainer: JQuery = $elm.closest(\".lSSlideOuter\");\r\n        //                    let containerWidth: number = $sliderContainer.outerWidth();\r\n        //                    if ($elm.find(\".\" + this.lastItemClass()).offset().left < containerWidth) {\r\n        //                        $elm.parent().find(\".lSNext\").addClass(\"hide\");\r\n        //                    }\r\n        //                    else {\r\n        //                        $elm.parent().find(\".lSNext\").removeClass(\"hide\");\r\n        //                    }\r\n        //                }\r\n        //            }\r\n        //            // enable arrow control\r\n        //        }\r\n        //    }\r\n        //};\r\n\r\n        ////NEW SLIDER CONTROLS - FUNCTIONS\r\n        ////NEXT\r\n        //public nextSlide() {\r\n        //    this.lightSlider.goToNextSlide();\r\n        //}\r\n\r\n        ////PREV\r\n        //public prevSlide() {\r\n        //    this.lightSlider.goToPrevSlide();\r\n        //}\r\n        \r\n        public ItemClick = (product: Tapas.ViewModels.ProductViewModel) => {\r\n            this.raptorDataService.ItemClick(product.ProductId(), this.raptorMethodName());\r\n            //Let the event bubble\r\n            return true;\r\n        }\r\n        \r\n    }\r\n}\r\n\r\n","/// <reference path=\"solrsearchviewmodel.ts\" />\r\n\r\nmodule Asg.ViewModels {\r\n    export class SolrSearchResultPageViewModel extends Asg.ViewModels.SolrSearchViewModel {\r\n        public combinedResult = ko.observable(new Asg.Model.SolrResult());\r\n        public rows = ko.observable(20);\r\n        constructor() {\r\n            super();\r\n            this.solrProductDataService.parameterStore.rows(this.rows());\r\n            var query = Asg.Util.getParameterByName('q');\r\n            if (query.length > 0) {\r\n                this.query(query);\r\n                this.Search();\r\n            }\r\n            this.query.subscribe((query) => {\r\n                history.replaceState({ state: 'search' }, '', window.location.pathname + '?q=' + query);\r\n            });\r\n\r\n            this.searchResult.subscribe((result) => {\r\n                this.combinedResult()\r\n            });\r\n\r\n        }\r\n\r\n        public showMore = (() => {\r\n            var newRows = this.rows() + this.solrProductDataService.parameterStore.rows();\r\n            this.solrProductDataService.parameterStore.rows(newRows);\r\n            this.Search();\r\n        });\r\n    }\r\n}\r\n\r\n"]}