{"version":3,"file":"mosoft.estore.min.js","sources":["mosoft.estore.js"],"sourcesContent":["(function (w, factory) {\r\n w.PublicEStore = factory();\r\n}(window, function () {\r\n var $ = window.jQuery;\r\n var _ = window._;\r\n var globalActionChannel = 'estore.action';\r\n var globalCallbackChannel = 'estore.callback';\r\n var globalErrorChannel = 'estore.error';\r\n\r\n var handlerUrl = window.R + 'Handlers/Public/PublicEStore.ashx';\r\n\r\n var internalCache = {};\r\n\r\n var publicEStore = {\r\n name: 'MPEF'\r\n };\r\n\r\n // Check if PubSub engine was loaded\r\n var pubSub = window.PubSub;\r\n if(typeof pubSub !== 'object' || !pubSub) {\r\n console.error('PubSub library is not loaded');\r\n return null;\r\n }\r\n\r\n // Supported action values should always be in lower case!\r\n var supportedActions = {\r\n addToCart: 'addtocart',\r\n removeFromCart: 'removefromcart',\r\n emptyCart: 'emptycart',\r\n updateCartQuantity: 'updatecartquantity',\r\n getCartInfo: 'getcartinfo',\r\n getSiteCartInfo: 'getsitecartinfo',\r\n getDetailedCartInfo: 'getdetailedcartinfo',\r\n getTempOrderLines: 'gettemporderlines',\r\n getBuyFeedbackData: 'getbuyfeedbackdata',\r\n addToShoppingList: 'addtoshoppinglist',\r\n removeFromShoppingList: 'removefromshoppinglist',\r\n addToWishList: 'addtowishlist',\r\n removeFromWishList: 'removefromwishlist',\r\n getShoppingList: 'getshoppinglist',\r\n getShoppingLists: 'getshoppinglists',\r\n addShoppingList: 'addshoppinglist',\r\n updateShoppingList: 'updateshoppinglist',\r\n updateShoppingListItemsQuantity: 'updateshoppinglistitemsquantity',\r\n updateShoppingListItemsDescription: 'updateshoppinglistitemsdescription',\r\n removeShoppingList: 'removeshoppinglist',\r\n getShoppingListInfo: 'getshoppinglistinfo',\r\n getWishListInfo: 'getwishlistinfo',\r\n getEStoreContext: 'getestorecontext',\r\n getCustomerShoppingHistory: 'getcustomershoppinghistory',\r\n reorderShoppingListItems: 'reordershoppinglistitems',\r\n addToOfferRequest: 'addtoofferrequest',\r\n getofferrequestsinfo: 'getofferrequestsinfo',\r\n removefromcartofferrequest: 'removefromcartofferrequest',\r\n emptyofferrequests: 'emptyofferrequests',\r\n setDiscountCodes: 'setdiscountcodes'\r\n };\r\n\r\n var supportedChannels = {\r\n action: {\r\n global: globalActionChannel,\r\n shopCart: globalActionChannel + '.shopcart',\r\n shoppingList: globalActionChannel + '.shoppinglist',\r\n offerRequest: globalActionChannel + '.offerrequest'\r\n },\r\n callback: {\r\n global: globalCallbackChannel,\r\n shopCart: globalCallbackChannel + '.shopcart',\r\n shoppingList: globalCallbackChannel + '.shoppinglist',\r\n offerRequest: globalCallbackChannel + '.offerrequest'\r\n },\r\n error: {\r\n global: globalErrorChannel\r\n }\r\n };\r\n\r\n var actionHandler = function (topic, requestObj, deferred, isPrivate) {\r\n if (typeof requestObj === 'object' && requestObj) {\r\n var privateAction = !!isPrivate;\r\n var contract = _.omit(requestObj, ['callerId', 'transactionId', 'action', 'includeVat']);\r\n var errorTopic = requestObj.callerId ? globalErrorChannel + '.' + requestObj.callerId : globalErrorChannel;\r\n $.ajax({\r\n url: handlerUrl,\r\n type: 'POST',\r\n data: {\r\n callerId: requestObj.callerId,\r\n transactionId: requestObj.transactionId ? requestObj.transactionId : new Date().getTime(),\r\n action: requestObj.action,\r\n contract: JSON.stringify(contract),\r\n includeVat: requestObj.includeVat\r\n },\r\n dataType: 'json',\r\n success: function (response) {\r\n switch (response.status.toLowerCase()) {\r\n case 'ok':\r\n case 'warning':\r\n // Publish message only for the public actions\r\n if (!privateAction) {\r\n var pubTopic = topic.replace(globalActionChannel, globalCallbackChannel) + '.' + response.action;\r\n pubSub.publish(pubTopic, response);\r\n }\r\n // Call custom callback if specified\r\n if (typeof deferred === 'object' && deferred) {\r\n deferred.resolve(response);\r\n }\r\n break;\r\n default:\r\n // Publish message only for the public actions\r\n if (!privateAction) {\r\n pubSub.publish(errorTopic, response);\r\n }\r\n // Call custom error callback if specified\r\n if (typeof deferred === 'object' && deferred) {\r\n deferred.reject(response);\r\n }\r\n break;\r\n }\r\n },\r\n error: function (jqXHR, errorStatus, errorThrown) {\r\n // Since all internal server errors are handled by the backend, this handler will be executed very rare,\r\n // mostly in cases when application is unavailable or there are some network issues\r\n var error = {\r\n action: requestObj.action,\r\n transactionID: requestObj.transactionId,\r\n status: 'Error',\r\n message: errorThrown\r\n };\r\n\r\n if (!privateAction) {\r\n pubSub.publish(errorTopic, error);\r\n }\r\n\r\n // Call custom error callback if specified\r\n if (typeof deferred === 'object' && deferred) {\r\n deferred.reject(error);\r\n }\r\n }\r\n });\r\n }\r\n };\r\n\r\n var getRequiredFieldName = function (action) {\r\n // Determine required field name according to the action\r\n var targetContractField = 'productId';\r\n switch (action.toLowerCase()) {\r\n case supportedActions.removeFromCart:\r\n case supportedActions.getBuyFeedbackData:\r\n targetContractField = 'tempOrderLineId';\r\n break;\r\n case supportedActions.addToShoppingList:\r\n case supportedActions.removeFromShoppingList:\r\n case supportedActions.addToWishList:\r\n case supportedActions.removeFromWishList:\r\n targetContractField = 'productId';\r\n break;\r\n }\r\n\r\n return targetContractField;\r\n };\r\n\r\n var getActionChannel = function (action) {\r\n if (typeof action !== 'string' || !action) {\r\n return '';\r\n }\r\n\r\n var channel = globalActionChannel;\r\n switch (action.toLowerCase()) {\r\n case supportedActions.addToCart:\r\n case supportedActions.removeFromCart:\r\n case supportedActions.emptyCart:\r\n case supportedActions.updateCartQuantity:\r\n case supportedActions.getCartInfo:\r\n case supportedActions.getSiteCartInfo:\r\n case supportedActions.getDetailedCartInfo:\r\n case supportedActions.getTempOrderLines:\r\n case supportedActions.getBuyFeedbackData:\r\n channel = supportedChannels.action.shopCart;\r\n break;\r\n case supportedActions.addToShoppingList:\r\n case supportedActions.removeFromShoppingList:\r\n case supportedActions.addToWishList:\r\n case supportedActions.removeFromWishList:\r\n case supportedActions.getShoppingList:\r\n case supportedActions.getShoppingLists:\r\n case supportedActions.addShoppingList:\r\n case supportedActions.updateShoppingList:\r\n case supportedActions.updateShoppingListItemsQuantity:\r\n case supportedActions.updateShoppingListItemsDescription:\r\n case supportedActions.removeShoppingList:\r\n case supportedActions.getShoppingListInfo:\r\n case supportedActions.getWishListInfo:\r\n case supportedActions.reorderShoppingListItems:\r\n channel = supportedChannels.action.shoppingList;\r\n break;\r\n case supportedActions.addToOfferRequest:\r\n case supportedActions.getofferrequestsinfo:\r\n case supportedActions.removefromcartofferrequest:\r\n case supportedActions.emptyofferrequests:\r\n channel = supportedChannels.action.offerRequest;\r\n break;\r\n }\r\n\r\n return channel;\r\n };\r\n\r\n var preProcessItems = function (items, requiredField) {\r\n if (!items) {\r\n return [];\r\n }\r\n\r\n var prods = $.isArray(items) ? items : [items];\r\n // Some actions does not require the whole contract to be specified into the request\r\n // In this case, assume that if 'items' field is not an array of objects, then it is an array of a single required for the action fields\r\n if (prods.length > 0 && typeof prods[0] !== 'object' && typeof requiredField !== 'undefined') {\r\n // Create item objects based on the passed required field values\r\n prods = $.map(prods, function (value) {\r\n var itemObj = {};\r\n itemObj[requiredField] = value;\r\n return itemObj;\r\n });\r\n }\r\n\r\n // Fix comma float number separator. On the server side InvariantCulture is using while parsing JSON, so we need to replace ',' with '.' for floats\r\n _.each(prods, function (prod) {\r\n if (prod.quantity && prod.quantity.replace) {\r\n prod.quantity = prod.quantity.replace(',', '.');\r\n }\r\n });\r\n\r\n return prods;\r\n };\r\n\r\n var getPromise = function (requestObj, isPrivate) {\r\n return $.Deferred(function (defer) {\r\n actionHandler(getActionChannel(requestObj.action), requestObj, defer, isPrivate);\r\n }).promise();\r\n };\r\n\r\n publicEStore.actions = supportedActions;\r\n\r\n publicEStore.channels = supportedChannels;\r\n\r\n publicEStore.publish = function (channel, data) {\r\n return pubSub.publish(channel, data);\r\n };\r\n\r\n publicEStore.subscribe = function (channel, handler) {\r\n return pubSub.subscribe(channel, handler);\r\n };\r\n\r\n publicEStore.unsubscribe = function (tokenOrFunction) {\r\n return pubSub.unsubscribe(tokenOrFunction);\r\n };\r\n\r\n publicEStore.addToCart = function (items, includeVat, isPrivate) {\r\n var action = supportedActions.addToCart;\r\n var requestObj = { action: action, items: preProcessItems(items), includeVat: includeVat };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.removeFromCart = function (items, isPrivate) {\r\n var action = supportedActions.removeFromCart;\r\n var requestObj = { action: action, items: preProcessItems(items, getRequiredFieldName(action)) };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.emptyCart = function(isPrivate) {\r\n var action = supportedActions.emptyCart;\r\n var requestObj = { action: action };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.updateCartQuantity = function (items, isPrivate) {\r\n var action = supportedActions.updateCartQuantity;\r\n var requestObj = { action: action, items: preProcessItems(items) };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.addToShoppingList = function (shoppingListId, items, includeVat, isPrivate) {\r\n var action = supportedActions.addToShoppingList;\r\n var requestObj = { action: action, items: preProcessItems(items, getRequiredFieldName(action)), shoppingListId: shoppingListId, includeVat: includeVat };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.removeFromShoppingList = function (shoppingListId, items, isPrivate) {\r\n var action = supportedActions.removeFromShoppingList;\r\n var requestObj = { action: action, items: preProcessItems(items, getRequiredFieldName(action)), shoppingListId: shoppingListId };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.addShoppingList = function(name, description, items, includeVat, isPrivate) {\r\n var action = supportedActions.addShoppingList;\r\n var requestObj = { action: action, name: name, description: description, items: preProcessItems(items, getRequiredFieldName(action)), includeVat: includeVat };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.updateShoppingList = function (shoppingListId, name, description, isPrivate) {\r\n var action = supportedActions.updateShoppingList;\r\n var requestObj = { action: action, shoppingListId: shoppingListId, name: name, description: description };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.updateShoppingListItemsQuantity = function (items, isPrivate) {\r\n var action = supportedActions.updateShoppingListItemsQuantity;\r\n var requestObj = { action: action, items: preProcessItems(items) };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.updateShoppingListItemsDescription = function (items, isPrivate) {\r\n var action = supportedActions.updateShoppingListItemsDescription;\r\n var requestObj = { action: action, items: preProcessItems(items) };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.removeShoppingList = function (shoppingListId, isPrivate) {\r\n var action = supportedActions.removeShoppingList;\r\n var requestObj = { action: action, shoppingListId: shoppingListId };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.getShoppingLists = function(isPrivate) {\r\n var action = supportedActions.getShoppingLists;\r\n var requestObj = { action: action };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.addToWishList = function (items, includeVat, isPrivate) {\r\n var action = supportedActions.addToWishList;\r\n var requestObj = { action: action, items: preProcessItems(items, getRequiredFieldName(action)), includeVat: includeVat };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.removeFromWishList = function (items, isPrivate) {\r\n var action = supportedActions.removeFromWishList;\r\n var requestObj = { action: action, items: preProcessItems(items, getRequiredFieldName(action)) };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.getTempOrderLines = function (includeVat, isPrivate) {\r\n var action = supportedActions.getTempOrderLines;\r\n var requestObj = { action: action, includeVat: includeVat };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.getCartInfo = function (includeVat, isPrivate) {\r\n var action = supportedActions.getCartInfo;\r\n var requestObj = { action: action, includeVat: includeVat };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.getSiteCartInfo = function(includeVat, isPrivate, imageWidth, imageMod) {\r\n var action = supportedActions.getSiteCartInfo;\r\n var requestObj = { action: action, includeVat: includeVat, imageWidth: imageWidth, imageMod: imageMod };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.getDetailedCartInfo = function(includeVat, isPrivate, imageWidth, imageMod) {\r\n var action = supportedActions.getDetailedCartInfo;\r\n var requestObj = { action: action, includeVat: includeVat, imageWidth: imageWidth, imageMod: imageMod };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.getShoppingList = function (shoppingListId, includeVat, isPrivate, itemsGroups, buyMode) {\r\n var action = supportedActions.getShoppingList;\r\n var requestObj = { action: action, shoppingListId: shoppingListId, includeVat: includeVat, itemsGroups: itemsGroups, buyMode: buyMode };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.getWishList = function (includeVat, isPrivate) {\r\n return publicEStore.getShoppingList(0, includeVat, isPrivate);\r\n };\r\n\r\n publicEStore.getShoppingListInfo = function (shoppingListId, includeVat, isPrivate) {\r\n var action = supportedActions.getShoppingListInfo;\r\n var requestObj = { action: action, shoppingListId: shoppingListId, includeVat: includeVat };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.getWishListInfo = function (includeVat, isPrivate) {\r\n var action = supportedActions.getWishListInfo;\r\n var requestObj = { action: action, includeVat: includeVat };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.getEStoreContext = function (forceGetFromServer, isPrivate) {\r\n if (!internalCache['estorecontext'] || forceGetFromServer) {\r\n var action = supportedActions.getEStoreContext;\r\n var requestObj = { action: action };\r\n\r\n internalCache['estorecontext'] = getPromise(requestObj, isPrivate);\r\n }\r\n\r\n return internalCache['estorecontext'];\r\n };\r\n\r\n publicEStore.getBuyFeedbackData = function (buyfeedbackItems, isPrivate) {\r\n var action = supportedActions.getBuyFeedbackData;\r\n var requestObj = { action: action, items: preProcessItems(buyfeedbackItems, getRequiredFieldName(action)) };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.getCustomerShoppingHistory = function() {\r\n var action = supportedActions.getCustomerShoppingHistory;\r\n var requestObj = { action: action };\r\n\r\n return getPromise(requestObj);\r\n };\r\n\r\n publicEStore.reorderShoppingListItems = function (items, moveTo, isPrivate) {\r\n var action = supportedActions.reorderShoppingListItems;\r\n var requestObj = { action: action, items: preProcessItems(items), moveTo: moveTo };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.addToOfferRequest = function (items) {\r\n var action = supportedActions.addToOfferRequest;\r\n var requestObj = { action: action, items: preProcessItems(items) };\r\n\r\n return getPromise(requestObj);\r\n };\r\n\r\n publicEStore.getofferrequestsinfo = function () {\r\n var action = supportedActions.getofferrequestsinfo;\r\n var requestObj = { action: action };\r\n\r\n return getPromise(requestObj);\r\n };\r\n\r\n publicEStore.removefromcartofferrequest = function (items) {\r\n var action = supportedActions.removefromcartofferrequest;\r\n var requestObj = { action: action, items: preProcessItems(items) };\r\n\r\n return getPromise(requestObj);\r\n };\r\n\r\n publicEStore.emptyofferrequests = function (isPrivate) {\r\n var action = supportedActions.emptyofferrequests;\r\n var requestObj = { action: action };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.setDiscountCodes = function (dicountCodes, includeVat, isPrivate) {\r\n var action = supportedActions.setDiscountCodes;\r\n var requestObj = { action: action, discountCouponCodes: dicountCodes, includeVat: includeVat };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n // Subscribe to the action channels\r\n var internalSubcriptionToken = pubSub.subscribe(globalActionChannel, actionHandler);\r\n\r\n publicEStore.destroy = function () {\r\n pubSub.unsubscribe(internalSubcriptionToken);\r\n internalCache = null;\r\n };\r\n\r\n return publicEStore;\r\n}));"],"names":["window","PublicEStore","$","jQuery","_","globalActionChannel","globalCallbackChannel","globalErrorChannel","handlerUrl","R","internalCache","publicEStore","name","pubSub","PubSub","console","error","supportedActions","addToCart","removeFromCart","emptyCart","updateCartQuantity","getCartInfo","getSiteCartInfo","getDetailedCartInfo","getTempOrderLines","getBuyFeedbackData","addToShoppingList","removeFromShoppingList","addToWishList","removeFromWishList","getShoppingList","getShoppingLists","addShoppingList","updateShoppingList","updateShoppingListItemsQuantity","updateShoppingListItemsDescription","removeShoppingList","getShoppingListInfo","getWishListInfo","getEStoreContext","getCustomerShoppingHistory","reorderShoppingListItems","addToOfferRequest","getofferrequestsinfo","removefromcartofferrequest","emptyofferrequests","setDiscountCodes","supportedChannels","action","global","shopCart","shoppingList","offerRequest","callback","actionHandler","topic","requestObj","deferred","isPrivate","privateAction","contract","omit","errorTopic","callerId","ajax","url","type","data","transactionId","Date","getTime","JSON","stringify","includeVat","dataType","success","response","status","toLowerCase","pubTopic","replace","publish","resolve","reject","jqXHR","errorStatus","errorThrown","transactionID","message","getRequiredFieldName","targetContractField","getActionChannel","channel","preProcessItems","items","requiredField","prods","isArray","length","map","value","itemObj","each","prod","quantity","getPromise","Deferred","defer","promise","internalSubcriptionToken","actions","channels","subscribe","handler","unsubscribe","tokenOrFunction","shoppingListId","description","imageWidth","imageMod","itemsGroups","buyMode","getWishList","forceGetFromServer","buyfeedbackItems","moveTo","dicountCodes","discountCouponCodes","destroy","factory"],"mappings":"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"}