/**
* @file
*/
(function ($) {
$(function () {
// Test mode?
var test_mode = $('#is_test').val() == '1';
// Initalize stripe.
var stripe_test_key = 'pk_zsaYnD562T3EQCeakZzwl3TVQMUcg';
var stripe_live_key = 'pk_ruK5pncGF7ezRz2vgzmZFzbMH4AYD';
if (test_mode) {
Stripe.setPublishableKey(stripe_test_key);
}
else {
Stripe.setPublishableKey(stripe_live_key);
}
// Look up states on country change.
var update_states = function (country_selector, state_selector, finish_callback) {
var country_id = $(country_selector + ' option:selected').val();
$.ajax({
url: '/recurring/ajax',
type: 'get',
dataType: 'json',
data: {
action: 'states',
country_id: country_id
},
success: function (data) {
if (!data.error) {
$(state_selector).children().detach().remove();
$(state_selector).append($('').attr('value', '').html('- select a state -'));
$.each(data.states, function (state_id, name) {
if (state_id != '') {
var option$ = $('').attr('value', state_id).html(name);
$(state_selector).append(option$);
}
});
// Support jQuery UI selectmenu, if present.
if (typeof $(state_selector).selectmenu === 'function') {
$(state_selector).selectmenu('refresh');
}
}
if (finish_callback) {
finish_callback();}
}
});
};
$('#edit-billing-address-billing-country option[value=""]').remove();
$('#edit-billing-address-billing-country').prepend($('').attr('value', '').html('- select a country -'));
update_states('#edit-billing-address-billing-country', '#edit-billing-address-billing-state');
$('#edit-billing-address-billing-country').change(function () {
update_states('#edit-billing-address-billing-country', '#edit-billing-address-billing-state');
});
// Credit card fields need name attributes for jquery validate to work.
var add_cc_names = function () {
$('#edit-credit-card-info-cc-number').attr('name', 'stripe_fields[cc_number]');
$('#edit-credit-card-info-cc-security').attr('name', 'stripe_fields[cc_security]');
$('#edit-credit-card-info-cc-exp-month').attr('name', 'stripe_fields[cc_exp_month]');
$('#edit-credit-card-info-cc-exp-year').attr('name', 'stripe_fields[cc_exp_year]');
}
var remove_cc_names = function () {
$('#edit-credit-card-info-cc-number').removeAttr('name');
$('#edit-credit-card-info-cc-security').removeAttr('name');
$('#edit-credit-card-info-cc-exp-month').removeAttr('name');
$('#edit-credit-card-info-cc-exp-year').removeAttr('name');
}
add_cc_names();
// Validate the form.
$('#eff-donate-pages-recurring-update-form').validate({
submitHandler: function (form) {
remove_cc_names();
$('#eff-donate-pages-recurring-update-form input, #eff-donate-pages-recurring-update-form select').removeClass('stripe-error');
$('#stripe-messages').html('Checking credit card');
$('#stripe-messages-wrapper').show(200);
// Disable the stripe submit button.
$('#edit-submit').attr('disabled', 'disabled');
// Create a stripe token.
$('#stripe-messages').html('Checking credit card');
Stripe.createToken({
number: $('#edit-credit-card-info-cc-number').val(),
cvc: $('#edit-credit-card-info-cc-security').val(),
exp_month: $('#edit-credit-card-info-cc-exp-month').val(),
exp_year: $('#edit-credit-card-info-cc-exp-year').val(),
address_line1: $('#edit-billing-address-billing-street-address').val(),
address_state: jQuery('#edit-billing-address-billing-state option[selected=selected]').html(),
address_zip: $('#edit-billing-address-billing-postal-code').val(),
address_country: jQuery('#edit-billing-address-billing-country option[selected=selected]').html()
}, function (status, response) {
if (response.error) {
switch (response.error.code) {
case 'invalid_number':
case 'incorrect_number':
$('#edit-credit-card-info-cc-number').addClass('stripe-error');
break;
case 'invalid_expiry_month':
$('#edit-credit-card-info-cc-exp-month').addClass('stripe-error');
break;
case 'invalid_expiry_year':
$('#edit-credit-card-info-cc-exp-year').addClass('stripe-error');
break;
case 'invalid_cvc':
case 'incorrect_cvc':
$('#edit-credit-card-info-cc-security').addClass('stripe-error');
break;
}
alert(response.error.message);
$('#stripe-messages').html('');
$('#stripe-messages-wrapper').hide(200);
// re-enable submit button.
add_cc_names();
$('#edit-submit').removeAttr('disabled');
}
else {
var token = response['id'];
// Card is valid, go threw with the transaction.
$('#stripe-messages').html('Credit card valid, updating recurring donation information');
$('#stripe-token').val(token);
form.submit();
}
});
return false;
}
});
// Add validation rules.
$('#edit-new-amount').rules('add', 'required');
$('#edit-new-amount').rules('add', { min: 5 });
$('#edit-credit-card-info-cc-number').rules('add', { required:true, creditcard:true });
$('#edit-credit-card-info-cc-security').rules('add', 'required');
$('#edit-credit-card-info-cc-exp-month').rules('add', 'required');
$('#edit-credit-card-info-cc-exp-year').rules('add', 'required');
$('#edit-billing-address-billing-street-address').rules('add', 'required');
$('#edit-billing-address-billing-city').rules('add', 'required');
$('#edit-billing-address-billing-country').rules('add', 'required');
$('#edit-billing-address-billing-state').rules('add', 'required');
$('#edit-billing-address-billing-postal-code').rules('add', 'required');
});
})(jQuery);