PageSourceSearch

https://www.neogard.ch/tradepro/shop/appserv/jscript/shop.js

js neogard.ch collected 2026-10-04 21:09:30 UTC 96,287 bytes, 2,979 lines download raw bytes

1var IE6, IE7, IE8;
2var isIE = (navigator.userAgent.indexOf("MSIE") != -1 || navigator.userAgent.indexOf("Edge") != -1 || !!navigator.userAgent.match(/Trident.*rv\:11\./));
3var touchmenu = 0;
4//var langfileurl = syspathpics + "/langscript.json";
5var langfileurl = "/tradepro/shop/langscript.json";
6
7
8var langfile;
9if (localStorage.getItem('langfile')) {
10    langfile = JSON.parse(localStorage.getItem('langfile'));
11}
12
13
14$(document).ready(function() {
15
16	initLangfile(1);
17    //LoadKatTree();
18    //MainNavigationInit();
19    scart_payment();
20 
21    if ( typeof Modernizr == 'object') {
22        Modernizr.load();
23    }
24
25    FloatingMenu();
26
27    if ( typeof Modernizr == 'object') {
28        if (Modernizr.ie8 || Modernizr.ie7 || Modernizr.ie9) {
29            placeholderAdd();
30        }
31    }
32
33    if ( typeof $.fn.waitForImages != 'undefined') {
34        $('body').waitForImages().done(function() {
35            responsiveClass();
36        });
37    }
38
39    if ( typeof $.fn.fancybox != 'undefined') {
40        $("a.zoomThumb").fancybox({
41            hideOnContentClick : true,
42            overlayColor : '#ccc',
43            overlayOpacity : 0.5,
44            titlePosition : 'inside'
45        });
46        $("#DetailThumbs>a").fancybox({
47            type : 'iframe'
48        });
49        $("#DetailImageContainer>a").fancybox({
50            type : 'iframe'
51        });
52    }
53
54    $('#selectall').on('change', function() {
55        var value = this.checked;
56        $('#Fastpageliste .Article input[type=checkbox]').prop('checked', value);
57    });
58
59    $('#SearchButton a').on('click',function() {
60        //$('#FactFinder').fadeToggle("fast");
61        if ($('#FactFinder').css('display') == 'none') {
62        
63            $('#SearchButton a').addClass("active");
64            
65        } else {
66            $('#SearchButton a').removeClass("active");
67
68        }
69        $('#FactFinder').fadeToggle("fast");
70      
71    });
72    
73    
74    
75    $('.DetailCrossToggle').addClass('ico-caret-square-down');
76    $('.DetailCrossList').hide();
77    $('.DetailCrossToggle').on('click', function() {
78
79        //$('#FactFinder').fadeToggle("fast");
80        $(this).parents('#DetailCross').find('.DetailCrossList').first().slideToggle();
81        $(this).toggleClass('ico-caret-square-down');
82    });
83    if ($("body").hasClass("det")) {
84        var headlines = $('section h1');
85        headlines.each(function() {
86            if (!$(this).find('div').length) {
87                $(this).append('<div class="toggle close"></div>');
88            };
89        })
90
91        $('section[id] h1').on('click', function() {
92            $(this).parent().find('> *:not(h1,.toggle)').slideToggle();
93            $(this).find('.toggle').toggleClass('close');
94        })
95        //        fixWhitespace ();
96    }
97
98    if ( typeof $.fn.easyResponsiveTabs != 'undefined') {
99        $('.resptabs:not(#homeTab)').easyResponsiveTabs();
100    }
101
102    //--------------------------------------------------------------------------------
103    // Login-Dropdown offen halten wenn noetig und schliessen wenn möglich
104    //--------------------------------------------------------------------------------
105    $("input[name='username'], input[name='pw']").on('hover', function() {
106        $(this).closest("ul").addClass("login-open");
107        $(this).closest("#navLogin").addClass("login-button-open");
108    });
109    $(document).on("click", function(event) {
110        clickedtarget = $(event.target).closest('.login-open');
111        $("#navLogin, #navLogin .level_2, #navLogin .level2").not(clickedtarget).removeClass("login-open login-button-open");
112    });
113    $(document).on('scroll', function() {
114        $("#navLogin, #navLogin .level_2,  #navLogin .level2").removeClass("login-open login-button-open");
115        
116    });
117    detailmengen();
118
119    // Sprachregler selected element
120    var selectedLang = localStorage.getItem('SelectedLanguage');
121    
122    //console.log($('.fromTablet#languageSelection #languageselector').val());
123    var defaultLangMobile = $('.fromTablet#languageSelection #languageselector').val();
124    var defaultLang = $('#languageSelection #languageselector').val()
125    $('.fromTablet#languageSelection #languageselector').val(defaultLang);
126    $('.fromTablet#languageSelection #languageselector').on('change', function() {
127    if ((selectedLang != defaultLang)) {
128    	$('.fromTablet#languageSelection #languageselector').val(selectedLang);
129    	$('#languageSelection #languageselector').val(selectedLang);
130     } 
131   });
132
133   testpermission();
134
135
136});
137
138
139
140function old_screen_on() {
141    return;
142//    $(".block_rechts").removeClass("small_off");
143//    $(".block_links").removeClass("small_off");
144//    $(".block_rechts_flex").addClass("wide_off");
145//    $(".block_links_flex").addClass("wide_off");
146//    $(".SiteContainer").removeClass("new_screen");
147//    $(".wrapper").removeClass("new_screen");
148//    $("#Navi").removeClass("new_screen");
149//    $(".SiteContainer").addClass("old_screen");
150//    $(".wrapper").addClass("old_screen");
151//    $("#Navi").addClass("old_screen");
152//    $("#eprocMainNav").removeClass("new_screen");
153//    $("#eprocMainNav").addClass("old_screen");
154}
155
156function old_screen_off() {
157    return;
158//    $(".block_rechts").addClass("small_off");
159//    $(".block_links").addClass("small_off");
160//    $(".block_rechts_flex").removeClass("wide_off");
161//    $(".block_links_flex").removeClass("wide_off");
162//    $(".SiteContainer").removeClass("old_screen");
163//    $(".wrapper").removeClass("old_screen");
164//    $("#Navi").removeClass("old_screen");
165//    $(".SiteContainer").addClass("new_screen");
166//    $(".wrapper").addClass("new_screen");
167//    $("#Navi").addClass("new_screen");
168//    $("#eprocMainNav").addClass("new_screen");
169//    $("#eprocMainNav").removeClass("old_screen");
170}
171
172function detailmengen() {
173    $('input.Input.menge.updfix').on("keyup change", function(e) {
174        artno = $(this).attr('data-artno')
175        val = $(this).val();
176        $("input.Input.menge.updfix[data-artno|='" + artno + "']").each(function() {
177        	if($(this).data("artno") == artno) {
178        		$(this).val(val);	
179        	}
180        });
181    });
182}
183
184function setLoginUrl(LoginUrl2) {
185    var LoginUrl;
186    LoginUrl = LoginUrl2;
187
188    $("form").on("submit", function(e) {
189        var name = $(this).find("input[name=username]").val();
190        var password = $(this).find("input[name=pw]").val();
191        if (!name || !password) {
192            return true;
193        }
194        var $form = $(this);
195        $.ajax({
196            url : LoginUrl,
197            type : "get",
198            async : true,
199            data : {
200                login : name,
201                password : password,
202                area : 'FE'
203            },
204            complete : function() {
205                return true;
206            }
207        });
208    });
209
210}
211
212// Factfinder Tracking - Klick auf Produkt in Suchergebnis
213function fftClick(channel, sid, userId, query, id, pos, origPos, page, pageSize, origPageSize) {
214    $.ajax({
215        type : 'POST',
216        url : '/tradepro_php/shop_fft.php',
217        data : {
218            event : "click",
219            channel : channel,
220            sid : sid,
221            userId : userId,
222            query : query,
223            id : id,
224            pos : pos,
225            origPos : origPos,
226            page : page,
227            pageSize : pageSize,
228            origPageSize : origPageSize
229        },
230        contentType : 'application/x-www-form-urlencoded; charset=UTF-8',
231        cache : false,
232        async : false
233    });
234}
235
236//Scandit # Zu letzten WK-Artikel springen
237function hasClass(ele,cls) {
238    return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
239}
240
241$(document).ready(function() {
242	
243	if ( (!!navigator.userAgent.match(/Trident.*rv\:11\./)) || (hasClass(document.getElementsByTagName('body')[0], "CMS")) ) {   
244		$('#FactFinder a#popup').hide();
245	}else{
246		if ($('#scandit-barcode-picker').length > 0){
247			initScanner();
248		}
249		
250	}
251	var scancheck = urlParam('fromscan');
252	if (scancheck == "true"){
253		scrolltolast();
254		
255	}
256});
257function urlParam(name){
258    var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
259    if (results){
260    	return results[1]	
261    }else{
262    	return 0;
263    }
264}
265function scrolltolast(){
266	$('html, body').animate({
267	    scrollTop: $('#ScartTable .Article:last').offset().top - $('#header').height()
268	  }, 1000);
269}
270
271
272//--------------------------------------------------
273// UL in Spalten aufteilen
274//--------------------------------------------------
275//
276// Default:   splitList(8,"#prodNav");
277//
278// size:      Einträge pro Liste, default = 8
279// selector:  UL CSS-Selector, default = #prodNav
280// style:     Inline CSS
281
282function splitList(size, selector, style) {
283
284    if ($(selector + " li").length <= size) {
285        return;
286    }
287
288    var size = 9;
289    var ul = $(selector) || $("#prodNav");
290    var lis = ul.children().filter(':gt(' + (size - 1) + ')');
291    var loop = Math.ceil(lis.length / size);
292    var i = 0;
293    var lists = 0;
294
295    ul.addClass("split").wrap('<div id="navWrap" style="overflow: hidden; ' + style + '"></div>');
296
297    for (; i < loop; i = i + 1) {
298        ul = $("<ul />").addClass("level_2 split").append(lis.slice(i * size, (i * size) + size)).insertAfter(ul);
299    }
300
301    lists = $("#navWrap ul").length;
302    $(this).closest("#navWrap").css("width", lists * 100 + "%");
303    $(selector).addClass("split").attr("id", "prodNavSplit");
304    $(selector).closest(".block").addClass("splitBlock");
305};
306
307var debug = false;
308function logVal(title, value) {
309    if (debug) {
310        console.log(title + ": " + value);
311    }
312}
313
314function getWhitespace() {
315
316    // Gibt die Höhe des Weißraums zwischen Details und Sidebar zurück
317
318    var contentHeight = $('.ShopContent').outerHeight(true);
319    var sidebarHeight = $('#ShopMenu').height();
320    var whitespace = sidebarHeight - contentHeight;
321    return whitespace;
322}
323
324function fixWhitespace() {
325	
326	// wird wohl nicht mehr aufgerufen?
327	// sollte, wenn, dann auch wie folgt aufgerufen werden:
328	
329	/*
330		$(document).ready(function() {
331			document.fonts.ready.then(function() {
332				fixWhitespace();				
333			});
334		});
335	 */
336
337    // Verkleinert die Boxen in der Sidebar von unten nach oben bis der Weißraum kleiner als das festgelegte Maximum ist
338    // Shopping By Style bleibt immer sichtbar
339
340    var maxWhitespace = 100;
341    // maximale Höhe (px) des erlaubten Weißraums
342
343    if (getWhitespace() > maxWhitespace) {
344        var section = $('#ShopMenu section').not('.collapsed, .sbsContainer, #sbsContainer').last();
345        // .not() -> zu ignorierende Boxen/Elemente
346        section.addClass('collapsed').find('> *:not(h1,.toggle)').hide();
347        section.find('h1').append('<div class="toggle collapsed"></div>');
348    } else {
349        // keine Änderung oder Maximum unterschritten
350        //logVal("nachher", getWhitespace());
351    }
352
353}
354
355//--------------------------------------------------
356//FloatingMenu
357//--------------------------------------------------
358function FloatingMenu() {
359    var size = 1;
360    // größer errechneter rechter Rand; der liegt im Normalfall bei 0 und Breite der gesamten Box, bei der Kontaktbox z.B. 237
361    // Event wenn man auf das Floatingmenü klickt.
362    $("div.floatingTrigger").on('click', function() {
363        state = parseInt($("#floatingMenu").css('right'), 10) * (-1) < size;
364        if (!state) {
365            $("#floatingMenu").removeClass("floatingMenuContact");
366            $("#floatingMenu").addClass("floatingMenuContactActive");
367        } else {
368            $("#floatingMenu").addClass("floatingMenuContact");
369            $("#floatingMenu").removeClass("floatingMenuContactActive");
370        }
371    });
372    // Event im Floating Button auf den Telefonkontakt geklickt wurde.
373    $("#floatingMenu").find("a.telephone").on('click', function() {
374        $("#floatingMenuTele").animate({
375            'top' : -1 + "px"
376        }, 300);
377    })
378    // Floating Menü schließen wenn der Chat geöffnet wird.
379    $("#floatingMenu").find("a.chat").on('click', function() {
380        $("#floatingMenu").addClass("floatingMenuContact");
381        $("#floatingMenu").removeClass("floatingMenuContactActive");
382    })
383}
384
385//--------------------------------------------------
386//placeholderAdd
387//Imitiert die placeholder funktionalität von HTML5 für ältere Browser.
388//--------------------------------------------------
389
390function placeholderAdd() {
391    //Placeholder für den <IE9 einbinden.
392    $('[placeholder]').focus(function() {
393        var input = $(this);
394        if (input.val() == input.attr('placeholder')) {
395            input.val('');
396            input.removeClass("'placeholder'");
397        }
398    }).blur(function() {
399        var input = $(this);
400        if (input.val() == '' || input.val() == input.attr('placeholder')) {
401            input.addClass('placeholder');
402            input.val(input.attr('placeholder'));
403        }
404    }).blur();
405
406    //Wenn das Skript abgeschickt wird, nur mit Placeholdern gefüllt, sollen diese bereinigt werden.
407    $('[placeholder]').parents('form').on("submit", function() {
408        $(this).find('[placeholder]').each(function() {
409            var input = $(this);
410            if (input.val() == input.attr('placeholder')) {
411                input.val('');
412            }
413        })
414    });
415}
416
417//--------------------------------------------------
418//NavigationTouch
419//Ermöglicht das Hoverelemente auch auf Tablets / Touch geräten genutzt werden können.
420//--------------------------------------------------
421
422var newTouchmenu = 0;
423$( window ).on( "orientationchange", function( event ) {
424	
425	
426	console.log(touchmenu);
427	
428	if(touchmenu == 1) {
429		touchmenu = 0;
430		
431		newTouchmenu = 1;
432	} else {
433		newTouchmenu = 0;
434	}
435	
436	console.log(touchmenu);
437	NavigationTouch();
438	
439	});
440
441function NavigationTouch() {
442	
443    $("#UserNavi").prependTo("#Navi");
444    if (touchmenu == 0) {
445        touchmenu = 1;
446     
447        	
448       
449
450        $('#MainNavi li a, #UserNavi li a').on('click', function(e) {
451            ParentOfLink = $(this).parent();
452            if (ParentOfLink.find("ul").length || ParentOfLink.find("div").length) {
453                if (!ParentOfLink.hasClass('activemen') && (newTouchmenu == 0 && touchmenu == 1)
453) {
454                    e.preventDefault();
455                    ParentOfLink.addClass('activemen');
456                } else {
457                    var elm = $(this);
458                    var xPos = e.pageX - elm.offset().left;
459                    var yPos = e.pageY - elm.offset().top;
460                    if (xPos < 60 && ParentOfLink.hasClass('activemen')) {
461                        e.preventDefault();
462                        ParentOfLink.removeClass('activemen');
463                        ParentOfLink.find(".activemen").each(function() {
464                            $(this).removeClass('activemen');
465                        });
466                        $("#Navigationbar ul.productsnav li > ul.level_3").css("display", "block");
467                    }
468                }
469            }
470			$('#MainNavi li.activemen, #UserNavi li a').last().find('ul').hide();
471        	$('#MainNavi li.activemen, #UserNavi li a').last().find("ul").first().show();
472        });
473    }
474}
475
476
477
478
479
480/*$('.main-navigation > ul > li').hover(function() {
481	console.log("test6");
482	$('#UserNavi > .level_2 ul').css("display", "none");
483	
484});*/
485
486//--------------------------------------------------
487//responsiveClass
488//Passt die Seite bei bestimmten Breakpoints/Größen an.
489//--------------------------------------------------
490var ScrollHead = 116;
491
492function responsiveClass() {
493    var FactFinder = $('#FactFinder');
494    var SuggestLayer = $('#suggestLayer');
495    var NavBar = $('#Navigationbar');
496    var navButton = $('#ResponsiveButton');
497    var headerLogo = $("#Logo");
498    var navLogo = $("#NaviLogo");
499    var navHome = $("#NaviHome");
500    var NavBarScartButton = $("#ScartScroll");
501    var InputFieldFocus = $("#Navi .level1>li").find("input");
502    NavBarScartButton.attr("style", "");
503
504    $(window).setBreakpoints({
505        distinct : true,
506        breakpoints : [320, 480, 640, 768, 800, 960, 1024, 1200]
507    });
508
509    function Spalten3() {
510        show_accordions();
511        RubViewNeu(".FFSContent #RubView li", 3, "left", 2.2, "%");
512        RubViewNeu(".ShopContent #RubView li", 3, "left", 2.2, "%");
513        RubViewNeu(".StartContent #RubView li", 5, "left", 2, "%");
514        RubViewNeu("#FeedbackCampaign .CampaignItemRub", 4, "right", 22);
515        hide_accordions();
516        
517    }
518
519    function Spalten2() {
520        show_accordions();
521        RubViewNeu(".FFSContent #RubView li", 2, "left", 2, "%");
522        RubViewNeu(".ShopContent #RubView li", 2, "left", 2, "%");
523        RubViewNeu(".StartContent #RubView li", 3, "left", 2, "%");
524        RubViewNeu("#FeedbackCampaign .CampaignItemRub", 3, "right", 22);
525        hide_accordions();
526        
527    }
528
529    function Spalten1() {
530        show_accordions();
531        RubViewNeu(".FFSContent #RubView li", 1, "left", 1, "%");
532        RubViewNeu(".ShopContent #RubView li", 1, "left", 1, "%");
533        RubViewNeu(".StartContent #RubView li", 1, "left", 1, "%");
534        RubViewNeu("#FeedbackCampaign .CampaignItemRub", 1, "right", 22);
535        hide_accordions();
536        
537    }
538
539    function NavBarFix() {
540        if ($(window).scrollTop() < ScrollHead) {
541            NavBar.removeClass("fixed");
542        }
543    }
544
545    function show_accordions() {
546        $('.ui-accordion-content').show();
547
548    }
549
550    function hide_accordions() {
551        $('.ui-accordion-content').each(function() {
552            if (!$(this).hasClass('ui-accordion-content-active')) {
553                $(this).hide();
554            }
555        });
556    }
557
558    function HideFilter(Status) {
559        return;
560    }
561
562
563    $(window).on('enterBreakpoint1200', function() {
564        Spalten3();
565        HideFilter("show");
566        NavBarFix();
567        NavBar.attr("style", "");
568        
569    });
570
571    $(window).on('enterBreakpoint1024', function() {
572        Spalten3();
573        HideFilter("show");
574        NavBarFix();
575        NavBar.attr("style", "");
576        
577    });
578
579    $(window).on('enterBreakpoint960', function() {
580        Spalten3();
581        HideFilter("show");
582        NavBarFix();
583        NavBar.attr("style", "");
584        
585    });
586
587    $(window).on('enterBreakpoint800', function() {
588        HideFilter("show");
589        Spalten3();
590        NavBarFix();
591        NavBar.attr("style", "");
592       
593    });
594
595    $(window).on('enterBreakpoint768', function() {
596        HideFilter("show");
597        Spalten2();
598        NavBarFix();
599        navHome.attr("style", "display:none;");
600        NavBar.attr("style", "");
601        NavigationTouch();
602       
603
604        
605        
606    });
607
608    $(window).on('enterBreakpoint640', function() {
609        HideFilter();
610        Spalten2();
611        navHome.attr("style", "display:none;");
612        $("body").addClass("m");
613        $("#navWrap").css("margin", "0");
614        $("#navWrap").css("width", "100%");
615       
616    });
617
618    $(window).on('enterBreakpoint480', function() {
619        Spalten1();
620        HideFilter();
621        NavBar.addClass("fixed");
622        navHome.attr("style", "display:none;");
623        $("body").addClass("m");
624        $("#navWrap").css("margin", "0");
625        $("#navWrap").css("width", "100%");
626       
627    });
628
629    $(window).on('enterBreakpoint320', function() {
630        Spalten1();
631        HideFilter();
632        navHome.attr("style", "display:none;");
633        $("body").addClass("m");
634        $("#navWrap").css("margin", "0");
635        $("#navWrap").css("width", "100%");
636        
637    });
638
639    if ($(window).width() <= 768) {
640        NavigationTouch();
641        
642        
643        
644    }
645
646    // Verhalten bei verschiedenen Auflösungen der Headerleiste
647    $(window).on('scroll', function() {
648
649        // Verhalten von über 1024
650        if ($(window).width() > 1024) {
651            if ($(this).scrollTop() > ScrollHead) {
652                NavBar.addClass("fixed");
653                navLogo.attr("style", "display:block;");
654                NavBarScartButton.attr("style", "position:relative; visibility:visible;");
655                navHome.attr("style", "display:none;");
656            } else {
657                navLogo.attr("style", "");
658                NavBarScartButton.attr("style", "");
659                navHome.attr("style", "")
660                NavBar.removeClass("fixed");
661            }
662            // Verhalten von <= 768
663        } else if ($(window).width() <= 768) {
664            if ($(this).scrollTop() >= 1) {
665                navButton.addClass("fixed");
666                if (!InputFieldFocus.is(":focus")) {
667                    $('#Navi .level1 li').removeClass('active');
668                }
669                
670                
671                
672            }
673            
674            
675
676            
677            // Verhalten von 1024 - 769
678        } else if ($(window).width() <= 1024 && $(window).width() > 768) {
679            if ($(this).scrollTop() > 180) {
680                NavBar.addClass("fixed");
681                navLogo.attr("style", "display:block;");
682                NavBarScartButton.attr("style", "display:block;");
683                navHome.attr("style", "display:none;");
684            } else {
685                navLogo.attr("style", "");
686                NavBarScartButton.attr("style", "");
687                NavBar.removeClass("fixed");
688                navHome.attr("style", "");
689            }
690        }
691    });
692
693    navButton.on('click', function() {
694        if (NavBar.css('display') == 'none') {
695            navButton.removeClass("active");
696        } else {
697            navButton.addClass("active");
698        }
699
700        NavBar.fadeToggle(250, "linear");
701        navButton.toggleClass("active");
702        $('#MainNavi .level1 li.active').removeClass('active');
703    })
704    if ($("html").hasClass("touch") && $(window).width() <= 768) {
705        NavigationTouch();
706    }
707
708}
709
710//--------------------------------------------------
711//Scrollbar DetailTable mit fixen Columns
712//--------------------------------------------------
713/*
714 * erste und letzte Spalte fest ohne Data-Tables
715 */
716
717$(document).ready(function() {
718    if (navigator.userAgent.search("Safari") >= 0 && navigator.userAgent.search("Chrome") < 0) {
719        document.getElementsByTagName("BODY")[0].className += " safari";
720    }
721    old_screen_off();
722    repositionColumns();
723
724});
725
726$(window).on('resize',repositionColumns);
727
728function repositionColumns() {
729	
730
731    diff = $('#DetailTable').width() - $('#DetailTableClone').width();
732    // ggf. paddings oder margins hinzuzählen
733
734    diff1 = $('#DetailTable').first().width();
735
736    diff2 = $('#DetailTableClone').first().width();
737
738    $('#DetailTable tr').each(function() {
739
740        $(this).find('td:first').attr('style', 'border-right:1px solid #c8c8c8;');
741
742        //background-color der letzten Spalten an übrige Spalten anpassen
743
744        $columnColor = $(this).find('td:not(:first, :last)').css('background-color');
745
746        $(this).find('td:last').attr('style', 'background-color:' + $columnColor + '; box-shadow:-2px 0px 2px 0px rgba(0,0,0,0.2);');
747        $(this).find('th:last').attr('style', 'box-shadow:9px 9px 4px 10px #c8c8c8;');
748        $(this).find('th:first').attr('style', 'box-shadow: 2px 1px 4px -1px #c8c8c8;');
749        $(this).find('td:first').attr('style', ' background-color:' + $columnColor + '; box-shadow:3px 0px 3px 0px rgba(0,0,0,0.2);');
750
751        $(this).find('.Staffel').attr('style', 'box-shadow:none;');
752
753    });
754
755    if (diff2 >= diff1) {
756
757        $('#DetailTable tr').each(function() {
758
759            $columnColor = $(this).find('td:not(:first, :last)').css('background-color');
760
761            $(this).find('td:first, td:last, th:first, th:last').attr('style', 'box-shadow:none; background-color:' + $columnColor + ';');
762
763        });
764
765    } else {
766
767        $('.innerScrollDetailTable').attr('style', 'overflow-x:auto; overflow-y:hidden;');
768
769    }
770
771}
772
773
774
775//--------------------------------------------------
776//Shopping By Style umrechnung
777//Umrechnung für Clickmaps in SBS
778//--------------------------------------------------
779
780function ShoppingByStyle() {
781
782    Images = new Array();
783    i = 0;
784
785    $('img.ImageBack').each(function() {
786        SizeImages = new Array(4);
787        SizeImages[2] = ($(this).width());
788        SizeImages[3] = ($(this).height());
789
790        // Get original Image Size
791        var screenImage = $(this);
792        var theImage = new Image();
793        theImage.src = screenImage.attr("src");
794        var imageWidth = theImage.width;
795        var imageHeight = theImage.height;
796
797        SizeImages[0] = imageWidth;
798        SizeImages[1] = imageHeight;
799
800        Images[i] = SizeImages;
801        i++;
802    });
803    i = 0;
804
805    $('#ShoppingByStyle li').each(function() {
806        var li = $(this);
807
808        // li die Breite des Überliegenden Elements geben
809        var parentWidth = $(this).parents("#ShoppingByStyle").width();
810        li.width(parentWidth);
811        // Skalierungsfaktor berechnen
812        var Factor = Images[i][0] / Images[i][2];
813        // Für jede ImageMap die Größe und Position anpassen an die Aktuelle Anzeigebreite/höhe
814        li.find("a").each(function() {
815            // Jedes a in LinksFrom Image schreiben
816            var LinksFromImage = $(this);
817            var Left, Top, WidthOfImageMap, HeightOfImageMap;
818            var SizeOfImageMap = LinksFromImage.children("img");
819
820            WidthOfImageMap = SizeOfImageMap.width();
821            HeightOfImageMap = SizeOfImageMap.height();
822
823            SizeOfImageMap.width(WidthOfImageMap / Factor);
824            SizeOfImageMap.height(HeightOfImageMap / Factor);
825
826            Left = LinksFromImage.css("left");
827            Left = Left.substring(0, Left.length - 2);
828            Left = Left / Factor;
829            Left = Math.round(Left);
830
831            Top = LinksFromImage.css("top");
832            Top = Top.substring(0, Top.length - 2);
833            Top = Top / Factor;
834            Top = Math.round(Top);
835
836            LinksFromImage.attr("Style", "");
837            LinksFromImage.attr("Style", "left:" + Left + "px; top:" + Top + "px; margin:0px;");
838        });
839        i++;
840    });
841
842}
843
844//--------------------------------------------------
845//Slideshow Startseite jQuery CarouFredSel
846//--------------------------------------------------
847function ShoppingByStyleSlider() {
848
849    $("#ShoppingByStyle").append('<button class="prevSBS" href="#">&laquo;</button>').append('<button class="nextSBS" href="#">&raquo;</button>');
850
851    //jQuery CarouFredSel
852    $("#ShoppingByStyle ul").carouFredSel({
853        scroll : {
854            pauseOnHover : true,
855            pauseDuration : 10000
856        },
857        prev : ".prevSBS",
858        next : ".nextSBS"
859    });
860}
861
862// --------------------------------------------------
863// Aktualisieren-Button bei Änderung eines Input-
864// Feldes bei Artikelpositionen
865//--------------------------------------------------
866
867function scartRefresh() {
868
869    $('#ScartTable input[type="text"]').each(function() {
870        var elem = $(this);
871        elem.data("oldVal", elem.val());
872        elem.on("propertychange keyup input paste", function() {
873            if (elem.data("oldVal") != elem.val()) {
874                elem.data("oldVal", elem.val());
875                displayRefreshButton(elem);
876            }
877        });
878    });
879
880    $('#ScartTable select').on("change", function() {
881        displayRefreshButton($(this));
882    });
883
884    // Aktualisieren-Button neben formField anzeigen
885    function displayRefreshButton(formField) {
886        var button = formField.next(".scartRefresh");
887        var dummy = button.next(".scartRefreshDummy");
888        dummy.hide();
889        button.show();
890    }
891
892}
893
894//--------------------------------------------------
895// Warenkorb-Sets ein- und ausblenden
896//--------------------------------------------------
897function scartSets() {
898    $("#ScartTable .setToggle").on("click", function() {
899        var button = $(this);
900        var set = button.attr("rel");
901        var open = button.find(".open");
902        var close = button.find(".close");
903
904        open.toggle();
905        close.toggle();
906        $("#ScartTable ." + set).toggle();
907    });
908}
909
910//--------------------------------------------------
911// Warenkorb-Funktionen
912//--------------------------------------------------
913
914function scart_payment() {
915    if ($("#porto_payment").length == 0)
916        return;
917
918    $("#PaymentInfo").before(" ").show();
919
920    //Overlay initialisieren
921    if ( typeof $.fn.fancybox != 'undefined') {
922        $("#DetailImageContainer a").fancybox({
923            hideOnContentClick : true,
924            overlayColor : '#ccc',
925            overlayOpacity : 0.5,
926            titlePosition : 'inside',
927            type : 'iframe'
928        });
929    }
930
931    //Click-Handler für Infolink
932    $("#PaymentInfo").on('click', function() {
933        var url = $(this).attr("href");
934        var title = $(this).attr("rel");
935        $("#DetailZoomOverlay iframe").attr("src", url);
936        $("#DetailZoomOverlay .close").attr("title", title);
937
938        api.load();
939
940        return false;
941    });
942
943    scart_payment_text();
944
945    $("#porto_payment").on('change', function() {
946        scart_payment_text();
947    });
948}
949
950function scart_payment_text() {
951
952    var payid = $("#porto_payment").val();
953
954    $('[id^="paymenttxt"]').css("display", "none");
955    $("#paymenttxt" + payid).css("display", "block");
956
957}
958
959//--------------------------------------------------
960//ASN Einklappbar machen
961//--------------------------------------------------
962function ASNToggle(AnzahlOffen) {
963    var ASN = $(".FFSMenu");
964    var AnzahlOffen = AnzahlOffen ? AnzahlOffen : 4;
965    if (!ASN)
966        return;
967
968    ASN.find("section").not(".angebote").each(function(i) {
969        var section = $(this);
970        var header = section.find("h1");
971        var ul = section.find("ul");
972        var asnToggle = $('<div class="ASN_Toggle" />');
973
974        header.append(asnToggle);
975
976        // "AnzahlOffen" Sections und Sections mit aktiven Filtern geöffnet lassen
977        if (i < AnzahlOffen || section.find("a.active,li.active").length > 0) {
978            asnToggle.addClass("close");
979        } else {
980            ul.hide();
981            header.addClass("roundcorners");
982        }
983
984        // Klick-Event
985        header.on('click', function() {
986            ul.slideToggle("fast");
987            asnToggle.toggleClass("close");
988            header.toggleClass("roundcorners");
989        });
990    });
991}
992
993//--------------------------------------------------
994//Allgemeine Shop-Funktionen
995//--------------------------------------------------
996
997function wopen(link, wi, he) {
998
999    var width = wi;
1000    var height = he;
1001    var l = (screen.availWidth - width) / 2;
1002    var t = (screen.availHeight - height) / 2;
1003
1004    wincom = window.open(link, "oswin", "toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=0,width=" + wi + ",height=" + he + ",screenX=" + l + ",screenY=" + t + ",left=" + l + ",top=" + t);
1005
1006    if (wincom) {
1007
1008        wincom.focus();
1009    }
1010}
1011
1012function wopen2(link, wi, he) {
1013
1014    var width = wi;
1015    var height = he;
1016    var l = (screen.availWidth - width) / 2;
1017    var t = (screen.availHeight - height) / 2;
1018
1019    wincom2 = window.open(link, "oswin", "toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1,width=" + wi + ",height=" + he + ",screenX=" + l + ",screenY=" + t + ",left=" + l + ",top=" + t);
1020
1021    if (wincom2) {
1022
1023        wincom2.focus();
1024    }
1025}
1026
1027function fielddel(f) {
1028    if (f.value == f.defaultValue) {
1029
1030        f.value = "";
1031    }
1032}
1033
1034function fieldset(f) {
1035
1036    if (f.value == "") {
1037
1038        f.value = f.defaultValue;
1039    }
1040}
1041
1042function fieldemp(f) {
1043
1044    if (f.sbeg.value == f.sbeg.defaultValue) {
1045
1046        f.sbeg.value = "";
1047    }
1048}
1049
1050//--------------------------------------------------
1051//Shop-Dropdown-Navigation
1052//--------------------------------------------------
1053function MainNavigationInit() {
1054    // Unterschiedliche Werte für IE6
1055    var delay = IE6 ? 0 : 500;
1056    var speed = IE6 ? 1 : 'normal';
1057
1058    if ($(".MainNavigation ul").length == 0)
1059        return;
1060
1061    $(".MainNavigation ul").superfish({
1062        delay : delay,
1063        speed : speed,
1064        autoArrows : false,
1065        onBeforeShow : function() {
1066            $(this).parent().addClass("hover");
1067        },
1068        onHide : function() {
1069            $(this).parent().removeClass("hover");
1070        }
1071    });
1072
1073    // Prüfen ob ein Menüpunkt untermenüpunkte hat, wenn ja, die Klasse submenu anhängen
1074    $(".MainNavigation ul li").each(function() {
1075        if ($(this).children("ul").length > 0) {
1076            $(this).addClass("submenu");
1077        }
1078    });
1079
1080    // z-index Bug mit select-Boxen im IE6 beheben
1081    if (IE6) {
1082        $(".MainNavigation ul").bgiframe();
1083    }
1084}
1085
1086//--------------------------------------------------
1087//Slideshow Startseite jQuery CarouFredSel
1088//--------------------------------------------------
1089function MainPageSlideshow() {
1090}
1091
1092//--------------------------------------------------
1093//Darstellung Rubrikenansichten
1094//--------------------------------------------------
1095function RubViewNeu(rubView, numRows, align, margin, unit) {
1096    return;
1097    // Wird nun über Responsive gesteuert (responsive.css)
1098}
1099
1100//--------------------------------------------------
1101//Auslagerung FFS aufgrund von JS Highlight der Vars
1102//--------------------------------------------------
1103function FactFinderInit(channel, moreText, moreArticle, moreCategory, shopLang, userId) {
1104    var formname = "search_word_inc";
1105    var queryParamName = "query";
1106    var channelParamName = "channel";
1107    var channel = channel;
1108    var divLayername = "suggestLayer";
1109    var instanceName = "suggest";
1110    var debugMode = false;
1111    var pShowImages = true;
1112    var site = 'Demo';
1113    var shopLang = shopLang;
1114    var userId = userId;
1115    var moreText = moreText;
1116    var moreArticle = moreArticle;
1117    var moreCategory = moreCategory;
1118    suggest.init(searchURL, formname, queryParamName, divLayername, instanceName, debugMode, channelParamName, channel, pShowImages, sid, uid, site, "", "", moreText, moreArticle, moreCategory, kundennummern, shopLang, shoplanguage, userId);
1119    document.onmousedown = suggest.hideLayerOutsideCall;
1120}
1121
1122//--------------------------------------------------
1123//Zoomansicht
1124//--------------------------------------------------
1125function zoomBox(closeText) {
1126    var closeText = closeText;
1127}
1128
1129function DetailZoomHover(preloadText) {
1130}
1131
1132//--------------------------------------------------
1133// Zoomansicht
1134//--------------------------------------------------
1135function zoomView() {
1136    //Links entfernen, wenn JavaScript aktiviert ist
1137    $('#DetailZoom .thumbs a').each(function() {
1138        var img = $(this).html();
1139        $(this).remove();
1140        $('#DetailZoom .thumbs').append(img);
1141    });
1142
1143    //Bilder laden
1144    $("#DetailZoom .thumbs img").on('click', function() {
1145        // see if same thumb is being clicked
1146        if ($(this).hasClass("active")) {
1147            return;
1148        }
1149
1150        // calculate large image's URL based on the thumbnail URL
1151        var url = $(this).attr("rel");
1152
1153        // get handle to element that wraps the image and make it semi-transparent
1154        var wrap = $("#DetailZoom .image img");
1155
1156        // the large image
1157        var img = new Image();
1158
1159        // call this function after it's loaded
1160        img.onload = function() {
1161            // change the image
1162            wrap.attr("src", url);
1163        };
1164
1165        // begin loading the image
1166        img.src = url;
1167
1168        // activate item
1169        $("#DetailZoom .thumbs img").removeClass("active");
1170        $(this).addClass("active");
1171    });
1172}
1173
1174//--------------------------------------------------
1175//Live-Preise
1176//--------------------------------------------------
1177function getPrice(url) {
1178
1179    var url = url;
1180
1181    $.ajax({
1182        type : 'GET',
1183        url : url,
1184        success : function(response) {
1185            $('#DetailTableLoading').hide();
1186            // $('#DetailTableShow').html(response);
1187            // ITB Fischer IE8-Fix
1188            $('#DetailTableShow')[0].innerHTML = response;
1189            //Funktionsaufruf, damit Plus-/Minusskript bei alter Livepreismethode greift
1190            reinit_scart_buttons();
1191
1192            // ITB Schulera Fix für Responsive Ansicht bei Livepreisen
1193            // oh, oh, das sollte dringend überprüft werden!
1194            $("td:first-child").on("click", function() {
1195                var parent = $(this).parent("tr");
1196                parent.toggleClass("active");
1197            });
1198
1199            //nachdem Preise geladen sind Tabellen Scrollbar Skript nochmals ausführen,
1200            //da sonst Tablewidth verfälscht wird und Scrollbarkeit nicht einwandfrei funktioniert
1201            repositionColumns();
1202
1203            // SAV aktualisieren
1204            sav = $('#savartnr').length;
1205            if (sav) {
1206                savartnr = $('#savartnr').html();
1207
1208                for ( i = 1; i <= 10; i++) {
1209                    var startelement = $('#preis' + i + '-' + savartnr);
1210                    $('#savpreis' + (i == 1 ? '' : i)).html(startelement.html());
1211                }
1212                var startelement = $('#preis1-' + savartnr);
1213                $('#savmind').html(startelement.parents('tr').first().find('.mindestbestellmenge').html());
1214                $('#savorderbox2 .lieferzeit').html(startelement.parents('tr').first().find('.lieferzeit').html());
1215                // ggf. hier nochmal Hover-Javascript neu initialisieren.
1216            }
1217        },
1218        error : function(xhr) {
1219            //alert('Error!  Status = ' + xhr.status);
1220        }
1221    });
1222}
1223
1224//--------------------------------------------------
1225//Layout bei zu breiter Tabelle vergrößern
1226//--------------------------------------------------
1227function FixDetailTableWidth() {
1228
1229    var maxWidth = 1200;
1230
1231    var width = $('#DetailTable').width();
1232
1233    if (width > maxWidth) {
1234        var missingWidth = width - maxWidth + 2;
1235        $(".SiteContainer").width($(".SiteContainer").width() + missingWidth);
1236        $(".ShopContent").width($(".ShopContent").width() + missingWidth);
1237        // $("#DetailInfo").width($("#DetailInfo").width() + missingWidth);
1238        // $("#DetailAttributes dd").width($("#DetailAttributes dd").width() + missingWidth);
1239        $("#languages").width($("#languages").width() + missingWidth);
1240        $("#Sitemap").width($("#Sitemap").width() + missingWidth);
1241        $("#FactFinder").width($("#FactFinder").width() + missingWidth);
1242        $("#FFquery").width($("#FFquery").width() + missingWidth);
1243    }
1244}
1245
1246function FixScartTableWidth() {
1247    var maxWidth = 715;
1248    var scartWidth;
1249    var ccWidth;
1250
1251    scartWidth();
1252    ccWidth();
1253
1254    // Warenkorb
1255    function scartWidth() {
1256        scartWidth = $("#ScartTable").width();
1257
1258        if (scartWidth > maxWidth) {
1259            var missingScartWidth = scartWidth - maxWidth + 2;
1260            $('.SiteContainer').width($('.SiteContainer').width() + missingScartWidth);
1261            $('.ShopTableContainer').width($('.ShopTableContainer').width() + missingScartWidth);
1262            //$('.Info').width($('.Info').width() + missingScartWidth);
1263        }
1264    }
1265
1266    // Kostenstellen
1267    function ccWidth() {
1268        ccWidth = $("#CCTable").width();
1269        if (ccWidth > maxWidth) {
1270            var missingCCWidth = ccWidth - maxWidth;
1271            $('.SiteContainer').width($('.SiteContainer').width() + missingCCWidth);
1272            $('.ShopTableContainer').width($('.ShopTableContainer').width() + missingCCWidth);
1273            //$('.Info').not(".ZweiSpalten .Info").width($('.Info').width() + missingCCWidth);
1274        }
1275    }
1276
1277}
1278
1279//--------------------------------------------------
1280//Hinweisbox
1281//--------------------------------------------------
1282function hinweisBox(textmsg) {
1283    if (textmsg) {
1284        $.fancybox({
1285            content : '<div class="overlayWrap"><h3 class="overlayTitle">' + loadTranslation("Hinweis") + '</h3><p>' + textmsg + '</p></div>'
1286        });
1287    }
1288}
1289
1290//--------------------------------------------------
1291//Tastendruck
1292//--------------------------------------------------
1293function Tastendruck(Ereignis) {
1294}
1295
1296//--------------------------------------------------
1297//Zahlenpruefung
1298//--------------------------------------------------
1299
1300function validate_num(formname, fieldname, format) {
1301    var field = document.forms[formname].elements[fieldname];
1302    var myvalue = field.value;
1303    var reg = /,-{1,}|\.-{1,}/;
1304    var nantest_value = myvalue.replace(reg, "");
1305    var num = nantest_value.match(/[^0-9,\.]/gi)
1306    sep = format.substr(1, 1) ? format.substr(1, 1) : '.';
1307    if (field.value) {
1308        var myvalue = field.value.replace(/\,/, '.');
1309        field.value = myvalue;
1310        if (num != null) {
1311            hinweisBox(loadTranslation("validate_num_error", "Dies ist keine richtige Zahl, bitte wiederholen Sie Ihre Eingabe"));
1312            this.value = "";
1313            document.forms['os_scart_form'].elements['freeorder_ammount'].value = "";
1314        } else if (myvalue.indexOf('.') == -1) {
1315            field.value = myvalue + sep + '000';
1316        } else if (!myvalue.substring(myvalue.indexOf('.') + 2)) {
1317            field.value = field.value + "00";
1318        } else if (!myvalue.substring(myvalue.indexOf('.') + 3)) {
1319            field.value = field.value + "0";
1320        } else if (myvalue.substring(myvalue.indexOf('.') + 4) != '') {
1321            hinweisBox(loadTranslation("validate_num_error_wrongformat", "Bitte Eingabe ohne Tausender-Trennzeichen und nur drei Nachkommastellen"));
1322            field.value = "";
1323        }
1324        if (format == "z." && field.value) {
1325            field.value = Math.floor(myvalue);
1326        }
1327    }
1328}
1329
1330//--------------------------------------------------
1331//Tabellenslide
1332//--------------------------------------------------
1333function CrossTableSlide(openText, closeText) {
1334
1335    return;
1336
1337}
1338
1339//--------------------------------------------------
1340// Tabs umschalten
1341//--------------------------------------------------
1342function tabs() {
1343
1344    // Alle Tabs ausblenden und den ersten Tab auswählen
1345    $("div.tabs .content").hide();
1346    $("ul.menu li:first-child").addClass("active");
1347    $("div#tab1").show();
1348
1349    $("ul.menu li").on('click', function() {
1350        var id = $(this).children("a").attr("class");
1351
1352        // Tabs abwählen und Inhalte ausblenden
1353        $("ul.menu li").removeClass("active");
1354        $("div.tabs .content").hide();
1355
1356        // Geklickten Tab aktivieren und Inhalt anzeigen
1357        $(this).addClass("active");
1358        $("div#" + id).show();
1359    });
1360
1361}
1362
1363jQuery.fn.extend({
1364    getUrlParam : function(strParamName) {
1365        strParamName = escape(unescape(strParamName));
1366
1367        var returnVal = new Array();
1368        var qString = null;
1369
1370        if ($(this).attr("nodeName") == "#document") {
1371            //document-handler
1372
1373            if (window.location.search.search(strParamName) > -1) {
1374
1375                qString = window.location.search.substr(1, window.location.search.length).split("&");
1376            }
1377
1378        } else if ($(this).attr("src") != "undefined") {
1379
1380            var strHref = $(this).attr("src")
1381            if (strHref.indexOf("?") > -1) {
1382                var strQueryString = strHref.substr(strHref.indexOf("?") + 1);
1383                qString = strQueryString.split("&");
1384            }
1385        } else if ($(this).attr("href") != "undefined") {
1386
1387            var strHref = $(this).attr("href")
1388            if (strHref.indexOf("?") > -1) {
1389                var strQueryString = strHref.substr(strHref.indexOf("?") + 1);
1390                qString = strQueryString.split("&");
1391            }
1392        } else {
1393            return null;
1394        }
1395
1396        if (qString == null)
1397            return null;
1398
1399        for (var i = 0; i < qString.length; i++) {
1400            if (escape(unescape(qString[i].split("=")[0])) == strParamName) {
1401                returnVal.push(qString[i].split("=")[1]);
1402            }
1403
1404        }
1405
1406        if (returnVal.length == 0)
1407            return null;
1408        else if (returnVal.length == 1)
1409            return returnVal[0];
1410        else
1411            return returnVal;
1412    }
1413});
1414
1415/* * * * * * * * * * * * * * * * * * * * * *
1416 Ajax
1417 * * * * * * * * * * * * * * * * * * * * * * */
1418
1419function popbox(title, message) {
1420    jQuery.fancybox.open({
1421        width : 480,
1422        autoSize : false,
1423        autoHeight : true,
1424        content : '<div class="overlayWrap"><h3 class="overlayTitle">' + title + '</h3>' + message + '</div>'
1425    });
1426}
1427
1428function add_to_etikettenliste_ajax(artnr, custartnr, pricestr, title) {
1429    var request = {
1430        'artnr' : artnr,
1431        'artnrcust' : custartnr,
1432        'price' : pricestr,
1433        'vartitle' : title
1434    };
1435
1436    jQuery.post(syspathshop + '?func=ajax&action=add_to_etikettenliste', request).done(function(data) {
1437        if (data.result == "ok") {
1438            var popups = $(data.popup);
1439            add_to_scart_popup(popups);
1440        } else {
1441            alert(data.errormessage);
1442            location.reload();
1443        }
1444    }).fail(function() {
1445        location.reload();
1446    });
1447}
1448
1449function add_to_scart_popup(popups) {
1450    var classname = "scart-popup-id-" + Date.now();
1451    var default_dauer = 3000;
1452    var extended_dauer = 20000;
1453    //reinit_headshot();
1454    popups.appendTo('#scart-popup-container').addClass(classname).fadeIn();
1455    window.setTimeout(function() {
1456        //return;
1457        $('.good.' + classname).animate({
1458            'opacity' : 0
1459        }, 1000, function() {
1460            $(this).animate({
1461                'height' : 0,
1462                'margin' : 0,
1463                'padding' : 0
1464            }, 1000, function() {
1465                $(this).remove();
1466            });
1467        });
1468    }, default_dauer);
1469    window.setTimeout(function() {
1470        //return;
1471        $('.bad.' + classname).animate({
1472            'opacity' : 0
1473        }, 1000, function() {
1474            $(this).animate({
1475                'height' : 0,
1476                'margin' : 0,
1477                'padding' : 0
1478            }, 1000, function() {
1479                $(this).remove();
1480            });
1481        });
1482    }, extended_dauer);
1483}
1484
1485// Artikel im CMS - Funktionsbuttons
1486$(document).ready(function() {
1487    $('.artcmssubmit').on('click', ajax_add_to_cart);
1488});
1489
1490var ajax_add_to_cart_blocked = 0;
1491
1492function ajax_add_to_cart(biohort = 0) {
1493
1494   
1495    if (ajax_add_to_cart_blocked)
1496        return;
1497    ajax_add_to_cart_blocked = 1;
1498
1499    // Mengen und Artikelnummern sammeln
1500    var order = {};
1501    var counter = 1;
1502
1503    // Artikeldetail
1504    if (!$(this).hasClass("artcmssubmit")) {
1505        $('#submitform .artNum').each(function() {
1506            var oartnr = $(this).find('a.nolink').attr('name');
1507            var row = $(this).parents('tr').first();
1508            var element = row.find('input.Input[name*="_' + oartnr + '_"]');
1509            if (element.length == 0) {
1510                element = row.find('input.Input[name$="_' + oartnr + '"]');
1511            }
1512            var artnr = element.attr('name');
1513            var menge = element.val();
1514            menge = menge.replace(/,/g, '.');
1515            menge = menge.replace(/[.](?=.*[.])/g,'');
1516            element.val(0);
1517            if (menge > 0) {
1518                order['a' + counter] = artnr;
1519                order['m' + counter] = menge;
1520                counter++;
1521            }
1522
1523        });
1524    }
1525
1526
1527     // Artikeldetail - Biohort Produktekonfigurator Artikel
1528    if (biohort) {
1529        $('#biohort-itemlist .biohort-item').each(function() {
1530
1531            var artnr = $(this).data('artnum');
1532            var menge = $(this).data('qty');
1533            
1534            //menge = menge.replace(/,/g, '.');
1535            //menge = menge.replace(/[.](?=.*[.])/g,'');
1536
1537            if (menge > 0) {
1538                order['a' + counter] = artnr;
1539                order['m' + counter] = menge;
1540                counter++;
1541            }
1542        });
1543    }
1544    
1545
1546    // Artikeldetail SAV-Order-Box
1547    if ($('#savorderbox2').length) {
1548        var oartnr = $('#sarvartnr').html();
1549        var element = $('#savorderbox2 .amountcontainer .menge').first();
1550        var artnr = element.attr('name');
1551        var menge = element.val();
1552        element.val(0);
1553
1554        if (menge > 0) {
1555            order['a' + counter] = artnr;
1556            order['m' + counter] = menge;
1557            counter++;
1558        }
1559    }
1560
1561    // Artikel im CMS
1562    if ($(this).hasClass('artcmssubmit')) {
1563        if ($(this).has("dom-addeventlistener") || (event && event.preventDefault)) {
1564            event.preventDefault();
1565            event.stopPropagation();
1566        } else {
1567            event = event || window.event;
1568            event.cancelBubble = true;
1569            on._preventDefault.call(event);
1570        }
1571        var artnr = $(this).parents('form').find('input[name="a1"]').val();
1572        var menge = $(this).parents('form').find('input[name="m1"]').val();
1573        if (menge > 0) {
1574            order['a' + counter] = 'artnr_001_' + artnr + '_0';
1575            order['m' + counter] = menge;
1576            counter++;
1577        }
1578        $(this).parents('form').find('input[name="m1"]').val(1);
1579    }
1580
1581    // Favoritenliste
1582    if ($('#ScartTable input[id^="mengenfeld"]').length > 0) {
1583        $('#ScartTable input[id^="mengenfeld"]').each(function() {
1584            if (($(this).val()) && (parseInt($(this).val()) != 0)) {
1585                var menge = parseInt($(this).val());
1586                $(this).val('');
1587                var index = $(this).attr('name').substr(1);
1588                artnr = $('input[name=a' + index + ']').val();
1589                order['a' + counter] = 'artnr_001_' + artnr + '_0';
1590                order['m' + counter] = menge;
1591                counter++;
1592            }
1593        });
1594    }
1595
1596    // Bestellliste
1597    if ($('#bestelllistenform #OlistTable input[name^="artnr"]').length > 0) {
1598        $('#bestelllistenform #OlistTable input[name^="artnr"]').each(function() {
1599            if (($(this).val()) && (parseInt($(this).val()) != 0)) {
1600                var menge = parseInt($(this).val());
1601                $(this).val('');
1602                var artnr = $(this).attr('name');
1603                order['a' + counter] = artnr;
1604                order['m' + counter] = menge;
1605                counter++;
1606            }
1607        });
1608    }
1609
1610    if (counter == 1) {
1611        popbox(lang_error, lang_noarticlesselected);
1612        ajax_add_to_cart_blocked = 0;
1613        return false;
1614    }
1615
1616    order['base_url'] = window.location.href;
1617    jQuery.post(syspathshop + '?func=ajax&action=addtocart', order).done(function(data) {
1618        if (data.result == "ok") {
1619
1620            var popups = $(data.popup);
1621            if (data.scartsize) {
1622                $('.scartcounternumber').html(data.scartsize);
1623            }
1624            if (data.headshot) {
1625                $('.ScartItemDetails').replaceWith(data.headshot);
1626            }
1627            add_to_scart_popup(popups);
1628
1629
1630        } else {
1631            alert(data.errormessage);
1632        }
1633    }).fail(function() {
1634        alert("Fehler beim Hinzufügen zum Warenkorb.");
1635    }).always(function() {
1636        ajax_add_to_cart_blocked = 0;
1637    });
1638}
1639
1640var delete_array = Array();
1641var delete_delay_timer;
1642
1643function delete_from_scart_ajax(id, biohortItem=false) {
1644
1645
1646    if (biohortItem) {
1647
1648        var question = loadTranslation("Biohort_scart_clear_dialog", "Dieser Artikel ist Teil einer Produktekonfiguration. Es werden daher alle Artikel dieser Konfiguration gelöscht. Möchten Sie fortfahren?")
1649        var ok = loadTranslation("Ok", "Bestätigen")
1650        var cancel = loadTranslation("Cancel", "Abbrechen")
1651
1652        var textmsg = `<p>${question}</p>`;
1653        var btn = `<p class="fancy-buttons"><a class='button fancy-button' href='javascript:deleteAllBiohortItems("${id}");jQuery.fancybox.close();'>${ok}</a>
1654                       <a class='button fancy-button' href='javascript:jQuery.fancybox.close();'>${cancel}</a></p>`;
1655
1656        $.fancybox({
1657            content : '<div class="overlayWrap"><h3 class="overlayTitle">' + loadTranslation("Hinweis") + '</h3>' + textmsg + btn +'</div>',
1658            closeBtn: false,
1659
1660        });
1661
1662    } else {
1663
1664        var parent = $('a[onclick^="delete_from_scart_ajax(\'' + id + '\')"]').parents('tr');
1665        if($(parent).hasClass("setContainer")){
1666            let setID = $(parent).attr('id').replace(/\D/g,'');
1667            $('#ScartTable .Article.set'+setID).remove();
1668        }
1669        parent.remove();
1670    
1671        var counter = $('.scartcounternumber').first().html();
1672        counter--;
1673        $('.scartcounternumber').html(counter);
1674        delete_array.push(id);
1675
1676        grey_out_total_sum_scart();
1677        window.clearTimeout(delete_delay_timer);
1678        delete_delay_timer = window.setTimeout(fire_ajax_delete, 2500);
1679
1680    }   
1681}
1682
1683function deleteAllBiohortItems(id) {
1684    
1685        var parent = $('a[onclick^="delete_from_scart_ajax(\'' + id + '\',\'true\')"]').parents('tr');
1686        var biohortID = parent.data('biohort');
1687
1688        $('.ShopTable tr[data-biohort=\''+ biohortID + '\']').each(function() {
1689            var counter = $('.scartcounternumber').first().html();
1690            counter--;
1691            $('.scartcounternumber').html(counter);
1692            var deleteID = $(this).attr('id').replace(/\D/g,'');
1693            delete_array.push(deleteID);
1694        });
1695
1696        $('.ShopTable tr[data-biohort=\''+ biohortID + '\']').remove()
1697
1698        grey_out_total_sum_scart();
1699        window.clearTimeout(delete_delay_timer);
1700        delete_delay_timer = window.setTimeout(fire_ajax_delete, 2500);
1701        
1702}
1703
1704function grey_out_total_sum_scart() {
1705    $('#scartsummator').css({
1706        opacity : .25
1707    });
1708}
1709
1710function fire_ajax_delete() {
1711    var request = {};
1712    var counter = 1;
1713
1714    delete_array.forEach(function(id) {
1715        request['id' + counter] = id;
1716        counter++;
1717    });
1718    request['max'] = counter - 1;
1719    delete_array = Array();
1720
1721    console.log(request)
1722
1723    jQuery.post(syspathshop + '?func=ajax&action=deletefromcart', request).done(function(data) {
1724        console.log(data.result)
1725        if (data.result == "ok") {
1726            if (data.headshot) {
1727                $('.ScartItemDetails').replaceWith(data.headshot);
1728                
1729            }
1730            if (data.summator) {
1731                $('#scartsummator').replaceWith(data.summator);
1732            }
1733            if (data.cctable) {
1734                $('#CCTable').replaceWith(data.cctable);
1735            }
1736            if (data.gift) {
1737                $('#bonusprogramm').replaceWith(data.gift);
1738            }
1739            if (data.freigabe == '1') {
1740                $('button[name="order"]').text(lbl_permit).fadeIn();
1741                var formaction = $('button[name="order"]').parents('form').first().attr('action');
1742                formaction = formaction.replace('versand', 'permit'), $('button[name="order"]').parents('form').first().attr('action', formaction);
1743            } else {
1744                if (data.too_few == '1') {
1745                    $('button[name="order"]').fadeOut();
1746                } else {
1747                    $('button[name="order"]').text(lbl_order).fadeIn();
1748                    var formaction = $('button[name="order"]').parents('form').first().attr('action');
1749                    formaction = formaction.replace('permit', 'versand');
1750                    $('button[name="order"]').parents('form').first().attr('action', formaction);
1751                }
1752            }
1753        } else {
1754            alert(data.errormessage);
1755            location.reload();
1756        }
1757    }).fail(function() {
1758        location.reload();
1759    });
1760}
1761
1762var auto_refresh_scart;
1763
1764function amount_changed(obj, event) {
1765
1766    var jObj = $(obj);
1767   
1768    var biohortconfigid = jObj.parents('tr').data('biohort');
1769    var elementId = jObj.attr('id').substring(4);
1770    console.log(elementId);
1771    var comment = jObj.val();
1772
1773    copyBiohortComments(biohortconfigid, dbid, comment, 'copydisplay');
1774
1775
1776
1777    // Absenden des Warenkorbs verhindern
1778    if( $("#scartInfoUpdate").length == 0 ) {
1779        $("button[name=order]").prop("disabled",true).css({"opacity": 0.5, "cursor": "progress"});
1780        $('<p id="scartInfoUpdate" style="color: #999; line-height: 44px; float: right; margin: 1.125em 1em 0 0">Ihr Warenkorb wird aktualisiert&hellip;</p>').insertAfter("button[name=order]");
1781    }
1782
1783    var timeout = 1500;
1784    var timeoutRotate = 20000;
1785    if (event) {
1786        if ((event.keyCode >= 37) && (event.keyCode <= 40)) {
1787            return;
1788        }
1789    }
1790   
1791    if (jObj.attr('id').substr(0, 4) == 'TEXT') {
1792        timeout = 5000;
1793        // bei Texteingaben geduldiger warten
1794    }
1795    if (jObj.attr('id').substr(0, 2) == 'IN') {
1796        timeout = 5000;
1797        // bei Kostenstellentiteln geduldiger warten
1798    }
1799
1800    var dbid = jObj.parents('tr').find('input[id^="AM"]').first().attr('name');
1801    $('#delete_link' + dbid).hide();
1802    $('#update_link' + dbid).show();
1803    var menge =$('#AM' + dbid).val()
1804    menge = menge.replace(/,/g,'.');
1805    menge = parseFloat(menge);
1806    
1807   
1808    var bemerkung = jQuery('#TEXT' + dbid).val();
1809    var kostenstelle = jQuery('#CC' + dbid).val();
1810    var textcctitle = jQuery('#IN' + dbid).val();
1811    var min = parseFloat(jQuery('#AM' + dbid).attr('min')) || 1;
1812    var steps = parseFloat(jQuery('#AM' + dbid).attr('steps')) || 1;
1813    
1814    
1815    alter_amount_ajax(dbid, menge, bemerkung, kostenstelle, textcctitle, min);
1816
1817
1818
1819    var elem = $('#update_link' + dbid + ' i').first();
1820    $({
1821        deg : 0
1822    }).animate({
1823        deg : 7200
1824    }, {
1825        duration : timeoutRotate,
1826        easing : 'linear',
1827        step : function(now) {
1828            elem.css({
1829                transform : 'rotate(' + now + 'deg)',
1830                display : 'inline-block',
1831            });
1832        },
1833        complete : function() {
1834            elem.hide();
1835        }
1836    });
1837
1838    window.clearTimeout(auto_refresh_scart);
1839    auto_refresh_scart = window.setTimeout(fire_ajax_alter_amount, timeout);
1840}
1841
1842var alter_array = Array();
1843
1844function alter_coupon(remove) {
1845    if (remove) {
1846        alter_array['delete_coupon'] = true;
1847        fire_ajax_alter_amount();
1848    } else {
1849
1850        alter_array['coupon'] = $('#couponcode').val();
1851
1852        $('#sendcoupon').fadeIn();
1853        var elem = jQuery('#sendcoupon i').first();
1854        $({
1855            deg : 360
1856        }).animate({
1857            deg : 0
1858        }, {
1859            duration : 5000,
1860            step : function(now) {
1861                elem.css({
1862                    transform : 'rotate(' + now + 'deg)',
1863                    display : 'inline-block'
1864                });
1865            }
1866        });
1867
1868        window.clearTimeout(auto_refresh_scart);
1869        auto_refresh_scart = window.setTimeout(fire_ajax_alter_amount, 5000);
1870    }
1871}
1872
1873function alter_ccall() {
1874    var kostenstelle = $('#CCALL :selected').val();
1875    if (kostenstelle == "remove") {
1876        $('#os_scart_form select[name^="CC"]').each(function(index, element) {
1877            if ($(this).attr('id') == 'CCALL')
1878                return;
1879            $(this).val('').trigger('change');
1880        });
1881    } else if (kostenstelle) {
1882        $('#os_scart_form select[name^="CC"]').each(function(index, element) {
1883            if ($(this).attr('id') == 'CCALL')
1884                return;
1885            var kostenstelle_element = $(this).find(':selected').val();
1886            if (kostenstelle_element == '') {
1887                $(this).val(kostenstelle).trigger('change');
1888            }
1889        });
1890    }
1891}
1892
1893function alter_amount_ajax(dbid, menge, bemerkung, kostenstelle, textcctitle, min) {
1894
1895
1896    var values = {};
1897    values['menge'] = menge;
1898    values['min'] = min || 1;
1899    if ( typeof bemerkung != 'undefined') {
1900        values['bemerkung'] = bemerkung;
1901    }
1902    if ( typeof kostenstelle != 'undefined') {
1903        values['kostenstelle'] = kostenstelle;
1904    }
1905    if ( typeof textcctitle != 'undefined') {
1906        values['textcctitle'] = textcctitle;
1907    }
1908    alter_array[dbid] = values;
1909
1910
1911
1912    var biohortconfigid = $('input#TEXT'+dbid).parents('tr').data('biohort')
1913    if (biohortconfigid) {
1914        copyBiohortComments(biohortconfigid, dbid, bemerkung, 'save2session');
1915    }
1916
1917}
1918
1919function fire_ajax_alter_amount() {
1920	
1921	
1922    window.clearTimeout(auto_refresh_scart);
1923    var counter = 1;
1924    var request = {};
1925    console.log(alter_array)
1926    for (var element_id in alter_array) {
1927        if (element_id == "coupon") {
1928            request['coupon'] = alter_array['coupon'];
1929        } else if (element_id == "delete_coupon") {
1930            request['delete_coupon'] = 'true';
1931        } else {
1932            if (alter_array[element_id].menge == 0) {
1933                delete_from_scart_ajax(element_id);
1934            } else {
1935                var amount = alter_array[element_id];
1936                request['a' + counter] = element_id;
1937                if (alter_array[element_id].menge < alter_array[element_id].min) {
1938                    alter_array[element_id].menge = alter_array[element_id].min;
1939                    $('#AM' + element_id).val(alter_array[element_id].menge);
1940
1941                }
1942                
1943                 if ((alter_array[element_id].menge > alter_array[element_id].min) && (alter_array[element_id].menge % alter_array[element_id].min !== 0)) {
1944                 	
1945                 	var next_value = Math.floor(alter_array[element_id].menge / alter_array[element_id].min)
1946                 	next_value = (next_value + 1) * alter_array[element_id].min;
1947                    alter_array[element_id].menge = next_value;
1948                    jQuery('#AM' + element_id).val(alter_array[element_id].menge);
1949
1950                }
1951                
1952                
1953
1954                request['m' + counter] = alter_array[element_id].menge;
1955
1956                if ( typeof alter_array[element_id].kostenstelle != 'undefined') {
1957                    request['k' + counter] = alter_array[element_id].kostenstelle;
1958                }
1959                if ( typeof alter_array[element_id].bemerkung != 'undefined') {
1960                    request['b' + counter] = alter_array[element_id].bemerkung;
1961                }
1962                if ( typeof alter_array[element_id].textcctitle != 'undefined') {
1963                    request['ct' + counter] = alter_array[element_id].textcctitle;
1964                }
1965
1966                $('#ep' + element_id).parent().width($('#ep' + element_id).parent().width());
1967                $('#gp' + element_id).parent().width($('#gp' + element_id).parent().width());
1968                $('#ep' + element_id).fadeOut();
1969                $('#gp' + element_id).fadeOut();
1970                counter++;
1971            }
1972        }
1973    };
1974    request['max'] = (counter - 1);
1975    grey_out_total_sum_scart();
1976
1977    jQuery.post(syspathshop + '?func=ajax&action=change_amount', request).done(function(data) {
1978        $('#update_link' + element_id).parent().width($('#update_link' + element_id).parent().width());
1979        $('span[id^="update_link"]').hide();
1980
1981        if (data.result == "ok") {
1982            console.log(data)
1983            console.log(request)
1984        	
1985        	
1986        	
1987            if (data.preise) {
1988                for (var i = 0; i < data.preise.length; i++) {
1989                    var dbid = data.preise[i].dbid;
1990                    
1991                    if (typeof data.preise[i].menge != "undefined" ) {
1992                        $('#AM' + dbid).val(data.preise[i].menge);
1993                    }
1994                    $('#ep' + dbid).html(data.preise[i].einzelpreis).fadeIn();
1995                    $('#gp' + dbid).html(data.preise[i].gesamtpreis).fadeIn();
1996                    $('#ep' + dbid).parent().removeAttr("style");
1997                    $('#gp' + dbid).parent().removeAttr("style");
1998                    $('#delete_link' + dbid).fadeIn();
1999                    $('#delete_link' + dbid).parent().removeAttr("style");
2000                }
2001            }
2002            if (data.summator) {
2003                $('#scartsummator').replaceWith(data.summator);
2004            }
2005
2006            if (data.headshot) {
2007                $('.ScartItemDetails').replaceWith(data.headshot);
2008            }
2009            
2010            if (data.popup) {
2011                var popups = $(data.popup);
2012                add_to_scart_popup(popups);
2013            }           
2014            
2015            if (data.cctable) {
2016                $('#CCTable').replaceWith(data.cctable);
2017            }
2018            if (data.gift) {
2019                $('#bonusprogramm').replaceWith(data.gift);
2020            }
2021            if (data.freigabe == '1') {
2022                $('button[name="order"]').text(lbl_permit).fadeIn();
2023                var formaction = $('button[name="order"]').parents('form').first().attr('action');
2024                formaction = formaction.replace('versand', 'permit'), $('button[name="order"]').parents('form').first().attr('action', formaction);
2025            } else {
2026                if (data.too_few == '1') {
2027                    $('button[name="order"]').fadeOut();
2028                } else {
2029                    $('button[name="order"]').text(lbl_order).fadeIn();
2030                    var formaction = $('button[name="order"]').parents('form').first().attr('action');
2031                    formaction = formaction.replace('permit', 'versand');
2032                    $('button[name="order"]').parents('form').first().attr('action', formaction);
2033                }
2034            }
2035
2036          
2037            
2038            
2039            // Absenden des Warenkorbs wieder erlauben
2040            $("button[name=order]").prop("disabled",false).css({"opacity": 1, "cursor": "pointer"});
2041            $("#scartInfoUpdate").remove();
2042
2043
2044            //todo-biohort
2045            $("#ScartTable.ShopTable tr.biohort-item").each(function(){
2046                $(this).find('.comment').data('value', $(this).find('.comment').val()) 
2047            })
2048            
2049
2050            
2051        } else {
2052            alert(data.errormessage);
2053            location.reload();
2054        }
2055    }).fail(function() {
2056        alert(loadTranslation("WK_fehlermengenaenderung", "Fehler beim Ändern der Menge im Warenkorb Warenkorb."));
2057        location.reload();
2058    });
2059
2060    alter_array = Array();
2061}
2062
2063function submit_direct_order() {
2064    var artnr = $("#directorder").val();
2065    var menge = $("#MengeWert").val();
2066    menge = menge.replace(/,/g, '.');
2067    menge = menge.replace(/[.](?=.*[.])/g,'');
2068    menge = parseFloat(menge);  
2069    var rub = $("#Rub").val();
2070
2071    if (!artnr) {
2072        popbox(direct_order_error1, direct_order_error2);
2073        return false;
2074    }
2075
2076    var input = '<input class="Input" type="hidden" size="3" maxlength="5" name="artnr_001_' + artnr + '_0" value="' + menge + '"/>';
2077    $('#Show_form').html(input);
2078    if ((!menge) || (menge == 0)) {
2079        popbox(direct_order_error3, direct_order_error4);
2080        return false;
2081    }
2082
2083    if (menge > 0) {
2084        send_directorder_ajax(artnr, menge);
2085    }
2086}
2087
2088function send_directorder_ajax(artnr, menge) {
2089    var article = {
2090        artnr : 'artnr_001_' + artnr + '_0',
2091        menge : menge
2092    };
2093
2094    $('#MengeWert').hide();
2095    $("#ShowWaitMenge").show();
2096    document.getElementById("MengeWert").disabled = true;
2097    document.getElementById("DirectOrderButton").disabled = true;
2098    jQuery.post(syspathshop + '?func=ajax&action=directorder', article).done(function(data) {
2099        $("#ShowWaitMenge").hide();
2100        $('#MengeWert').show();
2101        document.getElementById("MengeWert").disabled = false;
2102        document.getElementById("DirectOrderButton").disabled = false;
2103        if (data.result == "ok") {
2104            var popups = $(data.popup);
2105            if (data.cart) {
2106                $('#ScartTable').replaceWith(data.cart);
2107            }
2108            if (data.headshot) {
2109                $('.ScartItemDetails').replaceWith(data.headshot);
2110            }
2111            if (data.scartsize) {
2112                $('.scartcounternumber').html(data.scartsize);
2113            }
2114            if (data.gift) {
2115                $('#bonusprogramm').replaceWith(data.gift);
2116            }
2117            if (data.mindbestDirectOrder) {
2118                $('#MengeWert').val(data.mindbestDirectOrder);
2119            }
2120            if (data.freigabe == '1') {
2121                $('button[name="order"]').text(lbl_permit).fadeIn();
2122                var formaction = $('button[name="order"]').parents('form').first().attr('action');
2123                formaction = formaction.replace('versand', 'permit'), $('button[name="order"]').parents('form').first().attr('action', formaction);
2124            } else {
2125                if (data.too_few == '1') {
2126                    $('button[name="order"]').fadeOut();
2127                } else {
2128                    $('button[name="order"]').text(lbl_order).fadeIn();
2129                    var formaction = $('button[name="order"]').parents('form').first().attr('action');
2130                    formaction = formaction.replace('permit', 'versand');
2131                    $('button[name="order"]').parents('form').first().attr('action', formaction);
2132                }
2133            }
2134
2135            var minbestDirect = data.mindbestDirectOrder;
2136
2137            if (minbestDirect > menge) {
2138
2139            }
2140
2141            add_to_scart_popup(popups);
2142            reinit_scart_buttons();
2143            $('#FFqueryDO').val('').focus();
2144            $('#MengeWert').val('');
2145            $('#suggestLayer_directorder').hide();
2146            $('#directorder').hide();
2147        } else {
2148            alert(data.errormessage);
2149        }
2150
2151        arrangeBiohortDeliveries();
2152
2153
2154
2155    }).fail(function() {
2156        alert(loadTranslation("WK_DOFEHLER", "Fehler beim Hinzufügen zum Warenkorb aus der Schnellbestellung."));
2157    }).always(function() {
2158        // ajax_add_to_cart_blocked = 0;
2159    });
2160
2161}
2162
2163function add_to_favourites_ajax(artnr, artnrcust) {
2164    var request = {
2165        artnr : artnr,
2166        artnrcust : artnrcust
2167    };
2168    jQuery.post(syspathshop + '?func=ajax&action=add_to_favourites', request).done(function(data) {
2169        if (data.result == "ok") {
2170            var popups = $(data.popup);
2171            add_to_scart_popup(popups);
2172            $('#addtofavo' + artnr + ' i').delay(300).addClass('isFavo');
2173        } else {
2174            alert(data.errormessage);
2175        }
2176    }).fail(function() {
2177        alert(loadTranslation("DET_FAVFEHLER", "Fehler beim Hinzufügen zu den Favoriten."));
2178    }).always(function() {
2179        $('#addtofavo' + artnr + ' i').fadeIn();
2180    });
2181}
2182
2183
2184function add_to_fastpage_ajax(artnr, artnrcust, whole) {
2185    var request = {
2186        artnr : artnr,
2187        artnrcust : artnrcust,
2188        whole: whole
2189    };
2190    jQuery.post(syspathshop + '?func=ajax&action=add_to_fastpage', request).done(function(data) {
2191        if (data.result == "ok") {
2192            var popups = $(data.popup);
2193            add_to_scart_popup(popups);
2194            $('#addtofavo' + artnr + ' i').delay(300).addClass('isFavo');
2195        } else {
2196            alert(data.errormessage);
2197        }
2198    }).fail(function() {
2199        alert(loadTranslation("DET_FAVFEHLER", "Fehler beim Hinzufügen zu Fastpage."));
2200    }).always(function() {
2201        $('#addtofavo' + artnr + ' i').fadeIn();
2202    });
2203}
2204
2205
2206function dynamically_load_prices() {
2207    var sbug = false;
2208    if ($(document).getUrlParam("sbug") == '47475_sh') {
2209        sbug = true;
2210    }
2211    var sinfo = $(document).getUrlParam("sinfo");
2212
2213    if (WarenwirtschaftModus == 'ajax-all') {
2214
2215        // Alle Artikel gleichzeitig in einem Request anfragen.
2216
2217        var request = {};
2218        var counter = 0;
2219        var artnr;
2220        var savbox = 0;
2221
2222        /*$('#submitform tbody tr').each(function(index, element) {
2223            var artnr = $(this).find('.artikelnummer').first().val();
2224            counter++;
2225            request['a' + counter] = artnr;
2226        });*/
2227        
2228        
2229        $('#submitform tbody tr, #savorderbox2').each(function(index, element) {
2230             
2231            // FIX: Livepreise wenn ein Artikel
2232        if ($(this).prop('id') == 'savorderbox2') {
2233            artnr = $('#savartnr').html();
2234            savbox = 1;
2235        } else {
2236            artnr = $(this).find('.artikelnummer').first().val();
2237        }
2238 
2239         
2240            counter++; 
2241            request['a'+counter] = artnr;
2242        });
2243
2244        
2245        
2246        request['max'] = counter;
2247
2248        var query = window.location.search.substring(1);
2249
2250        var vars = query.split("&");
2251        for (var i = 0; i < vars.length; i++) {
2252            var pair = vars[i].split("=");
2253            if ((pair[0] == 'livepreisdemo') && (pair[1] == '1')) {
2254                request['livepreisdemo'] = 1;
2255            }
2256        }
2257
2258        //Livepreis für Zubehör Artikel
2259        $('.DetailCross tr').each(function(index, element) {
2260        var artnrCross = $(this).find('.artikelnummerCross').first().val();
2261
2262        var request = {
2263        'a1' : artnrCross,
2264        'max' : 1
2265        };
2266
2267
2268
2269        ajax_get_prices_detail(request);
2270
2271        });
2272
2273    } else {// WarenwirtschaftModus == "ajax-single"
2274
2275        // jede Zeile der Detailtabelle durchgehen und für jeden Artikel
2276        // eine Ajax-Anfrage starten
2277
2278        $('#submitform tr').each(function(index, element) {
2279            var artnr = $(this).find('.artikelnummer').first().val();
2280
2281            var request = {
2282                'a1' : artnr,
2283                'max' : 1
2284            };
2285
2286            if ($(this).parents().hasClass("DTFC_Cloned") || !artnr) {
2287                return;
2288            }
2289            var query = window.location.search.substring(1);
2290
2291            var vars = query.split("&");
2292            for (var i = 0; i < vars.length; i++) {
2293                var pair = vars[i].split("=");
2294                if ((pair[0] == 'livepreisdemo') && (pair[1] == '1')) {
2295                    request['livepreisdemo'] = 0;
2296                }
2297            }
2298
2299            ajax_get_prices_detail(request);
2300        });
2301
2302        //Livepreis für Zubehör Artikel
2303        $('.DetailCross tr').each(function(index, element) {
2304            var artnrCross = $(this).find('.artikelnummerCross').first().val();
2305
2306            var request = {
2307                'a1' : artnrCross,
2308                'max' : 1
2309            };
2310
2311            ajax_get_prices_detail(request);
2312
2313        });
2314
2315    }
2316}
2317
2318function ajax_get_prices_detail(request) {
2319	
2320    var urlparam = '?func=ajax&action=get_price';
2321    var sbug = false;
2322    var debug = 'off';
2323    if ($(document).getUrlParam("sbug") == '47475_sh') {
2324        sbug = true;
2325    }
2326    var sinfo = $(document).getUrlParam("sinfo");
2327    if (sbug == true && sinfo == 'request') {
2328        urlparam = urlparam + '&debug=request';
2329        debug = 'request';
2330    } else if (sbug == true && sinfo == 'response') {
2331        urlparam = urlparam + '&debug=response';
2332        debug = 'response';
2333    } else if (sbug == true) {
2334        urlparam = urlparam + '&debug=all';
2335        debug = 'all';
2336    }
2337    jQuery.ajax({
2338        type : 'POST',
2339        url : syspathshop + urlparam,
2340        data : request,
2341        timeout : 300000
2342    }).done(function(data) {
2343        if (data.result == "ok") {
2344        	//console.log(data);
2345
2346            if (debug == 'request' || debug == 'all') {
2347                console.log('%c ERP-Request: ', 'background:black;color:#fff')
2348                console.dir(data.xmlrequest);
2349            }
2350            if (debug == 'response' || debug == 'all') {
2351                console.log('%c ERP-Response: ', 'background:black;color:#fff')
2352                console.dirxml(data.xmlresponse);
2353            }
2354            for (var i = 1; i <= request.max; i++) {
2355                if ( typeof data.prices[request['a' + i]] == 'undefined') {
2356                    data.prices[request['a' + i]] = Array(99).fill(null);
2357                }
2358            }
2359            for (var artnr in data.prices) {
2360                sav = $('#savartnr').length;
2361                if (sav) {
2362                    savartnr = $('#savartnr').html();
2363                }
2364                for (var i = 1; i <= 10; i++) {
2365                    if (data.prices[artnr][i - 1] == null) {
2366                        // DB-Fallbacks aus den hidden fields übernehmen
2367                        if (sav && (savartnr == artnr)) {
2368                            if (i == 1) {
2369                                $('#savpreis').html($('#dbpreis' + i + '-' + artnr).html());
2370                            } else {
2371                                $('#savpreis' + i).html($('#dbpreis' + i + '-' + artnr).html());
2372                            }
2373                        }
2374
2375                        $('tr').each(function() {
2376
2377                            $(this).find('#preis' + i + '-' + artnr.replace(/\./gi, "")).html($('#dbpreis' + i + '-' + artnr.replace(/\./gi, "")).html());
2378
2379                        });
2380
2381                        //Comparelink Preisanpassung Livepreise
2382
2383                        $('a#preisCompare').each(function() {
2384
2385                            if (data.prices[artnr][0]) {
2386
2387                                var newLink = '&price=' + data.prices[artnr][0].toString().replace(/\./, ",");
2388
2389                                if ($(this).attr("href")) {
2390
2391                                    $(this).attr("href", $(this).attr("href").replace(/&price=([^&]*)/, newLink));
2392
2393                                }
2394
2395                            }
2396
2397                        });
2398
2399                        //$('#preis'+i+'-'+artnr).html($('#dbpreis'+i+'-'+artnr).html());
2400                        
2401                        //Comparelink Preisanpassung Livepreise
2402
2403                        $('a#preisCompare-'+artnr).each(function() {
2404
2405                            if (data.prices[artnr][0]) {
2406
2407                                var newLink = '&price=' + data.prices[artnr][0].toString().replace(/\./, ",");
2408
2409                                if ($(this).attr("href")) {
2410
2411                                    $(this).attr("href", $(this).attr("href").replace(/&price=([^&]*)/, newLink));
2412
2413                                }
2414
2415                            }
2416
2417                        });
2418                        
2419                        
2420
2421                    } else {
2422                        if (sav && (savartnr == artnr)) {
2423                            if (i == 1) {
2424                                $('#savpreis').html(data.prices[artnr][i - 1]);
2425                            } else {
2426                                $('#savpreis' + i).html(data.prices[artnr][i - 1]);
2427                            }
2428                        }
2429                        $('tr').each(function() {
2430
2431                            $(this).find('#preis' + i + '-' + artnr.replace(/\./gi, "")).html(Trenner(data.prices[artnr][i - 1].toFixed(2)));
2432                        });
2433                        //$('#preis'+i+'-'+artnr).html(data.prices[artnr][i-1]);
2434                    }
2435                }
2436
2437                $('tr').each(function() {
2438
2439                    //var theelement = $('#preis1-'+artnr).parents('tr').find('.lieferzeit-symbol').first();
2440                    var theelement;
2441                    var hasPrice = $(this).find('#preis1-' + artnr).length;
2442
2443                    if (hasPrice == 0) {
2444                        var theelement = $(this).find('#artnr-' + artnr.replace(/\./gi, "")).parents('tr').find('.lieferzeit-symbol').first();
2445                    } else {
2446                        var theelement = $(this).find('#preis1-' + artnr.replace(/\./gi, "")).parents('tr').find('.lieferzeit-symbol').first();
2447                    }
2448
2449                    var inhalt = theelement.attr('src');
2450                    var inhalt2 = theelement.attr('title');
2451                    
2452                  
2453
2454                    if ((artnr != "undefined") && (theelement.length)) {
2455
2456                        if (data.prices[artnr][10] == null) {
2457                            // var dbinhalt = $('#preis1-'+artnr).find('.dblieferzeit-symbol').first().html();
2458                            var dbinhalt = theelement.parent().find('.dblieferzeit-symbol').html();
2459
2460                            inhalt = inhalt.replace(/\.\.\/layout\/wait\.gif/, dbinhalt);
2461                        } else {
2462
2463                            inhalt = inhalt.replace(/\.\.\/layout\/wait\.gif/, data.prices[artnr][10]);
2464                            
2465                      		var lieferzeit_title = "LIEFERZEIT_ALT"+data.prices[artnr][10]; 
2466                      	
2467							inhalt2 = loadTranslation(lieferzeit_title);
2468							
2469
2470                        }
2471
2472                        theelement.attr('src', inhalt);
2473                        theelement.attr('title', inhalt2);
2474                        theelement.removeClass('wait');
2475                        delete theelement;
2476                        if (sav && (savartnr == artnr)) {
2477                            $('#savlagerrow img').first().attr('src', inhalt);
2478                        }
2479                        if (data.prices[artnr][11] == null) {
2480                            if (sav && (savartnr == artnr)) {
2481                                if (hasPrice) {
2482                                    $('#savmind').html($('#preis1-' + artnr.replace(/\./gi, "")).parents('tr').find('.dbmindestbestellmenge').first().html());
2483                                } else {
2484                                    $('#savmind').html($('#artnr-' + artnr.replace(/\./gi, "")).parents('tr').find('.dbmindestbestellmenge').first().html());
2485                                }
2486                            }
2487
2488                            $('tr').each(function() {
2489                                if (hasPrice) {
2490                                    $(this).find('#preis1-' + artnr.replace(/\./gi, "")).parents('tr').find('.mindestbestellmenge').first().html($('#preis1-' + artnr.replace(/\./gi, "")).parents('tr').find('.dbmindestbestellmenge').first().html());
2491                                } else {
2492                                    $(this).find('#artnr-' + artnr.replace(/\./gi, "")).parents('tr').find('.mindestbestellmenge').first().html($('#artnr-' + artnr.replace(/\./gi, "")).parents('tr').find('.dbmindestbestellmenge').first().html());
2493                                }
2494                            });
2495                            // $('#preis1-'+artnr).parents('tr').find('.mindestbestellmenge').first().html($('#preis1-'+artnr).parents('tr').find('.dbmindestbestellmenge').first().html());
2496                        } else {
2497                            if (sav && (savartnr == artnr)) {
2498                                $('#savmind').html(data.prices[artnr][11]);
2499                            }
2500                            $('tr').each(function() {
2501                                if (hasPrice) {
2502                                    $(this).find('#preis1-' + artnr.replace(/\./gi, "")).parents('tr').find('.mindestbestellmenge').first().html(data.prices[artnr][11]);
2503                                } else {
2504                                    $(this).find('#artnr-' + artnr.replace(/\./gi, "")).parents('tr').find('.mindestbestellmenge').first().html(data.prices[artnr][11]);
2505
2506                                }
2507                            });
2508                            //$('#preis1-'+artnr).parents('tr').find('.mindestbestellmenge').first().html(data.prices[artnr][11]);
2509                        }
2510                        
2511                        
2512                        //UVP
2513                        if ( data.pricedata[artnr][66] == null) {
2514                        	// DB-Fallbacks aus den hidden fields übernehmen
2515                        	jQuery('#uvp-'+artnr.replace(/\./gi, "")).html(jQuery('#dbuvp-'+artnr.replace(/\./gi, "")).html());
2516                    	} else {
2517                        	jQuery('#uvp-'+artnr.replace(/\./gi, "")).html(data.pricedata[artnr][66]);
2518                   		}
2519                        
2520                     
2521
2522                    }
2523
2524                });
2525
2526            };
2527        } else {
2528            alert(data.errormessage);
2529        }
2530    }).fail(function() {
2531
2532    }).always(function() {
2533        $(window).trigger('refresh-table-head');
2534    });
2535}
2536
2537/*
2538 * scroll to topmost .error container
2539 */
2540$(document).ready(function() {
2541    var topmost = 0;
2542    $('.error').each(function(index, element) {
2543        var top = $(this).offset().top;
2544        if (topmost) {
2545            if (top < topmost) {
2546                topmost = top;
2547            }
2548        } else {
2549            topmost = top;
2550        }
2551    });
2552    if (topmost) {
2553        topmost -= 150;
2554        $('html, body').animate({
2555            scrollTop : topmost
2556        }, 2000);
2557    }
2558});
2559
2560/**
2561 * Plus-Minus-Buttons in da House
2562 */
2563
2564$(document).ready(function() {
2565	
2566
2567
2568    reinit_scart_buttons();
2569
2570});
2571
2572function reinit_scart_buttons() {
2573
2574    $('.increase').on('click', function() {
2575        alter_plus_minus($(this), 1);
2576    });
2577
2578    $('.decrease').on('click', function() {
2579        alter_plus_minus($(this), 0);
2580    });
2581}
2582
2583function alter_plus_minus(jObject, up) {
2584    var inputmenge = jObject.closest('tr').find('.menge');
2585    var menge = parseFloat(inputmenge.val()) || 0;
2586    var min = parseFloat(jObject.attr('min')) || 1;
2587    var intervall = parseFloat(jObject.attr('steps')) || 1;
2588
2589    if (intervall == 0) {
2590        intervall = 1;
2591    }
2592    min = 0;
2593    if (up) {
2594        if (menge % intervall == 0) {
2595            menge += intervall;
2596        } else {
2597            menge = (Math.floor(menge / intervall) + 1) * intervall;
2598        }
2599        if (menge < min) {
2600            menge = min;
2601        }
2602    } else {
2603        if (menge % intervall == 0) {
2604            menge -= intervall;
2605        } else {
2606            menge = Math.floor(menge / intervall) * intervall;
2607        }
2608        if (menge < min) {
2609            menge = min;
2610        }
2611    }
2612    if (menge < 0) {
2613        menge = 0;
2614    }
2615    inputmenge.val(menge);
2616    // auf der Scartseite das Aktualisieren-Event starten
2617    inputmenge.val(menge).trigger('change');
2618
2619    if (inputmenge.hasClass('autoupdate')) {
2620        amount_changed(inputmenge[0]);
2621    }
2622}
2623
2624// URL Parameter erfassen
2625// für Stripe
2626
2627function getParameterByName(name) {
2628    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
2629    var regex = new RegExp("[\\?&amp;]" + name + "=([^&]*)"), results = regex.exec(location.search);
2630    return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
2631}
2632
2633/*
2634 * Sprachwechsler
2635 */
2636
2637$(document).ready(function() {
2638    $('#languageselector').on('change', function() {
2639        window.location = $(this).find(':selected').val();
2640    });
2641
2642    $('#languageSelection2 a').on('click', function() {
2643    	$('#languageSelection2 a').addClass("active");
2644        $('#languageSelection2 #languageselector2').on('change', function() {
2645        	window.location = $(this).find(':selected').val();
2646        	var selectedLang = $(this).find(':selected').val();
2647            localStorage.setItem("SelectedLanguage", selectedLang);
2648        });
2649    });
2650});
2651
2652// Category Selector Named Cate Thereza Cory
2653
2654jQuery(document).ready(function() {
2655    $('#categorydropdown').on('change', function() {
2656        refresh_search_catecory();
2657    });
2658
2659    // Da Fonts nicht zu document.ready gehören, kann die Breitenberechnung bei ungeladener Font falsch sein
2660    if(!isIE){
2661    	document.fonts.ready.then(function() {
2662    		refresh_search_catecory();
2663            $(window).trigger('refresh-table-head');
2664    	});
2665    }
2666    $(window).on('resize', refresh_search_catecory);
2667});
2668
2669function refresh_search_catecory() {
2670    var ww = $(window).width();
2671    $('.selected_category').text($('#categorydropdown :selected').text());
2672    var padding = $('.selected_category').first().width() + 40;
2673    if (ww <= 640) {
2674        $('#FFquery').css({
2675            'padding-left' : 5
2676        });
2677        $('#categorydropdown option').attr('selected', false);
2678    } else {
2679        $('#FFquery').css({
2680            'padding-left' : padding
2681        });
2682    }
2683}
2684
2685// Sprachdatei laden (wenn gecachte Daten älter als 1 Tag oder wenn es fehler gab) und im LocalStorage speichern
2686function initLangfile(force) {
2687    var d1 = new Date();
2688    var olddate = new Date(parseInt(localStorage.getItem("langfiledate")));
2689    var diff = d1 - olddate;
2690    diff = Math.floor(diff / 86400000);
2691    if (langfileurl != localStorage.getItem("langfileurl")) {
2692        force = true;
2693    }
2694    if (diff || !localStorage.getItem("langfiledate") || !langfile || force) {
2695
2696        console.log('forced ajax')
2697      
2698        $.ajax({
2699            type : "POST",
2700            dataType : 'json',
2701            url : langfileurl,
2702            cache : true,
2703            success : function(data) {
2704                langfile = data;
2705                localStorage.setItem("langfiledate", d1.getTime());
2706                localStorage.setItem('langfile', JSON.stringify(langfile));
2707                localStorage.setItem("langfileurl", langfileurl);
2708            },
2709            error : function(xhr, textStatus, error) {
2710                console.log("languagefile not found. " + langfileurl);
2711            }
2712        });
2713    }
2714}
2715
2716function resizetheMegaMenu() {
2717    paddingScreen = "10px";
2718    
2719    /* 
2720    let marginScreen = $("#Navi").css('margin-left');
2721    let marginPage = $(".page-header").css('margin-left');
2722    if (marginPage > marginScreen) {
2723        marginScreen = marginPage;
2724    }
2725    marginScreen = "-" + marginScreen;
2726
2727    if (marginScreen > "-0px") {
2728        paddingScreen = marginScreen;
2729        $('.mega-dropdown').css({
2730            'margin-left' : marginScreen
2731        });
2732    } else {
2733        $('.mega-dropdown').css({
2734            'margin-left' : 0
2735        });
2736    }
2737    */
2738    
2739    widthScreen = $(window).width();
2740    var fixedheight = $('#Navi').height();
2741    var height = $(window).height() - fixedheight;
2742    $('#Navi .mega-dropdown.level_3').css({
2743        'max-height' : height
2744    });
2745
2746	
2747    if (widthScreen >= 1920) {
2748        $('.mega-dropdown').css({'width': widthScreen, 'margin-left': -60});
2749    } else {
2750        jQuery('.mega-dropdown').css({'width': widthScreen, 'margin-left': (-1 * $('.mega-dropdown').offset()['left'] + parseFloat($('.mega-dropdown').css('margin-left')))});
2751        if ($("body").hasClass("fixedscreen")) {
2752            $('.mega-dropdown').css({
2753                'padding-left' : paddingScreen
2754            });
2755            $('.mega-dropdown').css({
2756                'padding-right' : paddingScreen
2757            });
2758        }
2759    }
2760    
2761}
2762
2763
2764$(window).resize(resizetheMegaMenu);
2765$(document).ready(function() {
2766	if (jQuery('.mega-dropdown').lenght > 0) {
2767		resizetheMegaMenu();
2768	}
2769    
2770});
2771//$(window).ready(window.setTimeout(resizetheMegaMenu, 100)); // das sollte auch überflüssig sein, ursache finden, außerdem falsch formuliert
2772//$(document).ready(function() {
2773//  console.log('delayed start');
2774//  window.setTimeout(resizetheMegaMenu, 1000);
2775//});
2776
2777// Übersetzungen aus Variable auslesen und ggf. neuladen der Sprachdatei antriggern / Fallback zurückliefern
2778// Verwendung:
2779// Param1: Gesuchte Value aus Sprachdatei (script Tab)
2780// Param2: Fallback, falls Value nicht vorhanden
2781// Beispiel:
2782//  loadTranslation("validate_num_error","Dies ist keine richtige Zahl, bitte wiederholen Sie Ihre Eingabe");
2783function loadTranslation(question, fallback) {
2784
2785    var lang_selector = "lang_" + shoplanguage;
2786
2787    console.log(langfile)
2788 
2789    if (!fallback) {
2790        fallback = question;
2791    }
2792    if (langfile) {
2793        if (langfile[lang_selector][question]) {
2794            return unescape(langfile[lang_selector][question]);
2795           
2796        }
2797    }
2798    initLangfile(1);
2799    return fallback;
2800}
2801
2802// IE 11 FIX
2803if (!Array.prototype.fill) {
2804    Object.defineProperty(Array.prototype, 'fill', {
2805        value : function(value) {
2806
2807            // Steps 1-2.
2808            if (this == null) {
2809                throw new TypeError('this is null or not defined');
2810            }
2811
2812            var O = Object(this);
2813
2814            // Steps 3-5.
2815            var len = O.length >>> 0;
2816
2817            // Steps 6-7.
2818            var start = arguments[1];
2819            var relativeStart = start >> 0;
2820
2821            // Step 8.
2822            var k = relativeStart < 0 ? Math.max(len + relativeStart, 0) : Math.min(relativeStart, len);
2823
2824            // Steps 9-10.
2825            var end = arguments[2];
2826            var relativeEnd = end === undefined ? len : end >> 0;
2827
2828            // Step 11.
2829            var final = relativeEnd < 0 ? Math.max(len + relativeEnd, 0) : Math.min(relativeEnd, len);
2830
2831            // Step 12.
2832            while (k < final) {
2833                O[k] = value;
2834                k++;
2835            }
2836
2837            // Step 13.
2838            return O;
2839        }
2840    });
2841}
2842
2843function position_popupbox() {
2844    if ($(window).width() > 768) {
2845        if ($(window).scrollTop() < ScrollHead) {
2846            var start = 110;
2846 // was ist in der css als top eingetragen
2847            var scrollto = start - jQuery(window).scrollTop();
2848            if (scrollto < 57) {
2849                scrollto = 57;
2850            }
2851            $('#scart-popup-container').css({'top': scrollto});
2852        } else {
2853            $('#scart-popup-container').css({'top': 57});
2854        }
2855    } else {
2856        $('#scart-popup-container').css({'top': 70});
2857    }
2858}
2859$(window).on('scroll', position_popupbox);
2860$(window).on('resize', position_popupbox);
2861$(document).ready(position_popupbox);
2862
2863function Trenner(number) {
2864  
2865  var orig_number = number;
2866  var point = number.indexOf('.');
2867  var decimal = number.substr(point);
2868  number = number.substr(0, point);
2869  number = '' + number;
2870  if (number.length > 3) {
2871    var mod = number.length % 3;
2872    var output = (mod > 0 ? (number.substring(0,mod)) : '');
2873    for (i=0 ; i < Math.floor(number.length / 3); i++) {
2874      if ((mod == 0) && (i == 0))
2875        output += number.substring(mod+ 3 * i, mod + 3 * i + 3);
2876      else
2877        // hier wird das Trennzeichen festgelegt mit '.'
2878        output+= "'" + number.substring(mod + 3 * i, mod + 3 * i + 3);
2879    }
2880   return (output + decimal);
2881  }
2882  else{
2883  	return orig_number;
2884  	
2885  } 
2886}
2887
2888function TableSort()
2889{
2890
2891	// $(".TableSort").hide();
2892	// $(".ShopTable th").hover( function(){
2893		// $(this).children(".TableSort").show();
2894	// }, function(){
2895		// $(this).children(".TableSort").hide();
2896	// });
2897
2898}
2899
2900function copyBiohortComments(configid,dbid,comment,modus) {
2901        
2902        $("#ScartTable.ShopTable tr[data-biohort='" + configid + "'].biohort-item").each(function(){
2903            var this_id = $(this).find('.comment').attr('id').substring(4)
2904            var this_comment_isempty = !$(this).find('.comment').data('value')
2905            if ((this_id != dbid) && (this_comment_isempty)){
2906
2907                switch (modus) {
2908
2909                    case 'copydisplay':
2910                        $(this).find('.comment').val(comment)
2911                        break;
2912
2913
2914
2915                    case 'save2session':
2916                        var menge = $(this).find('.menge').val()
2917                        var min = $(this).find('.menge').attr('min')
2918        
2919                        var values = {};
2920                        values['menge'] = menge;
2921                        values['min'] = min || 1;
2922                        values['bemerkung'] = comment;
2923                    
2924                        alter_array[this_id] = values;
2925                        break;
2926                  }
2927
2928            }
2929            
2930        });
2931        
2932 
2933    
2934}
2935
2936function arrangeBiohortDeliveries() {
2937    var biohortConfigArray = [];
2938    $('#ScartTable.ShopTable .biohort-item').each(function(){
2939        if (typeof $(this).data('biohort') !== 'undefined') {
2940            biohortConfigArray.push($(this).data('biohort'))
2941        }
2942    })
2943
2944    biohortConfigArray = $.unique(biohortConfigArray);
2945
2946    biohortConfigArray.forEach(function(configid){
2947        var longestDeliveryTime = '0';
2948        var longestDeliveryTimeToolTip = "";
2949        
2950        $("#ScartTable.ShopTable tr[data-biohort='" + configid + "'].biohort-item").each(function(){
2951            if ($(this).find('.lieferzeit img').data('delivery') > longestDeliveryTime) {
2952                longestDeliveryTime = $(this).find('.lieferzeit img').data('delivery')
2953                longestDeliveryTimeToolTip = $(this).find('.lieferzeit img').attr('title')
2954            }
2955        });
2956
2957        $("#ScartTable.ShopTable tr[data-biohort='" + configid + "'].biohort-item").each(function(){
2958            var imagePath = $(this).find('.lieferzeit img').attr('src');
2959            imagePath = imagePath.slice(0, -1); 
2960            $(this).find('.lieferzeit img').attr('src',imagePath + longestDeliveryTime)
2961            $(this).find('.lieferzeit img').attr('title',longestDeliveryTimeToolTip)
2962        });
2963    })
2964}
2965
2966function testpermission() {
2967    let anonymous = $('body').hasClass('anonymous');
2968    let onlycustomer = $('body').hasClass('onlycustomer');
2969
2970    if (onlycustomer && anonymous) {
2971        window.location.href = syspathshop;
2972    }
2973
2974   
2975}
2976
2977$(window).scroll(position_popupbox);
2978$(window).resize(position_popupbox);
2979$(document).ready(position_popupbox);

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.