// Home Page ////////////////////////
var HomePage = new (function () {
var _root = this;
var _cfg = {
bannersWrap: $('.banner-wrap'),
//bxslider: $('.bxslider'),
//Links, btns
bannerLink: $('.home-page-banner-link')
};
_root.init = function (opts) {
_cfg = $.extend(_cfg, opts);
// _initSlider();
_bindUIActions();
};
var _bindUIActions = function () {
//Count clicks on banner
_cfg.bannerLink.on('click', function (event) {
//event.preventDefault();
var bannerId = $(this).attr('data-banner-id');
$.post(
"/includes/AjaxFunctions.php",
{
action: "HomePageBannerClickCounter",
bannerId: bannerId,
},
function () {
console.log('count' + bannerId);
}
);
});
};
/* var _initSlider = function () {
//Initialize Slider with thumbnails
_cfg.bxslider.bxSlider({
auto: true,
speed: 700,
pause: 8000, // default 8000
autoHover: true,
//autoControls: true,
pagerCustom: '#custom-bx-pager'
});
_cfg.bannersWrap.css('visibility', 'visible');
};*/
})();
// Single Product ////////////////////
var SingleProduct = new (function () {
var _root = this;
var _cfg = {
window: $(window),
htmlBody: $('html,body'),
changeStoreLink: $('.btn-changeStore'),
//Product detals
productPageContent: $('#product-page-content'),
productHeaderName: $('.product-header-name'),
productPathName: $('#product-path-name'),
productDetailsBlock: $('.main-product-details'),
productSku: $('#product-sku'),
productID: $('#product-id'),
productBrand: $('#product-brand'),
productModel: $('#product-model'),
productPrice: $('#product-price'),
productSalePrice: $('#product-sale-price'),
productOriginalPrice: $('#product-original-price'),
productRegularPrice: $('#product-regular-price'),
productImage: $('#product-image'),
productImageLg: $('#product-image-lg'),
productThumbImgs: $('.product-thumbnail-imgs'),
productOnlineStockBlock: $('#product-stock-block'),
productInStoreAvail: $('#in-store-avail-info'),
productSelectedStoreStock: $('#selected-store-stock'),
productStockConditionsAvail: $('#stock-conditions-available'),
productInstoreBlock: $('#product-in-store-block'),
productReservationBlock: $('#product-reservation-block'),
//Visitor details
referer: $('#referer'),
//Links, btns, selectors
productReviewLink: $('.product-review-link'),
productPWLink: $('.product-pw-link'),
productClearanceLink: $('.product-clearance-link'),
productExceptionalGuitarLink: $('.product-exceptional-guitar-link'),
productBstockLink: $('.product-bstock-link'),
groupedDrop: $('#GroupedDrop'),
productAddToWishBtn: $('#add-to-wishlist'),
addToCartBtn: $('.add-to-cart-btn'),
pickupInStoreBtn: $('#pickup-in-store-btn'),
shipFromStoreBtn: $('#ship-from-store-btn'),
addReviewBtn: $('.add-review-btn'),
//Swithcing order type and confirmations
restoreShippingOrder: $('.restore-shipping-order'),
restorePickupInStore: $('.restore-pickup-in-store'),
orderchangeTypeConf: $('.order-change-type-confirmation'),
//Add Single Product or Package to Shopping Cart
addPackageModal: $('#addPackageModal'),
productInPackage: $('#product-in-package'),
addSingleProductToCart: $('#addSingleProductToCart'),
addFullPackageToCart: $('#addFullPackageToCart'),
//Add Performance Warranty or Single Product to the Shopping Cart
addPerformanceWarrantyModal: $('#addPerformanceWarrantyModal'),
performaceWarrantyYearly: $('#performace-warranty-yearly'),
addWarrantyToCart: $('#addWarrantyToCart'),
addNoWarrantyProductToCart: $('#addNoWarrantyProductToCart'),
//Reviews block
reviewRating: $('.review-rating'),
reviewConfirmation: $(".review-confirmation"),
//Flag Review form
flagReviewModal: $('#flagReviewModal'),
reviewFlagForm: $('#flag-review-form'),
reviewFlagID: $('#flag-review-id'),
reviewFlagIssue: $('#flag-review-issue'),
reviewFlagEmail: $('#flag-review-email'),
reviewFlagComment: $('#flag-review-comment'),
reviewFlagSubmit: $('#flag-review-submit'),
//Add Revew form
reviewModal: $("#reviewModal"),
reviewForm: $('#review-form'),
reviewProductID: $('#review-product-id'),
reviewProductName: $('#review-product-name'),
reviewSliderFeatures: $("#review-slider-features"),
reviewFeatures: $("#review-features"),
reviewSliderQuality: $("#review-slider-quality"),
reviewQuality: $("#review-quality"),
reviewSliderValue: $("#review-slider-value"),
reviewValue: $("#review-value"),
reviewSliderOverall: $("#review-slider-overall"),
reviewOverall: $("#review-overall"),
reviewTitle: $("#review-title"),
reviewText: $("#review-text"),
reviewProductExperience: $("#review-product-experience"),
reviewClosestStore: $("#review-closest-store"),
reviewUserName: $("#review-user-name"),
reviewUserEmail: $("#review-user-email"),
reviewFormErrors: $("#review-form-errors"),
reviewSubmitBtn: $("#review-submit-btn"),
reviewSubmitBtnGroup: $("#group-review-submit-btn"),
reviewSubmit: $('#review-submit'),
//Question Form
questionForm: $('#question-form'),
questionText: $('#QuestionTextArea'),
questionConfirmation: $('#question-confirmation'),
addQestionBtn: $('#askQuestionBtn'),
//Answer Form
answerAddForm: $('.answer-add-form'),
answerUpdateForm: $('.answer-update-form'),
editAnswer: $('.edit-answer'),
deleteAnswer: $('.delete-answer'),
//Tab Panes and Tab Buttons and Sections
tabTitles: $("#tab-titles li"),
tabActiveTitles: $("#tab-titles li a"),
tabContent: $("#tab-content div"),
tabDescriptionTitle: $("a[href='#ProdInfo-tab']").parent('li'),
tabDescriptionContent: $("#ProdInfo-tab"),
tabPW: $("#PerformanceWarranty-tab"),
btnDescription: $("#desc-btn"),
btnReviews: $("#rev-btn"),
btnBStock: $("#bstock-btn"),
btnGH: $("#gh-btn"),
btnEG: $("#eg-btn"),
btnMedia: $("#media-btn"),
btnQA: $("#qa-btn"),
btnRent: $("#rent-btn"),
btnGCS: $("#gcs-btn"),
btnPW: $("#pw-btn"),
sectionDescription: $("#Description-tab"),
sectionReviews: $("#Reviews-tab"),
sectionBStock: $("#b-stock"),
sectionMedia: $("#Demos-tab"),
sectionQA: $("#Questions-tab"),
sectionGCS: $("#GibsonCustom-tab"),
sectionEG: $("#ExceptionalGuitar-tab"),
sectionGH: $("#StoreSpecials-tab"),
sectionRent: $("#RentalRates-tab"),
sectionPW: $("#PerformanceWarranty-tab"),
hash: window.location.hash
};
var _product = {
id: (_cfg.productID.length) ? _cfg.productID.attr('data-product-id') : 0,
sku: (_cfg.productSku.length) ? _cfg.productSku.attr('data-product-sku') : '',
brandId: (_cfg.productBrand.length) ? _cfg.productBrand.attr('data-brand-id') : 0
};
_root.stockInStores = [];
_root.init = function (opts) {
_cfg = $.extend(_cfg, opts);
//_setActiveTab();
_setReviewSliders();
_bindUIActions();
//_vcenterProductImage();
_root.getStock();
};
_root.getStock = function () {
//_displayLoaderImg();
$.post(
"/includes/AjaxFunctions.php",
{
action: "ProductAvailability",
ProductsID: _product.id,
BrandID: _product.brandId,
ProductsSku: _product.sku,
LocationsID: _cfg.changeStoreLink.attr('data-current-store'),
Referer: _cfg.referer.attr('data-referer')
},
function (data) {
//If the element exists on the page put related data into it
if (_cfg.productOnlineStockBlock.length > 0 && data) {
_cfg.productOnlineStockBlock.html(data.inStock);
//Uncomment the sectiion below to update buttons
/*
if(data.inStock.indexOf('label-success') == -1) {
$('#add-to-cart-btn span').html(str_ordernow);
//console.log(str_ordernow);
} else{
$('#add-to-cart-btn span').html(str_addtocart);
//console.log(str_addtocart);
}
*/
}
if (_cfg.productInstoreBlock.length > 0 && data) {
_cfg.productInstoreBlock.html(data.inStores);
}
if (_cfg.productSelectedStoreStock.length > 0 && data) {
_cfg.productSelectedStoreStock.html(data.selectedStore);
}
if (_cfg.productStockConditionsAvail.length > 0 && data) {
_cfg.productStockConditionsAvail.html(data.conditionInStores);
}
_cfg.productReservationBlock.hide();
if (_cfg.productReservationBlock.length > 0 && data.availableInSelectedStore === "1") {
_cfg.productReservationBlock.show();
}
if(data.inStock_online == '1') {
$("#notifications-online-instock").hide();
}else{
$("#notifications-online-instock").show();
}
if(data.onSale == '1') {
$("#notifications-onsale").hide();
}else{
$("#notifications-onsale").show();
}
},
"json"
);
};
_root.getStockInClosestStores = function () {
var locationId = (_cfg.changeStoreLink.length) ? _cfg.changeStoreLink.attr('data-current-store') : 0;
$.post(
"/includes/AjaxFunctions.php",
{
action: "searchClosestStores",
ProductsSku: _product.sku,
locationId: locationId
},
function (data) {
_root.stockInStores = data;
},
"json"
);
};
var _bindUIActions = function () {
if (window.location.hash.indexOf("Questions-tab-anchor") > -1) {
_scrollToSection(_cfg.sectionQA);
}
//tab buttons
_cfg.btnDescription.on('click', function (event) {
event.preventDefault();
$('.tab-pane-cont').removeClass('active');
_cfg.tabDescriptionContent.addClass('active show');
_cfg.tabDescriptionTitle.removeClass('active');
_cfg.btnDescription.addClass('active');
_scrollToSection(_cfg.sectionDescription);
});
_cfg.btnReviews.on('click', function (event) {
event.preventDefault();
$('.tab-pane-cont').removeClass('active');
_cfg.tabDescriptionContent.addClass('active show');
_cfg.tabDescriptionTitle.removeClass('active');
_cfg.btnReviews.addClass('active');
_scrollToSection(_cfg.sectionReviews);
});
_cfg.btnMedia.on('click', function (event) {
event.preventDefault();
$('.tab-pane-cont').removeClass('active');
_cfg.btnMedia.addClass('active');
_cfg.tabDescriptionContent.addClass('active show');
_cfg.tabDescriptionTitle.removeClass('active');
_cfg.btnMedia.addClass('active');
_scrollToSection(_cfg.sectionMedia);
});
_cfg.btnQA.on('click', function (event) {
event.preventDefault();
$('.tab-pane-cont').removeClass('active');
_cfg.tabDescriptionContent.addClass('active show');
_cfg.tabDescriptionTitle.removeClass('active');
_cfg.btnQA.addClass('active');
_scrollToSection(_cfg.sectionQA);
});
_cfg.btnBStock.on('click', function (event) {
event.preventDefault();
$('.tab-pane-cont').removeClass('active');
_cfg.tabDescriptionContent.addClass('active show');
_cfg.tabDescriptionTitle.removeClass('active');
_cfg.btnBStock.addClass('active');
_scrollToSection(_cfg.sectionBStock);
});
_cfg.btnGCS.on('click', function (event) {
event.preventDefault();
$('.tab-pane-cont').removeClass('active');
_cfg.tabDescriptionContent.addClass('active show');
_cfg.tabDescriptionTitle.removeClass('active');
_cfg.btnGCS.addClass('active');
_scrollToSection(_cfg.sectionGCS);
});
_cfg.btnGH.on('click', function (event) {
event.preventDefault();
$('.tab-pane-cont').removeClass('active');
_cfg.tabDescriptionContent.addClass('active show');
_cfg.tabDescriptionTitle.removeClass('active');
_cfg.btnGH.addClass('active');
_scrollToSection(_cfg.sectionGH);
});
_cfg.btnEG.on('click', function (event) {
event.preventDefault();
$('.tab-pane-cont').removeClass('active');
_cfg.tabDescriptionContent.addClass('active show');
_cfg.tabDescriptionTitle.removeClass('active');
_cfg.btnEG.addClass('active');
_scrollToSection(_cfg.sectionEG);
});
_cfg.btnRent.on('click', function (event) {
event.preventDefault();
$('.tab-pane-cont').removeClass('active');
_cfg.tabDescriptionContent.addClass('active show');
_cfg.tabDescriptionTitle.removeClass('active');
_cfg.btnRent.addClass('active');
_scrollToSection(_cfg.sectionRent);
});
_cfg.btnPW.on('click', function (event) {
event.preventDefault();
_cfg.tabActiveTitles.removeClass('active');
_cfg.btnPW.addClass('active');
$('.tab-pane-cont').removeClass('active');
_cfg.tabPW.addClass('active show');
_scrollToSection(_cfg.sectionPW);
});
_cfg.productReviewLink.on('click', function (event) {
event.preventDefault();
$('.tab-pane-cont').removeClass('active');
_cfg.tabDescriptionContent.addClass('active show');
_scrollToSection(_cfg.sectionReviews);
});
_cfg.productPWLink.on('click', function (event) {
event.preventDefault();
_cfg.tabActiveTitles.removeClass('active');
_cfg.btnPW.addClass('active');
$('.tab-pane-cont').removeClass('active');
_cfg.tabPW.addClass('active show');
_scrollToSection(_cfg.sectionPW);
});
_cfg.editAnswer.on('click', function () {
const answerId = $(this).data('answer-id');
$('#edit-answer-' + answerId).show();
$(this).html("");
});
_cfg.productClearanceLink.on('click', function (event) {
event.preventDefault();
_cfg.tabActiveTitles.removeClass('active');
_cfg.btnGH.addClass('active');
$('.tab-pane-cont').removeClass('active');
_cfg.tabDescriptionContent.addClass('active show');
_scrollToSection(_cfg.sectionGH);
});
_cfg.productExceptionalGuitarLink.on('click', function (event) {
event.preventDefault();
_cfg.tabActiveTitles.removeClass('active');
_cfg.btnEG.addClass('active');
$('.tab-pane-cont').removeClass('active');
_cfg.tabDescriptionContent.addClass('active show');
_scrollToSection(_cfg.sectionEG);
});
_cfg.productBstockLink.on('click', function (event) {
event.preventDefault();
_cfg.tabActiveTitles.removeClass('active');
_cfg.btnBStock.addClass('active');
$('.tab-pane-cont').removeClass('active');
_cfg.tabDescriptionContent.addClass('active show');
_scrollToSection(_cfg.sectionBStock);
});
_cfg.groupedDrop.on('change', function () {
var productId = $('option:selected', this).val();
var redirectURL = $('option:selected', this).attr('data-redirect');
if (redirectURL.length > 0) {
window.location.href = redirectURL;
} else {
_getProduct(productId);
}
});
_cfg.productAddToWishBtn.on('click', function () {
var productId = _cfg.productID.attr('data-product-id');
var productSku = _cfg.productSku.attr('data-product-sku');
var wishCategory = $('#wish-category').val();
var link = "/?page=products&ProductsID=" + productId + "&productSku=" + productSku + "&action=AddtoWishList&wishCategory=" + wishCategory;
location.href = link;
});
_cfg.addToCartBtn.on('click', function () {
var isPackage = _cfg.productInPackage.attr('data-value');
var productId = _cfg.productID.attr('data-product-id');
var warrantyPrice = _cfg.performaceWarrantyYearly.attr('data-price');
var cartQty = "&Qty=1";
var displayModal = false;
//check if the Qty input exists on the page
if ($('.cart-qty').length > 0) {
cartQty = $('.cart-qty').val();
cartQty = "&Qty=" + cartQty;
}
var link = "/?page=products&ProductsID=" + productId + "&action=addtocart" + cartQty + 'ct=' + Date.now();
//Package exists: Update links in Modal Box
if (isPackage.length > 0) {
_cfg.addSingleProductToCart.attr('href', link);
_cfg.addFullPackageToCart.attr('href', link + '&Packages=true');
//_cfg.addPackageModal.modal('show');
bootstrap.Modal.getOrCreateInstance(document.getElementById(_cfg.addPackageModal.attr('id'))).show();
displayModal = true;
}
//No Package: Update links and display Warranty Modal Box
if (isPackage.length == 0 && warrantyPrice.length > 0 && Number(warrantyPrice) !== 0) {
_cfg.addNoWarrantyProductToCart.attr('href', link);
_cfg.addWarrantyToCart.attr('href', link + '&AddWarranty=1');
_cfg.addWarrantyToCart.attr('data-baseurl', link + '&AddWarranty=1');
//_cfg.addPerformanceWarrantyModal.modal('show');
bootstrap.Modal.getOrCreateInstance(document.getElementById(_cfg.addPerformanceWarrantyModal.attr('id'))).show();
displayModal = true;
}
// No package, No Warranty
if (!displayModal) {
location.href = link;
}
});
_cfg.pickupInStoreBtn.on('click', function () {
var isPackage = _cfg.productInPackage.attr('data-value');
var productId = _cfg.productID.attr('data-product-id');
var locationId = _cfg.changeStoreLink.attr('data-current-store');
var warrantyPrice = _cfg.performaceWarrantyYearly.attr('data-price');
var pickupQty = "";
var displayModal = false;
//Check if the Qty input exists on the page
if ($('#pickup-qty').length > 0) {
pickupQty = $('#pickup-qty').val();
pickupQty = "&Qty=" + pickupQty;
}
var link = "/?page=products&ProductsID=" + productId + "&action=addtocart" + pickupQty + "&pickupInStoreId=" + locationId;
// Package exists: Update links in Modal Box
if (isPackage.length > 0) {
_cfg.addSingleProductToCart.attr('href', link);
_cfg.addFullPackageToCart.attr('href', link + '&Packages=true');
//_cfg.addPackageModal.modal('show');
bootstrap.Modal.getOrCreateInstance(document.getElementById(_cfg.addPackageModal.attr('id'))).show();
displayModal = true;
}
//No Package: Update links and display Warranty Modal Box
if (isPackage.length == 0 && warrantyPrice.length > 0 && Number(warrantyPrice) !== 0) {
_cfg.addNoWarrantyProductToCart.attr('href', link);
_cfg.addWarrantyToCart.attr('href', link + '&AddWarranty=1');
_cfg.addWarrantyToCart.attr('data-baseurl', link + '&AddWarranty=1');
//_cfg.addPerformanceWarrantyModal.modal('show');
bootstrap.Modal.getOrCreateInstance(document.getElementById(_cfg.addPerformanceWarrantyModal.attr('id'))).show();
displayModal = true;
}
if (!displayModal) {
//No package, no warranty
location.href = link;
}
});
_cfg.shipFromStoreBtn.on('click', function () {
var isPackage = _cfg.productInPackage.attr('data-value');
var productId = _cfg.productID.attr('data-product-id');
var locationId = _cfg.changeStoreLink.attr('data-current-store');
var warrantyPrice = _cfg.performaceWarrantyYearly.attr('data-price');
var shipFromStoreQty = "";
var displayModal = false;
//Check if the Qty input exists on the page
if ($('#ship-from-store-qty').length > 0) {
shipFromStoreQty = $('#ship-from-store-qty').val();
shipFromStoreQty = "&Qty=" + shipFromStoreQty;
}
var link = "/?page=products&ProductsID=" + productId + "&action=addtocart" + shipFromStoreQty + "&ShipDirect=" + locationId;
// Package exists: Update links in Modal Box
if (isPackage.length > 0) {
_cfg.addSingleProductToCart.attr('href', link);
_cfg.addFullPackageToCart.attr('href', link + '&Packages=true');
//_cfg.addPackageModal.modal('show');
bootstrap.Modal.getOrCreateInstance(document.getElementById(_cfg.addPackageModal.attr('id'))).show();
displayModal = true;
}
//No Package: Update links and display Warranty Modal Box
if (isPackage.length == 0 && warrantyPrice.length > 0 && Number(warrantyPrice) !== 0) {
_cfg.addNoWarrantyProductToCart.attr('href', link);
_cfg.addWarrantyToCart.attr('href', link + '&AddWarranty=1');
_cfg.addWarrantyToCart.attr('data-baseurl', link + '&AddWarranty=1');
//_cfg.addPerformanceWarrantyModal.modal('show');
bootstrap.Modal.getOrCreateInstance(document.getElementById(_cfg.addPerformanceWarrantyModal.attr('id'))).show();
displayModal = true;
}
if (!displayModal) {
//No package, no warranty
location.href = link;
}
});
_cfg.productInstoreBlock.on('change', '#ProvincesDrop', function () {
$('#ProvFrm').submit();
});
_cfg.productInstoreBlock.on('click', '#province-search-btn', function () {
var status = $('#product-available').attr('data-instore-only');
if (status == 1) {
location.href = $('#ProvFrm').attr('action');
} else {
$('#ProvFrm').submit();
}
});
_cfg.restorePickupInStore.on('click', '.btn', function () {
var locationId = $(this).attr('data-location-id');
Common.restorePickupInStore(locationId);
_cfg.restorePickupInStore.hide();
_cfg.orderchangeTypeConf.show();
});
_cfg.restoreShippingOrder.on('click', '.btn', function () {
Common.restoreShippingOrder();
_cfg.restoreShippingOrder.hide();
_cfg.orderchangeTypeConf.show();
});
_cfg.reviewRating.on('click', '.review-vote', function () {
var reviewId = $(this).parent().parent().attr('data-review-id');
var vote = $(this).attr('data-vote');
_addReviewVote(reviewId, vote);
});
//Click review flag btn
_cfg.reviewRating.on('click', '.btn', function () {
var reviewId = $(this).parent().attr('data-review-id');
_cfg.reviewFlagID.val(reviewId);
});
//Submit review flag form
_cfg.reviewFlagForm.on('submit', function (event) {
event.preventDefault();
_flagProductReview();
//_cfg.flagReviewModal.modal('hide');
bootstrap.Modal.getInstance(document.getElementById(_cfg.flagReviewModal.attr('id'))).hide();
});
$("#reply-submit-btn").on('hover', function () {
_enableReplySubmitBtn();
});
$("#reply-text").on('input propertychange paste hover', function () {
_enableReplySubmitBtn();
});
_cfg.addReviewBtn.on('click', function () {
var productID = _cfg.productID.attr('data-product-id');
_cfg.reviewProductID.val(productID);
});
//Check sliders and enable Submit Button in the Product review form
_cfg.reviewSliderFeatures.on('click', function () {
_enableReviewSubmitBtn();
});
_cfg.reviewSliderQuality.on('click', function () {
_enableReviewSubmitBtn();
});
_cfg.reviewSliderValue.on('click', function () {
_enableReviewSubmitBtn();
});
_cfg.reviewSliderOverall.on('click', function () {
_enableReviewSubmitBtn();
});
_cfg.reviewUserEmail.on('hover', function () {
_enableReviewSubmitBtn();
});
_cfg.reviewSubmitBtnGroup.on('hover', function () {
_enableReviewSubmitBtn();
});
//Submit product review form
$('#reply-form').on('submit', function (event) {
event.preventDefault();
if (_isReplyFormComplete()) {
_addReviewReply();
//$('#replyModal').modal('hide');
bootstrap.Modal.getInstance(document.getElementById('replyModal')).hide();
} else {
_cfg.reviewFormErrors.show();
return false;
}
});
_cfg.reviewForm.on('submit', function (event) {
event.preventDefault();
if (_isReviewFormComplete()) {
_addProductReview();
bootstrap.Modal.getInstance(document.getElementById(_cfg.reviewModal.attr('id'))).hide();
//_cfg.reviewModal.modal('hide');
} else {
bootstrap.Modal.getOrCreateInstance(document.getElementById(_cfg.reviewFormErrors.attr('id'))).show();
//_cfg.reviewFormErrors.show();
return false;
}
});
_cfg.questionForm.on('submit', function (event) {
event.preventDefault();
_cfg.questionConfirmation.hide();
_cfg.questionText.hide();
_cfg.addQestionBtn.hide();
_addProductQuestion();
});
_cfg.answerAddForm.on('submit', function (event) {
event.preventDefault();
event.stopImmediatePropagation();
_addProductQuestionAnswer(event.target);
});
_cfg.answerUpdateForm.on('submit', function (event) {
event.preventDefault();
event.stopImmediatePropagation();
_updateProductQuestionAnswer(event.target);
});
/* _cfg.window.on('resize', function() {
var windowWidth = _cfg.window.width();
_vcenterProductImage(windowWidth);
});*/
};
/* var _vcenterProductImage = function(windowWidth) {
windowWidth = windowWidth || _cfg.window.width();
var mainImageHeight = _cfg.productImage.height();
var productDetailsBlockHeight = _cfg.productDetailsBlock.height();
if(windowWidth > 975) {
_cfg.productPageContent.addClass('vertical-align');
} else {
_cfg.productPageContent.removeClass('vertical-align');
}
//Change thumbnails images margin-top depends on the main product height and details area
if(productDetailsBlockHeight < 400 || mainImageHeight > 370) {
_cfg.productThumbImgs.css('margin-top', 5);
} else if(mainImageHeight > 320) {
_cfg.productThumbImgs.css('margin-top', 20);
} else if(mainImageHeight > 290) {
_cfg.productThumbImgs.css('margin-top', 40);
} else if(mainImageHeight > 270) {
_cfg.productThumbImgs.css('margin-top', 50);
}
};*/
var _getProduct = function (productId) {
productId = productId || 0;
$.post("/includes/AjaxFunctions.php", {
action: 'getProduct',
productId: productId
},
function (data) {
_product = data;
_updateDOM(data);
//Reload Uplift
if (window.Uplift.Payments) {
let priceInCents = 0
if (!parseInt(data.callForPricing)) {
priceInCents = (parseFloat(data.salePrice) > 0) ? data.salePrice : data.price;
priceInCents = parseFloat(priceInCents) * 100;
}
window.loadUpliftPayments(priceInCents);
}
},
'json'
);
};
function getCookie(name) {
var value = "; " + document.cookie;
var parts = value.split("; " + name + "=");
if (parts.length == 2) return parts.pop().split(";").shift();
}
var _addReviewReply = function () {
$.post(
"/includes/AjaxFunctions.php",
{
action: "addReviewReply",
//reviewId: getCookie("reviewIdForReply"),
//Better way, without cookies:
reviewId: $('#review_id').val(),
Comments: $('#reply-text').val(),
//honeyPot
hpName: $('#reply-name').val(),
hpWeb: $('#reply-website').val()
},
function (data) {
//console.log(reviewId)
//Clean fields
//_cfg.reviewTitle.val("");
//_cfg.reviewText.val("");
//_cfg.reviewUserName.val("");
//_cfg.reviewUserEmail.val("");
$('#reply-text').val("");
//Display confirmation
_fadeInFadeOutReviewConf(data.msg);
}, "json"
);
}
var _addProductReview = function () {
$.post(
"/includes/AjaxFunctions.php",
{
action: "addProductReview",
ProductsID: _cfg.productID.attr('data-product-id'),
Features: (_cfg.reviewFeatures.val() * 2),
Quality: (_cfg.reviewQuality.val() * 2),
Value: (_cfg.reviewValue.val() * 2),
Overall: (_cfg.reviewOverall.val() * 2),
Title: _cfg.reviewTitle.val(),
Comments: _cfg.reviewText.val(),
ProductExperience: _cfg.reviewProductExperience.val(),
ClosestStore: _cfg.reviewClosestStore.val(),
Name: _cfg.reviewUserName.val(),
Email: _cfg.reviewUserEmail.val(),
//honeyPot
hpName: $('#review-name').val(),
hpWeb: $('#review-website').val()
},
function (data) {
//Clean fields
_cfg.reviewTitle.val("");
_cfg.reviewText.val("");
_cfg.reviewUserName.val("");
_cfg.reviewUserEmail.val("");
//Display confirmation
_fadeInFadeOutReviewConf(data.msg);
}, "json"
);
};
// Add Product Review Vote to the DB
var _addReviewVote = function (reviewId, vote) {
$.post(
"/includes/AjaxFunctions.php",
{
action: "addReviewVote",
ReviewsID: reviewId,
Vote: vote
},
function (data) {
_updateReviewVotesDOM(data);
}, "json"
);
};
// Add Flag Review to the DB
var _flagProductReview = function () {
$.post(
"/includes/AjaxFunctions.php",
{
action: "flagProductReview",
ReviewsID: _cfg.reviewFlagID.val(),
Email: _cfg.reviewFlagEmail.val(),
IssueDescription: _cfg.reviewFlagComment.val(),
IssueFlag: 1,
ProductsReviewsIssuesID: _cfg.reviewFlagIssue.val(),
//honeyPot
hpName: $('#flag-review-name').val(),
hpWeb: $('#flag-review-web').val()
},
function (data) {
_fadeInFadeOutReviewConf(data.msg);
}, "json"
);
};
var _addProductQuestion = function () {
$.post(
"/includes/AjaxFunctions.php",
{
action: "addProductQuestion",
ProductsID: _cfg.productID.attr('data-product-id'),
Question: _cfg.questionText.val(),
},
function (data) {
//Clean fields
_cfg.questionText.val("");
//Display confirmation
_fadeInFadeOutQuestionConf(data.msg);
}, "json"
);
};
var _addProductQuestionAnswer = function (target) {
const ProductsID = _cfg.productID.attr('data-product-id');
const ProductsQuestionsID = $(target).find('input[name="ProductsQuestionsID"]').val();
const answerTextArea = $(target).find('textarea[name="Answer"]');
const addAnswerBtn = $(target).find('input[type="submit"]');
const Answer = answerTextArea.val();
const postedAnswerEl = $(target).find('.your-answer');
if (!ProductsQuestionsID || Answer === '') {
return;
}
$.post("/includes/AjaxFunctions.php", {
action: "addQuestionAnswer",
ProductsID: ProductsID,
ProductsQuestionsID: ProductsQuestionsID,
Answer: Answer,
},
function (data) {
answerTextArea.val("");
if (!data.result) {
postedAnswerEl.text(data.msg)
postedAnswerEl.css('background-color', '#ffcdcd')
} else {
postedAnswerEl.html("" + data.msg + "
" + data.content + "")
postedAnswerEl.css('background-color', '#f1ffe8')
answerTextArea.hide();
addAnswerBtn.hide();
}
},
'json'
);
}
var _updateProductQuestionAnswer = function (target) {
const ProductsID = _cfg.productID.attr('data-product-id');
const ProductsQuestionsID = $(target).find('input[name="ProductsQuestionsID"]').val();
const ProductsAnswersID = $(target).find('input[name="ProductsAnswersID"]').val();
const answerTextArea = $(target).find('textarea[name="Answer"]');
const updateAnswerBtn = $(target).find('input[type="submit"]');
const Answer = answerTextArea.val();
const postedAnswerEl = $('#answer-' + ProductsAnswersID);
if (!ProductsAnswersID) {
return;
}
$.post("/includes/AjaxFunctions.php", {
action: "updateQuestionAnswer",
ProductsID: ProductsID,
ProductsQuestionsID: ProductsQuestionsID,
ProductsAnswersID: ProductsAnswersID,
Answer: Answer,
},
function (data) {
answerTextArea.val("");
if (!data.result) {
postedAnswerEl.text(data.msg);
postedAnswerEl.css('background-color', '#ffcdcd');
} else {
postedAnswerEl.html("" + data.msg + "
" + data.content);
answerTextArea.hide();
updateAnswerBtn.hide();
}
},
'json'
);
}
// Display image while loading Stock Info
var _displayLoaderImg = function () {
_cfg.productOnlineStockBlock.html(Common.loaderImgHoriz);
_cfg.productInstoreBlock.html(Common.loaderImgHoriz);
};
var _updateDOM = function (product) {
// Update Product Details
_cfg.productHeaderName.html(product.name);
_cfg.productPathName.html(product.name);
_cfg.reviewProductName.html(product.name);
_cfg.productID.attr('data-product-id', product.id);
_cfg.productSku.attr('data-product-sku', product.sku);
_cfg.productSku.html(product.sku);
_cfg.productModel.html(product.model);
$("#Description-tab").html(product.description);
_cfg.productBrand.attr('data-brand-id', product.brandId);
// Update Product Images
_updateImagesDOM(product);
// Update Product Price
_updatePricesDOM(product);
// Update ProductID in URL
_updateURLDOM(product);
// Update Stock Info
_root.getStock();
};
var _updateURLDOM = function (product) {
//Generate new URL and put it in the browser address bar (feature doesn't work on old browsers)
window.history.pushState("", product.name, product.url);
};
var _updatePricesDOM = function (product) {
var prices = '';
if (parseInt(product.callForPricing) > 0) {
price = "
"; storesHTML += "" + stores[i].name + " " + distance + ""; storesHTML += "" + serv + ""; storesHTML += "
"; storesHTML += "" + Common.lang.phone + ": " + stores[i].phone + "
"; storesHTML += (stores[i].phoneFr) ? "Phone French: " + stores[i].phoneFr + "
" : ''; storesHTML += (stores[i].LessonPhone) ? "" + (stores[i].LessonPhoneOrText == 1 ? Common.lang.lessonCentrePhoneOrText : Common.lang.lessonCentrePhone) + " " + stores[i].LessonPhone + "
" : ''; storesHTML += (stores[i].fax) ? "" + Common.lang.fax + ": " + stores[i].fax + "
" : ''; storesHTML += "" + Common.lang.email + ": " + stores[i].email + "
"; storesHTML += (stores[i].lessonEmail) ? "" + Common.lang.lessonCentreEmail + ": " + stores[i].lessonEmail + "
" : ''; storesHTML += (stores[i].holidayHours) ? stores[i].holidayHours : ''; storesHTML += "" + selectedStore.address + "
"; headerModalHTML += "" + serv + " (" + Common.lang.viewStoreDetails + ")
"; headerModalHTML += " " + selectedStore.phone + ""; headerModalHTML += " | " + selectedStore.email + ""; headerModalHTML += (selectedStore.kms) ? " Distance : " + selectedStore.kms + "km" : ""; headerModalHTML += ""; // Add link to the province _cfg.linkToProvince.html("Locations in " + selectedStore.provinceName + ""); return headerModalHTML; }; var _bindUIActions = function () { $('.location-accord-title').on('click', function () { var storeId = $(this).attr('data-location'); //Redirect directly to the Location/Lesson Centre Page if (_cfg.directLinks) { var url = $('#location-link_' + storeId).attr('href'); window.location.href = url; } else { _showLocationInfo(storeId); GoogleMap.showInfoWindow(storeId); } }); $('.stores-list-item').on('click', function () { var storeId = $(this).attr('data-location'); _cfg.modalStoresHeader.html(_constructHeaderModal(storeId)); GoogleMap.showInfoWindow(storeId); }); $('.makeThisMyStore').on('click', function () { var self = $(this); var parent = self.parent(); var storeId = parent.data('location'); //Update user account on the Server Common.setStoreId(storeId); }); }; })(); // Header Search Form /////////////// var SearchForm = new (function () { //assign _root and config private variables var _root = this; var _cfg = { searchForm: $("#SearchForm"), searchBtn: $("#SearchBtn"), searchField: $("#SearchTxt"), searchPrintBtn2: $(".user-menu .btn-print-search"), //Print Search searchPrintForm: $("#SearchPrintForm"), searchPrintBtn: $("#SearchPrintBtn"), searchPrintField: $("#SearchPrintTxt"), searchPrintSubcategories: $("a.search-print-subcategories") || [] }; // Initialize Public Method _root.init = function (opts) { //Merge the contents of two or more objects together into the first object. _cfg = $.extend(_cfg, opts); _bindUIActions(); //select source for autocomplete ('db' - by default or 'file') _addAutocomplete('file'); }; var _bindUIActions = function () { //Search form in the Header _cfg.searchForm.on("submit", function (e) { e.preventDefault(); var searchTxt = _cfg.searchField.val(); _submitSearch(searchTxt); }); _cfg.searchBtn.on("click", function () { var searchTxt = _cfg.searchField.val(); _submitSearch(searchTxt); }); _cfg.searchField.on('keypress', function () { var searchTxt = _cfg.searchField.val(); if (searchTxt.length < 2) { $('#searchWrap').hide(); } else { $('#searchWrap').show(); } }); _cfg.searchPrintField.on('keypress', function () { let searchTxt = _cfg.searchPrintField.val(); _cfg.searchPrintSubcategories.each(function (i) { let departmentQuery = $(this).attr('data-department') || null departmentQuery = departmentQuery ? '&DepartmentsID=' + departmentQuery : '' let href = "/?page=search-print&SearchTxt=" + searchTxt + departmentQuery; $(this).attr('href', href); }); }); //Print Search Form _cfg.searchPrintForm.on("submit", function (e) { e.preventDefault(); var searchTxt = _cfg.searchPrintField.val(); _submitPrintSearch(searchTxt); }); _cfg.searchPrintBtn.on("click", function () { var searchTxt = _cfg.searchPrintField.val(); _submitPrintSearch(searchTxt); }); _cfg.searchPrintBtn2.on("click", function () { if (_cfg.searchField.val() == "") { window.location.href = Common.domain + "/print-music"; } else { var searchTxt = _cfg.searchField.val(); _submitPrintSearch(searchTxt); } }); }; //by default source is 'db' var _addAutocomplete = function (source) { if (source == 'file') { _addAutocompleteFile(); } else { _addAutocompleteDB(); } }; var _addAutocompleteFile = function () { try { _cfg.searchField.autocomplete(Common.domain + "/includes/autocomplete/ajaxSearch.php", { width: 480, selectFirst: false, }).result(); } catch (err) { console.log('Cannot initialize suggestive search' + err); } }; var _addAutocompleteDB = function () { try { _cfg.searchField.autocomplete(Common.domain + "/AjaxSearch.php", { width: 480, selectFirst: false, }).result(); } catch (err) { console.log('Cannot initialize suggestive search' + err); } }; var _isValidSearch = function (searchTxt) { searchTxt = searchTxt || ""; //Check if the Search Txt has a value if (searchTxt === "" || searchTxt === 0) { alert("You must enter a search term to continue"); return false; } else { return true; } }; var _cleanSearchPhrase = function (searchTxt) { //return searchTxt.replace('&', ''); return encodeURIComponent(searchTxt); }; var _submitSearch = function (searchTxt) { if (_isValidSearch(searchTxt)) { searchTxt = _cleanSearchPhrase(searchTxt); location.href = '/?page=search&SearchTxt=' + searchTxt; } }; var _submitPrintSearch = function (searchTxt) { if (_isValidSearch(searchTxt)) { searchTxt = _cleanSearchPhrase(searchTxt); DepartmentsID = $('#DepartmentsID').val(); location.href = '/?page=search-print&SearchTxt=' + searchTxt + '&DepartmentsID=' + DepartmentsID; } }; })(); var UserLocation = new (function () { var _root = this; var _cfg = { userStoreBlock: $('#userStoreBlock'), }; // Initialization _root.init = function (opts) { _cfg = $.extend(_cfg, opts); _getUserLocation(); }; var _getUserLocation = function () { $.post("/includes/AjaxFunctions.php", { action: 'getUserLocation' }, function (data) { _cfg.userStoreBlock.html(data); }); }; })(); // Wishlist //////////////////////// var Wishlist = new (function () { var _root = this; var _cfg = { username: $('#recipient-name'), email: $('#recipient-email'), deleteWishList: $('.delete-wish-list'), addRecipiant: $('#add-recipient'), recipiants: $('#recipiants'), emailText: $('#email-text'), submitEmail: $('#submit-email'), recipientsArray: [] }; _root.init = function (opts) { _cfg = $.extend(_cfg, opts); _bindUIActions(); }; var _bindUIActions = function () { _cfg.email.on('focus', function () { $(this).parent('div.form-group').removeClass('has-error'); }); _cfg.addRecipiant.on('click', function (e) { e.preventDefault(); if (_cfg.username.val().length > 0 && _cfg.email.val().length > 0) { if (Common.validateEmail(_cfg.email.val())) { _cfg.recipientsArray.push({ name: _cfg.username.val(), email: _cfg.email.val() }); _updateDOM(); _updateSession(); } else { _cfg.email.parent('div.form-group').addClass('has-error'); } } }); _cfg.recipiants.on('click', '.fa-times-circle', function () { var recipientID = $(this).attr('data-recipient'); _cfg.recipientsArray.splice(recipientID, 1); _updateDOM(); _updateSession(); }); _cfg.deleteWishList.on('click', function (e) { e.preventDefault(); var wishListID = $(this).attr('data-wishlist-id'); location.href = "/?page=wishlist&action=delete&WishListID=" + wishListID; }); }; var _updateDOM = function () { _updateWishListRecipiants(); _flushInputFields(); }; var _updateSession = function () { $.post("/includes/AjaxFunctions.php", { action: 'UpdateWishListRecipiants', recipients: JSON.stringify(_cfg.recipientsArray) }); }; var _updateWishListRecipiants = function () { var html = ""; for (var i = 0, length = _cfg.recipientsArray.length; i < length; i++) { html += "