	jQuery(function()
	{
		jQuery.fn.extend(
		{
/*
			'disable': function()
			{
				return jQuery(this).each(function()
				{
					jQuery(this).addClass('disable').removeClass('enable').children('label').children('input').attr({'checked': false, 'disabled': true});
				});
			},
			'enable': function()
			{
				return jQuery(this).each(function()
				{
					jQuery(this).removeClass('disable').addClass('enable').children('label').children('input').attr({'disabled': false});
				});
			},

*/
			'disable': function()
			{
				return jQuery(this).addClass('disable').removeClass('enable').children('label').children('input').attr({'checked': false, 'disabled': true});
			},
			'enable': function()
			{
				return jQuery(this).removeClass('disable').addClass('enable').children('label').children('input').attr({'disabled': false});
			},

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

	});

