/cody/learning-zone/website-templates/startbootstrap-agency-1.0.2/js/jqbootstrapvalidation.js
/* jqBootstrapValidation * A plugin for automating validation on Twitter Bootstrap formatted forms. * * v1.3.6 * * License: MIT <http://opensource.org/licenses/mit-license.php> - see LICENSE file * * http://ReactiveRaven.github.com/jqBootstrapValidation/ */
(function( $ ){
	var createdElements = [];
	var defaults = {		options: {			prependExistingHelpBlock: false,			sniffHtml: true, // sniff for 'required', 'maxlength', etc			preventSubmit: true, // stop the form submit event from firing if validation fails			submitError: false, // function called if there is an error when trying to submit			submitSuccess: false, // function called just before a successful submit event is sent to the server            semanticallyStrict: false, // set to true to tidy up generated HTML output			autoAdd: {				helpBlocks: true			},            filter: function () {                // return $(this).is(":visible"); // only validate elements you can see                return true; // validate everything            }		},    methods: {      init : function( options ) {
        var settings = $.extend(true, {}, defaults);
        settings.options = $.extend(true, settings.options, options);
        var $siblingElements = this;
        var uniqueForms = $.unique(          $siblingElements.map( function () {            return $(this).parents("form")[0];          }).toArray()        );
        $(uniqueForms).bind("submit", function (e) {          var $form = $(this);          var warningsFound = 0;          var $inputs = $form.find("input,textarea,select").not("[type=submit],[type=image]").filter(settings.options.filter);          $inputs.trigger("submit.validation").trigger("validationLostFocus.validation");
          $inputs.each(function (i, el) {            var $this = $(el),              $controlGroup = $this.parents(".form-group").first();            if (              $controlGroup.hasClass("warning")            ) {              $controlGroup.removeClass("warning").addClass("error");              warningsFound++;            }          });
          $inputs.trigger("validationLostFocus.validation");
          if (warningsFound) {            if (settings.options.preventSubmit) {              e.preventDefault();            }            $form.addClass("error");            if ($.isFunction(settings.options.submitError)) {              settings.options.submitError($form, e, $inputs.jqBootstrapValidation("collectErrors", true));            }          } else {            $form.removeClass("error");            if ($.isFunction(settings.options.submitSuccess)) {              settings.options.submitSuccess($form, e);            }          }        });
        return this.each(function(){
          // Get references to everything we're interested in          var $this = $(this),            $controlGroup = $this.parents(".form-group").first(),            $helpBlock = $controlGroup.find(".help-block").first(),            $form = $this.parents("form").first(),            validatorNames = [];
          // create message container if not exists          if (!$helpBlock.length && settings.options.autoAdd && settings.options.autoAdd.helpBlocks) {              $helpBlock = $('<div class="help-block" />');              $controlGroup.find('.controls').append($helpBlock);							createdElements.push($helpBlock[0]);          }
          // =============================================================          //                                     SNIFF HTML FOR VALIDATORS          // =============================================================
          // *snort sniff snuffle*
          if (settings.options.sniffHtml) {            var message = "";            // ---------------------------------------------------------            //                                                   PATTERN            // ---------------------------------------------------------            if ($this.attr("pattern") !== undefined) {              message = "Not in the expected format<!-- data-validation-pattern-message to override -->";              if ($this.data("validationPatternMessage")) {                message = $this.data("validationPatternMessage");              }              $this.data("validationPatternMessage", message);              $this.data("validationPatternRegex", $this.attr("pattern"));            }            // ---------------------------------------------------------            //                                                       MAX            // ---------------------------------------------------------            if ($this.attr("max") !== undefined || $this.attr("aria-valuemax") !== undefined) {              var max = ($this.attr("max") !== undefined ? $this.attr("max") : $this.attr("aria-valuemax"));              message = "Too high: Maximum of '" + max + "'<!-- data-validation-max-message to override -->";              if ($this.data("validationMaxMessage")) {                message = $this.data("validationMaxMessage");              }              $this.data("validationMaxMessage", message);              $this.data("validationMaxMax", max);            }            // ---------------------------------------------------------            //                                                       MIN            // ---------------------------------------------------------            if ($this.attr("min") !== undefined || $this.attr("aria-valuemin") !== undefined) {              var min = ($this.attr("min") !== undefined ? $this.attr("min") : $this.attr("aria-valuemin"));              message = "Too low: Minimum of '" + min + "'<!-- data-validation-min-message to override -->";              if ($this.data("validationMinMessage")) {                message = $this.data("validationMinMessage");              }              $this.data("validationMinMessage", message);              $this.data("validationMinMin", min);            }            // ---------------------------------------------------------            //                                                 MAXLENGTH            // ---------------------------------------------------------            if ($this.attr("maxlength") !== undefined) {              message = "Too long: Maximum of '" + $this.attr("maxlength") + "' characters<!-- data-validation-maxlength-message to override -->";              if ($this.data("validationMaxlengthMessage")) {                message = $this.data("validationMaxlengthMessage");              }              $this.data("validationMaxlengthMessage", message);              $this.data("validationMaxlengthMaxlength", $this.attr("maxlength"));            }            // ---------------------------------------------------------            //                                                 MINLENGTH            // ---------------------------------------------------------            if ($this.attr("minlength") !== undefined) {              message = "Too short: Minimum of '" + $this.attr("minlength") + "' characters<!-- data-validation-minlength-message to override -->";              if ($this.data("validationMinlengthMessage")) {                message = $this.data("validationMinlengthMessage");              }              $this.data("validationMinlengthMessage", message);              $this.data("validationMinlengthMinlength", $this.attr("minlength"));            }            // ---------------------------------------------------------            //                                                  REQUIRED            // ---------------------------------------------------------            if ($this.attr("required") !== undefined || $this.attr("aria-required") !== undefined) {              message = settings.builtInValidators.required.message;              if ($this.data("validationRequiredMessage")) {                message = $this.data("validationRequiredMessage");              }              $this.data("validationRequiredMessage", message);            }            // ---------------------------------------------------------            //                                                    NUMBER            // ---------------------------------------------------------            if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "number") {              message = settings.builtInValidators.number.message;              if ($this.data("validationNumberMessage")) {                message = $this.data("validationNumberMessage");              }              $this.data("validationNumberMessage", message);            }            // ---------------------------------------------------------            //                                                     EMAIL            // ---------------------------------------------------------            if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "email") {              message = "Not a valid email address<!-- data-validator-validemail-message to override -->";              if ($this.data("validationValidemailMessage")) {                message = $this.data("validationValidemailMessage");              } else if ($this.data("validationEmailMessage")) {                message = $this.data("validationEmailMessage");              }              $this.data("validationValidemailMessage", message);            }            // ---------------------------------------------------------            //                                                MINCHECKED            // ---------------------------------------------------------            if ($this.attr("minchecked") !== undefined) {              message = "Not enough options checked; Minimum of '" + $this.attr("minchecked") + "' required<!-- data-validation-minchecked-message to override -->";              if ($this.data("validationMincheckedMessage")) {                message = $this.data("validationMincheckedMessage");              }              $this.data("validationMincheckedMessage", message);              $this.data("validationMincheckedMinchecked", $this.attr("minchecked"));            }            // ---------------------------------------------------------            //                                                MAXCHECKED            // ---------------------------------------------------------            if ($this.attr("maxchecked") !== undefined) {              message = "Too many options checked; Maximum of '" + $this.attr("maxchecked") + "' required<!-- data-validation-maxchecked-message to override -->";              if ($this.data("validationMaxcheckedMessage")) {                message = $this.data("validationMaxcheckedMessage");              }              $this.data("validationMaxcheckedMessage", message);              $this.data("validationMaxcheckedMaxchecked", $this.attr("maxchecked"));            }          }
          // =============================================================          //                                       COLLECT VALIDATOR NAMES          // =============================================================
          // Get named validators          if ($this.data("validation") !== undefined) {            validatorNames = $this.data("validation").split(",");          }
          // Get extra ones defined on the element's data attributes          $.each($this.data(), function (i, el) {            var parts = i.replace(/([A-Z])/g, ",$1").split(",");            if (parts[0] === "validation" && parts[1]) {              validatorNames.push(parts[1]);            }          });
          // =============================================================          //                                     NORMALISE VALIDATOR NAMES          // =============================================================
          var validatorNamesToInspect = validatorNames;          var newValidatorNamesToInspect = [];
          do // repeatedly expand 'shortcut' validators into their real validators          {            // Uppercase only the first letter of each name            $.each(validatorNames, function (i, el) {              validatorNames[i] = formatValidatorName(el);            });
            // Remove duplicate validator names            validatorNames = $.unique(validatorNames);
            // Pull out the new validator names from each shortcut            newValidatorNamesToInspect = [];            $.each(validatorNamesToInspect, function(i, el) {              if ($this.data("validation" + el + "Shortcut") !== undefined) {                // Are these custom validators?                // Pull them out!                $.each($this.data("validation" + el + "Shortcut").split(","), function(i2, el2) {                  newValidatorNamesToInspect.push(el2);                });              } else if (settings.builtInValidators[el.toLowerCase()]) {                // Is this a recognised built-in?                // Pull it out!                var validator = settings.builtInValidators[el.toLowerCase()];                if (validator.type.toLowerCase() === "shortcut") {                  $.each(validator.shortcut.split(","), function (i, el) {                    el = formatValidatorName(el);                    newValidatorNamesToInspect.push(el);                    validatorNames.push(el);                  });                }              }            });
            validatorNamesToInspect = newValidatorNamesToInspect;
          } while (validatorNamesToInspect.length > 0)
          // =============================================================          //                                       SET UP VALIDATOR ARRAYS          // =============================================================
          var validators = {};
          $.each(validatorNames, function (i, el) {            // Set up the 'override' message            var message = $this.data("validation" + el + "Message");            var hasOverrideMessage = (message !== undefined);            var foundValidator = false;            message =              (                message                  ? message                  : "'" + el + "' validation failed <!-- Add attribute 'data-validation-" + el.toLowerCase() + "-message' to input to change this message -->"              )            ;
            $.each(              settings.validatorTypes,              function (validatorType, validatorTemplate) {                if (validators[validatorType] === undefined) {                  validators[validatorType] = [];                }                if (!foundValidator && $this.data("validation" + el + formatValidatorName(validatorTemplate.name)) !== undefined) {                  validators[validatorType].push(                    $.extend(                      true,                      {                        name: formatValidatorName(validatorTemplate.name),                        message: message                      },                      validatorTemplate.init($this, el)                    )                  );                  foundValidator = true;                }              }            );
            if (!foundValidator && settings.builtInValidators[el.toLowerCase()]) {
              var validator = $.extend(true, {}, settings.builtInValidators[el.toLowerCase()]);              if (hasOverrideMessage) {                validator.message = message;              }              var validatorType = validator.type.toLowerCase();
              if (validatorType === "shortcut") {                foundValidator = true;              } else {                $.each(                  settings.validatorTypes,                  function (validatorTemplateType, validatorTemplate) {                    if (validators[validatorTemplateType] === undefined) {                      validators[validatorTemplateType] = [];                    }                    if (!foundValidator && validatorType === validatorTemplateType.toLowerCase()) {                      $this.data("validation" + el + formatValidatorName(validatorTemplate.name), validator[validatorTemplate.name.toLowerCase()]);                      validators[validatorType].push(                        $.extend(                          validator,                          validatorTemplate.init($this, el)                        )                      );                      foundValidator = true;                    }                  }                );              }            }
            if (! foundValidator) {              $.error("Cannot find validation info for '" + el + "'");            }          });
          // =============================================================          //                                         STORE FALLBACK VALUES          // =============================================================
          $helpBlock.data(            "original-contents",            (              $helpBlock.data("original-contents")                ? $helpBlock.data("original-contents")                : $helpBlock.html()            )          );
          $helpBlock.data(            "original-role",            (              $helpBlock.data("original-role")                ? $helpBlock.data("original-role")                : $helpBlock.attr("role")            )          );
          $controlGroup.data(            "original-classes",            (              $controlGroup.data("original-clases")                ? $controlGroup.data("original-classes")                : $controlGroup.attr("class")            )          );
          $this.data(            "original-aria-invalid",            (              $this.data("original-aria-invalid")                ? $this.data("original-aria-invalid")                : $this.attr("aria-invalid")            )          );
          // =============================================================          //                                                    VALIDATION          // =============================================================
          $this.bind(            "validation.validation",            function (event, params) {
              var value = getValue($this);
              // Get a list of the errors to apply              var errorsFound = [];
              $.each(validators, function (validatorType, validatorTypeArray) {                if (value || value.length || (params && params.includeEmpty) || (!!settings.validatorTypes[validatorType].blockSubmit && params && !!params.submitting)) {                  $.each(validatorTypeArray, function (i, validator) {                    if (settings.validatorTypes[validatorType].validate($this, value, validator)) {                      errorsFound.push(validator.message);                    }                  });                }              });
              return errorsFound;            }          );
          $this.bind(            "getValidators.validation",            function () {              return validators;            }          );
          // =============================================================          //                                             WATCH FOR CHANGES          // =============================================================          $this.bind(            "submit.validation",            function () {              return $this.triggerHandler("change.validation", {submitting: true});            }          );          $this.bind(            [              "keyup",              "focus",              "blur",              "click",              "keydown",              "keypress",              "change"            ].join(".validation ") + ".validation",            function (e, params) {
              var value = getValue($this);
              var errorsFound = [];
              $controlGroup.find("input,textarea,select").each(function (i, el) {                var oldCount = errorsFound.length;                $.each($(el).triggerHandler("validation.validation", params), function (j, message) {                  errorsFound.push(message);                });                if (errorsFound.length > oldCount) {                  $(el).attr("aria-invalid", "true");                } else {                  var original = $this.data("original-aria-invalid");                  $(el).attr("aria-invalid", (original !== undefined ? original : false));                }              });
              $form.find("input,select,textarea").not($this).not("[name=\"" + $this.attr("name") + "\"]").trigger("validationLostFocus.validation");
              errorsFound = $.unique(errorsFound.sort());
              // Were there any errors?              if (errorsFound.length) {                // Better flag it up as a warning.                $controlGroup.removeClass("success error").addClass("warning");
                // How many errors did we find?                if (settings.options.semanticallyStrict && errorsFound.length === 1) {                  // Only one? Being strict? Just output it.                  $helpBlock.html(errorsFound[0] +                     ( settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "" ));                } else {                  // Multiple? Being sloppy? Glue them together into an UL.                  $helpBlock.html("<ul role=\"alert\"><li>" + errorsFound.join("</li><li>") + "</li></ul>" +                    ( settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "" ));                }              } else {                $controlGroup.removeClass("warning error success");                if (value.length > 0) {                  $controlGroup.addClass("success");                }                $helpBlock.html($helpBlock.data("original-contents"));              }
              if (e.type === "blur") {                $controlGroup.removeClass("success");              }            }          );          $this.bind("validationLostFocus.validation", function () {            $controlGroup.removeClass("success");          });        });      },      destroy : function( ) {
        return this.each(          function() {
            var              $this = $(this),              $controlGroup = $this.parents(".form-group").first(),              $helpBlock = $controlGroup.find(".help-block").first();
            // remove our events            $this.unbind('.validation'); // events are namespaced.            // reset help text            $helpBlock.html($helpBlock.data("original-contents"));            // reset classes            $controlGroup.attr("class", $controlGroup.data("original-classes"));            // reset aria            $this.attr("aria-invalid", $this.data("original-aria-invalid"));            // reset role            $helpBlock.attr("role", $this.data("original-role"));						// remove all elements we created						if (createdElements.indexOf($helpBlock[0]) > -1) {							$helpBlock.remove();						}
          }        );
      },      collectErrors : function(includeEmpty) {
        var errorMessages = {};        this.each(function (i, el) {          var $el = $(el);          var name = $el.attr("name");          var errors = $el.triggerHandler("validation.validation", {includeEmpty: true});          errorMessages[name] = $.extend(true, errors, errorMessages[name]);        });
        $.each(errorMessages, function (i, el) {          if (el.length === 0) {            delete errorMessages[i];          }        });
        return errorMessages;
      },      hasErrors: function() {
        var errorMessages = [];
        this.each(function (i, el) {          errorMessages = errorMessages.concat(            $(el).triggerHandler("getValidators.validation") ? $(el).triggerHandler("validation.validation", {submitting: true}) : []          );        });
        return (errorMessages.length > 0);      },      override : function (newDefaults) {        defaults = $.extend(true, defaults, newDefaults);      }    },		validatorTypes: {      callback: {        name: "callback",        init: function ($this, name) {          return {            validatorName: name,            callback: $this.data("validation" + name + "Callback"),            lastValue: $this.val(),            lastValid: true,            lastFinished: true          };        },        validate: function ($this, value, validator) {          if (validator.lastValue === value && validator.lastFinished) {            return !validator.lastValid;          }
          if (validator.lastFinished === true)          {            validator.lastValue = value;            validator.lastValid = true;            validator.lastFinished = false;
            var rrjqbvValidator = validator;            var rrjqbvThis = $this;            executeFunctionByName(              validator.callback,              window,              $this,              value,              function (data) {                if (rrjqbvValidator.lastValue === data.value) {                  rrjqbvValidator.lastValid = data.valid;                  if (data.message) {                    rrjqbvValidator.message = data.message;                  }                  rrjqbvValidator.lastFinished = true;                  rrjqbvThis.data("validation" + rrjqbvValidator.validatorName + "Message", rrjqbvValidator.message);                  // Timeout is set to avoid problems with the events being considered 'already fired'                  setTimeout(function () {                    rrjqbvThis.trigger("change.validation");                  }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst                }              }            );          }
          return false;
        }      },      ajax: {        name: "ajax",        init: function ($this, name) {          return {            validatorName: name,            url: $this.data("validation" + name + "Ajax"),            lastValue: $this.val(),            lastValid: true,            lastFinished: true          };        },        validate: function ($this, value, validator) {          if (""+validator.lastValue === ""+value && validator.lastFinished === true) {            return validator.lastValid === false;          }
          if (validator.lastFinished === true)          {            validator.lastValue = value;            validator.lastValid = true;            validator.lastFinished = false;            $.ajax({              url: validator.url,              data: "value=" + value + "&field=" + $this.attr("name"),              dataType: "json",              success: function (data) {                if (""+validator.lastValue === ""+data.value) {                  validator.lastValid = !!(data.valid);                  if (data.message) {                    validator.message = data.message;                  }                  validator.lastFinished = true;                  $this.data("validation" + validator.validatorName + "Message", validator.message);                  // Timeout is set to avoid problems with the events being considered 'already fired'                  setTimeout(function () {                    $this.trigger("change.validation");                  }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst                }              },              failure: function () {                validator.lastValid = true;                validator.message = "ajax call failed";                validator.lastFinished = true;                $this.data("validation" + validator.validatorName + "Message", validator.message);                // Timeout is set to avoid problems with the events being considered 'already fired'                setTimeout(function () {                  $this.trigger("change.validation");                }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst              }            });          }
          return false;
        }      },			regex: {				name: "regex",				init: function ($this, name) {					return {regex: regexFromString($this.data("validation" + name + "Regex"))};				},				validate: function ($this, value, validator) {					return (!validator.regex.test(value) && ! validator.negative)						|| (validator.regex.test(value) && validator.negative);				}			},			required: {				name: "required",				init: function ($this, name) {					return {};				},				validate: function ($this, value, validator) {					return !!(value.length === 0  && ! validator.negative)						|| !!(value.length > 0 && validator.negative);				},        blockSubmit: true			},			match: {				name: "match",				init: function ($this, name) {					var element = $this.parents("form").first().find("[name=\"" + $this.data("validation" + name + "Match") + "\"]").first();					element.bind("validation.validation", function () {						$this.trigger("change.validation", {submitting: true});					});					return {"element": element};				},				validate: function ($this, value, validator) {					return (value !== validator.element.val() && ! validator.negative)						|| (value === validator.element.val() && validator.negative);				},        blockSubmit: true			},			max: {				name: "max",				init: function ($this, name) {					return {max: $this.data("validation" + name + "Max")};				},				validate: function ($this, value, validator) {					return (parseFloat(value, 10) > parseFloat(validator.max, 10) && ! validator.negative)						|| (parseFloat(value, 10) <= parseFloat(validator.max, 10) && validator.negative);				}			},			min: {				name: "min",				init: function ($this, name) {					return {min: $this.data("validation" + name + "Min")};				},				validate: function ($this, value, validator) {					return (parseFloat(value) < parseFloat(validator.min) && ! validator.negative)						|| (parseFloat(value) >= parseFloat(validator.min) && validator.negative);				}			},			maxlength: {				name: "maxlength",				init: function ($this, name) {					return {maxlength: $this.data("validation" + name + "Maxlength")};				},				validate: function ($this, value, validator) {					return ((value.length > validator.maxlength) && ! validator.negative)						|| ((value.length <= validator.maxlength) && validator.negative);				}			},			minlength: {				name: "minlength",				init: function ($this, name) {					return {minlength: $this.data("validation" + name + "Minlength")};				},				validate: function ($this, value, validator) {					return ((value.length < validator.minlength) && ! validator.negative)						|| ((value.length >= validator.minlength) && validator.negative);				}			},			maxchecked: {				name: "maxchecked",				init: function ($this, name) {					var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]");					elements.bind("click.validation", function () {						$this.trigger("change.validation", {includeEmpty: true});					});					return {maxchecked: $this.data("validation" + name + "Maxchecked"), elements: elements};				},				validate: function ($this, value, validator) {					return (validator.elements.filter(":checked").length > validator.maxchecked && ! validator.negative)						|| (validator.elements.filter(":checked").length <= validator.maxchecked && validator.negative);				},        blockSubmit: true			},			minchecked: {				name: "minchecked",				init: function ($this, name) {					var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]");					elements.bind("click.validation", function () {						$this.trigger("change.validation", {includeEmpty: true});					});					return {minchecked: $this.data("validation" + name + "Minchecked"), elements: elements};				},				validate: function ($this, value, validator) {					return (validator.elements.filter(":checked").length < validator.minchecked && ! validator.negative)						|| (validator.elements.filter(":checked").length >= validator.minchecked && validator.negative);				},        blockSubmit: true			}		},		builtInValidators: {			email: {				name: "Email",				type: "shortcut",				shortcut: "validemail"			},			validemail: {				name: "Validemail",				type: "regex",				regex: "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\.[A-Za-z]{2,4}",				message: "Not a valid email address<!-- data-validator-validemail-message to override -->"			},			passwordagain: {				name: "Passwordagain",				type: "match",				match: "password",				message: "Does not match the given password<!-- data-validator-paswordagain-message to override -->"			},			positive: {				name: "Positive",				type: "shortcut",				shortcut: "number,positivenumber"			},			negative: {				name: "Negative",				type: "shortcut",				shortcut: "number,negativenumber"			},			number: {				name: "Number",				type: "regex",				regex: "([+-]?\\\d+(\\\.\\\d*)?([eE][+-]?[0-9]+)?)?",				message: "Must be a number<!-- data-validator-number-message to override -->"			},			integer: {				name: "Integer",				type: "regex",				regex: "[+-]?\\\d+",				message: "No decimal places allowed<!-- data-validator-integer-message to override -->"			},			positivenumber: {				name: "Positivenumber",				type: "min",				min: 0,				message: "Must be a positive number<!-- data-validator-positivenumber-message to override -->"			},			negativenumber: {				name: "Negativenumber",				type: "max",				max: 0,				message: "Must be a negative number<!-- data-validator-negativenumber-message to override -->"			},			required: {				name: "Required",				type: "required",				message: "This is required<!-- data-validator-required-message to override -->"			},			checkone: {				name: "Checkone",				type: "minchecked",				minchecked: 1,				message: "Check at least one option<!-- data-validation-checkone-message to override -->"			}		}	};
	var formatValidatorName = function (name) {		return name			.toLowerCase()			.replace(				/(^|\s)([a-z])/g ,				function(m,p1,p2) {					return p1+p2.toUpperCase();				}			)		;	};
	var getValue = function ($this) {		// Extract the value we're talking about		var value = $this.val();		var type = $this.attr("type");		if (type === "checkbox") {			value = ($this.is(":checked") ? value : "");		}		if (type === "radio") {			value = ($('input[name="' + $this.attr("name") + '"]:checked').length > 0 ? value : "");		}		return value;	};
  function regexFromString(inputstring) {		return new RegExp("^" + inputstring + "$");	}
  /**   * Thanks to Jason Bunting via StackOverflow.com   *   * http://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string#answer-359910   * Short link: http://tinyurl.com/executeFunctionByName  **/  function executeFunctionByName(functionName, context /*, args*/) {    var args = Array.prototype.slice.call(arguments).splice(2);    var namespaces = functionName.split(".");    var func = namespaces.pop();    for(var i = 0; i < namespaces.length; i++) {      context = context[namespaces[i]];    }    return context[func].apply(this, args);  }
	$.fn.jqBootstrapValidation = function( method ) {
		if ( defaults.methods[method] ) {			return defaults.methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));		} else if ( typeof method === 'object' || ! method ) {			return defaults.methods.init.apply( this, arguments );		} else {		$.error( 'Method ' +  method + ' does not exist on jQuery.jqBootstrapValidation' );			return null;		}
	};
  $.jqBootstrapValidation = function (options) {    $(":input").not("[type=image],[type=submit]").jqBootstrapValidation.apply(this,arguments);  };
})( jQuery );