;
$(window).on('resize scroll', function() {
f_shopFadeImageAlmostInViewport();
})
$(document)
.on('click', '.product-view-info .submit-product button:not(.disabled)', function(evt){
evt.preventDefault();
var _this = this;
addProduct(_this, function(valid){
if(valid)
f_productAddedAnimation(_this);
}, 'cart')
})
.on('click', '.fltr-product-compare>a:not([data-item])', function(evt){
evt.preventDefault();
var _this = this;
addProduct(_this, function(valid){}, 'compare')
})
.on('click', '.fltr-product-compare>a[data-item]', function(evt){
evt.preventDefault();
var _this = this;
var id = this._attr_get('data-item')
$('#compare, #menucompare').each(function(){$(this).data('plugin_Compare').removeItem(id)})
})
.on('change', '.product-amount', function(evt){
evt.preventDefault();
if(evt.target.value == ''){
evt.target.value = 1;
}else if(evt.target.value > 10){
evt.target.value = 10;
}else if(evt.target.value < 1){
evt.target.value = 1;
}
var btn = _STDO.get('a[href]', this.parentNode)[0];
var href = '/checkout?n=' + btn._attr_get('data-id') + '&a=' + evt.target.value;
btn._attr_set('href', href)
})
.on('click', '#cust_signout', function(evt){
evt.preventDefault();
shopSignout(function(){
history.pushState("", document.title, window.location.pathname + window.location.search);
window.location.reload();
})
})
.on('click', '[id^=addons-] .shop-products-item', function(evt){
evt.preventDefault();
var parent = this.closest('[id^=addons-]')
var price = Number(this._attr_get('price'))
var selected = this._clss_has('selected')
var $checkbox = _STDO.get('.shop-checkbox [type="checkbox"]', this)[0]
var $price = _STDO.get('.addon-total-price', parent)[0]
var totalprice = Number($price._attr_get('price'));
if(selected){
this._clss_remove('selected')
$checkbox._attr_remove('checked')
totalprice = totalprice - price
}else{
this._clss_add('selected')
$checkbox._attr_set('checked', 'checked')
totalprice = totalprice + price
}
if(totalprice < 0){
totalprice = 0
}
$price._html_set('€ ' + f_moneyformat(totalprice))
$price._attr_set('price', totalprice)
})
var createPromptInput = function(name, type, value, pre){
pre = pre || false;
var parent;
var attributes = {
'type': type || 'text',
id: name,
class: 'form-control' + (name == 'dateto' || name == 'date_from' ? ' half' : ''),
name: name,
step: '1',
value: value || "",
onkeypress: (type == "number" ? "return event.charCode >= 32 && event.charCode <= 57" : "")
}
if(pre){
parent = _STDO.create('div', { class: 'input-group' })
parent._el_appnd(_STDO.create('span', { class: 'input-group-addon', html: pre }))
parent._el_appnd(_STDO.create('input', attributes))
}else{
parent = _STDO.create('input', attributes)
}
return parent;
}
var checkPromptTime = function(_this){
var value = moment(_STDO.get('#date' + _this.data.for).value + ' ' + _this.value, 'DD-MM-YYYY HH:mm')
if(value < _this.data.min){
_this.value = _this.data.prev
}else{
_this.data.prev = _this.value
var $other = _STDO.get('#date' + (_this.data.for == 'from' ? 'to' : 'from'))
var $otherTime = _STDO.get('#date' + (_this.data.for == 'from' ? 'to' : 'from') + '_t')
var other = moment($other.value + ' ' + $otherTime.value, 'DD-MM-YYYY HH:mm')
if(_this.data.for == 'from'){
$otherTime.data.min = value
if(other < value){
$otherTime.value = _this.value
$otherTime.data.prev = _this.value
}
}
}
}
var validateField = function($el, self){
var _self = this;
var field = $el.attr('data-field');
var val = $el.val();
var valid = false;
self = self || false
var parent = self ? $el : $el.parent();
if(field === 'street' || field === 'city' || field === 'country' || field === 'date' || field === 'time')
{
if(val && val != '')
valid = true;
}
else if(field === 'name')
{
var re = /.+ .+/;
if(val.match(re))
valid = true;
}
else if(field === 'phone')
{
var re = /.+/;
if(val.match(re))
valid = true;
}
else if(field === 'memo')
{
var re = /.?/;
if(val.match(re))
valid = true;
}
else if(field === 'email')
{
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/i;
if(val != '' && val.match(re))
valid = true;
}
else if(field === 'number')
{
var re = /^[0-9-]{1,5}[a-z]*$/i;
if(val != '' && val.match(re))
valid = true;
}
else if(field === 'postal')
{
var re = /^[0-9]{4,}[\s]?[a-z]*$/i
if(val != '' && re.test(val)){
valid = true;
}
}
else if(field === 'password')
{
var re = /^.{6,}$/
if(val != '' && re.test(val))
valid = true;
}
if(valid){
parent.removeClass('err').addClass('suc');
parent.find('i.validate').removeClass('fa-times').addClass('fa-check')
}
else{
parent.removeClass('suc').addClass('err');
parent.find('i.validate').removeClass('fa-check').addClass('fa-times')
}
return valid;
}
var shopAuthorize = function(email, password, callback){
var url = '/api/SHOP/AJAX/customer';
var empty = [], invalid = [], message = '';
var isEmpty = function(str){
return (!str || /^\s*$/.test(str));
}
if(isEmpty(email)){
empty.push('email')
}
if(isEmpty(password)){
empty.push('password')
}
// if(!email.match(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/i)){
// invalid.push('email')
// }
// if(password.length < 4){
// invalid.push('password')
// }
// if(empty.length > 0)
// message = empty.join(' & ') + ' ' + _STDO.lng.get('shop-login-'+(empty.length == 1 ? 'is' : 'are')+'Empty')
// if(invalid.length > 0)
// message = invalid.join(' & ') + ' ' + _STDO.lng.get('shop-login-'+(invalid.length == 1 ? 'is' : 'are')+'Invalid')
if(!isEmpty(message)){
callback(message);
}else{
var aParam = {
'action': 'authorize',
'param': {
'email': email,
'password': password
}
}
_STDO.ajx(url, aParam, function(data){
callback(data);
}, true);
}
}
var shopRegister = function(values, callback){
var url = '/api/SHOP/AJAX/customer';
$.post({
url: url,
noLoading: true,
data: {
'action': 'register',
'param': values
},
dataType: 'json',
success: function(data){
callback(data);
}
})
}
var shopSignout = function(callback){
var url = '/api/SHOP/AJAX/customer';
var aParam = {
'action': 'signout'
}
_STDO.ajx(url, aParam, function(data){
callback(data);
}, true);
}
var shopForgot = function(email, callback){
var url = '/api/SHOP/AJAX/customer';
var empty = [], invalid = [], message = '';
var isEmpty = function(str){
return (!str || /^\s*$/.test(str));
}
if(isEmpty(email)){
empty.push('email')
}
if(!isEmpty(message)){
callback(message);
}else{
var aParam = {
'action': 'forgot',
'param': {
'email': email
}
}
_STDO.ajx(url, aParam, function(data){
callback(data);
}, true);
}
}
var _f_shopFotoFadeIn = function(selector, size, container){
container = container || _STDO.get('body')[0];
var items = _STDO.get(selector, container);
_STDO.loop(items, function(i, fade){
var base = fade._attr_get('data-base');
var src = fade._attr_get('data-src');
var alt = fade._attr_get('data-alt');
var has = _STDO.get('img', fade).length > 0;
if(!has && base && base != 'undefined' && src && src != 'false' && src != 'undefined'){
var parts = src.split('.');
var obj = document.createElement('object');
obj.setAttribute('type', 'image/png')
var img = new Image();
img.style.opacity = "0";
img._attr_set('alt', alt);
img.src = base + '/' + src;
obj.onload = function(){
this._el_fade('in')
}
// img.onerror = function(){
// var dflt = base + '/' + parts[parts.length-2] + '.' + parts[parts.length-1]
// if(this.src != dflt)
// this.src = dflt;
// }
fade._el_appnd(obj._el_appnd(img));
obj.setAttribute('data', (base + '/' + parts[parts.length-2] + (size ? '@' + size : '') + '.' + parts[parts.length-1]))
}
})
}
var f_shopFadeImageAlmostInViewport = function() {
var hiddenImages = _STDO.get('img.shop-image:not(.loaded)')
if(hiddenImages.length > 0){
_STDO.loop(hiddenImages, function(i, el){
if(f_isElementAlmostInViewport(el)){
el._clss_add('loaded')
var src = el._attr_get('data-src')
el.src = src
}
})
}
}
var f_shopGetImageSrc = function(image, size){
var base = image._attr_get('data-base');
var src = image._attr_get('data-src');
if(base && base != 'undefined' && src && src != 'false' && src != 'undefined'){
var parts = src.split('.');
return base + '/' + parts[parts.length-2] + (size ? '@' + size : '') + '.' + parts[parts.length-1];
}
return ''
}
var f_shopInitImages =function(selector, size, container){
container = container || _STDO.get('body')[0];
var items = _STDO.get(selector, container);
_STDO.loop(items, function(i, fade){
var alt = fade._attr_get('data-alt');
var src = f_shopGetImageSrc(fade);
var has = _STDO.get('img', fade).length > 0;
if(!has && src !== ''){
var img = new Image();
img.style.opacity = "0";
img._clss_add('shop-image');
img._attr_set('data-src', src);
img._attr_set('alt', alt);
img.onload = function(){
fade._clss_remove('loading')
this._el_fade('in')
}
fade._el_appnd(img)
setTimeout(function(){
if(!img._clss_has('loaded')){
fade._clss_add('loading')
}
}, 500)
}
})
f_shopFadeImageAlmostInViewport();
}
var resetAddons = function(parent){
var _self = this;
var addons = _STDO.get('.addon-select .shop-products-item.selected', parent)
var $price = _STDO.get('.addon-total-price', parent)[0]
$price._html_set('€ ' + f_moneyformat(0))
$price._attr_set('price', 0)
_STDO.loop(addons, function(i, $el){
var $checkbox = _STDO.get('.shop-checkbox [type="checkbox"]', $el)[0]
$el._clss_remove('selected')
$checkbox._attr_remove('checked')
})
}
var addProduct = function(el, cb, target, forceBuy){
var param;
var valid = true;
forceBuy = forceBuy || false
target = target || 'cart'
var selector = '#' + target + ', #menu' + target + ', #inline' + target
var ucfirst = target.charAt(0).toUpperCase() + target.slice(1)
if(el instanceof Element || el instanceof HTMLDocument){
var parent = el.closest('.product-view-info');
var id = el._attr_get('id')
var action = forceBuy ? 'buy' : el._attr_get('action')
var req = _STDO.get('[id^="req-"]', parent);
var amount = _STDO.get('[id^="amount-"]', parent);
var variant = _STDO.get('.variant-select>button.active[value]', parent);
var addons = _STDO.get('.addon-select .shop-products-item.selected', parent);
param = {
prod_number: id.split('add-').reverse()[0],
requiredItems: {},
amount: '1'
}
if(target === 'cart'){
if(variant.length){
param.variant = variant[0]._attr_get('value');
}else{
var variantSelect = _STDO.get('.variant-select>select', parent);
if(variantSelect.length > 0){
param.variant = variantSelect[0].value
}else{
variant = _STDO.get('.variant-select>button:not(.disabled)[value]', parent);
if(variant.length){
param.variant = variant[0]._attr_get('value');
}
}
}
if(addons && addons.length){
param.addons = []
_STDO.loop(addons, function(i, $el){
param.addons.push($el._attr_get('prod'));
})
}
for(var i = 0; i < req.length; i++){
var selected = req[i].options[req[i].selectedIndex];
var keyval = selected.value.split('|');
if(keyval.length > 1){
param.requiredItems[keyval[0]] = keyval[1];
req[i]._clss_remove('redBorder');
} else{
req[i]._clss_add('redBorder');
valid = false;
}
}
if(amount && amount.length > 0 && !isNaN(amount[0].value) && amount[0].value > 0){
param.amount = amount[0].value
}
}
}else{
var action = forceBuy ? 'buy' : undefined
param = el
}
if(!valid){
cb(valid);
}else{
if(param.prod_number && param.prod_number != ''){
if(action === 'buy'){
param.clear = 'true';
}
var aParam = {
'action': 'addProduct',
'param': param
}
_STDO.ajx('/api/SHOP/AJAX/cart?target='+target, aParam, function(data, all){
if(action === 'buy'){
window.location.href = '/checkout';
}else{
var fn = 'set' + ucfirst
$(selector).each(function(){$(this).data('plugin_' + ucfirst)[fn](data.items)})
if(target === 'cart'){
_STDO.loop(req, function(i, val){
val.selectedIndex = 0;
})
if(amount && amount.length > 0){
amount[0].value = '1';
}
if(addons && addons.length){
// $('#product-view').data('plugin_View').resetAddons()
resetAddons(parent)
}
var wizard = $('#wizard');
if(wizard.length > 0){
var $plugin = wizard.data('plugin_Wizard')
$plugin.getWizardStep(0)
}
if(all.product){
f_gtagEvent('add_to_cart', {}, [all.product]);
}
}
cb(valid);
}
}, true);
}else{
cb(valid);
}
}
}
var f_productAddedAnimation = function(btn){
var spans = btn.getElementsByTagName('span')
btn.disabled = true;
btn.style.width = btn.offsetWidth + 'px';
spans[0]._el_fade('out', 100, function () {
spans[0].style.display = 'none';
spans[1]._el_fade('in', 300, function () {
setTimeout(function () {
spans[1]._el_fade('out', 100, function () {
spans[1].style.display = 'none';
spans[0]._el_fade('in', 300, function () {
btn.disabled = false;
btn.style.width = '';
}, true)
})
}, 1800)
}, true)
})
}
var f_sortableTable = function($table, sortedBy){
sortedBy = sortedBy || false;
var getCellValue = function(tr, idx){
return tr.children[idx]._attr_get('value') || tr.children[idx].innerText || tr.children[idx].textContent;
}
var comparer = function(idx, asc) {
return function(a, b) {
return function(v1, v2) {
return v1 !== '' && v2 !== '' && !isNaN(v1) && !isNaN(v2) ? v1 - v2 : v1.toString().localeCompare(v2);
}(getCellValue(asc ? a : b, idx), getCellValue(asc ? b : a, idx));
}
};
var sortTh = function(th){
var $tbody = _STDO.get('tbody', $table)[0]
var $icon = _STDO.get('i', th)[0]
_STDO.loop($table.querySelectorAll('th.sortable>i'), function(j, icon){
icon._clss_remove('fa-sort-up')
icon._clss_remove('fa-sort-down')
if(icon == $icon){
icon._clss_remove('fa-sort')._clss_add('fa-sort-' + (th.asc ? 'up' : 'down'))
}else{
icon._clss_add('fa-sort')
}
})
Array.prototype.slice.call(_STDO.get('tr', $tbody))
.sort(comparer(Array.prototype.slice.call(th.parentNode.children).indexOf(th), th.asc = !th.asc))
.forEach(function(tr) { $tbody.appendChild(tr) });
}
_STDO.loop($table.querySelectorAll('th.sortable'), function(i, th) {
th._el_appnd(_STDO.create('i', {'class': 'fa fa-sort'}))
th.addEventListener('click', function(){
sortTh(th)
});
if(th._attr_get('key') === sortedBy){
sortTh(th)
}
});
}
var f_newModal = function(format, isFor, defaultBtns){
var modal = format === 'small' ? 'cms' : 'edit';
var selector = 'sog_' + modal + 'Modal';
$('.' + selector + ' h1').html('');
$('.' + selector + ' .tabs').html('');
$('.' + selector + ' .tab-content').html('');
var $modal = $('#' + selector).modal({ backdrop: 'static', keyboard: false });
if (!defaultBtns) {
$('.' + selector + ' .modal-buttons').attr('invisible', '').hide();
$('.' + selector + ' .shop-buttons').show();
}
$modal.addClass(isFor)
$modal.on('hidden.bs.modal', function() {
$(this).removeClass(isFor)
$('.' + selector + ' .shop-buttons').hide();
$('.' + selector + ' .modal-buttons').removeAttr('invisible').show();
})
}
var f_getProdData = function(prod){
try{
return JSON.parse((!prod.hasOwnProperty('prod_data') || prod.prod_data == '' ? '{}' : prod.prod_data)) || {};
} catch(err){
return {}
}
}
var f_moneyformat = function(number){
return Number(number).toLocaleString("nl-NL", {minimumFractionDigits: 2, maximumFractionDigits: 2})
}
var f_gtagEvent = function(type, content, items){
if(typeof gtag === 'function'){
if(items && items.length > 0){
if(!content || Array.isArray(content)){
content = {}
}
content.items = []
_STDO.loop(items, function(i, v){
content.items.push({
id: v.prod_number,
name: v.prod_name,
price: v.price_incl_btw,
quantity: (v.amount && v.amount != '' ? v.amount : "1")
})
})
}
gtag('event', type, content);
}
}
/*
// _ _ _ _
// ___| |_ ___(_) _| | ___ _ __ | |
// / __) _) __) |/ _ |/ _ \| /_ `| |
// \__ \ |_| _)| | (_| | (_) | | | | |_
// (___/\__)___)_|\__/_|\___(_)| |_|___)
//
*/
/*
___ _ __ __ ___
/ _) /_ `/_ `/ __)
| (_| | | | | \__ \
\___)_| |_| |_(___/
_
___ ___ __ _ _ _ _ ___| |_
/ __)/ _ \/ _\ | ___ | | | | | | __) _ \
\__ \ (_)| (_| |(___)| \_/ \_/ | _)| |_)|
(___/\___/\__ | \___/\__/|___)_\__/
(___/
*/
;(function ($, window, document, undefined) {
"use strict";
var pluginName = "Filter",
defaults = {
filters: {},
ajax_url: "/api/SHOP/AJAX/main",
imagesMap: "/SHOP/DATA_APP/IMAGES/",
noImg: "/SHOP/data/wizard-no-image.png",
chunkTimer: 100,
scrollTimer: false,
page: 1,
range: [],
lastPage: false,
productsLoaded: false,
pagCode64: window.btoa(
(document.body._attr_get("data-pag_code") || "").toUpperCase(),
),
btw: "incl",
prodUrl: "/product/{prod}",
payment: false,
rentshop: false,
compare: false,
manualstock: false,
stocklabel: false,
filterId: "",
horizontal: false,
defaultOrdering: "",
};
function Plugin(element, options) {
this.element = element;
this.$element = $(element);
this.filters = _STDO.get(".shop-filter-filters", element)[0];
this.products = _STDO.get(".shop-filter-products .products", element)[0];
this.tags = _STDO.get(".filter-tags>div:nth-child(3)", element)[0];
this.pager = _STDO.get(".shop-filter-products .pager", element)[0];
this.settings = $.extend({}, defaults, options);
this.settings.filterId = element.closest("[obj-id]")._attr_get("obj-id");
this.settings.horizontal = this.products._clss_has("horizontal");
this._name = pluginName;
this.init();
return this;
}
$.extend(Plugin.prototype, {
init: function () {
var _self = this;
var json = JSON.parse(_self.element._attr_get("fltrs"));
_self.settings.filters = Object.keys(json).length > 0 ? json : {};
_self.settings.page = _self.element._attr_get("page");
_self.settings.btw = _self.element._attr_get("data-btw");
_self.settings.prodUrl = _self.element._attr_get("base");
_self.settings.defaultOrdering = _self.element._attr_get("order");
_self.element._attr_remove("fltrs");
_self.element._attr_remove("base");
_self.element._attr_remove("order");
_self.setOptions();
_self.createProducts(true, false);
_self.bindEvents();
_self.initRangefilter();
_self.scrollControl();
},
bindEvents: function () {
var _self = this;
_self.$element
.on(
"change",
".shop-filter-filters input[type=checkbox]",
function (evt) {
var keyval = this.value.split("|");
//keyval[0] = keyval[0].replace(/\s/g, '-')
sessionStorage.removeItem(_self.settings.pagCode64);
_self.controlUrl(keyval, evt.target.checked);
_self.controlFilters(keyval, evt.target.checked);
_self.settings.page = 1;
_STDO.url.remove("page");
_self.createProducts(true, true);
},
)
.on("change", "input[fltr-pricerange]", function (evt) {
var idx = this.getAttribute("fltr-pricerange");
$("#fltr-pricerange").slider("values", idx, this.value);
var key = idx == "0" ? "p_from" : "p_till";
//key = key.replace(/\s/g, '-')
var keyval = [key, this.value];
var add =
key == "p_from"
? this.value > _self.settings.range[idx]
: this.value < _self.settings.range[idx];
sessionStorage.removeItem(_self.settings.pagCode64);
_self.controlUrl(keyval, add);
_self.controlFilters(keyval, add);
_self.settings.page = 1;
_STDO.url.remove("page");
_self.createProducts(true, true);
})
.on("change", ".ordering>select", function (evt) {
var key = "o",
value = this.options[this.selectedIndex].value;
//key = key.replace(/\s/g, '-')
var keyval = [key, value];
var add = value !== _self.settings.defaultOrdering;
sessionStorage.removeItem(_self.settings.pagCode64);
_self.controlUrl(keyval, add);
_self.controlFilters(keyval, add);
_self.settings.page = 1;
_STDO.url.remove("page");
_self.createProducts(true, true);
})
.on("click", ".options .view>button:not(.active)", function (evt) {
_self.setOption("view", this._attr_get("action"));
})
.on("click", ".shop-filter-products .filter-tag", function (evt) {
var keyval = this._attr_get("value");
var aKeyval = keyval.split("|");
//aKeyval[0] = aKeyval[0].replace(/\s/g, '-')
if (aKeyval[0] == "p_from" || aKeyval[0] == "p_till")
_self.unsetRange([aKeyval[0]]);
else
_self.uncheckInputs('input[value="' + keyval + '"]', _self.element);
sessionStorage.removeItem(_self.settings.pagCode64);
_self.controlUrl(aKeyval, false);
_self.controlFilters(aKeyval, false);
_self.settings.page = 1;
_STDO.url.remove("page");
_self.createProducts(true, true);
})
.on("click", ".shop-filter-products .filter-tags>a", function (evt) {
evt.preventDefault();
sessionStorage.removeItem(_self.settings.pagCode64);
_self.unsetRange(["p_from", "p_till"]);
_self.uncheckInputs(".collapse input", _self.element);
_self.settings.filters = {};
_self.settings.page = 1;
var ord = _STDO.url.get("o");
_STDO.url.remove(false, false);
if (ord) {
_STDO.url.set("o", ord);
}
_self.createProducts(true, true);
})
.on("click", ".pager>li:not(.disabled):not(.active)", function (evt) {
evt.preventDefault();
if (this._clss_has("nxt"))
_self.settings.page = +_self.settings.page + 1;
else if (this._clss_has("prv"))
_self.settings.page = +_self.settings.page - 1;
else _self.settings.page = this._attr_get("key");
_self.createProducts(false, true);
})
.on("click", ".fltr-product", function (evt) {
if (
evt.target._clss_has("addCartItem") ||
evt.target._clss_has("fa-cart-arrow-down")
)
evt.preventDefault();
})
.on("mouseenter", ".fltr-product-photo", function (evt) {
var _this = this;
var empty = _STDO.get(".empty", _this).length > 0;
if (!empty) {
setTimeout(function () {
// f_shopFotoFadeIn('.fltr-product-thumbs', false, _this)
f_shopInitImages(".fltr-product-thumbs", false, _this);
}, 100);
}
})
.on("mouseenter", ".fltr-product-thumbs", function (evt) {
if (!this._clss_has("active")) {
var thumb = _STDO.get("img", this)[0];
var fade = _STDO.get(
".fltr-fotoFadeIn",
evt.target.closest(".fltr-product-photo"),
)[0];
var img = _STDO.get("img", fade)[0];
var parent = _STDO.get("img", this)[0].parentNode;
img.src = thumb.src;
_STDO.loop(
_STDO.get(".fltr-product-thumbs", this.parentNode.parentNode),
function (i, item) {
item._clss_remove("active");
},
);
this._clss_add("active");
}
})
.on("input", ".fltr-search input", function (evt) {
var value = evt.target.value;
var items = _STDO.get(
"input[value]",
evt.target.closest(".collapse"),
);
if (value.length > 0) {
_STDO.loop(items, function (i, v) {
if (v.value.indexOf(value) >= 0) {
v.parentNode.parentNode.style.display = "";
} else {
v.parentNode.parentNode.style.display = "none";
}
});
} else {
_STDO.loop(items, function (i, v) {
v.parentNode.parentNode.style.display = "";
});
}
})
.on("click", ".fltr-search i.fa-times", function (evt) {
var $input = _STDO.get(
"input",
evt.target.closest(".fltr-search"),
)[0];
$input.value = "";
$($input).trigger("input");
});
$(document).on("click", ".siteNavbar a", function (e) {
sessionStorage.removeItem(_self.settings.pagCode64);
// var hash = this._attr_get('href')
// if(hash.indexOf('http') === -1 && (hash.indexOf('a_') > -1 || hash.indexOf('p_') > -1)){
// }
});
},
controlFilters: function (keyval, add) {
var _self = this;
var set = false;
if (
!add &&
(keyval[0] == "p_from" ||
keyval[0] == "p_till" ||
keyval[0] == "o" ||
keyval[0] == "s" ||
keyval[0] == "search")
) {
delete _self.settings.filters[keyval[0]];
set = true;
}
for (var key in _self.settings.filters) {
if (key == keyval[0]) {
var idx = _self.settings.filters[key].indexOf(keyval[1]);
if (add) {
if (
keyval[0] == "p_from" ||
keyval[0] == "p_till" ||
keyval[0] == "o" ||
keyval[0] == "s" ||
keyval[0] == "search"
)
_self.settings.filters[key] = [keyval[1]];
else if (idx == -1) _self.settings.filters[key].push(keyval[1]);
} else {
if (idx > -1) _self.settings.filters[key].splice(idx, 1);
if (_self.settings.filters[key].length <= 0)
delete _self.settings.filters[key];
}
set = true;
break;
}
}
//console.log(_self.settings.filters)
if (!set) _self.settings.filters[keyval[0]] = [keyval[1]];
},
controlTags: function () {
var _self = this;
_self.tags._html_set("");
var filters = _self.settings.filters;
var opacity,
cnt = 0;
if (Object.keys(filters).length > 0) {
for (var key in filters) {
var values = [],
keyval = "";
if (key == "search") {
values = [filters[key].join(" ")];
} else {
values = filters[key];
}
for (var i = 0; i < values.length; i++) {
var prfx = "",
keyval = key + "|" + values[i],
name = false;
if (key != "o") {
if (key == "search") {
prfx = ' ';
values[i] = values[i].replace(/--/g, " ");
} else if (key == "p_from") {
prfx = "€ > ";
} else if (key == "p_till") {
prfx = "€ < ";
} else if (key == "s") {
prfx = ' ';
name = _STDO.lng.get("stock-filter-only-available-short", true);
}
var tag = _self.createTag(
keyval,
prfx + (name ? name : values[i]),
);
cnt++;
_self.tags._el_appnd(tag);
}
}
}
}
_STDO.get(".filter-tags")[0].style.opacity = cnt <= 0 ? 0 : 1;
},
controlUrl: function (keyval, selected) {
var _self = this;
var key = keyval[0];
var active = _STDO.url.get(key);
if (
key == "p_from" ||
key == "p_till" ||
key == "s" ||
key == "o" ||
key == "search"
) {
_STDO.url.remove(key);
active = false;
}
if (selected) {
if (!active || active == null || active.indexOf(keyval[1]) === -1) {
if (active) _STDO.url.set(key, active + "." + keyval[1]);
else _STDO.url.set(key, keyval[1]);
}
} else {
if (active && active.indexOf(keyval[1]) > -1) {
var newvalue = active
.replace(keyval[1], "")
.replace(/^\.?|\.?$/g, "");
if (newvalue != "") _STDO.url.set(key, newvalue);
else _STDO.url.remove(key);
}
}
},
createProducts: function (init, totop) {
var _self = this;
init = init || false;
totop = totop || false;
_self.settings.productsLoaded = false;
_self.getProducts(function (data) {
_self.products._html_set("");
for (var i = 0; i < data.length; i++) {
var product = _self.createProduct(data[i]);
_self.products._el_appnd(product);
}
// f_shopFotoFadeIn('.shop-filter-products .products .fltr-fotoFadeIn', false);
f_shopInitImages(
".shop-filter-products .products .fltr-fotoFadeIn",
false,
);
_self.scrollIfNeeded(totop);
_self.settings.productsLoaded = true;
}, init);
_self.controlTags();
},
createProduct: function (data) {
var _self = this;
var aPhotos = [];
var inStock = data.stock;
// console.log(data)
if (data.photo_listagg) {
aPhotos = data.photo_listagg.split("|");
aPhotos.sort(function (a, b) {
var a_ord = a.split(":")[2];
var b_ord = b.split(":")[2];
return (a_ord ? a_ord : 9999) - (b_ord ? b_ord : 0);
});
}
// if(_self.settings.manualstock && data.prod_data != ''){
// var proddata = {}
// try{
// proddata = JSON.parse(data.prod_data);
// }catch (err){
// console.log('Wrong product data object', err);
// }
// inStock = proddata.stock
// }
var btw = _self.settings.btw === "excl" ? "_" + _self.settings.btw : "";
var price_is_zero = !data.price || data.price == "" || +data.price <= 0;
// var discount = _self.settings.payment && data.pdis_discount != '' && data.pdis_discount_type != '' && data.price != data.org_price;
var discount =
data.pdis_discount != "" &&
data.pdis_discount_type != "" &&
data.price != data.org_price;
if (!price_is_zero && discount) {
var discountLine;
if (data.pdis_discount_type === "VAL")
discountLine = "- € " + f_moneyformat(data.pdis_discount);
else if (data.pdis_discount_type === "PRC")
discountLine = "-" + Math.floor(data.pdis_discount) + "%";
}
var photos = _STDO.create("div", {
class: "fltr-product-photos " + (aPhotos.length > 1 ? "" : "empty"),
});
for (var i = 0; i < aPhotos.length && i < 4; i++)
photos._el_appnd(
_STDO
.create()
._el_appnd(
_STDO.create("span", {
class: "fltr-product-thumbs" + (i == 0 ? " active" : ""),
"data-base": _self.settings.imagesMap + data.prod_number,
"data-src": aPhotos[i].split(":")[0],
}),
),
);
var base = _self.settings.imagesMap + data.prod_number;
var url = _self.settings.prodUrl
.replace(
"{prod}",
encodeURIComponent(
data.prod_url == "" ? data.prod_number : data.prod_url,
),
)
.replace("{prod_nr}", data.prod_number);
var product = _STDO.create("a", {
class:
"fltr-product" +
(discount ? " discount" : "") +
(price_is_zero ? " no-price" : ""),
href: url,
data: data,
id: data.prod_number,
});
product._el_appnd(
_STDO
.create("div", { class: "fltr-product-photo" })
._el_appnd(
_STDO.create("span", {
class: "fltr-fotoFadeIn",
"data-base": aPhotos.length > 0 ? base : "",
"data-src": aPhotos.length > 0 ? aPhotos[0].split(":")[0] : "",
}),
)
._el_appnd(photos),
);
var info = _STDO.create("div", { class: "fltr-product-info" });
product._el_appnd(info);
info._el_appnd(
_STDO.create("div", {
class: "fltr-product-name",
html: data.prod_name,
}),
);
if (!inStock && _self.settings.manualstock) {
info._el_appnd(
_STDO.create("small", {
class: "fltr-product-price text-muted textDanger",
html: _self.settings.rentshop
? _STDO.lng.get("product-rented-out", true)
: _STDO.lng.get("product-sold-out", true),
}),
);
} else if (!price_is_zero) {
info._el_appnd(
_STDO.create("div", {
class: "fltr-product-price",
html: discount
? "€ " +
f_moneyformat(data["price" + btw]) +
"
€ " +
f_moneyformat(data["org_price" + btw]) +
""
: "€ " + f_moneyformat(data["price" + btw]),
}),
);
}
info._el_appnd(
_STDO.create("div", {
class: "fltr-product-description",
html:
"" +
(data.prod_short_description != ""
? data.prod_short_description
: data.prod_description) +
"",
}),
);
if (_self.settings.compare) {
info._el_appnd(
_STDO.create("div", {
class: "fltr-product-compare",
html:
' ' +
_STDO.lng.get("compare-product", true) +
"",
}),
);
}
if (discount)
product._el_appnd(
_STDO.create("span", {
class: "fltr-product-discount-badge",
html: discountLine,
}),
);
return product;
},
createTag: function (keyval, value) {
var _self = this;
var $tag = _STDO
.create("a", { class: "filter-tag", value: keyval })
._el_appnd(_STDO.create("span", { html: value }))
._el_appnd(_STDO.create("i", { class: "fa fa-times" }));
return $tag;
},
getProducts: function (cb, init) {
var _self = this;
init = init || false;
var aParam = {
c: "product",
a: "filterProducts",
p: {
filters: _self.settings.filters,
page: _self.settings.page,
init: init ? "init" : init,
range: _self.settings.range.length > 0,
filterId: _self.settings.filterId,
},
};
_self.toggleLoaders("disable");
_STDO.ajx(
_self.settings.ajax_url,
aParam,
function (data) {
_self.settings.payment = data.hasOwnProperty("payment")
? data.payment
: false;
_self.settings.rentshop = data.hasOwnProperty("rentshop")
? data.rentshop
: false;
_self.settings.compare = data.hasOwnProperty("compare")
? data.compare
: false;
_self.settings.manualstock = data.hasOwnProperty("manualstock")
? data.manualstock
: false;
_self.settings.stocklabel = data.hasOwnProperty("stocklabel")
? data.stocklabel
: false;
if (
_self.settings.payment &&
_self.settings.range.length == 0 &&
init &&
"pricerange" in data
)
_self.pricerange(data.pricerange);
_self.pagination(
data.hasOwnProperty("last") && data.last != false && init
? data.last
: false,
);
cb(data.products);
// cb(_self.settings.products.slice((4 * (_self.settings.page - 1)), 4))
_self.toggleLoaders("enable");
},
true,
);
},
setOptions: function () {
var _self = this;
for (var i = 0; i < sessionStorage.length; i++) {
var key = sessionStorage.key(i);
var needle = window.Org + "_set-";
if (key.lastIndexOf(needle, 0) === 0) {
_self.setOption(
key.split("-").reverse()[0],
sessionStorage.getItem(key),
);
}
}
},
setOption: function (mode, action) {
var _self = this;
var $options = _STDO.get(
".options",
_STDO.get(".shop-filter-products", _self.element)[0],
)[0];
if ($options) {
switch (mode) {
case "view":
var $parent = _STDO.get(".view", $options)[0];
if ($parent) {
_STDO.get(".view .active", $parent)[0]._clss_remove("active");
if (action === "horizontal") {
_self.products._clss_remove("blocks");
_self.products._clss_add("horizontal");
} else {
_self.products._clss_remove("horizontal");
_self.products._clss_add("blocks");
}
_STDO
.get('.view button[action="' + action + '"]')[0]
._clss_add("active");
}
break;
}
sessionStorage.setItem(window.Org + "_set-" + mode, action);
}
},
initRangefilter: function () {
var _self = this;
var $fltr = _STDO.get("#collapsePrice");
if ($fltr) {
var $inp1 = _STDO.get('[fltr-pricerange="0"]', $fltr)[0];
var $inp2 = _STDO.get('[fltr-pricerange="1"]', $fltr)[0];
$("#fltr-pricerange").slider({
range: true,
min: 0,
max: 0,
step: 1,
// values: [ 0, 0 ],
slide: function (event, ui) {
$inp1.value = ui.values[0];
$inp2.value = ui.values[1];
},
change: function (event, ui) {
if (event.originalEvent) {
var keyvalfrom = ["p_from", ui.values[0]],
keyvaltill = ["p_till", ui.values[1]];
$inp1.value = ui.values[0];
$inp2.value = ui.values[1];
var addfrom = ui.values[0] > _self.settings.range[0];
var addtill = ui.values[1] < _self.settings.range[1];
_self.controlUrl(keyvalfrom, addfrom);
_self.controlFilters(keyvalfrom, addfrom);
_self.controlUrl(keyvaltill, addtill);
_self.controlFilters(keyvaltill, addtill);
_self.settings.page = 1;
_STDO.url.remove("page");
_self.createProducts(true, true);
}
},
});
}
},
pagination: function (last) {
var _self = this;
last = last || false;
var pager = _self.pager;
var prv, txt, nxt;
if (last) {
//init
_self.settings.lastPage = last;
_self.pager._html_set("");
if (last > 1) {
prv = _STDO.create("li", {
class: "prv",
html: '',
});
pager._el_appnd(prv);
var language = document.documentElement._attr_get("lang");
txt = _STDO.create("span", {
html:
_STDO.lng.get("page-page", true) +
" " +
_self.settings.page +
" " +
_STDO.lng.get("page-from", true) +
" " +
last,
});
pager._el_appnd(txt);
nxt = _STDO.create("li", {
class: "nxt",
html: '',
});
pager._el_appnd(nxt);
}
} else {
prv = _STDO.get(".prv", pager)[0];
nxt = _STDO.get(".nxt", pager)[0];
_STDO
.get("span", _STDO.get("span", pager)[0])[0]
._html_set(_self.settings.page);
}
if (prv && nxt) {
var state = {
filters: _self.settings.filters,
page: _self.settings.page,
};
if (_self.settings.page <= 1) {
prv._clss_add("disabled");
_STDO.url.remove("page");
} else {
prv._clss_remove("disabled");
_STDO.url.set("page", _self.settings.page);
}
if (_self.settings.page >= _self.settings.lastPage)
nxt._clss_add("disabled");
else nxt._clss_remove("disabled");
}
},
pricerange: function (range) {
var _self = this;
var $slider = $("#fltr-pricerange"),
from = +range[0],
till = +range[1];
if ($slider.length > 0) {
_self.settings.range = [from, till];
$slider.slider("option", "min", from);
$slider.slider("option", "max", till);
var p_from = _STDO.url.get("p_from") || from;
var p_till = _STDO.url.get("p_till") || till;
$slider.slider("values", [p_from, p_till]);
var $fltr = _STDO.get("#collapsePrice");
var $inp1 = _STDO.get('[fltr-pricerange="0"]', $fltr)[0];
var $inp2 = _STDO.get('[fltr-pricerange="1"]', $fltr)[0];
var onchnge = function () {
if (this.value < p_from) this.value = p_from;
else if (this.value > p_till) this.value = p_till;
};
$inp1.value = p_from;
$inp1.min = p_from;
$inp1.max = p_till;
$inp1.onchange = onchnge;
$inp2.value = p_till;
$inp2.min = p_from;
$inp2.max = p_till;
$inp2.onchange = onchnge;
}
},
scrollIfNeeded: function (totop) {
var _self = this;
totop = totop || false;
var offset = false;
if (totop) {
var bodyRect = document.body.getBoundingClientRect(),
elemRect = _self.element
.closest("[object-parent]")
.getBoundingClientRect();
offset = elemRect.top < 0 ? elemRect.top - bodyRect.top : false;
} else {
var storage = sessionStorage.getItem(_self.settings.pagCode64);
offset = storage ? storage : false;
}
if (offset) window.scrollTo(0, offset);
},
scrollControl: function () {
var _self = this;
window.addEventListener("load", function (e) {
_self.settings.loadTime = e.timeStamp;
});
window.addEventListener(
"scroll",
function (e) {
if (
!_self.settings.loadTime ||
e.timeStamp - _self.settings.loadTime < 100
)
return;
window.clearTimeout(_self.settings.scrollTimer);
_self.settings.scrollTimer = setTimeout(function () {
var offset =
(window.pageYOffset || document.documentElement.scrollTop) -
(document.documentElement.clientTop || 0);
if (offset > 0)
sessionStorage.setItem(_self.settings.pagCode64, offset);
else sessionStorage.removeItem(_self.settings.pagCode64);
}, 150);
},
false,
);
},
toggleLoaders: function (action) {
var _self = this;
var $filters = _self.filters;
var $products = _self.products.parentElement;
if ($filters)
if (action === "disable") $filters._clss_add("loading");
else if (action === "enable") $filters._clss_remove("loading");
if ($products)
if (action === "disable") $products._clss_add("loading");
else if (action === "enable") $products._clss_remove("loading");
},
uncheckInputs: function (selector, parent) {
var _self = this;
parent = parent || document;
var inputs = _STDO.get(selector, parent);
for (var i = 0; i < inputs.length; i++) inputs[i].checked = false;
},
unsetRange: function (unset) {
var _self = this;
var $fltr = _STDO.get("#collapsePrice");
if ($fltr) {
_STDO.loop(unset, function (i, v) {
var idx = v == "p_from" ? 0 : 1;
$("#fltr-pricerange").slider(
"values",
idx,
_self.settings.range[idx],
);
_STDO.get('[fltr-pricerange="' + idx + '"]', $fltr)[0].value =
_self.settings.range[idx];
});
}
},
});
$.fn[pluginName] = function (options) {
var args = arguments;
return this.each(function () {
if (!$.data(this, "plugin_" + pluginName))
$.data(this, "plugin_" + pluginName, new Plugin(this, options));
});
};
$(".shop-filter").Filter();
})(jQuery, window, document);
/*
_ _ _ _
___| |_ ___(_) _| | ___ _ __ | |
__/ __| _| __| |/ _ |/ _ \_| /_ `| |___
[__\__ \ |_| _|| | (_| | (_) )| | | | |_ _]
(___/\__|___|_|\__/_|\___(_)_| |_|___)
___ _ __ __ ___
/ _| / \/ `/ __|
( (_| | | | | \__ \
\___/_| |_| |_|___/
_ _ _ _
___| |_ ___(_) _| | ___ _ __ | |
/ __| _| __| |/ _ |/ _ \ | /_ `| |
\__ \ |_| _|| | (_| | (_) || | | | |_
|___/\__|___|_|\__/_|\___(_)_| |_|___|
*/
; (function ($, window, document, undefined) {
"use strict";
var pluginName = "Wizard",
defaults = {
ajx_url: {
wizard: '/api/SHOP/AJAX/main',
cart: '/api/SHOP/AJAX/cart?target=cart',
customer: '/api/SHOP/AJAX/customer',
discount: '/api/SHOP/AJAX/discount'
},
index: 0,
servicepoints: {},
servicepointSelected: 0,
country: 'NL',
latlng: {},
markers: {},
activeTab: '',
activeBilling: '',
mapInitialized: false
}
function Plugin(element, options) {
this.element = element;
this.$element = $(element);
this.settings = $.extend({}, defaults, options);
this._name = pluginName;
this.init();
return this;
}
$.extend(Plugin.prototype, {
init: function(){
var _self = this;
_self.$header = $('#wizard-header');
_self.$body = $('#wizard-body');
_self.header = _STDO.get('#wizard-header');
_self.err = _STDO.get('#wizard-err');
_self.body = _STDO.get('#wizard-body');
_self.settings.index = _self.element._attr_get('data-index');
_self.getWizardStep(_self.settings.index);
_self.bindEvents();
_self.resetUrl();
},
bindEvents: function(){
var _self = this;
_self.$header
.on("click", "li.active", function(evt){
evt.preventDefault();
})
.on("click", "li:not(.active)", function(evt){
evt.preventDefault();
var idx = this._attr_get('data-index')//(_self.settings.index > $(this).index() ? idx + ($(this).index()+1) - (_self.settings.index+1): (_self.settings.index+1) - ($(this).index()+1));
if($(this).is('.complete')) //|| _self.$header.find('li[data-index="'+(+idx-1)+'"]').is('.active')
_self.getWizardStep(idx, $(this).is('.complete'));
})
_self.$body
.on("click", ".right>button", function(evt){
evt.preventDefault();
_self.getWizardStep();
})
.on("change", "div.wizard-card-item.form input", function(){
validateField($(this));
})
.on("click", ".wizard-card-item .shop-product-amount .input-group-addon", function(evt){
evt.preventDefault();
var action = this._attr_get('action');
var input = _STDO.get('.form-control', this.parentNode)[0];
input.value = (action == 'plus' ? +input.value +1 : +input.value -1)
$(input).trigger('change')
})
.on("submit", ".discount #discount-form", function(evt){
evt.preventDefault();
_self.useDiscount(evt.target);
})
.on("click", ".discounts i[data-code]", function(evt){
evt.preventDefault();
_self.removeDiscount(evt.target);
})
.on("click", "[class*=o-]>h3>i", function(evt){
evt.preventDefault();
var parent = this.closest('.wizard-card-item')
var idx = parent._el_mtch('.o-cart') ? 0 : (parent._el_mtch('.o-addresses') ? 1 : 2);
_self.getWizardStep(idx, true);
})
.on("change", ".wizard-card-item .shop-product-amount input", function(evt){
var id = evt.target.closest('.wizard-card-item[id]').id;
if(evt.target.value == '')
evt.target.value = '1';
_self.updateAmount(id, evt.target.value);
})
.on("input", ".discount input", function(evt){
var value = this.value.toUpperCase().replace(/[^A-Z0-9]/g, '-');
if(value.length >= 50){
value = value.substr(0, 50);
}
evt.target.value = value
var btn = _STDO.get('button', evt.target.parentNode)[0];
var message = _STDO.get('span', evt.target.parentNode)[0];
btn._el_shw();
message._el_hde();
if(value.length > 0){
btn._clss_remove('disabled')
}else{
btn._clss_add('disabled')
}
})
.on("change", "#wizard-login input[placeholder]", function(){
_STDO.get('#login-message')._html_set('');
})
.on("submit", "#wizard-login", function(evt){
var values = $(this).serializeArray();
evt.preventDefault();
var param = [];
var btn = _STDO.get('input[type=submit]', this)[0];
for(var i = 0; i < values.length; i++){
param[values[i].name] = values[i].value;
}
_STDO.btn.loading(btn);
shopAuthorize(param.email, param.password, function(message){
if(typeof message === "object"){
//oke
_self.getWizardStep(1, true);
_STDO.get('#login-message')._html_set('');
var menucustitem = _STDO.get('#menucust')
if(menucustitem){
var menuitem = _STDO.get('a', menucustitem)
if(menuitem && menuitem.length > 0){
menuitem[0]
._html_set('')
._el_appnd(_STDO.create('i', {'class': 'fa fa-fw fa-lg fa-user'}))
._el_appnd(document.createTextNode(message.cust_name))
}
}
}else{
_STDO.get('#login-message')._html_set(message);
_STDO.btn.loading(btn, true);
_self.scrollToTop();
}
})
})
.on("click", ".shop-signout", function(evt){
evt.preventDefault();
shopSignout(function(){
_self.getWizardStep(1, true, 'back');
var menuitem = _STDO.get('a', _STDO.get('#menucust'))
if(menuitem && menuitem.length > 0){
menuitem[0]
._html_set('')
._el_appnd(_STDO.create('i', {'class': 'fa fa-fw fa-lg fa-user'}))
._el_appnd(document.createTextNode(_STDO.lng.get('login', true)))
}
})
})
.on("click", "#continue, #back, #register", function(evt){
evt.preventDefault();
_self.getWizardStep(1, (this.id == 'back'), this.id);
})
.on("click", ".editaddricon", function(evt){
evt.preventDefault();
_self.toggleForms(this);
})
.on("click", ".editaddr>input[type=button]:not(.disabled)", function(evt){
evt.preventDefault();
_self.editAddress(this);
})
.on("click", ".newaddr>input[type=button]:not(.disabled)", function(evt){
evt.preventDefault();
_self.newAddress(this);
})
.on("change", "input[name*=wrdaddr]", function(evt){
evt.preventDefault();
_self.toggleForms(this);
var addrs = _STDO.get('.a-wrap', this.closest('.addresses'));
_STDO.loop(addrs, function(i, v){
v._clss_add('disabled');
})
_STDO.get('.a-wrap', this.closest('.addr'))[0]._clss_remove('disabled');
_self.settings.servicepointSelected = 0
if(this.closest('.billing')){
_self.settings.servicepoints = {}
_self.settings.markers = {}
_self.settings.activeBilling = this.value
_self.refreshServicePoint()
}else{
if(this.closest('.wzrd-service-point-item')){
var id = this.id
_self.settings.servicepointSelected = id
}
}
})
.on("click", "#register-submit", function(evt){
evt.preventDefault();
var _this = this;
var values = false;
var $form = _self.$body.find('div.wizard-card-item.form');
var $fields = $form.find('input[type], select');
if(!_self.validateFields($fields)){
return false;
}else{
values = $fields.serializeArray()
}
_STDO.btn.loading(_this);
shopRegister(values, function(data){
_STDO.btn.loading(_this, true);
_STDO.get('#wizard-err')._html_set('');
if(!data.suc){
_STDO.get('#wizard-err')._html_set(data.msg);
}else{
if(data.msg == ''){
_self.getWizardStep(1, true);
}else{
var wrapper = _this.closest('.login')
var message = _STDO.create('span', {'class': 'register-message', html: data.msg})
wrapper._html_set('');
wrapper._el_appnd(message);
_self.scrollToTop();
}
}
})
})
.on("click", ".remove-item", function(evt){
evt.preventDefault();
var number = evt.target.closest('.wizard-card-item').id
$('#cart, #menucart, #inlinecart').each(function(){$(this).data('plugin_Cart').removeItem(number)})
})
.on("shown.bs.tab", ".addr-navigation>.nav>li>a", function(evt){
_self.settings.activeTab = this.getAttribute('href').substring(1)
_self.refreshServicePoint()
})
.on("click", ".wzrd-service-point-item .fa-map-marker", function(evt){
var point = this.closest('.wzrd-service-point-item').data.point
var marker = _self.settings.markers[point.id]
var latLng = marker.getPosition();
_self.map.panTo(latLng);
new google.maps.event.trigger(marker, 'click');
_self.removePopover()
})
.on("click", ".wzrd-service-point-item .fa-ellipsis-h", function(evt){
var point = this.closest('.wzrd-service-point-item').data.point
var $openingtimes = _STDO.create('table', {'class': 'wizard-opening-times'})
for(var key in point.openingtimes){
var $row = _STDO.create('tr')
$row._el_appnd(_STDO.create('td', {'html': '' + _STDO.lng.get('weekday-' + key, true) + ''}))
$row._el_appnd(_STDO.create('td', {'html': (point.openingtimes[key].length && point.openingtimes[key][0] !== '00:00 - 00:00' ? point.openingtimes[key][0] : ''+_STDO.lng.get('openingtimes-closed', true)+'')}))
$openingtimes._el_appnd($row)
}
var _this = $(this)
_self.removePopover()
_self.popover = _this.popover({
content: $openingtimes.outerHTML,
html: true,
container: 'body'
});
if(_this.is('[aria-describedby]')){
_self.removePopover()
}else{
_self.popover.popover('show');
}
})
},
refreshServicePoint: function(){
var _self = this
if(_self.settings.activeBilling != '' && _self.settings.activeTab === 'wzrd-tab-service'){
if(_self.infowindow){
_self.infowindow.close()
}
$.post({
url: _self.settings.ajx_url.wizard,
data: {
'c': 'wizard',
'a': 'getFullAddress',
'p': {
id: _self.settings.activeBilling
}
},
noLoading: true,
dataType: 'json',
success: function(data){
if(!data.err){
_self.settings.country = data.suc.addr_country
var send = {
address: data.suc.addr_address1,
number: data.suc.addr_address2,
place: data.suc.addr_city
}
f_getLatLng(send, function(latlng){
if(latlng){
_self.latlng = new google.maps.LatLng(latlng.lat, latlng.lng);
if(_self.settings.mapInitialized){
_self.map.setCenter(_self.latlng);
}else{
_self.initMap()
}
}else{
console.log('Invalid address');
}
})
}
}
})
}
},
initMap: function(){
var _self = this
_self.$tab = _STDO.get('#' + _self.settings.activeTab);
_self.$tab.innerHTML = ''
var $wrapper = _STDO.create('div', {'id': 'wzrd-service-map'});
var $side = _STDO.create('div', {'class': 'points shop-select-list'})
_self.$pointsList = _STDO.create('ul')
$side._el_appnd(_self.$pointsList)
var $map = _STDO.create('div', {'class': 'map'})
$wrapper._el_appnd($side)
$wrapper._el_appnd($map)
_self.$tab._el_appnd($wrapper)
_self.map = new google.maps.Map($map, {
center: _self.latlng,
zoom: 12,
streetViewControl: false,
gestureHandling: "cooperative",
mapTypeId: google.maps.MapTypeId.ROADMAP
});
_self.infowindow = new google.maps.InfoWindow({
content: '',
maxWidth: 250
});
google.maps.event.addDomListener(window, 'resize', function(){
var center = map.getCenter();
google.maps.event.trigger(_self.map, "resize");
_self.map.setCenter(center);
});
google.maps.event.addListenerOnce(_self.map, 'idle', function(){
_self.settings.mapInitialized = true
});
google.maps.event.addDomListener(_self.map, 'idle', function(){
var bounds = _self.map.getBounds();
var ne = bounds.getNorthEast();
var sw = bounds.getSouthWest();
var center = _self.latlng;
_self.getServicePoints(center, ne, sw);
});
},
getServicePoints: function(center, northeast, southwest){
var _self = this;
$.post({
url: _self.settings.ajx_url.wizard,
data: {
'c': 'wizard',
'a': 'getServicePoints',
'p': {
country: _self.settings.country,
center: [center.lat, center.lng],
northeast: [northeast.lat(), northeast.lng()],
southwest: [southwest.lat(), southwest.lng()]
}
},
noLoading: true,
dataType: 'json',
success: function(data){
_self.setServicePoints(data['suc'])
var $points = $('#wzrd-service-map .points')
$points.off('scroll')
$points.scroll(function(){
_self.removePopover()
})
}
})
},
setServicePoints: function(points){
var _self = this
_self.$pointsList.innerHTML = ''
_self.$pointsList.scrollTop = 0;
for(var i = 0; i < points.length; i++){
if(!_self.settings.servicepoints.hasOwnProperty(points[i].id)){
_self.settings.servicepoints[points[i].id] = points[i]
var latlng = new google.maps.LatLng(points[i].marker.latitude, points[i].marker.longitude);
_self.settings.markers[points[i].id] = new google.maps.Marker({
position: latlng,
map: _self.map
})
google.maps.event.addListener(_self.settings.markers[points[i].id], 'click', (function(marker, i) {
return function() {
var $html = '
' + points[i].address.addr_address1 + ' ' + points[i].address.addr_address2;
$html += ',
' + points[i].address.addr_zip + ' ' + points[i].address.addr_city + '