{"version":3,"file":"dspmultiproduct.min.js","sources":["dspmultiproduct.ts"],"sourcesContent":["// @ts-ignore\r\nconst historyJs: Historyjs = history;\r\n\r\nnamespace eXpress.dsp {\r\n\tconst quantityQueryStringToModel = (quantityString: string) => {\r\n\r\n\t\t// partially copied from express.web.ui.website.creator.app\\express\\client\\client.ts: quantityQueryStringToModel\r\n\t\t// I guess the site does not use the same core lib of js files.\r\n\r\n\t\t// Allow 2 formats\r\n\t\t// - just quantity number\r\n\t\t// - [AttributeCode]|[Quantity],[AttributeCode]|[Quantity], eg: s|2,xl|1\r\n\t\tif (quantityString && (quantityString.indexOf('|') >= 0 || quantityString.indexOf(',') >= 0)) {\r\n\t\t\treturn quantityString.split(',').map(part => {\r\n\t\t\t\tconst parts = part.split('|');\r\n\t\t\t\tconst attribute = parts.length > 0 ? parts[0] : part;\r\n\t\t\t\tconst quantity = parts.length > 0 ? parseInt(parts[1], 10) || 1 : 1;\r\n\t\t\t\treturn new Quantity(attribute.toLowerCase(), quantity);\r\n\t\t\t});\r\n\t\t} else if (!isNaN(parseInt(quantityString, 10))) {\r\n\t\t\treturn [new Quantity(undefined, parseInt(quantityString, 10))];\r\n\t\t}\r\n\r\n\t\t// incorrect format, no quantities\r\n\t\treturn [];\r\n\t};\r\n\r\n\t/**\r\n\t *\r\n\t * @param {Quantity[]} quantities\r\n\t * @param {IDesignDetail} designDetail\r\n\t * @returns {boolean} true if valid.\r\n\t */\r\n\tconst validateQuantities = (quantities: Quantity[], designDetail: core.IDesignDetail) => {\r\n\t\tlet acceptedAttributeCodes: (string | null)[];\r\n\r\n\t\tif (designDetail.attributeDetails && designDetail.attributeDetails.values) {\r\n\t\t\t// because lowercase everywhere.\r\n\t\t\tacceptedAttributeCodes = designDetail.attributeDetails.values.map(value => value.code.toLowerCase());\r\n\t\t} else {\r\n\t\t\t// literally: accept null as attribute value\r\n\t\t\tacceptedAttributeCodes = [null];\r\n\t\t}\r\n\r\n\t\treturn quantities.every(quantity => {\r\n\t\t\treturn acceptedAttributeCodes.indexOf(quantity.attribute) > -1;\r\n\t\t});\r\n\t};\r\n\r\n\r\n\t/* end IDesignDetail */\r\n\r\n\texport interface IDspAppDependencies {\r\n\t\torderService: eXpress.services.OrderService;\r\n\t\tcontentService: eXpress.services.ContentService;\r\n\t}\r\n\r\n\tenum AdvantageType {\r\n\t\tFixedAmountOnProduct,\r\n\t\tPercentageOnProduct\r\n\t}\r\n\r\n\texport class AppliedAdvantage {\r\n\t\tpublic description: string;\r\n\t\tpublic amount: number;\r\n\t}\r\n\r\n\texport class Quantity {\r\n\t\tpublic attribute: string | null;\r\n\t\tpublic quantity: number;\r\n\r\n\t\tpublic constructor(attribute: string | null = null, quantity = 0) {\r\n\t\t\tthis.attribute = attribute;\r\n\t\t\tthis.quantity = quantity;\r\n\t\t}\r\n\r\n\t\tpublic toString(): string {\r\n\t\t\tif (this.attribute)\r\n\t\t\t\treturn this.attribute + '|' + this.quantity.toString();\r\n\t\t\telse\r\n\t\t\t\treturn this.quantity.toString();\r\n\t\t}\r\n\t}\r\n\r\n\texport interface IDropDownData {\r\n\t\tproductCode: string;\r\n\t\tpredefinedProductName: string;\r\n\t}\r\n\r\n\texport class CurrentOption {\r\n\t\tpublic code: string;\r\n\t\tpublic price: number;\r\n\t\tpublic name: string;\r\n\t\tpublic optionGroup: string;\r\n\t\tpublic alternativeOptionGroup: string;\r\n\t}\r\n\r\n\texport class DspApp extends eXpress.core.CustomHtmlElementsApp {\r\n\t\tprivate context: core.IAppContext;\r\n\t\tprivate pageContext: core.IDspMultiProductPageContext;\r\n\t\tprivate headerHeight: number;\r\n\t\tprivate mainProductCategoryGroupCode?: string;\r\n\t\tprivate occasion?: string;\r\n\t\tprivate purpose?: string;\r\n\t\tprivate theme?: string;\r\n\t\tprivate options?: string;\r\n\t\tprivate crossSellFrom?: string;\r\n\t\tprivate preselectOccasion?: string;\r\n\t\tprivate occasionPackshot?: string;\r\n\t\tprivate purposePackshot?: string;\r\n\t\tprivate productCode: string[];\r\n\t\tprivate orientation?: string;\r\n\t\tprivate predefinedProductCategory: string[];\r\n\t\tprivate searchColor: string[];\r\n\t\tprivate imageCount: number[] = [];\r\n\t\tprivate price: number[] = [];\r\n\t\tprivate pageNumber: number;\r\n\t\tprivate pageSize: number;\r\n\t\tprivate ownDesign: boolean;\r\n\t\tprivate sortMethod?: string;\r\n\t\tprivate designGroup?: string;\r\n\t\tprivate gender?: string;\r\n\t\tprivate suppressScrollToAccordion: boolean;\r\n\r\n\t\tprivate currentOption1?: CurrentOption;\r\n\t\tprivate currentOption2?: CurrentOption;\r\n\t\tprivate currentQuantities: Quantity[] = [];\r\n\r\n\t\tprivate currentProductCode?: string;\r\n\t\tprivate currentPvc: string;\r\n\t\tprivate currentPredefinedProductName?: string;\r\n\t\tprivate currentProductName?: string;\r\n\t\tprivate currentCategoryList?: string;\r\n\t\tprivate currentCartId?: string;\r\n\t\tprivate currentAttribute?: string;\r\n\r\n\t\tprivate productHasQuantityBreakOnlyInMa: boolean;\r\n\r\n\t\tprivate defaultOptions: string[]; // This is the option(s) that should always be checked (when available)\r\n\t\tprivate optionGroup: string;\r\n\r\n\t\tprivate windowWidth: number;\r\n\r\n\t\t/** wrapper around AJAX request that will also return if it is the last requested result */\r\n\t\tprivate filterResultsRequester: utils.DetectLast<1, core.IGetDesignsResult>;\r\n\r\n\t\tprotected services: services.Services;\r\n\t\tprivate orderService: services.OrderService;\r\n\t\tprivate contentService: services.ContentService;\r\n\t\tprivate contentManager: eXpress.core.ContentManager;\r\n\r\n\t\tprivate designs: { [pdp: string]: core.IDesign } = {};\r\n\t\tprivate totalDesignCount = 0;\r\n\t\tprivate designFilterChanged: boolean;\r\n\t\tprivate designFilterCount?: number;\r\n\t\tprivate deviceIsMobile = false;\r\n\t\tprivate previousProductGroupAlternatives: core.IProductAlternative[];\r\n\t\tprivate activeProductGroupAlternatives: core.IProductAlternative[] = [];\r\n\r\n\t\tprivate readonly body: JQuery;\r\n\t\tprivate readonly toggle: JQuery;\r\n\t\tprivate readonly dspItemList: JQuery;\r\n\t\tprivate readonly dspItemListFooter: JQuery;\r\n\t\tprivate readonly dspContentFilter: JQuery;\r\n\t\tprivate readonly filterChoice: JQuery;\r\n\t\tprivate readonly filterToggle: JQuery;\r\n\t\tprivate readonly acceptFilter: JQuery;\r\n\t\tprivate readonly acceptSorting: JQuery;\r\n\t\tprivate readonly showAllFilters: JQuery;\r\n\t\tprivate readonly deleteTagFiler: JQuery;\r\n\t\tprivate readonly deleteAllTagFilters: JQuery;\r\n\t\tprivate readonly filterSelectionTags: JQuery;\r\n\t\tprivate readonly filterSorting: JQuery;\r\n\t\tprivate readonly slider: JQuery;\r\n\t\tprivate readonly activeTag: JQuery;\r\n\t\tprivate readonly remark: JQuery;\r\n\r\n\t\tprivate constellations: { [key: string]: core.IConstellation[] } = {};\r\n\r\n\t\t/**\r\n\t\t *\r\n\t\t * @param {IDspAppDependencies} deps\r\n\t\t * @param {services.Services} services\r\n\t\t * @param {core.IAppContext} context\r\n\t\t * @param {IDspMultiProductPageContext} pageContext\r\n\t\t * @returns\r\n\t\t */\r\n\t\tconstructor(deps: IDspAppDependencies, services: services.Services, context: core.IAppContext, pageContext: core.IDspMultiProductPageContext) {\r\n\t\t\tsuper();\r\n\t\t\tthis.context = context;\r\n\t\t\tthis.pageContext = pageContext;\r\n\t\t\tthis.services = services;\r\n\t\t\tthis.orderService = deps.orderService;\r\n\t\t\tthis.contentService = deps.contentService;\r\n\t\t\tthis.contentManager = new core.ContentManager(this.contentService, GetCookie(\"slbls\").toLowerCase() === \"true\");\r\n\r\n\t\t\tthis.windowWidth = $(window).width() || 0;\r\n\r\n\t\t\t// loads initial filters & does a refresh\r\n\t\t\tthis.mainProductCategoryGroupCode = eXpress.utils.getQueryStringParameter(\"pcg\");\r\n\r\n\t\t\tif (this.pageContext.enableOccasionFilter) {\r\n\t\t\t\tthis.occasion = eXpress.utils.getQueryStringParameter(\"occ\");\r\n\t\t\t}\r\n\t\t\tif (this.pageContext.enablePurposeFilter) {\r\n\t\t\t\tthis.purpose = eXpress.utils.getQueryStringParameter(\"purpose\");\r\n\t\t\t}\r\n\t\t\tif (eXpress.utils.getQueryStringParameter(\"theme\")) {\r\n\t\t\t\tthis.theme = eXpress.utils.getQueryStringParameter(\"theme\");\r\n\t\t\t}\r\n\t\t\tif (eXpress.utils.getQueryStringParameter(\"options\")) {\r\n\t\t\t\tthis.options = eXpress.utils.getQueryStringParameter(\"options\");\r\n\t\t\t}\r\n\t\t\tif (eXpress.utils.getQueryStringParameter(\"crossSellFrom\")) {\r\n\t\t\t\tthis.crossSellFrom = eXpress.utils.getQueryStringParameter(\"crossSellFrom\");\r\n\t\t\t}\r\n\t\t\tif (eXpress.utils.getQueryStringParameter(\"preocc\")) {\r\n\t\t\t\tthis.preselectOccasion = eXpress.utils.getQueryStringParameter(\"preocc\");\r\n\t\t\t}\r\n\r\n\t\t\tif (eXpress.utils.getQueryStringParameter(\"p\"))\r\n\t\t\t\tthis.productCode = eXpress.utils.getQueryStringParameter(\"p\").split(',');\r\n\t\t\telse\r\n\t\t\t\tthis.productCode = [];\r\n\r\n\t\t\tif (this.pageContext.enableOrientationFilter) {\r\n\t\t\t\tthis.orientation = eXpress.utils.getQueryStringParameter(\"or\");\r\n\t\t\t}\r\n\t\t\tif (this.pageContext.enablePredefinedProductCategoryFilter) {\r\n\t\t\t\tif (eXpress.utils.getQueryStringParameter(\"ds\"))\r\n\t\t\t\t\tthis.predefinedProductCategory = eXpress.utils.getQueryStringParameter(\"ds\").split(',');\r\n\t\t\t\telse\r\n\t\t\t\t\tthis.predefinedProductCategory = [];\r\n\t\t\t}\r\n\t\t\tif (this.pageContext.enableColorFilter) {\r\n\t\t\t\tif (eXpress.utils.getQueryStringParameter(\"sc\"))\r\n\t\t\t\t\tthis.searchColor = eXpress.utils.getQueryStringParameter(\"sc\").split(',');\r\n\t\t\t\telse\r\n\t\t\t\t\tthis.searchColor = [];\r\n\t\t\t}\r\n\t\t\tif (this.pageContext.enableNumberOfPhotosFilter) {\r\n\t\t\t\tif (eXpress.utils.getQueryStringParameter(\"ic\")) {\r\n\t\t\t\t\tconst strImageCount = eXpress.utils.getQueryStringParameter(\"ic\").split(',');\r\n\t\t\t\t\tthis.imageCount = strImageCount.map(ic => parseInt(ic, 10))\r\n\t\t\t\t\t\t.filter(x => !isNaN(x));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (this.pageContext.enablePriceFilter) {\r\n\t\t\t\tif (eXpress.utils.getQueryStringParameter(\"pr\")) {\r\n\t\t\t\t\tconst strPrice = eXpress.utils.getQueryStringParameter(\"pr\").split(',');\r\n\t\t\t\t\tthis.price = strPrice.map(p => parseFloat(p))\r\n\t\t\t\t\t\t.filter(x => !isNaN(x));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (this.pageContext.enableGenderFilter) {\r\n\t\t\t\tthis.gender = eXpress.utils.getQueryStringParameter(\"g\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.currentProductCode = eXpress.utils.getQueryStringParameter(\"cpc\");\r\n\t\t\tthis.currentPredefinedProductName = eXpress.utils.getQueryStringParameter(\"cppn\");\r\n\t\t\tthis.currentCartId = eXpress.utils.getQueryStringParameter(\"cartid\");\r\n\t\t\tthis.currentAttribute = eXpress.utils.getQueryStringParameter(\"attr\");\r\n\t\t\tif (!this.currentAttribute) {\r\n\t\t\t\t// The attribute was not passed through the attr parameter, get it from the pvc instead\r\n\t\t\t\tconst tempPvc = eXpress.utils.getQueryStringParameter(\"pvc\");\r\n\t\t\t\tif (tempPvc) {\r\n\t\t\t\t\tconst pos = tempPvc.indexOf(\"_\");\r\n\t\t\t\t\tif (pos >= 0)\r\n\t\t\t\t\t\tthis.currentAttribute = tempPvc.substring(pos + 1).toLowerCase();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.sortMethod = eXpress.utils.getQueryStringParameter(\"sortmethod\");\r\n\t\t\tthis.designGroup = eXpress.utils.getQueryStringParameter(\"dg\");\r\n\r\n\t\t\t// if no sortmethod, and this is a mobile device, set 'rankingMobile' as sortmethod.\r\n\t\t\tif (!this.sortMethod && eXpress.helpers.isMobileSize) {\r\n\t\t\t\tthis.sortMethod = \"rankingmobile\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.ownDesign = false;\r\n\t\t\tif (eXpress.utils.getQueryStringParameter(\"cod\") && eXpress.utils.getQueryStringParameter(\"cod\").toLowerCase() === 'true')\r\n\t\t\t\tthis.ownDesign = true;\r\n\r\n\t\t\tif (eXpress.utils.getQueryStringParameter(\"options\"))\r\n\t\t\t\tthis.defaultOptions = eXpress.utils.getQueryStringParameter(\"options\").split(',');\r\n\t\t\telse\r\n\t\t\t\tthis.defaultOptions = [];\r\n\r\n\t\t\tthis.optionGroup = eXpress.utils.getQueryStringParameter(\"optiongroup\");\r\n\r\n\t\t\tthis.pageNumber = 1;\r\n\t\t\tif (this.pageContext.amountOfDesignsToFetch)\r\n\t\t\t\tthis.pageSize = this.pageContext.amountOfDesignsToFetch;\r\n\t\t\telse\r\n\t\t\t\tthis.pageSize = 40;\r\n\r\n\t\t\tthis.currentOption1 = undefined;\r\n\t\t\tthis.currentOption2 = undefined;\r\n\r\n\t\t\t// warning: until a designDetail is known, these cannot be validated\r\n\t\t\tthis.currentQuantities = quantityQueryStringToModel(eXpress.utils.getQueryStringParameter('quantities'));\r\n\r\n\t\t\tthis.headerHeight = eXpress.utils.getHeaderHeight();\r\n\r\n\t\t\tthis.filterResultsRequester = new utils.DetectLast(() => {\r\n\r\n\t\t\t\t// We call the designs without filters if ownDesign is true.\r\n\t\t\t\treturn this.services.selectionPage.getDesignsAsync(\r\n\t\t\t\t\tthis.context.pointOfSaleId,\r\n\t\t\t\t\tthis.context.languageCode,\r\n\t\t\t\t\tthis.mainProductCategoryGroupCode,\r\n\t\t\t\t\tthis.ownDesign ? undefined : this.occasion,\r\n\t\t\t\t\tthis.ownDesign ? undefined : this.purpose,\r\n\t\t\t\t\tthis.ownDesign ? [] : this.productCode,\r\n\t\t\t\t\tthis.ownDesign ? undefined : this.orientation,\r\n\t\t\t\t\tthis.ownDesign ? [] : this.predefinedProductCategory,\r\n\t\t\t\t\tthis.ownDesign ? [] : this.searchColor,\r\n\t\t\t\t\tthis.ownDesign ? [] : this.imageCount,\r\n\t\t\t\t\tthis.ownDesign ? [] : this.price,\r\n\t\t\t\t\tthis.pageNumber,\r\n\t\t\t\t\tthis.pageSize,\r\n\t\t\t\t\tthis.defaultOptions,\r\n\t\t\t\t\tthis.optionGroup,\r\n\t\t\t\t\tthis.ownDesign,\r\n\t\t\t\t\tthis.sortMethod,\r\n\t\t\t\t\tthis.designGroup,\r\n\t\t\t\t\tthis.ownDesign ? undefined : this.gender,\r\n\t\t\t\t\tutils.getQueryStringParameter('debug') ? true : false,\r\n\t\t\t\t\tthis.preselectOccasion\r\n\t\t\t\t);\r\n\t\t\t});\r\n\r\n\r\n\t\t\tthis.dspItemList = $(\".dsp-item-list\");\r\n\t\t\tthis.dspItemListFooter = $(\".dsp-item-list-footer\");\r\n\t\t\tthis.dspContentFilter = $(\".dsp-content-filter\");\r\n\t\t\tthis.filterChoice = $(\".filter-choice\");\r\n\t\t\tthis.filterToggle = $(\".filter-toggle\");\r\n\t\t\tthis.acceptFilter = $(\".accept-filter\");\r\n\t\t\tthis.acceptSorting = $(\".accept-sorting\");\r\n\t\t\tthis.showAllFilters = $(\".show-all-filters\");\r\n\t\t\tthis.deleteTagFiler = $(\".tag-delete-this-filter\");\r\n\t\t\tthis.deleteAllTagFilters = $(\".tag-delete-all-filters\");\r\n\t\t\tthis.filterSelectionTags = $(\".filter-selection-tags\");\r\n\t\t\tthis.filterSorting = $(\".filter-sorting\");\r\n\t\t\tthis.slider = $(\".slider\");\r\n\t\t\tthis.activeTag = $('.tag-active');\r\n\t\t\tthis.remark = $(\".remark\");\r\n\t\t\tthis.toggle = $(\".toggle\");\r\n\t\t\tthis.body = $(\"body\");\r\n\t\t}\r\n\r\n\t\tpublic start(): void {\r\n\t\t\tthis.clear();\r\n\r\n\t\t\tthis.loadLabels()\r\n\t\t\t\t.always(() => this.loadAdditionalIcons())\r\n\t\t\t\t.always(() => {\r\n\t\t\t\t\tcore.showLoadingDialogAsync (\r\n\t\t\t\t\t\tthis.fetchPageAsync(1)\r\n\t\t\t\t\t\t\t.then(designKeys => {\r\n\t\t\t\t\t\t\t\tif (designKeys) {\r\n\t\t\t\t\t\t\t\t\tthis.addItems(designKeys, true);\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tthis.hideAndShowForOwnDesign();\r\n\t\t\t\t\t\t\t\tthis.addHandlers();\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tpublic loadAdditionalIcons() {\r\n\t\t\treturn this.contentManager.getIconsByNameAsync([\"paintbrush\"]);\r\n\t\t}\r\n\r\n\t\tpublic loadLabels() {\r\n\t\t\treturn this.contentManager.getLabelsAsync (\r\n\t\t\t\t[\r\n\t\t\t\t\t\"Label.DspMulti.ChangeBackground.OpenDSP\",\r\n\t\t\t\t\t\"Label.DspMulti.ChangeBackground.ListDSP\",\r\n\t\t\t\t\t\"Label.DesignSelection.Apply\",\r\n\t\t\t\t\t\"Label.DesignSelection.Back\",\r\n\t\t\t\t\t\"Label.DesignSelection.AllFilters\",\r\n\t\t\t\t\t\"Label.DesignSelection.HideFilters\",\r\n\t\t\t\t\t\"Label.DesignSelection.FilterAmount\",\r\n\t\t\t\t\t\"Label.DspMulti.PriceStartingFrom\"\r\n\t\t\t\t]\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tprivate showCurrentDetail(): void {\r\n\t\t\tif (this.currentProductCode && this.currentPredefinedProductName) {\r\n\t\t\t\t// Check if it is already on the page, if not, add it as the first\r\n\t\t\t\tconst $existingTile = $(\".dsp-item-list article[data-productcode='\" + this.currentProductCode + \"'][data-predefinedproductname='\" + this.currentPredefinedProductName + \"']\");\r\n\t\t\t\tif ($existingTile.length > 0) {\r\n\t\t\t\t\tif (!$existingTile.hasClass('disabled'))\r\n\t\t\t\t\t\tthis.showDetailClick($existingTile, false, true);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tconst $template = $('.template-container .item');\r\n\t\t\t\t\tconst $new = $template.clone();\r\n\r\n\r\n\t\t\t\t\tthis.GetOrLoadDesignAsync(this.currentPredefinedProductName, this.currentProductCode)\r\n\t\t\t\t\t\t.then((design) => {\r\n\t\t\t\t\t\t\tif (!design.temporaryUnavailable) {\r\n\t\t\t\t\t\t\t\tconst $newTile = this.createTile(design, $new, false, eXpress.services.DSPType.ListDSP);\r\n\t\t\t\t\t\t\t\tthis.dspItemList.prepend($newTile);\r\n\t\t\t\t\t\t\t\tthis.showDetailClick($newTile, false, true);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprotected addHandlers(): void {\r\n\t\t\tsuper.addHandlers();\r\n\r\n\t\t\t$(window).resize(() => {\r\n\t\t\t\t//if filtercontainer is open and has property position = 'fixed' then deviceIsMobile = true\r\n\t\t\t\tthis.deviceIsMobile = $(\".filter-container.open\").css(\"position\") === \"fixed\";\r\n\r\n\t\t\t\tconst newWindowWidth = $(window).width() || 0;\r\n\t\t\t\tif (this.windowWidth !== newWindowWidth) {\r\n\t\t\t\t\tthis.windowWidth = newWindowWidth;\r\n\t\t\t\t\tthis.repositionDetail();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.dspItemList.on('click', '.item:not(.disabled) .a-icon', e => {\r\n\t\t\t\tthis.stopBubble(e, true);\r\n\t\t\t\tconst $target = $(e.currentTarget);\r\n\t\t\t\tif ($target.parent().is('.item-icons-center')) {\r\n\t\t\t\t\tthis.showDetailClick($target.closest('.item'), false);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconst $tile = $target.closest('article');\r\n\t\t\t\t\tthis.hideDetailClick(false, false);\r\n\t\t\t\t\tthis.changeTileClicked($tile, $target.attr(\"data-predefinedproductname\")!, $target.attr(\"data-productcode\")!);\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\r\n\t\t\tthis.dspItemListFooter.on('click', 'button.main', () => this.showMore());\r\n\r\n\t\t\t/* Filters & Sorting */\r\n\r\n\t\t\t$(\".toggle.main\").on('click', () => this.body.removeClass(\"filtering-scrolling\"));\r\n\r\n\t\t\t$(document).on(\"click\", \".filter-toggle\", () => {\r\n\t\t\t\tif (this.filterChoice.hasClass(\"open\")) {\r\n\t\t\t\t\tthis.body.addClass(\"filtering-scrolling\");\r\n\t\t\t\t\t$('.dsp-result-bottom span').html(this.contentManager.getLabel(\"Label.DesignSelection.Back\", \"Back\"));\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t$(document).on(\"click\", '#layerback, #layerback', e => this.stopBubble(e, false));\r\n\r\n\t\t\tthis.showAllFilters.on(\"click\", e => {\r\n\t\t\t\tconst $target = $(e.currentTarget);\r\n\t\t\t\t$target.toggleClass(\"show-all-filters hide-all-filters\");\r\n\t\t\t\tthis.filterChoice.toggleClass(\"all-filters-active\");\r\n\t\t\t\t$target.find(\".show-all-filters-text\").html($target.hasClass('show-all-filters')\r\n\t\t\t\t\t? this.contentManager.getLabel(\"Label.DesignSelection.AllFilters\", \"All filters\")\r\n\t\t\t\t\t: this.contentManager.getLabel(\"Label.DesignSelection.HideFilters\", \"Hide\"));\r\n\t\t\t\t$(\".multiselect\").each(function () {\r\n\t\t\t\t\tif ($(this).hasClass(\"hidden\"))\r\n\t\t\t\t\t\t$(this).toggleClass(\"hidden temp-visible\");\r\n\t\t\t\t\telse if ($(this).hasClass(\"temp-visible\"))\r\n\t\t\t\t\t\t$(this).toggleClass(\"temp-visible hidden\");\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\tthis.body.on(\"click\", e => {\r\n\t\t\t\tconst $target = $(e.currentTarget).find('.selectBox.open');\r\n\t\t\t\tif ($target && this.designFilterChanged) {\r\n\t\t\t\t\tthis.acceptFiltering($target);\r\n\t\t\t\t\tthis.designFilterChanged = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.toggle.on(\"click\", () => {\r\n\t\t\t\tthis.filterToggle.toggleClass(\"open\");\r\n\t\t\t\tthis.filterChoice.toggleClass(\"open\");\r\n\t\t\t\t$(\".filter-container\").toggleClass(\"open\");\r\n\r\n\t\t\t\t$(\".main.small.filter-toggle\").prop('disabled', false);\r\n\t\t\t\t$(\".button.own-designs\").show();\r\n\t\t\t});\r\n\r\n\t\t\tthis.acceptFilter.on(\"click\", e => {\r\n\t\t\t\tthis.stopBubble(e, true);\r\n\t\t\t\tif (this.designFilterChanged)\r\n\t\t\t\t\tthis.acceptFiltering($(e.currentTarget));\r\n\t\t\t\tthis.designFilterChanged = false;\r\n\t\t\t});\r\n\r\n\t\t\t$(\".filter-choice .checkboxes .slider\").on(\"click\", e => this.stopBubble(e, false));\r\n\r\n\t\t\t$(\".filter-choice .selectBox\").on(\"click\", e => {\r\n\t\t\t\tconst $requester = $(e.target);\r\n\t\t\t\tif ($requester.hasClass(\"open\"))\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\telse if ($(\".filter-container\").hasClass(\"open\") && !$requester.hasClass(\"tag-delete-this-filter\"))\r\n\t\t\t\t\t$('.accept-filter,.accept-sorting').html(this.contentManager.getLabel(\"Label.DesignSelection.Back\"));\r\n\t\t\t});\r\n\r\n\t\t\t$(\".multiselect:not(.filter-sorting) > div.selectbox-choices\").on('click', e => {\r\n\t\t\t\tif (!$(e.target).is('.accept-filter')) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t$(\".filter-choice .checkboxes label\").on(\"click\", e => {\r\n\t\t\t\tthis.stopBubble(e, false);\r\n\t\t\t\tconst $target = $(e.currentTarget);\r\n\t\t\t\tconst $parent = $target.closest('.selectbox-choices');\r\n\t\t\t\tconst $multiselect = $(e.target).closest('.multiselect');\r\n\t\t\t\tconst isSorting = $multiselect.hasClass(\"filter-sorting\");\r\n\t\t\t\tconst filter = $multiselect.attr('data-sp-selectcategory')!;\r\n\t\t\t\tconst value = $target.attr('data-sp-filter-tag')!;\r\n\t\t\t\tlet itemsChecked = false;\r\n\r\n\t\t\t\tif ($parent.hasClass('selectbox-choices-radio')) {\r\n\t\t\t\t\t// Single select mode\r\n\t\t\t\t\tif (!$target.hasClass('checked')) {\r\n\t\t\t\t\t\t// Uncheck all others\r\n\t\t\t\t\t\titemsChecked = true;\r\n\t\t\t\t\t\t$parent.find('label').removeClass('checked');\r\n\t\t\t\t\t\t$target.addClass('checked');\r\n\t\t\t\t\t\tif (!this.deviceIsMobile && !isSorting)\r\n\t\t\t\t\t\t\tthis.changeFilter(filter, value);\r\n\t\t\t\t\t\telse if (isSorting)\r\n\t\t\t\t\t\t\tthis.changeSorting(value);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\titemsChecked = false;\r\n\t\t\t\t\t\t$parent.find('label').removeClass('checked');\r\n\t\t\t\t\t\tif (!this.deviceIsMobile && !isSorting)\r\n\t\t\t\t\t\t\tthis.changeFilter(filter, '');\r\n\t\t\t\t\t\telse if (isSorting)\r\n\t\t\t\t\t\t\tthis.changeSorting(value);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (this.deviceIsMobile)\r\n\t\t\t\t\t\tthis.loadFilterCount($multiselect);\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t$parent.hide();\r\n\t\t\t\t\t\t$('.selectBox').removeClass('open');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// Multi select mode\r\n\t\t\t\t\t$target.toggleClass('checked');\r\n\t\t\t\t\tconst values = [] as string[];\r\n\t\t\t\t\t$parent.find('label.checked').each(function () {\r\n\t\t\t\t\t\tvalues.push($(this).attr('data-sp-filter-tag')!);\r\n\t\t\t\t\t});\r\n\t\t\t\t\titemsChecked = values.length > 0;\r\n\r\n\t\t\t\t\t// List not closed, update filter Count\r\n\t\t\t\t\tthis.loadFilterCount($multiselect);\r\n\t\t\t\t}\r\n\t\t\t\tthis.setFilterState($multiselect, itemsChecked);\r\n\t\t\t});\r\n\r\n\t\t\tthis.deleteTagFiler.on('click', e => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tconst $target = $(e.currentTarget);\r\n\t\t\t\tconst filterName = $target.closest('.multiselect').attr('data-sp-selectcategory');\r\n\t\t\t\tconst $parent = $('.multiselect[data-sp-selectcategory=\"' + filterName + '\"]');\r\n\t\t\t\tconst checkedLabels = $($parent).find(\".checked\").length;\r\n\t\t\t\tlet changedSlider = false;\r\n\t\t\t\tif ($parent.hasClass('multiselect-imagecount') || $parent.hasClass('multiselect-price')) {\r\n\t\t\t\t\tconst $slider = $parent.find('.slider-range');\r\n\t\t\t\t\tconst min = parseFloat($parent.find('.slider-min').attr('data-value')!);\r\n\t\t\t\t\tconst max = parseFloat($parent.find('.slider-max').attr('data-value')!);\r\n\r\n\t\t\t\t\tif ($parent.hasClass('multiselect-imagecount')) {\r\n\t\t\t\t\t\tif ($parent.find('.slider-min input').val() !== min.toString() ||\r\n\t\t\t\t\t\t\t$parent.find('.slider-max input').val() !== max.toString()) {\r\n\t\t\t\t\t\t\tchangedSlider = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t$parent.find('.slider-min input').val(min.toString());\r\n\t\t\t\t\t\t$parent.find('.slider-max input').val(max.toString());\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tif ($parent.find('.slider-min input').val() !== utils.displayPrice(min, false, false, this.pageContext) ||\r\n\t\t\t\t\t\t\t$parent.find('.slider-max input').val() !== utils.displayPrice(max, false, false, this.pageContext)) {\r\n\t\t\t\t\t\t\tchangedSlider = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t$parent.find('.slider-min input').val(utils.displayPrice(min, false, false, this.pageContext));\r\n\t\t\t\t\t\t$parent.find('.slider-max input').val(utils.displayPrice(max, false, false, this.pageContext));\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$slider.slider(\"values\", 0, min);\r\n\t\t\t\t\t$slider.slider(\"values\", 1, max);\r\n\t\t\t\t\t$parent.find(\".selectBox > span.filter-info\").html(\"\");\r\n\t\t\t\t\t$(\".cat-\" + filterName + \" span.value\").html(\"\");\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t$parent.find('label.checked').each(function () {\r\n\t\t\t\t\t\t$(this).removeClass('checked');\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tthis.setFilterState($parent, false);\r\n\r\n\t\t\t\tif (checkedLabels > 0 || changedSlider) {\r\n\t\t\t\t\tthis.designFilterChanged = true;\r\n\t\t\t\t\t$('.accept-filter,.accept-sorting').html(this.contentManager.getLabel(\"Label.DesignSelection.Apply\", \"Apply\"));\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.deleteAllTagFilters.on('click', () => {\r\n\t\t\t\t$('.filter-choice label.checked').removeClass('checked');\r\n\t\t\t\tthis.resetSliders();\r\n\t\t\t\t$('.filter-selection-tags .tag-active').not('.empty').not('.tag-delete-all-designs').remove();\r\n\t\t\t\tthis.removeFilters();\r\n\t\t\t});\r\n\r\n\t\t\tthis.filterSelectionTags.on('click', '.tag-active', e => {\r\n\t\t\t\tconst $target = $(e.currentTarget);\r\n\t\t\t\tif ($target.hasClass('tag-delete-all-designs')) {\r\n\t\t\t\t\t// Removes the selected state\r\n\t\t\t\t\t$('.filter-choice label.checked').removeClass('checked');\r\n\t\t\t\t\tthis.resetSliders();\r\n\t\t\t\t\t$('.filter-selection-tags .tag-active').not('.empty').not('.tag-delete-all-designs').remove();\r\n\t\t\t\t\tthis.removeFilters();\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tconst filterName = $target.attr('data-sp-selectcategory')!;\r\n\t\t\t\t\tconst filterValue = $target.attr('data-sp-selecttag');\r\n\t\t\t\t\tconst $parent = $('.multiselect[data-sp-selectcategory=\"' + filterName + '\"]');\r\n\t\t\t\t\tconst $filter = $parent.find('label[data-sp-filter-tag=\"' + filterValue + '\"]');\r\n\t\t\t\t\tconst values = [] as string[];\r\n\r\n\t\t\t\t\tif ($parent.hasClass('multiselect-imagecount') || $parent.hasClass('multiselect-price')) {\r\n\t\t\t\t\t\tconst $slider = $parent.find('.slider-range');\r\n\t\t\t\t\t\tconst min = parseFloat($parent.find('.slider-min').attr('data-value')!);\r\n\t\t\t\t\t\tconst max = parseFloat($parent.find('.slider-max').attr('data-value')!);\r\n\t\t\t\t\t\tif ($parent.hasClass('multiselect-imagecount')) {\r\n\t\t\t\t\t\t\t$parent.find('.slider-min input').val(min.toString());\r\n\t\t\t\t\t\t\t$parent.find('.slider-max input').val(max.toString());\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t$parent.find('.slider-min input').val(utils.displayPrice(min, false, false, this.pageContext));\r\n\t\t\t\t\t\t\t$parent.find('.slider-max input').val(utils.displayPrice(max, false, false, this.pageContext));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t$slider.slider(\"values\", 0, min);\r\n\t\t\t\t\t\t$slider.slider(\"values\", 1, max);\r\n\t\t\t\t\t\t$target.remove();\r\n\t\t\t\t\t\tthis.changeFilter(filterName, []);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t$filter.removeClass('checked');\r\n\t\t\t\t\t\t$parent.find('label.checked').each(function () {\r\n\t\t\t\t\t\t\tvalues.push($(this).attr('data-sp-filter-tag')!);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tthis.changeFilter(filterName, values);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.setFilterState($parent, values && values.length > 0);\r\n\t\t\t\t\t$target.remove();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.slider.each((index, element) => {\r\n\t\t\t\tconst $element = $(element);\r\n\t\t\t\tconst $multiselect = $element.closest('.multiselect');\r\n\t\t\t\tconst min = parseFloat($element.find('.slider-min').attr('data-value')!);\r\n\t\t\t\tconst max = parseFloat($element.find('.slider-max').attr('data-value')!);\r\n\t\t\t\tlet startMin = min;\r\n\t\t\t\tlet startMax = max;\r\n\t\t\t\tconst startAttr = $element.attr('data-start');\r\n\t\t\t\tif (startAttr) {\r\n\t\t\t\t\tconst startSplit = startAttr.split(',');\r\n\t\t\t\t\tstartMin = parseFloat(startSplit[0]);\r\n\t\t\t\t\tstartMax = parseFloat(startSplit[1]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst step = parseFloat($element.attr('data-step')!);\r\n\t\t\t\tconst minInput = $element.find('.slider-min input');\r\n\t\t\t\tconst maxInput = $element.find('.slider-max input');\r\n\t\t\t\tif ($multiselect.attr('data-sp-selectcategory') === 'price') {\r\n\t\t\t\t\tminInput.val(utils.displayPrice(startMin, false, false, this.pageContext));\r\n\t\t\t\t\tmaxInput.val(utils.displayPrice(startMax, false, false, this.pageContext));\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tminInput.val(startMin);\r\n\t\t\t\t\tmaxInput.val(startMax);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst $slider = $element.find('.slider-range');\r\n\t\t\t\t$slider.slider({\r\n\t\t\t\t\trange: true,\r\n\t\t\t\t\tstep: step,\r\n\t\t\t\t\tmin: min,\r\n\t\t\t\t\tmax: max,\r\n\t\t\t\t\tvalues: [startMin, startMax],\r\n\t\t\t\t\tchange: (_event, ui) => {\r\n\t\t\t\t\t\tif (ui.handle && ui.values) {\r\n\t\t\t\t\t\t\tconst $slider = $(ui.handle).closest('.slider');\r\n\t\t\t\t\t\t\tconst $multiselect = $(ui.handle).closest('.multiselect');\r\n\t\t\t\t\t\t\tif ($multiselect.attr('data-sp-selectcategory') === 'price') {\r\n\t\t\t\t\t\t\t\t$slider.find('.slider-min input').val(utils.displayPrice(ui.values[0], false, false, this.pageContext));\r\n\t\t\t\t\t\t\t\t$slider.find('.slider-max input').val(utils.displayPrice(ui.values[1], false, false, this.pageContext));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t$slider.find('.slider-min input').val(ui.values[0]);\r\n\t\t\t\t\t\t\t\t$slider.find('.slider-max input').val(ui.values[1]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis.setFilterState($multiselect, min !== ui.values[0] || max !== ui.values[1]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tslide: (_event, ui) => {\r\n\t\t\t\t\t\tif (ui.handle && ui.values) {\r\n\t\t\t\t\t\t\tconst $slider = $(ui.handle).closest('.slider');\r\n\t\t\t\t\t\t\tconst $multiselect = $(ui.handle).closest('.multiselect');\r\n\t\t\t\t\t\t\tif ($multiselect.attr('data-sp-selectcategory') === 'price') {\r\n\t\t\t\t\t\t\t\t$slider.find('.slider-min input').val(utils.displayPrice(ui.values[0], false, false, this.pageContext));\r\n\t\t\t\t\t\t\t\t$slider.find('.slider-max input').val(utils.displayPrice(ui.values[1], false, false, this.pageContext));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t$slider.find('.slider-min input').val(ui.values[0]);\r\n\t\t\t\t\t\t\t\t$slider.find('.slider-max input').val(ui.values[1]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tmaxInput.on('change', (ev) => {\r\n\t\t\t\t\tlet maxvalue = maxInput && maxInput.val() && maxInput.val()!.toString().match('^[0-9]+([,.][0-9]*)?$') ? parseFloat(maxInput.val()!.toString().replace(',', '.')) : max;\r\n\t\t\t\t\tconst minvalue = minInput && minInput.val() && minInput.val()!.toString().match('^[0-9]+([,.][0-9]*)?$') ? parseFloat(minInput.val()!.toString().replace(',', '.')) : min;\r\n\t\t\t\t\tif (maxvalue > max)\r\n\t\t\t\t\t\tmaxvalue = max;\r\n\r\n\t\t\t\t\tif (maxvalue < minvalue)\r\n\t\t\t\t\t\tmaxvalue = minvalue;\r\n\r\n\t\t\t\t\t$slider.slider('values', [minvalue, maxvalue]);\r\n\t\t\t\t\tthis.designFilterChanged = true;\r\n\t\t\t\t});\r\n\t\t\t\tminInput.on('change', (ev) => {\r\n\t\t\t\t\tconst maxvalue = maxInput && maxInput.val() && maxInput.val()!.toString().match('^[0-9]+([,.][0-9]*)?$') ? parseFloat(maxInput.val()!.toString().replace(',', '.')) : max;\r\n\t\t\t\t\tlet minvalue = minInput && minInput.val() && minInput.val()!.toString().match('^[0-9]+([,.][0-9]*)?$') ? parseFloat(minInput.val()!.toString().replace(',', '.')) : min;\r\n\r\n\t\t\t\t\tif (minvalue < min)\r\n\t\t\t\t\t\tminvalue = min;\r\n\r\n\t\t\t\t\tif (minvalue > maxvalue)\r\n\t\t\t\t\t\tminvalue = maxvalue;\r\n\r\n\t\t\t\t\t$slider.slider('values', [minvalue, maxvalue]);\r\n\t\t\t\t\tthis.designFilterChanged = true;\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\tthis.filterSorting.on('click', 'label', e => {\r\n\t\t\t\t$('.filter-sorting label').removeClass('checked');\r\n\r\n\t\t\t\tconst $target = $(e.currentTarget);\r\n\t\t\t\t$target.addClass('checked');\r\n\t\t\t\tthis.changeSorting($target.attr('data-sp-filter-tag')!);\r\n\t\t\t});\r\n\r\n\t\t\tthis.acceptSorting.on(\"click\", () => {\r\n\t\t\t\tconst $target = $('.filter-sorting .selectbox-choices .checked');\r\n\t\t\t\tthis.changeSorting($target.attr('data-sp-filter-tag')!);\r\n\t\t\t});\r\n\r\n\t\t\tthis.filterChoice.on(\"click\", \".selectBox\", e => {\r\n\t\t\t\t// Get Selected Filter element\r\n\t\t\t\tconst $multiselect = $(e.target).closest('.multiselect');\r\n\t\t\t\tthis.loadFilterCount($multiselect);\r\n\t\t\t});\r\n\r\n\t\t\t/* Own designs */\r\n\r\n\t\t\tthis.dspContentFilter.on('click', '.button.own-designs', () => this.toggleOwnDesign());\r\n\r\n\t\t\tthis.dspContentFilter.on('click', '.button.back-to-designs', () => this.toggleOwnDesign());\r\n\r\n\t\t\t/* Detail stuff */\r\n\r\n\t\t\tthis.dspItemList.on('click', '.item:not(.disabled)', e => this.showDetailClick($(e.currentTarget), false));\r\n\r\n\t\t\t$('.item-detail .dsp-next').on('click', () => {\r\n\t\t\t\tif (window.dataLayer[0].datalayerversion >= '2022-06') {\r\n\t\t\t\t\tconst gtmData = {\r\n\t\t\t\t\t\teventCategory: \"Design Selection\",\r\n\t\t\t\t\t\teventAction: this.currentProductName,\r\n\t\t\t\t\t\teventLabel: this.currentPredefinedProductName,\r\n\t\t\t\t\t\teventProduct: this.currentProductCode,\r\n\t\t\t\t\t\tevent: 'eec.detail',\r\n\t\t\t\t\t\tecommerce: {\r\n\t\t\t\t\t\t\tdetail: {\r\n\t\t\t\t\t\t\t\tactionField: {\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tproducts: [{\r\n\t\t\t\t\t\t\t\t\tid: this.currentProductCode,\r\n\t\t\t\t\t\t\t\t\tvariant: this.currentPvc,\r\n\t\t\t\t\t\t\t\t\tname: this.currentProductName,\r\n\t\t\t\t\t\t\t\t\tcategory: this.currentCategoryList,\r\n\t\t\t\t\t\t\t\t\tdimension11: this.currentPredefinedProductName\r\n\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tconst dataLayer = window.dataLayer || [];\r\n\t\t\t\t\tdataLayer.push(gtmData);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t$('.item-detail .close').on('click', () => this.hideDetailClick(true));\r\n\r\n\t\t\tthis.dspItemList.on('click', '.item-detail-choice .a-icon, .item-detail .item-detail-choice .item-constellations > span:not(.active)', (e) => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tthis.showDetailClick($(e.currentTarget), true);\r\n\t\t\t});\r\n\r\n\t\t\t// OpenDsp => alt color / alt product dropdown\r\n\t\t\tthis.dspItemList.on('click', '.item-detail .multiselect-alternatives .selectbox-choices label', (e) => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tthis.showDetailClick($(e.currentTarget), true);\r\n\t\t\t});\r\n\r\n\t\t\tthis.dspItemList.on('click', '.item-detail .item-detail-choice .item-options span', (e) => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tthis.changeOptions($(e.currentTarget));\r\n\t\t\t});\r\n\r\n\t\t\t// OpenDsp => Option Dropdown\r\n\t\t\tthis.dspItemList.on(\"click\", '.item-detail .item-options .multiselect .selectbox-choices label', (e) => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tthis.changeDspOptions($(e.currentTarget));\r\n\t\t\t});\r\n\r\n\t\t\tthis.slider.on(\"slidestop\", () => {\r\n\t\t\t\tthis.designFilterChanged = true;\r\n\t\t\t\tthis.acceptFilter.html(this.contentManager.getLabel(\"Label.DesignSelection.Apply\"));\r\n\t\t\t});\r\n\r\n\t\t\t$('.content-outer label').on(\"click\", () => {\r\n\t\t\t\tthis.designFilterChanged = true;\r\n\t\t\t\t$('.accept-filter,.accept-sorting').html(this.contentManager.getLabel(\"Label.DesignSelection.Apply\"));\r\n\t\t\t});\r\n\r\n\t\t\t$(document).on(\"keypress\", \".item-quantity input,input.quantity-input\", e => window.PreventInvalidInput($(e.currentTarget), /^[1-9]\\d*$/, e));\r\n\r\n\t\t\t$(document).on(\"keyup\", \".item-quantity input\", e => this.changeQuantity($(e.currentTarget), false));\r\n\r\n\t\t\t$(document).on(\"keyup\", \"input.quantity-input\", e => this.changeQuantity($(e.currentTarget), true));\r\n\r\n\t\t\t$(document).on(\"blur\", \".item-quantity input\", e => {\r\n\t\t\t\tconst $target = $(e.currentTarget);\r\n\t\t\t\t$target.val((parseInt($target.val()!.toString(), 10) || 1).toString());\r\n\t\t\t});\r\n\r\n\t\t\t$(document).on(\"blur\", \"input.quantity-input\", e => {\r\n\t\t\t\tconst $target = $(e.currentTarget);\r\n\t\t\t\t$target.val((parseInt($target.val()!.toString(), 10) || '').toString());\r\n\t\t\t});\r\n\r\n\t\t\t$(document).on(\"click\", \".item-attributes .counter\", e => this.changeQuantityPlusMin($(e.currentTarget)));\r\n\r\n\t\t\tthis.dspItemList.on(\"click\", '.item-detail .item-attributes .multiselect .selectbox-choices label', e => {\r\n\t\t\t\tthis.changeDspAttribute($(e.currentTarget));\r\n\t\t\t});\r\n\r\n\t\t\tthis.dspItemList.on(\"click\", '.item-detail .dsp-next', () => this.validateInput());\r\n\r\n\t\t\tthis.dspItemList.on('click', '.icon-info', e => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\t$('.item-detail .price-detail-list').toggle();\r\n\t\t\t});\r\n\r\n\t\t\tthis.dspItemList.on('click', '.price-detail-list .close', e => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\t$('.item-detail .price-detail-list').toggle();\r\n\t\t\t});\r\n\r\n\t\t\t$(document).on(\"click\", (e) => {\r\n\t\t\t\tif (e.target instanceof HTMLElement)\r\n\t\t\t\t\tif (!(e.target as HTMLElement).closest('.item-detail .price-detail-list'))\r\n\t\t\t\t\t\t$('.item-detail .price-detail-list').hide();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tprivate setFilterState($select: JQuery, hasItemsSelected: boolean): void {\r\n\t\t\t$select.find(\".selectBox\").toggleClass(\"hasItemsSelected\", hasItemsSelected);\r\n\t\t}\r\n\r\n\t\tprivate resetSliders() {\r\n\t\t\tconst $sliderParents = $('.filter-choice .multiselect').has('.slider');\r\n\t\t\tfor (let i = 0; i < $sliderParents.length; i++) {\r\n\t\t\t\tconst $sliderParent = $($sliderParents[i]);\r\n\r\n\t\t\t\tconst min = parseFloat($sliderParent.find('.slider-min').attr('data-value')!);\r\n\t\t\t\tconst max = parseFloat($sliderParent.find('.slider-max').attr('data-value')!);\r\n\r\n\t\t\t\tconst $sliderMinInput = $sliderParent.find('.slider-min input');\r\n\t\t\t\tconst $sliderMaxInput = $sliderParent.find('.slider-max input');\r\n\r\n\t\t\t\tconst $slider = $sliderParent.find('.slider-range');\r\n\t\t\t\t$slider.slider(\"values\", 0, min);\r\n\t\t\t\t$slider.slider(\"values\", 1, max);\r\n\r\n\t\t\t\tif ($sliderParent.hasClass('multiselect-imagecount')) {\r\n\t\t\t\t\t$sliderMinInput.val(min.toString());\r\n\t\t\t\t\t$sliderMaxInput.val(max.toString());\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t$sliderMinInput.val(utils.displayPrice(min, false, false, this.pageContext));\r\n\t\t\t\t\t$sliderMaxInput.val(utils.displayPrice(max, false, false, this.pageContext));\r\n\t\t\t\t}\r\n\t\t\t\tthis.setFilterState($sliderParent, false);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate acceptFiltering($target: JQuery) {\r\n\t\t\tconst $el = $target.closest('div.multiselect[data-sp-selectcategory]');\r\n\t\t\tif ($el.length > 0) {\r\n\t\t\t\tconst filter = $el.attr('data-sp-selectcategory')!;\r\n\r\n\t\t\t\tif ($el.find('.selectbox-choices-slider').length === 0) {\r\n\t\t\t\t\tconst stringValues: string[] = [];\r\n\r\n\t\t\t\t\t$el.find('label.checked').each((indx, el) => {\r\n\t\t\t\t\t\tstringValues.push($(el).attr('data-sp-filter-tag')!);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tthis.changeFilter(filter, stringValues);\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tlet numberValues: number[] = [];\r\n\r\n\t\t\t\t\tconst $slider = $el.find('.slider');\r\n\t\t\t\t\tconst $sliderMin = $slider.find('.slider-min');\r\n\t\t\t\t\tconst $sliderMax = $slider.find('.slider-max');\r\n\r\n\t\t\t\t\tconst min = +$sliderMin.attr('data-value')!;\r\n\t\t\t\t\tconst max = +$sliderMax.attr('data-value')!;\r\n\r\n\t\t\t\t\tconst minSelected = +$sliderMin.find('input').val()!.toString().replace(\",\", \".\");\r\n\t\t\t\t\tconst maxSelected = +$sliderMax.find('input').val()!.toString().replace(\",\", \".\");\r\n\r\n\t\t\t\t\tnumberValues.push(minSelected < min ? min : minSelected, maxSelected > max ? max : maxSelected);\r\n\r\n\t\t\t\t\tif ($slider.hasClass('slider-imagecount')) // image-count must be integer number\r\n\t\t\t\t\t\tnumberValues = numberValues.map(v => parseInt(v.toString(), 10));\r\n\r\n\t\t\t\t\tthis.changeFilter(filter, numberValues);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate loadFilterCount($multiselect: JQuery): void {\r\n\t\t\tif (this.pageContext.disableFilterCounters)\r\n\t\t\t\treturn;\r\n\r\n\t\t\t// already loaded?\r\n\t\t\tif (!$multiselect.attr('data-filter-count')) {\r\n\r\n\t\t\t\t// Mark loading\r\n\t\t\t\t$multiselect.attr('data-filter-count', '1');\r\n\r\n\t\t\t\t// Get filter Enum\r\n\t\t\t\tlet filterCountName: services.DesignFilterCountName | undefined = undefined;\r\n\t\t\t\tif ($multiselect.hasClass('multiselect-occasion')) filterCountName = eXpress.services.DesignFilterCountName.Occasion;\r\n\t\t\t\telse if ($multiselect.hasClass('multiselect-purpose')) filterCountName = eXpress.services.DesignFilterCountName.Purpose;\r\n\t\t\t\telse if ($multiselect.hasClass('multiselect-productcode')) filterCountName = eXpress.services.DesignFilterCountName.Productcode;\r\n\t\t\t\telse if ($multiselect.hasClass('multiselect-orientation')) filterCountName = eXpress.services.DesignFilterCountName.Orientation;\r\n\t\t\t\telse if ($multiselect.hasClass('multiselect-predefinedproductcategory')) filterCountName = eXpress.services.DesignFilterCountName.Predefinedproductcategory;\r\n\t\t\t\telse if ($multiselect.hasClass('multiselect-searchcolor')) filterCountName = eXpress.services.DesignFilterCountName.Searchcolor;\r\n\r\n\t\t\t\tif (filterCountName !== undefined) {\r\n\t\t\t\t\t// Request new Filter Count\r\n\t\t\t\t\tthis.getFilterCountAsync(filterCountName).then(result => {\r\n\t\t\t\t\t\t// Update UI with results\r\n\t\t\t\t\t\tconst $label = $multiselect.find('.selectbox-choices label');\r\n\t\t\t\t\t\tthis.updateFilterCount($label, result);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate getFilterCountAsync(designFilter: services.DesignFilterCountName) {\r\n\r\n\t\t\treturn this.services.selectionPage.GetDesignFilterCount(\r\n\t\t\t\tthis.context.pointOfSaleId,\r\n\t\t\t\tthis.context.languageCode,\r\n\t\t\t\tdesignFilter,\r\n\t\t\t\tthis.ownDesign ? undefined : this.occasion,\r\n\t\t\t\tthis.ownDesign ? undefined : this.purpose,\r\n\t\t\t\tthis.mainProductCategoryGroupCode,\r\n\t\t\t\tthis.ownDesign ? [] : this.productCode,\r\n\t\t\t\tthis.ownDesign ? undefined : this.orientation,\r\n\t\t\t\tthis.ownDesign ? [] : this.predefinedProductCategory,\r\n\t\t\t\tthis.ownDesign ? [] : this.searchColor,\r\n\t\t\t\tthis.ownDesign ? [] : this.imageCount,\r\n\t\t\t\tthis.ownDesign ? [] : this.price,\r\n\t\t\t\tthis.ownDesign ? undefined : this.gender,\r\n\t\t\t\tthis.ownDesign);\r\n\t\t}\r\n\r\n\t\tprivate clearFilterCounts() {\r\n\t\t\tthis.filterChoice\r\n\t\t\t\t.find('.multiselect-purpose, .multiselect-orientation, .multiselect-occasion, .multiselect-productcode, .multiselect-predefinedproductcategory, .multiselect-searchcolor')\r\n\t\t\t\t.removeAttr('data-filter-count')\r\n\t\t\t\t.find('.selectbox-choices label')\r\n\t\t\t\t.find('.filter-amount')\r\n\t\t\t\t.html('');\r\n\t\t}\r\n\r\n\t\tprivate clear(): void {\r\n\t\t\t$('.dsp-item-list .item').remove();\r\n\t\t\t$('.dsp-item-list .no-designs-found').remove();\r\n\t\t\t$('.dsp-item-list .item-detail').removeClass('visible');\r\n\t\t\tthis.designs = {};\r\n\t\t}\r\n\r\n\t\tprivate showMore() {\r\n\t\t\tthis.hideDetailClick(false);\r\n\t\t\twindow.ShowLoadingDialog();\r\n\t\t\tthis.fetchPageAndRenderAsync(this.pageNumber + 1, false);\r\n\t\t}\r\n\r\n\t\tprivate fetchPageAsync(pageNumber: number): JQueryPromise {\r\n\t\t\tthis.pageNumber = pageNumber;\r\n\t\t\t$('.dsp-item-list-footer button.main').addClass('loading');\r\n\r\n\t\t\t// Only clear on new search\r\n\t\t\tif (pageNumber === 1) {\r\n\t\t\t\tthis.clearFilterCounts();\r\n\t\t\t}\r\n\r\n\t\t\treturn this.filterResultsRequester.execAsync(1).then(res => {\r\n\t\t\t\t// Prevent race conditions by only updating with last request\r\n\t\t\t\tif (res.isLastRequested) {\r\n\t\t\t\t\tconst designResult = res.value;\r\n\t\t\t\t\tthis.preselectOccasion = '';\r\n\r\n\t\t\t\t\tconst newDesignKeys = this.saveDesigns(designResult);\r\n\r\n\t\t\t\t\treturn this.loadIconsAsync(newDesignKeys)\r\n\t\t\t\t\t\t.then(() => newDesignKeys);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// this is not the last request result\r\n\t\t\t\treturn $.Deferred().resolve(undefined).promise();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tprivate fetchPageAndRenderAsync(pageNumber: number, showCurrentDetail = false): void {\r\n\t\t\tthis.fetchPageAsync(pageNumber)\r\n\t\t\t\t.then(designKeys => {\r\n\t\t\t\t\tif (designKeys) {\r\n\t\t\t\t\t\tthis.addItems(designKeys, showCurrentDetail);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\t/* WEB-5324: Hide constellations on open DSP\r\n\t\tprivate loadConstellations(productCode: string, pdp: string): JQueryPromise {\r\n\t\t\treturn this.services.selectionPage.getConstellationsAsync(this.context.pointOfSaleId, this.context.languageCode, productCode, pdp)\r\n\t\t\t\t.then(res => {\r\n\t\t\t\t\tthis.saveConstellations(res, productCode);\r\n\t\t\t\t\treturn res;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tprivate getOrLoadConstellations(productCode: string, pdp: string): JQueryPromise {\r\n\t\t\tconst constellations = this.constellations[productCode];\r\n\t\t\tif (constellations)\r\n\t\t\t\treturn $.Deferred().resolve(constellations).promise();\r\n\t\t\telse\r\n\t\t\t\treturn this.loadConstellations(productCode, pdp);\r\n\t\t}\r\n\t\t*/\r\n\r\n\t\tprivate saveConstellations(constellations: core.IConstellation[], productCode: string) {\r\n\t\t\tconst key = productCode.toLowerCase();\r\n\t\t\tconst check = this.constellations[key];\r\n\t\t\tif (!check) {\r\n\t\t\t\tthis.constellations[key] = constellations;\r\n\t\t\t\tconstellations.forEach(c => {\r\n\t\t\t\t\tconst code = c.productCode.toLowerCase();\r\n\t\t\t\t\tif (!this.constellations[code])\r\n\t\t\t\t\t\tthis.constellations[code] = constellations;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate getIconUrls(designKeys: string[]): string[] {\r\n\t\t\tlet iconsurls: (string | undefined)[] = [];\r\n\t\t\tdesignKeys.forEach(designKey => {\r\n\t\t\t\tconst design = this.designs[designKey];\r\n\t\t\t\tif (design) {\r\n\r\n\t\t\t\t\t//alt color\r\n\t\t\t\t\tif (design.alternativeColors && design.alternativeColors.length > 1)\r\n\t\t\t\t\t\ticonsurls = [...iconsurls, ...design.alternativeColors\r\n\t\t\t\t\t\t\t.filter((val, index) => val.designVariant\r\n\t\t\t\t\t\t\t\t&& val.designVariant.icon\r\n\t\t\t\t\t\t\t\t&& iconsurls.indexOf(val.designVariant.icon) !== index)\r\n\t\t\t\t\t\t\t.map(ac => ac.designVariant!.icon)];\r\n\r\n\t\t\t\t\t// alt product\r\n\t\t\t\t\tif (design.productAlternativesGroups)\r\n\t\t\t\t\t\ticonsurls = [...iconsurls, ...design.productAlternativesGroups\r\n\t\t\t\t\t\t\t.reduce((p, c) => [...p, ...c.productAlternatives\r\n\t\t\t\t\t\t\t\t.map(pa => { if (iconsurls.indexOf(pa.icon) < 0) return pa.icon; })], [])];\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\treturn iconsurls.filter(url => !!url) as string[];\r\n\t\t}\r\n\r\n\t\tprivate loadIconsAsync(designKeys: string[], urls: string[] = []): JQueryPromise {\r\n\t\t\tconst iconUrls = [...this.getIconUrls(designKeys), ...urls];\r\n\t\t\treturn this.contentManager.getIconsAsync(iconUrls);\r\n\t\t}\r\n\r\n\t\tprivate saveDesign(design: core.IDesign): string {\r\n\t\t\tconst key = design.predefinedProductName.toLowerCase() + \":\" + design.productCode.toLowerCase();\r\n\t\t\tthis.designs[key] = { ...this.designs[key], ...design };\r\n\t\t\treturn key;\r\n\t\t}\r\n\r\n\t\tprivate saveDesigns(designResult: core.IGetDesignsResult): string[] {\r\n\r\n\t\t\tthis.totalDesignCount = designResult.designCount;\r\n\t\t\tthis.designFilterCount = designResult.designFilterCount;\r\n\r\n\t\t\treturn designResult.designs.map(d => this.saveDesign(d));\r\n\r\n\t\t}\r\n\r\n\t\tprivate GetOrLoadDesignAsync(predefinedProductName: string, productCode: string): JQueryPromise {\r\n\t\t\tconst key = predefinedProductName.toLowerCase() + \":\" + productCode.toLowerCase();\r\n\t\t\tconst design = this.designs[key];\r\n\t\t\tif (design)\r\n\t\t\t\treturn $.Deferred().resolve(design).promise();\r\n\t\t\telse {\r\n\t\t\t\treturn this.services.selectionPage.getDesign(this.context.pointOfSaleId,\r\n\t\t\t\t\tthis.context.languageCode,\r\n\t\t\t\t\tpredefinedProductName,\r\n\t\t\t\t\tproductCode,\r\n\t\t\t\t\tthis.ownDesign ? undefined : this.occasion,\r\n\t\t\t\t\tthis.ownDesign ? undefined : this.purpose,\r\n\t\t\t\t\tthis.defaultOptions,\r\n\t\t\t\t\tthis.optionGroup).then(design => {\r\n\t\t\t\t\t\tthis.saveDesign(design);\r\n\t\t\t\t\t\treturn design;\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate createOpenDspDropDown($original: JQuery, list: string[], code: string, data: IDropDownData[], top: string) {\r\n\r\n\t\t\tconst $dropdown = $original.find('.dropdownlist');\r\n\t\t\tconst $template = $dropdown.find('.multiselect-alternatives');\r\n\r\n\t\t\tif (list.length > 1) {\r\n\t\t\t\tconst $new = $template.clone();\r\n\t\t\t\t$new.attr('data-code', code);\r\n\r\n\t\t\t\t// set default text dropdown\r\n\t\t\t\t$new.find('.label').html(top);\r\n\r\n\t\t\t\tconst $subContainer = $new.find('.selectbox-choices').detach();\r\n\t\t\t\tconst $subTemplate = $subContainer.find('label');\r\n\t\t\t\t$subContainer.empty();\r\n\r\n\t\t\t\tfor (let i = 0; i < list.length; i++) {\r\n\t\t\t\t\tconst $subNew = $subTemplate.clone();\r\n\t\t\t\t\tconst label = list[i];\r\n\t\t\t\t\t$subNew.html(label);\r\n\t\t\t\t\t$subNew.attr(\"data-productcode\", data[i].productCode);\r\n\t\t\t\t\t$subNew.attr(\"data-predefinedproductname\", data[i].predefinedProductName);\r\n\t\t\t\t\t$subContainer.append($subNew);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn $new.append($subContainer);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate createIcon($newIcon: JQuery, dspBehavior: eXpress.services.InDsp, dspType: eXpress.services.DSPType, iconData?: eXpress.services.IIcon, alternativeColor?: string): JQuery | undefined {\r\n\r\n\t\t\tif (iconData && iconData.IconSvg) {\r\n\t\t\t\t// modify type icon\r\n\t\t\t\tswitch (dspBehavior) {\r\n\t\t\t\t\tcase eXpress.services.InDsp.IconsSmall:\r\n\t\t\t\t\t\t$newIcon.addClass(\"a-icon--small\");\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase eXpress.services.InDsp.Icons:\r\n\t\t\t\t\t\t$newIcon.addClass(\"a-icon--big\");\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase eXpress.services.InDsp.IconsWithText:\r\n\t\t\t\t\t\t$newIcon.addClass(\"a-icon--with-label\");\r\n\t\t\t\t\t\t$newIcon.append(\"\" + iconData.Label + \"\");\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst icon = this.contentManager.getIconByKey(iconData.IconSvg);\r\n\t\t\t\tif (!icon) return undefined;\r\n\r\n\t\t\t\t// set icon (product-alt always an icon)\r\n\t\t\t\t$newIcon.find('.a-icon__symbol').append(icon);\r\n\r\n\t\t\t\t// if is icon for listDsp => smallest\r\n\t\t\t\tif (dspType === eXpress.services.DSPType.ListDSP)\r\n\t\t\t\t\t$newIcon.addClass(\"a-icon--list\");\r\n\r\n\t\t\t\t// set color if specified\r\n\t\t\t\tif (iconData.IconColorCode) {\r\n\t\t\t\t\t$newIcon.css('color', iconData.IconColorCode);\r\n\r\n\t\t\t\t\t// if white => set outline\r\n\t\t\t\t\tif (iconData.IconSvg && iconData.IconColorCode.toLowerCase() === \"white\" || iconData.IconColorCode.toLowerCase() === \"#ffffff\")\r\n\t\t\t\t\t\t$newIcon.addClass(\"a-icon--outline\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// OverlayColor => small round overlay\r\n\t\t\t\tif (iconData.IconOverLayColorCode) {\r\n\t\t\t\t\t$newIcon.append(\"\");\r\n\t\t\t\t\t$newIcon.find(\".a-icon__overlay\").css(\"color\", iconData.IconOverLayColorCode);\r\n\r\n\t\t\t\t\t// if white => set outline\r\n\t\t\t\t\tif (iconData.IconSvg && iconData.IconOverLayColorCode.toLowerCase() === \"white\" || iconData.IconOverLayColorCode.toLowerCase() === \"#ffffff\")\r\n\t\t\t\t\t\t$newIcon.find(\".a-icon__overlay\").addClass(\"a-icon__overlay--outline\");\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Rotation\r\n\t\t\t\tif (iconData.Orientation && iconData.Orientation === eXpress.services.Orientation.Vertical)\r\n\t\t\t\t\t$newIcon.addClass(\"a-icon--rotated\");\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t//check if hex\r\n\t\t\t\tif (!alternativeColor || alternativeColor.indexOf(\"#\") < 0)\r\n\t\t\t\t\treturn undefined;\r\n\r\n\t\t\t\t// if no designVariant => just alt-color\r\n\t\t\t\t$newIcon.css('color', alternativeColor);\r\n\r\n\t\t\t\t// if variant for listdsp => must be an small icon\r\n\t\t\t\tif (dspType === eXpress.services.DSPType.ListDSP) {\r\n\t\t\t\t\t$newIcon.addClass(\"a-icon--small\");\r\n\t\t\t\t\t$newIcon.addClass(\"a-icon--list\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// if alt-color is white => need an outline\r\n\t\t\t\tif (alternativeColor === \"white\" || alternativeColor.toLowerCase() === \"#ffffff\") {\r\n\t\t\t\t\t$newIcon.addClass(\"a-icon--outline\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn $newIcon;\r\n\t\t}\r\n\r\n\t\tprivate createTileAlternativeColors($original: JQuery, design: core.IDesign, container: string, dspType: eXpress.services.DSPType): boolean {\r\n\r\n\t\t\t// Template\r\n\t\t\tconst $colorList: JQuery = $original.find('.item-icons-left');\r\n\t\t\tconst $iconTemplate = $colorList.find('.a-icon').detach();\r\n\t\t\tconst $itemToInsertBefore = $colorList.next();\r\n\t\t\t$colorList.detach();\r\n\t\t\t$colorList.empty();\r\n\r\n\t\t\tconst product = design.product;\r\n\t\t\tconst designVariantInDSP: eXpress.services.InDsp = dspType === eXpress.services.DSPType.ListDSP ? product.designVariantInListDSP : product.designVariantInOpenDSP;\r\n\t\t\tlet result = false;\r\n\r\n\t\t\t// Hide\r\n\t\t\tif (designVariantInDSP === eXpress.services.InDsp.Hide)\r\n\t\t\t\treturn result;\r\n\r\n\t\t\t// DropDown\r\n\t\t\tif (designVariantInDSP === eXpress.services.InDsp.Dropdown) {\r\n\t\t\t\tif (design.alternativeColors && design.alternativeColors.length > 1) {\r\n\t\t\t\t\tconst altColorsWithDesignVariants = design.alternativeColors.filter(ac => ac.designVariant);\r\n\t\t\t\t\tconst designVariantNames = altColorsWithDesignVariants\r\n\t\t\t\t\t\t.filter(ac => ac.designVariant!.designVariantName)\r\n\t\t\t\t\t\t.map(ac => ac.designVariant!.designVariantName.toLowerCase());\r\n\t\t\t\t\tconst data: IDropDownData[] = altColorsWithDesignVariants\r\n\t\t\t\t\t\t.map(ac => (\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tproductCode: ac.productCode.toLowerCase(),\r\n\t\t\t\t\t\t\t\tpredefinedProductName: ac.predefinedProductName.toLowerCase()\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t));\r\n\r\n\t\t\t\t\tif (data.length === 0 || designVariantNames.length === 0)\r\n\t\t\t\t\t\treturn false;\r\n\r\n\t\t\t\t\t// get designvariantname for chosen pdp\r\n\t\t\t\t\tconst pdp = altColorsWithDesignVariants.filter(ac => ac.predefinedProductName.toLowerCase() === design.predefinedProductName.toLowerCase());\r\n\t\t\t\t\tconst topText = pdp[0].designVariant!.designVariantName;\r\n\r\n\t\t\t\t\tconst $dropDown = this.createOpenDspDropDown($original, designVariantNames, \"designvariants\", data, topText);\r\n\t\t\t\t\tif ($dropDown) {\r\n\t\t\t\t\t\t$dropDown.insertBefore($itemToInsertBefore);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tresult = true;\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Icons / Colors\r\n\t\t\tif (design.alternativeColors && design.alternativeColors.length > 1) {\r\n\t\t\t\tresult = true;\r\n\t\t\t\tfor (let j = 0; j < design.alternativeColors.length; j++) {\r\n\t\t\t\t\t// if designVariant -> is an icon\r\n\t\t\t\t\tconst des = design.alternativeColors[j].designVariant;\r\n\t\t\t\t\tlet designVariantIcon: eXpress.services.IIcon | undefined;\r\n\r\n\t\t\t\t\tif (des)\r\n\t\t\t\t\t\tdesignVariantIcon = {\r\n\t\t\t\t\t\t\tIconSvg: des.icon,\r\n\t\t\t\t\t\t\tIconColorCode: des.iconColorCode,\r\n\t\t\t\t\t\t\tIconOverLayColorCode: null,\r\n\t\t\t\t\t\t\tLabel: des.designVariantName,\r\n\t\t\t\t\t\t\tOrientation: null\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\tconst $template = $iconTemplate.clone();\r\n\t\t\t\t\tconst $icon = this.createIcon($template, designVariantInDSP, dspType, designVariantIcon, design.alternativeColors[j].color);\r\n\t\t\t\t\tif ($icon) {\r\n\t\t\t\t\t\t$icon.attr('data-predefinedproductname', design.alternativeColors[j].predefinedProductName.toLowerCase());\r\n\t\t\t\t\t\t$icon.attr('data-productcode', design.alternativeColors[j].productCode.toLowerCase());\r\n\t\t\t\t\t\tif (design.predefinedProductName.toLowerCase() === design.alternativeColors[j].predefinedProductName.toLowerCase())\r\n\t\t\t\t\t\t\t$icon.addClass('active');\r\n\t\t\t\t\t\t$colorList.append($icon);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ($itemToInsertBefore.length !== 0)\r\n\t\t\t\t\t$colorList.insertBefore($itemToInsertBefore);\r\n\t\t\t\telse\r\n\t\t\t\t\t$original.find(container).append($colorList);\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tprivate arrayEquals(a, b) {\r\n\t\t\treturn Array.isArray(a) &&\r\n\t\t\tArray.isArray(b) &&\r\n\t\t\ta.length === b.length &&\r\n\t\t\ta.every((val, index) => val === b[index]);\r\n\t\t}\r\n\r\n\t\tprivate createTileProductAlternatives($original: JQuery, design: core.IDesign, container: string, dspType: eXpress.services.DSPType): boolean {\r\n\r\n\t\t\t//Template\r\n\t\t\tconst $altList = $original.find('.item-icons-right');\r\n\t\t\tconst $altTemplate = $altList.find('.a-icon').detach();\r\n\t\t\tconst $itemToInsertBefore = $altList.next();\r\n\t\t\t$altList.detach();\r\n\t\t\t$altList.empty();\r\n\r\n\t\t\tlet result = false;\r\n\r\n\t\t\tif (design.productAlternativesGroups && design.productAlternativesGroups.length > 0) {\r\n\t\t\t\tconst group = design.productAlternativesGroups[0];\r\n\r\n\t\t\t\tconst productAlternativeInDsp: eXpress.services.InDsp = dspType === eXpress.services.DSPType.ListDSP ? group.inListDSP : group.inOpenDsp;\r\n\t\t\t\t// Hide\r\n\t\t\t\tif (productAlternativeInDsp === eXpress.services.InDsp.Hide)\r\n\t\t\t\t\treturn result;\r\n\r\n\t\t\t\t// DropDown\r\n\t\t\t\tif (productAlternativeInDsp === eXpress.services.InDsp.Dropdown) {\r\n\t\t\t\t\t// get alternativeName based on value\r\n\t\t\t\t\tconst productAlternatives = group.productAlternatives.filter(pa => pa);\r\n\t\t\t\t\tif (productAlternatives.length > 1) {\r\n\t\t\t\t\t\tconst productAlternativeTitles = productAlternatives.map(p => p.title);\r\n\t\t\t\t\t\tconst data: IDropDownData[] = productAlternatives.map(p => {\r\n\t\t\t\t\t\t\treturn { productCode: p.productCode.toLowerCase(), predefinedProductName: p.predefinedProductName.toLowerCase() };\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t// get title for chosen pdp\r\n\t\t\t\t\t\tconst pdp = productAlternatives.filter(pa => pa.predefinedProductName.toLowerCase() === design.predefinedProductName.toLowerCase());\r\n\t\t\t\t\t\tconst topText = pdp[0].title;\r\n\r\n\t\t\t\t\t\tconst $dropDown = this.createOpenDspDropDown($original, productAlternativeTitles, \"product-alternatives\", data, topText);\r\n\t\t\t\t\t\tif ($dropDown) {\r\n\t\t\t\t\t\t\t$dropDown.insertBefore($itemToInsertBefore);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tresult = true;\r\n\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Icons\r\n\t\t\t\tif (group.productAlternatives && group.productAlternatives.length > 1) {\r\n\t\t\t\t\tresult = true;\r\n\r\n\t\t\t\t\tconst fromCache = this.previousProductGroupAlternatives &&\r\n\t\t\t\t\t\tthis.previousProductGroupAlternatives.length &&\r\n\t\t\t\t\t\tthis.arrayEquals(this.previousProductGroupAlternatives.map(m => m.predefinedProductName), this.activeProductGroupAlternatives.map(m => m.predefinedProductName));\r\n\r\n\t\t\t\t\tif (fromCache) {\r\n\t\t\t\t\t\tconst groupProductAlternatives = group.productAlternatives.filter(f => this.activeProductGroupAlternatives.map(m => m.productVariantCode).indexOf(f.productVariantCode) > -1);\r\n\r\n\t\t\t\t\t\tthis.drawIcons(productAlternativeInDsp, dspType, design, groupProductAlternatives, $altTemplate, $altList);\r\n\r\n\t\t\t\t\t\tif ($itemToInsertBefore.length)\r\n\t\t\t\t\t\t\t$altList.insertBefore($itemToInsertBefore);\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t$original.find(container).append($altList);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.drawIconsAsync(productAlternativeInDsp, dspType, design, group.productAlternatives, $altTemplate, $altList).then(icons => {\r\n\t\t\t\t\t\t\tthis.previousProductGroupAlternatives = this.activeProductGroupAlternatives;\r\n\r\n\t\t\t\t\t\t\tif ($itemToInsertBefore.length)\r\n\t\t\t\t\t\t\t\ticons.insertBefore($itemToInsertBefore);\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t$original.find(container).append(icons);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tprivate insertChildAtPosition(parent: HTMLElement, child: HTMLElement, index: number) {\r\n\t\t\tif (!index) index = 0;\r\n\t\t\tif (index >= parent.childNodes.length)\r\n\t\t\t\tparent.appendChild(child);\r\n\t\t\telse\r\n\t\t\t\tparent.insertBefore(child, parent.childNodes[index]);\r\n\t\t}\r\n\r\n\t\tprivate drawIcons(productAlternativeInDsp: eXpress.services.InDsp, dspType: eXpress.services.DSPType, design: core.IDesign, productAlternatives: core.IProductAlternative[], $altTemplate: JQuery, $altList: JQuery) {\r\n\t\t\tfor (let k = 0; k < productAlternatives.length; k++) {\r\n\t\t\t\tconst alt = productAlternatives[k];\r\n\t\t\t\tif (!alt) continue;\r\n\t\t\t\tconst $catNew = $altTemplate.clone();\r\n\r\n\t\t\t\tconst iconData = {\r\n\t\t\t\t\tIconSvg: alt.icon,\r\n\t\t\t\t\tIconColorCode: alt.iconColorCode,\r\n\t\t\t\t\tIconOverLayColorCode: alt.iconOverlayColorCode,\r\n\t\t\t\t\tLabel: alt.title,\r\n\t\t\t\t\tOrientation: alt.orientation\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif (alt.predefinedProductName) {\r\n\t\t\t\t\tconst $icon = this.createIcon($catNew, productAlternativeInDsp, dspType, iconData);\r\n\r\n\t\t\t\t\tif ($icon) {\r\n\t\t\t\t\t\t$icon.attr('data-predefinedproductname', alt.predefinedProductName.toLowerCase());\r\n\t\t\t\t\t\t$icon.attr('data-productcode', alt.productCode.toLowerCase());\r\n\t\t\t\t\t\t$icon.attr('title', alt.title);\r\n\r\n\t\t\t\t\t\tif (design.pvc.toLowerCase() === alt.productVariantCode.toLowerCase())\r\n\t\t\t\t\t\t\t$catNew.addClass('active');\r\n\r\n\t\t\t\t\t\t$altList.append($catNew);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn $altList;\r\n\t\t}\r\n\r\n\t\tprivate async drawIconsAsync(productAlternativeInDsp: eXpress.services.InDsp, dspType: eXpress.services.DSPType, design: core.IDesign, productAlternatives: core.IProductAlternative[], $altTemplate: JQuery, $altList: JQuery) {\r\n\t\t\tconst promises: JQueryPromise>[] = [];\r\n\r\n\t\t\tfor (let k = 0; k < productAlternatives.length; k++) {\r\n\t\t\t\tconst alt = productAlternatives[k];\r\n\t\t\t\tif (!alt) continue;\r\n\t\t\t\tconst $catNew = $altTemplate.clone();\r\n\r\n\t\t\t\tconst iconData = {\r\n\t\t\t\t\tIconSvg: alt.icon,\r\n\t\t\t\t\tIconColorCode: alt.iconColorCode,\r\n\t\t\t\t\tIconOverLayColorCode: alt.iconOverlayColorCode,\r\n\t\t\t\t\tLabel: alt.title,\r\n\t\t\t\t\tOrientation: alt.orientation\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif (alt.predefinedProductName) {\r\n\t\t\t\t\tconst promise = $.Deferred();\r\n\t\t\t\t\tpromise.resolve(this.GetOrLoadDesignAsync(alt.predefinedProductName.toLowerCase(), alt.productCode.toLowerCase())\r\n\t\t\t\t\t\t.then(alternativeDesign => {\r\n\t\t\t\t\t\t\tthis.activeProductGroupAlternatives.push(alt);\r\n\t\t\t\t\t\t\tconst $icon = this.createIcon($catNew, productAlternativeInDsp, dspType, iconData);\r\n\r\n\t\t\t\t\t\t\tif ($icon && alternativeDesign) {\r\n\t\t\t\t\t\t\t\t$icon.attr('data-predefinedproductname', alt.predefinedProductName.toLowerCase());\r\n\t\t\t\t\t\t\t\t$icon.attr('data-productcode', alt.productCode.toLowerCase());\r\n\t\t\t\t\t\t\t\t$icon.attr('title', alt.title);\r\n\r\n\t\t\t\t\t\t\t\tif (design.pvc.toLowerCase() === alt.productVariantCode.toLowerCase())\r\n\t\t\t\t\t\t\t\t\t$catNew.addClass('active');\r\n\r\n\t\t\t\t\t\t\t\tthis.insertChildAtPosition($altList[0], $catNew[0], k);\r\n\r\n\t\t\t\t\t\t\t\treturn $altList;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}));\r\n\r\n\t\t\t\t\tpromises.push(promise);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn $.when.apply(undefined, promises).promise();\r\n }\r\n\r\n\t\tprivate createTileConstellations($original: JQuery, design: core.IDesign, constellations: core.IConstellation[], container: string): boolean {\r\n\t\t\tlet result = false;\r\n\t\t\tconst $list = $original.find('.item-constellations');\r\n\t\t\tconst $itemToInsertBefore = $list.next();\r\n\t\t\t$list.detach();\r\n\t\t\tconst $template = $list.find('span').first().detach();\r\n\t\t\t$list.empty();\r\n\t\t\tif (constellations && constellations.length > 1) {\r\n\t\t\t\tresult = true;\r\n\t\t\t\tfor (let k = 0; k < constellations.length; k++) {\r\n\t\t\t\t\tconst $new = $template.clone();\r\n\t\t\t\t\t$new.attr('data-predefinedproductname', design.predefinedProductName.toLowerCase());\r\n\t\t\t\t\t$new.attr('data-productcode', constellations[k].productCode.toLowerCase());\r\n\t\t\t\t\t$new.attr('title', constellations[k].productName);\r\n\t\t\t\t\t$new.find('span.label').html(constellations[k].shortName);\r\n\t\t\t\t\tif (design.productCode.toLowerCase() === constellations[k].productCode.toLowerCase())\r\n\t\t\t\t\t\t$new.addClass('active');\r\n\t\t\t\t\t$new.addClass('productcode-' + eXpress.utils.makeCssClass(constellations[k].productCode));\r\n\t\t\t\t\t$list.append($new);\r\n\t\t\t\t}\r\n\t\t\t\tif ($itemToInsertBefore.length !== 0)\r\n\t\t\t\t\t$list.insertBefore($itemToInsertBefore);\r\n\t\t\t\telse\r\n\t\t\t\t\t$original.find(container).append($list);\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tprivate createTileOptions($original: JQuery, productOptionGroups: core.IDesignProductOptionGroup[] | undefined, container: string, defaultDspOverlay: string, defaultOpenDspOverlay: string): boolean {\r\n\t\t\tlet result = false;\r\n\t\t\tconst $optionList = $original.find('.item-options');\r\n\t\t\t$optionList.detach();\r\n\t\t\tconst $itemToInsertBefore = $optionList.next();\r\n\t\t\tconst $optionTemplate = $optionList.find('span').first().detach();\r\n\t\t\t$optionList.empty();\r\n\t\t\tif (productOptionGroups && productOptionGroups.length > 0) {\r\n\t\t\t\tfor (let l = 0; l < productOptionGroups.length; l++) {\r\n\t\t\t\t\t// We have a list of OptionGroups we loop them all and take the first that has flag OptionInDsp.Icons\r\n\t\t\t\t\tconst optionGroup = productOptionGroups[l];\r\n\t\t\t\t\tif (optionGroup.inDsp === eXpress.services.OptionInDsp.Icons) {\r\n\t\t\t\t\t\tif (optionGroup && optionGroup.productOptions && optionGroup.productOptions.length > 0) {\r\n\t\t\t\t\t\t\tresult = true;\r\n\r\n\t\t\t\t\t\t\t// Add the sibling data\r\n\t\t\t\t\t\t\t$optionList.attr('optiongroup', optionGroup.code.toLowerCase());\r\n\t\t\t\t\t\t\t$optionList.attr('siblingdatapagetitle', optionGroup.siblingDataPageTitle || \"\");\r\n\t\t\t\t\t\t\t$optionList.attr('siblingoptionusps', optionGroup.siblingDataOptionUSPs);\r\n\r\n\t\t\t\t\t\t\tlet $optionNew: JQuery | null = null;\r\n\t\t\t\t\t\t\tconst standardoptionNames = [] as string[];\r\n\r\n\t\t\t\t\t\t\tfor (let m = 0; m < optionGroup.productOptions.length; m++) {\r\n\t\t\t\t\t\t\t\tconst option = optionGroup.productOptions[m];\r\n\t\t\t\t\t\t\t\t$optionNew = $optionTemplate.clone();\r\n\t\t\t\t\t\t\t\t$optionNew.attr('data-optioncode', option.code);\r\n\t\t\t\t\t\t\t\t$optionNew.attr('data-alternativeoptiongroup', option.alternativeOptionGroup);\r\n\t\t\t\t\t\t\t\t$optionNew.attr('data-optionname', option.name);\r\n\t\t\t\t\t\t\t\t$optionNew.attr('data-optiondspoverlay', option.dspOverlayUrl || \"\");\r\n\t\t\t\t\t\t\t\t$optionNew.attr('data-optionopendspoverlay', option.openDspOverlayUrl || \"\");\r\n\t\t\t\t\t\t\t\t$optionNew.attr('title', option.name);\r\n\t\t\t\t\t\t\t\t$optionNew.attr('data-optionprice', option.price);\r\n\t\t\t\t\t\t\t\t$optionNew.addClass('option-' + eXpress.utils.makeCssClass(option.code));\r\n\t\t\t\t\t\t\t\tstandardoptionNames.push(eXpress.utils.makeCssClass(option.code));\r\n\t\t\t\t\t\t\t\tif (this.currentOption1 && this.currentOption1.code.toLowerCase() === option.code.toLowerCase()) {\r\n\t\t\t\t\t\t\t\t\t$optionNew.addClass('active');\r\n\t\t\t\t\t\t\t\t\tthis.setSiblingData($original.closest('article'), $optionNew, $optionList, this.currentOption1);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t$optionList.append($optionNew);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t// We add the default icon (no option) and select it\r\n\t\t\t\t\t\t\t$optionNew = $optionTemplate.clone();\r\n\t\t\t\t\t\t\t$optionNew.attr('data-optioncode', '');\r\n\t\t\t\t\t\t\t$optionNew.attr('data-alternativeoptiongroup', \"\");\r\n\t\t\t\t\t\t\t$optionNew.attr('data-optiondspoverlay', defaultDspOverlay);\r\n\t\t\t\t\t\t\t$optionNew.attr('data-optionopendspoverlay', defaultOpenDspOverlay);\r\n\t\t\t\t\t\t\tlet standardOptionName = 'option-standard';\r\n\t\t\t\t\t\t\tstandardoptionNames.sort().reverse();\r\n\t\t\t\t\t\t\tstandardOptionName += \"-\" + standardoptionNames.join(\"-\");\r\n\t\t\t\t\t\t\t$optionNew.addClass(standardOptionName);\r\n\t\t\t\t\t\t\tif (!this.currentOption1)\r\n\t\t\t\t\t\t\t\t$optionNew.addClass('active');\r\n\t\t\t\t\t\t\t$optionList.prepend($optionNew);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif ($itemToInsertBefore.length !== 0)\r\n\t\t\t\t\t$optionList.insertBefore($itemToInsertBefore);\r\n\t\t\t\telse\r\n\t\t\t\t\t$original.find(container).append($optionList);\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tprivate createTile(design: core.IDesign, $new: JQuery, lazy: boolean, dspType: eXpress.services.DSPType): JQuery {\r\n\t\t\tif (design.debug)\r\n\t\t\t\t$new.prepend(\"
\" + design.debug.replace(/\\r\\n/g, '
') + \"
\");\r\n\r\n\t\t\t// Fill in the attributes to use later on\r\n\t\t\t$new.attr('data-productcode', design.productCode.toLowerCase());\r\n\t\t\t$new.attr('data-predefinedproductname', design.predefinedProductName.toLowerCase());\r\n\t\t\t$new.attr('data-productname', design.product.name.toLowerCase());\r\n\t\t\t$new.attr('data-pvc', design.pvc);\r\n\t\t\t$new.attr('data-categorylist', design.productCategoryGroups.join('/'));\r\n\t\t\tif (this.crossSellFrom)\r\n\t\t\t\t$new.attr('data-crossSellFrom', this.crossSellFrom);\r\n\r\n\t\t\t// Fill in the simple data\r\n\t\t\t$new.find('.item-title').html(design.dspName);\r\n\t\t\tconst $newImage = $new.find('img.lazy');\r\n\t\t\tconst $filler = $new.find('item-title');\r\n\t\t\tconst fullUrl = design.packshotUrl + \"?\" + this.context.productRevision;\r\n\t\t\t$newImage.attr('data-original', fullUrl);\r\n\t\t\t$newImage.attr('alt', design.dspName);\r\n\t\t\tif (!lazy) {\r\n\t\t\t\t$newImage.attr('src', fullUrl);\r\n\t\t\t\t$new.removeClass('loading');\r\n\t\t\t\t$newImage.parent().removeAttr(\"style\");\r\n\t\t\t\t$filler.removeClass('u-hide');\r\n\t\t\t}\r\n\t\t\t$new.find('.price').html(design.displayPrice);\r\n\t\t\t$new.find('.price-per-unit').html(design.displayPricePerUnit);\r\n\t\t\tif (!design.showStar)\r\n\t\t\t\t$new.find('.as-from').remove();\r\n\r\n\t\t\tif (design.temporaryUnavailable) {\r\n\t\t\t\t$new.find('.eyecatcher').addClass(\"eyecatcher--temporarily-unavailable\");\r\n\t\t\t\t$new.addClass('disabled');\r\n\t\t\t\t$new.find('.eyecatcher .tu').show();\r\n\t\t\t\t$new.find('.eyecatcher').show();\r\n\t\t\t}\r\n\t\t\telse if (design.top) {\r\n\t\t\t\t$new.find('.eyecatcher .top').show();\r\n\t\t\t\t$new.find('.eyecatcher').show();\r\n\t\t\t}\r\n\t\t\telse if (design.new) {\r\n\t\t\t\t$new.find('.eyecatcher .new').show();\r\n\t\t\t\t$new.find('.eyecatcher').show();\r\n\t\t\t}\r\n\r\n\t\t\t// Fill in the alternative colors\r\n\t\t\tthis.createTileAlternativeColors($new, design, '.header', dspType);\r\n\r\n\t\t\t// Fill in the alternative categories\r\n\t\t\tthis.createTileProductAlternatives($new, design, '.header', dspType);\r\n\r\n\t\t\t// set visualisation if changeable background\r\n\t\t\tthis.setDesignActivedForBackGround($new, design, '.header', dspType);\r\n\r\n\t\t\t// Adorner ?\r\n\t\t\tconst $adorner = $new.find('.adorner-container img');\r\n\t\t\tthis.showAdorner($adorner, design.dspOverlayUrl);\r\n\r\n\t\t\treturn $new;\r\n\t\t}\r\n\r\n\t\tprivate setDesignActivedForBackGround($template: JQuery, design: core.IDesign, selector: string, dspType: services.DSPType): boolean {\r\n\r\n\t\t\t// header container to attach to;\r\n\t\t\tconst $header = $template.find(selector);\r\n\t\t\tconst iconsContainerSelector = dspType === eXpress.services.DSPType.ListDSP ? \".item-icons-center\" : \".m-icon-with-text\";\r\n\t\t\tconst $iconsContainer = $template.find(iconsContainerSelector);\r\n\t\t\tconst icon = this.contentManager.getIconByKey(\"paintbrush\");\r\n\r\n\t\t\tif (design.canSwitchBackgroundInCreator && icon) {\r\n\r\n\t\t\t\t//label\r\n\t\t\t\tconst label = this.contentManager.getLabel (\r\n\t\t\t\t\tdspType === eXpress.services.DSPType.ListDSP\r\n\t\t\t\t\t\t? \"Label.DspMulti.ChangeBackground.ListDSP\"\r\n\t\t\t\t\t\t: \"Label.DspMulti.ChangeBackground.OpenDSP\"\r\n\t\t\t\t\t, dspType === eXpress.services.DSPType.ListDSP\r\n\t\t\t\t\t\t? \"Multicolour\"\r\n\t\t\t\t\t\t: \"Choose your favourite backgroundcolour in the following step\"\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif (dspType === eXpress.services.DSPType.ListDSP) {\r\n\r\n\t\t\t\t\tconst $iconSpan = $iconsContainer.find('.a-icon').detach();\r\n\t\t\t\t\tconst $iconSymbol = $iconSpan.find('.a-icon__symbol');\r\n\t\t\t\t\t$iconSpan.attr('data-predefinedproductname', design.predefinedProductName.toLowerCase());\r\n\t\t\t\t\t$iconSpan.attr('data-productname', design.product.name.toLowerCase());\r\n\t\t\t\t\t$iconSymbol.html(icon);\r\n\r\n\t\t\t\t\t$iconsContainer.detach();\r\n\t\t\t\t\t$iconsContainer.empty();\r\n\t\t\t\t\t$iconSpan.attr('title', label);\r\n\t\t\t\t\t$iconsContainer.append($iconSpan);\r\n\t\t\t\t\t$header.append($iconsContainer);\r\n\t\t\t\t} else if (dspType === eXpress.services.DSPType.OpenDSP) {\r\n\t\t\t\t\thtml.show($iconsContainer.get(0));\r\n\t\t\t\t\t$iconsContainer.find('.a-icon__symbol').html(icon);\r\n\t\t\t\t\t$iconsContainer.find('.m-icon-with-text__text').html(label);\r\n\t\t\t\t\t$iconsContainer.find('.a-icon').attr('data-predefinedproductname', design.predefinedProductName.toLowerCase());\r\n\t\t\t\t\t$iconsContainer.find('.a-icon').attr('data-productname', design.product.name.toLowerCase());\r\n\r\n\t\t\t\t\tconst $cloneContainer = $iconsContainer.clone();\r\n\r\n\t\t\t\t\tconst $namecontainer = $template.parent().find('.productcategory-name-container');\r\n\t\t\t\t\tif ($namecontainer.find(\".m-icon-with-text\").length < 1)\r\n\t\t\t\t\t\t$namecontainer.append($cloneContainer);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\t$namecontainer.find(\".m-icon-with-text\").replaceWith($cloneContainer);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\r\n\t\t\t\thtml.hide($iconsContainer.get(0));\r\n\t\t\t\tconst $namecontainer = $template.parent().find('.productcategory-name-container');\r\n\t\t\t\tif ($namecontainer.find(\".m-icon-with-text\").length > 0)\r\n\t\t\t\t\t$namecontainer.find(\".m-icon-with-text\").remove();\r\n\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tprivate setExtraLabelOnDetail(detailEl: HTMLElement, design: core.IDesign) {\r\n\t\t\tconst itemLabelEl = html.querySelector(detailEl, \".item-label\", true);\r\n\t\t\tif (design.supportsPersonalData) {\r\n\t\t\t\tcore.showLoadingDialogAsync(this.contentManager.getLabelAsync(\"Label.DspMulti.PersonalEventsAvailable\")\r\n\t\t\t\t\t.always(label => {\r\n\t\t\t\t\t\titemLabelEl.innerHTML = label || \"Design with personal events\";\r\n\t\t\t\t\t\thtml.addClass(itemLabelEl, \"item-label--is-visible\");\r\n\t\t\t\t\t\tutils.reduceFontsizeToFit(itemLabelEl, 11);\r\n\t\t\t\t\t}));\r\n\t\t\t} else {\r\n\t\t\t\thtml.removeClass(itemLabelEl, \"item-label--is-visible\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate addItems(designKeys: string[], showCurrentDetail: boolean) {\r\n\t\t\tconst maxPages = Math.ceil(this.totalDesignCount / this.pageSize);\r\n\t\t\tif (this.pageNumber >= maxPages)\r\n\t\t\t\t$('.dsp-item-list-footer button.main').hide();\r\n\t\t\telse {\r\n\t\t\t\t$('.dsp-item-list-footer button.main').show();\r\n\t\t\t\t$('.dsp-item-list-footer button.main').removeClass('loading');\r\n\t\t\t}\r\n\r\n\t\t\t$('.dsp-content-top p.multiple').hide();\r\n\t\t\t$('.dsp-content-top p.one').hide();\r\n\t\t\t$('.dsp-content-top p.zero').hide();\r\n\r\n\t\t\tif (this.totalDesignCount > 0) {\r\n\t\t\t\tif (this.totalDesignCount > 1) {\r\n\t\t\t\t\t$('.dsp-content-top p.multiple').show();\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t$('.dsp-content-top p.one').show();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$('span.filter-info').each((indx, el) => {\r\n\t\t\t\t\t$(el).html(\"\");\r\n\t\t\t\t});\r\n\r\n\t\t\t\t$('.tag-active').each((indx, el) => {\r\n\t\t\t\t\tlet filter = el.getAttribute('data-sp-selectcategory');\r\n\t\t\t\t\tconst item = el.getAttribute('data-sp-selecttag') || '';\r\n\t\t\t\t\tlet result = \"\";\r\n\t\t\t\t\tif (filter && typeof filter !== 'undefined') {\r\n\t\t\t\t\t\tfilter = filter.toLowerCase();\r\n\t\t\t\t\t\tif (filter === 'imagecount' || filter === 'price') {\r\n\t\t\t\t\t\t\tresult = $(\".cat-\" + filter.replace(\".\", \"-\") + \" span.value\").html();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tresult = $('.filter-' + filter.replace(\".\", \"-\") + ' .selectBox span.filter-info').html();\r\n\t\t\t\t\t\t\tresult = result.concat($('label[data-sp-filter-tag= \"' + item + '\"]').attr('data-sp-filter-translated') || '').concat(\", \");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t$('.filter-' + filter + ' .selectBox span.filter-info').html(result);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t$('span.filter-info').each((indx, el) => {\r\n\t\t\t\t\tconst $filter = $(el).parent().parent();\r\n\t\t\t\t\tconst filter = $($filter).attr('data-sp-selectcategory');\r\n\t\t\t\t\tlet result = $(el).html();\r\n\t\t\t\t\tif (filter !== 'imageCount' && filter !== 'price') {\r\n\t\t\t\t\t\tconst checkLength = 50;\r\n\t\t\t\t\t\tif (result.length > checkLength)\r\n\t\t\t\t\t\t\tresult = result.substring(0, checkLength).concat(\"...\");\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tresult = result.substring(0, result.length - 2);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$(el).html(result);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tconst totalCount = utils.formatString(this.contentManager.getLabel(\"Label.DesignSelection.FilterAmount\", \"Show {0} results\"), this.totalDesignCount.toString());\r\n\t\t\t\t$('.dsp-result-bottom span').html(totalCount);\r\n\t\t\t\t$('.dsp-content-top .info span').html(this.totalDesignCount.toString());\r\n\t\t\t\tconst $dspItemList = $('.dsp-content .dsp-item-list');\r\n\t\t\t\tconst $itemToInsertBefore = $dspItemList.next();\r\n\t\t\t\t$dspItemList.detach();\r\n\t\t\t\tconst $template = $('.template-container .item');\r\n\r\n\t\t\t\tfor (let i = 0; i < designKeys.length; i++) {\r\n\t\t\t\t\tconst pdp = designKeys[i];\r\n\t\t\t\t\tconst $new = $template.clone();\r\n\t\t\t\t\tif (pdp) {\r\n\t\t\t\t\t\t$dspItemList.append (\r\n\t\t\t\t\t\t\tthis.createTile (\r\n\t\t\t\t\t\t\t\tthis.designs[pdp],\r\n\t\t\t\t\t\t\t\t$new,\r\n\t\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\t\teXpress.services.DSPType.ListDSP\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$dspItemList.insertBefore($itemToInsertBefore);\r\n\r\n\t\t\t\tthis.repositionDetail();\r\n\r\n\t\t\t\t$(\"img.lazy\").lazyload({\r\n\t\t\t\t\tthreshold: 200,\r\n\t\t\t\t\tload: function () {\r\n\t\t\t\t\t\t$(this).closest('.loading').removeClass('loading');\r\n\t\t\t\t\t\t$(this).parent().removeAttr(\"style\");\r\n\t\t\t\t\t\t$(this).closest('.item-container').find('.item-filler').removeClass('u-hide');\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (showCurrentDetail)\r\n\t\t\t\t\tthis.showCurrentDetail();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t$('.dsp-content-top p.zero').show();\r\n\t\t\t\t$('.dsp-content .dsp-item-list').append($('.no-designs-found').clone());\r\n\t\t\t}\r\n\r\n\t\t\tif (this.productHasQuantityBreakOnlyInMa && this.productCode.length > 0) {\r\n\t\t\t\tthis.remark.html(this.pageContext.labelStartingAt);\r\n\t\t\t}\r\n\r\n\t\t\twindow.HideLoadingDialog();\r\n\t\t}\r\n\r\n\t\tprivate toggleFilters(toggle = false) {\r\n\t\t\tthis.filterToggle.toggleClass(\"open\", toggle);\r\n\t\t\tthis.filterChoice.toggleClass(\"open\", toggle);\r\n\t\t\t$(\".filter-container\").toggleClass(\"open\", toggle);\r\n\r\n\t\t\t$(\".main.small.filter-toggle\").prop('disabled', toggle);\r\n\t\t}\r\n\r\n\t\tprivate removeFilters() {\r\n\t\t\twindow.ShowLoadingDialog();\r\n\t\t\tthis.occasion = '';\r\n\t\t\tthis.purpose = '';\r\n\t\t\tthis.productCode = [];\r\n\t\t\tthis.orientation = '';\r\n\t\t\tthis.predefinedProductCategory = [];\r\n\t\t\tthis.searchColor = [];\r\n\t\t\tthis.imageCount = [];\r\n\t\t\tthis.price = [];\r\n\t\t\tthis.gender = '';\r\n\t\t\tthis.clear();\r\n\t\t\tthis.fetchPageAndRenderAsync(1, true);\r\n\t\t\t$('.filter-selection').removeClass('visible');\r\n\t\t\t$(\".selectBox\").removeClass(\"hasItemsSelected\");\r\n\t\t\tthis.remark.removeClass('remark-right');\r\n\r\n\t\t\tthis.currentProductCode = undefined;\r\n\t\t\tthis.currentPredefinedProductName = undefined;\r\n\t\t\tthis.setHistoryUrl();\r\n\t\t}\r\n\r\n\t\tpublic changeFilter(filterName: string, filterValue: string[]);\r\n\t\tpublic changeFilter(filterName: string, filterValue: string);\r\n\t\tpublic changeFilter(filterName: string, filterValue: number[]);\r\n\t\tpublic changeFilter(filterName: string, filterValue: number);\r\n\t\tpublic changeFilter(filterName: string, filterValue: any) {\r\n\t\t\twindow.ShowLoadingDialog();\r\n\t\t\tif ($.isArray(this[filterName])) {\r\n\t\t\t\tthis[filterName] = filterValue;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif ($.isArray(filterValue)) {\r\n\t\t\t\t\tif (filterValue.length > 0)\r\n\t\t\t\t\t\tthis[filterName] = filterValue[0];\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthis[filterName] = null;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis[filterName] = filterValue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.syncFilter(filterName, filterValue);\r\n\t\t\tthis.clear();\r\n\t\t\tthis.fetchPageAndRenderAsync(1, true);\r\n\t\t\tthis.currentProductCode = undefined;\r\n\t\t\tthis.currentPredefinedProductName = undefined;\r\n\t\t\tthis.setHistoryUrl();\r\n\t\t}\r\n\r\n\t\tprivate changeSorting(filterValue: string) {\r\n\t\t\twindow.ShowLoadingDialog();\r\n\t\t\tthis.sortMethod = filterValue;\r\n\t\t\tthis.clear();\r\n\t\t\tthis.fetchPageAndRenderAsync(1, true);\r\n\t\t\tthis.currentProductCode = undefined;\r\n\t\t\tthis.currentPredefinedProductName = undefined;\r\n\t\t\tthis.setHistoryUrl();\r\n\t\t}\r\n\r\n\t\tprivate hideAndShowForOwnDesign() {\r\n\t\t\tif (this.ownDesign)\r\n\t\t\t\t$('.tag-filter').addClass('own-designs');\r\n\t\t\telse\r\n\t\t\t\t$('.tag-filter').removeClass('own-designs');\r\n\t\t}\r\n\r\n\t\tprivate toggleOwnDesign() {\r\n\t\t\twindow.ShowLoadingDialog();\r\n\t\t\tthis.ownDesign = !this.ownDesign;\r\n\t\t\tthis.clear();\r\n\r\n\t\t\tthis.hideAndShowForOwnDesign();\r\n\t\t\tif (this.ownDesign) {\r\n\t\t\t\tthis.fetchPageAndRenderAsync(1, false);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.fetchPageAndRenderAsync(1, true);\r\n\t\t\t}\r\n\t\t\tthis.currentProductCode = undefined;\r\n\t\t\tthis.currentPredefinedProductName = undefined;\r\n\t\t\tthis.setHistoryUrl();\r\n\t\t}\r\n\r\n\t\tprivate syncFilter(filterName: string, filterValue: any) {\r\n\t\t\t// Fetch all existing tags for the filter & remove them\r\n\t\t\tconst $allTags = $('.filter-selection-tags .tag-active[data-sp-selectcategory=\"' + filterName + '\"]');\r\n\t\t\t$allTags.remove();\r\n\r\n\t\t\t// Add the tags\r\n\t\t\tif ($.isArray(filterValue)) {\r\n\t\t\t\t// hack for sliders, only add 1 tag instead of 2 !\r\n\t\t\t\tif (filterName === 'imageCount' || filterName === 'price') {\r\n\t\t\t\t\tif (filterValue.length > 0)\r\n\t\t\t\t\t\tthis.addTag(filterName, 'slider');\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t$.each(filterValue, (index, value) => {\r\n\t\t\t\t\t\tthis.addTag(filterName, value);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (filterValue !== '')\r\n\t\t\t\t\tthis.addTag(filterName, filterValue);\r\n\t\t\t}\r\n\r\n\t\t\tconst $selection = $('.filter-selection');\r\n\t\t\tif ($selection.find('.tag-active').not('.tag-delete-all-designs').length > 1) {\r\n\t\t\t\tif (!$selection.hasClass('visible')) {\r\n\t\t\t\t\t$selection.addClass('visible');\r\n\t\t\t\t\tthis.remark.addClass('remark-right');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t$selection.removeClass('visible');\r\n\t\t\t\tthis.remark.removeClass('remark-right');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate addTag(filterName: string, filterValue: string) {\r\n\t\t\tlet translated = '';\r\n\t\t\t// Special case for price and imagecount\r\n\t\t\tif (filterName === 'price') {\r\n\t\t\t\ttranslated = utils.displayPrice(this.price[0], true, false, this.pageContext) + ' - ' + utils.displayPrice(this.price[1], true, false, this.pageContext);\r\n\t\t\t}\r\n\t\t\telse if (filterName === 'imageCount') {\r\n\t\t\t\ttranslated = this.imageCount[0] + ' - ' + this.imageCount[1];\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Fetch the translated value\r\n\t\t\t\tconst $label = $('.filter-choice .multiselect[data-sp-selectcategory=\"' + filterName + '\"] .checkboxes label[data-sp-filter-tag=\"' + filterValue + '\"]');\r\n\t\t\t\ttranslated = $label.attr('data-sp-filter-translated') || '';\r\n\t\t\t}\r\n\r\n\t\t\tconst $new = $(\".filter-selection-tags .tag-active.empty\").clone();\r\n\t\t\t$new.removeClass(\"empty\").addClass(\"cat-\" + eXpress.utils.makeCssClass(filterName)).attr(\"data-sp-selecttag\", filterValue).attr(\"data-sp-selectcategory\", filterName);\r\n\t\t\tconst $value = $new.find('.value');\r\n\t\t\tif (filterName.toLowerCase() === 'searchcolor') {\r\n\t\t\t\t$value.css('background-color', filterValue);\r\n\t\t\t\t$new.addClass('searchcolor-' + eXpress.utils.makeCssClass(filterValue));\r\n\t\t\t}\r\n\t\t\t$value.html(translated);\r\n\r\n\t\t\t$new.insertAfter(\".filter-selection-tags .tag-active.empty\").show();\r\n\t\t}\r\n\r\n\t\tprivate changeTileClicked($tile: JQuery, predefinedProductName: string, productCode: string) {\r\n\t\t\tconst timeout = window.setTimeout(function () {\r\n\t\t\t\t$tile.addClass('loading');\r\n\t\t\t}, 300);\r\n\r\n\t\t\tthis.GetOrLoadDesignAsync(predefinedProductName, productCode).then(design => {\r\n\t\t\t\tthis.changeTile(design, $tile);\r\n\t\t\t}).always(() => {\r\n\t\t\t\twindow.clearTimeout(timeout);\r\n\t\t\t\t$tile.removeClass('loading');\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tprivate changeTile(design: core.IDesign, $tile: JQuery) {\r\n\t\t\tconst $template = $('.template-container .item');\r\n\t\t\tconst $new = $template.clone();\r\n\r\n\t\t\t// Show filler\r\n\t\t\t$new.find('.item-filler').removeClass('u-hide');\r\n\r\n\t\t\tconst $newTile = this.createTile(design, $new, false, eXpress.services.DSPType.ListDSP);\r\n\t\t\t$tile.replaceWith($newTile);\r\n\t\t}\r\n\r\n\t\tprivate showDetailClick($item: JQuery, keepData: boolean, loadQuantitiesFromURL = false) {\r\n\t\t\tconst predefinedProductname = $item.attr('data-predefinedproductname') || \"\";\r\n\t\t\tconst productCode = $item.attr('data-productcode') || \"\";\r\n\t\t\tconst productName = $item.attr('data-productname') || \"\";\r\n\t\t\tconst pvc = $item.attr('data-pvc');\r\n\t\t\tconst categoryList = $item.attr('data-categorylist');\r\n\t\t\tthis.currentCategoryList = categoryList;\r\n\r\n\t\t\tif (window.dataLayer[0].datalayerversion < '2022-06') {\r\n\t\t\t\tconst gtmData = {\r\n\t\t\t\t\t'eventCategory': 'Design Selection',\r\n\t\t\t\t\t'eventAction': productName, // product name\r\n\t\t\t\t\t'eventLabel': predefinedProductname, // design name\r\n\t\t\t\t\t'eventProduct': productCode, // product ID\r\n\t\t\t\t\t'event': 'designSelection',\r\n\t\t\t\t\t'ecommerce': {\r\n\t\t\t\t\t\t'detail': {\r\n\t\t\t\t\t\t\tproducts: [\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t'id': productCode,\r\n\t\t\t\t\t\t\t\t\t'variant': pvc,\r\n\t\t\t\t\t\t\t\t\t'name': productName,\r\n\t\t\t\t\t\t\t\t\t'category': categoryList\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// Push google GTM data\r\n\t\t\t\tconst dataLayer = window.dataLayer || [];\r\n\t\t\t\tdataLayer.push(gtmData);\r\n\r\n\t\t\t\tconst iframe = $('#dataLayerIframe')[0] as HTMLIFrameElement;\r\n\t\t\t\tif (iframe && iframe.contentWindow && iframe.contentWindow.pushDataLayer)\r\n\t\t\t\t\tiframe.contentWindow.pushDataLayer(gtmData);\r\n\t\t\t}\r\n\r\n\t\t\t// WEB-5324: Hide constellations on open DSP\r\n\t\t\t// const constellationPromise = this.getOrLoadConstellations(productCode, predefinedProductname);\r\n\r\n\t\t\tconst designPromise = this.GetOrLoadDesignAsync(predefinedProductname, productCode)\r\n\t\t\t\t.then(design => {\r\n\t\t\t\t\treturn this.services.selectionPage.getDesignDetail(this.context.pointOfSaleId,\r\n\t\t\t\t\t\tthis.context.languageCode,\r\n\t\t\t\t\t\tpredefinedProductname,\r\n\t\t\t\t\t\tproductCode,\r\n\t\t\t\t\t\tthis.ownDesign ? undefined : this.occasion,\r\n\t\t\t\t\t\tthis.ownDesign ? undefined : this.purpose,\r\n\t\t\t\t\t\tthis.theme,\r\n\t\t\t\t\t\tthis.options\r\n\t\t\t\t\t)\r\n\t\t\t\t\t\t.then(designDetail => { return { designDetail, design }; });\r\n\t\t\t\t});\r\n\r\n\t\t\t// WEB-5324: Hide constellations on open DSP\r\n\t\t\tcore.showLoadingDialogAsync(designPromise)\r\n\t\t\t\t.then((res) => this.showDetail(res.designDetail, res.design, $item, keepData, loadQuantitiesFromURL));\r\n\t\t}\r\n\r\n\t\tprivate hideDetailClick(animate: boolean, scrollTo = true) {\r\n\t\t\tthis.currentProductCode = undefined;\r\n\t\t\tthis.currentPredefinedProductName = undefined;\r\n\t\t\tthis.setHistoryUrl();\r\n\r\n\t\t\tconst $detail = $('.item-detail.visible');\r\n\t\t\tif ($detail.length > 0) {\r\n\t\t\t\tlet compensateHeight = 0;\r\n\t\t\t\tif ($detail.offset()!.top < $(window).scrollTop()!)\r\n\t\t\t\t\tcompensateHeight = $detail.outerHeight()! + 12; // Why -12 ? There is an extra arrow, 12px in space added inbetween the detail and the clicked tile\r\n\t\t\t\t$detail.removeClass('visible');\r\n\t\t\t\tconst $active = $('.item.active');\r\n\t\t\t\t$active.removeClass('active');\r\n\t\t\t\tif (animate)\r\n\t\t\t\t\t$('html,body').animate({ scrollTop: $active.offset()!.top - eXpress.utils.getHeaderHeight() }, 'slow');\r\n\t\t\t\telse if (scrollTo)\r\n\t\t\t\t\t$('html,body').scrollTop($(window).scrollTop()! - compensateHeight);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate performUpdatePriceDetail($priceTag: any, $priceDetailList: any, priceDetails: core.IPriceDetails) {\r\n\t\t\t// Update the actual price\r\n\t\t\t$priceTag.html(utils.displayPrice(priceDetails.price.amount, true, false, this.pageContext));\r\n\r\n\t\t\t// Update the detailed table below the price\r\n\t\t\tconst $container = $priceDetailList.find('.bottom-center').detach();\r\n\t\t\tconst $template = $container.find('.tooltip').first();\r\n\t\t\t$container.empty();\r\n\r\n\t\t\tfor (let i = 0; i < priceDetails.priceItems.length; i++) {\r\n\t\t\t\tconst $new = $template.clone();\r\n\t\t\t\t$new.find('.price-detail-description').html(priceDetails.priceItems[i].description);\r\n\t\t\t\t$new.find('.price-detail-calculation').html(priceDetails.priceItems[i].calculationDescription);\r\n\t\t\t\t$new.find('.price-detail-result').html(priceDetails.priceItems[i].itemTotal);\r\n\t\t\t\t$container.append($new);\r\n\t\t\t}\r\n\r\n\t\t\t$priceDetailList.append($container);\r\n\t\t}\r\n\r\n\t\tprivate updatePriceDetail($priceTag: JQuery, $priceDetailList: JQuery) {\r\n\t\t\tconst quantity = this.currentQuantities.reduce((a, c) => a + c.quantity, 0);\r\n\t\t\tconst options = [] as string[];\r\n\t\t\tif (this.currentOption1 && this.currentOption1.code)\r\n\t\t\t\toptions.push(this.currentOption1.code);\r\n\t\t\tif (this.currentOption2 && this.currentOption2.code)\r\n\t\t\t\toptions.push(this.currentOption2.code);\r\n\t\t\tthis.orderService.getPriceAsync(\r\n\t\t\t\tthis.currentPvc,\r\n\t\t\t\tquantity,\r\n\t\t\t\t0,\r\n\t\t\t\toptions,\r\n\t\t\t\tthis.pageContext.promoCode)\r\n\t\t\t\t.then(res => this.performUpdatePriceDetail($priceTag, $priceDetailList, res));\r\n\t\t}\r\n\r\n\t\tprivate setSiblingData($detail, $item, $parent, option: CurrentOption | undefined) {\r\n\t\t\tconst shouldSetSiblingData = ($parent.attr('optiongroup') === this.optionGroup);\r\n\t\t\tif (shouldSetSiblingData) {\r\n\t\t\t\tif (option) {\r\n\t\t\t\t\tif ($parent.attr('siblingdatapagetitle'))\r\n\t\t\t\t\t\t$detail.find('h2.productcategory-name').html($parent.attr('siblingdatapagetitle'));\r\n\t\t\t\t\tif ($parent.attr('siblingoptionusps'))\r\n\t\t\t\t\t\t$detail.find('.usps').html($parent.attr('siblingoptionusps'));\r\n\r\n\t\t\t\t\t// Change breaks to price + options price\r\n\t\t\t\t\tconst $breakList = $detail.find('.item-pricing table tbody tr td.price');\r\n\t\t\t\t\t$breakList.each((i, b) => {\r\n\t\t\t\t\t\tconst $break = $(b);\r\n\t\t\t\t\t\t$break.html(utils.displayPrice(parseFloat($break.attr('data-price')!) + option.price, true, false, this.pageContext));\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tconst $h2 = $detail.find('h2.productcategory-name');\r\n\t\t\t\t\t$h2.html($h2.attr('original'));\r\n\t\t\t\t\tconst $usps = $detail.find('.usps');\r\n\t\t\t\t\t$usps.html($usps.attr('original'));\r\n\r\n\t\t\t\t\t// Reset the breaks to the original price\r\n\t\t\t\t\tconst $breakList = $detail.find('.item-pricing table tbody tr td.price');\r\n\t\t\t\t\t$breakList.each((i, b) => {\r\n\t\t\t\t\t\tconst $break = $(b);\r\n\t\t\t\t\t\t$break.html(utils.displayPrice(parseFloat($break.attr('data-price')!), true, false, this.pageContext));\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate changeOptions($item: any) {\r\n\t\t\tconst $detail = $('.item-detail');\r\n\t\t\tconst $parent = $item.parent();\r\n\r\n\t\t\tconst optionCode = $item.attr('data-optioncode');\r\n\t\t\tif (optionCode) {\r\n\t\t\t\tthis.currentOption1 = new CurrentOption();\r\n\t\t\t\tthis.currentOption1.code = optionCode.toLowerCase();\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tthis.currentOption1 = undefined;\r\n\r\n\t\t\t// Remove all existing option classes\r\n\t\t\tconst classList = $detail.attr('class')!.split(/\\s+/);\r\n\t\t\t$.each(classList, function (index, item) {\r\n\t\t\t\tif (item.lastIndexOf('option', 0) === 0)\r\n\t\t\t\t\t$detail.removeClass(item);\r\n\t\t\t});\r\n\t\t\tif (this.currentOption1) {\r\n\t\t\t\t$detail.addClass('option-' + eXpress.utils.makeCssClass(this.currentOption1.code));\r\n\t\t\t\tthis.currentOption1.price = parseFloat($item.attr('data-optionprice'));\r\n\t\t\t\tthis.currentOption1.name = $item.attr('data-optionname');\r\n\t\t\t\tthis.currentOption1.alternativeOptionGroup = $item.attr('data-alternativeoptiongroup');\r\n\t\t\t\tthis.currentOption1.optionGroup = $item.parent().attr('optiongroup');\r\n\t\t\t}\r\n\r\n\t\t\t// Set sibling data\r\n\t\t\tthis.setSiblingData($detail, $item, $parent, this.currentOption1);\r\n\r\n\t\t\t// Add the adorner\r\n\t\t\tconst $adorner = $detail.find('.adorner-container img');\r\n\t\t\tthis.showAdorner($adorner, $item.attr('data-optionopendspoverlay'));\r\n\r\n\t\t\t// Set the correct editorstart URL\r\n\t\t\tconst $next = $detail.find('.dsp-next');\r\n\t\t\tconst allOptions = [this.currentOption1, this.currentOption2]\r\n\t\t\t\t.filter(function (val) { return (val && val.code); })\r\n\t\t\t\t.map(v => v!.code).join(',');\r\n\r\n\t\t\tconst nextUrl = utils.updateParameter(\"options\", allOptions, $next.attr('href'));\r\n\t\t\t$next.attr('href', nextUrl);\r\n\r\n\r\n\t\t\t// Set ourselves to active\r\n\t\t\t$('.item-options span').removeClass('active');\r\n\t\t\t$item.addClass('active');\r\n\r\n\t\t\tthis.updatePriceDetail($detail.find('.price-tag'), $detail.find('.price-detail-list'));\r\n\t\t}\r\n\r\n\t\tprivate changeDspAttribute($item: any) {\r\n\t\t\tthis.currentAttribute = $item.attr('data-attributecode');\r\n\t\t\tconst labelText = $item.html();\r\n\t\t\t$('.item-detail .item-detail-content-header .item-attributes .selectBox label').html(labelText);\r\n\r\n\t\t\tconst $list = $item.closest('.multiselect').children('.checkboxes');\r\n\t\t\t$list.toggle();\r\n\t\t\tconst $label = $item.closest('.multiselect').children('.selectBox');\r\n\t\t\t$label.toggleClass(\"open\");\r\n\r\n\t\t\tif (this.currentAttribute && this.currentProductCode) {\r\n\t\t\t\tconst $next = $('.item-detail .dsp-next');\r\n\t\t\t\tconst nextUrl = utils.updateParameter('pvc', this.currentProductCode.toLowerCase() + '_' + this.currentAttribute.toLowerCase(), $next.attr('href'));\r\n\t\t\t\t$next.attr('href', nextUrl);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate changeDspOptions($item: any) {\r\n\t\t\tconst optionCode = $item.attr('data-optioncode');\r\n\t\t\tif (optionCode) {\r\n\t\t\t\tthis.currentOption2 = new CurrentOption();\r\n\t\t\t\tthis.currentOption2.code = optionCode.toLowerCase();\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tthis.currentOption2 = undefined;\r\n\r\n\t\t\tconst labelText = $item.html();\r\n\t\t\t$('.item-detail .item-detail-content-header .item-options .selectBox label').html(labelText);\r\n\r\n\t\t\tconst $list = $item.closest('.multiselect').children('.checkboxes');\r\n\t\t\tconst $label = $item.closest('.multiselect').children('.selectBox');\r\n\r\n\t\t\t// Remove all other checked classes\r\n\t\t\t$list.find('label').removeClass('checked');\r\n\t\t\t// Set the item to checked\r\n\t\t\t$item.addClass('checked');\r\n\t\t\t// Close the dropdown\r\n\t\t\t$list.toggle();\r\n\t\t\t$label.toggleClass(\"open\");\r\n\r\n\t\t\tif (this.currentOption2) {\r\n\t\t\t\tthis.currentOption2.price = parseFloat($item.attr('data-optionprice'));\r\n\t\t\t\tthis.currentOption2.name = $item.attr('data-optionname');\r\n\t\t\t\tthis.currentOption2.alternativeOptionGroup = $item.attr('data-alternativeoptiongroup');\r\n\t\t\t\tthis.currentOption2.optionGroup = $item.parent().attr('optiongroup');\r\n\t\t\t}\r\n\t\t\t// Set sibling data\r\n\t\t\tthis.setSiblingData($item.closest('article'), $item, $item.closest('.item-options'), this.currentOption2);\r\n\r\n\t\t\tthis.updatePriceDetail($('.item-detail').find('.price-tag'), $('.item-detail').find('.price-detail-list'));\r\n\r\n\t\t\t// Set the correct editorstart URL\r\n\t\t\tconst $next = $('.item-detail .dsp-next');\r\n\t\t\tconst allOptions = [this.currentOption1, this.currentOption2].filter(function (val) { return (val && val.code); }).map(v => v!.code).join(',');\r\n\t\t\tconst nextUrl = utils.updateParameter('options', allOptions, $next.attr('href'));\r\n\t\t\t$next.attr('href', nextUrl);\r\n\r\n\t\t}\r\n\r\n\t\tprivate changeQuantity($item: any, multi: boolean) {\r\n\t\t\tconst quantity = parseInt($item.val(), 10) || (multi ? 0 : 1);\r\n\t\t\tlet attr = null;\r\n\t\t\tif (multi)\r\n\t\t\t\tattr = $item.closest('.item-attributes').attr('data-attributecode')!;\r\n\t\t\tthis.performChangeQuantity(attr, quantity);\r\n\t\t}\r\n\r\n\t\tprivate changeQuantityPlusMin($item: any) {\r\n\t\t\tconst $input = $item.parent().children('input');\r\n\t\t\tlet quantity = parseInt($input.val(), 10) || 0;\r\n\t\t\tconst attr = $item.closest('.item-attributes').attr('data-attributecode');\r\n\r\n\t\t\tif ($item.hasClass('counter-plus'))\r\n\t\t\t\tquantity++;\r\n\t\t\telse {\r\n\t\t\t\tquantity = (quantity > 0) ? --quantity : 0;\r\n\t\t\t}\r\n\t\t\tthis.performChangeQuantity(attr, quantity);\r\n\t\t\t$input.val(quantity.toString());\r\n\t\t}\r\n\r\n\t\tprivate performChangeQuantity(attr: string | null, quantity: number) {\r\n\t\t\tlet found = false;\r\n\t\t\tlet total = 0;\r\n\t\t\tlet indexToRemove = -1;\r\n\t\t\tfor (let i = 0; i < this.currentQuantities.length; i++) {\r\n\t\t\t\tif (this.currentQuantities[i].attribute === attr) {\r\n\t\t\t\t\tfound = true;\r\n\t\t\t\t\tif (quantity && quantity > 0) {\r\n\t\t\t\t\t\tthis.currentQuantities[i].quantity = quantity;\r\n\t\t\t\t\t\ttotal += this.currentQuantities[i].quantity;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tindexToRemove = i;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\ttotal += this.currentQuantities[i].quantity;\r\n\t\t\t}\r\n\t\t\tif (!found && quantity && quantity > 0) {\r\n\t\t\t\tconst newQuantity = new Quantity(attr, quantity);\r\n\t\t\t\tthis.currentQuantities.push(newQuantity);\r\n\t\t\t\ttotal += quantity;\r\n\t\t\t}\r\n\t\t\tif (indexToRemove >= 0)\r\n\t\t\t\tthis.currentQuantities.splice(indexToRemove, 1);\r\n\r\n\t\t\t// Set the correct editorstart URL\r\n\t\t\tconst $next = $('.item-detail .dsp-next');\r\n\t\t\tconst nextUrl = utils.updateParameter('quantity', utils.arrayToQuerystring(this.currentQuantities), $next.attr('href'));\r\n\t\t\t$next.attr('href', nextUrl);\r\n\r\n\t\t\tconst $detail = $('.item-detail');\r\n\t\t\tthis.updatePriceDetail($detail.find('.price-tag'), $detail.find('.price-detail-list'));\r\n\t\t\t$detail.find('.quantity-total').val(total);\r\n\t\t}\r\n\r\n\t\tprivate showAdorner($img: any, imageUrl?: string) {\r\n\t\t\tif (imageUrl) {\r\n\t\t\t\t$img.attr('src', imageUrl);\r\n\t\t\t\t$img.show();\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\t$img.hide();\r\n\t\t}\r\n\r\n\t\t// WEB-5324: Hide constellations on open DSP\r\n\t\tprivate showDetail(designDetail: core.IDesignDetail, design: core.IDesign, $item: JQuery, keepData: boolean, loadQuantitiesFromURL = false) {\r\n\t\t\tlet optionGroup: core.IDesignProductOptionGroup;\r\n\t\t\tlet option: core.IDesignProductOption;\r\n\t\t\t// Slick slider doesn't work well with detached objects, so we remove it to add it again when the item is attached\r\n\t\t\tconst $slider = $(\".slideshow-container\");\r\n\t\t\tif ($slider.hasClass('slick-slider')) {\r\n\t\t\t\t// @ts-ignore\r\n\t\t\t\t$slider.slick('unslick');\r\n\t\t\t}\r\n\r\n\t\t\t// Set current variables\r\n\t\t\tthis.currentProductCode = design.productCode;\r\n\t\t\tthis.currentPvc = design.pvc;\r\n\t\t\tthis.currentPredefinedProductName = design.predefinedProductName;\r\n\t\t\tthis.currentProductName = design.productVariantName;\r\n\t\t\tthis.occasionPackshot = designDetail.occasionPackShot;\r\n\t\t\tthis.purposePackshot = designDetail.purposePackShot;\r\n\t\t\tthis.setHistoryUrl();\r\n\r\n\t\t\tlet overlayUrl: string | undefined = design.openDspOverlayUrl;\r\n\r\n\t\t\tlet found1 = false;\r\n\t\t\tlet found2 = false;\r\n\t\t\tif (!keepData) {\r\n\t\t\t\tthis.currentOption1 = undefined;\r\n\t\t\t\tthis.currentOption2 = undefined;\r\n\t\t\t}\r\n\t\t\telse if (this.currentOption1 || this.currentOption2) {\r\n\t\t\t\t// Option valid ?\r\n\t\t\t\tif (designDetail.productOptionGroups) {\r\n\t\t\t\t\tfor (let l = 0; l < designDetail.productOptionGroups.length; l++) {\r\n\t\t\t\t\t\toptionGroup = designDetail.productOptionGroups[l];\r\n\t\t\t\t\t\tif (optionGroup.inDsp !== eXpress.services.OptionInDsp.Hide) {\r\n\t\t\t\t\t\t\tif (optionGroup && optionGroup.productOptions && optionGroup.productOptions.length > 0) {\r\n\t\t\t\t\t\t\t\tfor (let m = 0; m < optionGroup.productOptions.length; m++) {\r\n\t\t\t\t\t\t\t\t\toption = optionGroup.productOptions[m];\r\n\t\t\t\t\t\t\t\t\t// An option can either be exactly the same\r\n\t\t\t\t\t\t\t\t\tif (this.currentOption1 && option.code.toLowerCase() === this.currentOption1.code) {\r\n\t\t\t\t\t\t\t\t\t\tfound1 = true;\r\n\t\t\t\t\t\t\t\t\t\tif (option.openDspOverlayUrl)\r\n\t\t\t\t\t\t\t\t\t\t\toverlayUrl = option.openDspOverlayUrl;\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tif (this.currentOption2 && option.code.toLowerCase() === this.currentOption2.code) {\r\n\t\t\t\t\t\t\t\t\t\tfound2 = true;\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t// Or it can be in the same alternativeoptiongroup\r\n\t\t\t\t\t\t\t\t\tif (this.currentOption1 && option.alternativeOptionGroup === this.currentOption1.alternativeOptionGroup) {\r\n\t\t\t\t\t\t\t\t\t\tfound1 = true;\r\n\t\t\t\t\t\t\t\t\t\tthis.currentOption1.code = option.code.toLowerCase();\r\n\t\t\t\t\t\t\t\t\t\tthis.currentOption1.price = option.price;\r\n\t\t\t\t\t\t\t\t\t\tthis.currentOption1.name = option.name;\r\n\t\t\t\t\t\t\t\t\t\tthis.currentOption1.optionGroup = optionGroup.code;\r\n\t\t\t\t\t\t\t\t\t\tif (option.openDspOverlayUrl)\r\n\t\t\t\t\t\t\t\t\t\t\toverlayUrl = option.openDspOverlayUrl;\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tif (this.currentOption2 && option.alternativeOptionGroup === this.currentOption2.alternativeOptionGroup) {\r\n\t\t\t\t\t\t\t\t\t\tfound2 = true;\r\n\t\t\t\t\t\t\t\t\t\tthis.currentOption2.code = option.code.toLowerCase();\r\n\t\t\t\t\t\t\t\t\t\tthis.currentOption2.price = option.price;\r\n\t\t\t\t\t\t\t\t\t\tthis.currentOption2.name = option.name;\r\n\t\t\t\t\t\t\t\t\t\tthis.currentOption2.optionGroup = optionGroup.code;\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (found1 && found2)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (!found1) {\r\n\t\t\t\t\tthis.currentOption1 = undefined;\r\n\t\t\t\t}\r\n\t\t\t\tif (!found2) {\r\n\t\t\t\t\tthis.currentOption2 = undefined;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// If we have no options set, we take the default option (if allowed!)\r\n\t\t\tif (!keepData && this.defaultOptions && this.defaultOptions.length > 0 && (!this.currentOption1 || !this.currentOption2)) {\r\n\t\t\t\tif (designDetail.productOptionGroups) {\r\n\t\t\t\t\tfor (let l = 0; l < designDetail.productOptionGroups.length; l++) {\r\n\t\t\t\t\t\toptionGroup = designDetail.productOptionGroups[l];\r\n\t\t\t\t\t\tif (optionGroup.inDsp !== eXpress.services.OptionInDsp.Hide) {\r\n\t\t\t\t\t\t\tif (optionGroup && optionGroup.productOptions && optionGroup.productOptions.length > 0) {\r\n\t\t\t\t\t\t\t\tfor (let m = 0; m < optionGroup.productOptions.length; m++) {\r\n\t\t\t\t\t\t\t\t\toption = optionGroup.productOptions[m];\r\n\t\t\t\t\t\t\t\t\tconst optionCode: string = option.code.toLowerCase();\r\n\t\t\t\t\t\t\t\t\t// Is the optionCode in the defaultOptions ?\r\n\t\t\t\t\t\t\t\t\tlet found3 = false;\r\n\t\t\t\t\t\t\t\t\tfor (let m = 0; m < this.defaultOptions.length; m++) {\r\n\t\t\t\t\t\t\t\t\t\tif (optionCode === this.defaultOptions[m].toLowerCase()) {\r\n\t\t\t\t\t\t\t\t\t\t\tfound3 = true;\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tif (found3) {\r\n\t\t\t\t\t\t\t\t\t\t// The code was found in the defaultOptions list, now use it!\r\n\t\t\t\t\t\t\t\t\t\tif (optionGroup.inDsp === eXpress.services.OptionInDsp.Icons && !this.currentOption1) {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.currentOption1 = new CurrentOption();\r\n\t\t\t\t\t\t\t\t\t\t\tthis.currentOption1.code = optionCode.toLowerCase();\r\n\t\t\t\t\t\t\t\t\t\t\tthis.currentOption1.alternativeOptionGroup = option.alternativeOptionGroup;\r\n\t\t\t\t\t\t\t\t\t\t\toverlayUrl = option.openDspOverlayUrl;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\telse if (optionGroup.inDsp === eXpress.services.OptionInDsp.Dropdown && !this.currentOption2) {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.currentOption2 = new CurrentOption();\r\n\t\t\t\t\t\t\t\t\t\t\tthis.currentOption2.code = optionCode.toLowerCase();\r\n\t\t\t\t\t\t\t\t\t\t\tthis.currentOption2.alternativeOptionGroup = option.alternativeOptionGroup;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (found1 && found2)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// An optiongroup can be set -> Take options from that one\r\n\t\t\tif (!keepData && this.optionGroup && (!this.currentOption1 || !this.currentOption2)) {\r\n\t\t\t\tif (designDetail.productOptionGroups) {\r\n\t\t\t\t\tfor (let l = 0; l < designDetail.productOptionGroups.length; l++) {\r\n\t\t\t\t\t\toptionGroup = designDetail.productOptionGroups[l];\r\n\t\t\t\t\t\tif (optionGroup.code.toLowerCase() === this.optionGroup) {\r\n\t\t\t\t\t\t\tif (optionGroup && optionGroup.productOptions && optionGroup.productOptions.length > 0) {\r\n\t\t\t\t\t\t\t\tlet selectedOption: core.IDesignProductOption | null = null;\r\n\t\t\t\t\t\t\t\tfor (let m = 0; m < optionGroup.productOptions.length; m++) {\r\n\t\t\t\t\t\t\t\t\toption = optionGroup.productOptions[m];\r\n\t\t\t\t\t\t\t\t\tif (option.defaultProductOption) {\r\n\t\t\t\t\t\t\t\t\t\tselectedOption = option;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tif (!selectedOption)\r\n\t\t\t\t\t\t\t\t\tselectedOption = optionGroup.productOptions[0];\r\n\r\n\t\t\t\t\t\t\t\tif (optionGroup.inDsp === eXpress.services.OptionInDsp.Icons && !this.currentOption1) {\r\n\t\t\t\t\t\t\t\t\tthis.currentOption1 = new CurrentOption();\r\n\t\t\t\t\t\t\t\t\tthis.currentOption1.code = selectedOption.code.toLowerCase();\r\n\t\t\t\t\t\t\t\t\tthis.currentOption1.price = selectedOption.price;\r\n\t\t\t\t\t\t\t\t\tthis.currentOption1.optionGroup = optionGroup.code;\r\n\t\t\t\t\t\t\t\t\tthis.currentOption1.alternativeOptionGroup = selectedOption.alternativeOptionGroup;\r\n\t\t\t\t\t\t\t\t\toverlayUrl = selectedOption.openDspOverlayUrl;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse if (optionGroup.inDsp === eXpress.services.OptionInDsp.Dropdown && !this.currentOption2) {\r\n\t\t\t\t\t\t\t\t\tthis.currentOption2 = new CurrentOption();\r\n\t\t\t\t\t\t\t\t\tthis.currentOption2.code = selectedOption.code.toLowerCase();\r\n\t\t\t\t\t\t\t\t\tthis.currentOption2.price = selectedOption.price;\r\n\t\t\t\t\t\t\t\t\tthis.currentOption2.optionGroup = optionGroup.code;\r\n\t\t\t\t\t\t\t\t\tthis.currentOption2.alternativeOptionGroup = selectedOption.alternativeOptionGroup;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst $detail = $(\".item-detail\").detach();\r\n\t\t\tconst wasAlreadyOpen = $detail.hasClass('visible');\r\n\t\t\tconst $information = $detail.find('.item-information');\r\n\t\t\tconst $usps = $information.find('.usps');\r\n\t\t\t$usps.html('');\r\n\r\n\t\t\t// We clicked from within the detail screen, set the item to the currently active tile\r\n\t\t\tif (!$item.hasClass('item'))\r\n\t\t\t\t$item = $('.item.active');\r\n\r\n\t\t\t// Modify the item\r\n\t\t\t$('.item.active').removeClass('active');\r\n\t\t\t$item.addClass('active');\r\n\t\t\t$item.find('.item-filler').removeClass('u-hide');\r\n\r\n\t\t\t// The title on the right\r\n\t\t\tif (design.productCategory) {\r\n\t\t\t\tconst $h2 = $detail.find('.productcategory-name');\r\n\t\t\t\t$h2.html(design.productCategory.name);\r\n\t\t\t\t$h2.attr('original', design.productCategory.name);\r\n\t\t\t}\r\n\r\n\t\t\t// Modify the detail\r\n\t\t\t$detail.removeClass();\r\n\t\t\t$detail.addClass('item-detail visible productcode-'\r\n\t\t\t\t+ eXpress.utils.makeCssClass(design.productCode)\r\n\t\t\t\t+ ' productcategorycode-' + eXpress.utils.makeCssClass(design.productCategoryCode)\r\n\t\t\t\t+ ' productcategorygroupcode-' + eXpress.utils.makeCssClass(design.productCategoryGroupCode));\r\n\r\n\t\t\t// Close the price detail stuff\r\n\t\t\tif (!keepData) {\r\n\t\t\t\t$detail.find('.price-detail-list').hide();\r\n\t\t\t}\r\n\r\n\t\t\t// Add the adorner\r\n\t\t\tconst $adorner = $detail.find('.adorner-container img');\r\n\t\t\tthis.showAdorner($adorner, overlayUrl);\r\n\r\n\t\t\t// The previews\r\n\t\t\tconst $previewList = $detail.find('.slideshow-container').detach();\r\n\t\t\tconst $previewTemplate = $previewList.children(\"div\").first().detach();\r\n\t\t\t$previewList.empty();\r\n\t\t\tif (designDetail.productPreviewImageUrls && designDetail.productPreviewImageUrls.length > 0) {\r\n\t\t\t\tfor (let i = 0; i < designDetail.productPreviewImageUrls.length; i++) {\r\n\t\t\t\t\tconst $previewNew = $previewTemplate.clone();\r\n\t\t\t\t\tconst imageContainer = $previewNew.find('img.slideshow-img');\r\n\t\t\t\t\timageContainer.attr('src', designDetail.productPreviewImageUrls[i] + '?' + this.context.productRevision);\r\n\t\t\t\t\timageContainer.show();\r\n\t\t\t\t\t$previewList.append($previewNew);\r\n\t\t\t\t}\r\n\t\t\t\t$detail.find('.item-container-left').prepend($previewList);\r\n\t\t\t} else {\r\n\t\t\t\t// Keep the image container even when there are no product preview images just hide the container\r\n\t\t\t\tconst $previewNew = $previewTemplate.clone();\r\n\t\t\t\tconst imageContainer = $previewNew.find('img.slideshow-img');\r\n\t\t\t\timageContainer.hide();\r\n\t\t\t\t$previewList.append($previewNew);\r\n\t\t\t\t$detail.find('.item-container-left').prepend($previewList);\r\n\t\t\t}\r\n\r\n\t\t\t// Clone the details template\r\n\t\t\t$detail.find('.item-detail-choice').remove(); // Remove existing\r\n\t\t\tconst $barTemplate = $detail.find('.item-detail-choice-template');\r\n\t\t\t$barTemplate.clone().insertBefore($barTemplate).removeClass('item-detail-choice-template').addClass('item-detail-choice').show();\r\n\r\n\t\t\tconst $itemDetailChoice = $detail.find('.item-detail-choice');\r\n\r\n\t\t\t// Extra label\r\n\t\t\tthis.setExtraLabelOnDetail($detail[0], design);\r\n\r\n\t\t\tif (this.setDesignActivedForBackGround($itemDetailChoice.parent(), design, '.item-detail-choice-wrapper', eXpress.services.DSPType.OpenDSP))\r\n\t\t\t\t$detail.addClass('has-bgcolors');\r\n\r\n\t\t\t// The alternative colors // OpenDSP\r\n\t\t\tif (this.createTileAlternativeColors($itemDetailChoice, design, '.item-detail-choice-wrapper', eXpress.services.DSPType.OpenDSP))\r\n\t\t\t\t$detail.addClass('has-colors');\r\n\r\n\t\t\t/* // WEB-5324: Hide constellations on open DSP\r\n\t\t\t// Fill in the alternative categories\r\n\t\t\tif (this.createTileConstellations($itemDetailChoice, design, constellations, '.item-detail-choice-wrapper'))\r\n\t\t\t\t$detail.addClass('has-constellations');\r\n\t\t\t*/\r\n\r\n\t\t\t// Fill in the options\r\n\t\t\tif (this.createTileOptions($itemDetailChoice, designDetail.productOptionGroups, '.item-detail-choice-wrapper', design.dspOverlayUrl, design.openDspOverlayUrl))\r\n\t\t\t\t$detail.addClass('has-options');\r\n\r\n\t\t\t// Fill in the alternative categories\r\n\t\t\tif (this.createTileProductAlternatives($itemDetailChoice, design, '.item-detail-choice-wrapper', eXpress.services.DSPType.OpenDSP))\r\n\t\t\t\t$detail.addClass('has-categories');\r\n\r\n\t\t\t/* Right side */\r\n\r\n\t\t\t// Set the attributes\r\n\t\t\tlet attrFound = false;\r\n\t\t\tlet defaultAttribute: string | undefined = undefined;\r\n\t\t\tconst $header = $detail.find('.has-attributes');\r\n\t\t\t$header.find('.item-attributes').remove(); // Remove existing\r\n\t\t\tif (designDetail.attributeDetails && designDetail.attributeDetails.values && designDetail.attributeDetails.values.length > 0) {\r\n\t\t\t\t$detail.find('.attribute-name').html(designDetail.attributeDetails.name);\r\n\r\n\t\t\t\tconst $attrTemplate = $detail.find('.item-attributes-template');\r\n\t\t\t\t$attrTemplate.find('input.quantity-input').val('');\r\n\t\t\t\tfor (let ai = 0; ai < designDetail.attributeDetails.values.length; ai++) {\r\n\t\t\t\t\tconst $attrNew = $attrTemplate.clone().insertBefore($attrTemplate);\r\n\t\t\t\t\t$attrNew.removeClass('item-attributes-template').addClass('item-attributes').show();\r\n\r\n\t\t\t\t\tconst attrValue = designDetail.attributeDetails.values[ai];\r\n\t\t\t\t\t$attrNew.find('.size').html(attrValue.name);\r\n\t\t\t\t\t$attrNew.attr('data-attributecode', attrValue.code.toLowerCase());\r\n\t\t\t\t\tif (attrValue.default)\r\n\t\t\t\t\t\tdefaultAttribute = attrValue.code.toLowerCase();\r\n\t\t\t\t\tif (this.currentAttribute && this.currentAttribute.toLowerCase() === attrValue.code.toLowerCase()) {\r\n\t\t\t\t\t\tattrFound = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (!attrFound && !defaultAttribute) {\r\n\t\t\t\t\t// No default attribute was set, pick any ?\r\n\t\t\t\t\tdefaultAttribute = designDetail.attributeDetails.values[0].code.toLowerCase();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// always add / remove active class when a panel gets visible / invisible\r\n\t\t\t\t$detail.find('.has-attributes').addClass(\"active\").show();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// always add / remove active class when a panel gets visible / invisible\r\n\t\t\t\t$detail.find('.has-attributes').removeClass(\"active\").hide();\r\n\t\t\t}\r\n\t\t\tif (!attrFound)\r\n\t\t\t\tthis.currentAttribute = defaultAttribute;\r\n\r\n\t\t\t// Quanity needs to be set AFTER the attributes (since the attribute can change)\r\n\t\t\tif (!keepData) {\r\n\t\t\t\tlet quantities: Quantity[];\r\n\t\t\t\tthis.currentQuantities = [];\r\n\t\t\t\tif (loadQuantitiesFromURL) {\r\n\t\t\t\t\tquantities = quantityQueryStringToModel(utils.getQueryStringParameter('quantity'));\r\n\t\t\t\t\tif (validateQuantities(quantities, designDetail) && quantities.length > 0) {\r\n\t\t\t\t\t\tthis.currentQuantities = quantities;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t// fall back to default behavior\r\n\t\t\t\tif (!this.currentQuantities.length) {\r\n\t\t\t\t\tthis.currentQuantities = [new Quantity(this.currentAttribute, designDetail.quantityBreakPriceDetails.defaultQuantityBreaks)];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// Set the quantity\r\n\t\t\tif (this.currentAttribute) {\r\n\t\t\t\t// Multiple quanities\r\n\t\t\t\tlet total = 0;\r\n\t\t\t\tconst indexesToRemove: number[] = [];\r\n\t\t\t\tfor (let i = 0; i < this.currentQuantities.length; i++) {\r\n\t\t\t\t\tconst $quantityBox = $detail.find('.item-attributes[data-attributecode=' + this.currentQuantities[i].attribute + '] input.quantity-input');\r\n\t\t\t\t\tif ($quantityBox.length > 0) {\r\n\t\t\t\t\t\t$quantityBox.val(this.currentQuantities[i].quantity.toString());\r\n\t\t\t\t\t\ttotal += this.currentQuantities[i].quantity;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t// The attribute that was set it not available for this product\r\n\t\t\t\t\t\tindexesToRemove.push(i);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (indexesToRemove.length > 0) {\r\n\t\t\t\t\tfor (let i = 0; i < indexesToRemove.length; i++) {\r\n\t\t\t\t\t\tthis.currentQuantities.splice(indexesToRemove[i], 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$detail.find('.quantity-total').val(total);\r\n\t\t\t\t$detail.find('.item-quantity').hide();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Single quantity\r\n\t\t\t\tconst $quantity = $detail.find('.item-quantity input');\r\n\t\t\t\t$quantity.val(this.currentQuantities[0].quantity.toString());\r\n\r\n\t\t\t\tif (design.hasSets)\r\n\t\t\t\t\t$detail.find('.technical-dsp-quantity-sets').show();\r\n\t\t\t\telse\r\n\t\t\t\t\t$detail.find('.technical-dsp-quantity-nosets').show();\r\n\t\t\t}\r\n\r\n\r\n\t\t\t// Set the options to show dropdown if not Icons\r\n\t\t\t$detail.find('.item-detail-content-header .item-options').remove(); // Remove existing\r\n\t\t\tlet dspOptionFound = false;\r\n\t\t\tif (designDetail.productOptionGroups && designDetail.productOptionGroups.length > 0) {\r\n\t\t\t\tfor (let oi = 0; oi < designDetail.productOptionGroups.length; oi++) {\r\n\t\t\t\t\toptionGroup = designDetail.productOptionGroups[oi];\r\n\t\t\t\t\tif (optionGroup.inDsp === eXpress.services.OptionInDsp.Dropdown) {\r\n\t\t\t\t\t\tconst $showInDspTemplate = $detail.find('.item-detail-content-header .item-options-template');\r\n\t\t\t\t\t\tconst $showInDspNew = $showInDspTemplate.clone().insertBefore($showInDspTemplate);\r\n\t\t\t\t\t\t$showInDspNew.removeClass('item-options-template').addClass('item-options').show();\r\n\r\n\t\t\t\t\t\t// Add the sibling data\r\n\t\t\t\t\t\t$showInDspNew.attr('optiongroup', optionGroup.code);\r\n\t\t\t\t\t\t$showInDspNew.attr('siblingdatapagetitle', optionGroup.siblingDataPageTitle || \"\");\r\n\t\t\t\t\t\t$showInDspNew.attr('siblingoptionusps', optionGroup.siblingDataOptionUSPs);\r\n\r\n\t\t\t\t\t\tconst $showInDspList = $showInDspNew.find('.selectbox-choices');\r\n\t\t\t\t\t\tconst $showInDspLabel = $showInDspList.find('label');\r\n\t\t\t\t\t\tconst $showInDspCurrentSelected = $showInDspNew.find('.selectBox label');\r\n\t\t\t\t\t\t// Fill in the optiongroup name\r\n\t\t\t\t\t\t$showInDspNew.find('> label').html(optionGroup.name + ':');\r\n\t\t\t\t\t\t$showInDspCurrentSelected.html($showInDspLabel.html());\r\n\t\t\t\t\t\t// the rest\r\n\t\t\t\t\t\tif (optionGroup.productOptions) {\r\n\t\t\t\t\t\t\tfor (let oj = 0; oj < optionGroup.productOptions.length; oj++) {\r\n\t\t\t\t\t\t\t\toption = optionGroup.productOptions[oj];\r\n\t\t\t\t\t\t\t\tconst $showInDspClone = $showInDspLabel.clone();\r\n\t\t\t\t\t\t\t\t$showInDspClone.html(option.shortName);\r\n\t\t\t\t\t\t\t\t$showInDspClone.attr('data-optioncode', option.code);\r\n\t\t\t\t\t\t\t\t$showInDspClone.attr('data-alternativeoptiongroup', option.alternativeOptionGroup);\r\n\t\t\t\t\t\t\t\t$showInDspClone.attr('data-optionname', option.name);\r\n\t\t\t\t\t\t\t\t$showInDspClone.attr('data-optionprice', option.price);\r\n\t\t\t\t\t\t\t\t$showInDspList.append($showInDspClone);\r\n\r\n\t\t\t\t\t\t\t\tif (this.currentOption2 && this.currentOption2.code === option.code.toLowerCase()) {\r\n\t\t\t\t\t\t\t\t\tdspOptionFound = true;\r\n\t\t\t\t\t\t\t\t\t$showInDspClone.addClass('checked');\r\n\t\t\t\t\t\t\t\t\t$showInDspCurrentSelected.html(option.shortName);\r\n\t\t\t\t\t\t\t\t\tthis.setSiblingData($detail, $showInDspClone, $showInDspNew, this.currentOption2);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (!dspOptionFound)\r\n\t\t\t\t\t\t\t$showInDspLabel.addClass('checked');\r\n\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.currentOption2 && !dspOptionFound)\r\n\t\t\t\tthis.currentOption2 = undefined;\r\n\r\n\r\n\t\t\t// The editor buttons\r\n\t\t\tlet startUrl = designDetail.editorStartLink;\r\n\t\t\tstartUrl = this.modifyStartLinkUrl(startUrl);\r\n\t\t\t$detail.find('.dsp-next').attr('href', startUrl);\r\n\r\n\t\t\t// The product information\r\n\t\t\tconst $productname = $information.find('.productname');\r\n\t\t\t$productname.empty();\r\n\t\t\tif (design.product) {\r\n\t\t\t\tconst yourChoice = this.pageContext!.labelYourChoice ? this.pageContext.labelYourChoice : \"\";\r\n\t\t\t\t$information.find('.productname').append('
  • ' + yourChoice + ' ' + design.product.name + '
');\r\n\t\t\t}\r\n\r\n\t\t\tif (!$usps.html())\r\n\t\t\t\t$usps.html(designDetail.usps);\r\n\t\t\t$usps.attr('original', designDetail.usps);\r\n\r\n\t\t\tconst $dimensions = $information.find('.technical-dimension-usp');\r\n\t\t\t$dimensions.empty();\r\n\t\t\tif (design.productCategory.showMeasurements && (designDetail.productDimensions || design.dimensions)) {\r\n\t\t\t\tconst measurements = this.pageContext!.labelMeasurements ? this.pageContext.labelMeasurements : \"\";\r\n\t\t\t\tconst appendedValue = '
  • ' + measurements + ' ' + (designDetail.productDimensions ? designDetail.productDimensions : design.dimensions) + '
  • ';\r\n\t\t\t\t$dimensions.append(appendedValue);\r\n\r\n\t\t\t}\r\n\r\n\t\t\tconst $dspname = $information.find('.dspname');\r\n\t\t\t$dspname.empty();\r\n\t\t\tif (design.dspName)\r\n\t\t\t\tif (!design.product || design.dspName !== design.product.name)\r\n\t\t\t\t\t$dspname.append('
    • ' + design.dspName + '
    ');\r\n\r\n\t\t\t// The pricing information\r\n\t\t\tconst $priceList = $detail.find('.item-pricing table tbody').detach();\r\n\t\t\tconst $priceTemplate = $priceList.find('tr').first().detach();\r\n\t\t\t$priceList.empty();\r\n\t\t\tif (designDetail.quantityBreakPriceDetails && designDetail.quantityBreakPriceDetails.quantityBreaks && designDetail.quantityBreakPriceDetails.quantityBreaks.length > 1) {\r\n\t\t\t\tlet $previous: JQuery | null = null;\r\n\t\t\t\tlet $prevAmount: JQuery | null = null;\r\n\r\n\t\t\t\tlet optionPriceToAdd = 0;\r\n\t\t\t\tif (this.currentOption1 && this.optionGroup && this.currentOption1.optionGroup.toLowerCase() === this.optionGroup.toLowerCase())\r\n\t\t\t\t\toptionPriceToAdd = this.currentOption1.price;\r\n\t\t\t\telse if (this.currentOption2 && this.optionGroup && this.currentOption2.optionGroup.toLowerCase() === this.optionGroup.toLowerCase())\r\n\t\t\t\t\toptionPriceToAdd = this.currentOption2.price;\r\n\r\n\t\t\t\tfor (let j = 0; j < designDetail.quantityBreakPriceDetails.quantityBreaks.length; j++) {\r\n\t\t\t\t\t// Modify the previous to include the upper limit\r\n\t\t\t\t\tif ($previous) {\r\n\t\t\t\t\t\t$prevAmount = $previous.find('.amount');\r\n\t\t\t\t\t\tconst upperLimit = designDetail.quantityBreakPriceDetails.quantityBreaks[j].break - 1;\r\n\t\t\t\t\t\tif ($prevAmount.html() !== upperLimit.toString())\r\n\t\t\t\t\t\t\t$prevAmount.html($prevAmount.html() + ' - ' + upperLimit.toString());\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst $priceNew = $priceTemplate.clone();\r\n\t\t\t\t\t$priceNew.find('.amount').html(designDetail.quantityBreakPriceDetails.quantityBreaks[j].break.toString());\r\n\t\t\t\t\tconst $htmlPrice = $priceNew.find('.price');\r\n\t\t\t\t\t$htmlPrice.attr('data-price', designDetail.quantityBreakPriceDetails.quantityBreaks[j].price);\r\n\t\t\t\t\t$htmlPrice.html(utils.displayPrice(designDetail.quantityBreakPriceDetails.quantityBreaks[j].price + optionPriceToAdd, true, false, this.pageContext));\r\n\t\t\t\t\t$priceList.append($priceNew);\r\n\t\t\t\t\t$previous = $priceNew;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ($previous) {\r\n\t\t\t\t\t$prevAmount = $previous.find('.amount');\r\n\t\t\t\t\t$prevAmount.html($prevAmount.html() + ' +');\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$detail.find('.item-pricing table').append($priceList);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\t$detail.find('.item-pricing').remove();\r\n\t\t\tthis.updatePriceDetail($detail.find('.price-tag'), $detail.find('.price-detail-list'));\r\n\r\n\t\t\t// The variable pricing information\r\n\t\t\tif (designDetail.variablePriceDetails) {\r\n\t\t\t\tconst $varPrice = $detail.find('.variable-price');\r\n\t\t\t\tconst lis = $varPrice.find('li');\r\n\t\t\t\t// The first one is the base amount\r\n\t\t\t\t$(lis[0]).html(utils.displayPrice(designDetail.variablePriceDetails.BaseCost, true, false, this.pageContext) + ' - ' + this.pageContext.labelStartingPrice.replace('{0}', designDetail.variablePriceDetails.BaseAmount));\r\n\t\t\t\t$(lis[1]).html(this.pageContext.labelExpandableUpTo.replace('{0}', designDetail.variablePriceDetails.MaxPages));\r\n\t\t\t\t$(lis[2]).html(utils.displayPrice(designDetail.variablePriceDetails.VariableCost / designDetail.variablePriceDetails.VariableAmount, true, false, this.pageContext) + ' - ' + this.pageContext.labelExtraPage);\r\n\r\n\t\t\t\t$varPrice.show();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t$detail.find('.variable-price').hide();\r\n\t\t\t}\r\n\r\n\t\t\t// The options\r\n\t\t\tif (designDetail.productOptionGroups && designDetail.productOptionGroups.length > 0) {\r\n\t\t\t\t$detail.find('h2.detail-content-options').show();\r\n\t\t\t\tconst $optionList = $detail.find('.accordion-item.detail-content-options').detach();\r\n\t\t\t\tconst $optionTemplate = $optionList.children('div').first().detach();\r\n\t\t\t\t$optionList.empty();\r\n\t\t\t\tfor (let k = 0; k < designDetail.productOptionGroups.length; k++) {\r\n\t\t\t\t\tconst $optionNew = $optionTemplate.clone();\r\n\t\t\t\t\tconst $optionHeader = $optionNew.find('h3').detach();\r\n\t\t\t\t\tconst $priceHeader = $optionHeader.find('.option-price').detach();\r\n\t\t\t\t\tconst $priceLabel = $optionNew.find('.info-remark').detach();\r\n\t\t\t\t\tconst $priceLabel2 = $optionNew.find('.multipe-prices').detach();\r\n\t\t\t\t\t$optionHeader.html(designDetail.productOptionGroups[k].name);\r\n\t\t\t\t\tlet hasDifferentPrices = false;\r\n\t\t\t\t\tlet hasVarPrice = false;\r\n\t\t\t\t\tconst productOptions = designDetail.productOptionGroups[k].productOptions;\r\n\t\t\t\t\tif (!productOptions) throw new Error(\"ProductOptionGroup has no productOptions\");\r\n\t\t\t\t\tconst opt = productOptions[0];\r\n\t\t\t\t\tlet lowestPriceOption = opt;\r\n\t\t\t\t\tfor (let x = 1; x < productOptions.length; x++) {\r\n\t\t\t\t\t\tconst secondOpt = productOptions[x];\r\n\t\t\t\t\t\t// if VarPrice\r\n\t\t\t\t\t\tif (opt.varPrice > 0) {\r\n\t\t\t\t\t\t\thasVarPrice = true;\r\n\t\t\t\t\t\t\tif (opt.varPrice !== secondOpt.varPrice) {\r\n\t\t\t\t\t\t\t\thasDifferentPrices = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (secondOpt.varPrice < lowestPriceOption.varPrice)\r\n\t\t\t\t\t\t\t\tlowestPriceOption = opt;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif (opt.price !== secondOpt.price) {\r\n\t\t\t\t\t\t\t\thasDifferentPrices = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (secondOpt.price < lowestPriceOption.price)\r\n\t\t\t\t\t\t\t\tlowestPriceOption = secondOpt;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// check if there are multiple items in pricelist\r\n\t\t\t\t\tif (hasVarPrice) {\r\n\t\t\t\t\t\t$priceHeader.html(utils.displayPrice(lowestPriceOption.varPrice, true, true, this.pageContext));\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (hasDifferentPrices) {\r\n\t\t\t\t\t\t\t$priceHeader.html(utils.formatString(this.contentManager.getLabel(\"Label.DspMulti.PriceStartingFrom\"), utils.displayPrice(lowestPriceOption.price, true, false, this.pageContext)));\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t$priceHeader.html(utils.displayPrice(lowestPriceOption.price, true, false, this.pageContext));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$optionHeader.append($priceHeader);\r\n\t\t\t\t\t$optionNew.empty();\r\n\t\t\t\t\t$optionNew.append($optionHeader);\r\n\t\t\t\t\t$optionNew.append(designDetail.productOptionGroups[k].description);\r\n\t\t\t\t\tif (hasVarPrice)\r\n\t\t\t\t\t\t$optionNew.append($priceLabel);\r\n\t\t\t\t\tif (hasDifferentPrices)\r\n\t\t\t\t\t\t$optionNew.append($priceLabel2);\r\n\t\t\t\t\t$optionList.append($optionNew);\r\n\t\t\t\t}\r\n\t\t\t\t$optionList.insertAfter($detail.find('.accordion-header.detail-content-options'));\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t$detail.find('h2.detail-content-options').hide();\r\n\t\t\t}\r\n\t\t\t// The delivery details\r\n\t\t\tif (designDetail.shipmentDetails.HideAllShipmentDetails) {\r\n\t\t\t\t$detail.find('.technical-shipmentdetails').addClass('u-hide');\r\n\t\t\t\t$detail.find('.technical-hideshipmentdetails').removeClass('u-hide');\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t$detail.find('.technical-shipmentdetails').removeClass('u-hide');\r\n\t\t\t\t$detail.find('.technical-hideshipmentdetails').addClass('u-hide');\r\n\t\t\t\t$detail.find('.delivery-item2 .info').html(designDetail.shipmentDetails.LastDeliveryOn);\r\n\t\t\t\t$detail.find('.delivery-item3 .info').html(designDetail.shipmentDetails.ShipmentPrice);\r\n\t\t\t}\r\n\r\n\t\t\t// Replace the social icons URLs & Images\r\n\t\t\t$detail.find('.social').remove();\r\n\t\t\tconst $socialTemplate = $detail.find('.social-template');\r\n\t\t\tconst social = $socialTemplate.clone();\r\n\t\t\tlet socialHtml = social.html();\r\n\t\t\tsocialHtml = socialHtml.replace(/SOCIALIMAGE/g, encodeURIComponent(this.pageContext.cdn + '/products/' + design.packshotUrl + \"?\" + this.context.productRevision));\r\n\t\t\tsocial.html(socialHtml);\r\n\t\t\tsocial.insertBefore($socialTemplate).removeClass('social-template').addClass('social').show();\r\n\r\n\r\n\t\t\t// Actually show the detail block\r\n\t\t\tconst $nextElement = this.checkNextElement($item);\r\n\t\t\tif ($nextElement)\r\n\t\t\t\t$detail.hide().insertBefore(this.checkNextElement($item));\r\n\t\t\telse\r\n\t\t\t\tthis.dspItemList.append($detail.hide());\r\n\r\n\t\t\t$detail.show();\r\n\r\n\t\t\tthis.suppressScrollToAccordion = true;\r\n\r\n\t\t\tconst $contentAccordions = $detail.find(\".item-detail-content-accordions\");\r\n\t\t\tif ($contentAccordions.data(\"ui-accordion\"))\r\n\t\t\t\t$contentAccordions.accordion(\"destroy\");\r\n\r\n\t\t\t$contentAccordions.accordion({\r\n\t\t\t\theightStyle: \"content\",\r\n\t\t\t\tcollapsible: true,\r\n\t\t\t\tactive: 0,\r\n\t\t\t\theader: \".accordion-header.active\", // always add / remove active class when a panel gets visible / invisible\r\n\t\t\t\tactivate: (e, ui) => {\r\n\t\t\t\t\tthis.accordionTabActivated(ui);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// @ts-ignore\r\n\t\t\t$slider.slick({\r\n\t\t\t\tslidesToShow: 1,\r\n\t\t\t\tinfinite: true\r\n\t\t\t});\r\n\r\n\t\t\tif (!keepData) {\r\n\t\t\t\t$('html,body').animate({ scrollTop: $detail.offset()!.top }, 'fast');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate repositionDetail(): void {\r\n\t\t\tconst $detail = $(\".item-detail\");\r\n\t\t\tconst $item = $('.item.active');\r\n\t\t\tif ($item.length > 0) {\r\n\t\t\t\t$detail.detach();\r\n\t\t\t\tconst $nextElement = this.checkNextElement($item);\r\n\t\t\t\tif ($nextElement)\r\n\t\t\t\t\t$detail.hide().insertBefore(this.checkNextElement($item));\r\n\t\t\t\telse\r\n\t\t\t\t\tthis.dspItemList.append($detail.hide());\r\n\t\t\t\t$detail.show();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t$detail.detach();\r\n\t\t\t\tthis.dspItemList.append($detail.hide());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate checkNextElement($item: any): any {\r\n\t\t\tconst currentTop = $item.offset().top;\r\n\t\t\tconst $next = $item.next();\r\n\t\t\tif ($next.length) {\r\n\t\t\t\tif (currentTop < $next.offset().top) {\r\n\t\t\t\t\treturn $next;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\treturn this.checkNextElement($next);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate setHistoryUrl(): void {\r\n\t\t\t// construct the URL\r\n\t\t\tlet url = '';\r\n\r\n\t\t\tif (this.mainProductCategoryGroupCode)\r\n\t\t\t\turl += '&pcg=' + this.mainProductCategoryGroupCode.toLowerCase();\r\n\r\n\t\t\t// Add the different filters\r\n\t\t\tif (this.occasion)\r\n\t\t\t\turl += '&occ=' + this.occasion.toLowerCase();\r\n\t\t\tif (this.purpose)\r\n\t\t\t\turl += '&purpose=' + this.purpose.toLowerCase();\r\n\t\t\tif (this.theme)\r\n\t\t\t\turl += '&theme=' + this.theme.toLowerCase();\r\n\t\t\tif (this.options)\r\n\t\t\t\turl += '&options=' + this.options.toLowerCase();\r\n\t\t\tif (this.productCode && this.productCode.length > 0)\r\n\t\t\t\turl += '&p=' + this.productCode.sort().join(',').toLowerCase();\r\n\t\t\tif (this.orientation)\r\n\t\t\t\turl += '&or=' + this.orientation.toLowerCase();\r\n\t\t\tif (this.predefinedProductCategory && this.predefinedProductCategory.length > 0)\r\n\t\t\t\turl += '&ds=' + this.predefinedProductCategory.sort().join(',').toLowerCase();\r\n\t\t\tif (this.searchColor && this.searchColor.length > 0)\r\n\t\t\t\turl += '&sc=' + this.searchColor.sort().join(',').toLowerCase();\r\n\t\t\tif (this.imageCount && this.imageCount.length > 0)\r\n\t\t\t\turl += '&ic=' + this.imageCount.join(',').toLowerCase();\r\n\t\t\tif (this.price && this.price.length > 0)\r\n\t\t\t\turl += '&pr=' + this.price.join(',').toLowerCase();\r\n\t\t\tif (this.ownDesign)\r\n\t\t\t\turl += '&cod=true';\r\n\t\t\tif (this.gender)\r\n\t\t\t\turl += '&g=' + this.gender.toLowerCase();\r\n\r\n\t\t\tif (this.currentProductCode)\r\n\t\t\t\turl += '&cpc=' + this.currentProductCode.toLowerCase();\r\n\t\t\tif (this.currentPredefinedProductName)\r\n\t\t\t\turl += '&cppn=' + this.currentPredefinedProductName.toLowerCase();\r\n\t\t\tif (this.crossSellFrom)\r\n\t\t\t\turl += '&crossSellFrom=' + this.crossSellFrom.toLowerCase();\r\n\t\t\tif (this.currentAttribute)\r\n\t\t\t\turl += '&attr=' + this.currentAttribute.toLowerCase();\r\n\t\t\tif (this.sortMethod)\r\n\t\t\t\turl += '&sortmethod=' + this.sortMethod.toLowerCase();\r\n\t\t\tif (this.designGroup)\r\n\t\t\t\turl += '&dg=' + this.designGroup.toLowerCase();\r\n\r\n\t\t\tif (this.defaultOptions && this.defaultOptions.length > 0)\r\n\t\t\t\turl += '&options=' + this.defaultOptions.sort().join(',').toLowerCase();\r\n\r\n\t\t\tif (this.optionGroup)\r\n\t\t\t\turl += '&optiongroup=' + this.optionGroup.toLowerCase();\r\n\r\n\t\t\tif (eXpress.utils.getQueryStringParameter(\"debug\"))\r\n\t\t\t\turl += '&debug=true';\r\n\r\n\t\t\tconst quantity = utils.getQueryStringParameter('quantity');\r\n\t\t\tif (quantity) {\r\n\t\t\t\turl += '&quantity=' + quantity;\r\n\t\t\t}\r\n\r\n\t\t\t// Replace the first & by a ?\r\n\t\t\tif (url.length > 0)\r\n\t\t\t\turl = '?' + url.substr(1);\r\n\r\n\t\t\tif (historyJs.replaceState) {\r\n\t\t\t\thistoryJs.replaceState(null, \"\", url);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate updateFilterCount($labelList: JQuery, countList: services.IDesignFilterItemCount[]) {\r\n\r\n\t\t\t$labelList.each(function () {\r\n\t\t\t\tconst $label = $(this);\r\n\t\t\t\tconst code = $label.attr('data-sp-filter-tag') || \"\";\r\n\r\n\t\t\t\t// Find the value in the API supplied data\r\n\t\t\t\tlet found = false;\r\n\t\t\t\t$.each(countList, (index, value) => {\r\n\t\t\t\t\tif (value && value.Name && value.Name.toLowerCase() === code.toLowerCase()) {\r\n\t\t\t\t\t\t$label.find('.filter-amount').html(value.Count.toString());\r\n\t\t\t\t\t\tif (value.Count === 0)\r\n\t\t\t\t\t\t\t$label.addClass('disabled');\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t$label.removeClass('disabled');\r\n\t\t\t\t\t\tfound = true;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tif (!found) {\r\n\t\t\t\t\t$label.find('.filter-amount').html('(0)');\r\n\t\t\t\t\t$label.addClass('disabled');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tprivate accordionTabActivated($ui: any): void {\r\n\t\t\tif (this.suppressScrollToAccordion) {\r\n\t\t\t\tthis.suppressScrollToAccordion = false;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif ($ui.newHeader && $ui.newHeader.length > 0) {\r\n\t\t\t\tconst $elem = $ui.newHeader;\r\n\t\t\t\tconst $window = $(window);\r\n\r\n\t\t\t\tconst docViewTop = $(window).scrollTop()! + this.headerHeight; // Can't see behind the header\r\n\t\t\t\tconst docViewBottom = docViewTop + $window.height()!;\r\n\r\n\t\t\t\tconst elemTop = $elem.offset().top;\r\n\r\n\t\t\t\tif (elemTop < docViewTop || elemTop > docViewBottom) {\r\n\t\t\t\t\t$('html,body').animate({ scrollTop: $elem.offset().top - this.headerHeight }, 'slow');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate validateInput() {\r\n\t\t\t// We need at least 1 quantity field to be > 0\r\n\t\t\tif (this.currentAttribute) {\r\n\t\t\t\tlet total = 0;\r\n\t\t\t\tfor (let i = 0; i < this.currentQuantities.length; i++) {\r\n\t\t\t\t\ttotal += this.currentQuantities[i].quantity;\r\n\t\t\t\t}\r\n\t\t\t\tif (total <= 0) {\r\n\t\t\t\t\tthis.flagInputAsInvalid($('.item-detail.visible .item-attributes .quantity-input'));\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// this was partially implied. returning undefined on the jQuery handler gave a result no different from returning true.\r\n\t\t\t\t// I assume that was not intentional\r\n\t\t\t\tconst currentQuantity = this.currentQuantities[0];\r\n\t\t\t\treturn !!(currentQuantity && currentQuantity.quantity > 0);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate flagInputAsInvalid($boxes: any) {\r\n\t\t\t$boxes.css('border', '1px solid red');\r\n\t\t\tsetTimeout(function () { $boxes.animate({ borderTopColor: '#c4c2d1', borderRightColor: '#c4c2d1', borderBottomColor: '#c4c2d1', borderLeftColor: '#c4c2d1' }, 500); }, 300);\r\n\t\t}\r\n\r\n\t\tprivate modifyStartLinkUrl(url: string) {\r\n\t\t\tif (this.occasion)\r\n\t\t\t\turl = utils.updateParameter('occ', this.occasion, url);\r\n\t\t\tif (this.theme)\r\n\t\t\t\turl = utils.updateParameter('theme', this.theme, url);\r\n\t\t\tif (this.options)\r\n\t\t\t\turl = utils.updateParameter('options', this.options, url);\r\n\t\t\tif (this.purpose)\r\n\t\t\t\turl = utils.updateParameter('purpose', this.purpose, url);\r\n\t\t\tif (this.occasionPackshot)\r\n\t\t\t\turl = utils.updateParameter('occpackshot', this.occasionPackshot, url);\r\n\t\t\tif (this.purposePackshot)\r\n\t\t\t\turl = utils.updateParameter('purposepackshot', this.purposePackshot, url);\r\n\t\t\tif (this.productCode && this.productCode.length > 0)\r\n\t\t\t\turl = utils.updateParameter('p', this.productCode.sort().join(',').toLowerCase(), url);\r\n\t\t\tif (this.orientation)\r\n\t\t\t\turl = utils.updateParameter('or', this.orientation.toLowerCase(), url);\r\n\t\t\tif (this.predefinedProductCategory && this.predefinedProductCategory.length > 0)\r\n\t\t\t\turl = utils.updateParameter('ds', this.predefinedProductCategory.sort().join(',').toLowerCase(), url);\r\n\t\t\tif (this.searchColor && this.searchColor.length > 0)\r\n\t\t\t\turl = utils.updateParameter('sc', this.searchColor.sort().join(',').toLowerCase(), url);\r\n\t\t\tif (this.imageCount && this.imageCount.length > 0)\r\n\t\t\t\turl = utils.updateParameter('ic', this.imageCount.join(',').toLowerCase(), url);\r\n\t\t\tif (this.price && this.price.length > 0)\r\n\t\t\t\turl = utils.updateParameter('pr', this.price.sort().join(',').toLowerCase(), url);\r\n\t\t\tif (this.ownDesign)\r\n\t\t\t\turl = utils.updateParameter('cod', 'true', url);\r\n\t\t\tif (this.currentProductCode)\r\n\t\t\t\turl = utils.updateParameter('cpc', this.currentProductCode.toLowerCase(), url);\r\n\t\t\tif (this.currentPredefinedProductName)\r\n\t\t\t\turl = utils.updateParameter('cppn', this.currentPredefinedProductName.toLowerCase(), url);\r\n\t\t\tif (this.currentCartId)\r\n\t\t\t\turl = utils.updateParameter('cartid', this.currentCartId.toLowerCase(), url);\r\n\t\t\tif (this.currentAttribute && this.currentProductCode)\r\n\t\t\t\turl = utils.updateParameter('pvc', this.currentProductCode.toLowerCase() + '_' + this.currentAttribute.toLowerCase(), url);\r\n\t\t\tif (this.gender)\r\n\t\t\t\turl = utils.updateParameter('g', this.gender, url);\r\n\t\t\tif (this.crossSellFrom)\r\n\t\t\t\turl = utils.updateParameter('crossSellFrom', this.crossSellFrom, url);\r\n\r\n\t\t\tconst allOptions = [this.currentOption1, this.currentOption2].filter(function (val) { return (val && val.code); }).map(v => v!.code).join(',');\r\n\t\t\tif (allOptions !== '')\r\n\t\t\t\turl += '&options=' + allOptions;\r\n\t\t\turl += '&quantity=' + utils.arrayToQuerystring(this.currentQuantities);\r\n\r\n\t\t\treturn url;\r\n\t\t}\r\n\t}\r\n\r\n\t$(function () {\r\n\t\tconst services = new eXpress.services.Services(eXpress.core.context);\r\n\r\n\t\tconst deps: IDspAppDependencies = {\r\n\t\t\torderService: new eXpress.services.OrderService(eXpress.core.context),\r\n\t\t\tcontentService: new eXpress.services.ContentService(eXpress.core.context)\r\n\t\t};\r\n\t\tconst app = new DspApp(deps, services, eXpress.core.context, pageContext as core.IDspMultiProductPageContext);\r\n\t\tapp.start();\r\n\t});\r\n}\r\n"],"names":["eXpress","historyJs","history","dsp","AdvantageType","quantityQueryStringToModel","quantityString","indexOf","split","map","part","parts","attribute","length","quantity","parseInt","Quantity","toLowerCase","isNaN","undefined","AppliedAdvantage","this","prototype","toString","CurrentOption","DspApp","_super","deps","services","context","pageContext","_this","imageCount","price","currentQuantities","designs","totalDesignCount","deviceIsMobile","activeProductGroupAlternatives","constellations","orderService","contentService","contentManager","core","ContentManager","GetCookie","windowWidth","$","window","width","mainProductCategoryGroupCode","utils","getQueryStringParameter","enableOccasionFilter","occasion","enablePurposeFilter","purpose","theme","options","crossSellFrom","preselectOccasion","productCode","enableOrientationFilter","orientation","enablePredefinedProductCategoryFilter","predefinedProductCategory","enableColorFilter","searchColor","enableNumberOfPhotosFilter","strImageCount","ic","filter","x","enablePriceFilter","strPrice","p","parseFloat","enableGenderFilter","gender","currentProductCode","currentPredefinedProductName","currentCartId","currentAttribute","tempPvc","pos","substring","sortMethod","designGroup","helpers","isMobileSize","ownDesign","defaultOptions","optionGroup","pageNumber","amountOfDesignsToFetch","pageSize","currentOption1","currentOption2","headerHeight","getHeaderHeight","filterResultsRequester","DetectLast","selectionPage","getDesignsAsync","pointOfSaleId","languageCode","dspItemList","dspItemListFooter","dspContentFilter","filterChoice","filterToggle","acceptFilter","acceptSorting","showAllFilters","deleteTagFiler","deleteAllTagFilters","filterSelectionTags","filterSorting","slider","activeTag","remark","toggle","body","__extends","start","clear","loadLabels","always","loadAdditionalIcons","showLoadingDialogAsync","fetchPageAsync","then","designKeys","addItems","hideAndShowForOwnDesign","addHandlers","getIconsByNameAsync","getLabelsAsync","showCurrentDetail","$existingTile","hasClass","showDetailClick","$new_1","clone","GetOrLoadDesignAsync","design","temporaryUnavailable","$newTile","createTile","DSPType","ListDSP","prepend","resize","css","newWindowWidth","repositionDetail","on","e","stopBubble","$target","currentTarget","parent","is","closest","$tile","hideDetailClick","changeTileClicked","attr","showMore","removeClass","document","addClass","html","getLabel","toggleClass","find","each","designFilterChanged","acceptFiltering","prop","show","$requester","target","preventDefault","stopPropagation","$parent","$multiselect","isSorting","value","itemsChecked","changeSorting","changeFilter","loadFilterCount","hide","values_1","push","setFilterState","filterName","checkedLabels","changedSlider","$slider","min","max","val","displayPrice","resetSliders","not","remove","removeFilters","filterValue","$filter","values_2","index","element","$element","startMin","startMax","startAttr","startSplit","step","minInput","maxInput","range","values","change","_event","ui","handle","$slider_1","$multiselect_1","slide","$slider_2","ev","maxvalue","match","replace","minvalue","toggleOwnDesign","dataLayer","datalayerversion","gtmData","eventCategory","eventAction","currentProductName","eventLabel","eventProduct","event","ecommerce","detail","actionField","products","id","variant","currentPvc","name","category","currentCategoryList","dimension11","changeOptions","changeDspOptions","PreventInvalidInput","changeQuantity","changeQuantityPlusMin","changeDspAttribute","validateInput","HTMLElement","$select","hasItemsSelected","$sliderParents","has","i","$sliderParent","$sliderMinInput","$sliderMaxInput","$el","stringValues_1","indx","el","numberValues","$sliderMin","$sliderMax","minSelected","maxSelected","v","disableFilterCounters","filterCountName","DesignFilterCountName","Occasion","Purpose","Productcode","Orientation","Predefinedproductcategory","Searchcolor","getFilterCountAsync","result","$label","updateFilterCount","designFilter","GetDesignFilterCount","clearFilterCounts","removeAttr","ShowLoadingDialog","fetchPageAndRenderAsync","execAsync","res","isLastRequested","designResult","newDesignKeys_1","saveDesigns","loadIconsAsync","Deferred","resolve","promise","saveConstellations","key","forEach","c","code","getIconUrls","iconsurls","designKey","alternativeColors","__spreadArray","designVariant","icon","ac","productAlternativesGroups","reduce","productAlternatives","pa","url","urls","iconUrls","getIconsAsync","saveDesign","predefinedProductName","__assign","designCount","designFilterCount","d","getDesign","createOpenDspDropDown","$original","list","data","top","$template","$new","$subContainer","detach","$subTemplate","empty","$subNew","label","append","createIcon","$newIcon","dspBehavior","dspType","iconData","alternativeColor","IconSvg","InDsp","IconsSmall","Icons","IconsWithText","Label","getIconByKey","IconColorCode","IconOverLayColorCode","Vertical","createTileAlternativeColors","container","$colorList","$iconTemplate","$itemToInsertBefore","next","product","designVariantInDSP","designVariantInListDSP","designVariantInOpenDSP","Hide","Dropdown","altColorsWithDesignVariants","designVariantNames","designVariantName","topText","$dropDown","insertBefore","j","des","designVariantIcon","iconColorCode","$icon","color","arrayEquals","a","b","Array","isArray","every","createTileProductAlternatives","$altList","$altTemplate","group","productAlternativeInDsp","inListDSP","inOpenDsp","productAlternativeTitles","title","previousProductGroupAlternatives","m","groupProductAlternatives","f","productVariantCode","drawIcons","drawIconsAsync","icons","insertChildAtPosition","child","childNodes","appendChild","k","alt","$catNew","iconOverlayColorCode","pvc","promises","this_1","alternativeDesign","when","apply","createTileConstellations","$list","first","productName","shortName","makeCssClass","createTileOptions","productOptionGroups","defaultDspOverlay","defaultOpenDspOverlay","$optionList","$optionTemplate","l","inDsp","OptionInDsp","productOptions","siblingDataPageTitle","siblingDataOptionUSPs","$optionNew","standardoptionNames","option","alternativeOptionGroup","dspOverlayUrl","openDspOverlayUrl","setSiblingData","standardOptionName","sort","reverse","join","lazy","debug","productCategoryGroups","dspName","$newImage","$filler","fullUrl","packshotUrl","productRevision","displayPricePerUnit","showStar","new","setDesignActivedForBackGround","$adorner","showAdorner","selector","$header","iconsContainerSelector","$iconsContainer","canSwitchBackgroundInCreator","get","$namecontainer","$iconSpan","$iconSymbol","OpenDSP","$cloneContainer","replaceWith","setExtraLabelOnDetail","detailEl","itemLabelEl","querySelector","supportsPersonalData","getLabelAsync","innerHTML","reduceFontsizeToFit","maxPages","Math","ceil","getAttribute","item","concat","totalCount","formatString","$dspItemList","pdp","lazyload","threshold","load","productHasQuantityBreakOnlyInMa","labelStartingAt","HideLoadingDialog","toggleFilters","setHistoryUrl","syncFilter","addTag","$selection","translated","$value","insertAfter","timeout","setTimeout","changeTile","clearTimeout","$item","keepData","loadQuantitiesFromURL","predefinedProductname","categoryList","iframe","contentWindow","pushDataLayer","designPromise","getDesignDetail","designDetail","showDetail","animate","scrollTo","$detail","compensateHeight","offset","scrollTop","outerHeight","$active","performUpdatePriceDetail","$priceTag","$priceDetailList","priceDetails","amount","$container","priceItems","description","calculationDescription","itemTotal","updatePriceDetail","getPriceAsync","promoCode","$break","$h2","$usps","optionCode","classList","lastIndexOf","$next","allOptions","nextUrl","updateParameter","labelText","children","multi","performChangeQuantity","$input","found","total","indexToRemove","newQuantity","splice","arrayToQuerystring","$img","imageUrl","slick","productVariantName","occasionPackshot","occasionPackShot","purposePackshot","purposePackShot","overlayUrl","found1","found2","found3","m_1","selectedOption","defaultProductOption","$information","productCategory","productCategoryCode","productCategoryGroupCode","$previewList","$previewTemplate","productPreviewImageUrls","imageContainer","$previewNew","$barTemplate","$itemDetailChoice","attrFound","defaultAttribute","attributeDetails","$attrTemplate","ai","$attrNew","attrValue","default","quantities","acceptedAttributeCodes","validateQuantities","quantityBreakPriceDetails","defaultQuantityBreaks","indexesToRemove","$quantityBox","hasSets","dspOptionFound","oi","$showInDspTemplate","$showInDspNew","$showInDspList","$showInDspLabel","$showInDspCurrentSelected","oj","$showInDspClone","startUrl","editorStartLink","modifyStartLinkUrl","yourChoice","labelYourChoice","usps","$dimensions","showMeasurements","productDimensions","dimensions","appendedValue","labelMeasurements","$dspname","$priceList","$priceTemplate","quantityBreaks","$previous","$prevAmount","optionPriceToAdd","upperLimit","break","$priceNew","$htmlPrice","variablePriceDetails","$varPrice","lis","BaseCost","labelStartingPrice","BaseAmount","labelExpandableUpTo","MaxPages","VariableCost","VariableAmount","labelExtraPage","$optionHeader","$priceHeader","$priceLabel","$priceLabel2","hasDifferentPrices","hasVarPrice","Error","opt","lowestPriceOption","secondOpt","varPrice","shipmentDetails","HideAllShipmentDetails","LastDeliveryOn","ShipmentPrice","$socialTemplate","social","socialHtml","encodeURIComponent","cdn","checkNextElement","suppressScrollToAccordion","$contentAccordions","accordion","heightStyle","collapsible","active","header","activate","accordionTabActivated","slidesToShow","infinite","currentTop","substr","replaceState","$labelList","countList","Name","Count","$ui","newHeader","$elem","$window","docViewTop","docViewBottom","height","elemTop","currentQuantity","flagInputAsInvalid","$boxes","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","CustomHtmlElementsApp","Services","OrderService","ContentService"],"mappings":"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"}