jQuery(function ($){
var form=$('form.checkout, form#order_review');
var mbbxPaymentData=false;
renderLock();
$("body").append('<div id="mbbx-container"></div>');
$('form.checkout').on('checkout_place_order_mobbex', executePayment);
$('form#order_review').on('submit', executePayment);
$('#checkout_buttons button').on('click', executePayment);
if($('mbbx-banner-input').prop("checked"))
$('.mobbex-banner').removeClass("mobbex-hidden");
$(document).on('change', '.input-radio', (e)=> {document.querySelector('.mbbx-banner-input')
if(e.target==document.querySelector('.mbbx-banner-input'))
$('.mobbex-banner').removeClass("mobbex-hidden");
else
$('.mobbex-banner').addClass("mobbex-hidden");
});
function executePayment(){
if($('[name=payment_method]:checked').val()!='mobbex')
return;
if($('[name=payment_method]:checked').attr('method-type')=='card'){
processOrder(response=> executeWallet(response));
}else{
processOrder(response=> response.redirect ? redirectToCheckout(response):openCheckoutModal(response));
}
return false;
}
function processOrder(callback){
lockForm();
$.ajax({
dataType: 'json',
method: 'POST',
url: mobbex_data.is_pay_for_order ? form[0].action:wc_checkout_params.checkout_url,
data: form.serializeArray(),
success: (response)=> {
response.result=='success' ? callback(response)&&unlockForm():handleErrorResponse(response);
},
error: (e)=> {
handleErrorResponse({
log: e,
result: 'errors',
reload: false,
messages: ['Se produjo un error al procesar la transacción. Intente nuevamente']
});
}});
}
function redirectToCheckout(response){
let paymentMethod=$('[name=payment_method]:checked').attr('group');
window.top.location=response.redirect + (paymentMethod ? '?paymentMethod=' + paymentMethod:'');
}
function openCheckoutModal(response){
let options={
id: response.data.id,
type: 'checkout',
paymentMethod: $('[name=payment_method]:checked').attr('group') ?? null,
onResult: (data)=> {
location.href=response.return_url + '&fromCallback=onResult&status=' + data.status.code;
},
onPayment: (data)=> {
mbbxPaymentData=data.data;
},
onClose: (cancelled)=> {
location.href=response.return_url + '&fromCallback=onClose&status=' + (mbbxPaymentData ? mbbxPaymentData.status.code:'500');
},
onError: (error)=> {
handleErrorResponse({
log: error,
result: 'errors',
reload: false,
messages: ['Se produjo un error al procesar la transacción. Intente nuevamente']
});
},
};
let mobbexEmbed=window.MobbexEmbed.init(options);
mobbexEmbed.open();
unlockForm();
}
function executeWallet(response){
let card=$('[name=payment_method]:checked').attr('key') ?? null;
let cardNumber=$(`#wallet-${card}-number`).val();
let updatedCard=response.data.wallet.find(card=> card.card.card_number==cardNumber);
var options={
intentToken: updatedCard.it,
installment: $(`#wallet-${card}-installments`).val(),
securityCode: $(`#wallet-${card}-code`).val()
};
window.MobbexJS.operation.process(options).then(data=> {
if(data.result===true){
location.href=response.return_url + '&status=' + data.data.status.code;
}else{
handleErrorResponse({
log: data,
result: 'errors',
reload: false,
messages: ['Se produjo un error al procesar la transacción. Intente nuevamente']
});
}}).catch(error=> {
handleErrorResponse({
log: error,
result: 'errors',
reload: false,
messages: ['Se produjo un error al procesar la operación. Intente nuevamente']
});
});
}
function renderLock(){
let loaderModal=document.createElement("div")
loaderModal.id="mbbx-loader-modal"
loaderModal.style.display="none"
let spinner=document.createElement("div")
spinner.id="mbbx-spinner"
loaderModal.appendChild(spinner)
document.body.appendChild(loaderModal)
}
function lockForm(){
document.getElementById("mbbx-loader-modal").style.display='grid'
}
function unlockForm(){
document.getElementById("mbbx-loader-modal").style.display='none'
}
function handleErrorResponse(response){
if(response.reload==='true'){
window.location.reload();
return;
}
if(response.messages){
var checkout_form=$(".woocommerce-checkout");
$(".woocommerce-checkout .woocommerce-error").remove()
if(typeof (response.messages)==='string'){
checkout_form.prepend(response.messages);
}else{
for (var message of response.messages){
checkout_form.prepend('<div class="woocommerce-NoticeGroup woocommerce-NoticeGroup-checkout"><ul class="woocommerce-error" role="alert"><li>'+message+'</li></ul></div>')
}}
}
if(response?.log){
console.error(`Mobbex Checkout Error: ${response.log}`);
}
unlockForm();
form.find('.input-text, select').blur();
$('html, body').animate({
scrollTop: (form.offset().top - 100)
}, 1000);
if(response.nonce){
form.find('#_wpnonce').val(response.nonce);
}
if(response.refresh==='true'){
$('body').trigger('update_checkout');
}}
});