{"version":3,"sources":["webpack:///./node_modules/process/browser.js","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","webpack:///./node_modules/timers-browserify/main.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///(webpack)/buildin/global.js"],"names":["cachedSetTimeout","cachedClearTimeout","process","module","exports","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","setTimeout","e","call","this","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","length","concat","drainQueue","timeout","len","run","marker","runClearTimeout","Item","array","noop","nextTick","args","Array","arguments","i","push","prototype","apply","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","name","binding","cwd","chdir","dir","umask","McUtils","constructor","isElementInView","element","fullyInView","pageTop","jQuery","window","scrollTop","pageBottom","height","elementTop","offset","top","elementBottom","isElementBelowView","isElementAboveView","$","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","applyCustomerSpecifics","popupParam","css","callback","InitializeRoyalSliderForPreview","spacing","orientation","autoCenter","bind","reinit","PubSub","publish","AjaxRenderingEngineEventTypes","onFieldContentChanged","onNewAreasShown","onPopupReady","onPopupFilterChanged","onAjaxRenderingLoaded","onKnockoutRenderingCompleted","onPriceRefreshRequested","onPushProductsIntoField","onClearFieldFilter","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","each","index","item","removeClass","addClass","pageParam","getParameterByName","parseInt","articleIdentifier","D4AiActive","D4AiRegisterStats","fieldsToLoad","targetKey","filterTargetKey","onlyUpdateProductList","doNotRenderFilter","useDummyData","popupFilter","nextPageNumber","firstPageViewPopup","updateContentForPreloadedFields","runUpdateFields","updateSelectedAttributeListVisibility","getQuickview","placement","openQuickView","nodeid","manufacturerid","areaname","me","myCenteredPopup","closest","quickview","loadLightboxFields","options","loadNextPage","updateFields","loadPrevPage","prevPageNumber","reloadPageCallback","fieldIds","isNaN","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","addPrevPageScrollObserver","observed","scrollEventPrevRegistered","headerObserver","IntersectionObserver","onHeaderIntersection","rootMargin","threshold","observe","SetAllowedUseOfProductCache","val","reloadPageListingOnlyCallback","skipFilter","doSkipFilter","reloadDummyFields","find","isEdm","GetAction","scaleLayoutPicker","layoutPickerContainer","myField","contentHeight","contentWidth","scale","min","layoutName","hasClass","wrap","parent","reloadForPublisher","newDeviceSize","ChangeSortType","dropDownControl","cont","McAjaxRequest","ToggleGroupVariants","obj","group","checked","alert","ToggleStockMode","ToggleStockModeFjernlager","replace","results","RegExp","exec","location","search","decodeURIComponent","clearFields","targetField","target","findFirstElementOfNextRow","currentElement","fieldLeftPosition","left","targetElementFound","nextElement","next","findLastElementOfLastRow","prev","showElementAsSlideshow","fieldid","elementid","elementIndex","currentSlideElement","currentSlideshowField","remove","innerfield","goTo","targetElement","insertAfter","activeSlider","stopAutoPlay","previewForExistingSlideshow","myPlids","myPlidsString","activeArticleId","plidList","after","previewSlideshowIsActive","ContainerId","scrollView","currentSlideIndex","currentSlide","elementId","linkedElements","prepend","event","lastPreviewElement","showNexElement","linkedElement","not","UpdateSlideshowPosition","InitializeRoyalSliderInAds","addFieldToArea","areaContainer","ActiveArticleId","AreaUniqueId","Response","AddToEnd","existingFields","EnableLinksForArticlesWithBackground","replaceField","IsEdm","moveback","lastLinkedElement","previewElement","parentElement","distance","distanceBetweenElementAndSlideshow","newTargetElement","showPrevious","visibleElement","maxIndex","newVisibleElement","eq","findLinkedElement","fn","animate","slideshow","bottomOfElement","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","searchLocAfterFiltering","informShopOfFilterActivation","setInternalListOfOpenFilters","currentFilter","clientHasFilter","prop","openAttributes","openAttributesList","doScrollToNextPage","scrollToNextPage","doScrollToPrevPage","scrollToPrevPage","getAttribute","nextPageIndex","updateScroller","prevPage","navigateToPage","fetchAttributeValues","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","myPlid","fieldData","UseSpecificLayoutId","LayoutId","VariantSorting","Plid","PlidList","SendFilterOnly","skipSorter","Data","SkipFilterRendering","UseDummyData","DeviceSize","GetElementsOnly","SkipSorter","CurrentArticle","PopupFilter","AllowDeferred","Prepend","updateFieldContent","EmptyFields","D4DeferredScripts","decodedString","DOMParser","parseFromString","body","textContent","D4SingleScript","getScript","textStatus","jqxhr","console","log","status","setupSubscriptions","postStatistics","contentChanged","fieldParents","parentIndex","tmpWidth","$current","lightboxLocator","disableDoubleClick","subscribe","message","cartsmall","onShowNewItemInCartText","favouriteCart","lightboxModal","isShown","cart","onPopupForProductAssembly","p","FullFilter","nextF","Sender","nextField","loadPopupParams","fieldNode","Plids","ajaxPopup","checkForPopupAfterProductInfoVisit","checkForPopupFirstPageView","CustomEvent","bubbles","cancelable","detail","evt","createEvent","initCustomEvent","querySelector","dispatchEvent","classToDisable","dblclick","preventDefault","addFieldSorterToPage","$targetField","FieldSorterResponse","myFieldContainer","oldFieldSorter","FieldSorter2Response","Menu","onAddNewFilterButton","addFieldContentToPage","bottomImageToLoad","added","registerStatistics","LoadFilter","updateFilterContent","AddToExistingField","imageList","lastImage","last","containsLoadableImage","backgroundImgItems","bgItem","initialiseAdLinks","InitializeRoyalSlider","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","ArrowsNav","GeneratePagination","ArrowsNavAutoHide","FadeSpeed","SlideSpeed","Effect","CrosseFade","Orientation","ScaleType","Randomize","Css","IsMobile","Height","resolveImagesOnImageLoaded","image","Promise","resolve","reject","complete","onload","ensureCorrectImageSizes","images","lazyImg","items","imageLoadedPromises","from","map","all","then","img","includeLink","tagName","toLowerCase","parentWidth","parentHeight","myWidth","myHeight","usesAltImg","imgStatus","autoscale","aspect","myId","TargetId","Index","Aspect","IncludeLink","UseSecondaryImage","IncludeNotFound","AutoScale","Items","delaySlideshow","success","tag","newImages","initializeSlideShowAfterImagesLoaded","D4LinkArraySetup","makeAdLinkToProduct","productLink","stats","PopupRule","FieldIds","Note","fieldRecognizer","recognizer","preloadedFields","fieldItems","fieldItem","UniqueId","preloadedElements","eItems","eItem","Elements","Fields","fields","fData","targetfield","PriceData","priceTags","filter","$item","Price","Discount","NoBuy","myElement","UnlockBuy","BidName","BidExpires","setInterval","now","Date","getTime","salesCountdown","t","days","floor","hours","mins","secs","slice","discountTags","line","jItem","oldPriceTags","OldPrice","rrpPriceTags","Rrp","$field","lazyImages","InitializeAnimationsInArticleWithBackground","PagesRemaining","addRemainingFieldsToDom","isSlideOver","PopupPch","lightboxContainer","movePopupFieldsToOriginalPlaceholder","empty","dataFound","classesForFields","fieldPopupHtml","detach","dataToApply","PopupEvent","onHideLightbox","skipAdd","addNextFieldToDom","scroll","scrollerContainer","scrollerTag","footerlist","querySelectorAll","footer","addScrollObserver","entries","entry","intersectionRatio","prevElement","unobserve","onIntersection","onFieldIntersection","fieldScrollObserver","HasMoreFieldsToLoad","myFieldData","myInnerData","noloop","fieldWasAdded","fieldToObserve","findNextFieldToObserve","fieldElement","getElementById","addFieldScrollObserver","popNextFieldAboveView","startParaxify","currentImgSrc","Image","onBottomImgLoaded","onerror","loadNextField","findNextVisibleField","fieldReadyToLoad","n","splice","ScrollToElement","toElement","toggleAttributeValues","toggleClass","filterData","secondaryFilterId","FilterResponse","targetDiv","filterOutEmptyAttributes","attributeFilte","ShowCompressedFilter","attributeFilterParent","filterItems","itemParam","Identifier","FilterItems","Visible","RenderedData","dummyBarn","removeAttr","stopImmediatePropagation","publisherAdminMenu","callLayoutAction","cancelBubble","stopPropagation","updateVariantMatrixField","listingField","variantMatrix","VariantChilds","ProduktLagerId","myfunction","ready","outerHTML","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","AttributeValueIds","otherVariantType","itemToDisable","InfoMsg","attributeValueId1","attributeValue2Id","lockedVariantType","MotherPlid","AttributeValueId1","AttributeValueId2","LockedVariantType","selectedAttributeValueId","attributeType","AttributeValueId","VariantType","Function","Timeout","clearFn","_id","_clearFn","scope","clearInterval","close","unref","ref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","setImmediate","global","clearImmediate","registerImmediate","channel","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","doc","attachTo","Object","getPrototypeOf","toString","handle","runIfPresent","postMessage","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","canUsePostMessage","MessageChannel","port1","port2","createElement","documentElement","script","onreadystatechange","removeChild","appendChild","random","source","addEventListener","attachEvent","task","g"],"mappings":"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","file":"2.e0c40f60d47aa75d7f30.bundle.js","sourcesContent":["// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","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\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};\r\n\r\nexport const AjaxRenderingEngine = new (function AjaxRenderingEngine($) {\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']\",\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']\",\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 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(){\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) {\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 this.addPrevPageScrollObserver = function (observed) {\r\n if (!self.IntersectionObserveAllowed)\r\n return;\r\n\r\n if (!self.scrollEventPrevRegistered && self.CurrentPageNumber > 1) {\r\n self.scrollEventPrevRegistered = 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.headerObserver = new IntersectionObserver(self.onHeaderIntersection, config);\r\n\r\n self.headerObserver.observe(observed);\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) {\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 () {\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 // myField.css(\"zoom\", scale);//works well for Opera and Chrome, but not for FF\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.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 //self.updateFields(\"div.load-first .ajax-field.not-loaded\", \"#AttributeListBox\", false, false, false, 0);\r\n //self.updateFields(\"div.load-later .ajax-field.not-loaded\", \"#AttributeListBox\", false, false, false, 0);\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 this.clearFields = function (targetKey) {\r\n var fieldsToLoad = $(targetKey);\r\n for (var i = 0; i < fieldsToLoad.length; i++) {\r\n var targetField = $(fieldsToLoad[i]);\r\n if (target != undefined) {\r\n $(targetField).html(\"\");\r\n }\r\n }\r\n };\r\n\r\n this.findFirstElementOfNextRow = function (currentElement, field) {\r\n var fieldLeftPosition = field.offset().left;\r\n\r\n var targetElementFound = false;\r\n var nextElement = currentElement.next('.WebPubElement');\r\n while (!targetElementFound && (nextElement != null || nextElement != undefined) && nextElement.length > 0) {\r\n var nextElementPosition = nextElement.offset().left;\r\n if (nextElementPosition < (fieldLeftPosition + 20)) {\r\n targetElementFound = true;\r\n break;\r\n }\r\n nextElement = nextElement.next('.WebPubElement');\r\n }\r\n if (targetElementFound)\r\n return nextElement;\r\n else return null;\r\n };\r\n\r\n this.findLastElementOfLastRow = function (currentElement, field) {\r\n var fieldLeftPosition = field.offset().left;\r\n\r\n var targetElementFound = false;\r\n var nextElement = currentElement.prev('.WebPubElement');\r\n while (!targetElementFound && (nextElement != null || nextElement != undefined) && nextElement.length > 0) {\r\n var nextElementPosition = nextElement.offset().left;\r\n if (nextElementPosition < (fieldLeftPosition + 20)) {\r\n targetElementFound = true;\r\n break;\r\n }\r\n nextElement = nextElement.prev('.WebPubElement');\r\n }\r\n if (targetElementFound)\r\n return nextElement;\r\n else return null;\r\n };\r\n\r\n\r\n this.showElementAsSlideshow = function (area, fieldid, elementid, nodeid, elementIndex) {\r\n\r\n var currentElement = jQuery(\"div.ajax-field.inner-layout-container[data-field-id='\" + fieldid + \"'] div.WebPubElement[data-elementid='\" + elementid + \"']\");\r\n var currentField = jQuery(\"div.ajax-field.inner-layout-container[data-field-id='\" + fieldid + \"']\");\r\n self.currentField = currentField;\r\n if (self.currentSlideElement != undefined) {\r\n jQuery(self.currentSlideElement).removeClass('selected-for-slideshow');\r\n jQuery(self.currentSlideshowField).remove();\r\n }\r\n\r\n self.currentSlideElement = currentElement;\r\n if (self.currentSlideshowField != undefined && self.currentSlideshow != null && self.currentSlideshowField != null) {\r\n //check if the running slideshow is the same as the one we now want to open a slide for\r\n var innerfield = self.currentSlideshowField.find(\".slides_container\");\r\n if (innerfield != null && innerfield.length > 0) {\r\n var runningSlideshowFieldId = jQuery(innerfield).data(\"field-id\");\r\n if (runningSlideshowFieldId == fieldid) {\r\n //Preview button used within same slideshow\r\n self.currentSlideshow.goTo(elementIndex);\r\n return;\r\n }\r\n }\r\n\r\n }\r\n\r\n var targetElement = null;\r\n var insertAfter = false;\r\n\r\n if (currentField.length == 0) {\r\n currentField = jQuery(\"div.royalSlider[data-field-id='\" + fieldid + \"']\");\r\n if (currentField.length > 0) {\r\n self.activeSlider = currentField.data('royalSlider');\r\n self.activeSlider.stopAutoPlay();\r\n targetElement = currentField.closest(\"div.web-pub-field\");\r\n insertAfter = true;\r\n //todo: stop current slideshow\r\n self.previewForExistingSlideshow = true;\r\n }\r\n } else {\r\n\r\n if (currentField.hasClass(\"inner-layout-container\")) {\r\n targetElement = self.findFirstElementOfNextRow(currentElement, currentField);\r\n if (targetElement == null) { //Current element must have been the last element in the field, so we add the slideshow after it\r\n if (currentElement !== null) {\r\n targetElement = currentField.find(\".WebPubElement:last\");\r\n\r\n }\r\n insertAfter = true;\r\n }\r\n self.previewForExistingSlideshow = false;\r\n }\r\n }\r\n\r\n var myPlids = null;\r\n var myPlidsString = currentField.data('Plids');\r\n if (myPlidsString != undefined && myPlidsString != null)\r\n myPlids = myPlidsString;\r\n\r\n var width = currentField.width();\r\n var param = {\r\n areaName: area,\r\n fieldId: fieldid,\r\n nodeId: nodeid,\r\n width: width,\r\n elementIndex: elementIndex,\r\n manufacturerId: currentField.data('manufacturerid'),\r\n activePlid: currentField.data('plid'),\r\n activeArticleId: self.currentArticleId,\r\n plidList: myPlids\r\n };\r\n\r\n self.fieldRenderService.GetAction(\"RenderFieldAsSlideshow\", param).done(\r\n function (result) {\r\n if (result != null) {\r\n if (insertAfter)\r\n targetElement.after(result.Content);\r\n else targetElement.before(result.Content);\r\n\r\n if (self.previewSlideshowIsActive) {\r\n //must remove previous preview-slideshow\r\n jQuery(self.currentSlideshowField).remove();\r\n }\r\n\r\n self.previewSlideshowIsActive = true;\r\n\r\n self.currentSlideshowField = jQuery(\"#\" + result.ContainerId);\r\n jQuery(self.currentSlideshowField).scrollView(-200);\r\n self.currentSlideIndex = elementIndex;\r\n\r\n var currentSlide = self.currentSlideshowField;\r\n var elementId = jQuery(self.currentSlideElement).data('elementid');\r\n var linkedElements =\r\n self.currentField.find(\"div.WebPubElement[data-elementid='\" + elementId + \"']\");\r\n jQuery(linkedElements).addClass('selected-for-slideshow');\r\n\r\n var tmpCloseBtn = jQuery(currentSlide).prepend(\"\");\r\n tmpCloseBtn.find('#slider-close-button').on('click', function (event) {\r\n\r\n jQuery(self.currentSlideElement).removeClass('selected-for-slideshow');\r\n jQuery(self.currentSlideshowField).remove();\r\n return false;\r\n });\r\n\r\n\r\n var tmp = jQuery(currentSlide).prepend(\"\");\r\n tmp.find('#slider-next-button').on('click', function (event) {\r\n var lastPreviewElement = self.showNexElement(false);\r\n\r\n var element = self.currentSlideElement;\r\n var elementId = jQuery(element).find('.WebPubElement').data(\"elementid\");\r\n var linkedElement =\r\n self.currentField.find(\"div.WebPubElement[data-elementid='\" + elementId + \"']\")\r\n .not(\".preview-element\");\r\n jQuery(lastPreviewElement).removeClass(\"selected-for-slideshow\");\r\n self.UpdateSlideshowPosition(false, element, linkedElement, lastPreviewElement);\r\n InitializeRoyalSliderForPreview(null, null, null, '.preview-element.preview-visible');\r\n return false;\r\n });\r\n\r\n var tmp2 = jQuery(currentSlide).prepend(\"\");\r\n tmp2.find('#slider-previous-button').on('click', function (event) {\r\n var lastPreviewElement = self.showNexElement(true);\r\n var element = self.currentSlideElement;\r\n var elementId = jQuery(element).find('.WebPubElement').data(\"elementid\");\r\n var linkedElement =\r\n self.currentField.find(\"div.WebPubElement[data-elementid='\" + elementId + \"']\")\r\n .not(\".preview-element\");\r\n jQuery(lastPreviewElement).removeClass(\"selected-for-slideshow\");\r\n\r\n self.UpdateSlideshowPosition(true, element, linkedElement, lastPreviewElement);\r\n InitializeRoyalSliderForPreview(null, null, null, '.preview-element.preview-visible');\r\n\r\n return false;\r\n });\r\n\r\n InitializeRoyalSliderInAds(\".preview-element.preview-visible .variant-slider\");\r\n InitializeRoyalSliderForPreview(null, null, null, '.preview-element.preview-visible');\r\n }\r\n }\r\n );\r\n };\r\n\r\n this.addFieldToArea = function (areaName, fieldId, nodeId) {\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) {\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 this.UpdateSlideshowPosition = function (moveback, element, linkedElement, lastLinkedElement) {\r\n var elementId = jQuery(element).data(\"element-id\");\r\n\r\n linkedElement.addClass(\"selected-for-slideshow\");\r\n if (lastLinkedElement != null)\r\n jQuery(lastLinkedElement).removeClass(\"selected-for-slideshow\");\r\n var previewElement = null;\r\n var parentElement = null\r\n if (linkedElement.length > 1) {\r\n previewElement = linkedElement[0];\r\n parentElement = linkedElement[1];\r\n }\r\n else return;\r\n\r\n var distance = distanceBetweenElementAndSlideshow(jQuery(previewElement), self.currentSlideshowField);\r\n if (distance > 40) {\r\n var newTargetElement = self.findFirstElementOfNextRow(jQuery(parentElement), self.currentField);\r\n if (newTargetElement == null) {\r\n newTargetElement = self.currentField.find(\".WebPubElement:last\");\r\n newTargetElement.after(self.currentSlideshowField);\r\n } else {\r\n if (!moveback) {\r\n newTargetElement.before(self.currentSlideshowField);\r\n } else {\r\n newTargetElement.after(self.currentSlideshowField);\r\n }\r\n\r\n }\r\n }\r\n else if (distance < -40) {\r\n //must move preview up one row\r\n newTargetElement = self.findFirstElementOfNextRow(jQuery(previewElement), self.currentField);\r\n jQuery(newTargetElement).before(self.currentSlideshowField);\r\n }\r\n jQuery(self.currentSlideshowField).scrollView(-100);\r\n };\r\n\r\n this.showNexElement = function (showPrevious) {\r\n var visibleElement = self.currentSlideshowField.find(\".preview-element.preview-visible\");\r\n visibleElement.removeClass(\"preview-visible\");\r\n visibleElement.addClass(\"preview-hidden\");\r\n if (showPrevious) {\r\n if (self.currentSlideIndex > 0)\r\n self.currentSlideIndex = self.currentSlideIndex - 1;\r\n else self.currentSlideIndex = self.currentSlideshowField.find(\".WebPubFieldRow.preview-element\").length - 1;\r\n } else {\r\n var maxIndex = self.currentSlideshowField.find(\".WebPubFieldRow.preview-element\").length - 1;\r\n self.currentSlideIndex = self.currentSlideIndex + 1;\r\n if (self.currentSlideIndex > maxIndex)\r\n self.currentSlideIndex = 0;\r\n }\r\n\r\n var newVisibleElement = $(self.currentSlideshowField.find(\".preview-element\")).eq(self.currentSlideIndex);\r\n newVisibleElement.removeClass(\"preview-hidden\");\r\n newVisibleElement.addClass(\"preview-visible\");\r\n self.currentSlideElement = newVisibleElement;\r\n InitializeRoyalSliderInAds(\".preview-element.preview-visible .variant-slider\");\r\n\r\n return findLinkedElement(visibleElement, self.currentField);\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 var distanceBetweenElementAndSlideshow = function (element, slideshow) {\r\n var elementOffset = element.offset();\r\n\r\n var bottomOfElement = elementOffset.top + element.height();\r\n var topOfSlideshow = slideshow.offset().top;\r\n return 0 - (topOfSlideshow - bottomOfElement);\r\n };\r\n\r\n var findLinkedElement = function (element, field) {\r\n var elementId = jQuery(element).find('.WebPubElement').data(\"elementid\");\r\n var linkedElement =\r\n field.find(\"div.WebPubElement[data-elementid='\" + elementId + \"']\").not(\".preview-element\");\r\n if (linkedElement.length > 1)\r\n return linkedElement[0];\r\n\r\n return linkedElement;\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 this.doScrollToPrevPage = function (element) {\r\n\r\n return self.scrollToPrevPage(element);\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 //self.updatePrevPageScroller(element);\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 {\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 {\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 };\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)\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= 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 });\r\n\r\n PubSub.subscribe(AjaxRenderingEngineEventTypes.onPriceRefreshRequested, \r\n function(data, message){\r\n self.updateContentForPreloadedFields(\"div.ajax-field\");\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 console.log(param);\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) {\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.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.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 var royalSlider = mcSlide.InitSlideshow(myParent[0].id,\r\n slideshowmodel.Play,\r\n slideshowmodel.Pause,\r\n slideshowmodel.HoverPause,\r\n slideshowmodel.ArrowsNav,\r\n slideshowmodel.GeneratePagination,\r\n slideshowmodel.ArrowsNavAutoHide,\r\n slideshowmodel.FadeSpeed,\r\n slideshowmodel.SlideSpeed,\r\n slideshowmodel.Effect,\r\n slideshowmodel.CrosseFade,\r\n slideshowmodel.Orientation,\r\n slideshowmodel.ScaleType,\r\n slideshowmodel.Randomize,\r\n slideshowmodel.Css,\r\n slideshowmodel.IsMobile,\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 this.ensureCorrectImageSizes= function(images, $targetField, data, lazyImg){\r\n var items = [];\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 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 for(var i = 0; i < images.length; i++){\r\n var img =jQuery(images[i]);\r\n var parent = img.parent();\r\n if(parent === null || parent === undefined || parent.length <=0)\r\n continue;\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 && imgStatus === \"Ok\"){\r\n \r\n if(lazyImg || myWidth / parentWidth < 0.75){\r\n var aspect = parentWidth / parentHeight;\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 };\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 items.push(item);\r\n }\r\n }\r\n }\r\n\r\n if(items.length > 0){\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(delaySlideshow && data != null && data.SlideShowModel != null && data.SlideShowModel != undefined){//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,data);\r\n }\r\n else{\r\n if(data != null && data.SlideShowModel != undefined && data.SlideShowModel != null){\r\n self.initializeSlideShow($targetField, data.SlideShowModel);\r\n }\r\n }\r\n \r\n \r\n });\r\n }\r\n else if(data != null && data.SlideShowModel != undefined && data.SlideShowModel != null){\r\n self.initializeSlideShow($targetField, data.SlideShowModel);\r\n }\r\n });\r\n }\r\n else if(data != null &&data.SlideShowModel != undefined && data.SlideShowModel != null){\r\n self.initializeSlideShow($targetField, data.SlideShowModel);\r\n }\r\n // },5000);\r\n };\r\n\r\n\r\n this.initializeSlideShowAfterImagesLoaded = function($targetField, images, data){\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( data.SlideShowModel != undefined && data.SlideShowModel != null){\r\n self.initializeSlideShow($targetField, data.SlideShowModel);\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.updateContentForPreloadedFields = function(fieldRecognizer){\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 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.applyCustomerSpecifics(field, fData);\r\n }\r\n }\r\n });\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\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 $field = jQuery(targetfield);\r\n var images = $field.find(\"img.d4-prod-thumb\");\r\n self.ensureCorrectImageSizes(images, $field, data,false);\r\n var lazyImages =$field.find(\"img.d4-lazy-thumb\");\r\n self.ensureCorrectImageSizes(lazyImages,$field,data,true);\r\n EnableLinksForArticlesWithBackground();\r\n InitializeAnimationsInArticleWithBackground();\r\n\r\n };\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 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 dataFound = true;\r\n } else {\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 //self.applyCustomerSpecifics(data.targetField, data);//now done after popup has been opened\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 classesForFields += \" popupfield-\" +data.FieldId;\r\n if (data.LoadFilter) {\r\n this.updateFilterContent(data);\r\n\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n if (dataFound) {\r\n var popupParam = {\r\n css: \"d4-popup d4-popup-rule-\" + fieldData.PopupRule + classesForFields,\r\n dataToApply: fieldData\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).scroll(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 } else if (fieldData.PagesRemaining == 0 && self.PagingMode >= 3 && self.scrollEventIsRegistered && fieldData.Data.length > 0) {\r\n //no more pages, let's remove the scroll registration\r\n jQuery(window).off(\"scroll\");\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\r\n };\r\n //todo: fjern venteikon\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) {\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 this.ScrollToElement = function (toElement) {\r\n setTimeout(function () {\r\n jQuery('html, body').scrollTop(\r\n jQuery(toElement).offset().top);\r\n if (self.scrollEventPrevRegistered) {\r\n\r\n self.scrollEventPrevRegistered = false;\r\n self.headerObserver = null;\r\n }\r\n self.addPrevPageScrollObserver(jQuery(\"#field-paging-prev\")[0]);\r\n self.myScrollToElement = jQuery(\"#field-paging-container\");\r\n },\r\n 200);\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.filterOutEmptyAttributes($(targetDiv));\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 }\r\n }\r\n if(!self.attributeFilterInitiated){\r\n mcWeb.attributeFilte.init(filterData.ShowCompressedFilter);\r\n //PubSub.publish(window.Menu.prototype.events.onAddNewFilterButton,null);\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 //if (targetDiv !== undefined && targetDiv.length > 0) {\r\n // if (filterData.FilterResponse.Response.length > 0) {\r\n // $(targetDiv).html(filterData.FilterResponse.Response);\r\n // }\r\n }\r\n }\r\n };\r\n\r\n this.filterOutEmptyAttributes = function (attributeFilterParent) {\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 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: ''\r\n }\r\n var filterItems = []; \r\n attributeFilterParent.find(\".not-processed\").each(function (index, item) {\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\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 }\r\n $(attributeFilterParent).removeClass(\"attribute-spinner\");\r\n\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 if(result.AttributeValueIds != null){\r\n var otherVariantType = 2;\r\n if(variantType === 2)\r\n otherVariantType = 1;\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);","var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a