/*
Author: Nando Vieira
License: Public Domain
*/
jQuery.fn.check = function(mode, filter)
{
	mode = mode || 'on';
	filter = filter || '';

	return this.each(function(){
		if (this.type == 'checkbox' && $(this).not(filter)) {
			jQuery.fn._setCheckboxState(this, mode);
		} else {
			$(this).field('checkbox').not(filter).each(function(){
				jQuery.fn._setCheckboxState(this, mode);
			});
		}
	});
}

jQuery.fn._setCheckboxState = function(checkbox, mode)
{
	checkbox = $(checkbox);

	switch (mode) {
		case 'toggle':
			checkbox.attr('checked', !checkbox.attr('checked'));
			checkbox.triggerHandler('ChangedStatus');
			break;
		
		case 'off':
			checkbox.attr('checked', false);
			checkbox.triggerHandler('ChangedStatus');
			break;
		
		case 'on':
			checkbox.attr('checked', true);
			checkbox.triggerHandler('ChangedStatus');
			break;
	}
}

jQuery.fn.field = function(type, filter)
{
	var rule;
	filter = filter || '';
	
	if(type == 'all' || !type) {
		rule = 'input|textarea|select';
	} else {
		if (type != 'select' && type != 'textarea') {
			rule = 'input[type=' + type + ']';
		} else {
			rule = type;
		}
	}
	
	return jQuery(rule, this).not(filter);
}