{"version":3,"sources":["webpack:///./Scripts4.0/McUtils.js","webpack:///./Scripts4.0/ViewModels/quickview.js","webpack:///./Scripts4.0/ajax-render-engine.js","webpack:///./Scripts4.0/ViewModels/variant/ajax-variant-selector.js"],"names":["McUtils","prototype","constructor","isElementInView","element","fullyInView","pageTop","jQuery","window","scrollTop","pageBottom","height","elementTop","offset","top","elementBottom","isElementBelowView","isElementAboveView","$","this","vm","id","self","service","WebApiService","vs","mcWeb","ajaxVariantSelector","avsInitialised","load","data","settings","init","currentAreaName","areaName","currentNodeId","nodeId","width","popupEvent","lightbox","events","onShowLightbox","currentPlacement","slideOverBox","show","plid","manufacturerId","param","NodeId","Width","ManufacturerId","ActivePlid","Placement","AreaName","PostAction","done","result","Success","container","undefined","html","Content","AjaxRenderingEngine","ensureCorrectImageSizesForField","applyCustomerSpecifics","popupParam","css","callback","InitializeRoyalSliderForPreview","spacing","orientation","autoCenter","bind","reinit","PubSub","publish","AjaxRenderingEngineEventTypes","onFieldContentChanged","onNewAreasShown","onPopupReady","onPopupFilterChanged","onAjaxRenderingLoaded","onKnockoutRenderingCompleted","onPriceRefreshRequested","onPushProductsIntoField","onClearFieldFilter","onFieldsRefresh","onFilterLoadRequested","onAddNewAreaContent","subscribe","message","AreaId","updateFields","filterService","fieldRenderService","statsService","imageService","deviceSize","currentSlideshow","allowUseOfProductCache","currentField","PreviewProduktLagerId","scrollEventIsRegistered","scrollEventFieldIsRegistered","scrollEventFooterIsRegistered","HasMorePages","PagingMode","LoadingFromScroll","fieldsReadyToLoad","lazyLoadFieldSetupDone","footerObserver","IntersectionObserveAllowed","AutoScrolledPages","InitialPageNumber","CurrentPageNumber","HighestPageNumberSeen","LowestPageNumberSeen","InitialLoadDone","subscriptionsInitialised","PrevPagingLoaded","myScrollToElement","currentArticleId","CheckStatistics","ListingTypeGrid","lightBoxIsOpen","slideOverBoxIsOpen","attributeFilterInitiated","rhsQuickview","Quickview","centerQuickview","currentSearchKeyword","finishedLoadingFieldsAbove","length","each","index","item","removeClass","addClass","pageParam","getParameterByName","parseInt","articleIdentifier","D4AiActive","D4AiRegisterStats","unhideProductMenu","fieldsToLoad","push","targetKey","filterTargetKey","onlyUpdateProductList","doNotRenderFilter","useDummyData","popupFilter","nextPageNumber","firstPageViewPopup","updateContentForPreloadedFields","runUpdateFields","updateSelectedAttributeListVisibility","getQuickview","placement","openQuickView","nodeid","manufacturerid","areaname","me","myCenteredPopup","closest","quickview","loadLightboxFields","options","loadNextPage","loadPrevPage","prevPageNumber","reloadPageCallback","fieldIds","isNaN","i","params","reloadAllLinkedFields","otherFields","fieldIdFound","reloadSingleElement","activePlid","area","fieldId","field","placeholder","linkedChildren","children","before","append","text","Math","round","FieldId","ElementId","ForceNormalMode","ForcedLayoutId","replaceWith","reloadLightboxFields","reloadFieldByListingType","listingtype","reloadFromCallbackActive","reloadProductListField","resetAutoScrolledPages","reloadInstantSearchPreview","setListingType","listingAsGrid","fieldSorters","newUrl","getCurrentFirstPage","history","pushState","SetAllowedUseOfProductCache","val","reloadPageListingOnlyCallback","skipFilter","doSkipFilter","reloadDummyFields","find","isEdm","GetAction","scaleLayoutPicker","layoutPickerContainer","myField","contentHeight","contentWidth","scale","min","layoutName","hasClass","wrap","parent","reloadForPublisher","newDeviceSize","reloadFields","parentIdentifier","addRemainingFieldsToDom","ChangeSortType","dropDownControl","cont","McAjaxRequest","ToggleGroupVariants","obj","group","checked","e","alert","ToggleStockMode","ToggleStockModeFjernlager","name","replace","results","RegExp","exec","location","search","decodeURIComponent","addFieldToArea","areaContainer","ActiveArticleId","AreaUniqueId","Response","AddToEnd","existingFields","EnableLinksForArticlesWithBackground","replaceField","IsEdm","fn","scrollView","animate","RemovePageNumberFromLink","url","indexOf","urlPartWithPageID","substring","urlPartWithoutPageID","indexOfFirstAmpersand","str","escapeRegExp","indexOfQuestionmark","substr","document","href","RemoveAttribute","parsedFilter","newLocation","RemoveAttributeValueFromLink","attributeID","attributeValueID","String","indexBeforeAttributeValue","m","attValRegexp","newLink","addValueToQueryString","attributeId","attributeValueId","loc","searchLoc","attributeValueIdExisted","currentAttributes","split","attributeAndValues","attributeValues","j","RemoveAttributeValueLinkFromDom","encodeURI","currentUrl","valToAdd","filterIndex","indexOfColonInNewValue","existingAttributeID","startOfExistingAttributeIDInUrl","McIndexOf","startOfUrl","endOfUrl","CreateUrl","titleOfRemoved","AddDivForRemovingAttributeValue","title","searchLocAfterFiltering","informShopOfFilterActivation","setInternalListOfOpenFilters","currentFilter","clientHasFilter","prop","openAttributes","openAttributesList","doScrollToNextPage","scrollToNextPage","getAttribute","nextPageIndex","updateScroller","scrollToPrevPage","prevPage","navigateToPage","fetchAttributeValues","target","targetId","queryFilterParam","queryMinParam","queryMaxParam","pageIndex","fieldRequestFilter","Url","pathname","Filter","MinPrice","MaxPrice","SearchString","ClientId","PageIndex","FilterCacheKey","AttributeId","RequestFilter","updateAttributeContent","currentIndex","nextIndex","hidePaging","pagingTag","showPagingContainer","showPageLoadingIcon","loadingTag","hidePageLoadingIcon","shift","refreshPriceCache","fieldsArray","otherContactId","getNextPage","getPrevPage","isInsidePopup","responsive","getScreenSize","isForInstantSearch","requestFilterAdded","sendFilterOnly","current","isProductListField","areaid","parents","filterContainer","filterClientId","cacheKey","attr","FilterIsJson","OpenAttributes","OtherContactId","JSON","stringify","currentPopupFilter","getFieldWidth","myPlids","myPlidsString","myPlid","fieldData","UseSpecificLayoutId","LayoutId","VariantSorting","Plid","PlidList","SendFilterOnly","remove","skipSorter","Data","SkipFilterRendering","UseDummyData","DeviceSize","GetElementsOnly","SkipSorter","CurrentArticle","PopupFilter","AllowDeferred","Prepend","updateFieldContent","EmptyFields","D4DeferredScripts","setTimeout","decodedString","DOMParser","parseFromString","body","textContent","D4SingleScript","getScript","textStatus","jqxhr","console","log","status","setupSubscriptions","postStatistics","contentChanged","fieldParents","parentIndex","tmpWidth","$current","lightboxLocator","disableDoubleClick","publisher","checkElementsMarkedInSessionStorage","Target","cartsmall","onShowNewItemInCartText","favouriteCart","lightboxModal","isShown","cart","onPopupForProductAssembly","p","FullFilter","nextF","Sender","next","nextField","loadPopupParams","fieldNode","Plids","ajaxPopup","checkForPopupAfterProductInfoVisit","checkForPopupFirstPageView","CustomEvent","event","bubbles","cancelable","detail","evt","createEvent","initCustomEvent","querySelector","dispatchEvent","classToDisable","dblclick","preventDefault","addFieldSorterToPage","$targetField","FieldSorterResponse","myFieldContainer","oldFieldSorter","prepend","FieldSorter2Response","Menu","onAddNewFilterButton","addFieldContentToPage","targetField","bottomImageToLoad","added","registerStatistics","LoadFilter","updateFilterContent","AddToExistingField","imageList","lastImage","last","containsLoadableImage","backgroundImgItems","bgItem","initialiseAdLinks","InitializeRoyalSlider","InitializeRoyalSliderInAds","IsProductListing","hide","IsNoHitSearch","ShowInStockOnly","ShowInRemoteStockOnly","IsDummyField","click","selectLayoutClick","LayoutCssClass","fieldToUpdateLayout","className","match","join","SlideShowModel","currImg","src","bg","trim","initializeSlideShow","slideshowmodel","myParent","mcSlide","InitSlideshow","Play","Pause","HoverPause","GenerateNextPrev","GeneratePagination","ArrowsNavAutoHide","FadeSpeed","SlideSpeed","Effect","CrossFade","Orientation","ScaleType","Randomize","Css","IsMobileDomain","Height","resolveImagesOnImageLoaded","image","Promise","resolve","reject","complete","onload","getArrayOfArrays","inputArray","itemsPerArray","arrayOfArrays","slice","getSlideshowModel","parentWithSlideInfo","ensureCorrectImageSizes","images","lazyImg","initialiseSlideshows","slidemodel","ImgModuleVer","imageLoadedPromises","Array","from","map","all","then","toArray","getParamForImage","filter","y","arrayOfImageArrays","requestForImagesSent","arrayId","items","Items","delaySlideshow","success","tag","newImages","initializeSlideShowAfterImagesLoaded","img","includeLink","tagName","toLowerCase","parentWidth","parentHeight","myWidth","myHeight","usesAltImg","imgStatus","elementId","autoscale","toUpperCase","aspect","myId","TargetId","Index","Aspect","IncludeLink","UseSecondaryImage","IncludeNotFound","AutoScale","D4LinkArraySetup","makeAdLinkToProduct","productLink","stats","PopupRule","FieldIds","Note","updateContentForSpecificFields","fieldRecognizer","includeMegaMenuChildren","recognizer","preloadedFields","fieldItems","fieldItem","UniqueId","preloadedElements","eItems","eItem","Elements","Fields","fields","fData","showSearchSynonymText","alteredSearchResultArea","alteredText","newContent","first","targetfield","PriceData","priceTags","$item","Price","Discount","NoBuy","myElement","UnlockBuy","BidName","BidExpires","setInterval","now","Date","getTime","salesCountdown","t","days","floor","hours","mins","secs","discountTags","line","jItem","oldPriceTags","OldPrice","prev","rrpPriceTags","Rrp","nordeaprices","FinancingTxt","backorders","BackorderTxt","$field","lazyImages","loadSlideshowForProdThumb","loadSlideshowForLazyThumb","InitializeAnimationsInArticleWithBackground","PagesRemaining","isSlideOver","PopupPch","lightboxContainer","movePopupFieldsToOriginalPlaceholder","empty","dataFound","getCssClassesForLightbox","dataToApply","fillLightboxWithContent","PopupEvent","onHideLightbox","skipAdd","addNextFieldToDom","on","handleScroll","off","footerlist","querySelectorAll","footer","addScrollObserver","lipscore","initWidgets","classesForFields","after","fieldPopupHtml","detach","scrollerContainer","scrollerTag","onHeaderIntersection","entries","entry","intersectionRatio","prevElement","headerObserver","unobserve","scrollEventPrevRegistered","onIntersection","onFieldIntersection","fieldScrollObserver","HasMoreFieldsToLoad","myFieldData","myInnerData","noloop","fieldWasAdded","fieldToObserve","findNextFieldToObserve","fieldElement","getElementById","addFieldScrollObserver","popNextFieldAboveView","startParaxify","currentImgSrc","Image","onBottomImgLoaded","onerror","loadNextField","findNextVisibleField","fieldReadyToLoad","n","splice","IntersectionObserver","rootMargin","threshold","observe","toggleAttributeValues","toggleClass","filterData","secondaryFilterId","FilterResponse","targetDiv","loadAttributeFilterNotYetLoaded","attributeFilte","ShowCompressedFilter","urlParamsFilterIsValidFor","shouldDelayLoadingFilter","attributeFilterParent","is","delayLoadFilterParent","delayLoadFilterManufacturerId","delayLoadFilterLoaded","storeFilterLoadCall","allowDelay","listingFields","notProcessedFields","cachingparams","CacheKey","checkAttributeVisibility","itemsToProcess","itemsProcessed","filterItems","itemParam","Identifier","FilterItems","Visible","RenderedData","nextItem","menu","dummyBarn","removeAttr","stopImmediatePropagation","publisherAdminMenu","callLayoutAction","cancelBubble","stopPropagation","updateVariantMatrixField","listingField","variantMatrix","VariantChilds","ProduktLagerId","myfunction","ready","outerHTML","eq","clone","ajaxRenderEngine","view","getModule","myContainer","instances","parentId","initialised","storeSelectionInBrowser","subscriptionsAdded","isVariantMother","registerModule","variantType1Id","variantType2Id","storeInBrowser","loadSelectedValuesFromDOM","domAttr1","domAttr2","motherPlid","restoreDataFromLocalStorage","variantTypeToActivate","selectVariant","$me","variantType","otherAttributeValueId","variantTypeCount","removeOldSelected","updateLocalStorage","getChildPlidAction","Message","setupOtherVariantType","myHeadingPch","attribName","innerText","StorageService","localStorage","setItem","tmp","getItem","myButton","myImgPlch","myColour","textContainer","itemContainer","itemText","getInactiveAttributeValuesAction","otherVariantType","SingleAvailableAttributeValueId","AttributeValueIds","itemToDisable","InfoMsg","attributeValueId1","attributeValue2Id","lockedVariantType","MotherPlid","AttributeValueId1","AttributeValueId2","LockedVariantType","selectedAttributeValueId","attributeType","AttributeValueId","VariantType"],"mappings":"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","file":"2.04f6b0f7783b08f32509.bundle.js","sourcesContent":["function McUtils() {\r\n}\r\nMcUtils.prototype = {\r\n constructor: McUtils,\r\n\r\n isElementInView: function(element, fullyInView) {\r\n var pageTop = jQuery(window).scrollTop();\r\n var pageBottom = pageTop + jQuery(window).height();\r\n var elementTop = jQuery(element).offset().top;\r\n var elementBottom = elementTop + jQuery(element).height();\r\n if (fullyInView === true) {\r\n return ((pageTop < elementTop) && (pageBottom > elementBottom));\r\n }\r\n else {\r\n return ((elementTop <= pageBottom) && (elementBottom >= pageTop));\r\n }\r\n },\r\n\r\n isElementBelowView: function (element) {\r\n var pageTop = jQuery(window).scrollTop();\r\n var pageBottom = pageTop + jQuery(window).height();\r\n var elementTop = jQuery(element).offset().top;\r\n\r\n return elementTop > pageBottom;\r\n },\r\n\r\n isElementAboveView: function (element) {\r\n var pageTop = jQuery(window).scrollTop();\r\n var elementTop = jQuery(element).offset().top;\r\n var elementBottom = elementTop + jQuery(element).height();\r\n\r\n return elementBottom < pageTop;\r\n }\r\n\r\n};\r\nexport default new McUtils();\r\n","import { AjaxRenderingEngine } from '@scripts/ajax-render-engine';\r\nimport '@scripts/ViewModels/variant/ajax-variant-selector.js';\r\n\r\nexport default new (function ($) {\r\n 'use strict';\r\n\r\n this.vm = function (id) {\r\n var self = this;\r\n self.id = \"#\" + id;\r\n \r\n self.service = new WebApiService(\"FieldRenderer\"); \r\n self.vs = new mcWeb.ajaxVariantSelector.vm(self); \r\n self.avsInitialised = false;\r\n self.load = function(data, settings){ \r\n \r\n };\r\n\r\n self.init = function(data){\r\n self.currentAreaName = data.areaName; \r\n self.currentNodeId = data.nodeId;\r\n self.width = 400;\r\n if(self.id === '#lightbox-placeholder'){ \r\n self.popupEvent = mcWeb.lightbox.events.onShowLightbox;\r\n self.currentPlacement = \"c\";\r\n }\r\n else {\r\n self.popupEvent = mcWeb.slideOverBox.events.onShowLightbox;\r\n self.currentPlacement = \"rhs\";\r\n }\r\n };\r\n\r\n self.show = function( plid, manufacturerId) {\r\n var param = {\r\n NodeId: self.currentNodeId,\r\n Width: self.width,\r\n ManufacturerId: manufacturerId,\r\n ActivePlid: plid,\r\n Placement: self.currentPlacement,\r\n AreaName : self.currentAreaName \r\n };\r\n\r\n self.service.PostAction(\"RenderQuickview\", param).done(\r\n function(result) {\r\n if (result != null && result.Success) {\r\n var container = $(self.id);\r\n if (container != null && container != undefined) {\r\n container.html(result.Content);\r\n AjaxRenderingEngine.ensureCorrectImageSizesForField(container, result);\r\n AjaxRenderingEngine.applyCustomerSpecifics(container, result);\r\n //todo: finn riktig klasse å bruke her. avhenger av hvilken popup?\r\n //mangler å kjøre royal-slider for resultatet. Må gjøres for å få fram bilder osv.\r\n var popupParam = {\r\n css: \"d4-popup d4-popup-quickview\",\r\n callback: function () {\r\n var thumbs = {//todo: get from settings?\r\n spacing: 10,\r\n orientation: 'horizontal',\r\n autoCenter: false\r\n };\r\n var navigationMethod = 'bullets';//todo: get from settings?\r\n InitializeRoyalSliderForPreview(null, null, null, 'div.d4-preview', thumbs, navigationMethod);\r\n self.vs.bind();\r\n self.vs.reinit();\r\n }\r\n }\r\n PubSub.publish(self.popupEvent, popupParam);\r\n }\r\n }\r\n else {\r\n //hide slideoverbox or lightbox\r\n if (self.currentPlacement == \"rhs\") {\r\n PubSub.publish(\"mcWeb.slideOverBox.onHideLightbox\");\r\n }\r\n else {\r\n PubSub.publish(\"mcWeb.lightbox.onHideLightbox\");\r\n }\r\n }\r\n })\r\n };\r\n };//end vm\r\n})(jQuery);\r\n\r\n\r\n////Bind viewmodel for two quickviews, one for center and one for rhs\r\n//loadModule(mcWeb.quickview, 'slideover-placeholder', 'slideover-placeholder', null, null,true);\r\n//loadModule(mcWeb.quickview, 'lightbox-placeholder', 'lightbox-placeholder', null, null,true);\r\n","import McUtils from '@scripts/McUtils';\r\nimport Quickview from '@scripts/ViewModels/quickview';\r\n\r\nexport const AjaxRenderingEngineEventTypes = {\r\n onFieldContentChanged: \"AjaxRenderingEngine.onFieldContentChanged\",\r\n onNewAreasShown: \"AjaxRenderingEngine.onNewAreasShown\",\r\n onPopupReady: \"AjaxRenderingEngine.onPopupReady\",\r\n onPopupFilterChanged: \"AjaxRenderingEngine.onPopupFilterChanged\",\r\n onAjaxRenderingLoaded: \"AjaxRenderingEngine.onAjaxRenderingLoaded\",\r\n onKnockoutRenderingCompleted: \"AjaxRenderingEngine.onKnockoutRenderingCompleted\",\r\n onPriceRefreshRequested: \"AjaxRenderingEngine.onPriceRefreshRequested\",\r\n onPushProductsIntoField: \"AjaxRenderingEngine.onPushProductsIntoField\",\r\n onClearFieldFilter: \"AjaxRenderingEngine.onClearFieldFilter\",\r\n onFieldsRefresh: \"AjaxRenderingEngine.onFieldsRefresh\",\r\n onFilterLoadRequested: \"AjaxRenderingEngine.onFilterLoadRequested\",\r\n onAddNewAreaContent:\"AjaxRenderingEngine.onAddNewAreaContent\"\r\n};\r\n\r\nexport const AjaxRenderingEngine = new (function AjaxRenderingEngine($) {\r\n PubSub.subscribe(AjaxRenderingEngineEventTypes.onAddNewAreaContent, function (message, data) {\r\n jQuery('#A' + data.AreaId).html(data.Content);\r\n self.updateFields('#A' + data.AreaId +' .ajax-field', \"#AttributeListBox\", false, false, false, 0); \r\n });\r\n\r\n var self = this;\r\n self.service = new WebApiService(\"AreaRenderer\");\r\n self.filterService = new WebApiService(\"AttributeFilter\");\r\n self.fieldRenderService = new WebApiService(\"FieldRenderer\");\r\n self.statsService = new WebApiService(\"Stats\");\r\n self.imageService = new WebApiService(\"ImageRenderer\");\r\n self.deviceSize = \"\";\r\n self.currentSlideshow = null;\r\n self.allowUseOfProductCache = true;\r\n self.currentField = null;\r\n self.PreviewProduktLagerId = null;\r\n self.scrollEventIsRegistered = false;\r\n self.scrollEventFieldIsRegistered = false;\r\n self.scrollEventFooterIsRegistered = false;\r\n self.HasMorePages = false;\r\n self.PagingMode = 1;\r\n self.LoadingFromScroll = false;\r\n self.fieldsReadyToLoad = [];\r\n self.lazyLoadFieldSetupDone = false;\r\n self.footerObserver = null;\r\n self.IntersectionObserveAllowed = ('IntersectionObserver' in window);\r\n self.AutoScrolledPages = 0;\r\n self.InitialPageNumber = 1;\r\n self.CurrentPageNumber = 1;\r\n self.HighestPageNumberSeen = 1;\r\n self.LowestPageNumberSeen = 1;\r\n self.InitialLoadDone = false;\r\n self.subscriptionsInitialised = false;\r\n self.PrevPagingLoaded = false;\r\n self.myScrollToElement = null;\r\n self.currentArticleId = 0;\r\n self.CheckStatistics = false;\r\n self.ListingTypeGrid = false;\r\n self.lightBoxIsOpen = false;\r\n self.slideOverBoxIsOpen = false;\r\n self.attributeFilterInitiated = false;\r\n self.rhsQuickview = new Quickview.vm('slideover-placeholder');\r\n self.centerQuickview = new Quickview.vm('lightbox-placeholder');\r\n self.currentSearchKeyword = \"\";\r\n self.finishedLoadingFieldsAbove = false;\r\n\r\n this.load = function () {\r\n if (jQuery('body.listtype-grid').length > 0) {\r\n self.ListingTypeGrid = true;\r\n }\r\n\r\n jQuery(\"div.HeaderPublishAreaContainer .load-later\").each(function (index, item) {\r\n\r\n jQuery(item).removeClass(\"load-later\");\r\n jQuery(item).addClass(\"load-first\");\r\n });\r\n\r\n var pageParam = self.getParameterByName('pageID');\r\n if (pageParam.length > 0) {\r\n self.InitialPageNumber = parseInt(pageParam);\r\n self.CurrentPageNumber = self.InitialPageNumber;\r\n self.HighestPageNumberSeen = self.InitialPageNumber;\r\n self.LowestPageNumberSeen = self.InitialPageNumber;\r\n\r\n }\r\n var articleIdentifier = jQuery(\"div#current-article-id\");\r\n if (articleIdentifier.length > 0) {\r\n self.currentArticleId = jQuery(articleIdentifier[0]).data(\"current-article\");\r\n }\r\n\r\n self.CheckStatistics = (\r\n window.D4AiActive !== undefined &&\r\n window.D4AiActive &&\r\n window.D4AiRegisterStats !== undefined &&\r\n window.D4AiRegisterStats);\r\n\r\n var loadFirstParams = {\r\n targetKey: \"div.load-first .ajax-field.not-loaded\",\r\n filterTargetKey: \"#AttributeListBox\",\r\n onlyUpdateProductList: false,\r\n doNotRenderFilter: false,\r\n useDummyData: false,\r\n popupFilter: 0,\r\n nextPageNumber: 0\r\n };\r\n\r\n var loadSecond = {\r\n targetKey: \"div.load-later .web-pub-field[data-popup='0'] .ajax-field.loaded[data-sf='0'][data-field-is-productlist='1']\",\r\n filterTargetKey: \"#AttributeListBox\",\r\n onlyUpdateProductList: true,\r\n doNotRenderFilter: false,\r\n useDummyData: false,\r\n popupFilter: 0,\r\n nextPageNumber: 0\r\n };\r\n\r\n\r\n var loadLaterParams = {\r\n targetKey: \"div.load-later .web-pub-field[data-popup='0'] .ajax-field.not-loaded[data-sf='0']:not(.menu-container div.load-later .web-pub-field[data-popup='0'] .ajax-field.not-loaded[data-sf='0'])\", \r\n filterTargetKey: \"#AttributeListBox\",\r\n onlyUpdateProductList: false,\r\n doNotRenderFilter: false,\r\n useDummyData: false,\r\n popupFilter: 0,\r\n nextPageNumber: 0\r\n };\r\n\r\n var loadLaterWithFilterParams = {\r\n targetKey: \"div.load-later .web-pub-field[data-popup='0'] .ajax-field.not-loaded[data-sf='1']:not(.menu-container div.load-later .web-pub-field[data-popup='0'] .ajax-field.not-loaded[data-sf='1'])\",\r\n filterTargetKey: \"#AttributeListBox\",\r\n onlyUpdateProductList: false,\r\n doNotRenderFilter: false,\r\n useDummyData: false,\r\n popupFilter: 0,\r\n nextPageNumber: 0\r\n };\r\n\r\n var loadPopupParams = {\r\n targetKey: \"div.ajax-field.not-loaded[data-popup='1']\",\r\n filterTargetKey: \"#AttributeListBox\",\r\n onlyUpdateProductList: false,\r\n doNotRenderFilter: false,\r\n useDummyData: false,\r\n popupFilter: 1,\r\n nextPageNumber: 0\r\n };\r\n \r\n if (jQuery(\".ProductMenu\").css(\"order\") === 1) {\r\n self.unhideProductMenu();//do not wait for attributes are loaded when order is 1\r\n }\r\n\r\n self.fieldsToLoad = [];\r\n self.fieldsToLoad.push(loadFirstParams);\r\n self.fieldsToLoad.push(loadSecond);\r\n self.fieldsToLoad.push(loadLaterParams);\r\n self.fieldsToLoad.push(loadLaterWithFilterParams);\r\n\r\n self.firstPageViewPopup = loadPopupParams;\r\n self.updateContentForPreloadedFields();\r\n\r\n self.runUpdateFields();\r\n\r\n self.updateSelectedAttributeListVisibility();\r\n PubSub.publish(AjaxRenderingEngineEventTypes.onAjaxRenderingLoaded);\r\n\r\n if (jQuery(window).scrollTop() === 0)\r\n self.finishedLoadingFieldsAbove = true;\r\n };\r\n\r\n this.getQuickview = function (placement) {\r\n if (placement === \"rhs\")\r\n return self.rhsQuickview;\r\n else return self.centerQuickview;\r\n };\r\n\r\n\r\n this.openQuickView = function (nodeid, plid, manufacturerid, placement, areaname, me) {\r\n if (me !== undefined) {\r\n //check if we can use the given placement\r\n var myCenteredPopup = jQuery(me).closest(\"#center-popup\");\r\n if (placement == 'c' && myCenteredPopup.length > 0) {\r\n //the popup would normalle be shown in center, but right now the ad is already shown in center,\r\n //so lets use the rhs instead\r\n placement = 'rhs';\r\n }\r\n else if (placement === 'rhs' && jQuery(me).closest(\"#rhs-popup\").length > 0) {\r\n placement = 'c';\r\n }\r\n }\r\n var quickview = self.getQuickview(placement);\r\n quickview.init({ areaName: areaname, nodeId: nodeid });\r\n quickview.show(plid, manufacturerid);\r\n };\r\n\r\n\r\n this.loadLightboxFields = function (options) {\r\n if (jQuery('body.listtype-grid').length > 0) {\r\n self.ListingTypeGrid = true;\r\n }\r\n\r\n var pageParam = self.getParameterByName('pageID');\r\n if (pageParam.length > 0) {\r\n self.InitialPageNumber = parseInt(pageParam);\r\n self.CurrentPageNumber = self.InitialPageNumber;\r\n self.HighestPageNumberSeen = self.InitialPageNumber;\r\n self.LowestPageNumberSeen = self.InitialPageNumber;\r\n\r\n }\r\n var articleIdentifier = jQuery(\"div#current-article-id\");\r\n if (articleIdentifier.length > 0) {\r\n self.currentArticleId = jQuery(articleIdentifier[0]).data(\"current-article\");\r\n }\r\n\r\n self.CheckStatistics = (\r\n window.D4AiActive != undefined &&\r\n window.D4AiActive &&\r\n window.D4AiRegisterStats != undefined &&\r\n window.D4AiRegisterStats);\r\n\r\n var loadFirstParams = {\r\n targetKey: \"div.modal div .ajax-field.not-loaded\",\r\n filterTargetKey: \"#AttributeListBox\",\r\n onlyUpdateProductList: false,\r\n doNotRenderFilter: false,\r\n useDummyData: false,\r\n popupFilter: 0,\r\n nextPageNumber: 0\r\n };\r\n\r\n self.fieldsToLoad = [];\r\n self.fieldsToLoad.push(loadFirstParams);\r\n\r\n self.runUpdateFields();\r\n };\r\n\r\n this.loadNextPage = function () {\r\n self.updateFields(\"div.load-later .ajax-field.not-loaded[data-field-is-productlist='1']\", \"#AttributeListBox\", true, false, false, 0, true);\r\n };\r\n\r\n this.loadPrevPage = function () {\r\n var loadOnlyProductListField = self.CurrentPageNumber > 1; //when scrolling upwards on the page, we we only add the productlisting field when scrolling up, until we are loading the first \"page\"\r\n\r\n var prevPageNumber = self.CurrentPageNumber - 1;\r\n if (prevPageNumber < 1) {\r\n //we're already on the first page, so we just stop processing\r\n return;\r\n }\r\n self.updateFields(\"div.load-later .ajax-field.not-loaded[data-field-is-productlist='1']\", \"#AttributeListBox\", true, false, false, 0, prevPageNumber);\r\n };\r\n\r\n this.reloadPageCallback = function (fieldIds) {//receives array with fieldids to update\r\n if (self.fieldsToLoad === undefined)\r\n self.fieldsToLoad = [];\r\n\r\n if (fieldIds == undefined || fieldIds.length == 0) {\r\n self.updateFields(\".ajax-field.not-loaded\", \"#AttributeListBox\", false, false, false, 0, 0);\r\n } else {\r\n if (isNaN(fieldIds)) {\r\n for (var i = 0; i < fieldIds.length; i++) {\r\n var params = {\r\n targetKey: \".field-container-\" + fieldIds[i] + \" div.ajax-field\",\r\n filterTargetKey: \"#AttributeListBox\",\r\n onlyUpdateProductList: false,\r\n doNotRenderFilter: false,\r\n useDummyData: false,\r\n popupFilter: 0,\r\n nextPageNumber: 0\r\n };\r\n if (jQuery(params.targetKey).length > 0)\r\n self.fieldsToLoad.push(params);\r\n }\r\n } else {\r\n var params = {\r\n targetKey: \".field-container-\" + fieldIds + \" div.ajax-field\",\r\n filterTargetKey: \"#AttributeListBox\",\r\n onlyUpdateProductList: false,\r\n doNotRenderFilter: false,\r\n useDummyData: false,\r\n popupFilter: 0,\r\n nextPageNumber: 0\r\n };\r\n if (jQuery(params.targetKey).length > 0)\r\n self.fieldsToLoad.push(params);\r\n }\r\n self.runUpdateFields();\r\n }\r\n };\r\n\r\n this.reloadAllLinkedFields = function () { //TODO: MOVE, move to separate publisher-only file\r\n var otherFields = [];\r\n jQuery(\"div.PubFieldMenu[data-include-linked-field-content='True']\").each(function (index, item) {\r\n var fieldIdFound = jQuery(item).data(\"fieldid\");\r\n otherFields.push(fieldIdFound);\r\n });\r\n self.reloadPageCallback(otherFields);\r\n };\r\n\r\n //find a single element on the page, ask the server to render it again, and then swap it out for the new one\r\n this.reloadSingleElement = function (nodeId, activePlid, area, fieldId, element) { //TODO: MOVE, move to separate publisher-only file\r\n var item = $(\"#Field_\" + fieldId + \" div.WebPubElement[data-elementid=\" + element + \"]\");\r\n if (item.length <= 0) {//implies this element has not been rendered in the field. Let us add a placholder at the end of the field, or if this field contains\r\n //linked content, we must add it in front of all the dynamic content\r\n var field = $(\"div.ajax-field[data-field-id=\" + fieldId + \"]\");\r\n var placeholder = \"
\";\r\n if (field.length > 0) {\r\n var linkedChildren = field.children(\".WebPubElement.linked-element\");\r\n if (linkedChildren.length > 0) {\r\n $(linkedChildren[0]).before(placeholder);\r\n }\r\n else {\r\n field.append(placeholder);\r\n\r\n }\r\n item = $(\"#plcholder\" + fieldId);\r\n }\r\n }\r\n if (nodeId == null)\r\n nodeId = jQuery('#hidden-nodeid').text();\r\n\r\n var width = Math.round($(item).width());\r\n if (item.length > 0) {\r\n var params = {\r\n NodeId: nodeId,\r\n Width: width,\r\n ActivePlid: activePlid,\r\n AreaName: area,\r\n FieldId: fieldId,\r\n ElementId: element,\r\n ForceNormalMode: false,\r\n ForcedLayoutId: 0\r\n };\r\n self.fieldRenderService.PostAction(\"RenderSingleElement\", params).done(function (result) {\r\n if (result && result.Success) {\r\n $(item).replaceWith(result.Content);\r\n }\r\n });\r\n }\r\n };\r\n\r\n this.reloadLightboxFields = function () {\r\n self.updateFields(\".modal-content .ajax-field.not-loaded\", \"#AttributeListBox\", false, false, false, 0);\r\n };\r\n\r\n this.reloadFieldByListingType = function (listingtype) {\r\n self.reloadFromCallbackActive = true;\r\n self.updateFields(\".ajax-field[data-listing-type=\" + listingtype + \"]\", \"#AttributeListBox\", false, false, false, 0, 0);\r\n };\r\n\r\n this.reloadProductListField = function () {\r\n self.resetAutoScrolledPages();\r\n self.updateFields(\".ajax-field[data-field-is-productlist='1']\", \"#AttributeListBox\", true, false, false, 0, 0);\r\n };\r\n\r\n this.reloadInstantSearchPreview = function (plid) {\r\n self.PreviewProduktLagerId = plid;\r\n self.updateFields(\".InstantSearch .d4-instant-search-loadbyajax .ajax-field\",\r\n \"\",\r\n false,\r\n true,\r\n false,\r\n 0,\r\n false);\r\n }\r\n\r\n\r\n this.setListingType = function (listingAsGrid) {\r\n self.ListingTypeGrid = listingAsGrid;\r\n if (listingAsGrid) {\r\n jQuery('body').addClass('.listtype-grid');\r\n jQuery('body').removeClass('.listtype-list');\r\n var fieldContentContainer = jQuery('.ajax-field.inner-layout-container[data-area-id=\"CenterContentDynamicProdListAlternate\"]');\r\n var fieldContainer = fieldContentContainer.closest(\".web-pub-field\");\r\n var fieldSorters = fieldContainer.children(\".FieldSorter\");\r\n if (fieldSorters.length > 0) {\r\n fieldSorters.each(function (index, item) {\r\n $(item).html('');\r\n });\r\n }\r\n jQuery('.ajax-field.inner-layout-container.not-loaded[data-area-id=\"CenterContentDynamicProdListAlternate\"]').html('');\r\n } else {\r\n jQuery('body').addClass('.listtype-list');\r\n jQuery('body').removeClass('.listtype-grid');\r\n var fieldContentContainer = jQuery('.ajax-field.inner-layout-container[data-area-id=\"CenterContentDynamicAdList\"]');\r\n var fieldContainer = fieldContentContainer.closest(\".web-pub-field\");\r\n var fieldSorters = fieldContainer.children(\".FieldSorter\");\r\n if (fieldSorters.length > 0) {\r\n fieldSorters.each(function (index, item) {\r\n $(item).html('');\r\n });\r\n }\r\n jQuery('.ajax-field.inner-layout-container[data-area-id=\"CenterContentDynamicAdList\"]').html('');\r\n }\r\n\r\n var newUrl = self.getCurrentFirstPage();\r\n self.CurrentPageNumber = 1;\r\n window.history.pushState(newUrl, '', newUrl);\r\n };\r\n\r\n \r\n this.SetAllowedUseOfProductCache = function (val) {\r\n self.allowUseOfProductCache = val;\r\n };\r\n\r\n this.reloadPageListingOnlyCallback = function (skipFilter) {\r\n self.reloadFromCallbackActive = true;\r\n var doSkipFilter = true;\r\n if (skipFilter !== undefined)\r\n doSkipFilter = skipFilter\r\n self.updateFields(\".ajax-field[data-field-is-productlist='1']\", \"#AttributeListBox\", true, doSkipFilter, false, 0);\r\n };\r\n\r\n this.reloadDummyFields = function (deviceSize) { //TODO: MOVE, move to separate publisher-only file\r\n\r\n //first, find the area that contains the dummy fields\r\n var container = jQuery('.layout-picker').find('.load-later');\r\n if (container.length > 0) {\r\n var nodeId = jQuery('#hidden-nodeid').text();\r\n var param = {\r\n areaName: 'LayoutPicker',\r\n nodeId: nodeId,\r\n isEdm: false,\r\n deviceSize: deviceSize\r\n };\r\n self.service.GetAction(\"RenderAreaFramework\", param).done(\r\n function (result) {\r\n if (result != undefined && result.length > 0) {\r\n container.html(result);\r\n }\r\n self.updateFields(\".ajax-field.not-loaded-dummy\", \"\", false, false, true, 0);\r\n self.scaleLayoutPicker();\r\n });\r\n\r\n }\r\n //then fetch the new field framework as it might have been changed\r\n //then update the content of the fields\r\n\r\n };\r\n\r\n this.scaleLayoutPicker = function () { //TODO: MOVE, move to separate publisher-only file\r\n var layoutPickerContainer = jQuery(\".PublisherContainer.layout-picker\");\r\n if (layoutPickerContainer != null) {\r\n var layoutSelectorFields = layoutPickerContainer.find('.web-pub-field.container.dummy');\r\n\r\n layoutSelectorFields.each(function (index, element) {\r\n var myField = jQuery(element)\r\n var contentHeight = myField.height();\r\n var contentWidth = myField.width();\r\n var availableWidth = 170;\r\n var availableHeight = 100;\r\n var scale = Math.min(\r\n availableWidth / contentWidth,\r\n availableHeight / contentHeight\r\n );\r\n //todo: find out why the height isn't always correct\r\n myField.css(\"position\", \"absolute\");\r\n\r\n var translateVertical = \"0 0px\";\r\n myField.css(\"transform-origin\", translateVertical);\r\n\r\n myField.css(\"transform\", \"scale(\" + scale + \")\");\r\n var layoutName = myField.data(\"layout-name\");\r\n\r\n if (myField.hasClass(\"selected\")) {\r\n jQuery(myField).wrap(\"
\");\r\n } else {\r\n jQuery(myField).wrap(\"
\");\r\n }\r\n jQuery(myField.parent()).before(\"
\" + layoutName + \"
\");\r\n \r\n });\r\n }\r\n };\r\n\r\n this.reloadForPublisher = function (newDeviceSize) {\r\n if (newDeviceSize)\r\n self.deviceSize = newDeviceSize;\r\n\r\n self.updateFields(\".ajax-field.not-loaded\", \"#AttributeListBox\", false, false, false, 0);\r\n };\r\n\r\n this.reloadFields = function (parentIdentifier) {\r\n self.addRemainingFieldsToDom();\r\n self.reloadFromCallbackActive = true;\r\n self.updateFields(parentIdentifier + \" .ajax-field\", \"#AttributeListBox\", false, false, false, 0, 0);\r\n };\r\n\r\n this.ChangeSortType = function (dropDownControl) {\r\n var cont = jQuery(dropDownControl);\r\n\r\n McAjaxRequest('/WebPages/Extras/SessionStateApi.aspx', 'ChangeSort', cont.val(), self.reloadPageCallback);\r\n };\r\n\r\n this.ToggleGroupVariants = function (obj) {\r\n try {\r\n var data = { group: obj.checked };\r\n var service = new WebApiService(\"AttributeFilter\");\r\n service.GetAction(\"ToggleGroupVariants\", data).done(function (result) {\r\n var newUrl = self.getCurrentFirstPage();\r\n self.CurrentPageNumber = 1;\r\n window.history.pushState(newUrl, '', newUrl);\r\n self.SetAllowedUseOfProductCache(false);\r\n self.reloadPageListingOnlyCallback(false);\r\n });\r\n } catch (e) {\r\n alert(\"Exception: \" + e);\r\n }\r\n };\r\n\r\n this.ToggleStockMode = function (obj) {\r\n try {\r\n var data = { show: obj.checked };\r\n var service = new WebApiService(\"AttributeFilter\")\r\n service.GetAction(\"ToggleShowOnlyStock\", data).done(function (result) {\r\n self.CurrentPageNumber = 1;\r\n self.resetAutoScrolledPages();\r\n self.SetAllowedUseOfProductCache(false);\r\n var newUrl = self.getCurrentFirstPage();\r\n self.CurrentPageNumber = 1;\r\n window.history.pushState(newUrl, '', newUrl);\r\n self.reloadPageListingOnlyCallback(false);\r\n \r\n });\r\n } catch (e) {\r\n alert(\"Exception: \" + e);\r\n }\r\n };\r\n\r\n this.ToggleStockModeFjernlager = function (obj) {\r\n try {\r\n var data = { show: obj.checked };\r\n var service = new WebApiService(\"AttributeFilter\")\r\n service.GetAction(\"ToggleShowOnlyStockFjernlager\", data).done(function (result) {\r\n self.CurrentPageNumber = 1;\r\n self.resetAutoScrolledPages();\r\n self.SetAllowedUseOfProductCache(false);\r\n var newUrl = self.getCurrentFirstPage();\r\n self.CurrentPageNumber = 1;\r\n window.history.pushState(newUrl, '', newUrl);\r\n self.reloadPageListingOnlyCallback(false);\r\n });\r\n } catch (e) {\r\n alert(\"Exception: \" + e);\r\n }\r\n };\r\n\r\n this.getParameterByName = function (name) {\r\n name = name.replace(/[\\[]/, \"\\\\[\").replace(/[\\]]/, \"\\\\]\");\r\n var regex = new RegExp(\"[\\\\?&]\" + name + \"=([^&#]*)\"),\r\n results = regex.exec(location.search);\r\n return results === null ? \"\" : decodeURIComponent(results[1].replace(/\\+/g, \" \"));\r\n }\r\n\r\n\r\n this.addFieldToArea = function (areaName, fieldId, nodeId) {//todo: move to publisher script\r\n var areaContainer = $(\"div.area-content-container[data-area-name='\" + areaName + \"']\");\r\n if (areaContainer.length > 0) {\r\n var width = Math.round($(areaContainer).width());\r\n var param = {\r\n AreaName: areaName,\r\n FieldId: fieldId,\r\n NodeId: nodeId,\r\n Width: width,\r\n ActivePlid: 0,\r\n ActiveArticleId: 0,\r\n AreaUniqueId: areaContainer[0].id\r\n };\r\n\r\n self.fieldRenderService.PostAction(\"RenderField\", param).done(function (result) {\r\n if (result && result.Response.length > 0) {\r\n if (result.AddToEnd)\r\n $(areaContainer).append(result.Response);\r\n else {\r\n var existingFields = $(areaContainer).find(\".web-pub-field\");\r\n if (existingFields.length > 0) {\r\n $(existingFields[0]).before(result.Response);\r\n }\r\n else $(areaContainer).append(result.Response);\r\n }\r\n EnableLinksForArticlesWithBackground();\r\n }\r\n });\r\n\r\n }\r\n };\r\n this.replaceField = function (fieldId, nodeId, isEdm) {//todo: move to publisher script\r\n var areaContainer = $(\"#Field_\" + fieldId).closest(\"div.area-content-container\");//[data-area-name='\" +areaName + \"']\");\r\n if (areaContainer.length > 0) {\r\n if (nodeId == undefined || nodeId == 0)\r\n nodeId = jQuery('#hidden-nodeid').text();\r\n if (isEdm == undefined)\r\n isEdm = false;\r\n\r\n var width = Math.round($(areaContainer).width());\r\n var param = {\r\n FieldId: fieldId,\r\n NodeId: nodeId,\r\n IsEdm: isEdm,\r\n Width: width,\r\n ActivePlid: 0,\r\n ActiveArticleId: 0,\r\n AreaUniqueId: areaContainer[0].id\r\n };\r\n\r\n self.fieldRenderService.PostAction(\"RenderField\", param).done(function (result) {\r\n if (result && result.Response.length > 0) {\r\n $(\"#Field_\" + fieldId).replaceWith(result.Response);\r\n EnableLinksForArticlesWithBackground();\r\n }\r\n });\r\n\r\n }\r\n };\r\n\r\n \r\n\r\n $.fn.scrollView = function (offset) {\r\n return this.each(function () {\r\n if (offset == undefined)\r\n offset = 0;\r\n\r\n $('html, body').animate({\r\n scrollTop: $(this).offset().top + offset\r\n }, 1000);\r\n });\r\n }\r\n\r\n \r\n var escapeRegExp = function (str) {\r\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\r\n };\r\n\r\n var replaceAll = function (find, replace, str) {\r\n return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);\r\n };\r\n\r\n this.RemovePageNumberFromLink = function (url) {\r\n var index = url.indexOf('pageID=');\r\n if (index >= 0) {\r\n var urlPartWithPageID = url.substring(index, url.length);\r\n var urlPartWithoutPageID = urlPartWithPageID.substring(7, urlPartWithPageID.length);\r\n var indexOfFirstAmpersand = urlPartWithoutPageID.indexOf('&', 1);\r\n if (indexOfFirstAmpersand > 0) {\r\n var tmp = urlPartWithoutPageID.substring(indexOfFirstAmpersand, urlPartWithoutPageID.length);\r\n return tmp;\r\n } else {\r\n var newUrl = replaceAll(urlPartWithPageID, '', url);\r\n var indexOfQuestionmark = newUrl.indexOf('?');\r\n if (indexOfQuestionmark > 0 && indexOfQuestionmark === (newUrl.length - 1)) {\r\n newUrl = newUrl.substr(0, newUrl.length - 1);\r\n }\r\n if (newUrl.substring(newUrl.length - 1, newUrl.length) === '&')\r\n newUrl = newUrl.substring(0, newUrl.length - 1);\r\n\r\n indexOfQuestionmark = newUrl.indexOf('?');\r\n if (indexOfQuestionmark > 0 && indexOfQuestionmark === (newUrl.length - 1)) {\r\n newUrl = newUrl.substr(0, newUrl.length - 1);\r\n }\r\n\r\n return newUrl;\r\n }\r\n } else\r\n return url;\r\n };\r\n\r\n var CreateUrl = function (currentUrl, valToAdd) {\r\n var url = decodeURIComponent(currentUrl);\r\n\r\n url = self.RemovePageNumberFromLink(url);\r\n\r\n var filterIndex = url.indexOf('Filter=');\r\n if (filterIndex >= 0) {\r\n filterIndex += 7;\r\n var indexOfColonInNewValue = valToAdd.indexOf(':');\r\n\r\n var existingAttributeID = valToAdd.substr(0, indexOfColonInNewValue);\r\n\r\n var startOfExistingAttributeIDInUrl = McIndexOf(url, existingAttributeID + ':');\r\n if (startOfExistingAttributeIDInUrl >= 0) {\r\n var startOfUrl = url.substr(0, startOfExistingAttributeIDInUrl + existingAttributeID.length + 1);\r\n var endOfUrl = url.substr(startOfExistingAttributeIDInUrl + existingAttributeID.length + 1, url.length);\r\n var attributeValueID = valToAdd.substr(indexOfColonInNewValue + 1, valToAdd.length);\r\n return startOfUrl + attributeValueID + '^' + endOfUrl;\r\n\r\n } else {\r\n return url.substring(0, filterIndex) + valToAdd + '|' + url.substring(filterIndex, url.length);\r\n }\r\n } else {\r\n if (url.indexOf('?') < 0) {\r\n url += '?';\r\n } else {\r\n if (url.substr(url.length - 1, 1) != '&' && url.substr(url.length - 1, 1) != '?')\r\n url += '&';\r\n }\r\n\r\n url += 'Filter=' + valToAdd;\r\n return url;\r\n }\r\n };\r\n\r\n this.getCurrentFirstPage = function () {\r\n return self.RemovePageNumberFromLink(document.location.href);\r\n }\r\n\r\n this.RemoveAttribute = function (url, parsedFilter) {\r\n var parsedUrl = decodeURIComponent(url);\r\n var newLocation = parsedUrl.replace(parsedFilter, \"\");\r\n if (newLocation.substring(newLocation.length - 1) === '|') //find pipe at the end (|)\r\n newLocation = newLocation.substring(0, newLocation.length - 1);\r\n\r\n var indexOfPipeAfterFilter = newLocation.indexOf('Filter=|'); //check if there is a remaining pipe at the beginning of the filter\r\n if (indexOfPipeAfterFilter > 1)\r\n newLocation = newLocation.replace('|', \"\");\r\n\r\n\r\n if (newLocation.substring(newLocation.length - 7) === 'Filter=')\r\n newLocation = newLocation.substring(0, newLocation.length - 7);\r\n\r\n if (newLocation.substring(newLocation.length - 1) === '&')\r\n newLocation = newLocation.substring(0, newLocation.length - 1);\r\n\r\n if (newLocation.substring(newLocation.length - 1) === '?')\r\n newLocation = newLocation.substring(0, newLocation.length - 1);\r\n\r\n newLocation = newLocation.replace('||', '|'); //If we remove an attribute from the middle, we'll have an extra pipe which can be removed.\r\n\r\n return newLocation;\r\n };\r\n\r\n this.RemoveAttributeValueFromLink = function (attributeID, attributeValueID) {\r\n var url = new String(document.location.href);\r\n url = decodeURIComponent(url);\r\n var attValRegexp = new RegExp(attributeValueID, 'ig');\r\n var indexBeforeAttributeValue;\r\n var m;\r\n while (m = attValRegexp.exec(url)) { //Find all occurences of the string. It might be a substring of another, so we will check if it is an exact match\r\n\r\n indexBeforeAttributeValue = m.index;\r\n var endOfStringIndex = m.index + attributeValueID.length; //index of right after string...\r\n\r\n if (endOfStringIndex >= url.length) { //we've reached end url, so it's OK\r\n break;\r\n //} else if (url.substr(indexBeforeAttributeValue + attributeValueID.length, 1).match(/(^|~)/i)) { //we've found the ^ character, so it's the end of the search string and thus OK\r\n } else {\r\n var substring = url.substr(indexBeforeAttributeValue + attributeValueID.length, 1);\r\n if (substring === \"~\" || substring === \"^\")\r\n break;\r\n\r\n }\r\n\r\n }\r\n\r\n var newLink = '';\r\n if (url.substr(indexBeforeAttributeValue - 1, 1) == '^' ||\r\n url.substr(indexBeforeAttributeValue + attributeValueID.length, 1) == '^') {\r\n if (url.substr(indexBeforeAttributeValue - 1, 1) == ':') {\r\n newLink = url.replace(attributeValueID + '^', '');\r\n } else {\r\n if ((indexBeforeAttributeValue + attributeValueID.length) >= url.length) {\r\n newLink = url.substr(0, indexBeforeAttributeValue);\r\n if (newLink.substr(newLink.length - 1, 1) === \"^\")\r\n newLink = newLink.substr(0, newLink.length - 1);\r\n }\r\n else {\r\n newLink = url.replace('^' + attributeValueID, '');\r\n }\r\n\r\n }\r\n return newLink;\r\n } else {\r\n return self.RemoveAttribute(url, attributeID + ':' + attributeValueID);\r\n }\r\n };\r\n\r\n\r\n this.addValueToQueryString = function (me, attributeId, attributeValueId) {\r\n\r\n if (jQuery(me).hasClass(\"disabled\"))\r\n return;//shouldn't allow clicks when the disabled class i set. \r\n\r\n jQuery(me).addClass(\"attribute-spinner\");\r\n var loc = document.location.href;\r\n var searchLoc = decodeURIComponent(self.getParameterByName('Filter'));\r\n var newLocation = \"\";\r\n var attributeValueIdExisted = false;\r\n if (searchLoc.length > 0) {\r\n var currentAttributes = searchLoc.split('|');\r\n for (var i = 0; i < currentAttributes.length; i++) {\r\n var attributeAndValues = currentAttributes[i].split(':');\r\n if (attributeAndValues.length >= 2) {\r\n //first entry in array should be the attributeId and the second a list of attributeValues\r\n if (attributeAndValues[0] === attributeId) {\r\n var attributeValues = attributeAndValues[1].split('^');\r\n for (var j = 0; j < attributeValues.length; j++) {\r\n var currentAttributeValueId = attributeValues[j];\r\n if (currentAttributeValueId === attributeValueId)\r\n attributeValueIdExisted = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n }\r\n\r\n if (attributeValueIdExisted) {\r\n newLocation = self.RemoveAttributeValueFromLink(attributeId, attributeValueId);\r\n RemoveAttributeValueLinkFromDom(attributeValueId);\r\n\r\n } else {\r\n newLocation = encodeURI(CreateUrl(loc, attributeId + ':' + attributeValueId));\r\n var titleOfRemoved = me.text;\r\n AddDivForRemovingAttributeValue(attributeValueId, attributeId, titleOfRemoved);\r\n }\r\n\r\n newLocation = self.RemovePageNumberFromLink(newLocation);\r\n\r\n window.history.pushState(attributeId + ':' + attributeValueId, document.title, newLocation);\r\n\r\n var searchLocAfterFiltering = decodeURIComponent(self.getParameterByName('Filter'));\r\n\r\n self.informShopOfFilterActivation(searchLocAfterFiltering);\r\n\r\n self.CurrentPageNumber = 1;\r\n self.setInternalListOfOpenFilters();\r\n self.updateSelectedAttributeListVisibility();\r\n self.updateFields(\".ajax-field\", \"#AttributeListBox\", true, false, false, 0);\r\n };\r\n\r\n this.updateSelectedAttributeListVisibility = function () {\r\n var searchLoc = decodeURIComponent(self.getParameterByName('Filter'));\r\n if (searchLoc.length <= 0) {\r\n jQuery(\"div.SelectedAttributeBox .filter-selection-container\").addClass(\"hide\");\r\n }\r\n else {\r\n jQuery(\"div.SelectedAttributeBox .filter-selection-container\").removeClass(\"hide\");\r\n }\r\n };\r\n\r\n this.informShopOfFilterActivation = function (currentFilter) {\r\n var data = { clientHasFilter: currentFilter !== null && currentFilter !== undefined && currentFilter.length > 0 };\r\n self.filterService.GetAction(\"SetFilterActive\", data).done(function (result) {\r\n\r\n jQuery(\"#cbxGroupVariants\").prop(\"checked\", result);\r\n });\r\n };\r\n\r\n this.setInternalListOfOpenFilters = function () {\r\n var openAttributes = jQuery(\"#AttributeListBox div.AttributeBox.show-extra-values\");\r\n var openAttributesList = [];\r\n openAttributes.each(function (index, item) {\r\n openAttributesList.push(jQuery(item).data(\"attribute-id\"));\r\n });\r\n self.openAttributesList = openAttributesList;\r\n\r\n };\r\n\r\n this.doScrollToNextPage = function (element) {\r\n self.resetAutoScrolledPages();\r\n return self.scrollToNextPage(element);\r\n };\r\n\r\n\r\n this.scrollToNextPage = function (element) {\r\n try {\r\n var url = element.getAttribute(\"data-next-page-url\");\r\n var nextPageIndex = parseInt(element.getAttribute(\"data-next-page-index\"));\r\n if (nextPageIndex > self.CurrentPageNumber) {\r\n //CurrentPageNumber may be off when we started on page > 1. We must reset currentpage here since we know which is to be the next page\r\n if (nextPageIndex > 1)\r\n self.CurrentPageNumber = nextPageIndex - 1;\r\n\r\n var title = element.getAttribute(\"title\");\r\n window.history.pushState(url, document.title + ' - ' + title, url);\r\n self.updateFields(\".ajax-field[data-field-is-productlist=1]\",\r\n \"#AttributeListBox\",\r\n true,\r\n true,\r\n false,\r\n 0,\r\n nextPageIndex); //todo: check that we're actually only changing page, because otherwise we need to set the param doNotRenderFilter to false\r\n self.updateScroller(element);\r\n }\r\n return false; //indicate navgiation is complete\r\n } catch (e) {\r\n return true; //must navigate using the link\r\n }\r\n };\r\n\r\n this.scrollToPrevPage = function (element) {\r\n try {\r\n var url = element.getAttribute(\"data-prev-page-url\");\r\n var nextPageIndex = element.getAttribute(\"data-prev-page-index\");\r\n var prevPage = parseInt(nextPageIndex);\r\n if (prevPage < self.LowestPageNumberSeen)\r\n self.CurrentPageNumber = prevPage + 1; //it will be reduced by one within loadPrevPage\r\n\r\n var title = element.getAttribute(\"title\");\r\n window.history.pushState(url, document.title + ' - ' + title, url);\r\n //todo: sjekk hvorfor jeg får side =3 eller 4 når nextPageIndex er 2, data-next-page-url blir feil også. skipper med 2 sider hver gang!\r\n\r\n self.loadPrevPage();\r\n return false; //indicate navgiation is complete\r\n } catch (e) {\r\n return true; //must navigate using the link\r\n }\r\n };\r\n\r\n this.navigateToPage = function (element) {\r\n try {\r\n var url = element.getAttribute(\"href\");\r\n var title = element.getAttribute(\"title\");\r\n window.history.pushState(url, document.title + ' - ' + title, url);\r\n self.updateFields(\".ajax-field\", \"#AttributeListBox\", true, true, false, 0); //todo: check that we're actually only changing page, because otherwise we need to set the param doNotRenderFilter to false\r\n return false; //indicate navgiation is complete\r\n } catch (e) {\r\n return true; //must navigate using the link\r\n }\r\n\r\n };\r\n\r\n var updateAttributeContent = function (result) {\r\n if (result.Success) {\r\n $('#' + result.ClientId).html(result.Response);\r\n }\r\n };\r\n\r\n this.fetchAttributeValues = function (attributeId, target, targetId, nodeId, fieldId) {\r\n var queryFilterParam = self.getParameterByName(\"Filter\");\r\n var queryMinParam = self.getParameterByName(\"Min\");\r\n var queryMaxParam = self.getParameterByName(\"Max\");\r\n var pageIndex = self.getParameterByName(\"pageID\");\r\n var fieldRequestFilter = {\r\n NodeId: nodeId,\r\n Url: document.location.pathname + document.location.search,\r\n Filter: queryFilterParam,\r\n MinPrice: queryMinParam,\r\n MaxPrice: queryMaxParam,\r\n SearchString: self.getParameterByName(\"q\"),\r\n ClientId: targetId,\r\n PageIndex: pageIndex,\r\n FilterCacheKey: ''\r\n }\r\n\r\n self.service.PostAction(\"RenderAttribute\", { AttributeId: attributeId, FieldId: fieldId, RequestFilter: fieldRequestFilter }).done(\r\n function (result) {\r\n if (result != null) {\r\n updateAttributeContent(result);\r\n }\r\n }\r\n );\r\n };\r\n\r\n this.updateScroller = function (element) {\r\n\r\n self.service.GetAction(\"GetNextPageUrl\", { currentUrl: jQuery(element).data(\"next-page-url\"), currentIndex: self.CurrentPageNumber }).done(\r\n function (result) {\r\n if (result != null) {\r\n self.CurrentPageNumber = self.CurrentPageNumber + 1;\r\n if (self.CurrentPageNumber > self.HighestPageNumberSeen)\r\n self.HighestPageNumberSeen = self.CurrentPageNumber;\r\n\r\n jQuery(element).data(\"next-page-url\", result);\r\n var nextIndex = parseInt(jQuery(element).data(\"next-page-index\"));\r\n jQuery(element).data(\"next-page-index\", nextIndex + 1);\r\n\r\n }\r\n }\r\n );\r\n };\r\n\r\n this.hidePaging = function () {\r\n var pagingTag = jQuery('.field-paging-container');\r\n jQuery(pagingTag).addClass('hidden');\r\n }\r\n this.showPagingContainer = function () {\r\n var pagingTag = jQuery('.field-paging-container');\r\n jQuery(pagingTag).removeClass('hidden');\r\n }\r\n\r\n this.showPageLoadingIcon = function () {\r\n var pagingTag = jQuery('.field-paging-next');\r\n jQuery(pagingTag).addClass('hidden');\r\n var loadingTag = jQuery('.field-paging-loading');\r\n jQuery(loadingTag).removeClass('hidden');\r\n };\r\n\r\n this.hidePageLoadingIcon = function () {\r\n var pagingTag = jQuery('.field-paging-next');\r\n jQuery(pagingTag).removeClass('hidden');\r\n var loadingTag = jQuery('.field-paging-loading');\r\n jQuery(loadingTag).addClass('hidden');\r\n };\r\n\r\n this.runUpdateFields = function () {\r\n if (self.fieldsToLoad != undefined && self.fieldsToLoad.length > 0) {\r\n var param = self.fieldsToLoad.shift();\r\n self.updateFields(param.targetKey,\r\n param.filterTargetKey,\r\n param.onlyUpdateProductList,\r\n param.doNotRenderFilter,\r\n param.useDummyData,\r\n param.popupFilter,\r\n param.nextPageNumber);\r\n }\r\n };\r\n\r\n\r\n this.refreshPriceCache = function () {\r\n self.service.PostAction(\"ClearPriceCaches\").done(function (result) {\r\n\r\n });\r\n };\r\n\r\n this.updateFields = function (targetKey, filterTargetKey, onlyUpdateProductList, doNotRenderFilter, useDummyData, popupFilter, nextPageNumber) {\r\n //todo: vis venteikon\r\n var fieldsToLoad = $(targetKey);\r\n var fieldsArray = [];\r\n var queryFilterParam = self.getParameterByName(\"Filter\");\r\n var queryMinParam = self.getParameterByName(\"Min\");\r\n var queryMaxParam = self.getParameterByName(\"Max\");\r\n var pageIndex = self.getParameterByName(\"pageID\");\r\n var otherContactId = self.getParameterByName(\"kontaktid\");\r\n var getNextPage = !!nextPageNumber;\r\n var getPrevPage = false;\r\n var isInsidePopup = targetKey.indexOf(\".modal\") > -1;\r\n\r\n if (nextPageNumber !== undefined && onlyUpdateProductList) {\r\n pageIndex = nextPageNumber;\r\n }\r\n if (getNextPage) {\r\n pageIndex = nextPageNumber;\r\n\r\n if (onlyUpdateProductList && nextPageNumber < self.CurrentPageNumber) {\r\n getPrevPage = true;\r\n }\r\n self.showPageLoadingIcon();\r\n }\r\n if (self.deviceSize == \"\")\r\n self.deviceSize = mcWeb.responsive.getScreenSize();\r\n var isForInstantSearch = targetKey.indexOf(\".d4-instant-search-loadbyajax\") >= 0;\r\n\r\n var fieldRequestFilter = {};\r\n var requestFilterAdded = false;\r\n var sendFilterOnly = false;\r\n for (var i = 0; i < fieldsToLoad.length; i++) {\r\n var current = $(fieldsToLoad[i]);\r\n var isProductListField = false;\r\n var areaid = current.data(\"area-id\");\r\n\r\n if (onlyUpdateProductList) {\r\n if (areaid !== \"CenterContentDynamicAdList\" && areaid !== \"CenterContentDynamicProdListAlternate\")\r\n continue;//only need to update productlist, lets skip all other fields\r\n\r\n sendFilterOnly = $(current).hasClass(\"loaded\") && !getNextPage && !self.InitialLoadDone;\r\n if (pageIndex === 0)\r\n pageIndex = self.InitialPageNumber;\r\n }\r\n\r\n if (current.parents(\".stop-ajax-rendering\").length > 0)\r\n continue;//this area is not yet ready to be rendered, it is known to be hidden.\r\n\r\n if (areaid === \"CenterContentDynamicAdList\" || areaid === \"CenterContentDynamicProdListAlternate\") {\r\n if (self.ListingTypeGrid && areaid === \"CenterContentDynamicProdListAlternate\") {\r\n current.html('');//remove spinner for fields with no content\r\n continue;//only one of the areas should be updated, so skip the area that isn't used for the current listing type\r\n }\r\n else if (!self.ListingTypeGrid && areaid === \"CenterContentDynamicAdList\") {\r\n current.html('');//remove spinner for fields with no content\r\n continue;\r\n }\r\n\r\n isProductListField = true;\r\n var filterContainer = $(filterTargetKey);\r\n if (filterContainer === undefined || filterContainer === null)\r\n return; //filter not meant to be visible\r\n\r\n filterContainer = $(filterContainer);\r\n var filterClientId = \"\";\r\n if (filterContainer != undefined &&\r\n filterContainer != null &&\r\n filterContainer.length > 0 &&\r\n filterContainer[0] != null) {\r\n filterClientId = filterContainer[0].id;\r\n } else doNotRenderFilter = true;\r\n\r\n var cacheKey = \"\";\r\n if (self.allowUseOfProductCache && pageIndex <= 1) {\r\n //if (!onlyUpdateProductList || doNotRenderFilter) //loading the page, data will have been cached when determining the visibility of fields\r\n cacheKey = current.attr(\"data-cachekey\");\r\n }\r\n\r\n fieldRequestFilter = {\r\n NodeId: current.data(\"node-id\"),\r\n Url: document.location.pathname + document.location.search,\r\n Filter: queryFilterParam,\r\n MinPrice: queryMinParam,\r\n MaxPrice: queryMaxParam,\r\n SearchString: self.getParameterByName(\"q\"),\r\n ClientId: filterClientId,\r\n PageIndex: pageIndex,\r\n FilterCacheKey: cacheKey,\r\n FilterIsJson: false,\r\n OpenAttributes: self.openAttributesList,\r\n OtherContactId: otherContactId\r\n };\r\n requestFilterAdded = true;\r\n }\r\n else if (jQuery(current).data(\"sf\") === 1) {\r\n fieldRequestFilter = {\r\n NodeId: current.data(\"node-id\"),\r\n Url: document.location.pathname + document.location.search,\r\n Filter: JSON.stringify(self.currentPopupFilter),//todo: keep a filter after # in the url?\r\n MinPrice: null,//queryMinParam, get from filter after # in url\r\n MaxPrice: null,//queryMaxParam,get from filter after # in url\r\n SearchString: '',\r\n ClientId: 'secondary-filter',\r\n PageIndex: 0,\r\n FilterCacheKey: '',\r\n FilterIsJson: self.currentPopupFilter !== undefined && self.currentPopupFilter !== null,\r\n OpenAttributes: null,\r\n OtherContactId: otherContactId\r\n };\r\n requestFilterAdded = true;\r\n }\r\n else if (!requestFilterAdded) {\r\n fieldRequestFilter = {\r\n NodeId: current.data(\"node-id\"),\r\n Url: document.location.pathname + document.location.search,\r\n Filter: '',//todo: keep a filter after # in the url?\r\n MinPrice: null,//queryMinParam, get from filter after # in url\r\n MaxPrice: null,//queryMaxParam,get from filter after # in url\r\n SearchString: self.currentSearchKeyword,\r\n ClientId: '',\r\n PageIndex: 0,\r\n FilterCacheKey: '',\r\n FilterIsJson: false,\r\n OpenAttributes: null,\r\n OtherContactId: otherContactId\r\n };\r\n if (current.data(\"filter-id\") != null && current.data(\"filter-id\") != undefined && current.data(\"filter-id\").length > 0) {\r\n fieldRequestFilter.ClientId = current.data(\"filter-id\");\r\n }\r\n requestFilterAdded = true;\r\n }\r\n\r\n if (!onlyUpdateProductList || isProductListField) {\r\n var width = self.getFieldWidth(current, isForInstantSearch);\r\n var myPlids = null;\r\n var myPlidsString = current.data('plids');\r\n if (myPlidsString != undefined && myPlidsString != null)\r\n myPlids = myPlidsString;\r\n\r\n var myPlid = current.data('plid');\r\n if (self.PreviewProduktLagerId != null) {\r\n myPlid = self.PreviewProduktLagerId;\r\n }\r\n if (targetKey != \"div.load-later .ajax-field.not-loaded[data-sf='0']\" || width > 0) {\r\n var fieldData = {\r\n Width: width,\r\n AreaName: current.data(\"area-id\"),\r\n FieldId: current.data(\"field-id\"),\r\n NodeId: current.data(\"node-id\"),\r\n ClientId: current[0].id,\r\n UseSpecificLayoutId: current.data(\"use-specific-layout\"),\r\n LayoutId: current.data('layoutid'),\r\n ManufacturerId: current.data('manufacturerid'),\r\n VariantSorting: current.data('variant-sorting'),\r\n Plid: myPlid,\r\n PlidList: myPlids,\r\n SendFilterOnly: sendFilterOnly\r\n };\r\n fieldsArray.push(fieldData);\r\n }\r\n else {\r\n current.find(\"i.icon-spinner\").remove();\r\n }\r\n }\r\n }\r\n var skipSorter = getPrevPage;\r\n self.PreviewProduktLagerId = null;\r\n if (fieldsArray.length > 0) {\r\n self.service.PostAction(\"RenderFields\", {\r\n Data: fieldsArray, RequestFilter: fieldRequestFilter,\r\n SkipFilterRendering: doNotRenderFilter || getNextPage, UseDummyData: useDummyData, DeviceSize: self.deviceSize, GetElementsOnly: getNextPage, SkipSorter: skipSorter,\r\n CurrentArticle: self.currentArticleId, PopupFilter: popupFilter\r\n }).done(\r\n function (result) {\r\n if (result != null) {\r\n if (isForInstantSearch || self.reloadFromCallbackActive || isInsidePopup || pageIndex > 1)\r\n result.AllowDeferred = false;\r\n if (getPrevPage) {\r\n result.Prepend = true;\r\n } else {\r\n result.Prepend = false;\r\n }\r\n\r\n self.updateFieldContent(result);\r\n\r\n if (result.EmptyFields !== null && result.EmptyFields.length > 0) {\r\n for (var i = 0; i < result.EmptyFields.length; i++) {\r\n $(\"#\" + result.EmptyFields[i]).html('');//remove spinner for fields with no content\r\n }\r\n }\r\n self.reloadFromCallbackActive = false;\r\n if (getNextPage) {\r\n pageIndex = nextPageNumber;\r\n self.hidePageLoadingIcon();\r\n }\r\n\r\n if (targetKey.indexOf(\"div.load-later\") >= 0) {\r\n if (self.InitialLoadDone == false && window.D4DeferredScripts != undefined) {\r\n setTimeout(function () {\r\n var parser = new DOMParser;\r\n var dom = parser.parseFromString(\r\n '' + window.D4DeferredScripts,\r\n 'text/html');\r\n var decodedString = dom.body.textContent;\r\n\r\n if (window.D4SingleScript) {\r\n //we only have the path; let's use jquery to load the script\r\n jQuery.getScript(decodedString,\r\n function (data, textStatus, jqxhr) {\r\n //console.log(data); // Data returned\r\n console.log(textStatus); // Success\r\n console.log(jqxhr.status); // 200\r\n console.log(\"Load was performed.\");\r\n });\r\n } else {\r\n jQuery(\"body\").append(decodedString);\r\n }\r\n\r\n },\r\n 5);\r\n }\r\n self.setupSubscriptions();\r\n setTimeout(self.postStatistics, 250);\r\n }\r\n }\r\n\r\n if (self.fieldsToLoad != undefined && self.fieldsToLoad.length > 0) {\r\n self.runUpdateFields();\r\n } else {\r\n\r\n if (!self.InitialLoadDone) {\r\n self.setupSubscriptions();\r\n }\r\n }\r\n if (isInsidePopup) {\r\n PubSub.publish(mcWeb.lightbox.events.contentChanged);\r\n }\r\n\r\n }\r\n );\r\n }\r\n else if (!self.InitialLoadDone) {\r\n if (self.fieldsToLoad !== undefined && self.fieldsToLoad.length > 0) {\r\n self.runUpdateFields();\r\n }\r\n else {\r\n if (!self.InitialLoadDone) {\r\n self.setupSubscriptions();\r\n }\r\n }\r\n }\r\n\r\n };\r\n\r\n self.getFieldWidth = function (current, isForInstantSearch) {\r\n var width = current.width();\r\n if (width == 0 && isForInstantSearch) {\r\n if (self.deviceSize == \"sm\")\r\n width = 200;\r\n }\r\n else if (width == 0) {\r\n var fieldParents = jQuery(current).parents(\".web-pub-field.container, .web-pub-field.container-fluid\");\r\n for (var parentIndex = 0; parentIndex < fieldParents.length; parentIndex++) {\r\n if (fieldParents[parentIndex] != null) {\r\n var currentParent = jQuery(fieldParents[parentIndex]);\r\n var tmpWidth = currentParent.width();\r\n if (tmpWidth > 0) {\r\n width = tmpWidth;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (width <= 0) {\r\n var $current = $(current);\r\n //if this is a field that will open in a popup, and the popup is not visible yet, the width must be set by the size of the lightbox\r\n if ($current.data(\"popup\") > 0) {\r\n var lightboxLocator = \"#center-popup\";\r\n if ($current.data(\"popup-plc\") == 1) {\r\n lightboxLocator = \"#rhs-popup\";\r\n }\r\n width = $(lightboxLocator).width();\r\n }\r\n }\r\n\r\n return width;\r\n };\r\n\r\n self.setupSubscriptions = function () {\r\n if (self.subscriptionsInitialised)\r\n return; //we've done this already\r\n self.subscriptionsInitialised = true;\r\n\r\n self.disableDoubleClick(\"ad-buy-button\");\r\n PubSub.subscribe(AjaxRenderingEngineEventTypes.onFieldContentChanged,\r\n function (data, message) {\r\n self.disableDoubleClick(\"ad-buy-button\");\r\n if ($(\"body.publish-mode\").length > 0) {\r\n mcWeb.publisher.checkElementsMarkedInSessionStorage();\r\n }\r\n });\r\n \r\n \r\n PubSub.subscribe(AjaxRenderingEngineEventTypes.onPriceRefreshRequested,\r\n function (message, data) {\r\n if (data !== undefined && data !== null) {\r\n self.updateContentForPreloadedFields(data.Target,false);\r\n }\r\n else self.updateContentForPreloadedFields(\"div.ajax-field\", false);\r\n });\r\n\r\n PubSub.subscribe(mcWeb.cartsmall.events.onShowNewItemInCartText,\r\n function (message, data) {\r\n if (data.favouriteCart != undefined && data.favouriteCart)\r\n return; //we don't show this popup when products were added favourite carts\r\n\r\n var lightboxModal = jQuery(\"#center-popup\").data('bs.modal');\r\n if (lightboxModal !== null && lightboxModal !== undefined && lightboxModal.isShown)\r\n return;\r\n var loadPopupParams2 = {\r\n targetKey: \"div.ajax-field.not-loaded[data-popup=6]\",\r\n filterTargetKey: \"#AttributeListBox\",\r\n onlyUpdateProductList: false,\r\n doNotRenderFilter: true,\r\n useDummyData: false,\r\n popupFilter: 6,\r\n nextPageNumber: 0\r\n };\r\n self.fieldsToLoad.push(loadPopupParams2);\r\n self.runUpdateFields();\r\n\r\n var loadPopupParams = {\r\n targetKey: \"div.ajax-field.not-loaded[data-popup=2]\",\r\n filterTargetKey: \"#AttributeListBox\",\r\n onlyUpdateProductList: false,\r\n doNotRenderFilter: true,\r\n useDummyData: false,\r\n popupFilter: 2,\r\n nextPageNumber: 0\r\n };\r\n self.fieldsToLoad.push(loadPopupParams);\r\n self.runUpdateFields();\r\n\r\n });\r\n\r\n PubSub.subscribe(mcWeb.cart.events.onPopupForProductAssembly,\r\n function (message, data) {\r\n var p = {\r\n targetKey: \"div.ajax-field.not-loaded[data-popup=8]\",\r\n filterTargetKey: \"#AttributeListBox\",\r\n onlyUpdateProductList: false,\r\n doNotRenderFilter: true,\r\n useDummyData: false,\r\n popupFilter: 8,\r\n nextPageNumber: 0\r\n };\r\n self.updateFields(p.targetKey, p.filterTargetKey, p.onlyUpdateProductList, p.doNotRenderFilter, p.useDummyData, p.popupFilter, p.nextPageNumber);\r\n });\r\n\r\n PubSub.subscribe(AjaxRenderingEngineEventTypes.onPopupFilterChanged,\r\n function (message, data) {\r\n // data contains attribute, attributevalue and the sender\r\n //use this to find the nearest field that should be filtered by the attribute\r\n self.currentPopupFilter = data.FullFilter;\r\n\r\n var nextF = jQuery(data.Sender).parent().parent().next();\r\n if (nextF.length > 0) {\r\n\r\n var nextField = jQuery(nextF).find('.ajax-field');\r\n if (nextField.length > 0) {\r\n //we should now have stored the current filter in self.currentPopupFilter, so now we can ask\r\n //for the field content to be updated\r\n var targetFieldId = nextField[0].id;\r\n var targetFieldPopupRule = jQuery(nextField).data(\"popup\");\r\n\r\n var loadPopupParams = {\r\n targetKey: \"#\" + targetFieldId,\r\n filterTargetKey: \"AttributeListBox\",\r\n onlyUpdateProductList: false,\r\n doNotRenderFilter: false,\r\n useDummyData: false,\r\n popupFilter: targetFieldPopupRule,\r\n nextPageNumber: 0\r\n };\r\n self.fieldsToLoad.push(loadPopupParams);\r\n self.runUpdateFields();\r\n }\r\n }\r\n\r\n });\r\n\r\n PubSub.subscribe(AjaxRenderingEngineEventTypes.onPushProductsIntoField,\r\n function (message, data) {\r\n var fieldNode = jQuery(\".ajax-field[data-field-id=\" + data.FieldId + \"]\");\r\n if (fieldNode.length === 0) {\r\n console.log(\"node not found\");\r\n return;\r\n }\r\n if (data.Plids !== undefined && data.Plids !== null && data.Plids.length > 0) {\r\n jQuery(fieldNode[0]).data(\"plids\", data.Plids);\r\n jQuery(fieldNode[0]).data(\"filter-id\", \"secondary-filter\");\r\n\r\n var param = {\r\n targetKey: \"#\" + jQuery(fieldNode[0]).attr(\"id\"),\r\n filterTargetKey: \"secondary-filter\",\r\n onlyUpdateProductList: false,\r\n doNotRenderFilter: false,\r\n useDummyData: false,\r\n popupFilter: null,\r\n nextPageNumber: 0\r\n };\r\n \r\n self.updateFields(param.targetKey,\r\n param.filterTargetKey,\r\n param.onlyUpdateProductList,\r\n param.doNotRenderFilter,\r\n param.useDummyData,\r\n param.popupFilter,\r\n param.nextPageNumber);\r\n }\r\n else {\r\n jQuery(fieldNode[0]).attr(\"data-Plids\", data.Plids);\r\n jQuery(fieldNode[0]).attr(\"data-filter-id\", \"secondary-filter\");\r\n jQuery(fieldNode).html('');\r\n jQuery(\".secondary-filter\").html('');\r\n }\r\n\r\n });\r\n\r\n mcWeb.ajaxPopup.load();//sets up subscriptions for event-controlled pop-ups\r\n self.checkForPopupAfterProductInfoVisit();\r\n self.checkForPopupFirstPageView();\r\n (function () {\r\n\r\n if (typeof window.CustomEvent === \"function\") return false;\r\n\r\n function CustomEvent(event, params) {\r\n params = params || { bubbles: false, cancelable: false, detail: null };\r\n var evt = document.createEvent('CustomEvent');\r\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\r\n return evt;\r\n }\r\n\r\n window.CustomEvent = CustomEvent;\r\n })();\r\n\r\n const formHead = document.querySelector('head');\r\n formHead.dispatchEvent(new CustomEvent(\"readyForGtm\", { bubbles: true, cancelable: false, detail: null }));\r\n self.InitialLoadDone = true;\r\n //todo: her trenger vi starte å prosessere en ny kø med jobber med javascript kall som legges inn av HTMLen som kommer publisert i f.eks. artikler.\r\n\r\n };\r\n\r\n self.checkForPopupFirstPageView = function () {\r\n if (!!self.firstPageViewPopup) {\r\n if (jQuery(\"body.publish-mode\").length <= 0) {\r\n\r\n var param = self.firstPageViewPopup;\r\n self.firstPageViewPopup = null;\r\n self.updateFields(param.targetKey,\r\n param.filterTargetKey,\r\n param.onlyUpdateProductList,\r\n param.doNotRenderFilter,\r\n param.useDummyData,\r\n param.popupFilter,\r\n param.nextPageNumber);\r\n }\r\n else {\r\n self.firstPageViewPopup = null;\r\n }\r\n\r\n }\r\n\r\n }\r\n self.disableDoubleClick = function (classToDisable) {\r\n jQuery('.' + classToDisable).dblclick(function (e) {\r\n e.preventDefault();\r\n });\r\n };\r\n\r\n self.checkForPopupAfterProductInfoVisit = function () {\r\n var param = {\r\n NodeId: jQuery(\"#hidden-nodeid\").text()\r\n };\r\n self.statsService.PostAction(\"CheckForPopupAfterProductVisit\", param).done(function (result) {\r\n if (self.fieldsToLoad == undefined)\r\n self.fieldsToLoad = [];\r\n if (result) {\r\n var loadPopupParams = {\r\n targetKey: \"div.ajax-field.not-loaded[data-popup='4']\",\r\n filterTargetKey: \"#AttributeListBox\",\r\n onlyUpdateProductList: false,\r\n doNotRenderFilter: true,\r\n useDummyData: false,\r\n popupFilter: 4,\r\n nextPageNumber: 0\r\n };\r\n\r\n self.updateFields(loadPopupParams.targetKey,\r\n loadPopupParams.filterTargetKey,\r\n loadPopupParams.onlyUpdateProductList,\r\n loadPopupParams.doNotRenderFilter,\r\n loadPopupParams.useDummyData,\r\n loadPopupParams.popupFilter,\r\n loadPopupParams.nextPageNumber);\r\n\r\n } else {\r\n var loadPopupParams = {\r\n targetKey: \"div.ajax-field.not-loaded[data-popup='5']\",\r\n filterTargetKey: \"#AttributeListBox\",\r\n onlyUpdateProductList: false,\r\n doNotRenderFilter: true,\r\n useDummyData: false,\r\n popupFilter: 5,\r\n nextPageNumber: 0\r\n };\r\n\r\n self.updateFields(loadPopupParams.targetKey,\r\n loadPopupParams.filterTargetKey,\r\n loadPopupParams.onlyUpdateProductList,\r\n loadPopupParams.doNotRenderFilter,\r\n loadPopupParams.useDummyData,\r\n loadPopupParams.popupFilter,\r\n loadPopupParams.nextPageNumber);\r\n }\r\n });\r\n };\r\n\r\n self.addFieldSorterToPage = function (data, $targetField, fieldData) {\r\n if (data.FieldSorterResponse !== null &&\r\n data.FieldSorterResponse.length > 0 && !fieldData.Prepend) {//when we prepend the page content, we don't need to update the \"go to next page\" link\r\n var myFieldContainer = $($targetField.parent()).parent();\r\n // fjern eksisterende paging før vi legger til den nye\r\n var oldFieldSorter = $(myFieldContainer).find(\".FieldSorter\");\r\n var oldFieldSorterCount = oldFieldSorter.length;\r\n oldFieldSorter.remove();\r\n if (fieldData.PagingMode <= 1 || $(\"#mmenu\").length > 0 || $(\"body.mc-filter-left\").length > 0) {\r\n $(myFieldContainer).prepend(data.FieldSorterResponse);\r\n }\r\n\r\n if (data.FieldSorter2Response !== null &&\r\n data.FieldSorter2Response.length > 0)\r\n $(myFieldContainer).append(data.FieldSorter2Response);\r\n\r\n var btn = $('#filter-btn');\r\n btn.show();\r\n\r\n //if(oldFieldSorterCount > 0)\r\n PubSub.publish(window.Menu.prototype.events.onAddNewFilterButton, null);\r\n }\r\n };\r\n self.addFieldContentToPage = function (fieldData, targetField, data) {\r\n self.bottomImageToLoad = null;\r\n if (targetField != undefined && !data.added) {\r\n var $targetField = $(targetField);\r\n\r\n data.added = true;\r\n self.addFieldSorterToPage(data, $targetField, fieldData);\r\n if (fieldData.FilterCacheKey !== null)//todo: check how to make this null when page index is not 1\r\n $targetField.attr(\"data-cachekey\", fieldData.FilterCacheKey);//update cache key. Especially useful when filtering is being applied, to allow quick reload of previously used filters\r\n\r\n self.registerStatistics(data);\r\n\r\n if (data.LoadFilter) {\r\n this.updateFilterContent(data);\r\n\r\n }\r\n if (!fieldData.AddToExistingField) {\r\n if (!data.SendFilterOnly) {//we called this only to get the attribute filter when SendFilterOnly is true\r\n $targetField.html(data.Response);\r\n self.ensureCorrectImageSizesForField(targetField, data);\r\n self.applyCustomerSpecifics(targetField, data);\r\n }\r\n\r\n var imageList = $targetField.find(\".AddProductImage img\");\r\n var lastImage = imageList.last();\r\n if (lastImage != null && lastImage.length > 0) {\r\n if (self.containsLoadableImage(lastImage))\r\n self.bottomImageToLoad = lastImage;\r\n }\r\n else if (imageList.length <= 0) {\r\n //No images found by looking for them in ads, so check for articles... \r\n if (self.bottomImageToLoad === null || self.bottomImageToLoad === undefined) {\r\n //we might only have articles in the field, let's look for one...\r\n var backgroundImgItems = $targetField.find(\"div.ArticleWithBackground.D4Standard .inner-content\");\r\n if (backgroundImgItems.length > 0) {\r\n var bgItem = backgroundImgItems.last();\r\n if (bgItem != null) {\r\n if (self.containsLoadableImage(bgItem))\r\n self.bottomImageToLoad = bgItem;\r\n }\r\n }\r\n }\r\n }\r\n\r\n PubSub.publish(AjaxRenderingEngineEventTypes.onFieldContentChanged, data);\r\n } else {\r\n if (fieldData.Prepend) {\r\n $targetField.prepend(data.Response);\r\n PubSub.publish(AjaxRenderingEngineEventTypes.onFieldContentChanged, data);\r\n } else {\r\n $targetField.append(data.Response);\r\n PubSub.publish(AjaxRenderingEngineEventTypes.onFieldContentChanged, data);\r\n }\r\n self.ensureCorrectImageSizesForField(targetField, data);\r\n self.applyCustomerSpecifics(targetField, data);\r\n }\r\n self.initialiseAdLinks();\r\n if (fieldData.InitializeRoyalSlider)\r\n InitializeRoyalSliderInAds(\"#\" + data.ClientId + \" .variant-slider\");\r\n\r\n\r\n\r\n if (!data.SendFilterOnly && (data.Response === null || data.Response.length === 0)) {\r\n\r\n if ((data.AreaName === \"CenterContentDynamicAdList\"\r\n || data.AreaName === \"CenterContentDynamicProdListAlternate\")\r\n && data.IsNoHitSearch) {\r\n jQuery(\".search-no-result\").show();\r\n if (data.ShowInStockOnly || data.ShowInRemoteStockOnly) {\r\n jQuery(\".search-no-result-not-instock\").show();\r\n //hide the lhs filterbutton\r\n }\r\n else {\r\n jQuery(\".search-no-result-not-instock\").hide();\r\n }\r\n jQuery(\"div.container-2016.has-filters\").hide();\r\n\r\n }\r\n if (data.AreaName === \"CenterContentDynamicAdList\") {\r\n //find and hide the Sorter elements for ad-listing\r\n $(\".FieldSorter.web-pubfield-sort.CenterContentDynamicAdList\").hide();\r\n } else if (data.AreaName === \"CenterContentDynamicProdListAlternate\") {\r\n //find and hide the Sorter elements for ad-listing\r\n $(\".FieldSorter.web-pubfield-sort.CenterContentDynamicProdListAlternate\").hide();\r\n }\r\n } else {\r\n if ((data.AreaName === \"CenterContentDynamicAdList\"\r\n || data.AreaName === \"CenterContentDynamicProdListAlternate\")\r\n && data.IsProductListing) {\r\n jQuery(\"body:not(.publish-mode) .search-no-result\").hide();\r\n }\r\n if (data.AreaName === \"CenterContentDynamicAdList\") {\r\n //find and hide the Sorter elements for ad-listing\r\n $(\".FieldSorter.web-pubfield-sort.CenterContentDynamicAdList\").show();\r\n } else if (data.AreaName === \"CenterContentDynamicProdListAlternate\") {\r\n //find and hide the Sorter elements for ad-listing\r\n $(\".FieldSorter.web-pubfield-sort.CenterContentDynamicProdListAlternate\").show();\r\n }\r\n }\r\n if (fieldData.IsDummyField) {\r\n $targetField.click(self.selectLayoutClick);\r\n $targetField.addClass(\"wired\" + data.ClientId);\r\n }\r\n\r\n if (data.LayoutCssClass != null && data.LayoutCssClass != undefined) {\r\n var fieldToUpdateLayout = $targetField.closest('.web-pub-field');\r\n $(fieldToUpdateLayout).removeClass(function (index, className) {\r\n return (className.match(/(^|\\s)layout-\\S+/g) || []).join(' ');\r\n });\r\n $(fieldToUpdateLayout).addClass(data.LayoutCssClass);\r\n\r\n }\r\n if (data.SlideShowModel != null) {\r\n var slideshowmodel = data.SlideShowModel;\r\n\r\n if (slideshowmodel != undefined && slideshowmodel != null) {\r\n // self.initializeSlideShow($targetField, slideshowmodel);\r\n }\r\n }\r\n\r\n }\r\n };\r\n\r\n this.containsLoadableImage = function (currImg) {\r\n if (currImg.length !== undefined && currImg.length > 0) {\r\n for (var i = 0; i < currImg.length; i++) {\r\n if (self.containsLoadableImage(currImg[i]))\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n if (currImg != null && currImg.src != undefined && currImg.src != null)\r\n return true;\r\n else if ($(currImg).hasClass(\"inner-content\")) {\r\n var bg = $(currImg).css('background-image').trim();\r\n if (bg.length > 0 && bg !== \"none\") {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n this.initializeSlideShow = function ($targetField, slideshowmodel) {\r\n if (slideshowmodel == null || slideshowmodel == undefined)\r\n return;\r\n\r\n var myParent = $targetField.closest('.web-pub-field');\r\n if (!$(myParent).hasClass('NoSlide'))\r\n return;\r\n\r\n $(myParent).addClass('around_slides');\r\n $(myParent).removeClass('NoSlide');\r\n $targetField.addClass('royalSlider');\r\n\r\n mcSlide.InitSlideshow(myParent[0].id,\r\n slideshowmodel.Play,\r\n slideshowmodel.Pause,\r\n slideshowmodel.HoverPause,\r\n slideshowmodel.GenerateNextPrev,\r\n slideshowmodel.GeneratePagination,\r\n slideshowmodel.ArrowsNavAutoHide,\r\n slideshowmodel.FadeSpeed,\r\n slideshowmodel.SlideSpeed,\r\n slideshowmodel.Effect,\r\n slideshowmodel.CrossFade,\r\n slideshowmodel.Orientation,\r\n slideshowmodel.ScaleType,\r\n slideshowmodel.Randomize,\r\n slideshowmodel.Css,\r\n slideshowmodel.IsMobileDomain,\r\n slideshowmodel.Width,\r\n slideshowmodel.Height,\r\n true);\r\n };\r\n\r\n this.resolveImagesOnImageLoaded = function (image) {\r\n return new Promise((resolve, reject) => {\r\n if (image.complete) {\r\n resolve();\r\n } else {\r\n image.onload = () => {\r\n resolve();\r\n };\r\n }\r\n });\r\n };\r\n\r\n this.getArrayOfArrays = function (inputArray, itemsPerArray) {\r\n var arrayOfArrays = [];\r\n for (var i = 0; i < inputArray.length; i += itemsPerArray) {\r\n arrayOfArrays.push(inputArray.slice(i, i + itemsPerArray));\r\n }\r\n return arrayOfArrays;\r\n };\r\n\r\n this.getSlideshowModel = function($targetField, data){\r\n if (data != null && data.SlideShowModel != undefined && data.SlideShowModel != null) \r\n return data.SlideShowModel;\r\n \r\n if (!$targetField.hasClass(\"slides_container\"))\r\n return null;\r\n\r\n //may store slideshow in the container field\r\n var parentWithSlideInfo = $targetField.parents(\".web-pub-field[data-slideshow]\");\r\n if (parentWithSlideInfo.length <= 0)\r\n return null;\r\n\r\n return parentWithSlideInfo.data(\"slideshow\");\r\n };\r\n\r\n this.ensureCorrectImageSizes = function (images, $targetField, data, lazyImg, initialiseSlideshows) {\r\n \r\n //Note! Array.from for IE has been added to the McWeb4-standard.js file.\r\n //when images are either not in need of resizing, or the new images have been fetched, we try to set up any slideshow for the field.\r\n\r\n if ((images === null || images === undefined || images.length <= 0) && initialiseSlideshows) {\r\n //no need to load images, so let's just see if slideshow must be applied\r\n var slidemodel = self.getSlideshowModel($targetField, data);\r\n if (slidemodel !== null) {\r\n self.initializeSlideShow($targetField, slidemodel);\r\n }\r\n \r\n return;\r\n }\r\n var nodeId = jQuery('#hidden-nodeid').text();\r\n var itemsPerArray = 8;\r\n if (data != null && (data.ImgModuleVer >= 5 || data.SlideShowModel != null && data.SlideShowModel != undefined ))\r\n itemsPerArray = images.length; // must keep it down to 1 request for images when dealing with slideshow, or when ImageModulVersion >= 5\r\n\r\n \r\n var imageLoadedPromises = Array.from(images).map(self.resolveImagesOnImageLoaded);\r\n Promise.all(imageLoadedPromises)\r\n .then(() => {\r\n \r\n var imageList = images.toArray().map(i => self.getParamForImage(i, lazyImg, nodeId)).filter(y => y !== null);\r\n\r\n var arrayOfImageArrays = self.getArrayOfArrays(imageList, itemsPerArray);\r\n\r\n var requestForImagesSent = false;\r\n for (var arrayId = 0; arrayId < arrayOfImageArrays.length; arrayId++) {\r\n var items = arrayOfImageArrays[arrayId];\r\n requestForImagesSent = true;\r\n self.imageService.PostAction(\"ListImageTagsAsync\", { Items: items }).done(function (result) {\r\n var delaySlideshow = false;\r\n if (result && result.items && result.items.length > 0) {\r\n var items = result.items;\r\n for (var i = 0; i < items.length; i++) {\r\n var item = items[i];\r\n if (item.success) {\r\n delaySlideshow = true;//slideshow must wait for these new images have loaded\r\n jQuery('#' + item.targetId).replaceWith(item.tag);\r\n }\r\n }\r\n }\r\n if (!initialiseSlideshows)\r\n return;\r\n\r\n var slidemodel = self.getSlideshowModel($targetField, data);\r\n\r\n if (slidemodel === null)\r\n return;\r\n\r\n if (delaySlideshow) {//need to await the new images have been loaded before we set up slideshow\r\n var newImages = $targetField.find(\"img.d4-prod-thumb\");\r\n self.initializeSlideShowAfterImagesLoaded($targetField, newImages, slidemodel);\r\n }\r\n else self.initializeSlideShow($targetField, slidemodel);\r\n });\r\n }\r\n if (!initialiseSlideshows)\r\n return;\r\n\r\n var slidemodel = self.getSlideshowModel($targetField, data);\r\n if (!requestForImagesSent && slidemodel !== null) {\r\n self.initializeSlideShow($targetField, slidemodel);\r\n }\r\n });\r\n \r\n };\r\n\r\n this.getParamForImage = function (image, lazyImg, nodeId) {\r\n var img = jQuery(image);\r\n var parent = img.parent();\r\n if (parent === null || parent === undefined || parent.length <= 0)\r\n return null;\r\n\r\n var containerTagType = parent[0].tagName.toLowerCase();\r\n var includeLink = containerTagType === \"a\";\r\n var parentWidth = parent.width();\r\n var parentHeight = parent.height();\r\n var myWidth = img.data(\"width\");\r\n var myHeight = img.data(\"height\");\r\n var usesAltImg = img.data(\"altImg\") === 1;\r\n var imgStatus = img.data(\"status\");\r\n var elementId = img.data(\"elementid\");\r\n var css = img.data(\"css\");\r\n var autoscale = img.data(\"autoscale\"); \r\n\r\n if (usesAltImg || (!lazyImg && (imgStatus == undefined || imgStatus.toUpperCase() !== \"OK\")))\r\n return null;\r\n\r\n if (!lazyImg && myWidth / parentWidth >= 0.75)\r\n return null;//if lazyImg, no image loaded so we must allways load a new image\r\n\r\n var aspect = 1;\r\n if (parentWidth > 0 && parentHeight > 0)\r\n aspect = parentWidth / parentHeight;\r\n else if (myWidth > 0 && myHeight > 0)\r\n aspect = myWidth / myHeight;//applies when parent not visible and hence no parent size available\r\n\r\n if (aspect < 0.1 || aspect > 2) {\r\n //lazy loading in use, must use different aspect calculation\r\n aspect = myWidth / myHeight;\r\n }\r\n var myId = img[0].id;\r\n if (myId === \"\")\r\n myId = parent[0].id;\r\n\r\n var item = {\r\n TargetId: myId,\r\n Plid: img.data(\"plid\"),\r\n Index: img.data(\"imageIndex\"),\r\n Width: parentWidth,\r\n Aspect: aspect,\r\n IncludeLink: includeLink,\r\n UseSecondaryImage: img.data(\"hassecondaryimg\") === 1,\r\n IncludeNotFound: lazyImg,\r\n ElementId: 0,\r\n Css: '',\r\n AutoScale: autoscale,\r\n NodeId: nodeId\r\n };\r\n if (elementId !== undefined && elementId !== null)\r\n item.ElementId = elementId;\r\n if (css !== undefined && css !== null)\r\n item.Css = css;\r\n\r\n return item;\r\n };\r\n\r\n this.initializeSlideShowAfterImagesLoaded = function($targetField, images, slidemodel){\r\n if(images !== null && images !== undefined && images.length > 0){\r\n var imageLoadedPromises = Array.from(images).map(self.resolveImagesOnImageLoaded);\r\n Promise.all(imageLoadedPromises) \r\n .then( () => {\r\n if (slidemodel != undefined && slidemodel != null){\r\n self.initializeSlideShow($targetField, slidemodel);\r\n }\r\n });\r\n }\r\n };\r\n\r\n this.initialiseAdLinks = function () {\r\n setTimeout(function () {\r\n if (window.D4LinkArraySetup != undefined && window.D4LinkArraySetup != null) {\r\n for (var i = 0; i < window.D4LinkArraySetup.length; i++) {\r\n var current = window.D4LinkArraySetup[i];\r\n makeAdLinkToProduct(current.elementId, current.productLink);\r\n }\r\n window.D4LinkArraySetup = []; //clearing it\r\n //linker virker ikke enda etter at nye elementer er lagt til\r\n //må debugge dette!\r\n\r\n }\r\n },\r\n 5);\r\n };\r\n\r\n self.stats = [];\r\n\r\n this.registerStatistics = function (data) {\r\n if (data != undefined && data != null && !self.InitialLoadDone && (data.PopupRule == undefined || data.PopupRule <= 0)) { // && (data.SlideShowModel == undefined || data.SlideShowModel == null)) {\r\n if (self.CheckStatistics) {\r\n self.stats.push(data);\r\n }\r\n }\r\n };\r\n\r\n this.postStatistics = function () {\r\n try {\r\n if (self.stats != null && self.stats.length > 0) {\r\n var data = self.stats[0];\r\n var stats = {\r\n DeviceSize: self.deviceSize,\r\n NodeId: data.NodeId,\r\n FieldIds: [],\r\n Note: 'FieldsShownBeforeScroll'\r\n };\r\n for (var i = 0; i < self.stats.length; i++) {\r\n stats.FieldIds.push(self.stats[i].FieldId);\r\n }\r\n self.service.PostAction(\"PostStatistics\", stats).done(function () {\r\n self.stats = [];\r\n });\r\n }\r\n }\r\n catch (e) { }\r\n };\r\n\r\n this.updateContentForSpecificFields = function (fieldRecognizer) {\r\n self.addRemainingFieldsToDom();\r\n self.reloadFromCallbackActive = true;\r\n self.updateFields(fieldRecognizer, \"#AttributeListBox\", false, true, false, 0, 0);\r\n };\r\n\r\n this.updateContentForPreloadedFields = function(fieldRecognizer, includeMegaMenuChildren){\r\n var recognizer = \"div.ajax-field.loaded\";\r\n if(fieldRecognizer !== undefined){\r\n recognizer = fieldRecognizer;\r\n }\r\n var preloadedFields = jQuery(recognizer);\r\n\r\n var fieldItems = [];\r\n for(var j = 0; j< preloadedFields.length; j++){\r\n var field = jQuery( preloadedFields[j]);\r\n var fieldItem = {\r\n FieldId: field.data('field-id'),\r\n NodeId: field.data('node-id'),\r\n UniqueId: field[0].id\r\n };\r\n if (!includeMegaMenuChildren && $(field).parents(\".dropdown-submenu\").length > 0)\r\n continue;//fields within mega menu are not to be loaded here, will be done when menu is shown.\r\n\r\n var preloadedElements = field.find(\"div.WebPubElement\");\r\n var eItems = [];\r\n for(var i = 0; i < preloadedElements.length; i++){\r\n var element =jQuery( preloadedElements[i]);\r\n var eItem = {\r\n ElementId: element.data('elementid'),\r\n Plid: element.data('plid')\r\n };\r\n eItems.push(eItem);\r\n }\r\n fieldItem.Elements = eItems;\r\n fieldItems.push(fieldItem);\r\n }\r\n\r\n if(fieldItems.length > 0){\r\n self.service.PostAction(\"GetPriceDataAsync\", {Fields : fieldItems}).done( function (result) {\r\n if(result && result.Success){\r\n var fields = result.Fields;\r\n\r\n for(var i = 0; i < fields.length; i++){\r\n var fData = fields[i];\r\n var field = jQuery(\"#\" + fData.UniqueId);\r\n self.ensureCorrectImageSizesForField(field, fData);\r\n self.applyCustomerSpecifics(field, fData);\r\n }\r\n }\r\n });\r\n }\r\n \r\n self.showSearchSynonymText();\r\n\r\n }\r\n this.showSearchSynonymText = function () {\r\n if (jQuery(\".search-synonyms\").length > 0)\r\n return;\r\n\r\n var alteredSearchResultArea = jQuery(\".web-pub-field[data-search-synonyms]\");\r\n if (alteredSearchResultArea.length <= 0)\r\n return;\r\n\r\n var alteredText = alteredSearchResultArea.data(\"search-synonyms\");\r\n if (alteredText !== undefined && alteredText !== null && alteredText.length <= 0)\r\n return;\r\n var newContent = \"

\" + alteredText + \"

\";\r\n alteredSearchResultArea.first().before(newContent);\r\n \r\n };\r\n\r\n this.applyCustomerSpecifics = function (targetfield, data) {\r\n if (data !== null && data.PriceData !== null && data.PriceData.length > 0) {\r\n var priceTags = jQuery(targetfield).find(\".locate-prices-\" + data.FieldId);\r\n\r\n for (var i = 0; i < data.PriceData.length; i++) {\r\n jQuery(priceTags).filter(\"#adprice__\" + data.FieldId + \"_\" + data.PriceData[i].ElementId).each(function (index, item) {\r\n var $item = jQuery(item);\r\n $item.html(data.PriceData[i].Price);\r\n if (data.PriceData[i].Discount !== null && data.PriceData[i].Discount.length > 0) {\r\n $item.addClass(\"has-discount\");\r\n }\r\n if(data.PriceData[i].NoBuy){\r\n var myElement = jQuery(jQuery(item).parents(\"div.WebPubElement\")[0]);\r\n myElement.find(\"a.ad-buy-button\").addClass(\"disabled\");\r\n myElement.find(\"a.list-buy-button\").addClass(\"disabled\");\r\n }\r\n else if(data.PriceData[i].UnlockBuy){\r\n var myElement = jQuery(jQuery(item).parents(\"div.WebPubElement\")[0]);\r\n myElement.find(\"a.ad-buy-button\").removeClass(\"disabled\");\r\n myElement.find(\"a.list-buy-button\").removeClass(\"disabled\");\r\n }\r\n });\r\n\r\n if(data.PriceData[i].BidName !== null && data.PriceData[i].BidName.length > 0){\r\n var countDown = jQuery(\".WebPubElement[data-elementid=\"+data.PriceData[i].ElementId + \"] .sale-countdown\");\r\n countDown.data('bid-expires',data.PriceData[i].BidExpires);\r\n }\r\n//todo: skriv om slik at vi her først legger expire-tiden inn som et data-element på elemented, og så start en timer som går igjennom alle elementene en etter en. Vi ønsker ikke\r\n//å ha mer enn 1 timer pr felt i hvertfall\r\n\r\n\r\n var timer = setInterval(function() {\r\n\r\n var now = new Date().getTime();\r\n jQuery(\".WebPubElement .sale-countdown\").each(function(index){\r\n var salesCountdown = jQuery(this);\r\n var endDate = new Date(salesCountdown.data(\"bid-expires\")).getTime();\r\n var t = endDate - now;\r\n\r\n if (t >= 0) {\r\n var days = Math.floor(t / (1000 * 60 * 60 * 24));\r\n var hours = Math.floor((t % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\r\n var mins = Math.floor((t % (1000 * 60 * 60)) / (1000 * 60));\r\n var secs = Math.floor((t % (1000 * 60)) / 1000);\r\n\r\n jQuery(salesCountdown).find(\".timer-days\").html( days +\r\n \"DAY(S)\");\r\n\r\n jQuery(salesCountdown).find(\".timer-hours\").html((\"0\"+hours).slice(-2) +\r\n \"HR(S)\");\r\n\r\n jQuery(salesCountdown).find(\".timer-mins\").html((\"0\"+mins).slice(-2) +\r\n \"MIN(S)\");\r\n\r\n jQuery(salesCountdown).find(\".timer-secs\").html((\"0\"+secs).slice(-2) +\r\n \"SEC(S)\");\r\n } else {\r\n//the price for this product should now be invalid\r\n salesCountdown.removeClass(\"sale-countdown\");\r\n salesCountdown.data(\"bid-expires\",\"\");\r\n salesCountdown.html('');\r\n }\r\n });\r\n\r\n }, 1000);\r\n }\r\n\r\n\r\n var discountTags = jQuery(targetfield).find(\".locate-yousave-\" + data.FieldId);\r\n\r\n for (var i = 0; i < data.PriceData.length; i++) {\r\n var line = data.PriceData[i];\r\n if (line != null && line.Discount != null && line.Discount.length > 0) {\r\n jQuery(discountTags).filter(\"#adyousave__\" + data.FieldId + \"_\" + line.ElementId).each(function (index, item) {\r\n var jItem = jQuery(item);\r\n jItem.html(line.Discount);\r\n jItem.addClass(\"show\");\r\n });\r\n }\r\n }\r\n\r\n var oldPriceTags = jQuery(targetfield).find(\".locate-oldprices-\" + data.FieldId);\r\n\r\n for (var i = 0; i < data.PriceData.length; i++) {\r\n var line = data.PriceData[i];\r\n if (line.OldPrice != null && line.OldPrice.length > 0) {\r\n jQuery(oldPriceTags).filter(\"#adoldprice__\" + data.FieldId + \"_\" + line.ElementId).each(function (index, item) {\r\n var jItem = jQuery(item);\r\n jItem.html(line.OldPrice);\r\n jItem.addClass(\"show\");\r\n jItem.prev().addClass(\"show\");//must show the prefix also\r\n });\r\n }\r\n }\r\n\r\n var rrpPriceTags = jQuery(targetfield).find(\".locate-rrpprices-\" + data.FieldId);\r\n\r\n for (var i = 0; i < data.PriceData.length; i++) {\r\n var line = data.PriceData[i];\r\n if (line.Rrp != null && line.Rrp.length > 0) {\r\n jQuery(rrpPriceTags).filter(\"#adrrpprice__\" + data.FieldId + \"_\" + line.ElementId).each(function (index, item) {\r\n var jItem = jQuery(item);\r\n jItem.html(line.Rrp);\r\n jItem.addClass(\"show\");\r\n });\r\n }\r\n }\r\n\r\n\r\n var nordeaprices = jQuery(targetfield).find(\".locate-nordeaprices-\" + data.FieldId);\r\n\r\n for (var i = 0; i < data.PriceData.length; i++) {\r\n var line = data.PriceData[i];\r\n if (line.FinancingTxt != null && line.FinancingTxt.length > 0) {\r\n jQuery(nordeaprices).filter(\"#adnordeaprice__\" + data.FieldId + \"_\" + line.ElementId).each(function (index, item) {\r\n var jItem = jQuery(item);\r\n jItem.html(line.FinancingTxt);\r\n jItem.addClass(\"show\");\r\n });\r\n }\r\n }\r\n\r\n var backorders = jQuery(targetfield).find(\".locate-adbackorder-\" + data.FieldId);\r\n\r\n for (var i = 0; i < data.PriceData.length; i++) {\r\n var line = data.PriceData[i];\r\n if (line.BackorderTxt != null && line.BackorderTxt.length > 0) {\r\n jQuery(backorders).filter(\"#adbackorder__\" + data.FieldId + \"_\" + line.ElementId).each(function (index, item) {\r\n var jItem = jQuery(item);\r\n jItem.html(line.BackorderTxt);\r\n jItem.addClass(\"show\");\r\n });\r\n }\r\n }\r\n\r\n } \r\n };\r\n\r\n this.ensureCorrectImageSizesForField = function (targetfield, data) {\r\n var $field = jQuery(targetfield);\r\n var images = $field.find(\"img.d4-prod-thumb\");\r\n var lazyImages = $field.find(\"img.d4-lazy-thumb\");\r\n\r\n var loadSlideshowForProdThumb = images.length > 0 && lazyImages.length <= 0; //only start slideshow after loading images for d4-prod-thumb if we don't have d4-lazy-thumbs also\r\n var loadSlideshowForLazyThumb = lazyImages.length > 0 || !loadSlideshowForProdThumb; //start slideshow if we didn't start it for d4-prod-thumb or we have d4-lazy-thumb\r\n\r\n self.ensureCorrectImageSizes(images, $field, data, false, loadSlideshowForProdThumb);\r\n self.ensureCorrectImageSizes(lazyImages, $field, data, true, loadSlideshowForLazyThumb);\r\n EnableLinksForArticlesWithBackground();\r\n InitializeAnimationsInArticleWithBackground();\r\n };\r\n\r\n\r\n this.updateFieldContent = function (fieldData) {\r\n if (fieldData.Success) {\r\n self.PagingMode = fieldData.PagingMode;\r\n\r\n if (!self.IntersectionObserveAllowed)\r\n fieldData.AllowDeferred = false;\r\n\r\n if (fieldData.AllowDeferred && fieldData.PopupRule <= 0) {\r\n for (var i = 0; i < fieldData.Data.length; i++) {\r\n var data = fieldData.Data[i];\r\n data.added = false;\r\n }\r\n }\r\n\r\n if (fieldData.PopupRule <= 0 && (!fieldData.AllowDeferred || (fieldData.PagesRemaining > 0))) {\r\n \r\n self.addRemainingFieldsToDom();//temporary fix for fields that wouldn't load. Needed when the fields added in the loop below adds content that sits between the fields held in memory and themselves.\r\n\r\n for (var i = 0; i < fieldData.Data.length; i++) {\r\n var data = fieldData.Data[i];\r\n data.targetField = $('#' + data.ClientId);\r\n self.addFieldContentToPage(fieldData, data.targetField, data);\r\n }\r\n }\r\n else if (fieldData.PopupRule > 0) {\r\n if (fieldData.Data.length > 0) {\r\n var isSlideOver = fieldData.PopupPch === \"#slideover-placeholder\";\r\n\r\n var lightboxContainer = $(fieldData.PopupPch);\r\n if (lightboxContainer != undefined &&\r\n (\r\n (!isSlideOver && !self.lightBoxIsOpen)\r\n ||\r\n (isSlideOver && !self.slideOverBoxIsOpen)\r\n )\r\n\r\n ) {\r\n\r\n mcWeb.lightbox.movePopupFieldsToOriginalPlaceholder(lightboxContainer);\r\n lightboxContainer.empty();\r\n var dataFound = false;\r\n\r\n for (var i = 0; i < fieldData.Data.length; i++) {\r\n var data = fieldData.Data[i];\r\n if (data.Response.length > 0) {\r\n dataFound = true;\r\n break;\r\n }\r\n }\r\n\r\n if (dataFound) {\r\n var popupParam = {\r\n css: \"d4-popup d4-popup-rule-\" + fieldData.PopupRule + self.getCssClassesForLightbox(fieldData),\r\n dataToApply: fieldData,\r\n callback: function () { self.fillLightboxWithContent(fieldData, lightboxContainer); self.initialiseAdLinks(); }\r\n }\r\n PubSub.publish(fieldData.PopupEvent, popupParam);\r\n PubSub.publish(mcWeb.lightbox.events.contentChanged);\r\n if (isSlideOver) {\r\n PubSub.subscribe(mcWeb.slideOverBox.events.onHideLightbox, function () {\r\n self.slideOverBoxIsOpen = false;\r\n });\r\n self.slideOverBoxIsOpen = true;\r\n }\r\n else {\r\n PubSub.subscribe(mcWeb.lightbox.events.onHideLightbox, function () {\r\n self.lightBoxIsOpen = false;\r\n });\r\n self.lightBoxIsOpen = true;\r\n }\r\n \r\n }\r\n }\r\n }\r\n }\r\n else {\r\n var skipAdd = self.fieldsReadyToLoad.length > 0;\r\n\r\n if (fieldData.Data.length > 0)\r\n self.fieldsReadyToLoad.push(fieldData);\r\n\r\n if (!skipAdd) {\r\n self.addNextFieldToDom();\r\n } else {\r\n // Fix for EJ 158200, load all remaning fields if there is anything published on the left side\r\n if (jQuery(\"#PageColumnLeft > .PublisherContainer .web-pub-field\").length > 0) {\r\n self.addRemainingFieldsToDom();\r\n }\r\n }\r\n }\r\n\r\n if (fieldData.InitializeRoyalSlider) {\r\n InitializeRoyalSliderInAds();\r\n }\r\n if (fieldData.PagesRemaining > 0) {\r\n self.HasMorePages = true;\r\n } else if(data !== null && data !== undefined && data.IsProductListing){\r\n if (fieldData.PagingMode > 2) {\r\n self.hidePaging();\r\n }\r\n else if (fieldData.PagingMode === 2 && fieldData.Data !== null && fieldData.Data != undefined && fieldData.Data[0] !== null && fieldData.Data[0] !== undefined && fieldData.Data[0].IsProductListing) {\r\n self.hidePaging();\r\n }\r\n }\r\n\r\n //scrolling for paging within a field\r\n if (self.PagingMode >= 3 && !self.scrollEventIsRegistered && fieldData.PagesRemaining > 0) {\r\n self.scrollEventIsRegistered = true;\r\n jQuery(window).on(\"scroll\", null, null, self.handleScroll);\r\n } else if (fieldData.PagesRemaining == 0 && self.PagingMode >= 3 && self.scrollEventIsRegistered && fieldData.Data.length > 0 && !fieldData.AllowDeferred) {\r\n //no more pages, let's remove the scroll registration\r\n jQuery(window).off(\"scroll\", null, self.handleScroll);\r\n self.scrollEventIsRegistered = false;\r\n }\r\n\r\n var footerlist = document.querySelectorAll('.copyright-container');\r\n var footer = null;\r\n if (footerlist.length > 0)\r\n footer = footerlist[0];\r\n\r\n //scrolling that causes multiple fields to load\r\n if (footer != null) {\r\n self.addScrollObserver(fieldData, footer);\r\n }\r\n\r\n self.LoadingFromScroll = false;//re-enable auto-scrolling\r\n if (typeof lipscore !== 'undefined') {\r\n lipscore.initWidgets()\r\n }\r\n };\r\n //todo: fjern venteikon\r\n };\r\n\r\n self.getCssClassesForLightbox = function (fieldData) {\r\n var classesForFields = \"\";\r\n for (var i = 0; i < fieldData.Data.length; i++) {\r\n var data = fieldData.Data[i];\r\n if (data.Response.length <= 0) {\r\n continue;\r\n }\r\n classesForFields += \" popupfield-\" + data.FieldId;\r\n }\r\n return classesForFields;\r\n };\r\n\r\n self.fillLightboxWithContent = function (fieldData, lightboxContainer) {\r\n for (var i = 0; i < fieldData.Data.length; i++) {\r\n var data = fieldData.Data[i];\r\n if (data.Response.length <= 0) {\r\n continue;\r\n }\r\n data.targetField = $('#' + data.ClientId);\r\n if (data.targetField != null && data.targetField != undefined) {\r\n //add a placeholder where the field was found, so we can put it back when the lightbox is closed\r\n data.targetField.hide();\r\n $(data.targetField).html(data.Response); \r\n var fields = $(data.targetField).closest(\".web-pub-field.container, .web-pub-field.container-fluid\");\r\n\r\n fields.after(\"
\");\r\n var fieldPopupHtml = $(fields).detach();\r\n lightboxContainer.append(fieldPopupHtml);\r\n data.targetField.show();\r\n if (data.LoadFilter) {\r\n this.updateFilterContent(data);\r\n\r\n }\r\n self.ensureCorrectImageSizesForField(data.targetField, data);\r\n self.applyCustomerSpecifics(data.targetField, data);\r\n if (fieldData.InitializeRoyalSlider)\r\n InitializeRoyalSliderInAds(\"#\" + data.ClientId + \" .variant-slider\");\r\n }\r\n }\r\n };\r\n\r\n self.handleScroll = function (event) {\r\n if (self.HasMorePages && !self.LoadingFromScroll && (self.PagingMode == 3 || self.AutoScrolledPages < 3)) {\r\n var scrollerContainer = jQuery(\".field-paging-container\");\r\n if (scrollerContainer.length > 0 && McUtils.isElementInView(scrollerContainer)) {\r\n var scrollerTag = jQuery(\".field-paging-next:visible\");\r\n if (scrollerTag != null && scrollerTag.length > 0 && McUtils.isElementInView(scrollerTag)) {\r\n self.LoadingFromScroll = true; //pause event-checking on scrolling\r\n self.AutoScrolledPages = self.AutoScrolledPages + 1;\r\n self.scrollToNextPage(scrollerTag[0]);\r\n }\r\n }\r\n }\r\n };\r\n\r\n self.resetAutoScrolledPages = function () {\r\n self.AutoScrolledPages = 0;\r\n };\r\n\r\n self.onHeaderIntersection = function (entries) {\r\n if (!self.InitialLoadDone)\r\n return;\r\n\r\n var entry = null;\r\n if (entries.length > 0)\r\n entry = entries[0];\r\n else {\r\n return;\r\n }\r\n\r\n // Are we in viewport?\r\n if (entry.intersectionRatio > 0 && self.CurrentPageNumber > 1) {\r\n\r\n var previousElements = jQuery(\".field-paging-prev\");\r\n var prevElement = previousElements[0];\r\n\r\n self.scrollToPrevPage(prevElement);\r\n\r\n if (self.CurrentPageNumber <= 1) {\r\n // No more unloaded areas/fields, so stop observing\r\n self.headerObserver.unobserve(entry.target);\r\n self.scrollEventPrevRegistered = false;\r\n self.headerObserver = null;\r\n }\r\n\r\n }\r\n };\r\n\r\n self.onIntersection = function (entries) {\r\n\r\n if (!self.InitialLoadDone)\r\n return;\r\n\r\n var entry = null;\r\n if (entries.length > 0)\r\n entry = entries[0];\r\n else {\r\n return;\r\n }\r\n\r\n // Are we in viewport?\r\n if (entry.intersectionRatio > 0) {\r\n if (!self.HasMorePages) {\r\n self.addNextFieldToDom();\r\n }\r\n\r\n if (jQuery(\".ajax-field.not-loaded\").length == 0) {\r\n // No more unloaded areas/fields, so stop observing\r\n self.footerObserver.unobserve(entry.target);\r\n self.scrollEventFooterIsRegistered = false;\r\n self.footerObserver = null;\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n self.onFieldIntersection = function (entries) {\r\n\r\n var entry = null;\r\n if (entries.length > 0)\r\n entry = entries[0];\r\n else {\r\n return;\r\n }\r\n\r\n // Are we in viewport?\r\n if (entry.intersectionRatio > 0) {\r\n if (!self.HasMorePages || self.PagingMode <= 2) {\r\n // Stop observing\r\n self.fieldScrollObserver.unobserve(entry.target);\r\n self.scrollEventFieldIsRegistered = false;\r\n self.fieldScrollObserver = null;\r\n\r\n self.addNextFieldToDom();\r\n }\r\n }\r\n };\r\n\r\n self.addRemainingFieldsToDom = function(){\r\n self.LoadingFromScroll = true; //pause event-checking on scrolling\r\n \r\n if(self.HasMoreFieldsToLoad()) {\r\n while (self.HasMoreFieldsToLoad()) {\r\n var myFieldData = self.fieldsReadyToLoad[0];\r\n var myInnerData = myFieldData.Data.shift();\r\n if (myFieldData.Data.length == 0) {\r\n self.fieldsReadyToLoad.shift();\r\n }\r\n myInnerData.targetField = $('#' + myInnerData.ClientId);\r\n self.addFieldContentToPage(myFieldData, myInnerData.targetField, myInnerData);\r\n }\r\n }\r\n self.LoadingFromScroll = false;\r\n };\r\n\r\n self.addNextFieldToDom = function (noloop) {\r\n self.LoadingFromScroll = true;//pause event-checking on scrolling\r\n var fieldWasAdded = false;\r\n\r\n if(self.HasMoreFieldsToLoad()) {\r\n while (self.HasMoreFieldsToLoad()) {\r\n var myFieldData = self.fieldsReadyToLoad[0];\r\n var myInnerData = myFieldData.Data.shift();\r\n if (myFieldData.Data.length == 0) {\r\n self.fieldsReadyToLoad.shift();\r\n }\r\n myInnerData.targetField = $('#' + myInnerData.ClientId);\r\n self.addFieldContentToPage(myFieldData, myInnerData.targetField, myInnerData);\r\n fieldWasAdded = true;\r\n\r\n if (self.bottomImageToLoad != null && self.bottomImageToLoad != undefined && self.bottomImageToLoad.length > 0) {\r\n break;\r\n }\r\n var footerlist = document.querySelectorAll('.copyright-container');\r\n var footer = null;\r\n if (footerlist.length > 0)\r\n footer = footerlist[0];\r\n\r\n //if(myFieldData != undefined) {\r\n // self.addFieldContentToPage(myFieldData, myInnerData.targetField, myInnerData);\r\n //}\r\n if(myInnerData.Response !== null && myInnerData.Response.trim().length > 0) {\r\n if (myInnerData.targetField.height() > 0 && !McUtils.isElementInView(myInnerData.targetField)) {\r\n\r\n //find the next field below the line to observe\r\n var fieldToObserve = self.findNextFieldToObserve(self.fieldsReadyToLoad);\r\n if (fieldToObserve != null) {\r\n var fieldElement = document.getElementById(fieldToObserve.ClientId);\r\n self.addFieldScrollObserver(fieldElement);\r\n }\r\n //observe the footer to enable it to trigger adding more content\r\n if (!McUtils.isElementInView(footer)) {\r\n self.addScrollObserver(myFieldData, footer);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n self.bottomImageToLoad = null;\r\n }\r\n\r\n // Find all fields above the view\r\n if (!self.finishedLoadingFieldsAbove) {\r\n var myFieldData, myInnerData;\r\n ({ myFieldData, myInnerData } = self.popNextFieldAboveView());\r\n while (myFieldData !== null) {\r\n myInnerData.targetField = $('#' + myInnerData.ClientId);\r\n self.addFieldContentToPage(myFieldData, myInnerData.targetField, myInnerData);\r\n fieldWasAdded = true;\r\n ({ myFieldData, myInnerData } = self.popNextFieldAboveView());\r\n }\r\n self.finishedLoadingFieldsAbove = true;\r\n }\r\n \r\n\r\n if (fieldWasAdded) {\r\n startParaxify('.d4-article-parallax');\r\n }\r\n\r\n if (self.bottomImageToLoad != undefined &&\r\n self.bottomImageToLoad != null &&\r\n self.bottomImageToLoad.length > 0) {\r\n var currImg = self.bottomImageToLoad[0];\r\n \r\n if (currImg != null && currImg.src != undefined && currImg.src != null) {\r\n var currentImgSrc = self.bottomImageToLoad[0].src;\r\n var img = new Image();\r\n img.onload = self.onBottomImgLoaded(myFieldData);//Set up loading of next fields when this image is loaded\r\n img.onerror = self.onBottomImgLoaded(myFieldData);\r\n img.src = currentImgSrc; \r\n return;\r\n }\r\n else if($(currImg).hasClass(\"inner-content\")){\r\n var bg = $(currImg).css('background-image').trim();\r\n if(bg.length > 0 && bg !== \"none\"){\r\n //set up loading after this background image has loaded\r\n var currentImgSrc= bg.substring(5, bg.length - 2);\r\n var img = new Image();\r\n img.onload = self.onBottomImgLoaded(myFieldData);\r\n img.onerror = self.onBottomImgLoaded(myFieldData);\r\n img.src = currentImgSrc;\r\n return;\r\n }\r\n \r\n }\r\n \r\n //we need to check for more visible fields right away. self.bottomImageToLoad cannot be used to delay the loading\r\n\r\n }\r\n\r\n if (!self.HasMoreFieldsToLoad()) {\r\n startParaxify('.d4-article-parallax');\r\n }\r\n\r\n self.LoadingFromScroll = false;//un-pause event-checking on scrolling\r\n // self.addScrollObserver(myFieldData);\r\n };\r\n\r\n self.onBottomImgLoaded = function(myFieldData){\r\n return function(){\r\n var footerlist = document.querySelectorAll('.copyright-container');\r\n var footer = null;\r\n if (footerlist.length > 0)\r\n footer = footerlist[0];\r\n\r\n var loadNextField = false;\r\n if (McUtils.isElementInView(footer)) {\r\n loadNextField = true;\r\n }\r\n\r\n var nextField = self.findNextVisibleField(self.fieldsReadyToLoad);\r\n if (nextField !== null) {\r\n loadNextField = true;\r\n } else {\r\n var fieldToObserve = self.findNextFieldToObserve(self.fieldsReadyToLoad);\r\n if (fieldToObserve != null) {\r\n var fieldElement = document.getElementById(fieldToObserve.ClientId);\r\n self.addFieldScrollObserver(fieldElement);\r\n }\r\n }\r\n\r\n if (!loadNextField) {\r\n if (self.CheckStatistics) {\r\n //we have now added the last dynamic field before scrolling, so we log which ones it is so we can learn which fields to load statically later to optimize the page\r\n self.postStatistics();\r\n self.CheckStatistics = false;\r\n }\r\n\r\n self.addScrollObserver(myFieldData, footer);\r\n return;\r\n }\r\n\r\n self.addNextFieldToDom(true);\r\n }\r\n };\r\n\r\n self.popNextFieldAboveView = function () {\r\n\r\n for (var i = 0; i < self.fieldsReadyToLoad.length; i++) {\r\n var fieldReadyToLoad = self.fieldsReadyToLoad[i];\r\n\r\n for (var n = 0; n < fieldReadyToLoad.Data.length; n++) {\r\n var data = fieldReadyToLoad.Data[n];\r\n var element = document.getElementById(data.ClientId);\r\n\r\n if (element !== null) {\r\n if (McUtils.isElementAboveView(element)) {\r\n fieldReadyToLoad.Data.splice(n, 1);\r\n if(fieldReadyToLoad.Data.length === 0)\r\n self.fieldsReadyToLoad.splice(i, 1);\r\n\r\n\r\n return { myFieldData: fieldReadyToLoad, myInnerData: data };\r\n }\r\n }\r\n }\r\n }\r\n\r\n return { myFieldData: null, myInnerData: null };\r\n }\r\n\r\n self.HasMoreFieldsToLoad = function () {\r\n if (self.fieldsReadyToLoad.length == 0 || self.fieldsReadyToLoad[0].Data.length == 0)\r\n return false;\r\n else return true;\r\n };\r\n\r\n this.findNextVisibleField = function () {\r\n\r\n for (var i = 0; i < self.fieldsReadyToLoad.length; i++) {\r\n var fieldReadyToLoad = self.fieldsReadyToLoad[i];\r\n\r\n for (var n = 0; n < fieldReadyToLoad.Data.length; n++) {\r\n var data = fieldReadyToLoad.Data[n];\r\n var element = document.getElementById(data.ClientId);\r\n\r\n if (element !== null) {\r\n if (McUtils.isElementInView(element))\r\n return data;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n };\r\n\r\n this.findNextFieldToObserve = function () {\r\n\r\n for (var i = 0; i < self.fieldsReadyToLoad.length; i++) {\r\n var fieldReadyToLoad = self.fieldsReadyToLoad[i];\r\n\r\n for (var n = 0; n < fieldReadyToLoad.Data.length; n++) {\r\n var data = fieldReadyToLoad.Data[n];\r\n var element = document.getElementById(data.ClientId);\r\n\r\n if (element !== null) {\r\n if (McUtils.isElementBelowView(element))\r\n return data;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n };\r\n\r\n this.addScrollObserver = function (fieldData, footer) {\r\n if (!self.scrollEventFooterIsRegistered && (self.HasMorePages || self.HasMoreFieldsToLoad())) {\r\n self.scrollEventFooterIsRegistered = true;\r\n var config = {\r\n // If the image gets within 50px in the Y axis, start the download.\r\n rootMargin: '0px 0px',\r\n threshold: 0.01\r\n };\r\n\r\n // The observer for the images on the page\r\n self.footerObserver = new IntersectionObserver(self.onIntersection, config);\r\n\r\n self.footerObserver.observe(footer);\r\n }\r\n };\r\n\r\n this.addFieldScrollObserver = function (field) {\r\n if (!self.scrollEventFieldIsRegistered) {\r\n self.scrollEventFieldIsRegistered = true;\r\n var config = {\r\n // If the image gets within 50px in the Y axis, start the download.\r\n rootMargin: '0px 0px',\r\n threshold: 0.01\r\n };\r\n\r\n // The observer for the images on the page\r\n self.fieldScrollObserver = new IntersectionObserver(self.onFieldIntersection, config);\r\n\r\n self.fieldScrollObserver.observe(field);\r\n }\r\n };\r\n\r\n\r\n\r\n this.toggleAttributeValues = function (target) {\r\n var container = $(target).parent();\r\n $(container).toggleClass('show-extra-values');\r\n };\r\n\r\n this.updateFilterContent = function (filterData) {\r\n var secondaryFilterId = \"secondary-filter-\" + filterData.ClientId;\r\n\r\n if (filterData != null && filterData.FilterResponse != null && filterData.FilterResponse.Success) {\r\n if (filterData.FilterResponse.ClientId == \"secondary-filter\") {\r\n //this must be added by us right before the field we're updating with the filter\r\n jQuery(\"#\" + secondaryFilterId).remove();\r\n\r\n }\r\n var targetKey = filterData.FilterResponse.ClientId;\r\n\r\n if (targetKey === null)\r\n return; //nothing to do\r\n\r\n if (targetKey.indexOf(\"#\") < 0) {\r\n targetKey = \"#\" + targetKey;\r\n }\r\n var targetDiv = $(targetKey);\r\n if (targetDiv !== undefined && targetDiv.length > 0) {\r\n if (filterData.FilterResponse.Response.length > 0) {\r\n $(targetDiv).html(filterData.FilterResponse.Response);\r\n $(targetDiv).attr(\"data-target-field-client-id\", filterData.ClientId);\r\n self.loadAttributeFilterNotYetLoaded($(targetDiv), filterData.ManufacturerId, true);\r\n\r\n } else {\r\n var filterContainer = $(\".container-2016 has-filters\");\r\n if (filterContainer !== null && filterContainer !== undefined) {\r\n $(filterContainer).addClass(\"no-filters\");\r\n $(filterContainer).removeClass(\"has-filters\");\r\n self.unhideProductMenu();\r\n }\r\n }\r\n if (!self.attributeFilterInitiated) {\r\n mcWeb.attributeFilte.init(filterData.ShowCompressedFilter);\r\n self.attributeFilterInitiated = true;\r\n }\r\n }\r\n else if (filterData.FilterResponse.ClientId == \"secondary-filter\") {\r\n targetDiv = $(\"#\" + filterData.ClientId).closest(\".web-pub-field\")[0];\r\n $(targetDiv).before(\"
\");\r\n $(\"#\" + secondaryFilterId).html(filterData.FilterResponse.Response);\r\n }\r\n }\r\n };\r\n this.urlParamsFilterIsValidFor = null;\r\n\r\n this.shouldDelayLoadingFilter = function (attributeFilterParent) {\r\n if (attributeFilterParent == undefined || attributeFilterParent == null || attributeFilterParent.length <= 0 || attributeFilterParent[0].id !== \"AttributeListBox\") {\r\n return false;\r\n }\r\n\r\n return jQuery(\"#filter-toggle\").length > 0 && jQuery(\"#filter-toggle\").data(\"expandlevel\").length > 0 && !jQuery(\"#filter-content\").is(\":visible\");\r\n };\r\n\r\n this.delayLoadFilterParent = null;\r\n this.delayLoadFilterManufacturerId = 0;\r\n this.delayLoadFilterLoaded = false;\r\n this.storeFilterLoadCall = function (parent, manufacturerId) {\r\n self.delayLoadFilterParent = parent;\r\n self.delayLoadFilterManufacturerId = manufacturerId;\r\n PubSub.subscribe(AjaxRenderingEngineEventTypes.onFilterLoadRequested, function (message, data) {\r\n if (self.delayLoadFilterLoaded)\r\n return;//loaded already\r\n\r\n self.loadAttributeFilterNotYetLoaded(self.delayLoadFilterParent, self.delayLoadFilterManufacturerId, false);\r\n });\r\n };\r\n\r\n this.loadAttributeFilterNotYetLoaded = function (attributeFilterParent, manufacturerid, allowDelay) {\r\n if (allowDelay && self.shouldDelayLoadingFilter(attributeFilterParent)) {\r\n // delay loading filter until the user clicks the show filter button\r\n self.delayLoadFilterLoaded = false;//allow filter loading\r\n self.storeFilterLoadCall(attributeFilterParent, manufacturerid);\r\n return;\r\n }\r\n self.delayLoadFilterLoaded = true;//filter loading now requested, prevent additional calls\r\n\r\n $(attributeFilterParent).addClass(\"attribute-spinner\");\r\n var queryFilterParam = self.getParameterByName(\"Filter\");\r\n var queryMinParam = self.getParameterByName(\"Min\");\r\n var queryMaxParam = self.getParameterByName(\"Max\");\r\n var pageIndex = self.getParameterByName(\"pageID\");\r\n var listingFields = jQuery(\".ajax-field[data-field-is-productlist='1']\");\r\n var cacheKey = '';\r\n if (self.urlParamsFilterIsValidFor === null || self.urlParamsFilterIsValidFor === queryFilterParam) {\r\n self.urlParamsFilterIsValidFor = queryFilterParam;\r\n if (listingFields.length > 0) {\r\n cacheKey = jQuery(listingFields[0]).attr(\"data-cachekey\");\r\n }\r\n }\r\n\r\n\r\n var fieldRequestFilter = {\r\n NodeId: jQuery('#hidden-nodeid').text(),\r\n Url: document.location.pathname + document.location.search,\r\n Filter: queryFilterParam,\r\n MinPrice: queryMinParam,\r\n MaxPrice: queryMaxParam,\r\n SearchString: self.getParameterByName(\"q\"),\r\n ClientId: '',\r\n PageIndex: pageIndex,\r\n FilterCacheKey: cacheKey,\r\n ManufacturerId: manufacturerid\r\n }\r\n\r\n\r\n var notProcessedFields = attributeFilterParent.find(\".not-processed\");\r\n\r\n if (notProcessedFields.length > 0) {\r\n var cachingparams = {\r\n RequestFilter: fieldRequestFilter,\r\n FieldId: $(notProcessedFields[0]).data(\"fieldid\")\r\n };\r\n\r\n self.service.PostAction(\"CacheProductFilter\", cachingparams).done(function (result) {\r\n if (result.Success)\r\n fieldRequestFilter.FilterCacheKey = result.CacheKey;\r\n\r\n self.checkAttributeVisibility(attributeFilterParent, fieldRequestFilter);\r\n });\r\n } else if (allowDelay) {\r\n //no filters to show, only the menu, must show it immediately\r\n $(attributeFilterParent).removeClass(\"attribute-spinner\");\r\n attributeFilterParent.css(\"height\", \"\");\r\n self.unhideProductMenu();\r\n }\r\n\r\n };\r\n this.checkAttributeVisibility = function (attributeFilterParent, fieldRequestFilter) {\r\n var attributesToProcess = attributeFilterParent.find(\".not-processed\");\r\n var itemsToProcess = attributesToProcess.length;\r\n var itemsProcessed = 0;\r\n attributeFilterParent.find(\".not-processed\").each(function (index, item) {\r\n var filterItems = [];\r\n var itemParam = {\r\n AttributeId: $(item).data(\"aid\"),\r\n NodeId: $(item).data(\"nodeid\"),\r\n FieldId: $(item).data(\"fieldid\"),\r\n Identifier: item.id\r\n }\r\n filterItems.push(itemParam);\r\n\r\n self.service.PostAction(\"CheckAttributeVisibility\", { FilterItems: filterItems, RequestFilter: fieldRequestFilter }).done(function (result) {\r\n if (!!result && result.Success) {\r\n for (var i = 0; i < result.Items.length; i++) {\r\n var item = result.Items[i];\r\n if (item.Visible) {\r\n $('#' + item.Identifier).replaceWith(item.RenderedData);\r\n }\r\n else {\r\n $('#' + item.Identifier).replaceWith('');\r\n }\r\n\r\n var nextItem = $('#' + item.Identifier).next();\r\n if (nextItem.length > 0 && !nextItem.hasClass(\"not-process\")) {\r\n nextItem.find(\"div.AttributeBox\").removeClass(\"hidden\");\r\n }\r\n }\r\n }\r\n $(attributeFilterParent).removeClass(\"attribute-spinner\");\r\n\r\n itemsProcessed++;\r\n\r\n if (itemsProcessed >= itemsToProcess) { //we're done, let's show the menu\r\n self.unhideProductMenu();\r\n }\r\n });\r\n });\r\n };\r\n\r\n this.unhideProductMenu = function () {\r\n var menu = jQuery(\"div.ProductMenu\");\r\n if (menu.length > 0) {\r\n menu.removeClass(\"hidden\");\r\n }\r\n };\r\n \r\n this.selectLayoutClick = function (event) {\r\n\r\n var dummyBarn = jQuery(\".dummy-element *\");\r\n\r\n dummyBarn.prop(\"onclick\", null);\r\n dummyBarn.removeAttr('href');\r\n dummyBarn.off();\r\n\r\n event.stopImmediatePropagation();\r\n\r\n mcWeb.publisherAdminMenu.callLayoutAction(\"Select\", event);\r\n return false;\r\n };\r\n\r\n this.cancelBubble = function (e) {\r\n var evt = e ? e : window.event;\r\n if (evt.stopPropagation) evt.stopPropagation();\r\n if (evt.cancelBubble != null) evt.cancelBubble = true;\r\n };\r\n\r\n \r\n\r\n self.updateVariantMatrixField = function (data) {\r\n var listingField = jQuery('.matrix-popup .ajax-field[data-field-products-set-clientside=\"1\"]');\r\n if (listingField != null && listingField.length > 0) {\r\n if (data != undefined && data != null && data.variantMatrix != undefined && data.variantMatrix != null\r\n && data.variantMatrix.VariantChilds != undefined && data.variantMatrix.VariantChilds != null) {\r\n var children = \"\";\r\n\r\n for (var i = 0; i < data.variantMatrix.VariantChilds.length; i++) {\r\n children += data.variantMatrix.VariantChilds[i].ProduktLagerId + \",\";\r\n }\r\n listingField.attr('data-Plids', children);\r\n listingField.attr('data-variant-sorting','true');\r\n }\r\n }\r\n };\r\n})(jQuery);\r\n\r\nif(document.observe === undefined){\r\n document.observe = function (name, myfunction) {\r\n if(name === \"dom:loaded\")\r\n jQuery.ready(myfunction);\r\n // Override document.observe to not give errors from Gaia\r\n };\r\n}\r\n\r\n\r\njQuery.fn.outerHTML = function () {\r\n return jQuery('
').append(this.eq(0).clone()).html();\r\n};\r\n\r\nwindow.mcWeb.ajaxRenderEngine = AjaxRenderingEngine;\r\nwindow.mcWeb.ajaxRenderEngine.events = AjaxRenderingEngineEventTypes;","mcWeb.ajaxVariantSelector = new (function ($) {\r\n\t'use strict';\r\n\r\n var obj = this;\r\n obj.view;\r\n\r\n obj.getModule = function(me){\r\n var myContainer = $(me).closest('.ajax-vsc');\r\n var myId = $(myContainer).data(\"v-unique-id\");\r\n var myModule = mcWeb.ajaxVariantSelector.instances[myId];\r\n\r\n return myModule;\r\n };\r\n \r\n \r\n\r\n this.vm = function(parent){\r\n obj.view = parent;\r\n\r\n var self = this;\r\n self.id = parent.id+\"-avs\";\r\n self.parentId = parent.id;\r\n self.initialised = false;\r\n self.storeSelectionInBrowser = false;\r\n\t self.service = new WebApiService(\"ProductVariant\");\r\n self.subscriptionsAdded = false;\r\n self.isVariantMother = false;\r\n self.load = function(data,settings){};\r\n\r\n self.registerModule = function(){\r\n var myContainer = $(self.parentId);\r\n $(myContainer).addClass(\"ajax-vsc\");\r\n $(myContainer).attr('data-v-unique-id',self.id);\r\n\r\n if (mcWeb.ajaxVariantSelector.instances == undefined)\r\n mcWeb.ajaxVariantSelector.instances = [];\r\n\r\n mcWeb.ajaxVariantSelector.instances[self.id] = self;\r\n };\r\n\r\n self.bind = function(data){\r\n if (!self.initialised) {\r\n self.variantType1Id = null;\r\n self.variantType2Id = null;\r\n\r\n if(data !== undefined){\r\n if(data.storeInBrowser){\r\n self.storeSelectionInBrowser = true;\r\n }\r\n\r\n if (data.loadSelectedValuesFromDOM) {\r\n var domAttr1 = jQuery('.variant-selector-container .v-container.active[data-variant-type=\"1\"]');\r\n if (domAttr1.length > 0) {\r\n self.variantType1Id = jQuery(domAttr1[0]).data('attributeValueId');\r\n }\r\n\r\n var domAttr2 = jQuery('.variant-selector-container .v-container.active[data-variant-type=\"2\"]');\r\n if (domAttr2.length > 0) {\r\n self.variantType2Id = jQuery(domAttr2[0]).data('attributeValueId');\r\n }\r\n }\r\n\r\n if(obj.view.isVariantMother()){\r\n self.isVariantMother = true;\r\n }\r\n if(obj.view.motherPlid != undefined){\r\n self.motherPlid = obj.view.motherPlid();\r\n }\r\n \r\n }\r\n\r\n self.registerModule();\r\n self.initialised = true;\r\n }\r\n };\r\n self.reinit = function(){\r\n if(self.storeSelectionInBrowser){\r\n self.restoreDataFromLocalStorage(self.motherPlid);\r\n }\r\n //todo: refresh classes in html based on data found on self\r\n if(self.variantType1Id !== undefined && self.variantType1Id !== null && self.variantType1Id >=0){\r\n if(self.variantType2Id !== undefined && self.isVariantMother ){\r\n //lets highlight the correct variant of type 1 and so on, which will try to do by using the selectVariant method for the selected attribute\r\n var variantTypeToActivate = $(self.parentId).find(\".v-container[data-attribute-value-id=\"+ self.variantType1Id+\"]\")[0];\r\n if(variantTypeToActivate != undefined && variantTypeToActivate != null)\r\n self.selectVariant(variantTypeToActivate)\r\n }\r\n }\r\n };\r\n\r\n self.selectVariant = function(me){\r\n\r\n var $me = $( $(me).find(\"a[data-attribute-value-id]\")[0]);\r\n\r\n if(!self.subscriptionsAdded){\r\n //we need to reset this info when the lightbox is closed\r\n PubSub.subscribe(mcWeb.lightbox.events.onHideLightbox, function () {\r\n self.variantType1Id = null;\r\n self.variantType2Id = null;\r\n\r\n });\r\n self.subscriptionsAdded = true;\r\n }\r\n\r\n var variantType =$me.data('variant-type');\r\n var attributeValueId = $me.data('attribute-value-id');\r\n var valueActive = $me.data('active');\r\n var otherAttributeValueId = null;\r\n var motherPlid =$me.data('mother-plid');\r\n var myContainer = $me.closest('.variant-selector-container');\r\n var variantTypeCount = myContainer.data('variant-types');\r\n var removeOldSelected = false;\r\n if(variantType == 1){\r\n if(self.variantType1Id != null && (self.variantType2Id == null || self.variantType2Id == -1 )){\r\n //must reset selected class for attrib 1\r\n removeOldSelected = true;\r\n }\r\n self.variantType1Id = attributeValueId;\r\n otherAttributeValueId = self.variantType2Id;\r\n }\r\n else{\r\n if((self.variantType2Id != null && self.variantType1Id == null ) || self.variantType2Id == -1){\r\n //must reset selected class for attrib 2\r\n removeOldSelected = true;\r\n }\r\n self.variantType2Id = attributeValueId;\r\n otherAttributeValueId = self.variantType1Id;\r\n }\r\n \r\n if(self.storeSelectionInBrowser){\r\n self.updateLocalStorage(motherPlid);\r\n }\r\n\r\n // if(valueActive){\r\n if(((otherAttributeValueId != null && otherAttributeValueId != -1 )|| variantTypeCount == 1 ) && attributeValueId != null ){\r\n self.getChildPlidAction(motherPlid, self.variantType1Id, self.variantType2Id, variantType)\r\n .done(function(result){\r\n if(result && result.Success){\r\n obj.view.show(result.Plid,0);\r\n }\r\n else{\r\n console.log(result.Message);\r\n }\r\n }); \r\n }else{\r\n //the other value has not been set yet\r\n //remove highlighting of already hightlighted item\r\n self.setupOtherVariantType(removeOldSelected, $me, motherPlid, attributeValueId, variantType);\r\n //update showing of selected variant, if needed\r\n\r\n var myHeadingPch = myContainer.find(\".vsc-heading-value\");\r\n if(myHeadingPch.length > 0)\r\n {\r\n var attribName = $me.data(\"value-name\");\r\n myHeadingPch[0].innerText = attribName;\r\n }\r\n }\r\n //}\r\n //else{\r\n //}\r\n \r\n };\r\n \r\n\r\n self.updateLocalStorage = function(plid){\r\n window.StorageService.localStorage.setItem('mcWeb.ajaxVariantSelector.variantType1_'+plid,self.variantType1Id);\r\n window.StorageService.localStorage.setItem('mcWeb.ajaxVariantSelector.variantType2_'+plid,self.variantType2Id);\r\n };\r\n\r\n self.restoreDataFromLocalStorage = function (plid) {\r\n if (self.isVariantMother) {\r\n self.variantType2Id = -1;\r\n self.variantType1Id = -1;\r\n }\r\n else {\r\n var tmp = window.StorageService.localStorage.getItem('mcWeb.ajaxVariantSelector.variantType1_' + plid);\r\n if (tmp != undefined)\r\n self.variantType1Id = tmp;\r\n\r\n\r\n tmp = window.StorageService.localStorage.getItem('mcWeb.ajaxVariantSelector.variantType2_' + plid);\r\n if (tmp != undefined)\r\n self.variantType2Id = tmp;\r\n }\r\n };\r\n\r\n self.setupOtherVariantType = function(removeOldSelected, $me, motherPlid, attributeValueId,variantType){\r\n //the other value has not been set yet\r\n //remove highlighting of already hightlighted item\r\n if(removeOldSelected)\r\n {\r\n $(\".variant-selector-container .v-container\").removeClass(\"active\");\r\n }\r\n //secondly highlight the selected item\r\n //todo: remove all highlighting from liste of the other variants\r\n\r\n var myContainer = $me.closest('.v-container');\r\n $(myContainer).addClass('active');\r\n //if the container is part of a dropdown, we need to change the text from attribute to attributevalue\r\n if($(myContainer).parent().hasClass(\"dropdown-menu\")){\r\n var myButton =$(myContainer).parent().parent().find(\"button.dropdown-toggle\");\r\n var myImgPlch = $(myButton).find(\".color-preview-box-pch\");\r\n var myColour = $(myContainer).find(\".color-preview-box\").clone();\r\n if(myColour.length > 0 && myImgPlch.length > 0){\r\n $(myImgPlch[0]).html(myColour);\r\n }\r\n var textContainer =$(myButton).find(\"span.ddl-button-span\");\r\n var itemContainer = $(myContainer).find(\"a[data-mother-plid]\");\r\n \r\n var itemText = $(itemContainer).prop(\"title\");\r\n textContainer[0].innerText =itemText;\r\n }\r\n\r\n\r\n self.getInactiveAttributeValuesAction(motherPlid,attributeValueId,variantType).done(function(result){\r\n if (result && result.Success) {\r\n var otherVariantType = 2;\r\n if (variantType === 2)\r\n otherVariantType = 1;\r\n\r\n if (result.SingleAvailableAttributeValueId !== null) {\r\n jQuery(`.variant-container [data-variant-types=2] [data-attribute-value-id=${result.SingleAvailableAttributeValueId}][data-variant-type=${otherVariantType}]`).click()\r\n }\r\n\r\n if (result.AttributeValueIds != null) {\r\n \r\n //active all varianttypes\r\n $(\".v-container[data-variant-type=\" + otherVariantType +\"]\").removeClass(\"disabled\");//data-variant-type mangler i container div\r\n $(\".v-container[data-variant-type=\" + otherVariantType +\"]\").addClass(\"activated\");\r\n\r\n //deactivate those that should not be acctive\r\n for(var i = 0; i < result.AttributeValueIds.length; i++){\r\n //må få inn data-attribute-value-id inn på div rundt a-taggen, og så kan vi finne de for å legge til inaktiv status\r\n var itemToDisable = $(\".v-container[data-variant-type=\" + otherVariantType +\"][data-attribute-value-id=\" + result.AttributeValueIds[i]+ \"]\");\r\n itemToDisable.addClass(\"disabled\");\r\n itemToDisable.removeClass(\"activated\");\r\n itemToDisable.find(\"a\").prop('title',result.InfoMsg);\r\n }\r\n }\r\n }\r\n });\r\n };\r\n\r\n\r\n self.getChildPlidAction = function(motherPlid, attributeValueId1, attributeValue2Id, lockedVariantType){\r\n var param = {\r\n MotherPlid : motherPlid,\r\n AttributeValueId1: attributeValueId1,\r\n AttributeValueId2: attributeValue2Id,\r\n LockedVariantType: lockedVariantType\r\n };\r\n\r\n return self.service.PostAction(\"GetVariantChildPlidAsync\", param);\r\n };\r\n\r\n //gives us a liste of attributevaluesids from the variant that are not available for the given attribute type\r\n self.getInactiveAttributeValuesAction = function(motherPlid, selectedAttributeValueId, attributeType){\r\n var param = {\r\n MotherPlid : motherPlid,\r\n AttributeValueId: selectedAttributeValueId,\r\n VariantType: attributeType\r\n };\r\n\r\n return self.service.PostAction(\"GetInactiveAttributeValues\",param);\r\n };\r\n \r\n //show the variant-selector since it is now ready\r\n if(parent.id === '#PanelProductInfo'){\r\n jQuery(parent.id).addClass(\"variant-ready\");\r\n }\r\n };\r\n})(jQuery);"],"sourceRoot":""}