$j(function() { $j.fn.extend( { /* 'disable': function() { return $j(this).each(function() { $j(this).addClass('disable').removeClass('enable').children('label').children('input').attr({'checked': false, 'disabled': true}); }); }, 'enable': function() { return $j(this).each(function() { $j(this).removeClass('disable').addClass('enable').children('label').children('input').attr({'disabled': false}); }); }, */ 'disable': function() { return $j(this).addClass('disable').removeClass('enable').children('label').children('input').attr({'checked': false, 'disabled': true}); }, 'enable': function() { return $j(this).removeClass('disable').addClass('enable').children('label').children('input').attr({'disabled': false}); }, 'checked': function(chkd) { if (chkd == undefined) { chkd = true; } return $j(this).each(function() { $j(this).children('label').children('input').attr({'checked': chkd}); if (chkd) { $j(this).addClass('checked'); } else { $j(this).removeClass('checked'); if ($j(this).siblings('.checked').length == 0) { $j(this).parents('li:eq(0)').checked(false); // If all siblings are unchecked, uncheck parent } } }); }, 'unchecked': function(unchkd) { if (unchkd == undefined) { unchkd = true; } return $j(this).checked(!unchkd); } }); // Through event delegation $j('.megatree').bind('click', function(e) { //console.profile('megatree'); if ($j(e.target).is('li.group')) { clog('li.group', e.target); var ul = $j(e.target).find('ul:eq(0)'); ul.toggle(); $j(this).trigger((ul.is(':hidden') ? 'hidden' : 'shown'), ul); if (ul.is(':hidden') && $j(e.target).position().top < $j(this).scrollTop() ) e.target.scrollIntoView(); return false; } if ($j(e.target).is(':checkbox,:radio')) { if ($j(e.target).is(':checkbox')) { var checkstate = e.target.checked; clog('checked:',checkstate); var li = $j(e.target).parents('li:eq(0)'); li.checked(checkstate); if (li.hasClass('selector')) { var selclass = li.attr('class').replace(/selector/i, '').replace(/(\w+)/, '.$1'); li.siblings(selclass).checked(checkstate); } } } }); });