{"version":3,"file":"supplement.4d09adb4552b67b73a1c.js","mappings":"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","sources":["webpack://front-end-build-system/./jsscripts/jquery/knockout/knockout.mapping.js","webpack://front-end-build-system/./src/dom/elementintersectionobserver.js","webpack://front-end-build-system/./src/dom/waitforelement.js","webpack://front-end-build-system/./src/lazyloadimages.js","webpack://front-end-build-system/./src/shared/breakpoints.js","webpack://front-end-build-system/./src/utils/array.js","webpack://front-end-build-system/./src/utils/debounce.js","webpack://front-end-build-system/./src/utils/object.js","webpack://front-end-build-system/./src/utils/whenvaluechanges.js","webpack://front-end-build-system/./src/vendor/dynamicyield/dynamicyield.js","webpack://front-end-build-system/./src/vendor/googletagmanager/events.js","webpack://front-end-build-system/./src/views/productclasspage/shared/etamessaging.js","webpack://front-end-build-system/./src/views/productclasspage/shared/hidebvqabutton.js","webpack://front-end-build-system/./src/utils/waitfor.js","webpack://front-end-build-system/./src/views/productclasspage/shared/lazybvshow.js","webpack://front-end-build-system/./src/views/productclasspage/shared/ordercontrolrestrictions.js","webpack://front-end-build-system/./src/views/productclasspage/shared/selectproductfromurl.js","webpack://front-end-build-system/./src/kohandlers/writeonlyvalue.js","webpack://front-end-build-system/./src/views/productclasspage/supplement/viewmodels/productviewmodel.js","webpack://front-end-build-system/./src/views/productclasspage/supplement/viewmodels/supplementviewmodel.js","webpack://front-end-build-system/./src/views/productclasspage/supplement/imagemanager.js","webpack://front-end-build-system/./src/views/productclasspage/supplement/supplement.js","webpack://front-end-build-system/./src/views/productclasspage/supplement/ordercontrolrestrictions.js","webpack://front-end-build-system/./src/views/productclasspage/viewmodels/imageviewmodel.js","webpack://front-end-build-system/./src/views/productclasspage/viewmodels/videoviewmodel.js","webpack://front-end-build-system/./src/views/productclasspage/viewmodels/productclassviewmodel.js","webpack://front-end-build-system/./src/views/productclasspage/shared/productclassmessaging.js","webpack://front-end-build-system/./src/views/productclasspage/viewmodels/productviewmodel.js","webpack://front-end-build-system/external var \"jQuery\"","webpack://front-end-build-system/external var \"ko\""],"sourcesContent":["// Google Closure Compiler helpers (used only to make the minified file smaller)\r\nko.exportSymbol = function(publicPath, object) {\r\n var tokens = publicPath.split(\".\");\r\n var target = window;\r\n for (var i = 0; i < tokens.length - 1; i++)\r\n target = target[tokens[i]];\r\n target[tokens[tokens.length - 1]] = object;\r\n};\r\nko.exportProperty = function(owner, publicName, object) {\r\n owner[publicName] = object;\r\n};\r\n\r\n(function() {\r\n ko.mapping = {};\r\n\r\n var mappingProperty = \"__ko_mapping__\";\r\n var realKoDependentObservable = ko.dependentObservable;\r\n var mappingNesting = 0;\r\n var dependentObservables;\r\n var visitedObjects;\r\n\r\n var _defaultOptions = {\r\n include: [\"_destroy\"],\r\n ignore: [],\r\n copy: []\r\n };\r\n var defaultOptions = _defaultOptions;\r\n\r\n function extendObject(destination, source) {\r\n for (var key in source) {\r\n if (source.hasOwnProperty(key) && source[key]) {\r\n if (destination[key] && !(destination[key] instanceof Array)) {\r\n extendObject(destination[key], source[key]);\r\n } else {\r\n destination[key] = source[key];\r\n }\r\n }\r\n }\r\n }\r\n\r\n function merge(obj1, obj2) {\r\n var merged = {};\r\n extendObject(merged, obj1);\r\n extendObject(merged, obj2);\r\n\r\n return merged;\r\n }\r\n\r\n ko.mapping.isMapped = function(viewModel) {\r\n var unwrapped = ko.utils.unwrapObservable(viewModel);\r\n return unwrapped && unwrapped[mappingProperty];\r\n };\r\n ko.mapping.fromJS = function(jsObject /*, inputOptions, target*/) {\r\n if (arguments.length == 0) throw new Error(\"When calling ko.fromJS, pass the object you want to convert.\");\r\n\r\n // When mapping is completed, even with an exception, reset the nesting level\r\n window.setTimeout(function() {\r\n mappingNesting = 0;\r\n }, 0);\r\n\r\n if (!mappingNesting++) {\r\n dependentObservables = [];\r\n visitedObjects = new objectLookup();\r\n }\r\n\r\n var options;\r\n var target;\r\n\r\n if (arguments.length == 2) {\r\n if (arguments[1][mappingProperty]) {\r\n target = arguments[1];\r\n } else {\r\n options = arguments[1];\r\n }\r\n }\r\n if (arguments.length == 3) {\r\n options = arguments[1];\r\n target = arguments[2];\r\n }\r\n\r\n if (target) {\r\n options = merge(options, target[mappingProperty]);\r\n }\r\n options = fillOptions(options);\r\n\r\n var result = updateViewModel(target, jsObject, options);\r\n if (target) {\r\n result = target;\r\n }\r\n\r\n // Evaluate any dependent observables that were proxied.\r\n // Do this in a timeout to defer execution. Basically, any user code that explicitly looks up the DO will perform the first evaluation. Otherwise,\r\n // it will be done by this code.\r\n if (!--mappingNesting) {\r\n window.setTimeout(function() {\r\n ko.utils.arrayForEach(dependentObservables, function(DO) {\r\n if (DO) DO();\r\n });\r\n }, 0);\r\n }\r\n\r\n // Save any new mapping options in the view model, so that updateFromJS can use them later.\r\n result[mappingProperty] = merge(result[mappingProperty], options);\r\n\r\n return result;\r\n };\r\n\r\n ko.mapping.fromJSON = function(jsonString /*, options, target*/) {\r\n var parsed = ko.utils.parseJson(jsonString);\r\n arguments[0] = parsed;\r\n return ko.mapping.fromJS.apply(this, arguments);\r\n };\r\n\r\n ko.mapping.updateFromJS = function(viewModel) {\r\n throw new Error(\"ko.mapping.updateFromJS, use ko.mapping.fromJS instead. Please note that the order of parameters is different!\");\r\n };\r\n\r\n ko.mapping.updateFromJSON = function(viewModel) {\r\n throw new Error(\"ko.mapping.updateFromJSON, use ko.mapping.fromJSON instead. Please note that the order of parameters is different!\");\r\n };\r\n\r\n ko.mapping.toJS = function(rootObject, options) {\r\n if (!defaultOptions) ko.mapping.resetDefaultOptions();\r\n\r\n if (arguments.length == 0) throw new Error(\"When calling ko.mapping.toJS, pass the object you want to convert.\");\r\n if (!(defaultOptions.ignore instanceof Array)) throw new Error(\"ko.mapping.defaultOptions().ignore should be an array.\");\r\n if (!(defaultOptions.include instanceof Array)) throw new Error(\"ko.mapping.defaultOptions().include should be an array.\");\r\n if (!(defaultOptions.copy instanceof Array)) throw new Error(\"ko.mapping.defaultOptions().copy should be an array.\");\r\n\r\n // Merge in the options used in fromJS\r\n options = fillOptions(options, rootObject[mappingProperty]);\r\n\r\n // We just unwrap everything at every level in the object graph\r\n return ko.mapping.visitModel(rootObject, function(x) {\r\n return ko.utils.unwrapObservable(x);\r\n }, options);\r\n };\r\n\r\n ko.mapping.toJSON = function(rootObject, options) {\r\n var plainJavaScriptObject = ko.mapping.toJS(rootObject, options);\r\n return ko.utils.stringifyJson(plainJavaScriptObject);\r\n };\r\n\r\n ko.mapping.defaultOptions = function() {\r\n if (arguments.length > 0) {\r\n defaultOptions = arguments[0];\r\n } else {\r\n return defaultOptions;\r\n }\r\n };\r\n\r\n ko.mapping.resetDefaultOptions = function() {\r\n defaultOptions = {\r\n include: _defaultOptions.include.slice(0),\r\n ignore: _defaultOptions.ignore.slice(0),\r\n copy: _defaultOptions.copy.slice(0)\r\n };\r\n };\r\n\r\n function getType(x) {\r\n if ((x) && (typeof(x) === \"object\") && (x.constructor == (new Date).constructor)) return \"date\";\r\n return typeof x;\r\n }\r\n\r\n function fillOptions(options, otherOptions) {\r\n options = options || {};\r\n\r\n // Is there only a root-level mapping present?\r\n if ((options.create instanceof Function) || (options.update instanceof Function) || (options.key instanceof Function) || (options.arrayChanged instanceof Function)) {\r\n options = {\r\n \"\": options\r\n };\r\n }\r\n\r\n if (otherOptions) {\r\n options.ignore = mergeArrays(otherOptions.ignore, options.ignore);\r\n options.include = mergeArrays(otherOptions.include, options.include);\r\n options.copy = mergeArrays(otherOptions.copy, options.copy);\r\n }\r\n options.ignore = mergeArrays(options.ignore, defaultOptions.ignore);\r\n options.include = mergeArrays(options.include, defaultOptions.include);\r\n options.copy = mergeArrays(options.copy, defaultOptions.copy);\r\n\r\n options.mappedProperties = options.mappedProperties || {};\r\n return options;\r\n }\r\n\r\n function mergeArrays(a, b) {\r\n if (!(a instanceof Array)) {\r\n if (getType(a) === \"undefined\") a = [];\r\n else a = [a];\r\n }\r\n if (!(b instanceof Array)) {\r\n if (getType(b) === \"undefined\") b = [];\r\n else b = [b];\r\n }\r\n return a.concat(b);\r\n }\r\n\r\n // When using a 'create' callback, we proxy the dependent observable so that it doesn't immediately evaluate on creation.\r\n // The reason is that the dependent observables in the user-specified callback may contain references to properties that have not been mapped yet.\r\n\r\n function withProxyDependentObservable(dependentObservables, callback) {\r\n var localDO = ko.dependentObservable;\r\n ko.dependentObservable = function(read, owner, options) {\r\n options = options || {};\r\n\r\n var realDeferEvaluation = options.deferEvaluation;\r\n\r\n if (read && typeof read == \"object\") { // mirrors condition in knockout implementation of DO's\r\n options = read;\r\n }\r\n\r\n var isRemoved = false;\r\n\r\n // We wrap the original dependent observable so that we can remove it from the 'dependentObservables' list we need to evaluate after mapping has\r\n // completed if the user already evaluated the DO themselves in the meantime.\r\n var wrap = function(DO) {\r\n var wrapped = realKoDependentObservable({\r\n read: function() {\r\n if (!isRemoved) {\r\n ko.utils.arrayRemoveItem(dependentObservables, DO);\r\n isRemoved = true;\r\n }\r\n return DO.apply(DO, arguments);\r\n },\r\n write: function(val) {\r\n return DO(val);\r\n },\r\n deferEvaluation: true\r\n });\r\n wrapped.__ko_proto__ = realKoDependentObservable;\r\n return wrapped;\r\n };\r\n\r\n options.deferEvaluation = true; // will either set for just options, or both read/options.\r\n var realDependentObservable = new realKoDependentObservable(read, owner, options);\r\n realDependentObservable.__ko_proto__ = realKoDependentObservable;\r\n\r\n if (!realDeferEvaluation) {\r\n dependentObservables.push(realDependentObservable);\r\n realDependentObservable = wrap(realDependentObservable);\r\n }\r\n\r\n return realDependentObservable;\r\n };\r\n var result = callback();\r\n ko.dependentObservable = localDO;\r\n return result;\r\n }\r\n\r\n function updateViewModel(mappedRootObject, rootObject, options, parentName, parent, parentPropertyName) {\r\n var isArray = ko.utils.unwrapObservable(rootObject) instanceof Array;\r\n\r\n parentPropertyName = parentPropertyName || \"\";\r\n\r\n // If this object was already mapped previously, take the options from there and merge them with our existing ones.\r\n if (ko.mapping.isMapped(mappedRootObject)) {\r\n var previousMapping = ko.utils.unwrapObservable(mappedRootObject)[mappingProperty];\r\n options = merge(previousMapping, options);\r\n }\r\n\r\n var callbackParams = {\r\n data: rootObject,\r\n parent: parent\r\n };\r\n\r\n var hasCreateCallback = function() {\r\n return options[parentName] && options[parentName].create instanceof Function;\r\n };\r\n\r\n var createCallback = function(data) {\r\n return withProxyDependentObservable(dependentObservables, function() {\r\n return options[parentName].create({\r\n data: data || callbackParams.data,\r\n parent: callbackParams.parent\r\n });\r\n });\r\n };\r\n\r\n var hasUpdateCallback = function() {\r\n return options[parentName] && options[parentName].update instanceof Function;\r\n };\r\n\r\n var updateCallback = function(obj, data) {\r\n var params = {\r\n data: data || callbackParams.data,\r\n parent: callbackParams.parent,\r\n target: ko.utils.unwrapObservable(obj)\r\n };\r\n\r\n if (ko.isWriteableObservable(obj)) {\r\n params.observable = obj;\r\n }\r\n\r\n return options[parentName].update(params);\r\n };\r\n if (visitedObjects.get(rootObject)) return mappedRootObject;\r\n\r\n parentName = parentName || \"\";\r\n\r\n if (!isArray) {\r\n // For atomic types, do a direct update on the observable\r\n if (!canHaveProperties(rootObject)) {\r\n switch (getType(rootObject)) {\r\n case \"function\":\r\n if (hasUpdateCallback()) {\r\n if (ko.isWriteableObservable(rootObject)) {\r\n rootObject(updateCallback(rootObject));\r\n mappedRootObject = rootObject;\r\n } else {\r\n mappedRootObject = updateCallback(rootObject);\r\n }\r\n } else {\r\n mappedRootObject = rootObject;\r\n }\r\n break;\r\n default:\r\n if (ko.isWriteableObservable(mappedRootObject)) {\r\n if (hasUpdateCallback()) {\r\n mappedRootObject(updateCallback(mappedRootObject));\r\n } else {\r\n mappedRootObject(ko.utils.unwrapObservable(rootObject));\r\n }\r\n } else {\r\n if (hasCreateCallback()) {\r\n mappedRootObject = createCallback();\r\n } else {\r\n mappedRootObject = ko.observable(ko.utils.unwrapObservable(rootObject));\r\n }\r\n\r\n if (hasUpdateCallback()) {\r\n mappedRootObject(updateCallback(mappedRootObject));\r\n }\r\n }\r\n break;\r\n }\r\n\r\n } else {\r\n mappedRootObject = ko.utils.unwrapObservable(mappedRootObject);\r\n if (!mappedRootObject) {\r\n if (hasCreateCallback()) {\r\n var result = createCallback();\r\n\r\n if (hasUpdateCallback()) {\r\n result = updateCallback(result);\r\n }\r\n\r\n return result;\r\n } else {\r\n if (hasUpdateCallback()) {\r\n return updateCallback(result);\r\n }\r\n\r\n mappedRootObject = {};\r\n }\r\n }\r\n\r\n if (hasUpdateCallback()) {\r\n mappedRootObject = updateCallback(mappedRootObject);\r\n }\r\n\r\n visitedObjects.save(rootObject, mappedRootObject);\r\n\r\n // For non-atomic types, visit all properties and update recursively\r\n visitPropertiesOrArrayEntries(rootObject, function(indexer) {\r\n var fullPropertyName = parentPropertyName.length ? parentPropertyName + \".\" + indexer : indexer;\r\n\r\n if (ko.utils.arrayIndexOf(options.ignore, fullPropertyName) != -1) {\r\n return;\r\n }\r\n\r\n if (ko.utils.arrayIndexOf(options.copy, fullPropertyName) != -1) {\r\n mappedRootObject[indexer] = rootObject[indexer];\r\n return;\r\n }\r\n\r\n // In case we are adding an already mapped property, fill it with the previously mapped property value to prevent recursion.\r\n // If this is a property that was generated by fromJS, we should use the options specified there\r\n var prevMappedProperty = visitedObjects.get(rootObject[indexer]);\r\n var value = prevMappedProperty || updateViewModel(mappedRootObject[indexer], rootObject[indexer], options, indexer, mappedRootObject, fullPropertyName);\r\n\r\n if (ko.isWriteableObservable(mappedRootObject[indexer])) {\r\n mappedRootObject[indexer](ko.utils.unwrapObservable(value));\r\n } else {\r\n mappedRootObject[indexer] = value;\r\n }\r\n\r\n options.mappedProperties[fullPropertyName] = true;\r\n });\r\n }\r\n } else {\r\n var changes = [];\r\n\r\n var hasKeyCallback = false;\r\n var keyCallback = function(x) {\r\n return x;\r\n };\r\n if (options[parentName] && options[parentName].key) {\r\n keyCallback = options[parentName].key;\r\n hasKeyCallback = true;\r\n }\r\n\r\n if (!ko.isObservable(mappedRootObject)) {\r\n // When creating the new observable array, also add a bunch of utility functions that take the 'key' of the array items into account.\r\n mappedRootObject = ko.observableArray([]);\r\n\r\n mappedRootObject.mappedRemove = function(valueOrPredicate) {\r\n var predicate = typeof valueOrPredicate == \"function\" ? valueOrPredicate : function(value) {\r\n return value === keyCallback(valueOrPredicate);\r\n };\r\n return mappedRootObject.remove(function(item) {\r\n return predicate(keyCallback(item));\r\n });\r\n };\r\n mappedRootObject.mappedRemoveAll = function(arrayOfValues) {\r\n var arrayOfKeys = filterArrayByKey(arrayOfValues, keyCallback);\r\n return mappedRootObject.remove(function(item) {\r\n return ko.utils.arrayIndexOf(arrayOfKeys, keyCallback(item)) != -1;\r\n });\r\n };\r\n mappedRootObject.mappedDestroy = function(valueOrPredicate) {\r\n var predicate = typeof valueOrPredicate == \"function\" ? valueOrPredicate : function(value) {\r\n return value === keyCallback(valueOrPredicate);\r\n };\r\n return mappedRootObject.destroy(function(item) {\r\n return predicate(keyCallback(item));\r\n });\r\n };\r\n mappedRootObject.mappedDestroyAll = function(arrayOfValues) {\r\n var arrayOfKeys = filterArrayByKey(arrayOfValues, keyCallback);\r\n return mappedRootObject.destroy(function(item) {\r\n return ko.utils.arrayIndexOf(arrayOfKeys, keyCallback(item)) != -1;\r\n });\r\n };\r\n mappedRootObject.mappedIndexOf = function(item) {\r\n var keys = filterArrayByKey(mappedRootObject(), keyCallback);\r\n var key = keyCallback(item);\r\n return ko.utils.arrayIndexOf(keys, key);\r\n };\r\n mappedRootObject.mappedCreate = function(value) {\r\n if (mappedRootObject.mappedIndexOf(value) !== -1) {\r\n throw new Error(\"There already is an object with the key that you specified.\");\r\n }\r\n\r\n var item = hasCreateCallback() ? createCallback(value) : value;\r\n if (hasUpdateCallback()) {\r\n var newValue = updateCallback(item, value);\r\n if (ko.isWriteableObservable(item)) {\r\n item(newValue);\r\n } else {\r\n item = newValue;\r\n }\r\n }\r\n mappedRootObject.push(item);\r\n return item;\r\n };\r\n }\r\n\r\n var currentArrayKeys = filterArrayByKey(ko.utils.unwrapObservable(mappedRootObject), keyCallback).sort();\r\n var newArrayKeys = filterArrayByKey(rootObject, keyCallback);\r\n if (hasKeyCallback) newArrayKeys.sort();\r\n var editScript = ko.utils.compareArrays(currentArrayKeys, newArrayKeys);\r\n\r\n var ignoreIndexOf = {};\r\n\r\n var newContents = [];\r\n for (var i = 0, j = editScript.length; i < j; i++) {\r\n var key = editScript[i];\r\n var mappedItem;\r\n var fullPropertyName = parentPropertyName + \"[\" + i + \"]\";\r\n switch (key.status) {\r\n case \"added\":\r\n var item = getItemByKey(ko.utils.unwrapObservable(rootObject), key.value, keyCallback);\r\n mappedItem = ko.utils.unwrapObservable(updateViewModel(undefined, item, options, parentName, mappedRootObject, fullPropertyName));\r\n\r\n var index = ignorableIndexOf(ko.utils.unwrapObservable(rootObject), item, ignoreIndexOf);\r\n newContents[index] = mappedItem;\r\n ignoreIndexOf[index] = true;\r\n break;\r\n case \"retained\":\r\n var item = getItemByKey(ko.utils.unwrapObservable(rootObject), key.value, keyCallback);\r\n mappedItem = getItemByKey(mappedRootObject, key.value, keyCallback);\r\n updateViewModel(mappedItem, item, options, parentName, mappedRootObject, fullPropertyName);\r\n\r\n var index = ignorableIndexOf(ko.utils.unwrapObservable(rootObject), item, ignoreIndexOf);\r\n newContents[index] = mappedItem;\r\n ignoreIndexOf[index] = true;\r\n break;\r\n case \"deleted\":\r\n mappedItem = getItemByKey(mappedRootObject, key.value, keyCallback);\r\n break;\r\n }\r\n\r\n changes.push({\r\n event: key.status,\r\n item: mappedItem\r\n });\r\n }\r\n\r\n mappedRootObject(newContents);\r\n\r\n if (options[parentName] && options[parentName].arrayChanged) {\r\n ko.utils.arrayForEach(changes, function(change) {\r\n options[parentName].arrayChanged(change.event, change.item);\r\n });\r\n }\r\n }\r\n\r\n return mappedRootObject;\r\n }\r\n\r\n function ignorableIndexOf(array, item, ignoreIndices) {\r\n for (var i = 0, j = array.length; i < j; i++) {\r\n if (ignoreIndices[i] === true) continue;\r\n if (array[i] === item) return i;\r\n }\r\n return null;\r\n }\r\n\r\n function mapKey(item, callback) {\r\n var mappedItem;\r\n if (callback) mappedItem = callback(item);\r\n if (getType(mappedItem) === \"undefined\") mappedItem = item;\r\n\r\n return ko.utils.unwrapObservable(mappedItem);\r\n }\r\n\r\n function getItemByKey(array, key, callback) {\r\n var filtered = ko.utils.arrayFilter(ko.utils.unwrapObservable(array), function(item) {\r\n return mapKey(item, callback) === key;\r\n });\r\n\r\n if (filtered.length == 0) throw new Error(\"When calling ko.update*, the key '\" + key + \"' was not found!\");\r\n if ((filtered.length > 1) && (canHaveProperties(filtered[0]))) throw new Error(\"When calling ko.update*, the key '\" + key + \"' was not unique!\");\r\n\r\n return filtered[0];\r\n }\r\n\r\n function filterArrayByKey(array, callback) {\r\n return ko.utils.arrayMap(ko.utils.unwrapObservable(array), function(item) {\r\n if (callback) {\r\n return mapKey(item, callback);\r\n } else {\r\n return item;\r\n }\r\n });\r\n }\r\n\r\n function visitPropertiesOrArrayEntries(rootObject, visitorCallback) {\r\n if (rootObject instanceof Array) {\r\n for (var i = 0; i < rootObject.length; i++)\r\n visitorCallback(i);\r\n } else {\r\n for (var propertyName in rootObject)\r\n visitorCallback(propertyName);\r\n }\r\n }\r\n\r\n ;\r\n\r\n function canHaveProperties(object) {\r\n var type = getType(object);\r\n return (type === \"object\") && (object !== null) && (type !== \"undefined\");\r\n }\r\n\r\n // Based on the parentName, this creates a fully classified name of a property\r\n\r\n function getPropertyName(parentName, parent, indexer) {\r\n var propertyName = parentName || \"\";\r\n if (parent instanceof Array) {\r\n if (parentName) {\r\n propertyName += \"[\" + indexer + \"]\";\r\n }\r\n } else {\r\n if (parentName) {\r\n propertyName += \".\";\r\n }\r\n propertyName += indexer;\r\n }\r\n return propertyName;\r\n }\r\n\r\n ko.mapping.visitModel = function(rootObject, callback, options) {\r\n options = options || {};\r\n options.visitedObjects = options.visitedObjects || new objectLookup();\r\n\r\n if (!options.parentName) {\r\n options = fillOptions(options);\r\n }\r\n\r\n var mappedRootObject;\r\n var unwrappedRootObject = ko.utils.unwrapObservable(rootObject);\r\n if (!canHaveProperties(unwrappedRootObject)) {\r\n return callback(rootObject, options.parentName);\r\n } else {\r\n // Only do a callback, but ignore the results\r\n callback(rootObject, options.parentName);\r\n mappedRootObject = unwrappedRootObject instanceof Array ? [] : {};\r\n }\r\n\r\n options.visitedObjects.save(rootObject, mappedRootObject);\r\n\r\n var parentName = options.parentName;\r\n visitPropertiesOrArrayEntries(unwrappedRootObject, function(indexer) {\r\n if (options.ignore && ko.utils.arrayIndexOf(options.ignore, indexer) != -1) return;\r\n\r\n var propertyValue = unwrappedRootObject[indexer];\r\n options.parentName = getPropertyName(parentName, unwrappedRootObject, indexer);\r\n\r\n // If we don't want to explicitly copy the unmapped property...\r\n if (ko.utils.arrayIndexOf(options.copy, indexer) === -1) {\r\n // ...find out if it's a property we want to explicitly include\r\n if (ko.utils.arrayIndexOf(options.include, indexer) === -1) {\r\n // The mapped properties object contains all the properties that were part of the original object.\r\n // If a property does not exist, and it is not because it is part of an array (e.g. \"myProp[3]\"), then it should not be unmapped.\r\n if (unwrappedRootObject[mappingProperty] && unwrappedRootObject[mappingProperty].mappedProperties && !unwrappedRootObject[mappingProperty].mappedProperties[indexer] && !(unwrappedRootObject instanceof Array)) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n var outputProperty;\r\n switch (getType(ko.utils.unwrapObservable(propertyValue))) {\r\n case \"object\":\r\n case \"undefined\":\r\n var previouslyMappedValue = options.visitedObjects.get(propertyValue);\r\n mappedRootObject[indexer] = (getType(previouslyMappedValue) !== \"undefined\") ? previouslyMappedValue : ko.mapping.visitModel(propertyValue, callback, options);\r\n break;\r\n default:\r\n mappedRootObject[indexer] = callback(propertyValue, options.parentName);\r\n }\r\n });\r\n\r\n return mappedRootObject;\r\n };\r\n\r\n function objectLookup() {\r\n var keys = [];\r\n var values = [];\r\n this.save = function(key, value) {\r\n var existingIndex = ko.utils.arrayIndexOf(keys, key);\r\n if (existingIndex >= 0) values[existingIndex] = value;\r\n else {\r\n keys.push(key);\r\n values.push(value);\r\n }\r\n };\r\n this.get = function(key) {\r\n var existingIndex = ko.utils.arrayIndexOf(keys, key);\r\n return (existingIndex >= 0) ? values[existingIndex] : undefined;\r\n };\r\n }\r\n\r\n ;\r\n\r\n ko.exportSymbol('ko.mapping', ko.mapping);\r\n ko.exportSymbol('ko.mapping.fromJS', ko.mapping.fromJS);\r\n ko.exportSymbol('ko.mapping.fromJSON', ko.mapping.fromJSON);\r\n ko.exportSymbol('ko.mapping.isMapped', ko.mapping.isMapped);\r\n ko.exportSymbol('ko.mapping.defaultOptions', ko.mapping.defaultOptions);\r\n ko.exportSymbol('ko.mapping.toJS', ko.mapping.toJS);\r\n ko.exportSymbol('ko.mapping.toJSON', ko.mapping.toJSON);\r\n ko.exportSymbol('ko.mapping.updateFromJS', ko.mapping.updateFromJS);\r\n ko.exportSymbol('ko.mapping.updateFromJSON', ko.mapping.updateFromJSON);\r\n ko.exportSymbol('ko.mapping.visitModel', ko.mapping.visitModel);\r\n})();","export default function elementIntersectionObserver(options) {\n const map = new Map(),\n observer = new IntersectionObserver(function(entries) {\n entries.forEach(entry => {\n if (entry.isIntersecting && map.has(entry.target)) {\n map.get(entry.target)(entry.target);\n map.delete(entry.target);\n observer.unobserve(entry.target);\n }\n });\n }, Object.assign({rootMargin: '320px', threshold: 0}, options || {}));\n\n return function(element, callback) {\n if (!element || typeof callback !== 'function') {\n throw new Error('An elementIntersectionObserver requires an element reference and a callback function');\n }\n\n map.set(element, callback);\n observer.observe(element);\n\n return observer;\n };\n}\n","export default function waitForElement(selector, callback, options) {\n var defaults = {\n allowedAttempts: 150,\n timeout: 200\n },\n opts = Object.assign({}, defaults, options),\n attempt = 1;\n\n function checkForElement() {\n var $element = document.querySelector(selector);\n\n if (attempt <= opts.allowedAttempts) {\n if ($element) {\n callback($element);\n } else {\n attempt++;\n setTimeout(checkForElement, opts.timeout);\n }\n }\n }\n\n checkForElement();\n}\n\n","function lazyLoad($container) {\n var images = ($container || document).querySelectorAll('.lazy:not(.lazyLoaded):not(.lazyError)'),\n observer = new IntersectionObserver(function(entries) {\n entries.forEach(function(entry) {\n if (entry.isIntersecting && !!entry.target.dataset.src) {\n observer.unobserve(entry.target);\n\n entry.target.onload = function() {\n entry.target.classList.add('lazyLoaded');\n };\n\n entry.target.onerror = function() {\n entry.target.classList.add('lazyError');\n };\n\n entry.target.src = entry.target.dataset.src;\n }\n });\n });\n\n [].slice.call(images).forEach(function(image) {\n observer.observe(image);\n });\n}\n\nexport default function observeImages($container) {\n if (!window.IntersectionObserver) {\n var script = document.createElement('script');\n\n script.async = true;\n script.onload = function(){\n lazyLoad($container);\n };\n script.src = '/jsscripts/polyfills/intersection-observer.js';\n document.getElementsByTagName('head')[0].appendChild(script);\n } else {\n lazyLoad($container);\n }\n}\n","/* eslint-disable one-var */\r\nexport const small = 768;\r\nexport const medium = 1024;\r\nexport const large = 1200;\r\nexport const xlarge = 1400;\r\nexport const xxlarge = 1680;\r\n","export function first(arr, iterator) {\n return arr.filter(iterator)[0];\n}\n\nexport function flattenByKeys(arr) {\n return arr.reduce(function(output, item) {\n Object.keys(item).forEach(function(key) {\n if (!output[key]) {\n output[key] = [];\n }\n if (-1 === output[key].indexOf(item[key])) {\n output[key].push(item[key]);\n }\n });\n return output;\n }, {});\n}\n\nexport function contains(arr, value) {\n return -1 < (arr || []).indexOf(value);\n}\n","export function debounce(func, wait, immediate) {\n var timeout;\n return function() {\n // eslint-disable-next-line no-invalid-this\n var context = this,\n args = arguments,\n later = () => {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n },\n callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) {\n func.apply(context, args);\n }\n };\n}\n","export function propValue(obj) {\n return typeof obj === 'function' ? obj() : obj;\n}\n\nexport function hasProperty(obj, properties) {\n var ret = true,\n currentObj = obj,\n props = properties.split('.'),\n i = 0,\n l = props.length;\n\n for (; i < l; i++) {\n if (!currentObj || typeof currentObj[props[i]] === 'undefined') {\n ret = false;\n break;\n }\n\n currentObj = propValue(currentObj[props[i]]);\n }\n\n return ret;\n}\n\nexport function prop(name) {\n return function(item) {\n return propValue(item[name]);\n };\n}\n\nexport function propEquals(propName, value) {\n return function(obj) {\n return propValue(obj[propName]) === value;\n };\n}\n\nexport function propDoesNotEqual(propName, value) {\n return function(obj) {\n return propValue(obj[propName]) !== value;\n };\n}\n\nexport function keyMatches(obj, key) {\n return function(obj2) {\n return obj[key] === obj2[key];\n };\n}\n\nexport function keyValueMatchCount(obj1, obj2) {\n if (!obj1) {\n return -1;\n }\n\n var matches = 0,\n key;\n\n for (key in obj1) {\n if (Object.keys(obj2).indexOf(key) > -1) {\n if (propValue(obj1[key]) !== propValue(obj2[key])) {\n continue;\n }\n matches++;\n }\n }\n\n return matches;\n}\n\nexport function contains(searchObject, findObject) {\n if (!searchObject) {\n return false;\n }\n\n var matches = keyValueMatchCount(searchObject, findObject);\n\n return Object.keys(findObject).length === matches;\n} \n\nexport function equals(searchObject, findObject) {\n return JSON.stringify(searchObject) === JSON.stringify(findObject);\n}\n\nexport function setKeyValue(object, key, value) {\n if (!value && key in object) {\n delete object[key];\n } else {\n object[key] = value;\n }\n\n return object;\n}\n\nexport function copy(obj) {\n return Object.assign ? Object.assign({}, obj) : Object.keys(obj).reduce(function(o, key) {\n o[key] = obj[key];\n return o;\n }, {});\n}\n","export default function whenValueChanges(evaluation, callback) {\n let originalValue = evaluation();\n\n return function() {\n let changedValue = evaluation();\n if (changedValue === originalValue) {\n return;\n }\n\n originalValue = changedValue;\n callback(changedValue);\n };\n}\n","/* eslint-disable new-cap */\n\nexport function fromStrategyEmbedCode(dyVariables) {\n import('./recommendations.js').then(({ default: render }) => render({\n strategyId: dyVariables[0],\n element: dyVariables[1],\n type: dyVariables[2],\n containerId: dyVariables[3],\n heading: dyVariables[4],\n headingTag: dyVariables[5],\n subHeading: dyVariables[6],\n subHeadingLink: dyVariables[7],\n imageWidth: dyVariables[8],\n numberToDisplay: +dyVariables[9],\n headingClassName: dyVariables[10],\n }));\n}\n\nexport function audienceEvent(customer, forceEventFire) {\n if (!customer) {\n return;\n }\n\n var STORAGE_KEY = 'audienceEventFired',\n keys = ['ExistingCustomer', 'HasActiveSubscription', 'PrimaryDiscipline', 'ATSSmartPaks'];\n\n if (sessionStorage.getItem(STORAGE_KEY) !== 'true' || forceEventFire) {\n event(\n 'Audience',\n keys.reduce(function (audience, key) {\n audience[key] = customer[key];\n\n return audience;\n }, {})\n );\n\n sessionStorage.setItem(STORAGE_KEY, 'true');\n }\n}\n\nexport function indentity(email) {\n if (email && window.DY && window.DY.API && window.DYO) {\n window.DY.API('identify', {\n uid: window.DYO.dyhash.sha256(email),\n type: 'he'\n });\n }\n}\n\nexport function searchEvent(searchText) {\n event('Keyword Search', {\n dyType: 'keyword-search-v1',\n keywords: searchText\n });\n}\n\nexport function event(eventName, eventObject) {\n if (window.DY && window.DY.API) {\n var eventProperties = {};\n\n Object.keys(eventObject).forEach(function (key) {\n if (typeof eventObject[key] === 'function') {\n return;\n }\n if (typeof eventObject[key] === 'undefined' || typeof eventObject[key] === 'number') {\n eventProperties[key] = eventObject[key];\n } else {\n eventProperties[key] = eventObject[key].toString();\n }\n });\n\n // eslint-disable-next-line new-cap\n window.DY.API('event', {\n name: eventName,\n properties: eventProperties\n });\n }\n}\n\nexport function signUpEvent(email) {\n const hashedEmail = getHashedEmail(email);\n window.DY.API('event', {\n name: 'Signup',\n properties: {\n dyType: 'signup-v1',\n hashedEmail: hashedEmail\n }\n });\n}\n\nexport function newsLetterSubscriptionEvent(email) {\n var hashedEmail = getHashedEmail(email);\n window.DY.API('event', {\n name: 'Newsletter Subscription',\n properties: {\n dyType: 'newsletter-subscription-v1',\n hashedEmail: hashedEmail\n }\n });\n}\n\nexport function loginEvent(email) {\n if (!window.DY || !window.DYO) {\n return;\n }\n\n window.DY.API('event', {\n name: 'Login',\n properties: {\n dyType: 'login-v1',\n hashedEmail: getHashedEmail(email)\n }\n });\n}\n\nexport function getHashedEmail(emailAddress) {\n return window.DYO.dyhash.sha256(emailAddress.toLowerCase());\n}\n\nexport function fireUTMCampaignEvents() {\n const params = new URLSearchParams(location.search),\n param = 'utm_campaign',\n prefix = 'dy_utm_camp_';\n\n if (params.has(param)) {\n const d = new Date(),\n name = params.get(param);\n\n d.setTime(d.getTime() + 31 * 24 * 60 * 60 * 1e3);\n\n document.cookie = prefix + name + '=1;path=/; expires=' + d.toGMTString() + ';';\n }\n\n if (!document.cookie.includes(prefix)) {\n return;\n }\n\n document.cookie.split(';')\n .filter(cookie => cookie.includes(prefix))\n .forEach(cookie => {\n event('UTM_Campaign_ready', {\n name: cookie.trim().split('=')[0].replace(prefix, '')\n });\n });\n}\n\nexport function getUserLocation() {\n return utils.ready(() => window?.DY?.geoFields);\n}\n\nfunction ready(evaluator) {\n const allowedAttempts = 150;\n const timeout = 200;\n let attempt = 1;\n\n return new Promise(res => {\n function checkForInstance() {\n const instance = evaluator();\n\n if (instance) {\n res(instance);\n return;\n }\n\n if (attempt <= allowedAttempts) {\n attempt++;\n setTimeout(checkForInstance, timeout);\n }\n }\n\n checkForInstance();\n });\n}\n\nexport const utils = {\n ready\n};","/* eslint-disable camelcase */\nexport function triggerEvent(category, action, label) {\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n event: 'gaTriggerEvent',\n gaEventCategory: category,\n gaEventAction: action,\n gaEventLabel: label\n });\n}\n\nexport function productsOnPage(products) {\n if (!Array.isArray(products)) {\n throw new Error('Expects Array of Products');\n }\n\n const expectedKeys = ['name', 'productClassId', 'itemId'];\n const hasKeys = products.every(product => expectedKeys.every(key => Object.prototype.hasOwnProperty.call(product, key)));\n\n if (!hasKeys) {\n throw new Error('All products must contain \"name\", \"productClassId\" and \"itemId\" keys');\n }\n\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n event: 'productsOnPage',\n products\n });\n}\n\nexport function spSearch({ seachTerm, type }) {\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n event: 'sp_search',\n search: {\n search_term: seachTerm,\n search_option_click: type\n }\n });\n}","const etamessaging = {\r\n formatEta: function(jsDate) {\r\n return this._getDayNameAbbr(jsDate) + ' ' + (jsDate.getMonth() + 1) + '/' + jsDate.getDate();\r\n },\r\n _getDayNameAbbr: function(jsDate) {\r\n return ['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'][jsDate.getDay()];\r\n }\r\n};\r\n\r\nexport default etamessaging;\r\n","import waitFor from \"../../../utils/waitfor\";\n\nexport default function hideBVQAButton($element) {\n waitFor(() => $element && !!$element.shadowRoot && $element.shadowRoot.getElementById('bv-question-btn'))\n .then(() => $element.shadowRoot.getElementById('bv-question-btn'))\n .then($button => $button.style.display = 'none');\n}","export default function waitFor(evaluator) {\n var interval = null;\n\n return new Promise(res => {\n if (evaluator()) {\n res();\n } else {\n interval = setInterval(function () {\n if (evaluator()) {\n clearInterval(interval);\n interval = null;\n res();\n }\n }, 100);\n }\n });\n}","import elementIntersectionObserver from '../../../dom/elementintersectionobserver';\n\nexport function lazybvshow() {\n const MIN_HEIGHT = 640,\n rootMarginThreshold = window.innerHeight < MIN_HEIGHT ? MIN_HEIGHT : window.innerHeight * .66, \n observe = elementIntersectionObserver({\n rootMargin: `${rootMarginThreshold}px`\n }),\n $$bvShow = document.querySelectorAll('[data-lazy-bv-show]');\n\n [...$$bvShow].forEach($bvShow =>\n observe($bvShow, $element => ($element.dataset.bvShow = $element.dataset.lazyBvShow))\n );\n}\n\nexport function initializeBVReviewClick(element){\n if(!element){\n throw new Error('initializeBVReviewClick requires valid element');\n }\n element.addEventListener('mouseover', function bvEvent() {\n element.removeEventListener('mouseover', bvEvent);\n Array.from(document.querySelectorAll('[data-lazy-bv-show]:not(.reviewStars)')).forEach(el => el.dataset.bvShow = el.dataset.lazyBvShow);\n });\n}","/* eslint-disable no-empty-function */\n/* eslint-disable no-unused-vars */\n\nexport const explanations = {\n notInArea: 'Thanks for your interest in this product! Unfortunately, it\\'s not available for purchase in your area.

If you have any questions or need help choosing an alternative product, please feel free to give us a call at 1-800-461-8898 or live chat with us and we\\'d be happy to help.',\n itemOutOfStock: 'We\\'re sorry this item is currently out of stock. Our team is working to get it back in stock asap.'\n};\n\nexport const types = {\n idCustomerInState: 'id-includes-state',\n skuCustomerInState: 'sku-includes-state',\n idCustomerNotInState: 'id-not-in-state'\n};\n\nexport default function handleRestrictions(viewmodel, restrictions) {\n const stateMatchingRestrictions = restrictions\n .filter(restriction => {\n if (restriction.type === types.idCustomerInState || restriction.type === types.idCustomerNotInState) {\n return restriction.id.includes((viewmodel.id()));\n }\n\n if (restriction.type === types.skuCustomerInState) {\n return viewmodel.products().find(p => restriction.id.includes(p.id()));\n }\n\n return false;\n });\n\n waitForLocation(viewmodel).then((location) => _handlers.handleLocationRestrictions(location, stateMatchingRestrictions, viewmodel));\n}\n\nfunction handleLocationRestrictions(location, restrictions, viewmodel) {\n const byId = restrictions.find(restriction => restriction.type === types.idCustomerInState && restriction.state.includes(location.state));\n\n if (byId) {\n _handlers.updateViewModel(viewmodel, false, byId.message);\n return;\n }\n\n const notById = restrictions.find(restriction => restriction.type === types.idCustomerNotInState && !restriction.state.includes(location.state));\n\n if (notById) {\n _handlers.updateViewModel(viewmodel, false, notById.message);\n return;\n }\n\n const bySku = restrictions.find(restriction => restriction.type === types.skuCustomerInState && restriction.state.includes(location.state));\n\n if (bySku) {\n const checkId = (id) => {\n if (bySku.id.includes(id)) {\n _handlers.updateViewModel(viewmodel, false, bySku.message);\n } else {\n _handlers.updateViewModel(viewmodel, true, undefined);\n }\n };\n\n checkId(viewmodel.selectedProductId());\n\n viewmodel.selectedProductId.subscribe(id => checkId(id));\n return;\n }\n}\n\nfunction waitForLocation(viewmodel) {\n if (viewmodel.userDetectedLocation()) {\n return Promise.resolve(viewmodel.userDetectedLocation());\n }\n\n return new Promise(res => {\n const subscription = viewmodel.userDetectedLocation.subscribe(() => {\n res(viewmodel.userDetectedLocation());\n subscription.dispose();\n }); \n });\n}\n\nfunction updateViewModel(viewmodel, shouldShow, message) {\n viewmodel.canShowOrderControl(shouldShow);\n viewmodel.orderControlHiddenExplanation(message);\n}\n\nexport const _handlers = {\n updateViewModel,\n handleLocationRestrictions\n};","export default function selectProductFromURLParam(viewmodel) {\n const urlParams = new URLSearchParams(location.search),\n param = 'sku';\n\n if (!urlParams.has(param)) {\n return;\n }\n\n const sku = +urlParams.get(param);\n\n if (viewmodel.type() === 'supplement') {\n viewmodel.selectedProductId(sku);\n return;\n }\n\n if (viewmodel.type() === 'tes') {\n const product = viewmodel.products().find(product => product.id() === +sku);\n\n if (!product) {\n return;\n }\n\n viewmodel.selectedProduct(product);\n\n if (viewmodel.hasAttributes) {\n viewmodel.attributes.forEach(attribute => {\n const entries = Object.entries(product.attributes).find(([key]) => key === attribute.key);\n\n if (entries.length) {\n attribute.selected(Object.fromEntries([entries])[attribute.key]());\n }\n });\n }\n }\n}","import $ from 'jquery';\nimport ko from 'knockout';\n\nko.bindingHandlers.writeOnlyValue = {\n init: function(element, valueAccessor) {\n $(element).on('change', function() {\n var value = valueAccessor(),\n // eslint-disable-next-line no-invalid-this\n accountName = $('option', this)\n .filter(':selected')\n .val();\n\n value(accountName);\n });\n },\n update: function(element, valueAccessor) {\n var value = valueAccessor();\n $(element).val(value());\n }\n};\n\n","/* eslint-disable max-lines */\n/* eslint-disable sort-imports */\nimport {first} from '../../../../utils/array';\nimport {hasProperty, propEquals} from '../../../../utils/object';\nimport ko from 'knockout';\nimport ProductViewModel from '../../viewmodels/productviewmodel';\n\nfunction SupplementProductViewModel(data, excludeFromPromo) {\n ProductViewModel.call(this, data);\n\n let dosingInfo,\n type = this.type(),\n MEALS_PER_DAY = 2,\n AMPM_FEEDING_TIME = '3',\n customUnitArr;\n\n this.isSmartPak = type === 'supplement';\n this.isPortionPak = type === 'portionpak';\n\n if (this.isPortionPak) {\n this.cupsPerMeal = this.dosingDescription() / MEALS_PER_DAY;\n }\n\n if (this.isSmartPak || this.isPortionPak) {\n dosingInfo = this.dosingInfo();\n\n this.doseTypes = {\n MAINTENANCE: '1997690858',\n LOADING: '1997690859',\n CUSTOM: '1997690860'\n };\n\n this.selectedOption = ko.observable();\n\n this._createDoseTypeOptionMethodsAndSubscribtions = function(type) {\n var doseType = type.toLowerCase();\n this[doseType + 'Options'] = dosingInfo.filter(propEquals('type', doseType));\n this['has' + capitalize(doseType) + 'Options'] = !!this[doseType + 'Options'].length;\n this['selected' + capitalize(doseType) + 'Option'] = ko.observable();\n this['selected' + capitalize(doseType) + 'Option'].subscribe(this.selectedOption);\n };\n\n Object.keys(this.doseTypes).forEach(this._createDoseTypeOptionMethodsAndSubscribtions.bind(this));\n\n this._createDoseTypeOptionMethodsAndSubscribtions('weight');\n\n this.doses = Object.keys(this.doseTypes)\n .filter(\n function(type) {\n return this['has' + capitalize(type.toLowerCase()) + 'Options'];\n }.bind(this)\n )\n .map(\n function(type) {\n return {\n name: capitalize(type.toLowerCase()),\n value: this.doseTypes[type]\n };\n }.bind(this)\n );\n\n this.selectedFeedingTime = ko.observable();\n this.hasOnlyCustomOption = this.hasCustomOptions && !this.hasMaintenanceOptions && !this.hasLoadingOptions;\n this.hasSingleDoseTypeOption = this.doses.length === 1;\n this.selectedDoseTypeId = ko.observable(\n this.hasOnlyCustomOption ? this.doseTypes.CUSTOM : this.doseTypes.MAINTENANCE\n );\n\n this.isAutoShip = ko.observable(this.daysSupply() > 0);\n\n this.selectedDoseDisplayName = ko.computed(() => {\n const id = this.selectedDoseTypeId(),\n doses = this.doses.filter(d => d.value === id.toString());\n \n return doses.length ? doses[0].name : '';\n });\n\n this.selectedDoseTypeId.subscribe(\n function(id) {\n this.selectedFeedingTime('');\n if(this.hasCustomOptions){\n this.selectedCustomDoseDescription('');\n }\n\n if (id) {\n var type = findDoseTypeById(this.doseTypes, id).toLowerCase(),\n name = 'selected' + capitalize(type) + 'Option';\n\n this.selectedOption(this[name]() ? this[name]() : undefined);\n\n if (this[type + 'Options'].length === 1) {\n this[name](this[type + 'Options'][0]);\n }\n }\n }.bind(this)\n );\n\n this.customRetailOption = this.dosingInfo()\n .filter(propEquals('type', 'customretail'))\n .map(function(info) {\n info.description(parseFloat(info.description()));\n return info;\n })[0];\n\n this.hasCustomRetailOption = !!this.customRetailOption;\n\n if (this.hasCustomOptions) {\n customUnitArr = this.customOptions.map(getProductUnitName);\n\n this.customUnitDescription = customUnitArr[customUnitArr.length - 1];\n this.customOptions = this.customOptions.map(function(option) {\n option.description(parseFloat(option.description()));\n return option;\n });\n\n this.removePluralInstance = function(unit) {\n var removePlural = unit.length - 1,\n position = -1;\n\n return unit.substring(removePlural, position);\n };\n\n this.buildUnitDescription = function(option, selectedFeedingTime, selectedDoseTypeId) {\n var unitCount = option ? option.description() : 0,\n feedingTime = selectedFeedingTime ? +selectedFeedingTime : 1,\n feedingFrequency = feedingTime === +AMPM_FEEDING_TIME ? 'twice' : 'once',\n unit =\n unitCount === 1\n ? this.removePluralInstance(this.customUnitDescription)\n : this.customUnitDescription,\n day = this.isPortionPak ? ' day' : ' daily';\n\n if (this.isPortionPak) {\n feedingFrequency = 'per';\n }\n\n return !option || (!!option && selectedDoseTypeId !== this.doseTypes.CUSTOM)\n ? ''\n : unitCount + ' ' + unit + ' ' + feedingFrequency + day;\n };\n\n this.selectedUnitDescription = ko.computed(\n function() {\n return this.buildUnitDescription(\n this.selectedOption(),\n this.selectedFeedingTime(),\n this.selectedDoseTypeId()\n );\n }.bind(this)\n );\n\n this.customRetailUnitDescription = this.hasCustomRetailOption\n ? this.buildUnitDescription(\n this.customRetailOption,\n this.selectedFeedingTime(),\n this.selectedDoseTypeId()\n )\n : '';\n\n this.selectedCustomDoseDescription = ko.observable();\n this.selectedCustomDoseDescription.subscribe(\n function(description) {\n this.selectedCustomOption(\n first(this.customOptions, function(option) {\n return option.description() === parseFloat(description);\n })\n );\n }.bind(this)\n );\n }\n\n this.selectedPriceModel = ko.computed(\n function() {\n var option =\n this.hasOnlyCustomOption && !this.selectedOption()\n ? this.customRetailOption\n : this.selectedOption();\n return option ? option.price : this.price;\n }.bind(this)\n );\n\n this.autoShipSavings = ko.computed(\n function() {\n var priceModel = this.selectedPriceModel();\n\n return hasProperty(priceModel, 'autoShipDiscount.saving')\n ? priceModel.autoShipDiscount.saving()\n : 0;\n }.bind(this)\n );\n\n this.hasAutoShipSavings = ko.computed(\n function() {\n return this.isAutoShip() && this.autoShipSavings() > 0;\n }.bind(this)\n );\n\n this.costBeforeAutoShip = ko.computed(\n function() {\n var price = convertCostToNumber(this.selectedPriceModel().current());\n\n if (this.selectedFeedingTime() === AMPM_FEEDING_TIME) {\n price = price * 2;\n }\n\n return price.toFixed(2);\n }.bind(this)\n );\n\n this.costPerDayBeforeAutoShip = ko.computed(\n function() {\n return (this.costBeforeAutoShip() / this.daysSupply()).toFixed(2);\n }.bind(this)\n );\n\n this.originalCostBeforeAutoShip = ko.computed(\n function() {\n var price = convertCostToNumber(this.selectedPriceModel().original());\n\n if (this.selectedFeedingTime() === AMPM_FEEDING_TIME) {\n price = price * 2;\n }\n\n return price.toFixed(2);\n }.bind(this)\n );\n\n this.originalCostAfterAutoShip = ko.computed(\n function() {\n var priceModel = this.selectedPriceModel(),\n price = convertCostToNumber(priceModel.original());\n\n if (this.hasAutoShipDiscount) {\n price = price * ((100 - priceModel.autoShipDiscount.percentOff()) / 100);\n }\n\n if (this.selectedFeedingTime() === AMPM_FEEDING_TIME) {\n price = price * 2;\n }\n\n return price.toFixed(2);\n }.bind(this)\n );\n\n this.originalCostPerDayBeforeAutoShip = ko.computed(\n function() {\n var price = convertCostToNumber(this.selectedPriceModel().original());\n\n return (price / this.daysSupply()).toFixed(2);\n }.bind(this)\n );\n\n this.costAfterAutoShip = ko.computed(\n function() {\n var priceModel = this.selectedPriceModel(),\n price = convertCostToNumber(priceModel.current());\n\n if (this.hasAutoShipDiscount) {\n price = price - priceModel.autoShipDiscount.saving();\n }\n\n if (this.selectedFeedingTime() === AMPM_FEEDING_TIME) {\n price = price * 2;\n }\n\n return price.toFixed(2);\n }.bind(this)\n );\n\n this.costPerDayAfterAutoShip = ko.computed(\n function() {\n return (this.costAfterAutoShip() / this.daysSupply()).toFixed(2);\n }.bind(this)\n );\n\n this.cost = ko.computed(\n function() {\n var priceModel = this.selectedPriceModel(),\n price = convertCostToNumber(priceModel.current());\n\n if (this.hasAutoShipSavings()) {\n price = price - priceModel.autoShipDiscount.saving();\n }\n\n if (this.selectedFeedingTime() === AMPM_FEEDING_TIME) {\n price = price * 2;\n }\n\n return price.toFixed(2);\n }.bind(this)\n );\n\n this.costPerDay = ko.computed(\n function() {\n return (this.cost() / this.daysSupply()).toFixed(2);\n }.bind(this)\n );\n\n if (this.hasMaintenanceOptions) {\n this.selectedOption(this.maintenanceOptions[0]);\n }\n }\n\n if (this.isTes) {\n this.isAutoShip = ko.observable(this.hasDaysSupply());\n\n this.daysSupplyInput = ko.observable(this.hasDaysSupply() ? this.daysSupply() : '');\n\n this.daysSupplyInput.subscribe(\n function() {\n if (!this.customerIsSmartPrimeEligible && this.isInvalidPerksEligibleItem()) {\n showPerksEligibleWarningModal();\n }\n }.bind(this)\n );\n\n this.hasAutoShipSavings = ko.computed(\n function() {\n var priceModel = this.price;\n return (\n !excludeFromPromo &&\n this.isAutoShip() &&\n hasProperty(priceModel, 'autoShipDiscount.saving') &&\n priceModel.autoShipDiscount.saving() > 0\n );\n }.bind(this)\n );\n\n this.costBeforeAutoShip = ko.computed(\n function() {\n var price = convertCostToNumber(this.price.current());\n\n return price.toFixed(2);\n }.bind(this)\n );\n\n this.costPerDayBeforeAutoShip = ko.computed(\n function() {\n var price = convertCostToNumber(this.price.current());\n\n return (price / this.daysSupply()).toFixed(2);\n }.bind(this)\n );\n\n this.originalCostBeforeAutoShip = ko.computed(\n function() {\n var price = convertCostToNumber(\n this.price.type() === 'base' ? this.price.current() : this.price.original()\n );\n\n return price.toFixed(2);\n }.bind(this)\n );\n\n this.originalCostPerDayBeforeAutoShip = ko.computed(\n function() {\n var price = convertCostToNumber(\n this.price.type() === 'base' ? this.price.current() : this.price.original()\n );\n\n return (price / this.daysSupply()).toFixed(2);\n }.bind(this)\n );\n\n this.originalCostAfterAutoShip = ko.computed(\n function() {\n var priceModel = this.price,\n price = convertCostToNumber(\n priceModel.type() === 'base' ? priceModel.current() : priceModel.original()\n );\n\n if (this.hasAutoShipDiscount) {\n price = price * ((100 - priceModel.autoShipDiscount.percentOff()) / 100);\n }\n\n return price.toFixed(2);\n }.bind(this)\n );\n\n this.costAfterAutoShip = ko.computed(\n function() {\n var priceModel = this.price,\n price = convertCostToNumber(priceModel.current());\n\n if (this.hasAutoShipDiscount) {\n price = price - priceModel.autoShipDiscount.saving();\n }\n\n return price.toFixed(2);\n }.bind(this)\n );\n\n this.costPerDayAfterAutoShip = ko.computed(\n function() {\n return (this.costAfterAutoShip() / this.daysSupply()).toFixed(2);\n }.bind(this)\n );\n\n this.cost = ko.computed(\n function() {\n var priceModel = this.price,\n price = convertCostToNumber(priceModel.current());\n\n if (this.hasAutoShipSavings()) {\n price = price - priceModel.autoShipDiscount.saving();\n }\n\n return price.toFixed(2);\n }.bind(this)\n );\n\n this.costPerDay = ko.computed(\n function() {\n return (this.cost() / this.daysSupply()).toFixed(2);\n }.bind(this)\n );\n\n if (this.cupsOfProduct) {\n this.daysSupplyOfProduct = Math.round(this.cupsOfProduct() / 2);\n }\n\n if (this.hasDaysSupply()) {\n this.isAutoShip(true);\n }\n\n this.increaseQuantity = function() {\n this.quantity(+this.quantity() + 1);\n };\n\n this.decreaseQuantity = function() {\n this.quantity(+this.quantity() > 1 ? +this.quantity() - 1 : 1);\n };\n }\n\n this.packagingOption = this.isSmartPak ? 'SmartPaks' : this.isPortionPak ? \"PortionPaks\" : this.displayName();\n}\n\nfunction getProductUnitName(item) {\n return item.description().split(/\\s/)[1];\n}\n\nfunction convertCostToNumber(str) {\n return +(/^\\$/.test(str) ? str.substring(1) : str);\n}\n\nfunction capitalize(str) {\n return str.substring(0, 1).toUpperCase() + str.substring(1);\n}\n\nfunction findDoseTypeById(types, id) {\n return first(Object.keys(types), function(type) {\n return types[type] === id;\n });\n}\n\nfunction showPerksEligibleWarningModal() {\n var $element = $('.frequency');\n\n smartPak.ui.modal($element.get(0), {\n title: \"Head's Up!\"\n });\n}\n\nexport default SupplementProductViewModel;\n","/* eslint-disable max-lines */\n/* eslint-disable new-cap */\n/* eslint-disable sort-imports */\nimport $ from 'jquery';\nimport ko from 'knockout';\nimport { first } from '../../../../utils/array';\nimport { propEquals } from '../../../../utils/object';\nimport ProductClassViewModel from '../../viewmodels/productclassviewmodel';\nimport SupplementProductViewModel from './productviewmodel';\nimport selectProductFromURLParam from '../../shared/selectproductfromurl';\n\nconst accountTypes = {\n UNKNOWN: 0,\n HORSE: 1,\n DOG: 2,\n CAT: 3,\n ME: 5,\n NOT_ANIMAL: 6\n};\n\nfunction SupplementViewModel(data, config) {\n ProductClassViewModel.call(this, data, config);\n\n let images = this.images(),\n products,\n supplies,\n compareProductData,\n autoShipSubscribe,\n querystring = smartPak.url.parseQueryString(location.search),\n matchingVideo;\n\n const PROZYME_ID = 2933;\n\n this.unitImages = images.filter(propEquals('type', 'unit'));\n\n products = this.products()\n .filter(function (product) {\n return typeof product.price !== 'function' ? product.price : product.price();\n })\n .map(\n function (product) {\n product.unitImage = this.getImageByUnitType(\n product.type() === 'supplement' ? 'scoops' : product.unit()\n );\n return new SupplementProductViewModel(product, this.excludeFromPromo());\n }.bind(this)\n );\n\n supplies = products.filter(propEquals('type', 'tes'));\n\n this.products(products);\n\n this.badges = images.filter(propEquals('type', 'badge'));\n this.banner = first(images, propEquals('type', 'banner'));\n this.productLabelImage = first(images, propEquals('type', 'label'));\n this.supplementPileImage = first(images, propEquals('type', 'supplement-pile'));\n this.hasSmartPak = products.some(propEquals('type', 'supplement'));\n this.hasPortionPak = products.some(propEquals('type', 'portionpak'));\n this.hasSupplies = supplies.length > 0;\n\n this.instructions = instructions(\n this.instructions,\n first(images, propEquals('type', 'instructions')),\n this.hasSmartPak\n );\n this.analysis = analysis(this.analysis, products);\n this.selectedVideo = ko.observable();\n this.isCanine = this.recipientType() === 'dog';\n this.defaultImage = this.productImages[0];\n this.hasCanineSmartPak = this.isCanine && this.hasSmartPak;\n this.hasComparisonCharts = ko.observable(false);\n this.currentSelection = ko.observable();\n this.disableAddToCart = ko.observable(false);\n this.accountCannotAddCbd = ko.observable(false);\n\n this.unitImages.forEach(\n function (image) {\n if (image.attributes.unit() === 'scoops') {\n image.url(this.defaultImage.url());\n }\n }.bind(this)\n );\n\n this.carouselImages = getCarouselImagesInOrder(\n this.productImages,\n this.unitImages,\n this.hasCanineSmartPak || this.hasPortionPak,\n this.productLabelImage\n );\n\n this.isPerkProduct = ko.computed(\n function () {\n var product = this.selectedProduct(),\n PERK_ELIGIBLE_THRESHOLD = 40;\n\n return (\n !this.isCanine &&\n !!product &&\n product.daysSupply() >= 1 &&\n parseFloat(product.cost()) > PERK_ELIGIBLE_THRESHOLD\n );\n }.bind(this)\n );\n\n this.selectedImage(this.defaultImage);\n\n this.doseDisplayOpen = ko.observable(false);\n\n this.toggleDoseDisplay = function () {\n this.doseDisplayOpen(!this.doseDisplayOpen());\n };\n\n this.formName = ko.computed(\n function () {\n return this.currentSelection() === 'supply'\n ? 'addSupplyForm'\n : !this.isCanine\n ? 'addSmartPakForm'\n : 'addPortionPakForm';\n }.bind(this)\n );\n\n this.formId = ko.computed(\n function () {\n return this.currentSelection() === 'pak'\n ? !this.isCanine\n ? 'addSmartPakForm'\n : 'addPortionPakForm'\n : 'addSupplyForm';\n }.bind(this)\n );\n\n this.checkSubscriptionStatus = function (recipient) {\n this.disableAddToCart(true);\n\n if (!recipient || !this.containsCbd()) {\n this.accountCannotAddCbd(false);\n this.disableAddToCart(false);\n } else if (recipient.AccountType === accountTypes.HORSE) {\n this.getSubscriptionCbdStatus(\"Equine\", recipient.AccountId)\n .then(res => {\n this.accountCannotAddCbd(res);\n this.disableAddToCart(false);\n });\n } else if (recipient.AccountType === accountTypes.DOG) {\n this.getSubscriptionCbdStatus(\"Canine\", recipient.AccountId)\n .then(res => {\n this.accountCannotAddCbd(res);\n this.disableAddToCart(false);\n });\n } else {\n this.disableAddToCart(false);\n }\n };\n\n this.getSubscriptionCbdStatus = function (animalType, accountId) {\n return new Promise(resolve => {\n const promises = ['Billing', 'Shipping'].map(addressType => {\n return fetch(\n `/api/Restriction/GetCbd${addressType}AddressRestrictionFor${animalType}SmartPakSubscription?accountId=${accountId}`\n ).then(res => res.text());\n });\n\n Promise.all(promises).then(([hasBillingRestriction, hasShippingRestriction]) => resolve(hasBillingRestriction === 'true' || hasShippingRestriction === 'true'));\n });\n };\n\n if (this.extraInformation && this.extraInformation.comparisonData) {\n try {\n compareProductData = JSON.parse(this.extraInformation.comparisonData());\n this.hasComparisonCharts(true);\n } catch (e) {\n this.hasComparisonCharts(false);\n }\n\n if (compareProductData && compareProductData.products.length) {\n var productCompareIds = compareProductData.products.map(function (product) {\n return product.id;\n });\n\n compareProductData.products = compareProductData.products.map(function (product) {\n return new ComparisonProduct(product);\n });\n\n this.extraInformation.comparisonData(compareProductData);\n\n smartPak.api.product.getProductClassDTOList(productCompareIds).done(\n function (data) {\n if (data.length) {\n data.forEach(function (productData) {\n compareProductData.products\n .filter(function (compareProduct) {\n return compareProduct.id === productData.Id;\n })\n .forEach(function (compareProduct) {\n compareProduct.imagePath(productData.ImagePath + '?width=200');\n compareProduct.name(productData.Name);\n compareProduct.url(productData.Url);\n });\n });\n }\n }.bind(this)\n );\n }\n }\n\n if (this.hasSmartPak || this.hasPortionPak) {\n this.canShowFromPriceLabel = ko.computed(() => {\n var product = this.selectedProduct();\n\n return (\n product &&\n !product.hasCustomRetailOption &&\n ((product.isSmartPak &&\n ((this.dosingDescriptions.length > 0 && !this.selectedDosingDescription()) ||\n (product.hasOnlyCustomOption && !product.selectedOption()))) ||\n (product.isPortionPak && this.selectedPortionPakOption && !this.selectedPortionPakOption()))\n );\n });\n\n this.paks = products.filter(propEquals('type', this.hasPortionPak ? 'portionpak' : 'supplement'));\n this.dosingDescriptions = this.paks\n .filter(dosingDescription)\n .map(dosingDescription)\n .sort(dosingDescriptionSorter);\n this.showDoseCaption = this.id() === PROZYME_ID;\n this.hasDosingDescription = this.dosingDescriptions.length > 0;\n this.hasSmartPakOrPortionPak = this.hasSmartPak || (this.hasPortionPak && !this.hasDosingDescription);\n this.hasPortionPakWithDosing = this.hasPortionPak && this.hasDosingDescription;\n this.postPakURL = '/addtocart/' + this.id() + (this.hasPortionPak ? '/AddPortionPak' : '/AddSmartPak');\n this.selectedPak = ko.observable(this.findSmartPakableProduct());\n this.selectedDosingDescription = ko.observable();\n\n this.canShowChangeDose = ko.computed(() => {\n var pak = this.selectedPak();\n\n return (\n !this.hasPortionPakWithDosing &&\n pak && !pak.hasSingleDoseTypeOption &&\n (!this.hasDosingDescription || (this.hasDosingDescription && !!this.selectedDosingDescription()))\n );\n });\n\n this.showDosingOptions = ko.computed(() => {\n var pak = this.selectedPak();\n\n return (\n this.hasPortionPakWithDosing ||\n (pak && pak.hasSingleDoseTypeOption && pak.hasOnlyCustomOption) ||\n (this.doseDisplayOpen() &&\n pak &&\n !pak.hasSingleDoseTypeOption &&\n ((this.hasDosingDescription && !!this.selectedDosingDescription()) || !this.hasDosingDescription))\n );\n });\n\n this.selectedPak.subscribe(\n function (pak) {\n if (pak) {\n this.currentSelection('pak');\n this.selectedProductId(pak.id());\n }\n }.bind(this)\n );\n\n this.selectedProduct.subscribe(product => {\n if (product && !/portionpak|supplement/gi.test(product.type())) {\n this.showImage(this.getImageByUnitType(this.selectedProduct().unit()));\n } else if (!this.isCanine) {\n this.showImage(this.getImageByUnitType('scoops'));\n }\n });\n\n if (this.hasPortionPakWithDosing || this.hasSmartPak) {\n this.selectedDosingDescription.subscribe(\n function (description) {\n this.selectedPak(\n description ? this.findPakByDosingDescription(description) : this.findSmartPakableProduct()\n );\n }.bind(this)\n );\n }\n }\n\n if (this.hasPortionPak) {\n this.selectedPortionPakOption = ko.observable();\n\n this.selectedPortionPakOption.subscribe(\n function (description) {\n this.selectedPak(\n description ? this.findPakByDosingDescription(description) : this.findSmartPakableProduct()\n );\n }.bind(this)\n );\n\n this.feedingChartData = ko.observableArray();\n\n getFeedChartData(this.id()).done(\n function (chartData) {\n this.feedingChartData(formatFeedingChartData(JSON.parse(chartData), this.products()));\n }.bind(this)\n );\n }\n\n if (this.hasSmartPakOrPortionPak) {\n this.smartPakableProduct = this.findSmartPakableProduct();\n this.isFarriersFormulaDS = isFarriersFormula(this.id());\n\n if (this.isColiCareEligible && this.isColiCareEligible()) {\n this.colicare = {\n shouldShowOptInForm: ko.observable(false),\n shouldShowMessage: ko.observable(true),\n setMessage: function () {\n this.shouldShowOptInForm(!this.policyExists());\n this.shouldShowMessage(this.policyExists() && this.policyWasDenied());\n },\n policyExists: ko.observable(false),\n policyWasDenied: ko.observable(true)\n };\n\n this.selectedRecipientName.subscribe(\n function (name) {\n if (!name) {\n return;\n }\n\n var recipient = first(this.pakRecipients(), propEquals('Name', name));\n\n if (recipient) {\n getColicarePolicyByRecipientId(recipient.AccountId).done(\n function (data) {\n if (!data) {\n return;\n }\n\n this.policyExists(data.PolicyExists);\n this.policyWasDenied(data.PolicyExists && data.DenialReason.length);\n this.setMessage();\n }.bind(this.colicare)\n );\n } else {\n this.colicare.setMessage();\n }\n }.bind(this)\n );\n }\n\n this.canShowCostPerDay = ko.computed(\n function () {\n var pak = this.selectedPak(),\n selectedOption = pak && pak.selectedOption();\n\n if (this.hasSmartPak) {\n return (\n (!!selectedOption && selectedOption.type() !== 'custom') ||\n (!!selectedOption && selectedOption.type() === 'custom' && !!pak.selectedFeedingTime())\n );\n }\n return (\n (!!selectedOption && selectedOption.type() !== 'custom') ||\n (!!selectedOption && selectedOption.type() === 'custom')\n );\n }.bind(this)\n );\n\n this.selectedRecipient.subscribe(recipient => {\n this.checkSubscriptionStatus(recipient);\n });\n }\n\n if (this.hasSupplies) {\n this.postURL = '/addtocart/' + this.id() + '/AddSupply';\n this.supplies = supplies.sort(function (a, b) {\n return a.cost() - b.cost();\n });\n }\n\n this.selectedProductId.subscribe(\n function (id) {\n this.selectedProduct(first(this.products(), propEquals('id', +id)));\n }.bind(this)\n );\n\n this.selectedProduct.subscribe(\n function (product) {\n $('.forRecipientMessage').hide();\n if (product) {\n var onlyAts = false;\n\n if (autoShipSubscribe) {\n autoShipSubscribe.dispose();\n }\n autoShipSubscribe = product.isAutoShip.subscribe(\n function (autoship) {\n this.updateProductsAutoShip(onlyAts ? true : autoship);\n }.bind(this)\n );\n\n if (product.isPortionPak || (this.isCanine && product.isSmartPak)) {\n onlyAts = true;\n product.isAutoShip(true);\n }\n\n if (!/portionpak|supplement/gi.test(product.type())) {\n this.currentSelection('supply');\n if (product.daysSupplyInput && !product.daysSupplyInput()) {\n product.daysSupplyInput(28);\n }\n } else {\n this.currentSelection('pak');\n\n if (product.type() === 'portionpak') {\n product.isAutoShip(true);\n }\n }\n\n if (!product.isEligibleForSubscription()) {\n product.isAutoShip(false);\n }\n\n this.selectImageByProductAttributes(product);\n }\n }.bind(this)\n );\n\n this.selectedProductId(+this.products()[0].id());\n this.selectedProduct().isAutoShip(this.isEligibleForSubscription());\n this.updateProductsAutoShip(this.isEligibleForSubscription());\n\n if (this.selectedProduct().isSmartPak || this.selectedProduct().isPortionPak) {\n if (!this.smartPakableProduct) {\n this.smartPakableProduct = this.findSmartPakableProduct();\n }\n\n this.selectedProductId(this.smartPakableProduct.id());\n this.selectedPak(this.smartPakableProduct);\n }\n\n if (querystring && querystring.video) {\n matchingVideo = this.videos().filter(function (video) {\n return video.id === querystring.video;\n })[0];\n\n if (matchingVideo) {\n this.showVideo(matchingVideo);\n }\n }\n\n if (location.search) {\n selectProductFromURLParam(this);\n }\n}\n\n$.extend(SupplementViewModel.prototype, {\n selectImageByProductAttributes: function (product) {\n var imageWithAttributeMatches = this.imageWithAttributeMatches(this.productImages, product.attributes);\n\n if (this.selectedImage() !== imageWithAttributeMatches.image && imageWithAttributeMatches.matches) {\n this.selectedImage(imageWithAttributeMatches.image);\n }\n },\n findPakByDosingDescription: function (description) {\n return first(this.paks, propEquals('dosingDescription', description));\n },\n findSmartPakableProduct: function () {\n let pakAtZeroIndex = this.paks.length ? this.paks[0] : undefined;\n return !pakAtZeroIndex ||\n !pakAtZeroIndex.isPortionPak ||\n (pakAtZeroIndex.isPortionPak && !pakAtZeroIndex.hasCustomRetailOption)\n ? pakAtZeroIndex\n : this.findPakByDosingDescription(pakAtZeroIndex.customRetailOption.description().toString());\n },\n showVideo: function (video) {\n this.selectedVideo(video);\n },\n showImage: function (image) {\n this.selectedVideo(undefined);\n this.selectedImage(image);\n },\n getImageByUnitType: function (unit) {\n var image = first(this.unitImages, function (img) {\n return img.attributes && img.attributes.unit() === unit;\n });\n return image ? image : this.defaultImage;\n },\n updateProductsAutoShip: function (autoship) {\n this.products().forEach(function (item) {\n var currentAutoShipValue = item.isAutoShip();\n if (autoship !== currentAutoShipValue) {\n item.isAutoShip(autoship);\n }\n });\n }\n});\n\nfunction ComparisonProduct(product) {\n this.id = product.id;\n this.imagePath = ko.observable('');\n this.name = ko.observable('');\n this.url = ko.observable('');\n this.attributes = ko.observableArray(product.attributes.map(function (attribute) {\n addColorToAttribute(attribute);\n attribute.name = attribute.name.replace(\n /(herb-free)/gi,\n '$1'\n );\n return attribute;\n }));\n}\n\nfunction addColorToAttribute(attribute) {\n var compareColors = [\n { attribute: 'Joint', color: '#002b5c' },\n { attribute: 'Senior Joint', color: '#002b5c' },\n { attribute: 'Senior Joint Herb-free', color: '#002b5c' },\n { attribute: 'Hoof', color: '#00728f' },\n { attribute: 'Skin & Coat', color: '#9266A1' },\n { attribute: 'Hindgut', color: '#BC5B00' },\n { attribute: 'Tendon & Ligament', color: '#a30046' },\n { attribute: 'Stomach', color: '#007EB3' },\n { attribute: 'Temperament', color: '#6c217f' },\n { attribute: 'Adult Horses', color: '#00703c' },\n { attribute: 'None or Light Work', color: '#00703c' },\n { attribute: 'Moderate to Heavy Work', color: '#00703c' },\n { attribute: 'Senior Horses', color: '#00703c' }\n ];\n\n attribute.color = '#000';\n compareColors.forEach(function (compareColor) {\n if (compareColor.attribute.toLowerCase() === attribute.name.toLowerCase()) {\n attribute.color = compareColor.color;\n }\n });\n}\n\nfunction formatFeedingChartData(data, products) {\n return data.map(function (item) {\n item.products = item.products.map(function (id) {\n var product = first(products, propEquals('id', id));\n\n return {\n dose: product.dosingDescription()\n };\n });\n\n return item;\n });\n}\n\nfunction getFeedChartData(id) {\n return $.get('/productclasspage/' + id + '/GetPortionPakSuggestedFeedingChart');\n}\n\nfunction dosingDescriptionSorter(a, b) {\n return +a.split(' ')[0] < +b.split(' ')[0] ? -1 : 1;\n}\n\nfunction dosingDescription(product) {\n return product.dosingDescription && product.dosingDescription();\n}\n\nfunction getColicarePolicyByRecipientId(id) {\n return $.get('/api/coliCareDetail/getColiCarePolicyInfoByRecipient/' + id).then(function (data) {\n return data.Status === smartPak.HTTP_STATUS_OK ? data.Content : undefined;\n });\n}\n\nfunction isFarriersFormula(id) {\n var FARRIES_FORMULA_ID = 4675;\n return id === FARRIES_FORMULA_ID;\n}\n\nfunction analysis(analysis, products) {\n var pakProduct = first(products, propEquals('type', 'supplement')),\n maintenanceDose = !pakProduct ? null : first(pakProduct.dosingInfo(), propEquals('type', 'maintenance'));\n\n analysis.maintenanceDoseDescription = maintenanceDose ? maintenanceDose.description() : undefined;\n\n analysis.hasPerPoundIngredient =\n !analysis.ingredients().every(propEquals('amountPerPound', '')) &&\n analysis.ingredients().every(propEquals('amountPerServing', ''));\n\n analysis.hasSupportingText = !!analysis.ingredientsText() || !!analysis.secondaryHeading();\n\n analysis.ingredients().forEach(ingredient => {\n const needsWhitespaceToWrapInUI = /(\\w)\\/(\\w)/gi,\n amountPerServing = ingredient.amountPerServing();\n\n if (needsWhitespaceToWrapInUI.test(amountPerServing)) {\n ingredient.amountPerServing(amountPerServing.replace(needsWhitespaceToWrapInUI, '$1 / $2'));\n }\n });\n\n analysis.keyIngredients(sortKeyIngredients(analysis.keyIngredients()));\n\n return analysis;\n}\n\nfunction sortKeyIngredients(keyIngredients) {\n var nulls = keyIngredients.filter(ingredient => ingredient.sortOrder === null);\n\n if (nulls.length) {\n nulls.forEach(item => keyIngredients.splice(keyIngredients.indexOf(item), 1));\n return keyIngredients.sort(byProp('sortOrder')).concat(nulls.sort(byProp('name')));\n }\n\n return keyIngredients.sort(byProp('sortOrder'));\n}\n\nfunction byProp(name) {\n return function (a, b) {\n return a[name]() > b[name]() ? 1 : -1;\n };\n}\n\nfunction instructions(instructions, image, hasSmartPak) {\n instructions = instructions || {};\n\n var dosing = instructions.dosing && instructions.dosing();\n\n instructions.hasWeight = !!dosing && !dosing.every(propEquals('weight', ''));\n instructions.hasLoading = !!dosing && !dosing.every(propEquals('loading', ''));\n instructions.hasMaintenance = !!dosing && !dosing.every(propEquals('maintenance', ''));\n instructions.image = image;\n instructions.showBanner =\n !image && !!dosing && (dosing.length > 0 || instructions.additionalInstructions !== '') && hasSmartPak;\n\n instructions.hasInstructions =\n instructions.dosing().length || !!instructions.additionalInstructions() || !!instructions.image;\n\n return instructions;\n}\n\nfunction getCarouselImagesInOrder(productImages, unitImages, hasCanineSmartPak, productLabelImage) {\n var carouselImages = productImages.filter(function (image) {\n var type = image.type();\n return type !== 'product' || (type === 'product' && (hasCanineSmartPak || !unitImages.length));\n });\n\n carouselImages = carouselImages.concat(\n ['scoops', 'buckets', 'bags', 'tubes'].reduce(function (arr, unit) {\n var filteredImages = unitImages.filter(function (image) {\n return image.attributes.unit() === unit;\n });\n\n if (filteredImages.length) {\n arr.push(filteredImages[0]);\n }\n\n return arr;\n }, [])\n );\n\n if (productLabelImage) {\n carouselImages = carouselImages.concat([productLabelImage]);\n }\n\n return carouselImages;\n}\n\nexport default SupplementViewModel;\n","import {debounce} from '../../../utils/debounce';\nimport {small} from '../../../shared/breakpoints';\nimport whenValueChanges from '../../../utils/whenvaluechanges';\n\nconst imageController = {\n _isSmallScreen: function() {\n return !window.matchMedia(`screen and (min-width: ${small}px)`).matches;\n },\n _setImageControl: function(isSmallScreen, productClassViewModel, $imageControl) {\n if (this._activeControl) {\n this._activeControl.destroy();\n }\n\n if (isSmallScreen) {\n import('./imagecontrolsmall').then(({default: ImageControlSmall}) => {\n this._activeControl = new ImageControlSmall($imageControl, productClassViewModel);\n });\n } else {\n import('./imagecontrollarge').then(({default: ImageControlLarge}) => {\n this._activeControl = new ImageControlLarge($imageControl, productClassViewModel);\n });\n }\n },\n init: function(productClassViewModel) {\n if (!productClassViewModel) {\n throw new Error('imageController.init requires a viewmodel as a parameter.');\n }\n\n const $imageControl = document.getElementById('image-control');\n\n this._setImageControl(this._isSmallScreen(), productClassViewModel, $imageControl);\n\n window.addEventListener(\n 'resize',\n debounce(\n whenValueChanges(this._isSmallScreen, isSmallScreen =>\n this._setImageControl(isSmallScreen, productClassViewModel, $imageControl)\n ),\n 100\n )\n );\n }\n};\n\nexport default imageController;\n","import '../../../kohandlers/writeonlyvalue';\nimport SupplementViewModel from './viewmodels/supplementviewmodel';\nimport elementIntersectionObserver from '../../../dom/elementintersectionobserver';\nimport imageManager from './imagemanager';\nimport ko from 'knockout';\nimport { lazybvshow, initializeBVReviewClick } from '../shared/lazybvshow';\nimport observeImages from '../../../lazyloadimages';\nimport { productsOnPage } from '../../../vendor/googletagmanager/events';\nimport { getUserLocation } from '../../../vendor/dynamicyield/dynamicyield';\nimport handleRestrictions from '../shared/ordercontrolrestrictions';\nimport { restrictions } from './ordercontrolrestrictions';\nimport waitForElement from '../../../dom/waitforelement.js';\nimport hideBVQAButton from '../shared/hidebvqabutton.js';\n\nconst cookie = smartPak.cdProfileCookie,\n config = {\n discipline: cookie && cookie.PrimaryDiscipline ? cookie.PrimaryDiscipline.toLowerCase() : '',\n isPerksEligible: smartPak.smartPrimeCookie.PerksEligible === 'True'\n },\n $container = document.getElementById('productClassCon'),\n PREMADE = {\n starter: 31331,\n nutritionEssential: 32083,\n foundation: 31332,\n seniorPerformance: 31333,\n performance: 31334,\n seniorFoundation: 31335,\n lessStress: 31336\n };\n\nlet productClassViewModel;\n\nif (window.productClassData) {\n window.productClassData.url = location.pathname;\n smartPak.pageData.productId = window.productClassData.id;\n\n productsOnPage([{\n name: window.productClassData.name.trim(),\n productClassId: window.productClassData.id,\n itemId: window.productClassData.itemNumber\n }]);\n\n productClassViewModel = smartPak.productClassViewModel = new SupplementViewModel(window.productClassData, config);\n\n getUserLocation().then(geoFields => {\n productClassViewModel.userDetectedLocation(geoFields);\n });\n\n imageManager.init(productClassViewModel);\n ko.applyBindings(productClassViewModel, $container);\n\n requestAnimationFrame(() => {\n if (\n [\n PREMADE.starter,\n PREMADE.nutritionEssential,\n PREMADE.foundation,\n PREMADE.seniorPerformance,\n PREMADE.performance,\n PREMADE.seniorFoundation,\n PREMADE.lessStress\n ].includes(window.productClassData.itemNumber)\n ) {\n switch (window.productClassData.itemNumber) {\n case PREMADE.starter:\n import('./premade/starterpak').then(({ default: premade }) => premade());\n break;\n\n case PREMADE.nutritionEssential:\n import('./premade/nutritionessentialpak').then(({ default: premade }) => premade());\n break;\n\n case PREMADE.foundation:\n import('./premade/foundationpak').then(({ default: premade }) => premade());\n break;\n\n case PREMADE.seniorPerformance:\n import('./premade/seniorperformancepak').then(({ default: premade }) => premade());\n break;\n\n case PREMADE.performance:\n import('./premade/performancepak').then(({ default: premade }) => premade());\n break;\n\n case PREMADE.seniorFoundation:\n import('./premade/seniorfoundationpak.js').then(({ default: premade }) => premade());\n break;\n\n case PREMADE.lessStress:\n import('./premade/lessstresspak').then(({ default: premade }) => premade());\n break;\n\n default:\n break;\n }\n }\n });\n\n handleRestrictions(productClassViewModel, restrictions);\n\n const $content = document.querySelector('.content-sections'),\n observe = elementIntersectionObserver();\n const reviewStars = document.getElementById('productInfoStars');\n\n if ($content) {\n observe($content, () => {\n import('./contentmanager').then(({ default: contentManager }) => contentManager.init($content));\n });\n }\n\n waitForElement('[data-lazy-bv-show=\"questions\"]', $element => hideBVQAButton($element));\n\n observeImages($container);\n import('./ordercontrol').then(({ default: orderControl }) => orderControl.init(productClassViewModel, false));\n lazybvshow();\n initializeBVReviewClick(reviewStars);\n}\n","\nimport { types, explanations } from '../shared/ordercontrolrestrictions';\n\nexport const restrictions = [\n {\n type: types.idCustomerInState,\n state: ['California'],\n id: [15464, 744, 5598, 8285, 19441],\n message: explanations.notInArea\n },\n {\n type: types.idCustomerInState,\n state: ['New Mexico'],\n id: [13617, 14653, 13613],\n message: explanations.notInArea\n }\n];","import ko from 'knockout';\n\nfunction ImageViewModel(image) {\n this.type = ko.observable(image.type);\n this.url = ko.observable(image.url);\n this.text = ko.observable(image.text);\n this.attributes = {};\n this.attributeString = ko.observable('');\n\n var attributeValues = [];\n\n if (image.attributes) {\n Object.keys(image.attributes).forEach(\n function(key) {\n this.attributes[key] = ko.observable(image.attributes[key]);\n attributeValues.push(image.attributes[key]);\n }.bind(this)\n );\n\n this.attributeString(attributeValues.join(', '));\n }\n}\n\nexport default ImageViewModel;\n","import ko from 'knockout';\n\nfunction VideoViewModel(video) {\n this.url = ko.observable(video.url);\n this.title = ko.observable(video.title);\n this.description = ko.observable(cleanVideoData(video.description));\n this.thumbnail = ko.observable(updateThumbnailToCustomImage(video.thumbnail));\n\n var querystring = smartPak.url.parseQueryString(location.search);\n\n if (querystring && querystring.video && new RegExp(querystring.video).test(this.url())) {\n this.showVideo(this);\n }\n}\n\nVideoViewModel.prototype.showVideo = function(video) {\n import('../../../smartpak/ui').then(({showVideo}) => showVideo(video.url())); \n\n return false;\n};\n\nfunction removeLineBreaks(text) {\n return text.replace(/\\r?\\n|\\r/g, ' ');\n}\n\nfunction removeURLs(text) {\n return text\n .replace(/\\(http([^()]*)\\)/g, '')\n .replace(/(http|ftp|https):\\/\\/([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])?/g, '');\n}\n\nfunction cleanVideoData(description) {\n return $.trim(removeLineBreaks(removeURLs(description)));\n}\n\nfunction updateThumbnailToCustomImage(image) {\n return image.replace(/3\\.jpg/gi, '0.jpg');\n}\n\nexport default VideoViewModel;\n","/* eslint-disable max-lines */\n/* eslint-disable sort-imports */\nimport $ from 'jquery';\nimport ko from 'knockout';\nimport '../../../../jsscripts/jquery/knockout/knockout.mapping';\nimport {first} from '../../../utils/array';\nimport ImageViewModel from '../viewmodels/imageviewmodel';\nimport VideoViewModel from '../viewmodels/videoviewmodel';\nimport {hasProperty, keyValueMatchCount, propEquals} from '../../../utils/object';\nimport productClassMessaging from '../shared/productclassmessaging';\n\nconst accountTypes = {\n UNKNOWN: 0,\n HORSE: 1,\n DOG: 2,\n CAT: 3,\n ME: 5,\n NOT_ANIMAL: 6\n },\n freeShippingTypes = {\n NONE: 'n',\n SHIPPING: 's',\n RETURN: 'r',\n BOTH: 'b'\n };\n\nlet meAccount = {\n AccountId: 0,\n Name: 'Me',\n AccountType: accountTypes.ME\n};\n\nfunction ProductClassViewModel(data, config) {\n var mapping = {\n videos: {\n create: function(options) {\n return new VideoViewModel(options.data);\n }\n },\n images: {\n create: function(options) {\n return new ImageViewModel(options.data);\n }\n }\n };\n\n ko.mapping.fromJS(data, mapping, this);\n\n this.isPerksEligible = ko.observable(Boolean(config?.isPerksEligible));\n\n this.productClassMessaging = productClassMessaging({\n messages: data.productClassMessaging || [],\n excludeFromPromo: data.excludeFromPromo,\n isPerksEligible: this.isPerksEligible()\n });\n\n this.userDetectedLocation = ko.observable();\n this.canShowOrderControl = ko.observable(true);\n this.orderControlHiddenExplanation = ko.observable();\n this.showCAProp65Warning = ko.observable(false);\n\n const prop65Subscription = this.userDetectedLocation.subscribe(location => {\n this.showCAProp65Warning(location.state === 'California' && this.isProp65());\n\n prop65Subscription.dispose();\n });\n\n this.quantity = ko.observable(1);\n this.selectedProduct = ko.observable();\n this.selectedImage = ko.observable();\n this.selectedAttributes = ko.observable({});\n this.selectedProductId = ko.observable();\n this.selectedRecipientName = ko.observable();\n this.selectedRecipientNameOption = ko.observable();\n this.selectedRecipientNameInput = ko.observable();\n this.recipientTypeName = capitalize(this.recipientType());\n this.shouldShowAddRecipient = ko.observable(false);\n this.allRecipients = ko.observableArray();\n this.isSPEUser = ko.observable(false);\n this.isLoggedIn = ko.observable(false);\n this.isEligibleForSubscription = ko.observable();\n\n this.selectedRecipientNameOption.subscribe(this.selectedRecipientName);\n this.selectedRecipientNameInput.subscribe(\n function(recipient) {\n if (recipient) {\n this.selectedRecipientName(recipient.trim());\n }\n }.bind(this)\n );\n\n this.pakRecipients = ko.computed(\n function() {\n return this.allRecipients().filter(this.isCanine ? isCanineAccount : isEquineAccount);\n }.bind(this)\n );\n\n this.selectedPrice = ko.computed(\n function() {\n var product = this.selectedProduct();\n return product && product.type && product.type() === 'tes'\n ? decorateProductPrice(product.price)\n : this.price;\n }.bind(this)\n );\n\n this.hasMemberDiscount = ko.computed(\n function() {\n var priceModel = this.selectedPrice();\n return priceModel.type() === 'member';\n }.bind(this)\n );\n\n this.productImages = this.images().filter(propEquals('type', 'product')); \n\n if (this.freeShipping) {\n this.hasFreeShipping = new RegExp(\n '^' + freeShippingTypes.SHIPPING + '|' + freeShippingTypes.BOTH + '$',\n 'gi'\n ).test(this.freeShipping());\n this.hasFreeReturnShipping = new RegExp(\n '^' + freeShippingTypes.RETURN + '|' + freeShippingTypes.BOTH + '$',\n 'gi'\n ).test(this.freeShipping());\n }\n\n this.setRecipientName = function(name) {\n this.selectedRecipientNameOption(name);\n this.selectedRecipientNameInput(name);\n this.selectedRecipientNameInput.valueHasMutated();\n };\n\n this.addRecipient = function(recipient) {\n if (recipient && !this.allRecipients().some(propEquals('Name', recipient.Name))) {\n this.allRecipients.push(recipient);\n\n this.setRecipientName('');\n\n if (!this.isSPEUser()) {\n this.setRecipientName(recipient.Name);\n this.shouldShowAddRecipient(false);\n }\n }\n };\n\n this.selectedRecipient = ko.computed(\n function() {\n var name = this.selectedRecipientName();\n return first(this.allRecipients(), propEquals('Name', name));\n }.bind(this)\n );\n\n this.selectedProduct.subscribe(\n function(product) {\n this.isEligibleForSubscription(product && product.isEligibleForSubscription());\n var pakRecipients = this.pakRecipients();\n this.setRecipientName(\n this.isSPEUser() && !!product && product.isTes\n ? meAccount.Name\n : pakRecipients.length === 1 && !this.shouldShowAddRecipient()\n ? pakRecipients[0].Name\n : this.selectedRecipientName() !== 'Me'\n ? this.selectedRecipientName()\n : ''\n );\n }.bind(this)\n );\n\n this.nameAlreadyExists = ko.computed(\n function() {\n var selectedRecipient = this.selectedRecipientName(),\n name = selectedRecipient ? selectedRecipient.toLowerCase() : '',\n isExistingName =\n !!name &&\n this.allRecipients().some(function(recipient) {\n return !!recipient.Name && recipient.Name.toLowerCase() === name;\n });\n\n if (isExistingName) {\n return isRecipientCorrectAnimalType(this.selectedRecipient(), this.isCanine);\n }\n\n return false;\n }.bind(this)\n );\n\n this.hasRecipients = ko.computed(\n function() {\n return this.allRecipients().filter(this.isCanine ? isCanineAccount : isEquineAccount).length > 0;\n }.bind(this)\n );\n\n this.imageWithAttributeMatches = function(images, attributes) {\n var imagesWithMatchCounts = images.map(imageMatches(attributes)),\n hasMatches = imagesWithMatchCounts.some(function(image) {\n return image.matches > 0;\n });\n\n return (!hasMatches ? imagesWithMatchCounts : imagesWithMatchCounts.sort(sortByMatches))[0];\n };\n\n this.toggleShouldShowAddRecipient = function() {\n this.shouldShowAddRecipient(!this.shouldShowAddRecipient());\n\n if (\n this.isSPEUser() &&\n !this.shouldShowAddRecipient() &&\n this.selectedProduct() &&\n this.selectedProduct().isTes\n ) {\n this.setRecipientName('Me');\n } else {\n this.setRecipientName('');\n }\n }.bind(this);\n\n $.post('/api/legacyshoppingcart/GetCustomerDto', {isEquineBuilder: true}).done(\n function(customerDto) {\n var recipients = customerDto.Accounts.filter(function(recipient) {\n return !recipient.Deleted;\n }),\n hasRecipients = recipients.length;\n\n this.isSPEUser(customerDto.IsSpeUser);\n this.isLoggedIn(customerDto.IsLoggedIn);\n this.shouldShowAddRecipient(!customerDto.IsLoggedIn && !hasRecipients);\n this.setInitialRecipient(recipients, hasRecipients);\n }.bind(this)\n );\n\n this.setInitialRecipient = function(recipients, hasRecipients) {\n if (hasRecipients) {\n this.allRecipients(this.isSPEUser() ? [meAccount].concat(recipients) : recipients);\n\n if (this.isSPEUser() && this.selectedProduct() && this.selectedProduct().isTes) {\n this.setRecipientName(meAccount.Name);\n } else if (this.pakRecipients().length === 1) {\n this.setRecipientName(this.pakRecipients()[0].Name);\n }\n } else if (this.isSPEUser() && this.selectedProduct() && this.selectedProduct().isTes) {\n this.setRecipientName(meAccount.Name);\n } else {\n this.setRecipientName('');\n }\n }.bind(this);\n\n this.organizations = ko.observableArray();\n\n this.organizationText = ko.computed(\n function() {\n return this.organizations().join(', ');\n }.bind(this)\n );\n\n this.recentlyViewedProducts = ko.observableArray([]);\n\n this.updateProductETA = function(id, sku, product, data) {\n var GENERAL_PREFERENCE_TYPE_ID = 3,\n zip = hasProperty(smartPak, 'preferredLocationCookie.PreferredZipCode')\n ? smartPak.preferredLocationCookie.PreferredZipCode\n : '',\n customData = data ? JSON.parse(data) : {},\n type = customData.PreferenceTypeId || GENERAL_PREFERENCE_TYPE_ID;\n\n return $.get(getProductETAUrl(id, sku, zip, type, !!data)).done(function(response) {\n product.estimatedArrivalDate(response.replace(/\"/gi, ''));\n });\n };\n\n this.updateEstimatedArrivalDates = function() {\n var promises = this.products();\n\n if (this.customizationData) {\n getProductClassETAData(this.id(), this.customizationData()).done(function(data) {\n parseProductClassData(data, promises);\n });\n }\n };\n\n this.updateRecentlyViewedProducts = function(obj) {\n this.recentlyViewedProducts(obj);\n };\n\n if (smartPak.cdProfileCookie) {\n ['AQHA', 'IHSA', 'USEF'].forEach(\n function(organization) {\n if (smartPak.cdProfileCookie[organization]) {\n this.organizations.push(organization);\n }\n }.bind(this)\n );\n }\n}\n\n// eslint-disable-next-line max-params\nfunction getProductETAUrl(id, sku, zip, type, saved) {\n return (\n '/productclasspage/getestimatedarrivaldate?productClassId=' +\n id +\n '&productId=' +\n sku +\n '&postalCode=' +\n zip +\n '&customizationType=' +\n type +\n '&hasCustomizationBeenSaved=' +\n saved\n );\n}\n\nfunction getProductClassETAUrl(id, zip, type, saved) {\n return (\n '/productclasspage/getproductclassestimatedarrivaldate?productClassId=' +\n id +\n '&postalCode=' +\n zip +\n '&customizationType=' +\n type +\n '&hasCustomizationBeenSaved=' +\n saved\n );\n}\n\nfunction getProductClassETAData(id, data) {\n var GENERAL_PREFERENCE_TYPE_ID = 3,\n zip = hasProperty(smartPak, 'preferredLocationCookie.PreferredZipCode')\n ? smartPak.preferredLocationCookie.PreferredZipCode\n : '',\n customData = data ? JSON.parse(data) : {},\n type = customData.PreferenceTypeId || GENERAL_PREFERENCE_TYPE_ID;\n\n return $.get(getProductClassETAUrl(id, zip, type, !!data));\n}\n\nfunction parseProductClassData(data, promises) {\n var parsed = JSON.parse(data);\n parsed.productAvailabilityModels.forEach(function(availabilityModel) {\n setProductEstimatedArrivalDate(availabilityModel, promises);\n });\n}\n\nfunction setProductEstimatedArrivalDate(availabilityModel, promises) {\n var product = ko.utils.arrayFirst(promises, function(item) {\n return item.id() === availabilityModel.productId;\n });\n\n if (product) {\n product.estimatedArrivalDate(availabilityModel.estimatedArrivalDate);\n }\n}\n\nfunction isCanineAccount(account) {\n return account && (account.AccountType === accountTypes.UNKNOWN || account.AccountType === accountTypes.DOG);\n}\n\nfunction isEquineAccount(account) {\n return account && (account.AccountType === accountTypes.UNKNOWN || account.AccountType === accountTypes.HORSE);\n}\n\nfunction capitalize(str) {\n return str.substring(0, 1).toUpperCase() + str.substring(1);\n}\n\nfunction currencyToNumber(str) {\n return +str.replace(/(^\\$|,|\\s)/g, '');\n}\n\nfunction imageMatches(attributes) {\n return function(image) {\n return {\n image: image,\n matches: keyValueMatchCount(image.attributes, attributes)\n };\n };\n}\n\nfunction sortByMatches(a, b) {\n return a.matches === b.matches ? 0 : a.matches > b.matches ? -1 : 1;\n}\n\nfunction decorateProductPrice(price) {\n var unwrappedPrice = ko.toJS(price);\n\n unwrappedPrice.current = '$' + currencyToNumber(unwrappedPrice.current).toFixed(2);\n unwrappedPrice.original = '$' + currencyToNumber(unwrappedPrice.original).toFixed(2);\n\n return ko.mapping.fromJS(unwrappedPrice);\n}\n\nfunction isRecipientCorrectAnimalType(recipient, isCanine) {\n if (isCanine) {\n return isEquineAccount(recipient);\n }\n\n return isCanineAccount(recipient);\n}\n\nexport default ProductClassViewModel;\n","export default function productClassMessaging({ messages, excludeFromPromo, isPerksEligible }) {\n const ignoreExclusionMessages = excludeFromPromo ? messages.filter(message => message.ignoreExclusions === 'true') : messages;\n\n let message = isPerksEligible\n ? ignoreExclusionMessages.find(message => message.customer === 'Subscriber')\n : ignoreExclusionMessages.find(message => message.customer === 'Non Subscriber');\n\n if (!message) {\n message = ignoreExclusionMessages.find(message => message.customer === 'Default');\n }\n\n return message || null;\n}","import etamessaging from '../shared/etamessaging';\nimport ko from 'knockout';\nimport {propValue} from '../../../utils/object';\n\nvar hasOwnProp = Object.prototype.hasOwnProperty;\n\nfunction ProductViewModel(data) {\n var key;\n\n for (key in data) {\n if (hasOwnProp.call(data, key)) {\n this[key] = data[key];\n }\n }\n\n this.estimatedArrivalDateFormatted = ko.computed(\n function () {\n return etamessaging.formatEta(new Date(this.estimatedArrivalDate()));\n }.bind(this)\n );\n\n this.newDropShipMsg = 'Ships within ';\n this.hasDash = /-/gi.test(this.dropShipDelay());\n this.hasMultiDateRange = /(-|- )(7|6|5|4|3|2|1) business day/gi.test(this.dropShipDelay());\n this.hasSingleDateRange = /^(7|6|5|4|3|2|1) business day/gi.test(this.dropShipDelay());\n this.hasOldDropShipMsg = this.hasDash ? this.hasMultiDateRange : this.hasSingleDateRange;\n this.hasDropShipDelay = !!this.dropShipDelay();\n this.isBackOrder = !!this.backOrderData();\n this.isOutOfStock = this.isBackOrder && !this.hasDropShipDelay;\n this.hasDropShipHolidayCutoff = !!this.dropShipHolidayCutoffDate && this.dropShipHolidayCutoffDate() !== null;\n\n this.isInHighHolidayVolumePeriod = function (today) {\n if (!this.hasDropShipHolidayCutoff) {\n return false;\n }\n\n const dropShipHolidayCutoffDate = new Date(this.dropShipHolidayCutoffDate());\n const endYear = dropShipHolidayCutoffDate.getFullYear();\n const endMonth = '12';\n const endDay = '26';\n const endDate = new Date(`${endMonth}/${endDay}/${endYear}`);\n\n return today <= endDate && dropShipHolidayCutoffDate < today;\n };\n\n this.buildDropShipDelayMessage = function () {\n if (this.hasDropShipDelay && this.hasOldDropShipMsg) {\n return `${this.newDropShipMsg} ${this.dropShipDelay()}`;\n }\n\n if (this.hasShippingScheduleDelay()) {\n return this.dropShipDelay();\n }\n\n if (this.isInHighHolidayVolumePeriod(new Date())) {\n return `This item will not be delivered by 12/25/${new Date().getFullYear()}. Standard product delivery is ${this.dropShipDelay()} but may take longer due to holiday volume.`;\n }\n\n return `Please allow ${this.dropShipDelay()} for delivery.`;\n };\n\n this.dropShipDelayMessage = this.buildDropShipDelayMessage();\n\n this.outOfStockMessage = outOfStockMessage(this.backOrderData());\n this.quantity = ko.observable(1);\n this.isTes = this.type() === 'tes';\n this.customerIsSmartPrimeEligible = smartPak.smartPrimeCookie.SmartPrimeEligible;\n this.dropShipHolidayCutOffDateMessage = this.showDropShipHolidayCutoffDate()\n ? dropShipHolidayCutOffDateMessage(this.dropShipHolidayCutoffDate())\n : '';\n this.showDropShipHolidayCutoffDate = this.showDropShipHolidayCutoffDate();\n\n this.hasDaysSupply = ko.computed(\n function () {\n return this.daysSupply() > 0;\n }.bind(this)\n );\n\n this.hasAutoShipDiscount = hasAutoShipDiscount(this.price);\n\n this.isInvalidPerksEligibleItem = function () {\n var DAYS_SUPPLY_DIFFERENCE_THRESHOLD = 2,\n isEligibleForSmartPerks = !!(\n !isEquineProduct() &&\n this.hasDaysSupply() &&\n +this.originalCostBeforeAutoShip() >= 40\n );\n\n return (\n isEligibleForSmartPerks && +this.daysSupplyInput() / this.daysSupply() > DAYS_SUPPLY_DIFFERENCE_THRESHOLD\n );\n };\n}\n\nfunction hasAutoShipDiscount(price) {\n return typeof price !== 'function' && !!propValue(price.autoShipDiscount);\n}\n\nfunction outOfStockMessage(backOrderData) {\n if (backOrderData) {\n if (/^w/.test(backOrderData)) {\n return getOutOfStockMessageByWeeks(backOrderData);\n }\n\n if (/^d/.test(backOrderData)) {\n return getOutOfStockMessageWithDate(backOrderData);\n }\n }\n\n return '';\n}\n\nfunction getOutOfStockMessageByWeeks(backOrderData) {\n var weeks = backOrderData.split(' ')[1];\n return (\n \"This fabulous product is ordered especially for you. Once you place your order, we'll do our best to have this delivered to you in \" +\n weeks +\n ' weeks.'\n );\n}\n\nfunction getOutOfStockMessageWithDate(backOrderData) {\n var date = backOrderData.split(' ')[1];\n return 'Preorder now! Expected in stock: ' + date + '.';\n}\n\nfunction isEquineProduct() {\n const $element = document.getElementById('isCanine');\n return $element && $element.value === 'true';\n}\n\nfunction dropShipHolidayCutOffDateMessage(dropShipHolidayCutoffDate) {\n var cutOffDate = new Date(dropShipHolidayCutoffDate),\n day = cutOffDate.getDate(),\n month = cutOffDate.getMonth() + 1,\n year = cutOffDate.getFullYear();\n\n return cutOffDate ? 'Order by ' + month + '/' + day + '/' + year + ' to receive by 12/25/' + year + '.' : '';\n}\n\nexport default ProductViewModel;\n","module.exports = jQuery;","module.exports = ko;"],"names":["ko","exportSymbol","publicPath","object","tokens","split","target","window","i","length","exportProperty","owner","publicName","mapping","dependentObservables","visitedObjects","mappingProperty","realKoDependentObservable","dependentObservable","mappingNesting","_defaultOptions","include","ignore","copy","defaultOptions","extendObject","destination","source","key","hasOwnProperty","Array","merge","obj1","obj2","merged","getType","x","_typeof","constructor","Date","fillOptions","options","otherOptions","create","Function","update","arrayChanged","mergeArrays","mappedProperties","a","b","concat","updateViewModel","mappedRootObject","rootObject","parentName","parent","parentPropertyName","isArray","utils","unwrapObservable","isMapped","previousMapping","callbackParams","data","hasCreateCallback","createCallback","localDO","read","realDeferEvaluation","deferEvaluation","isRemoved","DO","wrapped","realDependentObservable","__ko_proto__","push","arrayRemoveItem","apply","arguments","write","val","result","withProxyDependentObservable","hasUpdateCallback","updateCallback","obj","params","isWriteableObservable","observable","get","changes","hasKeyCallback","keyCallback","isObservable","observableArray","mappedRemove","valueOrPredicate","predicate","value","remove","item","mappedRemoveAll","arrayOfValues","arrayOfKeys","filterArrayByKey","arrayIndexOf","mappedDestroy","destroy","mappedDestroyAll","mappedIndexOf","keys","mappedCreate","Error","newValue","currentArrayKeys","sort","newArrayKeys","editScript","compareArrays","ignoreIndexOf","newContents","j","mappedItem","fullPropertyName","status","getItemByKey","undefined","index","ignorableIndexOf","event","arrayForEach","change","canHaveProperties","save","visitPropertiesOrArrayEntries","indexer","array","ignoreIndices","mapKey","callback","filtered","arrayFilter","arrayMap","visitorCallback","propertyName","type","objectLookup","values","this","existingIndex","viewModel","unwrapped","fromJS","jsObject","setTimeout","fromJSON","jsonString","parsed","parseJson","updateFromJS","updateFromJSON","toJS","resetDefaultOptions","visitModel","toJSON","plainJavaScriptObject","stringifyJson","slice","unwrappedRootObject","propertyValue","getPropertyName","previouslyMappedValue","elementIntersectionObserver","map","Map","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","has","unobserve","Object","assign","rootMargin","threshold","element","set","observe","waitForElement","selector","opts","allowedAttempts","timeout","attempt","checkForElement","$element","document","querySelector","lazyLoad","$container","images","querySelectorAll","dataset","src","onload","classList","add","onerror","call","image","observeImages","script","createElement","async","getElementsByTagName","appendChild","small","first","arr","iterator","filter","flattenByKeys","reduce","output","indexOf","contains","debounce","func","wait","immediate","context","args","callNow","clearTimeout","propValue","hasProperty","properties","ret","currentObj","props","l","prop","name","propEquals","propName","propDoesNotEqual","keyValueMatchCount","matches","searchObject","findObject","setKeyValue","o","whenValueChanges","evaluation","originalValue","changedValue","fromStrategyEmbedCode","dyVariables","then","_ref","render","strategyId","containerId","heading","headingTag","subHeading","subHeadingLink","imageWidth","numberToDisplay","headingClassName","audienceEvent","customer","forceEventFire","STORAGE_KEY","sessionStorage","getItem","audience","setItem","indentity","email","DY","API","DYO","uid","dyhash","sha256","searchEvent","searchText","dyType","keywords","eventName","eventObject","eventProperties","toString","signUpEvent","hashedEmail","getHashedEmail","newsLetterSubscriptionEvent","loginEvent","emailAddress","toLowerCase","fireUTMCampaignEvents","URLSearchParams","location","search","param","prefix","d","setTime","getTime","cookie","toGMTString","includes","trim","replace","getUserLocation","ready","_window","geoFields","evaluator","Promise","res","checkForInstance","instance","triggerEvent","category","action","label","dataLayer","gaEventCategory","gaEventAction","gaEventLabel","productsOnPage","products","expectedKeys","every","product","prototype","spSearch","seachTerm","search_term","search_option_click","formatEta","jsDate","_getDayNameAbbr","getMonth","getDate","getDay","hideBVQAButton","interval","shadowRoot","getElementById","setInterval","clearInterval","$button","style","display","lazybvshow","rootMarginThreshold","innerHeight","$bvShow","bvShow","lazyBvShow","initializeBVReviewClick","addEventListener","bvEvent","removeEventListener","from","el","explanations","notInArea","itemOutOfStock","types","idCustomerInState","skuCustomerInState","idCustomerNotInState","handleRestrictions","viewmodel","restrictions","stateMatchingRestrictions","restriction","id","find","p","userDetectedLocation","resolve","subscription","subscribe","dispose","waitForLocation","_handlers","handleLocationRestrictions","shouldShow","message","canShowOrderControl","orderControlHiddenExplanation","byId","state","notById","bySku","checkId","selectedProductId","selectProductFromURLParam","urlParams","sku","selectedProduct","hasAttributes","attributes","attribute","selected","fromEntries","writeOnlyValue","init","valueAccessor","$","on","getProductUnitName","description","convertCostToNumber","str","test","substring","capitalize","toUpperCase","excludeFromPromo","_this","ProductViewModel","dosingInfo","customUnitArr","AMPM_FEEDING_TIME","isSmartPak","isPortionPak","cupsPerMeal","dosingDescription","doseTypes","MAINTENANCE","LOADING","CUSTOM","selectedOption","_createDoseTypeOptionMethodsAndSubscribtions","doseType","bind","doses","selectedFeedingTime","hasOnlyCustomOption","hasCustomOptions","hasMaintenanceOptions","hasLoadingOptions","hasSingleDoseTypeOption","selectedDoseTypeId","isAutoShip","daysSupply","selectedDoseDisplayName","selectedCustomDoseDescription","findDoseTypeById","customRetailOption","info","parseFloat","hasCustomRetailOption","customOptions","customUnitDescription","option","removePluralInstance","unit","removePlural","buildUnitDescription","unitCount","feedingFrequency","day","selectedUnitDescription","customRetailUnitDescription","selectedCustomOption","selectedPriceModel","price","autoShipSavings","priceModel","autoShipDiscount","saving","hasAutoShipSavings","costBeforeAutoShip","current","toFixed","costPerDayBeforeAutoShip","originalCostBeforeAutoShip","original","originalCostAfterAutoShip","hasAutoShipDiscount","percentOff","originalCostPerDayBeforeAutoShip","costAfterAutoShip","costPerDayAfterAutoShip","cost","costPerDay","maintenanceOptions","isTes","hasDaysSupply","daysSupplyInput","customerIsSmartPrimeEligible","isInvalidPerksEligibleItem","smartPak","ui","modal","title","cupsOfProduct","daysSupplyOfProduct","Math","round","increaseQuantity","quantity","decreaseQuantity","packagingOption","displayName","SupplementViewModel","config","_this2","ProductClassViewModel","supplies","compareProductData","autoShipSubscribe","matchingVideo","productImages","unitImages","hasCanineSmartPak","productLabelImage","carouselImages","instructions","hasSmartPak","dosing","querystring","url","parseQueryString","unitImage","getImageByUnitType","SupplementProductViewModel","badges","banner","supplementPileImage","some","hasPortionPak","hasSupplies","hasWeight","hasLoading","hasMaintenance","showBanner","additionalInstructions","hasInstructions","analysis","keyIngredients","nulls","pakProduct","maintenanceDose","maintenanceDoseDescription","hasPerPoundIngredient","ingredients","hasSupportingText","ingredientsText","secondaryHeading","ingredient","needsWhitespaceToWrapInUI","amountPerServing","sortOrder","splice","byProp","selectedVideo","isCanine","recipientType","defaultImage","hasComparisonCharts","currentSelection","disableAddToCart","accountCannotAddCbd","filteredImages","isPerkProduct","selectedImage","doseDisplayOpen","toggleDoseDisplay","formName","formId","checkSubscriptionStatus","recipient","containsCbd","AccountType","getSubscriptionCbdStatus","AccountId","animalType","accountId","promises","addressType","fetch","text","all","_ref2","hasBillingRestriction","hasShippingRestriction","extraInformation","comparisonData","JSON","parse","e","productCompareIds","ComparisonProduct","api","getProductClassDTOList","done","productData","compareProduct","Id","imagePath","ImagePath","Name","Url","canShowFromPriceLabel","dosingDescriptions","selectedDosingDescription","selectedPortionPakOption","paks","dosingDescriptionSorter","showDoseCaption","hasDosingDescription","hasSmartPakOrPortionPak","hasPortionPakWithDosing","postPakURL","selectedPak","findSmartPakableProduct","canShowChangeDose","pak","showDosingOptions","showImage","findPakByDosingDescription","feedingChartData","chartData","dose","formatFeedingChartData","smartPakableProduct","isFarriersFormulaDS","isFarriersFormula","isColiCareEligible","colicare","shouldShowOptInForm","shouldShowMessage","setMessage","policyExists","policyWasDenied","selectedRecipientName","pakRecipients","Status","HTTP_STATUS_OK","Content","getColicarePolicyByRecipientId","PolicyExists","DenialReason","canShowCostPerDay","selectedRecipient","postURL","hide","onlyAts","autoship","updateProductsAutoShip","isEligibleForSubscription","selectImageByProductAttributes","video","videos","showVideo","color","compareColor","addColorToAttribute","imageWithAttributeMatches","pakAtZeroIndex","img","currentAutoShipValue","imageController","_isSmallScreen","matchMedia","_setImageControl","isSmallScreen","productClassViewModel","$imageControl","_activeControl","ImageControlSmall","ImageControlLarge","cdProfileCookie","discipline","PrimaryDiscipline","isPerksEligible","smartPrimeCookie","PerksEligible","PREMADE","starter","nutritionEssential","foundation","seniorPerformance","performance","seniorFoundation","lessStress","productClassData","pathname","pageData","productId","productClassId","itemId","itemNumber","imageManager","requestAnimationFrame","premade","_ref3","_ref4","_ref5","_ref6","_ref7","$content","reviewStars","_ref8","_ref9","attributeString","attributeValues","join","VideoViewModel","thumbnail","RegExp","accountTypes","meAccount","isCanineAccount","account","isEquineAccount","currencyToNumber","sortByMatches","messages","ignoreExclusionMessages","ImageViewModel","Boolean","productClassMessaging","ignoreExclusions","showCAProp65Warning","prop65Subscription","isProp65","selectedAttributes","selectedRecipientNameOption","selectedRecipientNameInput","recipientTypeName","shouldShowAddRecipient","allRecipients","isSPEUser","isLoggedIn","selectedPrice","unwrappedPrice","hasMemberDiscount","freeShipping","hasFreeShipping","hasFreeReturnShipping","setRecipientName","valueHasMutated","addRecipient","nameAlreadyExists","hasRecipients","imagesWithMatchCounts","imageMatches","toggleShouldShowAddRecipient","isEquineBuilder","customerDto","recipients","Accounts","Deleted","IsSpeUser","IsLoggedIn","setInitialRecipient","organizations","organizationText","recentlyViewedProducts","updateProductETA","zip","preferredLocationCookie","PreferredZipCode","PreferenceTypeId","saved","getProductETAUrl","response","estimatedArrivalDate","updateEstimatedArrivalDates","customizationData","getProductClassETAUrl","getProductClassETAData","productAvailabilityModels","availabilityModel","arrayFirst","setProductEstimatedArrivalDate","parseProductClassData","updateRecentlyViewedProducts","organization","hasOwnProp","dropShipHolidayCutoffDate","cutOffDate","month","year","estimatedArrivalDateFormatted","etamessaging","newDropShipMsg","hasDash","dropShipDelay","hasMultiDateRange","hasSingleDateRange","hasOldDropShipMsg","hasDropShipDelay","isBackOrder","backOrderData","isOutOfStock","hasDropShipHolidayCutoff","isInHighHolidayVolumePeriod","today","endYear","getFullYear","buildDropShipDelayMessage","hasShippingScheduleDelay","dropShipDelayMessage","outOfStockMessage","getOutOfStockMessageByWeeks","getOutOfStockMessageWithDate","SmartPrimeEligible","dropShipHolidayCutOffDateMessage","showDropShipHolidayCutoffDate","module","exports","jQuery"],"sourceRoot":""}