{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./media/src/js/pages/orderForm.js","webpack:///./media/src/js/angularapp/components/orderFormController.js","webpack:///./media/src/js/classes/delivery-time-service.js","webpack:///./media/src/js/classes/basket.js","webpack:///./media/src/js/classes/profile.js","webpack:///./media/src/js/classes/logging-service.js","webpack:///./media/src/js/modules/product-media.js","webpack:///./media/src/js/modules/script-bundles.js","webpack:///./media/src/js/modules/order-form-assistant.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","15","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","global","Basket","Profile","angularOrderFormController","updateCardText","hideTimeDelivery","fillTestOrder","cookieChecker","CookieChecker","keepAliveUrl","dynamicData","page","virtualRoot","$","document","ready","addEventListener","event","message","JSON","parse","addClass","photoCount","error","showMyBouquet","toggleClass","domReady","angularReady","domAndAngularReady","didUserAlreadyAcceptSpecialTermsInThisSession","senderFieldIsFirstFocus","instructions","cardText","lastSections","onpageshow","persisted","location","reload","sessionStorage","getItem","didUserAcceptSpecialTerms","focus","this","setSelectionRange","keydown","e","charCode","keyCode","preventDefault","modeSettings","isSwissShop","change","priceOption","val","price","attributeId","SetMainProductPriceAndAttribute","gtdl_push","variant","setCustomPriceWithinLimits","attribute","priceBasedImages","imageURL","ImageURL","imageURLZoom","ImageURLZoom","prop","attr","removeClass","parents","hide","setRadioButton","initialPriceSelection","setCustomPriceWithinLimitsDebounced","debounce","priceBeforeLimits","accounting","unformat","roundToFive","minimumPrice","parseFloat","formatNumber","keypress","configurePriceSection","datepicker","setDefaults","regional","session","languageCode2Digit","dateFormat","changeMonth","changeYear","firstDay","minDate","minDeliveryDateString","beforeShowDay","checkIfDateIsDeliverable","onSelect","datePickerOnSelect","off","click","minDeliveryPickupDT","txtBirthday","date","isDeliverable","cssClosedPopup","day","getDay","dateString","jQuery","formatDate","openSundays","indexOf","isHavelaarProduct","exclusiveMemberAdrRef","configureTextboxForBirthdaySelection","configureDatePickers","hover","didUserNoticeDeliveryDate","on","params","id","profile","senderAddress","CountryRegNr","onPaymentMethodChanged","inputs","inputSpinner","addonId","closest","quantity","target","setProductQuantity","setTimeout","toggleAddonProduct","stopPropagation","configureAddonSelection","noGreetingCard","slideUp","noGreetingCardByDefault","deactivateMyCard","setCardInformation","html","textRepository","withMyCardDesigner","is","refresh","resetCardSelection","neutralCard","productItemNeutralCardID","setCardAsActiveAndClearTheRest","selectedCard","cardType","card","chosenCard","parseInt","chosenCardReference","chosenCardImageSrc","cardQuantityBox","chosenQuantity","chosenCardQuantity","chosenCardDescription","chosenCardPrice","updateCardInBasket","cardId","hasClass","next","slideDown","getBasketItemsFromSession","withMyCardDesignerChosen","didSubmitMyCard","configureCardSelection","isB2C","b2bTooltipShown","blur","shouldBeOpen","modal","configureInfoAboutB2BServiceIfSenderIsCompany","focusin","async","loginStateIsLoggedIn","SweetAlert","fire","title","addressDecisionTitle","addressDecisionText","type","showCancelButton","confirmButtonText","addressDecisionConfirmText","cancelButtonText","addressDecisionCancelText","reverseButtons","buttonsStyling","customClass","confirmButton","cancelButton","href","tooltip","template","toggle","placement","important","deliveryInstructionNotice","theText","console","log","zeroValueLabels","textContent","setVariantByQuantity","keyup","setVariantByQuantityDebounced","tbMyBouquetQuantity","SetPositionStart","myBouquetTrackbarPositionChangedImplementation","setClosestVariant","setClosestVariantDebounced","myBouquetCustomPriceInfo","closestItem","myBouquetAmounts","item","isCloser","newItem","oldItem","referencePrice","Math","abs","Price","configureMyBouquet","configureValidationEngine","code","deliveryDate","FleuropWebShop","BasketService","CheckVoucherCodeAndAddToBasket","getOrderForm","processBasketResult","Success","basket","TotalPrice","disableCCMethods","setPaymentTypeOnForm","defaultPaymentCode","toastr","errorWithVoucher","titleGiftCardOnlineVoucher","validationEngine","addPointsPayment","clearErrors","clearInfoTexts","performSessionCookieCheck","supportsSessionCookies","showSpecialTermsDialog","validateSalutation","deliveryTypeId","enums","enmDeliveryType","Abholen","Download","select2Dynamic","zipTownErrorMessage","scrollTo","validateRecipientZipTown","selector","oF_DeliveryInstructionsText","selfPickup_PleaseChooseAFlorist","isExpressProduct","deliveryDateConfirmTitle","text","deliveryDateConfirmText","replace","deliveryDateConfirmButtonConfirm","deliveryDateConfirmButtonCancel","isCardTextEmpty","wishesNoCardtext","emptyCardTextConfirmTitle","emptyCardTextConfirmText","emptyCardTextConfirmButtonConfirm","emptyCardTextConfirmButtonCancel","fetchOnce","checkPaymentLimit","expressAvailable","expressNotAvailableForYourRegion","expressOrder","unbind","__doPostBack","recipientRecipientZipTown","configureZipTownDropdown","regNr","zipTown","removeChosenFlorist","checkDeliveryDate","prevValue","trigger","restoreSelectedDataForSelect2","autoComplete","source","configureSource","delay","minChars","renderItem","configureRenderItem","term","countryRegNr","newRegNr","configureAutocompleters","configureFloristSelectionDialog","showSearchFields","show","empty","TDSelected","FloristService","GetAvailableFloristsForTimeDelivery","Date","toDateString","setFloristList","GetAvailableFlorists","showExpressOption","GetAvailableFloristsForPickup","parent","street","membernumber","floristAddress","setFlorist","configureFloristSelection","TogglePickupServiceCharge","showSelfPickupToday","activateSelfpickup","firstCC","children","configureSelfPickup","fn","datetimepicker","dates","meridiem","language","weekStart","todayBtn","autoclose","todayHighlight","startView","minView","maxView","forceParse","showMeridian","pickerPosition","format","hoursDisabled","find","ev","valueOf","appear","body","$affected","newSections","gtevents","cardSliderAppeared","each","sid","inArray","showFroalaEditor","isFroalaInitialized","loadjs","froalaScriptBundle","success","ww","width","froalaEditorSimple","FroalaEditor","enter","ENTER_BR","toolbarButtons","toolbarButtonsXS","quickInsertButtons","quickInsertTags","toolbarSticky","heightMin","heightMax","initOnClick","charCounterMax","wordCounterCount","pastePlain","imageUpload","imagePaste","wordPasteModal","wordPasteKeepFormatting","wordDeniedTags","pasteDeniedTags","attribution","events","contentChanged","changeEmojisToImagesAndRemoveForbiddenCharacters","initialized","tempCardText","set","htmlEntities","froalaEditorFull","toolbarButtonsSM","moreText","buttons","align","buttonsVisible","moreParagraph","moreRich","moreMisc","fontFamily","fontFamilyDefaultSelection","fontSizeDefaultSelection","fontFamilySelection","fontSizeSelection","fontSize","imageEditButtons","imageInsertButtons","imageDefaultAlign","imageDefaultDisplay","keepFormatOnDelete","editor","selection","save","forEach","Cookiebot","consent","marketing","addBasketItemToVirtualBasket","productID","sessionCookieCheckAlreadyPerformed","field","errorFound","promptText","fieldID","split","product","productId","nameEn","position","index","category","toUpperCase","onAddonClick","timeoutDialog","timeout","countdown","keep_alive_url","logout_redirect_url","homeLink","restart_on_yes","timeoutDialogTitle","timeoutDialogMessage","question","timeoutDialogQuestion","keep_alive_button_text","timeoutDialogYes","sign_out_button_text","timeoutDialogNo","Mousetrap","alert","deliveryDateString","DeliveryTimeService","getDeliveryDateString","numberContent","padStart","subMode","enmShopSubMode","BJB","oF_OrderAlertTitleBjb","oF_OrderAlertTextBjb","includes","css","neutralizeButtonsUppercaseTransformationIfInvalidCharactersPresent","configureOrderFormAssistant","myBouquetTrackbarPositionChanged","restoreSelectedTimeDelivery","isPostback","paymentListingVisible","selectedPaymentCode","isRestoringBasketToOrderForm","termsAndConditionsAccepted","setFocusOnCardErrors","over","top","initializeProductMedia","shouldShowSpecialTermsPopup","specialTermsPopupTitle","specialTermsPopupText","specialTermsPopupAcceptButton","setItem","linksChosenFlorist","showInfoPaymentLimitReached","showInfoInvoiceForForeignNotAllowed","isPaymentTypeCreditcard","select2","selectedOption","Option","append","setDeliveryAddressGlobal","salutationID","vorname","co","zip","city","company","tel1","tel2","tel3","recipientAddressID","findRegionExact","zipPlaceRegNr","dtfield","deliveryDateParameter","setDate","getDate","checkDateParcelShipping","checkDateAndDateDiscounts","morningFrom","dayjs","morningTo","afternoonFrom","afternoonTo","isHoliday","fleuropVoucherPopupTitle","fleuropVoucherPopupText","fleuropVoucherPopupConfirm","fleuropVoucherPopupCancel","fleuropVoucherPdfLink","nextDeliveryDate","showTimeDeliveryOption","TDEnable","timeDeliveryAvailable","startDateFirst","endDateFirst","isAfternoonSet","subtract","startDateLast","add","endDateLast","toDate","Infinity","checkExpressAvailability","year","hideTD","paymentType","setPaymentType","isPaymentTypeInvoice","selectedRadio","parentSection","pleaseChooseSalutation","LoggingService","logOrderformVisit","dataLayer","sessionCookieProblemTitle","sessionCookieProblemText","sessionCookieProblemConfirm","showCookieWarningDialog","shouldFillTestOrder","emptySenderFieldCount","filter","emptyRecipientFieldCount","not","str","String","element","div","startsWith","disableInvoiceMethods","amountOfMyBouquet","GetPositionStart","myBouquetAmountOfFlowersChosen","chosenPrice","imagePreview","remove","SetMainProductPriceMyBouquet","htmlText","parsedHtmlText","parseEmojis","restore","isSwitched","isMyCard","isMyCardSelected","cardData","appWebshop","requires","undefined","controller","$scope","$interval","$http","$timeout","Upload","angular","getLoginState","cardTextCountMax","updatecardTextCountRemaining","updateCardDefaultTexts","getQueryStringParameter","restoreCardFromBasket","getDeliveryAddresses","isLoggedIn","ProfileService","GetDeliveryAddresses","addressListItems","$apply","showNoPleaseLoginDialog","setDeliveryAddress","address","getInvoiceAddresses","GetInvoiceAddresses","addressListItemsInvoice","setBillAddress","showB2BInfoIcon","Firma1","noCardText","cardTextCountRemaining","cardTextOccasion","cardTextLanguage","then","response","status","stopImmediatePropagation","chosenText","cardPreviewImageUrl","envelopePreviewImageUrl","customImageFileName","myCard","myCardSetup","templateID","colorCode","fontID","envelope","createMyCard","FleuropLib","DataAccess","Objects","TemporaryProductCardLayout","CardFontID","CardFontColor","CardLayoutTemplateID","LeftCardImagePath","EnvelopeFontID","EnvelopeFontColor","EnvelopeCardLayoutTemplateID","clt","func","thisController","SetCardProduct","toFixed","image","GetMyCardInfos","IsMyCard","createPreview","orderContrl","GetMyFleuropPreviewImages","setOrderForm","OrderForm","CardUrl","EnvelopeUrl","myCardPreviewSelectedTab","arePreviewImagesReady","openCardPreviewFullsize","open","openEnvelopePreviewFullsize","activeMyCardPreviewTab","isMyCardPreviewTabSelected","myCardSelectedTab","fontPickerActive","activeTemplateClass","activeEnvelopeTemplateClass","activeMyCardTab","activeCardFontClass","activeEnvelopeFontClass","isMyCardTabSelected","copySettingsFromCardToEvenlope","getCardPreviewImageUrl","preview","animate","scrollTop","submit","closeFontSelector2","$on","colorObject","$watch","upload","files","file","url","progress","evt","progressPercentage","loaded","total","config","headers","stringify","initialLoad","Notifications","notif","Message","Title","Items","extend","BasketItems","arr","Reference","DeliveryTypeId","NoGreetingCard","LoadBasket","activeAddonClass","hasAddonProduct","addonDeliveryMessageAustria","ToggleAddonProduct","addonQuantityTextbox","resetTextboxToQuantityOneIfNecessary","SetProductQuantity","isAlcoholInBasket","IsAlcohol","ToggleInvoiceServiceCharge","isOrderFromShopCountry","paymentLimit","shopCountryRegNumbers","newValue","oldValue","ToggleTimeDeliveryServiceCharge","pointsMinimum","pointsRate","pointsMyTotal","pointsToRedeem","pointsOrderTotalCHF","TotalPriceWithoutPoints","pointsOrderTotal","round","hasEnoughPoints","showMyFleuropPayment","checkPoints","rules","options","allrules","min","alertText","ordTotal","myTotal","max","redeemPoints","redeemPrice","AddMyFleuropPayment","myFleuropPointsSuccess","myFleuropPointsTitle","expressGuaranteedDeliveryTime","GetExpressDetails","ExpressAvailable","GuaranteedDeliveryTime","floristList","list","fetchUrl","fetchRetry","err","json","constructor","Sender","Name","Recipient","PriceSubtotal","ProductGroup","AddUpdateItem","UpdateItem","PricePoints","Description","sort","SortItemsByProductGroup","a","b","reference","productGroup","pricePoints","description","shopCountryRegNr","GetLoginState","IsLoggedIn","SenderAddress","PointsInformation","PointsMinimum","PointsRate","PointsMyTotal","DataLayer","parseJSON","getAddressTitle","trim","getSenderAddressTitle","Vorname","C_o","sessionCookiesSupported","requestData","method","imagesLoaded","makeJQueryPlugin","always","visibleThumbs","thumbDividerSpace","verticalThumbs","thumbHeight","thumbsTotalHeight","popupBody","mainImageArea","itemSource","itemPosition","mainItemPosition","gtmLabel","wrap","fadeOut","fadeIn","enquire","register","thumbsContainer","offset","thumbsContent","setArrows","outerHeight","resize","itemSourceImageZoom","ZoomPopupTop","selectorTop","nextStep","isSwissAustrianOrder","getNextStep","prepareOrderFormAssistant"],"mappings":"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","file":"orderForm.9b75680caf9e68feb723.min.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t15: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/media/dist/js/pages/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([137,22,5,4]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import { Basket } from '../classes/basket';\r\nimport { Profile } from '../classes/profile';\r\nimport { CookieChecker } from '../classes/cookie-checker'\r\nimport { LoggingService } from '../classes/logging-service';\r\nimport { DeliveryTimeService } from '../classes/delivery-time-service';\r\nimport { initializeProductMedia } from '../modules/product-media';\r\nimport { froalaScriptBundle, orderFormBundle } from '../modules/script-bundles';\r\nimport { fetchOnce, fetchRetry } from '../modules/fetch';\r\nimport {configureOrderFormAssistant} from '../modules/order-form-assistant';\r\nimport SweetAlert from 'sweetalert2';\r\nimport loadjs from 'loadjs';\r\nimport 'angularapp/components/orderFormController';\r\n\r\nglobal.Basket = Basket;\r\nglobal.Profile = Profile;\r\nglobal.angularOrderFormController = angularOrderFormController;\r\nglobal.updateCardText = updateCardText;\r\nglobal.hideTimeDelivery = hideTimeDelivery;\r\nglobal.fillTestOrder = fillTestOrder;\r\n\r\nlet cookieChecker = new CookieChecker();\r\nlet keepAliveUrl = dynamicData.page.virtualRoot + 'Handlers/KeepAlive.aspx';\r\n\r\n//#region Dom Ready / Load\r\n$(document).ready(function () {\r\n configurePixleeGallery();\r\n if (!dynamicData.page.showMyBouquet)\r\n showProductBadge();\r\n dynamicData.page.domReady = true;\r\n if (dynamicData.page.angularReady)\r\n domAndAngularReady();\r\n});\r\n\r\nglobal.domAndAngularReady = function () {\r\n preventSafariCaching();\r\n configureSpecialTermsDialog();\r\n configurePriceSection();\r\n configureDatePickers();\r\n configureDeliveryDateCheck();\r\n configureCountryChooser();\r\n configureAddonSelection();\r\n configureCardSelection();\r\n configureSenderSection();\r\n configureDeliveryInstructions();\r\n configureCardText();\r\n if (dynamicData.page.showMyBouquet)\r\n configureMyBouquet();\r\n configureValidationEngine();\r\n configureVoucherSection();\r\n configureMyFleuropPointsSection();\r\n configurePaymentSection();\r\n configureAutocompleters();\r\n configureFloristSelection();\r\n configureSelfPickup();\r\n configureTimeDelivery();\r\n configureAppearEvents();\r\n configureDataLayerEvents();\r\n configureTimeoutDialog();\r\n configureHotkeys();\r\n configureInlineRegistration();\r\n configureGPNnumberUBS();\r\n configureOrderAlertBJB();\r\n configureExceptionsForAustria();\r\n configureOrderFormAssistant(); \r\n\r\n if (dynamicData.page.showMyBouquet) {\r\n //MyBouquet slider takes a long time to load, therefore it's hidden initially\r\n //and shown after everything is ready.\r\n $('#myBouquetSection,#tbMyBouquetQuantity').toggleClass('invisible');\r\n myBouquetTrackbarPositionChanged();\r\n showProductBadgeMyBouquet();\r\n }\r\n\r\n if (dynamicData.page.restoreSelectedTimeDelivery)\r\n datePickerOnSelect();\r\n\r\n if (!dynamicData.page.isPostback && dynamicData.modeSettings.paymentListingVisible) {\r\n setPaymentTypeOnForm(dynamicData.page.selectedPaymentCode);\r\n onPaymentMethodChanged();\r\n }\r\n\r\n if (dynamicData.page.isRestoringBasketToOrderForm) {\r\n $('#terms-agb').prop('checked', dynamicData.page.termsAndConditionsAccepted);\r\n $('#terms-dataprotection').prop('checked', dynamicData.page.termsAndConditionsAccepted);\r\n $('#hiddenWishesNoCardtext').val(dynamicData.page.wishesNoCardtext);\r\n\r\n //when user comes back he did accept delivery date before.\r\n $('#txtDeliveryDate').datepicker(\"setDate\", dynamicData.session.deliveryDateString);\r\n didUserNoticeDeliveryDate = true;\r\n }\r\n\r\n if (dynamicData.page.setFocusOnCardErrors) {\r\n $('#divCreditCardErrorMessage').show();\r\n $.scrollTo('#divCreditCardErrorMessage', 1000, { over: { top: -3 } });\r\n } \r\n\r\n initializeProductMedia();\r\n}\r\n//#endregion\r\n\r\n//#region Utilities\r\n\r\nvar didUserAcceptSpecialTerms = false;\r\n\r\nfunction configureSpecialTermsDialog() {\r\n var didUserAlreadyAcceptSpecialTermsInThisSession = sessionStorage.getItem('didUserAcceptSpecialTerms');\r\n didUserAcceptSpecialTerms = (didUserAlreadyAcceptSpecialTermsInThisSession == \"true\") ? true : false;\r\n}\r\n\r\nasync function showSpecialTermsDialog() {\r\n if (!dynamicData.page.shouldShowSpecialTermsPopup)\r\n return true;\r\n if (didUserAcceptSpecialTerms)\r\n return didUserAcceptSpecialTerms;\r\n\r\n let questionResult = await SweetAlert.fire({\r\n title: dynamicData.textRepository.specialTermsPopupTitle,\r\n type: 'warning',\r\n html: dynamicData.textRepository.specialTermsPopupText,\r\n confirmButtonText: dynamicData.textRepository.specialTermsPopupAcceptButton,\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-yellow'\r\n }\r\n })\r\n\r\n if (questionResult.value) {\r\n didUserAcceptSpecialTerms = true;\r\n sessionStorage.setItem('didUserAcceptSpecialTerms', true);\r\n }\r\n\r\n return didUserAcceptSpecialTerms;\r\n}\r\n\r\n//Prevents the badge from jumping around (invisible on form initially and shown very late).\r\nfunction showProductBadgeMyBouquet () {\r\n $('.media-main-image img').on('load', function() {\r\n $('.product-badge').toggleClass('invisible');\r\n });\r\n};\r\nfunction showProductBadge () {\r\n $('.product-badge').toggleClass('invisible');\r\n};\r\n\r\n//Safari doesn't respect nocache directives. This script should enforce a reload if the page was served from the cache.\r\nfunction preventSafariCaching() {\r\n window.onpageshow = function (event) {\r\n if (event.persisted)\r\n window.location.reload();\r\n };\r\n};\r\n\r\nfunction setFlorist(name, street, membernumber) {\r\n var floristAddress = name + \"</br>\" + street;\r\n $('.selected-florist .florist-address').html(floristAddress);\r\n $('.selected-florist').show();\r\n\r\n if (angularOrderFormController.basket.deliveryTypeId == dynamicData.enums.enmDeliveryType.Abholen) {\r\n //save chosen pickup florist\r\n $(\"#hiddenPickupMember\").val(membernumber);\r\n gtdl_push(5, 1);\r\n } else {\r\n $(\"#hiddenSelectedMember\").val(membernumber);\r\n gtdl_push(5, 0);\r\n }\r\n\r\n $('#shop-popup').modal('hide');\r\n}\r\n\r\nfunction removeChosenFlorist() {\r\n $('.selected-florist').hide();\r\n\r\n if (angularOrderFormController.basket.deliveryTypeId == dynamicData.enums.enmDeliveryType.Abholen) {\r\n var linksChosenFlorist = $(\".pickupForm .chosenFlorist\");\r\n if (!linksChosenFlorist.hasClass(\"hidden\")) {\r\n linksChosenFlorist.addClass(\"hidden\");\r\n $(\".pickupForm .chooseFlorist\").removeClass(\"hidden\");\r\n $(\"#hiddenPickupMember\").val('');\r\n gtdl_push(6, 1);\r\n }\r\n\r\n } else {\r\n var linksChosenFlorist = $(\"#deliveryOptions .chosenFlorist\")\r\n if (!linksChosenFlorist.hasClass(\"hidden\")) {\r\n linksChosenFlorist.addClass(\"hidden\");\r\n $(\"#hiddenSelectedMember\").val('');\r\n gtdl_push(6, 0);\r\n }\r\n }\r\n}\r\n\r\nfunction setDeliveryAddressGlobal(id, salutationID, name, vorname, co, street, zip, city, company, tel1, tel2, tel3) {\r\n $('#hiddenRecipientZipTownRegNr').val('');\r\n $(\"#hiddenSelectedDeliveryAddress\").val(id); angularOrderFormController.profile.recipientAddressID = id;\r\n setRadioButton('recipient-salutation-group', salutationID);\r\n $(\"#txtRecipientFirstName\").val(vorname);\r\n $(\"#txtRecipientName\").val(name);\r\n $(\"#txtRecipientCareOf\").val(co);\r\n $(\"#txtRecipientStreet\").val(street);\r\n findRegionExact(zip, city, dynamicData.session.countryRegNr, function(result) {\r\n if (result.length == 1) {\r\n $('#hiddenRecipientZipTownRegNr').val(result[0].zipPlaceRegNr);\r\n datePickerOnSelect();\r\n restoreSelectedDataForSelect2(recipientRecipientZipTown, $('#hiddenRecipientZipTownRegNr').val(), (zip + ' - ' + city));\r\n }\r\n })\r\n\r\n $(\"#txtRecipientCompany\").val(company);\r\n if (tel1 != \"\") {\r\n $(\"#txtRecipientPhone1\").val(tel1);\r\n $(\"#txtRecipientPhone2\").val((tel2 != \"\") ? tel2 : tel3);\r\n } else {\r\n if (tel2 != \"\") {\r\n $(\"#txtRecipientPhone1\").val(tel2);\r\n $(\"#txtRecipientPhone2\").val(tel3);\r\n }\r\n else\r\n $(\"#txtRecipientPhone1\").val(tel3);\r\n }\r\n $('#address-selection-recipient-popup').modal('hide');\r\n return false;\r\n}\r\nglobal.setDeliveryAddressGlobal = setDeliveryAddressGlobal;\r\n\r\n//Custom validation function for payment type.\r\nfunction checkPaymentLimit() {\r\n if (dynamicData.modeSettings.paymentListingVisible) {\r\n var result = angularOrderFormController.checkPaymentLimit(showInfoPaymentLimitReached, showInfoInvoiceForForeignNotAllowed);\r\n if (angularOrderFormController.isPaymentTypeCreditcard())\r\n $(\"#divCreditCardProcessInfo\").show();\r\n return result;\r\n } else {\r\n return true;\r\n }\r\n}\r\n\r\nglobal.showInfoPaymentLimitReached = function() {\r\n $(\"#divPaymentLimitError\").show();\r\n if (dynamicData.modeSettings.isSwissShop)\r\n $(\"#divPaymentInvoiceNotAvailable\").show();\r\n}\r\n\r\nglobal.showInfoInvoiceForForeignNotAllowed = function() {\r\n $(\"#divPaymentOnlyForShopCountryError\").show();\r\n if (dynamicData.modeSettings.isSwissShop)\r\n $(\"#divPaymentInvoiceNotAvailable\").show();\r\n}\r\n\r\nfunction configureMyBouquet() {\r\n //Hack to set a 1 for the first BigTick.\r\n var zeroValueLabels = $('span.dxeTBLTLabel:contains(\\'0\\')');\r\n if (zeroValueLabels.length > 0) {\r\n var zeroValueLabel = zeroValueLabels[0];\r\n zeroValueLabel.textContent = '1';\r\n }\r\n\r\n //Option to set the quantity by quantity textbox\r\n $('#txtMyBouquetQuantity').change(function () {\r\n var quantity = $(this).val();\r\n setVariantByQuantity(quantity);\r\n }).keyup(function () {\r\n var quantity = $(this).val();\r\n setVariantByQuantityDebounced(quantity);\r\n });\r\n\r\n var setVariantByQuantityDebounced = debounce(function (price) {\r\n setVariantByQuantity(price);\r\n }, 1500);\r\n\r\n function setVariantByQuantity(quantity) {\r\n tbMyBouquetQuantity.SetPositionStart(quantity);\r\n myBouquetTrackbarPositionChangedImplementation();\r\n }\r\n\r\n //Option to set the quantity by price textbox\r\n $('#txtMyBouquetPrice').change(function () {\r\n var price = $(this).val();\r\n setClosestVariant(price);\r\n }).keyup(function () {\r\n var price = $(this).val();\r\n setClosestVariantDebounced(price);\r\n }).tooltip({\r\n template: '<div class=\"tooltip mybouquet-tooltip\" role=\"tooltip\"><div class=\"arrow\"></div><div class=\"tooltip-inner\"></div></div>',\r\n toggle: \"tooltip\",\r\n placement: \"top\",\r\n html: true,\r\n title: dynamicData.textRepository.myBouquetCustomPriceInfo\r\n });\r\n\r\n var setClosestVariantDebounced = debounce(function (price) {\r\n setClosestVariant(price);\r\n }, 1500);\r\n\r\n function setClosestVariant(price) {\r\n $('#txtMyBouquetPrice').tooltip('hide');\r\n\r\n //find closest variant from desired price\r\n var closestItem = myBouquetAmounts[1];\r\n for (var i = 1; i < myBouquetAmounts.length - 1; i++) {\r\n var item = myBouquetAmounts[i];\r\n if (item) {\r\n if (isCloser(item, closestItem, price))\r\n closestItem = item;\r\n }\r\n }\r\n\r\n //find index of it and select it\r\n var quantity = myBouquetAmounts.indexOf(closestItem);\r\n tbMyBouquetQuantity.SetPositionStart(quantity);\r\n myBouquetTrackbarPositionChangedImplementation();\r\n }\r\n\r\n function isCloser(newItem, oldItem, referencePrice) {\r\n if (Math.abs(newItem.Price - referencePrice) < Math.abs(oldItem.Price - referencePrice))\r\n return true\r\n else\r\n return false\r\n }\r\n}\r\n\r\nfunction configurePriceSection() {\r\n $('.price-field').focus(function () {\r\n $(this)[0].setSelectionRange(0, 9999); //need to use this instead of select(), because of apple's safari.\r\n }).keydown(function (e) {\r\n var key = e.charCode || e.keyCode || 0;\r\n\r\n // allow backspace, tab, home, end, delete, arrows, numbers and keypad numbers and one point or comma ONLY\r\n if (!(key == 8 || key == 13 || key == 9 ||key == 46 ||\r\n (key >= 35 && key <= 40) ||\r\n (key >= 48 && key <= 57) ||\r\n (key >= 96 && key <= 105) ||\r\n (key == 190 || key == 110 || key == 188))\r\n\r\n ) {\r\n e.preventDefault();\r\n }\r\n\r\n if (dynamicData.modeSettings.isSwissShop) {\r\n //For CH block comma\r\n if (key == 188) { e.preventDefault(); }\r\n } else {\r\n //For AT block point\r\n if (key == 190) { e.preventDefault(); }\r\n }\r\n });\r\n\r\n // change of price by click on inputs will be set immediately\r\n $('#product-size input:radio[name=product-price]').change(function () {\r\n var priceOption = $(this).val();\r\n if (priceOption != 'custom') {\r\n\r\n var price = $(this).data('price');\r\n var attributeId = $(this).data('attribute');\r\n angularOrderFormController.SetMainProductPriceAndAttribute(price, attributeId);\r\n // toastr.success(dynamicData.textRepository.priceWasAdapted, dynamicData.textRepository.price);\r\n gtdl_push(13, { variant: priceOption, price: price });\r\n\r\n } else {\r\n var customPriceFromForm = $('#product-size #custom-price').val();\r\n setCustomPriceWithinLimits(customPriceFromForm); \r\n }\r\n\r\n var attribute = $(this).data('attribute');\r\n if (priceBasedImages[attribute] != null) {\r\n var imageURL = priceBasedImages[attribute].ImageURL;\r\n var imageURLZoom = priceBasedImages[attribute].ImageURLZoom;\r\n\r\n $('.media-main-image img').prop('src', imageURL);\r\n $('.media-main-image .item').attr('data-position', 1)\r\n $('.main-product-image').prop('src', imageURL);\r\n\r\n $('.media-vertical-thumbs .thumbs-content li img[data-position=1]').prop('src', imageURL);\r\n $('.media-vertical-thumbs .thumbs-content li img[data-position=1]').attr('data-imagezoom', imageURLZoom);\r\n $('.media-vertical-thumbs .thumbs-content li img[data-position=1]').attr('data-source', imageURL);\r\n \r\n $('.media-vertical-thumbs .thumbs-content li').removeClass('active');\r\n $('.media-vertical-thumbs .thumbs-content li img[data-position=1]').parents('li').addClass('active'); \r\n\r\n $('.media-main-image .remark-text').hide(); \r\n } \r\n });\r\n\r\n if (!dynamicData.page.showMyBouquet)\r\n setRadioButton('product-price', dynamicData.page.initialPriceSelection);\r\n\r\n // change of custom price field will be set\r\n // - after keypress with a debounce delay of 1.5 seconds\r\n // - after change event (cause mobile browsers do not always support keypress)\r\n //----\r\n var setCustomPriceWithinLimitsDebounced = debounce(function () {\r\n var customPriceFromForm = $('#product-size #custom-price').val();\r\n setCustomPriceWithinLimits(customPriceFromForm);\r\n }, 1500);\r\n\r\n $('#custom-price')\r\n .keypress(function (e) {\r\n setCustomPriceWithinLimitsDebounced();\r\n if (e.keyCode == 13) {\r\n e.preventDefault();\r\n }\r\n })\r\n .change(function (e) {\r\n var customPriceFromForm = $('#product-size #custom-price').val();\r\n setCustomPriceWithinLimits(customPriceFromForm);\r\n });\r\n //----\r\n\r\n function setCustomPriceWithinLimits(priceBeforeLimits) {\r\n priceBeforeLimits = accounting.unformat(priceBeforeLimits);\r\n \r\n // Make sure that custom price radio option is selected\r\n $('#product-size #price-option4').prop('checked', true);\r\n\r\n // Round desired price to 5 rappen\r\n var price = roundToFive(priceBeforeLimits, 2);\r\n\r\n // Check minprice and maxprice and change desired price accordingly\r\n var minimumPrice = parseFloat($('#product-size #price-option1').data('price'));\r\n var maximumPrice = 2000;\r\n if (price < minimumPrice)\r\n price = minimumPrice;\r\n if (price > maximumPrice)\r\n price = maximumPrice;\r\n\r\n $('#product-size #custom-price').val(accounting.formatNumber(price));\r\n\r\n var attributeId = $('#product-size #price-option4').data('attribute');\r\n angularOrderFormController.SetMainProductPriceAndAttribute(price, attributeId);\r\n // toastr.success(dynamicData.textRepository.priceWasAdapted, dynamicData.textRepository.price);\r\n gtdl_push(13, { variant: \"custom\", price: price });\r\n }\r\n}\r\n\r\nfunction configureAutocompleters() {\r\n\r\n //Recipient Section\r\n var recipientRecipientZipTown = $('#recipientRecipientZipTown');\r\n\r\n configureZipTownDropdown();\r\n\r\n recipientRecipientZipTown.on('select2:select', function (e) {\r\n var regNr = e.params.data.id;\r\n var zipTown = e.params.data.text;\r\n\r\n $('#hiddenRecipientZipTownRegNr').val(regNr);\r\n $('#hiddenRecipientZipTownText').val(zipTown);\r\n\r\n hideTimeDelivery();\r\n removeChosenFlorist();\r\n checkDeliveryDate();\r\n })\r\n\r\n recipientRecipientZipTown.on('select2:closing', function (e) {\r\n $(this).data('RecipientZipTownLastSearch', $('.select2-search__field').val());\r\n })\r\n\r\n recipientRecipientZipTown.on('select2:open', function () {\r\n if (typeof $(this).data('RecipientZipTownLastSearch') == 'undefined') {\r\n return;\r\n }\r\n\r\n var prevValue = $(this).data('RecipientZipTownLastSearch');\r\n\r\n if (prevValue != '') {\r\n $('.select2-search__field').val(prevValue).trigger('keydown').trigger('input');\r\n }\r\n });\r\n\r\n //If basket is restored, restore select2\r\n var regNr = $('#hiddenRecipientZipTownRegNr').val();\r\n var text = $('#hiddenRecipientZipTownText').val();\r\n if (regNr != '')\r\n restoreSelectedDataForSelect2(recipientRecipientZipTown, regNr, text)\r\n\r\n //Sender Section\r\n if (dynamicData.modeSettings.isSwissShop) {\r\n $(\".senderRegionLookup[readonly!='readonly']\").autoComplete({\r\n source: configureSource(function () { return $('#hiddenSenderCountryRegNr').val(); }),\r\n delay: 400,\r\n minChars: 2,\r\n renderItem: configureRenderItem(),\r\n onSelect: function (e, term, item) {\r\n $('#txtSenderZip').val(item.data('zip'));\r\n $('#txtSenderTown').val(item.data('region'));\r\n }\r\n });\r\n }\r\n\r\n //Popup: Manual florist selection and selfpickup\r\n $(\"#shop-popup #txtPopupZip, #shop-popup #txtPopupCity\").autoComplete({\r\n source: configureSource(function () { return dynamicData.session.countryRegNr; }),\r\n delay: 400,\r\n minChars: 2,\r\n renderItem: configureRenderItem(),\r\n onSelect: function (e, term, item) {\r\n $('#txtPopupZip').val(item.data('zip'));\r\n $('#txtPopupCity').val(item.data('region'));\r\n\r\n var newRegNr = item.data('regnr');\r\n $('#hiddenPickupZipPlaceRegNr').val(newRegNr);\r\n }\r\n });\r\n\r\n $(\"#shop-popup #txtPopupZip, #shop-popup #txtPopupCity\").keyup(function (e) {\r\n //If region already selected the backspace or delete buttons clear the whole selection\r\n if (e.keyCode == 46 || e.keyCode == 8) {\r\n if ($('#hiddenPickupZipPlaceRegNr').val() != '') {\r\n $('#pickupzip').val('');\r\n $('#pickupcity').val('');\r\n }\r\n } else if (e.keyCode != 9 && e.keyCode != 13 && e.keyCode != 16) { // Not Tab & Enter & Shift\r\n $('#hiddenPickupZipPlaceRegNr').val(\"\");\r\n }\r\n });\r\n}\r\n\r\nfunction restoreSelectedDataForSelect2(select2, id, text) {\r\n var data = {\r\n id: id,\r\n text: text\r\n }\r\n var selectedOption = new Option(data.text, data.id, false, true);\r\n select2.append(selectedOption);\r\n}\r\n\r\nfunction configureFloristSelection() {\r\n $('#btnChooseFloristManually').click(function () {\r\n configureFloristSelectionDialog(false);\r\n });\r\n\r\n $('#btnChooseFloristForPickup').click(function () {\r\n configureFloristSelectionDialog(true);\r\n });\r\n\r\n $('#btnSearchFlorists').click(function () {\r\n if ($(\"input[id$=hiddenPickupZipPlaceRegNr]\").val().length > 0) {\r\n searchFloristForPickupBySearchFields();\r\n }\r\n })\r\n\r\n $('.removeFlorist').bind('click', function () {\r\n removeChosenFlorist();\r\n });\r\n\r\n $('#shop-popup').on('click', '.select-florist', function () {\r\n var parent = $(this).closest('ul');\r\n setFlorist(parent.data('name'), parent.data('street'), parent.data('memberNumber'));\r\n });\r\n\r\n //Configures florist selection dialog to manual search or automatic search.\r\n function configureFloristSelectionDialog(showSearchFields) {\r\n $(\"#sChoosenDate2\").text($(\"input[id$=txtDeliveryDate]\").val());\r\n $(\"#sChoosenPlace\").text($(\"input[id$=txtRecipientZipTown]\").val());\r\n\r\n if (showSearchFields) {\r\n //Search will be triggered by fields and button\r\n $('#shop-popup .search-fields').show();\r\n } else {\r\n //Search will be automatically triggered by orderform's recipient regNr\r\n $('#shop-popup .search-fields').hide();\r\n searchFloristsByRecipientRegNr();\r\n gtdl_push(1, 0);\r\n }\r\n }\r\n\r\n //Loads florist list for fleurop delivery and renders it to the florist selection dialog.\r\n function searchFloristsByRecipientRegNr() {\r\n $('#searchResultFloristPlaceholder').empty();\r\n if (angularOrderFormController.TDSelected)\r\n FleuropWebShop.FloristService.GetAvailableFloristsForTimeDelivery(\r\n $(\"#hiddenRecipientZipTownRegNr\").val(), (new Date($(\"#txtDeliveryDate\").datepicker('getDate'))).toDateString(),\r\n function (result) { angularOrderFormController.setFloristList(result); }\r\n );\r\n else\r\n FleuropWebShop.FloristService.GetAvailableFlorists(\r\n $(\"#hiddenRecipientZipTownRegNr\").val(), (new Date($(\"#txtDeliveryDate\").datepicker('getDate'))).toDateString(),\r\n dynamicData.page.showExpressOption,\r\n function (result) { angularOrderFormController.setFloristList(result); }\r\n );\r\n }\r\n\r\n //Loads florist list for self-pickup and renders it to the florist selection dialog.\r\n function searchFloristForPickupBySearchFields() {\r\n $('#searchResultFloristPlaceholder').empty();\r\n FleuropWebShop.FloristService.GetAvailableFloristsForPickup(\r\n $(\"input[id$=hiddenPickupZipPlaceRegNr]\").val(),\r\n (new Date($(\"input[id$=txtPickupDate]\").datepicker('getDate'))).toDateString(),\r\n function (result) { angularOrderFormController.setFloristList(result); }\r\n );\r\n }\r\n}\r\n\r\nfunction configureDatePickers() {\r\n $.datepicker.setDefaults($.datepicker.regional[dynamicData.session.languageCode2Digit]);\r\n\r\n $('#txtDeliveryDate').datepicker({\r\n dateFormat: 'dd.mm.yy',\r\n changeMonth: false,\r\n changeYear: false,\r\n firstDay: 1,\r\n minDate: dynamicData.page.minDeliveryDateString,\r\n beforeShowDay: checkIfDateIsDeliverable,\r\n onSelect: datePickerOnSelect \r\n }).datepicker(\"setDate\", dynamicData.page.minDeliveryDateString)\r\n .off('focus').click(function () {\r\n $(this).datepicker('show');\r\n });\r\n\r\n $('#txtPickupDate').datepicker({\r\n dateFormat: 'dd.mm.yy',\r\n changeMonth: false,\r\n changeYear: false,\r\n firstDay: 1,\r\n minDate: dynamicData.page.minDeliveryPickupDT,\r\n beforeShowDay: checkIfDateIsDeliverable,\r\n onSelect: datePickerOnSelect \r\n }).datepicker(\"setDate\", dynamicData.page.minDeliveryPickupDT)\r\n .off('focus').click(function () {\r\n $(this).datepicker('show');\r\n });\r\n\r\n var txtBirthday = $('#txtSenderBirthday');\r\n configureTextboxForBirthdaySelection(txtBirthday);\r\n\r\n function checkIfDateIsDeliverable(date) {\r\n //Holidays are NOT checked due to performance reasons\r\n //If we want to include holidays here we need to be careful with checking the right events and do proper caching.\r\n //http://www.tutorialspark.com/jqueryUI/jQuery_UI_DatePicker_Events.php\r\n \r\n var isDeliverable = false;\r\n var cssClosedPopup = '';\r\n\r\n var day = date.getDay();\r\n if (day == 0) {\r\n //Sundays are closed except for special open sundays\r\n var dateString = jQuery.datepicker.formatDate('dd.mm.yy', date);\r\n isDeliverable = (dynamicData.page.openSundays.indexOf(dateString) != -1);\r\n\r\n if (!isDeliverable) {\r\n cssClosedPopup = 'date-closed-popup';\r\n isDeliverable = true;\r\n };\r\n\r\n } else if (day == 6) {\r\n //Saturday -- styling only\r\n cssClosedPopup = 'date-saturday';\r\n isDeliverable = true;\r\n\r\n } else if (day == 1) {\r\n //Mondays are closed for havelaar and parcel shipping\r\n isDeliverable = (!dynamicData.page.isHavelaarProduct && !dynamicData.page.exclusiveMemberAdrRef);\r\n\r\n } else {\r\n //Other days are open\r\n isDeliverable = true;\r\n }\r\n\r\n return [isDeliverable, cssClosedPopup];\r\n }\r\n}\r\n\r\nvar didUserNoticeDeliveryDate = false;\r\nfunction configureDeliveryDateCheck() {\r\n // Assumption: If user does one of the following things he probably has checked the delivery date and is aware of it.\r\n // If not, he gets a confirmation prompt\r\n // - Hover over the delivery date\r\n // - Open the calendar\r\n $('#txtDeliveryDate').hover(function () {\r\n didUserNoticeDeliveryDate = true;\r\n })\r\n $('#txtDeliveryDate, #txtDeliveryDate ~ span').click(function () {\r\n didUserNoticeDeliveryDate = true;\r\n })\r\n}\r\n\r\nfunction datePickerOnSelect() {\r\n checkDeliveryDate();\r\n}\r\n\r\nasync function checkDeliveryDate() {\r\n //Ajax call to check selected date. Provide next possible date if not ok.\r\n //If no region yet, check by country.\r\n var regNr = (angularOrderFormController.basket.deliveryTypeId == dynamicData.enums.enmDeliveryType.Abholen) ? $(\"#hiddenPickupZipPlaceRegNr\").val() : $(\"#hiddenRecipientZipTownRegNr\").val();\r\n if (regNr == '')\r\n regNr = dynamicData.session.countryRegNr;\r\n\r\n var dtfield = (angularOrderFormController.basket.deliveryTypeId == dynamicData.enums.enmDeliveryType.Abholen) ? $(\"#txtPickupDate\") : $(\"#txtDeliveryDate\");\r\n var deliveryDate = $(dtfield).datepicker('getDate');\r\n var deliveryDateParameter = (new Date(deliveryDate)).toDateString();\r\n\r\n //Show message-box on sundays and set next delivery date\r\n var isDeliverable = true;\r\n var dateString = jQuery.datepicker.formatDate('dd.mm.yy', deliveryDate);\r\n var day = deliveryDate.getDay();\r\n if (day == 0) {\r\n //Sundays are closed except for special open sundays\r\n isDeliverable = (dynamicData.page.openSundays.indexOf(dateString) != -1);\r\n\r\n if (!isDeliverable) {\r\n deliveryDate.setDate(deliveryDate.getDate() + 1);\r\n deliveryDateParameter = (new Date(deliveryDate)).toDateString();\r\n };\r\n };\r\n\r\n if (dynamicData.page.isHavelaarProduct || dynamicData.page.exclusiveMemberAdrRef)\r\n var result = await DeliveryTimeService.checkDateParcelShipping(deliveryDateParameter);\r\n else\r\n var result = await DeliveryTimeService.checkDateAndDateDiscounts(deliveryDateParameter, regNr);\r\n\r\n var alert = (angularOrderFormController.basket.deliveryTypeId == dynamicData.enums.enmDeliveryType.Abholen) ? $(\".alertPickupDateMsg\") : $(\".alertDateMsg\");\r\n var dtfield = (angularOrderFormController.basket.deliveryTypeId == dynamicData.enums.enmDeliveryType.Abholen) ? $(\"#txtPickupDate\") : $(\"#txtDeliveryDate\");\r\n angularOrderFormController.getBasketItemsFromSession();\r\n\r\n result.morningFrom = dayjs(result.morningFrom);\r\n result.morningTo = dayjs(result.morningTo);\r\n result.afternoonFrom = dayjs(result.afternoonFrom);\r\n result.afternoonTo = dayjs(result.afternoonTo);\r\n\r\n if (result.isHoliday || !isDeliverable) { \r\n var questionResult = await SweetAlert.fire({\r\n title: dynamicData.textRepository.fleuropVoucherPopupTitle,\r\n html: dynamicData.textRepository.fleuropVoucherPopupText,\r\n type: 'warning',\r\n showCancelButton: true,\r\n confirmButtonText: dynamicData.textRepository.fleuropVoucherPopupConfirm,\r\n cancelButtonText: dynamicData.textRepository.fleuropVoucherPopupCancel,\r\n reverseButtons: false,\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-yellow',\r\n cancelButton: 'btn btn-yellow-outline'\r\n }\r\n });\r\n\r\n if (questionResult.value) {\r\n location.href = dynamicData.page.fleuropVoucherPdfLink;\r\n } else {\r\n $(alert).removeClass(\"hidden\");\r\n\r\n if (result.isHoliday) {\r\n $(dtfield).datepicker('setDate', new Date(result.nextDeliveryDate));\r\n }\r\n else {\r\n $(dtfield).datepicker('setDate', new Date(deliveryDate));\r\n };\r\n\r\n $(dtfield).focus();\r\n };\r\n } else {\r\n $(alert).addClass(\"hidden\");\r\n };\r\n\r\n if (dynamicData.page.showTimeDeliveryOption) {\r\n angularOrderFormController.TDEnable = result.timeDeliveryAvailable;\r\n\r\n if (angularOrderFormController.TDEnable) {\r\n\r\n //Set positive ranges for selection\r\n var startDateFirst = result.morningFrom;\r\n var endDateFirst = (isAfternoonSet(result) ? result.afternoonTo : result.morningTo).subtract(30, 'minute');\r\n var startDateLast = startDateFirst.add(30, 'minute')\r\n var endDateLast = isAfternoonSet(result) ? result.afternoonTo : result.morningTo;\r\n $(\".timeicon:first\").datetimepicker('setStartDate', startDateFirst.toDate());\r\n $(\".timeicon:first\").datetimepicker('setEndDate', endDateFirst.toDate());\r\n $(\".timeicon:last\").datetimepicker('setStartDate', startDateLast.toDate());\r\n $(\".timeicon:last\").datetimepicker('setEndDate', endDateLast.toDate());\r\n\r\n //Set ranges that cannot be selected\r\n if (isAfternoonSet(result)) {\r\n $(\".timeicon:first\").datetimepicker('setStartDateDisabled', result.morningTo.subtract(30, 'minute').toDate());\r\n $(\".timeicon:first\").datetimepicker('setEndDateDisabled', result.afternoonFrom.toDate());\r\n $(\".timeicon:last\").datetimepicker('setStartDateDisabled', result.morningTo.toDate());\r\n $(\".timeicon:last\").datetimepicker('setEndDateDisabled', result.afternoonFrom.add(30, 'minute').toDate());\r\n } else {\r\n $(\".timeicon\").datetimepicker('setStartDateDisabled', Infinity);\r\n $(\".timeicon\").datetimepicker('setEndDateDisabled', Infinity);\r\n }\r\n\r\n //Initialize the start and end date\r\n if ($(\".timeicon:first\").val() == '') {\r\n $(\".timeicon:first\").datetimepicker('setDate', result.morningFrom.toDate());\r\n $(\".timeicon:last\").datetimepicker('setDate', result.morningFrom.add(30, 'minute').toDate());\r\n }\r\n\r\n if (dynamicData.page.restoreSelectedTimeDelivery)\r\n angularOrderFormController.TDSelected = true;\r\n\r\n } else {\r\n if (angularOrderFormController.TDSelected) angularOrderFormController.TDSelected = false;\r\n }\r\n }\r\n\r\n //Trigger express check so it's ready at the form submit\r\n if (dynamicData.page.isExpressProduct)\r\n angularOrderFormController.checkExpressAvailability();\r\n\r\n}\r\n\r\nfunction isAfternoonSet(result) {\r\n return (result.afternoonFrom != null && result.afternoonFrom.year() != 1)\r\n}\r\n\r\nfunction hideTimeDelivery() {\r\n if (angularOrderFormController.TDEnable) {\r\n angularOrderFormController.hideTD();\r\n }\r\n}\r\n\r\nfunction configureMyFleuropPointsSection() {\r\n $('#btnRedeemPoints').click(function () {\r\n $('#tbRedeemPoints').addClass('validate[custom[integer],funcCall[angularOrderFormController.checkPoints]]');\r\n if ($(\"#tbRedeemPoints\").validationEngine('validate'))\r\n angularOrderFormController.addPointsPayment();\r\n $('#tbRedeemPoints').removeClass('validate[custom[integer],funcCall[angularOrderFormController.checkPoints]]');\r\n });\r\n}\r\n\r\nfunction configurePaymentSection() {\r\n\r\n // Payment-Method Tabs\r\n $('.payment-options input').change(function () {\r\n onPaymentMethodChanged();\r\n });\r\n\r\n // Buy button\r\n $('#linkSubmit').on('click', async function () {\r\n clearErrors();\r\n clearInfoTexts();\r\n\r\n //Do cookie check and cancel if no session cookie support.\r\n performSessionCookieCheck();\r\n if (!cookieChecker.supportsSessionCookies())\r\n return;\r\n\r\n if (await showSpecialTermsDialog() == false)\r\n return;\r\n\r\n //additional checks if validation engine is happy\r\n if ($('#aspnetForm').validationEngine('validate')) {\r\n\r\n //Salutations\r\n if (!validateSalutation($('#rbSenderSalutationNotSet')))\r\n return false;\r\n if (!validateSalutation($('#rbRecipientSalutationNotSet')))\r\n return false;\r\n\r\n //Only validate zip/town if recipient is relevant for order type.\r\n var shouldValidateRecipient = !(angularOrderFormController.basket.deliveryTypeId == dynamicData.enums.enmDeliveryType.Abholen) &&\r\n !(angularOrderFormController.basket.deliveryTypeId == dynamicData.enums.enmDeliveryType.Download)\r\n\r\n if (shouldValidateRecipient) {\r\n if (!validateRecipientZipTown()) {\r\n return false;\r\n }\r\n };\r\n\r\n //Delivery options: Check if at least 1 box is checked.\r\n if ($('.delivery-checklist input:visible').length > 0) {\r\n if ($('.delivery-checklist input:checked').length == 0) {\r\n var selector = '.delivery-checklist .checklist';\r\n $(selector).validationEngine('showPrompt', dynamicData.textRepository.oF_DeliveryInstructionsText,\r\n 'red', 'topLeft:0,5');\r\n $.scrollTo(selector);\r\n return false;\r\n }\r\n }\r\n\r\n if (angularOrderFormController.basket.deliveryTypeId == dynamicData.enums.enmDeliveryType.Abholen) {\r\n if ($(\"#hiddenPickupMember\").val().length == 0) {\r\n var selector = '#btnChooseFloristForPickup';\r\n $(selector).validationEngine('showPrompt', dynamicData.textRepository.selfPickup_PleaseChooseAFlorist,\r\n 'red', 'topLeft');\r\n $.scrollTo(selector);\r\n return false;\r\n }\r\n } else if (angularOrderFormController.basket.deliveryTypeId != dynamicData.enums.enmDeliveryType.Download &&\r\n !dynamicData.page.isExpressProduct) {\r\n\r\n //make sure user noticed the automatically chosen delivery date\r\n if (!didUserNoticeDeliveryDate) {\r\n let deliveryDate = $('#txtDeliveryDate').val();\r\n let questionResult = await SweetAlert.fire({\r\n title: dynamicData.textRepository.deliveryDateConfirmTitle,\r\n text: dynamicData.textRepository.deliveryDateConfirmText.replace('{0}', deliveryDate),\r\n type: 'question',\r\n showCancelButton: true,\r\n confirmButtonText: dynamicData.textRepository.deliveryDateConfirmButtonConfirm,\r\n cancelButtonText: dynamicData.textRepository.deliveryDateConfirmButtonCancel,\r\n reverseButtons: true,\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-yellow',\r\n cancelButton: 'btn btn-yellow-outline'\r\n }\r\n })\r\n if (questionResult.value) {\r\n didUserNoticeDeliveryDate = true;\r\n } else {\r\n $.scrollTo('#txtDeliveryDate');\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n //make sure user really wishes empty cardtext.\r\n var isCardTextEmpty = ($('#hiddenCardText').val() == '');\r\n var wishesGreetingCard = ( $('#hiddenNoGreetingCard').val() != 'true' );\r\n\r\n if (wishesGreetingCard && !dynamicData.page.wishesNoCardtext && isCardTextEmpty) {\r\n let questionResult = await SweetAlert.fire({\r\n title: dynamicData.textRepository.emptyCardTextConfirmTitle,\r\n text: dynamicData.textRepository.emptyCardTextConfirmText,\r\n type: 'question',\r\n showCancelButton: true,\r\n confirmButtonText: dynamicData.textRepository.emptyCardTextConfirmButtonConfirm,\r\n cancelButtonText: dynamicData.textRepository.emptyCardTextConfirmButtonCancel,\r\n reverseButtons: true,\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-yellow',\r\n cancelButton: 'btn btn-yellow-outline'\r\n }\r\n })\r\n\r\n if (questionResult.value) {\r\n //User chose to accept empty card text\r\n\r\n //Abusing a http-get to \"log\" it to the nginx logfiles. Why?\r\n //When troubleshooting cases where users claim the card text is \"lost\" we will check nginx logs. Then this http get is visible as proof.\r\n await fetchOnce(`${keepAliveUrl}?emptyCardtextPopupAccepted=true`);\r\n $('#hiddenWishesNoCardtext').val('true');\r\n } else {\r\n //User chose to enter a card text\r\n $.scrollTo('#product-card-text');\r\n return;\r\n }\r\n }\r\n\r\n if (!checkPaymentLimit()) {\r\n $.scrollTo('#divCheckoutPayment .error-texts');\r\n return false;\r\n }\r\n\r\n if (dynamicData.page.isExpressProduct) {\r\n if (!angularOrderFormController.expressAvailable) {\r\n toastr.error(dynamicData.page.expressNotAvailableForYourRegion, dynamicData.page.expressOrder);\r\n return false;\r\n }\r\n }\r\n\r\n //validation successful, disable buy button\r\n $('#linkSubmit').unbind('click');\r\n\r\n //complete rest of processing on the server side.\r\n __doPostBack('__Page', 'SaveOrder');\r\n }\r\n });\r\n\r\n}\r\n\r\nfunction validateRecipientZipTown() {\r\n var result = true;\r\n var recipientRegNr = $('#hiddenRecipientZipTownRegNr').val();\r\n if (recipientRegNr == '') {\r\n result = false;\r\n\r\n var select2Dynamic = $('#recipientRecipientZipTown');\r\n select2Dynamic.validationEngine('showPrompt', dynamicData.textRepository.zipTownErrorMessage, 'red', 'topLeft:0,40');\r\n $.scrollTo(select2Dynamic);\r\n }\r\n\r\n return result\r\n\r\n //Keeping this in case it's not acceptable that towns need to be selected for international orders... ;-)\r\n //\r\n //Skip validation if field is empty. In this case the standard required validator kicks in.\r\n //var recipientZipTown = $('#hiddenRecipientZipTownText').val();\r\n //if (recipientZipTown == \"\") {\r\n // alert('is required');\r\n // result = false;\r\n //}\r\n\r\n}\r\n\r\nfunction onPaymentMethodChanged() {\r\n if (!dynamicData.modeSettings.paymentListingVisible)\r\n return;\r\n\r\n clearErrors(); \r\n clearInfoTexts();\r\n\r\n var paymentType = $('.payment-options input:checked').val();\r\n angularOrderFormController.setPaymentType(paymentType);\r\n checkPaymentLimit();\r\n showpaymentTypeHint();\r\n}\r\n\r\n//Salutation: If it's selectable, then it's mandatory\r\n//(In this case disabled acts as readonly, readonly does not work here) .\r\nfunction validateSalutation(selectedRadio) {\r\n var result = true;\r\n if (!selectedRadio.prop('disabled') && selectedRadio.is(':visible') && selectedRadio.prop('checked')) {\r\n result = false;\r\n var parentSection = selectedRadio.closest('.user-form');\r\n parentSection.validationEngine('showPrompt', dynamicData.textRepository.pleaseChooseSalutation, 'red', 'topLeft:0,20');\r\n $.scrollTo(parentSection);\r\n }\r\n return result;\r\n}\r\n\r\nfunction clearErrors() {\r\n $('#divCheckoutPayment .error-texts > div').hide();\r\n}\r\nfunction clearInfoTexts() {\r\n $('#divCheckoutPayment .info-texts > div').hide();\r\n}\r\n\r\nfunction configureTimeoutDialog() {\r\n $.timeoutDialog({\r\n timeout: 1800, countdown: 300, keep_alive_url: keepAliveUrl, logout_redirect_url: dynamicData.page.homeLink,\r\n restart_on_yes: true, title: dynamicData.textRepository.timeoutDialogTitle, message: dynamicData.textRepository.timeoutDialogMessage,\r\n question: dynamicData.textRepository.timeoutDialogQuestion, keep_alive_button_text: dynamicData.textRepository.timeoutDialogYes, sign_out_button_text: dynamicData.textRepository.timeoutDialogNo\r\n });\r\n}\r\n\r\n//configures keyboard hotkeys, that can be used to access features of the shop\r\nfunction configureHotkeys() {\r\n //a space between two keys represents a sequence, so \"g d\" means, press g, than d.\r\n\r\n //Fill testorder\r\n Mousetrap.bind('f t', function () {\r\n fillTestOrder();\r\n });\r\n\r\n //Go up\r\n Mousetrap.bind('g u', function () {\r\n $.scrollTo('h1');\r\n });\r\n\r\n //Go to text of card\r\n Mousetrap.bind('g t', function () {\r\n $.scrollTo('#section-card-mycard');\r\n });\r\n\r\n //Go to basket\r\n Mousetrap.bind('g b', function () {\r\n $.scrollTo('#checkout-subtotal');\r\n });\r\n\r\n //Go to payment\r\n Mousetrap.bind('g p', function () {\r\n $.scrollTo('#linkSubmit');\r\n });\r\n\r\n // //Enable time-delivery\r\n // Mousetrap.bind('f e t', function () {\r\n // $('#txtDeliveryDate').datepicker(\"setDate\", '14.08.2019');\r\n // $('#hiddenRecipientZipTownRegNr').val('101149');\r\n // checkDeliveryDate();\r\n // $.scrollTo('#checkout-options');\r\n // });\r\n\r\n //Submit form\r\n Mousetrap.bind('s f', function () {\r\n $('#linkSubmit').click();\r\n });\r\n\r\n //Cardtext check\r\n Mousetrap.bind('r c t', function () {\r\n alert($('#hiddenCardText').val());\r\n })\r\n\r\n //Show delivery date\r\n Mousetrap.bind('l d a', async function () {\r\n //get date and show it in a dialogue...\r\n var deliveryDateString = await DeliveryTimeService.getDeliveryDateString();\r\n alert(`Lieferdatum: ${deliveryDateString}`);\r\n })\r\n}\r\n\r\nfunction configureInlineRegistration() {\r\n $('#chkIsInlineRegistrationRequested').click(function () {\r\n var checkbox = $(this).is(':checked');\r\n if (checkbox) {\r\n $('#inline-registration-form').addClass('active');\r\n } else {\r\n $('#inline-registration-form').removeClass('active');\r\n $('#inline-registration-expansion').removeClass('active');\r\n }\r\n\r\n $('#txtSenderPassword').val('');\r\n $('#txtSenderPasswordRepeat').val('');\r\n })\r\n\r\n $('#txtSenderPassword').keyup(function () {\r\n var password = $(this).val();\r\n if (password.length > 0) {\r\n $('#inline-registration-expansion').addClass('active');\r\n } else {\r\n $('#inline-registration-expansion').removeClass('active');\r\n }\r\n })\r\n}\r\n\r\nfunction configureExceptionsForAustria() {\r\n if (!dynamicData.modeSettings.isSwissShop) {\r\n neutralizeButtonsUppercaseTransformationIfInvalidCharactersPresent();\r\n }\r\n}\r\n\r\nfunction performSessionCookieCheckOnce() {\r\n if (!cookieChecker.sessionCookieCheckAlreadyPerformed) {\r\n return performSessionCookieCheck();\r\n }\r\n}\r\n\r\nfunction performSessionCookieCheck() {\r\n logSessionCookieCheckResults();\r\n\r\n if (!cookieChecker.supportsSessionCookies())\r\n showCookieWarningDialog();\r\n\r\n\r\n}\r\n\r\nfunction logSessionCookieCheckResults() {\r\n var firstRun = !cookieChecker.sessionCookieCheckAlreadyPerformed;\r\n if (firstRun) {\r\n //Log locally\r\n LoggingService.logOrderformVisit(window.location.href, cookieChecker.supportsSessionCookies());\r\n\r\n //Log in analytics\r\n if (!cookieChecker.supportsSessionCookies())\r\n dataLayer.push({ 'event': 'sessionCookiesBlocked' });\r\n }\r\n}\r\n\r\nasync function showCookieWarningDialog() {\r\n await SweetAlert.fire({\r\n title: dynamicData.textRepository.sessionCookieProblemTitle,\r\n text: dynamicData.textRepository.sessionCookieProblemText,\r\n type: 'warning',\r\n showCancelButton: false,\r\n confirmButtonText: dynamicData.textRepository.sessionCookieProblemConfirm\r\n });\r\n}\r\n\r\nfunction neutralizeButtonsUppercaseTransformationIfInvalidCharactersPresent() {\r\n try {\r\n $('.btn-yellow-outline').each(function (index) {\r\n var item = $(this);\r\n if (item.html().includes('ß'))\r\n item.css('text-transform', 'none');\r\n });\r\n } catch (e) {\r\n console.log(e)\r\n }\r\n}\r\n\r\nfunction configureSenderSection() {\r\n configureInfoAboutB2BServiceIfSenderIsCompany();\r\n configureInfoAboutProfileAdressOnFirstFocus();\r\n}\r\n\r\nfunction configureInfoAboutProfileAdressOnFirstFocus() {\r\n var senderFieldIsFirstFocus = true;\r\n\r\n $('input[id*=txtSender]').focusin(async function () {\r\n if (dynamicData.modeSettings.isB2C && dynamicData.session.loginStateIsLoggedIn && senderFieldIsFirstFocus) {\r\n\r\n var questionResult = await SweetAlert.fire({\r\n title: dynamicData.textRepository.addressDecisionTitle,\r\n html: dynamicData.textRepository.addressDecisionText,\r\n type: 'question',\r\n showCancelButton: true,\r\n confirmButtonText: dynamicData.textRepository.addressDecisionConfirmText,\r\n cancelButtonText: dynamicData.textRepository.addressDecisionCancelText,\r\n reverseButtons: true,\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-yellow',\r\n cancelButton: 'btn btn-yellow-outline'\r\n }\r\n });\r\n\r\n if (!questionResult.value)\r\n location.href = dynamicData.page.virtualRoot + 'registration.aspx';\r\n else\r\n senderFieldIsFirstFocus = false;\r\n }\r\n })\r\n}\r\n\r\n//Info gets shown once on field lostfocus when sender company field is filled.\r\n//Only for B2C.\r\nfunction configureInfoAboutB2BServiceIfSenderIsCompany() {\r\n if (dynamicData.modeSettings.isB2C) {\r\n\r\n var b2bTooltipShown = false;\r\n $('#txtSenderCompany').blur(function () {\r\n var shouldBeOpen = $(this).val().length > 0;\r\n if (!b2bTooltipShown && shouldBeOpen) {\r\n b2bTooltipShown = true;\r\n $('#b2b-info-popup').modal('show');\r\n }\r\n });;\r\n\r\n }\r\n}\r\n\r\nfunction configureDeliveryInstructions() {\r\n //There is many instruction fields for different use cases\r\n //All represent the same thing. So they are synced with a hiddenfield which makes it easy to load/write to server.\r\n var instructions = $('#hiddenDeliveryInstructions').val();\r\n $('.tbDeliveryInstructions').val(instructions);\r\n\r\n $('.tbDeliveryInstructions').change(function () {\r\n $('#hiddenDeliveryInstructions').val($(this).val());\r\n $('.tbDeliveryInstructions').val($(this).val());\r\n });\r\n\r\n\r\n\r\n //Configure special tooltip to inform users about limitations of instruction field.\r\n $('.tbDeliveryInstructions').tooltip('dispose').tooltip({\r\n template: '<div class=\"tooltip delivery-instructions-tooltip\" role=\"tooltip\"><div class=\"arrow\"></div><div class=\"tooltip-inner\"></div></div>',\r\n toggle:\"tooltip\",\r\n placement:\"top\",\r\n html:true,\r\n title: \"<span class='bold'>\" + dynamicData.textRepository.important + \"</span><br/>\" + dynamicData.page.deliveryInstructionNotice\r\n });\r\n //$('.tbDeliveryInstructions').tooltip('show');\r\n}\r\n\r\nfunction configureCardText() {\r\n //There is many instruction fields for different use cases\r\n //All represent the same thing. So they are synced with a hiddenfield which makes it easy to load/write to server.\r\n var cardText = $('#hiddenCardText').val();\r\n $('.txtCardText').val(cardText);\r\n\r\n $('.txtCardText').change(function () {\r\n var theText = $(this).val();\r\n $('#hiddenCardText').val(theText);\r\n console.log('hiddenCardText set to: ' + theText);\r\n });\r\n}\r\n\r\nasync function fillTestOrder() {\r\n var salutationID = 2;\r\n var askIfShouldFillTestOrder = false\r\n var shouldFillTestOrder = true;\r\n\r\n //Check if some of the usually empty fields are already filled. If they are -> ask if should fill testorder.\r\n //Otherwise fill testorder without asking.\r\n var emptySenderFieldCount = $('input[id*=txtSender]:visible').filter(function () { return !this.value; }).length;\r\n var emptyRecipientFieldCount = $('input[id*=txtRecipient]:visible').filter(function () { return !this.value; }).length;\r\n\r\n if (dynamicData.modeSettings.isB2C) {\r\n askIfShouldFillTestOrder = (emptySenderFieldCount < 7 || emptyRecipientFieldCount < 7);\r\n } else {\r\n askIfShouldFillTestOrder = (emptyRecipientFieldCount < 7);\r\n }\r\n\r\n if (askIfShouldFillTestOrder) {\r\n var questionResult = await SweetAlert.fire({\r\n title: 'Testauftrag',\r\n text: 'Testauftrag ausfüllen und bestehende Eingaben überschreiben?',\r\n type: 'question',\r\n showCancelButton: true,\r\n confirmButtonText: 'Ok',\r\n cancelButtonText: 'Abbrechen',\r\n reverseButtons: false,\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-yellow',\r\n cancelButton: 'btn btn-yellow-outline'\r\n }\r\n })\r\n\r\n shouldFillTestOrder = questionResult.value;\r\n }\r\n\r\n if (shouldFillTestOrder) {\r\n //Selector checks for disabled and readonly to only fill fields that are \"writable\"\r\n if (!$('input[name$=sender-salutation-group]').prop(\"disabled\")) {\r\n setRadioButton('sender-salutation-group', salutationID);\r\n }\r\n $('input[id^=txtSender]:not([readonly])').not('#inline-registration input[id^=txtSender]').val('test');\r\n $('input[id*=SenderPhone]:not([readonly])').val('044123456');\r\n $('#txtSenderEMail:not([readonly])').val('testorder@fleurop.ch');\r\n\r\n setRadioButton('recipient-salutation-group', salutationID);\r\n $('input[id^=txtRecipient]').val('test');\r\n $('input[id*=RecipientPhone]').val('044123456');\r\n $('#hiddenRecipientZipTownRegNr').val('105398');\r\n restoreSelectedDataForSelect2(recipientRecipientZipTown, $('#hiddenRecipientZipTownRegNr').val(), ('9999 - Wangen TEST'));\r\n $('#txtCostCenter:not([readonly])').val('1111111111');\r\n $('input[id^=txtGPN]:not([readonly])').val('test');\r\n $('#txtGPNNumberUBS:not([readonly])').val('12345678');\r\n\r\n $('#terms-agb').prop('checked', true);\r\n\r\n //Show all steps/divs from order form assistant (step-by-step) for mobile and hide next step button\r\n $('.product-section#related-products').css('display', 'block');\r\n $('.product-section#product-card').css('display', 'block');\r\n $('.product-section#product-card-text').css('display', 'block');\r\n $('.product-section#checkout-client-info').css('display', 'block');\r\n $('.product-section#checkout-shipping').css('display', 'block');\r\n $('.product-section#checkout-options').css('display', 'block');\r\n $('.product-section#checkout-subtotal').css('display', 'block');\r\n $('.product-section#divCheckoutPayment').css('display', 'block');\r\n $('.order-form-assistant').css('display', 'none');\r\n\r\n $.scrollTo('#section-payment');\r\n\r\n toastr.success('Testauftrag ausgefüllt', 'Testauftrag');\r\n }\r\n}\r\n\r\nfunction showpaymentTypeHint() {\r\n if (angularOrderFormController.isPaymentTypeInvoice() && angularOrderFormController.checkPaymentLimit()) {\r\n if (angularOrderFormController.paymentType == 1) {\r\n $(\"#divInvoiceProcessInfo\").show();\r\n }\r\n if (angularOrderFormController.paymentType == 5) {\r\n $(\"#divInvoiceByEmailProcessInfo\").show();\r\n }\r\n } else if (angularOrderFormController.isPaymentTypeCreditcard()) {\r\n $('#divCreditCardProcessInfo').show();\r\n }\r\n}\r\n\r\nglobal.disableCCMethods = function () {\r\n $('.payment-options input').each(function (index, element) {\r\n var paymentType = $(this).val();\r\n var div = $(this).parent();\r\n\r\n if (paymentType.startsWith('C'))\r\n div.hide();\r\n });\r\n}\r\n\r\nglobal.disableInvoiceMethods = function () {\r\n $('.payment-options input').each(function (index, element) {\r\n var paymentType = $(this).val();\r\n var div = $(this).parent();\r\n\r\n if (!paymentType.startsWith('C'))\r\n div.hide();\r\n });\r\n\r\n $(\"#divInvoiceProcessInfo\").hide();\r\n var firstCC = $('.payment-options input:visible')[0];\r\n setPaymentTypeOnForm($(firstCC).val());\r\n}\r\n\r\nfunction setPaymentTypeOnForm(paymentType) {\r\n $('.payment-options input:radio[name=payment-option][value=' + paymentType + ']').prop('checked', true).change();\r\n}\r\n\r\nfunction configureSelfPickup() {\r\n // override app.js\r\n $('.shipping-options > a').off('click');\r\n $('.shipping-options > a').on('click', function () {\r\n if (!$(this).hasClass('selected')) {\r\n $('.shipping-options > a').removeClass('selected');\r\n removeChosenFlorist();\r\n if ($(this).hasClass('deliver')) {\r\n activateFleuropDelivery();\r\n }\r\n if ($(this).hasClass('pickup')) {\r\n activateSelfpickup();\r\n }\r\n }\r\n });\r\n\r\n if (dynamicData.page.showSelfPickupToday) {\r\n $('.setSelfPickupToday').bind('click', function () {\r\n $('.setSelfPickupToday').unbind('click');\r\n\r\n activateSelfpickup();\r\n $('#txtPickupDate').val(dynamicData.page.minDeliveryPickupDT);\r\n });\r\n }\r\n\r\n function activateSelfpickup() {\r\n $('.shipping-options a.pickup').addClass('selected');\r\n $('.delivery-date').hide();\r\n $('#delivery-content').hide();\r\n $('#checkout-options').hide();\r\n $('#pickup-content').show();\r\n $('#payment-option-invoice').parent('.form-check').addClass('d-none');\r\n $('#payment-option-email').parent('.form-check').addClass('d-none');\r\n\r\n var firstCC = $('.payment-options').children('.form-check:not(.d-none)').children('input')[0];\r\n setPaymentTypeOnForm($(firstCC).val());\r\n\r\n FleuropWebShop.BasketService.TogglePickupServiceCharge(angularOrderFormController.getOrderForm(), function (result) {\r\n angularOrderFormController.processBasketResult(result);\r\n $('.selfPickupToday').hide();\r\n $('#txtPickupDate').val($('#txtDeliveryDate').val());\r\n });\r\n }\r\n\r\n function activateFleuropDelivery() {\r\n $('.shipping-options a.deliver').addClass('selected');\r\n $('#pickup-content').hide();\r\n $('.delivery-date').show();\r\n $('#delivery-content').show();\r\n $('#checkout-options').show();\r\n $('#payment-option-invoice').parent('.form-check').removeClass('d-none');\r\n $('#payment-option-email').parent('.form-check').removeClass('d-none');\r\n\r\n setPaymentTypeOnForm(dynamicData.modeSettings.defaultPaymentCode);\r\n\r\n FleuropWebShop.BasketService.TogglePickupServiceCharge(angularOrderFormController.getOrderForm(), function (result) {\r\n angularOrderFormController.processBasketResult(result);\r\n if (dynamicData.page.showSelfPickupToday) {\r\n if ($('#txtPickupDate').val() == dynamicData.page.minDeliveryPickupDT)\r\n $('#txtDeliveryDate').val(dynamicData.page.minDeliveryDateString);\r\n else\r\n $('#txtDeliveryDate').val($('#txtPickupDate').val());\r\n } else {\r\n $('#txtDeliveryDate').val($('#txtPickupDate').val());\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction configureVoucherSection() {\r\n $('#btnCheckVoucherCode').click(function () {\r\n var code = $('#txtVoucherCode').val();\r\n var deliveryDate = $('#txtDeliveryDate').val();\r\n\r\n FleuropWebShop.BasketService.CheckVoucherCodeAndAddToBasket(code, deliveryDate, angularOrderFormController.getOrderForm(), function (result) {\r\n angularOrderFormController.processBasketResult(result);\r\n if (result.Success) {\r\n $('#txtVoucherCode').val('');\r\n if (angularOrderFormController.basket.TotalPrice() < 1) {\r\n disableCCMethods();\r\n setPaymentTypeOnForm(dynamicData.modeSettings.defaultPaymentCode);\r\n }\r\n } else {\r\n toastr.error(dynamicData.textRepository.errorWithVoucher, dynamicData.textRepository.titleGiftCardOnlineVoucher);\r\n }\r\n });\r\n });\r\n}\r\n\r\nfunction getFloristsSucceededCallback(result, eventArgs) {\r\n if (result.length >= 1) {\r\n //Template laden... \r\n var html = parseTemplate($(\"#searchResultFloristTemplate\").html(), { items: result });\r\n $(html).appendTo(\"#floristList\");\r\n $(\"#floristList > .profileTable\").stacktable();\r\n } else {\r\n var html = $(\"#alertFloristNotFound2\").html();\r\n $(html).appendTo(\"#floristList\");\r\n }\r\n}\r\n\r\nfunction configureTimeDelivery() {\r\n $.fn.datetimepicker.dates['en'].meridiem = [];\r\n\r\n //Configure the datetimepicker\r\n $('.timeicon').datetimepicker({\r\n language: dynamicData.session.languageCode2Digit,\r\n weekStart: 1,\r\n todayBtn: 0,\r\n autoclose: 1,\r\n todayHighlight: 1,\r\n startView: 1,\r\n minView: 0,\r\n maxView: 1,\r\n forceParse: 0,\r\n showMeridian: 1,\r\n pickerPosition: \"bottom-right\",\r\n format: 'hh:ii',\r\n hoursDisabled: [0, 1, 2, 3, 4, 5, 6, 7, 19, 20, 21, 22, 23]\r\n });\r\n //Support click on the full span, not only on the label\r\n $('.timeicon').parent().click(function (e) {\r\n $(this).find('.timeicon').datetimepicker('show');\r\n })\r\n //Offset the other value if one is picked (+/- 30min)\r\n $('.timeicon:first').datetimepicker().on('changeDate', function (ev) {\r\n $(\".timeicon:last\").datetimepicker('setDate', new Date(ev.date.valueOf() + 30 * 60000));\r\n });\r\n $('.timeicon:last').datetimepicker().on('changeDate', function (ev) {\r\n $(\".timeicon:first\").datetimepicker('setDate', new Date(ev.date.valueOf() - 30 * 60000));\r\n });\r\n}\r\n\r\nfunction configureAppearEvents() {\r\n //In old layout all section names were passed as Datalayer Events.\r\n //In the new layout we pass the old section names as attributes of name data-appear-id to keep statistics working.\r\n //Remark: this code pushes the event not only on the first occurance. Kept it this way for now, but might need refactoring.\r\n var lastSections = [];\r\n $('[data-appear-id]').appear();\r\n $(document.body).on('appear', '[data-appear-id]', function (e, $affected) {\r\n var newSections = [], gtevents = [];\r\n var cardSliderAppeared = false;\r\n $affected.each(function () {\r\n var sid = $(this).data(\"appearId\");\r\n if (jQuery.inArray(sid, lastSections) == -1) {\r\n gtevents.push(sid);\r\n }\r\n newSections.push(sid);\r\n\r\n if (sid == 'cardSlider')\r\n cardSliderAppeared = true;\r\n });\r\n\r\n //Configure froala if user scrolled to cards\r\n if (cardSliderAppeared && dynamicData.page.showFroalaEditor && !isFroalaInitialized) {\r\n isFroalaInitialized = true;\r\n configureFroala();\r\n }\r\n\r\n // push google data layer sections for event tracking in analytics\r\n if (gtevents.length > 0) {\r\n gtdl_push(10, gtevents);\r\n }\r\n lastSections = newSections;\r\n\r\n // add virtual basket items for tracking in emarsys\r\n gtevents.forEach(function (item) {\r\n if (item == 'delivery')\r\n if (Cookiebot.consent.marketing)\r\n addBasketItemToVirtualBasket(dynamicData.page.productID, angularOrderFormController);\r\n if (item == 'customerAddress')\r\n performSessionCookieCheckOnce();\r\n if (item == 'addonProducts')\r\n showSpecialTermsDialog();\r\n })\r\n });\r\n}\r\n\r\nfunction configureDataLayerEvents() {\r\n //Pushing sections via jquery appear is configured in configureAppearEvents()\r\n\r\n $(\"#aspnetForm\").bind(\"jqv.field.result\", function (event, field, errorFound, promptText) {\r\n if (errorFound) {\r\n var fieldID = field.attr(\"id\").split(\"_\").slice(-1)[0];\r\n gtdl_push(11, `${fieldID}: ${promptText}`);\r\n }\r\n });\r\n\r\n //Addon click\r\n $('.addons-list a').click(function (e) {\r\n var product = $(this).closest('.product');\r\n var id = product.data('id');\r\n var productId = product.data('productId');\r\n var nameEn = product.data('nameEn');\r\n var price = product.find('.price').text();\r\n var position = $('.product').index(product) + 1;\r\n var category = dynamicData.session.languageCode2Digit.toUpperCase() + '/productDetail/' + productId;\r\n\r\n var productInfo = {\r\n 'name': nameEn, 'id': id, 'price': price, 'brand': 'Fleurop',\r\n 'category': category, 'list': 'productDetail', 'position': position\r\n };\r\n\r\n onAddonClick(this, productInfo);\r\n })\r\n\r\n}\r\n\r\nfunction configureAddonSelection() {\r\n let inputs = $('.addons-list .quantity-selector input');\r\n\r\n inputs.inputSpinner();\r\n\r\n inputs.on('change', function (e) {\r\n var product = $(this).closest('.product');\r\n var addonId = product.data('id');\r\n var quantity = e.target.value;\r\n angularOrderFormController.setProductQuantity(addonId, quantity);\r\n\r\n if (quantity == 0) {\r\n setTimeout(function () {\r\n angularOrderFormController.toggleAddonProduct(addonId);\r\n }, 500)\r\n }\r\n });\r\n\r\n //Click on quantity selector should not trigger the addons normal add/remove handler\r\n $('.addons-list .quantity-selector').on('click', function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n });\r\n}\r\n\r\nfunction configureCardSelection() {\r\n\r\n if (dynamicData.session.noGreetingCard) {\r\n $('.choose-card > a.card-remove').click();\r\n $('#product-card-text').slideUp(300);\r\n $('#hiddenNoGreetingCard').val(true);\r\n }\r\n\r\n if (dynamicData.session.noGreetingCardByDefault) {\r\n $('.choose-card > a').removeClass('selected');\r\n $('#btnCardIDoNotWish').addClass('selected');\r\n angularOrderFormController.noGreetingCard = true;\r\n $('.product-card-categories').hide();\r\n $('#product-card-text').hide();\r\n $('#hiddenNoGreetingCard').val(true);\r\n }\r\n\r\n let inputs = $('.greeting-cards-list .quantity-selector input');\r\n inputs.inputSpinner();\r\n inputs.on('change', function (e) {\r\n var product = $(this).closest('.product');\r\n var cardId = product.data('card-id');\r\n var quantity = e.target.value;\r\n angularOrderFormController.setProductQuantity(cardId, quantity);\r\n });\r\n $('.greeting-cards-list .quantity-selector').click(function (e) {\r\n e.stopPropagation();\r\n });\r\n\r\n // Buttons \"i wish card\" / \"i don't wish card\"\r\n $('#btnCardIWish').click(function () {\r\n if (!$(this).hasClass('selected')) {\r\n $('.choose-card > a').removeClass('selected');\r\n $(this).addClass('selected')\r\n\r\n $(this).parents('.choose-card').next('.product-card-categories').slideDown(300);\r\n $('#product-card-text').slideDown(300);\r\n $('#hiddenNoGreetingCard').val(false);\r\n if (angularOrderFormController.noGreetingCard) {\r\n angularOrderFormController.noGreetingCard = false;\r\n angularOrderFormController.getBasketItemsFromSession();\r\n }\r\n\r\n if (dynamicData.session.noGreetingCardByDefault) {\r\n resetCardSelection();\r\n }\r\n }\r\n })\r\n $('#btnCardIDoNotWish').click(function () {\r\n if (!$(this).hasClass('selected')) {\r\n $('.choose-card > a').removeClass('selected');\r\n $(this).addClass('selected');\r\n\r\n angularOrderFormController.noGreetingCard = true;\r\n resetCardSelection();\r\n $(this).parents('.choose-card').next('.product-card-categories').slideUp(300);\r\n $('#product-card-text').slideUp(300);\r\n $('#hiddenNoGreetingCard').val(true);\r\n\r\n }\r\n })\r\n\r\n // Make card selectable\r\n $('.product-card-content .product').click(function (event) {\r\n var selectedCard = $(this);\r\n var cardType = angularOrderFormController.cardType;\r\n setCardInformation(cardType, selectedCard);\r\n\r\n setCardAsActiveAndClearTheRest(selectedCard);\r\n });\r\n\r\n // MyCard On/off\r\n $('#btnActivateMyCard').click(function (event) {\r\n var selectedCard = $('.product-card-content .product[class*=active]');\r\n setCardInformation('MyCard', selectedCard);\r\n $(this).html(dynamicData.textRepository.withMyCardDesignerChosen);\r\n updateCardText($(\"#cardTextSimple\").is(\":visible\"));\r\n angularOrderFormController.refresh();\r\n });\r\n $('#btnDeactivateMyCard').click(function (event) {\r\n deactivateMyCard();\r\n angularOrderFormController.didSubmitMyCard = false;\r\n });\r\n\r\n //Remove MyCard if not properly used\r\n $('#my-card-popup').on('hidden.bs.modal', function () {\r\n if (!angularOrderFormController.didSubmitMyCard) {\r\n deactivateMyCard();\r\n $('.choose-card-text a').toggleClass('selected');\r\n }\r\n });\r\n\r\n function deactivateMyCard() {\r\n var selectedCard = $('.product-card-content .product[class*=active]');\r\n setCardInformation('Normal', selectedCard);\r\n $('#btnActivateMyCard').html(dynamicData.textRepository.withMyCardDesigner);\r\n updateCardText($(\"#cardTextSimple\").is(\":hidden\"));\r\n angularOrderFormController.refresh();\r\n }\r\n\r\n // Clear chosen settings\r\n function resetCardSelection() {\r\n // Select neutral card, clear MyCard\r\n $('#btnDeactivateMyCard').click();\r\n var neutralCard = $('.product-card-content .product[data-card-id=' + dynamicData.modeSettings.productItemNeutralCardID + ']');\r\n setCardAsActiveAndClearTheRest(neutralCard);\r\n setCardInformation('Normal', neutralCard);\r\n // Clear card text\r\n $('.product-card-text-content textarea').val('').change();\r\n }\r\n\r\n function setCardAsActiveAndClearTheRest(selectedCard) {\r\n $('.product-card-content .product').removeClass('active');\r\n selectedCard.addClass('active');\r\n }\r\n\r\n function setCardInformation(cardType, card) {\r\n angularOrderFormController.chosenCard = parseInt(card.data(\"cardId\"));\r\n angularOrderFormController.chosenCardReference = card.data(\"cardId\");\r\n angularOrderFormController.cardType = cardType;\r\n angularOrderFormController.chosenCardImageSrc = card.data(\"cardImageSrc\");\r\n let cardQuantityBox = $(`#txtCardQuantity_${angularOrderFormController.chosenCardReference}`);\r\n let chosenQuantity = cardQuantityBox.length > 0 ? cardQuantityBox.val() : 1;\r\n angularOrderFormController.chosenCardQuantity = chosenQuantity;\r\n\r\n if (angularOrderFormController.cardType == 'MyCard') {\r\n angularOrderFormController.chosenCardDescription = `${card.data(\"cardDescription\")} (MyCard)`;\r\n angularOrderFormController.chosenCardPrice = parseFloat(card.data(\"cardPriceMedium\"));\r\n } else {\r\n angularOrderFormController.chosenCardDescription = card.data(\"cardDescription\");\r\n angularOrderFormController.chosenCardPrice = parseFloat(card.data(\"cardPriceMinimum\"));\r\n }\r\n\r\n angularOrderFormController.updateCardInBasket();\r\n }\r\n}\r\n\r\nfunction configureCountryChooser() {\r\n $('#ddlSenderCountry').on('select2:select', function (e) {\r\n $('#hiddenSenderCountryRegNr').val(e.params.data.id);\r\n angularOrderFormController.profile.senderAddress.CountryRegNr = e.params.data.id;\r\n onPaymentMethodChanged();\r\n });\r\n}\r\n\r\nglobal.myBouquetTrackbarPositionChangedImplementation = function() {\r\n var amountOfMyBouquet = tbMyBouquetQuantity.GetPositionStart();\r\n if (amountOfMyBouquet == 0) { amountOfMyBouquet = 1; }\r\n\r\n //reflect on form\r\n if (myBouquetAmounts[amountOfMyBouquet] != null) {\r\n var textTemplate = dynamicData.textRepository.myBouquetAmountOfFlowersChosen;\r\n var chosenPrice = myBouquetAmounts[amountOfMyBouquet].Price;\r\n var imagePreview = myBouquetAmounts[amountOfMyBouquet].ImageURL;\r\n\r\n $('#txtMyBouquetQuantity').val(amountOfMyBouquet);\r\n $('#txtMyBouquetPrice').val(chosenPrice);\r\n $('.media-main-image img').prop('src', imagePreview);\r\n $('.main-product-image').prop('src', imagePreview);\r\n $('.media-vertical-thumbs .thumbs-content li').remove();\r\n $('.media-vertical-thumbs .thumbs-content').append('<li href = \"#\" Class=\"active\"><img src=\"'+imagePreview+'\" data-imageZoom=\"'+imagePreview+'\" data-source=\"'+imagePreview+'\" data-position=\"0\" /></li>');\r\n\r\n if (angularOrderFormController != null) {\r\n FleuropWebShop.BasketService.SetMainProductPriceMyBouquet(chosenPrice, amountOfMyBouquet, angularOrderFormController.getOrderForm(), function (result) {\r\n // toastr.success(dynamicData.textRepository.priceWasAdapted, dynamicData.textRepository.price);\r\n angularOrderFormController.processBasketResult(result);\r\n });\r\n }\r\n }\r\n}\r\n\r\nfunction configureGPNnumberUBS() {\r\n $('input[id*=\"GPNNumberUBS\"], input[class*=\"GPNnumberUBS\"]').keyup(function () {\r\n let numberContent = $(this).val();\r\n numberContent = numberContent.replace(/[^+0-9]/g, '');\r\n $(this).val(numberContent);\r\n });\r\n\r\n $('input[id*=\"GPNNumberUBS\"], input[class*=\"GPNnumberUBS\"]').blur(function () {\r\n let numberContent = $(this).val();\r\n if (numberContent) {\r\n numberContent = numberContent.padStart(8,'0');\r\n $(this).val(numberContent);\r\n }\r\n });\r\n}\r\n\r\nfunction configureOrderAlertBJB() {\r\n if (dynamicData.modeSettings.subMode == dynamicData.enums.enmShopSubMode.BJB) {\r\n SweetAlert.fire({\r\n title: dynamicData.textRepository.oF_OrderAlertTitleBjb,\r\n text: dynamicData.textRepository.oF_OrderAlertTextBjb, \r\n confirmButtonText: 'OK',\r\n type: 'warning',\r\n buttonsStyling: false,\r\n customClass: {\r\n confirmButton: 'btn btn-yellow',\r\n }\r\n }) \r\n }\r\n}\r\n\r\nfunction configurePixleeGallery() {\r\n window.addEventListener('message', function (event) {\r\n // only listen to events coming from Pixlee\r\n if (!event.data) {\r\n return;\r\n }\r\n\r\n try { \r\n const message = JSON.parse(event.data);\r\n\r\n //Print message and timestamp for debugging purposes\r\n //console.log(\"message received: \" + message.name + \" at \" + new Date().toLocaleTimeString()); \r\n\r\n //Hide widget if it was closed\r\n if (message.name === \"pixlee:close:widget\") {\r\n $('#pixlee-container').addClass('d-none');\r\n }\r\n\r\n //Hide widget if it does not have at least 1 photo\r\n if (message.name === \"pixlee:widget:num:photos\") {\r\n if (message.data.photoCount < 1) \r\n $('#pixlee-container').addClass('d-none');\r\n }\r\n \r\n } catch (error) {\r\n // error during JSON.parse, skip\r\n }\r\n });\r\n}\r\n\r\n//#endregion\r\n\r\n//#region Froala editors settings\r\n\r\nfunction htmlEntities(str) {\r\n return String(str).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"');\r\n}\r\nvar resetCardLeftTemplate = function(cmd, param1, param2) {\r\n if (cmd == \"imageRemove\" && $('#imageCardLeftTemplate').attr('src') == null)\r\n $('#imageCardLeftTemplate').attr('src', dynamicData.page.virtualRoot + 'media/images/content/gcui_template_' + dynamicData.session.languageCode2Digit + '.jpg'); // ! DE language to be changed to variable\r\n};\r\nvar changeEmojisToImagesAndRemoveForbiddenCharacters = function (e, editor) {\r\n this.selection.save();\r\n var htmlText = this.html.get(true);\r\n var parsedHtmlText = parseEmojis(htmlText);\r\n parsedHtmlText = parsedHtmlText.replace(/[^\\x00-\\xFFÅ“]/g, '');\r\n if (htmlText.length != parsedHtmlText.length) {\r\n this.html.set(parsedHtmlText);\r\n this.selection.restore();\r\n }\r\n updateCardText();\r\n};\r\n// for Froala editors only: updates cardText that will be sent to basket\r\nfunction updateCardText(isSwitched) {\r\n if (dynamicData.page.showFroalaEditor) {\r\n var isMyCard = angularOrderFormController.isMyCardSelected();\r\n // copy simple card to MyCard Froala, when it's selected\r\n if (isSwitched == true && isMyCard)\r\n dynamicData.page.froalaEditorFull.html.set(dynamicData.page.froalaEditorSimple.html.get(true));\r\n\r\n var htmlText = (isMyCard) ? dynamicData.page.froalaEditorFull.html.get(true) : dynamicData.page.froalaEditorSimple.html.get(true);\r\n angularOrderFormController.cardData.cardText = htmlText;\r\n $(\"#hiddenCardText\").val(htmlEntities(htmlText));\r\n $(\"#cardTextSimpleOnlyView\").html(htmlText);\r\n\r\n // card->MyCard switch, hide simple Froala editor and show div with MyCard Froala content, not editable (click inside div opens MyCard popup)\r\n // MyCard->card switch, hide div and show simple Froala editor\r\n if (isSwitched == true) {\r\n $(\"#cardTextSimple\").css('display', (isMyCard) ? 'none' : 'block');\r\n $(\"#cardTextSimpleOnlyView\").css('display', (isMyCard) ? 'block' : 'none');\r\n }\r\n }\r\n}\r\nvar changeImagePopupPosition = function (editor) {\r\n //next code moves popup with image edit buttons from bottom of the \"imageCardLeftTemplate\" to the top of it (for better visibility, specially on mobile)\r\n var imgOffset = $('#imageCardLeftTemplate').offset();\r\n $('div.fr-popup.fr-active[data-inst3=\"true\"]').css('top', imgOffset.top + 'px');\r\n}\r\n\r\nvar isFroalaInitialized = false;\r\n\r\nfunction configureFroala() {\r\n //toolbarButtons: [..], //large devices (≥ 1200px)\r\n //toolbarButtonsMD: [..], //medium devices (≥ 992px)\r\n //toolbarButtonsSM: [..], //small devices (≥ 768px)\r\n //toolbarButtonsXS: [..], //extra small devices (< 768px)\r\n //fontSizeUnit: 'px', // px/pt, px - default\r\n //paragraphFormatSelection: true,\r\n\r\n loadjs(froalaScriptBundle, {\r\n async: false,\r\n success: function () {\r\n\r\n var ww = $(window).width();\r\n\r\n dynamicData.page.froalaEditorSimple = new FroalaEditor('#cardTextSimple', {\r\n language: dynamicData.session.languageCode2Digit,\r\n enter: FroalaEditor.ENTER_BR,\r\n toolbarButtons: [['emojis'], ['undo', 'redo']], //, ['html']\r\n toolbarButtonsXS: [['undo', 'redo']],\r\n quickInsertButtons: [],\r\n quickInsertTags: [],\r\n toolbarSticky: false,\r\n heightMin: 130,\r\n heightMax: 370,\r\n initOnClick: false,\r\n charCounterMax: 400,\r\n wordCounterCount: false,\r\n pastePlain: true,\r\n imageUpload: false,\r\n imagePaste: false,\r\n wordPasteModal: false,\r\n wordPasteKeepFormatting: false,\r\n wordDeniedTags: ['a', 'i', 'b', 'img', 'table'],\r\n pasteDeniedTags: ['a', 'i', 'b', 'img', 'table'],\r\n key: 'AVB8B-21A3D4E3E1E2A1ua2BD1IMNBUMRWAd1AYMSTRBUZYA-9H3E2J2A4C6C3D4B5B1F1==',\r\n attribution: false,\r\n events: {\r\n contentChanged: changeEmojisToImagesAndRemoveForbiddenCharacters,\r\n initialized: function () {\r\n //deal with Serge's fucked up code..\r\n var tempCardText = $('#hiddenCardText').val();\r\n if (tempCardText != '') {\r\n this.html.set(tempCardText);\r\n }\r\n $(\"#hiddenCardText\").val(htmlEntities($(\"#hiddenCardText\").val()));\r\n }\r\n }\r\n });\r\n\r\n dynamicData.page.froalaEditorFull = new FroalaEditor('#cardText', {\r\n language: dynamicData.session.languageCode2Digit,\r\n enter: FroalaEditor.ENTER_BR,\r\n toolbarButtons: [['fontFamily', 'fontSize', 'bold', 'italic', 'underline', 'strikeThrough', 'textColor', 'backgroundColor'], ['paragraphFormat', 'align'],\r\n ['emojis', 'insertTable'], ['undo', 'redo']],\r\n toolbarButtonsSM: {\r\n moreText: {\r\n buttons: ['fontFamily', 'fontSize', 'bold', 'italic', 'underline', 'strikeThrough', 'textColor', 'backgroundColor'],\r\n align: 'left',\r\n buttonsVisible: 2\r\n },\r\n moreParagraph: {\r\n buttons: ['align', 'paragraphFormat'],\r\n align: 'left',\r\n buttonsVisible: 2\r\n },\r\n moreRich: {\r\n buttons: ['emojis', 'insertTable', 'undo', 'redo', 'fullscreen', 'selectAll'],\r\n align: 'left',\r\n buttonsVisible: 2\r\n }\r\n },\r\n toolbarButtonsXS: {\r\n moreText: {\r\n buttons: ['fontFamily', 'fontSize', 'bold', 'italic', 'underline', 'strikeThrough', 'textColor', 'backgroundColor'],\r\n align: 'left',\r\n buttonsVisible: 2\r\n },\r\n moreRich: {\r\n buttons: ['paragraphFormat', 'align', 'insertTable'],\r\n align: 'left',\r\n buttonsVisible: 1\r\n },\r\n moreMisc: {\r\n buttons: ['undo', 'redo', 'fullscreen', 'selectAll'],\r\n align: 'right',\r\n buttonsVisible: 0\r\n }\r\n },\r\n heightMin: 200,\r\n heightMax: 370,\r\n initOnClick: true,\r\n fontFamily: {\r\n \"'Times New Roman',Times,serif\": 'Times New Roman',\r\n \"Futura LT Book\": 'Futura LT Book',\r\n \"NewCenturySchlbk LT\": 'NewCenturySchlbk LT',\r\n \"Artiste\": 'Artiste',\r\n \"Party LET\": 'Party LET',\r\n \"Quartz LT Bold D\": 'Quartz LT Bold D',\r\n \"Shelley LT AndanteScript\": 'Shelley LT AndanteScript',\r\n \"Smudger LET\": 'Smudger LET',\r\n \"Westside LT Regular\": 'Westside LT Regular'\r\n },\r\n fontFamilyDefaultSelection: \"'Times New Roman',Times,serif\",\r\n fontSizeDefaultSelection: '14',\r\n fontFamilySelection: (ww > 991) ? true : false,\r\n fontSizeSelection: true,\r\n fontSize: ['10', '11', '12', '13', '14', '16', '18', '20', '24', '28', '34', '40', '50'],\r\n quickInsertButtons: [],\r\n imageEditButtons: ['imageReplace', 'imageAlign', 'imageDisplay', 'imageStyle', 'imageRemove'],\r\n imageInsertButtons: ['imageBack', '|', 'imageByURL'],\r\n imagePaste: false,\r\n imageUpload: false,\r\n imageDefaultAlign: 'left',\r\n imageDefaultDisplay: 'inline',\r\n toolbarSticky: false,\r\n keepFormatOnDelete: true,\r\n charCounterMax: 400,\r\n wordCounterCount: false,\r\n pastePlain: true,\r\n wordPasteModal: false,\r\n wordPasteKeepFormatting: false,\r\n key: 'AVB8B-21A3D4E3E1E2A1ua2BD1IMNBUMRWAd1AYMSTRBUZYA-9H3E2J2A4C6C3D4B5B1F1==',\r\n attribution: false,\r\n events: {\r\n contentChanged: changeEmojisToImagesAndRemoveForbiddenCharacters,\r\n blur: function (e, editor) {\r\n this.selection.save();\r\n }\r\n }\r\n });\r\n\r\n }\r\n })\r\n\r\n $('#cardTextSimpleOnlyView').click(function (event) {\r\n $('#btnActivateMyCard').click();\r\n });\r\n\r\n}\r\n\r\n//#endregion","appWebshop.requires.push('colorpicker.module')\r\nappWebshop.requires.push('ngFileUpload')\r\n\r\nglobal.angularOrderFormController = undefined;\r\n\r\nappWebshop.controller('orderFormController', ['$scope', '$interval', '$http', '$timeout' ,'Upload', function ($scope, $interval, $http, $timeout, Upload) {\r\n\r\n //Table of content:\r\n //------------------\r\n //DOM Ready - Entry point \r\n //Profile Features\r\n //Greeting Card features\r\n //MyCard features\r\n //Basket features\r\n //Payment features\r\n //Country features\r\n //Time Delivery features\r\n //MyFleurop Points features \r\n //Express features\r\n //Florist search features\r\n //------------------\r\n\r\n //DOM Ready - Entry point\r\n angular.element(document).ready(function () { \r\n angularOrderFormController = $scope;\r\n dynamicData.page.angularReady = true;\r\n if (dynamicData.page.domReady == true)\r\n domAndAngularReady();\r\n\r\n profileFeaturesReady();\r\n greetingCardFeaturesReady();\r\n myCardFeaturesReady();\r\n basketFeaturesReady();\r\n });\r\n\r\n //#region Profile Features\r\n //------------------------------------------------------------------------------------------------\r\n var profile = new Profile();\r\n $scope.profile = profile;\r\n\r\n function profileFeaturesReady() { \r\n profile.getLoginState();\r\n } \r\n\r\n $scope.getDeliveryAddresses = function () {\r\n if (profile.isLoggedIn) {\r\n FleuropWebShop.ProfileService.GetDeliveryAddresses(function (result) {\r\n profile.addressListItems = result;\r\n $scope.$apply();\r\n \r\n $('#address-selection-recipient-popup').modal('show');\r\n //$(\"#deliveryAddressList > .profileTable\").stacktable();\r\n });\r\n } else {\r\n showNoPleaseLoginDialog();\r\n }\r\n }\r\n \r\n $scope.setDeliveryAddress = function (address) { \r\n setDeliveryAddressGlobal(address.id, address.salutationID, address.name, address.vorname, address.co, address.street, address.zip, address.city, address.company, address.tel1, address.tel2, address.tel3)\r\n }\r\n\r\n $scope.getInvoiceAddresses = function () {\r\n if (profile.isLoggedIn) {\r\n FleuropWebShop.ProfileService.GetInvoiceAddresses(function (result) {\r\n profile.addressListItemsInvoice = result;\r\n $scope.$apply();\r\n\r\n $('#address-selection-sender-popup').modal('show');\r\n //$(\"#invoiceAddressList > .profileTable\").stacktable();\r\n });\r\n } else {\r\n showNoPleaseLoginDialog();\r\n }\r\n }\r\n $scope.setBillAddress = function (address) {\r\n profile.senderAddress = address;\r\n $('#ddlSenderCountry').val(address.CountryRegNr).select2().trigger('change');\r\n $('#address-selection-sender-popup').modal('hide');\r\n }\r\n\r\n $scope.showB2BInfoIcon = function () {\r\n if (dynamicData.modeSettings.isB2C && profile.senderAddress != null && profile.senderAddress.Firma1 != null) {\r\n return (profile.senderAddress.Firma1.length > 0);\r\n } else {\r\n return false;\r\n }\r\n \r\n }\r\n //------------------------------------------------------------------------------------------------\r\n //#endregion\r\n\r\n //#region Greeting Card features \r\n //------------------------------------------------------------------------------------------------\r\n $scope.cardData = { noCardText: false, cardText: '', cardTextCountMax: 240, cardTextCountRemaining: 240 };\r\n $scope.cardTextOccasion = $(\"#divCardTextGroupSelection a:first\").attr(\"data-id\");\r\n $scope.cardTextLanguage = dynamicData.session.languageCode2Digit.toUpperCase();\r\n $(\"#divCardTextGroupSelection a[data-id='\" + $scope.cardTextOccasion + \"']\").addClass('active');\r\n $(\"#divCardTextLanguageSelection ul li a[data-id='\" + $scope.cardTextLanguage + \"']\").addClass('active');\r\n\r\n function greetingCardFeaturesReady() {\r\n //Set up counter on cardtext field. \r\n $scope.cardData.cardTextCountMax = dynamicData.page.cardTextCountMax;\r\n $scope.updatecardTextCountRemaining();\r\n $scope.updateCardDefaultTexts();\r\n } \r\n\r\n $scope.updatecardTextCountRemaining = function () {\r\n // Strip emoticons and other non supported letters: https://stackoverflow.com/questions/24476448/strip-any-character-that-is-above-127-in-the-ascii-table\r\n $scope.cardData.cardText = $scope.cardData.cardText.replace(/[^\\x00-\\xFFÅ“]/g, '');\r\n $scope.cardData.cardTextCountRemaining = $scope.cardData.cardTextCountMax - $scope.cardData.cardText.length;\r\n }\r\n\r\n $(\"#divCardTextGroupSelection a\").click(function () {\r\n $(\"#divCardTextGroupSelection a.active\").toggleClass(\"active\");\r\n $(this).toggleClass(\"active\");\r\n if ($(this).attr(\"data-id\") != $scope.cardTextOccasion) {\r\n $scope.cardTextOccasion = $(this).attr(\"data-id\");\r\n $scope.updateCardDefaultTexts();\r\n }\r\n });\r\n $(\"#divCardTextLanguageSelection a\").click(function () {\r\n $(\"#divCardTextLanguageSelection a.active\").toggleClass(\"active\");\r\n $(this).toggleClass(\"active\");\r\n if ($(this).attr(\"data-id\") != $scope.cardTextLanguage) {\r\n $scope.cardTextLanguage = $(this).attr(\"data-id\");\r\n $scope.updateCardDefaultTexts();\r\n }\r\n });\r\n $scope.updateCardDefaultTexts = function () {\r\n $(\"#cardDefaultTexts\").html('');\r\n $(\"#cardTextCurrentChoice\").text($(\"#divCardTextGroupSelection a[data-id='\" + $scope.cardTextOccasion + \"']\").text() + ' (' + $scope.cardTextLanguage.toUpperCase() + ')');\r\n $http.get(dynamicData.page.virtualRoot + 'Handlers/CardDummyTexts.aspx?o=' + $scope.cardTextOccasion + '&l=' + $scope.cardTextLanguage).then(function onSuccess(response) { \r\n if (response.data && response.status === 200) {\r\n $(\"#cardDefaultTexts\").html(response.data);\r\n }\r\n });\r\n }\r\n $(\"#card-text-popup\").on('click', '#cardDefaultTexts ul li', function (event) {\r\n event.stopImmediatePropagation();\r\n var chosenText = $(this).children('a').html();\r\n $('.txtCardText:visible').val(chosenText).change();\r\n\r\n if (dynamicData.page.showFroalaEditor) {\r\n var isMyCard = $scope.isMyCardSelected();\r\n if (isMyCard && dynamicData.page.froalaEditorFull != null)\r\n dynamicData.page.froalaEditorFull.html.set(chosenText);\r\n else if (!isMyCard && dynamicData.page.froalaEditorSimple != null)\r\n dynamicData.page.froalaEditorSimple.html.set(chosenText);\r\n updateCardText();\r\n }\r\n\r\n $scope.updatecardTextCountRemaining();\r\n $scope.$apply();\r\n $(\".openDropdownMenu\").removeClass('active');\r\n $('#card-text-popup').modal('hide');\r\n });\r\n //------------------------------------------------------------------------------------------------\r\n //#endregion\r\n\r\n //#region MyCard features\r\n //------------------------------------------------------------------------------------------------\r\n function myCardFeaturesReady() {\r\n if (getQueryStringParameter('Action') == 'RestoreBasket') {\r\n $scope.restoreCardFromBasket();\r\n }\r\n }\r\n\r\n //#region Ex cardService\r\n $scope.chosenCard = 0;\r\n $scope.chosenCardImageSrc = '';\r\n $scope.chosenCardDescription = '';\r\n $scope.chosenCardPrice = 0;\r\n $scope.cardType = 'Normal'; //Möglichkeiten: Normal/MyCard\r\n $scope.chosenCardQuantity = 1;\r\n $scope.cardPreviewImageUrl = '';\r\n $scope.envelopePreviewImageUrl = '';\r\n $scope.customImageFileName = '';\r\n $scope.myCard = null;\r\n $scope.noGreetingCard = false;\r\n $scope.didSubmitMyCard = false;\r\n\r\n //MyCard settings\r\n $scope.myCardSetup = {\r\n card: { templateID: 80, colorCode: '#000000', fontID: 7 },\r\n envelope: { templateID: 80, colorCode: '#000000', fontID: 7 }\r\n };\r\n\r\n $scope.createMyCard = function () {\r\n if ($scope.cardType == 'MyCard') {\r\n //MyCard-Layout speichern \r\n $scope.myCard = new FleuropLib.DataAccess.Objects.TemporaryProductCardLayout();\r\n var myCard = $scope.myCard;\r\n myCard.CardFontID = $scope.myCardSetup.card.fontID;\r\n myCard.CardFontColor = $scope.myCardSetup.card.colorCode;\r\n myCard.CardLayoutTemplateID = $scope.myCardSetup.card.templateID;\r\n myCard.LeftCardImagePath = $scope.customImageFileName; \r\n myCard.EnvelopeFontID = $scope.myCardSetup.card.fontID;\r\n myCard.EnvelopeFontColor = $scope.myCardSetup.card.colorCode;\r\n myCard.EnvelopeCardLayoutTemplateID = $scope.myCardSetup.card.templateID;\r\n \r\n if (dynamicData.page.froalaEditorFull == null)\r\n myCard.cardText = $scope.cardData.cardText;\r\n else {\r\n myCard.cardText = dynamicData.page.froalaEditorFull.html.get();\r\n if ($('#imageCardLeftTemplate').length > 0) {\r\n var clt = $('#imageCardLeftTemplate').attr('src');\r\n myCard.LeftCardImagePath = (clt.indexOf(\"/media/images/content/\") == -1) ? clt : \"\";\r\n }\r\n if ($scope.cardData.cardText == '' && myCard.cardText != '') $scope.cardData.cardText = ' ';\r\n }\r\n } else {\r\n $scope.myCard = null;\r\n }\r\n };\r\n\r\n $scope.updateCardInBasket = function (func) {\r\n if ($scope.chosenCard != 0) {\r\n $scope.createMyCard();\r\n var thisController = this;\r\n\r\n FleuropWebShop.BasketService.SetCardProduct(\r\n $scope.chosenCard, $scope.chosenCardDescription, $scope.chosenCardQuantity,\r\n $scope.chosenCardPrice, $scope.myCard, $scope.getOrderForm(),\r\n function (result) {\r\n processBasketResult(result);\r\n \r\n gtdl_push(12, {\r\n id: thisController.chosenCard, name: (thisController.cardType == 'MyCard') ? 'My card' : 'Standard', price: thisController.chosenCardPrice.toFixed(2),\r\n image: (thisController.cardType == 'MyCard') ? 'Uploaded by user' : thisController.chosenCardImageSrc\r\n });\r\n\r\n if (func != null) func();\r\n });\r\n }\r\n };\r\n\r\n $scope.restoreCardFromBasket = function () {\r\n var thisController = this;\r\n\r\n FleuropWebShop.BasketService.GetMyCardInfos($(\"input[id$=hiddenOrderForm]\").val(), function (data) {\r\n\r\n if (data.IsMyCard == true) {\r\n thisController.cardType == 'MyCard';\r\n thisController.myCardSetup.card.fontID = data.CardFontID;\r\n thisController.myCardSetup.card.colorCode = data.CardFontColor;\r\n thisController.myCardSetup.card.templateID = data.CardLayoutTemplateID;\r\n\r\n thisController.myCardSetup.envelope.fontID = data.EnvelopeFontID;\r\n thisController.myCardSetup.envelope.colorCode = data.EnvelopeFontColor;\r\n thisController.myCardSetup.envelope.templateID = data.EnvelopeCardLayoutTemplateID;\r\n\r\n thisController.customImageFileName = data.LeftCardImagePath;\r\n thisController.createMyCard();\r\n }\r\n\r\n //Preserves Customers Selection but doesn't reflect it on the form.\r\n //Needs to restore more infos about chosen card, but it's very annoying from this place..\r\n //Later... \r\n //\r\n //alert('reached bottom');\r\n });\r\n }\r\n\r\n $scope.createPreview = function (orderContrl, func) {\r\n $scope.createMyCard();\r\n //if ($scope.myCard != null) $scope.myCard.cardText = orderContrl.angularOrderFormController.cardData.cardText;\r\n var thisController = this;\r\n FleuropWebShop.BasketService.GetMyFleuropPreviewImages($scope.myCard, orderContrl.angularOrderFormController.getOrderForm(), function (data) {\r\n orderContrl.angularOrderFormController.setOrderForm(data.OrderForm);\r\n thisController.cardPreviewImageUrl = data.CardUrl;\r\n thisController.envelopePreviewImageUrl = data.EnvelopeUrl;\r\n\r\n if (func != null) func();\r\n });\r\n };\r\n\r\n //#endregion\r\n \r\n //#region Ex cardPreviewController\r\n\r\n $scope.myCardPreviewSelectedTab = 0; //Toggles between Card/Couvert Preview -Tabs\r\n\r\n $scope.arePreviewImagesReady = function () {\r\n return ($scope.cardPreviewImageUrl != '' && $scope.envelopePreviewImageUrl != '');\r\n }\r\n\r\n $scope.openCardPreviewFullsize = function () {\r\n window.open('/' + $scope.cardPreviewImageUrl);\r\n }\r\n\r\n $scope.openEnvelopePreviewFullsize = function () {\r\n window.open('/' + $scope.envelopePreviewImageUrl);\r\n }\r\n\r\n $scope.activeMyCardPreviewTab = function (id) {\r\n if ($scope.myCardPreviewSelectedTab == id) {\r\n return 'chosenMyCardTab';\r\n }\r\n }\r\n $scope.isMyCardPreviewTabSelected = function (id) {\r\n return ($scope.myCardPreviewSelectedTab == id)\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Ex cardSetupController\r\n $scope.myCardSelectedTab = 0; //Toggles between Card/Couvert-Tabs\r\n $scope.fontPickerActive = false;\r\n\r\n $scope.isMyCardSelected = function () {\r\n return ($scope.cardType == 'MyCard');\r\n }\r\n\r\n $scope.activeTemplateClass = function (id) {\r\n if ($scope.myCardSetup.card.templateID == id) {\r\n return 'chosenCardTemplate';\r\n }\r\n }\r\n\r\n $scope.activeEnvelopeTemplateClass = function (id) {\r\n if ($scope.myCardSetup.envelope.templateID == id) {\r\n return 'chosenCardTemplate';\r\n }\r\n }\r\n\r\n $scope.activeMyCardTab = function (id) {\r\n if ($scope.myCardSelectedTab == id) {\r\n return 'chosenMyCardTab';\r\n }\r\n }\r\n\r\n $scope.activeCardFontClass = function (id) {\r\n if ($scope.myCardSetup.card.fontID == id) {\r\n return 'active';\r\n }\r\n }\r\n\r\n $scope.activeEnvelopeFontClass = function (id) {\r\n if ($scope.myCardSetup.envelope.fontID == id) {\r\n return 'active';\r\n }\r\n }\r\n\r\n $scope.isMyCardTabSelected = function (id) {\r\n return ($scope.myCardSelectedTab == id)\r\n }\r\n\r\n $scope.copySettingsFromCardToEvenlope = function () {\r\n $scope.myCardSetup.envelope.templateID = $scope.myCardSetup.card.templateID;\r\n $scope.myCardSetup.envelope.colorCode = $scope.myCardSetup.card.colorCode;\r\n $scope.myCardSetup.envelope.fontID = $scope.myCardSetup.card.fontID;\r\n }\r\n\r\n $scope.getCardPreviewImageUrl = function () {\r\n return $scope.cardPreviewImageUrl;\r\n };\r\n\r\n $scope.preview = function () {\r\n $('.cardConfigButtons .loader').show();\r\n $scope.createPreview(parent, function () {\r\n $timeout(function () {\r\n $('#btnMyCardShowPreview .loader').hide();\r\n $('#btnMyCardShowPreview').removeClass('btn-yellow').addClass('btn-yellow-outline');\r\n\r\n $(\"#imgPreviewCard\").attr(\"src\", dynamicData.page.virtualRoot + $scope.cardPreviewImageUrl + \"?h=320\");\r\n $(\"#imgPreviewEnvelope\").attr(\"src\", dynamicData.page.virtualRoot + $scope.envelopePreviewImageUrl + \"?h=320\");\r\n $('#divMyCardPreview').show();\r\n var modal = $(\"#divMyCardCard\").closest('.modal-body');\r\n modal.animate({ scrollTop: 2000 }, 'slow'); \r\n }, 2000);\r\n });\r\n }\r\n\r\n $scope.submit = function () {\r\n $scope.updateCardInBasket(function () {\r\n $scope.didSubmitMyCard = true;\r\n $('#my-card-popup').modal('hide');\r\n });\r\n\r\n //later: could show preview also in orderform\r\n //$(\"#divMyCardFormPreview\").html($(\"#divMyCardResults\").html());\r\n }\r\n $scope.closeFontSelector2 = function () {\r\n $(\"#divMyCardEnvFontPicker\").hide().removeClass(\"active\");\r\n $(\".openDropdownMenu[data-id='divMyCardEnvFontPicker']\").removeClass('active');\r\n }\r\n $scope.$on('colorpicker-shown', function (event, colorObject) {\r\n if (colorObject.name.indexOf('envelope') == -1)\r\n $(\"#cardTextFontColor a span\").removeClass(\"icon-arrow-down\").addClass(\"icon-arrow-up\");\r\n else\r\n $(\"#envelopeTextFontColor a span\").removeClass(\"icon-arrow-down\").addClass(\"icon-arrow-up\");\r\n });\r\n $scope.$on('colorpicker-closed', function (event, colorObject) {\r\n if (colorObject.name.indexOf('envelope') == -1)\r\n $(\"#cardTextFontColor a span\").removeClass(\"icon-arrow-up\").addClass(\"icon-arrow-down\");\r\n else\r\n $(\"#envelopeTextFontColor a span\").removeClass(\"icon-arrow-up\").addClass(\"icon-arrow-down\");\r\n });\r\n\r\n //MyCard Image upload\r\n //-----------------------------------------------------\r\n $scope.$watch('files', function () {\r\n $scope.upload($scope.files);\r\n });\r\n\r\n $scope.upload = function (files) {\r\n if (files && files.length) {\r\n for (var i = 0; i < files.length; i++) {\r\n var file = files[i];\r\n Upload.upload({\r\n url: dynamicData.page.virtualRoot + 'Handlers/UploadHandler.ashx',\r\n file: file\r\n }).progress(function (evt) {\r\n var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);\r\n $scope.log = 'progress: ' + progressPercentage + '% ' +\r\n evt.config.file.name + '\\n' + $scope.log;\r\n }).success(function (data, status, headers, config) {\r\n $scope.log = 'file ' + config.file.name + 'uploaded. Response: ' + JSON.stringify(data) + '\\n' + $scope.log;\r\n //Das hochgeladene Bild.\r\n $scope.customImageFileName = data;\r\n });\r\n }\r\n }\r\n };\r\n //-----------------------------------------------------\r\n //#endregion\r\n //------------------------------------------------------------------------------------------------\r\n //#endregion\r\n\r\n //#region Basket features\r\n //------------------------------------------------------------------------------------------------\r\n var initialLoad = true;\r\n $scope.basket = new Basket();\r\n $scope.basket.deliveryTypeId = 1;\r\n $scope.basket.Items = [];\r\n\r\n function basketFeaturesReady() {\r\n $scope.getBasketItemsFromSession();\r\n }\r\n \r\n $scope.getBasketItemsFromSession = function () {\r\n FleuropWebShop.BasketService.LoadBasket($scope.getOrderForm(), processBasketResult);\r\n }\r\n\r\n $scope.getOrderForm = function () {\r\n return $(\"input[id$=hiddenOrderForm]\").val();\r\n }\r\n $scope.setOrderForm = function (result) {\r\n $(\"input[id$=hiddenOrderForm]\").val(result);\r\n }\r\n\r\n $scope.processBasketResult = processBasketResult;\r\n function processBasketResult(result) {\r\n $scope.setOrderForm(result.OrderForm);\r\n //Show notifications\r\n result.Notifications.forEach(function (notif) {\r\n toastr.success(notif.Message, notif.Title);\r\n });\r\n\r\n //Update basket items\r\n $scope.basket.Items = jQuery.extend(true, [], result.BasketItems); //result.BasketItems;\r\n //.Items need to be cloned when set from child window, because of some browsers (IE) clear objects on closing window.\r\n\r\n //If no greetingcard is selected, then basket should remove the neutral card.\r\n if ($scope.noGreetingCard) {\r\n $scope.basket.Items = $scope.basket.Items.filter(function (value, index, arr) {\r\n return value.Reference != dynamicData.modeSettings.productItemNeutralCardID;\r\n });\r\n }\r\n\r\n $scope.basket.deliveryTypeId = result.DeliveryTypeId; \r\n if (initialLoad) {\r\n $scope.cardData.noCardText = result.NoGreetingCard;\r\n }\r\n if ($scope.basket.TotalPrice() < 1)\r\n disableCCMethods();\r\n else if ($scope.basket.deliveryTypeId == dynamicData.enums.enmDeliveryType.Download) {\r\n // to be uncommented for live \r\n //disableInvoiceMethods();\r\n }\r\n\r\n $scope.$apply();\r\n initialLoad = false;\r\n }\r\n\r\n $scope.activeAddonClass = function (id) {\r\n if ($scope.hasAddonProduct(id)) {\r\n return 'active';\r\n }\r\n } \r\n \r\n $scope.hasAddonProduct = function (id) {\r\n var result = false; \r\n \r\n $scope.basket.Items.forEach(function (item) {\r\n if (item.Reference == id) {\r\n result = true; \r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n $scope.toggleAddonProduct = function (id) {\r\n var deliveryMessageProductIds = [64611, 88915]\r\n if ($.inArray(id, deliveryMessageProductIds) !== -1) {\r\n alert(dynamicData.textRepository.addonDeliveryMessageAustria);\r\n }\r\n\r\n FleuropWebShop.BasketService.ToggleAddonProduct(id, $scope.getOrderForm(), processBasketResult);\r\n \r\n var addonQuantityTextbox = $(`#txtAddonQuantity_${id}`);\r\n resetTextboxToQuantityOneIfNecessary(addonQuantityTextbox);\r\n }\r\n\r\n $scope.setProductQuantity = function (id, quantity) { \r\n FleuropWebShop.BasketService.SetProductQuantity(id, quantity, $scope.getOrderForm(), processBasketResult);\r\n }\r\n\r\n $scope.isAlcoholInBasket = function () {\r\n var result = false;\r\n\r\n $scope.basket.Items.forEach(function (item) {\r\n if (item.IsAlcohol == true) {\r\n result = true;\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n $scope.SetMainProductPriceAndAttribute = function (price, attributeId) {\r\n FleuropWebShop.BasketService.SetMainProductPriceAndAttribute(price, attributeId, $scope.getOrderForm(), processBasketResult);\r\n }\r\n\r\n function resetTextboxToQuantityOneIfNecessary(addonQuantityTextbox) {\r\n //Reset if removed by quantity 0\r\n if (addonQuantityTextbox.val() == '0') {\r\n //It takes a moment until addon is hidden, so resetting to one after it's completly invisible\r\n setTimeout(function () {\r\n addonQuantityTextbox.val('1');\r\n }, 2000);\r\n }\r\n }\r\n //------------------------------------------------------------------------------------------------\r\n //#endregion\r\n\r\n //#region Payment features\r\n //------------------------------------------------------------------------------------------------ \r\n $scope.paymentType = '';\r\n\r\n $scope.setPaymentType = function(paymentType) {\r\n $scope.paymentType = paymentType;\r\n $scope.$apply();\r\n FleuropWebShop.BasketService.ToggleInvoiceServiceCharge($scope.paymentType, $scope.getOrderForm(), processBasketResult);\r\n }\r\n\r\n $scope.isPaymentTypeInvoice = function () {\r\n var result = false;\r\n switch ($scope.paymentType) {\r\n case '1': case '5':\r\n result = true;\r\n break;\r\n }\r\n return result;\r\n }\r\n\r\n $scope.isPaymentTypeCreditcard = function () {\r\n return !$scope.isPaymentTypeInvoice();\r\n }\r\n\r\n $scope.checkPaymentLimit = function () {\r\n var result = true; \r\n if ($scope.isPaymentTypeInvoice()) {\r\n if (dynamicData.modeSettings.isB2C) {\r\n if ($scope.isOrderFromShopCountry()) {\r\n if ($scope.basket.TotalPrice() > dynamicData.modeSettings.paymentLimit) {\r\n showInfoPaymentLimitReached();\r\n result = false;\r\n }\r\n } else {\r\n showInfoInvoiceForForeignNotAllowed();\r\n result = false;\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n //------------------------------------------------------------------------------------------------ \r\n //#endregion\r\n\r\n //#region Country features\r\n //------------------------------------------------------------------------------------------------ \r\n $scope.isOrderFromShopCountry = function () {\r\n var result = false;\r\n\r\n if (profile.senderAddress != null) {\r\n for (var i = 0; i < dynamicData.modeSettings.shopCountryRegNumbers.length; i++) {\r\n if (dynamicData.modeSettings.shopCountryRegNumbers[i] == profile.senderAddress.CountryRegNr) {\r\n result = true;\r\n }\r\n }\r\n }\r\n\r\n return result; \r\n }\r\n //------------------------------------------------------------------------------------------------ \r\n //#endregion\r\n\r\n //#region Time Delivery features\r\n //------------------------------------------------------------------------------------------------\r\n $scope.TDEnable = false;\r\n $scope.TDSelected = false;\r\n\r\n $scope.$watch('TDSelected', function (newValue, oldValue) {\r\n if (newValue != oldValue)\r\n FleuropWebShop.BasketService.ToggleTimeDeliveryServiceCharge($scope.getOrderForm(), processBasketResult);\r\n });\r\n\r\n $scope.hideTD = function () {\r\n $scope.TDEnable = false;\r\n $scope.TDSelected = false;\r\n $scope.$apply();\r\n }\r\n //------------------------------------------------------------------------------------------------\r\n //#endregion\r\n \r\n //#region MyFleurop Points features\r\n //------------------------------------------------------------------------------------------------ \r\n $scope.pointsMinimum = 0;\r\n $scope.pointsRate = 0.0;\r\n $scope.pointsMyTotal = 0.0; \r\n $scope.pointsToRedeem = 0;\r\n\r\n $scope.pointsOrderTotalCHF = function () {\r\n return $scope.basket.TotalPriceWithoutPoints();\r\n }\r\n\r\n $scope.pointsOrderTotal = function() {\r\n return Math.round($scope.pointsOrderTotalCHF() / $scope.pointsRate);\r\n }\r\n\r\n $scope.hasEnoughPoints = function () {\r\n return ($scope.pointsMyTotal >= $scope.pointsMinimum);\r\n }\r\n\r\n $scope.showMyFleuropPayment = function () {\r\n return (dynamicData.modeSettings.isB2C && profile.isLoggedIn);\r\n }\r\n\r\n $scope.checkPoints = function (field, rules, i, options) {\r\n if (field.val() < $scope.pointsMinimum)\r\n return options.allrules.min.alertText + $scope.pointsMinimum;\r\n var ordTotal = $scope.pointsOrderTotal();\r\n var myTotal = $scope.pointsMyTotal;\r\n if (ordTotal > 0 && ordTotal < myTotal && field.val() > ordTotal)\r\n return options.allrules.max.alertText +ordTotal;\r\n if (ordTotal > 0 && ordTotal > myTotal && field.val() > myTotal)\r\n return options.allrules.max.alertText +myTotal;\r\n }\r\n\r\n $scope.addPointsPayment = function () {\r\n var redeemPoints = Math.round($scope.pointsToRedeem);\r\n var redeemPrice = parseFloat((- 1 * redeemPoints * $scope.pointsRate).toFixed(2));\r\n\r\n if (redeemPoints > 0) {\r\n FleuropWebShop.BasketService.AddMyFleuropPayment(redeemPrice, redeemPoints, $scope.getOrderForm(), function (result) {\r\n processBasketResult(result);\r\n toastr.success(dynamicData.textRepository.myFleuropPointsSuccess, dynamicData.textRepository.myFleuropPointsTitle);\r\n })\r\n }\r\n }\r\n //------------------------------------------------------------------------------------------------*/\r\n //#endregion\r\n\r\n //#region Express features\r\n //------------------------------------------------------------------------------------------------ \r\n $scope.expressAvailable = false;\r\n $scope.expressGuaranteedDeliveryTime = undefined;\r\n\r\n $scope.checkExpressAvailability = function () {\r\n var regNr = $('#hiddenRecipientZipTownRegNr').val();\r\n\r\n FleuropWebShop.FloristService.GetExpressDetails(regNr, function (result) {\r\n $scope.expressAvailable = result.ExpressAvailable;\r\n $scope.expressGuaranteedDeliveryTime = result.GuaranteedDeliveryTime;\r\n $scope.$apply();\r\n });\r\n }\r\n //------------------------------------------------------------------------------------------------*/\r\n //#endregion\r\n\r\n //#region Florist search features\r\n //------------------------------------------------------------------------------------------------ \r\n $scope.floristList = [];\r\n\r\n $scope.setFloristList = function(list) {\r\n $scope.floristList = list;\r\n $scope.$apply();\r\n }\r\n //------------------------------------------------------------------------------------------------ \r\n //#endregion\r\n\r\n $scope.refresh = function() {\r\n $scope.$apply();\r\n }\r\n}]);","import { fetchOnce, fetchRetry } from '../modules/fetch';\r\n\r\nexport class DeliveryTimeService {\r\n\r\n static async checkDateAndDateDiscounts(deliveryDate, regNr) {\r\n var fetchUrl = `${dynamicData.page.virtualRoot}api/deliverytime/check-date-and-discounts?` +\r\n `deliveryDate=${deliveryDate}®Nr=${regNr}`;\r\n let response;\r\n\r\n try {\r\n //Try to call 10 times, with intervals of 0.5, 1, 2, 4, 8, 8, 8, ...\r\n response = await fetchRetry(fetchUrl, undefined, 10, 0.5, 8);\r\n } catch (err) {\r\n //If no success after 10 calls, inform and hard reload site... \r\n alert('Connectivity problem, reloading site...');\r\n location.reload();\r\n return null;\r\n }\r\n\r\n return response.json(); \r\n }\r\n\r\n static async checkDateParcelShipping(deliveryDate) {\r\n var fetchUrl = `${dynamicData.page.virtualRoot}api/deliverytime/check-date-parcel-shipping?` +\r\n `deliveryDate=${deliveryDate}`;\r\n let response = await fetchOnce(fetchUrl);\r\n\r\n return response.json();\r\n }\r\n\r\n static async getDeliveryDateString() {\r\n var fetchUrl = `${dynamicData.page.virtualRoot}api/deliverytime/get-delivery-date-string`;\r\n let response = await fetchOnce(fetchUrl);\r\n\r\n return response.json();\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n","export class Basket { \r\n\r\n constructor() {\r\n this.Sender = {\r\n Name: ''\r\n }\r\n this.Recipient = {\r\n Name: ''\r\n } \r\n this.Items = [] \r\n }\r\n\r\n TotalPrice() {\r\n var total = 0;\r\n \r\n for (var i = 0; i < this.Items.length; i++) {\r\n total = total + this.Items[i].PriceSubtotal;\r\n }\r\n \r\n return total;\r\n }\r\n\r\n TotalPriceWithoutPoints() {\r\n var total = 0;\r\n\r\n for (var i = 0; i < this.Items.length; i++) {\r\n if (this.Items[i].ProductGroup != 1102)\r\n total = total + this.Items[i].PriceSubtotal;\r\n }\r\n \r\n return total;\r\n }\r\n\r\n AddUpdateItem(item) {\r\n // For all Addons\r\n // Cards: Existing Item will be deleted and a new one will be added, except the neutral card (cost-free)\r\n // All other Addons: If item exists, it will be deleted. If not, a new item will be created\r\n if (!(this.UpdateItem(item.Reference, item.ProductGroup, item.Price, item.PricePoints, item.Description) == true)) {\r\n // item wird gelöscht \r\n if (!(item.Reference == '2')) {\r\n //Keine neue neutrale Karte\r\n this.Items.push(item);\r\n }\r\n this.Items.sort(this.SortItemsByProductGroup);\r\n return true;\r\n } else {\r\n this.Items.sort(this.SortItemsByProductGroup);\r\n return false;\r\n }\r\n }\r\n\r\n SortItemsByProductGroup(a, b) { return a.ProductGroup - b.ProductGroup; }\r\n\r\n UpdateItem(reference, productGroup, price, pricePoints, description) {\r\n for (var i = 0; i < this.Items.length; i++) {\r\n if (productGroup == this.Items[i].ProductGroup) {\r\n switch (productGroup) {\r\n case 100: case 110:\r\n //Flower: only change productprice\r\n this.Items[i].Price = price;\r\n if (description != '') {\r\n this.Items[i].Description = description;\r\n }\r\n return true;\r\n break;\r\n case 200:\r\n //Card: delete item\r\n this.Items.splice(i, 1);\r\n return false;\r\n break;\r\n case 1102:\r\n //MyFleurop: only change productprice and pointsprice\r\n this.Items[i].Price = price;\r\n this.Items[i].PricePoints = pricePoints;\r\n return true;\r\n break;\r\n case 1500:\r\n //Service charge\r\n this.Items[i].Description = description;\r\n this.Items[i].Price = price;\r\n return true;\r\n break;\r\n default:\r\n if (reference == this.Items[i].Reference) {\r\n // all other Addons: delete item\r\n this.Items.splice(i, 1);\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n}","export class Profile { \r\n\r\n constructor() {\r\n this.isLoggedIn = false\r\n this.addressListItems = []\r\n this.addressListItemsInvoice = []\r\n this.senderAddress = { CountryRegNr: dynamicData.session.shopCountryRegNr }\r\n this.recipientAddressID = 0 \r\n } \r\n\r\n getLoginState() { \r\n FleuropWebShop.ProfileService.GetLoginState((result) => {\r\n this.isLoggedIn = result.IsLoggedIn; \r\n if (this.isLoggedIn) {\r\n this.senderAddress = result.SenderAddress; \r\n if (result.SenderAddress != null) {\r\n $('#ddlSenderCountry').val(result.SenderAddress.CountryRegNr).select2().trigger('change');\r\n }\r\n\r\n //Set points\r\n if (dynamicData.modeSettings.isB2C) {\r\n angularOrderFormController.pointsMinimum = result.PointsInformation.PointsMinimum;\r\n angularOrderFormController.pointsRate = result.PointsInformation.PointsRate;\r\n angularOrderFormController.pointsMyTotal = result.PointsInformation.PointsMyTotal;\r\n angularOrderFormController.pointsToRedeem = result.PointsInformation.PointsMyTotal;\r\n }\r\n\r\n //Show notifications\r\n result.Notifications.forEach(function (notif) {\r\n toastr.success(notif.Message, notif.Title);\r\n });\r\n\r\n // google data layer \r\n if (result.DataLayer.length > 2) {\r\n dataLayer.push(jQuery.parseJSON(result.DataLayer.replace(/'/g, \"\\\"\")));\r\n }\r\n } else {\r\n //If not logged in: Sender address will be restored from basket or initialized from basket\r\n this.senderAddress = result.SenderAddress; \r\n if (result.SenderAddress != null) {\r\n $('#ddlSenderCountry').val(result.SenderAddress.CountryRegNr).select2().trigger('change');\r\n }\r\n //angularOrderFormController.senderAddress = { CountryRegNr: '101' }; \r\n }\r\n angularOrderFormController.refresh();\r\n })\r\n }\r\n\r\n getAddressTitle(address) {\r\n var result = address.vorname + ' ' + address.name;\r\n result = result.trim();\r\n if (address.co.trim() != '')\r\n result = result + ', c/o ' + address.co;\r\n if (address.company.trim() != '')\r\n result = result + ', Firma: ' + address.company;\r\n return result;\r\n }\r\n\r\n getSenderAddressTitle(address) {\r\n var result = address.Vorname + ' ' + address.Name;\r\n result = result.trim();\r\n if (address.C_o.trim() != '')\r\n result = result + ', c/o ' + address.C_o;\r\n if (address.Firma1.trim() != '')\r\n result = result + ', Firma: ' + address.Firma1;\r\n return result;\r\n }\r\n\r\n}","import { fetchOnce, fetchRetry } from '../modules/fetch';\r\n\r\nexport class LoggingService {\r\n\r\n static async logOrderformVisit(url, sessionCookiesSupported) { \r\n let requestData = {\r\n url: url,\r\n sessionCookiesSupported: sessionCookiesSupported\r\n };\r\n\r\n let response = await fetchOnce(`${dynamicData.page.virtualRoot}api/logging/log-orderform-visit`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(requestData)\r\n });\r\n }\r\n\r\n}","import imagesLoaded from 'imagesloaded';\r\n\r\nexport function initializeProductMedia() {\r\n\r\n imagesLoaded.makeJQueryPlugin($); \r\n\r\n // Product page vertical image thumbs & photo gallery\r\n $('.product-media').imagesLoaded().always( function() {\r\n var visibleThumbs = 0;\r\n var thumbDividerSpace = 0;\r\n var verticalThumbs = 0;\r\n var thumbHeight = 0;\r\n var thumbsTotalHeight = 0;\r\n var popupBody = null; \r\n\r\n if($('.media-vertical-thumbs li')) { \r\n\r\n $('.media-vertical-thumbs li').on('click',function(e){ \r\n e.preventDefault();\r\n \r\n var mainImageArea = $('.media-main-image #main-image');\r\n var itemSource = $(this).find('img').attr('data-source');\r\n var itemPosition = $(this).find('img').attr('data-position');\r\n var mainItemPosition = mainImageArea.find('.item:not(.item-hidden)').attr('data-position');\r\n var gtmLabel = $(this).find('img').attr('gtm-label');\r\n \r\n if(itemPosition == 1) {\r\n $('.media-main-image .remark-text').hide();\r\n } else {\r\n $('.media-main-image .remark-text').show();\r\n }\r\n\r\n if(itemPosition != mainItemPosition) {\r\n $('.media-vertical-thumbs li').removeClass('active');\r\n $(this).addClass('active');\r\n \r\n if($(this).hasClass('video')) {\r\n mainImageArea.find('.item').addClass('item-hidden').find('img').css({\r\n 'height': '0',\r\n 'display': 'block'\r\n });\r\n mainImageArea.find('.video-container').parents('.item').remove();\r\n mainImageArea.append(itemSource).find('.video-container').wrap('<span class=\"item\" data-position='+ itemPosition +'></span>');\r\n } else {\r\n mainImageArea.find('.video-container').parents('.item').remove();\r\n mainImageArea.find('img').parents('.item')\r\n .fadeOut(0, function() {\r\n mainImageArea.find('img').attr({\r\n 'src': itemSource,\r\n 'data-source': itemSource,\r\n 'gtm-label': gtmLabel\r\n }).parents('.item').attr({\r\n 'data-position': itemPosition\r\n });\r\n })\r\n .fadeIn(200);\r\n mainImageArea.find('.item').removeClass('item-hidden').find('img').css({\r\n 'height': '',\r\n 'display': ''\r\n });\r\n }\r\n }\r\n });\r\n \r\n enquire.register('screen and (max-width: 575px)', function() {\r\n visibleThumbs = 3;\r\n thumbDividerSpace = 7;\r\n });\r\n enquire.register('screen and (min-width: 576px)', function() {\r\n visibleThumbs = 4;\r\n thumbDividerSpace = 10;\r\n });\r\n\r\n var thumbsContainer = $('.thumbs-container').offset().top;\r\n var thumbsContent = $('.thumbs-content').offset().top;\r\n\r\n if($('.media-vertical-thumbs li').length > visibleThumbs) {\r\n verticalThumbs = $('.media-vertical-thumbs');\r\n thumbHeight = verticalThumbs.find('.thumbs-content li').outerHeight(true);\r\n thumbsTotalHeight = verticalThumbs.find('.thumbs-content').outerHeight(true) + thumbDividerSpace;\r\n \r\n $(window).resize(function() {\r\n thumbHeight = verticalThumbs.find('.thumbs-content li').outerHeight(true);\r\n thumbsTotalHeight = verticalThumbs.find('.thumbs-content').outerHeight(true) + thumbDividerSpace;\r\n setArrows(); \r\n });\r\n \r\n verticalThumbs.append('<span class=\"prev\"></span> <span class=\"next\"></span>');\r\n\r\n verticalThumbs.find('.next').on('click',function() {\r\n $(window).resize(function() {\r\n thumbsContainer = $('.thumbs-container').offset().top;\r\n });\r\n\r\n thumbsContent = $('.thumbs-content').offset().top; \r\n\r\n $('.thumbs-container').animate({\r\n scrollTop: thumbsContainer - thumbsContent + thumbHeight + thumbDividerSpace\r\n }, 500); \r\n });\r\n \r\n verticalThumbs.find('.prev').on('click',function() {\r\n $(window).resize(function() {\r\n thumbsContainer = $('.thumbs-container').offset().top;\r\n });\r\n\r\n thumbsContent = $('.thumbs-content').offset().top;\r\n\r\n $('.thumbs-container').animate({\r\n scrollTop: thumbsContainer - thumbsContent - thumbHeight - thumbDividerSpace\r\n }, 500);\r\n });\r\n\r\n verticalThumbs.find('.thumbs-container').on('scroll', function() {\r\n thumbsContent = $('.thumbs-content').offset().top;\r\n setArrows();\r\n });\r\n\r\n function setArrows(){\r\n verticalThumbs.find('.prev').show();\r\n verticalThumbs.find('.next').show();\r\n\r\n if(thumbsContainer - thumbsContent <= 0) {\r\n verticalThumbs.find('.prev').hide();\r\n }\r\n\r\n if((thumbsContainer - thumbsContent + (thumbHeight*visibleThumbs)) >= thumbsTotalHeight) {\r\n verticalThumbs.find('.next').hide();\r\n } \r\n }\r\n } \r\n \r\n\r\n $('#image-zoom-popup').on('shown.bs.modal', function() {\r\n popupBody = $('#image-zoom-popup .modal-body');\r\n \r\n var mainItemPosition = $('.media-main-image #main-image .item:not(.item-hidden)').attr('data-position');\r\n \r\n $('.media-vertical-thumbs .thumbs-content img').each(function() {\r\n var itemSource = $(this).attr('data-source'); \r\n var itemSourceImageZoom = $(this).attr('data-imageZoom');\r\n var itemPosition = $(this).attr('data-position');\r\n\r\n if($(this).parents('li').hasClass('video')) {\r\n popupBody.append('<span class=\"item\" data-position=\"'+ itemPosition +'\">' + itemSource + '</span>');\r\n } else {\r\n popupBody.append('<span class=\"item\" data-position=\"'+ itemPosition +'\"><img src=\"'+ itemSourceImageZoom +'\" alt=\"\"/></span>');\r\n }\r\n });\r\n\r\n popupBody.imagesLoaded().always(function() {\r\n var ZoomPopupTop = $('#image-zoom-popup').offset().top;\r\n var selectorTop = $('#image-zoom-popup .modal-body .item[data-position=\"'+ mainItemPosition +'\"]').offset().top;\r\n\r\n $('#image-zoom-popup').animate({\r\n scrollTop: selectorTop - ZoomPopupTop - thumbDividerSpace\r\n }, 750); \r\n })\r\n\r\n });\r\n\r\n $('#image-zoom-popup').on('hide.bs.modal', function() {\r\n if (popupBody)\r\n popupBody.empty();\r\n });\r\n \r\n }\r\n });\r\n\r\n $('.media-main-image, .media-main-image.image-zoom').on('click', function() {\r\n $('#image-zoom-popup').modal('show');\r\n })\r\n} \r\n\r\n","/* Serge: Updated to 3.0.6\r\n * - New bug with FroalaEditor initialized on an image: it hangs on uploading new image (JS error)\r\n * froala_editor.pkgd.min.js switched back to 3.0.5\r\n * \r\n * Martin input @ 12.8.20\r\n * Our licence should allow updates until 3.2.0 because that version was out when our 1 year period came to an end (August 2020).\r\n */\r\n\r\nexport var froalaScriptBundle = [\r\n `${dynamicData.page.virtualRoot}media/dist/css/froala.css`,\r\n `${dynamicData.page.virtualRoot}media/dist/js/vendor-script-froala.js`\r\n]\r\n\r\nif (dynamicData.session.languageCode2Digit != 'en')\r\n froalaScriptBundle.push(`${dynamicData.page.virtualRoot}media/dist/lib/froala/languages/${dynamicData.session.languageCode2Digit}.js`);","var nextStep = '#related-products';\r\n\r\nexport function configureOrderFormAssistant() {\r\n $('#btnNextStep').click(function () {\r\n prepareOrderFormAssistant();\r\n });\r\n}\r\n\r\nfunction prepareOrderFormAssistant() {\r\n if (nextStep == '#checkout-options' && $('.btn-gray-options.pickup.selected').length != 0) {\r\n nextStep = '#checkout-subtotal';\r\n }\r\n\r\n if (nextStep == '#related-products' && dynamicData.page.isSwissAustrianOrder == false) {\r\n nextStep = '#product-card-text';\r\n }\r\n\r\n $('.product-section' + nextStep).css('display', 'block');\r\n\r\n if ($('.hideMenuBar').length == 0) {\r\n $('html, body').animate({scrollTop: $(nextStep).offset().top -120}, 750);\r\n }\r\n else {\r\n $('html, body').animate({scrollTop: $(nextStep).offset().top -50}, 750);\r\n }\r\n\r\n getNextStep(nextStep);\r\n\r\n while ($('.product-section' + nextStep).length != 1) {\r\n getNextStep(nextStep);\r\n }\r\n}\r\n\r\nfunction getNextStep() {\r\n if (dynamicData.page.isSwissAustrianOrder == true) {\r\n switch (nextStep) {\r\n case '#related-products':\r\n nextStep = '#product-card';\r\n break;\r\n case '#product-card':\r\n if (dynamicData.session.noGreetingCardByDefault == false) {\r\n $('.product-section' + '#product-card-text').css('display', 'block');\r\n }\r\n nextStep = '#checkout-client-info';\r\n break;\r\n case '#checkout-client-info':\r\n nextStep = '#checkout-shipping';\r\n break;\r\n case '#checkout-shipping':\r\n nextStep = '#checkout-options';\r\n break;\r\n case '#checkout-options':\r\n nextStep = '#checkout-subtotal';\r\n break;\r\n case '#checkout-subtotal':\r\n nextStep = '#divCheckoutPayment';\r\n $('.order-form-assistant').css('display', 'none');\r\n $('.product-section' + nextStep).css('display', 'block');\r\n break;\r\n }\r\n }\r\n else {\r\n switch (nextStep) {\r\n case '#product-card-text':\r\n nextStep = '#checkout-client-info';\r\n break;\r\n case '#checkout-client-info':\r\n nextStep = '#checkout-shipping';\r\n break;\r\n case '#checkout-shipping':\r\n nextStep = '#checkout-options';\r\n break;\r\n case '#checkout-options':\r\n nextStep = '#checkout-subtotal';\r\n break;\r\n case '#checkout-subtotal':\r\n nextStep = '#divCheckoutPayment';\r\n $('.order-form-assistant').css('display', 'none');\r\n $('.product-section' + nextStep).css('display', 'block');\r\n break;\r\n }\r\n }\r\n}"],"sourceRoot":""}