PageSourceSearch

https://www.photo-mosaic.co.uk/wp-content/themes/FME/js/functions_new.js

js photo-mosaic.co.uk collected 2026-09-26 05:36:13 UTC 38,687 bytes, 1,266 lines download raw bytes

1var scroll_y = 0;
2var has_scrolled = false;
3var isMobile = {
4  Android: function () {
5    return navigator.userAgent.match(/Android/i);
6  },
7  BlackBerry: function () {
8    return navigator.userAgent.match(/BlackBerry/i);
9  },
10  iOS: function () {
11    return navigator.userAgent.match(/iPhone|iPad|iPod/i);
12  },
13  Opera: function () {
14    return navigator.userAgent.match(/Opera Mini/i);
15  },
16  Windows: function () {
17    return navigator.userAgent.match(/IEMobile/i);
18  },
19  any: function () {
20    return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
21  }
22};
23
24
25if (typeof Cookies.get('pids') == 'undefined') {
26  Cookies.set('pids', postID, { expires: 1, domain: translate['cookie_domain'], path: '/' });
27} else {
28  var temp_pids = Cookies.get('pids').split(',');
29  var last_pid = temp_pids.slice(-1)[0];
30  if (last_pid != postID) {
31    Cookies.set('pids', Cookies.get('pids') + ',' + postID, { expires: 1, domain: translate['cookie_domain'], path: '/' });
32  }
33}
34
35
36if (typeof Cookies.get('VLOG') == 'undefined') {
37  jQuery.ajax({
38    type: 'POST',
39    url: '/global/classes/class.ajax-functions.php?class=ajax&func=get_cookie_value',
40    success: function (data) {
41      data = jQuery.parseJSON(data);
42      if (data.result != null) {
43        Cookies.set('VLOG', data.result, { expires: 365, domain: translate['cookie_domain'], path: '/' });
44        xVlog = Cookies.get('VLOG');
45      }
46    }
47  });
48} else {
49  xVlog = Cookies.get('VLOG');
50}
51
52if (typeof Cookies.get('ip_country') == 'undefined') {
53  /*
54jQuery.ajax({
55    type: 'POST',
56    url: '/global/classes/class.ajax-functions.php?class=ajax&func=get_ip_country',
57    success: function (data) {
58        data = jQuery.parseJSON(data);
59        if (data.result != null) {
60            Cookies.set('ip_country', data.result, { expires: 14, domain: translate['cookie_domain'], path: '/' });
61        }
62    }
63});
64  */
65}
66
67if (typeof Cookies.get('VISITED') == 'undefined') {
68  if (xLanguage == 'de' && postID == '2') {
69    //triggerHeatmap();
70  }
71  Cookies.set('VISITED', 1, { expires: 7, domain: translate['cookie_domain'], path: '/' });
72  window.localStorage.clear();
73}
74
75
76jQuery(document).on('submit', '.ajax-form', function (e) {
77  e.preventDefault();
78  var form = jQuery(this);
79  var formdata = form.serializeArray();
80  var values = {};
81  jQuery.each(formdata, function () {
82    values[this.name] = this.value;
83  });
84  form.find('input[type=checkbox], input[type="radio"]').each(function () {
85    if (this.value == 0) {
86      values[this.name] = this.value;
87    }
88  });
89  if (typeof values['class'] == 'undefined') {
90    values['class'] = 'ajax';
91  }
92  //var url = form.attr('action');
93  if (values['func'] == 'contactMail') {
94    var captchaToken = jQuery('input[name="cf-turnstile-response"]').val();
95    if (!captchaToken) {
96      //alert('Bitte Captcha bestätigen.');
97      return;
98    }
99    values['captcha_token'] = captchaToken;
100  }
101  var url = '/global/classes/class.ajax-functions.php?class=' + values['class'] + '&func=' + values['func'];
102  if (ValidateForm(form)) {
103    jQuery.ajax({
104      type: 'POST',
105      url: url,
106      dataType: 'json',
107      data: { params: values },
108      success: function (data) {
109        if (data.error == 0) {
110          if (form.find('input[name="ajax_callback"]').length) {
111            var func_callback = form.find('input[name="ajax_callback"]').val();
112            window[func_callback](form, data['result']);
113          } else {
114            SwitchSubmitBtn(form, data['result']);
115          }
116        } else {
117          OpenErrorBox('<p>' + data.error + '</p>');
118        }
119
120      }
121    });
122  }
123});
124
125
126jQuery(document).ready(function ($) {
127
128  /*------------------------------------*\
129      # PLUGINS
130  \*------------------------------------*/
131
132  $('select.custom-select-contact').selectBoxIt({
133    defaultText: translate['callback_select'],
134  });
135  $('select.custom-select-formats').selectBoxIt({
136    dynamicPositioning: false
137  });
138
139  if ($('.template-slider').length) {
140    var start_slide = $('.js-template-slider').attr('data-start');
141    var template_slider = new Siema({
142      selector: '.js-template-slider',
143      easing: 'ease-out',
144      perPage: 1,
145      startIndex: start_slide,
146      draggable: true,
147      multipleDrag: true,
148      threshold: 20,
149      loop: true,
150      rtl: false,
151      onInit: function () {
152        $('.js-template-slider').addClass('finished');
153        $('.js-template-slider').imagesLoaded(function () {
154          ChangeTemplateSlider(parseInt(start_slide));
155        });
156      },
157      onChange: function () {
158        ChangeTemplateSlider(template_slider.currentSlide);
159      }
160    });
161
162    $('.template-slider .js-next').on('click', function () {
163      template_slider.next();
164    });
165    $('.template-slider .js-prev').on('click', function () {
166      template_slider.prev();
167    });
168  }
169
170  if (xLanguage == 'en' && Cookies.get('ip_country') == 'US' && typeof Cookies.get('usa_dismissed') == 'undefined') {
171    setTimeout(function () {
172      $.fancybox.open({
173        src: '/wp-content/themes/FME/js/templates/us_visitor.php',
174        type: 'ajax',
175        opts: {
176          /*
177          clickSlide: false,
178          clickOutside: false,
179          closeClick: false,
180          */
181          touch: false,
182          beforeClose: function (instance, current, e) {
183            Cookies.set('usa_dismissed', 1, { expires: 14, domain: translate['cookie_domain'], path: '/' });
184          }
185        }
186      });
187    }, 2000);
188  }
189
190  if (typeof Cookies.get('cookieconsent_dismissed') == 'undefined') {
191    Cookies.set('cookieconsent_dismissed', 'yes', { expires: 30, path: '/' });
192  }
193
194
195
196
197  /*------------------------------------*\
198      # GENERAL
199  \*------------------------------------*/
200
201  /*
202  if (getParameterByName(window.location.href, 'tracking_no')) {
203      ShowTrackingInfo(getParameterByName(window.location.href, 'tracking_no'));
204  }
205  if (getParameterByName(window.location.href, 'order_no')) {
206  var cid = getParameterByName(window.location.href, 'order_no');
207  var zip = getParameterByName(window.location.href, 'zip');
208  $('input[name="cid"]').val(cid);
209  $('input[name="plz"]').val(zip);
210  $('form[name="order-status"]').submit();
211  }
212  */
213
214  var temp_date = new Date();
215  if (xLanguage == 'de') {
216    $('.js-date-1').text(temp_date.getDate() + '. ' + translate['month_' + (temp_date.getMonth() + 1)]);
217  } else if (xLanguage == 'en') {
218    $('.js-date-1').text(temp_date.getDate() + ' ' + translate['month_' + (temp_date.getMonth() + 1)]);
219  }
220  /*
221  $('.fb-help-box .btn').on('click', function(){
222      var parser = new UAParser();
223      var detection = parser.getResult();
224      var params = new Object();
225      params['vlog'] = xVlog;
226      params['step'] = parseInt(jQuery('body').attr('data-step'));
227      params['message'] = jQuery('.fb-help-box textarea').val();
228      params['contact'] = jQuery('.fb-help-box input[name="contact"]').val();
229      params['browser'] = detection.browser.name+' '+detection.browser.version;
230      params['os'] = detection.os.name+' '+detection.os.version;
231      
232      jQuery.ajax({
233          type: 'POST',
234          data: { params: params },
235          url: 'https://api2.xxlpix.com/b2c/functions/class.Functions.php?class=ajax&func=submitHelpBox',
236          success: function (data) {
237              $('.fb-help-box button').hide();
238              $('.fb-help-box .js-response').show();
239          }
240      });
241  });
242  */
243
244  $('.js-popup').fancybox({
245    arrows: false,
246    infobar: false,
247    protect: true,
248    wheel: false,
249    buttons: [
250      'close'
251    ],
252    touch: false,
253  });
254
255  /*
256  $('.js-zoom').on('click', function(){
257      if (isMobile.any() != null) {
258          var src = $(this).attr('data-magnify-src');
259          window.open(src);
260      } else {
261          // fix 
262          var counter = 0;
263          var element = $(this);
264          element.off('click');
265          ToggleAreaLoading(element, 1);
266          var image = new Image();
267          image.src = element.attr('data-magnify-src');
268          image.onload = function(){
269              counter++;
270              if (counter == 1) {
271                  element.children('img').remove();
272                  element.prepend(image);
273                  ToggleAreaLoading(element, 0);
274                  wheelzoom(element.children('img'));
275              }
276          };
277      }
278  });
279  */
280
281  $('.js-link').on('click', function () {
282    var link = $(this).attr('data-link');
283    window.location.href = link;
284  });
285
286  $('.js-zoom').on('click', function () {
287    if (isMobile.any() != null) {
288      var src = $(this).attr('data-magnify-src');
289      window.open(src);
290    }
291  });
292  $('.js-zoom').on('mouseenter', function () {
293    var element = $(this);
294    if (!$(this).hasClass('initialized')) {
295      element.addClass('initialized');
296      // fix 
297      var counter = 0;
298      element.off('click');
299      element.prop('title', translate['zoom_title_2']);
300      toggleLoadingNew(element, 1);
301      var zoom_max = 500
302      if (typeof element.attr('data-zoom-max') != 'undefined') {
303        zoom_max = parseInt(element.attr('data-zoom-max'));
304      }
305      var image = new Image();
306      image.src = element.attr('data-magnify-src');
307      image.onload = function () {
308        counter++;
309        if (counter == 1) {
310          element.children('img').remove();
311          element.prepend(image);
312          toggleLoadingNew(element, 0);
313          element.zoom({
314            url: image.src,
315            magnify: 0.5,
316          });
317        }
318      };
319    }
320  });
321
322  /*
323  $('.js-zoom').on('mouseenter', function(e){
324    var element = $(this);
325    if (!$(this).hasClass('initialized')) {
326    $(this).addClass('initialized');			
327    if (isMobile.any() != null) {
328            var src = $(this).attr('data-magnify-src');
329            window.open(src);
330        } else {
331            // fix 
332            var counter = 0;
333            element.off('click');
334            element.prop('title', translate['zoom_title_2']);
335            ToggleAreaLoading(element, 1);
336            var zoom_max = 500
337            if (typeof element.attr('data-zoom-max') != 'undefined') {
338                zoom_max = parseInt(element.attr('data-zoom-max'));
339            }
340            var image = new Image();
341            image.src = element.attr('data-magnify-src');
342            image.onload = function(){
343                counter++;
344                if (counter == 1) {
345                    element.children('img').remove();
346                    element.prepend(image);
347                    element.children('img').smoothZoom({
348                        width: '100%',
349                        zoom_MAX: zoom_max,
350                        pan_BUTTONS_SHOW: false,
351                        zoom_BUTTONS_SHOW: false,
352                        zoom_OUT_TO_FIT: false,
353                        on_IMAGE_LOAD: function(a, b){
354                            setTimeout(function(){
355                                ToggleAreaLoading(element, 0);
356                                var target = element.find('img');
357                                var zoomData = target.smoothZoom('getZoomData');
358                                target.smoothZoom('focusTo', {
359                                    y: zoomData.centerY,
360                                    x: zoomData.centerX,
361                                    zoom: 350,
362                                    //zoom: 200,
363                                    speed: 10,
364                                });
365                            }, 500);
366                        }
367                        
368                    });
369                }
370            };
371        }
372    } else {
373      var target = element.find('img');
374        var zoomData = target.smoothZoom('getZoomData');
375        if (typeof zoomData != 'undefined') {
376          //var parentOffset = element.offset(); 
377      //var x = e.pageX - parentOffset.left;
378      //var y = e.pageY - parentOffset.top;
379        target.smoothZoom('focusTo', {
380              y: zoomData.centerY,
381              x: zoomData.centerX,
382              //x: x,
383              //y: y,
384              zoom: 350,
385              speed: 10,
386          });
387        }
388          
389    }
390  });
391  $('.js-zoom').on('mouseleave', function(e){
392    if ($(this).hasClass('initialized')) {
393      var element = $(this);
394      var target = element.find('img');
395        var zoomData = target.smoothZoom('getZoomData');
396      target.smoothZoom('focusTo', {
397            y: zoomData.centerY,
398            x: zoomData.centerX,
399            zoom: 1,
400            speed: 10,
401        });
402    }
403  });
404  */
405
406
407  $('.js-toggle-more').on('click', function () {
408    var id = $(this).attr('data-id');
409    $('.hidden[data-id="' + id + '"]').slideToggle('fast');
410  });
411
412
413  $('.js-show-tip .js-trigger').on('click', function () {
414    $(this).parents('.js-show-tip').find('.hidden').slideToggle('fast');
415  });
416
417
418  if ($('.delivery-calendar').length) {
419    var delivery_refresh_counter = setInterval(function () {
420      if (BerlinTime() > 12) {
421        ChangeDelivery($('.js-select-size'));
422        clearInterval(delivery_refresh_counter);
423      }
424    }, 1000);
425  }
426
427  if ($('.js-delivery-date').length) {
428    if (BerlinTime() > 12) {
429      $.ajax({
430        type: 'POST',
431        url: 'https://api2.xxlpix.com/b2c/functions/class.Functions.php?class=ajax&func=getShippingDate',
432        success: function (data) {
433          data = jQuery.parseJSON(data);
434          if (data.result != null) {
435            $('.js-delivery-date').each(function () {
436              $(this).text(data.result);
437            });
438          }
439        }
440      });
441    }
442  }
443
444  $('.form-coupon-creator input, .form-coupon-creator select').on('blur', function () {
445    var title = $('.form-coupon-creator input[name="title"]').val();
446    var from = $('.form-coupon-creator input[name="name_from"]').val();
447    var to = $('.form-coupon-creator input[name="name_for"]').val();
448    var value = $('.form-coupon-creator select option:selected').text();
449
450    if (title != '') {
451      $('.js-title').text(title);
452    }
453    if (from != '') {
454      $('.js-name-from').text(from);
455    }
456    if (to != '') {
457      $('.js-name-for').text(to);
458    }
459    $('.js-value').text(value);
460  });
461
462  $('.form-coupon-creator .js-submit').on('click', function () {
463    var params = new Object();
464    params['ref'] = 'FME';
465    params['language'] = xLanguage;
466    params['value'] = $('select[name="coupon_value"]').val();
467    params['currency'] = xCurrency;
468    params['cart_id'] = xVlog;
469
470    jQuery.ajax({
471      type: 'POST',
472      dataType: 'jsonp',
473      jsonp: 'jsonp_callback',
474      data: { params: params },
475      url: translate['lwf_url'] + 'global/ajax/ajax-functions.php?func=coupon_submit',
476      success: function (data) {
477        window.location.href = translate['lwf_order_url'] + '?step=2&vlog=' + xVlog;
478      }
479    });
480  });
481
482
483  $('.js-open-fb').on('click', function () {
484    OpenFancyBox($(this));
485  });
486
487
488  $('.js-tabify .navi li').on('click', function () {
489    if (!$(this).hasClass('disabled')) {
490      TabifySwitchState($(this), $(this).index() + 1);
491    }
492  });
493
494  $('.js-switch-tab').on('click', function () {
495    TabifySwitchState($('.js-tabify .navi li:first-child'), $(this).attr('data-target'));
496  });
497
498  $('.js-image-viewer .thumbs li').on('click', function () {
499    $(this).addClass('active').siblings('li').removeClass('active');
500    var src = $(this).find('img').attr('data-switch');
501    var target = $(this).parents('.js-image-viewer').children('.wrap');
502    var image = new Image();
503    image.src = src;
504    ToggleAreaLoading(target, 1);
505    image.onload = function () {
506      target.html(image);
507      ToggleAreaLoading(target, 0);
508    };
509  });
510
511
512
513
514
515  /*------------------------------------*\
516      # SPECIFIC
517  \*------------------------------------*/
518
519  $('.full-layouts-wrap .big-filter li, .full-layouts-wrap .big-filter h3, .full-layouts-wrap .top-filter li').on('click', function () {
520    FilterLayouts($(this));
521  });
522
523
524  $('.price-table .js-show-info').on('click', function () {
525    TogglePriceTableInfo($(this));
526  });
527  $('.price-table .nav span').on('click', function () {
528    SwitchPriceTable($(this));
529  });
530  $('.js-price-table-switch').on('click', function () {
531    SwitchPriceTablePrice($(this));
532  });
533  $('.js-landing-price-switch').on('click', function () {
534    SwitchLandingPrice($(this));
535  });
536
537
538  $('.js-select-region, .js-select-size').on('change', function () {
539    ChangeDelivery($(this));
540  });
541
542
543  $('.accordion li').on('click', function () {
544    var el = $(this);
545    el.toggleClass('active').siblings().removeClass('active');
546  });
547
548
549  $('.order-status-new').on('click', '.js-edit', function () {
550    var cid = $(this).attr('data-cid');
551    jQuery.fancybox.open({
552      src: '/apps/lwf_agf_global/themes/LWF_new/js/templates/change-address.php?cid=' + cid + '&language=' + xLanguage,
553      type: 'ajax',
554      touch: false
555    });
556  });
557
558
559  $('.js-cart-popover').hover(
560    function (e) {
561      RenderCartPopover();
562    },
563    function (e) {
564      RenderCartPopover();
565    }
566  );
567
568  UpdateCartCounter();
569
570
571  $('.suspensions .btn').on('click', function () {
572    var id = $(this).attr('data-id');
573    var quantity = $(this).parents('.suspensions').find('[name="quantity"]').val();
574    AddSuspensionToCart(id, quantity);
575  });
576
577  $('.js-content-switcher .thumbs li').on('click', function () {
578    var element = $(this);
579    var parent = element.parents('.js-content-switcher');
580    var insert = element.html();
581    if (element.hasClass('js-360')) {
582      insert = '<div class="threesixty-wrapper"><div class="threesixty rotate-360"><div class="spinner"><span>0%</span></div><ol class="threesixty_images"></ol></div><div class="marker"><img src="http://www.leinwandfoto.de/global/images/assets/360.png" alt="360_Grad" /></div></div>';
583    }
584    parent.find('.preview').html(insert);
585    element.addClass('active').siblings().removeClass('active');
586
587    if (element.hasClass('js-360')) {
588      var target = parent.find('.rotate-360');
589      var path = element.attr('data-path');
590      var prefix = element.attr('data-prefix');
591      var ext = element.attr('data-ext');
592      var width = element.attr('data-width');
593      var height = element.attr('data-height');
594      var frames = element.attr('data-frames');;
595      var fps = element.attr('data-fps');;
596
597      Init360(target, path, prefix, ext, width, height, frames, fps);
598    }
599  });
600
601
602  /*------------------------------------*\
603      # MOBILE FIX
604  \*------------------------------------*/
605
606  if (isMobile.any() != null) {
607
608    if ($('.header-contact').length) {
609      var mobile_nr = $('.header-contact .icon').prop('title');
610      $('.header-contact .icon-phone').wrap('<a style="color: #fff; display: inline-block;" href="tel:+' + mobile_nr + '"></a>')
611    }
612
613  }
614
615
616});
617
618
619function Init360(target, path, prefix, ext, width, height, frames, fps) {
620  jQuery(target).ThreeSixty({
621    totalFrames: frames,
622    framerate: fps,
623    imgList: '.threesixty_images',
624    progress: '.spinner',
625    imagePath: path,
626    filePrefix: prefix,
627    ext: ext,
628    height: height,
629    width: width,
630    navigation: false,
631    autoplayDirection: -1,
632    disableSpin: true,
633    responsive: true
634  });
635}
636
637
638function AddSuspensionToCart(pid, quantity) {
639  var params = new Object();
640  params['cart_id'] = xVlog;
641  params['currency'] = xCurrency;
642  params['product_id'] = pid;
643  params['quantity'] = quantity;
644
645  jQuery.ajax({
646    type: 'POST',
647    data: { params: params },
648    url: '/global/ajax/class.ajax-functions.php?func=add_suspension_to_cart',
649    success: function (data) {
650      Redirect(translate['lwf_order_url'], 'fakeref=fme&step=2&vlog=' + xVlog);
651    }
652  });
653}
654
655
656
657/*------------------------------------*\
658    # GENERAL
659\*------------------------------------*/
660
661// get GET parameter of url
662function getParameterByName(url, name) {
663  var match = RegExp('[?&]' + name + '=([^&]*)').exec(url);
664  return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
665}
666
667
668jQuery(window).scroll(function () {
669  has_scrolled = true;
670});
671
672
673setInterval(function () {
674  if (has_scrolled) {
675    var temp_scroll_y = jQuery(document).scrollTop();
676    var window_w = window.innerWidth;
677    if (window_w <= 970) {
678      ToggleFixedHeader('show');
679      //PositionSiteNavi();
680    } else {
681      ToggleFixedHeader('hide');
682    }
683
684    if (temp_scroll_y >= 1100 && temp_scroll_y < scroll_y) {
685      ToggleTopArrow('show');
686    } else {
687      ToggleTopArrow('hide');
688    }
689
690    scroll_y = temp_scroll_y;
691    has_scrolled = false;
692  }
693}, 250);
694
695
696function Redirect(url, params) {
697  if (typeof params != 'undefined') {
698    if (url.indexOf('?') != -1) {
699      url = url + '&' + params;
700    } else {
701      url = url + '?' + params;
702    }
703  }
704  ToggleAreaLoading('fixed', 1);
705  window.location.href = url;
706}
707
708
709function TabifySwitchState(element, state) {
710  element = element.parents('.tabify-wrapper');
711  var nav = element.find('.navi li');
712  var content = element.find('.content');
713
714  nav.removeClass('active');
715  nav.eq(state - 1).addClass('active');
716  content.hide();
717  element.find('.content[data-tab-content="' + state + '"]').show();
718}
719
720
721// Check if number is decimal or not
722function isDecimal(number) {
723  number = String(number);
724  if (number.indexOf('.') !== -1 || number.indexOf(',') !== -1) {
725    return true;
726  }
727}
728
729
730// converts the price into the typical format
731function priceFormat(price, language, option) {
732  price = String(price);
733  if (isDecimal(price)) {
734    price = String(price.match(/\d*[,.]\d*/g));
735    var integer = String(price.match(/\d*[,.]/g)).substr(0, String(price.match(/\d*[,.]/g)).length - 1);;
736    var decimal = String(price.match(/[,.]\d*/g)).substring(1);
737    if (decimal.length == 1) {
738      decimal = decimal + '0';
739    }
740    price = integer + ',' + decimal;
741  } else {
742    price = price + ',00';
743  }
744
745  if (option == 'currency') {
746    switch (language) {
747      case 'en':
748        price = '£ ' + String(price).replace(',', '.');
749        break;
750      default:
751        price = String(price).replace('.', ',') + ' €';
752    }
753  }
754
755  return price;
756}
757
758
759function ToggleAreaLoading(target, mode) {
760  if (mode == 1) {
761    if (target == 'fixed') {
762      jQuery('body').addClass('no-scroll').prepend('<div class="js-area-loading fixed"><div class="table"><div class="table-cell"><span class="icon icon-spin5 animate-spin"></span></div></div></div>');
763    } else {
764      target.prepend('<div class="js-area-loading"><div class="table"><div class="table-cell"><span class="icon icon-spin5 animate-spin"></span></div></div></div>');
765    }
766  } else {
767    jQuery('body').removeClass('no-scroll');
768    jQuery('.js-area-loading').fadeOut(400, function () {
769      jQuery(this).remove();
770    });
771  }
772}
773
774
775function OpenFancyBox(element, mode) {
776  if (mode == 'error') {
777    jQuery.fancybox.open({
778      modal: true,
779      smallBtn: 'auto',
780      baseClass: 'error-box',
781      src: '<div class="fb-wrap t-center">' + element + '<p><a title="Close" class="btn btn-orange btn-small btn-close" href="javascript:jQuery.fancybox.close();">Ok</a></p></div>',
782      type: 'html',
783      afterShow: function (instance, current) {
784
785      }
786
787    });
788  } else {
789    if (mode == 'upload') {
790      var target = '.fb-upload';
791    } else {
792      var target = '.fb-' + element.attr('data-fb');
793    }
794    jQuery.fancybox.open({
795      src: target,
796      type: 'inline',
797      opts: {
798        touch: false,
799      }
800    });
801  }
802}
803
804
805function ScrollToTop() {
806  jQuery('html, body').animate({
807    scrollTop: 0
808  }, 400);
809}
810
811
812function ToggleTopArrow(mode) {
813  var element = jQuery('.js-arrow-top');
814  if (mode == 'show' && !element.is(':visible')) {
815    element.show();
816  } else if (mode == 'hide' && element.is(':visible')) {
817    element.hide();
818  }
819}
820
821
822function Share(element, provider) {
823  element = jQuery(element);
824  if (typeof element.attr('data-share-url') != 'undefined') {
825    var url = encodeURIComponent(element.attr('data-share-url'));
826  }
827  if (typeof element.attr('data-share-text') != 'undefined') {
828    var text = encodeURIComponent(element.attr('data-share-text'));
829  }
830  if (typeof element.attr('data-share-image') != 'undefined') {
831    var image = encodeURIComponent(element.attr('data-share-image'));
832  }
833
834  switch (provider) {
835    case 'facebook':
836      window.open('http://www.facebook.com/sharer.php?u=' + url, 'Share', 'width=600, height=300, resizable=yes');
837      break;
838    case 'gplus':
839      window.open('http://plus.google.com/share?url=' + url, 'Share', 'width=600, height=300, resizable=yes');
840      break;
841    case 'twitter':
842      window.open('https://twitter.com/intent/tweet?text=' + text + '&url=', 'Share', 'width=600, height=300, resizable=yes');
843      break;
844    case 'pinterest':
845      window.open('https://pinterest.com/pin/create/button/?url=' + url + '&media=' + image + '&description=' + text, 'Share', 'width=600, height=300, resizable=yes');
846      break;
847  }
848}
849
850
851function callback_OrderStatusNew(form, data) {
852  data['language'] = xLanguage;
853  jQuery.ajax({
854    type: 'POST',
855    data: { params: data },
856    url: '/global/ajax/class.ajax-functions.php?func=renderOrderStatus',
857    async: false,
858    success: function (data) {
859      data = jQuery.parseJSON(data);
860      jQuery('.order-status-new .js-request').hide();
861      jQuery('.order-status-new .js-response').html(data.result).show();
862
863      jQuery('.js-response .js-next').click(function () {
864        jQuery(this).parents('ul[data-item]').removeClass('active').next('ul').addClass('active');
865      });
866      jQuery('.js-response .js-prev').click(function () {
867        jQuery(this).parents('ul[data-item]').removeClass('active').prev('ul').addClass('active');
868      });
869    }
870  });
871}
872
873
874
875
876/*------------------------------------*\
877    # PRICE TABLES
878\*------------------------------------*/
879
880function TogglePriceTable(element) {
881  if (!element.hasClass('active')) {
882    if (element.is('.section')) {
883      var target = element.attr('id');
884      target = target.substring(4);
885      element.addClass('active').siblings('.section').removeClass('active');
886    } else {
887      var target = element.attr('data-target');
888      target = target.substring(4);
889    }
890
891    jQuery('.price-table .nav a').removeClass('active');
892    jQuery('.price-table .nav a[data-target="cat-' + target + '"]').addClass('active');
893    jQuery('.price-table table').removeClass('active');
894    jQuery('.price-table table[data-id="' + target + '"]').addClass('active');
895  }
896}
897
898
899function SwitchPriceTable(element) {
900  var target = element.attr('data-target');
901
902  if (!element.hasClass('active')) {
903    jQuery('.price-table .nav span').removeClass('active');
904    jQuery('.price-table .nav span[data-target="' + target + '"]').addClass('active');
905    jQuery('.price-table .wrap').hide();
906    jQuery('.price-table .wrap[data-id="' + target + '"]').show();
907  }
908}
909
910
911function SwitchPriceTablePrice(element) {
912  var target = element.attr('data-target');
913
914  jQuery('.js-price-table-switch').addClass('link').removeClass('active');
915  element.addClass('active').removeClass('link');
916  jQuery('.price-table .js-switch-price').removeClass('active');
917  jQuery('.price-table .js-switch-price[data-id="' + target + '"]').addClass('active');
918
919  if (target == 'max') {
920    jQuery('.price-table .js-switch-price[data-id="' + target + '"]').parents('td').siblings('td').find('span.line-through').addClass('hide');
921  } else {
922    jQuery('.price-table .js-switch-price[data-id="' + target + '"]').parents('td').siblings('td').find('span.line-through').removeClass('hide');
923  }
924}
925
926
927function SwitchLandingPrice(element) {
928  var target = element.attr('data-target');
929
930  jQuery('.js-landing-price-switch').addClass('link').removeClass('active');
931  element.addClass('active').removeClass('link');
932
933  if (target == 'max') {
934    var new_price = jQuery('.js-sim-price p strong').attr('data-price-max');
935    jQuery('.js-sim-price small').css('opacity', 0);
936    jQuery('.js-sim-price p strong').removeClass('red');
937  } else {
938    var new_price = jQuery('.js-sim-price p strong').attr('data-price-min');
939    if (jQuery('.js-sim-price small strong').text().substring(0, 1) != '0') {
940      jQuery('.js-sim-price small').css('opacity', 1);
941      jQuery('.js-sim-price p strong').addClass('red');
942    }
943  }
944
945  jQuery('.js-sim-price p strong').text(new_price);
946}
947
948
949
950
951
952/*------------------------------------*\
953    # RESPONSIVE
954\*------------------------------------*/
955
956function ToggleFixedHeader(mode) {
957  var wrapper = jQuery('.header-wrap');
958
959  if (mode == 'show') {
960    var promo_h = jQuery('.promotion-header').outerHeight();
961    var header_h = jQuery('.header-site').outerHeight();
962
963    if (jQuery(document).scrollTop() > promo_h) {
964      wrapper.addClass('fixed');
965    } else {
966      wrapper.removeClass('fixed');
967    }
968
969    if (wrapper.hasClass('fixed')) {
970      jQuery('#page').css('padding-top', header_h);
971    } else {
972      jQuery('#page').css('padding-top', 0);
973    }
974  } else {
975    if (wrapper.hasClass('fixed')) {
976      wrapper.removeClass('fixed');
977      jQuery('#page').css('padding-top', 0);
978    }
979  }
980}
981
982
983function ToggleSiteNavi() {
984  jQuery('.site-navi').slideToggle('fast');
985}
986
987
988
989
990/*------------------------------------*\
991    # MISC
992\*------------------------------------*/
993
994function BerlinTime() {
995  var offset_germany = '+2';
996  var d = new Date();
997  var utc = d.getTime() + (d.getTimezoneOffset() * 60000);
998  var nd = new Date(utc + (3600000 * offset_germany));
999
1000  //return nd.toLocaleString();
1001  return nd.getHours();
1002}
1003
1004function ShowAllDeliveryTable(element) {
1005  element = jQuery(element);
1006  jQuery('.delivery-table').toggleClass('full');
1007  if (element.text() == element.attr('data-text-show')) {
1008    element.text(element.attr('data-text-hide'));
1009  } else {
1010    element.text(element.attr('data-text-show'));
1011    jQuery('html, body').animate({
1012      scrollTop: jQuery('.delivery-table').offset().top
1013    }, 0);
1014  }
1015}
1016
1017function ChangeDelivery(element) {
1018  var target_size = jQuery('.js-select-size option:selected');
1019  var target_region = jQuery('.js-select-region option:selected');
1020
1021  if (element.is('.js-select-region')) {
1022    target_region = element.find('option:selected');
1023  }
1024
1025  if (jQuery('.delivery-table').length) {
1026    var params = new Object;
1027    params['country'] = target_region.val();
1028    params['language'] = xLanguage;
1029    params['mode'] = jQuery('.delivery-table').attr('data-mode');
1030    params['pg'] = 1;
1031    if (jQuery('.delivery-table')[0].hasAttribute('data-pg')) {
1032      params['pg'] = jQuery('.delivery-table').attr('data-pg');
1033    }
1034    if (jQuery('.delivery-table')[0].hasAttribute('data-ref')) {
1035      params['ref'] = jQuery('.delivery-table').attr('data-ref');
1036    }
1037    jQuery.ajax({
1038      type: 'POST',
1039      data: { params: params },
1040      url: 'https://api2.xxlpix.com/b2c/functions/class.Functions.php?class=shortcode&func=delivery_table',
1041      success: function (data) {
1042        data = jQuery.parseJSON(data);
1043        jQuery('.delivery-table').replaceWith(data.result);
1044      }
1045    });
1046  }
1047
1048  if (jQuery('.delivery-calendar').length) {
1049    var params = new Object;
1050    params['type_key'] = target_size.val();
1051    params['pg'] = target_size.attr('data-pg');
1052    params['pid'] = target_size.attr('data-pid');
1053    params['size'] = target_size.attr('data-size');
1054    params['price'] = target_size.attr('data-price');
1055    params['language'] = xLanguage;
1056    params['country'] = target_region.val();
1057    ToggleAreaLoading(jQuery('.delivery-calendar'), 1);
1058
1059    jQuery.ajax({
1060      type: 'POST',
1061      data: { params: params },
1062      url: 'https://api2.xxlpix.com/b2c/functions/class.Functions.php?class=shortcode&func=delivery_calendar',
1063      success: function (data) {
1064        data = jQuery.parseJSON(data);
1065        jQuery('.delivery-calendar table').html(data.result);
1066        ToggleAreaLoading(jQuery('.delivery-calendar'), 0);
1067      }
1068    });
1069  }
1070
1071  if (jQuery('.js-select-region').length > 1) {
1072    jQuery('.js-select-region option[value="' + params['country'] + '"]').prop('selected', true);
1073  }
1074  if (jQuery('.js-delivery-country').length) {
1075    jQuery('.js-delivery-country').text(params['country']);
1076  }
1077}
1078
1079
1080function InsertNewHint(target) {
1081  var values = CalcNewHint(target);
1082  setTimeout(function () {
1083    var element = jQuery('<img class="hint" src="' + values.img_url + '" data-hint-target="' + target + '" data-align="' + values.align + '" style="position: absolute; top: ' + values.pos_y + 'px; left: ' + values.pos_x + 'px; z-index: 1;" />').appendTo('#page');
1084
1085    jQuery(window).resize(function () {
1086      var values = CalcNewHint(target);
1087      element.css({
1088        left: values.pos_x + 'px',
1089        top: values.pos_y + 'px'
1090      });
1091    });
1092  }, 500);
1093}
1094
1095
1096function CalcNewHint(target) {
1097  var values = new Object();
1098  var w = parseInt(target.outerWidth());
1099  var h = parseInt(target.outerHeight());
1100  var x = target.offset().left;
1101  var y = target.offset().top;
1102  values['arrow'] = parseInt(target.attr('data-arrow'));
1103
1104  switch (values['arrow']) {
1105    case 1:
1106      values['align'] = 'right';
1107      values['img_url'] = '/wp-content/themes/FCE/images/hint-arrow-1-' + xLanguage + '.png';
1108      values['img_w'] = 175;
1109      values['img_h'] = 75;
1110      values['puffer'] = 10;
1111      values['pos_x'] = x + w + values['puffer'];
1112      break;
1113    case 2:
1114      values['align'] = 'left';
1115      values['img_url'] = '/wp-content/themes/FCE/images/hint-arrow-2-' + xLanguage + '.png';
1116      values['img_w'] = 188;
1117      values['img_h'] = 75;
1118      values['puffer'] = 20;
1119      values['pos_x'] = x + values['puffer'] - values['img_w'];
1120      break;
1121  }
1122  values['pos_y'] = y + (h / 2) - (values['img_h'] / 2) - 30;
1123
1124  return values;
1125}
1126
1127function SendB2BMail() {
1128  var element = jQuery('.b2b-contact');
1129  if (ValidateForm(jQuery(element))) {
1130    var params = new Object();
1131    params['ref'] = xRef;
1132    params['language'] = xLanguage;
1133    params['action'] = 'b2b-contact';
1134    params['copy'] = '0';
1135    if (jQuery('#check-copy').is(':checked')) {
1136      params['copy'] = '1';
1137    }
1138    params['firstname'] = element.find('input[name="firstname"]').val();
1139    params['lastname'] = element.find('input[name="lastname"]').val();
1140    params['email'] = element.find('input[name="email"]').val();
1141    params['company'] = element.find('input[name="company"]').val();
1142    params['phone'] = element.find('input[name="phone"]').val();
1143    params['message'] = element.find('textarea').val();
1144
1145    jQuery.ajax({
1146      type: 'POST',
1147      data: { params: params },
1148      url: 'https://www.leinwandfoto.de/global/ajax/ajax-functions.php?func=send_mail',
1149      success: function (data) {
1150        jQuery('.js-b2b-contact .btn').replaceWith('<strong class="green">' + translate['contact_mail_success'] + '</strong>');
1151      }
1152    });
1153  }
1154}
1155
1156
1157function getMaxOfArray(numArray) {
1158  return Math.max.apply(null, numArray);
1159}
1160
1161
1162jQuery(function ($) {
1163  $('a[href*="#"]:not([href="#"])').on('click', function (event) {
1164    if (
1165      location.pathname.replace(/^\//, '') === this.pathname.replace(/^\//, '') &&
1166      location.hostname === this.hostname
1167    ) {
1168      let target = $(this.hash);
1169
1170      target = target.length
1171        ? target
1172        : $('[name="' + this.hash.slice(1) + '"]');
1173
1174      if (target.length) {
1175        event.preventDefault();
1176
1177        $('html, body').animate({
1178          scrollTop: target.offset().top
1179        }, 400);
1180      }
1181    }
1182  });
1183});
1184
1185
1186function CouponSubmit(value) {
1187  var params = new Object();
1188  var element = jQuery('.coupon-form');
1189  params['ref'] = xRef;
1190  params['language'] = xLanguage;
1191  params['value'] = value;
1192  params['currency'] = xCurrency;
1193  params['cart_id'] = xVlog;
1194
1195  jQuery.ajax({
1196    type: 'POST',
1197    data: { params: params },
1198    url: '/global/ajax/ajax-functions.php?func=coupon_submit',
1199    complete: function (data) {
1200      Redirect(translate['lwf_order_url'], 'step=2&fakeref=fme&vlog=' + xVlog);
1201    }
1202  });
1203}
1204
1205
1206function SwitchSubmitBtn(form, data) {
1207  form.find('[type="submit"]').replaceWith('<strong class="green">' + translate['contact_mail_success'] + '</strong>');
1208}
1209
1210
1211function OpenErrorBox(text) {
1212  jQuery.fancybox.open({
1213    src: '<div class="fancybox-content"><div class="headline wrap t-center"><span class="icon icon-emo-unhappy"></span>' + translate['error_popup_headline'] + '</div><div class="wrap"><p>' + text + '</p></div></div>',
1214    type: 'inline',
1215    opts: {
1216      modal: false,
1217      touch: false,
1218      slideClass: 'error',
1219      beforeClose: function () {
1220
1221      },
1222      afterClose: function () {
1223
1224      }
1225    },
1226  });
1227}
1228
1229
1230function ShowTrackingInfo(tracking_no) {
1231  jQuery('input[name="tracking_number"]').val(tracking_no);
1232  jQuery('form[name="order-status"]').submit();
1233}
1234
1235
1236function RenderCartPopover(mode) {
1237  if (jQuery('.cart-popover').length) {
1238    jQuery('.cart-popover').remove();
1239  } else {
1240    //jQuery('.js-cart-popover').append('<div class="cart-popover"></div>');
1241    jQuery('.js-cart-popover').append('<div class="cart-popover"></div>');
1242    jQuery('.cart-popover').load('/wp-content/themes/FME/js/templates/cart.php');
1243  }
1244  if (typeof mode !== 'undefined') {
1245    RenderCartPopover();
1246  }
1247}
1248
1249
1250function UpdateCartCounter() {
1251  var values = {
1252    rid: xRID
1253  };
1254  jQuery.ajax({
1255    type: 'POST',
1256    url: '/global/classes/class.ajax-functions.php?class=global&func=getCartCounter',
1257    data: { params: values },
1258    success: function (data) {
1259      data = jQuery.parseJSON(data);
1260      if (data.result != null) {
1261        jQuery('.js-cart-counter').text('(' + data.result + ')');
1262      }
1263    }
1264  });
1265
1266}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.