var $j = jQuery.noConflict(); // give pledge box focus $j(function() { $j('#id_preapproval_amount').focus(); }); $j().ready(function() { // cache these to speed things up var inputbox = $j('#id_preapproval_amount'); var submitbutton = $j('#pledgesubmit'); var fakesubmitbutton = $j('#fakepledgesubmit'); var anonbox = $j('#anonbox input'); var donationbox = $j('#id_donation'); var ackSection = $j('#ack_section'); var premium_section = $j('#select_premiums'); var supporterName = $j('#pass_supporter_name').html(); var ackName = $j('#id_ack_name').val(); var ackDedication = $j('#id_ack_dedication').val(); var giveForm = $j('#give_form'); var activeOffer = $j('li:has(#offers_list input[type=radio]:checked)'); if(ackDedication == 'None') { ackDedication = ''; } var acks = { ack_name: ackName, ack_dedication: ackDedication }; var ackAnon = $j('#id_anonymous').val(); // we're not letting people submit arbitrary links $j('#id_ack_link').attr('disabled', 'disabled'); // take an input button from the premiums list // find the premium amount in its associated span class // convert to usable integer form and return var canonicalize = function(amt) { amt = amt.siblings('span.menu-item-price').html(); amt = amt.split('$')[1]; amt = parseInt(amt); return amt; } // if amount in pledge box is too small to qualify for premium, highlight pledge // box and submit button in alert color and disable the pledge input button // with a helpful message var mayday = function() { inputbox.css({'border-color': '#e35351', 'background-color': '#e35351', 'color': 'white'}); fakesubmitbutton.val("Pledge at least $"+amount+" to claim that premium"); fakesubmitbutton.show(); submitbutton.hide(); submitbutton.attr('disabled', 'disabled'); } // when pledge covers premium again, revert to original styling and reactivate button var allclear = function() { inputbox.css({'border-color': '#8dc63f', 'background-color': 'white', 'color': '#3d4e53'}); fakesubmitbutton.hide(); submitbutton.show(); submitbutton.removeAttr('disabled'); } // make acknowledgements input area active var activate = function(mySpan) { $j('#'+mySpan).removeClass('ack_inactive').addClass('ack_active'); $j('#'+mySpan+' input').removeAttr('disabled'); ack = acks[mySpan]; $j('#id_'+mySpan).val(ack); } // make mandatory premium input area inactive: greyed-out and not modifiable var deactivate = function(mySpan) { $j('#'+mySpan).removeClass('ack_active').addClass('ack_inactive'); $j('#'+mySpan+' input[type=text]').val('').attr('disabled', 'disabled'); } // make premium selection inactive: greyed-out and not modifiable var deactivate_premiums = function() { premium_section.addClass('premiums_inactive'); $j('#premiums_list li label input').attr('disabled', 'disabled'); $j('#premiums_list li:first-child label input').removeAttr('disabled').attr('checked', 'checked'); $j('#premium_note').text(' (not available with donation)'); } // make premium selection inactive: greyed-out and not modifiable var activate_premiums = function() { premium_section.removeClass('premiums_inactive'); $j('#premiums_list li label input').removeAttr('disabled'); $j('#premium_note').text(''); } // fill mandatory premium link input with supporter page var activateLink = function() { $j('#ack_link').removeClass('ack_inactive').addClass('ack_active'); } // empty mandatory premium link var deactivateLink = function() { $j('#ack_link').removeClass('ack_active').addClass('ack_inactive'); } var anonymizeName = function() { deactivate('ack_name'); $j('#id_ack_name').val('Anonymous'); } // when supporter clicks the donation box, activate/deactivate premium selection donationbox.change(function() { if(this.checked) { deactivate_premiums(); $j('#change_pledge_notice').addClass('yikes'); } else { activate_premiums(); $j('#change_pledge_notice').removeClass('yikes') } }); // selectively highlight/grey out acknowledgements supporter is eligible for var rectifyAcknowledgements = function(current) { var anon = anonbox.prop("checked"); if (!current) { current = 0 ; } if (current < 25) { deactivate('ack_name'); deactivateLink(); deactivate('ack_dedication'); ackSection.html(''); } else if (current >= 25 && current < 50) { deactivateLink(); deactivate('ack_dedication'); if (anon) { anonymizeName(); } else { activate('ack_name'); } ackSection.html(' as a Supporter'); } else if (current >= 50 && current < 100) { deactivate('ack_dedication'); if (anon) { anonymizeName(); deactivateLink(); } else { activate('ack_name'); activateLink(); } ackSection.html(' as a Benefactor'); } else if (current >= 100) { activate('ack_dedication'); if (anon) { anonymizeName(); deactivateLink(); } else { activate('ack_name'); activateLink(); } ackSection.html(' as a Bibliophile'); } } // initialize the acknowledgements fields. if we've prefilled the pledge info, // use that. current = inputbox.val(); if (ackAnon == 'True') { anonbox.prop("checked", true); } rectifyAcknowledgements(current); // when user clicks a premium, ensure it is compatible with the pledge box amount // if pledge box was empty, assume they wanted value of premium $j('#premiums_list input').on("click", function() { amount = canonicalize($j(this)); current = inputbox.val(); if (current == "" && !isNaN(amount)) { inputbox.val(amount); rectifyAcknowledgements(amount); } else if (current