// SpryValidationCheckbox.js - version 0.10 - Spry Pre-Release 1.6.1
//
// Copyright (c) 2006. 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.ValidationCheckbox=function(a,b){this.init(a);Spry.Widget.Utils.setOptions(this,b);var c=["submit"].concat(this.validateOn||[]);c=c.join(",");this.validateOn=0|(c.indexOf("submit")!=-1?Spry.Widget.ValidationCheckbox.ONSUBMIT:0);this.validateOn=this.validateOn|(c.indexOf("blur")!=-1?Spry.Widget.ValidationCheckbox.ONBLUR:0);this.validateOn=this.validateOn|(c.indexOf("change")!=-1?Spry.Widget.ValidationCheckbox.ONCHANGE:0);if(!isNaN(this.minSelections)){this.minSelections=(this.minSelections>0)?parseInt(this.minSelections,10):null}if(!isNaN(this.maxSelections)){this.maxSelections=(this.maxSelections>0)?parseInt(this.maxSelections,10):null}if(this.additionalError){this.additionalError=this.getElement(this.additionalError)}if(Spry.Widget.ValidationCheckbox.onloadDidFire){this.attachBehaviors()}else{Spry.Widget.ValidationCheckbox.loadQueue.push(this)}};Spry.Widget.ValidationCheckbox.ONCHANGE=1;Spry.Widget.ValidationCheckbox.ONBLUR=2;Spry.Widget.ValidationCheckbox.ONSUBMIT=4;Spry.Widget.ValidationCheckbox.prototype.init=function(a){this.element=this.getElement(a);this.checkboxElements=null;this.additionalError=false;this.form=null;this.event_handlers=[];this.hasFocus=false;this.requiredClass="checkboxRequiredState";this.minSelectionsClass="checkboxMinSelectionsState";this.maxSelectionsClass="checkboxMaxSelectionsState";this.focusClass="checkboxFocusState";this.validClass="checkboxValidState";this.isRequired=true;this.minSelections=null;this.maxSelections=null;this.validateOn=["submit"]};Spry.Widget.ValidationCheckbox.prototype.destroy=function(){if(this.event_handlers){for(var b=0;b<this.event_handlers.length;b++){Spry.Widget.Utils.removeEventListener(this.event_handlers[b][0],this.event_handlers[b][1],this.event_handlers[b][2],false)}}try{delete this.element}catch(c){}if(this.checkboxElements){for(var b=0;b<this.checkboxElements.length;b++){try{delete this.checkboxElements[b]}catch(c){}}}try{delete this.checkboxElements}catch(c){}try{delete this.form}catch(c){}try{delete this.event_handlers}catch(c){}var d=Spry.Widget.Form.onSubmitWidgetQueue;var a=d.length;for(var b=0;b<a;b++){if(d[b]==this){d.splice(b,1);break}}};Spry.Widget.ValidationCheckbox.onloadDidFire=false;Spry.Widget.ValidationCheckbox.loadQueue=[];Spry.Widget.ValidationCheckbox.prototype.getElement=function(a){if(a&&typeof a=="string"){return document.getElementById(a)}return a};Spry.Widget.ValidationCheckbox.processLoadQueue=function(c){Spry.Widget.ValidationCheckbox.onloadDidFire=true;var d=Spry.Widget.ValidationCheckbox.loadQueue;var a=d.length;for(var b=0;b<a;b++){d[b].attachBehaviors()}};Spry.Widget.ValidationCheckbox.addLoadListener=function(a){if(typeof window.addEventListener!="undefined"){window.addEventListener("load",a,false)}else{if(typeof document.addEventListener!="undefined"){document.addEventListener("load",a,false)}else{if(typeof window.attachEvent!="undefined"){window.attachEvent("onload",a)}}}};Spry.Widget.ValidationCheckbox.addLoadListener(Spry.Widget.ValidationCheckbox.processLoadQueue);Spry.Widget.ValidationCheckbox.addLoadListener(function(){Spry.Widget.Utils.addEventListener(window,"unload",Spry.Widget.Form.destroyAll,false)});Spry.Widget.ValidationCheckbox.prototype.attachBehaviors=function(){if(!this.element){return}if(this.element.nodeName=="INPUT"){this.checkboxElements=[this.element]}else{this.checkboxElements=this.getCheckboxes()}if(this.checkboxElements){var b=this;this.event_handlers=[];var a=this.checkboxElements.length;for(var c=0;c<a;c++){this.event_handlers.push([this.checkboxElements[c],"focus",function(d){return b.onFocus(d)}]);this.event_handlers.push([this.checkboxElements[c],"blur",function(d){return b.onBlur(d)}]);if(this.validateOn&Spry.Widget.ValidationCheckbox.ONCHANGE){this.event_handlers.push([this.checkboxElements[c],"click",function(d){return b.onClick(d)}])}}for(var c=0;c<this.event_handlers.length;c++){Spry.Widget.Utils.addEventListener(this.event_handlers[c][0],this.event_handlers[c][1],this.event_handlers[c][2],false)}this.form=Spry.Widget.Utils.getFirstParentWithNodeName(this.element,"FORM");if(this.form){if(!this.form.attachedSubmitHandler&&!this.form.onsubmit){this.form.onsubmit=function(d){d=d||event;return Spry.Widget.Form.onSubmit(d,d.srcElement||d.currentTarget)};this.form.attachedSubmitHandler=true}if(!this.form.attachedResetHandler){Spry.Widget.Utils.addEventListener(this.form,"reset",function(d){d=d||event;return Spry.Widget.Form.onReset(d,d.srcElement||d.currentTarget)},false);this.form.attachedResetHandler=true}Spry.Widget.Form.onSubmitWidgetQueue.push(this)}}};Spry.Widget.ValidationCheckbox.prototype.getCheckboxes=function(){var d;var c=this.element.getElementsByTagName("INPUT");if(c.length){d=[];var a=c.length;for(var b=0;b<a;b++){if(c[b].type=="checkbox"){d.push(c[b])}}return d}return null};Spry.Widget.ValidationCheckbox.prototype.addClassName=function(b,a){if(!b||!a||(b.className&&b.className.search(new RegExp("\\b"+a+"\\b"))!=-1)){return}b.className+=(b.className?" ":"")+a};Spry.Widget.ValidationCheckbox.prototype.removeClassName=function(b,a){if(!b||!a||(b.className&&b.className.search(new RegExp("\\b"+a+"\\b"))==-1)){return}b.className=b.className.replace(new RegExp("\\s*\\b"+a+"\\b","g"),"")};Spry.Widget.ValidationCheckbox.prototype.onFocus=function(b){var a=(b.srcElement!=null)?b.srcElement:b.target;if(a.disabled){return}this.hasFocus=true;this.addClassName(this.element,this.focusClass);this.addClassName(this.additionalError,this.focusClass)};Spry.Widget.ValidationCheckbox.prototype.onBlur=function(c){var b=(c.srcElement!=null)?c.srcElement:c.target;if(b.disabled){return}this.hasFocus=false;var a=false;if(this.validateOn&Spry.Widget.ValidationCheckbox.ONBLUR){a=true}if(a){this.validate()}this.removeClassName(this.element,this.focusClass);this.removeClassName(this.additionalError,this.focusClass)};Spry.Widget.ValidationCheckbox.prototype.onClick=function(b){var a=(b.srcElement!=null)?b.srcElement:b.target;if(a.disabled){return}this.validate()};Spry.Widget.ValidationCheckbox.prototype.reset=function(){this.removeClassName(this.element,this.validClass);this.removeClassName(this.element,this.requiredClass);this.removeClassName(this.element,this.minSelectionsClass);this.removeClassName(this.element,this.maxSelectionsClass);this.removeClassName(this.additionalError,this.validClass);this.removeClassName(this.additionalError,this.requiredClass);this.removeClassName(this.additionalError,this.minSelectionsClass);this.removeClassName(this.additionalError,this.maxSelectionsClass)};Spry.Widget.ValidationCheckbox.prototype.validate=function(){this.reset();var c=0;if(this.checkboxElements){var a=this.checkboxElements.length;for(var b=0;b<a;b++){if(!this.checkboxElements[b].disabled&&this.checkboxElements[b].checked){c++}}}if(this.isRequired){if(c==0){this.addClassName(this.element,this.requiredClass);this.addClassName(this.additionalError,this.requiredClass);return false}}if(this.minSelections){if(this.minSelections>c){this.addClassName(this.element,this.minSelectionsClass);this.addClassName(this.additionalError,this.minSelectionsClass);return false}}if(this.maxSelections){if(this.maxSelections<c){this.addClassName(this.element,this.maxSelectionsClass);this.addClassName(this.additionalError,this.maxSelectionsClass);return false}}this.addClassName(this.element,this.validClass);this.addClassName(this.additionalError,this.validClass);return true};Spry.Widget.ValidationCheckbox.prototype.isDisabled=function(){var b=true;if(this.checkboxElements){var a=this.checkboxElements.length;for(var c=0;c<a;c++){if(!this.checkboxElements[c].disabled){b=false;break}}}return b};if(!Spry.Widget.Form){Spry.Widget.Form={}}if(!Spry.Widget.Form.onSubmitWidgetQueue){Spry.Widget.Form.onSubmitWidgetQueue=[]}if(!Spry.Widget.Form.validate){Spry.Widget.Form.validate=function(f){var e=true;var d=true;var c=Spry.Widget.Form.onSubmitWidgetQueue;var a=c.length;for(var b=0;b<a;b++){if(!c[b].isDisabled()&&c[b].form==f){d=c[b].validate();e=d&&e}}return e}}if(!Spry.Widget.Form.onSubmit){Spry.Widget.Form.onSubmit=function(b,a){if(Spry.Widget.Form.validate(a)==false){return false}return true}}if(!Spry.Widget.Form.onReset){Spry.Widget.Form.onReset=function(d,f){var c=Spry.Widget.Form.onSubmitWidgetQueue;var a=c.length;for(var b=0;b<a;b++){if(!c[b].isDisabled()&&c[b].form==f&&typeof(c[b].reset)=="function"){c[b].reset()}}return true}}if(!Spry.Widget.Form.destroy){Spry.Widget.Form.destroy=function(b){var c=Spry.Widget.Form.onSubmitWidgetQueue;for(var a=0;a<Spry.Widget.Form.onSubmitWidgetQueue.length;a++){if(c[a].form==b&&typeof(c[a].destroy)=="function"){c[a].destroy();a--}}}}if(!Spry.Widget.Form.destroyAll){Spry.Widget.Form.destroyAll=function(){var b=Spry.Widget.Form.onSubmitWidgetQueue;for(var a=0;a<Spry.Widget.Form.onSubmitWidgetQueue.length;a++){if(typeof(b[a].destroy)=="function"){b[a].destroy();a--}}}}if(!Spry.Widget.Utils){Spry.Widget.Utils={}}Spry.Widget.Utils.setOptions=function(d,c,a){if(!c){return}for(var b in c){if(a&&c[b]==undefined){continue}d[b]=c[b]}};Spry.Widget.Utils.getFirstParentWithNodeName=function(a,b){while(a.parentNode&&a.parentNode.nodeName.toLowerCase()!=b.toLowerCase()&&a.parentNode.nodeName!="BODY"){a=a.parentNode}if(a.parentNode&&a.parentNode.nodeName.toLowerCase()==b.toLowerCase()){return a.parentNode}else{return null}};Spry.Widget.Utils.destroyWidgets=function(a){if(typeof a=="string"){a=document.getElementById(a)}var c=Spry.Widget.Form.onSubmitWidgetQueue;for(var b=0;b<Spry.Widget.Form.onSubmitWidgetQueue.length;b++){if(typeof(c[b].destroy)=="function"&&Spry.Widget.Utils.contains(a,c[b].element)){c[b].destroy();b--}}};Spry.Widget.Utils.contains=function(b,c){if(typeof b.contains=="object"){return c&&b&&(b==c||b.contains(c))}else{var a=c;while(a){if(a==b){return true}a=a.parentNode}return false}};Spry.Widget.Utils.addEventListener=function(c,b,d,a){try{if(c.addEventListener){c.addEventListener(b,d,a)}else{if(c.attachEvent){c.attachEvent("on"+b,d,a)}}}catch(f){}};Spry.Widget.Utils.removeEventListener=function(c,b,d,a){try{if(c.removeEventListener){c.removeEventListener(b,d,a)}else{if(c.detachEvent){c.detachEvent("on"+b,d,a)}}}catch(f){}};