jQuery(document).ready(function($){
var focus_qty;
function open_popup(){
$('.xoo-cp-opac').show();
$('.xoo-cp-modal').addClass('xoo-cp-active');
}
$(document.body).on('added_to_cart',function(){
open_popup();
});
function close_popup(e){
$.each(e.target.classList,function(key,value){
if(value=='xoo-cp-close'||value=='xoo-cp-modal'){
$('.xoo-cp-opac').hide();
$('.xoo-cp-modal').removeClass('xoo-cp-active');
$('.xoo-cp-atcn , .xoo-cp-content').html('');
}})
}
$(document).on('click','.xoo-cp-close , .xoo-cp-modal',close_popup);
function block_popup(){
$('.xoo-cp-outer').show();
}
function unblock_popup(){
$('.xoo-cp-outer').hide();
}
function reset_cart(atc_btn){
$('.xoo-cp-added',atc_btn).remove();
var qty_elem=atc_btn.parents('form.cart').find('.qty');
if(qty_elem.length > 0) qty_elem.val(qty_elem.attr('min')||1);
$('.added_to_cart').remove();
}
function show_notice(notice_type,notice){
$('.xoo-cp-notice').html(notice).attr('class','xoo-cp-notice').addClass('xoo-cp-nt-'+notice_type);
$('.xoo-cp-notice-box').fadeIn('fast');
clearTimeout(fadenotice);
var fadenotice=setTimeout(function(){
$('.xoo-cp-notice-box').fadeOut('slow');
},3000);
};
function add_to_cart(atc_btn,form_data){
$(document.body).trigger('adding_to_cart', [ atc_btn, form_data ]);
$.ajax({
url: xoo_cp_localize.wc_ajax_url.toString().replace('%%endpoint%%', 'xoo_cp_add_to_cart'),
type: 'POST',
data: $.param(form_data),
success: function(response){
$('.xoo-cp-adding',atc_btn).remove();
if(response.fragments){
$(document.body).trigger('added_to_cart', [ response.fragments, response.cart_hash, atc_btn ]);
atc_btn.append('<span class="xoo-cp-icon-check xoo-cp-added"></span>');
}
else if(response.error){
show_notice('error',response.error)
}else{
console.log(response);
}
if(xoo_cp_localize.reset_cart) reset_cart(atc_btn);
}})
}
$(document).on('submit','form.cart',function(e){
var form=$(this);
var atc_btn=form.find('button[type="submit"]');
var form_data=form.serializeArray();
if(atc_btn.attr('name')&&atc_btn.attr('name')=='add-to-cart'&&atc_btn.attr('value')){
form_data.push({ name: 'add-to-cart', value: atc_btn.attr('value') });
}
var is_valid=false;
$.each(form_data, function(index, data){
if(data.name==="add-to-cart"){
is_valid=true;
return false;
}})
if(is_valid){
e.preventDefault();
}else{
return;
}
$('.xoo-cp-added',atc_btn).remove();
atc_btn.append('<span class="xoo-cp-icon-spinner xoo-cp-adding" aria-hidden="true"></span>');
form_data.push({name: 'action', value: 'xoo_cp_add_to_cart'});
add_to_cart(atc_btn,form_data);
})
function xoo_cp_update_ajax(cart_key,new_qty,pid){
return $.ajax({
url: xoo_cp_localize.adminurl,
type: 'POST',
data: {action: 'xoo_cp_change_ajax',
cart_key: cart_key,
new_qty: new_qty,
pid: pid
}})
}
function update_cart(cart_key,new_qty){
block_popup();
$.ajax({
url: xoo_cp_localize.wc_ajax_url.toString().replace('%%endpoint%%', 'xoo_cp_update_cart'),
type: 'POST',
data: {
cart_key: cart_key,
new_qty: new_qty
},
success: function(response){
if(response.fragments){
var fragments=response.fragments,
cart_hash=response.cart_hash;
$.each(response.fragments, function(key, value){
$(key).replaceWith(value);
$(key).stop(true).css('opacity', '1').unblock();
});
if(wc_cart_fragments_params){
var cart_hash_key=wc_cart_fragments_params.ajax_url.toString() + '-wc_cart_hash';
sessionStorage.setItem(wc_cart_fragments_params.fragment_name, JSON.stringify(fragments) );
localStorage.setItem(cart_hash_key, cart_hash);
sessionStorage.setItem(cart_hash_key, cart_hash);
}
$(document.body).trigger('wc_fragments_loaded');
}else{
console.log(response);
}
unblock_popup();
}})
}
$(document).on('focusin','.xoo-cp-qty',function(){
focus_qty=$(this).val();
})
$(document).on('change','.xoo-cp-qty',function(e){
var _this=$(this);
var new_qty=parseFloat($(this).val());
var step=parseFloat($(this).attr('step'));
var min_value=parseFloat($(this).attr('min'));
var max_value=parseFloat($(this).attr('max'));
var invalid=false;
if(new_qty===0){
_this.parents('.xoo-cp-pdetails').find('.xoo-cp-remove-pd').trigger('click');
return;
}
else if(isNaN(new_qty)||new_qty < 0){
invalid=true;
}
else if(new_qty > max_value&&max_value > 0){
alert('Maximum Quantity: '+max_value);
invalid=true;
}
else if(new_qty < min_value){
invalid=true;
}
else if((new_qty % step)!==0){
alert('Quantity can only be purchased in multiple of '+step);
invalid=true;
}else{
var cart_key=$(this).parents('tr').data('xoo_cp_key');
update_cart(cart_key,new_qty);
}
if(invalid===true){
$(this).val(focus_qty);
}})
$(document).on('click', '.xcp-chng' ,function(){
var _this=$(this);
var qty_element=_this.siblings('.xoo-cp-qty');
qty_element.trigger('focusin');
var input_qty=parseFloat(qty_element.val());
var step=parseFloat(qty_element.attr('step'));
var min_value=parseFloat(qty_element.attr('min'));
var max_value=parseFloat(qty_element.attr('max'));
if(_this.hasClass('xcp-plus')){
var new_qty=input_qty + step;
if(new_qty > max_value&&max_value > 0){
alert('Maximum Quantity: '+max_value);
return;
}}
else if(_this.hasClass('xcp-minus')){
var new_qty=input_qty - step;
if(new_qty===0){
_this.parents('.xoo-cp-pdetails').find('.xoo-cp-remove .xcp-icon').trigger('click');
return;
}
else if(new_qty < min_value){
return;
}
else if(input_qty < 0){
alert('Invalid');
return;
}}
var cart_key=$(this).parents('tr').data('xoo_cp_key');
update_cart(cart_key,new_qty);
})
$(document).on('click','.xoo-cp-remove-pd',function(e){
e.preventDefault();
var cart_key=$(this).parents('tr').data('xoo_cp_key');
update_cart(cart_key,0);
})
});