jQuery(document).ready(function($){
var focus_qty;
//Open cart pop up
function open_popup(){
$('.xoo-cp-opac').show();
$('.xoo-cp-modal').addClass('xoo-cp-active');
}
//On add to cart
$(document.body).on('added_to_cart',function(){
open_popup();
});
//CLose 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);
//Block popup
function block_popup(){
$('.xoo-cp-outer').show();
}
//Unblock popup
function unblock_popup(){
$('.xoo-cp-outer').hide();
}
//Reset cart button/form
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();
}
//Notice Function
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);
};
//Add to cart function
function add_to_cart(atc_btn,form_data){
// Trigger event.
$( 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){
// Trigger event so themes can refresh other areas.
$( document.body ).trigger( 'added_to_cart', [ response.fragments, response.cart_hash, atc_btn ] );
atc_btn.append('');
}
else if(response.error){
show_notice('error',response.error)
}
else{
console.log(response);
}
//Reset to default
if(xoo_cp_localize.reset_cart) reset_cart(atc_btn);
}
})
}
//Add to cart on single page
$(document).on('submit','form.cart',function(e){
var form = $(this);
var atc_btn = form.find( 'button[type="submit"]');
var form_data = form.serializeArray();
// if button as name add-to-cart get it and add to form
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('');
form_data.push({name: 'action', value: 'xoo_cp_add_to_cart'});
add_to_cart(atc_btn,form_data);//Ajax add to cart
})
//Ajax function to update cart (In a popup)
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
}
})
}
//Update cart
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;
//Set fragments
$.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';
//Set 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{
//Print error
//show_notice('error',response.error);
console.log(response);
}
unblock_popup();
}
})
}
//Save Quantity on focus
$(document).on('focusin','.xoo-cp-qty',function(){
focus_qty = $(this).val();
})
//Qty input on change
$(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;
}
//Check If valid number
else if(isNaN(new_qty) || new_qty < 0){
invalid = true;
}
//Check maximum quantity
else if(new_qty > max_value && max_value > 0){
alert('Maximum Quantity: '+max_value);
invalid = true;
}
//Check Minimum Quantity
else if(new_qty < min_value){
invalid = true;
}
//Check Step
else if((new_qty % step) !== 0){
alert('Quantity can only be purchased in multiple of '+step);
invalid = true;
}
//Update if everything is fine.
else{
var cart_key = $(this).parents('tr').data('xoo_cp_key');
update_cart(cart_key,new_qty);
}
if(invalid === true){
$(this).val(focus_qty);
}
})
//Plus minus buttons
$(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);
})
//Remove item from cart
$(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);
})
})