Type.registerNamespace('Sys.Extended.UI'); Sys.Extended.UI.MutuallyExclusiveCheckBoxBehavior = function(element) { // The MutuallyExclusiveCheckBoxBehavior allows only one checkbox in // a group with the same Key to be checked at a time // "element" - the DOM Element the behavior is associated with Sys.Extended.UI.MutuallyExclusiveCheckBoxBehavior.initializeBase(this, [element]); this._key = ""; this._clickHandler = Function.createDelegate(this, this._onclick); } Sys.Extended.UI.MutuallyExclusiveCheckBoxBehavior.prototype = { initialize: function() { Sys.Extended.UI.MutuallyExclusiveCheckBoxBehavior.callBaseMethod(this, 'initialize'); $addHandler(this.get_element(), "click", this._clickHandler); }, dispose: function() { if(this._key) { var keys = Sys.Extended.UI.MutuallyExclusiveCheckBoxBehavior.Keys; var ar = keys[this._key]; Array.remove(ar, this); this._key = null; } if(this._clickHandler) { $removeHandler(this.get_element(), "click", this._clickHandler); this._clickHandler = null; } Sys.Extended.UI.MutuallyExclusiveCheckBoxBehavior.callBaseMethod(this, 'dispose'); }, get_Key: function() { // The unique key to use to associate checkboxes. This key does not respect INamingContainer renaming. return this._key; }, set_Key: function(value) { var keys = Sys.Extended.UI.MutuallyExclusiveCheckBoxBehavior.Keys; if(value != this._key) { if(this._key) { var ar = keys[this._key]; Array.remove(ar, this._key); } this._key = value; if(value) { var ar = keys[this._key]; if(ar == null) ar = keys[this._key] = []; Array.add(ar, this); } } }, _onclick: function() { // Click handler used to ensure only one checkbox in its key is checked var element = this.get_element(); var keys = Sys.Extended.UI.MutuallyExclusiveCheckBoxBehavior.Keys; if(this._key && element.checked) { var ar = keys[this._key]; var t = this; Array.forEach(ar, function(b) { // Uncheck all other checkboxes in the same key group // "b" - checkbox in the same key group if(b != t) { b.get_element().checked = false; $common.tryFireEvent(b.get_element(), "change"); } }); } this.raiseChecked(new Sys.Extended.UI.MutuallyExclusiveCheckBoxEventArgs(element, this._key)); }, add_checked: function(handler) { this.get_events().addHandler('checked', handler); }, remove_checked: function(handler) { this.get_events().removeHandler('checked', handler); }, raiseChecked: function(eventArgs) { var handler = this.get_events().getHandler('checked'); if(handler) handler(this, eventArgs); } } Sys.Extended.UI.MutuallyExclusiveCheckBoxBehavior.registerClass('Sys.Extended.UI.MutuallyExclusiveCheckBoxBehavior', Sys.Extended.UI.BehaviorBase); Sys.Extended.UI.MutuallyExclusiveCheckBoxBehavior.Keys = {}; Sys.Extended.UI.MutuallyExclusiveCheckBoxEventArgs = function(checkbox, key) { // Event arguments used when the checked event is raised // "checkbox" - checkbox that was checked or unchecked // "key" - the unique key used to associate checkboxes Sys.Extended.UI.MutuallyExclusiveCheckBoxEventArgs.initializeBase(this); this._key = key; this._checkbox = checkbox; } Sys.Extended.UI.MutuallyExclusiveCheckBoxEventArgs.prototype = { get_checkbox: function() { // Checkbox that was checked or unchecked return this._checkbox; }, get_key: function() { // The unique key used to associate checkboxes return this._key; } } Sys.Extended.UI.MutuallyExclusiveCheckBoxEventArgs.registerClass('Sys.Extended.UI.MutuallyExclusiveCheckBoxEventArgs', Sys.EventArgs);