if(typeof biohortConfigurator==='undefined'){
window.biohortConfigurator={};}
biohortConfigurator.product_partlist_incomplete=false;
biohortConfigurator.product_id=null;
biohortConfigurator.variation_id=null;
biohortConfigurator.total_price_of_configuration=0;
biohortConfigurator.error_messages=[];
biohortConfigurator.partlist=[];
biohortConfigurator.updateCartButtonAndPartListVisibility=function (){
document.body.classList.add('biohort-configurator--configurator-is-ready');
biohortConfigurator.isEditingCartItem();
};
biohortConfigurator.changeLoadingUiState=function (state){
const $biohort__uiElements=document.querySelectorAll('#biohort-partlist-table-container, .biohort-cart-button');
$biohort__uiElements.forEach(($element)=> {
if(state==="loading"){
document.body.classList.add('biohort-configurator--configurator-is-loading');
}else{
document.body.classList.remove('biohort-configurator--configurator-is-loading');
}});
};
biohortConfigurator.isEditingCartItem=function (){
var queryParams=new URLSearchParams(window.location.search);
if(queryParams.get("cart_item_key")!==null){
document.body.classList.add('biohort-configurator--editing-cart-item');
}};
biohortConfigurator.reportErrors=function (){
const biohortErrorsContainer=document.getElementById('biohort-errors');
const biohortErrorLists=document.querySelectorAll('#biohort-errors ul');
for (let i=0; i < biohortErrorLists.length; i++){
biohortErrorLists[i].remove();
}
const errorList=document.createElement('ul');
biohortConfigurator.error_messages.forEach(message=> {
const li=document.createElement('li');
li.appendChild(document.createTextNode(message));
errorList.appendChild(li);
});
biohortErrorsContainer.appendChild(errorList);
};
biohortConfigurator.setConfigId=function (configId){
if(typeof (configId)!="undefined"){
biohortConfigurator.config_id=configId;
var queryParams=new URLSearchParams(window.location.search);
queryParams.set("biohort_config_id", configId);
history.replaceState(null, null, "?" + queryParams.toString());
biohortConfigurator.updateCartButtonAndPartListVisibility();
}};
window.onload=function (){
if(document.body.classList.contains('biohort-configurator')){
biohortConfigurator.isEditingCartItem();
let data={
'message': 'init',
'args': []
};
setTimeout(function (){
window.postMessage(JSON.stringify(data), '*');
}, 1111);
const iframeElement=document.getElementById('biohort-configurator');
var eventMethod=iframeElement.addEventListener ? 'addEventListener':'attachEvent';
var eventer=iframeElement[eventMethod];
var messageEvent=eventMethod==='attachEvent' ? 'onmessage':'message';
eventer(messageEvent, function (e){
let data=e.data ? e.data:e.message;
data=JSON.parse(data);
if(data&&data.message==='startLoading'){
biohortConfigurator.changeLoadingUiState('loading');
biohortConfigurator.error_messages=[];
}
if(data&&data.message==='endLoading'){
biohortConfigurator.changeLoadingUiState('ready');
}
biohortConfigurator.setConfigId(data.args.configId);
if(data&&data.message==='updatePartList'){
biohortConfigurator.error_messages=[];
biohortConfigurator.product_partlist_incomplete=false;
biohortConfigurator.setConfigId(data.args.configId);
const biohortPartlistContainer=document.getElementById('biohort-partlist-table-container');
const biohortPartlistContainerTable=document.querySelectorAll('#biohort-partlist-table-container table');
for (let i=0; i < biohortPartlistContainerTable.length; i++){
biohortPartlistContainerTable[i].remove();
}
const tbl=document.createElement('table');
var tr=tbl.insertRow();
tr.classList.add('header');
var td=tr.insertCell();
td.appendChild(document.createTextNode(biohortConfigurator.textAndLabels.partlist_col_header__position));
if(biohortConfigurator.showDebugColumns){
var td=tr.insertCell();
td.appendChild(document.createTextNode('sku_bh'));
}
var td=tr.insertCell();
td.appendChild(document.createTextNode(biohortConfigurator.textAndLabels.partlist_col_header__manufacturer_number));
var td=tr.insertCell();
td.appendChild(document.createTextNode(biohortConfigurator.textAndLabels.partlist_col_header__ean));
var td=tr.insertCell();
td.appendChild(document.createTextNode(biohortConfigurator.textAndLabels.partlist_col_header__label));
if(biohortConfigurator.showDebugColumns){
var td=tr.insertCell();
td.appendChild(document.createTextNode(biohortConfigurator.textAndLabels.partlist_col_header__pid));
var td=tr.insertCell();
td.appendChild(document.createTextNode(biohortConfigurator.textAndLabels.partlist_col_header__vid));
}
var td=tr.insertCell();
td.appendChild(document.createTextNode(biohortConfigurator.textAndLabels.partlist_col_header__quantity));
var td=tr.insertCell();
td.appendChild(document.createTextNode(biohortConfigurator.textAndLabels.partlist_col_header__price_per_unit));
var td=tr.insertCell();
td.appendChild(document.createTextNode(biohortConfigurator.textAndLabels.partlist_col_header__total));
var total_price=0;
biohortConfigurator.partlist=[];
for (let i=0; i < data.args.data.length; i++){
var price=0;
var sku_bh=data.args.data[i].sku;
var sku=0;
var link=null;
var product_id=0;
var variation_id=0;
var productFound=false;
biohortConfigurator.biohortProducts.forEach(function (biohortProduct){
if((biohortProduct.sku.endsWith(data.args.data[i].sku))){
productFound=true;
price=biohortProduct.price;
sku=biohortProduct.sku;
link=biohortProduct.link;
product_id=biohortProduct.product_id;
variation_id=biohortProduct.variation_id;
is_biohort_main_product=biohortProduct.is_biohort_main_product;
if(is_biohort_main_product){
biohortConfigurator.product_id=parseInt(product_id);
if(variation_id!==null){
biohortConfigurator.variation_id=parseInt(variation_id);
}}
return;
}});
if(!productFound){
biohortConfigurator.product_partlist_incomplete=true;
biohortConfigurator.error_messages.push('Product "' + data.args.data[i].title + '" not found. Change Configuration!');
}
var partlistItem={
sku_bh: sku_bh,
sku: sku,
ean: data.args.data[i].ean,
title: data.args.data[i].title,
link: link,
product_id: product_id,
variation_id: variation_id,
quantity: data.args.data[i].qty,
price_per_unit: price,
price: (price * data.args.data[i].qty)
}
biohortConfigurator.partlist.push(partlistItem);
total_price +=price * data.args.data[i].qty;
const position=i + 1;
var tr=tbl.insertRow();
if(!productFound){
tr.classList.add('not-found');
}
var td=tr.insertCell();
td.appendChild(document.createTextNode(position));
if(biohortConfigurator.showDebugColumns){
var td=tr.insertCell();
td.appendChild(document.createTextNode(sku_bh));
}
var td=tr.insertCell();
td.appendChild(document.createTextNode(sku));
var td=tr.insertCell();
td.appendChild(document.createTextNode(data.args.data[i].ean));
var td=tr.insertCell();
if(link){
var a=document.createElement('a');
a.appendChild(document.createTextNode(data.args.data[i].title));
a.title=data.args.data[i].title;
a.target='_blank';
a.href=link;
td.appendChild(a);
}else{
td.appendChild(document.createTextNode(data.args.data[i].title));
}
if(biohortConfigurator.showDebugColumns){
var td=tr.insertCell();
td.appendChild(document.createTextNode(product_id));
var td=tr.insertCell();
td.appendChild(document.createTextNode(variation_id));
}
var td=tr.insertCell();
td.appendChild(document.createTextNode(data.args.data[i].qty));
var td=tr.insertCell();
td.appendChild(document.createTextNode('CHF ' + Intl.NumberFormat("de-CH", {
minimumFractionDigits: 2
}).format(price)));
var td=tr.insertCell();
td.appendChild(document.createTextNode('CHF ' + Intl.NumberFormat("de-CH", {
minimumFractionDigits: 2
}).format((price * data.args.data[i].qty))));
}
var tr=tbl.insertRow();
tr.classList.add('footer');
var td=tr.insertCell();
td.appendChild(document.createTextNode(biohortConfigurator.textAndLabels.partlist_col_footer__total));
var td=tr.insertCell();
var td=tr.insertCell();
var td=tr.insertCell();
var td=tr.insertCell();
var td=tr.insertCell();
var td=tr.insertCell();
if(biohortConfigurator.showDebugColumns){
var td=tr.insertCell();
var td=tr.insertCell();
var td=tr.insertCell();
}
td.appendChild(document.createTextNode('CHF ' + Intl.NumberFormat("de-CH", {
minimumFractionDigits: 2
}).format(total_price)));
biohortConfigurator.total_price_of_configuration=total_price;
biohortPartlistContainer.appendChild(tbl);
if(biohortConfigurator.product_id===null){
biohortConfigurator.error_messages.push('Main product not found for this configuration.');
}
if(biohortConfigurator.product_id===null||biohortConfigurator.product_partlist_incomplete){
document.body.classList.add('biohort-configurator--product-loading-error');
biohortConfigurator.reportErrors();
}else{
document.body.classList.remove('biohort-configurator--product-loading-error');
}}
});
}};
(function ($){
$(document).ready(function (){
$(function (){
$('select[name=biohort-config]').on('change', function (){
var queryParams=new URLSearchParams(window.location.search);
queryParams.set("biohort_config_id", $(this).val());
location.href='./?' + queryParams.toString();
});
$('.biohort-cart-button').on('click', function (){
product_id=biohortConfigurator.product_id;
if(biohortConfigurator.variation_id!==null){
product_id=biohortConfigurator.variation_id;
}
var quantity=1;
var data_object={
language: biohortConfigurator.language,
action: "add_biohort_configuration_to_cart",
product_id: product_id,
quantity: quantity,
biohort_configuration_data: {
biohort_config_id: biohortConfigurator.config_id,
total_price_of_configuration: biohortConfigurator.total_price_of_configuration,
partlist: biohortConfigurator.partlist
}};
if($(this).data('cart-action')==='update'){
var queryParams=new URLSearchParams(window.location.search);
data_object.remove_cart_item=queryParams.get("cart_item_key");
}
document.body.classList.add('biohort-configurator--cart-ajax-is-running');
$.ajax({
type: 'POST',
url: ajax_object.ajax_url,
data: data_object,
success: function (returnData){
document.body.classList.remove('biohort-configurator--cart-ajax-is-running');
var returnResult=JSON.parse(returnData);
if(returnResult.success){
{
var queryParams=new URLSearchParams(window.location.search);
queryParams.set("cart_item_key", returnResult.cart_item_key);
history.replaceState(null, null, "?" + queryParams.toString());
biohortConfigurator.updateCartButtonAndPartListVisibility();
}
{
var $fragment_refresh={
url: wc_cart_fragments_params.wc_ajax_url.toString().replace('%%endpoint%%', 'get_refreshed_fragments'),
type: 'POST',
success: function (data){
if(data&&data.fragments){
$.each(data.fragments, function (key, value){
$(key).replaceWith(value);
});
$(document.body).trigger('wc_fragments_refreshed');
}}
};
$.ajax($fragment_refresh);
}}else{
alert('etwas hat nicht geklappt');
}}
});
});
});
});
})(jQuery);