$(function () { var preloadedToken = null; function getToken(callback) { if (preloadedToken) { callback(preloadedToken); } else { $.getJSON("/pricing/token/", function(response) { preloadedToken = response.client_token; callback(response.client_token); }); } } // Preload client token: if ($("#billing-address").length) { getToken(function(token){}); } function getAmount(planId) { return planId.substr(1); } function showPaymentMethodForm(planId) { $("#plan-id").val(planId); $("#nonce").val(""); if (planId == "") { // Don't need a payment method when switching to the free plan // -- can submit the form right away: $("#update-subscription-form").submit(); return; } $("#payment-form-submit").prop("disabled", true); $("#payment-method-modal").modal("show"); getToken(function(token) { braintree.dropin.create({ authorization: token, container: "#dropin", threeDSecure: { amount: getAmount(planId), }, paypal: { flow: 'vault' }, preselectVaultedPaymentMethod: false }, function(createErr, instance) { $("#payment-form-submit").off().click(function() { instance.requestPaymentMethod(function (err, payload) { $("#payment-method-modal").modal("hide"); $("#please-wait-modal").modal("show"); $("#nonce").val(payload.nonce); $("#update-subscription-form").submit(); }); }); $("#payment-method-modal").off("hidden.bs.modal").on("hidden.bs.modal", function() { instance.teardown(); }); instance.on("paymentMethodRequestable", function() { $("#payment-form-submit").prop("disabled", false); }); instance.on("noPaymentMethodRequestable", function() { $("#payment-form-submit").prop("disabled", true); }); }); }); } $("#change-plan-btn").click(function() { $("#change-billing-plan-modal").modal("hide"); showPaymentMethodForm(this.dataset.planId); }); $("#update-payment-method").click(function() { if ($("#no-billing-address-modal").length) { $("#no-billing-address-modal").modal("show"); return; } showPaymentMethodForm($("#old-plan-id").val()); }); $("#billing-history").load("/accounts/profile/billing/history/"); $("#billing-address").load("/accounts/profile/billing/address/", function() { $("#billing-address input").each(function(idx, obj) { $("#" + obj.name).val(obj.value); }); }); $("#payment-method").load("/accounts/profile/billing/payment_method/", function() { $("#next-billing-date").text($("#nbd").val()); }); $("#billing-periods input").click(updateChangePlanForm); $("#plan-hobbyist").click(function() { $(".plan").removeClass("selected"); $("#plan-hobbyist").addClass("selected"); updateChangePlanForm(); }); $("#plan-supporter").click(function() { $(".plan").removeClass("selected"); $("#plan-supporter").addClass("selected"); updateChangePlanForm(); }); $("#plan-business").click(function() { $(".plan").removeClass("selected"); $("#plan-business").addClass("selected"); updateChangePlanForm(); }); $("#plan-business-plus").click(function() { $(".plan").removeClass("selected"); $("#plan-business-plus").addClass("selected"); updateChangePlanForm(); }); function updateChangePlanForm() { var planId = $("#old-plan-id").val(); // "Monthly" is selected: dispplay monthly prices if ($("#billing-monthly").is(":checked")) { var period = "monthly"; $("#supporter-price").text("$5"); $("#business-price").text("$20"); $("#business-plus-price").text("$80"); } // "Annual" is selected: dispplay annual prices if ($("#billing-annual").is(":checked")) { var period = "annual"; $("#supporter-price").text("$4"); $("#business-price").text("$16"); $("#business-plus-price").text("$64"); } // "Hobbyist" is selected, set planId if ($("#plan-hobbyist").hasClass("selected")) { planId = ""; } // "Supporter" is selected, set planId if ($("#plan-supporter").hasClass("selected")) { planId = period == "monthly" ? "S5" : "S48"; } // "Business" is selected, set planId if ($("#plan-business").hasClass("selected")) { planId = period == "monthly" ? "P20" : "Y192"; } // "Business Plus" is selected, set planId if ($("#plan-business-plus").hasClass("selected")) { planId = period == "monthly" ? "P80" : "Y768"; } if (planId == $("#old-plan-id").val()) { $("#change-plan-btn") .attr("disabled", "disabled") .text("Change Billing Plan"); } else { var caption = "Change Billing Plan"; if (planId) { caption += " And Pay $" + getAmount(planId) + " Now"; } $("#change-plan-btn") .removeAttr("disabled") .text(caption) .attr("data-plan-id", planId); } } updateChangePlanForm(); });