(function($){
$(document).ready(function(){
var passed2=true;
var min_max_error_message='';
var pewc_js_validation={
currently_checking: false,
hide_totals_enabled: false,
group_display_type: '',
display_notification: false,
scroll_to_first_failed: false,
init: function(){
$('body').find('form.cart').on('submit', function(e){
return pewc_js_validation.validate();
});
$('body').on('pewc_field_selected_counter_updated', function(event, field_wrapper, current_count){
var max_count=0;
if(field_wrapper.attr('data-field-maxchecks') ){
max_count=field_wrapper.attr('data-field-maxchecks');
min_max_error_message=field_wrapper.attr('data-field-maxchecks-error');
}else if(field_wrapper.attr('data-max-products') ){
max_count=field_wrapper.attr('data-max-products');
min_max_error_message=field_wrapper.attr('data-max-products-error');
}
max_count=parseInt(max_count);
if(max_count < 1){
return;
}
field_wrapper.removeClass('pewc-passed-validation');
field_wrapper.removeClass('pewc-failed-validation');
field_wrapper.removeClass('pewc-failed-minmax');
field_wrapper.removeClass('pewc-failed-counter');
field_wrapper.find('.pewc-js-validation-notice').html('').hide();
if(current_count > max_count){
field_wrapper.addClass('pewc-failed-validation');
field_wrapper.addClass('pewc-failed-minmax');
field_wrapper.addClass('pewc-failed-counter');
field_wrapper.find('.pewc-js-validation-notice').html(min_max_error_message).show();
}});
if(pewc_vars.hide_totals_timer > 0){
if(pewc_vars.hide_totals_if_missing_required_fields=='yes'&&$('.pewc-item.required-field').length > 0){
pewc_js_validation.hide_totals_enabled=true;
$('.pewc-total-field-wrapper').hide();
$('.pewc-total-only').hide();
}
if(pewc_vars.disable_groups_if_missing_required_fields=='yes'){
if(pewc_js_validation.is_accordion_group()){
pewc_js_validation.group_display_type='accordion';
}else if(pewc_js_validation.is_steps_group()){
pewc_js_validation.group_display_type='steps';
}else if(pewc_js_validation.is_tabs_group()){
pewc_js_validation.group_display_type='tabs';
}
if(pewc_js_validation.group_display_type!=''){
pewc_js_validation.override_click_functions();
}}
if(pewc_js_validation.hide_totals_enabled||pewc_js_validation.group_display_type!=''){
var check_all_required_interval=setInterval(
pewc_js_validation.check_all_required,
pewc_vars.hide_totals_timer
);
}}
},
validate: function(){
var passed=true;
var first_failed='';
var first_failed_group='';
var has_min_max=[ 'text', 'textarea', 'advanced-preview', 'number', 'name_price', 'products', 'product-categories', 'image_swatch', 'checkbox_group' ];
$('body').find('form.cart').find('.pewc-item').each(function(){
var curr_item=$(this);
var curr_id=curr_item.attr('data-id');
var curr_value=curr_item.attr('data-field-value');
var curr_type=curr_item.attr('data-field-type');
var curr_notice=curr_item.find('.pewc-js-validation-notice');
var curr_group=curr_item.closest('.pewc-group-wrap');
var curr_group_heading=curr_group.find('.pewc-group-heading-wrapper');
curr_item.removeClass('pewc-passed-validation');
curr_item.removeClass('pewc-failed-validation');
curr_item.removeClass('pewc-failed-minmax');
curr_notice.html('').hide();
if(pewc_js_validation.is_hidden_field(curr_item, curr_group) ){
return;
}
if(pewc_js_validation.group_display_type!=''&&pewc_js_validation.is_disabled_group(curr_group) ){
return;
}
if(curr_item.hasClass('required-field') ){
if(! pewc_js_validation.passed_required(curr_type, curr_value, curr_item) ){
if(first_failed==''){
first_failed=curr_id;
first_failed_group=curr_group.attr('id');
if(! curr_group_heading.hasClass('pewc-group-failed-validation') ){
curr_group_heading.addClass('pewc-group-failed-validation');
}}
passed=false;
curr_item.addClass('pewc-failed-validation');
curr_notice.html(curr_item.attr('data-validation-notice')).show();
}else{
curr_item.addClass('pewc-passed-validation');
}}
if(has_min_max.includes(curr_type)&&! curr_item.hasClass('pewc-failed-validation') ){
passed2=true;
min_max_error_message='';
if(curr_type=='text'||curr_type=='textarea'||curr_type=='advanced-preview'){
pewc_js_validation.validate_text_field(curr_id, curr_item);
}else if(curr_type=='number'||curr_type=='name_price'){
pewc_js_validation.validate_number_field(curr_id, curr_item);
}else if(curr_type=='products'||curr_type=='product-categories'){
var min_products=0, max_products=0;
if(curr_item.attr('data-min-products') > 0){
min_products=parseFloat(curr_item.attr('data-min-products'));
}
if(curr_item.attr('data-max-products') > 0){
max_products=parseFloat(curr_item.attr('data-max-products'));
}
if(min_products > 0||max_products > 0){
var total_child_products=0;
curr_item.find('.pewc-checkbox-form-field').each(function(){
if($(this).is(':checked')){
var product_id=$(this).val();
var child_product_quantity=parseFloat($('input[name="'+curr_id+'_child_quantity_'+product_id+'"]').val());
if(! isNaN(child_product_quantity)){
total_child_products +=child_product_quantity;
}}
});
if(min_products==max_products&&total_child_products!=min_products){
min_max_error_message=curr_item.attr('data-exact-products-error');
passed2=false;
}else if(! pewc_js_validation.passed_min_req(min_products, total_child_products) ){
min_max_error_message=curr_item.attr('data-min-products-error');
passed2=false;
}else if(! pewc_js_validation.passed_max_req(max_products, total_child_products) ){
min_max_error_message=curr_item.attr('data-max-products-error');
passed2=false;
}}
}else if(curr_type=='image_swatch'||curr_type=='checkbox_group'){
var field_minchecks=0, field_maxchecks=0;
if(curr_item.attr('data-field-minchecks') > 0){
field_minchecks=parseFloat(curr_item.attr('data-field-minchecks'));
}
if(curr_item.attr('data-field-maxchecks') > 0){
field_maxchecks=parseFloat(curr_item.attr('data-field-maxchecks'));
}
if(field_minchecks > 0||field_maxchecks > 0){
var total_selected=0;
var pewc_field_class='';
if(curr_type=='image_swatch')
pewc_field_class='pewc-radio-form-field';
else
pewc_field_class='pewc-checkbox-form-field';
curr_item.find('.'+pewc_field_class).each(function(){
if($(this).is(':checked')){
total_selected +=1;
}});
if(total_selected < 1){
return;
}
if(! pewc_js_validation.passed_min_req(field_minchecks, total_selected) ){
min_max_error_message=curr_item.attr('data-field-minchecks-error');
passed2=false;
}else if(! pewc_js_validation.passed_max_req(field_maxchecks, total_selected) ){
min_max_error_message=curr_item.attr('data-field-maxchecks-error');
passed2=false;
}}
}
if(! passed2){
curr_item.removeClass('pewc-passed-validation');
if(! curr_item.hasClass('pewc-failed-validation') ) curr_item.addClass('pewc-failed-validation');
if(! curr_item.hasClass('pewc-failed-minmax') ) curr_item.addClass('pewc-failed-minmax');
curr_notice.html(min_max_error_message).show();
if(first_failed=='')
first_failed=curr_id;
passed=false;
}}
if(! passed){
curr_item.on('keyup input change paste update pewc_trigger_color_picker_change', '.pewc-form-field, .pewc-radio-form-field, .pewc-checkbox-form-field', function(e){
if(e.which==13)
return;
if(curr_type=='text'||curr_type=='textarea'||curr_type=='advanced-preview'){
if(e.which==0) return;
pewc_js_validation.validate_text_field(curr_id, curr_item);
}else if(! curr_item.hasClass('pewc-failed-counter') ){
curr_notice.html('').hide();
curr_item.removeClass('pewc-failed-validation');
}
return;
});
if(pewc_js_validation.is_accordion_group()){
if(! curr_group.hasClass('group-active') ){
curr_group.addClass('group-active');
}}
}});
if(! passed){
if($('.pewc-item.'+first_failed).length > 0){
pewc_js_validation.scroll_screen_to_first_failed(first_failed, first_failed_group);
}
first_failed='';
}
return passed;
},
is_hidden_field: function(curr_item, curr_group){
if(curr_item.hasClass('pewc-hidden-field') ||
pewc_js_validation.is_hidden_group(curr_group) ||
(curr_item.hasClass('pewc-variation-dependent')&&! curr_item.hasClass('active') )
){
return true;
}else{
return false;
}},
is_hidden_group: function(curr_group){
if(curr_group.hasClass('pewc-group-hidden') ){
return true;
}else{
return false;
}},
is_disabled_group: function(curr_group){
if(curr_group.hasClass('pewc-disabled-group') ){
return true;
}else{
return false;
}},
is_accordion_group: function(){
if($('.pewc-product-extra-groups-wrap').hasClass('pewc-groups-accordion') ) return true;
else return false;
},
is_steps_group: function(){
if($('.pewc-product-extra-groups-wrap').hasClass('pewc-groups-steps') ) return true;
else return false;
},
is_tabs_group: function(){
if($('.pewc-product-extra-groups-wrap').hasClass('pewc-groups-tabs') ) return true;
else return false;
},
passed_required: function(curr_type, curr_value, curr_item){
if((curr_type!='checkbox'&&curr_value=='') ||
(curr_type=='checkbox'&&! curr_item.hasClass('pewc-active-field') ) ||
(curr_type=='upload'&&curr_value==0) ||
(curr_type=='products'&&curr_value==0) ||
(curr_type=='product-categories'&&curr_value==0)
){
return false;
}else{
return true;
}},
passed_min_req: function(min_value, field_value){
if(min_value > 0&&field_value < min_value)
return false;
else return true;
},
passed_max_req: function(max_value, field_value){
if(max_value > 0&&field_value > max_value)
return false;
else return true;
},
validate_text_field: function(curr_id, curr_item){
var curr_field=$(curr_item).find('#'+curr_id);
var curr_notice=curr_item.find('.pewc-js-validation-notice');
passed2=true;
if(curr_field.val()!=''&&(curr_field.attr('data-minchars') > 0||curr_field.attr('data-maxchars') > 0) ){
strlen=curr_field.val().length;
if(! pewc_js_validation.passed_min_req(curr_field.attr('data-minchars'), strlen) ){
passed2=false;
min_max_error_message=curr_item.attr('data-field-minchars-error');
}else if(! pewc_js_validation.passed_max_req(curr_field.attr('data-maxchars'), strlen) ){
passed2=false;
min_max_error_message=curr_item.attr('data-field-maxchars-error');
}}
if(! passed2){
curr_item.removeClass('pewc-passed-validation');
if(! curr_item.hasClass('pewc-failed-validation') ) curr_item.addClass('pewc-failed-validation');
if(! curr_item.hasClass('pewc-failed-minmax') ) curr_item.addClass('pewc-failed-minmax');
curr_notice.html(min_max_error_message).show();
}else{
curr_notice.html('').hide();
curr_item.removeClass('pewc-failed-validation');
curr_item.removeClass('pewc-failed-minmax');
}},
validate_number_field: function(curr_id, curr_item){
var curr_field=$('#'+curr_id);
if(curr_field.val()=='') return;
if(curr_field.attr('min') > 0||curr_field.attr('max') > 0){
if(! pewc_js_validation.passed_min_req(curr_field.attr('min'), parseFloat(curr_field.val()) )){
passed2=false;
min_max_error_message=curr_item.attr('data-field-minval-error');
}else if(! pewc_js_validation.passed_max_req(curr_field.attr('max'), parseFloat(curr_field.val()) )){
passed2=false;
min_max_error_message=curr_item.attr('data-field-maxval-error');
}}
},
scroll_screen_to_first_failed: function(first_failed, first_failed_group){
if(first_failed_group!==''&&$('#' + first_failed_group).length > 0){
var failed_group=$('#' + first_failed_group);
var failed_group_divid=first_failed_group;
var first_failed_group_id=failed_group.attr('data-group-id');
}else{
var failed_group=$('.pewc-item.' + first_failed).closest('.pewc-group-wrap');
var failed_group_divid=failed_group.attr('id');
var first_failed_group_id=failed_group.attr('data-group-id');
}
$('#pewc-tab-' + first_failed_group_id).addClass('tab-failed');
if(pewc_vars.disable_scroll_on_steps_validation=='yes'&&pewc_js_validation.is_steps_group()){
failed_group.find('.pewc-group-js-validation-notice').show();
return;
}
if(pewc_js_validation.is_steps_group()||pewc_js_validation.is_tabs_group()){
$('.pewc-tab').removeClass('active-tab tab-failed');
$('.pewc-group-wrap').removeClass('group-active');
$('#pewc-tab-' + first_failed_group_id).addClass('active-tab');
$('#pewc-group-' + first_failed_group_id).addClass('group-active');
}else{
if(! failed_group.hasClass('group-active')&&! failed_group.hasClass('pewc-disabled-group') ){
failed_group.addClass('group-active');
}}
$([document.documentElement, document.body]).animate({
scrollTop: $('#' + failed_group_divid + ' .pewc-item.'+first_failed).offset().top-50
}, 150);
},
check_all_required: function(){
if($('.pewc-item.required-field').length < 1) return;
if(pewc_js_validation.currently_checking) return;
pewc_js_validation.currently_checking=true;
var hide_the_totals=false;
var first_failed='';
var first_failed_group='';
var passed=true;
var prev_group_id=0;
if(pewc_js_validation.group_display_type!=''){
pewc_js_validation.disable_groups();
}
$('.pewc-item').each(function(){
var curr_item=$(this);
var curr_id=curr_item.attr('data-id');
var curr_value=curr_item.attr('data-field-value');
var curr_type=curr_item.attr('data-field-type');
var curr_group=curr_item.closest('.pewc-group-wrap');
var curr_group_id=curr_group.attr('data-group-id');
var curr_group_heading=curr_group.find('.pewc-group-heading-wrapper');
var curr_notice=curr_item.find('.pewc-js-validation-notice');
var notice='';
passed2=true;
min_max_error_message='';
if(pewc_js_validation.is_hidden_field(curr_item, curr_group) ){
return;
}
if(pewc_js_validation.group_display_type!=''&&prev_group_id > 0&&prev_group_id!=curr_group_id){
if(passed){
curr_group.removeClass('pewc-disabled-group');
$('#pewc-group-' + prev_group_id).removeClass('pewc-disabled-group');
if(pewc_js_validation.group_display_type=='tabs'||pewc_js_validation.group_display_type=='steps'){
$('#pewc-tab-' + curr_group_id).removeClass('pewc-disabled-group');
$('#pewc-tab-' + prev_group_id).removeClass('pewc-disabled-group');
if(pewc_js_validation.group_display_type=='steps'){
$('#pewc-group-' + prev_group_id).find('.pewc-next-step-button').removeClass('pewc-disabled-group');
curr_group.find('.pewc-next-step-button').each(function(){
if($(this).attr('data-direction')=='previous'){
$(this).removeClass('pewc-disabled-group');
}});
}}
}else{
return;
}}
if(! curr_item.hasClass('required-field') ){
if(prev_group_id!=curr_group.attr('data-group-id') ){
prev_group_id=curr_group.attr('data-group-id');
}
return;
}
if(! pewc_js_validation.passed_required(curr_type, curr_value, curr_item) ){
passed=passed2=false;
notice=curr_item.attr('data-validation-notice');
}else if(! curr_item.hasClass('pewc-failed-minmax') ){
if(pewc_js_validation.group_display_type!=''&&(curr_type=='number'||curr_type=='name_price') ){
pewc_js_validation.validate_number_field(curr_id, curr_item);
}
if(passed2){
curr_group_heading.removeClass('pewc-group-failed-validation');
curr_item.addClass('pewc-passed-validation');
curr_item.removeClass('pewc-failed-validation');
curr_notice.html(curr_item.attr('data-validation-notice')).hide();
}else{
passed=false;
notice=min_max_error_message;
}}
if(! passed2){
hide_the_totals=true;
if(pewc_js_validation.display_notification){
if(first_failed==''){
first_failed=curr_id;
first_failed_group=curr_group.attr('id');
if(! curr_group_heading.hasClass('pewc-group-failed-validation') ){
curr_group_heading.addClass('pewc-group-failed-validation');
}}
curr_item.removeClass('pewc-passed-validation');
curr_item.addClass('pewc-failed-validation');
curr_notice.html(notice).show();
}}
if(prev_group_id!=curr_group.attr('data-group-id') ){
prev_group_id=curr_group.attr('data-group-id');
}});
if(pewc_js_validation.hide_totals_enabled){
if(hide_the_totals){
$('.pewc-total-field-wrapper').hide();
$('.pewc-total-only').hide();
}else{
$('.pewc-total-field-wrapper').show();
$('.pewc-total-only').show();
}}
if(pewc_js_validation.group_display_type!=''){
if(first_failed!=''&&pewc_js_validation.scroll_to_first_failed){
if($('.pewc-item.'+first_failed).length > 0){
pewc_js_validation.scroll_screen_to_first_failed(first_failed, first_failed_group);
}
first_failed='';
pewc_js_validation.scroll_to_first_failed=false;
pewc_js_validation.display_notification=false;
}}
pewc_js_validation.currently_checking=false;
},
disable_groups: function(){
if(pewc_js_validation.group_display_type=='tabs'||pewc_js_validation.group_display_type=='steps'){
$('.pewc-tab').each(function(){
if(! $(this).hasClass('active-tab') ){
$(this).addClass('pewc-disabled-group');
}});
$('.pewc-next-step-button').addClass('pewc-disabled-group');
}
$('.pewc-group-wrap').each(function(){
if(! $(this).hasClass('first-group')&&! $(this).hasClass('group-active') ){
$(this).addClass('pewc-disabled-group');
}});
},
override_click_functions: function(){
if(pewc_js_validation.group_display_type=='tabs'||pewc_js_validation.group_display_type=='steps'){
$('.pewc-tab').on('click', function(e){
if($(this).hasClass('pewc-disabled-group') ){
e.preventDefault();
pewc_js_validation.display_notification=true;
pewc_js_validation.scroll_to_first_failed=true;
return;
}});
if(pewc_js_validation.group_display_type=='steps'){
$('.pewc-next-step-button').on('click', function(e){
if($(this).hasClass('pewc-disabled-group') ){
e.preventDefault();
pewc_js_validation.display_notification=true;
pewc_js_validation.scroll_to_first_failed=true;
return;
}});
}}else{
$('.pewc-groups-accordion h3').on('click', function(e){
if($(this).closest('.pewc-group-wrap').hasClass('pewc-disabled-group') ){
e.preventDefault();
pewc_js_validation.display_notification=true;
pewc_js_validation.scroll_to_first_failed=true;
}});
}},
}
pewc_js_validation.init();
$(document).on('pewc_reinitiate_js_validation', function(){
pewc_js_validation.init();
});
$(document).on('pewc_trigger_js_validation', function(){
return pewc_js_validation.validate();
});
});
})(jQuery);