﻿/*
*
* Copyright (c) 2006-2008 Sam Collett (http://www.texotela.co.uk)
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
* 
* Version 2.0.1
* Demo: http://www.texotela.co.uk/code/jquery/checkboxes/
*
* $LastChangedDate$
* $Rev$
*/


/*
* Toggle all checkboxes contained within a form
*
* @name     toggleCheckboxes
* @param    filter   only toggle checkboxes matching this expression
* @param    returnChecked   return checkboxes as jQuery object, default false
* @author   Sam Collett (http://www.texotela.co.uk)
* @example  $("#myform").toggleCheckboxes();
* @example  $("#myform").toggleCheckboxes(".onlyme");
* @example  $("#myform").toggleCheckboxes(":not(.notme)");
* @example  $("#myform").toggleCheckboxes("*", true);
*
*/
jQuery.fn.toggleCheckboxes = function(filter, returnChecked) {
    filter = filter || "*";
    returnChecked = returnChecked || false;
    var returnWhat = jQuery([]);
    this.each(
		function() {
		    var checked = jQuery("input[@type=checkbox]", this).filter(filter).each(
				function() {
				    this.checked = !this.checked;
				}
			).filter(":checked");
		    returnWhat = checked;
		}
	);
    if (!returnChecked) {
        returnWhat = this;
    }
    return returnWhat;
};

/*
* Check all checkboxes contained within a form
*
* @name     checkCheckboxes
* @param    filter   only check checkboxes matching this expression
* @param    returnChecked   return checkboxes as jQuery object, default false
* @author   Sam Collett (http://www.texotela.co.uk)
* @example  $("#myform").checkCheckboxes();
* @example  $("#myform").checkCheckboxes(".onlyme");
* @example  $("#myform").checkCheckboxes(":not(.notme)");
* @example  $("#myform").checkCheckboxes("*", true);
*
*/
jQuery.fn.checkCheckboxes = function(filter, returnChecked) {
    filter = filter || "*";
    returnChecked = returnChecked || false;
    var returnWhat = jQuery([]);
    this.each(
		function() {
		    var checked = jQuery("input[@type=checkbox]", this).filter(filter).each(
				function() {
				    this.checked = true;
				}
			).filter(":checked");
		    returnWhat = checked;
		}
	);
    if (!returnChecked) {
        returnWhat = this;
    }
    return returnWhat;
};

/*
* UnCheck all checkboxes contained within a form
*
* @name     unCheckCheckboxes
* @param    filter   only check checkboxes matching this expression
* @param    returnUnChecked   return unchecked checkboxes as jQuery object, default false
* @author   Sam Collett (http://www.texotela.co.uk)
* @example  $("#myform").unCheckCheckboxes();
* @example  $("#myform").unCheckCheckboxes(".onlyme");
* @example  $("#myform").unCheckCheckboxes(":not(.notme)");
* @example  $("#myform").unCheckCheckboxes("*", true);
*
*/
jQuery.fn.unCheckCheckboxes = function(filter, returnUnChecked) {
    filter = filter || "*";
    returnUnChecked = returnUnChecked || false;
    var returnWhat = jQuery([]);
    this.each(
		function() {
		    var unChecked = jQuery("input[@type=checkbox]", this).filter(filter).each(
				function() {
				    this.checked = false;
				}
			).filter(":not(:checked)");
		    returnWhat = unChecked;
		}
	);
    if (!returnUnChecked) {
        returnWhat = this;
    }
    return returnWhat;
};

/*
* Makes checkboxes behave like a radio button group
*   i.e. only one can be selected at a time
*
* @name     radioCheckboxGroup
* @param    name  field name (leave blank to apply to all check boxes)
* @param    filter  apply to checkboxes matching this expression
* @author   Sam Collett (http://www.texotela.co.uk)
* @example  $.radioCheckboxGroup("fieldname");
* @example  $.radioCheckboxGroup("fieldname", ".myclass");
* @example  $.radioCheckboxGroup("", ".myclass");
*
*/
jQuery.radioCheckboxGroup = function(name, filter) {
    filter = filter || "*";
    var expression = "input[@type=checkbox]";
    if (name) {
        expression += "[@group=" + name + "]"
    }
    var x = jQuery(expression).filter(filter);
    x.click(
		function() {
		    // uncheck every other box with the same name
		    x.not(this).each(
				function() {
				    this.checked = false;
				}
			).end();
		}
	);
};