(function( $ ) { ChargeIO.init({ public_key: affinipay.public_key }); ChargeIO.ready(function() { // Cache Selector Objects var form = $('#frm_affinipay_payment'), btnSubmit = $('#btn_payment_submit'), amount = $('#amount'), account = $('#frm_affinipay_payment #account'), reference = $('#reference'), number = $('#number'), exp_month = $('#exp_month'), exp_year = $('#exp_year'), cvv = $('#cvv'), name = $('#name'), address1 = $('#address1'), address2 = $('#address2'), city = $('#city'), state = $('#state'), postal_code = $('#postal_code'), email = $('#email'), account = $("#account"), phone = $('#phone'), recurring_interval = $('#recurring_interval'), recurring_ends = $('#recurring_ends'), extendChargeIO = function(charge_params){ if (typeof(name) !== 'undefined') charge_params.customer_name = name.val(); if (typeof(address1) !== 'undefined') charge_params.customer_address = address1.val(); if (typeof(address2) !== 'undefined') charge_params.customer_address2 = address2.val(); if (typeof(city) !== 'undefined') charge_params.customer_city = city.val(); if (typeof(state) !== 'undefined') charge_params.customer_state = state.val(); if (typeof(postal_code) !== 'undefined') charge_params.customer_postal = postal_code.val(); if (typeof(email) !== 'undefined') charge_params.customer_email = email.val(); if (typeof(phone) !== 'undefined') charge_params.customer_phone = phone.val(); if (typeof(recurring_interval) !== 'undefined') charge_params.recurring_interval = recurring_interval.val(); if (typeof(recurring_ends) !== 'undefined') charge_params.recurring_ends = recurring_ends.val(); return charge_params; }, formComplete = function(data){ var emailSent = data.method.email ? "An email has been sent to " + data.method.email + "" : ''; form.fadeOut(100, function(){ $(this).replaceWith("

Payment Successful

" + emailSent) }); }, onSubmit = function(e){ e.preventDefault(); if(!affiniForm.validateAllFields()) return; $(e.currentTarget).prop("disabled", true); affiniForm.formatAmount(amount); var paymentJson = ChargeIO.payment_params(form); paymentJson.amount = parseInt(amount.val().replace(/\D/g,'')); ChargeIO.create_token(paymentJson, function(token) { var charge_params = { action: 'affinipay_submit_charge', amount: token.form_data.amount, token: token.id, redirect_url: affinipay.redirect_url, account_id: account.val() }; extendChargeIO(charge_params); removeNameAttributes(); $.post(affinipay.ajax_url, charge_params) .done(function(data) { if(charge_params.redirect_url){ window.location = charge_params.redirect_url + '&payment=' + data.id; return; } formComplete(data); }) .fail(function(resp) { var data = resp.responseJSON || { "messages": [ { message: "An unexpected error occurred" }] }; processErrorMessages(data); }) .always(function(){ btnSubmit.attr('disabled', false); }); }); }; // Prevent the Form from submitting to the server form.on('submit', function(e) { e.preventDefault(); return false; }); btnSubmit.click(onSubmit); function processErrorMessages(err) { addNameAttributes(); var formWrapper = $('.affinipay_payment_form'), form = $('#frm_affinipay_payment'), ap_error = $('#affinipay_error_message'); if (ap_error.length) ap_error.html('').css('display', 'none'); var err_message = ''; err.messages.forEach(function(error) { err_message += error.message +'
'; updateFields(error); }); var msg = '
'+err_message +'
'; if (ap_error.length) { ap_error.html(err_message).css('display', 'block').addClass('alert alert-danger').fadeOut(100).fadeIn(100); } else { formWrapper.before(msg); } $('html, body').animate({ scrollTop: $(formWrapper).offset().top - 120 }, 300); } }); function removeNameAttributes() { number.removeAttribute('name'); exp_month.removeAttribute('name'); exp_year.removeAttribute('name'); cvv.removeAttribute('name'); } function addNameAttributes() { number.name = 'number'; exp_month.name = 'exp_month'; exp_year.name = 'exp_year'; cvv.name = 'cvv'; } function updateFields(data) { if (data.code == 'card_number_invalid') applyToField(number, data.message); if (data.code == 'invalid_data') { if (data.context == 'method.number') applyToField(number, data.message); if (data.context == 'method.exp_month') applyToField(exp_month, data.message); if (data.context == 'method.exp_year') applyToField(exp_year, data.message); if (data.context == 'method.cvv') applyToField(cvv, data.message); } } function applyToField(el, msg) { var sel = '#'+ $(el).attr('id') +' label span'; var lbl = '#'+ $(el).attr('id') +' label'; $(el).addClass('affinipay_error'); $(lbl).addClass('affinipay_error'); $(sel) .addClass('affinipay_error') .css('display', 'block') .html(msg); } })(jQuery);