PageSourceSearch

https://swh.de/assets/js/evh_custom-q3rG8iL.js

js swh.de collected 2026-09-24 11:20:44 UTC 27,926 bytes, 715 lines download raw bytes

1/**
2 * Funktion zum Synchronisieren des Range-Sliders und der Icons zu auswahl der Personenzahl im Preisrechner widget,
3 * wenn die Icons angeklickt werden.
4 *
5 * Setzt anschließend den Wert des Verbrauches auf den data-value des angeklickten Icons.
6 *
7 * @param element das Aktuelle element des Icons, wird mit "this" übergeben
8 * @param sliderID id des Range-Slider Elements
9 * @param outputId id des Elements in der, der Verbrauchswert eingetragen wird
10 */
11window.evhSelectElectricityValueByIcon = function (element, sliderID, outputId){
12    document.getElementById(sliderID).value = element.getAttribute('data-value');
13    evhSelectElectricityValue(sliderID, element.parentElement.id, outputId);
14}
15
16/**
17 * Funktion zum Synchronisieren des Range-Sliders und der Icons zu auswahl der Personenzahl im Preisrechner widget,
18 * wenn der Range-Slider bewegt wird.
19 *
20 * Setzt anschließend den Wert des Verbrauches auf den data-value des zum value des Range-Sliders übereinstimmenden Icons.
21 *
22 * @param sliderID
23 * @param iconDivId
24 * @param outputId
25 */
26window.evhSelectElectricityValue = function (sliderID, iconDivId, outputId){
27    let slider = document.getElementById(sliderID);
28    let data = JSON.parse(slider.getAttribute('data-value'));
29    let icons = document.getElementById(iconDivId).children;
30    let hitSelectedElement = false;
31    let consumptionValue = "";
32
33    for (let i = 0; i < icons.length; i++){
34        if(hitSelectedElement){
35            icons[i].classList.add('text-linie');
36            icons[i].classList.remove('text-primary');
37        } else {
38            icons[i].classList.add('text-primary');
39            icons[i].classList.remove('text-linie');
40        }
41
42        if(slider.value - 1 === i){
43            hitSelectedElement = true;
44            consumptionValue = data[i];
45        }
46    }
47
48    document.getElementById(outputId).value = consumptionValue;
49}
50
51/**
52 *
53 * @param sliderID
54 * @param sizeInfoId
55 * @param outputId
56 */
57window.evhSelectGasValue = function (sliderID, sizeInfoId, outputId){
58    let slider = document.getElementById(sliderID);
59    let data = JSON.parse(slider.getAttribute('data-value'));
60
61    document.getElementById(sizeInfoId).innerText = data[slider.value]['text'];
62    document.getElementById(outputId).value = data[slider.value]['value'];
63}
64
65/**
66 *
67 * @param element
68 * @param privateID
69 * @param businessID
70 */
71window.evhSwitchCustomerTypeStyle = function (element, privateID, businessID, personSelectID, houseSelectID){
72    let privatLabel = document.getElementById(privateID);
73    let businessLabel = document.getElementById(businessID);
74    let personSelect = document.getElementById(personSelectID);
75    let houseSelect = document.getElementById(houseSelectID);
76
77    if($(element).prop('checked')){
78        privatLabel.classList.add('fw-semibold');
79        businessLabel.classList.remove('fw-semibold');
80
81        personSelect.classList.remove('d-none');
82        houseSelect.classList.remove('d-none');
83    } else {
84        privatLabel.classList.remove('fw-semibold');
85        businessLabel.classList.add('fw-semibold');
86
87        personSelect.classList.add('d-none');
88        houseSelect.classList.add('d-none');
89    }
90}
91
92/**
93 * Instant Feld-Validierung für den Preisrechner.
94 * Sendet einen Request an den Server, der das übergebene Feld mit dessen Wert im Preisrechner-Validator überprüft
95 * und das Ergebnis auf der Seite anzeigt.
96 *
97 * @param element html Element
98 * @param privateCustomer
99 * @param contractType
100 * @param stackElements array
101 * @param product
102 */
103window.evhPreisrechnerValidate = function (element, privateCustomer = '', contractType = '',  stackElements = {}, product = {}){
104    $.ajax({
105        url:'/preisrechner_validate',
106        type: "POST",
107        dataType: "json",
108        data:{
109            'field'             : element.name,
110            'value'             : element.value,
111            'privateCustomer'   : privateCustomer,
112            'contractType'      : contractType,
113            'stack'             : JSON.stringify(stackElements),
114            'product'           : JSON.stringify(product)
115        },
116        async: true,
117        success: function (data)
118        {
119            let feedbackElement = document.getElementById(element.name + 'Feedback');
120
121            //Benötigt für Radio Groups
122            let inputElements = document.getElementsByName(element.name);
123
124            inputElements.forEach(function (inputElement){
125                if(data !== ''){
126                    inputElement.classList.add('is-invalid');
127                    inputElement.classList.remove('is-valid');
128                } else {
129                    if(element.value !== ''){
130                        inputElement.classList.remove('is-invalid');
131                        inputElement.classList.add('is-valid');
132                    } else {
133                        // Bei Leeren Einträgen werden die Klassen gelöscht
134                        inputElement.classList.remove('is-invalid');
135                        inputElement.classList.remove('is-valid');
136                    }
137                }
138            });
139
140            if(data !== ''){
141                feedbackElement.classList.add('d-block');
142            } else {
143                feedbackElement.classList.remove('d-block');
144            }
145
146            feedbackElement.innerText = data;
147        }
148    });
149}
150
151/**
152 * Autovervollständigung für die Orte anhand Postleitzahl über die Lokationsdatenbank
153 *
154 * @param zipField
155 * @param outputSelect
156 */
157window.evhPreisrechnerAutocompleteCity = function (zipField, outputSelect){
158    if(zipField.value.length === 5){
159        $.ajax({
160            url:'/preisrechner_autocomplete_city',
161            type: "POST",
162            dataType: "json",
163            data:{
164                'zip' : zipField.value
165            },
166            async: true,
167            success: function (data)
168            {
169                outputSelect.innerHTML = '';
170
171                data.forEach(function (city){
172                    let option = document.createElement('option');
173                    option.value = city;
174                    option.text = city;
175                    outputSelect.appendChild(option);
176                });
177
178                if(data.length > 0){
179                    outputSelect.removeAttribute('disabled');
180                } else {
181                    outputSelect.setAttribute('disabled', 'disabled')
182                }
183            }
184        });
185    }
186}
187
188/**
189 * Autovervollständigung für die Straßen anhand des Ortes über die Lokationsdatenbank
190 *
191 * @param zipCode
192 * @param city
193 * @param output
194 */
195window.evhPreisrechnerAutocompleteStreet = function (zipCode, city, output){
196    $.ajax({
197        url:'/preisrechner_autocomplete_street',
198        type: "POST",
199        dataType: "json",
200        data:{
201            'zipCode' : zipCode,
202            'city' : city
203        },
204        async: true,
205        success: function (data)
206        {
207            document.getElementById(output).innerHTML = '';
208
209            data.forEach(function (street){
210                let option = document.createElement('option');
211                option.value = street;
212                option.text = street;
213                document.getElementById(output).appendChild(option);
214            });
215        }
216    });
217}
218
219/**
220 * Autovervollständigung für die Straßen anhand des Ortes über die Lokationsdatenbank
221 *
222 * @param zipCode
223 * @param city
224 * @param street
225 * @param output
226 */
227window.evhPreisrechnerAutocompleteHouseNumber = function (zipCode, city, street, output){
228    $.ajax({
229        url:'/preisrechner_autocomplete_houseNumber',
230        type: "POST",
231        dataType: "json",
232        data:{
233            'zipCode' : zipCode,
234            'city' : city,
235            'street' : street
236        },
237        async: true,
238        success: function (data)
239        {
240            document.getElementById(output).innerHTML = '';
241
242            data.forEach(function (street){
243                let option = document.createElement('option');
244                option.value = street;
245                option.text = street;
246                document.getElementById(output).appendChild(option);
247            });
248        }
249    });
250}
251
252/**
253 * Auswählen des Types der Bestellung. Neubezug / Lieferantenwechsel / Produktwechsel
254 * Stylen des endsprechenden Elements.
255 *
256 * @param selected
257 */
258window.evhPreisrechnerSelectType = function (selected){
259    //ID's aller möglichen auswahlelemente
260    const elements = ['newContract', 'changeSupplier', 'changeProduct'];
261
262    //Jedes der möglichen elemente zurücksetzen
263    elements.forEach(function (elementId) {
264        let element = document.getElementById(elementId);
265
266        element.classList.remove('bg-primary');
267        element.classList.remove('text-white');
268
269        element.children[0].classList.remove('text-white');
270    });
271
272    //Das aktuelle ausgewählte Element stylen
273    selected.classList.add('bg-primary');
274    selected.classList.add('text-white');
275
276    selected.children[0].classList.add('text-white');
277
278    //Setzen des hidden Input-Feldes, welches bei "weiter" zurück übergeben wird.
279    document.getElementById('contractType').value = selected.getAttribute('data-value');
280}
281
282/**
283 * Je nach ausgewählter anrede, ist es im Preisrechner möglich, eine unterschiedliche Anzahl von Personen anzugeben
284 *
285 * @param element
286 */
287window.evhPreisrechnerSalutationChange = function (element) {
288    let removePersonElement = document.getElementById('removePerson');
289    let addPersonElement = document.getElementById('addPerson');
290
291    let person2Element = document.getElementById('personTwo');
292    let person3Element = document.getElementById('personThree');
293
294    let maxPersons = element.options[element.selectedIndex].getAttribute('data-max-persons');
295
296    if(maxPersons === '1'){
297        evhDisablePerson(person2Element);
298        evhDisablePerson(person3Element);
299
300        removePersonElement.hidden = true;
301        addPersonElement.hidden = true;
302    } else if (maxPersons === '2'){
303        evhDisablePerson(person3Element);
304
305        addPersonElement.hidden = person2Element.hidden !== true;
306    } else {
307        addPersonElement.hidden = person3Element.hidden !== true;
308    }
309}
310
311/**
312 * Einlösen eines Gutscheincodes und Ergebnissdarstellung im Browser
313 *
314 * @param element
315 * @param resultDiv
316 */
317window.evhTarifrechnerRedeemCoupon = function (element, resultDiv){
318    let code = element.value;
319
320    $.ajax({
321        url:'/tarifrechner_redeem_coupon',
322        type: "POST",
323        dataType: "json",
324        data:{
325            'code' : code,
326        },
327        async: true,
328        success: function (data)
329        {
330            if(data !== false){
331                resultDiv.innerHTML = '';
332
333                if(typeof data.note !== 'undefined'){
334                    resultDiv.innerHTML += '<p class="text-primary">' + data.note + '</p>';
335                }
336
337                if(typeof data.conditions !== 'undefined'){
338                    resultDiv.innerHTML += '<a href="' + data.conditions.upload.systemurl + '" download class="mb-5">' +
339                    '<i class="icon-evh-pdf me-2"></i> ' + data.conditions.title +
340                    '</a>';
341                }
342            } else {
343                resultDiv.innerHTML = '<p></p>';
344            }
345        }
346    });
347}
348
349/**
350 * Eine weitere Person zum Preisrechnerformular hinzufügen
351 */
352window.evhAddPerson = function (){
353    let removePersonElement = document.getElementById('removePerson');
354    let addPersonElement = document.getElementById('addPerson');
355
356    let person2Element = document.getElementById('personTwo');
357    let person3Element = document.getElementById('personThree');
358
359    let salutation = document.getElementById('salutation');
360    let maxPersons = salutation.options[salutation.selectedIndex].getAttribute('data-max-persons');
361
362    if(person2Element.hidden === true && maxPersons >= 2){
363        evhEnablePerson(person2Element);
364
365        removePersonElement.hidden = false;
366    } else if (person3Element.hidden === true && maxPersons >= 3) {
367        evhEnablePerson(person3Element);
368
369        removePersonElement.hidden = false;
370    }
371
372    if(maxPersons === '2' && person2Element.hidden === false){
373        addPersonElement.hidden = true;
374    } else if(maxPersons === '3' && person3Element.hidden === false){
375        addPersonElement.hidden = true;
376    }
377}
378
379/**
380 * Eine Person aus dem Preisrechnerformular entfernen
381 */
382window.evhRemovePerson = function (){
383    let removePersonElement = document.getElementById('removePerson');
384    let addPersonElement = document.getElementById('addPerson');
385
386    let person2Element = document.getElementById('personTwo');
387    let person3Element = document.getElementById('personThree');
388
389    if(person3Element.hidden === false){
390        evhDisablePerson(person3Element);
391    } else if (person2Element.hidden === false) {
392        evhDisablePerson(person2Element)
393    }
394
395    if(person2Element.hidden === true){
396        removePersonElement.hidden = true;
397    }
398
399    addPersonElement.hidden = false;
400}
401
402/**
403 * EVH Tarif Abmeldung
404 */
405/**
406 * Instant Feld-Validierung
407 * Sendet einen Request an den Server, der das übergebene Feld mit dessen Wert im EVH Tarif Abmeldung-Validator überprüft
408 * und das Ergebnis auf der Seite anzeigt.
409 *
410 * @param element html Element
411 * @param stackElements array
412 */
413window.evhTerminateValidate = function (element, stackElements = {}){
414    $.ajax({
415        url:'/evh_terminate_validate',
416        type: "POST",
417        dataType: "json",
418        data:{
419            'field'             : element.name,
420            'value'             : element.value,
421            'stack'             : JSON.stringify(stackElements)
422        },
423        async: true,
424        success: function (data)
425        {
426            let feedbackElement = document.getElementById(element.name + 'Feedback');
427
428            //Benötigt für Radio Groups
429            let inputElements = document.getElementsByName(element.name);
430
431            inputElements.forEach(function (inputElement){
432                if(data !== ''){
433                    inputElement.classList.add('is-invalid');
434                    inputElement.classList.remove('is-valid');
435                } else {
436                    inputElement.classList.remove('is-invalid');
437                    inputElement.classList.add('is-valid');
438                }
439            });
440
441            if(data !== ''){
442                feedbackElement.classList.add('d-block');
443            } else {
444                feedbackElement.classList.remove('d-block');
445            }
446
447            feedbackElement.innerText = data;
448        }
449    });
450}
451// Umschalten der Felder für Privat und Geschäftskunde
452window.evhTerminateSwitchBusiness = function (selectElement, customBusinessContainer){
453    if(selectElement.value === 'privat') {
454        document.getElementById(customBusinessContainer).style.display = 'none';
455        document.getElementById('head_business').style.display = 'none';
456        document.getElementById('head_private').style.display = 'block';
457        document.getElementById("terminate_company").required = false;
458    } else {
459        document.getElementById(customBusinessContainer).style.display = 'block';
460        document.getElementById('head_business').style.display = 'block';
461        document.getElementById('head_private').style.display = 'none';
462        document.getElementById("terminate_company").required = true;
463    }
464}
465
466// Umschalter für gewählte Produkt-Art (Strom, Gas, anderes)
467window.evhTerminateSwitchProduct = function (selectElement){
468    document.getElementById("terminate_productTypeStrom").required = false;
469    document.getElementById("terminate_productTypeGas").required = false;
470    document.getElementById("terminate_productTypeAdditional").required = false;
471    document.getElementById("terminate_meterNumber").required = true;
472    document.getElementById('terminate_meterNumberContainer').style.display = 'block';
473    document.getElementById('terminate_meterReadingContainer').style.display = 'block';
474    if(selectElement.value === 'strom') {
475        document.getElementById('terminate_productTypeStromContainer').style.display = 'block';
476        document.getElementById('terminate_productTypeGasContainer').style.display = 'none';
477        document.getElementById('terminate_productTypeAdditionalContainer').style.display = 'none';
478        evhTerminateSwitchOtherProduct(document.getElementById('terminate_productTypeStrom'));
479        document.getElementById("terminate_productTypeStrom").required = true;
480        document.getElementById("terminate_productTypeGas").value = '';
481        document.getElementById("terminate_productTypeStrom").focus();
482    } else if (selectElement.value === 'gas') {
483        document.getElementById('terminate_productTypeStromContainer').style.display = 'none';
484        document.getElementById('terminate_productTypeGasContainer').style.display = 'block';
485        document.getElementById('terminate_productTypeAdditionalContainer').style.display = 'none';
486        evhTerminateSwitchOtherProduct(document.getElementById('terminate_productTypeGas'));
487        document.getElementById("terminate_productTypeGas").required = true;
488        document.getElementById("terminate_productTypeStrom").value = '';
489        document.getElementById("terminate_productTypeGas").focus();
490    } else if (selectElement.value === 'other') {
491        document.getElementById('terminate_productTypeStromContainer').style.display = 'none';
492        document.getElementById('terminate_productTypeGasContainer').style.display = 'none';
493        document.getElementById('terminate_meterNumberContainer').style.display = 'none';
494        document.getElementById('terminate_meterReadingContainer').style.display = 'none';
495        document.getElementById("terminate_meterNumber").required = false;
496        document.getElementById('terminate_productTypeAdditionalContainer').style.display = 'block';
497        document.getElementById("terminate_productTypeAdditional").required = true;
498        document.getElementById("terminate_productTypeStrom").value = '';
499        document.getElementById("terminate_productTypeGas").value = '';
500        document.getElementById("terminate_productTypeAdditional").focus();
501    } else {
502        document.getElementById('terminate_productTypeStromContainer').style.display = 'none';
503        document.getElementById('terminate_productTypeGasContainer').style.display = 'none';
504        document.getElementById('terminate_productTypeAdditionalContainer').style.display = 'none';
505        document.getElementById("terminate_productTypeStrom").value = '';
506        document.getElementById("terminate_productTypeGas").value = '';
507    }
508}
509// Umschalter für sonstiges Produkt bei Strom, Gas
510window.evhTerminateSwitchOtherProduct = function (selectElement){
511    if(selectElement.value === 'other') {
512        document.getElementById('terminate_productTypeAdditionalContainer').style.display = 'block';
513        document.getElementById("terminate_productTypeAdditional").required = true;
514        document.getElementById("terminate_productTypeAdditional").focus();
515    } else {
516        document.getElementById('terminate_productTypeAdditionalContainer').style.display = 'none';
517        document.getElementById("terminate_productTypeAdditional").required = false;
518        document.getElementById("terminate_productTypeAdditional").value = '';
519        document.getElementById("terminate_productTypeAdditional").classList.remove('is-valid');
520    }
521}
522// Feld umschalten "Datum der Kündigung" bei "Zeitpunkt, zu dem der Vertrag gekündigt werden soll"
523window.evhTerminateSwitchDateChoice = function (selectElement) {
524    if (selectElement.value === 'custom') {
525        document.getElementById('terminate_terminationDateContainer').style.display = 'block';
526        document.getElementById("terminate_terminationDate").required = true;
527        document.getElementById("terminate_terminationDate").focus();
528    } else {
529        document.getElementById('terminate_terminationDateContainer').style.display = 'none';
530        document.getElementById("terminate_terminationDate").required = false;
531        document.getElementById("terminate_terminationDate").value = '';
532        document.getElementById("terminate_terminationDate").classList.remove('is-valid');
533    }
534}
535// Feld "Zeitpunkt, zu dem der Vertrag gekündigt werden soll" aktivieren und default Option entfernen
536window.evhTerminateActivateTerminationDateChoice = function () {
537    let d = document.getElementById("terminationDateChoiceDisabledOption");
538    if (d) {
539        document.getElementById("terminate_terminationDateChoice").disabled = false;
540        d.remove();
541    }
542}
543// Wechselt das min Datum bei "Zeitraum selbst wählen" je nach Art der Kündigung
544window.evhTerminateSwitchMinDate = function (terminate_terminationChoice) {
545    let dateElement = document.getElementById('terminate_terminationDate');
546
547    if(terminate_terminationChoice === 'extraordinary'){
548        dateElement.setAttribute('min', dateElement.getAttribute('data-min-extraordinary'));
549    } else {
550        dateElement.setAttribute('min', dateElement.getAttribute('data-min-ordinary'));
551    }
552}
553// Umschalten "Grund der Kündigung" je nach Art der Kündigung
554window.evhTerminateSwitchReasonChoice = function (selectElement) {
555
556    if (selectElement === 'ordinary') {
557        document.getElementById('terminate_ordinaryTerminationReasonContainer').style.display = 'block';
558        document.getElementById("terminate_ordinaryTerminationReason").focus();
559        document.getElementById("terminate_ordinaryTerminationReason").required = true;
560        document.getElementById('terminate_extraordinaryTerminationReasonContainer').style.display = 'none';
561        document.getElementById("terminate_extraordinaryTerminationReason").required = false;
562        document.getElementById("terminate_extraordinaryTerminationReason").value = '';
563        document.getElementById("terminate_extraordinaryTerminationReason").classList.remove('is-valid');
564    }
565    if (selectElement === 'extraordinary') {
566        document.getElementById('terminate_extraordinaryTerminationReasonContainer').style.display = 'block';
567        document.getElementById("terminate_extraordinaryTerminationReason").focus();
568        document.getElementById("terminate_extraordinaryTerminationReason").required = true;
569        document.getElementById('terminate_ordinaryTerminationReasonContainer').style.display = 'none';
570        document.getElementById("terminate_ordinaryTerminationReason").required = false;
571        document.getElementById("terminate_ordinaryTerminationReason").value = '';
572        document.getElementById("terminate_ordinaryTerminationReason").classList.remove('is-valid');
573        document.getElementById('terminate_terminationOtherReasonContainer').style.display = 'none';
574        document.getElementById("terminate_terminationOtherReason").value = '';
575        document.getElementById("terminate_terminationOtherReason").classList.remove('is-valid');
576    }
577}
578
579// Textfeld für Angabe des Kündigungsgrundes, bei Auswahl ordentliche Kündigung sonstige Gründe
580window.evhTerminateSwitchReasonInputChoice = function () {
581    let selectElement;
582    selectElement = document.getElementById('terminate_ordinaryTerminationReason').value;
583    if (selectElement === 'Sonstige Gründe') {
584        document.getElementById('terminate_terminationOtherReasonContainer').style.display = 'block';
585    }else {
586        document.getElementById('terminate_terminationOtherReasonContainer').style.display = 'none';
587        document.getElementById('terminate_terminationOtherReason').value = '';
588        document.getElementById('terminate_terminationOtherReason').classList.remove('is-valid');
589    }
590}
591/**
592 * END - EVH Tarif Abmeldung
593 */
594
595/**
596 * Setzt hidden für das übergebene Element auf true und disabled alle input Elemente unterhalb des Elements
597 *
598 * @param divElement
599 */
600window.evhDisablePerson = function (divElement){
601    divElement.hidden = true;
602
603    let inputs = divElement.getElementsByTagName('input');
604
605    Array.from(inputs).forEach(function (element){
606        element.value = '';
607        element.required = false;
608    })
609}
610
611/**
612 * Setzt hidden für das übergebene Element auf false und enabled alle input Elemente unterhalb des Elements
613 *
614 * @param divElement
615 */
616window.evhEnablePerson = function (divElement){
617    divElement.hidden = false;
618
619    let inputs = divElement.getElementsByTagName('input');
620
621    Array.from(inputs).forEach(function (element){
622        element.required = true;
623    })
624}
625
626window.evhPreisrechnerSwitchIndustry = function (selectElement, customIndustryContainer){
627    if(selectElement.value === 'Sonstiges'){
628        customIndustryContainer.hidden = false;
629        customIndustryContainer.getElementsByTagName('input')[0].value = '';
630    } else {
631        customIndustryContainer.hidden = true;
632        customIndustryContainer.getElementsByTagName('input')[0].value = '';
633    }
634}
635
636/**
637 * Ändert die frühesten und spätesten Lieferbegine, je nachdem ob eine Malo eingegeben wurde oder nicht.
638 *
639 * @param inputElement
640 * @param dateElementID
641 */
642window.evhChangeMinMaxDatesForMalo = function (inputElement, dateElementID){
643    let dateElement = document.getElementById(dateElementID);
644
645    dateElement.value = '';
646
647    if(inputElement.value.length === 11){
648        dateElement.setAttribute('min', dateElement.getAttribute('data-min-malo'));
649        dateElement.setAttribute('max', dateElement.getAttribute('data-max-malo'));
650    } else {
651        dateElement.setAttribute('min', dateElement.getAttribute('data-min-noMalo'));
652        dateElement.setAttribute('max', dateElement.getAttribute('data-max-noMalo'));
653    }
654}
655
656/**
657 * Einblenden der BIC, wenn eine ausländische IBAN eingegeben wird
658 *
659 * @param inputElement
660 */
661window.evhToggleBic = function (inputElement){
662    let bic = document.getElementById('bic');
663    let bicContainer = document.getElementById('bicContainer');
664
665    if(inputElement.value.length >= 2){
666        if(inputElement.value.toUpperCase().startsWith('DE')){
667            bic.removeAttribute('required');
668            bic.value = '';
669            bicContainer.hidden = true;
670        } else {
671            bic.setAttribute('required', 'required');
672            bicContainer.hidden = false;
673        }
674    } else {
675        bic.removeAttribute('required');
676        bic.value = '';
677        bicContainer.hidden = true;
678    }
679}
680
681/**
682 * Setzen des Lieferbeginns, anhand des Datums der Kündigung beim aktuellen Anbieter
683 *
684 * @param element
685 */
686window.evhChangeDeliveryDateByTerminationDate = function (element){
687   let deliveryDate = document.getElementById('deliveryDate');
688
689    if(element.value >= deliveryDate.getAttribute('min')){
690        let date = new Date(element.valueAsDate.setDate(element.valueAsDate.getDate() + 1));
691        date = date.toLocaleDateString('de-DE', {year: 'numeric', month: '2-digit', day: '2-digit', });
692        date = date.split('.').reverse().join('-');
693        deliveryDate.value = '';
694        deliveryDate.setAttribute('min', date);
695    } else {
696        evhChangeMinMaxDatesForMalo(document.getElementById('meterMalo'), 'deliveryDate');
697    }
698}
699
700/**
701 * Setzen des Lieferbeginns, des Statuses Kündigung beim aktuellen Anbieter
702 *
703 * @param element
704 */
705window.evhChangeDeliveryDateByTerminationChoice = function (element){
706   let deliveryDate = document.getElementById('deliveryDate');
707
708    deliveryDate.setAttribute('data-min-malo', element.getAttribute('data-min-malo'));
709    deliveryDate.setAttribute('data-max-malo', element.getAttribute('data-max-malo'));
710    deliveryDate.setAttribute('data-min-noMalo', element.getAttribute('data-min-noMalo'));
711    deliveryDate.setAttribute('data-max-noMalo', element.getAttribute('data-max-noMalo'));
712
713    evhChangeMinMaxDatesForMalo(document.getElementById('meterMalo'), 'deliveryDate');
714    evhChangeDeliveryDateByTerminationDate(document.getElementById('currentSupplierTerminationDate'));
715}

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.