(function($, undefined) {
// Show/Hide Payment Terms when a Category is selected
// Show/Hide Payment Methods when a Payment Term is selected
$(function() {
var form = $('#awpcp-place-ad-payment-step-form'),
terms = form.find('.js-awpcp-payment-term'),
methods = form.find('.js-awpcp-payment-method');
var update_payment_methods = function(price) {
methods.closest('fieldset')[price > 0 ? 'show' : 'hide']();
};
var handle_radio_button_click = function(event) {
var radio = $(this);
if (radio.attr('checked')) {
update_payment_methods(radio.closest('tr').attr('data-price'));
}
};
$('#place-ad-category').change(function() {
var category = $(this).val(),
categories, enabled;
if (category <= 0) {
return terms.show();
}
enabled = terms.filter(function() {
categories = $.parseJSON($(this).attr('data-categories'));
return $.inArray(category, categories) > -1 || categories.length === 0;
});
terms.hide(); enabled.show();
form.trigger('awpcp-payment-terms-updated');
}).change();
terms.find(':radio').click(handle_radio_button_click).each(handle_radio_button_click);
form.bind('awpcp-payment-terms-updated', function() {
var total = 0,
methods = terms.find('input').filter(':checked').closest('tr');
if (methods.length === 0) {
methods = terms.filter(':visible');
}
methods.map(function() {
total += $(this).attr('data-price');
});
update_payment_methods(total);
});
});
// Update Ad Details fields related to user information everytime an
// user is selected in the users dropdown (available to administrators)
$(function() {
var form = $('#adpostform'),
name, email, state, city, website,
users, categories, cats,
terms, terms_parent,
items, item,
user, user_payment_terms;
name = form.find('input[name=adcontact_name]');
email = form.find('input[name=adcontact_email]');
state = form.find('input[name=adcontact_state], select[name=adcontact_state]');
city = form.find('input[name=adcontact_city], select[name=adcontact_city]');
website = form.find('input[name=websiteurl]');
categories = form.find('[name=adcategory]');
terms = $('#place-ad-user-payment-terms');
terms_parent = terms.closest('p').hide();
var update_payment_terms = function(id, category) {
id = parseInt(id, 10);
if (isNaN(id) || id === 0) {
selector = '[value]';
} else {
selector = '#payment-term-default, #payment-term-';
user_payment_terms = users.find('[value=' + id + ']').attr('data-payment-terms') || [];
selector+= user_payment_terms.split(',').join(', #payment-term-');
}
terms_parent.show();
item = null;
items = terms.find('option').hide().filter(selector);
if (category.length > 0) {
items = items.filter(function() {
cats = $.parseJSON($(this).attr('data-categories'));
return $.inArray(category, cats) > -1 || cats.length === 0;
});
}
// two items: the default and one actual payment term
if (items.length == 2) {
item = items.filter(':not(#payment-term-default)').show();
} else {
items.show();
}
if (!terms.find(':selected').is(':visible') && item === null) {
terms.val('');
} else if (item !== null) {
terms.val(item.attr('value'));
}
};
categories.change(function() {
if (users.length > 0) {
update_payment_terms(users.val(), $(this).val());
}
});
users = $('#place-ad-user-id').change(function() {
var id = users.val(),
payment_terms = null,
selector = null,
done = false;
if (id === 0) {
terms_parent.hide();
} else {
$.each(AWPCP_Users, function(k, user) {
if (user.ID == id) {
name.val(user.first_name + ' ' + user.last_name);
email.val(user.user_email);
website.val(user.user_url);
var field = state.filter(':visible');
if (field.length > 0 && field[0].tagName.toLowerCase() == 'select') {
city.one('awpcp-update-region-options-completed', function() {
city.val(user.city).change();
});
state.val(user.state).change();
} else {
state.val(user.state).change();
city.val(user.city).change();
}
update_payment_terms(id, categories.val());
// show message about empty fields
var _fields = [{name: 'First Name', value: user.first_name},
{name: 'Last Name', value: user.last_name},
{name: 'Email', value: user.user_email},
{name: 'Website', value: user.user_url},
{name: 'State', value: user.state},
{name: 'City', value: user.city}],
empty_fields = [],
message = $('');
$.each(_fields, function(k, _field) {
if (_field.value.length === 0) {
empty_fields.push(_field.name);
}
});
users.nextAll('br, span.message').remove();
if (empty_fields.length > 0) {
message.text('This user has empty profile fields for ' + empty_fields.join(', ') + '.');
users.closest('.awpcp-form-spacer').append('
').append(message);
}
done = true;
}
return !done;
});
}
if (id > 0 && !done) {
name.val('');
email.val('');
website.val('');
state.val('');
city.val('');
}
});
if (users.length > 0) {
users.change();
}
});
})(jQuery);