/*--------------------------------------------------------------------
 * jQuery plugin: customInput()
 * by Maggie Wachs and Scott Jehl, http://www.filamentgroup.com
 * Copyright (c) 2009 Filament Group
 * Dual licensed under the MIT (filamentgroup.com/examples/mit-license.txt) and GPL (filamentgroup.com/examples/gpl-license.txt) licenses.
 * Article: http://www.filamentgroup.com/lab/accessible_custom_designed_checkbox_radio_button_inputs_styled_css_jquery/
 * Usage example below (see comment "Run the script...").
--------------------------------------------------------------------*/
jQuery.fn.customInput = function(){
	jQuery(this).each(function(i){
		if(jQuery(this).is('[type=checkbox],[type=radio]')){
			var input = jQuery(this);
			// get the associated label using the input's id
			var label = jQuery('label[for='+input.attr('id')+']');
			//get type, for classname suffix
			var inputType = (input.is('[type=checkbox]')) ? 'checkbox' : 'radio';
			// wrap the input + label in a div
			if(jQuery(input).parent().attr("class")!='custom-'+inputType){
				jQuery('<div class="custom-'+ inputType +'"></div>').insertBefore(input).append(input, label);
			}
			// find all inputs in this set using the shared name attribute
			var allInputs = jQuery('input[name='+input.attr('name')+']');
			// necessary for browsers that don't support the :hover pseudo class on labels
			label.hover(
				function(){
					jQuery(this).addClass('hover');
					if(inputType == 'checkbox' && input.is(':checked')){
						jQuery(this).addClass('checkedHover');
					}
				},
				function(){ jQuery(this).removeClass('hover checkedHover'); }
			);
			//bind custom event, trigger it, bind click,focus,blur events
			input.bind('updateState', function(){
				if (input.is(':checked')) {
					if (input.is(':radio')) {
						allInputs.each(function(){
							jQuery('label[for='+jQuery(this).attr('id')+']').removeClass('checked');
						});
					};
					label.addClass('checked');
				}
				else { label.removeClass('checked checkedHover checkedFocus'); }
			})
			.trigger('updateState')
			.click(function(){
				jQuery(this).trigger('updateState');
			})
			.focus(function(){
				label.addClass('focus');
				if(inputType == 'checkbox' && input.is(':checked')){
					jQuery(this).addClass('checkedFocus');
				}
			})
			.blur(function(){ label.removeClass('focus checkedFocus'); });
		}
	});
};

