<meta class="mktoString" id="D8_apiKey" mktoName="D8 Api Key" default="">
<meta class="mktoBoolean" id="D8_val_email_enabled" mktoName="D8 Email Validation" default="false">
<meta class="mktoString" id="D8_val_email_level" mktoName="D8 Email Level" default="Address">
<meta class="mktoString" id="D8_val_email_msg" mktoName="D8 Email Message" default="Email address is invalid">
<meta class="mktoBoolean" id="D8_val_phone_enabled" mktoName="D8 Phone Validation" default="false">
<meta class="mktoString" id="D8_val_phone_defaultCountryCode" mktoName="D8 Phone Default Country Code" default="44">
<meta class="mktoString" id="D8_val_phone_msg" mktoName="D8 Phone Message" default="Phone number is invalid">
<meta class="mktoBoolean" id="D8_val_bank_enabled" mktoName="D8 Bank Validation" default="false">
<meta class="mktoString" id="D8_val_bank_sortcode" mktoName="D8 Bank Sortcode Id" default="">
<meta class="mktoString" id="D8_val_bank_accountNum" mktoName="D8 Bank Account Number Id" default="">
<meta class="mktoString" id="D8_val_bank_msg" mktoName="D8 Bank Message" default="Bank details are invalid">
<meta class="mktoBoolean" id="D8_val_name_enabled" mktoName="D8 Name Validation" default="false">
<meta class="mktoString" id="D8_val_name_firstName" mktoName="D8 Name First Name Id" default="">
<meta class="mktoString" id="D8_val_name_LastName" mktoName="D8 Name Last Name Id" default="">
<meta class="mktoString" id="D8_val_name_msg" mktoName="D8 Name Message" default="Name fields are invalid">
<script>
MktoForms2.whenReady(function (form) {
form.onValidate(function(){
form.submittable(checkForErrors(form));
});
});
var currentForm;
// Runs on form submission
function startData8Validation(field, form) {
if(field.type === "email" && ${D8_val_email_enabled} && field.value)
validateEmailAsync(field);
else if(field.type === "tel" && ${D8_val_phone_enabled} && field.value)
validatePhoneAsync(field);
else if(field.id === '${D8_val_bank_accountNum}' && field.value){
var sortcodeField = form ? form.getFormElem()[0].querySelector('#' + '${D8_val_bank_sortcode}') : document.querySelector('#' + '${D8_val_bank_sortcode}');
if(sortcodeField != null && sortcodeField.value)
validateBankAsync(sortcodeField, field);
}
else if(field.id === '${D8_val_bank_sortcode}' && field.value){
var accNumField = form ? form.getFormElem()[0].querySelector('#' + '${D8_val_bank_accountNum}') : document.querySelector('#' + '${D8_val_bank_accountNum}');
if(accNumField != null && accNumField.value)
validateBankAsync(field, accNumField);
}
else if(field.id === '${D8_val_name_firstName}' && field.value){
var lastNameId = '${D8_val_name_lastName}';
var lastNameField;
if(lastNameId)
lastNameField = form ? form.getFormElem()[0].querySelector('#' + lastNameId) : document.querySelector('#' + lastNameId);
if(!lastNameId || (lastNameField && lastNameField.value))
validateNameAsync(field, lastNameField);
}
else if(field.id === '${D8_val_name_lastName}' && field.value){
var firstNameId = '${D8_val_name_firstName}';
var firstNameField;
if(firstNameId)
firstNameField = form ? form.getFormElem()[0].querySelector('#' + firstNameId) : document.querySelector('#' + firstNameId);
if(firstNameField && firstNameField.value)
validateNameAsync(firstNameField, field);
}
}
function validateEmailAsync(field) {
var params = {
email: field.value,
level: '${D8_val_email_level}',
options: {
ApplicationName: 'Marketo'
}
}
var req = new XMLHttpRequest();
req.open("POST", "https://webservices.data-8.co.uk/EmailValidation/IsValid.json?key=" + '${D8_apiKey}');
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.onreadystatechange = function () {
if (this.readyState === 4) {
req.onreadystatechange = null;
if (this.status === 200) {
var result = JSON.parse(this.response);
if (!result.Status.Success)
reportValidationResult({ field: field, valid: true });
else if (result.Result !== "Invalid")
reportValidationResult({ field: field, valid: true });
else
reportValidationResult({ field: field, valid: false, msg: '${D8_val_email_msg}' });
} else {
reportValidationResult({ field: field, valid: true });
}
}
};
req.send(window.JSON.stringify(params));
}
function validatePhoneAsync(field) {
var params = {
telephoneNumber: field.value,
defaultCountry: '${D8_val_phone_defaultCountryCode}',
options: {
ApplicationName: 'Marketo',
}
}
var req = new XMLHttpRequest();
req.open("POST", "https://webservices.data-8.co.uk/PhoneValidation/IsValid.json?key=" + '${D8_apiKey}');
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.onreadystatechange = function () {
if (this.readyState === 4) {
req.onreadystatechange = null;
if (this.status === 200) {
var result = JSON.parse(this.response);
if (!result.Status.Success)
reportValidationResult({ field: field, valid: true });
else if (result.Result.ValidationResult !== "Invalid")
reportValidationResult({ field: field, valid: true });
else
reportValidationResult({ field: field, valid: false, msg: '${D8_val_phone_msg}'});
} else {
reportValidationResult({ field: field, valid: true });
}
}
};
req.send(window.JSON.stringify(params));
}
function validateBankAsync(sortcodeField, accountNumField) {
var params = {
sortcode: sortcodeField.value,
bankAccountNumber: accountNumField.value,
options: {
ApplicationName: 'Marketo'
}
}
var req = new XMLHttpRequest();
req.open("POST", "https://webservices.data-8.co.uk/BankAccountValidation/IsValid.json?key=" + '${D8_apiKey}');
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.onreadystatechange = function () {
if (this.readyState === 4) {
req.onreadystatechange = null;
if (this.status === 200) {
var result = JSON.parse(this.response);
if (!result.Status.Success){
reportValidationResult({ field: sortcodeField, valid: true });
reportValidationResult({ field: accountNumField, valid: true });
}
else if (result.Valid !== "Invalid"){
reportValidationResult({ field: sortcodeField, valid: true });
reportValidationResult({ field: accountNumField, valid: true });
}
else{
reportValidationResult({ field: sortcodeField, valid: false, msg: '${D8_val_bank_msg}' });
reportValidationResult({ field: accountNumField, valid: false, msg: '${D8_val_bank_msg}' });
}
} else {
reportValidationResult({ field: sortcodeField, valid: true });
reportValidationResult({ field: accountNumField, valid: true });
}
}
};
req.send(window.JSON.stringify(params));
}
function validateNameAsync(firstNameField, lastNameField) {
var params = {
name:{
Title: "",
Forename: firstNameField.value,
MiddleName: "",
Surname: lastNameField ? lastNameField.value : "",
},
options: {
ApplicationName: 'Marketo'
}
}
var req = new XMLHttpRequest();
req.open("POST", "https://webservices.data-8.co.uk/SalaciousName/IsUnusableName.json?key=" + '${D8_apiKey}');
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.onreadystatechange = function () {
if (this.readyState === 4) {
req.onreadystatechange = null;
if (this.status === 200) {
var result = JSON.parse(this.response);
if (!result.Status.Success){
reportValidationResult({ field: firstNameField, valid: true });
reportValidationResult({ field: lastNameField, valid: true });
}
else if (result.Result === ""){
reportValidationResult({ field: firstNameField, valid: true });
reportValidationResult({ field: lastNameField, valid: true });
}
else{
reportValidationResult({ field: firstNameField, valid: false, msg: '${D8_val_name_msg}' });
reportValidationResult({ field: lastNameField, valid: false, msg: '${D8_val_name_msg}' });
}
} else {
reportValidationResult({ field: firstNameField, valid: true });
reportValidationResult({ field: lastNameField, valid: true });
}
}
};
req.send(window.JSON.stringify(params));
}
function reportValidationResult(result) {
if (result.valid) {
result.field.classList.remove("data8Error");
}
else {
result.field.classList.add("data8Error");
if(currentForm){
currentForm.showErrorMessage(result.msg, $(result.field));
}
}
result.field.reportValidity();
return result;
}
function checkForErrors(form){
var inputs = form.getFormElem()[0].querySelectorAll("input");
var validForm = true;
for(var i=0; i<inputs.length; i++){
if(inputs[i].classList.contains("data8Error")){
validForm = false;
inputs[i].focus();
if(inputs[i].type == "email")
reportValidationResult({ field: inputs[i], valid: false, msg: '${D8_val_email_msg}' });
else if(inputs[i].type == "tel")
reportValidationResult({ field: inputs[i], valid: false, msg: '${D8_val_phone_msg}' });
else if(inputs[i].id == '${D8_val_bank_sortcode}' || inputs[i].id == '${D8_val_bank_accountNum}')
reportValidationResult({ field: inputs[i], valid: false, msg: '${D8_val_bank_msg}' });
else
reportValidationResult({ field: inputs[i], valid: false, msg: '${D8_val_name_msg}' });
}
}
return validForm;
}
MktoForms2.onFormRender(function (form) {
currentForm = form;
var formFields = form.getFormElem()[0].querySelectorAll("input");
for(var i=0; i < formFields.length; i++){
var field = formFields[i];
if(field && !field.classList.contains("data8-validation-has-attached")){
field.classList.add("data8-validation-has-attached");
field.addEventListener('change', function(e){
startData8Validation(this, form);
});
}
}
});
</script>