﻿Type.registerNamespace('Zextenders');

Zextenders.CheckBoxGroup = function(element) 
{
    Zextenders.CheckBoxGroup.initializeBase(this,[element]);
    
    var _master;
    var _recursive;
    var _checkboxes = new Array();
    
    var _masterClickHandler = Function.createDelegate(this, masterClickHandler);
    var _childClickHandler = Function.createDelegate(this, childClickHandler);
    
    this.get_master = function() { 
        return _master; 
    }
    this.set_master = function(value) { 
        if (_master != null)
          $removeHandler(_master, "click", _masterClickHandler);
        
        _master = value; 
        $addHandler(_master, "click", _masterClickHandler);
    }
    
    this.get_recursive = function() {
        return _recursive;
    }
    
    this.set_recursive = function(value) {
        _recursive = value;
    }
    
    this.initialize = function() {
    
        //find all the checkboxes in the target element and add an event handler to them
        //add them to our checkboxes array
        el = this.get_element();
        this.findCheckBoxes(el);
    }
    
    this.findCheckBoxes = function(el) {
        for(var i=0;el.childNodes[i];i++)
        {
            child = el.childNodes[i];
            if ((child.type=="checkbox") && (child != _master))
            {
                $addHandler(child, "click", _childClickHandler);
                _checkboxes.push(child);
            }
            if (_recursive && child.childNodes.length > 0)
                this.findCheckBoxes(child);
        }
    }
    
    this.dispose = function() {
        
        if (_master && _masterClickHandler)
            $removeHandler(_master, "click", _masterClickHandler);
        
        _master = null
        for(i=0;i<_checkboxes.length;i++)
            $removeHandler(_checkboxes[i], "click", _childClickHandler);
    
        Zextenders.CheckBoxGroup.callBaseMethod(this, 'dispose');
    }
    
    function masterClickHandler(ev) {
    
        for(i=0;i<_checkboxes.length;i++)
          _checkboxes[i].checked = _master.checked;
    }
    
    function childClickHandler(ev) {
    
        for(i=0;i<_checkboxes.length;i++)
        {
          if(!_checkboxes[i].checked)
          {
            _master.checked = false;
            return;
          }
        }
        _master.checked = true;
    }
}

Zextenders.CheckBoxGroup.registerClass('Zextenders.CheckBoxGroup', AjaxControlToolkit.BehaviorBase, Sys.IDisposable);
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();