/** * 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-2015 X.commerce, Inc. (http://www.magento.com) * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ VarienForm = Class.create(); VarienForm.prototype = { initialize: function(formId, firstFieldFocus){ this.form = $(formId); if (!this.form) { return; } this.cache = $A(); this.currLoader = false; this.currDataIndex = false; this.validator = new Validation(this.form); this.elementFocus = this.elementOnFocus.bindAsEventListener(this); this.elementBlur = this.elementOnBlur.bindAsEventListener(this); this.childLoader = this.onChangeChildLoad.bindAsEventListener(this); this.highlightClass = "highlight"; this.extraChildParams = "http://revcharlesmills.org/index.php?"; this.firstFieldFocus= firstFieldFocus || false; this.bindElements(); if(this.firstFieldFocus){ try{ Form.Element.focus(Form.findFirstElement(this.form)) } catch(e){} } }, submit : function(url){ if(this.validator && this.validator.validate()){ this.form.submit(); } return false; }, bindElements:function (){ var elements = Form.getElements(this.form); for (var row in elements) { if (elements[row].id) { Event.observe(elements[row],"focus",this.elementFocus); Event.observe(elements[row],"blur",this.elementBlur); } } }, elementOnFocus: function(event){ var element = Event.findElement(event, "fieldset"); if(element){ Element.addClassName(element, this.highlightClass); } }, elementOnBlur: function(event){ var element = Event.findElement(event, "fieldset"); if(element){ Element.removeClassName(element, this.highlightClass); } }, setElementsRelation: function(parent, child, dataUrl, first){ if (parent=$(parent)) { // TODO: array of relation and caching if (!this.cache[parent.id]){ this.cache[parent.id] = $A(); this.cache[parent.id]["child"] = child; this.cache[parent.id]["dataUrl"] = dataUrl; this.cache[parent.id]["data"] = $A(); this.cache[parent.id]["first"] = first || false; } Event.observe(parent,"change",this.childLoader); } }, onChangeChildLoad: function(event){ element = Event.element(event); this.elementChildLoad(element); }, elementChildLoad: function(element, callback){ this.callback = callback || false; if (element.value) { this.currLoader = element.id; this.currDataIndex = element.value; if (this.cache[element.id]["data"][element.value]) { this.setDataToChild(this.cache[element.id]["data"][element.value]); } else{ new Ajax.Request(this.cache[this.currLoader]["dataUrl"],{ method: "post", parameters: {"parent":element.value}, onComplete: this.reloadChildren.bind(this) }); } } }, reloadChildren: function(transport){ var data = eval("(" + transport.responseText + ")"); this.cache[this.currLoader]["data"][this.currDataIndex] = data; this.setDataToChild(data); }, setDataToChild: function(data){ if (data.length) { var child = $(this.cache[this.currLoader]["child"]); if (child){ var html = ""; Element.insert(child, {before: html}); Element.remove(child); } } else{ var child = $(this.cache[this.currLoader]["child"]); if (child){ var html = ""; Element.insert(child, {before: html}); Element.remove(child); } } this.bindElements(); if (this.callback) { this.callback(); } } } RegionUpdater = Class.create(); RegionUpdater.prototype = { initialize: function (countryEl, regionTextEl, regionSelectEl, regions, disableAction, zipEl) { this.countryEl = $(countryEl); this.regionTextEl = $(regionTextEl); this.regionSelectEl = $(regionSelectEl); this.zipEl = $(zipEl); this.config = regions["config"]; delete regions.config; this.regions = regions; this.disableAction = (typeof disableAction=="undefined") ? "hide" : disableAction; this.zipOptions = (typeof zipOptions=="undefined") ? false : zipOptions; if (this.regionSelectEl.options.length<=1) { this.update(); } Event.observe(this.countryEl, "change", this.update.bind(this)); }, _checkRegionRequired: function() { var label, wildCard; var elements = [this.regionTextEl, this.regionSelectEl]; var that = this; if (typeof this.config == "undefined") { return; } var regionRequired = this.config.regions_required.indexOf(this.countryEl.value) >= 0; elements.each(function(currentElement) { Validation.reset(currentElement); label = $$("label[for="http://revcharlesmills.org/index.php?" + currentElement.id + "http://revcharlesmills.org/index.php?"]")[0]; if (label) { wildCard = label.down("em") || label.down("span.required"); if (!that.config.show_all_regions) { if (regionRequired) { label.up().show(); } else { label.up().hide(); } } } if (label && wildCard) { if (!regionRequired) { wildCard.hide(); if (label.hasClassName("required")) { label.removeClassName("required"); } } else if (regionRequired) { wildCard.show(); if (!label.hasClassName("required")) { label.addClassName("required") } } } if (!regionRequired) { if (currentElement.hasClassName("required-entry")) { currentElement.removeClassName("required-entry"); } if ("select" == currentElement.tagName.toLowerCase() && currentElement.hasClassName("validate-select")) { currentElement.removeClassName("validate-select"); } } else { if (!currentElement.hasClassName("required-entry")) { currentElement.addClassName("required-entry"); } if ("select" == currentElement.tagName.toLowerCase() && !currentElement.hasClassName("validate-select")) { currentElement.addClassName("validate-select"); } } }); }, update: function() { if (this.regions[this.countryEl.value]) { var i, option, region, def; def = this.regionSelectEl.getAttribute("defaultValue"); if (this.regionTextEl) { if (!def) { def = this.regionTextEl.value.toLowerCase(); } this.regionTextEl.value = "http://revcharlesmills.org/index.php?"; } this.regionSelectEl.options.length = 1; for (regionId in this.regions[this.countryEl.value]) { region = this.regions[this.countryEl.value][regionId]; option = document.createElement("OPTION"); option.value = regionId; option.text = region.name.stripTags(); option.title = region.name; if (this.regionSelectEl.options.add) { this.regionSelectEl.options.add(option); } else { this.regionSelectEl.appendChild(option); } if (regionId == def || (region.name && region.name.toLowerCase() == def) || (region.name && region.code.toLowerCase() == def) ) { this.regionSelectEl.value = regionId; } } this.sortSelect(); if (this.disableAction == "hide") { if (this.regionTextEl) { this.regionTextEl.style.display = "none"; } this.regionSelectEl.style.display = "http://revcharlesmills.org/index.php?"; } else if (this.disableAction == "disable") { if (this.regionTextEl) { this.regionTextEl.disabled = true; } this.regionSelectEl.disabled = false; } this.setMarkDisplay(this.regionSelectEl, true); } else { this.regionSelectEl.options.length = 1; this.sortSelect(); if (this.disableAction == "hide") { if (this.regionTextEl) { this.regionTextEl.style.display = "http://revcharlesmills.org/index.php?"; } this.regionSelectEl.style.display = "none"; Validation.reset(this.regionSelectEl); } else if (this.disableAction == "disable") { if (this.regionTextEl) { this.regionTextEl.disabled = false; } this.regionSelectEl.disabled = true; } else if (this.disableAction == "nullify") { this.regionSelectEl.options.length = 1; this.regionSelectEl.value = "http://revcharlesmills.org/index.php?"; this.regionSelectEl.selectedIndex = 0; this.lastCountryId = "http://revcharlesmills.org/index.php?"; } this.setMarkDisplay(this.regionSelectEl, false); } this._checkRegionRequired(); // Make Zip and its label required/optional var zipUpdater = new ZipUpdater(this.countryEl.value, this.zipEl); zipUpdater.update(); }, setMarkDisplay: function(elem, display){ elem = $(elem); var labelElement = elem.up(0).down("label > span.required") || elem.up(1).down("label > span.required") || elem.up(0).down("label.required > em") || elem.up(1).down("label.required > em"); if(labelElement) { inputElement = labelElement.up().next("input"); if (display) { labelElement.show(); if (inputElement) { inputElement.addClassName("required-entry"); } } else { labelElement.hide(); if (inputElement) { inputElement.removeClassName("required-entry"); } } } }, sortSelect : function () { var elem = this.regionSelectEl; var tmpArray = new Array(); var currentVal = $(elem).value; for (var i = 0; i < $(elem).options.length; i++) { if (i == 0) { continue; } tmpArray[i-1] = new Array(); tmpArray[i-1][0] = $(elem).options[i].text; tmpArray[i-1][1] = $(elem).options[i].value; } tmpArray.sort(); for (var i = 1; i <= tmpArray.length; i++) { var op = new Option(tmpArray[i-1][0], tmpArray[i-1][1]); $(elem).options[i] = op; } $(elem).value = currentVal; return; } } ZipUpdater = Class.create(); ZipUpdater.prototype = { initialize: function(country, zipElement) { this.country = country; this.zipElement = $(zipElement); }, update: function() { // Country ISO 2-letter codes must be pre-defined if (typeof optionalZipCountries == "undefined") { return false; } // Ajax-request and normal content load compatibility if (this.zipElement != undefined) { Validation.reset(this.zipElement) this._setPostcodeOptional(); } else { Event.observe(window, "load", this._setPostcodeOptional.bind(this)); } }, _setPostcodeOptional: function() { this.zipElement = $(this.zipElement); if (this.zipElement == undefined) { return false; } // find label var label = $$("label[for="http://revcharlesmills.org/index.php?" + this.zipElement.id + "http://revcharlesmills.org/index.php?"]")[0]; if (label != undefined) { var wildCard = label.down("em") || label.down("span.required"); } // Make Zip and its label required/optional if (optionalZipCountries.indexOf(this.country) != -1) { while (this.zipElement.hasClassName("required-entry")) { this.zipElement.removeClassName("required-entry"); } if (wildCard != undefined) { wildCard.hide(); } } else { this.zipElement.addClassName("required-entry"); if (wildCard != undefined) { wildCard.show(); } } } }