// SpryValidationRadio.js - version 0.1 - Spry Pre-Release 1.5 // // Copyright (c) 2007. Adobe Systems Incorporated. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // * Neither the name of Adobe Systems Incorporated nor the names of its // contributors may be used to endorse or promote products derived from this // software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. var Spry; if (!Spry) Spry = {}; if (!Spry.Widget) Spry.Widget = {}; Spry.Widget.ValidationRadio = function(element, opts) { this.init(element); Spry.Widget.Utils.setOptions(this, opts); // set validateOn flags var validateOn = ['submit'].concat(this.validateOn || []); validateOn = validateOn.join(","); this.validateOn = 0 | (validateOn.indexOf('submit') != -1 ? Spry.Widget.ValidationRadio.ONSUBMIT : 0); this.validateOn = this.validateOn | (validateOn.indexOf('blur') != -1 ? Spry.Widget.ValidationRadio.ONBLUR : 0); this.validateOn = this.validateOn | (validateOn.indexOf('change') != -1 ? Spry.Widget.ValidationRadio.ONCHANGE : 0); if (this.additionalError) this.additionalError = this.getElement(this.additionalError); // Unfortunately in some browsers like Safari, the Stylesheets our // page depends on may not have been loaded at the time we are called. // This means we have to defer attaching our behaviors until after the // onload event fires, since some of our behaviors rely on dimensions // specified in the CSS. if (Spry.Widget.ValidationRadio.onloadDidFire) this.attachBehaviors(); else Spry.Widget.ValidationRadio.loadQueue.push(this); }; Spry.Widget.ValidationRadio.ONCHANGE = 1; Spry.Widget.ValidationRadio.ONBLUR = 2; Spry.Widget.ValidationRadio.ONSUBMIT = 4; Spry.Widget.ValidationRadio.prototype.init = function(element) { this.element = this.getElement(element); this.additionalError = false; this.radioElements = null; this.form = null; this.event_handlers = []; // this.element can be either the container () // or the element, when no error messages are used. this.requiredClass = "radioRequiredState"; this.focusClass = "radioFocusState"; this.invalidClass = "radioInvalidState"; this.validClass = "radioValidState"; this.emptyValue = ""; this.invalidValue = null; this.isRequired = true; this.validateOn = ["submit"]; // change, submit (blur ?) }; Spry.Widget.ValidationRadio.onloadDidFire = false; Spry.Widget.ValidationRadio.loadQueue = []; Spry.Widget.ValidationRadio.prototype.getElement = function(ele) { if (ele && typeof ele == "string") return document.getElementById(ele); return ele; }; Spry.Widget.ValidationRadio.processLoadQueue = function(handler) { Spry.Widget.ValidationRadio.onloadDidFire = true; var q = Spry.Widget.ValidationRadio.loadQueue; var qlen = q.length; for (var i = 0; i < qlen; i++) q[i].attachBehaviors(); }; Spry.Widget.ValidationRadio.addLoadListener = function(handler) { if (typeof window.addEventListener != 'undefined') window.addEventListener('load', handler, false); else if (typeof document.addEventListener != 'undefined') document.addEventListener('load', handler, false); else if (typeof window.attachEvent != 'undefined') window.attachEvent('onload', handler); }; Spry.Widget.ValidationRadio.addLoadListener(Spry.Widget.ValidationRadio.processLoadQueue); Spry.Widget.ValidationRadio.addLoadListener(function(){ Spry.Widget.Utils.addEventListener(window, "unload", Spry.Widget.Form.destroyAll, false); }); Spry.Widget.ValidationRadio.prototype.attachBehaviors = function() { // find the INPUT type="Radio" element(s) inside current container if (this.element.nodeName == "INPUT") { this.radioElements = [this.element]; } else { this.radioElements = this.getRadios(); } if (this.radioElements) { var self = this; this.event_handlers = []; var qlen = this.radioElements.length; for (var i = 0; i < qlen; i++) { // focus this.event_handlers.push([this.radioElements[i], "focus", function(e) { return self.onFocus(e); }]); // blur this.event_handlers.push([this.radioElements[i], "blur", function(e) { return self.onBlur(e); }]); // add click instead of onChange if (this.validateOn & Spry.Widget.ValidationRadio.ONCHANGE) { this.event_handlers.push([this.radioElements[i], "click", function(e) { return self.onClick(e); }]); } } for (var i=0; i