$(document).ready(function(){
    jQuery.validator.addMethod('noSpace', function(value, element) {
        return value.indexOf(' ') < 0 && value != '';
    }, 'No space please and don\'t leave it empty.');
    
    (function() {
        function stripHtml(value) {
            return value.replace(/<.[^<>]*?>/g, ' ').replace(/&nbsp;|&#160;/gi, ' ')
            .replace(/[0-9.(),;:!?%#$''_+=\/-]*/g,'');
        }
        
        jQuery.validator.addMethod('minWords', function(value, element, params) {
            return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length >= params;
        }, jQuery.validator.format('Please enter at least {0} words.'));
        
        jQuery.validator.addMethod('maxWords', function(value, element, params) {
            return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length < params;
        }, jQuery.validator.format('Please enter {0} words or less.'));

        jQuery.validator.addMethod('rangeWords', function(value, element, params) {
            return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length >= params[0] && value.match(/bw+b/g).length < params[1];
        }, jQuery.validator.format('Please enter between {0} and {1} words.'));

    })();
});
