{"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","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","PrevPagingLoaded","myScrollToElement","currentArticleId","CheckStatistics","ListingTypeGrid","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","updateContentForPreloadedFields","runUpdateFields","InitialPageNumer","SetupScrollToTop","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","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","setInternalListOfOpenFilters","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","current","isProductListField","areaid","parents","filterContainer","filterClientId","cacheKey","attr","FilterIsJson","OpenAttributes","OtherContactId","JSON","stringify","currentPopupFilter","fieldParents","parentIndex","tmpWidth","myPlid","fieldData","UseSpecificLayoutId","LayoutId","VariantSorting","Plid","PlidList","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","disableDoubleClick","subscribe","message","cartsmall","onShowNewItemInCartText","favouriteCart","cart","onPopupForProductAssembly","p","FullFilter","nextF","Sender","nextField","loadPopupParams","fieldNode","Plids","ajaxPopup","checkForPopupAfterProductInfoVisit","CustomEvent","bubbles","cancelable","detail","evt","createEvent","initCustomEvent","querySelector","dispatchEvent","classToDisable","dblclick","preventDefault","addFieldSorterToPage","$targetField","FieldSorterResponse","myFieldContainer","oldFieldSorter","FieldSorter2Response","Menu","onAddNewFilterButton","addFieldContentToPage","bottomImageToLoad","added","firstFetchPrevPaging","registerStatistics","IsProductListing","CurrentUrl","CurrentIndex","myTargetField","ScrollToElement","nextScrollToElement","pagingLink","getElementById","initialiseAdLinks","AddToExistingField","LoadFilter","updateFilterContent","imageList","lastImage","last","containsLoadableImage","backgroundImgItems","bgItem","InitializeRoyalSlider","IsNoHitSearch","ShowInStockOnly","hide","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","items","imageLoadedPromises","from","map","all","then","img","parentWidth","parentHeight","myWidth","usesAltImg","imgStatus","aspect","myId","TargetId","Index","Aspect","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","InitializeAnimationsInArticleWithBackground","PagesRemaining","addRemainingFieldsToDom","lightboxContainer","PopupPch","movePopupFieldsToOriginalPlaceholder","empty","dataFound","classesForFields","fieldPopupHtml","detach","PopupEvent","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","addFieldScrollObserver","popNextFieldAboveView","startParaxify","currentImgSrc","Image","onBottomImgLoaded","onerror","loadNextField","findNextVisibleField","fieldReadyToLoad","n","splice","toElement","toggleAttributeValues","toggleClass","filterData","secondaryFilterId","FilterResponse","targetDiv","filterOutEmptyAttributes","attributeFilte","ShowCompressedFilter","attributeFilterParent","filterItems","itemParam","Identifier","FilterItems","Visible","RenderedData","dummyBarn","prop","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","onHideLightbox","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.817b7ef20a0d500165db.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 })\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 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.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.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 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(loadLaterParams);\r\n self.fieldsToLoad.push(loadLaterWithFilterParams);\r\n self.fieldsToLoad.push(loadPopupParams);\r\n\r\n self.updateContentForPreloadedFields();\r\n \r\n self.runUpdateFields();\r\n\r\n if (self.InitialPageNumber > 1 && self.CurrentPageNumber === self.InitialPageNumer && !self.InitialLoadDone) {\r\n self.SetupScrollToTop();\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.not-loaded[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.not-loaded[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 this.SetupScrollToTop = function () {\r\n if (self.IntersectionObserveAllowed) {\r\n if (self.CurrentPageNumber > 2) {\r\n //we should have already asked for page N, but we\r\n //need to automatically fetch page N-1 and go down to the current page anchor\r\n //fetch page N-1 and N, scroll down to page N\r\n // setup up observable on the breadcrumb, so that when we get to it\r\n //we fetch the page N-2 and then N-3 etc as it becomes visible again\r\n } else if (self.CurrentPageNumber > 1) {\r\n //fetch page 1 & 2, scroll user down to page 2 anchor\r\n }\r\n }\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.not-loaded[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.not-loaded[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.not-loaded[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.not-loaded\", \"#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.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 var 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 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 = 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 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\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 window.history.pushState(attributeId + ':' + attributeValueId, document.title, newLocation);\r\n\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.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 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\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 = 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\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 \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.setupSubscriptions = function () {\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 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 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\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\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.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 var firstFetchPrevPaging = false;\r\n\r\n self.registerStatistics(data);\r\n if(self.PagingMode > 1){\r\n //we need some form of automation, and need to fetch code for next/previous page etc. If PagingMode == 1 we won't call this code since it makes us automatically fetch content for the previous page\r\n if (data.IsProductListing &&\r\n !fieldData.Prepend &&\r\n self.InitialPageNumber > 1 &&\r\n self.CurrentPageNumber == self.InitialPageNumber &&\r\n !self.PrevPagingLoaded) {\r\n //we fetched the first page, and it's not page number 1. We must add a link to previous page. To get the previous-page link, we must make another call to the server\r\n var currentUrl = document.location.pathname + document.location.search;\r\n var param = {\r\n CurrentUrl: currentUrl,\r\n CurrentIndex: self.CurrentPageNumber\r\n };\r\n\r\n self.service.PostAction(\"GetPrevPagePaging\", param).done(\r\n function (result) {\r\n if (result != null) {\r\n var myTargetField = $targetField;\r\n if (self.myScrollToElement != null) {\r\n //ensure we're placed where we want to be\r\n self.ScrollToElement(self.myScrollToElement);\r\n //set up the next scroll-point\r\n var nextScrollToElement = myTargetField.find(\"div:first\");\r\n if (nextScrollToElement != null && nextScrollToElement.length > 0)\r\n self.myScrollToElement = nextScrollToElement;\r\n else self.myScrollToElement = null;\r\n\r\n }\r\n var myFieldContainer = $($targetField.parent()).parent();\r\n $(myFieldContainer).prepend(result);\r\n var pagingLink = document.getElementById('field-paging-prev');\r\n if (pagingLink != null) {\r\n self.myScrollToElement = $(targetField).find(\"div:first\");\r\n\r\n self.doScrollToPrevPage(pagingLink);\r\n\r\n\r\n //todo: how to scroll to correct position, and then add an observer on previous-page link\r\n }\r\n self.PrevPagingLoaded = true;\r\n self.initialiseAdLinks();\r\n }\r\n }\r\n );\r\n } else if (data.IsProductListing &&\r\n fieldData.Prepend &&\r\n self.InitialPageNumber > 1 &&\r\n self.PrevPagingLoaded &&\r\n fieldData.AddToExistingField) {\r\n firstFetchPrevPaging = true;\r\n\r\n }\r\n }\r\n if (data.LoadFilter) {\r\n this.updateFilterContent(data);\r\n\r\n }\r\n if (!firstFetchPrevPaging) {\r\n if (!fieldData.AddToExistingField) {\r\n $targetField.html(data.Response);\r\n self.applyCustomerSpecifics(targetField, data);\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 //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 if (firstFetchPrevPaging) {\r\n //we have fetched the first page previously, and now we must update the previous page link\r\n //first remove the old one\r\n if (self.CurrentPageNumber <= 2) {\r\n var myFieldContainer = $($targetField.parent()).parent();\r\n $(myFieldContainer).find(\".field-paging-container-prev\").remove();\r\n }\r\n\r\n //now get the new paging link\r\n if (self.CurrentPageNumber > 2) {\r\n\r\n var currentUrl = document.location.pathname + document.location.search;\r\n var param = {\r\n CurrentUrl: currentUrl,\r\n CurrentIndex: self.CurrentPageNumber - 1\r\n };\r\n self.service.PostAction(\"GetPrevPagePaging\", param).done(\r\n function (result) {\r\n if (result != null) {\r\n var myFieldContainer = $($targetField.parent()).parent();\r\n\r\n $(myFieldContainer).find(\".field-paging-container-prev\").remove();\r\n var myTargetField = $targetField;\r\n //keep track of previously top-most element so we can scroll there\r\n var nextScrollToElement = myTargetField.find(\"div:first\");\r\n //insert newly loaded page above the last result\r\n myTargetField.prepend(data.Response);\r\n $(myFieldContainer).prepend(result);\r\n self.applyCustomerSpecifics(myTargetField, data);\r\n PubSub.publish(AjaxRenderingEngineEventTypes.onFieldContentChanged, data);\r\n\r\n self.initialiseAdLinks();\r\n\r\n //set up next scroll element\r\n if (nextScrollToElement != null && nextScrollToElement.length > 0)\r\n self.myScrollToElement = nextScrollToElement;\r\n else self.myScrollToElement = null;\r\n //scroll back to where we should be\r\n self.ScrollToElement(self.myScrollToElement);\r\n\r\n\r\n\r\n self.CurrentPageNumber = self.CurrentPageNumber - 1;\r\n if (self.CurrentPageNumber < self.LowestPageNumberSeen)\r\n self.LowestPageNumberSeen = self.CurrentPageNumber;\r\n\r\n }\r\n self.PrevPagingLoaded = true;\r\n }\r\n );\r\n }\r\n else if (self.CurrentPageNumber == 2) {\r\n self.CurrentPageNumber = 1;\r\n $targetField.prepend(data.Response);\r\n self.applyCustomerSpecifics(targetField, data);\r\n self.initialiseAdLinks();\r\n }\r\n }\r\n\r\n if (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){ \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){\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 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(\"alt-img\") === 1;\r\n var imgStatus = img.data(\"status\");\r\n\r\n if(!usesAltImg && imgStatus === \"Ok\"){\r\n \r\n if(myWidth / parentWidth < 0.75){\r\n var aspect = parentWidth / parentHeight;\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(\"image-index\"),\r\n Width: parentWidth,\r\n Aspect: aspect\r\n };\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);\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 combinedPopupHtml = \"\";\r\n var lightboxContainer = $(fieldData.PopupPch);\r\n if (lightboxContainer != undefined) {\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);\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 }\r\n PubSub.publish(fieldData.PopupEvent, popupParam);\r\n PubSub.publish(mcWeb.lightbox.events.contentChanged);\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 if (!skipAdd)\r\n self.addNextFieldToDom();\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{\r\n if (fieldData.PagingMode > 2) {\r\n self.hidePaging();\r\n }\r\n else if(fieldData.PagingMode ===2 && data.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 (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) {\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.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 var tmp = window.StorageService.localStorage.getItem('mcWeb.ajaxVariantSelector.variantType1_'+plid);\r\n if(tmp != undefined)\r\n self.variantType1Id = tmp;\r\n if(self.isVariantMother)\r\n self.variantType2Id = -1;\r\n else {\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