PageSourceSearch

https://www.vhs-zwickau.de/wp-content/kuferweb/webbasys/functions.js?ver=6.8.8

js vhs-zwickau.de collected 2026-10-04 19:00:02 UTC 33,469 bytes, 940 lines download raw bytes

1if (typeof KuferWEB == 'undefined') KuferWEB = {};
2if (typeof KuferWEB.Utils == 'undefined') KuferWEB.Utils = {};
3if (typeof KuferWEB.Settings == 'undefined') KuferWEB.Settings = {};
4if (typeof KuferWEB.OnAnmeldungInit == 'undefined') KuferWEB.OnAnmeldungInit = [];
5
6if (typeof KuferWEB.Utils.Filter == 'undefined') KuferWEB.Utils.Filter = {};
7if (typeof KuferWEB.Utils.Completion == 'undefined') KuferWEB.Utils.Completion = {};
8
9
10KuferWEB.Utils.Filter.IsDate = function (pValue) {
11  var dateAry = pValue.split('.');
12
13  // Erwartet Tag und Monat zweistellig
14  if (!pValue.match(/^[0-9]{2}\.[0-9]{2}\.[0-9]{4}$/)) {
15    return false;
16  }
17
18  var day = parseInt(dateAry[0], 10);
19  var month = parseInt(dateAry[1], 10);
20  var year = parseInt(dateAry[2], 10);
21
22  if (year < 1900) {
23    return false;
24  }
25
26  // Überprüfung auf Über- und Unterläufe: 31.04. wird im Dateobj zu 01.05.
27  var dateObject = new Date(year, month - 1, day);
28  if (year != dateObject.getFullYear() ||
29    month != (dateObject.getMonth() + 1) ||
30    day != dateObject.getDate()) {
31    return false;
32  }
33
34  return true;
35};
36
37KuferWEB.Utils.parseDateFormatDDMMYYYY = function (dateStr) {
38  var parts = dateStr.split(".");
39  return new Date(parseInt(parts[2], 10), parseInt(parts[1], 10) - 1, parseInt(parts[0], 10));
40};
41
42KuferWEB.Utils.formatDateDDMMYYYY = function (date) {
43    day = date.getDate();
44    month = date.getMonth() + 1;
45    if ((String(day)).length == 1) {
46      day='0'+day;
47    }
48    if ((String(month)).length == 1) {
49      month='0'+month;
50    }
51
52    return day + '.' + month + '.' + date.getFullYear();
53};
54
55function setRowID(pRow, pID) {
56  // Diese Funktion sorgt dafür, dass die Spalte, über der der Mauszeiger gerade ist, gehighlightet wird
57  var theCells = null;
58  var c = null;
59  var CellCnt = 0;
60  var domDetect = false;
61
62  theCells = pRow.cells;
63  CellCnt = theCells.length;
64
65  // Abfrage, ob ein DOM-Fähiger Browser verwendet wird
66  if ((typeof (window.opera) == 'undefined') && (typeof (theCells[0].getAttribute) != 'undefined'))
67    domDetect = true;
68  else
69    domDetect = false;
70
71  for (c = 0; c < CellCnt; c++) {
72    if (domDetect) theCells[c].setAttribute('id', pID, 0);
73    else theCells[c].style.backgroundColor = pID;
74  }
75}
76
77function setRowClass(pRow, pClass) {
78  pRow.setAttribute('class', pClass, "false");
79}
80
81function getCalendarFor(formname, elementname, urlstring) {
82  if (urlstring == undefined) {
83    urlstring = '../calendar/calendar.php';
84  }
85  else {
86    urlstring += 'calendar/calendar.php';
87  }
88  window.open(urlstring + '?formname=' + formname + '&elementname=' + elementname, '',
89    'height=220, width=280, top=300, left=300, toolbar=no, minimize=no, status=no, memubar=no, location=no, scrollbars=no');
90}
91
92function printpage() {
93  window.print();
94}
95
96
97function decryptMail(pValue)
98/* Entschlüsselt eMail-Adressen */
99{
100  var i, chars, decrypted = "";
101  chars = pValue.split(",");
102  for (i = 0; i < chars.length; i++) {
103    decrypted += String.fromCharCode(chars[i] - 13);
104  }
105  return decrypted;
106}
107
108function encryptMail(pValue)
109/* Verschlüsselt eMail-Adressen */
110{
111  var i;
112  var encrpyted = "";
113  if (pValue != "") {
114    for (i = 0; i < pValue.length; i++) {
115      encrpyted += (pValue.charCodeAt(i) + 13) + ",";
116    }
117    encrpyted = encrpyted.substring(0, encrpyted.length - 1);
118  }
119  return encrpyted;
120}
121
122function link2CryptedMail(pValue)
123/* Ermöglicht "mailto" Links mit verschlüsselten eMail-Adressen */
124{
125  location.href = 'mailto:' + decryptMail(pValue);
126}
127
128function decryptMailByID(pID)
129/* Entschlüsselt den Inhalt aller Tags mit id = pID */
130{
131  var s;
132  s = document.getElementById(pID).firstChild.nodeValue;
133  document.getElementById(pID).firstChild.nodeValue = decryptMail(s);
134}
135
136if (typeof (document.getElementsByClassName) == 'undefined') {
137  document.getElementsByClassName = function (cl) {
138    var retnode = [];
139    var myclass = new RegExp('^' + cl + '$');
140    var elem = this.getElementsByTagName('*');
141    for (var i = 0; i < elem.length; i++) {
142      var classes = elem[i].className;
143      if (myclass.test(classes)) retnode.push(elem[i]);
144    }
145    return retnode;
146  };
147}
148
149
150if (typeof (jQuery) != 'undefined') {
151
152  // Kategorien per Auswahlliste: Formular sofort absenden
153  jQuery('select.katselect').change(
154    function () {
155      $($(this).parents('form')).submit();
156    });
157  /*
158   * jQuery für Placeholder bei den Input-Feldern
159   */
160
161  //Fügt'placeholder'-Objekt zu dem jQuery .support object. 
162  //This adds 'placeholder' to the items listed in the jQuery .support object. 
163  jQuery(function () {
164    jQuery.support.placeholder = false;
165    test = document.createElement('input');
166    if ('placeholder' in test) jQuery.support.placeholder = true;
167  });
168  // This adds placeholder support to browsers that wouldn't otherwise support it. 
169  jQuery(function ($) {
170    if (!$.support.placeholder) {
171      var active = document.activeElement;
172      $(':text').focus(function () {
173        var $this = $(this);
174        if (($this.prop('placeholder') != undefined && $this.prop('placeholder') != '') && $this.val() == $this.prop('placeholder')) {
175          $this.val('').removeClass('hasPlaceholder');
176        }
177      }).blur(function () {
178        var $this = $(this);
179        if (($this.prop('placeholder') != undefined && $this.prop('placeholder') != '') && ($this.val() == '' || $this.val() == $this.prop('placeholder'))) {
180          $this.val($this.prop('placeholder')).addClass('hasPlaceholder');
181        }
182      });
183      $(':text').blur();
184      $(active).focus();
185      $('form').submit(function () {
186        $(':text.hasPlaceholder').each(function (index, item) {
187          $item = jQuery(item);
188          if ($item.val() == $item.prop('placeholder'))
189            $item.val('');
190        });
191      });
192    }
193  });
194  jQuery(function ($) {
195    //verstecken beim Seitenaufruf
196    if ($('#tedit_bankart_alt').is(':checked')) {
197      $("#sepa, .sepa").hide();
198      $("#tedit_ibanid").val("");
199      $("#tedit_bicid").val("");
200      $("#kontonummer_blz, .kontonummer_blz").show();
201    } else if ($('#tedit_bankart_sepa').is(':checked')) {
202      $("#kontonummer_blz, .kontonummer_blz").hide();
203      $("#tedit_kontoid").val("");
204      $("#tedit_blzid").val("");
205      $("#sepa, .sepa").show();
206    }
207
208    $("[name='tedit_bankart']").change(function () {
209      if (this.value == "sepa") {
210        $("#kontonummer_blz, .kontonummer_blz").hide();
211        $("#tedit_kontoid").val("");
212        $("#tedit_blzid").val("");
213        $("#sepa, .sepa").fadeIn();
214      } else {
215        $("#sepa, .sepa").hide();
216        $("#tedit_ibanid").val("");
217        $("#tedit_bicid").val("");
218        $("#kontonummer_blz, .kontonummer_blz").fadeIn();
219      }
220    });
221  });
222
223  //Umsetzung der "Mehr-Funktion" bei typischen Kategorientexten
224  //im dynamischen Mehr-Ebenen-Layout
225  jQuery(function ($) {
226    katTextHide();
227  });
228
229  KuferWEB.Utils.AddHandlerOnce = function(handlerName, elementsName, handler) {
230    if(document.getElementsByName(elementsName).length > 0) {
231      let elements = document.getElementsByName(elementsName);
232      elements.forEach(elem => {
233        if(elem.getAttribute('data-has-'+handlerName) !== 'true') {
234          elem.setAttribute('data-has-'+handlerName, 'true');
235          elem.addEventListener('change', handler, false);
236        }
237      });
238    } 
239  }
240
241  KuferWEB.Utils.Completion.InitStrassenAutocompletion = function() {
242    KuferWEB.Utils.AddHandlerOnce('strassen-handler', 'tedit_nurplz', KuferWEB.Utils.Completion.InitStrassenAutocompletion);
243    KuferWEB.Utils.AddHandlerOnce('strassen-handler', 'tedit_geschlecht', KuferWEB.Utils.Completion.InitStrassenAutocompletion);
244
245    const plz = document.getElementsByName('tedit_nurplz').length > 0 ? document.getElementsByName('tedit_nurplz')[0].value : '';
246    const dataSrcUrl = kw.wbBasePath + 'index.php?ajaxAction=GetStrassenSuggestions&plz=' + plz;
247    let threshold = 2;//ab dem wievielten Buchstaben wird die Suche angeworfen
248    if (typeof KuferWEB.Utils.Completion.str_threshold !== "undefined" && parseInt(KuferWEB.Utils.Completion.str_threshold, 10) > 0) {
249      threshold = parseInt(KuferWEB.Utils.Completion.str_threshold);
250    }
251    let maxResults = 5;
252    if (typeof KuferWEB.Utils.Completion.str_maxResults !== "undefined" && parseInt(KuferWEB.Utils.Completion.str_maxResults, 10) > 0) {
253      maxResults = parseInt(KuferWEB.Utils.Completion.str_maxResults);
254    }
255    KuferWEB.Utils.Completion.InitAutocompletion("tedit_nurstrasse_ajaxid", dataSrcUrl, threshold, maxResults);
256  };
257  KuferWEB.Utils.Completion.myCompletions = {};
258  KuferWEB.Utils.Completion.InitAutocompletion = function(inputFieldId, dataSrcUrl, threshold = 2, maxResults = 5) {
259      const elem = document.getElementById(inputFieldId);
260      if (!elem) {
261        return;
262      }
263    const myCompletions = KuferWEB.Utils.Completion.myCompletions;
264    if (typeof myCompletions[inputFieldId] !== 'undefined') {//nicht mehrere Vervollstaendigungen, wenn PLZ geaendert
265      myCompletions[inputFieldId].unInit();
266    }
267    const inputFieldSelector = '#'+inputFieldId;
268    const autoCompleteConfig = {
269      data: {
270        src: async () => {
271          const source = await fetch(dataSrcUrl, {
272                method: 'POST',
273                headers: {'X-Requested-With': 'XMLHttpRequest'}
274              }
275          );
276          return await source.json();
277        },
278        cache: true
279      },
280      selector: inputFieldSelector,
281      threshold: threshold,
282      searchEngine: "strict",
283      resultsList: {
284        element: (list, data) => {
285          console.log(data.results.length);
286          if (!data.results.length) {
287            const result = document.createElement("li");
288            result.setAttribute("class", "no_result autoComplete_result");
289            result.setAttribute("tabindex", "1");
290            result.innerHTML = `<span>Keine Ergebnisse bei "${data.query}"</span>`;
291            list.prepend(result);
292          }
293        },
294        noResults: true,
295        maxResults: maxResults,
296        tabSelect: true
297      },
298      resultItem: {
299        highlight: true,
300      },
301      events: {
302        input: {
303          selection: (event) => {
304            let element = document.getElementById(inputFieldId);
305            element.value = event.detail.selection.value;
306            element.dispatchEvent(new Event('change'));
307          }
308        }
309      }
310    };
311
312    if (typeof KuferWEB.Utils.Completion.fromBeginning === "boolean" && KuferWEB.Utils.Completion.fromBeginning) {
313      autoCompleteConfig.data.filter = (list) => {
314        const results = list.filter((item) => {
315          const inputValue = autoCompleteJS.input.value.toLowerCase();
316          const itemValue = item.value.toLowerCase();
317
318          if (itemValue.startsWith(inputValue)) {//Uebereinstimmung ab Wortbeginn
319            return item.value;
320          }
321        });
322
323        return results;
324      };
325    }
326    const autoCompleteJS = new autoComplete(autoCompleteConfig);
327    myCompletions[inputFieldId] = autoCompleteJS;
328  };
329
330  // Holt sich per Ajax den Ort, wenn eine Postleitzahl eingetragen wurde.
331  // Funktioniert nur bei getrennten PLZ und Ort, nicht beim Feld PLZ und Ort
332  jQuery(function ($) {
333    var pfadZuIndex = '';
334
335    /**
336     * Bei Typo3 muss der Pfad zum /webbasys-Ordner überschrieben werden.
337     * 
338     * Wird derzeit nur für den Change-Event der Postleitzahl verwendet, könnte aber später auch verallgemeinert werden.
339     * 
340     * @param string pString Pfad zum webbasysordner inclusive webbasys/ (Abschließendes Slash nicht vergessen!)
341     */
342    window.setPfadZuIndex = function (pString) {
343      pfadZuIndex = pString;
344    };
345
346    if (document.getElementById('tedit_nurstrasse_ajaxid') !== null
347      && document.getElementsByName('tedit_nurplz').length > 0) {
348      KuferWEB.OnAnmeldungInit.push(KuferWEB.Utils.Completion.InitStrassenAutocompletion);
349    }
350
351    if ($('#tedit_nurplz_ajaxid, #bedit_abw_nurplz_ajaxid, #ledit_nurplz_ajaxid, #teditma_nurplz_ajaxid, #teditmehr_nurplz_ajaxid, #teditpa_nurplz_ajaxid').length > 0) {
352
353      $(document).on('change', '#tedit_nurplz_ajaxid, #bedit_abw_nurplz_ajaxid, #ledit_nurplz_ajaxid, #teditma_nurplz_ajaxid, #teditmehr_nurplz_ajaxid, #teditpa_nurplz_ajaxid', function () {
354        var $inputOrt;
355        var $this = $(this);
356        if ($this.attr('id') === 'tedit_nurplz_ajaxid') {
357          var name = $this.attr('name');
358          if (name == 'teditmehr_nurplz') {
359            $inputOrt = $('input[name="teditmehr_nurort"]');
360          } else {
361            $inputOrt = $('#tedit_nurortid');
362          }
363        }
364        else if ($this.attr('id') === 'ledit_nurplz_ajaxid') {
365          $inputOrt = $('#ledit_nurortid');
366        }
367        else if ($this.attr('id') === 'teditma_nurplz_ajaxid') {
368          $inputOrt = $('#teditma_nurortid');
369        }
370        else if ($this.attr('id') === 'teditmehr_nurplz_ajaxid') {
371          $inputOrt = $('#teditmehr_nurortid');
372        }
373        else if ($this.attr('id') === 'teditpa_nurplz_ajaxid') {
374          $inputOrt = $('#teditpa_nurortid');
375        }
376        else {
377          $inputOrt = $('#bedit_abw_nurortid');
378        }
379        // Geht von deutschen oder österreichischen Postleitzahlen aus. Falls die PLZ komplett eingetragen wurde, 
380        // wird eine Ajax-Abfrage, welche den Ort lädt abgesendet.
381        if ($this.val().length === 5 || $this.val().length === 4) {
382          $inputOrt.attr('disabled', true).addClass('disabled');
383          pfad = (typeof kw !== "undefined" && kw.wbBasePath) ? kw.wbBasePath : pfadZuIndex;
384          jQuery.ajax({
385            type: "POST",
386            dataType: 'json',
387            url: pfad + 'index.php?ajaxAction=GetOrtByPlz',
388            data: {
389              plz: $(this).val()
390            },
391            success: function (pData) {
392              var $ort = pData.ort;
393              if ($ort.length > 0) {
394                $inputOrt.val($ort);
395              }
396              $inputOrt.attr('disabled', false).removeClass('disabled');
397              $inputOrt.trigger('change'); //z.B. für Knockout
398            },
399            error: function () {
400              $inputOrt.attr('disabled', false).removeClass('disabled');
401            }
402          });
403        }
404      });
405    }
406  });
407
408} //end jQuery defined
409
410function katTextHide() { //ausgelagert, um es auch bei Mobillayouts nutzen zu können
411  //entsprechende Beschreibungen verstecken und "... mehr" einbauen
412  var $toBeHidden = jQuery('.kw_katdesc2');
413  //nur wenn auch was versteckt werden muss, ist der ganze Aufwand nötig
414  if ($toBeHidden.length > 0) {
415    var clickauf = ' <span class="kw_clickauf"> ... <span class="kw_katue_moreInfo"> &raquo; mehr</span></span>';
416    //erstes verstecken
417    $toBeHidden.each(function (index, item) {
418      var $item = jQuery(item);
419      $item.hide();
420      var $parent = $item.parents('.kw_catdescContainer');
421      if ($parent.find('span.kw_clickauf').length === 0) {
422        $parent.append(clickauf);
423      }
424    });
425    //aufklappen
426    jQuery(document).on('click', 'span.kw_clickauf', function (e) {
427      var $parent = jQuery(this).parents('.kw_catdescContainer');
428      $parent.find('.kw_katdesc2').show();
429      $parent.find('.kw_clickauf').remove();
430      $parent.append('<span class="kw_clickzu kw_katue_lessInfo"> &laquo; weniger </span>');
431    });
432    //weiteres verstecken
433    jQuery(document).on('click', 'span.kw_clickzu', function (e) {
434      var $parent = jQuery(this).parents('.kw_catdescContainer');
435      $parent.find('.kw_katdesc2').hide();
436      $parent.find('.kw_clickzu').remove();
437      $parent.append(clickauf);
438    });
439  }
440}
441
442if (typeof (jQuery) != 'undefined') { 
443	jQuery(function ($) {
444	  // Honeypot und Meldung verstecken
445	  $("#honeypot-error-msg").hide();
446
447	  // Verhindern, dass "weiter" geklickt wird, wenn Honeypot aktiv ist
448	  $("#kw-anm-form, #wbloginregisterform").submit(function () {
449		if ($("#honeypot").length > 0 && $("#honeypot").val() != "") {
450		  $("#honeypot-error-msg").show();
451		  return false;
452		}
453	  });
454
455	  addTogglePasswordButton();
456
457	});
458
459	// jQuery Chosen Plugin: Möglichkeit in Select-Feldern zu suchen 
460	if (jQuery.fn.chosen) {
461	  jQuery(function ($) {
462		$(".chosen-select option").each(function () {
463		  $(this).html($(this).html().replace(/&nbsp;/g, ''));
464		});
465		$(".chosen-select").chosen();
466	  });
467	}
468}
469
470function addTogglePasswordButton() {
471  let results = document.getElementsByClassName('toggle-pw-visibility');
472  for(let input of results) {
473    input.style.setProperty('display', 'inline');
474    let html = '<i class="fa fa-eye" id="togglepw-'+input.id+'" data-input-id="'+input.id+'" style="margin-left: -30px; cursor: pointer; display: inline;"></i>';
475    input.parentElement.innerHTML += html;
476    
477    let icon = document.getElementById('togglepw-'+input.id);
478    icon.addEventListener('click', function() {
479      let pwInput = document.getElementById(icon.dataset.inputId);
480      const type = pwInput.getAttribute('type') === 'password' ? 'text' : 'password';
481      pwInput.setAttribute('type', type);
482      // toggle the eye slash icon
483      this.classList.toggle('fa-eye-slash')
484    });
485  }
486}
487
488// Einteilung des IBAN-Feldes in Vierergruppen:
489
490//Leerzeichen nach 4 Zeichen einfügen
491function addSpacesIBAN(event) {
492  //Bei manchen Smartphones gibt es diverse Probleme, weshalb die Funktion jetzt bei allen touchfähigen Geräten deaktiviert wird.
493  //Beispielsweise wird das DE02 bei der Eingabe auf einmal zu DEDE02. Außerdem kann man Zeichen nicht mehr zuverlässig löschen,
494  //wenn man über ein Leerzeichen hinweg löschen möchte.
495  if (!isTouchDevice()) {
496    inputField = this;
497
498    // KeyCode der Tastatureingabe
499    var code = event.keyCode || event.which;
500    var backspace = 8;
501    var tabShiftCtrlAlt = [9, 16, 17, 18];
502    var space = 32;
503    var pfeiltasten = [37, 38, 39, 40];
504
505    // eigentliche Funktion soll nicht bei Pfeiltasten oder Tab, Shift, Ctrl oder Alt ausgelöst werden; 
506    // Space-Taste soll im Input-Feld ganz deaktiviert werden
507    if (pfeiltasten.indexOf(code) != -1 || tabShiftCtrlAlt.indexOf(code) != -1) {
508      var execute = false;
509    } else if (code == space) {
510      return false;
511    } else {
512      var execute = true;
513    }
514    setTimeout(function () {
515      if (execute) {
516        // Cursor/Startauswahl merken
517        var caretPosStart = inputField.selectionStart;
518        var caretPosEnd = inputField.selectionEnd;
519        var caretPosAtEnd = (caretPosStart == caretPosEnd) && (caretPosEnd == inputField.value.length);
520
521        // bisherige IBAN-Eingabe in Array speichern
522        var val = inputField.value.replace(/ /g, '');
523        var valarr = val.split('');
524        var str = '';
525
526        // Die Zeichen der Eingabe setzen 
527        for (i = 0; i < valarr.length; i++) {
528          str += valarr[i];
529          // Leerzeichen nach 4 Stellen setzen
530          if ((i + 1) % 4 == 0) {
531            str += ' ';
532          }
533        }
534        // IBAN-Eingabe mit Leerzeichen im Inputfeld einfügen
535        inputField.value = str.substring(0, inputField.maxLength).toUpperCase();
536
537        // Cursor/Startauswahl mit Berücksichtigung der Leerzeichen wiederherstellen
538        if (caretPosAtEnd && code != backspace)
539          inputField.setSelectionRange(inputField.value.length, inputField.value.length);
540        else if (inputField.value.charAt(caretPosStart) == ' ' && caretPosStart == caretPosEnd && code != backspace)
541          inputField.setSelectionRange(caretPosStart + 1, caretPosEnd + 1);
542        else
543          inputField.setSelectionRange(caretPosStart, caretPosEnd);
544
545        // Change-Event für IE manuell triggern, da er in einigen Situationen nicht gefeuert wurde, obwohl ein change eingetreten ist
546        if (event.type != 'change') {
547          jQuery(inputField).trigger('change');
548        }
549      }
550      // Prüfen ob BIC-Felder ausgeblendet werden sollen; nicht beim Stammhörerlogin
551      if (!inputField.id.includes('bvedit'))
552        showOrHideBIC(inputField.value, inputField.name);
553    }, 5);
554  }
555}
556
557function isTouchDevice() {
558  var iOS = (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream);
559  if(iOS) {
560	  return true;
561  }
562  return ('ontouchstart' in document.documentElement);
563}
564
565//Ist die eingegebene IBAN eine deutsche IBAN?
566function isDE(pStr) {
567  var tmp = pStr;
568  var tmplength = tmp.length;
569  if (tmplength < 2 || tmp.substring(0, 2) == 'DE') {
570    return true;
571  } else {
572    return false;
573  }
574}
575
576function showOrHideBIC(pStr, pName) {
577  var bicName = pName.replace('iban', 'bic');
578  var inputFelderBIC = jQuery('input[name=' + bicName + '], label[for=' + bicName + 'id]');
579  if (!isDE(pStr)) {
580    inputFelderBIC.show();
581  } else {
582    inputFelderBIC.hide();
583  }
584}
585
586//Leerzeichen wieder löschen
587function removeSpacesIBAN() {
588  this.value = this.value.replace(/ /g, '');
589}
590
591//Max-length für input-Feld hochsetzen (da Leerzeichen berücksichtigt werden müssen)
592function addMaxLengthIBAN() {
593  var maxlength = this.maxLength;
594  if (maxlength % 4 == 0) this.maxLength = maxlength + Math.floor(maxlength / 4) - 1;
595  else this.maxLength = maxlength + Math.floor(maxlength / 4);
596}
597
598//Trigger für die verschiedenen IBAN-Funktionen
599if (typeof (jQuery) != 'undefined') { 	
600	jQuery(document).ready(function ($) {
601	  if ($('input[id*="iban"]').length > 0) {
602		//Am Anfang die max-length der IBAN-Felder erhöhen
603		$('input[id*="iban"]').each(addMaxLengthIBAN);
604
605		//Bei der Eingabe der IBAN die Leerzeichen setzen
606		$('input[id*="iban"]').each(function () {
607		  $(this).on('keydown', addSpacesIBAN);
608		  $(this).trigger('keydown');
609		});
610
611		//Beim Abschicken des Formulars die Leerzeichen wieder löschen
612		$('form').on('submit', function () {
613		  $('input[id*="iban"]').each(removeSpacesIBAN);
614		  $('input[id*="iban"]').trigger("change");
615		  //Für das GiroCheckout Plugin nötig, da bei Eingabe der BIC mit Autocompletion via giropaywidget.js
616		  //der Wert nicht von knockout.js übernommen wird wenn nicht noch ein extra change event ausgelöst wird
617		  $('input[id*="giropay_bic"]').trigger("change");
618		});
619	  }
620
621	  //Spendenbetrag (Helenchen)
622	  $('#tedit_spendenbetragid').change(function () {
623		var $this = jQuery(this);
624		var value = $this.val();
625		if (!isNaN(parseFloat(value))) {
626		  value = value.replace(',', '.');
627		  value = parseFloat(value).toFixed(2);
628		  if (value > 0) {
629			$('#tedit_spendencheckid').prop("checked", false).click(); //umgekehrt und mit click(), damit observable von KnockoutJS auch informiert wird
630		  } else {
631			$('#tedit_spendencheckid').prop("checked", true).click(); //umgekehrt und mit click(), damit observable von KnockoutJS auch informiert wird
632			value = '0,00';
633		  }
634		  value = value.replace('.', ',');
635		  $this.val(value);
636		} else {
637		  $('#tedit_spendencheckid').prop("checked", true).click(); //umgekehrt und mit click(), damit observable von KnockoutJS auch informiert wird
638		  $this.val('0,00');
639		}
640	  });
641	});
642
643	// ZSA und Stammhörerlogin
644	jQuery(function ($) {
645
646	  jQuery(document).on('change', '#merklisteerinnerungsmailaktiv', function () {
647		if (typeof kw === 'undefined') {
648		  console.log('kw.wbBasePath not defined!');
649		  return;
650		}
651		var data = {
652		  'key': 'merklisteerinnerungsmailaktiv',
653		  'value': jQuery('#merklisteerinnerungsmailaktiv')[0].checked ? 1 : 0,
654		};
655		jQuery.ajax({
656		  type: "POST",
657		  url: kw.wbBasePath + 'index.php?ajaxAction=SetStammhoererSetting',
658		  data: data,
659		  success: function (pData) {},
660		  error: function (XHR, textStatus, errorThrown) {
661			console.log("AJAX Error: " + textStatus + ": " + errorThrown);
662		  }
663		});
664	  });
665
666	  //Registrierungsformular
667	  if ($('.tn_unique').length > 0) { // TODO auf was anderes Abfragen
668
669		var bkbvtnNr = 0;
670		if ($('.bkbvtnid').length > 0) {
671		  bkbvtnNr = $('.bkbvtnid').last().val() * 1 + 1;
672		}
673
674		var $dienststelle = $('.zsa_dienststelle').clone();
675		var $zielgruppe = $('.zsa_zielgruppe').clone();
676
677		if (zsaCategorie) {
678		  var zsaKategorien = zsaCategorie.subCategories;
679		  $(zsaKategorien).each(function (index, value) {
680			// Überlegung: Jede Option die Unterkategorien (Zielgruppen) als Data mitgeben?
681			$('.zsa_bkbvtn_template .zsa_zielbereich').append('<option value="' + value.id + '">' + value.text + '</option>');
682		  });
683		}
684
685		var $bkbvtn = $('.zsa_bkbvtn_template').clone();
686		$('.zsa_bkbvtn_template').remove();
687
688		$(document).on('change', '.zsa_zielbereich', function () {
689		  var $parent = $(this).parents('.zsa_bkbvtn');
690		  var kategorieId = $(this).val();
691		  $('.zsa_zielgruppe', $parent).html($zielgruppe.html());
692
693		  $(zsaKategorien).each(function (index, value) {
694			if (value.id == kategorieId) {
695
696			  $(value.subCategories).each(function (index, value) {
697
698				// Überlegung: Jede Option die Unterkategorien (Zielgruppen) als Data mitgeben?
699				$('.zsa_zielgruppe', $parent).append('<option value="' + value.id + '">' + value.text + '</option>');
700			  });
701
702
703			}
704		  });
705
706		  $('.zsa_dienststelle', $parent).html($dienststelle.html());
707
708		  $.each(zsadienststellen, function (index, value) {
709			if (index == kategorieId) {
710			  $(value).each(function (index, valuee) {
711				// Überlegung: Jede Option die Unterkategorien (Zielgruppen) als Data mitgeben?
712				$('.zsa_dienststelle', $parent).append('<option value="' + valuee.id + '">' + valuee.teilnehmer.name + ' ' + valuee.teilnehmer.zusatz + ' ' + valuee.teilnehmer.zusatz2 + '</option>');
713			  });
714			}
715		  });
716		});
717
718		$(document).on('click', '.zsa_bkbvtn_add', function () {
719		  //var $zsaBkBvTn = $('.zsa_bkbvtn').first().clone();
720		  var $bkbvtnDiv = $bkbvtn.clone(); //$('<div></div>').append($bkbvtn.clone());
721
722		  // TODO wie können Lücken vermieden werden?
723		  $('.zsa_bkbvtn').last().after($bkbvtnDiv.html().replace(/{nr}/g, bkbvtnNr));
724		  bkbvtnNr++;
725		});
726
727
728		$('#zsa_register input[name=tedit_gebdat]').on('change', function () {
729		  if (KuferWEB.Utils.Filter.IsDate($(this).val())) {
730			$('label[for=tedit_gebdatid]').removeClass('pflicht');
731		  } else {
732			$('label[for=tedit_gebdatid]').addClass('pflicht');
733		  }
734		});
735
736		$('.checkDublette').click(function () {
737		  $('.tn_doppelt_meldung').hide();
738		  $('.zsa_dmz_keineVerbindung').hide();
739		  $('.zsa_daten_eintragen').hide();
740
741		  var name = $('input[name=tedit_name]').val();
742		  var vorname = $('input[name=tedit_vorname]').val();
743		  var gebdat = $('input[name=tedit_gebdat]').val();
744
745		  if (name.trim() === '' || vorname.trim() === '' || gebdat.trim() === '' || gebdat.trim() === '30.12.1899' || !KuferWEB.Utils.Filter.IsDate(gebdat)) {
746			$('.zsa_daten_eintragen').show();
747
748			return;
749		  }
750
751		  $('.zsa_loading').show();
752
753		  var data = {
754			'tedit_name': name,
755			'tedit_vorname': vorname,
756			'tedit_gebdat': gebdat
757		  };
758		  var basepath = (typeof KuferWEB.Settings.basepath_wb != 'undefined') ? KuferWEB.Settings.basepath_wb : '';
759		  $.post(basepath + 'index.php?ajaxAction=isDubletteGebdat', data, function (result) {
760			$('.zsa_loading').hide();
761
762			var $invalidInput = $(result).find('invalidInput');
763			if ($invalidInput.length > 0) {
764			  $('.zsa_daten_eintragen').show();
765			} else {
766			  var $keineVerbindung = $(result).find('keineVerbindung');
767			  if ($keineVerbindung.length > 0) {
768				$('.zsa_dmz_keineVerbindung').show();
769			  } else {
770				var $isDublette = $(result).find('isDublette');
771				if ($isDublette.length == 0) {
772				  handleKeineDublette();
773				} else {
774				  if ($isDublette.text()) {
775					$('.tn_doppelt_meldung').show();
776				  } else {
777					handleKeineDublette();
778				  }
779				}
780			  }
781			}
782		  });
783		}); //end .checkDublette.click()
784
785		//with only the first three fields visible: ENTER must result in checkDublette and not in a form submission
786		jQuery("form#zsa_register").on("submit", function () {
787		  if (!jQuery(".tn_weitere").is(":visible")) {
788			jQuery(".checkDublette").trigger("click");
789			return false;
790		  } else {
791			return true;
792		  }
793		});
794
795		if ($('.dubletteGeprueft').length > 0) {
796		  handleKeineDublette();
797		}
798
799		function handleKeineDublette() {
800		  $('.tn_unique input').prop('readonly', true);
801		  $('.checkDublette').hide();
802		  $('.tn_weitere').show();
803		}
804
805	  }
806
807	  $('.zsa_bkbvtn_bearbeiten').click(function () {
808		var $base = $(this).parents('.zsa_bkbvtn_base');
809		$base.find('.zsa_bkbvtn_readonly').hide();
810		$base.find('.zsa_bkbvtn_bearbeitbar').show();
811	  });
812
813	  $('.zsa_bearbeiten_abbrechen').click(function () {
814		var $base = $(this).parents('.zsa_bkbvtn_base');
815		$base.find('.zsa_bkbvtn_readonly').show();
816		$base.find('.zsa_bkbvtn_bearbeitbar').hide();
817	  });
818
819	  $('.zsa_bkbvtn_add_zb').click(function () {
820		$(this).hide();
821		$('.zsa_bkbvtn_weiter').show();
822	  });
823
824	  initZielbereichAuswahl($('.zsa_bkbvtn_weiter .zsa_zielbereich'), $('.zsa_bkbvtn_weiter .zsa_zielgruppe'), $('.zsa_bkbvtn_weiter .zsa_dienststelle'));
825
826	  function initZielbereichAuswahl($zielbereich, $zielgruppe, $dienststelle) {
827		$zielbereich.change(function () {
828		  var kategorieId = $(this).val();
829		  var subCategories = getSubCategories(kategorieId);
830		  setZielGruppenOptions($zielgruppe, subCategories);
831
832		  var dienststellen = getDienststellen(kategorieId);
833		  setDienststellenOptions($dienststelle, dienststellen);
834		});
835	  }
836
837	  function getSubCategories(kategorieId) {
838		var result = [];
839		$.each(zsaCategorie.subCategories, function (index, value) {
840		  if (value.id == kategorieId) {
841			result = value.subCategories;
842		  };
843		});
844		return result;
845	  }
846
847	  function setZielGruppenOptions($zielgruppe, subCategories) {
848		$zielgruppe.html(''); // damit werden eventuelle Defaultwerte entfernt. 
849		$.each(subCategories, function (index, value) {
850		  $zielgruppe.append('<option value="' + value.id + '">' + value.text + '</option>');
851		});
852	  }
853
854	  function getDienststellen(kategorieId) {
855		var result = [];
856		$.each(zsadienststellen, function (index, value) {
857		  if (index == kategorieId) {
858			result = value;
859		  }
860		});
861		return result;
862	  }
863
864	  function setDienststellenOptions($dienststelle, dienststellen) {
865		$dienststelle.html('');
866		$dienststelle.append('<option value="-1">--Dienststelle w&auml;hlen</option>');
867		$.each(dienststellen, function (index, value) {
868		  $dienststelle.append('<option value="' + value.id + '">' + value.teilnehmer.name + ' ' + value.teilnehmer.zusatz + ' ' + value.teilnehmer.zusatz2 + '</option>');
869		});
870	  }
871
872	  //Handling für das Storno von Belegungen im Stammhörer Login
873	  /**
874	  $('.stornoform').click(function() {
875	  //$('.kw-meine-kurse .text-right').on('click','.teilnehmerStorno',(function() {
876		var $this = $(this);
877		
878		if ( $this.parent().prev().hasClass('anmeldungen-kinder') ) {
879		  var $kinderAnmeldeDiv = $this.parent().prev();
880		  var $markableInputs= $kinderAnmeldeDiv.find('.kindername input.markable');
881		  
882		  //$selectable Inputs enthält die Checkboxen aller Kinder
883		  var $selectableInputs= $kinderAnmeldeDiv.find('.kindername input.allowSelect');
884		  
885		  //addBelegIds enthält die Ids der selektierten Kinder
886		  var addBelegIds = [];
887		  // Im URL ggf. auch mitteilen, ob es sich um Kinderstorno handelt, welche  Kinder BelegIds hinzugefügt 
888		  // werden und ob alle Kinder selektiert wurden
889		  var addUrlStr = '';
890		  
891		  //Wenn es  Kinder gibt, muß  ein Storno für Kinder (im StornoFirmenMode) durchgeführt werden;
892		  // nur dann muss der URL erweitert werden
893		  if ($selectableInputs.length > 0) {
894			addUrlStr += '&kinderstorno=1';
895			//Belegids der Kinder  aus den angehakten Checkboxen ermitteln
896			$selectableInputs.each(function(index,elem) {
897			  $that = $(this);
898			  if ($that.is(':checked')) {
899				addBelegIds[addBelegIds.length] = $that.attr('id');
900			  }
901			}) //end each()
902		  
903			// Die angehakten BelegIds der Kinder als String in der Form &addbelegids = 37167:38453:..:39756 darstellen
904			// und die URL anhängen (falls er nicht leer ist) 
905			if (addBelegIds.length > 0) {
906			  addUrlStr += '&addbelegids=' + addBelegIds.join(':');
907			}
908		  
909			// Ermitteln ob alle Kindbelegungen selektiert wurden
910			if (addBelegIds.length === $selectableInputs.length) {
911			  addUrlStr += '&allechecked=1';
912			}
913	 
914			//Anhängen des zusätzlichen URL Strings für Kinder
915			var urlStr = $this.attr('href') +  addUrlStr;
916			$this.attr('href', urlStr);
917		  } //end if ($selectableInputs.length > 0)
918		  
919		} //end if(... hasClass('anmeldungen-kinder')
920		  
921	  })
922	  **/
923
924	  //Submithandler für Storno
925
926	  $('.stornoform').submit(function () {
927
928		if ($('.markable').filter(':checked').length === 0) {
929		  alert("Bitte waehlen Sie einen Teilnehmer zum Stornieren aus. ");
930		  return false;
931		}
932
933	  });
934
935
936
937
938
939	}); //end jQuery(function) (enspricht dem Readyhandler
940}

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.