text: /**
   * choice validator
   *
   * @link        http://formvalidation.io/validators/choice/
   * @author      https://twitter.com/formvalidation
   * @copyright   (c) 2013 - 2015 Nguyen Huu Phuoc
   * @license     http://formvalidation.io/license/
   */
  (function ($)
  	{
  		FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
  			'en_US': {
  				choice: {
  					'default': 'Please enter a valid value',
  					less: 'Please choose %s options at minimum',
  					more: 'Please choose %s options at maximum',
  					between: 'Please choose %s - %s options'
  				}
  			}
  		});
  
  		FormValidation.Validator.choice = {
  			html5Attributes: {
  				message: 'message', min: 'min', max: 'max'
  			},
  
  			/**
  			 * Check if the number of checked boxes are less or more than a given number
  			 *
  			 * @param {FormValidation.Base} validator The validator plugin instance
  			 * @param {jQuery} $field Field element
  			 * @param {Object} options Consists of following keys:
  			 * - min
  			 * - max
  			 *
  			 * At least one of two keys is required
  			 * The min, max keys define the number which the field value compares to. min, max can be
  			 *      - A number
  			 *      - Name of field which its value defines the number
  			 *      - Name of callback function that returns the number
  			 *      - A callback function that returns the number
  			 *
  			 * - message: The invalid message
  			 * @returns {Object}
  			 */
  			validate: function (validator, $field, options)
  				{
  					var locale = validator.getLocale(), ns = validator.getNamespace(), numChoices = $field.is('select') ? validator.getFieldElements($field.attr('data-' + ns + '-field')).find('option').filter(':selected').length : validator.getFieldElements($field.attr('data-' + ns + '-field')).filter(':checked').length, min = options.min ? ($.isNumeric(options.min) ? options.min : validator.getDynamicOption($field, options.min)) : null, max = options.max ? ($.isNumeric(options.max) ? options.max : validator.getDynamicOption($field, options.max)) : null, isValid = true, message = options.message || FormValidation.I18n[locale].choice['default'];
  
  					if ((min && numChoices < parseInt(min, 10)) || (max && numChoices > parseInt(max, 10)))
  						{
  							isValid = false;
  						}
  
  					switch (true)
  					{
  						case (!!min && !!max):
  							message = FormValidation.Helper.format(options.message || FormValidation.I18n[locale].choice.between, [parseInt(min, 10), parseInt(max, 10)]);
  							break;
  
  						case (!!min):
  							message = FormValidation.Helper.format(options.message || FormValidation.I18n[locale].choice.less, parseInt(min, 10));
  							break;
  
  						case (!!max):
  							message = FormValidation.Helper.format(options.message || FormValidation.I18n[locale].choice.more, parseInt(max, 10));
  							break;
  
  						default:
  							break;
  					}
  
  					return {valid: isValid, message: message};
  				}
  		};
  	}(jQuery));
  