document.addEventListener("DOMContentLoaded", function(){ const FORM_TIME_START = Math.floor((new Date).getTime()/1000); let formElement = document.getElementById("tfa_0"); if (null === formElement) { formElement = document.getElementById("0"); } let appendJsTimerElement = function(){ let formTimeDiff = Math.floor((new Date).getTime()/1000) - FORM_TIME_START; let cumulatedTimeElement = document.getElementById("tfa_dbCumulatedTime"); if (null !== cumulatedTimeElement) { let cumulatedTime = parseInt(cumulatedTimeElement.value); if (null !== cumulatedTime && cumulatedTime > 0) { formTimeDiff += cumulatedTime; } } let jsTimeInput = document.createElement("input"); jsTimeInput.setAttribute("type", "hidden"); jsTimeInput.setAttribute("value", formTimeDiff.toString()); jsTimeInput.setAttribute("name", "tfa_dbElapsedJsTime"); jsTimeInput.setAttribute("id", "tfa_dbElapsedJsTime"); jsTimeInput.setAttribute("autocomplete", "off"); if (null !== formElement) { formElement.appendChild(jsTimeInput); } }; if (null !== formElement) { if(formElement.addEventListener){ formElement.addEventListener('submit', appendJsTimerElement, false); } else if(formElement.attachEvent){ formElement.attachEvent('onsubmit', appendJsTimerElement); } } }); wFORMS.behaviors.prefill.skip = false; var stripe_FAoldJQ; if (typeof $ !== 'undefined' && $.noConflict) stripe_FAoldJQ = $.noConflict(true); var jQuery_2_1_4 = $.noConflict(true); var stripe = new Stripe('pk_DhOJVTCFJb1KpYl5AG50nxSFQSrwP', { stripeAccount: 'acct_1IybsTHp3RC1MdRu' }); /** * Gets the form for Stripe JS usage */ function getStripeForm() { return document.querySelector('.wForm > form'); } /** * check if an element is visible */ function isVisible(element) { if (element.offsetWidth > 0 && element.offsetHeight > 0) { return true; } return false; } /** * remove invisible elements from a collection */ function removeInvisibleElements(elements) { let visibleElements = []; if (elements) { let i; for(i=0;i<elements.length;i++) { if(isVisible(elements[i])) { visibleElements.push(elements[i]); } } } removeError(); return visibleElements; } // Show the customer the error from Stripe if their card fails to charge var showError = function(errorMsgText) { removeError(); if (jQuery_2_1_4(".wFormHeader").length){ jQuery_2_1_4("
Please review the error(s) below.
").insertAfter(".wFormHeader"); }else{ jQuery_2_1_4("
Please review the error(s) below.
").insertAfter(".reviewHeader"); } jQuery_2_1_4( ".errorMessage ul" ).append( "
  • "+errorMsgText+"
  • " ); jQuery_2_1_4("#submit_button").prop("disabled", false); jQuery_2_1_4("#submit_button").css('color', ''); jQuery_2_1_4("#submit_button").val('Submit'); }; var removeError = function(){ var errorMsg = document.querySelector(".errorMessage"); if(errorMsg !== null){ jQuery_2_1_4(".errorMessage").remove(); } var stripeError = document.getElementsByClassName('stripeError')[0]; if (stripeError) { stripeError.parentElement.removeChild(stripeError); } } var confirmStripePayment = function(clientSecret, paymentMethod){ var stripeForm = getStripeForm(); stripe.confirmCardPayment(clientSecret, { payment_method: paymentMethod }) .then(function (result) { if (result.error) { showError(result.error.message); } else { // The payment succeeded! if(hasChargeAndSubscribe){ confirmStripeSetup(clientSecret, paymentMethod); } stripeForm.submit(); } }) .catch(function(error) { console.log(error); showError("Payment error occurred."); }); } var confirmStripeSetup = function(clientSecret, paymentMethod){ var stripeForm = getStripeForm(); stripe.confirmCardSetup(clientSecret, { payment_method: paymentMethod }) .then(function (result) { if (result.error) { showError(result.error.message); } else { // The payment succeeded! stripeForm.submit(); } }) .catch(function(error) { console.log(error); showError("Payment error occurred."); }); } var hasChargeAndSubscribe = false; var submitStripeForm = function(event){ if(event != null){ event.preventDefault(); } var stripeForm = getStripeForm(); //if we have a stripe error already remove it since we are revalidating var errFields = document.getElementsByClassName('errFld'); errFields = removeInvisibleElements(errFields); if (errFields.length form').serializeJSON()) }) .then(function(result) { return result.json(); }) .then(function(data) { if(!!data.newFields){ for ([key, val] of Object.entries(data.newFields)) { addHiddenInputVariable(key, val); } } hasChargeAndSubscribe = !!data.payment_intent_id && !!data.setup_intent_id; if(!!data.ignore){ stripeForm.submit(); }else if(!!data.payment_intent_id) { confirmStripePayment(data.client_secret, data.payment_method_id); }else if(!!data.setup_intent_id){ confirmStripeSetup(data.client_secret, data.payment_method_id); }else if(!!data.error) { showError(data.error); }else{ showError("Payment error occurred."); } }) .catch(function(error) { console.log(error); showError("Payment error occurred."); }); } }; var addHiddenInputVariable = function(name, val){ var stripeForm = getStripeForm(); var existingField = document.querySelector("input[name='"+name+"']"); if(existingField !== null){ jQuery_2_1_4("input[name='"+name+"']").remove(); } var hiddenElement = document.createElement("input"); hiddenElement.type = "hidden"; hiddenElement.name = name; hiddenElement.id = name; hiddenElement.value = val; stripeForm.appendChild(hiddenElement); } document.addEventListener("wFORMSLoaded", function() { if(1 !== 0){ var stripeForm = getStripeForm(); stripeForm.addEventListener('submit', submitStripeForm); } }); if (stripe_FAoldJQ) $ = stripe_FAoldJQ;

    Donation Form

    Academic Freedom Alliance, Inc.’s (“AFA’s”) application for recognition of its tax-exempt status is pending. AFA expects to be recognized as a publicly supported organization described in Section 501(c)(3) of the U.S. Internal Revenue Code and for the recognition to be effective retroactively to October 12, 2020, its date of incorporation. It is AFA’s expectation that donations to AFA will be eligible for the U.S. income tax charitable deduction. AFA does not provide legal or accounting advice, and donors are urged to consult their own tax advisors if they have questions. 











    Payment Information







    Learn More About the Academic Freedom Alliance

    Individuals at academic institutions should not fear suppression or retaliation for teaching, writing, or speaking. We encourage you to join the movement in supporting the flourishing of intellectual life and the pursuit of knowledge and truth at institutions of higher learning.