/* Minification failed. Returning unminified contents.
(763,63-64): run-time error JS1195: Expected expression: .
(763,101-102): run-time error JS1003: Expected ':': )
(764,17-21): run-time error JS1009: Expected '}': this
(764,17-21): run-time error JS1006: Expected ')': this
(784,9-15): run-time error JS1194: Expected ',' or ']': $scope
(784,9-15): run-time error JS1006: Expected ')': $scope
(1057,5-6): run-time error JS1002: Syntax error: }
(1057,6-7): run-time error JS1195: Expected expression: ]
(1057,7-8): run-time error JS1195: Expected expression: )
*/
;(function () {
$.productData = {
};
$.productAppLoad = function (data) {
$.productData = data;
};
$.productUtility = {
productImage:function(id){
if (res.IMAGESERVER) {
return res.IMAGESERVER + '/images/products/large/pdt_' + id + '.png?width=200&height=200';
}
else {
return "https://img.creative.com/images/products/large/pdt_" + id + ".png?width=200&height=200";
}
},
productSmallImage: function (id) {
if (res.IMAGESERVER) {
return res.IMAGESERVER + '/images/products/large/pdt_' + id + '.png?width=120&height=120';
}
else {
return "https://img.creative.com/images/products/large/pdt_" + id + ".png?width=120&height=120";
}
}
};
})();;
"use strict";
angular.module('ngProductApp', ['ngAnimate', 'ngMaterial', 'ngMessages', 'ngStorage', 'angular-creative'])
.config(['$mdThemingProvider', '$locationProvider', function ($mdThemingProvider, $locationProvider) {
$mdThemingProvider.theme('default')
.primaryPalette('red', {
'default': '800'
})
.accentPalette(
'blue', {
'default': '500'
});
$locationProvider.html5Mode(false);
}])
.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
}])
.directive('productbuy', function () {
return {
restrict: 'AE',
scope: true,
templateUrl: '/ngtemplate/?v=Buy'
}
})
.directive('productnotify', function () {
return {
restrict: 'AE',
scope: true,
templateUrl: '/ngtemplate/?v=Notify'
}
})
.directive('productredirect', function () {
return {
restrict: 'AE',
scope: true,
templateUrl: '/ngtemplate/?v=BuyRedirect'
}
})
;
;
"use strict";
var Country = {
India: 91,
Malaysia: 60
}
var StoreType = {
UK: 12,
US: 15,
RSUAsia: 19,
GR: 41
}
var ProductType = {
SXFICarrier: 23448,
AirV3: 23725
}
var urlAppend = (window.location.href.indexOf('localhost') !== -1) ? '/landingpages' : '';
var urlAPI = (window.location.href.indexOf('localhost') !== -1 || window.location.href.indexOf('stage') !== -1) ? '.stage' : '';
var subscribe = [2, 3, 4, 15, 29, 36, 38, 42].includes(global.store.id);
angular.module('ngProductApp')
.controller('NotifyButtonController', ['$scope', 'ngApp', '$location', '$timeout', function ($scope, ngApp, $location, $timeout) {
$scope.show = false;
$scope.ngApp = ngApp;
$scope.uiInit = function (pid) {
//use this scriptlet to show notify me form on pdt page or do geolocation detection on specific country
// if (pid === ProductType.SXFICarrier && (global.store.id === StoreType.RSUAsia))
// {
// if (global.store.id === StoreType.RSUAsia) {
// $.get(urlAppend + "/apis/geolocate/" + window.location.search, function(data, status) {
// this.show = (status === "success" && data.ipCountry === Country.India);
// })
// }
// }
// if (pid === ProductType.AirV3 && (global.store.id === StoreType.GR)) {
// this.show = true;
// }
}
$scope.notify = function () {
ngApp.showBtnLoading();
location.hash = '#buy';
}
$scope.base = location.pathname;
}])
.controller('BuyButtonController', ['$rootScope', '$scope', 'ngApp', '$location', '$timeout', '$http', function ($rootScope, $scope, ngApp, $location, $timeout, $http) {
$scope.listPrice = '';
$scope.price = '';
$scope.loading = true;
$scope.show = false;
$scope.cartItemCount = 0;
$scope.cartTotal = 0;
$scope.ngApp = ngApp;
$scope.uiInit = function () {
if ($.productData) {
var pdata = $.productData.Products[0];
for (var i = 1; i < $.productData.Products.length; i++)
if ($.productData.Products[i].Price > 0.01 && pdata.Price > $.productData.Products[i].Price)
pdata = $.productData.Products[i];
if (pdata.Price > 0.01) {
this.price = pdata.PriceFormat;
if (pdata.Price < pdata.ListPrice) this.listPrice = pdata.ListPriceFormat;
this.lowestPrice = pdata.LowestPriceFormat;
this.cartItemCount = $.productData.CartItemCount;
this.cartTotal = $.productData.CartTotal;
this.loading = false;
this.show = true;
if (global.store.id === 38) $scope.convertMYR(pdata.Price);
// special handling for Japan
if (global.store.id === 2) this.price += '(税込)';
}
}
}
$scope.buy = function () {
ngApp.showBtnLoading();
location.hash = '#buy';
$rootScope.$broadcast('buybtn:click', {});
}
$scope.convertMYR = function (price) {
if (price && price > 0)
$http({
method: 'GET',
url: '/products/getcurrencyexchangerate?baseCurrency=USD&symbols=MYR'
}).success(function (data) {
if (data && data.rate && data.rate > 0) {
$scope.price += ' (~RM' + parseInt(price * data.rate).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,') + ')';
}
});
}
$scope.base = location.pathname;
}]).controller('NotifyController', ['$scope', '$location', '$http', '$timeout', 'ngApp', '$element', function ($scope, $location, $http, $timeout, ngApp, $element) {
$scope.productid = 0;
$scope.productName = '';
$scope.notifyData = {
name: '',
email: '',
phone: '',
countryid: '1',
showCountry: false,
showPhone: false,
marketingEmail: subscribe,
thirdPartyEmail: false
};
$scope.countries = [{ "name": "Afghanistan", "id": "93" },
{ "name": "Albania", "id": "355" },
{ "name": "Algeria", "id": "213" },
{ "name": "Andorra", "id": "376" },
{ "name": "Angola", "id": "244" },
{ "name": "Anguilla", "id": "101" },
{ "name": "Antigua", "id": "102" },
{ "name": "Argentina", "id": "54" },
{ "name": "Armenia", "id": "374" },
{ "name": "Aruba", "id": "297" },
{ "name": "Australia", "id": "61" },
{ "name": "Austria", "id": "43" },
{ "name": "Azerbaijan", "id": "994" },
{ "name": "Bahamas", "id": "103" },
{ "name": "Bahrain", "id": "973" },
{ "name": "Bangladesh", "id": "880" },
{ "name": "Barbados", "id": "104" },
{ "name": "Belarus", "id": "375" },
{ "name": "Belgium", "id": "32" },
{ "name": "Belize", "id": "501" },
{ "name": "Benin", "id": "229" },
{ "name": "Bermuda", "id": "105" },
{ "name": "Bhutan", "id": "975" },
{ "name": "Bolivia", "id": "591" },
{ "name": "Bosnia and Herzegovina", "id": "387" },
{ "name": "Botswana", "id": "267" },
{ "name": "Brazil", "id": "55" },
{ "name": "British Virgin Islands", "id": "106" },
{ "name": "Brunei", "id": "673" },
{ "name": "Bulgaria", "id": "359" },
{ "name": "Burkina Faso", "id": "226" },
{ "name": "Burundi", "id": "257" },
{ "name": "Cameroon", "id": "237" },
{ "name": "Canada", "id": "107" },
{ "name": "Cape Verde Islands", "id": "238" },
{ "name": "Central African Republic", "id": "236" },
{ "name": "Chad", "id": "235" },
{ "name": "Chile", "id": "56" },
{ "name": "China", "id": "86" },
{ "name": "Christmas Island", "id": "672" },
{ "name": "Cocos-Keeling Islands", "id": "6101" },
{ "name": "Colombia", "id": "57" },
{ "name": "Comoros", "id": "2691" },
{ "name": "Congo", "id": "242" },
{ "name": "Congo, Democratic Republic of the", "id": "243" },
{ "name": "Costa Rica", "id": "506" },
{ "name": "Croatia", "id": "385" },
{ "name": "Cuba", "id": "53" },
{ "name": "Cyprus", "id": "357" },
{ "name": "Czech Republic", "id": "420" },
{ "name": "Denmark", "id": "45" },
{ "name": "Djibouti", "id": "253" },
{ "name": "Dominica", "id": "109" },
{ "name": "Ecuador", "id": "593" },
{ "name": "Egypt", "id": "20" },
{ "name": "El Salvador", "id": "503" },
{ "name": "Equatorial Guinea", "id": "240" },
{ "name": "Eritrea", "id": "291" },
{ "name": "Estonia", "id": "372" },
{ "name": "Ethiopia", "id": "251" },
{ "name": "Falkland Islands", "id": "500" },
{ "name": "Faroe Islands", "id": "298" },
{ "name": "Fiji Islands", "id": "679" },
{ "name": "Finland", "id": "358" },
{ "name": "Former Yugoslav Republic of Macedonia", "id": "389" },
{ "name": "France", "id": "33" },
{ "name": "French Guiana", "id": "594" },
{ "name": "French Polynesia", "id": "689" },
{ "name": "Gabon", "id": "241" },
{ "name": "Gambia", "id": "220" },
{ "name": "Georgia", "id": "995" },
{ "name": "Germany", "id": "49" },
{ "name": "Ghana", "id": "233" },
{ "name": "Gibraltar", "id": "350" },
{ "name": "Greece", "id": "30" },
{ "name": "Greenland", "id": "299" },
{ "name": "Grenada", "id": "111" },
{ "name": "Guadeloupe", "id": "590" },
{ "name": "Guam", "id": "124" },
{ "name": "Guatemala", "id": "502" },
{ "name": "Guinea", "id": "224" },
{ "name": "Guinea-Bissau", "id": "245" },
{ "name": "Guyana", "id": "592" },
{ "name": "Haiti", "id": "509" },
{ "name": "Honduras", "id": "504" },
{ "name": "Hong Kong SAR, PRC", "id": "852" },
{ "name": "Hungary", "id": "36" },
{ "name": "Iceland", "id": "354" },
{ "name": "India", "id": "91" },
{ "name": "Indonesia", "id": "62" },
{ "name": "Iran", "id": "98" },
{ "name": "Iraq", "id": "964" },
{ "name": "Ireland", "id": "353" },
{ "name": "Israel", "id": "972" },
{ "name": "Italy", "id": "39" },
{ "name": "Jamaica", "id": "112" },
{ "name": "Japan", "id": "81" },
{ "name": "Jordan", "id": "962" },
{ "name": "Kazakhstan", "id": "705" },
{ "name": "Kenya", "id": "254" },
{ "name": "Kiribati Republic", "id": "686" },
{ "name": "Korea (North)", "id": "850" },
{ "name": "Korea (Republic of)", "id": "82" },
{ "name": "Kuwait", "id": "965" },
{ "name": "Kyrgyz Republic", "id": "706" },
{ "name": "Lao P.D.R.", "id": "856" },
{ "name": "Latvia", "id": "371" },
{ "name": "Lebanon", "id": "961" },
{ "name": "Lesotho", "id": "266" },
{ "name": "Liberia", "id": "231" },
{ "name": "Libya", "id": "218" },
{ "name": "Liechtenstein", "id": "4175" },
{ "name": "Lithuania", "id": "370" },
{ "name": "Luxembourg", "id": "352" },
// {"name": "Macau", "id": "853"},
{ "name": "Madagascar", "id": "261" },
{ "name": "Malawi", "id": "265" },
{ "name": "Malaysia", "id": "60" },
{ "name": "Maldives", "id": "960" },
{ "name": "Mali", "id": "223" },
{ "name": "Malta", "id": "356" },
{ "name": "Marshall Islands", "id": "692" },
{ "name": "Martinique", "id": "596" },
{ "name": "Mauritania", "id": "222" },
{ "name": "Mauritius", "id": "230" },
{ "name": "Mayotte Island", "id": "269" },
{ "name": "Mexico", "id": "52" },
{ "name": "Micronesia, Federated States of", "id": "691" },
{ "name": "Moldova", "id": "373" },
{ "name": "Monaco", "id": "377" },
{ "name": "Mongolia", "id": "976" },
{ "name": "Montserrat", "id": "113" },
{ "name": "Morocco", "id": "212" },
{ "name": "Mozambique", "id": "258" },
{ "name": "Myanmar", "id": "95" },
{ "name": "Namibia", "id": "264" },
{ "name": "Nepal", "id": "977" },
{ "name": "Netherlands", "id": "31" },
{ "name": "Netherlands Antilles", "id": "599" },
{ "name": "New Caledonia", "id": "687" },
{ "name": "New Zealand", "id": "64" },
{ "name": "Nicaragua", "id": "505" },
{ "name": "Niger", "id": "227" },
{ "name": "Nigeria", "id": "234" },
{ "name": "Niue", "id": "683" },
{ "name": "Norfolk Island", "id": "6722" },
{ "name": "Norway", "id": "47" },
{ "name": "Oman", "id": "968" },
{ "name": "Pakistan", "id": "92" },
{ "name": "Palau", "id": "680" },
{ "name": "Panama", "id": "507" },
{ "name": "Papua New Guinea", "id": "675" },
{ "name": "Paraguay", "id": "595" },
{ "name": "Peru", "id": "51" },
{ "name": "Philippines", "id": "63" },
{ "name": "Poland", "id": "48" },
{ "name": "Portugal", "id": "351" },
{ "name": "Puerto Rico", "id": "121" },
{ "name": "Qatar", "id": "974" },
{ "name": "Reunion Island", "id": "262" },
{ "name": "Romania", "id": "40" },
{ "name": "Russia", "id": "7" },
{ "name": "Rwanda", "id": "250" },
{ "name": "Saint Kitts & Nevis Anguilla", "id": "114" },
{ "name": "Saint Lucia", "id": "122" },
{ "name": "San Marino", "id": "378" },
{ "name": "Sao Tome and Principe", "id": "239" },
{ "name": "Saudi Arabia", "id": "966" },
{ "name": "Senegal Republic", "id": "221" },
{ "name": "Serbia and Montenegro", "id": "381" },
{ "name": "Seychelle Islands", "id": "248" },
{ "name": "Sierra Leone", "id": "232" },
{ "name": "Singapore", "id": "65" },
{ "name": "Slovak Republic", "id": "421" },
{ "name": "Slovenia", "id": "386" },
{ "name": "Solomon Islands", "id": "677" },
{ "name": "Somalia", "id": "252" },
{ "name": "South Africa", "id": "27" },
{ "name": "Spain", "id": "34" },
{ "name": "Sri Lanka", "id": "94" },
{ "name": "St. Pierre and Miquelon", "id": "508" },
{ "name": "St. Vincent and the Grenadines", "id": "116" },
{ "name": "Sudan", "id": "249" },
{ "name": "Suriname", "id": "597" },
{ "name": "Swaziland", "id": "268" },
{ "name": "Sweden", "id": "46" },
{ "name": "Switzerland", "id": "41" },
{ "name": "Syria", "id": "963" },
// {"name": "Taiwan", "id": "886"},
{ "name": "Tajikistan", "id": "708" },
{ "name": "Tanzania", "id": "255" },
{ "name": "Thailand", "id": "66" },
{ "name": "Togo", "id": "228" },
{ "name": "Tokelau", "id": "690" },
{ "name": "Tonga", "id": "676" },
{ "name": "Trinidad and Tobago", "id": "117" },
{ "name": "Turkey", "id": "90" },
{ "name": "Turks and Caicos Islands", "id": "118" },
{ "name": "Ukraine", "id": "380" },
{ "name": "United Arab Emirates", "id": "971" },
{ "name": "United Kingdom", "id": "44" },
{ "name": "United States of America", "id": "1" },
{ "name": "United States Virgin Islands", "id": "123" },
{ "name": "Uruguay", "id": "598" },
{ "name": "Uzbekistan", "id": "711" },
{ "name": "Vatican City", "id": "379" },
{ "name": "Venezuela", "id": "58" },
{ "name": "Vietnam", "id": "84" },
{ "name": "Yemen", "id": "967" },
{ "name": "Zambia", "id": "260" },
{ "name": "Zimbabwe", "id": "263,1,2" }];
$scope.noScroll = function (on) {
if (on) {
$("html").addClass("no-scroll");
}
else {
$("html").removeClass("no-scroll");
}
};
$scope.reLocate = function () {
var select = $element.find('md-select');
var container = $("#" + select.attr('aria-owns'))
var top = select.offset().top - window.scrollY
container.css('top', top);
$timeout(function () {
container.css('top', top);
}, 100)
};
$scope.notifyMeLoading = false;
$scope.uiInit = function (pid, pname) {
$scope.productid = pid;
$scope.productName = pname;
if (pid === ProductType.SXFICarrier && (global.store.id === StoreType.US || global.store.id === StoreType.RSUAsia)) {
$scope.notifyData.showCountry = true; // To list out only for US
if (global.store.id === StoreType.RSUAsia) {
$.get(urlAppend + "/apis/geolocate/" + window.location.search, function (data, status) {
if (status === "success" && data.ipCountry === Country.India) {
$scope.notifyData.showPhone = true;
$scope.notifyData.countryid = Country.India;
}
})
$scope.notifyData.showCountry = false;
}
}
}
$scope.close = function () { }
$scope.notifyMeSubmit = function () {
if ($scope.notifyData.showCountry == true) {
if (!$scope.notifyData.name || !$scope.notifyData.email || !$scope.notifyData.countryid) return;
if ($scope.productid <= 0) return;
$scope.notifyMeLoading = true;
$http({
method: 'GET',
url: $.cartUtility.secureUrl('/notifyme/add?Name=' + $scope.notifyData.name + '&Email=' + $scope.notifyData.email + '&Phone=' + $scope.notifyData.phone + '&ProductID=' + $scope.productid + '&MarketingEmail=' + $scope.notifyData.marketingEmail + '&ThirdPartyEmail=' + $scope.notifyData.thirdPartyEmail + '&CountryId=' + $scope.notifyData.countryid)
}
).success(function (data) {
$scope.notifyMeLoading = false;
if (data.status == 'success') $scope.messageType = 'success';
else $scope.messageType = 'error';
notificationBar.show('' + data.message.replace("{0}", $scope.productName), 4000);
});
} else {
if (!$scope.notifyData.name || !$scope.notifyData.email) return;
if ($scope.productid <= 0) return;
$scope.notifyMeLoading = true;
$http({
method: 'GET',
url: $.cartUtility.secureUrl('/notifyme/add?Name=' + $scope.notifyData.name + '&Email=' + $scope.notifyData.email + '&Phone=' + $scope.notifyData.phone + '&ProductID=' + $scope.productid + '&MarketingEmail=' + $scope.notifyData.marketingEmail + '&ThirdPartyEmail=' + $scope.notifyData.thirdPartyEmail + '&CountryId=' + $scope.notifyData.countryid)
}
).success(function (data) {
$scope.notifyMeLoading = false;
if (data.status == 'success') $scope.messageType = 'success';
else $scope.messageType = 'error';
notificationBar.show('' + data.message.replace("{0}", $scope.productName), 4000);
});
}
}
}])
.controller('ProductRedirectController', ['$rootScope', '$scope', '$location', '$http', '$timeout', 'ngApp', function ($rootScope, $scope, $location, $http, $timeout, ngApp) {
$scope.productName = '';
$scope.image = '';
$scope.storeUrl = '';
$scope.productUrl = '';
$rootScope.$on('buybtn:click', function (e) {
$timeout(function () { $scope.redirect($scope.productUrl); }, 1000 * 8);
});
$scope.uiInit = function () {
$scope.refresh();
}
$scope.refresh = function () {
if ($.productData) {
$scope.productName = $.productData.MasterProductName;
$scope.image = $.productUtility.productSmallImage($.productData.MasterProductID);
}
}
$scope.infoInit = function (storeUrl) {
$scope.storeUrl = storeUrl;
$scope.productUrl = location.href.replace(/(.*?)\/p\//, storeUrl + '/p/');
}
$scope.redirect = function (url) {
console.log(url)
if (url && url.length > 0 && location.href.indexOf('#buy-menu') === -1 && location.href.indexOf('#buy') > 0) location.href = url;
}
$scope.close = function () { }
}])
.controller('ProductController', ['$scope', '$location', '$http', '$timeout', 'ngApp', function ($scope, $location, $http, $timeout, ngApp) {
$scope.height = 0;
$scope.top = 0;
$scope.price = '';
$scope.priceMYR = '';
$scope.listPrice = '';
$scope.lowestPrice = '';
$scope.available = '';
$scope.memberPoints = 0;
$scope.productid = 0;
$scope.image = '';
$scope.productName = '';
$scope.added = false;
$scope.addtocartDisabled = true;
$scope.loading = false;
$scope.cartTotal = '';
$scope.cartItemCount = 0;
$scope.freeShipThreshold = '';
$scope.message = '';
$scope.messageType = '';
$scope.freeItems = [];
$scope.hasFreeItems = false;
$scope.freeItemRecord = [];
$scope.freeItemAutoAdded = false;
$scope.crossSell = [];
$scope.cartItemID = 0;
$scope.promoMessage = [];
$scope.notifyMe = false;
$scope.showNotifyMe = false;
$scope.notifyData = {
name: '',
email: '',
marketingEmail: subscribe,
thirdPartyEmail: false
}
$scope.notifyMeLoading = false;
$scope.shippingData = {
freeShipping: false,
shippingCharge: ''
}
$scope.staff = false;
$scope.membershipEnable = true;
$scope.selectFreeItemMessage = false;
$scope.modelNo = '';
$scope.res = window.res;
$scope.isCLESite = false;
$scope.uiInit = function () {
if (typeof global.store.customer === 'object' && global.store.customer.email.length > 0) {
$scope.notifyData.name = global.store.customer.firstname + " " + global.store.customer.lastname;
$scope.notifyData.email = global.store.customer.email;
}
$scope.initSelector();
$scope.refresh();
$.cartUtility.productSelect($.productData, $.productData.SelectedID);
const storeId = global.store.id;
const isCLE = (
(storeId >= 7 && storeId <= 12) ||
(storeId === 37) ||
(storeId >= 39 && storeId <= 41));
this.isCLESite = isCLE;
}
$scope.initSelector = function () {
if ($.productData) {
if ($.productData.SelectedID <= 0
&& $.productData.Products.length > 0
) $.productData.SelectedID = $.productData.Products[0].ProductID;
var needToChange = false;
var targetID = 0;
var included = false;
for (var i = 0; i < $.productData.Products.length; i++) {
if ($.productData.SelectedID == $.productData.Products[i].ProductID) {
included = true;
if (!$.productData.Products[i].InStock) needToChange = true;
}
if ($.productData.Products[i].InStock) targetID = $.productData.Products[i].ProductID;
}
if ((needToChange && targetID > 0) || !included) $.productData.SelectedID = targetID;
}
}
$scope.refresh = function () {
if ($.productData) {
for (var i = 0; i < $.productData.Products.length; i++) {
if ($.productData.SelectedID == $.productData.Products[i].ProductID) {
$scope.setupProduct($.productData.Products[i]);
break;
}
}
$scope.cartTotal = $.productData.CartTotal;
$scope.cartItemCount = $.productData.CartItemCount;
if ($.productData.FreeShipThreshold > 0)
$scope.freeShipThreshold = $.productData.FreeShipThresholdFormat;
if ($scope.CartItemCount > 0) {
$scope.updateCartItem($scope.CartItemCount);
}
$scope.staff = $.productData.Staff;
$scope.membershipEnable = $.productData.MembershipEnable;
$scope.productName = $.productData.MasterProductName;
}
}
$scope.close = function () { }
$scope.addToCart = function () {
if ($scope.productid && $scope.productid > 0) {
if ($scope.added) {
location.href = '/shoppingcart/#/shipping';
return;
}
//check free item is selected
if ($scope.freeItems != null && $scope.freeItems.length > 0) {
for (var r = 0; r < $scope.freeItemRecord.length; r++) {
if ($scope.freeItemRecord[r].pid == 0) {
$scope.selectFreeItemMessage = true;
$timeout(function () { $scope.selectFreeItemMessage = false; }, 1000 * 5);
return;
}
}
}
$scope.loading = true;
$scope.addtocartDisabled = true;
var url = '/shoppingcart/addproduct/?productid=' + $scope.productid;
if ($scope.freeItemRecord && $scope.freeItemRecord.length > 0) {
var idstr = '';
for (var i = 0; i < $scope.freeItemRecord.length; i++) {
idstr += $scope.freeItemRecord[i].pid;
if (i < $scope.freeItemRecord.length - 1)
idstr += ',';
}
url += "&freeitem=" + idstr;
}
$http({
url: url,
method: 'GET'
}).success(function (data) {
$scope.loading = false;
$scope.addtocartDisabled = false;
if (data.status == 'success') {
$scope.cartTotal = data.total;
$scope.cartItemCount = data.count;
$scope.updateCartItem(data.count);
$scope.added = true;
$scope.productAdded(data.itemid);
$scope.cartItemID = data.itemid;
}
notificationBar.show('' + data.message, 1000 * 10);
$scope.setupCrossSell();
const masterProductId = document.querySelector(`meta[name='x-masterproduct-id']`).getAttribute('content');
const productName = document.querySelector(`meta[property='og:title']`).getAttribute('content');
const price = parseFloat(document.querySelector('.product-price').innerText.replace(/[^\d\,\.]/, ''));
const productCategory = document.querySelector(`meta[itemprop='category']`).getAttribute('content');
if (window.Moengage) {
Moengage.track_event("Add to Cart", {
"Store Code": global.store.storeCode,
"Quantity": 1,
"Product Name": productName,
"Category Description": productCategory,
"Product ID": $scope.productid,
"Master Product ID": masterProductId,
"price": price
});
}
const productData = $.productData;
const productId = productData.SelectedID;
const product = productData.Products.filter(p => p.ProductID === productId)[0];
const variant = productData.ProductAttributes.flatMap(attr => attr.Attributes)
.find(attribute => attribute.ProductIDs.includes(productId));
// Track the add to cart event
dataLayer.push({
'event': 'add_to_cart',
'ecommerce': {
'items': [
{
'item_name': product.ProductName,
'item_id': productId.toString(),
'price': global.store.storeCode === 'JP' ? price.toString() : price.toFixed(2),
'item_brand': 'Creative',
'item_category': productCategory,
'item_variant': (variant !== undefined ? variant.Name : '') || '',
'quantity': 1
}
]
},
});
});
}
}
$scope.addToCartAndCheckout = function () {
}
$scope.updateCartItem = function (i) {
$.updateCartCount(i);
}
$scope.setupProduct = function (data) {
this.price = data.PriceFormat;
if (data.Price < data.ListPrice) this.listPrice = data.ListPriceFormat; else this.listPrice = '';
this.lowestPrice = data.LowestPriceFormat;
this.available = data.Available;
this.memberPoints = data.MemberPoints;
if (data.IsBundle) this.memberPoints = 0;
this.productid = data.ProductID;
this.image = $.productUtility.productImage(data.ProductID);
this.addtocartDisabled = false;
this.added = data.Added;
this.freeItems = data.FreeItems;
this.cartItemID = data.CartItemID;
this.setupFreeItem(true);
if (this.freeItems != null && this.freeItems.length > 0) this.hasFreeItems = true; else this.hasFreeItems = false;
this.freeItemAutoAdded = this.freeItemAutoLoad();
this.crossSell = data.CrossSell;
this.setupCrossSell();
if (this.crossSell != null && this.crossSell.length > 0) this.hasCrossSell = true; else this.hasCrossSell = false;
if (data.Message != null && data.Message.length > 0) this.promoMessage = data.Message; else this.promoMessage = [];
this.showNotifyMe = false;
if (data.InStock) this.notifyMe = false; else this.notifyMe = true;
this.shippingData = {
freeShipping: data.FreeShipping,
shippingCharge: data.ShippingCost
}
if (data.Price <= 0.01) {
this.price = "Not available";
this.available = "Not available";
this.addtocartDisabled = true;
this.notifyMe = true;
}
this.modelNo = data.ModelNo;
// Coming Soon pdt list - '{pdtid as string key}': new Set([{storeid list as number able join multiple using comma}])
const arr_pdtComingSoon = {
'24373': new Set([4])
};
const masterProductId = document.querySelector(`meta[name='x-masterproduct-id']`).getAttribute('content');
// Check if the current product and store is match and not in stock
if (arr_pdtComingSoon[masterProductId.toString()]?.has(global.store.id) && !data.InStock) {
this.available = res.ProductComingSoon;
}
// if (data.ProductID === 23273 || data.ProductID === 23274)
// {
// if (global.store.id === 1 || global.store.id === 15) {
// var avail = this.available;
// if (data.InStock)
// avail = this.available.replace('Available from ', 'Due to popular demand, the earlier batches of SXFI AIR have been sold out. Pre-order now for delivery from ')
// .replace('.
Pre-order now.', ' onwards.');
// else avail = 'Due to popular demand, the earlier batches of SXFI AIR have been sold out. Click Notify Me to be informed when new stock arrives.';
// this.available = avail;
// }
// }
// Convert Malaysia store price
if (global.store.id === 38) this.convertMYR(data.Price);
// special handling for Japan
if (global.store.id === 2) this.price += '(税込)';
}
$scope.productAdded = function (id) {
if ($scope.productid && $scope.productid > 0) {
for (var i = 0; i < $.productData.Products.length; i++) {
if ($.productData.Products[i].ProductID == $scope.productid) {
$.productData.Products[i].Added = true;
$.productData.Products[i].CartItemID = id;
break;
}
}
}
}
$scope.messageTimeout = null;
$scope.updateMessage = function (m) {
if (m && m.length > 0) {
$scope.message = m;
if ($scope.messageTimeout != null) $timeout.cancel($scope.messageTimeout);
$scope.messageTimeout = $timeout(function () { $scope.updateMessage(''); }, 1000 * 8);
}
else $scope.message = '';
}
$scope.getAttribute = function () {
return $.cartUtility.attribute($.productData, 'master');
}
$scope.notifyme = function () {
$scope.showNotifyMe = true;
}
$scope.closeNotifyMe = function () {
}
$scope.notifyMeSubmit = function () {
if (!$scope.notifyData.name || !$scope.notifyData.email) return;
if ($scope.productid <= 0) return;
$scope.notifyMeLoading = true;
$http({
method: 'GET',
url: $.cartUtility.secureUrl('/notifyme/add?Name=' + $scope.notifyData.name + '&Email=' + $scope.notifyData.email + '&ProductID=' + $scope.productid + '&MarketingEmail=' + $scope.notifyData.marketingEmail + '&ThirdPartyEmail=' + $scope.notifyData.thirdPartyEmail)
}
).success(function (data) {
$scope.notifyMeLoading = false;
if (data.status == 'success') {
$scope.closeNotifyMe();
$scope.messageType = 'success';
}
else $scope.messageType = 'error';
notificationBar.show('' + data.message.replace("{0}", $scope.productName), 4000);
});
}
$scope.updateAttr = function (updatetype, index, key, value, mpid) {
if (updatetype == 'master') {
var pid = $.cartUtility.userSelectGetProduct($.productData, key, value);
$.cartUtility.userSelect($.productData, key, value);
if (pid > 0) {
$.productData.SelectedID = pid;
$scope.refresh();
}
}
if (updatetype == 'free') {
var freeData = null;
for (var i = 0; i < $scope.freeItems.length; i++) {
if ($scope.freeItems[i].MasterProductID == mpid) {
freeData = $scope.freeItems[i];
break;
}
}
var pid = $.cartUtility.userSelectGetProduct(freeData, key, value);
$.cartUtility.userSelect(freeData, key, value);
if (pid > 0 && !freeData.MasterModel) {
$scope.freeItemSelected(freeData.MasterProductID, pid);
$scope.setupFreeItem(false);
$scope.refresh();
}
else if (pid > 0 && freeData.MasterModel) {
$scope.setupFreeItemChildProduct(freeData.MasterProductID, pid);
}
}
}
$scope.getAttributeForFree = function (masterID) {
for (var i = 0; i < $scope.freeItems.length; i++) if ($scope.freeItems[i].MasterProductID == masterID) return $.cartUtility.attribute($scope.freeItems[i], 'FREE');
}
$scope.getAttributeForPWP = function (masterID) {
for (var i = 0; i < $scope.crossSell.length; i++) if ($scope.crossSell[i].MasterProductID == masterID) return $.cartUtility.attribute($scope.crossSell[i], 'PWP');
}
$scope.freeItemSelected = function (mid, pid) {
for (var i = 0; i < $scope.freeItemRecord.length; i++) {
if ($scope.freeItemRecord[i].mid == mid) {
$scope.freeItemRecord[i].pid = pid;
return;
}
}
var maxMaster = $scope.freeItems[0].MaxQty;
if ($scope.freeItemRecord.length >= maxMaster) {
var newlist = [];
for (var i = ($scope.freeItemRecord.length - maxMaster + 1); i < $scope.freeItemRecord.length; i++) {
newlist.push($scope.freeItemRecord[i]);
}
$scope.freeItemRecord = newlist;
}
$scope.freeItemRecord.push({ mid: mid, pid: pid });
return;
}
$scope.crossSellSelected = function (mid, pid) {
for (var i = 0; i < $scope.crossSell.length; i++) {
if ($scope.crossSell[i].MasterProductID == mid) {
$scope.crossSell[i].selectedID = pid;
}
}
}
$scope.setupFreeItemChildProduct = function (mid, pid) {
if ($scope.freeItems != null && $scope.freeItems.length > 0)
for (var i = 0; i < $scope.freeItems.length; i++)
if ($scope.freeItems[i].MasterProductID == mid) {
$scope.freeItems[i].UserSelectID = pid;
$scope.freeItems[i].image = $.productUtility.productSmallImage(pid);
$scope.freeItems[i].Selected = false;
//reset record
for (var i = 0; i < $scope.freeItemRecord.length; i++)
if ($scope.freeItemRecord[i].mid == mid) $scope.freeItemRecord[i].pid = 0;
}
}
$scope.setupFreeItem = function (preSelect) {
if ($scope.freeItems != null && $scope.freeItems.length > 0) {
var maxQty = $scope.freeItems[0].MaxQty;
//user has selected free item
if ($scope.freeItemRecord.length > 0 && maxQty >= $scope.freeItemRecord.length) preSelect = false;
for (var i = 0; i < $scope.freeItems.length; i++) {
var selectID = 0;
//select freeitem from record
for (var f = 0; f < $scope.freeItemRecord.length; f++) {
if ($scope.freeItemRecord[f].mid == $scope.freeItems[i].MasterProductID) {
selectID = $scope.freeItemRecord[f].pid;
break;
}
}
//pre-select freeitem
if (selectID == 0 && maxQty > 0 && preSelect) selectID = $scope.freeItems[i].ProductID;
if (selectID > 0) {
$scope.freeItems[i].UserSelectID = selectID;
$scope.freeItems[i].image = $.productUtility.productSmallImage(selectID);
$.cartUtility.productSelect($scope.freeItems[i], selectID);
$scope.freeItems[i].Selected = true;
$scope.freeItemSelected($scope.freeItems[i].MasterProductID, selectID);
maxQty--;
}
else {
$scope.freeItems[i].image = $.productUtility.productSmallImage($scope.freeItems[i].ProductID);
$.cartUtility.clearSelect($scope.freeItems[i]);
$scope.freeItems[i].Selected = false;
}
}
}
}
$scope.setupCrossSell = function () {
if ($scope.crossSell != null)
for (var i = 0; i < $scope.crossSell.length; i++) {
if ($scope.crossSell[i].selectedID && $scope.crossSell[i].selectedID > 0) {
$scope.crossSell[i].image = $.productUtility.productImage($scope.crossSell[i].selectedID);
if ($scope.added) $scope.crossSell[i].disabled = false;
else $scope.crossSell[i].disabled = true;
}
else {
if ($scope.added) $scope.crossSell[i].disabled = false;
else $scope.crossSell[i].disabled = true;
if ($scope.crossSell[i].ChildProductIDs.length > 1) {
$scope.crossSell[i].image = $.productUtility.productImage($scope.crossSell[i].MasterProductID);
$scope.crossSell[i].isSingleProduct = false;
$scope.crossSell[i].disabled = true;
}
else {
$scope.crossSell[i].image = $.productUtility.productImage($scope.crossSell[i].ChildProductID);
$scope.crossSell[i].isSingleProduct = true;
$scope.crossSell[i].selectedID = $scope.crossSell[i].ChildProductID;
if ($scope.added) $scope.crossSell[i].disabled = false;
}
}
$scope.crossSell[i].loading = false;
}
}
$scope.checkFreeItem = function () {
if ($scope.freeItemAutoLoad()) return true;
if ($scope.freeItems.length > 0) {
var maxMaster = $scope.freeItems[0].MaxQty;
return ($scope.freeItemRecord.length >= maxMaster)
}
return true;
}
$scope.freeItemAutoLoad = function () {
if ($scope.freeItems.length > 0) {
var maxMaster = $scope.freeItems[0].MaxQty;
var freeSingle = true;
for (var i = 0; i < $scope.freeItems.length; i++)
if ($scope.freeItems[i].MasterModel) {
freeSingle = false;
break;
}
return (freeSingle && maxMaster == $scope.freeItems.length)
}
return true;
}
$scope.freeItemClick = function (item) {
if (!item.MasterModel) $scope.freeItemSelected(item.MasterProductID, item.ProductID);
else $scope.freeItemSelected(item.MasterProductID, item.UserSelectID);
$scope.refresh();
return;
}
$scope.addPWP = function (mid) {
console.log(mid + "," + $scope.cartItemID);
if ($scope.cartItemID && $scope.cartItemID > 0) {
for (var i = 0; i < $scope.crossSell.length; i++) {
console.log($scope.crossSell[i].selectedID);
if ($scope.crossSell[i].MasterProductID == mid
&& $scope.crossSell[i].selectedID
&& $scope.crossSell[i].selectedID > 0) {
$scope.crossSell[i].loading = true;
var url = "/shoppingcart/addcrosssell?index=" + $scope.cartItemID + "&productid=" + $scope.crossSell[i].selectedID + "&masterproductid=" + mid;
$http({
method: 'GET',
url: url
})
.success(function (data) {
if (data.status == 'success') {
$scope.messageType = 'success';
}
else {
$scope.messageType = 'error';
}
$scope.updateMessage(data.message);
$scope.setupCrossSell();
});
break;
}
}
}
}
$scope.getFreeItemTitle = function () {
if ($scope.freeItemAutoAdded) return res.FreeItems;
else {
if ($scope.freeItems != null && $scope.freeItems.length > 0)
return res.txt_selectfreeitem.replace("{0}", $scope.freeItems[0].MaxQty);
else return '';
}
}
$scope.convertMYR = function (price) {
if (price && price > 0)
$http({
method: 'GET',
url: '/products/getcurrencyexchangerate?baseCurrency=USD&symbols=MYR'
}).success(function (data) {
if (data && data.rate && data.rate > 0) {
$scope.priceMYR = 'RM' + parseInt(price * data.rate).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
}
});
}
}]);
;
"use strict";
angular.module('ngProductApp').service('ngApp', ['$rootScope', '$location', function ($rootScope, $location) {
var _self = this;
this.buttonDisabled = false;
this.buttonLoading = false;
this.showBtnLoading = function () {
this.buttonDisabled = true;
this.buttonLoading = true;
};
this.hideBtnLoading = function () {
this.buttonDisabled = false;
this.buttonLoading = false;
};
}]);;
;