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"> » 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"> « 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(/ /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ä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.