var Packlink=window.Packlink||{};(function(){let hookedUpdate=!1;let modal;let closeButton;let updateButton;let privateData={locations:[],endpoint:null,selectedLocation:null,isCart:!1,translations:{},locale:'en'};document.addEventListener('packlink:dropoff-selected',function(e){document.querySelectorAll('#packlink-drop-off-picker').forEach(function(btn){btn.innerHTML=e.detail.buttonText});document.querySelectorAll('input[name="packlink_drop_off_id"]').forEach(function(input){input.value=e.detail.location.id});document.querySelectorAll('input[name="packlink_drop_off_extra"]').forEach(function(input){input.value=JSON.stringify(e.detail.location)})});Packlink.checkout={};Packlink.checkout.init=initialize;Packlink.checkout.setIsCart=setIsCart;Packlink.checkout.setLocations=setLocations;Packlink.checkout.setLocale=setLocale;Packlink.checkout.setTranslations=setTranslations;Packlink.checkout.setSaveEndpoint=setSaveEndpoint;Packlink.checkout.setDropOffAddress=setDropOffAddress;Packlink.checkout.setSelectedLocationId=setSelectedLocationId;Packlink.checkout.setNoDropOffLocationsMessage=setNoDropOffLocationsMessage;function initialize(){modal=document.getElementById('pl-picker-modal');closeButton=document.getElementById('pl-picker-modal-close');updateButton=document.querySelector("[name='calc_shipping']");let templates=document.getElementById("packlink-js-templates");[].forEach.call(document.getElementsByName('packlink_show_image'),function(item){let parent=item.parentElement;let showImage=item.value;let imageInput=parent.querySelector('input[name="packlink_image_url"]');let button=parent.querySelector('#packlink-drop-off-picker');let isDropOff=parent.querySelector('input[name="packlink_is_drop_off"]');let isCOD=parent.querySelector('input[name="packlink_cash_on_delivery"]');if(isCOD&&isCOD.value==='yes'){const codFeeInput=parent.querySelector('input[name="packlink_cash_on_delivery_fee"]');let codNameInput=parent.querySelector('input[name="packlink_cash_on_delivery_name"]');const codName=codNameInput?codNameInput.value:'';const codFee=codFeeInput?parseFloat(codFeeInput.value):0;const shippingInput=parent.querySelector('input[name^="shipping_method"]');if(shippingInput&&shippingInput.checked){addCODMessage(parent,codName,codFee)}}
let isDdp=parent.querySelector('input[name="packlink_is_ddp"]');if(isDdp&&isDdp.value==='yes'){let ddpSuffix=parent.querySelector('input[name="packlink_ddp_suffix"]');let ddpTotal=parent.querySelector('input[name="packlink_ddp_total"]');appendDdpSuffix(parent,ddpSuffix?ddpSuffix.value:'');replaceDdpPrice(parent,ddpTotal?ddpTotal.value:'')}
if(showImage==='yes'&&imageInput&&parent.querySelector('.pl-checkout-carrier-image')===null){injectImage(imageInput)}
if(isDropOff&&button){button.addEventListener('click',handleSelectDropOffLocationAction);button.removeAttribute('style')}});if(modal){closeButton.addEventListener('click',function(){modal.style.display='none'});initLocationPicker();let errorMessage=document.getElementById('no-drop-off-locations-message');if(privateData.locations.length>0){errorMessage.style.display='none'}}
if(!hookedUpdate&&jQuery){if(updateButton){jQuery(document.body).on('updated_wc_div',initialize)}
jQuery(document.body).on('updated_checkout',initialize);hookedUpdate=!0}
setDropOffAddress()}
let dropOffAddressScheduled=!1;function setDropOffAddress(){if(document.readyState==='loading'){scheduleDropOffAddress();return}
applyDropOffAddress()}
function scheduleDropOffAddress(){if(dropOffAddressScheduled){return}
dropOffAddressScheduled=!0;let observer=new MutationObserver(function(){if(document.querySelector('p.woocommerce-shipping-destination')){observer.disconnect();applyDropOffAddress()}});observer.observe(document.documentElement,{childList:!0,subtree:!0});document.addEventListener('DOMContentLoaded',function(){observer.disconnect();applyDropOffAddress()},{once:!0})}
function applyDropOffAddress(){if(!privateData.selectedLocation||privateData.isCart){return}
let selected=findLocationById(privateData.selectedLocation);if(!selected){return}
setHiddenFields(selected);let buttons=Array.prototype.filter.call(document.querySelectorAll('#packlink-drop-off-picker'),function(button){return button.closest('li')});let renderAddress=function(target){let title=document.createElement('strong');title.textContent=privateData.translations.dropOffTitle;target.textContent='';target.appendChild(title);target.appendChild(document.createElement('br'));target.appendChild(document.createTextNode([selected.name,selected.address,selected.city].join(', ')))};let pageElement=document.querySelector('p.woocommerce-shipping-destination');if(pageElement&&pageElement.previousElementSibling&&pageElement.previousElementSibling.id==='packlink-drop-off-picker'){pageElement=null}
buttons.forEach(function(button){let element=button.parentNode.querySelector('p.woocommerce-shipping-destination');if(!element&&pageElement){element=pageElement;pageElement=null}
if(!element){element=document.createElement('p');element.className='woocommerce-shipping-destination'}
renderAddress(element);button.parentNode.insertBefore(element,button.nextSibling)});if(buttons.length===0){let element=document.querySelector('p.woocommerce-shipping-destination');if(element){renderAddress(element)}}}
function setHiddenFields(location){let dropOffIds=document.querySelectorAll('input[name="packlink_drop_off_id"]');let dropOffExtras=document.querySelectorAll('input[name="packlink_drop_off_extra"]');dropOffIds.forEach(function(input){input.value=location.id});dropOffExtras.forEach(function(input){input.value=JSON.stringify(location)})}
const DDP_SUFFIX_MARKER='data-pl-ddp-suffix';const DDP_PRICE_MARKER='data-pl-ddp-price';function appendDdpSuffix(row,suffix){if(!suffix){return}
let label=row.querySelector('label');if(!label||label.getAttribute(DDP_SUFFIX_MARKER)==='yes'){return}
let title=null;for(let i=0;i<label.childNodes.length;i++){let node=label.childNodes[i];if(node.nodeType===Node.TEXT_NODE&&node.nodeValue.trim()!==''){title=node;break}}
if(title){let separator=title.nodeValue.match(/:\s*$/);title.nodeValue=separator?title.nodeValue.replace(/:\s*$/,'')+' '+suffix+separator[0]:title.nodeValue.replace(/\s+$/,'')+' '+suffix+' '}else{label.appendChild(document.createTextNode(' '+suffix))}
label.setAttribute(DDP_SUFFIX_MARKER,'yes')}
function replaceDdpPrice(row,total){if(!total){return}
let label=row.querySelector('label');if(!label||label.getAttribute(DDP_PRICE_MARKER)==='yes'){return}
let price=label.querySelector('.woocommerce-Price-amount');if(price){price.textContent=total}else{let separator=/\s$/.test(label.textContent)?'':' ';label.appendChild(document.createTextNode(separator+total))}
label.setAttribute(DDP_PRICE_MARKER,'yes')}
function addCODMessage(dataDiv,codName,codFee){if(!dataDiv)return;if(!codName||!codFee||codFee<=0)return;if(dataDiv.querySelector('.packlink-cod-message'))return;const messageDiv=document.createElement('div');messageDiv.className='packlink-cod-message';appendCODMessageContent(messageDiv,codName,codFee);messageDiv.style.marginTop='8px';messageDiv.style.fontSize='12px';messageDiv.style.color='#555';dataDiv.lastChild.before(messageDiv)}
function appendCODMessageContent(container,codName,codFee){let nameStrong1=document.createElement('strong');nameStrong1.textContent=codName;let nameStrong2=document.createElement('strong');nameStrong2.textContent=codName;let feeStrong=document.createElement('strong');feeStrong.textContent=codFee;container.appendChild(document.createTextNode('This service supports '));container.appendChild(nameStrong1);container.appendChild(document.createTextNode('. If you choose the '));container.appendChild(nameStrong2);container.appendChild(document.createTextNode(' payment method, an additional fee of '));container.appendChild(feeStrong);container.appendChild(document.createTextNode(' will be applied.'))}
function setLocations(locations){privateData.locations=locations}
function setSaveEndpoint(endpoint){privateData.endpoint=endpoint}
function setSelectedLocationId(locationId){privateData.selectedLocation=''+locationId}
function setIsCart(isCart){privateData.isCart=isCart}
function setTranslations(translations){privateData.translations=translations}
function setLocale(locale){privateData.locale=locale}
function findLocationById(id){id=''+id;return privateData.locations.find(function(a){return a.id===id})}
function injectImage(imageSrcInput){let image=document.createElement('img');if(/^https?:\/\//i.test(imageSrcInput.value)){image.src=imageSrcInput.value}
image.alt='carrier image';image.className='pl-checkout-carrier-image';let label=imageSrcInput.parentElement.querySelector('label');if(label){label.prepend(image)}else{imageSrcInput.parentElement.prepend(image)}}
function initLocationPicker(){Packlink.locationPicker.display(privateData.locations,function(id){let selected;privateData.selectedLocation=id;selected=findLocationById(id);Packlink.ajaxService.post(privateData.endpoint,selected,function(){document.querySelectorAll('#packlink-drop-off-picker').forEach(function(button){button.innerHTML=privateData.translations.changeDropOff});if(!privateData.isCart){setHiddenFields(selected)}
document.dispatchEvent(new CustomEvent('packlink:dropoff-selected',{detail:{locationId:id,location:selected,buttonText:privateData.translations.changeDropOff}}))},function(){});setDropOffAddress();modal.style.display='none'},privateData.selectedLocation,privateData.locale)}
function setNoDropOffLocationsMessage(message){if(document.getElementById('no-drop-off-locations-message')){return}
let info=document.createElement('div');info.className='woocommerce-info';info.innerHTML=message;let noticeWrapper=document.createElement('div');noticeWrapper.id='no-drop-off-locations-message';noticeWrapper.appendChild(info);let checkoutElement=document.querySelector('[name="checkout"]');if(checkoutElement){checkoutElement.insertAdjacentElement('beforebegin',noticeWrapper)}
noticeWrapper.style.display='none'}
function handleSelectDropOffLocationAction(){initLocationPicker();let errorMessage=document.getElementById('no-drop-off-locations-message');if(privateData.locations.length>0){modal.style.display='block'}
if(errorMessage){errorMessage.style.display=privateData.locations.length>0?'none':'block'}}})()