File: //home/accemeff/public_html/acc/js/varien/product_options.js
/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE_AFL.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@magento.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magento.com for more information.
*
* @category Varien
* @package js
* @copyright Copyright (c) 2006-2017 X.commerce, Inc. and affiliates (http://www.magento.com)
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
*/
var Product = Product || {};
/**************************** PRICE RELOADER ********************************/
Product.OptionsPrice = Class.create();
Product.OptionsPrice.prototype = {
initialize: function(config) {
this.productId = config.productId;
this.priceFormat = config.priceFormat;
this.includeTax = config.includeTax;
this.defaultTax = config.defaultTax;
this.currentTax = config.currentTax;
this.productPrice = config.productPrice;
this.showIncludeTax = config.showIncludeTax;
this.showBothPrices = config.showBothPrices;
this.productOldPrice = config.productOldPrice;
this.priceInclTax = config.priceInclTax;
this.priceExclTax = config.priceExclTax;
this.skipCalculate = config.skipCalculate; /** @deprecated after 1.5.1.0 */
this.duplicateIdSuffix = config.idSuffix;
this.specialTaxPrice = config.specialTaxPrice;
this.tierPrices = config.tierPrices;
this.tierPricesInclTax = config.tierPricesInclTax;
this.oldPlusDisposition = config.oldPlusDisposition;
this.plusDisposition = config.plusDisposition;
this.plusDispositionTax = config.plusDispositionTax;
this.oldMinusDisposition = config.oldMinusDisposition;
this.minusDisposition = config.minusDisposition;
this.exclDisposition = config.exclDisposition;
this.optionPrices = {};
this.customPrices = {};
this.containers = {};
this.displayZeroPrice = true;
this.initPrices();
},
setDuplicateIdSuffix: function(idSuffix) {
this.duplicateIdSuffix = idSuffix;
},
initPrices: function() {
this.containers[0] = 'product-price-' + this.productId;
this.containers[1] = 'bundle-price-' + this.productId;
this.containers[2] = 'price-including-tax-' + this.productId;
this.containers[3] = 'price-excluding-tax-' + this.productId;
this.containers[4] = 'old-price-' + this.productId;
},
changePrice: function(key, price) {
this.optionPrices[key] = price;
},
addCustomPrices: function(key, price) {
this.customPrices[key] = price;
},
getOptionPrices: function() {
var price = 0;
var nonTaxable = 0;
var oldPrice = 0;
var priceInclTax = 0;
var currentTax = this.currentTax;
$H(this.optionPrices).each(function(pair) {
if ('undefined' != typeof(pair.value.price) && 'undefined' != typeof(pair.value.oldPrice)) {
price += parseFloat(pair.value.price);
oldPrice += parseFloat(pair.value.oldPrice);
} else if (pair.key == 'nontaxable') {
nonTaxable = pair.value;
} else if (pair.key == 'priceInclTax') {
priceInclTax += pair.value;
} else if (pair.key == 'optionsPriceInclTax') {
priceInclTax += pair.value * (100 + currentTax) / 100;
} else {
price += parseFloat(pair.value);
oldPrice += parseFloat(pair.value);
}
});
return [price, nonTaxable, oldPrice, priceInclTax];
},
reload: function() {
var price;
var formattedPrice;
var optionPrices = this.getOptionPrices();
var nonTaxable = optionPrices[1];
var optionOldPrice = optionPrices[2];
var priceInclTax = optionPrices[3];
optionPrices = optionPrices[0];
$H(this.containers).each(function(pair) {
var _productPrice;
var _plusDisposition;
var _minusDisposition;
var _priceInclTax;
var excl;
var incl;
var tax;
if ($(pair.value)) {
if (pair.value == 'old-price-'+this.productId && this.productOldPrice != this.productPrice) {
_productPrice = this.productOldPrice;
_plusDisposition = this.oldPlusDisposition;
_minusDisposition = this.oldMinusDisposition;
} else {
_productPrice = this.productPrice;
_plusDisposition = this.plusDisposition;
_minusDisposition = this.minusDisposition;
}
_priceInclTax = priceInclTax;
if (pair.value == 'old-price-'+this.productId && optionOldPrice !== undefined) {
price = optionOldPrice+parseFloat(_productPrice);
} else if (this.specialTaxPrice == 'true' && this.priceInclTax !== undefined && this.priceExclTax !== undefined) {
price = optionPrices+parseFloat(this.priceExclTax);
_priceInclTax += this.priceInclTax;
} else {
price = optionPrices+parseFloat(_productPrice);
_priceInclTax += parseFloat(_productPrice) * (100 + this.currentTax) / 100;
}
if (this.specialTaxPrice == 'true') {
excl = price;
incl = _priceInclTax;
} else if (this.includeTax == 'true') {
// tax = tax included into product price by admin
tax = price / (100 + this.defaultTax) * this.defaultTax;
excl = price - tax;
incl = excl*(1+(this.currentTax/100));
} else {
tax = price * (this.currentTax / 100);
excl = price;
incl = excl + tax;
}
var subPrice = 0;
var subPriceincludeTax = 0;
Object.values(this.customPrices).each(function(el){
if (el.excludeTax && el.includeTax) {
subPrice += parseFloat(el.excludeTax);
subPriceincludeTax += parseFloat(el.includeTax);
} else {
subPrice += parseFloat(el.price);
subPriceincludeTax += parseFloat(el.price);
}
});
excl += subPrice;
incl += subPriceincludeTax;
if (typeof this.exclDisposition == 'undefined') {
excl += parseFloat(_plusDisposition);
}
incl += parseFloat(_plusDisposition) + parseFloat(this.plusDispositionTax);
excl -= parseFloat(_minusDisposition);
incl -= parseFloat(_minusDisposition);
//adding nontaxlable part of options
excl += parseFloat(nonTaxable);
incl += parseFloat(nonTaxable);
if (pair.value == 'price-including-tax-'+this.productId) {
price = incl;
} else if (pair.value == 'price-excluding-tax-'+this.productId) {
price = excl;
} else if (pair.value == 'old-price-'+this.productId) {
if (this.showIncludeTax || this.showBothPrices) {
price = incl;
} else {
price = excl;
}
} else {
if (this.showIncludeTax) {
price = incl;
} else {
price = excl;
}
}
if (price < 0) price = 0;
if (price > 0 || this.displayZeroPrice) {
formattedPrice = this.formatPrice(price);
} else {
formattedPrice = '';
}
if ($(pair.value).select('.price')[0]) {
$(pair.value).select('.price')[0].innerHTML = formattedPrice;
if ($(pair.value+this.duplicateIdSuffix) && $(pair.value+this.duplicateIdSuffix).select('.price')[0]) {
$(pair.value+this.duplicateIdSuffix).select('.price')[0].innerHTML = formattedPrice;
}
} else {
$(pair.value).innerHTML = formattedPrice;
if ($(pair.value+this.duplicateIdSuffix)) {
$(pair.value+this.duplicateIdSuffix).innerHTML = formattedPrice;
}
}
};
}.bind(this));
if (typeof(skipTierPricePercentUpdate) === "undefined" && typeof(this.tierPrices) !== "undefined") {
for (var i = 0; i < this.tierPrices.length; i++) {
$$('.benefit').each(function(el) {
var parsePrice = function(html) {
var format = this.priceFormat;
var decimalSymbol = format.decimalSymbol === undefined ? "," : format.decimalSymbol;
var regexStr = '[^0-9-' + decimalSymbol + ']';
//remove all characters except number and decimal symbol
html = html.replace(new RegExp(regexStr, 'g'), '');
html = html.replace(decimalSymbol, '.');
return parseFloat(html);
}.bind(this);
var updateTierPriceInfo = function(priceEl, tierPriceDiff, tierPriceEl, benefitEl) {
if (typeof(tierPriceEl) === "undefined") {
//tierPrice is not shown, e.g., MAP, no need to update the tier price info
return;
}
var price = parsePrice(priceEl.innerHTML);
var tierPrice = price + tierPriceDiff;
tierPriceEl.innerHTML = this.formatPrice(tierPrice);
var $percent = Selector.findChildElements(benefitEl, ['.percent.tier-' + i]);
$percent.each(function(el) {
el.innerHTML = Math.ceil(100 - ((100 / price) * tierPrice));
});
}.bind(this);
var tierPriceElArray = $$('.tier-price.tier-' + i + ' .price');
if (this.showBothPrices) {
var containerExclTax = $(this.containers[3]);
var tierPriceExclTaxDiff = this.tierPrices[i];
var tierPriceExclTaxEl = tierPriceElArray[0];
updateTierPriceInfo(containerExclTax, tierPriceExclTaxDiff, tierPriceExclTaxEl, el);
var containerInclTax = $(this.containers[2]);
var tierPriceInclTaxDiff = this.tierPricesInclTax[i];
var tierPriceInclTaxEl = tierPriceElArray[1];
updateTierPriceInfo(containerInclTax, tierPriceInclTaxDiff, tierPriceInclTaxEl, el);
} else if (this.showIncludeTax) {
var container = $(this.containers[0]);
var tierPriceInclTaxDiff = this.tierPricesInclTax[i];
var tierPriceInclTaxEl = tierPriceElArray[0];
updateTierPriceInfo(container, tierPriceInclTaxDiff, tierPriceInclTaxEl, el);
} else {
var container = $(this.containers[0]);
var tierPriceExclTaxDiff = this.tierPrices[i];
var tierPriceExclTaxEl = tierPriceElArray[0];
updateTierPriceInfo(container, tierPriceExclTaxDiff, tierPriceExclTaxEl, el);
}
}, this);
}
}
},
formatPrice: function(price) {
return formatCurrency(price, this.priceFormat);
}
};