{"version":3,"sources":["accordion.js","addressbook.autofill.js","button-loader.js","clickable-row.js","collapsible-container.js","create-order-on-refresh.js","create-order.address-autofill.js","create-order.autofill.js","create-order.cart.js","create-order.debtor.addresses.js","create-order.debtor.js","create-order.documents.js","create-order.pre-submit.js","create-order.pricing-sidebar.js","create-order.product.js","create-order.transport-type.js","custom-select.js","disable-next-button-on-ajax-call.js","discard-order.js","edit-address.js","email-popup.js","filter-order-overview.js","ie.js","import-poller.js","input-reset.js","inputmask.js","magnific-popup.js","maps_api.js","notification-bar.js","panel.js","pickadate.js","portal.js","resize-menu.js","sortable-table.js","step-3-date-prefill.js","tabs.js","translation.js","validate-email-popup.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACj+BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/bA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5TA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"modules.js","sourcesContent":["(function (win, doc, $){\n\n // Simple accordion setup\n // Accordion resize occurs after an item has been opened, this means that the height will always be calculated when an item expands\n // To recalculate the height of an active item you should trigger resize event listener of the window object: $(window).trigger('resize');\n\n var callback, resize;\n\n window.setAccordion = function() {\n\n var accordions = $('.accordion').not('.js-accordion--ready');\n\n if (accordions.length === 0) {\n return;\n }\n\n // Custom events\n $(document).on({\n 'accordion.toggleItem': function (event, accordion, index) {\n toggleAccordionItem(accordion, index);\n sizeAccordionItem(accordion);\n focusAccordionItem(accordion, index);\n },\n 'accordion.enableItem': function (event, accordion, index) {\n enableAccordionItem(accordion, index);\n },\n 'accordion.disableItem': function (event, accordion, index) {\n disableAccordionItem(accordion, index);\n }\n });\n\n $(window).on({\n 'resize': function(event) {\n clearTimeout(resize);\n resize = setTimeout(function() {\n\n accordions.each(function() {\n sizeAccordionItem($(this));\n });\n\n }, 100);\n },\n 'load': function() {\n accordions.each(function () {\n sizeAccordionItem($(this));\n });\n }\n });\n\n accordions.each(function() {\n var accordion = $(this);\n var accordion_item = accordion.find('> .accordion__items > .accordion__item');\n\n accordion.on('click', '.accordion__item__toggle', function (event) {\n event.preventDefault();\n\n var toggle = $(this);\n var item = toggle.closest('.accordion__item');\n\n var index = item.index();\n\n var trigger_index = toggle.data('accordion-toggle-trigger-index');\n if(!isNaN(parseFloat(trigger_index))) {\n index = trigger_index;\n }\n\n if(isNaN(parseFloat(index))) {\n return;\n }\n\n if (index != trigger_index) {\n if (item.hasClass('js-accordion__item--is-expanded')) {\n return;\n }\n }\n\n $(document).trigger('accordion.toggleItem', [accordion, index])\n });\n\n var expanded_at_index = accordion.data('accordion-expanded-at-index');\n if (!isNaN(parseFloat(expanded_at_index))) {\n $(document).trigger('accordion.toggleItem', [accordion, expanded_at_index]);\n }\n\n accordion_item.addClass('js-accordion__item--ready');\n accordion.addClass('js-accordion--ready');\n });\n };\n\n function toggleAccordionItem(accordion, index) {\n if(accordion == null) {\n return;\n }\n\n var accordion_item = accordion.find('> .accordion__items > .accordion__item');\n var selected_accordion_item = accordion_item.eq(index);\n\n if (selected_accordion_item.hasClass('accordion__item--is-disabled')) {\n return;\n }\n\n // Clear step 3 validation messages\n $('.business-rule-validation').html('');\n\n accordion_item.not(selected_accordion_item).removeClass('js-accordion__item--is-expanded');\n selected_accordion_item.addClass('js-accordion__item--is-expanded');\n }\n\n function sizeAccordionItem(accordion) {\n if (accordion == null) {\n return;\n }\n\n var accordion_items = accordion.find('> .accordion__items > .accordion__item');\n\n if (accordion_items.length === 0) {\n return;\n }\n\n accordion_items.each(function() {\n\n var accordion_item = $(this);\n var accordion_item_main = accordion_item.find('.accordion__item__main').first();\n var accordion_item_main_wrapper = accordion_item.find('.accordion__item__main__wrapper').first();\n var height = 0;\n\n if (accordion_item.hasClass('js-accordion__item--is-expanded')) {\n height = accordion_item_main_wrapper.outerHeight();\n }\n\n accordion_item_main.css({\n 'height': height\n });\n });\n }\n\n function focusAccordionItem(accordion, index) {\n clearTimeout(callback);\n\n callback = setTimeout(function() {\n\n var accordion_item = accordion.find('> .accordion__items > .accordion__item').filter('.js-accordion__item--is-expanded').first();\n\n // Prevent scroll to if the selected accordion item is already open (i.e. the same index);\n if (accordion_item.index() !== index) {\n return;\n }\n\n var accordion_offset = accordion_item.offset();\n\n $('html, body').stop().animate({\n scrollTop: accordion_item.offset().top\n });\n\n }, 250);\n\n }\n\n function enableAccordionItem(accordion, index) {\n if(accordion == null || isNaN(parseFloat(index))) {\n return;\n }\n\n accordion.find('> .accordion__items > .accordion__item').eq(index).removeClass('accordion__item--is-disabled');\n }\n\n function disablexAccordionItem(accordion, index) {\n if (accordion == null || isNaN(parseFloat(index))) {\n return;\n }\n\n accordion.find('> .accordion__items > .accordion__item').eq(index).addClass('accordion__item--is-disabled');\n }\n\n})(window.jQuery(window), window.jQuery(document), window.jQuery);\n","(function (win, doc, $) {\n 'use strict';\n\n var ajaxCall\n , cache = {};\n\n window.setAddressBookAutofill = function () {\n // Our scoped root element.\n var $rootElement = $('.create-order');\n\n if (!$rootElement.length) {\n return;\n }\n\n\n $rootElement.find('.accordion__item').each(function (index, accordionItem) {\n autofill($(accordionItem), 'pickup');\n autofill($(accordionItem), 'delivery');\n });\n\n var $addressBookElement = $('.addressbook');\n\n autofill($addressBookElement, '');\n\n /**\n * Autofill fields, we require a $rootElement so we can scope our selectors.\n * We use the prefix for the selectors as well. Example: delivery_address_postalcode.\n *\n * @param {jQuery} $rootElement\n * @param {string} fieldNamePrefix\n *\n * @returns {void}\n */\n function autofill($rootElement, fieldNamePrefix) {\n var fields = {\n $zipCode: $rootElement.find('[name=' + fieldNamePrefix + '_address_postalcode]'),\n $place: $rootElement.find('[name=' + fieldNamePrefix + '_address_place]'),\n $street: $rootElement.find('[name=' + fieldNamePrefix + '_address_street]'),\n $housenumber: $rootElement.find('[name=' + fieldNamePrefix + '_address_housenumber]'),\n $additional: $rootElement.find('[name=' + fieldNamePrefix + '_address_housenumberadditional]'),\n };\n\n handleAutofill(fields, fieldNamePrefix);\n }\n\n /**\n * Add event listener to blur event on the inputs, send ajax call and fill data.\n *\n * @param {Object} fields\n * @param {jQuery} fields.$zipCode\n * @param {jQuery} fields.$place\n * @param {jQuery} fields.$street\n * @param {jQuery} fields.$housenumber\n * @param {jQuery} fields.$additional\n * @param {string} typeOfAddress\n *\n * @returns {void};\n */\n function handleAutofill(fields, typeOfAddress) {\n var $listenFields = $()\n .add(fields.$housenumber)\n .add(fields.$zipCode)\n .add(fields.$additional);\n\n\n $listenFields.on('blur', function () {\n if (ajaxCall) {\n ajaxCall.abort();\n }\n\n var values = {\n zipcode: fields.$zipCode.val(),\n housenumber: fields.$housenumber.val(),\n additional: fields.$additional.val(),\n };\n\n if (!values.zipcode || !values.housenumber) {\n return;\n }\n\n var key = JSON.stringify(values);\n\n if (cache[key]) {\n fields.$street.val(cache[key].street).trigger('change');\n fields.$place.val(cache[key].city).trigger('change');\n\n return;\n }\n\n fields.$place.prop('readonly', true);\n fields.$street.prop('readonly', true);\n\n ajaxCall = $.get('/api/zipcode/search', values)\n .done(function (response) {\n fields.$street.val(response.street).trigger('change');\n fields.$place.val(response.city).trigger('change');\n\n cache[key] = {\n street: response.street,\n city: response.city,\n };\n })\n .fail(function () {\n fields.$street.val('').trigger('change');\n fields.$place.val('').trigger('change');\n })\n .always(function () {\n fields.$place.prop('readonly', false);\n fields.$street.prop('readonly', false);\n });\n });\n }\n };\n})(window.jQuery(window), window.jQuery(document), window.jQuery);\n","(function (win, doc, $) {\n\n window.setButtonLoader = function() {\n $('.js-download-button').on('click', function(event) {\n var $download_button = $(event.target);\n $download_button.attr(\"disabled\", 'disabled');\n $download_button.parent().find('.button--download-loader').css('display', 'table');\n $download_button.addClass('button--disabled');\n\n setTimeout(function($download_button) {\n $download_button.parent().find('.button--download-loader').css('display', 'none');\n $download_button.removeClass('button--disabled');\n }, 2000, $download_button);\n });\n }\n \n}) (window.jQuery(window), window.jQuery(document), window.jQuery);","(function (win, doc, $) {\n window.setClickableRow = function () {\n $('.table-row--clickable').click(function(event) {\n // Ignore if click was on an anchor or button\n if (event.target?.closest('a, button')) {\n return;\n }\n window.location = $(this).data(\"href\");\n });\n }\n})(window.jQuery(window), window.jQuery(document), window.jQuery);\n","(function ($) {\n window.setCollapsibleContainer = function () {\n var collapsed = true;\n function toggle() {\n $('.collapsible-container').slideToggle(collapsed);\n $('.collapsible-trigger').text(function(i){\n return collapsed ? window.trans(\"Meer filters\") : window.trans(\"Minder filters\");\n });\n }\n\n if ($('#orders__search--pickup-date-start').val()\n || $('#orders__search--pickup-date-end').val()\n || $('#orders__search--delivery-date-start').val()\n || $('#orders__search--delivery-date-end').val()\n ) {\n collapsed = false;\n toggle();\n }\n\n $('.collapsible-trigger').click(function () {\n collapsed = !collapsed;\n toggle();\n });\n }\n})(window.jQuery);\n","(function (win, doc, $) {\n\n $.ajaxSetup({headers: {'X-CSRF-TOKEN': $('meta[name=\"csrf-token\"]').attr('content')}});\n\n window.orderOnRefresh = function () {\n\n //Check if a debtor was pre-selected so we can re-fill the AJAX dropdowns\n var debtorSelect = $('#debtor');\n if (debtorSelect.val()) {\n debtorSelect.trigger('change');\n fillAddressPropertiesFromDataAttribute();\n }\n\n $(\".create-order__cart-product-selector\").change(function(){\n fillAddressPropertiesFromDataAttribute();\n })\n };\n\n function fillAddressPropertiesFromDataAttribute() {\n var selectors = [\n '.js-company-name',\n '.js-postalcode',\n '.js-place',\n '.js-street',\n '.js-housenumber',\n '.js-housenumber-addition',\n '.js-country',\n '.js-country',\n '.js-contact',\n '.js-department',\n '.js-phonenumber',\n '.js-email',\n '.js-email-updates',\n '.js-email-link',\n '.js-email-shipment',\n ];\n\n $.each(selectors, function (index, selector) {\n $.each($(selector), function (index, element) {\n element = $(element);\n if (element.length < 1) {\n return;\n }\n\n var selectedValue = element.data('selected');\n\n if (selectedValue) {\n if (element.attr('type') == 'checkbox') {\n element.prop('checked', true).change();\n }\n element.val(selectedValue);\n if (element.hasClass('js-select2')) {\n element.change();\n }\n }\n });\n });\n }\n\n})(window.jQuery(window), window.jQuery(document), window.jQuery);\n","(function (win, doc, $) {\n 'use strict';\n\n var ajaxCall\n , cache = {};\n\n window.setCreateOrderAddressAutofill = function () {\n var $addressBookElement = $('.addressbook');\n\n autofill($addressBookElement, '');\n\n /**\n * Autofill fields, we require a $rootElement so we can scope our selectors.\n * We use the prefix for the selectors as well. Example: delivery_address_postalcode.\n *\n * @param {jQuery} $rootElement\n * @param {string} fieldNamePrefix\n *\n * @returns {void}\n */\n function autofill($rootElement, fieldNamePrefix) {\n var fields = {\n $zipCode: $rootElement.find('[name=' + fieldNamePrefix + 'postalcode]'),\n $place: $rootElement.find('[name=' + fieldNamePrefix + 'place]'),\n $street: $rootElement.find('[name=' + fieldNamePrefix + 'street]'),\n $housenumber: $rootElement.find('[name=' + fieldNamePrefix + 'housenumber]'),\n $additional: $rootElement.find('[name=' + fieldNamePrefix + 'housenumberadditional]'),\n };\n\n handleAutofill(fields, fieldNamePrefix);\n }\n\n /**\n * Add event listener to blur event on the inputs, send ajax call and fill data.\n *\n * @param {Object} fields\n * @param {jQuery} fields.$zipCode\n * @param {jQuery} fields.$place\n * @param {jQuery} fields.$street\n * @param {jQuery} fields.$housenumber\n * @param {jQuery} fields.$additional\n * @param {string} typeOfAddress\n *\n * @returns {void};\n */\n function handleAutofill(fields, typeOfAddress) {\n var $listenFields = $()\n .add(fields.$housenumber)\n .add(fields.$zipCode)\n .add(fields.$additional);\n\n\n $listenFields.on('blur', function () {\n if (ajaxCall) {\n ajaxCall.abort();\n }\n\n var values = {\n zipcode: fields.$zipCode.val(),\n housenumber: fields.$housenumber.val(),\n additional: fields.$additional.val(),\n };\n\n if (!values.zipcode || !values.housenumber) {\n return;\n }\n\n var key = JSON.stringify(values);\n\n if (cache[key]) {\n fields.$street.val(cache[key].street).trigger('change');\n fields.$place.val(cache[key].city).trigger('change');\n\n return;\n }\n\n fields.$place.prop('readonly', true);\n fields.$street.prop('readonly', true);\n\n ajaxCall = $.get('/api/zipcode/search', values)\n .done(function (response) {\n fields.$street.val(response.street).trigger('change');\n fields.$place.val(response.city).trigger('change');\n\n cache[key] = {\n street: response.street,\n city: response.city,\n };\n })\n .fail(function () {\n fields.$street.val('').trigger('change');\n fields.$place.val('').trigger('change');\n })\n .always(function () {\n fields.$place.prop('readonly', false);\n fields.$street.prop('readonly', false);\n });\n });\n }\n };\n})(window.jQuery(window), window.jQuery(document), window.jQuery);\n","(function (win, doc, $){\n\n // Javascript logic for autofill fields after an Ajax Request\n // Each field will be filled if the name of the current field excists within the response.\n // Type of fields will be filled based on the type of value it has from the response:\n // Array = Select\n // String = Textfield\n // Boolean = Checkbox || Radiobutton\n\n window.setCreateOrderAutofill = function() {\n\n var create_order_autofills = $('.create-order__autofill').not('.js-create-order__autofill--is-ready');\n\n if (create_order_autofills.length === 0) {\n return;\n }\n\n create_order_autofills.each(function() {\n\n var create_order_autofill = $(this);\n\n // Get the routes we wan't to use within our ajax requests\n var routes = create_order_autofill.data('create-order-autofill-routes');\n\n if (routes == null) {\n return;\n }\n\n // Remove any whitespace since we wan't to explode each route\n routes = routes.replace(/ /g, '').split(',');\n\n create_order_autofill.on({\n 'change': function(event) {\n getAutofillData(create_order_autofill, routes);\n }\n });\n\n create_order_autofill.addClass('js-create-order__autofill--is-ready');\n });\n }\n\n function getAutofillData(create_order_autofill, routes) {\n\n if (create_order_autofill == null || (typeof routes != 'object' && routes.length <= 0)) {\n return;\n }\n\n var input_wrapper = create_order_autofill.parent();\n var name = create_order_autofill.attr('name');\n var value = create_order_autofill.val();\n\n if(!name || !value) {\n return;\n }\n\n for (var index = 0; index < routes.length; index++) {\n\n if(!routes[index]) {\n break;\n }\n\n $.ajax({\n type: 'POST',\n url: routes[index],\n data: {\n name: name,\n value: value\n },\n beforeSend: function () {\n // Set the indicator class on the wrapper element\n input_wrapper.addClass('create-order__input-wrapper--ajax-is-active');\n },\n error: function (jqXHR, textStatus, error) {\n window.alert(error);\n },\n success: function (data, textStatus, jqXHR) {\n updateElements(create_order_autofill, data);\n },\n complete: function (jqXHR, textStatus) {\n // Set the indicator class on the wrapper element\n input_wrapper.removeClass('create-order__input-wrapper--ajax-is-active');\n }\n });\n }\n }\n\n function updateElements(create_order_autofill, data) {\n\n if(data == null) {\n return;\n }\n\n var $form = create_order_autofill.closest('form');\n\n for(var name in data) {\n\n var input = $form.find(':input[name=' + name + ']');\n\n if (input.length > 0) {\n transformInput(input, data[name]);\n }\n }\n }\n\n function transformInput(input, result) {\n\n if(typeof result == 'object' && result.length > 0 && input.is('select')) {\n\n // Remove all options from the select\n input.empty();\n\n for (var index = 0; index < result.length; index++) {\n input.append('')\n }\n }\n else if (typeof result == 'boolean' && (input.is(':checkbox') || input.is(':radio'))) {\n input.prop('checked', result);\n } else {\n input.val(result);\n }\n\n input.trigger('change');\n }\n})(window.jQuery(window), window.jQuery(document), window.jQuery);\n","// Javascript logic for creating adding or removing products within the create order form\n\n(function (win, doc, $) {\n var trans;\n var defaults = {};\n\n window.setCreateOrderCart = function (options) {\n var create_order__carts = $('.create-order__cart');\n\n if (create_order__carts.length === 0) {\n return;\n }\n trans = window.trans;\n\n initAdrField();\n\n defaults = {\n labels: {\n yes: trans('Ja'),\n no: trans('Nee'),\n },\n messages: {\n product_remove_confirm: trans('Verwijder product'),\n error_get_callback: trans(\n 'De huidige rit/order kan niet opgehaald worden, probeer het later nog een keer.'),\n error_create_callback: trans(\n 'Één of meerdere goederen kunnen niet aan de rit/order toegevoegd worden.') +\n '\\n' +\n trans(\n 'Verwijder het concept door rechtsbovenin op de rode knop te klikken en probeer het opnieuw.'),\n error_removing_callback: trans(\n 'De huidige rit/order kan niet verwijderd worden, probeer het later nog een keer.'),\n }\n };\n\n defaults = getOptions(defaults, options);\n\n create_order__carts.each(function () {\n var $create_order__cart = $(this);\n var $inputs = $create_order__cart.find(':input').\n not(':button, :submit, :reset').\n not('.create-order__cart-product-selector').\n not('[type=hidden]');\n\n // Default state for ajax requests\n $create_order__cart.data('ajax_request_pending', false);\n\n setCreateOrderCartIndex($create_order__cart);\n setCreateOrderCartTable();\n getCreateOrderCart($create_order__cart);\n setCreateOrderCartActions($create_order__cart);\n setCreateOrderProductSelector($create_order__cart, $inputs);\n setCreateOrderAddToOrder($create_order__cart, $inputs);\n observeCartItems();\n\n $create_order__cart.addClass('js-create-order__cart--is-ready');\n });\n };\n\n function initAdrField()\n {\n var $adrBox = $('.product_adr');\n var $adrSelect = $('.product_adr__select', $adrBox);\n var $adrClassificationField = $('input.product_adr__classification', $adrBox);\n var $adrIdField = $('input.product_adr__id', $adrBox);\n var $adrClassificationText = $('p.product_adr__classification', $adrBox);\n\n $adrSelect.on('change', function () {\n var dataset = this.children[this.selectedIndex].dataset;\n\n $adrClassificationField.val(dataset.class || '')\n $adrClassificationText.text((dataset.class || '' ) + \" \" + (dataset.classification || '') || '');\n\n $adrIdField.val(dataset.id || '')\n });\n }\n\n function hideCartIfNoItems (\n $create_order_goods_table_container, $create_order_goods_table_body) {\n var $create_order_goods_table_container_row = $create_order_goods_table_container.closest(\n '.row'),\n cart_item_count = $create_order_goods_table_body.children().length;\n\n if (!cart_item_count) {\n $create_order_goods_table_container_row.hide();\n return;\n }\n\n $create_order_goods_table_container_row.show();\n }\n\n function observeCartItems () {\n var $create_order_goods_table_container = $('.create-order__cart-table'),\n $create_order_goods_table_body = $create_order_goods_table_container.find(\n 'tbody');\n\n // This watches the table for changes, and runs a callback if any items are added, or removed from the DOM inside the table.\n var create_order_goods_table_mutation_observer = new MutationObserver(\n function () {\n hideCartIfNoItems($create_order_goods_table_container,\n $create_order_goods_table_body);\n });\n\n create_order_goods_table_mutation_observer.observe(\n $create_order_goods_table_body[0],\n {\n childList: true,\n }\n );\n\n hideCartIfNoItems($create_order_goods_table_container,\n $create_order_goods_table_body);\n }\n\n // Helper function for adding editing the default options\n function getOptions (defaults, options) {\n\n if (options == null) {\n return defaults;\n }\n\n // Override any defaults if it's present within the options object\n for (var key in options) {\n\n if (!options.hasOwnProperty(key)) {\n continue;\n }\n\n // Only override the option if it's present within the defaults object\n if (!(key in defaults)) {\n break;\n }\n\n defaults[key] = options[key];\n }\n\n return defaults;\n\n }\n\n // Helper function for adding the hidden input field for editing the\n function setCreateOrderCartIndex ($create_order__cart) {\n var line_index_classname = 'create_order__cart-line-index';\n\n var create_order__cart_index = $create_order__cart.find(\n 'input[type=hidden].' + line_index_classname);\n\n if (create_order__cart_index.length === 0) {\n $create_order__cart.prepend(\n '');\n create_order__cart_index = $create_order__cart.find(\n 'input[type=hidden].' + line_index_classname);\n }\n\n create_order__cart_index.val(String(setLineIndex($create_order__cart)));\n }\n\n // Helper function to get the current id\n function getLineIndex ($create_order__cart) {\n return $create_order__cart.find(\n 'input[type=hidden].create_order__cart-line-index').val();\n }\n\n // // Helper function to generate an unique id for each line\n function setLineIndex (create_order__cart) {\n var create_order__cart_table = create_order__cart.find(\n '.create-order__cart-table');\n var create_order__cart_product = create_order__cart_table.find(\n '.create-order__cart-product');\n\n return generateLineIndex(create_order__cart_product.length);\n }\n\n //\n function generateLineIndex (index) {\n var line_index = 'line-index__' + String(index);\n\n if ($('#' + line_index).length > 0) {\n return generateLineIndex(index + 1);\n }\n\n return line_index;\n }\n\n function getCreateOrderCart ($create_order__cart) {\n var route = $create_order__cart.data('get-cart-route');\n if (route == null) {\n return;\n }\n\n // Only accept synchronous requests\n if ($create_order__cart.data('ajax_request_pending')) {\n console.error('Unable to perform multiple request');\n return;\n }\n\n $.ajax({\n type: 'GET',\n url: route,\n beforeSend: function () {\n // Prevent asynchronous requests\n $create_order__cart.data('ajax_request_pending', true);\n },\n error: function () {\n window.alert(defaults.messages.error_get_callback);\n },\n success: function (data) {\n for (var index = 0; index < data.length; index++) {\n\n var line_data = data[index];\n line_data['index'] = 'line-index__' + index;\n\n var row = generateRowFromLineData(line_data, true);\n if (!row) {\n return;\n }\n\n // Cleanup duplicate rows after a line has been edited by the user\n cleanupDuplicateRows($create_order__cart, line_data);\n\n // Append the current row to the body.\n var create_order__cart_table = $create_order__cart.find(\n '.create-order__cart-table');\n create_order__cart_table.find('tbody').append(row);\n\n // Append event listeners for the confirm dialog for the created row\n setCreateOrderConfirm($create_order__cart);\n\n var create_order__cart_product = create_order__cart_table.find(\n '.create-order__cart-product').last();\n\n // Append the line data as data attribute\n create_order__cart_product.data('create-order-line-data', line_data);\n }\n\n setCreateOrderCartIndex($create_order__cart);\n\n },\n complete: function () {\n // Disable asynchronous requests blocker\n $create_order__cart.data('ajax_request_pending', false);\n }\n });\n\n }\n\n // Helper function to setup the product table and table header columns\n function setCreateOrderCartTable () {\n var create_order__cart_table = $('.create-order__cart-table');\n var table = create_order__cart_table.find('table');\n\n // Skip table generation if we already have a table we can put data in\n if (table.length > 0) {\n return;\n }\n\n // Append a basic table, the tablehead columns will be added after.\n create_order__cart_table.append(\n '
');\n\n table = create_order__cart_table.find('table');\n\n var headings = [\n trans('Soort'),\n trans('Aantal'),\n trans('Gewicht (kg)'),\n trans('LxBxH (cm)'),\n trans('Stapelbaar'),\n trans('Breekbaar'),\n trans('Productomschrijving'),\n trans('ID-controle'),\n trans('Van'),\n trans('Naar'),\n ];\n\n $.each(headings, function () {\n // Append the current label to the thead\n table.find('thead tr').append('' + this + '');\n });\n\n // Alignment fix for the tbody row action (edit/delete)\n table.find('thead tr').append('');\n }\n\n // Delegate event listeners for the delete and edit function\n function setCreateOrderCartActions (create_order__cart) {\n create_order__cart.on(\n 'click',\n '.create-order__cart-product-delete',\n function (event) {\n event.preventDefault();\n\n var create_order__cart_product = $(this).\n closest('.create-order__cart-product');\n\n removeProductFromCart(create_order__cart_product);\n $('.create-order').trigger('change');\n }\n );\n\n create_order__cart.on(\n 'click',\n '.create-order__cart-product-edit',\n function (event) {\n event.preventDefault();\n\n var create_order__cart_product = $(this).\n closest('.create-order__cart-product');\n\n editProductFromCart(create_order__cart_product);\n }\n );\n }\n\n // Set the events for clearing all product property fields\n function setCreateOrderProductSelector ($create_order__cart, $inputs) {\n var create_order__cart_product_selector = $create_order__cart.find(\n '.create-order__cart-product-selector');\n\n if (create_order__cart_product_selector.length === 0) {\n return;\n }\n\n // Clear all inputs if we selected a new product\n create_order__cart_product_selector.on({\n change: function () {\n clearInputs($inputs);\n }\n });\n }\n\n // Add a product to the table within the cart\n function setCreateOrderAddToOrder ($create_order__cart, $inputs) {\n var create_order__cart_add_to_order = $create_order__cart.find(\n '.create-order__cart-add-to-order');\n\n // Abort function if we have no element\n if (create_order__cart_add_to_order.length === 0) {\n return;\n }\n\n var $details = $('#product_details');\n\n create_order__cart_add_to_order.on(\n {\n click: function (event) {\n event.preventDefault();\n var firstInvalidField = null;\n\n $details.find('input:visible').each(function () {\n var res = this.checkValidity();\n if (! res) {\n var $this = $(this);\n firstInvalidField = firstInvalidField || this;\n $this.parents(\".form-item\").addClass('form-item--invalid');\n $this.one('input', function () {\n $this.parents(\".form-item\").removeClass('form-item--invalid');\n });\n }\n });\n\n if (firstInvalidField) {\n firstInvalidField.focus();\n return;\n }\n\n addGoodToCartTable($create_order__cart, $inputs);\n\n $(window).trigger('resize');\n }\n }\n );\n }\n\n // Helper function for clearing al cart fields when a new type has been selected\n function clearInputs (inputs) {\n inputs.each(function () {\n var input = $(this);\n\n if (input.is('select')) {\n input.prop('selectedIndex', 0);\n // Trigger change for all select2 to listen\n input.trigger('change');\n } else if (input.is(':checkbox') || input.is(':radio')) {\n input.prop('checked', false);\n } else {\n input.val('');\n }\n });\n }\n\n //Append the current good to the cart table\n function addGoodToCartTable ($create_order__cart, $inputs) {\n // Setup the date for the current productline we wan't to add within the cart\n var line_data = getGoodDataFromInputs($create_order__cart, $inputs);\n\n // Prevent the current product to be added to the cart since we have no valid line_data we can append.\n if (line_data == null) {\n console.error(\n 'Error: The current product can\\'t be added to the cart since we have no valid line data we can post.');\n return;\n }\n\n var create_order__cart_table = $create_order__cart.find(\n '.create-order__cart-table');\n\n // Opening tag for the current row\n var row = generateRowFromLineData(line_data);\n if (!row) {\n return;\n }\n\n // Cleanup duplicate rows after a line has been edited by the user\n cleanupDuplicateRows($create_order__cart, line_data);\n\n // Append the current row to the body.\n create_order__cart_table.find('tbody').append(row);\n\n // Append event listeners for the confirm dialog for the created row\n setCreateOrderConfirm($create_order__cart);\n\n var create_order__cart_product = create_order__cart_table.find(\n '.create-order__cart-product').last();\n\n // Append the line data as data attribute\n create_order__cart_product.data('create-order-line-data', line_data);\n\n addProductFromCart(create_order__cart_product, $inputs, line_data);\n }\n\n // Helper function for setting up an array with al the necessary values for each input\n function getGoodDataFromInputs ($create_order__cart, $inputs) {\n $inputs = $inputs.add(\n $create_order__cart.find('.create-order__cart-product-selector')\n );\n\n // Push the Line id seperately since it's not part of the inputs selector group\n var line_index = getLineIndex($create_order__cart);\n\n // Default state for our line_data\n var line_data = {\n index: line_index,\n fields: [],\n };\n\n var pickupAddressTitle = '';\n var deliveryAddressTitle = '';\n var pickupTitleInputs = [\n 'pickup_contact_department',\n 'pickup_address_street',\n 'pickup_address_housenumber',\n 'pickup_address_housenumberadditional',\n 'pickup_address_postalcode',\n ];\n var deliveryTitleInputs = [\n 'delivery_contact_department',\n 'delivery_address_street',\n 'delivery_address_housenumber',\n 'delivery_address_housenumberadditional',\n 'delivery_address_postalcode',\n ];\n\n // Iterate trought each input and append the actual value to the line_data array\n $inputs.not('.create_order__cart-line-index').each(function () {\n var input = $(this);\n\n var input_data = {\n name: input.attr('name'),\n value: getValueFromInput(input),\n readable_value: getReadableValueFromInput(input),\n };\n\n // Don't push the current input if we have no name or value attribute set\n if (input_data.name == null || input_data.value == null) {\n console.error(\n 'Error: The current input field has no name or value set, please set these attributes to the current input...');\n return;\n }\n\n line_data.fields.push(input_data);\n });\n\n $.each(pickupTitleInputs, function (key, inputSelector) {\n pickupAddressTitle += $inputs.filter('[name=\"' + inputSelector + '\"]').\n val() + ' ';\n });\n $.each(deliveryTitleInputs, function (key, inputSelector) {\n deliveryAddressTitle += $inputs.filter('[name=\"' + inputSelector + '\"]').\n val() + ' ';\n });\n\n if (pickupAddressTitle) {\n var pickupAddressData = {\n name: 'address-pickup-title',\n value: '',\n readable_value: pickupAddressTitle,\n };\n line_data.fields.unshift(pickupAddressData);\n }\n if (deliveryAddressTitle) {\n var deliveryAddressData = {\n name: 'address-delivery-title',\n value: '',\n readable_value: deliveryAddressTitle,\n };\n line_data.fields.unshift(deliveryAddressData);\n }\n\n // Return the line_data array when we have actual entries\n return line_data;\n }\n\n // Get the line data we've appended to the product row element\n function getLineDataFromProductRow ($create_order__cart_product) {\n return $create_order__cart_product.data('create-order-line-data');\n }\n\n // Get the human readable value from the input\n function getReadableValueFromInput ($input) {\n if ($input == null) {\n return;\n }\n\n if (!$input.data('label')) {\n return;\n }\n\n var value;\n\n if ($input.is('select')) {\n value = $input.find('option').eq($input.get(0).selectedIndex).text();\n } else if ($input.is(':checkbox') || $input.is(':radio')) {\n if ($input.prop('checked')) {\n value = defaults.labels.yes;\n } else {\n value = defaults.labels.no;\n }\n } else {\n value = $input.val();\n }\n\n return value;\n }\n\n // Get the actual form value from the input\n function getValueFromInput ($input) {\n if ($input == null) {\n return;\n }\n\n var value;\n\n if ($input.is(':checkbox') || $input.is(':radio')) {\n value = $input.prop('checked');\n } else {\n value = $input.val();\n }\n\n return value;\n }\n\n function setInputValueFromLineData (line_data, $create_order__cart) {\n var create_order__cart_index = $create_order__cart.find(\n 'input[type=hidden].create_order__cart-line-index');\n\n if (create_order__cart_index.length > 0) {\n create_order__cart_index.val(line_data.index);\n }\n\n for (var key in line_data.fields) {\n if (!line_data.fields.hasOwnProperty(key)) {\n return;\n }\n\n var field = line_data.fields[key]\n , input = $('[name=' + field.name + ']');\n\n if (input.is(':checkbox') || input.is(':radio')) {\n input.prop('checked', field.value);\n\n continue;\n }\n\n input.val(field.value).trigger('change');\n\n if (input.is('select')) {\n input.trigger('change.select2');\n input.trigger('chosen:updated');\n }\n }\n }\n\n function generateRowFromLineData (lineData, notDynamic) {\n if (!('fields' in lineData)) {\n return;\n }\n\n var productId = '';\n for (var i = 0; i < lineData.fields.length; i++) {\n if (lineData.fields[i].name === 'product') {\n productId = lineData.fields[i].value;\n break;\n }\n }\n\n var row = '';\n\n var dimension_field_names = [\n 'dimension-length',\n 'dimension-width',\n 'dimension-height'\n ];\n var dimension_fields = lineData.fields.filter(function (element) {\n return dimension_field_names.indexOf(element.name) !== -1 &&\n element.value;\n });\n\n var pickupAddressTitle = '';\n var deliveryAddressTitle = '';\n\n var pickupAddressTitleObj = getArrayElementByObjectPropertyValue(\n lineData.fields, 'name', 'address-pickup-title');\n if (pickupAddressTitleObj) {\n pickupAddressTitle = pickupAddressTitleObj.readable_value;\n }\n var deliveryAddressTitleObj = getArrayElementByObjectPropertyValue(\n lineData.fields, 'name', 'address-delivery-title');\n if (deliveryAddressTitleObj) {\n deliveryAddressTitle = deliveryAddressTitleObj.readable_value;\n }\n\n // Append all properties to the table row\n for (var index = 0; index < lineData.fields.length; index++) {\n var field = lineData.fields[index];\n\n if (!('readable_value' in field) || field.readable_value == null) {\n continue;\n } else if (dimension_field_names.indexOf(field.name) !== -1) {\n // The first time we run into a dimension field, render the combined field. After that, just ignore it.\n if (dimension_fields) {\n row += '' + dimension_fields.map(function (element) {\n return element.readable_value;\n }).join(' x ') + '';\n dimension_fields = undefined;\n }\n continue;\n }\n if (field.name === 'pickup_address_place') {\n field.readable_value = '' +\n field.readable_value + '';\n }\n if (field.name === 'delivery_address_place') {\n field.readable_value = '' +\n field.readable_value + '';\n }\n\n if (field.name === 'pickup_contact_email_link' ||\n field.name === 'pickup_contact_email_updates' ||\n field.name === 'pickup_contact_email_shipmentlabel' ||\n field.name === 'delivery_contact_email_link' ||\n field.name === 'delivery_contact_email_updates') {\n continue;\n }\n\n row += '' + (field.readable_value || '-') + '';\n }\n\n // Append both edit and delete actions for the current line\n row += '';\n row += '';\n\n // Add properties inside a hidden field, so we can determine if we should fetch a new pricing indication.\n const KEYS = ['product', 'amount', 'weight', 'dimension-length', 'dimension-width', 'dimension-height'];\n row += ``;\n row += '';\n row += '';\n row += '
';\n row += '
';\n row += '
';\n row += '
';\n row += '
';\n row += '';\n row += '
';\n row += '
';\n row += '';\n row += '
';\n row += '
';\n row += '
';\n row += '
';\n row += '
';\n row += '
';\n row += '';\n row += '
';\n row += '
';\n row += '
';\n row += '';\n\n return row;\n }\n\n function getArrayElementByObjectPropertyValue (\n array, propertyKey, propertyValue) {\n for (var i = 0, length = array.length; i < length; i++) {\n if (array[i][propertyKey] == propertyValue) {\n var returnVal = array[i];\n array.splice(i, 1);\n return returnVal;\n }\n }\n }\n\n // Helper function for removing duplicate rows (this happens when an user edit's a line from it's cart).\n function cleanupDuplicateRows ($create_order__cart, line_data) {\n var create_order__cart_product = $create_order__cart.find(\n '.create-order__cart-product').filter('#' + line_data.index);\n if (create_order__cart_product.length === 0) {\n return;\n }\n\n create_order__cart_product.remove();\n }\n\n function addProductFromCart (create_order__cart_product, inputs, line_data) {\n if (create_order__cart_product == null) {\n return;\n }\n\n var create_order__cart_table = create_order__cart_product.closest(\n '.create-order__cart-table');\n var create_order__cart = create_order__cart_product.closest(\n '.create-order__cart');\n var route = create_order__cart.data('add-to-cart-route');\n if (route == null) {\n return;\n }\n\n // Only accept synchronous requests\n if (create_order__cart.data('ajax_request_pending')) {\n console.error('Unable to perform multiple request');\n return;\n }\n\n line_data.fields.push({\n 'name': 'line_id',\n 'value': $('#line_id').val(),\n });\n\n // Fire up the ajax request, within this request we posting the current product to the backend\n $.ajax({\n type: 'POST',\n url: route,\n data: line_data.fields,\n beforeSend: function () {\n // Prevent multiple AJAX requests for adding products to cart\n create_order__cart.data('ajax_request_pending', true);\n $('.js-save-goods').addClass('button--disabled');\n $(\"input,select\").parents(\".form-item\").removeClass(\"form-item--invalid\");\n $(\".order-create-errors\").hide().find(\"ul\").empty();\n },\n error: function (jqXHR) {\n create_order__cart_table.find('tr.ajax-is-active').remove();\n\n switch (jqXHR.status) {\n case 422:\n if(jqXHR.responseJSON.errors) {\n $(\".order-create-errors\").\n show().\n find(\"ul\").\n empty();\n\n Object.keys(jqXHR.responseJSON.errors).\n forEach(function (key) {\n $(\"input[name=\" + key +\n \"],select[name=\" + key + \"]\").\n parents(\".form-item\").\n addClass(\"form-item--invalid\");\n $(\".order-create-errors\").\n find(\"ul\").\n append(\"
  • \" +\n jqXHR.responseJSON.errors[key] +\n \"
  • \");\n });\n\n $('html, body').finish().animate({\n scrollTop: 0\n });\n\n }else{\n window.alert(defaults.messages.error_create_callback);\n }\n break;\n default:\n window.alert(defaults.messages.error_create_callback);\n break;\n }\n },\n success: function (data) {\n $(\"input,select\").parents(\".form-item\").removeClass(\"form-item--invalid\");\n $(\".order-create-errors\").hide().find(\"ul\").empty();\n\n // Reset the product dropdown\n $('#product').val('').trigger('change');\n $(window).trigger('resize');\n\n // Clear the fields\n clearInputs(inputs);\n\n setLineId(create_order__cart_product, data);\n\n // Generate a new line id\n setCreateOrderCartIndex(create_order__cart);\n\n // Reset the line_id value\n $('#line_id').val('');\n },\n complete: function () {\n // Disable asynchronous requests blocker\n create_order__cart.data('ajax_request_pending', false);\n\n create_order__cart_table.find('tr.ajax-is-active').\n removeClass('ajax-is-active');\n\n $('.js-save-goods').removeClass('button--disabled');\n }\n });\n }\n\n // Callback function for setting the lineId after a product has been successfully added\n function setLineId ($create_order__cart_product, data) {\n\n if (!('line_id' in data)) {\n return;\n }\n\n var line_data = $create_order__cart_product.data('create-order-line-data');\n if (line_data == null) {\n return;\n }\n\n // Append the line_id key to line_data variable\n line_data['line_id'] = data.line_id;\n\n line_data.fields.push({\n 'name': 'line_id',\n 'value': data.line_id,\n });\n\n // Update the current line data with the new line_id\n $create_order__cart_product.data('create-order-line-data');\n }\n\n function removeProductFromCart (create_order__cart_product) {\n var line_data = getLineDataFromProductRow(create_order__cart_product);\n var create_order__cart = create_order__cart_product.closest(\n '.create-order__cart');\n\n var route = create_order__cart.data('remove-from-cart-route');\n if (route == null) {\n return;\n }\n\n // Only accept synchronous requests\n if (create_order__cart.data('ajax_request_pending')) {\n console.error('Unable to perform multiple request');\n return;\n }\n\n if (line_data.line_id == null) {\n return;\n }\n\n $.ajax({\n type: 'POST',\n url: route,\n data: {\n line_id: line_data.line_id,\n },\n beforeSend: function () {\n // Prevent asynchronous requests\n create_order__cart.data('ajax_request_pending', true);\n\n create_order__cart_product.addClass('ajax-is-active');\n },\n error: function () {\n window.alert(defaults.messages.error_removing_callback);\n },\n success: function () {\n create_order__cart_product.remove();\n window.validateGoodsAllowed();\n },\n complete: function () {\n // Disable asynchronous requests blocker\n create_order__cart.data('ajax_request_pending', false);\n\n create_order__cart_product.removeClass('ajax-is-active');\n }\n });\n }\n\n function editProductFromCart ($create_order__cart_product) {\n $create_order__cart_product.addClass('js-create-order__cart-product--edit');\n $create_order__cart_product.siblings().\n removeClass('js-create-order__cart-product--edit');\n\n var create_order__cart = $create_order__cart_product.closest(\n '.create-order__cart');\n\n var line_data = getLineDataFromProductRow($create_order__cart_product);\n\n $('#line_id').val(line_data.line_id);\n\n setInputValueFromLineData(line_data, create_order__cart);\n\n $('#product_details').show();\n $(window).trigger('resize');\n }\n\n function setCreateOrderConfirm ($create_order__cart) {\n\n // Check if\n if ($create_order__cart == null) {\n return;\n }\n\n var create_order__confirms = $create_order__cart.find(\n '.create-order__confirm').not('.js-create-order__confirm--is-ready');\n if (create_order__confirms.length === 0) {\n return;\n }\n\n create_order__confirms.each(function () {\n var create_order__confirm = $(this);\n var create_order__confirm_toggle = create_order__confirm.find(\n '.create-order__confirm-dropdown-toggle');\n\n // Abort if we have not the required trigger elements\n if (create_order__confirm_toggle.length === 0) {\n return;\n }\n\n create_order__confirm_toggle.on({\n 'click': function (event) {\n event.preventDefault();\n\n create_order__confirm.toggleClass(\n 'js-create-order__confirm--is-open');\n }\n });\n\n create_order__confirm.addClass('js-create-order__confirm--is-ready');\n });\n }\n\n setCreateOrderConfirm($('body'));\n\n var cachedAvailableShipmentTypes = [];\n window.validateGoodsAllowed = function (availableShipmentTypes) {\n var ids = [];\n if (!availableShipmentTypes) {\n availableShipmentTypes = cachedAvailableShipmentTypes;\n }\n cachedAvailableShipmentTypes = availableShipmentTypes;\n\n for (var index = 0; index < availableShipmentTypes.length; index++) {\n ids.push(availableShipmentTypes[index].id * 1);\n }\n\n var invalidGoodCount = 0;\n $('.create-order__cart-table tbody tr').each(function () {\n var $this = $(this);\n if ($this.data('productId') && ids.indexOf($this.data('productId') * 1) > -1) {\n $this.removeClass('invalid-good');\n } else {\n $this.addClass('invalid-good');\n invalidGoodCount++;\n }\n });\n\n if (invalidGoodCount) {\n $('.js-save-goods').addClass('button--disabled');\n $('.create-order__cart-invalid-good').removeAttr('hidden');\n } else {\n $('.js-save-goods').removeClass('button--disabled');\n $('.create-order__cart-invalid-good').attr('hidden', true);\n }\n }\n\n})(window.jQuery(window), window.jQuery(document), window.jQuery);\n","/* eslint-disable one-var-declaration-per-line */\n/* eslint-disable one-var */\n/* eslint-disable eqeqeq */\n/* eslint-disable max-len */\n/* eslint-disable no-underscore-dangle */\n/* eslint-disable no-plusplus */\n/* eslint-disable comma-dangle */\n/* eslint-disable operator-linebreak */\n/* eslint-disable no-param-reassign */\n/* eslint-disable prefer-template */\n/* eslint-disable vars-on-top */\n/* eslint-disable no-unused-vars */\n/* eslint-disable object-shorthand */\n/* eslint-disable no-use-before-define */\n/* eslint-disable prefer-arrow-callback */\n/* eslint-disable no-undef */\n/* eslint-disable no-var */\n/* eslint-disable wrap-iife */\n/* eslint-disable func-names */\n/* eslint-disable space-before-function-paren */\n\n(function(window, $) {\n /** @typedef {{\n \"id\": number,\n \"remarks\": string,\n \"companyName\": string,\n \"postalCode\": string,\n \"houseNumber\": number,\n \"houseNumberAddition\": string,\n \"street\": string,\n \"place\": string,\n \"country\": string,\n \"remarksDelivery\": string,\n \"remarksPickup\": string,\n \"defaultAddress\": false,\n \"phoneNumber\": string,\n \"email\": string,\n \"department\": string,\n \"contact\": string,\n \"lat\": number,\n \"lng\": number,\n \"delivery\": boolean,\n \"pickup\": boolean,\n \"debtorId\": number,\n \"defaultDeliveryAddress\": boolean\n }} */\n var DebtorAddress;\n\n /** @type {{\n $debtorSelect: jQuery,\n debtorAddresses: {\n pickup:DebtorAddress[],\n delivery:DebtorAddress[]\n }\n }} */\n var $scope = this;\n\n $scope.debtorAddresses = { pickup: {}, delivery: {} };\n $scope.goodAddresses = { pickup: {}, delivery: {} };\n\n window.setCreateOrderDebtorAddressesAutofill = function() {\n var $debtorSelect = $('#debtor');\n\n if ($debtorSelect.length === 0) {\n return;\n }\n\n $debtorSelect.on('change', function(event) {\n event.preventDefault();\n\n getAddresses($debtorSelect);\n\n $debtorSelect.addClass('js-create-order__autofill--is-ready');\n });\n\n $('select.js-pickup-address-id, select.js-delivery-address-id').on('change', function() {\n var $currentElement = $(this);\n fillAddressPropertiesForAddress($currentElement.val(), $currentElement.parent().parent());\n });\n };\n\n window.getAddresses = function() {\n $('#product').on('change', function() {\n var debtorId = $('#debtor').val();\n var orderId = $('.create-order').data('order-id');\n var route = $('.js-pickup').data('create-order-grouped-addresses-route');\n\n if (!route || !debtorId || !orderId) {\n return;\n }\n\n route = route.replace('debtorId', debtorId).replace('orderId', orderId);\n\n $.ajax({\n type: 'get',\n url: route,\n beforeSend: function() {\n setAjaxLoader('address-ajax-loader');\n },\n error: function(jqXHR, textStatus, error) {\n // eslint-disable-next-line no-console\n console.error(error);\n },\n success: function(data, textStatus, jqXHR) {\n $scope.goodAddresses = data;\n updateOptGroupSelect($('#good-pickup-select'), $('#order-pickup-select'), data.pickup);\n updateOptGroupSelect($('#good-delivery-select'), $('#order-delivery-select'), data.delivery);\n },\n complete: function(jqXHR, textStatus) {\n unsetAjaxLoader('address-ajax-loader');\n },\n });\n });\n };\n\n function updateOptGroupSelect(selectGoodElement, selectOrderElement, addressGroups) {\n if (selectGoodElement.length < 1 && Object.keys(addressGroups).length < 1) {\n return;\n }\n\n selectGoodElement.empty();\n selectGoodElement.append('');\n\n for (let index = 0; index < result.length; index++) {\n const transportType = result[index];\n\n const option = document.createElement('option');\n option.value = transportType.id;\n option.selected = selectedValue === transportType.id;\n option.innerText = transportType.description;\n option.dataset.config = JSON.stringify(transportType);\n\n $select.append(option);\n }\n\n $select.prop('disabled', false);\n $select.trigger('change');\n }\n\n function fillContacts (result, default_contact) {\n var input = $('.js-debtor-contact');\n var selectedValue = input.data('selected');\n if (selectedValue == '' && default_contact) {\n selectedValue = default_contact;\n }\n\n input.empty();\n input.append('');\n\n for (var index = 0; index < result.length; index++) {\n var selected = selectedValue === result[index].id\n ? 'selected=\"selected\"'\n : '';\n input.append(\n '');\n }\n\n input.prop('disabled', false);\n input.trigger('change');\n }\n\n function fillReferences (result, default_reference) {\n var input = $('.js-reference');\n var selectedValue = input.data('selected');\n if (selectedValue == '' && default_reference) {\n selectedValue = default_reference;\n }\n\n input.empty();\n input.append('');\n\n for (var index = 0; index < result.length; index++) {\n var selected = selectedValue === result[index].id\n ? 'selected=\"selected\"'\n : '';\n input.append(\n '');\n }\n\n input.prop('disabled', false);\n input.trigger('change');\n }\n\n function fillAdrs(adrOptions) {\n var adrField = document.querySelector('select[name=adr_unnumber]');\n if (!adrField) {\n return;\n }\n adrField.innerHTML = \"\";\n for (var i=0; i *');\n }\n };\n})(window.jQuery);\n","(function (win, doc, $) {\n\n $.ajaxSetup({headers: {'X-CSRF-TOKEN': $('meta[name=\"csrf-token\"]').attr('content')}});\n\n window.setCreateOrderPreSubmit = function () {\n\n var create_orders = $('.create-order');\n\n if (create_orders.length === 0) {\n return;\n }\n\n $('#synopsis-modal button[type=submit]').on('click', function () {\n create_orders.submit();\n });\n\n create_orders.each(function () {\n var create_order = $(this);\n var create_order__pre_submit = create_order.find('.create-order__pre-submit');\n\n var form = create_order__pre_submit.closest('form');\n\n if (create_order__pre_submit.length === 0 || form.length === 0) {\n return;\n }\n\n var submit_route = form.data('partial-save');\n if (submit_route == null) {\n return;\n }\n\n create_order__pre_submit.on({\n 'click': function (event) {\n event.preventDefault();\n var submit = $(this);\n\n // Prevent action since an ajax request is still pending, this class will be removed if all requests are disabled\n if (submit.is(':disabled') || form.data('ajax_request_pending')) {\n return;\n }\n\n var create_order__fieldset = submit.closest('.create-order__fieldset');\n var $fields = create_order__fieldset.find('select, textarea, input');\n\n // Trim all fields\n $fields.each(function() {\n $(this).val($.trim($(this).val()));\n });\n\n var firstInvalidField = null;\n\n $fields.filter(':visible').each(function () {\n var res = this.checkValidity();\n if (! res) {\n var $this = $(this);\n firstInvalidField = firstInvalidField || this;\n $this.parents(\".form-item\").addClass('form-item--invalid');\n $this.one('input', function () {\n $this.parents(\".form-item\").removeClass('form-item--invalid');\n });\n }\n });\n\n if (firstInvalidField) {\n firstInvalidField.focus();\n return;\n }\n\n // @todo determine logic for required fields\n // Block pre submit if we have inputs with an error or if any required fields are required\n // This section is temporary disabled since we haven't decided the validation logic\n // if ((inputs.length != inputs.filter('create-order__input-wrapper--is-valid').length) || hasEmptyInputs(inputs) === false) {\n // focusCreateOrderFieldset(create_order__fieldset);\n\n // event.stopImmediatePropagation();\n // console.log('Not all required fields are filled or valid, please check again...');\n // return;\n // }\n\n $.ajax({\n type: 'POST',\n url: submit_route,\n data: $fields.serialize(),\n beforeSend: function () {\n form.addClass('js-create-order--pre-submit-is-active');\n submit.prop('disabled', true);\n // Prevent asynchronous requests\n form.data('ajax_request_pending', true);\n $(\"input,select\").parents(\".form-item\").removeClass(\"form-item--invalid\");\n $(\".order-create-errors\").hide().find(\"ul\").empty();\n },\n error: function (jqXHR, textStatus, error) {\n // Show the error to the front-end\n\n switch (jqXHR.status) {\n case 422:\n if(jqXHR.responseJSON.errors) {\n $(\".order-create-errors\").\n show().\n find(\"ul\").\n empty();\n \n Object.keys(jqXHR.responseJSON.errors).\n forEach(function (key) {\n $(\"input[name=\" + key +\n \"],select[name=\" + key + \"]\").\n parents(\".form-item\").\n addClass(\"form-item--invalid\");\n $(`.dropzone[data-validation_field=${key}]`).addClass(\"error\");\n $(\".order-create-errors\").\n find(\"ul\").\n append(\"
  • \" +\n jqXHR.responseJSON.errors[key] +\n \"
  • \");\n });\n }else{\n alert(jqXHR.responseJSON.message)\n }\n break;\n default:\n window.alert(error);\n break;\n }\n\n focusCreateOrderFieldset(create_order__fieldset);\n },\n success: function (data, textStatus, jqXHR) {\n $(\"input,select\").parents(\".form-item\").removeClass(\"form-item--invalid\");\n $(\".order-create-errors\").hide().find(\"ul\").empty();\n\n if (data.orderComplete) {\n\n $('#popup_pickup_instructions').hide();\n $('#popup_delivery_instructions').hide();\n\n $('#order-articles').empty();\n $.each(data.order.tasks, function (index, task) {\n\n var goods = '
    \\n' +\n '\\n' +\n '
    \\n';\n\n $.each(task.goods, function (index, good) {\n goods += good + '
    ';\n });\n\n goods += '
    ';\n\n $('#order-tasks').append('
    \\n' +\n '\\n' +\n '
    ' +\n task.name + '
    \\n' +\n task.address + '
    \\n' +\n task.zipcode + ' ' + task.city + '

    \\n' +\n task.date + ' ' + task.time +\n '
    \\n' +\n '
    \\n'\n + goods +\n '
    \\n' +\n '\\n' +\n '
    ' +\n task.instructions +\n '
    \\n' +\n '
    ' +\n '
    '\n );\n });\n\n $.magnificPopup.open({\n items: {\n src: '#synopsis-modal'\n },\n type: 'inline'\n });\n return;\n }\n\n if (data.order_id) {\n $('.create-order').data('order-id', data.order_id);\n }\n\n // Get the index of the current fieldset, this fieldset is the same element we use as accordion item\n var index = create_order__fieldset.index();\n var accordion = create_order__fieldset.closest('.accordion');\n\n $(document).trigger('accordion.enableItem', [accordion, index + 1]);\n $(document).trigger('accordion.toggleItem', [accordion, index + 1]);\n },\n complete: function (jqXHR, textStatus) {\n submit.prop('disabled', false);\n\n if($(\"#product option\").length === 1){\n $(\"#product\").trigger('change');\n }\n // Set the indicator class on the wrapper element\n form.removeClass('js-create-order--pre-submit-is-active');\n\n // Disable asynchronous requests blocker\n form.data('ajax_request_pending', false);\n }\n });\n }\n });\n });\n }\n\n // Helper function to scroll to the current fieldset\n function focusCreateOrderFieldset(create_order__fieldset) {\n\n if (create_order__fieldset == null) {\n return;\n }\n\n var offset = create_order__fieldset.offset();\n\n if (isNaN(parseFloat(offset.top))) {\n return;\n }\n\n $('html, body').finish().animate({\n scrollTop: 0\n });\n }\n\n})(window.jQuery(window), window.jQuery(document), window.jQuery);\n","/* jshint esversion: 6 */\n\n(function (win, doc, $) {\n\n $.ajaxSetup({headers: {'X-CSRF-TOKEN': $('meta[name=\"csrf-token\"]').attr('content')}});\n const KEYS_TO_OBSERVE = [\n 'debtor',\n 'transporttype',\n 'distance',\n 'goods[]',\n 'pickup_date',\n 'pickup_time_from',\n 'pickup_time_to',\n 'delivery_date',\n 'delivery_time_from',\n 'delivery_time_to',\n 'pickup_address_country',\n 'delivery_address_country',\n ];\n const KEYS_TO_SEND = [\n 'debtor',\n 'transporttype',\n 'distance',\n 'pickup_date',\n 'pickup_time_from',\n 'pickup_time_to',\n 'delivery_date',\n 'delivery_time_from',\n 'delivery_time_to',\n 'pickup_address_country',\n 'delivery_address_country',\n ];\n\n window.setCreateOrderPricingSidebar = () => {\n const trans = window.trans;\n const PRICING_SIDEBAR_KEY = 'pricing-sidebar.state';\n const MENU_SIDEBAR_KEY = 'menu.state';\n const $toggleButton = $('.portal__sidebar-pricing #js__toggle-sidebar-right');\n const $menuSidebar = $('.portal__sidebar__menu');\n const $pricingSidebar = $('.portal__sidebar-pricing');\n const $createOrder = $('.create-order');\n const $debtor = $createOrder.find('#debtor');\n const currency = new Intl.NumberFormat('nl-NL', {style: 'currency', currency: 'EUR'});\n let state = window.localStorage.getItem(PRICING_SIDEBAR_KEY);\n let lastValues = [];\n\n // Return if the pricing sidebar is not present.\n if ($createOrder.length === 0) {\n return;\n }\n\n // Handles the state of the menu sidebar.\n function setState(newState) {\n if (!['open', 'compact', 'hidden'].includes(newState)) {\n console.log('Invalid state for pricing sidebar:', newState);\n return;\n }\n state = newState;\n window.localStorage.setItem(PRICING_SIDEBAR_KEY, state);\n $pricingSidebar\n .toggleClass('portal__sidebar-pricing--is-hidden', state === 'hidden')\n .toggleClass('portal__sidebar-pricing--is-compact', state === 'compact');\n }\n\n // Add event listener for the pricing sidebar.\n window.addEventListener('storage', function () {\n setState(window.localStorage.getItem(PRICING_SIDEBAR_KEY));\n });\n\n // Handles the state of the menu sidebar.\n function setMenuState(newState) {\n if (!['open', 'compact'].includes(newState)) {\n console.log('Invalid state for menu:', newState);\n return;\n }\n state = newState;\n window.localStorage.setItem(MENU_SIDEBAR_KEY, state);\n $menuSidebar.toggleClass('portal__sidebar__menu--is-compact', state === 'compact');\n }\n\n // Determine the state of the sidebar based on the window width.\n function determineState(windowWidth) {\n if (state === 'hidden') {\n return;\n }\n\n if (windowWidth > 1711) {\n setMenuState('open');\n setState('open');\n } else if (windowWidth > 1330) {\n setMenuState('compact');\n setState('open');\n } else {\n setMenuState('compact');\n setState('compact');\n }\n }\n determineState(window.innerWidth);\n\n // Add event listener for the window width\n window.addEventListener('resize', function () {\n determineState(window.innerWidth);\n });\n\n // Determine the state of the sidebar based on the selected debtor.\n $debtor.on('change', () => {\n const showRates = $debtor.find(':selected').data('show-rates');\n setState(showRates ? 'open' : 'hidden');\n });\n\n $debtor.trigger('change');\n\n // Open or close the pricing sidebar when the toggle button is clicked.\n $toggleButton.on('click', () => setState(state === 'open' ? 'compact' : 'open'));\n\n // Update the pricing sidebar when the create order form input values changes.\n $createOrder.on('change', debounce(() => {\n let values = $createOrder.serializeArray();\n\n // Filter out all the keys that are not in the KEYS_TO_OBSERVE array.\n values = values.filter((value) => KEYS_TO_OBSERVE.includes(value.name));\n\n // Check whether the values have changed.\n if (JSON.stringify(values) === JSON.stringify(lastValues)) {\n return;\n }\n\n // Update the last values.\n lastValues = values;\n\n // Determine if we should continue to fetch or not.\n if (\n values.some(value => value.name === 'distance' && value.value === '0') ||\n values.some(value => value.name === 'transporttype' && value.value === '')\n ) {\n $('#price-indication-transport-type-message').show();\n return;\n }\n\n // Only send the keys that are in the KEYS_TO_SEND array.\n values = values.filter(value => KEYS_TO_SEND.includes(value.name));\n\n // Filter out duplicate keys.\n // For example, pickup_address_country and delivery_address_country does exist twice in the payload,\n // which causes the backend to get the wrong value.\n const alreadyIncludedKeys = [];\n values = values.filter((value) => {\n if (alreadyIncludedKeys.includes(value.name)) {\n return false;\n }\n alreadyIncludedKeys.push(value.name);\n return true;\n });\n\n // Update the price indication.\n fetch(`/order-pricing?${$.param(values)}`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n }\n })\n .then(response => response.json())\n .then(data => {\n if (data.pricing.length > 0) {\n // Remove the old price indication.\n $('#price-indication-transport-type-message').hide();\n $('.sidebar-right__pricing').empty();\n $('#price-indication-message').empty();\n $('#suggestion-container').empty();\n\n data.pricing.forEach(pricing => {\n\n var html = '
    ';\n\n if (pricing.title) {\n html += `
    ${pricing.title}
    `;\n }\n\n if (pricing.description) {\n html += `${pricing.description}`;\n }\n\n if (pricing.items.length > 0) {\n pricing.items.forEach(item => {\n html += `\n
    \n
    \n ${item.label || ''}\n ${currency.format(item.price/100)}\n
    \n
    \n ${item.description || ''}\n
    \n
    `;\n });\n }\n setState('open');\n determineState(window.innerWidth);\n\n html += '
    ';\n $('.sidebar-right__pricing').append(html);\n\n });\n }\n $('#price-indication-total').text(currency.format(data.total_price/100));\n\n if (data.total_price_description) {\n $('#price-indication-total-label').text(trans('Ritprijs totaal') + \"*\");\n $('#total-price-description').text(\"*\" + data.total_price_description);\n } else {\n $('#price-indication-total-label').text(trans('Ritprijs totaal'));\n $('#total-price-description').empty();\n }\n\n if (data.suggested_transport_type) {\n const suggestion = data.suggested_transport_type;\n let suggestionHtml = $('#suggestion').html();\n suggestionHtml = suggestionHtml.replaceAll('{transportType}', suggestion.name);\n suggestionHtml = suggestionHtml.replaceAll('{savings}', currency.format(suggestion.difference / -100));\n suggestionHtml = suggestionHtml.replaceAll('{id}', suggestion.id);\n $('#suggestion-container').html(suggestionHtml);\n } else if (data.is_best_option) {\n $('#suggestion-container').html($('#suggestion-best-option').html());\n }\n })\n .catch(() => {\n $('#suggestion-container').empty();\n $('.sidebar-right__pricing').empty();\n $('#price-indication-total').empty();\n $('#price-indication-total-label').empty();\n $('#total-price-description').empty();\n $('#price-indication-transport-type-message').hide();\n $('#price-indication-message').text(trans('Er kan geen prijsindicatie worden gegeven voor deze order. Wilt u toch een indicatie neem dan contact op met onze Customer Service. (cs@schotpoort.nl).'));\n });\n }, 500));\n\n };\n\n const debounce = (callback, wait) => {\n let timeoutId = null;\n return (...args) => {\n window.clearTimeout(timeoutId);\n timeoutId = window.setTimeout(() => {\n callback.apply(null, args);\n }, wait);\n };\n };\n})(window.jQuery(window), window.jQuery(document), window.jQuery);\n","var debtorProducts = {};\n\n(function (win, doc, $) {\n var product_details = $('#product_details');\n\n window.setCreateOrderAutofillProducts = function () {\n product_details.hide();\n\n $('#product').on({\n 'change': function () {\n //\n },\n 'change.select2': function () {\n getProductDetails(this.value, true);\n },\n });\n };\n\n var cachedShipmentTypes = [];\n\n window.updateDebtorTransportTypeShipmentTypes = function (debtorId, transportTypeId) {\n if (!debtorId || !transportTypeId) {\n fillProducts([]);\n return;\n }\n var cached = cachedShipmentTypes[debtorId + ':' + transportTypeId];\n if (cached) {\n fillProducts(cached);\n return;\n }\n $.getJSON({\n type: 'GET',\n url: '/debtors/' + parseInt(debtorId) + '/products',\n data: {\n transport_type_id: transportTypeId,\n },\n beforeSend: function () {\n setAjaxLoader('product-ajax-loader');\n },\n error: function () {\n fillProducts([]);\n },\n success: function (data) {\n cachedShipmentTypes[debtorId + ':' + transportTypeId] = data;\n fillProducts(data);\n },\n complete: function () {\n unsetAjaxLoader('product-ajax-loader');\n },\n });\n };\n\n var productPropToField = {\n amount: $('#product-amount', product_details),\n weight: $('#product_weight_value', product_details),\n length: $('#product_length_value', product_details),\n width: $('#product_width_value', product_details),\n height: $('#product_height_value', product_details),\n description: $('#product-description', product_details),\n stackable: $('input[name=stackable]', product_details),\n fragile: $('input[name=fragile]', product_details),\n temperature_from: $('input[name=temperature_from]', product_details),\n temperature_to: $('input[name=temperature_to]', product_details),\n /**\n * Use the `adr` prop (which also contains the adr id) to set the value of the select2 dropdown.\n * This prevents JS from setting the select2 with the adr class, which will then set the wrong ADR option.\n */\n adr: $('select[name=adr_unnumber]', product_details),\n adr_classification: $('select[name=adr_classification]', product_details),\n adr_id: $('select[name=adr_id]', product_details),\n reference: $('input[name=reference]', product_details),\n identification: $('input[name=barcode]', product_details),\n\n };\n\n function fillProducts(result) {\n // Reset local product array\n debtorProducts = {};\n\n var $productSelect = $('select[name=product]');\n $productSelect.empty();\n if (result.length !== 1) {\n $productSelect.append(document.createElement('option'));\n }\n\n for (var index = 0; index < result.length; index++) {\n var description = (result[index].description) ? ' - ' +\n result[index].description : '';\n\n var option = document.createElement('option');\n option.textContent = result[index].name + description;\n option.value = result[index].id;\n option.selected = result.length === 1;\n\n $productSelect.append(option);\n\n // Store products in local array\n debtorProducts[result[index].id] = result[index];\n }\n\n $productSelect.trigger('change');\n\n window.validateGoodsAllowed(result);\n }\n\n function getProductDetails(productId, resetValues) {\n // Retrieve product details from local array\n if (productId && typeof(debtorProducts[productId] !== 'undefined')) {\n\n var productDetails = debtorProducts[productId];\n\n // Loop through show/hide fields and show or hide them accordingly (showFieldName: stackable, fragile, temperature, etc)\n for (var showGroupName in productDetails.show) {\n\n if (! productDetails.show.hasOwnProperty(showGroupName)) {\n continue;\n }\n\n $('#product_' + showGroupName, product_details).toggle(productDetails.show[showGroupName]);\n\n if (productDetails.show[showGroupName]) {\n $('#product_' + showGroupName + ' :input', product_details).attr('disabled', false);\n } else {\n $('#product_' + showGroupName + ' :input', product_details).attr('disabled', true);\n }\n }\n\n // Loop through readonly form groups and set state on input fields\n for (var readonlyGroupName in productDetails.readonly) {\n\n if (! productDetails.readonly.hasOwnProperty(readonlyGroupName)) {\n continue;\n }\n\n var $field = $('#product_' + readonlyGroupName + ' :input', product_details);\n\n if (productDetails.readonly[readonlyGroupName]) {\n $field.attr('readonly', true);\n if ($field.is(':checkbox')) {\n $field.attr('disabled', true);\n }\n } else {\n $field.removeAttr('readonly').removeAttr('disabled');\n }\n }\n\n // Custom readonly implementation for ADR select2\n $('#product_adr select', product_details).select2({\n disabled: productDetails.readonly.adr,\n });\n\n // Workaround to fill the fields without them being cleared instantly @TODO:SW-225\n if (resetValues) {\n setTimeout(function () {\n var isEditing = $('#line_id').val();\n\n $.each(productPropToField, function (key, $element) {\n if (! (key in productDetails)) {\n console.error('Property not defined');\n return true;\n }\n\n var editable = ! $element.prop('readonly') && ! $element.prop('disabled');\n\n // Skip override editable field values while editing\n if (isEditing && editable) {\n return;\n }\n\n if ($element.attr('type') === 'checkbox') {\n $element.attr('checked', productDetails[key]);\n } else {\n // Also skip override when field has value and is editable\n if ($element.val() && editable) {\n return;\n }\n $element.val(productDetails[key]);\n }\n\n if ($element.is('select')) {\n $element.trigger('change');\n }\n });\n }, 500);\n }\n\n product_details.show();\n } else {\n product_details.hide();\n }\n\n // Resize for accordion height calculation\n $(window).trigger('resize');\n }\n})(window.jQuery(window), window.jQuery(document), window.jQuery);\n","(function ($) {\n const $createOrder = $('.create-order');\n const $selectTransportType = $('.js-transporttype, .js-transport_type', $createOrder);\n const $selectDebtor = $('select[name=debtor]', $createOrder);\n const triggeredTypes = [];\n\n const getValues = function () {\n const debtor = $selectDebtor.val();\n const transportType = $selectTransportType.val();\n const transportTypeData = $selectTransportType.find(':selected')?.data('config');\n\n return {\n debtor: debtor,\n transportType: transportType,\n transportTypeData: transportTypeData,\n combined: [debtor, transportType].join('|'),\n };\n };\n\n const transportTypeUpdatedHandle = function () {\n const values = getValues();\n\n updateDebtorTransportTypeShipmentTypes(values.debtor, values.transportType);\n createOrderDocuments.updateState(values.transportTypeData);\n\n if (triggeredTypes.indexOf(values.combined) > -1) {\n return;\n }\n\n triggeredTypes.push(values.combined);\n\n setTimeout(function () {\n const currentValues = getValues();\n if (currentValues.combined !== values.combined) {\n console.info(\"Values changed\", {new: currentValues, old: values});\n return;\n }\n\n $.ajax({\n type: 'PUT',\n url: '/order-invoer/update-transporttype',\n data: {\n debtor: values.debtor,\n transport_type: values.transportType,\n },\n error: function (jqXHR, textStatus, error) {\n console.error(error);\n },\n });\n }, triggeredTypes.length === 1 ? 2000 : 1000);\n };\n\n $selectTransportType.on('change', transportTypeUpdatedHandle);\n})(window.jQuery);\n","(function (win, doc, $) {\n window.setCustomselect = function () {\n const config = {};\n const select2 = $('.js-select2');\n\n if (select2.length === 0) {\n return;\n }\n\n if (!select2.attr('multiple')) {\n config.placeholder = window.trans('Selecteer een optie');\n } else {\n config.closeOnSelect = false;\n }\n\n if (select2.attr('placeholder')) {\n config.placeholder = select2.attr('placeholder');\n }\n\n select2.select2(config);\n };\n}(window.jQuery(window), window.jQuery(document), window.jQuery));\n","(function (win, doc, $) {\n var $buttonsToDisable = $('[data-js-disable-ajax-running]');\n\n window.disableNextButtonOnAjaxCall = function () {\n $(document).ajaxStart(function () {\n $buttonsToDisable.prop('disabled', true);\n });\n\n $(document).ajaxStop(function () {\n $buttonsToDisable.prop('disabled', false);\n });\n };\n})(window.jQuery(window), window.jQuery(document), window.jQuery);\n","(function (win, doc, $) {\n\n $('.js-discard-button').on('click', function (event) {\n event.preventDefault();\n\n var confirmed = confirm(trans('Let op, weet u zeker dat u alle ingevulde waarden wilt wissen?'));\n if (confirmed) {\n window.location.href = $(this).attr('href');\n }\n });\n\n})(window.jQuery(window), window.jQuery(document), window.jQuery);\n","(function (win, doc, $) {\n\n window.editAddress = function () {\n\n $('.button-edit-order-address,.button-add-order-address,.button-close-order-address').click(\n toggleInputFields\n );\n\n function toggleInputFields(event) {\n event.preventDefault();\n event.stopPropagation();\n\n var $formItem = $(event.target).closest('.form-fieldset');\n $formItem.find('.glyph-edit,.glyph-checkmark, .glyph-chevron-right').toggle();\n\n var $fieldset = $(event.target).closest('fieldset');\n\n var $fields = $fieldset.find('.form-items--hidden');\n $fields.toggle(200, function () {\n $(window).trigger('resize');\n });\n }\n }\n\n})(window.jQuery(window), window.jQuery(document), window.jQuery);\n","(function ($) {\n window.setEmailPopup = function () {\n if (! window.Cookies) {\n return;\n }\n\n $(document).ready(function () {\n let stickyHeader = $('.sticky-end-header');\n\n if (Cookies.get('email-popup-closed') !== 'true' && stickyHeader.data('email-popup')) {\n $.magnificPopup.open({\n items: {\n src: '#email-popup',\n },\n type: 'inline',\n });\n\n $('.magnific-popup--close').on('click', function () {\n Cookies.set('email-popup-closed', true, {expires: 3});\n\n // When someone closes the popup, always show the notification bar\n Cookies.set('notification-bar-closed', false, {expires: 3});\n\n $.magnificPopup.close();\n\n // When the pop-up is closed, we're showing the notification bar\n var notificationBar = $('.notification-bar');\n notificationBar.removeClass('hide');\n });\n }\n });\n };\n})(window.jQuery);\n","(function (win, doc, $) {\n\n window.submitFormOnDropdownChange = function() {\n $('.search-year').on('change', function() {\n // Reset the datepickers after selecting a year\n $('.search-date-start').val('');\n $('.search-date-end').val('');\n\n this.form.submit();\n });\n };\n\n window.clearYearDropdownOnDateChange = function() {\n $('.search-date-start, .search-date-end').on('change', function() {\n $('.search-year').val(' ');\n setCustomselect();\n });\n };\n\n})(window.jQuery(window), window.jQuery(document), window.jQuery);\n","(function (win, doc, $) {\n window.showIEWarning = function () {\n var isIE11 = !!navigator.userAgent.match(/Trident.*rv\\:11\\./);\n\n if (isIE11) {\n $('.alert--ie').show();\n }\n }\n})(window.jQuery(window), window.jQuery(document), window.jQuery);\n","(function ($) {\n let busy = false;\n\n $('[data-module*=\"import-poller\"]').each(function () {\n const $root = $(this);\n const route = $root.data('importPollerRoute');\n const fieldMap = [];\n\n $('[data-import-poller-field]', $root).each(function () {\n fieldMap[this.dataset.importPollerField] = this;\n });\n\n function pollData() {\n // Let each poller wait for the previous to be finished\n if (busy) {\n return setTimeout(pollData, 500);\n }\n\n busy = true;\n\n $.get(route).then(function (data) {\n $.each(data, function (key, val) {\n if (fieldMap[key]) {\n fieldMap[key].innerText = val;\n }\n });\n\n if ([null, 'running'].indexOf(data.status) > -1) {\n setTimeout(pollData, 5000);\n $('.status', $root).addClass('status--is-' + data.status);\n } else {\n $('.status', $root).removeClass('status--is-running').addClass('status--is-' + data.status);\n }\n }).always(function () {\n busy = false;\n });\n }\n\n setTimeout(pollData, 3000);\n });\n})(window.jQuery);\n","(function (win, doc, $){\n\n window.setInputReset = function() {\n\n var $input_resets = $('.input-reset').not('js-input-reset--is-ready');\n\n if ($input_resets.length === 0) {\n return;\n }\n\n $input_resets.each(function () {\n\n var $input_reset = $(this);\n var $input_reset__toggle = $input_reset.find('.js-input-reset');\n var $input_elements = $input_reset.find(':input').not('.js-skip-input-reset');\n\n // Abort if we have no toggle within the current .input-reset element\n if ($input_reset__toggle.length === 0) {\n return;\n }\n\n $input_reset__toggle.on({\n click: function(event) {\n event.preventDefault();\n\n initInputReset($input_elements);\n }\n });\n\n $input_reset.addClass('js-input-reset--is-ready');\n });\n };\n\n function initInputReset(input_elements) {\n\n input_elements.each(function() {\n var $input_element = $(this);\n\n if ($input_element.is('select')) {\n var defaultOptionIndex = $input_element.find('.js-input-reset-default');\n $input_element.get(0).selectedIndex = defaultOptionIndex > -1 ? defaultOptionIndex : 0;\n\n // Trigger change so Select2 lib knows it has to refresh the searchable dropdown\n $input_element.trigger('change');\n } else if ($input_element.is(':checkbox') || $input_element.is(':radio')) {\n this.checked = (this.readOnly && this.required) || (this.disabled && this.required);\n } else {\n $input_element.val('');\n }\n });\n }\n\n})(window.jQuery(window), window.jQuery(document), window.jQuery);\n","(function (win, doc, $){\n\n window.setInputmask = function() {\n\n setInputMaskForDate();\n setInputMaskForTime();\n\n };\n\n function setInputMaskForDate() {\n\n var inputmasks = $('.inputmask.inputmask--date').not('.js-inputmask--is-ready');\n\n if (inputmasks.length === 0) {\n return;\n }\n\n inputmasks.each(function() {\n\n var inputmask = $(this);\n\n inputmask.inputmask({\n mask: '99-99-9999',\n placeholder: 'dd-mm-jjjj',\n });\n\n inputmask.addClass('js-inputmask--is-ready');\n\n });\n\n }\n\n function setInputMaskForTime() {\n\n var inputmasks = $('.inputmask.inputmask--time').not('.js-inputmask--is-ready');\n\n if (inputmasks.length === 0) {\n return;\n }\n\n inputmasks.each(function () {\n\n var inputmask = $(this);\n\n inputmask.inputmask({\n mask: '99:99',\n placeholder: 'hh:mm',\n });\n\n inputmask.addClass('js-inputmask--is-ready');\n\n });\n\n }\n\n})(window.jQuery(window), window.jQuery(document), window.jQuery);","(function (win, doc, $) {\n\n window.setMagnificPopup = function () {\n if (typeof $.fn.magnificPopup === 'undefined') {\n return;\n }\n\n // Bind the custom magnific popup translations\n setMagnificPopupTranslations();\n\n // Bind the custom magnific popup Close button\n setMagnificPopupCloseButton();\n\n // Bind open trigger button\n setMagnificTriggerButton();\n }\n\n // Setup the custom magnific popup translations\n function setMagnificPopupTranslations() {\n $.extend(true, $.magnificPopup.defaults, {\n tClose: window.trans('Sluiten'), // Alt text on close button\n tLoading: window.trans('Laden...'), // Text that is displayed during loading. Can contain %curr% and %total% keys\n gallery: {\n tPrev: window.trans('Vorige'), // Alt text on left arrow\n tNext: window.trans('Volgende'), // Alt text on right arrow\n tCounter: '%curr% van %total%' // Markup for \"1 of 7\" counter\n },\n image: {\n tError: 'De afbeelding kon niet worden geladen.' // Error message when image could not be loaded\n },\n ajax: {\n tError: 'De inhoud kon niet worden geladen.' // Error message when ajax request failed\n }\n });\n }\n\n // Setup an custom magnici popup close button\n function setMagnificPopupCloseButton() {\n var magnific_popup_close = $('.magnific-popup--close');\n\n if (magnific_popup_close.length === 0) {\n return;\n }\n\n magnific_popup_close.on({\n click: function () {\n $.magnificPopup.close();\n }\n });\n }\n\n function setMagnificTriggerButton() {\n $('.mfp-open-link').magnificPopup({\n type: 'inline',\n closeOnBgClick: true,\n showCloseBtn: false,\n closeOnContentClick: false,\n midClick: true, // allow opening popup on middle mouse click. Always set it to true if you don't provide alternative source.\n callbacks: {\n close: function () {\n document.body.dispatchEvent(new Event('popup_close'));\n },\n }\n });\n }\n\n})(window.jQuery(window), window.jQuery(document), window.jQuery);\n","/**\n * @constructor\n */\nfunction MapsApi() {\n this.geocoder = new google.maps.Geocoder();\n this.directionsService = new google.maps.DirectionsService();\n this.directionsDisplay = new google.maps.DirectionsRenderer({\n suppressInfoWindows: true,\n suppressMarkers: true,\n polylineOptions: {\n strokeColor: '#ffd400',\n },\n });\n};\n\n/**\n * Get coordinates from address.\n * @param address\n */\nMapsApi.prototype.getCoordinatesFromAddress = function (address) {\n return new Promise(function (resolve, reject) {\n this.geocoder.geocode({address: address}, function (results, status) {\n if (status === google.maps.GeocoderStatus.OK) {\n var coordinate = {\n lat: results[0].geometry.location.lat(),\n lng: results[0].geometry.location.lng(),\n };\n\n return resolve(coordinate);\n }\n\n return reject('Request to get address coordinates failed. [:address]'.replace(':address', address));\n });\n }.bind(this));\n};\n\n/**\n * Plot route on a map.\n * @param {Object} start\n * @param {Object} finish\n * @param {Map} map\n * @param {Function} errorCallback\n * @param {Function} distanceCallback\n */\nMapsApi.prototype.plotRoute = function (start, finish, map, errorCallback, distanceCallback) {\n this.directionsDisplay.setMap(map);\n\n var _this = this;\n\n this.directionsService.route({\n origin: start,\n destination: finish,\n travelMode: 'DRIVING',\n provideRouteAlternatives: true,\n }, function(response, status) {\n if (status === 'OK') {\n let fastestIndex = 0;\n for (let i = 0; i < response.routes.length; i++) {\n if (response.routes[i].legs[0].duration.value < response.routes[fastestIndex].legs[0].duration.value) {\n fastestIndex = i;\n }\n }\n _this.directionsDisplay.setDirections(response);\n _this.directionsDisplay.setRouteIndex(fastestIndex);\n // Return the distance in meters\n distanceCallback(response.routes[fastestIndex].legs[0].distance.value / 1000 | 0);\n return;\n }\n\n return errorCallback('Directions request failed due to :status'.replace(':status', status));\n });\n};\n","(function ($) {\n window.setNotificationBar = function () {\n if (! window.Cookies) {\n return;\n }\n\n var notificationBar = $('.notification-bar');\n var closeButton = $('.notification-bar__close-button');\n\n // Hide the notification bar when someone has closed it before\n if (Cookies.get('notification-bar-closed') === 'true') {\n notificationBar.addClass('hide');\n }\n\n // Show the notification bar when someone has closed the email popup, but not the notification bar\n if (Cookies.get('email-popup-closed') === 'true' && Cookies.get('notification-bar-closed') === 'false') {\n notificationBar.removeClass('hide');\n }\n\n closeButton.on('click', function () {\n notificationBar.addClass('notification-bar--is-hiding');\n Cookies.set('notification-bar-closed', true, {expires: 3});\n\n if (notificationBar.hasClass('notification-bar--is-hiding')) {\n notificationBar.slideUp(250);\n }\n });\n };\n})(window.jQuery);\n","(function (win, doc, $) {\n\n var has_session_storage = window.sessionStorage;\n\n window.setPanel = function() {\n\n var panels = $('.panel').not('.js__panel--ready');\n\n if (panels.length === 0) {\n return;\n }\n\n panels.each(function() {\n var panel = $(this);\n var panel__header = panel.find('.panel__header');\n var panel__main = panel.find('.panel__main');\n\n if (panel__header.length === 0) {\n return;\n }\n\n panel__header.append('
    ');\n\n panel__header.on({\n click : function(event) {\n event.preventDefault();\n\n togglePanel(panel);\n savePanelState(panel);\n }\n });\n\n loadPanelState(panel);\n\n panel.addClass('js__panel--ready');\n });\n }\n\n // Toggle collapsed state\n function togglePanel(panel) {\n\n if (panel.hasClass('js__panel--collapsed')) {\n closePanel(panel);\n } else {\n openPanel(panel);\n }\n }\n\n function openPanel(panel) {\n panel.addClass('js__panel--collapsed');\n\n }\n\n function closePanel(panel) {\n panel.removeClass('js__panel--collapsed');\n }\n\n function loadPanelState(panel) {\n if (has_session_storage == null) {\n return;\n }\n\n var id = panel.attr('id');\n if (id == null) {\n return;\n }\n\n var key = id + '.PANEL--COLLAPSED';\n var session = sessionStorage.getItem(key);\n\n // Abort if we have no session value\n if(session === null) {\n return;\n }\n\n if(session == 'true') {\n openPanel(panel);\n } else {\n closePanel(panel);\n }\n }\n\n function savePanelState(panel) {\n if (has_session_storage == null) {\n return;\n }\n\n var id = panel.attr('id');\n\n if (id == null) {\n return;\n }\n\n var key = id + '.PANEL--COLLAPSED';\n\n // Abort if we have no session value\n if (panel.hasClass('js__panel--collapsed')) {\n sessionStorage.setItem(key, true);\n }\n else {\n sessionStorage.setItem(key, false);\n }\n }\n\n})(window.jQuery(window), window.jQuery(document), window.jQuery);","(function (win, doc, $){\n\n window.setPickadate = function() {\n\n var pickadates = $('.pickadate').not('.js-pickadate--is-ready');\n\n if (pickadates.length === 0) {\n return;\n }\n\n function removeReadonly() {\n var reset_input = $('.js-reset-readonly');\n reset_input.removeAttr('readonly');\n }\n\n pickadates.each(function() {\n\n var pickadate = $(this);\n var input = pickadate.find(':input');\n\n if (input.is('[disabled]') || input.is('[readonly]')) {\n return;\n }\n\n input.pickadate({\n format: 'dd-mm-yyyy',\n today: '',\n clear: trans('Leegmaken'),\n close: trans('Sluiten'),\n onClose: function () {\n pickadate.attr('tabindex', '-1');\n pickadate.focus();\n setTimeout(function () {\n pickadate.removeAttr('tabindex');\n });\n }\n });\n\n removeReadonly();\n\n pickadate.addClass('js-pickadate--is-ready');\n });\n\n }\n\n})(window.jQuery(window), window.jQuery(document), window.jQuery);\n","(function (win, doc, $) {\n\n window.setPortalDropdown = function() {\n var portal_dropdowns = $('.portal-dropdown').not('.js__portal-dropdown--ready');\n\n portal_dropdowns.each(function () {\n\n var portal_dropdown = $(this);\n var portal_dropdown__toggle = portal_dropdown.find('.portal-dropdown__toggle');\n var portal_dropdown__panel__main = portal_dropdown.find('.portal-dropdown__panel__main');\n\n var portal_dropdown__wrapper = portal_dropdown.find('.portal-dropdown__wrapper');\n\n if (portal_dropdown__wrapper.length === 0) {\n return;\n }\n\n portal_dropdown__toggle.on({\n click: function (event) {\n event.preventDefault();\n\n togglePortalDropdown(portal_dropdown, portal_dropdowns);\n }\n });\n\n // Prevent to scroll past within main window\n portal_dropdown__panel__main.on({\n 'mousewheel': function(event, d) {\n // Element has no overflow\n if (portal_dropdown__panel__main.get(0).offsetHeight >= portal_dropdown__panel__main.get(0).scrollHeight ) {\n return;\n }\n\n var height = portal_dropdown__panel__main.outerHeight();\n var scroll_height = portal_dropdown__panel__main.get(0).scrollHeight;\n\n if ((this.scrollTop === (scroll_height - height) && d < 0) || (this.scrollTop === 0 && d > 0)) {\n event.preventDefault();\n }\n }\n });\n\n portal_dropdown.addClass('js__portal-dropdown--ready');\n });\n\n $('body').on({\n click: function (event) {\n var target = event.target;\n\n if (typeof target === 'undefined') {\n return;\n }\n\n if (withinPortalDropdown($(target))) {\n return;\n }\n\n closePortalDropdown(portal_dropdowns);\n }\n });\n }\n\n function togglePortalDropdown(portal_dropdown, portal_dropdowns) {\n if (portal_dropdown.hasClass('js__portal-dropdown--active')) {\n closePortalDropdown(portal_dropdown);\n } else {\n closePortalDropdown(portal_dropdowns.not(portal_dropdown));\n openPortalDropdown(portal_dropdown);\n }\n }\n\n function openPortalDropdown(portal_dropdown) {\n portal_dropdown.addClass('js__portal-dropdown--active')\n }\n\n function closePortalDropdown(portal_dropdown) {\n portal_dropdown.removeClass('js__portal-dropdown--active')\n }\n\n function withinPortalDropdown(target) {\n var target_within_dropdown = false;\n\n if (target.hasClass('.portal-dropdown')) {\n target_within_dropdown = true;\n }\n\n if (target.parents('.portal-dropdown').length > 0) {\n target_within_dropdown = true;\n }\n\n return target_within_dropdown;\n }\n \n}) (window.jQuery(window), window.jQuery(document), window.jQuery);","(function (win, doc, $) {\n window.setMenuResizer = function () {\n var STORAGE_KEY = 'menu.state';\n var state = window.localStorage.getItem(STORAGE_KEY);\n var $toggleButton = $('#js__toggle-menu-size');\n var $menuSidebar = $('.portal__sidebar__menu');\n\n // Handles the state of the menu sidebar.\n function setState(newState) {\n if (!['open', 'compact'].includes(newState)) {\n console.log('Invalid state for menu:', newState);\n return;\n }\n state = newState;\n window.localStorage.setItem(STORAGE_KEY, state);\n $menuSidebar.toggleClass('portal__sidebar__menu--is-compact', state === 'compact');\n }\n\n // Add event listener for the pricing sidebar.\n window.addEventListener('storage', function () {\n setState(window.localStorage.getItem(STORAGE_KEY));\n });\n\n // Open or close the menu sidebar when the toggle button is clicked.\n $toggleButton.on('click', () => setState(state === 'open' ? 'compact' : 'open'));\n }\n})(window.jQuery(window), window.jQuery(document), window.jQuery);\n","(function (win, doc, $) {\n\n window.setSortableTable = function () {\n\n $(\".table--sortable\").each(function () {\n let table = $(this);\n\n let urlParams = new URLSearchParams(window.location.search);\n\n let form = $(\"#\" + table.attr('data-form'));\n let orderColumn = table.attr('data-order-column');\n let orderDirection = table.attr('data-order-direction');\n\n if (table.attr('data-form')) {\n form.prepend(\"\");\n form.prepend(\"\");\n }\n\n table.find(\"th\").each(function () {\n let th = $(this);\n let columnName = th.attr(\"data-column\");\n\n if (columnName) {\n let text = th.text();\n urlParams.set('order_column', columnName);\n\n if (orderDirection === 'asc' && orderColumn === columnName) {\n urlParams.set('order_direction', 'desc');\n } else {\n urlParams.set('order_direction', 'asc');\n }\n\n let url = window.location.origin + window.location.pathname + \"?\" + urlParams.toString();\n\n th.html(\"\" + text + \"\");\n\n if (orderColumn === columnName) {\n th.find(\"a\").append(\"\" + (orderDirection === 'desc' ? '↑' : '↓') + \"\")\n }\n }\n });\n });\n }\n})(window.jQuery(window), window.jQuery(document), window.jQuery);","(function ($) {\n // This function is for step three of the create order screen. It prefills the times.\n window.step3DatePrefill = function () {\n // Our scoped root element.\n var $rootElement = $('.create-order');\n var target = $rootElement.find($('.js-time-prefill'))[0];\n\n if (!target) {\n return;\n }\n\n // Here we observe the last tab for changes.\n var observer = new MutationObserver(function () {\n // If the last tab is active we prefill.\n if ($(target).hasClass('js-accordion__item--is-expanded')) {\n prefill($(target));\n }\n });\n\n // Observe attributes for changes, the classes change when a different tab becomes active.\n observer.observe(target, {\n attributes: true,\n attributeFilter: ['class'],\n childList: false,\n characterData: false\n });\n\n /**\n * Prefill the fields.\n *\n * @returns {void}\n */\n function prefill($target) {\n // Cache selectors\n var $pickupTimeFrom = $target.find('[name=pickup_time_from]')\n , $pickupTimeTo = $target.find('[name=pickup_time_to]')\n , $deliveryTimeFrom = $target.find('[name=delivery_time_from]')\n , $deliveryTimeTo = $target.find('[name=delivery_time_to]');\n\n off([\n $pickupTimeFrom,\n $pickupTimeTo,\n $deliveryTimeFrom,\n $deliveryTimeTo\n ],\n 'blur',\n invalidateCache\n );\n\n // Only prefill if either there's no value, or if the value that's there was filled by us.\n if (!$pickupTimeFrom.val() || $pickupTimeFrom.data('prefilled')) {\n $pickupTimeFrom.val(moment().minute(getNext15Minutes()).format('HHmm'));\n\n // Store a data property on the input to check against, we set prefilled to true so we know we filled it, not\n // the user.\n $pickupTimeFrom.data('prefilled', true);\n }\n\n if (!$pickupTimeTo.val() || $pickupTimeTo.data('prefilled')) {\n $pickupTimeTo.val(moment().hour(moment().hour() + 1).minute(getNext15Minutes()).format('HHmm'));\n $pickupTimeTo.data('prefilled', true);\n }\n\n if (!$deliveryTimeFrom.val() || $deliveryTimeFrom.data('prefilled')) {\n $deliveryTimeFrom.val(moment().hour(moment().hour() + 1).minute(getNext15Minutes()).format('HHmm'));\n $deliveryTimeFrom.data('prefilled', true);\n }\n\n if (!$deliveryTimeTo.val() || $deliveryTimeTo.data('prefilled')) {\n $deliveryTimeTo.val(moment().hour(moment().hour() + 2).minute(getNext15Minutes()).format('HHmm'));\n $deliveryTimeTo.data('prefilled', true);\n }\n\n on([\n $pickupTimeFrom,\n $pickupTimeTo,\n $deliveryTimeFrom,\n $deliveryTimeTo\n ],\n 'blur',\n invalidateCache\n );\n\n /**\n * Remove event listener from array of elements.\n * @param {Array} items\n * @param {string} event\n * @param {function} callback\n */\n function off(items, event, callback) {\n for (var i = 0; i < items.length; i++) {\n $(items[i]).off(event, callback);\n }\n }\n\n /**\n * Add event listener to array of elements.\n * @param {Array} items\n * @param {string} event\n * @param {function} callback\n */\n function on(items, event, callback) {\n for (var i = 0; i < items.length; i++) {\n $(items[i]).on(event, callback);\n }\n }\n\n /**\n * @returns {number}\n */\n function getNext15Minutes() {\n var quarter = moment().minute() / 15;\n var ceil = Math.ceil(moment().minute() / 15) * 15;\n\n if (quarter === 0 || (quarter - Math.floor(quarter)) === 0) {\n ceil += 15;\n }\n\n return ceil;\n }\n\n /**\n * When the user changes the times, we don't want to overwrite them.\n * @param {FocusEvent} event\n * @returns {void}\n */\n function invalidateCache(event) {\n $(event.target).data('prefilled', false);\n }\n }\n };\n\n})(window.jQuery);\n","(function(win, doc, $) {\n\twindow.setTabs = function()\n\t{\n\t\tvar data = {\n\t\t\telements : {\n\t\t\t\troot : 'tabs',\n\t\t\t\ttoggles : 'tabs-toggles',\n\t\t\t\ttoggle : 'tabs-toggle',\n\t\t\t\titems : 'tabs-items',\n\t\t\t\titem : 'tabs-item'\n\t\t\t},\n\t\t\tstates : {\n\t\t\t\tready : '__tabs--ready',\n\t\t\t\titem_ready : '__tabs-item--ready',\n\t\t\t\titem_active : '__tabs-item--active',\n\t\t\t\ttoggle_active : '__tabs-toggle--active'\n\t\t\t},\n\t\t\tattributes : {\n\t\t\t\tstart_at : 'tabs-start-at',\n\t\t\t\ttoggle_index : 'tabs-toggle-index'\n\t\t\t}\n\t\t}\n\n\t\tvar tabs = $('.' + data.elements.root).not('.' + data.states.ready);\n\n\t\tif(tabs.length === 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tdoc.on({\n\t\t\t'tipi.tabs.toggle' : function(event, tabs, index, options) {\n\t\t\t\ttoggleTabsToggle(tabs, index, data, options);\n\t\t\t\ttoggleTabsItem(tabs, index, data, options);\n\t\t\t}\n\t\t});\n\n\t\ttabs.each(function() {\n\t\t\tvar tabs = $(this);\n\t\t\tvar toggles = getTabsElement(tabs, 'toggles', data);\n\t\t\tvar toggle = getTabsElement(tabs, 'toggle', data);\n\t\t\tvar items = getTabsElement(tabs, 'items', data);\n\t\t\tvar item = getTabsElement(tabs, 'item', data);\n\n\t\t\tif(toggle.length === 0 || item.length === 0)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//Set the options for each accordion\n\t\t\tvar options = getTabsOptions(tabs, data);\n\n\t\t\ttoggle.each(function(index) {\n\t\t\t\t$(this).data(data.attributes.toggle_index, index);\n\t\t\t});\n\n\t\t\ttoggle.on({\n\t\t\t\tclick : function(event)\n\t\t\t\t{\n\t\t\t\t\tvar toggle = $(this);\n\t\t\t\t\tvar tabs = getTabsElement(toggle, 'root', data);\n\n\t\t\t\t\t//Don't proceed if the accordion is not ready\n\t\t\t\t\tif(!tabs.hasClass(data.states.ready))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tvar index = toggle.data(data.attributes.toggle_index);\n\n\t\t\t\t\tdoc.trigger('tipi.tabs.toggle', [tabs, index, options]);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(options.start_at >= 0) {\n\t\t\t\tdoc.trigger('tipi.tabs.toggle', [tabs, options.start_at, options]);\n\t\t\t}\n\n\t\t\t//Add the ready classes\n\t\t\ttabs.addClass(data.states.ready);\n\t\t\titems.addClass(data.states.items_ready);\n\t\t\titem.addClass(data.states.item_ready);\n\t\t});\n\t}\n\n\tfunction toggleTabsToggle(tabs, index, data, options)\n\t{\n\t\tvar toggle = getTabsElement(tabs, 'toggle', data);\n\n\t\tif(toggle.length === 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\ttoggle.removeClass(data.states.toggle_active).eq(index).addClass(data.states.toggle_active);\n\t}\n\n\tfunction toggleTabsItem(tabs, index, data, options)\n\t{\n\t\tvar item = getTabsElement(tabs, 'item', data);\n\n\t\tif(item.length === 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\titem.removeClass(data.states.item_active).eq(index).addClass(data.states.item_active);\n\t}\n\n\tfunction getTabsOptions(tabs, data)\n\t{\n\t\tvar options = {\n\t\t\tstart_at : 0\n\t\t}\n\n\t\tif (typeof tabs.data(data.attributes.start_at) != 'undefined') {\n\t\t\tvar starting_index = tabs.data(data.attributes.start_at);\n\n\t\t\tif(!isNaN(parseFloat(starting_index))) {\n\t\t\t\toptions.start_at = starting_index;\n\t\t\t} else if (starting_index) {\n\t\t\t\tvar toggles = getTabsElement(tabs, 'toggles', data);\n\t\t\t\toptions.start_at = Math.max(0, toggles.find('[data-tabs-name=' + starting_index + ']').index());\n\t\t\t}\n\t\t}\n\n\t\treturn options;\n\t}\n\n\tfunction getTabsElement(origin, type, data)\n\t{\n\t\tif(typeof origin == 'undefined' || typeof data.elements == 'undefined')\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tvar element = $();\n\n\t\tswitch(type) {\n\t\t\tcase 'root' :\n\t\t\t\telement = origin.parents('.' + data.elements.root).first();\n\t\t\t\tbreak;\n\t\t\tcase 'toggles' :\n\t\t\t\tvar toggles = origin.find('.' + data.elements.toggles);\n\n\t\t\t\ttoggles.each(function() {\n\t\t\t\t\tvar tabs = $(this).parents('.' + data.elements.root).first();\n\n\t\t\t\t\tif(!tabs.is(origin))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\telement = element.add($(this));\n\t\t\t\t});\n\n\t\t\t\tbreak;\n\t\t\tcase 'toggle' :\n\t\t\t\tvar toggle = origin.find('.' + data.elements.toggle);\n\n\t\t\t\ttoggle.each(function() {\n\t\t\t\t\tvar tabs = $(this).parents('.' + data.elements.root).first();\n\n\t\t\t\t\tif(!tabs.is(origin))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\telement = element.add($(this));\n\t\t\t\t});\n\n\t\t\t\tbreak;\n\t\t\tcase 'items' :\n\t\t\t\telement = origin.find('.' + data.elements.items).first();\n\n\t\t\t\tbreak;\n\t\t\tcase 'item' :\n\t\t\t\telement = origin.find('.' + data.elements.item).first().siblings().addBack();\n\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t}\n\n\t\treturn element;\n\t}\n\n})( window.jQuery(window), window.jQuery(document), window.jQuery);\n","(function (window) {\n function getFormatted(str, params) {\n var key;\n if (! params) {\n params = {};\n }\n for (key in params) {\n str = str.replace(\":\" + key, params[key]);\n }\n return str;\n }\n\n window.trans = function(str, params) {\n if (! window.translations || ! window.translations[str]) {\n console.log(\"Missing translation\", str, params);\n return getFormatted(str, params);\n }\n return getFormatted(window.translations[str], params);\n };\n})(window);\n","(function (win, doc, $) {\n window.setValidateEmailPopup = function () {\n $(document).ready(function () {\n $('#popup-email-input, #popup-email-confirmation-input').keyup(function () {\n let email = $('#popup-email-input');\n let email_confirmation = $('#popup-email-confirmation-input');\n\n let disable_submit = (email.val() !== email_confirmation.val());\n\n $('#popup-email-submit')\n .prop('disabled', disable_submit)\n .toggleClass('button--disabled', disable_submit);\n });\n });\n };\n})(window.jQuery(window), window.jQuery(document), window.jQuery);\n"]}