/**
* 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@magentocommerce.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.magentocommerce.com for more information.
*
* @category Mage
* @package Mage_Adminhtml
* @copyright Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
*/
var Product = {};
Product.Gallery = Class.create();
Product.Gallery.prototype = {
images : [],
file2id : {
'no_selection' :0
},
idIncrement :1,
containerId :'',
container :null,
uploader :null,
imageTypes : {},
initialize : function(containerId, uploader, imageTypes) {
this.containerId = containerId, this.container = $(this.containerId);
this.uploader = uploader;
this.imageTypes = imageTypes;
if (this.uploader) {
this.uploader.onFilesComplete = this.handleUploadComplete
.bind(this);
}
// this.uploader.onFileProgress = this.handleUploadProgress.bind(this);
// this.uploader.onFileError = this.handleUploadError.bind(this);
this.images = this.getElement('save').value.evalJSON();
this.imagesValues = this.getElement('save_image').value.evalJSON();
this.template = new Template('
' + this
.getElement('template').innerHTML + '
', new RegExp(
'(^|.|\\r|\\n)(__([a-zA-Z0-9_]+)__)', ''));
this.fixParentTable();
this.updateImages();
varienGlobalEvents.attachEventHandler('moveTab', this.onImageTabMove
.bind(this));
},
onImageTabMove : function(event) {
var imagesTab = false;
this.container.ancestors().each( function(parentItem) {
if (parentItem.tabObject) {
imagesTab = parentItem.tabObject;
throw $break;
}
}.bind(this));
if (imagesTab && event.tab && event.tab.name && imagesTab.name == event.tab.name) {
this.container.select('input[type="radio"]').each(function(radio) {
radio.observe('change', this.onChangeRadio);
}.bind(this));
this.updateImages();
}
},
fixParentTable : function() {
this.container.ancestors().each( function(parentItem) {
if (parentItem.tagName.toLowerCase() == 'td') {
parentItem.style.width = '100%';
}
if (parentItem.tagName.toLowerCase() == 'table') {
parentItem.style.width = '100%';
throw $break;
}
});
},
getElement : function(name) {
return $(this.containerId + '_' + name);
},
showUploader : function() {
this.getElement('add_images_button').hide();
this.getElement('uploader').show();
},
handleUploadComplete : function(files) {
files.each( function(item) {
if (!item.response.isJSON()) {
try {
console.log(item.response);
} catch (e2) {
alert(item.response);
}
return;
}
var response = item.response.evalJSON();
if (response.error) {
return;
}
var newImage = {};
newImage.url = response.url;
newImage.file = response.file;
newImage.label = '';
newImage.position = this.getNextPosition();
newImage.disabled = 0;
newImage.removed = 0;
this.images.push(newImage);
this.uploader.removeFile(item.id);
}.bind(this));
this.container.setHasChanges();
this.updateImages();
},
updateImages : function() {
this.getElement('save').value = this.images.toJSON();
$H(this.imageTypes).each(
function(pair) {
this.getFileElement('no_selection',
'cell-' + pair.key + ' input').checked = true;
}.bind(this));
this.images.each( function(row) {
if (!$(this.prepareId(row.file))) {
this.createImageRow(row);
}
this.updateVisualisation(row.file);
}.bind(this));
this.updateUseDefault(false);
},
onChangeRadio: function (evt) {
var element = Event.element(evt);
element.setHasChanges();
},
createImageRow : function(image) {
var vars = Object.clone(image);
vars.id = this.prepareId(image.file);
var html = this.template.evaluate(vars);
Element.insert(this.getElement('list'), {
bottom :html
});
$(vars.id).select('input[type="radio"]').each(function(radio) {
radio.observe('change', this.onChangeRadio);
}.bind(this));
},
prepareId : function(file) {
if (typeof this.file2id[file] == 'undefined') {
this.file2id[file] = this.idIncrement++;
}
return this.containerId + '-image-' + this.file2id[file];
},
getNextPosition : function() {
var maxPosition = 0;
this.images.each( function(item) {
if (parseInt(item.position) > maxPosition) {
maxPosition = parseInt(item.position);
}
});
return maxPosition + 1;
},
updateImage : function(file) {
var index = this.getIndexByFile(file);
this.images[index].label = this
.getFileElement(file, 'cell-label input').value;
this.images[index].position = this.getFileElement(file,
'cell-position input').value;
this.images[index].removed = (this.getFileElement(file,
'cell-remove input').checked ? 1 : 0);
this.images[index].disabled = (this.getFileElement(file,
'cell-disable input').checked ? 1 : 0);
this.getElement('save').value = this.images.toJSON();
this.updateState(file);
this.container.setHasChanges();
},
loadImage : function(file) {
var image = this.getImageByFile(file);
this.getFileElement(file, 'cell-image img').src = image.url;
this.getFileElement(file, 'cell-image img').show();
this.getFileElement(file, 'cell-image .place-holder').hide();
},
setProductImages : function(file) {
$H(this.imageTypes)
.each(
function(pair) {
if (this.getFileElement(file,
'cell-' + pair.key + ' input').checked) {
this.imagesValues[pair.key] = (file == 'no_selection' ? null
: file);
}
}.bind(this));
this.getElement('save_image').value = $H(this.imagesValues).toJSON();
},
updateVisualisation : function(file) {
var image = this.getImageByFile(file);
this.getFileElement(file, 'cell-label input').value = image.label;
this.getFileElement(file, 'cell-position input').value = image.position;
this.getFileElement(file, 'cell-remove input').checked = (image.removed == 1);
this.getFileElement(file, 'cell-disable input').checked = (image.disabled == 1);
$H(this.imageTypes)
.each(
function(pair) {
if (this.imagesValues[pair.key] == file) {
this.getFileElement(file,
'cell-' + pair.key + ' input').checked = true;
}
}.bind(this));
this.updateState(file);
},
updateState : function(file) {
if (this.getFileElement(file, 'cell-disable input').checked) {
this.getFileElement(file, 'cell-position input').disabled = true;
} else {
this.getFileElement(file, 'cell-position input').disabled = false;
}
},
getFileElement : function(file, element) {
var selector = '#' + this.prepareId(file) + ' .' + element;
var elems = $$(selector);
if (!elems[0]) {
try {
console.log(selector);
} catch (e2) {
alert(selector);
}
}
return $$('#' + this.prepareId(file) + ' .' + element)[0];
},
getImageByFile : function(file) {
if (this.getIndexByFile(file) === null) {
return false;
}
return this.images[this.getIndexByFile(file)];
},
getIndexByFile : function(file) {
var index;
this.images.each( function(item, i) {
if (item.file == file) {
index = i;
}
});
return index;
},
updateUseDefault : function() {
if (this.getElement('default')) {
this.getElement('default').select('input').each(
function(input) {
$(this.containerId).select(
'.cell-' + input.value + ' input').each(
function(radio) {
radio.disabled = input.checked;
});
}.bind(this));
}
if (arguments.length == 0) {
this.container.setHasChanges();
}
},
handleUploadProgress : function(file) {
},
handleUploadError : function(fileId) {
}
};
Product.AttributesBridge = {
tabsObject :false,
bindTabs2Attributes : {},
bind : function(tabId, attributesObject) {
this.bindTabs2Attributes[tabId] = attributesObject;
},
getAttributes : function(tabId) {
return this.bindTabs2Attributes[tabId];
},
setTabsObject : function(tabs) {
this.tabsObject = tabs;
},
getTabsObject : function() {
return this.tabsObject;
},
addAttributeRow : function(data) {
$H(data).each( function(item) {
if (this.getTabsObject().activeTab.name != item.key) {
this.getTabsObject().showTabContent($(item.key));
}
this.getAttributes(item.key).addRow(item.value);
}.bind(this));
}
};
Product.Attributes = Class.create();
Product.Attributes.prototype = {
config : {},
containerId :null,
initialize : function(containerId) {
this.containerId = containerId;
},
setConfig : function(config) {
this.config = config;
Product.AttributesBridge.bind(this.getConfig().tab_id, this);
},
getConfig : function() {
return this.config;
},
create : function() {
var win = window.open(this.getConfig().url, 'new_attribute',
'width=900,height=600,resizable=1,scrollbars=1');
win.focus();
},
addRow : function(html) {
var attributesContainer = $$('#group_fields' + this.getConfig().group_id + ' .form-list tbody')[0];
Element.insert(attributesContainer, {
bottom :html
});
var childs = attributesContainer.childElements();
var element = childs[childs.size() - 1].select('input', 'select',
'textarea')[0];
if (element) {
window.scrollTo(0, Position.cumulativeOffset(element)[1]
+ element.offsetHeight);
}
}
};
Product.Configurable = Class.create();
Product.Configurable.prototype = {
initialize : function(attributes, links, idPrefix, grid, readonly) {
this.templatesSyntax = new RegExp(
'(^|.|\\r|\\n)(\'{{\\s*(\\w+)\\s*}}\')', "");
this.attributes = attributes; // Attributes
this.idPrefix = idPrefix; // Container id prefix
this.links = $H(links); // Associated products
this.newProducts = []; // For product that's created through Create
// Empty and Copy from Configurable
this.readonly = readonly;
/* Generation templates */
this.addAttributeTemplate = new Template(
$(idPrefix + 'attribute_template').innerHTML.replace(/__id__/g,
"'{{html_id}}'").replace(/ template no-display/g, ''),
this.templatesSyntax);
this.addValueTemplate = new Template(
$(idPrefix + 'value_template').innerHTML.replace(/__id__/g,
"'{{html_id}}'").replace(/ template no-display/g, ''),
this.templatesSyntax);
this.pricingValueTemplate = new Template(
$(idPrefix + 'simple_pricing').innerHTML, this.templatesSyntax);
this.pricingValueViewTemplate = new Template(
$(idPrefix + 'simple_pricing_view').innerHTML,
this.templatesSyntax);
this.container = $(idPrefix + 'attributes');
/* Listeners */
this.onLabelUpdate = this.updateLabel.bindAsEventListener(this); // Update
// attribute
// label
this.onValuePriceUpdate = this.updateValuePrice
.bindAsEventListener(this); // Update pricing value
this.onValueTypeUpdate = this.updateValueType.bindAsEventListener(this); // Update
// pricing
// type
this.onValueDefaultUpdate = this.updateValueUseDefault
.bindAsEventListener(this);
/* Grid initialization and attributes initialization */
this.createAttributes(); // Creation of default attributes
this.grid = grid;
this.grid.rowClickCallback = this.rowClick.bind(this);
this.grid.initRowCallback = this.rowInit.bind(this);
this.grid.checkboxCheckCallback = this.registerProduct.bind(this); // Associate/Unassociate
// simple
// product
this.grid.rows.each( function(row) {
this.rowInit(this.grid, row);
}.bind(this));
},
createAttributes : function() {
this.attributes.each( function(attribute, index) {
// var li = Builder.node('li', {className:'attribute'});
var li = $(document.createElement('LI'));
li.className = 'attribute';
li.id = this.idPrefix + '_attribute_' + index;
attribute.html_id = li.id;
if (attribute && attribute.label && attribute.label.blank()) {
attribute.label = ' '
}
var label_readonly = '';
var use_default_checked = '';
if (attribute.use_default == '1') {
use_default_checked = ' checked="checked"';
label_readonly = ' redonly="redonly"';
}
var template = this.addAttributeTemplate.evaluate(attribute);
template = template.replace(
new RegExp(' readonly="label"', 'g'), label_readonly);
template = template.replace(new RegExp(
' checked="use_default"', 'g'), use_default_checked);
li.update(template);
li.attributeObject = attribute;
this.container.appendChild(li);
li.attributeValues = li.down('.attribute-values');
if (attribute.values) {
attribute.values.each( function(value) {
this.createValueRow(li, value); // Add pricing values
}.bind(this));
}
/* Observe label change */
Event.observe(li.down('.attribute-label'), 'change',
this.onLabelUpdate);
Event.observe(li.down('.attribute-label'), 'keyup',
this.onLabelUpdate);
Event.observe(li.down('.attribute-use-default-label'),
'change', this.onLabelUpdate);
}.bind(this));
if (!this.readonly) {
// Creation of sortable for attributes sorting
Sortable.create(this.container, {
handle :'attribute-name-container',
onUpdate :this.updatePositions.bind(this)
});
}
this.updateSaveInput();
},
updateLabel : function(event) {
var li = Event.findElement(event, 'LI');
var labelEl = li.down('.attribute-label');
var defEl = li.down('.attribute-use-default-label');
li.attributeObject.label = labelEl.value;
if (defEl.checked) {
labelEl.readOnly = true;
li.attributeObject.use_default = 1;
} else {
labelEl.readOnly = false;
li.attributeObject.use_default = 0;
}
this.updateSaveInput();
},
updatePositions : function(param) {
this.container.childElements().each( function(row, index) {
row.attributeObject.position = index;
});
this.updateSaveInput();
},
addNewProduct : function(productId, attributes) {
if (this.checkAttributes(attributes)) {
this.links.set(productId, this.cloneAttributes(attributes));
} else {
this.newProducts.push(productId);
}
this.updateGrid();
this.updateValues();
this.grid.reload(null);
},
createEmptyProduct : function() {
this.createPopup(this.createEmptyUrl)
},
createNewProduct : function() {
this.createPopup(this.createNormalUrl);
},
createPopup : function(url) {
if (this.win && !this.win.closed) {
this.win.close();
}
this.win = window.open(url, '',
'width=1000,height=700,resizable=1,scrollbars=1');
this.win.focus();
},
registerProduct : function(grid, element, checked) {
if (checked) {
if (element.linkAttributes) {
this.links.set(element.value, element.linkAttributes);
}
} else {
this.links.unset(element.value);
}
this.updateGrid();
this.grid.rows.each( function(row) {
this.revalidateRow(this.grid, row);
}.bind(this));
this.updateValues();
},
updateProduct : function(productId, attributes) {
var isAssociated = false;
if (typeof this.links.get(productId) != 'undefined') {
isAssociated = true;
this.links.unset(productId);
}
if (isAssociated && this.checkAttributes(attributes)) {
this.links.set(productId, this.cloneAttributes(attributes));
} else if (isAssociated) {
this.newProducts.push(productId);
}
this.updateGrid();
this.updateValues();
this.grid.reload(null);
},
cloneAttributes : function(attributes) {
var newObj = [];
for ( var i = 0, length = attributes.length; i < length; i++) {
newObj[i] = Object.clone(attributes[i]);
}
return newObj;
},
rowClick : function(grid, event) {
var trElement = Event.findElement(event, 'tr');
var isInput = Event.element(event).tagName.toUpperCase() == 'INPUT';
if ($(Event.findElement(event, 'td')).down('a')) {
return;
}
if (trElement) {
var checkbox = $(trElement).down('input');
if (checkbox && !checkbox.disabled) {
var checked = isInput ? checkbox.checked : !checkbox.checked;
grid.setCheckboxChecked(checkbox, checked);
}
}
},
rowInit : function(grid, row) {
var checkbox = $(row).down('.checkbox');
var input = $(row).down('.value-json');
if (checkbox && input) {
checkbox.linkAttributes = input.value.evalJSON();
if (!checkbox.checked) {
if (!this.checkAttributes(checkbox.linkAttributes)) {
$(row).addClassName('invalid');
checkbox.disable();
} else {
$(row).removeClassName('invalid');
checkbox.enable();
}
}
}
},
revalidateRow : function(grid, row) {
var checkbox = $(row).down('.checkbox');
if (checkbox) {
if (!checkbox.checked) {
if (!this.checkAttributes(checkbox.linkAttributes)) {
$(row).addClassName('invalid');
checkbox.disable();
} else {
$(row).removeClassName('invalid');
checkbox.enable();
}
}
}
},
checkAttributes : function(attributes) {
var result = true;
this.links
.each( function(pair) {
var fail = false;
for ( var i = 0; i < pair.value.length && !fail; i++) {
for ( var j = 0; j < attributes.length && !fail; j++) {
if (pair.value[i].attribute_id == attributes[j].attribute_id
&& pair.value[i].value_index != attributes[j].value_index) {
fail = true;
}
}
}
if (!fail) {
result = false;
}
});
return result;
},
updateGrid : function() {
this.grid.reloadParams = {
'products[]' :this.links.keys().size() ? this.links.keys() : [ 0 ],
'new_products[]' :this.newProducts
};
},
updateValues : function() {
var uniqueAttributeValues = $H( {});
/* Collect unique attributes */
this.links.each( function(pair) {
for ( var i = 0, length = pair.value.length; i < length; i++) {
var attribute = pair.value[i];
if (uniqueAttributeValues.keys()
.indexOf(attribute.attribute_id) == -1) {
uniqueAttributeValues.set(attribute.attribute_id, $H( {}));
}
uniqueAttributeValues.get(attribute.attribute_id).set(
attribute.value_index, attribute);
}
});
/* Updating attributes value container */
this.container
.childElements()
.each(
function(row) {
var attribute = row.attributeObject;
for ( var i = 0, length = attribute.values.length; i < length; i++) {
if (uniqueAttributeValues.keys().indexOf(
attribute.attribute_id) == -1
|| uniqueAttributeValues
.get(attribute.attribute_id)
.keys()
.indexOf(
attribute.values[i].value_index) == -1) {
row.attributeValues
.childElements()
.each(
function(elem) {
if (elem.valueObject.value_index == attribute.values[i].value_index) {
elem.remove();
}
});
attribute.values[i] = undefined;
} else {
uniqueAttributeValues.get(
attribute.attribute_id).unset(
attribute.values[i].value_index);
}
}
attribute.values = attribute.values.compact();
if (uniqueAttributeValues
.get(attribute.attribute_id)) {
uniqueAttributeValues.get(
attribute.attribute_id).each(
function(pair) {
attribute.values.push(pair.value);
this
.createValueRow(row,
pair.value);
}.bind(this));
}
}.bind(this));
this.updateSaveInput();
this.updateSimpleForm();
},
createValueRow : function(container, value) {
var templateVariables = $H( {});
if (!this.valueAutoIndex) {
this.valueAutoIndex = 1;
}
templateVariables.set('html_id', container.id + '_'
+ this.valueAutoIndex);
templateVariables.update(value);
var pricingValue = parseFloat(templateVariables.get('pricing_value'));
if (!isNaN(pricingValue)) {
templateVariables.set('pricing_value', pricingValue);
} else {
templateVariables.unset('pricing_value');
}
this.valueAutoIndex++;
// var li = $(Builder.node('li', {className:'attribute-value'}));
var li = $(document.createElement('LI'));
li.className = 'attribute-value';
li.id = templateVariables.get('html_id');
li.update(this.addValueTemplate.evaluate(templateVariables));
li.valueObject = value;
if (typeof li.valueObject.is_percent == 'undefined') {
li.valueObject.is_percent = 0;
}
if (typeof li.valueObject.pricing_value == 'undefined') {
li.valueObject.pricing_value = '';
}
container.attributeValues.appendChild(li);
var priceField = li.down('.attribute-price');
var priceTypeField = li.down('.attribute-price-type');
if (parseInt(value.is_percent)) {
priceTypeField.options[1].selected = !(priceTypeField.options[0].selected = false);
} else {
priceTypeField.options[1].selected = !(priceTypeField.options[0].selected = true);
}
Event.observe(priceField, 'keyup', this.onValuePriceUpdate);
Event.observe(priceField, 'change', this.onValuePriceUpdate);
Event.observe(priceTypeField, 'change', this.onValueTypeUpdate);
var useDefaultEl = li.down('.attribute-use-default-value');
if (useDefaultEl) {
if (li.valueObject.use_default_value) {
useDefaultEl.checked = true;
this.updateUseDefaultRow(useDefaultEl, li);
}
Event.observe(useDefaultEl, 'change', this.onValueDefaultUpdate);
}
},
updateValuePrice : function(event) {
var li = Event.findElement(event, 'LI');
li.valueObject.pricing_value = (Event.element(event).value.blank() ? null
: Event.element(event).value);
this.updateSimpleForm();
this.updateSaveInput();
},
updateValueType : function(event) {
var li = Event.findElement(event, 'LI');
li.valueObject.is_percent = (Event.element(event).value.blank() ? null
: Event.element(event).value);
this.updateSimpleForm();
this.updateSaveInput();
},
updateValueUseDefault : function(event) {
var li = Event.findElement(event, 'LI');
var useDefaultEl = Event.element(event);
li.valueObject.use_default_value = useDefaultEl.checked;
this.updateUseDefaultRow(useDefaultEl, li);
},
updateUseDefaultRow : function(useDefaultEl, li) {
var priceField = li.down('.attribute-price');
var priceTypeField = li.down('.attribute-price-type');
if (useDefaultEl.checked) {
priceField.disabled = true;
priceTypeField.disabled = true;
} else {
priceField.disabled = false;
priceTypeField.disabled = false;
}
this.updateSimpleForm();
this.updateSaveInput();
},
updateSaveInput : function() {
$(this.idPrefix + 'save_attributes').value = this.attributes.toJSON();
$(this.idPrefix + 'save_links').value = this.links.toJSON();
},
initializeAdvicesForSimpleForm : function() {
if ($(this.idPrefix + 'simple_form').advicesInited) {
return;
}
$(this.idPrefix + 'simple_form').select('td.value').each( function(td) {
var adviceContainer = $(Builder.node('div'));
td.appendChild(adviceContainer);
td.select('input', 'select').each( function(element) {
element.advaiceContainer = adviceContainer;
});
});
$(this.idPrefix + 'simple_form').advicesInited = true;
},
quickCreateNewProduct : function() {
this.initializeAdvicesForSimpleForm();
$(this.idPrefix + 'simple_form').removeClassName('ignore-validate');
var validationResult = $(this.idPrefix + 'simple_form').select('input',
'select', 'textarea').collect( function(elm) {
return Validation.validate(elm, {
useTitle :false,
onElementValidate : function() {
}
});
}).all();
$(this.idPrefix + 'simple_form').addClassName('ignore-validate');
if (!validationResult) {
return;
}
var params = Form.serializeElements($(this.idPrefix + 'simple_form')
.select('input', 'select', 'textarea'), true);
params.form_key = FORM_KEY;
$('messages').update();
new Ajax.Request(this.createQuickUrl, {
parameters :params,
method :'post',
area :$(this.idPrefix + 'simple_form'),
onComplete :this.quickCreateNewProductComplete.bind(this)
});
},
quickCreateNewProductComplete : function(transport) {
var result = transport.responseText.evalJSON();
if (result.error) {
if (result.error.fields) {
$(this.idPrefix + 'simple_form').removeClassName(
'ignore-validate');
$H(result.error.fields)
.each(
function(pair) {
$('simple_product_' + pair.key).value = pair.value;
$('simple_product_' + pair.key + '_autogenerate').checked = false;
toggleValueElements(
$('simple_product_' + pair.key + '_autogenerate'),
$('simple_product_' + pair.key + '_autogenerate').parentNode);
Validation.ajaxError(
$('simple_product_' + pair.key),
result.error.message);
});
$(this.idPrefix + 'simple_form')
.addClassName('ignore-validate');
} else {
if (result.error.message) {
alert(result.error.message);
} else {
alert(result.error);
}
}
return;
} else if (result.messages) {
$('messages').update(result.messages);
}
result.attributes
.each( function(attribute) {
var attr = this.getAttributeById(attribute.attribute_id);
if (!this.getValueByIndex(attr, attribute.value_index)
&& result.pricing
&& result.pricing[attr.attribute_code]) {
attribute.is_percent = result.pricing[attr.attribute_code].is_percent;
attribute.pricing_value = (result.pricing[attr.attribute_code].value == null ? ''
: result.pricing[attr.attribute_code].value);
}
}.bind(this));
this.attributes.each( function(attribute) {
if ($('simple_product_' + attribute.attribute_code)) {
$('simple_product_' + attribute.attribute_code).value = '';
}
}.bind(this));
this.links.set(result.product_id, result.attributes);
this.updateGrid();
this.updateValues();
this.grid.reload();
},
checkCreationUniqueAttributes : function() {
var attributes = [];
this.attributes
.each( function(attribute) {
attributes
.push( {
attribute_id :attribute.attribute_id,
value_index :$('simple_product_' + attribute.attribute_code).value
});
}.bind(this));
return this.checkAttributes(attributes);
},
getAttributeByCode : function(attributeCode) {
var attribute = null;
this.attributes.each( function(item) {
if (item.attribute_code == attributeCode) {
attribute = item;
throw $break;
}
});
return attribute;
},
getAttributeById : function(attributeId) {
var attribute = null;
this.attributes.each( function(item) {
if (item.attribute_id == attributeId) {
attribute = item;
throw $break;
}
});
return attribute;
},
getValueByIndex : function(attribute, valueIndex) {
var result = null;
attribute.values.each( function(value) {
if (value.value_index == valueIndex) {
result = value;
throw $break;
}
});
return result;
},
showPricing : function(select, attributeCode) {
var attribute = this.getAttributeByCode(attributeCode);
if (!attribute) {
return;
}
select = $(select);
if (select.value
&& !$('simple_product_' + attributeCode + '_pricing_container')) {
Element
.insert(
select,
{
after :' '
});
var newContainer = select.next('div');
select.parentNode.removeChild(select);
newContainer.appendChild(select);
// Fix visualization bug
$(this.idPrefix + 'simple_form').down('.form-list').style.width = '100%';
}
var container = $('simple_product_' + attributeCode + '_pricing_container');
if (select.value) {
var value = this.getValueByIndex(attribute, select.value);
if (!value) {
if (!container.down('.attribute-price')) {
if (value == null) {
value = {};
}
container.update(this.pricingValueTemplate.evaluate(value));
var priceValueField = container.down('.attribute-price');
var priceTypeField = container
.down('.attribute-price-type');
priceValueField.attributeCode = attributeCode;
priceValueField.priceField = priceValueField;
priceValueField.typeField = priceTypeField;
priceTypeField.attributeCode = attributeCode;
priceTypeField.priceField = priceValueField;
priceTypeField.typeField = priceTypeField;
Event.observe(priceValueField, 'change',
this.updateSimplePricing.bindAsEventListener(this));
Event.observe(priceValueField, 'keyup',
this.updateSimplePricing.bindAsEventListener(this));
Event.observe(priceTypeField, 'change',
this.updateSimplePricing.bindAsEventListener(this));
$('simple_product_' + attributeCode + '_pricing_value').value = null;
$('simple_product_' + attributeCode + '_pricing_type').value = null;
}
} else if (!isNaN(parseFloat(value.pricing_value))) {
container.update(this.pricingValueViewTemplate.evaluate( {
'value' :(parseFloat(value.pricing_value) > 0 ? '+' : '')
+ parseFloat(value.pricing_value)
+ (parseInt(value.is_percent) > 0 ? '%' : '')
}));
$('simple_product_' + attributeCode + '_pricing_value').value = value.pricing_value;
$('simple_product_' + attributeCode + '_pricing_type').value = value.is_percent;
} else {
container.update('');
$('simple_product_' + attributeCode + '_pricing_value').value = null;
$('simple_product_' + attributeCode + '_pricing_type').value = null;
}
} else if (container) {
container.update('');
$('simple_product_' + attributeCode + '_pricing_value').value = null;
$('simple_product_' + attributeCode + '_pricing_type').value = null;
}
},
updateSimplePricing : function(evt) {
var element = Event.element(evt);
if (!element.priceField.value.blank()) {
$('simple_product_' + element.attributeCode + '_pricing_value').value = element.priceField.value;
$('simple_product_' + element.attributeCode + '_pricing_type').value = element.typeField.value;
} else {
$('simple_product_' + element.attributeCode + '_pricing_value').value = null;
$('simple_product_' + element.attributeCode + '_pricing_type').value = null;
}
},
updateSimpleForm : function() {
this.attributes.each( function(attribute) {
if ($('simple_product_' + attribute.attribute_code)) {
this.showPricing(
$('simple_product_' + attribute.attribute_code),
attribute.attribute_code);
}
}.bind(this));
},
showNoticeMessage : function() {
$('assign_product_warrning').show();
}
}
var onInitDisableFieldsList = [];
function toogleFieldEditMode(toogleIdentifier, fieldContainer) {
if ($(toogleIdentifier).checked) {
enableFieldEditMode(fieldContainer);
} else {
disableFieldEditMode(fieldContainer);
}
}
function disableFieldEditMode(fieldContainer) {
$(fieldContainer).disabled = true;
if ($(fieldContainer + '_hidden')) {
$(fieldContainer + '_hidden').disabled = true;
}
}
function enableFieldEditMode(fieldContainer) {
$(fieldContainer).disabled = false;
if ($(fieldContainer + '_hidden')) {
$(fieldContainer + '_hidden').disabled = false;
}
}
function initDisableFields(fieldContainer) {
onInitDisableFieldsList.push(fieldContainer);
}
function onCompleteDisableInited() {
onInitDisableFieldsList.each( function(item) {
disableFieldEditMode(item);
});
}
function onUrlkeyChanged(urlKey) {
urlKey = $(urlKey);
var hidden = urlKey.next('input[type=hidden]');
var chbx = urlKey.next('input[type=checkbox]');
var oldValue = chbx.value;
chbx.disabled = (oldValue == urlKey.value);
hidden.disabled = chbx.disabled;
}
function onCustomUseParentChanged(element) {
var useParent = (element.value == 1) ? true : false;
element.up(2).select('input', 'select', 'textarea').each(function(el){
if (element.id != el.id) {
el.disabled = useParent;
}
});
element.up(2).select('img').each(function(el){
if (useParent) {
el.hide();
} else {
el.show();
}
});
}
Event.observe(window, 'load', onCompleteDisableInited);