{"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"]}