{"version":3,"file":"main.da72bb9e91f11037c4a5.js","mappings":"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","sources":["webpack://marketplace-webpack/../od.globalize.js","webpack://marketplace-webpack/../od.dates.js","webpack://marketplace-webpack/../common_functions.js","webpack://marketplace-webpack/../od-webtrack.js","webpack://marketplace-webpack/../fancyboxExtensions.js","webpack://marketplace-webpack/./legacy/main/index.js"],"sourcesContent":["(function (OD) {\r\n OD.Globalize = {\r\n\r\n\r\n validators: {\r\n number: function () {\r\n var originalNumber = $.validator.methods.number;\r\n\r\n return function (value, element) {\r\n var translatedDecimal = Globalize.parseFloat(value);\r\n\r\n return OD.Globalize.util.validateLocalizationSeparator(value) && originalNumber.call(this, translatedDecimal, element);\r\n }\r\n },\r\n\r\n min: function () {\r\n var originalMin = $.validator.methods.min;\r\n\r\n return function(value, element, param) {\r\n if (element?.type === \"date\") {\r\n // Enforced by native validation\r\n // MPCD-1225\r\n return true;\r\n }\r\n\r\n var translatedDecimal = Globalize.parseFloat(value);\r\n\r\n return OD.Globalize.util.validateLocalizationSeparator(value) && originalMin.call(this, translatedDecimal, element, param);\r\n }\r\n },\r\n\r\n max: function () {\r\n var originalMax = $.validator.methods.max;\r\n\r\n return function (value, element, param) {\r\n if (element?.type === \"date\") {\r\n // Enforced by native validation\r\n // MPCD-1225\r\n return true;\r\n }\r\n\r\n var translatedDecimal = Globalize.parseFloat(value);\r\n\r\n return OD.Globalize.util.validateLocalizationSeparator(value) && originalMax.call(this, translatedDecimal, element, param);\r\n }\r\n },\r\n\r\n range: function () {\r\n var originalRange = $.validator.methods.range;\r\n\r\n return function (value, element, param) {\r\n var translatedDecimal = Globalize.parseFloat(value);\r\n\r\n return OD.Globalize.util.validateLocalizationSeparator(value) && originalRange.call(this, translatedDecimal, element, param);\r\n };\r\n },\r\n\r\n date: function () {\r\n var originalDate = $.validator.methods.date;\r\n\r\n return function (value, element) {\r\n var date = Globalize.parseDate(value);\r\n\r\n return originalDate.call(this, date, element);\r\n }\r\n }\r\n },\r\n\r\n util: {\r\n localThousandSeparator: function () {\r\n var localNumberWithThousand = Globalize.format(10000, \"n2\");\r\n\r\n var nonNumerics = $.map(localNumberWithThousand.split(''), function (character) {\r\n if (!$.isNumeric(character)) {\r\n return character;\r\n }\r\n });\r\n\r\n return (nonNumerics.length === 0 ? \"\" : nonNumerics[0]);\r\n },\r\n\r\n localDecimalSeparator: function () {\r\n var localNumberWithDecimal = Globalize.format(0.00, \"n2\");\r\n\r\n return localNumberWithDecimal[1];\r\n },\r\n\r\n // Make sure the decimal separator given matches the browser culture's\r\n // If english ('en-US'): then '1.23' is valid, not '1,23'\r\n // If french ('fr') : then '1,23' is valid, not '1.23'\r\n validateLocalizationSeparator: function (amount) {\r\n var givenLocalizationSeparators = $.map(amount.split(''), function (character) {\r\n if (!$.isNumeric(character)) {\r\n return character;\r\n }\r\n });\r\n \r\n // Find the expected localization separator for the browser culture\r\n var decimalLocalizationSeparator = OD.Globalize.util.localDecimalSeparator();\r\n \r\n return givenLocalizationSeparators.length === 0\r\n // The decimal amounts aren't rendered with thousands separators, so valid numbers should only have 0 or 1 non-numeric characters\r\n || (givenLocalizationSeparators.length === 1 && givenLocalizationSeparators[0] === decimalLocalizationSeparator);\r\n },\r\n\r\n // For French, Globalize.culture('fr')\r\n // Given : \"123 456,789\", 2\r\n // Return: \"123456.79\"\r\n roundLocalizedString(decimal, digits) {\r\n var translatedDecimal = Globalize.parseFloat(decimal);\r\n\r\n return translatedDecimal !== NaN\r\n ? translatedDecimal.toLocaleString(window.cultures.browserRequestCulture, { minimumFractionDigits: digits, maximumFractionDigits: digits, useGrouping: false })\r\n : NaN;\r\n }\r\n },\r\n\r\n init: function () {\r\n Globalize.culture(window.cultures.browserRequestCulture);\r\n\r\n $.validator.methods.number = OD.Globalize.validators.number();\r\n $.validator.methods.min = OD.Globalize.validators.min();\r\n $.validator.methods.max = OD.Globalize.validators.max();\r\n $.validator.methods.range = OD.Globalize.validators.range();\r\n $.validator.methods.date = OD.Globalize.validators.date();\r\n }\r\n };\r\n\r\n OD.Globalize.init();\r\n\r\n})(window.OD = window.OD || {});\r\n\r\n","(function (OD) {\r\n OD.MarketplaceDates = function() {\r\n // defaults:\r\n this.browserLanguage = \"en-US\"; // English (US) browser language\r\n this.datepickerDateFormat = \"m/d/yy\"; // en-US datepicker\r\n this.momentJsDateFormat = \"M/D/YYYY\"; // en-US date format (moment.js)\r\n this.extDateFormat = \"MM/DD/YYYY\"; // en-US date format (extjs)\r\n };\r\n\r\n // returns today's date formatted using current browser culture\r\n OD.MarketplaceDates.getTodaysDate = function() {\r\n return moment().format(OD.MarketplaceDates.momentJsDateFormat);\r\n };\r\n\r\n // formats a date using current browser culture\r\n OD.MarketplaceDates.formatDateValue = function(dateVal) {\r\n return moment(dateVal.toString(), OD.MarketplaceDates.momentJsDateFormat)\r\n .format(OD.MarketplaceDates.momentJsDateFormat);\r\n };\r\n\r\n // formats a date using current browser culture\r\n // param format is the input date vals format, can be null\r\n OD.MarketplaceDates.formatDateValueForExt = function(dateVal, format) {\r\n var d = moment(dateVal.toString(), format || OD.MarketplaceDates.extDateFormat);\r\n // if date is not valid, try parsing it without the format specified, such as for 2018-04-01T00:00:00 \r\n if (!d._isValid) {\r\n d = moment(dateVal.toString());\r\n }\r\n \r\n return d.format(OD.MarketplaceDates.extDateFormat);\r\n };\r\n\r\n // returns whether or not a date value (startDate) is prior to another (endDate)\r\n OD.MarketplaceDates.isDateBefore = function(startDate, endDate) {\r\n return moment(startDate, OD.MarketplaceDates.momentJsDateFormat)\r\n .isBefore(moment(endDate, OD.MarketplaceDates.momentJsDateFormat));\r\n };\r\n\r\n // returns whether or not two date values are the same\r\n OD.MarketplaceDates.areDatesTheSame = function(startDate, endDate) {\r\n return moment(endDate, OD.MarketplaceDates.momentJsDateFormat)\r\n .isSame(moment(startDate, OD.MarketplaceDates.momentJsDateFormat));\r\n };\r\n\r\n // returns whether or not a start date/end date combination is within a given amount of days \r\n OD.MarketplaceDates.areDatesWithinRangeOfDays = function(startDate, endDate, maxNumberOfDays) {\r\n var dateFloor = moment(startDate, OD.MarketplaceDates.momentJsDateFormat);\r\n var dateCeiling = moment(startDate, OD.MarketplaceDates.momentJsDateFormat).add(maxNumberOfDays, \"days\");\r\n var withinRange = moment(endDate, OD.MarketplaceDates.momentJsDateFormat).isBetween(dateFloor, dateCeiling);\r\n return withinRange;\r\n };\r\n\r\n // Returns an ISO formatted date without the time portion\r\n OD.MarketplaceDates.getIsoStringExt = function(dateVal) {\r\n var d = moment(dateVal.toString(), OD.MarketplaceDates.extDateFormat);\r\n\r\n // if date is not valid, try parsing it without the format specified, such as for 2018-04-01T00:00:00\r\n if (!d._isValid) {\r\n d = moment(dateVal.toString());\r\n }\r\n\r\n var interpretedDate = d.format('YYYY-MM-DD');\r\n\r\n // In the format of 2019-10-01\r\n return interpretedDate;\r\n };\r\n \r\n})(window.OD = window.OD || {});\r\n","function fnEnableProfileEditing(lblLink,lblCtrl,ctrl,div) {\r\n $(ctrl).css('display', 'inline');\r\n $(lblCtrl).css('display', 'none');\r\n $(ctrl).select();\r\n $(div).css('display', 'inline');\r\n $(lblLink).attr('class', 'profileEditLinkDisabled');\r\n} \r\n\r\nfunction fnDisableProfileEditing(lblLink, lblCtrl, ctrl, div) {\r\n $(ctrl).css('display', 'none');\r\n $(lblCtrl).css('display', 'inline');\r\n $(div).css('display', 'none');\r\n $(lblLink).attr('class', 'profileEditLink');\r\n}\r\n\r\n// DON'T DELETE THIS! THIS IS REQUIRED TO ADDRESS A BUG IN FIREFOX IN WHICH CHECKBOXES RETAIN THEIR CHECKSTATE WHEN THE PAGE IS REFRESHED\r\n// Clear checkstate of all checkboxes\r\nfunction ClearChecks() {\r\n $(\":checkbox:checked\").not(jQuery('.keepCheck')).prop('checked', false);\r\n}\r\n// Restrict user input in a text field\r\n// create as many regular expressions here as you need:\r\nvar digitsOnly = /[1234567890]/g;\r\nvar integerOnly = /[0-9]/g;\r\nvar alphaOnly = /[A-Za-z]/g;\r\nvar usernameOnly = /[0-9A-Za-z\\._-]/g;\r\n\r\n// initialize keypress event for quantity boxes\r\n// HACK: this functionality only works across the board (search results & title details) if restrictInput is fired after triggering the add. At this point I cannot determine why. NB 20130128\r\nfunction initAddToCartQuantityBox() {\r\n // assign onkeypress event handler to all quantity boxes to restrict the user input to numbers\r\n jQuery('.quantityBox').on('keypress', function(event) {\r\n if (event.keyCode == 13) {\r\n // update quantity in webtrack container\r\n updateQuantityForWebtrack($(this));\r\n\r\n //Find the 'Add to cart' button associated with this quantity box & trigger its click event to add the title to the cart\r\n jQuery('.btn.addToCart', $(this).parents('.addToCartForm')).trigger('click');\r\n }\r\n return restrictInput(this, event, digitsOnly);\r\n });\r\n\r\n // update quantity in webtrack collection for associated item id\r\n jQuery('.quantityBox').on('change', function() {\r\n if (typeof ($webtrackContainer) !== 'undefined') {\r\n updateQuantityForWebtrack($(this));\r\n }\r\n });\r\n\r\n var updateQuantityForWebtrack = function(quantBox) {\r\n var itemId = $(quantBox).closest(\".addToCartContainer\").find(\"input[name='ItemIdList']\").val();\r\n if (typeof itemId === \"undefined\") {\r\n // if this is not an add to cart quantity box (update all, etc.) do nothing\r\n return;\r\n }\r\n var quant = $(quantBox).val();\r\n $webtrackContainer.updateTitleQuantity(itemId, quant);\r\n }\r\n\r\n}\r\n\r\n// This function is used in conjunction with the localized .js files in \"/Scripts/Internationalization/\"\r\n// We reference the file by the current language code to get the script level translations (Ex. DynamicTranslations.fr-ca.js)\r\nfunction GetDynamicTranslation(resourceKey) {\r\n\r\n // get resource localezed for this file\r\n var translationDictionary = TranslatedResources;\r\n\r\n // ensure resource key is not null\\empty\r\n if (resourceKey != null && resourceKey.length > 0)\r\n {\r\n // check for a localized translation\r\n if (translationDictionary.hasOwnProperty(resourceKey))\r\n {\r\n return translationDictionary[resourceKey];\r\n }\r\n }\r\n}\r\n\r\n// initialize keypress event for JumpToCartPage boxes\r\nfunction initFilterPageJump() {\r\n // assign onkeypress event handler to all quantity boxes to restrict the user input to numbers\r\n jQuery('#JumpToCartPage').on('keypress', function (event) {\r\n if (event.keyCode == 13) {\r\n return true;\r\n }\r\n\r\n return restrictInput(this, event, integerOnly);\r\n });\r\n}\r\n\r\nfunction restrictInput(myfield, e, restrictionType, checkdot) {\r\n if (!e) var e = window.event;\r\n var code;\r\n if (e.keyCode) code = e.keyCode;\r\n else if (e.which) code = e.which;\r\n var character = String.fromCharCode(code);\r\n\r\n // if user pressed esc... remove focus from field...\r\n if (code == 27) { this.blur(); return false; }\r\n\r\n // ignore if the user presses other keys\r\n // strange because code: 39 is the down key AND ' key...\r\n if (!e.ctrlKey && code != 9 && code != 8 && code != 36 && code != 37 && code != 38 && (code != 39 || (code == 39 && character == \"'\")) && code != 40) {\r\n if (character.match(restrictionType)) {\r\n if (checkdot == \"checkdot\") {\r\n return !isNaN(myfield.value.toString() + character);\r\n } else {\r\n return true;\r\n }\r\n } else {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\nfunction RemoveNonAlphaNumeric(text) {\r\n ///\r\n ///Returns a version of the string input with all spaces removed.\r\n ///\r\n return text.replace(/[^a-zA-Z0-9]/g, '');\r\n}\r\n\r\nfunction basicSearchCheckForIncludedFormats() {\r\n var formatChks = jQuery('.titleformats').find(':checkbox');\r\n var chkCount = 0;\r\n jQuery(formatChks).each(function() {\r\n if ($(this).is(':checked')) {\r\n chkCount++;\r\n }\r\n });\r\n if (chkCount > 0)\r\n jQuery('#SpecifyFormats').val('true');\r\n else\r\n jQuery('#SpecifyFormats').val('false');\r\n}\r\n\r\n\r\nObject.keys = Object.keys || (function () {\r\n var hasOwnProperty = Object.prototype.hasOwnProperty,\r\n hasDontEnumBug = !{ toString: null}.propertyIsEnumerable(\"toString\"),\r\n dontEnums = [\r\n 'toString',\r\n 'toLocaleString',\r\n 'valueOf',\r\n 'hasOwnProperty',\r\n 'isPrototypeOf',\r\n 'propertyIsEnumerable',\r\n 'constructor'\r\n ],\r\n dontEnumsLength = dontEnums.length;\r\n\r\n return function (o) {\r\n if (typeof o != \"object\" && typeof o != \"function\" || o === null)\r\n throw new TypeError(\"Object.keys called on a non-object\");\r\n\r\n var result = [];\r\n for (var name in o) {\r\n if (hasOwnProperty.call(o, name))\r\n result.push(name);\r\n }\r\n\r\n if (hasDontEnumBug) {\r\n for (var i = 0; i < dontEnumsLength; i++) {\r\n if (hasOwnProperty.call(o, dontEnums[i]))\r\n result.push(dontEnums[i]);\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n})();\r\n\r\nif (!Array.prototype.filter) {\r\n Array.prototype.filter = function (fun /*, thisp */) {\r\n \"use strict\";\r\n\r\n if (this == null)\r\n throw new TypeError();\r\n\r\n var t = Object(this);\r\n var len = t.length >>> 0;\r\n if (typeof fun != \"function\")\r\n throw new TypeError();\r\n\r\n var res = [];\r\n var thisp = arguments[1];\r\n for (var i = 0; i < len; i++) {\r\n if (i in t) {\r\n var val = t[i]; // in case fun mutates this\r\n if (fun.call(thisp, val, i, t))\r\n res.push(val);\r\n }\r\n }\r\n\r\n return res;\r\n };\r\n}\r\n\r\nif (!Array.prototype.remove) {\r\n Array.prototype.remove = function (item) {\r\n return jQuery.grep(this, function (value) {\r\n return value != item;\r\n });\r\n };\r\n}\r\n\r\n///Checks that a keypress is a valid one (non-symbol, non-alphabetic). Does NOT check for numeric input\r\nfunction isValidKeyInput(event) {\r\n \r\n // Allow: backspace, delete, tab, escape and enter\r\n if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13\r\n // Allow: Ctrl+A\r\n || (event.keyCode == 65 && event.ctrlKey === true)\r\n // Allow: home, end, left, right\r\n || (event.keyCode >= 35 && event.keyCode <= 39)) {\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n// Returns true if browser is any Chrome version\r\n// Source: stackoverflow.com/questions/27083790/if-or-statement-var-true-then-write-document\r\nfunction isChrome() {\r\n return !!window.chrome && !!window.chrome.webstore;\r\n}\r\n\r\n// rounds to n decimal places, trailing zeros are hidden\r\nfunction round(value, decimals) {\r\n return Math.round(value * Math.pow(10, decimals)) / Math.pow(10, decimals);\r\n}\r\n\r\n// Used for adding an antiforgery token to ajax posts\r\n// Cribbed from stackoverflow.com/a/4074289\r\nfunction AddAntiForgeryToken(data) {\r\n data = data || {};\r\n\r\n data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val();\r\n return data;\r\n};\r\n\r\n/**\r\n * @param {FormData} formData\r\n * @returns {FormData}\r\n */\r\nfunction AddAntiForgeryTokenToForm(formData) {\r\n formData = formData || new FormData();\r\n\r\n formData.append(\"__RequestVerificationToken\", $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val());\r\n\r\n return formData;\r\n}\r\n\r\n\r\n/*\r\nGet a query string value for the given query string variable name, optionally seach the given queryString instead of the\r\npages query string.\r\n*/\r\nfunction GetQueryStringParam(name, queryString) {\r\n if (!queryString) {\r\n queryString = window.location.href;\r\n }\r\n var matchResult = new RegExp('[?|&]' + name + '=([^&#]*)', \"i\").exec(queryString);\r\n return matchResult && matchResult[1] || \"\";\r\n}\r\n\r\nfunction DecodeURIComponentWithSpaces(dataQueryParameter) {\r\n // replace instances of '+' with '%20' so the native decode method will know to use spaces\r\n dataQueryParameter = dataQueryParameter.replace(/[+]+/g, '%20');\r\n\r\n return decodeURIComponent(dataQueryParameter);\r\n}\r\n\r\n// Cribbed from https://stackoverflow.com/questions/46155/how-to-validate-an-email-address-in-javascript\r\nfunction isEmail(email) {\r\n var regex = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return regex.test(email);\r\n}\r\n\r\n// Accepting two arrays, returns a list of matching items\r\n// Cribbed from stackoverflow.com/a/17805318\r\nfunction intersect(list1, list2) {\r\n return $.map(list1, function (el) {\r\n return $.inArray(el, list2) < 0 ? null : el;\r\n });\r\n}\r\n\r\n// this function removes instances of special chars from the passed string\r\n// removes: < > \\ / \r\nfunction cleanHtmlFromTerm(term) {\r\n while (term.search(/<+|>+|\\/+|\\+/) !== -1) {\r\n term = term.replace(/<+|>+|\\/+|\\\\+/, '');\r\n }\r\n term = term.trim();\r\n return term;\r\n}\r\n\r\nfunction isPositiveInt(num) {\r\n return num >>> 0 === parseFloat(num);\r\n}\r\n\r\n// javascript string.format equivalent\r\nString.prototype.format = function () {\r\n var s = this,\r\n i = arguments.length;\r\n\r\n while (i--) {\r\n s = s.replace(new RegExp('\\\\{' + i + '\\\\}', 'gm'), arguments[i]);\r\n }\r\n return s;\r\n};\r\n\r\n// Find the width of inner text\r\n$.fn.textWidth = function () {\r\n var $this = $(this),\r\n text = $this.html(),\r\n width;\r\n\r\n $this.html('{0}'.format(text));\r\n\r\n width = $this.find('> span').width();\r\n\r\n $this.html(text);\r\n\r\n return width;\r\n};\r\n\r\n// Shrinks text that expands past the boundaries of its container width wise\r\n// Warning: only guaranteed to work for elements where raw text is the element's child\r\n$.fn.shrinkFitText = function (args) {\r\n args = args || { }; \r\n args.tolerancePx = args.tolerancePx || 2;\r\n args.minFontSize = args.minFontSize || 9;\r\n\r\n if (!$(this).length) {\r\n return;\r\n }\r\n\r\n var $fullSelection = $(this),\r\n $singleElement = $($fullSelection[0]),\r\n containerWidth = $singleElement.width();\r\n\r\n // If the text already fits inside the container don't do anything\r\n if ($singleElement.textWidth() <= containerWidth) {\r\n return;\r\n }\r\n\r\n var maxFont = $singleElement.css('font-size').replace('px', ''),\r\n minFont = 1;\r\n\r\n // Binary search to an appropriate font size\r\n for (var resizeActionCap = 0; resizeActionCap <= 15; ++resizeActionCap) {\r\n\r\n var sizeDifference = containerWidth - $singleElement.textWidth();\r\n if (0 <= sizeDifference && sizeDifference <= args.tolerancePx) {\r\n break;\r\n }\r\n\r\n var midFont = minFont + (maxFont - minFont) / 2;\r\n $singleElement.css('font-size', midFont);\r\n\r\n if ($singleElement.textWidth() <= containerWidth) {\r\n minFont = midFont;\r\n } else {\r\n maxFont = midFont;\r\n }\r\n }\r\n\r\n $fullSelection.css('font-size', Math.max(args.minFontSize, $singleElement.css('font-size').replace('px', '')));\r\n}\r\n\r\n// j11y.io/javascript/sorting-elements-with-jquery\r\njQuery.fn.sortElements = (function () {\r\n\r\n var sort = [].sort;\r\n\r\n return function (comparator, getSortable) {\r\n\r\n getSortable = getSortable || function () { return this; };\r\n\r\n var placements = this.map(function () {\r\n\r\n var sortElement = getSortable.call(this),\r\n parentNode = sortElement.parentNode,\r\n\r\n // Since the element itself will change position, we have\r\n // to have some way of storing its original position in\r\n // the DOM. The easiest way is to have a 'flag' node:\r\n nextSibling = parentNode.insertBefore(\r\n document.createTextNode(''),\r\n sortElement.nextSibling\r\n );\r\n\r\n return function () {\r\n\r\n if (parentNode === this) {\r\n throw new Error(\r\n \"You can't sort elements if any one is a descendant of another.\"\r\n );\r\n }\r\n\r\n // Insert before flag:\r\n parentNode.insertBefore(this, nextSibling);\r\n // Remove flag:\r\n parentNode.removeChild(nextSibling);\r\n\r\n };\r\n\r\n });\r\n\r\n return sort.call(this, comparator).each(function (i) {\r\n placements[i].call(getSortable.call(this));\r\n });\r\n\r\n };\r\n\r\n})();\r\n\r\n// stackoverflow.com/a/21903119\r\n$.urlParam = function (parameter) {\r\n var pageUrl = decodeURIComponent(window.location.search.substring(1));\r\n var urlVariables = pageUrl.split('&');\r\n\r\n for (var i = 0; i < urlVariables.length; i++) {\r\n var parameterName = urlVariables[i].split('=');\r\n\r\n if (parameterName[0] === parameter) {\r\n return parameterName[1] === undefined ? true : parameterName[1];\r\n }\r\n }\r\n}\r\n\r\n// https://css-tricks.com/snippets/jquery/serialize-form-to-json/\r\n$.serializeMPForm = function(frm) {\r\n var o = {};\r\n var a = $(frm).serializeArray();\r\n $.each(a, function () {\r\n if (o[this.name]) {\r\n if (!o[this.name].push) {\r\n o[this.name] = [o[this.name]];\r\n }\r\n o[this.name].push(this.value || '');\r\n } else {\r\n o[this.name] = this.value || '';\r\n }\r\n });\r\n return o;\r\n}\r\n\r\n/*ReserveId values are guids - same as in ReportHelpers.js*/\r\nfunction parseReserveId(titleId) {\r\n if (titleId.match(/^[{]?[0-9a-fA-F]{8}[-]?([0-9a-fA-F]{4}[-]?){3}[0-9a-fA-F]{12}[}]?$/) != null) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\n/*CrossRefId values are positive integers - same as in ReportHelpers.js*/\r\nfunction parseCrossRefId (titleId) {\r\n return titleId >>> 0 === parseFloat(titleId);\r\n}\r\n\r\nfunction userAgentIsFireFoxOnMac() {\r\n return window.navigator.userAgent.includes(\"Macintosh\") && window.navigator.userAgent.includes(\"Gecko\");\r\n}\r\n\r\n$.circleSpinner = '
'+\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
'\r\n\r\nvar color = {\r\n getRgba: function (color, alpha = 1) {\r\n return 'rgba(' + color + ',' + alpha + ')';\r\n }\r\n};\r\n\r\nexport {\r\nfnEnableProfileEditing,\r\nfnDisableProfileEditing,\r\nClearChecks,\r\ndigitsOnly,\r\nintegerOnly,\r\nalphaOnly,\r\nusernameOnly,\r\ninitAddToCartQuantityBox,\r\nGetDynamicTranslation,\r\ninitFilterPageJump,\r\nrestrictInput,\r\nRemoveNonAlphaNumeric,\r\nbasicSearchCheckForIncludedFormats,\r\nisValidKeyInput,\r\nisChrome,\r\nround,\r\nAddAntiForgeryToken,\r\nGetQueryStringParam,\r\nDecodeURIComponentWithSpaces,\r\nisEmail,\r\nintersect,\r\ncleanHtmlFromTerm,\r\nisPositiveInt,\r\nparseReserveId,\r\nparseCrossRefId,\r\nuserAgentIsFireFoxOnMac,\r\ncolor\r\n}","//Track all product views (cover image click, title link click, etc)\r\nvar initProductClickTrackingEvents = function () {\r\n $($webtrackContainer.productClickElements).on('click', function () {\r\n // get the id of the product from the element's data attribute\r\n var itemId = $(this).attr('data-wtitemid');\r\n var listId = $(this).attr('data-wtlistid');\r\n $webtrackContainer.trackProductClick(itemId, false, listId);\r\n });\r\n}\r\n\r\nvar WebtrackContainer = function() {\r\n var $container = this;\r\n var $wtTitles = [];\r\n\r\n var $productClickElements = '';\r\n var $promoView = {};\r\n\r\n $container.productClickElements = $productClickElements;\r\n\r\n $container.trackingEnabled = true;\r\n\r\n $container.assignProductClickElements = function(elements) {\r\n // don't assign any handlers if no elements passed into assignment\r\n if (typeof elements === \"undefined\" || elements.length == 0) {\r\n return;\r\n }\r\n $container.productClickElements = elements;\r\n initProductClickTrackingEvents();\r\n }\r\n\r\n // represents a single title\r\n var webtrackTitle = function(titleObj) {\r\n var $title = this;\r\n $title.ReserveId = titleObj.ReserveId;\r\n $title.CrossRefId = titleObj.CrossRefId;\r\n $title.DistributionModelId = titleObj.DistributionModelId;\r\n $title.Quantity = titleObj.Quantity;\r\n $title.Position = titleObj.Position;\r\n $title.CartId = titleObj.CartId;\r\n // When a search has been executed, preface search terms with the word \"Search:\" so the 'list' property can easily be distinguished b/t search results and featured list\r\n if (titleObj.SearchTerms != null) {\r\n $title.SearchTerms = 'Search: ' + titleObj.SearchTerms;\r\n } else {\r\n $title.SearchTerms = 'Search: ';\r\n }\r\n $title.ListName = titleObj.ListName;\r\n $title.ListId = titleObj.ListId;\r\n }\r\n\r\n $container.webtrackTitles = $wtTitles;\r\n\r\n // track initial user login\r\n $container.trackLogin = function() {\r\n initDataLayer(trackingEvents.LOGIN);\r\n }\r\n\r\n // initialize the data layer on page load\r\n $container.initPageLoad = function() {\r\n initDataLayer();\r\n }\r\n\r\n // convert one or more titles to js object & add to array\r\n // allowDupes: whether or not to allow a title with the same index (title id) to be added to the title array\r\n $container.addTitles = function(titles, allowDupes) {\r\n if (typeof allowDupes === \"undefined\" || allowDupes === null) {\r\n allowDupes = false;\r\n }\r\n $(titles).each(function() {\r\n var wtTitle = new webtrackTitle(this);\r\n addTitle(wtTitle, allowDupes);\r\n });\r\n\r\n }\r\n // update quantity value for a given title\r\n $container.updateTitleQuantity = function(titleId, quantity) {\r\n var updateTitle = findWebtrackTitle(titleId);\r\n if(updateTitle){\r\n updateTitle.Quantity = quantity;\r\n }\r\n }\r\n\r\n // set the quantity value of each title to a designated value\r\n $container.updateAllTitleQuantities = function(quantity) {\r\n for (var key in $wtTitles) {\r\n $wtTitles[key].value.Quantity = quantity;\r\n }\r\n }\r\n\r\n // track when all title quantities are being updated to a specific value\r\n $container.trackUpdateAllQuantities = function(cartId, quantity, loadSu) {\r\n trackUpdateAllQuantities(cartId, quantity, loadSu);\r\n }\r\n\r\n // update distribution model value for a given title\r\n $container.updateTitleDistributionModel = function(titleId, disModelId) {\r\n var updateTitle = findWebtrackTitle(titleId);\r\n updateTitle.DistributionModelId = disModelId;\r\n }\r\n\r\n // add a single webtrack title to the collection\r\n var addTitle = function(titleObj, allowDupes) {\r\n // only add the title if it doesn't already exist in the array,\r\n // or if duplicates are explicitly allowed\r\n if (allowDupes || !arrayContainsTitle(titleObj.CrossRefId)) {\r\n $wtTitles.push({\r\n key: titleObj.CrossRefId,\r\n value: titleObj\r\n });\r\n }\r\n }\r\n\r\n // returns whether or not a title (by identifier) already exists in the array\r\n var arrayContainsTitle = function(titleId) {\r\n for (var i = 0, len = $wtTitles.length; i < len; i++) {\r\n if ($wtTitles[i].key === titleId)\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n // searches the array for a title by crossRefId\r\n var findWebtrackTitle = function(titleId) {\r\n var title = $.grep($wtTitles, function(e) { return e.key == titleId; });\r\n\r\n return title[0] && title[0].value\r\n ? title[0].value\r\n : null;\r\n }\r\n\r\n var findWebtrackTitleByListId = function(titleId, listId) {\r\n var title = $.grep($wtTitles,\r\n function(e) {\r\n return (e.key == titleId && e.value.ListId == listId);\r\n });\r\n\r\n return title[0] && title[0].value\r\n ? title[0].value\r\n : null;\r\n }\r\n\r\n // track a single title (product view)\r\n $container.trackTitleDetail = function(titleId) {\r\n trackTitleDetails(titleId, $promoView);\r\n }\r\n\r\n\r\n // track a product click\r\n $container.trackProductClick = function(titleId, trackById, listId) {\r\n if (!(typeof trackById === \"undefined\") && (trackById === true)) {\r\n trackTitleById(titleId, trackingEvents.PRODUCTCLICK);\r\n } else {\r\n var title;\r\n if (!(typeof listId === \"undefined\")) {\r\n title = findWebtrackTitleByListId(titleId, listId);\r\n } else {\r\n title = findWebtrackTitle(titleId);\r\n }\r\n\r\n if (title !== null) {\r\n trackProductClick(title);\r\n }\r\n }\r\n }\r\n\r\n // track a collection of title impressions\r\n $container.trackTitleImpressions = function() {\r\n var titles = [];\r\n // dump the titles into an array that can be passed into the controller\r\n for (var key in $wtTitles) {\r\n titles.push($wtTitles[key].value);\r\n }\r\n trackImpressions(titles, $promoView);\r\n }\r\n\r\n // track titles that become visible when a carousel prev/next arrow is clicked\r\n $container.trackCarouselClick = function(titleIdList) {\r\n var titleArray = [];\r\n var idArray = titleIdList.split(',');\r\n // retrieve all titles being viewed/made visible in the carousel and add them to the array to be sent into the tracking call\r\n for (var i = 0; i < idArray.length; i++) {\r\n var title = findWebtrackTitle(idArray[i]);\r\n titleArray.push(title);\r\n }\r\n trackCarouselClick(titleArray);\r\n }\r\n\r\n $container.trackCreateCart = function(cart, callBack) {\r\n trackCreateCart(cart, callBack);\r\n }\r\n\r\n // track add to cart for any number of titles\r\n $container.trackAddToCart = function(titleIdList, cartId, callBack, listId) {\r\n // don't track if adding all search results to cart\r\n if (titleIdList == '*') {\r\n return;\r\n }\r\n var titleArray = [];\r\n var idArray = titleIdList.split(',');\r\n // retrieve all titles being added to the cart and add them to the array to be sent into the tracking call\r\n for (var i = 0; i < idArray.length; i++) {\r\n var title;\r\n // if featured list id is provided, use it to retrieve title\r\n if (!(typeof listId === \"undefined\")) {\r\n title = findWebtrackTitleByListId(idArray[i], listId);\r\n } else {\r\n title = findWebtrackTitle(idArray[i]);\r\n }\r\n if(!title){\r\n return;\r\n }\r\n title.CartId = cartId;\r\n // it's possible to add a title to a cart w/o a quantity value (empty box). In this case, set the quantity value to 1\r\n if (title.Quantity.length == 0 || title.Quantity == 0) {\r\n title.Quantity = 1;\r\n }\r\n titleArray.push(title);\r\n }\r\n\r\n trackAddToCart(titleArray, callBack);\r\n }\r\n\r\n $container.trackRemoveFromCart = function(titleIdList) {\r\n var titleArray = [];\r\n var idArray = titleIdList.split(',');\r\n // retrieve all titles being added to the cart and add them to the array to be sent into the tracking call\r\n for (var i = 0; i < idArray.length; i++) {\r\n var title = findWebtrackTitle(idArray[i]);\r\n titleArray.push(title);\r\n }\r\n trackRemoveFromCart(titleArray);\r\n }\r\n\r\n $container.trackCheckout = function(cartId, step, loadSu) {\r\n trackCheckout(cartId, step, loadSu);\r\n }\r\n $container.trackCheckoutPaymentOption = function(cartName, paymentOption) {\r\n trackCheckoutPaymentOption(cartName, paymentOption);\r\n }\r\n\r\n $container.trackCheckoutTransaction = function(orderId) {\r\n trackCheckoutTransaction(orderId);\r\n }\r\n\r\n $container.trackClassSetCheckout = function(titleId, disModelId, userCount, checkoutStep) {\r\n trackClassSetCheckout(titleId, disModelId, userCount, checkoutStep);\r\n }\r\n\r\n $container.trackPromoView = function() {\r\n // don't push if nothing's in the promoView object (e.g. ad info failed to be loaded)\r\n if ($.isEmptyObject($promoView)) {\r\n return;\r\n }\r\n var response = {\r\n ecommerce: {}\r\n };\r\n response.ecommerce.promoView = $promoView;\r\n // track promoView as an impressionTrack (CRVTWO-7782)\r\n doDataPush(response, true, trackingEvents.IMPRESSIONS);\r\n }\r\n\r\n $container.trackPromoClick = function(adId) {\r\n // don't push if nothing's in the promoView object (e.g. ad info failed to be loaded)\r\n if ($.isEmptyObject($promoView)) {\r\n return;\r\n }\r\n var response = {\r\n ecommerce: {\r\n promoClick: {\r\n promotions: []\r\n }\r\n }\r\n };\r\n\r\n var ad = $.grep($promoView.promotions,\r\n function(e) {\r\n return (e.id == adId);\r\n });\r\n\r\n response.ecommerce.promoClick.promotions.push(ad[0]);\r\n doDataPush(response, true, trackingEvents.PROMOCLICK);\r\n };\r\n\r\n $container.trackGoogleClassroomClick = function(title) {\r\n trackGoogleClassroomClick(title);\r\n };\r\n\r\n $container.trackGeneralPref = function(objForm) {\r\n trackGeneralPreferencesUpdate(objForm);\r\n };\r\n\r\n $container.trackSearchPresets = function (params) {\r\n trackSearchPresetsUpdate(params);\r\n };\r\n\r\n $container.trackEmailPreferences = function(objForm) {\r\n trackEmailPreferencesUpdate(objForm);\r\n };\r\n\r\n $container.trackShelfTalker = function (objForm, titleIds) {\r\n trackShelfTalkerUpdate(objForm, titleIds);\r\n };\r\n};\r\n\r\n// tracking events 'enum'\r\nvar trackingEvents = {\r\n \"DETAIL\": \"detail\",\r\n \"ADDTOCART\": \"addToCart\",\r\n \"REMOVEFROMCART\": \"removeFromCart\",\r\n \"CHECKOUT\": \"checkout\",\r\n \"CHECKOUTOPTION\": \"checkoutOption\",\r\n \"CHECKOUTTRANSACTION\": \"transaction\",\r\n \"PRODUCTCLICK\": \"productClick\",\r\n \"CAROUSELCLICK\": \"carouselClick\",\r\n \"LOGIN\": \"login\",\r\n \"IMPRESSIONS\": \"impressionTrack\",\r\n \"PROMOCLICK\": \"promotionClick\",\r\n \"CREATECART\": \"createCart\",\r\n \"GOOGLECLASSROOM\": \"googleClassClick\",\r\n // preferences update:\r\n \"SEARCHPRESETS\": \"searchPresets\",\r\n \"GENERALPREF\": \"generalPref\",\r\n \"EMAILPREF\": \"emailPref\",\r\n \"SHELFTALKER\": \"shelfTalker\",\r\n \"BULKSHELFTALKER\": \"bulkShelfTalker\"\r\n};\r\n\r\n// initialize datalayer upon page load\r\nvar initDataLayer = function(event) {\r\n $.ajax({\r\n url: '/Webtrack/Init',\r\n async: false,\r\n success: function(response) {\r\n if (response.Success === true) {\r\n doDataPush(response, false, event);\r\n }\r\n }\r\n });\r\n};\r\n\r\n// assemble the components of the datalayer and send to web tracking\r\nvar doDataPush = function(response, includeEcommerce, trackingEvent) {\r\n if (notTrackable()) {\r\n return;\r\n }\r\n\r\n var dataLayer = window.dataLayer = window.dataLayer || [];\r\n var dataPush = {};\r\n // user and content should only be populated once per page load -- do not add to push if they are null\r\n if (!(response.user === null) && !(typeof (response.user) === \"undefined\")) {\r\n dataPush['user'] = response.user;\r\n }\r\n if (!(response.content === null) && !(typeof (response.content) === \"undefined\")) {\r\n dataPush['content'] = response.content;\r\n }\r\n // TODO nbeaudoin: per CRVTWO-7318 we aren't retrieving the 'totCarts' value currently, so do not add session object to push. Possibly to be added at a future date\r\n //dataPush['session'] = response.session;\r\n if (includeEcommerce) {\r\n dataPush['ecommerce'] = response.ecommerce;\r\n }\r\n if (!(typeof trackingEvent === \"undefined\")) {\r\n dataPush['event'] = trackingEvent;\r\n }\r\n\r\n dataLayer.push(dataPush);\r\n};\r\n\r\nvar trackTitleDetails = function(itemId, promoView) {\r\n $.ajax({\r\n url: '/Webtrack/TrackTitleDetails?itemId=' + itemId,\r\n async:\r\n false, // (CRVTWO-7746) title details (productView) tracking must be done synchronously, so that the push occurs before the global GTM container is pushed\r\n dataType: 'json',\r\n success: function(response) {\r\n if (response.Success === true) {\r\n //CRVTWO-9503 if any promo view data exists, add it to the title details ecommerce\r\n if (!($.isEmptyObject(promoView))) {\r\n response.ecommerce.promoView = promoView;\r\n }\r\n //CRVTWO-9503 track title details as impressions event\r\n doDataPush(response, true, trackingEvents.IMPRESSIONS);\r\n }\r\n }\r\n });\r\n};\r\n\r\nvar trackImpressions = function(titles, promoView) {\r\n titles = JSON.stringify({ 'titles': titles });\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: '/Webtrack/TrackImpressions',\r\n data: titles,\r\n async: true,\r\n contentType: 'application/json; charset=utf-8',\r\n dataType: 'json',\r\n success: function(response) {\r\n if (response.Success === true) {\r\n // if promoView objects exist, add them to the ecommerce\r\n if (!($.isEmptyObject(promoView))) {\r\n response.ecommerce.promoView = promoView;\r\n }\r\n doDataPush(response, true, trackingEvents.IMPRESSIONS);\r\n }\r\n }\r\n });\r\n};\r\n\r\nvar trackCarouselClick = function(titles) {\r\n // identical to impression tracking, except that an event is passed in the data layer\r\n titles = JSON.stringify({ 'titles': titles });\r\n $.ajax({\r\n type: \"POST\",\r\n url: '/Webtrack/TrackImpressions',\r\n data: titles,\r\n async: true,\r\n contentType: 'application/json; charset=utf-8',\r\n dataType: 'json',\r\n success: function(response) {\r\n if (response.Success === true) {\r\n doDataPush(response, true, trackingEvents.CAROUSELCLICK);\r\n }\r\n }\r\n });\r\n};\r\n\r\nvar trackProductClick = function(title) {\r\n\r\n title = JSON.stringify({ 'title': title });\r\n $.ajax({\r\n type: \"POST\",\r\n url: '/Webtrack/TrackProductClick',\r\n data: title,\r\n async: true,\r\n contentType: 'application/json; charset=utf-8',\r\n dataType: 'json',\r\n success: function(response) {\r\n if (response.Success === true) {\r\n doDataPush(response, true, trackingEvents.PRODUCTCLICK);\r\n }\r\n }\r\n });\r\n};\r\n\r\n// tracks a title by id, rather than passing a title object\r\nvar trackTitleById = function(titleId, trackingEvent) {\r\n $.ajax({\r\n type: \"GET\",\r\n url: '/Webtrack/TrackProductClickById?id=' + titleId,\r\n async: true,\r\n contentType: 'application/json; charset=utf-8',\r\n dataType: 'json',\r\n success: function(response) {\r\n if (response.Success === true) {\r\n doDataPush(response, true, trackingEvent);\r\n }\r\n }\r\n });\r\n};\r\n\r\n\r\nvar trackUpdateAllQuantities = function(cartId, quantity, loadSu) {\r\n if (!$.isNumeric(cartId) || !$.isNumeric(quantity)) {\r\n return;\r\n }\r\n $.ajax({\r\n type: \"POST\",\r\n url: '/Webtrack/TrackCartUpdateAllQuantities?cartId=' +\r\n cartId +\r\n '&quantity=' +\r\n quantity +\r\n '&loadSimUse=' +\r\n loadSu,\r\n async: true,\r\n contentType: 'application/json; charset=utf-8',\r\n dataType: 'json',\r\n success: function(response) {\r\n if (response.Success === true) {\r\n doDataPush(response, true, trackingEvents.ADDTOCART);\r\n }\r\n }\r\n });\r\n};\r\n\r\nvar trackCreateCart = function(cart, callBack) {\r\n cart = JSON.stringify({ 'cart': cart });\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: \"/Webtrack/TrackCreateCart\",\r\n data: cart,\r\n async: true,\r\n contentType: \"application/json; charset=urt-8\",\r\n dataType: \"json\",\r\n success: function(response) {\r\n if (response.Success === true) {\r\n response.content = {\r\n cartID: response.content.cartID.toString(),\r\n cartName: response.content.cartName,\r\n cartType: response.content.cartType\r\n };\r\n doDataPush(response, false, trackingEvents.CREATECART);\r\n }\r\n },\r\n complete: callBack\r\n });\r\n};\r\n\r\nvar trackAddToCart = function(titles, callBack) {\r\n titles = JSON.stringify({ 'titles': titles });\r\n $.ajax({\r\n type: \"POST\",\r\n url: '/Webtrack/TrackAddToCart',\r\n data: titles,\r\n async: true,\r\n contentType: 'application/json; charset=utf-8',\r\n dataType: 'json',\r\n success: function(response) {\r\n if (response.Success === true) {\r\n doDataPush(response, true, trackingEvents.ADDTOCART);\r\n }\r\n },\r\n complete: callBack\r\n });\r\n};\r\n\r\nvar trackRemoveFromCart = function(titles) {\r\n titles = JSON.stringify({ 'titles': titles });\r\n $.ajax({\r\n type: \"POST\",\r\n url: '/Webtrack/TrackRemoveFromCart',\r\n data: titles,\r\n async: true,\r\n contentType: 'application/json; charset=utf-8',\r\n dataType: 'json',\r\n success: function(response) {\r\n if (response.Success === true) {\r\n doDataPush(response, true, trackingEvents.REMOVEFROMCART);\r\n }\r\n }\r\n });\r\n};\r\n\r\nvar trackCheckout = function(cartId, step, loadSu) {\r\n var trackUrl = '/Webtrack/TrackCheckout?cartId=' + cartId + '&step=' + step;\r\n // if necessary assign flag so controller/provider knows to load SU titles\r\n if (!(typeof loadSu === \"undefined\")) {\r\n trackUrl += '&loadSimUse=true';\r\n }\r\n $.ajax({\r\n type: \"POST\",\r\n // using the step value as part of the track checkout actions name allows for one central 'checkout' function\r\n url: trackUrl,\r\n async: true,\r\n contentType: 'application/json; charset=utf-8',\r\n dataType: 'json',\r\n success: function(response) {\r\n if (response.Success === true) {\r\n doDataPush(response, true, trackingEvents.CHECKOUT);\r\n }\r\n }\r\n });\r\n};\r\n\r\nvar trackCheckoutPaymentOption = function(cartName, option) {\r\n if (notTrackable()) {\r\n return;\r\n }\r\n\r\n // since no server-side data is necessary for this push, just do it directly within the method\r\n var dataLayer = window.dataLayer = window.dataLayer || [];\r\n var dataPush = {};\r\n dataPush[\"event\"] = trackingEvents.CHECKOUTOPTION;\r\n dataPush[\"ecommerce\"] = {\r\n \"checkout_option\": {\r\n \"actionField\": {\r\n \"step\": 2,\r\n \"option\": option, // pay by cc, content credit or bill my account\r\n \"list\": cartName // name of cart being purchased\r\n }\r\n }\r\n };\r\n dataLayer.push(dataPush);\r\n};\r\n\r\nvar trackCheckoutTransaction = function(identifier) {\r\n // call transaction method.\r\n // if success,\r\n // 1: push to datalayer\r\n // 2: call checkout step 3 method\r\n // 2.5: push to datalayer\r\n $.ajax({\r\n url: '/Webtrack/TrackCheckoutTransaction?identifier=' + identifier,\r\n async: true,\r\n contentType: 'application/json; charset=utf-8',\r\n dataType: 'json',\r\n success: function(response) {\r\n if (response.Success === true) {\r\n\r\n doDataPush(response, true, trackingEvents.CHECKOUTTRANSACTION);\r\n // checkout step 3 ('checkout') does not require any sort of data detail, so retrieve what's needed and do the push here\r\n trackCheckoutStep3(response);\r\n }\r\n }\r\n });\r\n};\r\n\r\nvar trackCheckoutStep3 = function(response) {\r\n if (notTrackable()) {\r\n return;\r\n }\r\n\r\n // since no server-side data is necessary for this push, just do it directly\r\n var dataLayer = window.dataLayer = window.dataLayer || [];\r\n var dataPush = {};\r\n dataPush[\"event\"] = trackingEvents.CHECKOUT;\r\n dataPush[\"ecommerce\"] = {\r\n \"checkout\": {\r\n \"actionField\": {\r\n \"step\": 3, // Step 3 - confirmation\r\n \"list\": response.ecommerce.purchase.actionField.list // name of cart purchased\r\n }\r\n }\r\n };\r\n dataLayer.push(dataPush);\r\n};\r\n\r\nvar notTrackable = function() {\r\n if (!$webtrackContainer.trackingEnabled) {\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nvar trackClassSetCheckout = function(itemId, disModelId, userCount, checkoutStep) {\r\n var trackUrl = '/Webtrack/TrackClassSetCheckout?itemId=' +\r\n itemId +\r\n '&disModelId=' +\r\n disModelId +\r\n '&userCount=' +\r\n userCount +\r\n '&checkoutStep=' +\r\n checkoutStep;\r\n $.ajax({\r\n type: \"POST\",\r\n url: trackUrl,\r\n async: true,\r\n contentType: 'application/json; charset=utf-8',\r\n dataType: 'json',\r\n success: function(response) {\r\n if (response.Success === true) {\r\n response.ecommerce.checkout.actionField.step = checkoutStep;\r\n doDataPush(response, true, trackingEvents.CHECKOUT);\r\n }\r\n }\r\n });\r\n};\r\n\r\nvar trackGoogleClassroomClick = function(title) {\r\n // since no server-side data is necessary for this push, just do it directly\r\n var dataLayer = window.dataLayer = window.dataLayer || [];\r\n var dataPush = {};\r\n // datalayer/push defined per CRVTWO-13835\r\n dataPush[\"event\"] = trackingEvents.GOOGLECLASSROOM;\r\n dataPush[\"eventCategory\"] = \"Engagements\";\r\n dataPush[\"eventAction\"] = \"Google Classroom\";\r\n dataPush[\"eventLabel\"] = title;\r\n\r\n dataLayer.push(dataPush);\r\n};\r\n\r\nvar trackGeneralPreferencesUpdate = function (objForm) {\r\n // since no server-side data is necessary for this push (it can be derived from the form), just do it directly\r\n var dataLayer = window.dataLayer = window.dataLayer || [];\r\n var dataPush = {};\r\n // datalayer/push defined per CRVTWO-14443\r\n dataPush[\"event\"] = trackingEvents.GENERALPREF;\r\n dataPush[\"user\"] = {\r\n preferences: {\r\n general: {\r\n language: objForm[\"PreferredLanguageCode\"]\r\n }\r\n }\r\n };\r\n dataLayer.push(dataPush);\r\n};\r\n\r\nvar trackSearchPresetsUpdate = function (params) {\r\n\r\n // since no server-side data is necessary for this push (it can be derived from the form), just do it directly\r\n var dataLayer = window.dataLayer = window.dataLayer || [];\r\n var dataPush = {};\r\n // datalayer/push defined per CRVTWO-14443\r\n dataPush[\"event\"] = trackingEvents.SEARCHPRESETS;\r\n dataPush[\"user\"] = {\r\n preferences: {\r\n search: {\r\n type: params.presetUsage,\r\n\r\n language: params.languages !== undefined ? params.languages.join(\", \") : \"all\",\r\n\r\n format: params.formatTypes !== undefined ? params.formatTypes.join(\", \") : \"all\",\r\n\r\n audience: params.audiences !== undefined ? params.audiences.join(\", \") : \"all\",\r\n\r\n releaseStatus: params.includePreorders !== undefined ? (params.includePreorders === true ? \"preorder\" : \"released\") : \"show all\",\r\n\r\n sort: params.selectedSortBy,\r\n\r\n perpage: params.pageSize,\r\n\r\n hideMature: params.hideMatureContent\r\n }\r\n }\r\n };\r\n dataLayer.push(dataPush);\r\n};\r\n\r\nvar trackEmailPreferencesUpdate = function (objForm) {\r\n var emailObj = {};\r\n /* sync form values to properties GA expects */\r\n /*-- Holds Manager Create Cart */\r\n if (objForm[\"NotificationPreferences[ConsortiumHoldsManagerCreateCartOrOrder]\"] !== undefined) {\r\n emailObj.HoldsManagerCartOrder =\r\n objForm[\"NotificationPreferences[ConsortiumHoldsManagerCreateCartOrOrder]\"];\r\n }\r\n if (objForm[\"NotificationPreferences[AdvantageHoldsManagerCreateCartOrOrder]\"] !== undefined) {\r\n emailObj.AdvHoldsManagerCartOrder =\r\n objForm[\"NotificationPreferences[AdvantageHoldsManagerCreateCartOrOrder]\"];\r\n }\r\n if (objForm[\"NotificationPreferences[SharedHoldsManagerCreateCartOrOrder]\"] !== undefined) {\r\n emailObj.SharedHoldsManagerCartOrder =\r\n objForm[\"NotificationPreferences[SharedHoldsManagerCreateCartOrOrder]\"];\r\n }\r\n /*-- Holds Manager Low Budget */\r\n if (objForm[\"NotificationPreferences[ConsortiumHoldsManagerLowBudget]\"] !== undefined) {\r\n emailObj.HoldsManagerLowBudget =\r\n objForm[\"NotificationPreferences[ConsortiumHoldsManagerLowBudget]\"];\r\n }\r\n if (objForm[\"NotificationPreferences[AdvantageHoldsManagerLowBudget]\"] !== undefined) {\r\n emailObj.AdvHoldsManagerLowBudget =\r\n objForm[\"NotificationPreferences[AdvantageHoldsManagerLowBudget]\"];\r\n }\r\n if (objForm[\"NotificationPreferences[SharedHoldsManagerLowBudget]\"] !== undefined) {\r\n emailObj.SharedHoldsManagerLowBudget =\r\n objForm[\"NotificationPreferences[SharedHoldsManagerLowBudget]\"];\r\n }\r\n /*-- Patron Interest Manager Create Cart */\r\n if (objForm[\"NotificationPreferences[ConsortiumPatronInterestManagerCreateCart]\"] !== undefined) {\r\n emailObj.PatronInterestManagerCreateCart =\r\n objForm[\"NotificationPreferences[ConsortiumPatronInterestManagerCreateCart]\"];\r\n }\r\n if (objForm[\"NotificationPreferences[AdvantagePatronInterestManagerCreateCart]\"] !== undefined) {\r\n emailObj.AdvPatronInterestManagerCreateCart =\r\n objForm[\"NotificationPreferences[AdvantagePatronInterestManagerCreateCart]\"];\r\n }\r\n if (objForm[\"NotificationPreferences[SharedPatronInterestManagerCreateCart]\"] !== undefined) {\r\n emailObj.SharedPatronInterestManagerCreateCart =\r\n objForm[\"NotificationPreferences[SharedPatronInterestManagerCreateCart]\"];\r\n }\r\n /*-- Metered Access Manager Create Cart */\r\n if (objForm[\"NotificationPreferences[ConsortiumMeteredAccessManagerCreateCart]\"] !== undefined) {\r\n emailObj.MeteredAccessManagerCreateCart =\r\n objForm[\"NotificationPreferences[ConsortiumMeteredAccessManagerCreateCart]\"];\r\n }\r\n if (objForm[\"NotificationPreferences[AdvantageMeteredAccessManagerCreateCart]\"] !== undefined) {\r\n emailObj.AdvMeteredAccessManagerCreateCart =\r\n objForm[\"NotificationPreferences[AdvantageMeteredAccessManagerCreateCart]\"];\r\n }\r\n if (objForm[\"NotificationPreferences[SharedMeteredAccessManagerCreateCart]\"] !== undefined) {\r\n emailObj.SharedMeteredAccessManagerCreateCart =\r\n objForm[\"NotificationPreferences[SharedMeteredAccessManagerCreateCart]\"];\r\n }\r\n /*-- RTL Manager Cart */\r\n if (objForm[\"NotificationPreferences[ConsortiumRecommendToLibraryMangerCreateCartOrOrder]\"] !== undefined) {\r\n emailObj.RTLManagerCartOrder =\r\n objForm[\"NotificationPreferences[ConsortiumRecommendToLibraryMangerCreateCartOrOrder]\"];\r\n }\r\n if (objForm[\"NotificationPreferences[AdvantageRecommendToLibraryMangerCreateCartOrOrder]\"] !== undefined) {\r\n emailObj.AdvRTLManagerCartOrder =\r\n objForm[\"NotificationPreferences[AdvantageRecommendToLibraryMangerCreateCartOrOrder]\"];\r\n }\r\n if (objForm[\"NotificationPreferences[SharedRecommendToLibraryMangerCreateCartOrOrder]\"] !== undefined) {\r\n emailObj.SharedRTLManagerCartOrder =\r\n objForm[\"NotificationPreferences[SharedRecommendToLibraryMangerCreateCartOrOrder]\"];\r\n }\r\n /*-- RTL Low Budget */\r\n if (objForm[\"NotificationPreferences[ConsortiumRecommendToLibraryMangerLowBudget]\"] !== undefined) {\r\n emailObj.RTLManagerLowBudget =\r\n objForm[\"NotificationPreferences[ConsortiumRecommendToLibraryMangerLowBudget]\"];\r\n }\r\n if (objForm[\"NotificationPreferences[AdvantageRecommendToLibraryMangerLowBudget]\"] !== undefined) {\r\n emailObj.AdvRTLManagerLowBudget =\r\n objForm[\"NotificationPreferences[AdvantageRecommendToLibraryMangerLowBudget]\"];\r\n }\r\n if (objForm[\"NotificationPreferences[SharedRecommendToLibraryMangerLowBudget]\"] !== undefined) {\r\n emailObj.SharedRTLManagerLowBudget =\r\n objForm[\"NotificationPreferences[SharedRecommendToLibraryMangerLowBudget]\"];\r\n }\r\n /*-- Processing Preorders */\r\n if (objForm[\"NotificationPreferences[ConsortiumProcessingPreorderTitles]\"] !== undefined) {\r\n emailObj.ProcessingPreorder =\r\n objForm[\"NotificationPreferences[ConsortiumProcessingPreorderTitles]\"];\r\n }\r\n if (objForm[\"NotificationPreferences[AdvantageProcessingPreorderTitles]\"] !== undefined) {\r\n emailObj.AdvProcessingPreorder =\r\n objForm[\"NotificationPreferences[AdvantageProcessingPreorderTitles]\"];\r\n }\r\n /*-- CPC Budget */\r\n if (objForm[\"NotificationPreferences[ConsortiumCostPerCircBudgetAlert]\"] !== undefined) {\r\n emailObj.CostPerCircBudgetAlert =\r\n objForm[\"NotificationPreferences[ConsortiumCostPerCircBudgetAlert]\"];\r\n }\r\n if (objForm[\"NotificationPreferences[AdvantageCostPerCircBudgetAlert]\"] !== undefined) {\r\n emailObj.AdvCostPerCircBudgetAlert =\r\n objForm[\"NotificationPreferences[AdvantageCostPerCircBudgetAlert]\"];\r\n }\r\n /*-- Sim Use Expiration */\r\n if (objForm[\"NotificationPreferences[ConsortiumSimultaneousUsePlanRenwal]\"] !== undefined) {\r\n emailObj.SimUsePlanRenwal =\r\n objForm[\"NotificationPreferences[ConsortiumSimultaneousUsePlanRenwal]\"];\r\n }\r\n if (objForm[\"NotificationPreferences[AdvantageSimultaneousUsePlanRenwal]\"] !== undefined) {\r\n emailObj.AdvSimUsePlanRenwal =\r\n objForm[\"NotificationPreferences[AdvantageSimultaneousUsePlanRenwal]\"];\r\n }\r\n /*-- Cancelled Preorders */\r\n if (objForm[\"NotificationPreferences[ConsortiumCanceledPreorders]\"] !== undefined) {\r\n emailObj.CanceledPreorders =\r\n objForm[\"NotificationPreferences[ConsortiumCanceledPreorders]\"];\r\n }\r\n if (objForm[\"NotificationPreferences[AdvantageCanceledPreorders]\"] !== undefined) {\r\n emailObj.AdvCanceledPreorders =\r\n objForm[\"NotificationPreferences[AdvantageCanceledPreorders]\"];\r\n }\r\n /*-- Titles Auto-weeded */\r\n if (objForm[\"NotificationPreferences[ConsortiumTitlesWereAutomaticallyWeeded]\"] !== undefined) {\r\n emailObj.TitlesAutoWeeded =\r\n objForm[\"NotificationPreferences[ConsortiumTitlesWereAutomaticallyWeeded]\"];\r\n }\r\n /*-- MARC Express */\r\n if (objForm[\"NotificationPreferences[ConsortiumMarcExpressOrderDelivery]\"] !== undefined) {\r\n emailObj.MarcExpOrderDelivery =\r\n objForm[\"NotificationPreferences[ConsortiumMarcExpressOrderDelivery]\"];\r\n }\r\n if (objForm[\"NotificationPreferences[AdvantageMarcExpressOrderDelivery]\"] !== undefined) {\r\n emailObj.AdvMarcExpOrderDelivery =\r\n objForm[\"NotificationPreferences[AdvantageMarcExpressOrderDelivery]\"];\r\n }\r\n if (objForm[\"NotificationPreferences[SharedMarcExpressOrderDelivery]\"] !== undefined) {\r\n emailObj.SharedMarcExpOrderDelivery =\r\n objForm[\"NotificationPreferences[SharedMarcExpressOrderDelivery]\"];\r\n }\r\n\r\n // since no server-side data is necessary for this push (it can be derived from the form), just do it directly\r\n var dataLayer = window.dataLayer = window.dataLayer || [];\r\n var dataPush = {};\r\n // datalayer/push defined per CRVTWO-14443\r\n dataPush[\"event\"] = trackingEvents.EMAILPREF;\r\n dataPush[\"user\"] = {\r\n preferences: {\r\n email: emailObj\r\n }\r\n };\r\n\r\n dataLayer.push(dataPush);\r\n};\r\n\r\nvar trackShelfTalkerUpdate = function (objForm, titleIds) {\r\n // since no server-side data is necessary for this push (it can be derived from the form), just do it directly\r\n var dataLayer = window.dataLayer = window.dataLayer || [];\r\n var dataPush = {};\r\n\r\n // combine message type/shelf talker option when appropriate\r\n var messageType = \"Unavailability explainer\";\r\n if (objForm[\"MessageType\"] !== \"UnavailabilityExplanation\") {\r\n messageType = \"ST: \" + objForm[\"ShelfTalkerOption\"];\r\n }\r\n\r\n // datalayer/push defined per CRVTWO-14652\r\n if (titleIds.split(\";\").length > 1) {\r\n dataPush[\"event\"] = trackingEvents.BULKSHELFTALKER;\r\n } else {\r\n dataPush[\"event\"] = trackingEvents.SHELFTALKER;\r\n }\r\n dataPush[\"titleID\"] = titleIds;\r\n dataPush[\"noteType\"] = messageType;\r\n // HasAttributeInput is false when no attribute exists, but is an array when attribute info does exist, so check that and flatten to true/false\r\n dataPush[\"attribute\"] = objForm[\"HasAttributeInput\"] === \"false\" ? false : true;\r\n // format dates as US since they will only be referenced by OD\r\n if ((objForm[\"ScheduledStart\"] || '').length > 0) {\r\n dataPush[\"scheduleStart\"] =\r\n moment(objForm[\"ScheduledStart\"], OD.MarketplaceDates.momentJsDateFormat).format(\"M/D/YYYY\");\r\n } else {\r\n dataPush[\"scheduleStart\"] = \"\";\r\n }\r\n if ((objForm[\"ScheduledEnd\"] || '').length > 0) {\r\n dataPush[\"scheduleEnd\"] =\r\n moment(objForm[\"ScheduledEnd\"], OD.MarketplaceDates.momentJsDateFormat).format(\"M/D/YYYY\");\r\n } else {\r\n dataPush[\"scheduleEnd\"] = \"\";\r\n }\r\n\r\n dataLayer.push(dataPush);\r\n};\r\n\r\n\r\n\r\nexport {\r\n initProductClickTrackingEvents,\r\n trackingEvents,\r\n initDataLayer,\r\n doDataPush,\r\n trackTitleDetails,\r\n trackImpressions,\r\n trackCarouselClick,\r\n trackProductClick,\r\n trackTitleById,\r\n trackUpdateAllQuantities,\r\n trackCreateCart,\r\n trackAddToCart,\r\n trackRemoveFromCart,\r\n trackCheckout,\r\n trackCheckoutPaymentOption,\r\n trackCheckoutTransaction,\r\n trackCheckoutStep3,\r\n notTrackable,\r\n trackClassSetCheckout,\r\n trackGoogleClassroomClick,\r\n trackGeneralPreferencesUpdate,\r\n trackSearchPresetsUpdate,\r\n trackEmailPreferencesUpdate,\r\n trackShelfTalkerUpdate,\r\n WebtrackContainer\r\n}","/* eslint-disable */\r\n\r\n$(document).ready(function() {\r\n\r\n // at page load wire up modal links to use an iframe fancybox\r\n wireUpFancyBoxModals($(document));\r\n\r\n // Setup fancy input click events\r\n $(document).on('keydown', '.focusableCheckboxIconInput, .focusableRadioIconInput, .focusableRotatableIcon', function (event) {\r\n var keycode = (event.keyCode ? event.keyCode : event.which);\r\n\r\n // enter or space triggers click listeners on input\r\n if (keycode === 13 || keycode === 32) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n\r\n var $iconInput = $(this);\r\n\r\n if ($iconInput.hasClass('focusableRadioIconInput')) {\r\n $iconInput.siblings('input[type=radio]').trigger('click');\r\n } else {\r\n $iconInput.trigger('click');\r\n }\r\n\r\n $iconInput.focus();\r\n }\r\n });\r\n});\r\n\r\nfunction wireUpFancyBoxModals($container) {\r\n // wire up modal links to use an iframe lightbox:\r\n $('a[rel|=modal]', $container).each(function () {\r\n var $target = $(this);\r\n $target.fancybox(GetFancyboxArgumentObject($target));\r\n\r\n // Hack amb: Without overloading the pos function the user would be able to scroll\r\n // using the mouse wheel to other modals available on the page (CRVTWO-7009)\r\n $.fancybox.pos = function () { }\r\n });\r\n}\r\n\r\nfunction GetFancyboxArgumentObject($target) {\r\n if ($target === undefined) {\r\n $target = null;\r\n }\r\n\r\n // Override the defaults if attributes are available\r\n var width = $target == null ? 350 : $target.attr(\"data-modal-width\");\r\n var height = $target == null ? 100 : $target.attr(\"data-modal-height\");\r\n var type = $target == null ? 'iframe' : $target.attr(\"data-modal-type\");\r\n var borderless = $target == null\r\n ? false\r\n : ($target.attr(\"data-modal-borderless\") || '').toLowerCase() === 'true';\r\n\r\n var noOuterPadding = $target == null\r\n ? false\r\n : ($target.attr(\"data-modal-noOuterPadding\") || '').toLowerCase() === 'true';\r\n var showCloseButton = $target == null\r\n ? false\r\n : ($target.attr(\"data-modal-showCloseButton\") || \"\").toLowerCase() === \"true\";\r\n \r\n width = (!width || isNaN(width) ? 350 : parseInt(width));\r\n height = (!height || isNaN(height) ? 100 : parseInt(height));\r\n type = !type ? 'iframe' : type;\r\n\r\n var fancyboxArgumentObject = {\r\n 'type': type,\r\n 'scrolling': 'no',\r\n 'margin': 0,\r\n 'padding': 0,\r\n 'width': width,\r\n 'height': height,\r\n 'speedIn': 0,\r\n 'autoSize': true,\r\n 'showNavArrows': false,\r\n 'hideOnOverlayClick': false, // disable clicking outside the dialog to close fancybox\r\n 'enableEscapeButton': false, // disable hitting the Esc key to close fancybox\r\n 'onStart': function(links, index) {\r\n\r\n if ($('#fancybox-outer .mp-fancybox-loading').length >= 0) {\r\n $('.mp-fancybox-loading').remove();\r\n }\r\n\r\n // Add a fancy box loading symbol to the modal\r\n $('#fancybox-outer').append('
 
');\r\n\r\n /* for the updated borderless workflow, temporarily hide fancybox content */\r\n /* in the case of loading mulitiple modals in a row, this will prevent protruding smaller divs */\r\n if (this.borderless || borderless) {\r\n $('#fancybox-wrap').addClass('fancybox__borderless-rounded');\r\n $('#fancybox-content').addClass('invisible');\r\n } else {\r\n $('#fancybox-wrap').removeClass('fancybox__borderless-rounded');\r\n }\r\n \r\n this.hiddenOverlay\r\n ? $('#fancybox-overlay, #fancybox-wrap').addClass('fancybox__overlay-hidden')\r\n : $('#fancybox-overlay, #fancybox-wrap').removeClass('fancybox__overlay-hidden');\r\n\r\n this.noCenter\r\n ? $('#fancybox-wrap').addClass('fancybox__centering--none')\r\n : $('#fancybox-wrap').removeClass('fancybox__centering--none');\r\n\r\n this.noOuterPadding || noOuterPadding\r\n ? $('#fancybox-wrap').addClass('fancybox__outer-padding--none')\r\n : $('#fancybox-wrap').removeClass('fancybox__outer-padding--none');\r\n\r\n this.positionFixedSW\r\n ? $('#fancybox-wrap').addClass('fancybox__position-fixed--south-west')\r\n : $('#fancybox-wrap').removeClass('fancybox__position-fixed--south-west');\r\n \r\n this.showCloseButton = $target == null || $target.attr(\"data-modal-showCloseButton\") === undefined ? this.showCloseButton : showCloseButton;\r\n\r\n // return false to cancel empty links (e.g. disabled links):\r\n return !$(links[index]).hasClass('disabled') && (links[index].toString().length > 0);\r\n },\r\n 'onComplete': function () {\r\n $.fancybox.center(0);\r\n\r\n // This will be present for setting `this.borderless = true`\r\n $('#fancybox-content').removeClass('invisible');\r\n\r\n if ($('#fancybox-frame').length) {\r\n //automatically set the height of the iframe lightbox:\r\n $('#fancybox-frame').on(\"load\", function () {\r\n $('.mp-fancybox-loading').remove();\r\n\r\n var $tar = $(this);\r\n setTimeout(function () {\r\n $('#fancybox-content').height($tar.contents().find('body').height());\r\n $.fancybox.center(0);\r\n },\r\n 30);\r\n });\r\n } else {\r\n // if this isn't in an iframe the modal will load once the ajax results are returned,\r\n // so we won't need to wait to remove the loading spinner\r\n $('.mp-fancybox-loading').remove();\r\n }\r\n }\r\n };\r\n\r\n var isNoClose = $target != null ? $target.attr('data-modal-no-close') : false;\r\n if (isNoClose && isNoClose.toLowerCase() == 'true') {\r\n fancyboxArgumentObject.hideOnOverlayClick = false;\r\n fancyboxArgumentObject.enableEscapeButton = false;\r\n fancyboxArgumentObject.showCloseButton = false;\r\n } else {\r\n fancyboxArgumentObject.hideOnOverlayClick = true;\r\n fancyboxArgumentObject.enableEscapeButton = true;\r\n fancyboxArgumentObject.showCloseButton = true;\r\n }\r\n return fancyboxArgumentObject;\r\n}\r\n\r\n/* eslint-enable */\r\n\r\nexport {\r\n wireUpFancyBoxModals,\r\n GetFancyboxArgumentObject\r\n}","import \"../../../od.globalize.js\";\r\nimport \"../../../od.dates.js\";\r\n\r\nimport {\r\n fnEnableProfileEditing,\r\n fnDisableProfileEditing,\r\n ClearChecks,\r\n digitsOnly,\r\n integerOnly,\r\n alphaOnly,\r\n usernameOnly,\r\n initAddToCartQuantityBox,\r\n GetDynamicTranslation,\r\n initFilterPageJump,\r\n restrictInput,\r\n RemoveNonAlphaNumeric,\r\n basicSearchCheckForIncludedFormats,\r\n isValidKeyInput,\r\n isChrome,\r\n round,\r\n AddAntiForgeryToken,\r\n GetQueryStringParam,\r\n DecodeURIComponentWithSpaces,\r\n isEmail,\r\n intersect,\r\n cleanHtmlFromTerm,\r\n isPositiveInt,\r\n parseReserveId,\r\n parseCrossRefId,\r\n userAgentIsFireFoxOnMac,\r\n color,\r\n} from \"../../../common_functions.js\";\r\n\r\nimport {\r\n initProductClickTrackingEvents,\r\n trackingEvents,\r\n initDataLayer,\r\n doDataPush,\r\n trackTitleDetails,\r\n trackImpressions,\r\n trackCarouselClick,\r\n trackProductClick,\r\n trackTitleById,\r\n trackUpdateAllQuantities,\r\n trackCreateCart,\r\n trackAddToCart,\r\n trackRemoveFromCart,\r\n trackCheckout,\r\n trackCheckoutPaymentOption,\r\n trackCheckoutTransaction,\r\n trackCheckoutStep3,\r\n notTrackable,\r\n trackClassSetCheckout,\r\n trackGoogleClassroomClick,\r\n trackGeneralPreferencesUpdate,\r\n trackSearchPresetsUpdate,\r\n trackEmailPreferencesUpdate,\r\n trackShelfTalkerUpdate,\r\n WebtrackContainer,\r\n} from \"../../../od-webtrack.js\";\r\n\r\nimport {\r\n wireUpFancyBoxModals,\r\n GetFancyboxArgumentObject,\r\n} from \"../../../fancyboxExtensions.js\";\r\n\r\n//common_functions\r\nwindow.fnEnableProfileEditing = fnEnableProfileEditing;\r\nwindow.fnDisableProfileEditing = fnDisableProfileEditing;\r\nwindow.ClearChecks = ClearChecks;\r\nwindow.digitsOnly = digitsOnly;\r\nwindow.integerOnly = integerOnly;\r\nwindow.alphaOnly = alphaOnly;\r\nwindow.usernameOnly = usernameOnly;\r\nwindow.initAddToCartQuantityBox = initAddToCartQuantityBox;\r\nwindow.GetDynamicTranslation = GetDynamicTranslation;\r\nwindow.initFilterPageJump = initFilterPageJump;\r\nwindow.restrictInput = restrictInput;\r\nwindow.RemoveNonAlphaNumeric = RemoveNonAlphaNumeric;\r\nwindow.basicSearchCheckForIncludedFormats = basicSearchCheckForIncludedFormats;\r\nwindow.isValidKeyInput = isValidKeyInput;\r\nwindow.isChrome = isChrome;\r\nwindow.round = round;\r\nwindow.AddAntiForgeryToken = AddAntiForgeryToken;\r\nwindow.GetQueryStringParam = GetQueryStringParam;\r\nwindow.DecodeURIComponentWithSpaces = DecodeURIComponentWithSpaces;\r\nwindow.isEmail = isEmail;\r\nwindow.intersect = intersect;\r\nwindow.cleanHtmlFromTerm = cleanHtmlFromTerm;\r\nwindow.isPositiveInt = isPositiveInt;\r\nwindow.parseReserveId = parseReserveId;\r\nwindow.parseCrossRefId = parseCrossRefId;\r\nwindow.userAgentIsFireFoxOnMac = userAgentIsFireFoxOnMac;\r\nwindow.color = color;\r\n\r\n// od-webtrrack\r\nwindow.initProductClickTrackingEvents = initProductClickTrackingEvents;\r\nwindow.trackingEvents = trackingEvents;\r\nwindow.initDataLayer = initDataLayer;\r\nwindow.doDataPush = doDataPush;\r\nwindow.trackTitleDetails = trackTitleDetails;\r\nwindow.trackImpressions = trackImpressions;\r\nwindow.trackCarouselClick = trackCarouselClick;\r\nwindow.trackProductClick = trackProductClick;\r\nwindow.trackTitleById = trackTitleById;\r\nwindow.trackUpdateAllQuantities = trackUpdateAllQuantities;\r\nwindow.trackCreateCart = trackCreateCart;\r\nwindow.trackAddToCart = trackAddToCart;\r\nwindow.trackRemoveFromCart = trackRemoveFromCart;\r\nwindow.trackCheckout = trackCheckout;\r\nwindow.trackCheckoutPaymentOption = trackCheckoutPaymentOption;\r\nwindow.trackCheckoutTransaction = trackCheckoutTransaction;\r\nwindow.trackCheckoutStep3 = trackCheckoutStep3;\r\nwindow.notTrackable = notTrackable;\r\nwindow.trackClassSetCheckout = trackClassSetCheckout;\r\nwindow.trackGoogleClassroomClick = trackGoogleClassroomClick;\r\nwindow.trackGeneralPreferencesUpdate = trackGeneralPreferencesUpdate;\r\nwindow.trackSearchPresetsUpdate = trackSearchPresetsUpdate;\r\nwindow.trackEmailPreferencesUpdate = trackEmailPreferencesUpdate;\r\nwindow.trackShelfTalkerUpdate = trackShelfTalkerUpdate;\r\nwindow.WebtrackContainer = WebtrackContainer;\r\n\r\n// fancybox\r\nwindow.wireUpFancyBoxModals = wireUpFancyBoxModals;\r\nwindow.GetFancyboxArgumentObject = GetFancyboxArgumentObject;\r\n"],"names":["OD","Globalize","validators","number","originalNumber","$","validator","methods","value","element","translatedDecimal","parseFloat","util","validateLocalizationSeparator","call","this","min","originalMin","param","type","max","originalMax","range","originalRange","date","originalDate","parseDate","localThousandSeparator","localNumberWithThousand","format","nonNumerics","map","split","character","isNumeric","length","localDecimalSeparator","amount","givenLocalizationSeparators","decimalLocalizationSeparator","roundLocalizedString","decimal","digits","NaN","toLocaleString","window","cultures","browserRequestCulture","minimumFractionDigits","maximumFractionDigits","useGrouping","init","culture","MarketplaceDates","browserLanguage","datepickerDateFormat","momentJsDateFormat","extDateFormat","getTodaysDate","moment","formatDateValue","dateVal","toString","formatDateValueForExt","d","_isValid","isDateBefore","startDate","endDate","isBefore","areDatesTheSame","isSame","areDatesWithinRangeOfDays","maxNumberOfDays","dateFloor","dateCeiling","add","isBetween","getIsoStringExt","hasOwnProperty","hasDontEnumBug","dontEnums","dontEnumsLength","sort","digitsOnly","integerOnly","restrictInput","myfield","e","restrictionType","checkdot","code","event","keyCode","which","String","fromCharCode","blur","ctrlKey","match","isNaN","Object","keys","prototype","propertyIsEnumerable","o","TypeError","result","name","push","i","Array","filter","fun","t","len","res","thisp","arguments","val","remove","item","jQuery","grep","s","replace","RegExp","fn","textWidth","width","$this","text","html","find","shrinkFitText","args","tolerancePx","minFontSize","$fullSelection","$singleElement","containerWidth","maxFont","css","minFont","resizeActionCap","sizeDifference","midFont","Math","sortElements","comparator","getSortable","placements","sortElement","parentNode","nextSibling","insertBefore","document","createTextNode","Error","removeChild","each","urlParam","parameter","urlVariables","decodeURIComponent","location","search","substring","parameterName","undefined","serializeMPForm","frm","a","serializeArray","circleSpinner","initProductClickTrackingEvents","$webtrackContainer","productClickElements","on","itemId","attr","listId","trackProductClick","trackingEvents","initDataLayer","ajax","url","async","success","response","Success","doDataPush","includeEcommerce","trackingEvent","notTrackable","dataLayer","dataPush","user","content","ecommerce","trackTitleDetails","promoView","dataType","isEmptyObject","IMPRESSIONS","trackImpressions","titles","JSON","stringify","data","contentType","trackCarouselClick","CAROUSELCLICK","title","PRODUCTCLICK","trackTitleById","titleId","trackUpdateAllQuantities","cartId","quantity","loadSu","ADDTOCART","trackCreateCart","cart","callBack","cartID","cartName","cartType","CREATECART","complete","trackAddToCart","trackRemoveFromCart","REMOVEFROMCART","trackCheckout","step","trackUrl","CHECKOUT","trackCheckoutPaymentOption","option","CHECKOUTOPTION","trackCheckoutTransaction","identifier","CHECKOUTTRANSACTION","trackCheckoutStep3","purchase","actionField","list","trackingEnabled","trackClassSetCheckout","disModelId","userCount","checkoutStep","checkout","trackGoogleClassroomClick","GOOGLECLASSROOM","trackGeneralPreferencesUpdate","objForm","GENERALPREF","preferences","general","language","trackSearchPresetsUpdate","params","SEARCHPRESETS","presetUsage","languages","join","formatTypes","audience","audiences","releaseStatus","includePreorders","selectedSortBy","perpage","pageSize","hideMature","hideMatureContent","trackEmailPreferencesUpdate","emailObj","HoldsManagerCartOrder","AdvHoldsManagerCartOrder","SharedHoldsManagerCartOrder","HoldsManagerLowBudget","AdvHoldsManagerLowBudget","SharedHoldsManagerLowBudget","PatronInterestManagerCreateCart","AdvPatronInterestManagerCreateCart","SharedPatronInterestManagerCreateCart","MeteredAccessManagerCreateCart","AdvMeteredAccessManagerCreateCart","SharedMeteredAccessManagerCreateCart","RTLManagerCartOrder","AdvRTLManagerCartOrder","SharedRTLManagerCartOrder","RTLManagerLowBudget","AdvRTLManagerLowBudget","SharedRTLManagerLowBudget","ProcessingPreorder","AdvProcessingPreorder","CostPerCircBudgetAlert","AdvCostPerCircBudgetAlert","SimUsePlanRenwal","AdvSimUsePlanRenwal","CanceledPreorders","AdvCanceledPreorders","TitlesAutoWeeded","MarcExpOrderDelivery","AdvMarcExpOrderDelivery","SharedMarcExpOrderDelivery","EMAILPREF","email","trackShelfTalkerUpdate","titleIds","messageType","BULKSHELFTALKER","SHELFTALKER","wireUpFancyBoxModals","$container","$target","fancybox","GetFancyboxArgumentObject","pos","height","borderless","toLowerCase","noOuterPadding","showCloseButton","fancyboxArgumentObject","parseInt","links","index","append","addClass","removeClass","hiddenOverlay","noCenter","positionFixedSW","hasClass","center","$tar","setTimeout","contents","isNoClose","hideOnOverlayClick","enableEscapeButton","ready","keycode","stopPropagation","preventDefault","$iconInput","siblings","trigger","focus","fnEnableProfileEditing","lblLink","lblCtrl","ctrl","div","select","fnDisableProfileEditing","ClearChecks","not","prop","alphaOnly","usernameOnly","initAddToCartQuantityBox","updateQuantityForWebtrack","parents","quantBox","closest","quant","updateTitleQuantity","GetDynamicTranslation","resourceKey","translationDictionary","TranslatedResources","initFilterPageJump","RemoveNonAlphaNumeric","basicSearchCheckForIncludedFormats","formatChks","chkCount","is","isValidKeyInput","isChrome","chrome","webstore","round","decimals","pow","AddAntiForgeryToken","__RequestVerificationToken","GetQueryStringParam","queryString","href","matchResult","exec","DecodeURIComponentWithSpaces","dataQueryParameter","isEmail","test","intersect","list1","list2","el","inArray","cleanHtmlFromTerm","term","trim","isPositiveInt","num","parseReserveId","parseCrossRefId","userAgentIsFireFoxOnMac","navigator","userAgent","includes","color","getRgba","alpha","WebtrackContainer","$wtTitles","$promoView","assignProductClickElements","elements","webtrackTitle","titleObj","$title","ReserveId","CrossRefId","DistributionModelId","Quantity","Position","CartId","SearchTerms","ListName","ListId","webtrackTitles","trackLogin","LOGIN","initPageLoad","addTitles","allowDupes","wtTitle","addTitle","updateTitle","findWebtrackTitle","updateAllTitleQuantities","key","updateTitleDistributionModel","arrayContainsTitle","findWebtrackTitleByListId","trackTitleDetail","trackById","trackTitleImpressions","titleIdList","titleArray","idArray","paymentOption","orderId","trackPromoView","trackPromoClick","adId","promoClick","promotions","ad","id","PROMOCLICK","trackGeneralPref","trackSearchPresets","trackEmailPreferences","trackShelfTalker"],"sourceRoot":""}