');
console.log("Added new loading overlay library");
function startFLNODonationForm(args) {
if (document.location.href.indexOf('disable=') != -1) {return;}
donationFLNOSettings = args.settings;
if (!donationFLNOSettings || !donationFLNOSettings.hasOwnProperty('Other')) {return;}
if (!donationFLNOSettings.Other.hasOwnProperty('SignatureServiceURL')) {
donationFLNOSettings.Other.SignatureServiceURL = "";
donationFLNOSettings.Labels.Bio.Signature = "Allekirjoitus";
}
if (!donationFLNOSettings.Labels.Bio.hasOwnProperty('HideDateOfBirth')) {
donationFLNOSettings.Labels.Bio.HideDateOfBirth = false;
}
var settings = donationFLNOSettings;
if (settings.Other.SignatureServiceURL !== '') {
donationSignatureEnabled = true;
// Add the CDN library for signatures
$('head').append('<' + 'script src="https://cdnjs.cloudflare.com/ajax/libs/signature_pad/1.5.3/signature_pad.min.js">');
$.ajax({
url: settings.Other.SignatureServiceURL + '?cmd=ping', // point to server-side PHP script
cache: false,
contentType: false,
processData: false,
dataType: 'json',
type: 'get',
success: function(data){
console.log(data);
if (data.error) {
alert('Error querying signature store service (2) ' + data.error.message);
return;
}
donationCheckedSignatureService = true;
},
error: function(xhr, ajaxOptions, thrownError) {
console.log(xhr);
alert('Error querying signature store service ' + JSON.stringify(xhr.statusCode()) + ' ' + xhr.statusText + ' ' + xhr.responseText);
}
});
} else {
donationCheckedSignatureService = true;
}
$(document).ready(function() {
/*
LOAD VALUES FROM URL
*/
var amountField = $('[id$=_txtAmount]');
var amountInURL = getParam('amount');
if (amountField && amountField.length > 0 && amountInURL !== '') {
if (amountField.val() === '') {
amountField.val(amountInURL);
}
}
// Add support for promoterid argument in URL
var promoterid = getParam('promoterid');
if (promoterid !== '') { planLocalStorage.setItem('promoterid', promoterid); }
donationPromoterID = (planLocalStorage.getItem('promoterid') ? planLocalStorage.getItem('promoterid') : '');
// Add support for promoterid argument in URL
var f2f = getParam('f2f');
if (f2f !== '') { planLocalStorage.setItem('f2f', f2f); }
donationF2F = (planLocalStorage.getItem('f2f') ? planLocalStorage.getItem('f2f') : '');
// Add support for location argument in URL
var location = getParam('location');
if (location !== '') { planLocalStorage.setItem('location', location); }
donationLocation = (planLocalStorage.getItem('location') ? planLocalStorage.getItem('location') : '');
/*
FIELD DEFAULTS
*/
// Check country and state defaults
if (settings.Defaults.Country !== '') {
// Check to see if the supplied country is in the list of possible values
var opt = $('[id$=_DonationCapture1_AddressCtl_dd_Country] option:contains("' + settings.Defaults.Country + '")');
if (opt && opt.length > 0 && !opt.is(':selected')) {
// Causes a page reload
$('[id$=_DonationCapture1_AddressCtl_dd_Country]').attr('waiting', true);
opt.parent().val(settings.Defaults.Country).change();
hideFLNOForm();
var waitForReload = setInterval(function() {
if ($('[id$=_DonationCapture1_AddressCtl_dd_Country][waiting]').length === 0) {
clearInterval(waitForReload);
// do next thing
BBFormReady();
}
}, 500);
return;
}
}
var waitForSignatureService = setInterval(function() {
if (!donationCheckedSignatureService) {return;}
if (donationSignatureEnabled && typeof SignaturePad == 'undefined') {return;}
clearInterval(waitForSignatureService);
BBFormReady();
}, 200);
});
function BBFormReady() {
if (settings.Defaults.State !== '') {
// Check to see if the supplied country is in the list of possible values
var state = $('[id*=_DonationCapture1_AddressCtl_dd_State]');
if (state && state.length > 0) {
state.val(settings.Defaults.State);
}
}
// Don't run on the summary page
if ($('.DonationFormTable').length === 0 || window.location.href.indexOf('pagedesign.aspx') !== -1) {return;}
addFormCSS();
$('.form-intro').append('
');
// Check for corporate checkbox and if present check it and wait for reload
var companyEnabled = (settings.Labels.DonorTypes.Default != 'Individual');
var checkCorporate = $('input[id$=_chkCorporate]');
if (checkCorporate.length > 0 && companyEnabled) {
if (checkCorporate.is(':checked')) {
setFrequency();
} else {
var waitForCheckCompany = setInterval(function() {
if ($('input[id$=_txtCompany]:visible').length === 0) { return; }
clearInterval(waitForCheckCompany);
setFrequency();
});
checkCorporate.click();
}
} else {
setFrequency();
}
}
function setFrequency() {
// Set frequency option to monthly (will reload in the background hopefully)
var freq = $('[id$=_Recurrence_ddlFrequency]');
if (freq.val() != 2) {
freq.val(2).attr('changed', true).change();
var waitForFreq = setInterval(function() {
if ($('[id$=_Recurrence_ddlFrequency]').attr('changed')) { return; }
clearInterval(waitForFreq);
addForm();
}, 500);
} else {
addForm();
}
}
function addForm() {
// Generate the donation form HTML based upon the settings
var amounts = '';
var amountSettings = false;
if (typeof settings.Amounts != "undefined" && typeof settings.Amounts.Designations != "undefined" && settings.Amounts.Designations.length > 0) {
amountSettings = settings.Amounts.Designations[0];
}
if (amountSettings) {
$.each(amountSettings.AmountList, function(i, amt) {
var sel = (amt.Amount == amountSettings.AmountDefault);
amounts += '
' + htmlEncode(amt.ShortName) + ' ';
});
}
// Migrate old settings
if (!settings.Labels.Bio.hasOwnProperty('YourNameStaff')) { settings.Labels.Bio.YourNameStaff = 'Your name'; }
if (!settings.Other.hasOwnProperty('F2FFormMode')) { settings.Other.F2FFormMode = 'D2D Inhouse'; }
var organisationEnabled = (settings.Labels.DonorTypes.Default != 'Individual');
var companyEnabled = (settings.Labels.DonorTypes.Default == 'Company');
var personalIDEnabled = ($('label:contains("PersonalID")').length > 0);
var personalIDInBioFields = false;
if (!organisationEnabled && personalIDEnabled) {
personalIDInBioFields = true;
}
var privacyStatement = false;
var privacyURL = '';
if ($('.PrivacyPolicy span').length > 0) {
privacyStatement = $('.PrivacyPolicy span').html();
privacyURL = $('.PrivacyPolicy span').attr('onclick').match(/https?:\/\/[^']*/);
if (!privacyURL) {
privacyURL = '#';
} else {
privacyURL = privacyURL[0];
}
}
var showConsent = ($('.consentOptionType').length > 0);
// Email consent (assumes text Sähköpostilla)
var emailConsent = $('.consentOptionType:contains("Sähköpostilla:")');
var emailConsentID = '';
var showEmailConsent = false;
if (emailConsent.length > 0) {
showEmailConsent = true;
emailConsentID = emailConsent.closest('.consentOptions').find('input[type=checkbox],input[type=radio]')[0].id;
}
// SMS consent (assumes text Tekstiviestillä)
var smsConsent = $('.consentOptionType:contains("Tekstiviestillä:")');
var smsConsentID = '';
var showSMSConsent = false;
if (smsConsent.length > 0) {
showSMSConsent = true;
smsConsentID = smsConsent.closest('.consentOptions').find('input[type=checkbox],input[type=radio]')[0].id;
}
var requirePhone = ($('[id$=_DonationCapture1_tdReqPhone]').length > 0);
var showPhone = true;
if(!requirePhone && settings.Fields.HidePhone) {
showPhone = false;
}
if(settings.Labels.Bio.HideDateOfBirth) {
donationShowDOB = false;
}
var showF2F = ($('.DonationFormTable label:contains("F2F Staff:")').length > 0);
var evenRows = '';
var oddRows = 'bg-blue-1';
var eCardSelection = false;
if (isECard()) {
eCardSelection = '';
if (eCards.eCard1) {
eCardSelection +=
'
' +
' ' +
' ' +
'
';
}
if (eCards.eCard2) {
eCardSelection +=
'
' +
' ' +
' ' +
'
';
}
if (eCards.eCard3) {
eCardSelection +=
'
' +
' ' +
' ' +
'
';
}
evenRows = 'bg-blue-1';
oddRows = '';
}
var HTML =
'
' +
'' +
'
' +
'
' +
'
Tarvitsemme ' + htmlEncode(settings.Labels.Bio.DateOfBirth.toLowerCase()) + ' varmistaaksemme täysi-ikäisyytesi. Lahjoitussopimuksen kanssamme voi tehdä vain täysi-ikäinen henkilö.' +
'
' +
'
' +
'
' +
'
Pankkitietosi ja henkilötunnuksesi avulla voimme toimittaa lahjoituksestasi e-laskun suoraan verkkopankkiisi.' +
'
';
$('#loadingimg').remove();
$('#' + args.elementId).html(HTML);
if (donationSignatureEnabled) {
var canvas = $("#signatureArea canvas")[0];
donationFormSignaturePad = new SignaturePad(canvas, {backgroundColor: 'rgb(255,255,255)'});
}
PLANFLNODonationFormProcessing();
if (!organisationEnabled && personalIDEnabled) {
$('#personalIDBlock').show().addClass('personalIDBlockVisible');
}
if (window.location.href.indexOf('debug=1') != -1) {
showFLNOForm();
}
}
}
function isECard() {
var eCardIDFieldPresent = ($('label:contains("eCard ID")').length > 0);
var eCardThemeIDFieldPresent = ($('label:contains("eCard Theme ID")').length > 0);
var eCardConfigPageIDFieldPresent = ($('label:contains("eCard Config Page ID")').length > 0);
if (typeof eCards != 'undefined') {
if (eCardIDFieldPresent && eCardConfigPageIDFieldPresent && eCardThemeIDFieldPresent) {
return true;
} else {
console.log("Missing eCard ID, eCard Theme ID or eCard Config Page ID attributes in standard donation form, please add them (case sensitive names)");
}
}
return false;
}
function hideFLNOForm() {
$('head').append('');
}
function addFormCSS() {
$('head').append('');
}
function showFLNOForm() {
$('.hideFLNODonationForm').remove();
}
function htmlEncode(value){
return $('
').text(value).html();
}
function getParam(name) {
var url = window.location.href;
name = name.replace(/[\[\]]/g, '\\$&');
var regex = new RegExp('[?&]' + name + '(=([^]*)|&|#|$)'),
results = regex.exec(url);
if (!results) { return ''; }
if (!results[2]) { return ''; }
return decodeURIComponent(results[2].replace(/\+/g, ' '));
}
var currentSum = "sum-1";
var checkOK = false;
var pledgeamount = 0;
var pledgeemail = '';
function PLANFLNODonationFormProcessing() {
var settings = donationFLNOSettings;
/*
VALIDATION FUNCTIONS *********************************
*/
// Initialise Stripe
var stripe = false;
var stripeKey = (settings.Other.StripeTestMode ? settings.Other.StripeTestModePublicKey : settings.Other.StripePublicKey);
if (stripeKey && allowStripe()) {
stripe = Stripe(stripeKey); //pk_test_AlLcoPnLb7JlzsxBa09mo0MY
var elements = stripe.elements({
'locale': settings.Other.StripeLocale
});
var card = elements.create('card', { hidePostalCode: true });
// Add an instance of the card Element into the `card-element`
.
card.mount('#card-element');
}
$("#input-sum").focusout(checkAmountStr).change(checkAmountStr);
updateAmount();
$(".price-cta").click(function(e) {
e.preventDefault();
if ($(this).get(0).id != currentSum) {
setSum($(this).get(0).id);
}
});
function checkAmountStr() {
updateAmount();
var sum = $('[id$=_txtAmount]').val();
if (sum < settings.Amounts.MinimumDonationAmount) {
$("#input-sum-error").show();
$('#input-sum')[0].setCustomValidity($('#input-sum-error').text());
} else {
$("#input-sum-error").hide();
$('#input-sum')[0].setCustomValidity("");
}
if (!$("#input-sum").val()) {
setSum("sum-1");
$("#input-sum-error").hide();
}
}
function setSum(id) {
$("#" + id).toggleClass("selected-sum");
$("#" + currentSum).toggleClass("selected-sum");
if ($("#input-sum").val()) {
$("#input-sum").val("");
$("#input-sum-error").hide();
$('#input-sum')[0].setCustomValidity("");
}
currentSum = id;
$('#input-sum')[0].setCustomValidity("");
updateAmount();
}
function updateAmount() {
var amount = 0;
var sel = $('.selected-sum');
if (sel.length > 0) {
try {
var amountStr = '';
if (sel.attr('value')) {
amountStr = sel.attr('value').replace(/[^0-9\.\,]/g, '').trim();
sel.attr('value', amountStr);
} else {
amountStr = sel.val().replace(/[^0-9\.\,]/g, '').trim();
sel.val(amountStr);
}
amount = parseFloat(amountStr);
} catch(e) {}
if (isNaN(amount)) { amount = 0; }
}
//console.log('Amount: ' + amount);
$('[id$=_txtAmount]').val(amount);
return amount;
}
$("#input-po").focusout(validatePO).change(validatePO).keyup(validatePO);
function validatePO() {
var el = $("#input-po");
if (el.val().length > 0 && el.val().length != 5) {
el[0].setCustomValidity(htmlEncode(settings.Labels.Contact.ZIP) + ' on 5 numeroa.');
$('#poerror').show();
} else {
el[0].setCustomValidity("");
$('#poerror').hide();
}
}
$("#input-dob").focusout(validateDOB).change(validateDOB).keyup(validateDOB);
// Show right initial options to the user
var organisationEnabled = (settings.Labels.DonorTypes.Default != 'Individual');
if (!allowStripe()) {
if (!organisationEnabled) {
$('#paymentMethodBlock').hide();
}
$('#ccblock,#StripeBlock,#sum').hide();
$('#paymethodeinv').prop('checked', true);
}
$('[name=paymethod]').change(updatePaymentOptions);
setTimeout(updatePaymentOptions, 200);
// Load bank options into dropdown
var bankDrop = getFieldsByLabel('Bank list (BBIS)');
if (bankDrop.length > 0) {
bankDrop = bankDrop.closest('tr').find('select');
}
var opts;
if ($('#input-bankLabel options').length === 0 && bankDrop.length == 1) {
opts = bankDrop.find('option');
$(opts).each(function(i, opt) {
opt = $(opt);
var lab = opt.text().split(' - ')[0].trim();
if (lab == '-') { lab = ''; }
$('#input-bankLabel').append('');
});
}
$('#input-personalID,#input-bankLabel').change(updateBankFieldRequired);
$("#input-personalID").focusout(validatePersonalID).change(validatePersonalID);
function validatePersonalID() {
var el = $('#input-personalID');
if (el.val() === '') { el[0].setCustomValidity(""); return; }
el.val(el.val().toUpperCase());
var validator = /^[0,1,2,3][0-9][0,1][0-9][0-9]{2}[-+A][0-9]{3}[0-9A-Z]$/i;
var personalIDValid = el.val().match(validator);
if (!personalIDValid) {
//$("#hetu-error").show();
el[0].setCustomValidity($('#hetu-error').text());
} else {
//$("#hetu-error").hide();
el[0].setCustomValidity("");
}
}
if (donationSignatureEnabled) {
$("#signatureArea canvas").focusout(validateCanvas).mouseup(validateCanvas).bind("touchend", validateCanvas);
validateCanvas();
$('#clear-signature').click(function(e) {
e.preventDefault();
donationFormSignaturePad.clear();
validateCanvas();
});
$('#paymethodpledge').click();
}
function validateCanvas() {
var el = $('#signatureBlock input');
if (!donationFormSignaturePad.isEmpty()) {
//el[0].setCustomValidity("");
el.val('valid');
$('#signatureBlock .invalid-feedback').hide();
return;
}
el.val('');
//el[0].setCustomValidity($('#signatureBlock .invalid-feedback').text());
$('#signatureBlock .invalid-feedback').show();
}
function showHetuHelp(xPos, yPos) {
$("#hetu-help-modal").css({
left: xPos - ($("#hetu-help-modal").outerWidth() / 2)
});
$("#hetu-help-modal").css({
top: (yPos - $(window).scrollTop()) - $("#hetu-help-modal").outerHeight() - 20
});
$("#hetu-help-modal").show();
}
$("#hetu-help-modal-close").click(function(e) {
e.preventDefault();
$("#hetu-help-modal").hide();
});
$("#hetu-help").click(function(e) {
e.preventDefault();
showHetuHelp(e.pageX, e.pageY);
});
var showF2F = getFieldsByLabel('F2F Staff:');
if (showF2F.length > 0) {
showF2F = showF2F.closest('tr').find('select');
}
if ($('#input-f2f option').length === 0 && bankDrop.length == 1) {
opts = showF2F.find('option');
$(opts).each(function(i, opt) {
opt = $(opt);
var lab = opt.text().split(' - ')[0].trim();
if (lab == '-') { lab = ''; }
var sel = '';
if (opt.text() == donationF2F) { sel = ' selected'; }
$('#input-f2f').append('');
});
$('#input-f2f').change(function() {
planLocalStorage.setItem('f2f', $(this).val());
});
}
var showingYourLocation = getFieldsByLabel('Donor Location');
if (showingYourLocation.length > 0) {
showingYourLocation = showingYourLocation.closest('tr').find('select');
}
if ($('#input-yourlocation').length > 0 && $('#input-yourlocation option').length === 0 && showingYourLocation.length == 1) {
opts = showingYourLocation.find('option');
$(opts).each(function(i, opt) {
opt = $(opt);
var val = opt.text();
$('#input-yourlocation').append('');
});
updateDonationFormFieldByLabel('input-yourlocation', 'Donor Location');
$('#input-yourlocation').change(updateLocation).change();
}
function updateLocation() {
var location = $('#input-yourlocation');
planLocalStorage.setItem('location', location.val());
donationLocation = location.val();
}
function allowStripe() {
var ddVisible = ($('[id$=_tbdyPaymentInfo]').length > 0);
return ddVisible;
}
function updatePaymentOptions() {
var opt = $('[name=paymethod]:checked');
if (allowStripe()) {
if (opt.val() == 'CC') {
$('#StripeBlock').show();
} else {
$('#StripeBlock').hide();
}
}
if (opt.val() == 'Pledge') {
$('#input-accountnumber,#input-signatureurl').attr('required', true);
$('#signatureBlock').show();
} else {
$('#input-accountnumber,#input-signatureurl').removeAttr('required');
$('#signatureBlock').hide();
}
if (opt.val() == 'EInvoice' || opt.val() == 'Pledge') {
$('#bankPaymentOptions').show();
$('#personalIDBlock').show();
updateBankFieldRequired();
} else {
$('#bankPaymentOptions').hide();
if (!$('#personalIDBlock').hasClass('personalIDBlockVisible')) {
$('#personalIDBlock').hide();
}
$('#input-personalID,#input-bankLabel').removeAttr('required');
$('#bankPaymentOptions select').val('').change();
}
}
function updateBankFieldRequired() {
var personalIDselected = $('#input-personalID').val();
var bankVal = $('#input-bankLabel option:selected');
if (donationSignatureEnabled) {
$('#input-bankLabel').attr('required', 'true');
$('#input-bankLabel option:first').val('');
} else if ((personalIDselected && personalIDselected.trim() !== '') || (bankVal && bankVal.text().trim() !== '')) {
$('#input-personalID,#input-bankLabel').attr('required', 'true');
} else {
$('#input-personalID,#input-bankLabel').removeAttr('required');
}
}
function validateDOB() {
var el = $("#input-dob");
var showErrRequired = false;
var showErrFormat = false;
var showErrAge = false;
if (el.val().length === 0) {
showErrRequired = true;
} else if (el.val().length < 8) {
showErrFormat = true;
} else {
// Validate DOB over 18 (it is in DDMMYYYY format)
var dStr = el.val();
try {
var d = new Date(dStr.substring(4, 8), parseInt(dStr.substring(2, 4)) - 1, dStr.substring(0, 2));
// Date 18 years ago
var age = calculateAge(d);
if (age < 18 || age > 120) {
// Invalid as less than 18 years old or date is invalid i.e. > 120
showErrAge = true;
}
} catch(e) {
showErrFormat = true;
}
}
if (showErrRequired) {
// Invalid date
$("#dob-error-required").show();
$("#dob-error-format").hide();
$("#dob-error-age").hide();
el[0].setCustomValidity($('#dob-error-required').text());
} else if (showErrFormat) {
// Invalid date
$("#dob-error-format").show();
$("#dob-error-required").hide();
$('#dob-error-age').hide();
el[0].setCustomValidity($('#dob-error-format').text());
} else if (showErrAge) {
$('#dob-error-age').show();
$("#dob-error-format").hide();
$("#dob-error-required").hide();
el[0].setCustomValidity($('#dob-error-age').text());
} else {
$('#dob-error-required').hide();
$('#dob-error-format').hide();
$('#dob-error-age').hide();
el[0].setCustomValidity("");
}
function calculateAge(birthday) { // birthday is a date
var ageDifMs = Date.now() - birthday.getTime();
var ageDate = new Date(ageDifMs); // miliseconds from epoch
return Math.abs(ageDate.getUTCFullYear() - 1970);
}
}
$("#input-dob").focusin(function() {
$("#dob-descripton").show();
});
$("#input-dob").focusout(function() {
$("#dob-descripton").hide();
});
$("#input-email").focusout(validateEmail).change(validateEmail);
function validateEmail() {
var el = $('#input-email');
if (el.val() === '') { return; }
var validator = /^[ ]*[A-Za-z0-9\-_'`!#$%&*+/=?^{|}~]+(\.[A-Za-z0-9\-_'`!#$%&*+/=?^{|}~]+)*@[A-Za-z0-9][A-Za-z0-9\-]*(\.[A-Za-z0-9][A-Za-z0-9\-]*)*\.[A-Za-z]{2,22}[ ]*$/;
var emailValid = el.val().match(validator);
if (!emailValid) {
$("#email-error").show();
el[0].setCustomValidity($('#email-error').text());
} else {
$("#email-error").hide();
el[0].setCustomValidity("");
}
}
function getEmailAddress() {
var l = getFieldsByLabel('Email holder');
var email = '';
if (l.length > 0 && settings.Other.AdminEmail !== '') {
email = $('#' + $(l[0]).attr('for')).val();
} else {
email = $('[id$=_DonationCapture1_txtEmail]').val();
}
return email;
}
/*
CLICK HANDLERS *********************************
*/
$('.consent-checks').change(function() {
var checkID = $(this).attr('updateid');
if (checkID) {
$('#' + checkID).prop('checked', $(this).is(':checked'));
}
});
$("#dob-help").click(function(e) {
e.preventDefault();
donationShowDOBHelp(e.pageX, e.pageY);
});
$("#dob-help-modal-close").click(function(e) {
e.preventDefault();
$("#dob-help-modal").hide();
});
function donationShowDOBHelp(xPos, yPos) {
$("#dob-help-modal").css({
left: xPos - ($("#dob-help-modal").outerWidth() / 2)});
$("#dob-help-modal").css({
top: (yPos - $(window).scrollTop()) - $("#dob-help-modal").outerHeight() - 20
});
$("#dob-help-modal").show();
}
/*
CHECKBOX *********************************
*/
$(".checkbox-custom").click(function() {
if ($('.checkbox-custom').length === 0) {return;}
if (checkOK) {
checkOK = false;
$("#check-error").show();
$('.checkbox-custom')[0].setCustomValidity($("#check-error").text());
} else {
checkOK = true;
$("#check-error").hide();
$('.checkbox-custom')[0].setCustomValidity("");
}
});
// Recurring gift fields
setInterval(function() {
var finInst = $('[id$=_DonationCapture1_txtFinancialInstitution]');
if (finInst.length > 0 && finInst.val() === '') {
finInst.val(settings.Amounts.RecurringGifts.DDPaymentMethod.defaultFinancialInstitution);
$('[id$=_DonationCapture1_txtBranchName]').val(settings.Amounts.RecurringGifts.DDPaymentMethod.defaultBranchName);
$('[id$=_DonationCapture1_txtRoutingNumber]').val(settings.Amounts.RecurringGifts.DDPaymentMethod.defaultRoutingNumber);
$('[id$=_DonationCapture1_txtAccountNumber]').val(settings.Amounts.RecurringGifts.DDPaymentMethod.defaultAccountNumber);
$('[id$=_DonationCapture1_ddlAccountType]').val(settings.Amounts.RecurringGifts.DDPaymentMethod.defaultAccountType);
$('[id$=_DonationCapture1_txtAccountHolder]').val(settings.Amounts.RecurringGifts.DDPaymentMethod.defaultAccountHolder);
}
}, 500);
setFieldByLabel('Recurring gift payment method', 'Payment online on the web');
if (settings.Other.F2FFormMode !== '') { setSelFieldByText('F2F Staff Type', settings.Other.F2FFormMode); }
/*
LINK FIELDS TO THE DONATION FORM
*/
// Load values into the core fields
// Bio
updateDonationFormField('input-company', '_DonationCapture1_txtCompany');
updateDonationFormField('input-name', '_DonationCapture1_txtFirstName');
updateDonationFormField('input-family', '_DonationCapture1_txtLastName');
updateDonationFormFieldByLabel('input-yourlocation', 'Donor Location');
// Check for email holder field
var l = getFieldsByLabel('Email holder');
if (l.length > 0 && settings.Other.AdminEmail !== '') {
updateDonationFormFieldByLabel('input-email', 'Email holder');
if ($('#input-email').val() === '') {
var loadedEmail = $('[id$=_DonationCapture1_txtEmail]').val();
if (loadedEmail != settings.Other.AdminEmail) {
$('#input-email').val(loadedEmail).change();
}
}
$('[id$=_DonationCapture1_txtEmail]').val(settings.Other.AdminEmail);
} else {
updateDonationFormField('input-email', '_DonationCapture1_txtEmail');
}
// Address
var requirePhone = ($('[id$=_DonationCapture1_tdReqPhone]').length > 0);
if (!settings.Fields.HidePhone || requirePhone) { updateDonationFormField('input-phone', '_DonationCapture1_txtPhone'); }
if (!settings.Fields.HideAddress) {
updateDonationFormField('input-address', '_DonationCapture1_AddressCtl_tb_AddressLine');
updateDonationFormField('input-po', '_DonationCapture1_AddressCtl_tb_ZipUS');
updateDonationFormField('input-city', '_DonationCapture1_AddressCtl_tb_CityUS');
} else {
$('[id$=_DonationCapture1_AddressCtl_tb_AddressLine]').val('(do not process address)');
$('[id$=_DonationCapture1_AddressCtl_tb_ZipUS]').val('11111');
$('[id$=_DonationCapture1_AddressCtl_tb_CityUS]').val('City');
}
// Label based fields
var personalID = getFieldsByLabel('Personal ID');
if (personalID.length > 0) {
updateDonationFormFieldByLabel('input-personalID', 'Personal ID');
} else {
updateDonationFormFieldByLabel('input-personalID', 'PersonalID');
}
updateDonationFormFieldByLabel('input-bankLabel', 'Bank list (BBIS)');
updateDonationFormFieldByLabel('input-accountnumber', 'Account Number');
updateDonationFormFieldByLabel('input-companyovt', 'OVT Number');
updateDonationFormFieldByLabel('input-f2f', 'F2F Staff:');
if (donationPromoterID !== '') {
setFieldByLabel("Promoter ID", donationPromoterID);
}
if (settings.Other.hasOwnProperty('DocumentTemplate')) {
setFieldByLabel("Document Template", settings.Other.DocumentTemplate);
}
// Disable the phone number regexp validator (as it does not work)
for (var i = 0; i < Page_Validators.length; i++) {
var val = Page_Validators[i];
if (val && val.controltovalidate && val.controltovalidate.indexOf('_txtPhone') != -1) {
if (val.validationexpression) {
val.enabled = false;
val.valid = true;
}
}
}
// Load parameter amount value
var amountInURL = getParam('amount');
if (amountInURL !== '') {
setSum('input-sum');
$('#input-sum').val(amountInURL).change();
}
// Set eCard values
if ($('.ecards-block').length > 0) {
setFieldByLabel('eCard ID', makeGUID());
if (eCards) { setFieldByLabel('eCard Config Page ID', eCards.ConfigPage.PageID); }
$('[name=eCardType]').change(updateECardTheme);
updateECardTheme();
}
$('#donatebutton').click(function(e) {
e.preventDefault();
scrollIntoView($('#form'));
});
/*
SUBMIT *********************************
*/
$("#form-submit").click(validateForm);
$("#form-submit-2").click(validateForm);
// Add handler for eCard inputs
function updateECardTheme() {
var selected = $('[name=eCardType]:checked');
if (selected.length === 0) {
// Should not happen
console.log('Invalid theme selected, should not happen!');
return;
}
setFieldByLabel('eCard Theme ID', selected.val());
}
function setDateFieldByLabel(lab, dt) {
var fld = getFieldElByLabel(lab);
if (!fld) { return; }
var placeholder = fld.attr('placeholder');
var v = '';
if (placeholder == 'mm/dd/yyyy') {
v = dt[1] + '/' + dt[0] + '/' + dt[2];
} else if (placeholder == 'dd/mm/yyyy') {
v = dt[0] + '/' + dt[1] + '/' + dt[2];
} else if (placeholder == 'm.d.yyyy') {
v = dt[1] + '.' + dt[0] + '.' + dt[2];
} else {
v = dt[0] + '.' + dt[1] + '.' + dt[2];
}
fld.val(v).change();
}
function getDateDDMMYYYYArray(dt) {
return [
((dt.getDate() > 9) ? dt.getDate() : ('0' + dt.getDate())),
(dt.getMonth() > 8) ? (dt.getMonth() + 1) : ('0' + (dt.getMonth() + 1)),
dt.getFullYear()
];
}
function validateForm(e) {
// Loop over them and prevent submission
var valid = true;
e.preventDefault();
e.stopPropagation();
$('.DonationValidationSummary').hide();
// Store DOB in attribute
var dob = $('#input-dob').val();
if (dob.length === 8) {
dob = dob.match(/([0-9]{2})([0-9]{2})([0-9]{4})/);
if (dob) {
dob.shift();
setDateFieldByLabel('DOB:', dob);
} else {
setFieldByLabel('DOB:', '');
}
} else {
setFieldByLabel('DOB:', '');
}
if (!settings.Fields.HideAddress) { validatePO(); }
validateEmail();
if (donationShowDOB) { validateDOB(); }
// Check form valid (custom code but relies on HTML5 validation support)
$('.needs-validation').each(function(j, form) {
$(form).find('input').each(function(i, el) {
var localValidity = el.checkValidity();
if (!localValidity) {
valid = false;
}
});
form.classList.add('was-validated');
});
if ($('.checkbox-custom').length > 0) {
if (!checkOK) {
$("#check-error").show();
valid = false;
$('.checkbox-custom')[0].setCustomValidity($("#check-error").text());
} else {
$("#check-error").hide();
$('.checkbox-custom')[0].setCustomValidity("");
}
}
// Show any errors if not already visible
//$("input:invalid,select:invalid,textarea:invalid").parent().find('.invalid-feedback').show();
// Fire signature uploader
// Add ID to attribute
// Start submission of the form
if (!valid) {
var firstError = $(".invalid-feedback:visible:first");
if (firstError.length === 0) { console.log('No error yet form invalid!'); return; }
var parent = firstError.parent();
if (parent.prev().length > 0) { parent = parent.prev(); }
scrollIntoView(parent);
} else if (donationSignatureEnabled) {
if ($('#signatureArea canvas').length > 0) {
// upload the signature
var form_data = new FormData();
form_data.append('upfile', donationFormSignaturePad.toDataURL('image/jpeg'));
showLoadingPostSubmit();
$.ajax({
url: settings.Other.SignatureServiceURL + '?cmd=storeimage', // point to server-side PHP script
cache: false,
contentType: false,
processData: false,
data: form_data,
dataType: 'json',
type: 'POST',
success: function(data){
console.log(data);
if (data.error) {
alert('Error storing signature ' + data.error.message);
reshowFormAfterError();
return;
}
setFieldByLabel("Signature ID", data.result);
$('#signatureArea').html('');
$('#clear-signature').remove();
submissionStage2();
},
error: function(xhr, ajaxOptions, thrownError) {
console.log(xhr);
alert('Error storing signature (2) ' + JSON.stringify(xhr.statusCode()) + ' ' + xhr.statusText + ' ' + xhr.responseText);
reshowFormAfterError();
}
});
} else {
submissionStage2();
}
} else {
submissionStage2();
}
}
function submissionStage2() {
var startDate;
var firstOfMonth;
var dayOfMonth;
var storeEmail = $('#input-email').val().trim();
$('[id$=_DonationCapture1_txtEmail]').val(settings.Other.AdminEmail);
// Validate BB form client side
var BBFormID = getBBFormID();
if (BBFormID === '') {
// Error
alert('Unable to find BB Donation form');
return;
}
var amount = 0;
try {
amount = Math.round(parseFloat($('[id$=_txtAmount]').val().replace(",", ".")) * 100);
} catch(e2) {
// Error
alert('Invalid amount found');
return;
}
var valid = Page_ClientValidate(BBFormID);
if (!valid) {
$('#form .form-intro:first').append($('.DonationValidationSummary').show());
enableButtons();
scrollIntoView($('.DonationValidationSummary'));
return;
}
var mode = $('[name=paymethod]:checked').val();
pledgeamount = 0;
try {
pledgeamount = Math.round(parseFloat($('[id$=_txtAmount]').val().replace(",", ".")) * 100);
} catch(e2) {
// Error
alert('Invalid amount found');
return;
}
pledgeemail = getEmailAddress();
switch (mode) {
case 'CC':
setFieldByLabel('Online Recurring Gift Channel', 'Stripe');
// Start Date of recurrence
startDate = new Date();
startDate.setMonth(startDate.getMonth() + 1);
setDateFieldByLabel('Starting:', getDateDDMMYYYYArray(startDate));
//$('[id$=_DatePickerStart]').val(convertDate(startDate));
$('[id$=_Recurrence_ddlDayNumber2]').val(startDate.getDate()).change();
disableButtons();
// First get the Stripe token
var name = $('[id$=_DonationCapture1_cboTitle]').val() + ' ' +
$('[id$=_DonationCapture1_txtFirstName]').val() + ' ' +
$('[id$=_DonationCapture1_txtLastName]').val();
var addr = $('[id$=_DonationCapture1_AddressCtl_tb_AddressLine]').val().split("\n");
var addr1 = addr[0].trim();
var addr2 = (addr.length > 1 ? addr[1].trim() : '');
showLoadingPostSubmit();
if (!stripe) {
alert('Stripe not initialised - key missing from settings');
return;
}
var args = {
'name': name.trim(),
'address_country': $('[id$=_DonationCapture1_AddressCtl_dd_Country]').val()
};
if (addr1 !== '') {
$.extend(args, {
'address_line1': addr1,
'address_line2': addr2,
'address_city': $('[id*=_DonationCapture1_AddressCtl_tb_City]').val(),
'address_zip': $('[id*=_DonationCapture1_AddressCtl_tb_Zip]').val()
});
}
stripe.createToken(card, args).then(function(result) {
// Handle result.error or result.token
if (result.error) {
alert(result.error.message);
enableButtons();
reshowFormAfterError();
scrollIntoView($('#card-element'));
} else {
// Submit to server to take payment/get errors
var id = result.token.id;
var email = getEmailAddress();
console.log('Token: ' + id);
$.getJSON(settings.Other.SmartPAYMENTSAPIURL + '?api=1&cmd=stripe-newcustomer&source=' + id + '&amount=' + amount + "&email=" + encodeURIComponent(email), function(data) {
if (!data) {
alert('Invalid return from server - null when creating customer');
enableButtons();
reshowFormAfterError();
} else if(data.error) {
console.log(data.error);
if (data.error.indexOf('Unable to retrieve customer') != -1) {
alert('Korttimaksu ei onnistunut. Korttitiedot ovat virheelliset tai kortti ei ole voimassa.');
} else {
alert(data.error);
}
enableButtons();
reshowFormAfterError();
} else {
// Add data to BBIS form and submit
setFieldByLabel("Stripe Customer ID", data.customerId);
setFieldByLabel("Stripe Plan ID", data.planId);
setFieldByLabel("Stripe Subscription ID", data.subscriptionId);
// check the status
if (data.hasOwnProperty('status')) {
var status = data.status;
console.log("Stripe status: " + status);
// Possibly: payment_method_options[card][moto]=true
if (status == 'requires_payment_method' || status == 'requires_source') {
console.log("Stripe payment failed");
console.log(data.error);
alert(data.error);
enableButtons();
reshowFormAfterError();
} else if (status == 'requires_action' || status == 'requires_source_action') {
console.log("User action needed");
stripe.handleCardPayment(data.clientSecret).then(function(result) {
if (result.error) {
// Display error.message in your UI.
console.log("Stripe payment failed");
console.log(result.error);
alert(result.error.message);
enableButtons();
reshowFormAfterError();
} else {
// OK to submit the form now...
submitForm(settings, data, storeEmail);
}
});
} else {
// OK to submit the form now...
submitForm(settings, data, storeEmail);
}
} else {
// OK to submit the form now...
submitForm(settings, data, storeEmail);
}
}
}
).fail(function(jqXHR, textStatus, errorThrown) {
console.log("error " + textStatus);
console.log("incoming Text " + jqXHR.responseText);
alert("ERROR: " + textStatus + "\nDetail:" + jqXHR.responseText);
});
}
});
break;
case 'Pledge':
setFieldByLabel('Online Recurring Gift Channel', 'Pledge');
$('input[id$=_txtEmail]').val(storeEmail);
// Start Date of recurrence
firstOfMonth = new Date();
dayOfMonth = firstOfMonth.getDate();
firstOfMonth.setDate(firstOfMonth.getDate() - dayOfMonth + 1);
startDate = new Date(firstOfMonth.getTime());
startDate.setMonth(startDate.getMonth() + 1);
if (dayOfMonth >= settings.Amounts.RecurringGifts.StartDate.CutOffDay) {
startDate.setMonth(startDate.getMonth() + 1);
}
setDateFieldByLabel('Starting:', getDateDDMMYYYYArray(startDate));
$('[id$=_Recurrence_ddlDayNumber2]').val(1).change();
var eCardID = getFieldByLabel("eCard ID");
var normalRedirectURL = settings.Other.PledgeRedirect + '?amount=' + Number(amount/100).toFixed(2);
if (isECard() && eCardID !== '') {
// Add a gift comment
$.getJSON(settings.Other.SmartPAYMENTSAPIURL + '?api=1&cmd=ecard-getlink&pageid=' + eCards.ConfigPage.PageID, function(data) {
if (!data) {
alert('Invalid return from server - null when fetching eCard config page URL');
pledgeRedirect = normalRedirectURL;
} else if(data.error) {
alert(data.error);
pledgeRedirect = normalRedirectURL;
} else {
pledgeRedirect = data.url.replace('[ID]', eCardID);
$('[id$=_txtComments]').val(pledgeRedirect);
pledgeRedirect += '&amount=' + Number(amount/100).toFixed(2);
}
$('[id$=_btnNext].DonationSubmitButton').attr('running', true).click();
disableButtons();
startPledgeCompleteWatch();
}).fail(function(jqXHR, textStatus, errorThrown) {
console.log("error " + textStatus);
console.log("incoming Text " + jqXHR.responseText);
alert("ERROR: " + textStatus + "\nDetail:" + jqXHR.responseText);
});
} else {
// Submit the form now
$('[id$=_btnNext].DonationSubmitButton').attr('running', true).click();
disableButtons();
startPledgeCompleteWatch();
}
break;
default:
setFieldByLabel('Online Recurring Gift Channel', 'Paytrail');
$('input[id$=_txtEmail]').val(settings.Other.AdminEmail);
// Start Date of recurrence
firstOfMonth = new Date();
dayOfMonth = firstOfMonth.getDate();
firstOfMonth.setDate(firstOfMonth.getDate() - dayOfMonth + 1);
startDate = new Date(firstOfMonth.getTime());
startDate.setMonth(startDate.getMonth() + 1);
if (dayOfMonth >= settings.Amounts.RecurringGifts.StartDate.CutOffDay) {
startDate.setMonth(startDate.getMonth() + 1);
}
setDateFieldByLabel('Starting:', getDateDDMMYYYYArray(startDate));
//$('[id$=_DatePickerStart]').val(convertDate(startDate));
$('[id$=_Recurrence_ddlDayNumber2]').val(1).change();
$('[id$=_btnNext].DonationSubmitButton').attr('running', true).click();
disableButtons();
// Submit the main form and wait for confirmation / error
var awaitForm = setInterval(function() {
// Wait for the form submit to complete
var button = $('[id$=_btnNext].DonationSubmitButton');
if (button.length === 0) {
clearInterval(awaitForm);
// All worked so now on confirmation page so generate PayTrail form-submit
$.get(settings.Other.SmartPAYMENTSAPIURL + '?api=1&cmd=getform&provider=paytrail&em=' + encodeURIComponent(storeEmail) +
'&page=' + BLACKBAUD.api.pageInformation.pageId, function(data) {
if (data.indexOf('!ERROR!') != -1) {
try {
data = JSON.parse(data.replace('!ERROR!', ''));
if (data[0].indexOf('Error retrieving transaction details') != -1) {
alert('VIRHE: Tapahtumatietojen hakemisessa');
} else {
alert('VIRHE: ' + data[0]);
}
} catch(e) {
alert('VIRHE: Maksupalvelun tarjoajan lomaketta ei voitu hakea uudestaan');
}
} else {
showLoadingPostSubmit();
$('body').append('');
data += '