$(this).closest('#it-shortContactFormConfigWrapper').find('.js-it-shortContactFormConfig')
.formValidation(
{
autoFocus: false,
framework: 'bootstrap',
icon: {
valid: null,
invalid: null,
validating: null
},
fields: {
'values[shortContactFormDefinition_title]': {
trigger: 'change',
validators: {
notEmpty: {
message: 'Please select a salutation',
message_en: 'Please select a title'
}
}
},
'values[shortContactFormDefinition_firstName]': {
trigger: 'blur',
validators: {
notEmpty: {
message: 'Please enter your first name.',
message_en: 'Please enter your first name.'
},
stringLength: {
message: 'Hai superato la lunghezza massima di 40 caratteri per questo campo',
message_en: 'You have exceeded the maximum length of 40 characters for this field',
max: 40
},
}
},
'values[shortContactFormDefinition_lastName]': {
trigger: 'blur',
validators: {
notEmpty: {
message: 'Inserisci il tuo cognome',
message_en: 'Please enter your last name.'
},
stringLength: {
message: 'Hai superato la lunghezza massima di 40 caratteri per questo campo',
message_en: 'You have exceeded the maximum length of 40 characters for this field',
max: 40
},
}
},
'values[shortContactFormDefinition_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: 'Inserisci un indirizzo email.',
message_en: 'Please enter your email address.'
},
notEmpty: {
message: 'Inserisci un indirizzo email.',
message_en: 'Please enter your email address.'
},
stringLength: {
message: 'Il numero di caratteri per questo campo deve essere compreso tra 0 e 70',
message_en: 'The number of characters for this field must be between 0 and 70',
min: 0
,
max: 70
},
}
},
'values[shortContactFormDefinition_phone]': {
trigger: 'blur',
validators: {
stringLength: {
message: 'Hai superato la lunghezza massima di 20 caratteri per questo campo',
message_en: 'You have exceeded the maximum length of 20 characters for this field',
max: 20
},
callbackPhone: {
alias: 'callback',
message: 'Please enter your telephone number',
message_en: 'Please enter your telephone number',
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[shortContactFormDefinition_country]': {
trigger: 'change',
validators: {
notEmpty: {
message: 'Inserisci il tuo paese\/regione.',
message_en: 'Please enter your country\/region.'
}
}
},
'values[shortContactFormDefinition_message]': {
trigger: 'blur',
validators: {
notEmpty: {
message: 'Please fill in your contact reason',
message_en: 'Please fill in your contact reason'
},
stringLength: {
message: 'Il numero di caratteri per questo campo deve essere compreso tra 0 e 1000',
message_en: 'The number of characters for this field must be between 0 and 1000',
min: 0
,
max: 1000
},
}
},
'values[shortContactFormDefinition_scsMember]': {
trigger: 'change',
validators: {
}
},
'values[shortContactFormDefinition_scsMemberNumber]': {
trigger: 'blur',
validators: {
stringLength: {
message: 'Hai superato la lunghezza massima di 11 caratteri per questo campo',
message_en: 'You have exceeded the maximum length of 11 characters for this field',
max: 11
},
}
},
'values[shortContactFormDefinition_beSwaMember]': {
trigger: 'change',
validators: {
}
},
'values[shortContactFormDefinition_beSwaMemberNumber]': {
trigger: 'blur',
validators: {
}
},
'values[shortContactFormDefinition_contactTopic]': {
trigger: 'change',
validators: {
notEmpty: {
message: 'Seleziona il tuo Oggetto\/Argomento',
message_en: 'Please select your topic'
}
}
},
'values[shortContactFormDefinition_contactSubject]': {
trigger: 'change',
validators: {
notEmpty: {
message: 'Seleziona il tuo Oggetto\/Argomento',
message_en: 'Please select your subject'
}
}
},
'values[shortContactFormDefinition_contactOrderNo]': {
trigger: 'blur',
validators: {
callback: {
callback: function(value, validator, $field) {
var messages = [];
var messagesEN = [];
var errorOccured = false;
if ($field.attr('regexCheckDisabled') === 'true') {
return true;
}
if (!value.trim().match(new RegExp('^([a-zA-Z0-9]{15})$|^$', ''))) {
messages.push('Please enter a valid order number (15 digits)');
messagesEN.push('Please enter a valid order number (15 digits)');
errorOccured |= true;
}
if (errorOccured) {
return {
valid: false,
message: messages.join('<br/>'),
message_en: messagesEN
}
} else {
return true;
}
}
},
stringLength: {
message: 'Il numero di caratteri per questo campo deve essere compreso tra 0 e 40',
message_en: 'The number of characters for this field must be between 0 and 40',
min: 0
,
max: 40
},
}
},
'values[shortContactFormDefinition_contactRepairNo]': {
trigger: 'blur',
validators: {
stringLength: {
message: 'Il numero di caratteri per questo campo deve essere compreso tra 0 e 40',
message_en: 'The number of characters for this field must be between 0 and 40',
min: 0
,
max: 40
},
}
},
'values[shortContactFormDefinition_contactSubjectTxt]': {
trigger: 'blur',
validators: {
notEmpty: {
message: 'Please enter your subject',
message_en: 'Please enter your subject'
},
stringLength: {
message: 'Il numero di caratteri per questo campo deve essere compreso tra 0 e 40',
message_en: 'The number of characters for this field must be between 0 and 40',
min: 0
,
max: 40
},
}
},
'values[shortContactFormDefinition_contactTopicTxt]': {
trigger: 'blur',
validators: {
notEmpty: {
message: 'Please enter your topic',
message_en: 'Please enter your topic'
},
stringLength: {
message: 'Il numero di caratteri per questo campo deve essere compreso tra 0 e 40',
message_en: 'The number of characters for this field must be between 0 and 40',
min: 0
,
max: 40
},
}
},
}
}
)
.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 = 'shortContactForm';
if (!formId || formId === 'cfRequest' || formId === 'cfResponse') {
formId = 'shortContactFormDefinition';
}
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();
}
};