$(this).closest('#pt-registrationGRFormConfigWrapper').find('.js-pt-registrationGRFormConfig')
.formValidation({
autoFocus: false,
framework: 'bootstrap',
icon: {
valid: null,
invalid: null,
validating: null
},
fields: {
'values[registrationGRFormDefinition_country]': {
trigger: 'change',
validators: {
}
},
'values[registrationGRFormDefinition_firstName]': {
trigger: 'blur',
validators: {
stringLength: {
message: 'The number of characters for this field must be between 0 and 15',
message_en: 'The number of characters for this field must be between 0 and 15',
min: 0
,
max: 15
},
}
},
'values[registrationGRFormDefinition_lastName]': {
trigger: 'blur',
validators: {
stringLength: {
message: 'The number of characters for this field must be between 0 and 35',
message_en: 'The number of characters for this field must be between 0 and 35',
min: 0
,
max: 35
},
}
},
'values[registrationGRFormDefinition_birthdate_day]': {
err: "#registrationGRFormDefinition_birthdate-date-error-messages",
excluded: false,
trigger: 'blur',
validators: {
callback: {
message: 'Please enter a valid birthday date',
message_en: 'Please enter a valid birthday date',
callback: function(value, validator, $field) {
var input = $('#registrationGRFormDefinition_birthdate_day');
if (ACC.global.isDateFieldEmpty("registrationGRFormDefinition_birthdate")) {
if ($("small[data-fv-for='" + 'values[registrationGRFormDefinition_birthdate_month]' +"']").attr('data-fv-result') == "INVALID") {
$('.js-pt-registrationGRFormConfig').formValidation('revalidateField', 'values[registrationGRFormDefinition_birthdate_month');
}
if ($("small[data-fv-for='" + 'values[registrationGRFormDefinition_birthdate_year]' +"']").attr('data-fv-result') == "INVALID") {
$('.js-pt-registrationGRFormConfig').formValidation('revalidateField', 'values[registrationGRFormDefinition_birthdate_year]');
}
input.addClass('date-input-no-confirmation');
return true;
} else {
input.removeClass('date-input-no-confirmation');
}
if ($field.val().match("^\\d+$") == null) {
return false;
}
var value = parseInt($field.val());
var monthValue = $('#registrationGRFormDefinition_birthdate_month').val();
var yearValue = $('#registrationGRFormDefinition_birthdate_year').val();
if (monthValue == "" && yearValue == "") {
return value >= 1 && value <= 31;
}
if (monthValue == "2" && yearValue == "") {
return value >= 1 && value <= 29;
}
var month = parseInt(monthValue);
var year = parseInt(yearValue);
return value >= 1 && value <= ACC.global.numberOfDaysInMonth(month, year);
}
}
}
},
'values[registrationGRFormDefinition_birthdate_month]': {
err: "#registrationGRFormDefinition_birthdate-date-error-messages",
excluded: false,
trigger: 'blur',
validators: {
callback: {
message: 'Please enter a valid birthday month',
message_en: 'Please enter a valid birthday month',
callback: function(value, validator, $field) {
if (ACC.global.isDateFieldEmpty("registrationGRFormDefinition_birthdate")) {
if ($("small[data-fv-for='" + 'values[registrationGRFormDefinition_birthdate_day]' +"']").attr('data-fv-result') == "INVALID") {
$('.js-pt-registrationGRFormConfig').formValidation('revalidateField', 'values[registrationGRFormDefinition_birthdate_day]');
}
if ($("small[data-fv-for='" + 'values[registrationGRFormDefinition_birthdate_year]' +"']").attr('data-fv-result') == "INVALID") {
$('.js-pt-registrationGRFormConfig').formValidation('revalidateField', 'values[registrationGRFormDefinition_birthdate_year]');
}
$('#registrationGRFormDefinition_birthdate_month').addClass('date-input-no-confirmation');
return true;
} else {
$('#registrationGRFormDefinition_birthdate_month').removeClass('date-input-no-confirmation');
}
if ($field.val().match("^\\d+$") == null){
return false;
}
var value = parseInt($field.val());
if ($('#registrationGRFormDefinition_birthdate_day').val() != "") {
$('.js-pt-registrationGRFormConfig').formValidation('revalidateField', 'values[registrationGRFormDefinition_birthdate_day]');
}
return value >= 1 && value <= 12;
}
}
}
},
'values[registrationGRFormDefinition_birthdate_year]': {
err: "#registrationGRFormDefinition_birthdate-date-error-messages",
excluded: false,
trigger: 'blur',
validators: {
callback: {
message: 'Please enter a valid birthday year',
message_en: 'Please enter a valid birthday year',
callback: function(value, validator, $field) {
var value = $field.val();
if (ACC.global.isDateFieldEmpty("registrationGRFormDefinition_birthdate")) {
if ($("small[data-fv-for='" + 'values[registrationGRFormDefinition_birthdate_day]' +"']").attr('data-fv-result') == "INVALID") {
$('.js-pt-registrationGRFormConfig').formValidation('revalidateField', 'values[registrationGRFormDefinition_birthdate_day]');
}
if ($("small[data-fv-for='" + 'values[registrationGRFormDefinition_birthdate_month]' +"']").attr('data-fv-result') == "INVALID") {
$('.js-pt-registrationGRFormConfig').formValidation('revalidateField', 'values[registrationGRFormDefinition_birthdate_month]');
}
$('#registrationGRFormDefinition_birthdate_year').addClass('date-input-no-confirmation');
return true;
} else {
$('#registrationGRFormDefinition_birthdate_year').removeClass('date-input-no-confirmation');
}
if (!ACC.global.isValidYear("registrationGRFormDefinition_birthdate")) {
$('.js-pt-registrationGRFormConfig').formValidation('revalidateField', 'values[registrationGRFormDefinition_birthdate_day]');
$('.js-pt-registrationGRFormConfig').formValidation('revalidateField', 'values[registrationGRFormDefinition_birthdate_month]');
$('#registrationGRFormDefinition_birthdate_year').removeClass('date-input-no-confirmation');
return false;
}
if (value.match("^\\d{4}$") != null) {
if ($('#registrationGRFormDefinition_birthdate_day').val() != "") {
$('.js-pt-registrationGRFormConfig').formValidation('revalidateField', 'values[registrationGRFormDefinition_birthdate_day]');
}
return true;
}
return false;
}
}
}
},
'values[registrationGRFormDefinition_email]': {
trigger: 'blur',
validators: {
regexp: {
regexp: /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/,
message: 'Please enter an email address',
message_en: 'Please enter an email address'
},
notEmpty: {
message: 'Please enter an email address',
message_en: 'Please enter an email address'
},
stringLength: {
message: 'The number of characters for this field must be between 0 and 100',
message_en: 'The number of characters for this field must be between 0 and 100',
min: 0
,
max: 100
},
}
},
'values[registrationGRFormDefinition_emailConfirm]': {
trigger: 'blur',
validators: {
regexp: {
regexp: /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/,
message: 'Please enter an email address',
message_en: 'Please enter an email address'
},
notEmpty: {
message: 'Please enter an email address',
message_en: 'Please enter an email address'
},
stringLength: {
message: 'The number of characters for this field must be between 0 and 100',
message_en: 'The number of characters for this field must be between 0 and 100',
min: 0
,
max: 100
},
identical: {
field: 'values[registrationGRFormDefinition_email]',
message: 'The fields do not match.',
message_en: 'The fields do not match.'
}
}
},
'values[registrationGRFormDefinition_phone]': {
trigger: 'blur',
validators: {
stringLength: {
message: 'The number of characters for this field must be between 0 and 20',
message_en: 'The number of characters for this field must be between 0 and 20',
},
callbackPhone: {
alias: 'callback',
message: '\u003Cspan style=\'color:#ff0000;\'\u003Eerror.genericConfigurableForm.goldenrecord-phone\u003C\/span\u003E',
message_en: '\u003Cspan style=\'color:#ff0000;\'\u003Eerror.genericConfigurableForm.goldenrecord-phone\u003C\/span\u003E',
callback: function (value, validator, $field) {
var matchesRegex = true;
var regexList = [];
for (var i = 0; i < regexList.length; i++) {
matchesRegex = matchesRegex && (value.match(regexList[i])[0] === value);
}
var prefixCountry = $field.siblings('.flag-container').children('.selected-flag').attr('title');
var isValidPrefix = prefixCountry !== undefined && prefixCountry !== "Unknown";
return value === '' || (matchesRegex && isValidPrefix);
}
},
}
},
'values[registrationGRFormDefinition_password]': {
trigger: 'blur',
validators: {
callback: {
callback: function(value, validator, $field) {
var messages = [];
var messagesEN = [];
var errorOccured = false;
if (!value.trim().match(new RegExp('(^$|^(?=.*[0-9])(?=.*[A-Z]).{7,}$)', ''))) {
messages.push("The Password has to be at least 7 Characters long as well as contain one Number and one capital Letter.");
messagesEN.push("The Password has to be at least 7 Characters long as well as contain one Number and one capital Letter.");
errorOccured |= true;
}
if (errorOccured) {
return {
valid: false,
message: messages.join("<br/>"),
message_en: messagesEN
}
} else {
return true;
}
}
},
notEmpty: {
message: 'Please enter a password.',
message_en: 'Please enter a password.'
},
}
},
'values[registrationGRFormDefinition_passwordConfirm]': {
trigger: 'blur',
validators: {
callback: {
callback: function(value, validator, $field) {
var messages = [];
var messagesEN = [];
var errorOccured = false;
if (!value.trim().match(new RegExp('(^$|^(?=.*[0-9])(?=.*[A-Z]).{7,}$)', ''))) {
messages.push("The password has to be at least 7 characters long, as well as contain one number and one capital letter.");
messagesEN.push("The password has to be at least 7 characters long, as well as contain one number and one capital letter.");
errorOccured |= true;
}
if (errorOccured) {
return {
valid: false,
message: messages.join("<br/>"),
message_en: messagesEN
}
} else {
return true;
}
}
},
notEmpty: {
message: 'Please repeat your password.',
message_en: 'Please repeat your password.'
},
identical: {
field: 'values[registrationGRFormDefinition_password]',
message: 'The fields do not match.',
message_en: 'The fields do not match.'
}
}
},
'values[registrationGRFormDefinition_newsletter]': {
trigger: 'change',
validators: {
}
}
}
})
.on('success.field.fv', function() {
/* note: we need to check if there is an error in the form, as the plugin does a validation on field level.
Validating the whole form on blur of a field is no option, as the customer does not want to see error messages on all fields
when entering one field. In case of an error on at least one field we disable the submit button manually */
var $form = $(this).closest('form');
if ($form.find('.form-group.has-error').length > 0) {
var $button = $form.find('.js-button');
if (!$button.hasClass('disabled')) {
$button.addClass('disabled');
}
}
})
.on('err.field.fv', function(e, data) {
if(data.element.closest('.form-combo-molecule').length){
/* Get the messages of field */
var messages = data.fv.getMessages(data.element);
/* Get the error message content of the field */
var errorContent = data.element.closest('.form-combo-molecule').find('.errors');
/* Get the hidden error message of the field */
var errorField = errorContent.find('small[data-field="' + data.field + '"][style="display: none;"]');
/* Loop over the messages */
for (var i in messages) {
if (errorField[1] == undefined) {
var newErrorContainer = document.createElement("small");
$(newErrorContainer).attr("class", "help-block");
$(newErrorContainer).attr("data-field", data.field);
$(newErrorContainer).attr("data-fv-validator", "callback");
$(newErrorContainer).attr("data-fv-for", $(data.element[0]).attr("name") );
$(newErrorContainer).attr("data-fv-result", "INVALID");
$(newErrorContainer).attr("data-tracked", "true");
$(newErrorContainer).html(messages[i]);
if (errorContent.text().includes(messages[i])) {
$(newErrorContainer).hide();
}
errorContent.append(newErrorContainer);
}
}
}
})
.on('success.field.fv', function(e, data) {
/* Remove the field messages */
$errorContent = data.element.closest('.form-combo-molecule').find('.errors');
$errorContent.find('small[data-field="' + data.field + '"]').remove();
$errorContent.find('small[data-fv-result="INVALID"]').removeAttr("style");
})
.on('success.form.fv', function() {
var formId = 'registerOverlay';
if (!formId || formId === 'cfRequest' || formId === 'cfResponse') {
formId = 'registrationGRFormDefinition';
}
ACC.tracking.pushFormSubmit(formId);
});
var replaceDatePatternWithValue = function(mandatory, fieldConfigCode, fieldConfigPattern) {
var date = fieldConfigPattern.toUpperCase();
var year = $("#" + fieldConfigCode + "_year").val();
var month = $("#" + fieldConfigCode + "_month").val();
var day = $("#" + fieldConfigCode + "_day").val();
date = date.replace(/[Y]+/, year);
date = date.replace(/[M]+/, month);
date = date.replace(/[D]+/, day);
var hiddenDateField = $('.js-' + fieldConfigCode + '_hidden');
if (mandatory) {
hiddenDateField.val(date);
} else {
hiddenDateField.val(date == "" ? "" : date);
}
};
var triggerFormValidation = function(fieldId, mandatory, fieldCode, dateFormat) {
replaceDatePatternWithValue(mandatory, fieldCode, dateFormat);
$('.js-fieldCode').formValidation('revalidateField', 'values[fieldCode_'+ fieldId + ']');
};
var removeDateMoleculeError = function(molecule) {
if(molecule.hasClass('has-error')){
molecule.removeClass('has-error');
molecule.find('.help-block').find('span').remove();
}
};
$('.js-registrationGRFormDefinition_birthdate_day').blur(function() {
removeDateMoleculeError($('.js-registrationGRFormDefinition_birthdate').closest('.form-combo-molecule'));
triggerFormValidation("day", false, "registrationGRFormDefinition_birthdate", "dd.MM.yyyy");
});
$('.js-registrationGRFormDefinition_birthdate_month').blur(function() {
removeDateMoleculeError($('.js-registrationGRFormDefinition_birthdate').closest('.form-combo-molecule'));
triggerFormValidation("month", false, "registrationGRFormDefinition_birthdate", "dd.MM.yyyy");
});
$('.js-registrationGRFormDefinition_birthdate_year').blur(function() {
removeDateMoleculeError($('.js-registrationGRFormDefinition_birthdate').closest('.form-combo-molecule'));
triggerFormValidation("year", false, "registrationGRFormDefinition_birthdate", "dd.MM.yyyy");
});