PageSourceSearch

https://mkg1856.de/admin/include/vereinonline.js?rev=1790668677

js mkg1856.de collected 2026-10-07 00:19:09 UTC 211,329 bytes, 5,519 lines download raw bytes

1	
2var isDirty=false;
3var xx=2;
4var triggerfield='';
5var isctrl=false;
6var chiroqrrefresh='';
7var contextmenuid='';
8
9window.closeModal = function() { $('#modaldialog').modal('hide'); ModalClose(); if (chiroqrrefresh!='') $(chiroqrrefresh).focus(); };
10window.reloadMain = function() { $('#modaldialog').modal('hide'); ModalClose(); window.setTimeout("window.location.reload();",200); ShowLightBoxParent(); };
11
12function Relocate(url)
13{
14   window.location.href=url;
15}
16
17function ModalClose()
18{
19   $('.modal-backdrop').remove();
20   $('#modaldialogIFrame').attr('src','');
21}
22
23function LoadMainReady(gewaehlt,auswahl)
24{
25   $('.selectedrow').on("click", function(file, serverFileName) { SetAlleListCount(); });
26   $('[data-toggle="tooltip"]').tooltip({ animation: true, placement: 'bottom', hide:true, html: true, sanitize:false });
27   if ($('.selectmultiple').length>0) $('.selectmultiple').multiselect({ checkboxAutoFit:true, texts:{placeholder: 'Gruppenleiter dieser Gruppen dürfen diesen Report direkt nutzen'} });
28   if ($('.selectmultipleauswahl').length>0)
29   {
30      $('.selectmultipleauswahl').multiselect(
31      {
32         texts: {placeholder: auswahl, selectedOptions: ' '+gewaehlt },
33         maxPlaceholderOpts: 4,
34         onControlOpen: function(element)
35         {
36            var box = $(element).next('.ms-options-wrap').find('.ms-options');
37            var rect = $(element).next('.ms-options-wrap')[0].getBoundingClientRect();
38            if (window.innerWidth <= 600)
39               box.css({ position: 'fixed', left: rect.left + 'px', right: '10px', top: rect.bottom + 'px', width:'auto', maxWidth: 'none' });
40            else
41               $('.ms-options-wrap > .ms-options').css({ position:'relative', left:'auto', right:'auto', width: 'max-content', minWidth: '100%', maxWidth: 'auto' });
42         }
43      });
44   }
45
46   $('<div id="dropmenudiv" class="dropdownmenu" style="visibility:hidden;" onMouseover="clearhidemenu()" onMouseout="dynamichide(event)"></div>').appendTo('body');
47   $(window).scroll(function () { if ($(this).scrollTop()>50) $('#back-to-top').fadeIn(); else $('#back-to-top').fadeOut(); });
48   $('#back-to-top').click(function () { $('body,html').animate({ scrollTop: 0 }, 800); return false; });
49   if ($("#alternativen tbody").length>0) $("#alternativen tbody").sortable({ revert: true, placeholder: "ui-state-highlight" });
50   if ($("#listtypenliste tbody").length>0) $("#listtypenliste tbody").sortable({ revert: true, placeholder: "ui-state-highlight", stop: function( event, ui ) { ListTypenlisteReNumber(); } });
51   if ($(".dateiliste tbody").length>0) $(".dateiliste tbody").sortable({ revert: true, placeholder: "ui-state-highlight" });
52   if ($(".topdrag").length>0) $(".topdrag").sortable({ items: '.maintop', revert: true, stop: function( event, ui ) { TopDropped(); } });
53   //$('.modal-header .close').click(function () { CloseTrigger(document); });
54   checkCookie_eu();
55   if ($("[data-fancybox]").length>0) $("[data-fancybox]").fancybox(
56   {
57       slideShow: { autoStart: false, speed: 2000 },
58       loop : false,
59       buttons: [ "zoom", "slideShow", "fullScreen", "thumbs", "close" ],
60       defaultType: "image",
61       idleTime: false
62   });
63   $('.onlynumbers').on('keypress', function(event) { var kc=event.keyCode; return (kc > 47 && kc < 58) || kc==44 || kc==46; });
64   $('.onlytelnumbers').on('keypress', function(event) { var kc=event.keyCode; return kc > 47 && kc < 58; });
65   $('.opencontextmenu').on('click', function (event) { contextmenuid=$(this).attr('dataid'); var contextmenuaction=$(this).attr('action'); contextMenuOpen(event, contextmenuaction); });
66   ShotcutStrgS();
67   OpenSelectionGroup();
68   $('#pleasewait').hide();
69   //window.addEventListener('resize', () => TabelleSchrumpfen());
70   window.addEventListener("message", function(event) { if (event.data && event.data.action === "closeModal") closeModal(); });
71}
72
73function ButtonOnce()
74{
75   $(".buttononce").on("click", function (e)
76   {
77     if ($(this).data("clicked")) { e.preventDefault(); return; }
78     $(this).data("clicked", true);
79     $(this).css({ "pointer-events": "none", "opacity": "0.5", "cursor": "default"});
80     setTimeout(() => { $(this).removeData("clicked"); $(this).css({ "pointer-events": "", "opacity": "", "cursor": "" }); }, 1000); 
81   });
82}
83
84function ShotcutStrgS()
85{
86   $(document).keydown(function(e)
87   {
88      var key = undefined;
89      var possible = [ e.key, e.keyIdentifier, e.keyCode, e.which ];
90      while (key === undefined && possible.length > 0) key = possible.pop();
91      isctrl=e.ctrlKey;
92      if (key && (key == '115' || key == '83' ) && (e.ctrlKey || e.metaKey) && !(e.altKey))
93      {
94          e.preventDefault();
95          if ($('.buttonspeichern').length>0) { var href=$('.buttonspeichern').first().attr('href'); if (href!=undefined) { window.location.href = href; return false; } }
96      }
97      return true;
98   }); 
99   $(document).keyup(function(e)
100   {
101      isctrl=false;
102   }); 
103}
104
105function ActivateEsc()
106{
107   $(document).on('keydown', function(event) { if (event.key == "Escape") { if (DirtyMessage()) { CancelPopupBS(); } } });
108}
109
110function ActivateEscNoBS()
111{
112   $(document).on('keydown', function(event) { if (event.key == "Escape") { if (DirtyMessage()) { CancelPopup(); } } });
113}
114
115function CloseTrigger(wnd)
116{
117   if (triggerfield=='') return true;
118   var el=wnd.getElementById(triggerfield);
119   if (el==null || el=='undefined') return true;
120   $(el).trigger('change');
121   setTimeout(CancelPopupBS, 2000);
122   return false;
123}
124
125//function CloseDirtyBS(e)
126//{
127//   alert(isDirty?"D":"-"); if (DirtyMessage()) e.preventDefault();
128//}
129
130// Standard-Funktionen
131
132//http://www.professorweb.de/javascript-ajax/iframe-hohe-an-dessen-inhalt-automatisch-anpassen-v2.html
133function InitDatepicker(adminpath, showWeek)
134{
135   InitDatepickerField('.datepicker', adminpath, showWeek);
136   //if (typeof $('.datepicker').datepicker === "function") $('.datepicker').datepicker({ width:100, constrainInput:false, yearRange:'-100:+5', changeMonth: true, changeYear: true, dateFormat: 'dd.mm.yy', monthNamesShort: [ 'Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez' ], firstDay: 1, dayNamesMin: [ 'So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa' ], showOn: 'button', buttonImage: adminpath+'/include/calendar/calendar.gif', buttonImageOnly: true, buttonText: 'Datum auswählen', showWeek:showWeek });
137}
138
139function InitDatepickerField(field, adminpath, showWeek)
140{
141   if (typeof $(field).datepicker === "function")
142   {
143      $(field).datepicker(
144      {
145         width:100, constrainInput:false, yearRange:'-100:+5', changeMonth: true, changeYear: true, dateFormat: 'dd.mm.yy', firstDay: 1,
146         monthNamesShort: [ 'Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez' ], 
147         dayNamesMin: [ 'So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa' ], showOn: 'button',
148         buttonImage: adminpath+'/include/calendar/calendar.gif', buttonImageOnly: true, buttonText: 'Datum auswählen', showWeek:showWeek,
149         beforeShow: function(input, inst) { setTimeout(function() { $.datepicker._updateDatepicker(inst); }, 0); }
150      });
151   }
152}
153
154function OpenPopupWS(url, websvcdata)
155{
156   //var data='inhalt1_html='+encodeURIComponent($('#inhalt1_html').val());
157   //data+='&inhalt1_style='+encodeURIComponent($('#inhalt1_style').val());
158   //data+='&inhalt1_type='+encodeURIComponent($('#inhalt1_type').val());
159   var data={ inhalt1_html:$('#inhalt1_html').val(), inhalt1_style:$('#inhalt1_style').val(), inhalt1_type:$('#inhalt1_type').val() };
160   $.ajax({ type: 'POST', url: './?webservice=savepost&websvcdata='+websvcdata, data: data, success: function(result) 
161   {
162      OpenPopupBS('./'+url+'&websvcdata='+websvcdata+'&dialog=2',0,0,120);
163   } });
164}
165
166function OpenPopup(url,x,y,border)
167{
168   return window.open(url,'','toolbar=no,location=no,directories=no,status=yes,scrollbars=yes,resizable=yes,copyhistory=no,width='+x+',height='+y);
169}
170
171function OpenDirectLink(url,caption,referer)
172{
173   if (referer!='') $.ajax({ type: 'GET', url: './?webservice=savelink&cap='+encodeURIComponent(caption)+'&url='+encodeURIComponent(referer), success: function(result) { window.location.href=url; } });
174   else window.location.href=url;
175}
176
177function ResetBreadcrumb()
178{
179   $.ajax({ type: 'GET', url: './?webservice=resetbreadcrumb' });
180}
181
182//var layer0, layerpos;
183function OpenPopupBS5(url,x,y,border)
184{
185   //layer0=$('.maincontent').html();
186   //layerpos=$(window).scrollTop();
187   //$.ajax({ type: 'GET', url: url+'&dialog=1', success: function(result) 
188   //{
189   //   $(window).scrollTop(0);
190   //   $('.maincontent').html(result);
191   //} });
192   //return;
193
194   var myModal = new bootstrap.Modal(document.getElementById('modaldialog'), { keyboard: false });
195   $('#modaldialog .modal-body').css('height',($(window).height()-border)+'px');
196   $('#modaldialogIFrame').css('height','99%');
197   $('#modaldialog').modal('hide');
198   $('#modaldialogIFrame').attr('src',url);
199   myModal.show();
200   $("#modaldialog").draggable({ handle: ".modal-header" });
201
202   ResetDirty();
203}
204
205var handlerbshide=false;
206function OpenPopupBS(url,x,y,border)
207{
208   if (isBD5) { OpenPopupBS5(url,x,y,border); return; }
209   if (!handlerbshide) $('#modaldialog').on('hidden.bs.modal', function () { $('#modaldialogIFrame').attr('src',''); });
210   handlerbshide=true;
211
212   $('.modal-body').css('height',($(window).height()-border)+'px');
213   $('#modaldialogIFrame').css('height','99%');
214   $('#modaldialog').modal('hide');
215   $('#modaldialogIFrame').attr('src',url);
216   $('#modaldialog').modal({ show:true, keyboard:true, backdrop:'static' });
217   $("#modaldialog").draggable({ handle: ".modal-header" });
218
219   ResetDirty();
220}
221
222function CancelPopup()
223{
224   window.close();
225   if (!window.closed) alert("Skripte können keine Fenster schließen, die nicht von ihnen geöffnet wurden.");
226}
227
228function CancelPopupBS()
229{
230   //window.parent.closeModal();
231   window.parent.postMessage({ action: "closeModal" }, "*"); 
232}
233
234//function CancelPopupBS5()
235//{
236
237//   $('.maincontent').html(layer0);
238//   $(window).scrollTop(layerpos);
239//}
240
241function CloseModalX()
242{
243   if (typeof CheckChanged==='function') if (!CheckChanged()) return;
244   CancelPopupBS();
245}
246
247function ShowHide(element,show)
248{
249   if (show) $(element).show(); else $(element).hide();
250}
251
252function ShowHideInline(element,show)
253{
254   $(element).css('display',show?'inline':'none');
255}
256
257function ShowHideEmpty(element,show,isGIHBW)
258{
259   if (show) $(element).show(); else $(element).hide();
260   if (!show)
261   {
262      if (!isGIHBW) $(element).find('input[type=text],select').val('');
263      if (!isGIHBW) $(element).find('input[type=radio]').prop('checked',false);
264      if (!isGIHBW) $(element).find('input[type=checkbox]').prop('checked',false);
265      $(element).find('input,select').trigger('change');
266   }
267}
268
269function ShowLightboxSubmit()
270{
271   setTimeout(function(){ ShowLightBox(); }, 500);
272}
273
274var klicks=0;
275function FormSubmitOnce(form)
276{
277   klicks++;
278   if (klicks>1) return;
279   ShowLightboxSubmit();
280   DirectFormSubmit(form);
281}
282
283function FormSubmit(form)
284{
285   ShowLightboxSubmit();
286   DirectFormSubmit(form);
287}
288
289function DirectFormSubmit(form)
290{
291   if ($('.signaturepadcanvas').length>0) PadSave();
292   var frm1=document.getElementById(form);
293   if (frm1) frm1.submit();
294}
295
296function SetAll()
297{
298   var frm1=document.getElementById('form1');
299   var alle=false;
300   for(i=0; i<frm1.elements.length; i++) { if (frm1.elements[i].name.substring(0,6)=="check_" && !frm1.elements[i].disabled && frm1.elements[i].checked==false) alle=true; }
301   SetAlleForm('form1', alle, '');
302}
303
304function SetAlle(alle)
305{
306   SetAlleForm('form1', alle, '');
307}
308
309function SetAlleForm(form, alle, prefix, onlyvisible=true)
310{
311   $.each( $("input[name^='nachname']"+(onlyvisible?":visible":"")), function(key, value) { if ($(this).attr('name')!='nachname') { var leer=$(this).val().trim()==''; $(this).css('background-color',leer?'#FFA0A0':''); if (leer) fehler++; } });
312   $('#'+form+' input[type=checkbox]'+(prefix==''?'':'[name^='+prefix+']')).each(function(index, value) { if (!$(this).prop("disabled")) if (!onlyvisible || $(this).is(':visible') || !alle) $(this).prop('checked',alle); });
313   SetAlleListCount();
314}
315
316function SetAlleTeam()
317{
318   var frm1=document.getElementById('form1');
319   var alle=false;
320   for(i=0; i<frm1.elements.length; i++) { if (frm1.elements[i].name.substring(0,6)=="kalusr" && !frm1.elements[i].disabled) if (!frm1.elements[i].checked) alle=true; }
321   for(i=0; i<frm1.elements.length; i++) { if (frm1.elements[i].name.substring(0,6)=="kalusr" && !frm1.elements[i].disabled) frm1.elements[i].checked=alle; }
322   Form1Submit();
323}
324
325function SetAlleListCount()
326{
327   var z=$('.selectedrow:checked').length;
328   $('#selectedcount').html(z==0?'':z+' / ');
329}
330
331function SetAllBezahlt(bezahlt)
332{
333   var frm1=document.getElementById('form1');
334   for(i=0; i<frm1.elements.length; i++) { if (frm1.elements[i].name.substring(0,6)=="check_") if (document.getElementById("bezahlt_"+frm1.elements[i].name.substring(6)).value==bezahlt) frm1.elements[i].checked=true; }
335}
336
337function GetForm1()
338{
339   return document.getElementById('form1');
340}
341
342function GetForm1Element(key)
343{
344   var frm1=document.getElementById('form1');
345   return frm1.elements[key];
346}
347
348function GetFormElement(form, key)
349{
350   var frm1=document.getElementById(form);
351   return frm1.elements[key];
352}
353
354function SetFormValue(form, key, value)
355{
356   var frm1=document.getElementById(form);
357   var el=frm1.elements[key];
358   if (el) el.value=value;
359}
360
361function SetForm1Value(key, value)
362{
363   SetFormValue('form1',key,value);
364}
365
366function GetFormValue(form, key)
367{
368   var frm1=document.getElementById(form);
369   var elem=frm1.elements[key];
370   if (elem) return elem.value;
371}
372
373function GetForm1Value(key)
374{
375   return GetFormValue('form1',key);
376}
377
378function CountSelected()
379{
380   var frm1=document.getElementById('form1');
381   var cnt=0;
382   for(i=0; i<frm1.elements.length; i++) if (frm1.elements[i].name.substring(0,6)=="check_") if (frm1.elements[i].checked) cnt++;
383   return cnt;
384}
385
386function FormCountSelected(form)
387{
388   var frm1=document.getElementById(form);
389   var cnt=0;
390   for(i=0; i<frm1.elements.length; i++) if (frm1.elements[i].name.substring(0,6)=="check_") if (frm1.elements[i].checked) cnt++;
391   return cnt;
392}
393
394function AddAll(field)
395{
396   var txt=prompt('Wert für alle Zeilen (- ist löschen)');
397   if (txt=='') return;
398   var frm1=document.getElementById('form1');
399   for(i=0; i<frm1.elements.length; i++)
400   {
401      if (frm1.elements[i].name.substring(0,field.length)==field && (field=='user_' || $('#user_'+frm1.elements[i].name.substring(field.length)).val()!=''))
402         frm1.elements[i].value=txt=='-'?'':txt;
403   }
404}
405
406function GetIDs()
407{
408   var id='';
409   var frm1=document.getElementById('form1');
410   for(i=0; i<frm1.elements.length; i++)
411      if (frm1.elements[i].name.substring(0,6)=='check_') 
412         if (frm1.elements[i].checked)
413            id=id+','+frm1.elements[i].name.substring(6);
414   return id.substring(1);
415}
416
417function GetIDArray()
418{
419   var ids=[];
420   var frm1=document.getElementById('form1');
421   for(i=0; i<frm1.elements.length; i++)
422      if (frm1.elements[i].name.substring(0,6)=='check_') 
423         if (frm1.elements[i].checked)
424            ids.push(frm1.elements[i].name.substring(6));
425   return ids;
426}
427
428function SelectionToggle(chkbox, div, mandant)
429{
430   var isselected=chkbox.prop('checked');
431   $('#'+div+mandant).toggle();
432   if (!isselected) LeereFilter('#'+div+mandant);
433   if (isselected && (div=='divRollen' || div=='divGruppen')) $('#alle').prop('checked', false);
434}
435
436function AlleMitgliederKontakte(form, mandant)
437{
438   var checked=$('#alle').prop('checked') || $('#chkVerein').prop('checked');
439   if (checked==undefined) checked=false;
440   if (checked)
441   {
442      LeereFilter('#divRollen'+mandant);
443      //LeereFilter('#divGruppen'+mandant);
444      //LeereFilter('#divMembers'+mandant);
445      $('#chkRollen'+mandant).prop('checked', false); $('#divRollen'+mandant).hide();
446      //$('#chkGruppen'+mandant).prop('checked', false); $('#divGruppen'+mandant).hide();
447      //$('#chkMembers'+mandant).prop('checked', false); $('#divMembers'+mandant).hide();
448   }
449   //$('#chkRollen'+mandant).prop('disabled', checked);
450   //$('#chkGruppen'+mandant).prop('disabled', checked);
451   //$('#chkMembers'+mandant).prop('disabled', checked);
452}
453
454function RGMitgliederKontakte(el,form)
455{
456   //if (el) $('#alle').prop('checked',false);
457}
458
459function LeereFilter(div)
460{
461   $(div+' input:checkbox').prop('checked', false);
462   $(div+' input:text').val('');
463   $(div+' input:hidden').val('');
464   $(div+' .vapicker').val('');
465   $(div+' textarea').val('');
466   if (div.substr(0,11)!='#divGruppen') $(div+' select').val(''); else $(div+' select').val('1');
467}
468
469function SubSelect(div, mandant)
470{
471   var e=document.getElementById(div+mandant);
472   var isselected=document.getElementById('verein'+mandant).checked;
473   var frm1=document.getElementById('form1');
474   if (!frm1) frm1=document.getElementById('form2');
475   if (frm1 && div=='divSubVerein') for(var i=0; i<frm1.elements.length; i++) if (frm1.elements[i].name.substring(0,7+mandant.length)=='verein'+mandant+'-') frm1.elements[i].checked=isselected;
476}
477
478function CheckRequired(paymentBE,saalplananz,msgstart,firma,anrede,name,strasse,ort,email,kontoinhaber,bank,ibanbic,oder,kontoblz,invalidiban,adresseoptional=1)
479{
480   if ($('#zubuchen').length>0) { if (!$('#zubuchen').prop('checked')) return ''; }
481   var msg='';
482   if (adresseoptional==1 && FieldExists('rechnungfirma') && FieldExists('rechnungvollername_nachname'))
483   {
484      if (FieldIsEmpty('rechnungfirma') && FieldIsEmpty('rechnungvollername_nachname')) msg+='\n- '+firma;
485      if (FieldIsEmpty('rechnungvollername_anrede') && !FieldIsEmpty('rechnungvollername_nachname')) msg+='\n- '+anrede;
486   }
487   else
488   {
489      if (FieldIsEmpty('rechnungvollername_anrede') && !FieldIsEmpty('rechnungvollername_nachname')) msg+='\n- '+anrede;
490      if (FieldIsEmpty('rechnungvollername_nachname')) msg+='\n- '+name;
491   }
492   if (adresseoptional==1 && FieldIsEmpty('rechnungstrasse')) msg+='\n- '+strasse;
493   if (adresseoptional==1 && FieldIsEmpty('rechnungadresse_ort')) msg+='\n- '+ort;
494   if (adresseoptional==1 && (FieldIsEmpty('rechnungemail') || !isEmailAddress($('#rechnungemail').val()))) msg+='\n- '+email;
495   if (paymentBE!='no')
496   {
497      if ($('#buchungBezahlart1').prop('checked'))
498      {
499         if (FieldIsEmpty('konto_inhaber')) msg+='\n- '+kontoinhaber;
500         if (FieldIsEmpty('bank')) msg+='\n- '+bank;
501         if (paymentBE=='' || paymentBE=='sepa') if (FieldIsEmpty('konto_iban') || FieldIsEmpty('konto_bic')) msg+='\n- '+ibanbic;
502         if ($('#konto_ibanlabel').is(":visible") && $('#konto_ibanlabel').html().length>5) msg+='\n- '+invalidiban;
503      }
504   }
505   if ($('input[name="buchungBezahlart"]').attr('type')=='radio') if ($('input[name="buchungBezahlart"]:checked').val()==undefined) msg+='\n- Bezahlart';
506   //if (saalplananz>0) if (!CheckSaalPersonen(saalplananz)) msg+='\n- Bitte wählen Sie die korrekte Anzahl Saalplätze aus';
507   if (msg!='') msg=msgstart+':'+msg;
508   return msg;
509}
510
511function CheckIBANValid()
512{
513   if ($('#konto_ibanlabel').is(":visible") && $('#konto_ibanlabel').html().length>5) return false;
514   return true;
515}
516
517function FieldIsEmpty(field)
518{
519   if ($('#'+field).length>0)
520   {
521      if ($('#'+field).attr('type')=='checkbox') return !$('#'+field).prop('checked');
522      return $('#'+field).val()=='';
523   }
524   var multi=$("input[name='"+field+"[]']");
525   if (multi.length==0) return false; // Feld nicht vorhanden
526   var empty=true;
527   $.each( multi, function(key, value) { if ($(this).prop('checked')) empty=false; });
528   return empty;
529}
530
531function FieldExists(field)
532{
533   return $('#'+field).length>0;
534}
535
536function isEmailAddress(email)
537{
538   if (email=='') return false;
539   if (email=='(intern)') return true;
540   if (email==undefined) return true;
541   var pattern = /^(.*)@(.*)\.(.*)$/;
542   return email.match(pattern);    
543}
544
545function InWarenkorb(id, check, issub)
546{
547   if (issub && $('#auswahl'+id).val()=='') { alert('Bitte treffen Sie eine Auswahl'); return; }
548   if (GetFormValue('form2','artikel'+id)=='') SetFormValue('form2','artikel'+id,'1'); 
549   var msg;
550   if (check) msg=CheckAnzahl(0,id); else msg='';
551   msg+=CheckAnzahlExtrafelder(id);
552   if (msg!='')
553      alert(msg.substr(1)); 
554   else
555      FormSubmit('form2'); 
556}
557
558function CheckAnzahl(checkAnzahl,warenkorbid)
559{
560   var anz=0; var msg='';
561   var frm2=document.getElementById('form2');
562   for(i=0; i<frm2.elements.length; i++)
563   {
564      if (frm2.elements[i].name.substring(0,7)=='artikel')
565      {
566         var z=parseInt(frm2.elements[i].value);
567         var id=frm2.elements[i].name.substring(7);
568         var sub=document.getElementById('auswahl'+id);
569         var el;
570         var mx;
571
572         if (sub)
573            el=document.getElementById('maximal'+sub.value);
574         else
575            el=document.getElementById('maximal'+id);
576         if (el) mx=parseInt(el.value); else mx=100000;
577         anz+=z;
578         if (z>mx) msg=msg+'\nNur noch '+mx+' Stück verfügbar';
579
580         //if (sub)
581         //   el=document.getElementById('minanzahl'+sub.value);
582         //else
583         //   el=document.getElementById('minanzahl'+id);
584         //if (el) mx=parseInt(el.value); else mx=0;
585         //if (z<mx) msg=msg+'\nMinimale Bestellmenge: '+mx+' Stück';
586
587         //if (sub)
588         //   el=document.getElementById('maxanzahl'+sub.value);
589         //else
590         //   el=document.getElementById('maxanzahl'+id);
591         //if (el) mx=parseInt(el.value); else mx=100000;
592         //if (z>mx) msg=msg+'\nMaximale Bestellmenge: '+mx+' Stück';
593      }
594   }
595   if (checkAnzahl==1 && anz==0) msg=msg+'\nBitte tragen Sie die gewünschte Anzahl ein.';
596   return msg;
597}
598
599function CheckAnzahlExtrafelder(warenkorbid)
600{
601   var msg='';
602   var frm2=document.getElementById('form2');
603   for(i=0; i<frm2.elements.length; i++)
604   {
605      if (frm2.elements[i].name.substring(0,7)=='artikel')
606      {
607         var z=parseInt(frm2.elements[i].value);
608         var id=frm2.elements[i].name.substring(7);
609         if (z>0 || id==warenkorbid)
610         {
611            for(ii=0; ii<frm2.elements.length; ii++)
612            {
613               if (frm2.elements[ii].name.substring(0,17+id.length)=='pflichtattribut_'+id+'_')
614               {
615                  var idfeld=frm2.elements[ii].name.substring(16);
616                  if ($('#artikelattribut_'+idfeld).val()=='') msg=msg+'\nBitte Artikel-Detail "'+frm2.elements[ii].value+'" auswählen';
617               }
618            }
619         }
620      }
621   }
622   return msg;
623}
624
625function OpenDirect(extra,template,dialog)
626{
627   if (extra==3 && template>10000) { var o=prompt('Start bei Etikett Nummer','1'); if (''+o=='null') return; SetForm1Value('adressoffset',o); }
628   SetForm1Value('extra',extra);
629   SetForm1Value('template',template);
630   SetForm1Value('dialog',dialog);
631   GetForm1().target='';
632   if (extra==0) ShowLightboxSubmit();
633   DropZoneSubmit(DirectForm1Submit);
634}
635
636function OpenDirectForm()
637{
638   var form1=document.getElementById('form1');
639   var form2=document.getElementById('form2');
640   $('#pdfsubject').val(form1.elements['mailsubject'].value);
641   $('#pdfbody').val(GetEditorContent('tinymailbody'));
642   form2.target='';
643   form2.submit();
644}
645
646function ResetOpen()
647{
648   SetForm1Value('extra','');
649   SetForm1Value('template','');
650   SetForm1Value('dialog','0');
651   GetForm1().target='';
652}
653
654function OpenNewWindow(extra,template)
655{
656   DropZoneSubmit(function() { OpenNewWindowNow(extra,template); });
657}
658
659function OpenNewWindowNow(extra,template)
660{
661   if (extra>=0) SetForm1Value('extra',extra);
662   if (template>=0) SetForm1Value('template',template);
663   SetForm1Value('dialog','1');
664   GetForm1().target='PopupWnd';
665   var size='width=1200,height=900';
666   if (extra==1 || extra==2) size='width=800,height=800';
667   if (extra==1000) size='width=1000,height=1000';
668   window.open('about:blank', 'PopupWnd', 'toolbar=no,location=no,directories=no,status=yes,scrollbars=yes,resizable=yes,copyhistory=no,'+size);
669   window.setTimeout("window.document.forms['form1'].submit();", 1);
670}
671
672function ShowLightBox()
673{
674   $('#light').show();
675   $('#fade').show();
676}
677
678function ShowLightBoxParent()
679{
680   $('<div id=\"fadebody\" class=\"lightboxbackground\"></div>').prependTo('body');
681   $('#fadebody').css('display','block');
682}
683
684function CloseLightBox()
685{
686   $('#light').hide();
687   $('#fade').hide();
688}
689
690function CancelLightBox()
691{
692   CloseLightBox();
693   window.stop();
694}
695
696function ShowAndere(el, name, tag)
697{
698   if (el.value==tag)
699   {
700      $('#'+name).hide();
701      $('#'+name+'id').show();
702   }
703   else
704   {
705      $('#'+name+'id').hide();
706      $('#'+name+'etc').val('');
707   }
708}
709
710function HideAndere(name)
711{
712   $('#'+name).show();
713   $('#'+name+'id').hide();
714   $('#'+name+'etc').val('');
715   if (name.substr(0,3)=='div') $('#'+name.substr(3)).val(''); else $('#'+name).val('');
716}
717
718function ShowAndereOption(el, name)
719{
720   if (el.value=='#')
721   {
722      $('#'+name+'id').show();
723   }
724   else
725   {
726      $('#'+name+'id').hide();
727      $('#'+name+'etc').val('');
728   }
729}
730
731function OpenBox(boxnr)
732{
733   var el=document.getElementById('box'+boxnr);
734   if (el.style.display=='none') el.style.display=''; else el.style.display='none';
735}
736
737function Form1SubmitIfCount(typ,cmd)
738{
739   if (CountSelected()==0)
740      alert('Bitte erst '+typ+' markieren');
741   else
742      Form1SubmitCount(typ,cmd);
743}
744
745function Form1SubmitCount(typ,cmd)
746{
747   SetForm1Value('cmd',cmd);
748   DirectForm1Submit();
749}
750
751function Form1SubmitIfSelected(typ,cmd,msg)
752{
753   if (CountSelected()==0)
754      alert('Bitte erst '+typ+' markieren');
755   else
756      Form1SubmitSelected(typ,cmd,msg);
757}
758
759function Form1SubmitAll(typ,cmd,msg)
760{
761   if (confirm(typ+' jetzt wirklich '+msg+'?')) { if (cmd!='') SetForm1Value('cmd',cmd); Form1Submit(); }
762}
763
764function Form1SubmitSelected(typ,cmd,msg)
765{
766   if (confirm('Markierte '+typ+' jetzt wirklich '+msg+'?')) { if (cmd!='') SetForm1Value('cmd',cmd); Form1Submit(); }
767}
768
769function FormSubmitIfSelected(form,typ,cmd,msg)
770{
771   if (FormCountSelected(form)==0) { alert('Bitte erst '+typ+' markieren'); return; }
772   if (confirm('Markierte '+typ+' jetzt wirklich '+msg+'?')) { SetFormValue(form,'cmd',cmd); FormSubmit(form); }
773}
774
775function PromptAndSubmit()
776{
777   if (CountSelected()==0) { alert('Bitte erst Buchungen markieren'); return; }
778   var txt=prompt('Kontoauszug');
779   if (txt=='') { alert('Eingabe eines Kontoauszuges ist notwenig!'); return; }
780   if (txt==null) return;
781   SetForm1Value('kontoauszug',txt);
782   SetForm1Value('cmd','setzebezahltkontoauszug');
783   Form1Submit();
784}
785
786function GetBanknameBICbyBLZ(blz, bank, bic)
787{
788   if (blz.value=='') return;
789   var elBank=document.getElementById(bank);
790   var elBic=document.getElementById(bic);
791   $.ajax({ type: 'GET', url: './?webservice=blz&blz='+blz.value, success: function(result) 
792   {
793      if (result=='') return;
794      var data=result.split('\n');
795      if (elBank)
796      {
797         if (elBank.value!='' && elBank.value!=data[1]) if (!confirm(elBank.value+' überschreiben mit '+data[1]+'?')) return;
798         elBank.value=data[1];
799      }
800      if (elBic)
801      {
802         if (elBic.value!='' && elBic.value!=data[0]) if (!confirm(elBic.value+' überschreiben mit '+data[0]+'?')) return;
803         elBic.value=data[0];
804      }
805      $('#dataUrl').val(data[2]);
806      $('#dataHBCI').val(data[3]=='300'?'':data[3]);
807   } });
808}
809
810function GetBanknameBICbyIBAN(iban, bank, bic, kontonummer, bankleitzahl, label)
811{
812   $('#'+label).hide(); 
813   if (iban.value=='') return;
814   var ibanWert=iban.value.replace(/ /g,'');
815   var blz=ibanWert.substr(4,8);
816   var land=ibanWert.substr(0,2).toUpperCase();
817   if (land!='DE') blz='';
818   var elBank=document.getElementById(bank);
819   var elBic=document.getElementById(bic);
820   var elKto=document.getElementById(kontonummer);
821   var elBlz=document.getElementById(bankleitzahl);
822   var elLbl=document.getElementById(label);
823   $.ajax({ type: 'GET', url: '?webservice=iban&iban='+ibanWert, success: function(result) 
824   {
825      if (result=='') return;
826      var data=result.split('\n');
827      var ok=data[0]=='';
828      if (elLbl)
829      {
830         if (!ok) { $('#'+label).html(data[0]); $('#'+label).show(); }
831      }
832      if (elBank && ok)
833      {
834         //if (elBank.value!='' && elBank.value!=data[2]) if (!confirm(elBank.value+' überschreiben mit '+data[2]+'?')) return;
835         elBank.value=data[2];
836      }
837      if (elBic && ok)
838      {
839         //if (elBic.value!='' && elBic.value!=data[1]) if (!confirm(elBic.value+' überschreiben mit '+data[1]+'?')) return;
840         elBic.value=data[1];
841      }
842      if (ok)
843      {
844         if (elBlz) elBlz.value=blz;
845         if (elKto) if (land=='DE') { var k=ibanWert.substr(12); while (k.substr(0,1)=='0') k=k.substr(1); elKto.value=k; } else elKto.value='';
846         $('#dataUrl').val(data[3]);
847      }
848   } });
849}
850
851function GetOrtByPLZ(plz, ort)
852{
853   if (plz.value=='') return;
854
855   var bl=$('#key_'+ort.substr(0,2)+'bundesland'); 
856
857   $('#'+ort).prop('disabled',true).css('background-color','#f8f8f8');
858   $('#'+ort).autocomplete({
859    source: function(request, response)
860            {
861               $.ajax(
862               {
863                  url: '?webservice=plzmulti', 
864                  dataType: 'json', data: { plz:plz.value, bundesland:bl.length }, 
865                  success: function( data )
866                  {
867                     if (data.length==1 && $('#'+ort).val()=='')
868                     {
869                        var wrt=data[0];
870                        if (bl.length>0 && wrt.indexOf(' @')>0) { bl.val(wrt.substr(wrt.indexOf(' @')+2)); wrt=wrt.substr(0, wrt.indexOf(' @')); }
871                        $('#'+ort).val(wrt);
872                     }
873                     //else if (data.length==0)
874                     //   alert('PLZ nicht gefunden');
875                     else
876                        response(data);
877                     $('#'+ort).prop('disabled',false).css('background-color','');
878                     $('#'+ort).focus();
879                  } 
880               });
881            },
882    select: function( event, ui )
883    {
884       var wrt=ui.item.value;
885       if (bl.length>0 && wrt.indexOf(' @')>0) { bl.val(wrt.substr(wrt.indexOf(' @')+2)); wrt=wrt.substr(0, wrt.indexOf(' @')); }
886       $('#'+ort).val(wrt);
887       $('#'+ort).autocomplete('close');
888       $('#'+ort).prop('disabled',false).css('background-color','');
889       $('#'+ort).focus();
890       event.preventDefault();
891    },
892    minLength: 0
893   });
894   $('#'+ort).autocomplete('search', '');
895}
896
897function GetFirmaByID(id)
898{
899   $.ajax({ type: 'GET', url: './?webservice=firma&id='+id, success: function(result)
900   {
901      if (result=='') return;
902      var el=document.getElementById("firma");
903      el.value=result;
904   } });
905}
906
907function CheckNames(field)
908{
909   var el=document.getElementById(field);
910   if (el.value=='') return;
911   $.ajax({ type: 'POST', url: './?webservice=name', data: 'wert='+encodeURIComponent(el.value), success: function(result)
912   {
913      el.value=result;
914   } });
915}
916
917var calendars=[];
918function InitCalendar(feld)
919{
920   calendars[feld] = new CalendarPopup(feld+'calendardiv');
921   calendars[feld].setMonthNames('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
922   calendars[feld].setDayHeaders('S','M','D','M','D','F','S');
923   calendars[feld].setWeekStartDay(1);
924   calendars[feld].setTodayText('Heute');
925}
926function SetCalendar(feld)
927{
928   calendars[feld].select(document.getElementById(feld), feld+'anchor', 'dd.MM.yyyy');
929}
930
931function OpenKontoPicker(name,filter)
932{
933   window.open('?action=kasse_kontopicker&field='+name+'&value='+encodeURIComponent(document.getElementById(name).value)+'&filter='+encodeURIComponent(filter)+'&dialog=1','','toolbar=no,location=no,directories=no,status=yes,scrollbars=yes,resizable=yes,copyhistory=no,width=500,height=1000');
934}
935
936function OpenKreditorPicker(name)
937{
938   window.open('?action=kasse_kreditorpicker&field='+name+'&kreditor='+encodeURIComponent(document.getElementById(name).value)+'&dialog=1','','toolbar=no,location=no,directories=no,status=yes,scrollbars=yes,resizable=yes,copyhistory=no,width=600,height=350');
939}
940
941function SyncSelect(src, dst)
942{
943   document.getElementById(dst).selectedIndex=document.getElementById(src).selectedIndex;
944}
945
946function DeleteZuordnung(form, id)
947{
948   if (!confirm('Zuordnung wirklich löschen?')) return;
949   SetFormValue(form,'action','kasse_deletezuordnung');
950   SetFormValue(form,'deleteid',id);
951   FormSubmit(form);
952}
953
954function SetMasterValue(checkbox,field,mastervalue,ownvalue)
955{
956   var el=document.getElementById(field);
957   if (checkbox.checked)
958   {
959      el.value=mastervalue;
960      el.readOnly=true;
961   }
962   else
963   {
964      el.value=ownvalue;
965      el.readOnly=false;
966   }
967}
968
969function Bankeinzug(form, action)
970{
971   if (FormCountSelected(form)>0) { SetFormValue(form, 'action','kasse_'+action); DirectFormSubmit(form); } else alert('Bitte erst Einträge markieren!');
972}
973
974function HBCITransaktion(form)
975{
976   if (FormCountSelected(form)>0) { SetFormValue(form, 'action','kasse_hbciv2sepa'); SetFormValue(form, 'cmd',''); FormSubmit(form); } else alert('Bitte mindestens einen Eintrag markieren!');
977}
978
979function RadioGroupSelect(name,nr)
980{
981   $('.row_'+name).hide();
982   $('.row_'+name+nr).show();
983}
984
985function Serientermin()
986{
987   if (document.getElementById('serien').style.display=='')
988   {
989      $('#serien INPUT, #serien SELECT').val('');
990      document.getElementById('serien').style.display='none';
991   }
992   else
993      document.getElementById('serien').style.display='';
994}
995
996function InplaceEdit(nr, querystring, tag1, tag2)
997{
998   var cap='Neuer Wert';
999   if (tag1=='sv') cap='aktueller Bestand (Inventur)';
1000   if (tag1=='re') cap='Belegnummer';
1001   if (tag1=='cb1') cap='existierende Rechnungsnummer';
1002   if (tag1=='cb2') cap='beliebige fiktive Rechnungsnummer';
1003   var wrt=$('.inplacevalue'+nr).html();
1004   if (wrt=='ausverkauft') wrt='0'; else if (wrt.substr(0,13)=='ausverkauft (') wrt=wrt.substr(13,wrt.length-14);
1005   var txt=prompt(cap,wrt);
1006   if (txt==null) return;
1007   $('.inplacevalue'+nr).html(txt);
1008   if (tag1=='cn') if (txt=='') jQuery('.inplacevalue'+nr).parent().removeClass('chironotiz'); else jQuery('.inplacevalue'+nr).parent().addClass('chironotiz');
1009   if (tag1=='sv') { var w=(parseInt(txt)+parseInt(tag2)); $('.inplacevalue'+nr).parent().prev().prev().prev().prev().html(w); }
1010   InplaceCall(querystring, txt);
1011}
1012
1013function InplaceCall(querystring, txt)
1014{
1015   $.ajax({ type: 'POST', url: './?webservice=update', data: 'tag='+encodeURIComponent(querystring)+"&wert="+encodeURIComponent(txt) });
1016}
1017
1018function Toggle(id)
1019{
1020   var el=document.getElementById(id);
1021   if (el) { if (el.style.display=='none') el.style.display=''; else el.style.display='none'; }
1022}
1023
1024var oldYear=true;
1025function EnhanceAndVerifyDatum(fld)
1026{
1027   var d = new Date();
1028   var m = d.getMonth()+1; if (m<10) m='0'+m;
1029   var y = d.getFullYear(); 
1030   if (fld.value.indexOf('.')>=0)
1031   {
1032      var datum=fld.value.split('.',3);
1033      if (datum[0]=='' || datum[0]==undefined) { return; }
1034      if (datum[0].length==1) datum[0]='0'+datum[0];
1035      if (datum[1]==undefined) datum[1]='';
1036      if (datum[1].length==1) datum[1]='0'+datum[1];
1037      if (datum[2]==undefined) datum[2]='';
1038      if (fld.name=='geburtstag')
1039      {
1040         if (datum[1]=='') { fld.value=datum[0]+'.'+m+'.'; return; }
1041         if (datum[2]=='') { fld.value=datum[0]+'.'+datum[1]+'.'; return; }
1042         if (datum[2]<=30) { datum[2]=parseInt(datum[2])+2000; fld.value=datum[0]+'.'+datum[1]+'.'+datum[2]; }
1043         if (datum[2]<100) { datum[2]=parseInt(datum[2])+1900; fld.value=datum[0]+'.'+datum[1]+'.'+datum[2]; }
1044      }
1045      else
1046      {
1047         if (datum[1]=='') { fld.value=datum[0]+'.'+m+'.'+y; return; }
1048         if (datum[2]=='') { fld.value=datum[0]+'.'+datum[1]+'.'+y; return; }
1049         if (datum[2]<=30) { datum[2]=parseInt(datum[2])+2000; fld.value=datum[0]+'.'+datum[1]+'.'+datum[2]; }
1050         if (datum[2]<100) { datum[2]=parseInt(datum[2])+1900; fld.value=datum[0]+'.'+datum[1]+'.'+datum[2]; }
1051         //if (datum[2]<y) { if (oldYear) alert('Hinweis: altes Jahr eingegeben!'); oldYear=false; }
1052      }
1053   }
1054   else
1055   {
1056      if (fld.value=='') return;
1057      if (fld.value.length==1) { fld.value='0'+fld.value+'.'+m+'.'+y; return; }
1058      if (fld.value.length==2) { fld.value=fld.value+'.'+m+'.'+y; return; }
1059      if (fld.value.length==4) { fld.value=fld.value.substr(0,2)+'.'+fld.value.substr(2,2)+'.'+y; return; }
1060      if (fld.value.length==6) { fld.value=fld.value.substr(0,2)+'.'+fld.value.substr(2,2)+(fld.value.substr(4,2)<='30'?'.20':'.19')+fld.value.substr(4,2); return; }
1061      if (fld.value.length==8) { fld.value=fld.value.substr(0,2)+'.'+fld.value.substr(2,2)+'.'+fld.value.substr(4,4); return; }
1062   }
1063}
1064
1065function BerechneAlter(heute, el)
1066{
1067   if (el.value=='') { $('#alter_geburtstag').html(''); return 0; }
1068   var geb1=el.value.split('.');
1069   var heute1=heute.split('.');
1070   if (geb1.length!=3 || heute1.length!=3) { $('#alter_geburtstag').html(' falsches Datums-Format'); return 0; }
1071   if (geb1[2]=='') { $('#alter_geburtstag').html(''); return 0; }
1072   var alter=parseInt(heute1[2])-parseInt(geb1[2]); if (parseInt(heute1[1])<parseInt(geb1[1]) || (parseInt(heute1[1])==parseInt(geb1[1]) && parseInt(heute1[0])<parseInt(geb1[0]))) alter--;
1073   if (alter<0 || alter>150) { $('#alter_geburtstag').html(''); return 0; }
1074   $('#alter_geburtstag').html(' =('+alter+' Jahre)');
1075   return alter;
1076}
1077
1078function SetBelegEnable(enable, art)
1079{
1080   if (enable && art) $("#datepickerdatum IMG").show(); else $("#datepickerdatum IMG").hide();
1081   if (enable) $("#art0").removeAttr("disabled"); else $("#art0").attr("disabled",true);
1082   if (enable) $("#art1").removeAttr("disabled"); else $("#art1").attr("disabled",true);
1083   if (enable && art) $("#datum").removeAttr("disabled"); else $("#datum").attr("disabled",true);
1084   if (enable) $("#zweck").removeAttr("disabled"); else $("#zweck").attr("disabled",true);
1085   if (enable) $("#betrag").removeAttr("disabled"); else $("#betrag").attr("disabled",true);
1086   if (enable) $("#kat").removeAttr("disabled"); else $("#kat").attr("disabled",true);
1087   if (enable) $("#kontoid").removeAttr("disabled"); else $("#kontoid").attr("disabled",true);
1088   if (enable) $("#kontodetailskontoid").removeAttr("disabled"); else $("#kontodetailskontoid").attr("disabled",true);
1089   if (enable && art) { $("#kontoid2").removeAttr("disabled"); $("#rowkontoid2").show(); } else { $("#kontoid2").attr("disabled",true); $("#rowkontoid2").hide(); }
1090   if (enable && art) $("#kontodetailskontoid2").removeAttr("disabled"); else $("#kontodetailskontoid2").attr("disabled",true);
1091   if (enable && art) $("#kontopickerkontoid2").removeAttr("disabled"); else $("#kontopickerkontoid2").attr("disabled",true);
1092   if (enable && art) $("#unterkonto").removeAttr("disabled"); else $("#unterkonto").attr("disabled",true);
1093   if (enable) $("#mwst").removeAttr("disabled"); else $("#mwst").attr("disabled",true);
1094   if (enable) $("#belegnr").removeAttr("disabled"); else $("#belegnr").attr("disabled",true);
1095   if (enable) $("#rnummer").removeAttr("disabled"); else $("#rnummer").attr("disabled",true);
1096   if (enable) $("#rnummerlink").show(); else $("#rnummerlink").hide();
1097   if (enable && art) $("#rtyp").removeAttr("disabled"); else { $("#rtyp").attr("disabled",true); $("#rtyp").val('0'); $("#rtyp").trigger('change'); }
1098   if (enable) $("#kunde").removeAttr("disabled"); else $("#kunde").attr("disabled",true);
1099   if (enable) $("#userid").removeAttr("disabled"); else $("#userid").attr("disabled",true);
1100   if (enable) $("#gruppenid").removeAttr("disabled"); else $("#gruppenid").attr("disabled",true);
1101   if (enable) $("#veranstaltungid").removeAttr("disabled"); else $("#veranstaltungid").attr("disabled",true);
1102   if (enable) $("#quelle").removeAttr("disabled"); else $("#quelle").attr("disabled",true);
1103}
1104
1105function NeueRechnungsNummer()
1106{
1107   $.ajax({ type: 'GET', url: './?webservice=renr&rtyp='+$('#rtyp').val()+"&uid="+$('#userid').val()+"&vid="+$('#veranstaltungid').val()+"&betrag="+$('#betrag').val(), success: function(result) 
1108   {
1109      $('#rnummer').val(result);
1110   } });
1111}
1112
1113function NeueKundenNummer(field)
1114{
1115   $.ajax({ type: 'GET', url: './?webservice=kunr', success: function(result) 
1116   {
1117      $('#'+field).val(result);
1118   } });
1119}
1120
1121function KontoPickerSetze(field,wert)
1122{
1123   if (wert=='')
1124      KontoPickerSetzeName(field,'','');
1125   else
1126      $.ajax({ url: './?webservice=kontopicker', dataType: 'json', data: { query:encode_utf8(wert), filterart:'' }, success: function( data )
1127      {
1128         if (data.length==1)
1129            KontoPickerSetzeName(field,wert,data[0].label);
1130         else
1131            KontoPickerSetzeName(field,wert,wert);
1132      } });
1133}
1134
1135function KontoPickerAktiv(field,aktiv)
1136{
1137   $('#kontopicker'+field).prop('disabled',!aktiv);
1138   $('#kontopicker'+field).trigger('change');
1139}
1140
1141function KontoPickerSetzeName(field,wert,name)
1142{
1143   $('#'+field).val(wert);
1144   $('#kontopicker'+field).val(name);
1145   $('#kontodetails'+field).val(wert); //dropdown
1146}
1147
1148function SetBelegData(betrag, id, konto, konto2, kreditor, kreditorname, quelle, kontoname, kontoname2, mwststd) 
1149{
1150   $("#betrag").val(betrag==0?'':betrag);
1151   KontoPickerSetzeName('kontoid',konto,kontoname);
1152   KontoPickerSetzeName('kontoid2',konto2,kontoname2);
1153   $("#unterkonto").val(kreditor);
1154   $("#kreditordetailsunterkonto").html(kreditorname);
1155   $("#peoplepickerguthabenmitglied").val(kreditorname);
1156   if (id=='' || id==0) return;
1157   $.ajax({ type: 'GET', url: './?webservicejson&function=GetRechnung&id='+id, success: function(result)
1158   {
1159      $("#datum").val(result.datum.substr(8,2)+'.'+result.datum.substr(5,2)+'.'+result.datum.substr(0,4));
1160      $("#zweck").val(result.zweckkurz);
1161      $("#kat").val(result.kategorie);
1162      $("#mwst").val(mwststd==0?'':mwststd);
1163      $("#belegnr").val(result.beleg);
1164      $("#kunde").val(result.kunde);
1165      $("#userid").val(result.userid);
1166      $("#gruppenid").val("");
1167      $("#veranstaltungid").val("");
1168      $("#quelle").val(quelle==-1?result.quelle:quelle);
1169   } });
1170}
1171
1172function ShowHideToggle(id)
1173{
1174   if (!$(id).is(':visible')) $(id).show(); else $(id).hide();
1175}
1176
1177function CheckGeoAdr(adr)
1178{
1179   if (adr=='') return false;
1180   if (adr=='undefined') return false;
1181   if (adr==undefined) return false;
1182   if (adr.indexOf(' / ') && parseFloat(adr)>0) return false;
1183   return true;
1184}
1185
1186function GeoOpenDirect(extra,template,dialog)
1187{
1188   var adr=$('#geoadr').val();
1189   if (!CheckGeoAdr(adr)) { OpenDirect(extra,template,dialog); return; }
1190   $.ajax({ type: 'GET', url: './?webservice=geo&ort='+encodeURIComponent(adr), success: function(result) 
1191   {
1192      if (result!='') $('#geoadr').val(result);
1193      OpenDirect(extra,template,dialog);
1194   } });
1195
1196   //var geocoder = new google.maps.Geocoder();
1197   //geocoder.geocode(
1198   //     { address: adr }, 
1199   //     function(locResult, status)
1200   //     {
1201   //        if (status == google.maps.GeocoderStatus.OK)
1202   //            $('#geoadr').val(locResult[0].geometry.location.lat() +" / " +locResult[0].geometry.location.lng());
1203   //        OpenDirect(extra,template,dialog);
1204   //     }
1205   //);
1206}
1207
1208function GeoOpenNewWindow(extra,template)
1209{
1210   var adr=$('#geoadr').val();
1211   if (!CheckGeoAdr(adr)) { OpenNewWindow(extra,template); return; }
1212
1213   $.ajax({ type: 'GET', url: './?webservice=geo&ort='+encodeURIComponent(adr), success: function(result) 
1214   {
1215      if (result!='') $('#geoadr').val(result);
1216      OpenNewWindow(extra,template);
1217   } });
1218
1219   //var geocoder = new google.maps.Geocoder();
1220   //geocoder.geocode(
1221   //     { address: adr }, 
1222   //     function(locResult, status)
1223   //     {
1224   //        if (status == google.maps.GeocoderStatus.OK)
1225   //            $('#geoadr').val(locResult[0].geometry.location.lat() +" / " +locResult[0].geometry.location.lng());
1226//        OpenNewWindow(extra,template);
1227   //     }
1228   //);
1229}
1230
1231//Suche nach Umkreis
1232function BerechneGEO(src, dst, submit)
1233{
1234   ShowLightBox();
1235   var el=document.getElementById(src);
1236   if (el==undefined) { if (submit!='') DirectFormSubmit(submit); return; }
1237   var adr=el.value;
1238   if (!CheckGeoAdr(adr)) { if (submit=='#') OpenNewWindowNow(-1,-1); else if (submit!='') DirectFormSubmit(submit); return; }
1239   GoogleGeoCoder(adr, dst, submit);
1240}
1241
1242function GoogleGeoCoder(adr, geofieldid, submit)
1243{
1244   $.ajax({ type: 'GET', url: './?webservice=geo&ort='+encodeURIComponent(adr), success: function(result) 
1245   {
1246      if (result!='') $('#'+geofieldid).val(result);
1247      if (submit=='#') OpenNewWindowNow(-1,-1); else if (submit!='') DirectFormSubmit(submit);
1248   } });
1249
1250   ////Client
1251   //var geocoder = new google.maps.Geocoder();
1252   //geocoder.geocode(
1253   //     { address: adr }, 
1254   //     function(locResult, status)
1255   //     {
1256   //        if (status == google.maps.GeocoderStatus.OK)
1257   //            $('#'+geofieldid).val(locResult[0].geometry.location.lat() + " / " +locResult[0].geometry.location.lng());
1258   //        //else alert(status);
1259   //        if (submit!='') DirectFormSubmit(submit);
1260   //     }
1261   //);
1262}
1263
1264//Mitgliederprofile, Geo-Feld "Neu berechnen"
1265function BerechneGEOAdr2(geofieldid, submit, prefix)
1266{
1267   var pre=prefix; if (pre=='') pre=$('#postgp').val()==0?"p":"g";
1268   var adrLnd = $('#'+pre+'_land').val();
1269   var adrStr = $('#'+pre+'_strasse').val();
1270   var adrPlz = $('#'+pre+'_plz').val();
1271   var adrOrt = $('#'+pre+'_ort').val();
1272   if (adrLnd=='') adrLnd='D';
1273   var adr = adrLnd+"-"+adrPlz+" "+adrOrt+", "+adrStr;
1274   if (adr==$('#geolastvalue').val() && $('#'+geofieldid).val()!='') { if (submit!='') DirectFormSubmit(submit); return; }
1275   GoogleGeoCoder(adr, geofieldid, submit);
1276}
1277
1278function BerechneLuft(pos1, pos2, luft)
1279{
1280   var p1=document.getElementById(pos1).value;
1281   var p1p=p1.indexOf('/'); 
1282   var latLng1 = new google.maps.LatLng(p1.substring(0,p1p), p1.substring(p1p+1), true);
1283
1284   var p2=document.getElementById(pos2).value;
1285   var p2p=p2.indexOf('/'); 
1286   var latLng2 = new google.maps.LatLng(p2.substring(0,p2p), p2.substring(p2p+1), true);
1287
1288   var l=document.getElementById(luft);
1289   l.value=round2(google.maps.geometry.spherical.computeDistanceBetween(latLng1,latLng2)/1000);
1290}
1291
1292function round2(value)
1293{
1294    var shift = 100;
1295    var shifted = Math.round(value * shift);
1296    return shifted / shift;
1297}
1298
1299function round3(value)
1300{
1301    var shift = 1000;
1302    var shifted = Math.round(value * shift);
1303    return shifted / shift;
1304}
1305
1306function AddBelegZeile(zeilennr, extranr)
1307{
1308   var elem=$('#zeile_25').clone();
1309   elem.show();
1310   ItemsSetIDLine(elem,'','_'+zeilennr+'_'+extranr,false);
1311
1312   elem.find('#einaus_'+zeilennr+'_'+extranr).val($('#einaus'+zeilennr).val());
1313   elem.find('#nettobrutto_'+zeilennr+'_'+extranr).val($('#nettobrutto'+zeilennr).val());
1314   elem.find('#mwst_'+zeilennr+'_'+extranr).val($('#mwst'+zeilennr).val());
1315
1316   elem.find('a.belegzeile').each(function(index, value) {
1317     $(this).attr('onclick','javascript:AddBelegZeile('+zeilennr+','+(extranr+1)+');return false;');
1318   });
1319
1320   if (extranr==1)
1321      $('#extralink_'+zeilennr).hide();
1322   else
1323      $('#extralink_'+zeilennr+'_'+(extranr-1)).hide();
1324
1325   var nxt=$('#zeile_'+(zeilennr+1));
1326   elem.insertBefore(nxt);
1327
1328   KontoPickerEnable('konto_'+zeilennr+'_'+extranr);
1329}
1330
1331function OpenRegister(selectedTab, name)
1332{
1333   $('#openedpage').val(selectedTab);
1334   if (name!='') name='#'+name+' ';
1335
1336   $(name+'.tabdialog').hide();
1337   $(name+'.tabX').removeClass('active');
1338   $(name+'.tabB').removeClass('tabselected');
1339   $(name+'.tabB').addClass('tabunselected');
1340
1341   $(name+'.item'+selectedTab).show();
1342   $(name+'.tabX'+selectedTab).addClass('active');
1343   $(name+'.tabB'+selectedTab).addClass('tabselected');
1344   $(name+'.tabB'+selectedTab).removeClass('tabunselected');
1345
1346   //if (typeof PadResizeCanvas2 === "function") PadResizeCanvas2();
1347}
1348
1349function SyncUnter(kontofield, kontenFV, kontenBank)
1350{
1351   var konto=$('#'+kontofield).val();
1352   var sel=3, bank='';
1353   for(var i=0; i<kontenFV.length; i++) if (kontenFV[i]==konto) sel=1;
1354   for(var i=0; i<kontenBank.length; i++) if (kontenBank[i][0]==konto) { sel=2; bank=kontenBank[i][1]; }
1355   if (sel==1) $('#div_unter'+kontofield+'_1').show(); else $('#div_unter'+kontofield+'_1').hide();
1356   if (sel==2) $('#div_unter'+kontofield+'_2').show(); else $('#div_unter'+kontofield+'_2').hide();
1357   if (sel==3) $('#div_unter'+kontofield+'_3').show(); else $('#div_unter'+kontofield+'_3').hide();
1358   $('#unter'+kontofield).val(sel);
1359   if (sel==2) $('#unter'+kontofield+'_2').val(bank);
1360}
1361
1362function OpenBox(boxnr)
1363{
1364   var el=document.getElementById('box'+boxnr);
1365   if (el.style.display=='none') el.style.display=''; else el.style.display='none';
1366}
1367
1368function resizetable(id)
1369{
1370   $(document).ready(function() {
1371      //$('#'+id).css('display','block').css('scrollable','yes').css('overflow-y','auto').css('overflow-x','hidden').css('height','400');
1372      //$('#'+id).prev().css('display','block').css('position','relative');
1373      //$('#'+id+' > tr').css('display','block').css('height','30px');
1374      var h = $(window).height()-$('#'+id).offset().top-30+$(window).scrollTop();
1375      $('#'+id).height(h); 
1376   });
1377   $(window).resize(function()  { var h = $(window).height()-$('#'+id).offset().top-30+$(window).scrollTop(); $('#'+id).height(h); });
1378   //$(window).scroll(function()  { var h = $(window).height()-$('#'+id).offset().top-30+$(window).scrollTop(); $('#'+id).height(h); });
1379}
1380
1381function pruefPasswortStaerke(password, minlaenge, komplexitaet, txtKurz, txtNA, txtA, txtVorgabe, txtKriterien, txtPwdSec, txtSchwach, txtGut, txtStark, txtSehrStark)
1382{
1383   var staerke=0;
1384   if (password.length<minlaenge) return ['#ff0000',txtKurz];
1385
1386   var gr=password.match(/([A-ZÄÖÜ])/);
1387   var kl=password.match(/([a-zäöü])/);
1388   var zi=password.match(/([0-9])/);
1389   var so=false; for(var i=0; i<password.length; i++) { var z=password[i]; so=so || !(z.match(/([A-ZÄÖÜ])/) || z.match(/([a-zäöü])/) || z.match(/([0-9])/)); }
1390   var kom=(gr?1:0)+(kl?1:0)+(zi?1:0)+(so?1:0);
1391   var erg=kom<komplexitaet?txtNA:txtA;
1392
1393   //if (password.length>7) staerke+=1;
1394   if (gr) staerke+=1;
1395   if (kl) staerke+=1;
1396   if (zi) staerke+=1;
1397   if (so) staerke+=1;
1398   //if (password.match(/(.*[!,%,&,@,#,$,^,*,?,_,~].*[!,%,&,@,#,$,^,*,?,_,~])/)) staerke+=1;
1399
1400   var farbe=kom<komplexitaet?'#ff0000':'#007f00';
1401
1402   if (staerke<2) return [farbe, txtVorgabe+' '+erg+' ('+kom+'/4 '+txtKriterien+'), '+txtPwdSec+' '+txtSchwach];
1403   if (staerke<3) return [farbe, txtVorgabe+' '+erg+' ('+kom+'/4 '+txtKriterien+'), '+txtPwdSec+' '+txtGut];
1404   if (staerke<4) return [farbe, txtVorgabe+' '+erg+' ('+kom+'/4 '+txtKriterien+'), '+txtPwdSec+' '+txtStark];
1405   return [farbe, txtVorgabe+' '+erg+' ('+kom+'/4 '+txtKriterien+'), '+txtPwdSec+' '+txtSehrStark];
1406}
1407
1408function FormatEuro(w,curr)
1409{
1410   var s=''+w; if (s.indexOf('.')>=0) { ss=s+'00'; s=Trenner(ss.substr(0,ss.indexOf('.')))+','+ss.substr(ss.indexOf('.')+1,2); } else s=Trenner(s)+',00';
1411   return s+' '+curr;
1412}
1413
1414function Trenner(number)
1415{
1416   number = '' + number;
1417   if (number.length > 3)
1418   {
1419      var mod = number.length % 3;
1420      var output = (mod > 0 ? (number.substring(0,mod)) : '');
1421      for (i=0 ; i < Math.floor(number.length / 3); i++)
1422      {
1423         if ((mod == 0) && (i == 0))
1424            output += number.substring(mod+ 3 * i, mod + 3 * i + 3);
1425         else
1426            output+= '.' + number.substring(mod + 3 * i, mod + 3 * i + 3);
1427      }
1428      return output;
1429   }
1430   return number;
1431}
1432
1433function GetKommaZahl(feld)
1434{
1435   var wrt=$('#'+feld).val();
1436   return GetKommaZahlWert(wrt);
1437}
1438
1439function GetKommaZahlWert(wrt)
1440{
1441   if (wrt.indexOf('.')>=0 && wrt.indexOf(',')>=0) wrt=wrt.replace('.','');
1442   wrt=wrt.replace(',','.');
1443   if (wrt=='') return 0;
1444   return parseFloat(wrt);
1445}
1446
1447function SpeichernKreditor()
1448{
1449   if ($("input[name='auswahl']:checked").val()==1) if ($('#konto1').val()==0) alert('Bitte Kontakt au
1449swählen'); else SetzeKreditor('#'+$('#konto1').val(), $('#peoplepickerkonto1').val());
1450   if ($("input[name='auswahl']:checked").val()==2) if ($('#konto2').val()=='') alert('Bitte Kreditor auswählen'); else SetzeKreditor($('#konto2').val(), $('#konto2').val());
1451   if ($("input[name='auswahl']:checked").val()==3) if ($('#konto3').val()=='') alert('Bitte Kreditor eingeben'); else SetzeKreditor($('#konto3').val(), $('#konto3').val());
1452   if ($("input[name='auswahl']:checked").val()==4) SetzeKreditor('','');
1453}
1454
1455function SetzeDatum2(el, feld)
1456{
1457   var data=el.value.split('.');
1458   if (data.length>=3) $('#'+feld).val('31.12.'+data[2]);
1459}
1460
1461function Verbandsauswahl(mandant, selectfeld)
1462{
1463   $('#'+selectfeld).empty();
1464   $.ajax({ type: 'GET', url: './?webservicejson&function=GetMembers&filter=mandant%3D'+mandant, success: function(result) 
1465    {
1466      $("<option/>").val("").text("").appendTo('#'+selectfeld);
1467      for(var i=0; i<result.length; i++) $("<option/>").val(result[i].id).text(result[i].name).appendTo('#'+selectfeld);
1468    }
1469   });
1470}
1471
1472function CheckSize(size, confirmalle=false)
1473{
1474   if (confirmalle) if ($('#alle').prop('checked') || $('#vms').prop('checked') || $('#othr').prop('checked')) { if (!confirm("Wirklich an 'alle' senden (ggf. gemäß Filter)?")) return false; }
1475   if ($('#subject').length>0 && $('#subject').val()=='') { alert('Betreff muss ausgefüllt sein'); return false; }
1476   if ($('#attachmentsaslink').prop("checked")) return true;
1477
1478   var ist=0;
1479   $.each( $("input[type='file']"), function(key, value) { if (value.files!=undefined) if (value.files.length>0) for(var i=0; i<value.files.length; i++) ist=ist+value.files[i].size; });
1480   if (Dropzone.isBrowserSupported())
1481   { 
1482      var dropzone = Dropzone.forElement('#dropareaattachments');
1483      if (dropzone!=null) { var files = dropzone.getQueuedFiles(); if (files.length!=undefined) for(var i=0; i<files.length; i++) ist+=files[i].size; }
1484   }
1485   if (ist>size*1024*1024) { alert('Die Dateien sind mit '+(Math.round(ist/1024/1024*10)/10)+' MBytes größer als die erlaubten '+size+' MBytes'); return false; }
1486
1487   return true;
1488}
1489
1490function CascadeAuswahl(feld, value, data)
1491{
1492   $('#'+feld).empty();
1493   if (value=='') $("<option/>").val('').text('').appendTo('#'+feld);
1494   for(var i=0; i<data.length; i++) if (data[i][0]==value) $("<option/>").val(data[i][1]).text(data[i][2]).appendTo('#'+feld);
1495   if (value=='') SetAndTriggerChange(feld,''); else for(var i=0; i<data.length; i++) if (value=='' || data[i][0]==value) { SetAndTriggerChange(feld,data[i][1]); break; }
1496}
1497
1498function SetAndTriggerChange(feld, wert)
1499{
1500   $('#'+feld).val(wert);
1501   $('#'+feld).trigger('change');
1502}
1503
1504function ShowEinreichungAnzahl(id, details, hinweise)
1505{
1506   $('#hinweistext').html('');
1507   for(var i=0; i<hinweise.length; i++) if (hinweise[i][0]==id) $('#hinweistext').html(hinweise[i][1]);
1508
1509   $('[class*="rowkey_detail_"]').hide(); 
1510   $('[class*="rowkey_detail_"] input').prop('disabled',true); 
1511   for(var i=0; i<details.length; i++)
1512      if (details[i][0]==id)
1513         for(var k=1; k<details[i].length; k++)
1514         {
1515            $('.rowkey_detail_'+details[i][k]).show();
1516            $('.rowkey_detail_'+details[i][k]+' input').prop('disabled',false); 
1517            $('#key_detail_'+details[i][k]).prop('disabled',false);
1518         }
1519}
1520
1521function DeleteAllFinal()
1522{
1523   if (confirm('Wirklich endgültig löschen?')) { SetForm1Value('action','members_deleteallfinal'); Form1Submit(); }
1524}
1525
1526function ReaktiviereAll()
1527{
1528   if (confirm('Wirklich reaktivieren?')) { SetForm1Value('action','members_list'); SetForm1Value('cmd','saveactivate'); Form1Submit(); }
1529}
1530
1531function AnonymisierenAll()
1532{
1533   if (confirm('Wirklich anonymisieren?')) { SetForm1Value('action','members_anonymisierenall'); Form1Submit(); }
1534}
1535
1536function DeleteAll()
1537{
1538  if (confirm('Wirklich löschen?')) { SetForm1Value('action','members_deleteall'); Form1Submit(); }
1539}
1540
1541function LockAll()
1542{
1543   if (confirm('Wirklich sperren?')) { SetForm1Value('action','members_lockall'); Form1Submit(); }
1544}
1545
1546function ShowOnMap()
1547{
1548   SetForm1Value('action','members_map'); OpenNewWindow(0,0);
1549}
1550
1551function CopyAdresse(src, dst)
1552{
1553   $('#'+dst+'_strasse').val($('#'+src+'_strasse').val());
1554   $('#'+dst+'_plz').val($('#'+src+'_plz').val());
1555   $('#'+dst+'_ort').val($('#'+src+'_ort').val());
1556   $('#'+dst+'_land').val($('#'+src+'_land').val());
1557   if (dst=='r') $('#'+dst+'_firma').val($('#firma').val());
1558   if (dst=='r') $('#'+dst+'_co').val($('#'+src+'_co').val());
1559}
1560
1561function SortiereListe(liste)
1562{
1563   var selElem=document.getElementById(liste);
1564   var tmpAry = new Array();
1565   for (var i=0;i<selElem.options.length;i++) {
1566       tmpAry[i] = new Array();
1567       tmpAry[i][0] = selElem.options[i].text;
1568       tmpAry[i][1] = selElem.options[i].value;
1569   }
1570   tmpAry.sort();
1571   while (selElem.options.length > 0) {
1572       selElem.options[0] = null;
1573   }
1574   for (var i=0;i<tmpAry.length;i++) {
1575       var op = new Option(tmpAry[i][0], tmpAry[i][1]);
1576       selElem.options[i] = op;
1577   }
1578}
1579
1580function MoveFile(id, folder, file, targetfolder, link)
1581{
1582   //alert('./?action=data_raum&id='+id+'&folder='+encodeURIComponent(folder)+'&raumtarget='+id+'&foldertarget='+encodeURIComponent(targetfolder)+'&movefile='+encodeURIComponent(file)+'&mode=&dialog=4'); return;
1583   $.ajax({ type: 'GET', url: './?action=data_raum&utf8=1&id='+id+'&folder='+encodeURIComponent(folder)+'&raumtarget='+id+'&foldertarget='+encodeURIComponent(targetfolder)+'&movefile='+encodeURIComponent(file)+'&mode=&dialog=4', success: function(result) 
1584   {
1585      location.href=link;
1586   } });
1587}
1588
1589function MoveFileAdm(folder, file, targetfolder, link)
1590{
1591   $.ajax({ type: 'GET', url: './?webservice=movefile&folder='+encodeURIComponent(folder)+'&foldertarget='+encodeURIComponent(targetfolder)+'&file='+encodeURIComponent(file), success: function(result) 
1592   {
1593      location.href=link;
1594   } });
1595}
1596
1597function KontoPickerEnable(field,filterart='',webservice='kontopicker')
1598{
1599   $('#kontopicker'+field).autocomplete({
1600    source:
1601     function(request, response)
1602     {
1603       //$('#'+field).val('');
1604       //$('#kontopicker'+field).val('');
1605       $.ajax({ url: './?webservice='+webservice, dataType: 'json', data: { query:encode_utf8(request.term), filterart:filterart }, success: function( data )
1606       {
1607          if (data.length==1)
1608          {
1609             $('#'+field).val(data[0].value);
1610             $('#kontopicker'+field).val(data[0].label);
1611             $('#kontopicker'+field).autocomplete('close');
1612             $('#kontopicker'+field).trigger('change');
1613             KontoPickerAktiv(field,false);
1614          }
1615          else
1616             response( data ); 
1617       } });
1618     },
1619    select: function(event, ui)
1620     {
1621       KontoPickerAktiv(field,false); 
1622       $('#'+field).val(ui.item.value);
1623       $('#kontopicker'+field).val(ui.item.label);
1624       $('#kontopicker'+field).autocomplete('close');
1625       $('#kontopicker'+field).trigger('change');
1626       event.preventDefault(); 
1627     }
1628   });
1629}
1630function KontoPickerExit(field)
1631{
1632   if ($('#'+field).val()=='') $('#kontopicker'+field).val('');
1633}
1634
1635function VAPickerEnable(field, onlyPictures, gruppenid)
1636{
1637   $('#vapicker'+$.escapeSelector(field)).autocomplete({
1638    source:
1639     function(request, response)
1640     {
1641       //$('#'+field).val('');
1642       //$('#vapicker'+field).val('');
1643      if (request.term.length>2)
1644       $.ajax({ url: './?webservice=vapicker&onlyPictures='+onlyPictures+'&gruppenid='+gruppenid, dataType: 'json', data: { query:encode_utf8(request.term) }, success: function( data )
1645       {
1646          if (data.length==1)
1647          {
1648             $('#'+$.escapeSelector(field)).val(data[0].value);
1649             $('#vapicker'+$.escapeSelector(field)).val(data[0].label);
1650             $('#vapicker'+$.escapeSelector(field)).autocomplete('close');
1651             $('#vapicker'+$.escapeSelector(field)).trigger('change');
1652             VAPickerAktiv(field,false);
1653          }
1654          else
1655             response( data ); 
1656       } });
1657     },
1658    select: function(event, ui)
1659     {
1660       VAPickerAktiv(field,false); 
1661       $('#'+$.escapeSelector(field)).val(ui.item.value);
1662       $('#vapicker'+$.escapeSelector(field)).val(ui.item.label);
1663       $('#vapicker'+$.escapeSelector(field)).autocomplete('close');
1664       $('#vapicker'+$.escapeSelector(field)).trigger('change');
1665       event.preventDefault(); 
1666     }
1667   });
1668}
1669function VAPickerExit(field)
1670{
1671   if ($('#'+$.escapeSelector(field)).val()=='') $('#vapicker'+$.escapeSelector(field)).val('');
1672}
1673function VAPickerAktiv(field,aktiv)
1674{
1675   $('#vapicker'+$.escapeSelector(field)).prop('disabled',!aktiv);
1676   $('#vapicker'+$.escapeSelector(field)).trigger('change');
1677}
1678function VAPickerLoeschen(field)
1679{
1680   $('#'+$.escapeSelector(field)).val('');
1681   $('#vapicker'+$.escapeSelector(field)).val('');
1682   VAPickerAktiv(field, true);
1683}
1684
1685function encode_utf8(rohtext)
1686{
1687   rohtext = rohtext.replace(/\r\n/g,"\n");
1688   var utftext = "";
1689   for(var n=0; n<rohtext.length; n++)
1690   {
1691      var c=rohtext.charCodeAt(n);
1692      if (c<128)
1693         utftext += String.fromCharCode(c);
1694      else if((c>127) && (c<2048))
1695      {
1696         utftext += String.fromCharCode((c>>6)|192);
1697         utftext += String.fromCharCode((c&63)|128);
1698      }
1699      else 
1700      {
1701         utftext += String.fromCharCode((c>>12)|224);
1702         utftext += String.fromCharCode(((c>>6)&63)|128);
1703         utftext += String.fromCharCode((c&63)|128);
1704     }
1705  }
1706  return utftext;
1707}
1708
1709function PeoplePickerAktiv(field,aktiv)
1710{
1711   $('#peoplepicker'+field).prop('disabled',!aktiv);
1712}
1713
1714function PeoplePickerEnable(field,typ,m,rech,usercode,px=61,id='')
1715{
1716   $('#peoplepicker'+field).autocomplete({
1717    source:
1718     function( request, response )
1719     {
1720      if (request.term.length>2)
1721       $.ajax({ url: './?webservice=memberpicker', dataType: 'json', data: { query:encode_utf8(request.term), typ:typ, m:m, rech:rech, usercode:encodeURIComponent(usercode), id:id }, success: function(data)
1722       {
1723          if (data.length==1)
1724          {
1725             PeoplePickerAktiv(field,false);
1726             PeopleAddUser(field,data[0].value,data[0].label,px);
1727             $('#peoplepicker'+field).autocomplete('close');
1728          }
1729          else
1730          {
1731             response(data);
1732          }
1733       } });
1734     },
1735    select: function( event, ui ) 
1736     {
1737       PeoplePickerAktiv(field,false); 
1738       PeopleAddUser(field,ui.item.value,ui.item.label,px);
1739       $('#peoplepicker'+field).autocomplete('close');
1740       event.preventDefault(); 
1741     }
1742   });
1743}
1744function PeoplePickerAddUsers(field, target)
1745{
1746   var peoples=document.getElementById('result');
1747   var s=-1; for(var i=0; i<peoples.options.length; i++) if (peoples.options[i].selected) s=peoples.options[i].value;
1748   if (s==-1) { alert('Bitte einen Eintrag auswählen'); return false; }
1749   for(var i=0; i<peoples.options.length; i++)
1750      if (peoples.options[i].selected)
1751         target.PeopleAddUser(field, peoples.options[i].value, peoples.options[i].text);
1752   return true;
1753}
1754function PeopleAddUser(field,id,name,px=61)
1755{
1756   if (field=='profile')
1757   {
1758      $.ajax({ type: 'POST', url: './?webservice=memberdata&id='+id, success: function(result) 
1759      {
1760         eval('werte='+result);
1761         var lst=['firma','g_co','g_strasse','g_plz','g_ort','g_land','g_postfach','g_plz_postfach','g_ort_postfach','g_land_postfach','g_telefon','g_fax','g_mobil','g_email','g_homepage'];
1762         for(itm in lst) $('#'+lst[itm]).val(werte[lst[itm]]);
1763      } });
1764   }
1765   else if (field=='profilere')
1766   {
1767      $.ajax({ type: 'POST', url: './?webservice=memberdata&id='+id, success: function(result) 
1768      {
1769         eval('werte='+result);
1770         var lst=['r_firma','r_co','r_strasse','r_plz','r_ort','r_land','r_email'];
1771         for(itm in lst) $('#'+lst[itm]).val(werte[lst[itm]]);
1772      } });
1773   }
1774   else
1775   {
1776      $('#personloeschen'+field).show();
1777      $('#personoeffnen'+field).show();
1778      $('#peoplepickerinput'+field).css('width','calc(100% - '+px+'px)');
1779      $('#peoplepicker'+field).val(name);
1780      $('#'+field).val(id);
1781      $('#'+field).trigger('change');
1782   }
1783}
1784function PeopleDeleteUser(field, all)
1785{
1786   if (all) $('#peoplepicker'+field).val('');
1787   $('#'+field).val('0');
1788   $('#'+field).trigger('change');
1789   $('#personloeschen'+field).hide();
1790   $('#personoeffnen'+field).hide();
1791   $('#peoplepickerinput'+field).css("width","calc(100% - 26px)");
1792   $('#key_uid').val(''); // Pytis
1793}
1794function PeoplePickerAddUsersMultiple(field, target)
1795{
1796   var peoples=document.getElementById('result');
1797   var s=0; for(var i=0; i<peoples.options.length; i++) if (peoples.options[i].selected) s++;
1798   if (s==0) { alert('Bitte einen Eintrag auswählen'); return false; }
1799   for(var i=0; i<peoples.options.length; i++)
1800      if (peoples.options[i].selected)
1801         PeoplePickerAddUserToList(field, peoples.options[i].value, peoples.options[i].text, target);
1802   PeoplePickerSetPeopleValues(target.document, field);
1803   return true;
1804}
1805function PeoplePickerSetPeopleValues(doc, field)
1806{
1807   var result='';
1808   var peoplepicker=doc.getElementById('peoplepicker'+field);
1809   for(var i=0; i<peoplepicker.options.length; i++) result+=','+peoplepicker.options[i].value;
1810   if (result.length>0) result=result.substring(1);
1811   doc.getElementById(field).value=result;
1812   $(doc).find('#'+field).trigger('change');
1813}
1814function PeoplePickerAddUserToList(field, id, name, target)
1815{
1816   var peopleslist=target.document.getElementById('peoplepicker'+field);
1817   for(var i=0; i<peopleslist.options.length; i++) if (peopleslist.options[i].value==id) return;
1818   target.PeoplePickerAddUser(field,name,id);
1819}
1820function PeoplePickerDeleteUser(field)
1821{
1822   var peoplepicker=document.getElementById('peoplepicker'+field);
1823   if (peoplepicker.selectedIndex<0) { alert('Bitte zuerst Person markieren'); return; }
1824   peoplepicker.options[peoplepicker.selectedIndex]=null;
1825   PeoplePickerSetPeopleValues(document, field);
1826}
1827function PeoplePickerDeleteUserAll(field)
1828{
1829   var peoplepicker=document.getElementById('peoplepicker'+field);
1830   peoplepicker.length = 0;
1831   PeoplePickerSetPeopleValues(document, field);
1832}
1833function PeoplePickerAddUser(field, name, id)
1834{
1835   var peoplepicker=document.getElementById('peoplepicker'+field);
1836   peoplepicker.add(new Option(name,id));
1837   $('#'+field).trigger('change');
1838}
1839function PeoplePickerEdit(field)
1840{
1841   if ($('#'+field).val()=='0' || $('#'+field).val()=='') $('#peoplepicker'+field).val('');
1842}
1843
1844function PeoplePickerAttachFromPicker(field)
1845{
1846   if ($('#personadd'+field).val()!=0)
1847   {
1848      var peoplepicker=document.getElementById('peoplepicker'+field);
1849      peoplepicker.add(new Option($('#peoplepickerpersonadd'+field).val(),$('#personadd'+field).val()));
1850      PeoplePickerSetPeopleValues(document, field);
1851      PeopleDeleteUser('personadd'+field, true);
1852      PeoplePickerAktiv('personadd'+field, true); 
1853   }
1854}
1855
1856function PeoplePickerAttach(field,userid,username)
1857{
1858   var peoplepicker=document.getElementById('peoplepicker'+field);
1859   peoplepicker.add(new Option(username, userid));
1860   PeoplePickerSetPeopleValues(document, field);
1861   PeopleDeleteUser('personadd'+field, true);
1862   PeoplePickerAktiv('personadd'+field, true); 
1863}
1864
1865function VersPickerEnable(field, auswahl)
1866{
1867   $('#verspicker'+field).autocomplete({
1868    source:
1869     function(request, response)
1870     {
1871       $.ajax({ url: './?webservice=verspicker', dataType: 'json', data: { query:encode_utf8(request.term), auswahl:auswahl}, success: function( data )
1872       {
1873          if (data.length==1)
1874          {
1875             $('#'+field).val(data[0].value);
1876             $('#verspicker'+field).val(data[0].label);
1877             $('#verspicker'+field).autocomplete('close');
1878             $('#'+field).trigger('change');
1879          }
1880          else
1881             response( data ); 
1882       } });
1883     },
1884    select: function(event, ui)
1885     {
1886       $('#'+field).val(ui.item.value);
1887       $('#verspicker'+field).val(ui.item.label);
1888       $('#verspicker'+field).autocomplete('close');
1889       $('#'+field).trigger('change');
1890       event.preventDefault(); 
1891     }
1892   });
1893}
1894function VersPickerSetzeName(field,wert,name)
1895{
1896   $('#'+field).val(wert);
1897   $('#key_versicherungstarif').val('');
1898   $('#'+field).trigger('change');
1899   $('#verspicker'+field).val(name);
1900}
1901
1902function ArtikelPickerEnable(field, pos, typ, angebot, userfield, lagerortid)
1903{
1904   $('#'+field).autocomplete({
1905     source:
1906       function( request, response )
1907       {
1908         $.ajax({ url: './?webservice=artikelpicker&typ='+typ+'&lagerortid='+lagerortid, dataType: 'json', data: { q:request.term }, success: function( data ) { response( data ); } });
1909       },
1910     select: 
1911       function( event, ui ) 
1912       {
1913         var hidetext=$('#keintextlang').prop('checked');
1914         $.ajax({ type: 'POST', url: './?webservice=artikel&id='+ui.item.value+'&a='+angebot+'&userid='+$('#'+userfield).val()+'&pos='+pos+'&nb='+$('#nettobrutto').val()+'&hidetext='+hidetext, success: function(result) 
1915         {
1916            eval('werte='+result);
1917            AngebotsPositionAuswahl(window, pos, werte['bezeichnung'], werte['beschreibung'].replace(/~~~/g,'\r\n'), werte['betrag'], werte['mwst'], werte['nettobrutto'], werte['konto'], werte['artikelid'], werte['preiseB'], werte['preiseN'], werte['kontoname'], werte['veranstaltungid'], werte['lager'], werte['eknetto'], werte['ekbrutto'], werte['rechnungsnummer']);
1918         } });
1919         $('#'+field).autocomplete('close'); 
1920         event.preventDefault();
1921      }
1922   });
1923}
1924
1925function SwitchPreisBruttoNetto(bruttonetto)
1926{
1927   var pos, isGefuellt=false;
1928   for(pos=0; $('#preiseB'+pos).length>0; pos++) if ($('#betrag'+pos).val()!='') isGefuellt=true;
1929   if (isGefuellt) alert('Hinweis: Durch nachträgliches Ändern der brutto/netto-Einstellung müssen bereits eingegebene Preise ggf. manuell korrigiert werden.');
1930
1931   for(pos=0; $('#preiseB'+pos).length>0; pos++)
1932   {
1933      if (bruttonetto==0)
1934      {
1935         $('#preiseB'+pos).show();
1936         $('#preiseN'+pos).hide();
1937      }
1938      else
1939      {
1940         $('#preiseB'+pos).hide();
1941         $('#preiseN'+pos).show();
1942      }
1943   }
1944}
1945
1946function EventKontaktChanged()
1947{
1948   var userid=$('#userid').val();
1949   var grpid=$('#akid').val();
1950   if ((grpid==0 || grpid=='') && (userid==0 || userid==''))
1951      EventKontaktChangedAddUser('','','','','','');
1952   else
1953      $.ajax({ type: 'POST', url: './?webservice=member&art=6', data: 'wert='+userid+'&grpid='+grpid, success: function(result)
1954       {
1955         eval('werte='+result);
1956         EventKontaktChangedAddUser(werte['Name'],werte['Email'],werte['Telefon'],werte['Fax'],werte['Strasse'],werte['Ort']);
1957       }
1958      });
1959}
1960
1961function EventKontaktChangedAddUser(name,email,telefon,fax,strasse,ort)
1962{
1963   $('#kontakt').val(name);
1964   $('#kontaktemail').val(email);
1965   $('#kontakttelefon').val(telefon);
1966   $('#kontaktfax').val(fax);
1967   $('#kontaktstrasse').val(strasse);
1968   $('#kontaktort').val(ort);
1969   $('#anmeldemail').prop('checked',name!='');
1970}
1971
1972function EventSwitchPreis(userid)
1973{
1974   var a='e';
1975   $('.letzterpreisB').html('');
1976   $('.letzterpreisN').html('');
1977   if (userid!=0 && userid!='')
1978      $.ajax({ type: 'POST', url: './?webservice=member&art=2', data: 'wert='+userid, success: function(result)
1979       {
1980         eval('werte='+result);
1981         if (werte['Typ']!=1) a='i';
1982         $('#preisauswahl').val(a);
1983         $('#rechnunggp').val(werte['RechnungGP']);
1984         for(w in werte)
1985         {
1986            if (w.substring(0,13)=='letzterpreisB') $('#letzterB'+w.substring(13)).html(werte[w]);
1987            else if (w.substring(0,13)=='letzterpreisN') $('#letzterN'+w.substring(13)).html(werte[w]);
1988            else if (w.substring(0,10)=='preisnetto') $('#mg'+w).val(werte[w]);
1989            else if (w.substring(0,5)=='preis') $('#mg'+w).val(werte[w]);
1990         }
1991         SwitchPreis(a);
1992       }
1993      });
1994   else
1995   {
1996      //$('#preisauswahl').val(a);
1997      //SwitchPreis(a);
1998   }
1999}
2000
2001
2002function GetCurrency(txt,st=100)
2003{
2004   if (txt=='') return 0;
2005   if (txt.indexOf(':')>=0) { var z=txt.split(':'); return GetCurrency(z[0])+GetCurrency(z[1])/60; }
2006   if (txt.indexOf('.')>=0 && txt.indexOf(',')>=0) txt=txt.replace('.','');
2007   if (txt.indexOf(',')>=0) txt=txt.replace(',','.');
2008   txt=txt.replace(' ','');
2009   var w=parseFloat(txt);
2010   if (w+''=='NaN') w=0;
2011   w=Math.round(w*st)/st;
2012   return w;
2013}
2014
2015function SetzeInBezahlung(form, cmd, text)
2016{
2017   if (confirm(text+'?'))
2018   {
2019      SetFormValue(form, 'action', 'kasse_buchung');
2020      SetFormValue(form, 'cmd', cmd);
2021      FormSubmit(form); 
2022   }
2023}
2024
2025// zweck und renr enthalten keine "-"/Leerzeichen-Zeichen und sind kleingeschrieben
2026function ScharferReCheck(zweck, renr)
2027{
2028   if (renr=='') return false;
2029   return zweck.toLowerCase().indexOf(renr.toLowerCase())>=0;
2030}
2031function UnscharferReCheck(zweck, renr)
2032{
2033   while (renr.length>0) if (renr.substring(0,1)<'0' || renr.substring(0,1)>'9') renr=renr.substring(1); else break;
2034   return ScharferReCheck(zweck, renr);
2035}
2036
2037function EnableProgrammpunkte(wert, liste)
2038{
2039   $('.programmpunkt').hide();
2040   for(var n=0; n<liste.length; n++) if (liste[n][0]==wert) if (liste[n][1].length==0) $('.programmpunkt').show(); else for(var k=0; k<liste[n][1].length; k++) $('.pp'+liste[n][1][k]).show();
2041   $('.programmpunkt input:checkbox:hidden').prop('checked',false);
2042}
2043
2044function SetzeAnwesend(id,nr,activ,del)
2045{
2046   $.ajax({ type: 'GET', url: './?action=events_anwesend&id='+id+'&nr='+nr+'&ret=no', success: function(result) { } });
2047   if (del) { $('#row'+id).remove(); return; }
2048   var txt=activ?'<B>anwesend</B>&nbsp;':'';
2049   txt=txt+'<A HREF="#" onclick="javascript:SetzeAnwesend('+id+','+nr+','+(!activ?'true':'false')+','+(del?'true':'false')+');return false;">'+(activ?'[nicht&nbsp;anwesend]':'[Anwesend]')+'</A>';
2050   $('#anwesend'+id+'-'+nr).html(txt);
2051}
2052
2053function SetzeBezahlt(anmeldeid, rechnungid, renr, betrag)
2054{
2055   if (confirm('Die Rechnung '+renr+' auf Bar-bezahlt setzen?'))
2056   {
2057      $.ajax({ type: 'GET', url: './?action=events_barzahlung&id='+rechnungid+'&aid='+anmeldeid, success: function(result) { if (result=='1') $('.row'+anmeldeid).addClass('bezahlt'); } });
2058      $('#rechnungstatus'+rechnungid).html('<b>bezahlt</b>');
2059      $('#rechnungart'+rechnungid).html('Bar');
2060      $('#rechnunglink'+rechnungid).hide();
2061      $('#rechnungbezahlt'+rechnungid).html('(bereits bezahlt: '+betrag+')');
2062   }
2063}
2064
2065function Platzbelegung(div, userid, platzid, beginn, ende, intervall, buchungsart, usercode)
2066{
2067   var status=$(div).hasClass('platzbuchungstatusfrei')?1:0;
2068   if (intervall=='*' && status==1) { var tage=prompt('Anzahl Tage'); if (tage=='' || tage+''=='null') return; ende=ende+(tage-1)*24*3600; }
2069   if (status==0) if (!confirm('Möchte Sie die Buchung wirklich stornieren?')) return;
2070   if (status==1) if (!confirm('Wirklich buchen?')) return;
2071   ShowLightBox();
2072   $.ajax({ type: 'GET', url: './?webservice=platz&platz='+status+','+userid+','+platzid+','+beginn+','+ende+'&usercode='+usercode, success: function(result) 
2073   {
2074      CloseLightBox();
2075      if (result.substring(0,6)=='error:') { alert(result.substring(6)); }
2076      else if (result=='frei') { alert("Die Buchung wurde storniert."); $(div).removeClass('platzbuchungstatusmein'); $(div).removeClass('platzbuchungstatusbelegt'); $(div).addClass('platzbuchungstatusfrei'); $(div).html(''); }
2077      else if (result.substring(0,5)=='mein:') { if (intervall=='*') window.reloadMain(); else { $(div).removeClass('platzbuchungstatusfrei'); $(div).addClass('platzbuchungstatusmein'); $(div).html(result.substring(5)); } }
2078      else if (result.substring(0,7)=='belegt:') { alert(result.substring(7)); }
2079      else alert(result+"..."+result.substring(0,3));
2080
2081      if (buchungsart!='') window.location.reload();
2082      if (intervall=='woche:sa1400sa1000') window.location.reload();
2083   } });
2084}
2085
2086//--------------- DropFiles
2087var DropFields=[];
2088function Form1Submit()
2089{
2090   ResetDirty();
2091   ShowLightboxSubmit();
2092   if (DropFields.length==0) DirectForm1Submit(); else DropZoneSubmit(DirectForm1Submit);
2093}
2094
2095function DirectForm1Submit()
2096{
2097   if ($('.signaturepadcanvas').length>0) PadSave();
2098   var frm1=document.getElementById('form1');
2099   if (frm1) frm1.submit();
2100   SetForm1Value('print','');
2101}
2102
2103var DropZoneFiles={};
2104var DropZoneSubmitFunction;
2105var DropZoneCnt=0;
2106var DropZoneSubmitted=0;
2107// wird 1x pro Feld aufgerufen
2108function DropZoneInit(feldname, dateiloeschen, message)
2109{
2110   if (Dropzone.isBrowserSupported())
2111   {
2112      DropFields.push(feldname);
2113      $('div#droparea'+feldname).dropzone(
2114      {
2115         url: "./?webservice=upload",
2116         dictDefaultMessage: message,
2117         autoProcessQueue: false,
2118         parallelUploads: 100,
2119         uploadMultiple: true,
2120         addRemoveLinks: true,
2121         dictRemoveFile: dateiloeschen,
2122         getFallbackForm: function() { return null; }
2123      });
2124
2125      Dropzone.forElement('div#droparea'+feldname).on("success", function(file, serverFileName)
2126      {
2127         DropZoneFiles[feldname] = DropZoneFiles[feldname] + (DropZoneFiles[feldname]==''?'':'|') + file.name + "=" + serverFileName.replace('\n','');
2128      });
2129      Dropzone.forElement('div#droparea'+feldname).on("removedfile", function(file)
2130      {
2131         DropZoneFiles[feldname]=RemoveDropZoneFile(DropZoneFiles[feldname],file.name);
2132      });
2133      Dropzone.forElement('div#droparea'+feldname).on("queuecomplete", function()
2134      {
2135         $('#dropfiles'+feldname).val(DropZoneFiles[feldname]);
2136         DropZoneSubmitted++;
2137         if (DropZoneSubmitted>=DropZoneCnt) { DropFields=[]; DropZoneSubmitFunction(); }
2138      });
2139      DropZoneFiles[feldname] = '';
2140   }
2141   else
2142      $('div#droparea'+feldname).hide();
2143}
2144
2145function RemoveDropZoneFile(files, filename)
2146{
2147   var p;
2148   p=files.indexOf('|'+filename+'=');
2149   if (p>=0) { var p2=files.indexOf('|',p+1); if (p2<0) return files.substr(0,p); else return files.substr(0,p)+files.substr(p2); }
2150   p=files.indexOf(filename+'=');
2151   if (p==0) { var p3=files.indexOf('|'); if (p3<0) return ''; else return files.substr(p3+1); }
2152   return files;
2153}
2154
2155function DropZoneSubmit(submitfkt)
2156{
2157   DropZoneSubmitFunction = submitfkt;
2158   DropZoneCnt=0;
2159   var dropzone, files;
2160   if (Dropzone.isBrowserSupported())
2161   {
2162      for(var i=0; i<DropFields.length; i++)
2163      {
2164         $('#dropfiles'+DropFields[i]).val(DropZoneFiles[DropFields[i]]); 
2165         dropzone = Dropzone.forElement('#droparea'+DropFields[i]);
2166         if (dropzone==null) continue;
2167         files = dropzone.getQueuedFiles();
2168         if (files.length>0) DropZoneCnt++;
2169      }
2170      for(var i=0; i<DropFields.length; i++)
2171      {
2172         $('#dropfiles'+DropFields[i]).val(DropZoneFiles[DropFields[i]]); 
2173         dropzone = Dropzone.forElement('#droparea'+DropFields[i]);
2174         if (dropzone==null) continue;
2175         files = dropzone.getQueuedFiles();
2176         if (files.length == undefined) continue;
2177         if (files.length == 0) continue;
2178         dropzone.processQueue();
2179      }
2180   }
2181   if (DropZoneCnt==0) { DropFields=[]; DropZoneSubmitFunction(); }
2182}
2183//--------------- /DropFiles
2184
2185
2186
2187var FileSelectCount=100;
2188function FileSelectAdd(field, target)
2189{
2190   var frm1=document.getElementById('form1');
2191   for(i=0; i<frm1.elements.length; i++)
2192   {
2193      if (frm1.elements[i].name.substring(0,5)=="file_" && frm1.elements[i].checked)
2194      {
2195         var val=frm1.elements[i].value;
2196         if (val.indexOf('|')>=0)
2197         {
2198            var data=val.split('|');
2199            target.FileSelectAddFile(field, data[0], data[1], data[2], data[3], data[3]);
2200         }
2201         else
2202            target.FileSelectAddFile(field, GetForm1Element('grpname').value, GetForm1Element('id').value, GetForm1Element('folder').value, frm1.elements[i].name.substring(5), val);
2203      }
2204   }
2205}
2206function FileSelectAddFile(field,grpname,id,folder,file,name)
2207{
2208   //alert(field+' / '+grpname+' / '+id+' / '+folder+' / '+file+' / '+name);
2209   $('#datenablage'+field).show();
2210   FileSelectCount++;
2211   //$('#datenablage'+field).html($('#datenablage'+field).html()+'<div>aus Datenablage: '+name+' <A HREF="#" onclick="javascript:$(this).parent().remove();return false;">[entfernen]</A><INPUT type="hidden" name="datenablage'+field+'_'+FileSelectCount+'" value="'+id+'|'+folder+'|'+file+'"></div>');
2212   var inputid='datenablage'+field+FileSelectCount;
2213   var spalte1=(grpname==''?'Basiskonfiguration: ':'Datenablage: '+grpname+', ')+folder+(folder==''?'':'/')+'<A HREF="?action=data_raum&id='+id+'&folder='+encodeURIComponent(folder)+'&download='+encodeURIComponent(name)+'">'+name+'</A>';
2214   var ch="'";
2215   var spalte2='<A HREF="#" onclick="javascript:$('+ch+'#'+inputi
2215d+ch+').val('+ch+ch+');$('+ch+'#datenablagerownew'+FileSelectCount+ch+').hide();return false;"><i class="bi bi-x-circle" title="Entfernen"></i></A>';
2216   var input='<INPUT type="hidden" id="'+inputid+'" name="'+inputid+'" value="'+id+'|'+folder+'|'+file+'">';
2217   $('#datenablage'+field+'link').html($('#datenablage'+field+'link').html()+'<tr id="datenablagerownew'+FileSelectCount+'"><td>'+spalte1+'</td><td>'+spalte2+input+'</td></tr>');
2218}
2219
2220function FileSelectSet(field, target, value)
2221{
2222   target.FileSelectSetFile(field, value);
2223}
2224function FileSelectSetFile(field, value)
2225{
2226   var el=document.getElementById(field);
2227   if (el) el.value=value;
2228   $('#'+field).val(value);
2229}
2230
2231function SwitchSprache(feld, sprache, tiny)
2232{
2233   var spzuvor=$('#'+feld+'_sprache').val();
2234   if (spzuvor==sprache) return;
2235   if (tiny!=false)
2236   {
2237      $('#'+feld+'_'+spzuvor).val(tiny.getContent());
2238      tiny.setContent($('#'+feld+'_'+sprache).val());
2239   }
2240   else
2241   {
2242      $('#'+feld+'_'+spzuvor).val($('#'+feld).val());
2243      $('#'+feld).val($('#'+feld+'_'+sprache).val());
2244   }
2245   $('#'+feld+'_sprache').val(sprache);
2246   $('#'+feld+'_sprachelink'+sprache).css('height',20);
2247   $('#'+feld+'_sprachelink'+spzuvor).css('height',14);
2248}
2249
2250function SwitchTextHtml(f, feld)
2251{
2252   if ($(f).prop('checked'))
2253     SetEditorContent('tiny'+feld, $('#'+feld+'_text').val());
2254   else
2255     $('#'+feld+'_text').val(GetEditorContent('tiny'+feld));
2256   ShowHide('#'+feld+'_div1', !$(f).prop('checked'));
2257   ShowHide('#'+feld+'_div2', $(f).prop('checked'));
2258}
2259
2260function ProgrammPunkteDisable(vaids,grp)
2261{
2262   for(var i=0; i<vaids.length; i++)
2263   {
2264      $('#programmpunkt'+vaids[i]+grp).prop('checked',false);
2265      $('#anmeldeoptionenprogrammpunkt'+vaids[i]+grp).hide();
2266   }
2267}
2268
2269function ProgrammpunkteDisableAbmeldung(wrt)
2270{
2271   $('input.programmpunkt').prop('disabled',wrt==1);
2272   if (wrt==1) $('input.programmpunkt').prop('checked',false);
2273
2274   $.each( $("input,select"), function(key, value)
2275   {
2276      if ($(this).attr('name')!=undefined && $(this).attr('name').indexOf('key_')>=0) { $(this).prop('disabled',wrt==1); if (wrt==1) $(this).val(''); }
2277   });
2278
2279   // ext. Begleiter deaktivieren
2280   ShowHide('.rowbegleiter',wrt!=4);
2281   if (wrt==4) $.each( $("div[id^='begleiter']"), function(key, value) { var id=parseFloat($(this).attr("id").substr(9)); if (id>0 && id<1000) $(this).remove(); } );
2282}
2283
2284function ProgrammPunkteShowOptionen(enabled,ppid)
2285{
2286   if (enabled)
2287      $('#anmeldeoptionen'+ppid).show();
2288   else
2289      $('#anmeldeoptionen'+ppid).hide();
2290}
2291
2292function ProgrammPunkteMaxCheck(enabled,ppid,vaids,grp,maxpps)
2293{
2294   if (enabled)
2295   {
2296      var cnt=0;
2297      for(var i=0; i<vaids.length; i++) if ($('#programmpunkt'+vaids[i]+grp).prop('checked')) cnt++;
2298      if (cnt>maxpps) { alert('Es dürfen maximal '+maxpps+' Programmpunkte gewählt werden!'); $('#'+ppid).prop('checked',false); }
2299   }
2300}
2301
2302function ProgrammPunkteAlle(cls)
2303{
2304   $(cls+':visible').each(function() { $(this).prop('checked',true); $(this).trigger('change'); });
2305}
2306
2307
2308function ProgrammPunkteKeiner(cls)
2309{
2310   $(cls+':visible').each(function() { $(this).prop('checked',false); $(this).trigger('change'); });
2311}
2312
2313function FilterLuftRoute()
2314{
2315   var l=$('#filterluft').val();
2316   var r=$('#filterroute').val();
2317   for (var i=0; i<entfernung.length; i++)
2318   {
2319      var sh=(l!='' && entfernung[i][1]<=parseInt(l)) || (r!='' && entfernung[i][2]<=parseInt(r)) || (l=='' && r=='');
2320      if (!sh) $('#user'+entfernung[i][0]).prop('checked', false);
2321      if (sh) $('#spanuser'+entfernung[i][0]).show(); else $('#spanuser'+entfernung[i][0]).hide();
2322   }
2323}
2324
2325function AngebotsPositionAuswahl(wnd, pos, txt, txtlang, betrag, mwst, nettobrutto, konto, artikelid, preiseB, preiseN, kontoname, veranstaltungid, lager, eknetto, ekbrutto, rechnungsnummer)
2326{
2327   var el;
2328
2329   betrag=GetKommaZahlWert(betrag);
2330   el=wnd.document.getElementById('nettobrutto');
2331   if (el!=null && el!='undefined') if (el.value=='n' && nettobrutto=='b' && mwst>0) betrag=Math.round(100*betrag*100/(100+parseFloat(mwst)))/100;
2332   if (el!=null && el!='undefined') if (el.value=='b' && nettobrutto=='n' && mwst>0) betrag=Math.round(100*betrag*(100+parseFloat(mwst))/100)/100;
2333
2334   var hidetext=$('#keintextlang').prop('checked');
2335   el=wnd.document.getElementById('text'+pos); if (el!=null && el!='undefined') el.value=txt;
2336   if (!hidetext) { el=wnd.document.getElementById('textlang'+pos); if (el!=null && el!='undefined') el.value=txtlang; }
2337   el=wnd.document.getElementById('betrag'+pos); if (el!=null && el!='undefined') el.value=betrag;
2338   el=wnd.document.getElementById('mwst'+pos); if (el!=null && el!='undefined') el.value=mwst;
2339   el=wnd.document.getElementById('nettobrutto'+pos); if (el!=null && el!='undefined') el.value=nettobrutto;
2340   el=wnd.document.getElementById('kontodetailskonto'+pos); if (el!=null && el!='undefined') el.value=konto;
2341   el=wnd.document.getElementById('kontopickerkonto'+pos); if (el!=null && el!='undefined') el.value=kontoname;
2342   el=wnd.document.getElementById('kontopickerbkonto'+pos); if (el!=null && el!='undefined') el.value=kontoname;
2343   el=wnd.document.getElementById('konto'+pos); if (el!=null && el!='undefined') el.value=konto;
2344   el=wnd.document.getElementById('bkonto'+pos); if (el!=null && el!='undefined') el.value=konto;
2345   if (!hidetext) { el=wnd.document.getElementById('spantext'+pos); if (el!=null && el!='undefined') if (txtlang.length>0) el.style.display=''; }
2346   el=wnd.document.getElementById('artikelid'+pos); if (el!=null && el!='undefined') el.value=artikelid;
2347   el=wnd.document.getElementById('veranstaltungid'+pos); if (el!=null && el!='undefined') el.value=veranstaltungid;
2348   if (nettobrutto=='n') { $('#preiseB'+pos).hide(); $('#preiseN'+pos).show(); } else { $('#preiseB'+pos).show(); $('#preiseN'+pos).hide(); } 
2349   $('#preiseB'+pos).html(preiseB);
2350   $('#preiseN'+pos).html(preiseN);
2351   $('#lager'+pos).html(lager);
2352   $('#preise'+pos).html(betrag);
2353   $('#betrag'+pos).trigger('change');
2354   $('#ekbrutto'+pos).val(ekbrutto);
2355   $('#eknetto'+pos).val(eknetto);
2356   if (rechnungsnummer!='' && rechnungsnummer!=undefined) $('#rechnungsnummer').val(rechnungsnummer);
2357
2358   el=wnd.document.getElementById('betrag'+pos);
2359   $(el).trigger('change');
2360}
2361
2362function StdAktionAuswahl(wnd, feldname, txt, trigger)
2363{
2364   var el=wnd.document.getElementById(feldname);
2365   if (el!=null && el!='undefined')
2366   {
2367      if (txt!='') el.value=el.value+(el.value==''?'':'\n')+txt;
2368      if (trigger) { $(el).trigger('change'); wnd.SetDirtyDirect(); }
2369   }
2370}
2371
2372function UpdateColors(layoutAlt, layoutNeu)
2373{
2374   if (layoutAlt==layoutNeu) return;
2375   if (layoutAlt=='ResponsiveV5-B' && layoutNeu=='ResponsiveV5') return;
2376   if (layoutAlt=='ResponsiveV5' && layoutNeu=='ResponsiveV5-B') return;
2377   if (layoutAlt=='ResponsiveV4-B' && layoutNeu=='ResponsiveV4') return;
2378   if (layoutAlt=='ResponsiveV4' && layoutNeu=='ResponsiveV4-B') return;
2379
2380   var primaer=$('#templatePrimaer').val();
2381   var color=$('#templatePrimaerCol').val();
2382   var sekundaer=$('#templateSekundaer').val();
2383   var colorSekundaer=$('#templateSekundaerCol').val();
2384
2385   ColorsClear();
2386   SetPriColor(window, layoutNeu, primaer, color, sekundaer, colorSekundaer);
2387}
2388
2389function SetPriColor(wnd, layout, primaer, color, sekundaer, colorSekundaer)
2390{
2391   if (primaer!='') $(wnd.document.getElementById('primaer')).css('background-color', primaer).css('color', color);
2392   if (primaer!='') $(wnd.document.getElementById('templatePrimaer')).val(primaer);
2393   if (primaer!='') $(wnd.document.getElementById('templatePrimaerCol')).val(color);
2394   $(wnd.document.getElementById('sekundaer')).css('background-color', sekundaer).css('color', colorSekundaer);
2395   $(wnd.document.getElementById('templateSekundaer')).val(sekundaer);
2396   $(wnd.document.getElementById('templateSekundaerCol')).val(colorSekundaer);
2397   if (layout=='ResponsiveV3') return;
2398
2399   SetLayoutColor(wnd, 'TopColFarbe', primaer);
2400   SetLayoutColor(wnd, 'NavColFarbe', primaer); SetLayoutColor(wnd, 'NavBackFarbe', color);
2401   SetLayoutColor(wnd, 'NavActBackFarbe', primaer); SetLayoutColor(wnd, 'NavActColFarbe', color);
2402   SetLayoutColor(wnd, 'NavHovBackFarbe', sekundaer); SetLayoutColor(wnd, 'NavHovColFarbe', colorSekundaer);
2403   SetLayoutColor(wnd, 'BtnHovBackFarbe', sekundaer); SetLayoutColor(wnd, 'BtnHovColFarbe', colorSekundaer);
2404   SetLayoutColor(wnd, 'BtnBackFarbe', primaer); SetLayoutColor(wnd, 'BtnColFarbe', color);
2405   SetLayoutColor(wnd, 'H1ColFarbe', primaer);
2406   SetLayoutColor(wnd, 'H2ColFarbe', primaer);
2407   SetLayoutColor(wnd, 'LinkColFarbe', primaer);
2408   SetLayoutColor(wnd, 'LinkHovColFarbe', sekundaer);
2409   SetLayoutColor(wnd, 'THBackFarbe', primaer); SetLayoutColor(wnd, 'THColFarbe', color);
2410   SetLayoutColor(wnd, 'FootColFarbe', primaer);
2411
2412   if (layout=='ResponsiveV5' || layout=='ResponsiveV5-B')
2413   {
2414      SetLayoutColor(wnd, 'Nav1ColFarbe', primaer);
2415      SetLayoutColor(wnd, 'Nav1ActColFarbe', sekundaer);
2416      SetLayoutColor(wnd, 'Nav1HovColFarbe', sekundaer);
2417      SetLayoutColor(wnd, 'Nav2BackFarbe', sekundaer); SetLayoutColor(wnd, 'Nav2ColFarbe', primaer);
2418      SetLayoutColor(wnd, 'Nav2ActBackFarbe', primaer); SetLayoutColor(wnd, 'Nav2ActColFarbe', sekundaer);
2419      SetLayoutColor(wnd, 'Nav2HovBackFarbe', primaer); SetLayoutColor(wnd, 'Nav2HovColFarbe', sekundaer);
2420   }
2421   else
2422   {
2423      SetLayoutColor(wnd, 'Nav1ActBackFarbe', sekundaer); SetLayoutColor(wnd, 'Nav1ActColFarbe', colorSekundaer);
2424      SetLayoutColor(wnd, 'Nav1HovBackFarbe', sekundaer);SetLayoutColor(wnd, 'Nav1HovColFarbe', colorSekundaer);
2425      SetLayoutColor(wnd, 'Nav2ColFarbe', primaer);
2426      SetLayoutColor(wnd, 'Nav2ActBackFarbe', sekundaer);
2427      SetLayoutColor(wnd, 'Nav2HovColFarbe', sekundaer);
2428   }
2429}
2430
2431function SetLayoutColor(wnd, feld, col)
2432{
2433   if (col=='') return;
2434   $(wnd.document.getElementById('template'+feld)).css('background-color', col).val(col);
2435   $(wnd.document.getElementById('template'+feld)).next().find('.Icon .Color').css('background-color', col);
2436}
2437
2438function ColorsClear()
2439{
2440   $("input[name^='template'].colorPicker").val('').css('background-color','#ffffff').next().find('.Icon .Color').css('background-color', '#ffffff');
2441   $('#primaer').css('background-color','#ffffff').css('color','#000000');
2442   $('#sekundaer').css('background-color','#ffffff').css('color','#000000');
2443}
2444
2445function StdAktionImage(wnd, feldname, file)
2446{
2447   var el=wnd.document.getElementById(feldname);
2448   if (el!=null && el!='undefined') $(el).html('<IMG src="" style="height:200px;max-width:100%;">');
2449   if (el!=null && el!='undefined') $(el).html('<IMG src="'+file+'" style="height:200px;max-width:100%;">');
2450}
2451
2452function SaveHierarchie(gruppenid)
2453{
2454   var result='';
2455   $('.minus:visible').each(function() { result=result+$(this).attr('name')+'~~~'; });
2456   if (result=='') result='-';
2457   $.ajax({ type: 'GET', url: './?webservice=hierarchie&gruppenid='+gruppenid+'&status='+encodeURIComponent(result) });
2458}
2459
2460function FileSelectorFindInput(elem)
2461{
2462   while (elem!=undefined && elem.tagName.toLowerCase()!='input') elem=elem.children[0];
2463   return elem;
2464}
2465
2466function FileSelectorFindDiv(elem, start)
2467{
2468   while (elem!=undefined && elem.parentNode!=undefined && !(elem.tagName.toLowerCase()=='div' && elem.id.substring(0,start.length)==start)) elem=elem.parentNode;
2469   return elem.id.substring(start.length); 
2470}
2471
2472function SendLogin(form)
2473{
2474   if (form=='') form='formlogin';
2475   var frm1=document.getElementById(form);
2476   var el=frm1.elements['usertoken'];
2477   if (el) 
2478   {
2479      SetFormValue(form,'usertoken',md5(GetFormValue(form,'userpassword')));
2480      SetFormValue(form,'userpassword','');
2481   }
2482   DirectFormSubmit(form);
2483}
2484
2485function CheckAndSendLogin(form)
2486{
2487   if (form=='') form='formlogin';
2488   var frm1=document.getElementById(form);
2489   var elUsr=frm1.elements['userlogin'];
2490   var data='userlogin='+encodeURIComponent(elUsr.value);
2491   var pwd=GetFormValue(form,'userpassword');
2492   var el=frm1.elements['usertoken'];
2493   if (el) 
2494   {
2495      var hash=md5(pwd);
2496      data=data+'&usertoken='+hash;
2497      SetFormValue(form,'usertoken',hash);
2498      SetFormValue(form,'userpassword','');
2499   }
2500   else
2501      data=data+'&userpassword='+encodeURIComponent(pwd);
2502   $('#loginerror').hide();
2503   $.ajax({ type: 'POST', url: './?webservice=checklogin', data: data, success: function(result)
2504     {
2505        if (result=='ok') DirectFormSubmit(form); else { $('#loginerror').html(result); $('#loginerror').show(); }
2506     }
2507   });
2508}
2509
2510function AuswahlPDFSektion(sektion)
2511{
2512   $('.adminpdflink').removeClass('adminpdfauswahl');
2513   $('.adminpdflink').addClass('adminpdf');
2514   $('#lnk'+sektion).removeClass('adminpdf');
2515   $('#lnk'+sektion).addClass('adminpdfauswahl');
2516
2517   var alt=$('#current').val();
2518   if (alt!='-') $('#sekname'+alt).val($('#sekname').val());
2519   if (alt!='-') $('#toolbox'+alt).html($('#sekname').val());
2520   var inhalt=$('#pdf').val();
2521   if (alt!='-') $('#sek'+alt).val(inhalt);
2522   if (alt!='-') $('#lnk'+alt+' A').css('font-weight', inhalt==''?'normal':'bold');
2523   if (alt!='-' && inhalt=='') $('#lnk'+sektion).addClass('ohne');
2524   if (alt!='-' && inhalt!='') $('#lnk'+sektion).removeClass('ohne');
2525   
2526   $('#sekname').val($('#sekname'+sektion).val());
2527   $('#pdf').val($('#sek'+sektion).val());
2528
2529   $('#current').val(sektion);
2530}
2531
2532function SpeichernPDFSektion()
2533{
2534   var alt=$('#current').val();
2535   if (alt!='-') $('#sekname'+alt).val($('#sekname').val());
2536   if (alt!='-') $('#sek'+alt).val($('#pdf').val());
2537}
2538
2539function ErsetzeBeitraege(id)
2540{
2541   $.ajax({ type: 'GET', url: './?webservice=ersetzebeitraege&id='+id, success: function(result) 
2542   {
2543      $('#userbeitraege').html(result);
2544   } });
2545}
2546
2547function ErsetzeMitgliedInListe(id)
2548{
2549   $.ajax({ type: 'GET', url: './?webservice=ersetzemitgliedinliste&id='+id, success: function(result) 
2550   {
2551      $('#row'+id).html(result);
2552   } });
2553}
2554
2555function ErsetzeFlexDatensatzInListe(module,listenid,dataid)
2556{
2557   $.ajax({ type: 'GET', url: './?webservice=ersetzeflexdatensatzinliste&module='+module+"&listenid="+listenid+'&dataid='+dataid, success: function(result) 
2558   {
2559      $('#row'+dataid).html(result);
2560   } });
2561}
2562
2563function ErsetzeGruppeInListe(id,offsetisgrp)
2564{
2565   $.ajax({ type: 'GET', url: './?webservice=gruppeninfo&id='+id, success: function(result) 
2566   {
2567      var data=result.split('\n');
2568      $('#row'+id+' TD:nth-child(1)').html(data[0]);
2569      if (offsetisgrp==1) $('#row'+id+' TD:nth-child(2)').html(data[5]);
2570      $('#row'+id+' TD:nth-child('+(2+offsetisgrp)+')').html(data[1]);
2571      $('#row'+id+' TD:nth-child('+(3+offsetisgrp)+') A').html(data[2]);
2572      $('#row'+id+' TD:nth-child('+(4+offsetisgrp)+')').html(data[3]);
2573      $('#row'+id+' TD:nth-child('+(5+offsetisgrp)+')').html(data[4]);
2574   } });
2575}
2576
2577function ErsetzeVARaeume(vids,id)
2578{
2579   $.ajax({ type: 'GET', url: './?webservice=ersetzevaraeume&vids='+vids+(id==0?'':'&id='+id), success: function(result) 
2580   {
2581      $('#veranstaltungraeume').html(result);
2582   } });
2583}
2584
2585function ErsetzeVAProgrammpunkte(vid)
2586{
2587   $.ajax({ type: 'GET', url: './?webservice=ersetzevaprogrammpunkte&id='+vid, success: function(result) 
2588   {
2589      $('#veranstaltungprogrammpunkte').html(result);
2590   } });
2591}
2592
2593function CheckMaxDetails(cls,max)
2594{
2595   var cnt=$('.row_'+cls).length;
2596   if (cnt>max) { alert('Die maximale Positionenzahl von '+max+' ist bereits erreicht'); return false; }
2597   return true;
2598}
2599
2600// divKEY, KEY0
2601function ItemsAddLine(key)
2602{
2603   var elem=$('#'+key+'0').clone();
2604   var cnt=1; while ($('#'+key+cnt).length>0) cnt++;
2605   elem.show();
2606   ItemsSetIDLine(elem,key,cnt,true);
2607   elem.appendTo('#div'+key);
2608   return cnt;
2609}
2610function ItemsRemoveLine(key,nr)
2611{
2612   var elem=$('#'+key+nr);
2613   elem.hide();
2614   ItemsSetIDLine(elem,key,nr,true);
2615}
2616function ItemsSetIDLine(elem,key,nr,setdelete)
2617{
2618   elem.attr('id',key+nr);
2619   elem.find('input:not([type]), input[type=text], input[type=hidden], textarea, select').each(function(index, value) {
2620     var name=$(this).attr('name');
2621     name=name.substr(0,name.length-1)+nr;
2622     $(this).attr('name',name);
2623     $(this).attr('id',name);
2624     $(this).val('');
2625     if ($(this).attr('onclick')) $(this).attr('onclick',$(this).attr('onclick').replace('konto0','konto'+nr).replace('konto0','konto'+nr));
2626     if ($(this).attr('onchange')) $(this).attr('onchange',$(this).attr('onchange').replace('konto0','konto'+nr).replace('konto0','konto'+nr));
2627   });
2628   elem.find('input[type=checkbox]').each(function(index, value) {
2629     var name=$(this).attr('name');
2630     name=name.substr(0,name.length-1)+nr;
2631     $(this).attr('name',name);
2632   });
2633   elem.find('span.spantext, span.preise').each(function(index, value) {
2634     var id=$(this).attr('id');
2635     id=id.substr(0,id.length-1)+nr;
2636     $(this).attr('id',id);
2637   });
2638   if (setdelete)
2639      elem.find('.weblink').each(function(index, value) {
2640         $(this).attr('onclick',"javascript:ItemsRemoveLine('"+key+"','"+nr+"');return false;");
2641      });
2642   elem.find('a.toggle').each(function(index, value) {
2643     $(this).attr('onclick',"javascript:Toggle('spantext"+nr+"');return false;");
2644   });
2645   elem.find('a.angebotspos').each(function(index, value) {
2646     $(this).attr('onclick',$(this).attr('onclick').replace('&pos=0','&pos='+nr));
2647     $(this).attr('href',$(this).attr('href').replace('&pos=0','&pos='+nr));
2648   });
2649   elem.find('a.kontopicker').each(function(index, value) {
2650     $(this).attr('onclick',$(this).attr('onclick').replace('konto0','konto'+nr).replace('konto0','konto'+nr));
2651     $(this).attr('href',$(this).attr('href').replace('konto0','konto'+nr).replace('konto0','konto'+nr));
2652   });
2653   elem.find('select.kontopicker').each(function(index, value) {
2654     $(this).attr('onchange',$(this).attr('onchange').replace('konto0','konto'+nr).replace('konto0','konto'+nr));
2655   });
2656}
2657
2658function ZuordnenReset()
2659{
2660    $('.sammelcheckbox').prop('checked',false);
2661    $('.ruecklastcheck').prop('checked',false);
2662}
2663
2664function ShowPassendeBuchungen(betrag, iban, zweck, checkmnr)
2665{
2666   var cls='betrag'+(betrag>=0?'P':'N')+round2(betrag>=0?betrag*100:-betrag*100);
2667   var ok=false;
2668   $('.offenebuchung').hide();
2669
2670   if (zweck.length>0) $('.offenebuchung').each( function()
2671   {
2672      if ($(this).attr('renr')!='') if (ScharferReCheck(zweck, $(this).attr('renr'))) { $(this).show(); ok=true; }
2673   });
2674
2675   if (!ok && zweck.length>0) $('.offenebuchung').each( function()
2676   {
2677      if ($(this).attr('renr')!='') if (UnscharferReCheck(zweck, $(this).attr('renr'))) { $(this).show(); ok=true; }
2678   });
2679
2680   if (!ok && iban.length>0) $('.offenebuchung').each( function()
2681   {
2682      if ($(this).attr('iban1')!='') if ($(this).attr('iban1')==iban) { $(this).show(); ok=true; }
2683      if ($(this).attr('iban2')!='') if ($(this).attr('iban2')==iban) { $(this).show(); ok=true; }
2684   });
2685
2686   if (!ok && zweck.length>0 && checkmnr) $('.offenebuchung').each( function()
2687   {
2688      if ($(this).attr('minr')!='') if (ScharferReCheck(zweck, $(this).attr('minr'))) { $(this).show(); ok=true; }
2689   });
2690
2691   //if (!ok && zweck.length>0) $('.offenebuchung').each( function()
2692   //{
2693   //   if ($(this).attr('minr')!='') if (UnscharferReCheck(zweck, $(this).attr('minr'))) { $(this).show(); ok=true; }
2694   //});
2695
2696   if (!ok) $('.'+cls).show();
2697}
2698
2699function IsEnter(evn)
2700{
2701   if (window.event && window.event.keyCode == 13) return true; // IE
2702   if (evn && evn.keyCode == 13) return true; // FireFox
2703   return false;
2704}
2705
2706function enterPressed(evn)
2707{
2708   if (IsEnter(evn)) form1.submit();
2709}
2710function enterPressed2(evn)
2711{
2712   if (IsEnter(evn)) form2.submit();
2713}
2714function enterPressedForm(evn,form)
2715{
2716   if (IsEnter(evn)) document.getElementById(form).submit();
2717}
2718function enterPressedFormDirty(evn,form)
2719{
2720   if (IsEnter(evn)) { if (DirtyMessage()) document.getElementById(form).submit(); evn.preventDefault(); }
2721}
2722function enterAvoid(evn)
2723{
2724   if (IsEnter(evn)) evn.preventDefault();
2725}
2726
2727function CheckBegleiter(check,mindestbegleiter,checkgeburtstag,msg,anredePflicht,alspflicht,begleiteremailpflicht)
2728{
2729   var cnt=0,fehler=0;
2730   if (anredePflicht)
2731      $.each( $("select[name^='anrede']:visible"), function(key, value) { if ($(this).attr('name')!='anrede') { var leer=$(this).val().trim()==''; if (check) $(this).css('background-color',leer?'#FFA0A0':''); else if (leer) $(this).val('-'); if (leer) fehler++; } });
2732   $.each( $("input[name^='nachname']:visible"), function(key, value) { if ($(this).attr('name')!='nachname') { var leer=$(this).val().trim()==''; if (check) $(this).css('background-color',leer?'#FFA0A0':''); else if (leer) $(this).val('-'); cnt++; if (leer) fehler++; } });
2733   $.each( $("input[name^='vorname']:visible"), function(key, value) { if ($(this).attr('name')!='vorname') { var leer=$(this).val().trim()==''; if (check) $(this).css('background-color',leer?'#FFA0A0':''); else if (leer) $(this).val('-'); if (leer) fehler++; } });
2734   if (checkgeburtstag)
2735      $.each( $("input[name^='geburtstag']:visible"), function(key, value) { if ($(this).attr('name')!='geburtstag') { var leer=$(this).val().trim()==''; if (check) $(this).css('background-color',leer?'#FFA0A0':''); else if (leer) $(this).val('-'); if (leer) fehler++; } });
2736   if (alspflicht)
2737      $.each( $("select[name^='begleitungals']:visible"), function(key, value) { if ($(this).attr('name')!='begleitungals') { var leer=$(this).val().trim()==''; if (check) $(this).css('background-color',leer?'#FFA0A0':''); else if (leer) $(this).val('-'); if (leer) fehler++; } });
2738   if (begleiteremailpflicht)
2739      $.each( $("input[name^='email']:visible"), function(key, value) { if ($(this).attr('name')!='email') { var leer=$(this).val().trim()==''; if (check) $(this).css('background-color',leer?'#FFA0A0':''); else if (leer) $(this).val('-'); if (leer) fehler++; } });
2740   if (mindestbegleiter>0) if (cnt<mindestbegleiter) { alert('Bitte mindestens '+mindestbegleiter+' Teilnehmer anmelden'); return false; }
2741   if (!check) return true;
2742   if (fehler>0) alert(msg);
2743   return fehler==0;
2744}
2745
2746var ddstartindex;
2747function BoxDragStart(event,ui)
2748{
2749   ddstartindex=ui.item.index();
2750}
2751
2752function BoxDragStop(event,ui)
2753{
2754   if ($(this).attr('id')==ui.item.parent().attr('id'))
2755   {
2756      // gleiche Spalte
2757      BoxDragMove(ui.item.attr('id'), $(this).attr('id'), ui.item.index(), ddstartindex+1);
2758   }
2759}
2760
2761function BoxDragReceive(event,ui)
2762{
2763   // wechsel Spalte
2764   BoxDragMove(ui.item.attr('id'), $(this).attr('id'), ui.item.index(), 0);
2765}
2766
2767function BoxDragMove(id, block, pos, vorpos)
2768{
2769   //alert('ID '+id+', Block '+block+', Pos '+pos+', Vor '+vorpos);
2770   $.ajax({ type: 'GET', dataType: 'json', url: './?webservice=movewebpart&id='+id.substring(2)+'&block='+block.substring(7)+'&pos='+pos+'&vor='+vorpos});
2771}
2772
2773function BoxDragDrop()
2774{
2775   var d='';
2776   $.each( $('.webpartbox'), 
2777      function(key, value) 
2778      {
2779         d=d+value.id+': ';
2780         $.each( $(this).children('div'), 
2781            function(key2, value2) 
2782            {
2783               d=d+', '+value2.id;
2784            }
2785         );
2786         d=d+'\n';
2787      }
2788   );
2789   alert(d);
2790}
2791
2792function KasseNeuePosition(mwst, konto)
2793{
2794   var p=ItemsAddLine('position');
2795   $('#nettobrutto'+p).val("b");
2796   $('#mwst'+p).val(mwst);
2797   $('#position'+p+' td:first').html(p+1);
2798   KontoPickerSetze('konto'+p,konto);
2799   ArtikelPickerEnable('text'+p,p,'*','','mitglied',0);
2800   KontoPickerEnable('konto'+p);
2801}
2802
2803function KontenNeuePosition()
2804{
2805   var p=ItemsAddLine('zeile');
2806   KontoPickerEnable('konto'+p);
2807   $('#zeile'+p+' td:nth-child(3)').html('');
2808   $('#zeile'+p+' td:nth-child(4)').html('');
2809}
2810
2811function CalcBruttoNetto(feldbetrag, feldmwst)
2812{
2813   var mwst=GetKommaZahl(feldmwst); if (mwst==0) return;
2814   var betrag=GetKommaZahl(feldbetrag); 
2815   var brutto=$('#checkbetragbrutto').prop('checked'); 
2816   if (brutto) betrag=betrag*(100+mwst)/100; else betrag=betrag*100/(100+mwst);
2817   betrag=round3(betrag);
2818   $('#'+feldbetrag).val(betrag); 
2819}
2820
2821function TaskAddLink(quelle, ziel, el)
2822{
2823   $.ajax({ type: 'GET', url: './?webservice=task&quelle='+quelle+'-'+ziel, success: function(result) 
2824   {
2825      if (result[0]=='#') alert(result.substring(1)); else el.html(result);
2826   } });
2827}
2828
2829function ErgaenzeFelder(listenid, id, nr)
2830{
2831   $.ajax({ type: 'GET', dataType: 'json', url: './?webservice=listendaten&listenid='+listenid+'&id='+id+'&nr='+nr, success: function(result) 
2832   {
2833      $('#firma').val(result.name);
2834      if (result.strasse==undefined) $('#g_strasse').val(''); else $('#g_strasse').val(result.strasse+' '+result.hausnummer);
2835      $('#g_plz').val(result.plz);
2836      $('#g_ort').val(result.gemeinde);
2837      $('#g_telefon').val(result.telefon);
2838      if (id!=0) $('#key_DstNr').val(result.nr);
2839      if (id==0) $('#key_DstSchl').val(result.id);
2840   } });
2841}
2842
2843function EntferneDatenablageFile(key,nr)
2844{
2845   $('#datenfile'+key+'_'+nr).hide();
2846   $('#datenablage'+key+'_000'+nr).val('');
2847}
2848
2849var extrafilecontrolnr = {};
2850function AddExtraFile(name)
2851{
2852   if (extrafilecontrolnr[name]==undefined) extrafilecontrolnr[name]=1; else extrafilecontrolnr[name]=extrafilecontrolnr[name]+1;
2853   var elem = document.getElementById('div'+name+'0').cloneNode(true);
2854   ClearExtraFile(name,elem,extrafilecontrolnr[name],'block');
2855   document.getElementById('div'+name+'root').appendChild(elem);
2856}
2857function RemoveExtraFile(name,nr)
2858{
2859   var elem = document.getElementById('div'+name+nr);
2860   ClearExtraFile(name,elem,nr,'none');
2861}
2862function ClearExtraFile(name,elem,nr,display)
2863{
2864   elem.id='div'+name+nr;
2865   elem.style.display=display;
2866   var elem1=FileSelectorFindInput(elem);
2867   elem1.name=name+'_'+nr;
2868   elem1.id=elem1.name;
2869   if (display=='none') $(elem).html('');
2870}
2871
2872function EventLoadExtrafields(userid, rechnunggp, vid)
2873{
2874   if (userid==0) { $('#firma').val(''); $('#strasse').val(''); $('#ort_plz').val(''); $('#ort_ort').val(''); $('#ort_land').val(''); $('#telefonnummer').val(''); $('#email').val(''); return; }
2875   $("input[type='radio']").css('padding','100px');
2876   $.ajax({ url: './?webservice=eventanmelden', dataType: 'json', data: { id:userid, rechnunggp:rechnunggp, vid:vid }, success: function( data )
2877   {
2878      for(var n=0; n<data.length; n++)
2879      {
2880         if (data[n].key.substr(0,4)=='key_')
2881         {
2882            $("input[name='"+data[n].key+"'][type='radio'][value='"+data[n].value+"']").prop('checked',true);
2883            $("input[name='"+data[n].key+"'][type='checkbox'][value='"+data[n].value+"']").prop('checked',true);
2884            $("input[name='"+data[n].key+"'][type='text']").val(data[n].value);
2885            $("input[name='"+data[n].key+"']:not([type])").val(data[n].value);
2886            $("select[name='"+data[n].key+"']").val(data[n].value);
2887         }
2888         else
2889         {
2890            var feld=data[n].key;
2891            if (feld=='telefon') feld='telefonnummer';
2892            if (feld=='plz' || feld=='ort' || feld=='land') feld='ort_'+feld;
2893            $('#'+feld).val(data[n].value);
2894         }
2895      }
2896   } });
2897}
2898
2899function AddGppAuswahl(id, name)
2900{
2901   $("<option/>").val(id).text(name).appendTo('#adressauswahl');
2902   $('#adressauswahl').val(id);
2903   $('#adressauswahl').trigger('change');
2904
2905   $("<option/>").val(id).text(name).appendTo('#adressauswahlliefer');
2906}
2907
2908function TriggerChange()
2909{
2910   $('#mitglied').trigger('change');
2911}
2912
2913function CheckEinwilligung(txt, id)
2914{
2915   if ($('#'+id).prop('checked')) return true;
2916   alert(txt);
2917   return false;
2918}
2919
2920function checkCookie_eu()
2921{
2922   var consent = getCookie_eu("cookies_consent");
2923   if (consent == null || consent == "" || consent == undefined) $('#cookie_directive_container').show();
2924}
2925
2926function setCookie_eu(c_name,value,exdays)
2927{
2928   setCookie(c_name,value,exdays);
2929   $('#cookie_directive_container').hide('slow');
2930}
2931
2932function setCookie(c_name,value,exdays)
2933{
2934    var exdate = new Date();
2935    exdate.setDate(exdate.getDate() + exdays);
2936    var c_value = encodeURIComponent(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
2937    document.cookie = c_name + "=" + c_value+"; path=/";
2938    //alert(c_name + "=" + c_value+"; path=/");
2939}
2940
2941function getCookie_eu(c_name)
2942{
2943    var i,x,y,ARRcookies=document.cookie.split(";");
2944    for (i=0;i<ARRcookies.length;i++)
2945    {
2946        x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
2947        y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
2948        x=x.replace(/^\s+|\s+$/g,"");
2949        if (x==c_name) return unescape(y);
2950    }
2951}
2952
2953function WeiteresElementHinzufuegen(id, pos, elementnr, dialog)
2954{
2955   $.ajax({ type: 'GET', url: './?webservice=htmlelement&id='+id+'&pos='+pos+'&elementnr='+elementnr+'&dialog='+dialog, success: function(result) 
2956   {
2957      var parent=$('#elementneu'+id+'-'+elementnr).parent();
2958      $('#elementneu'+id+'-'+elementnr).hide();
2959      parent.append(result);
2960   } });
2961}
2962
2963function SpaltenAusblenden(liste,etcbeginn)
2964{
2965   for(i=0; i<liste.length; i++) $('table.table.responsivetable td:not(.listaktionen):nth-child('+(liste[i]+etcbeginn)+')').hide();
2966   for(i=0; i<liste.length; i++) $('table.table.responsivetable th:not(.listaktionen):nth-child('+(liste[i]+etcbeginn)+')').hide();
2967}
2968function SpalteAusblenden(col,tag,etcbeginn)
2969{
2970   var c=col-etcbeginn;
2971   $('table.table.responsivetable td:nth-child('+col+')').hide();
2972   $('table.table.responsivetable th:nth-child('+col+')').hide();
2973   $.ajax({ type: 'GET', url: './?webservice=setcookie&col='+c+'&tag='+tag });
2974}
2975function SpaltenEinblenden(tag)
2976{
2977   $('table.table.responsivetable td').show();
2978   $('table.table.responsivetable th').show();
2979   $.ajax({ type: 'GET', url: './?webservice=setcookie&col=-&tag='+tag });
2980}
2981
2982function ShowSammel(zt)
2983{
2984   OpenRegister(3,'');
2985   $('#sammel_'+zt).prop('checked',true);
2986   Recalc();
2987}
2988
2989function ShowOffeneRe(ids)
2990{
2991   OpenRegister(1,'');
2992   var id=ids[0];
2993   $('#offenerechnungen .offenebuchung').hide();
2994   $('#offenerechnungen .offrecheckbox').prop('checked',false);
2995   $('#row'+id).show();
2996   $('#row'+id+' .offrecheckbox').prop('checked',true);
2997}
2998
2999function ShowRuecklast(liste)
3000{
3001   OpenRegister(4,'');
3002   for(i=0; i<liste.length; i++) $('#rueck'+liste[i]).prop('checked',true).trigger('click');
3003   $('.ruecklistrow').hide();
3004   for(i=0; i<liste.length; i++) $('.ruecklistrow'+liste[i]).show();
3005   $('#ruecklastalle').show();
3006}
3007
3008function BerechneRuecklast(ibanre,ibanprofil)
3009{
3010   var su=0;
3011   $.each( $(".ruecklastcheck:checked"), function(key, value) { su+=parseFloat($(this).val()); });
3012   $('#rueckbetraggebuehr').html((parseFloat($('#rueckbetrag').html())-su).toFixed(2))
3013   if (ibanre==ibanprofil)
3014   {
3015      $('#rueckzahlart1').val('1');
3016      $('#rueckzahlart2').val('1');
3017      $('.rueckibans').html((ibanre==''?'':'<FONT color="red">'+ibanre+' = IBAN Originalrechnung = IBAN aktuelles Mitgliederprofil</FONT>'));
3018   }
3019   else
3020   {
3021      $('#rueckzahlart1').val('3');
3022      $('#rueckzahlart2').val('3');
3023      $('.rueckibans').html((ibanre==''?'':'<FONT color="red">'+ibanre+' = IBAN Originalrechnung</FONT><BR>')+(ibanprofil==''?'':'<FONT color="green">'+ibanprofil+' = IBAN aktuelles Mitgliederprofil</FONT>'));
3024   }
3025}
3026
3027function ShowRuecklastAlle()
3028{
3029   $('.ruecklistrow').show();
3030   $('#ruecklastalle').hide();
3031}
3032
3033function ResetRuecklast()
3034{
3035   OpenRegister(1,'');
3036   $('.ruecklistrow').show();
3037   $('#ruecklastalle').hide();
3038}
3039
3040function Kollisionswarner(el)
3041{
3042   if (el.value!='') $.ajax({ type: 'GET', url: './?webservice=kollisionswarner&datum='+el.value, success: function(result) { $('#kollisionswarner').html(result); } });
3043}
3044
3045function GetGuiUpdate(data, selector, fkt)
3046{
3047   $(selector).html('<IMG SRC="https://www.vereinonline.org/admin/img/ajax.gif">');
3048   $.ajax({ type: 'GET', url: './?webservice=gui&act='+data, success: function(result)
3049   {
3050      if (result=='##') return;
3051      $(selector).html(result);
3052      if (fkt) fkt();
3053      if (selector=='#postfachmail') SetMaxHeight('#postfachmailbody');
3054      if (selector=='#chatview') { SetMaxHeight('#chatviewmessages'); ScrollToEnd('chatviewmessages'); }
3055   } });
3056}
3057
3058function InfoHide()
3059{
3060   $('#infoxxx').hide();
3061}
3062
3063function SetTreeSelection(id, element)
3064{
3065   $('#'+id+' A').css('background-color','');
3066   $(element).css('background-color','#e0e0e0');
3067}
3068
3069function SetzePostfachStatus(id, status, art, postfachid)
3070{
3071   if (status==0) SetMbxCommand('ungelesen',postfachid,art,id);
3072   if (status==1) SetMbxCommand('gelesen',postfachid,art,id);
3073   if (status==2) SetMbxCommand('delete',postfachid,art,id);
3074}
3075
3076function ShowGelesen(postfach,uid,open)
3077{
3078   if ($('.row'+uid).hasClass('ungelesengruen')) ShowPostfachPostfachMark(postfach,-1);
3079   if (open) { $('#mainlistbody TR').removeClass('mailopen'); $('.row'+uid).addClass('mailopen'); }
3080   $('.row'+uid).removeClass('ungelesengruen');
3081}
3082
3083function ShowUngelesen(postfach,uid)
3084{
3085   if (!$('.row'+uid).hasClass('ungelesengruen')) ShowPostfachPostfachMark(postfach,1);
3086   $('.row'+uid).removeClass('mailopen');
3087   $('.row'+uid).addClass('ungelesengruen');
3088}
3089
3090function SetMbxCommand(cmd,postfach,art,uid)
3091{
3092   //alert('./?webservice=mbxcommand&cmd='+cmd+'&postfach='+postfach+'&art='+art+'&id='+uid);
3093   $.ajax({ type: 'GET', url: './?webservice=mbxcommand&cmd='+cmd+'&postfach='+postfach+'&art='+art+'&id='+uid });
3094   if (cmd=='gelesen') { ShowGelesen(postfach,uid,false); }
3095   if (cmd=='ungelesen') { ShowUngelesen(postfach,uid); }
3096   if (cmd=='delete') { $('.row'+uid).remove(); $('#postfachmail').html(''); }
3097   if (cmd=='moveinbox') { $('.row'+uid).remove(); $('#postfachmail').html(''); }
3098}
3099
3100function SetzePostfachStatusList(ids, status, art, postfachid)
3101{
3102   for(i=0; i<ids.length; i++) SetzePostfachStatus(ids[i], status, art, postfachid);
3103}
3104
3105function SetzePostfachStatusISZ(id, status, folderid, postfachid)
3106{
3107   $.ajax({ type: 'GET', url: './?webservice=postfachstatus&id='+id+'&status='+status+'&folderid='+folderid+'&postfachid='+postfachid, success: function(result) { ShowPostfachFolderMark(folderid, result); } });
3108   if (status==0) $('.row'+id).removeClass('mailopen').addClass('ungelesengruen');
3109   if (status==1) $('.row'+id).removeClass('mailopen').removeClass('ungelesengruen');
3110   if (status==2) $('.row'+id).remove();
3111   if (status==3) $('.row'+id).remove();
3112}
3113
3114function SetzePostfachStatusListISZ(ids, status, folderid, postfachid)
3115{
3116   for(i=0; i<ids.length; i++) SetzePostfachStatusISZ(ids[i], status, folderid, postfachid);
3117}
3118
3119function UpdatePostfachFolderMark(folderid, postfachid)
3120{
3121   var list=$('#postfach_postfach'+postfachid+'-'+folderid);
3122   $.ajax({ type: 'GET', url: './?webservice=postfachstatus&id=0&folderid='+folderid+'&postfachid='+postfachid+(list.length>0?'&cmd=html':''), success: function(result)
3123   {
3124      if (list.length>0)
3125      {
3126         var html=result.substr(result.indexOf(',')+1);
3127         result=result.substr(0, result.indexOf(','));
3128         if (html!='')
3129         {
3130            var selector='#postfach_postfach'+postfachid+'-'+folderid+' tbody';
3131            if ($(selector+' tr').length>0)
3132               $(html).insertBefore(selector+' tr:nth-child(1)');
3133            else
3134               $(html).appendTo(selector);
3135            ActivateDragDrop();
3136         }
3137      }
3138      ShowPostfachFolderMark(folderid, result); 
3139   } });
3140}
3141
3142function ShowPostfachFolderMark(folderid, cnt)
3143{
3144   $('#marker'+folderid).html(cnt); if (cnt==0) $('#marker'+folderid).hide(); else $('#marker'+folderid).show();
3145}
3146
3147function ShowPostfachPostfachMark(postfachid, delta)
3148{
3149   var cnt=parseInt($('.markerpostfach'+postfachid).html())+delta;
3150   $('.markerpostfach'+postfachid).html(cnt); if (cnt<=0) $('.markerpostfach'+postfachid).hide(); else $('.markerpostfach'+postfachid).show();
3151}
3152
3153function SendKontaktMailWeb(webpartid)
3154{
3155   $.ajax({ type: 'POST', url: './?webservice=sendkontaktmail', data:$('#formkontakt'+webpartid).serialize(), success: function(result)
3156   {
3157      $('#mailresult'+webpartid).html(result); if (result.indexOf('errorbox')<0) $('#mailformular'+webpartid).hide();
3158   } });
3159}
3160
3161function SaveMailZuordnung()
3162{
3163   $.ajax({ type: 'POST', url: './', data:$('#formmail').serialize() });
3164}
3165
3166function LoadmitglieddataSignatur(itm)
3167{
3168   var signatur='';
3169   if (itm!=0)
3170   {
3171      $.ajax({ type: 'POST', url: './?webservice=member&art=1', data: 'wert='+itm, success: function(result)
3172      {
3173         eval('werte='+result);
3174         signatur=werte['signatur'];
3175         signatur=signatur.replace(/~~~/g, "<br>\r\n");
3176         if (signatur=='') signatur=$('#signaturstandard').val();
3177         tinyMCE.get('edt2').setContent(signatur);
3178      } });
3179   }
3180   else
3181   {
3182      signatur=$('#signaturstandard').val();
3183      tinyMCE.get('edt2').setContent(signatur);
3184   }
3185}
3186
3187function ShowNachRechtsLink(cls)
3188{
3189   //alert(cls + ', ' + $(cls).width()+' < '+$('#mainlist').width());
3190   ShowHide('#nachrechts', $(cls).width()<$('#mainlist').width());
3191}
3192function ScrollRechts(element)
3193{
3194   var l=$(element).scrollLeft();
3195   $(element).animate({ scrollLeft: l+400 }, 'fast');
3196}
3197
3198function TanAbsenden(art)
3199{
3200   var tan=$('#tan').val();
3201   $.ajax({ type: 'GET', url: './?webservice=tanabsenden&tan='+tan+'&ts='+$('#ts').val() });
3202   if (art==1) $('#taneingabedata').html('TAN '+tan+' gespeichert<br><br>'); else  $('#taneingabedata').html('Bestätigung gespeichert<br><br>');
3203   $('#eingabe').hide();
3204   ResetDirty();
3205}
3206
3207function TestFkt()
3208{
3209   $.ajax({ type: 'GET', url: './?webservice=testfkt', success: function(result) { alert(result); } });
3210}
3211
3212function ForumNotify(enable, id, ext)
3213{
3214   $.ajax({ type: 'GET', url: './?webservice=forumnotify&cmd='+(enable?'add':'remove')+'&id='+id+'&ext='+ext });
3215}
3216
3217function SaveMitgliedBemerkung(id)
3218{
3219   var bem=$('#bemerkung').val();
3220   $.ajax({ type: 'POST', url: './?webservice=savemitgliedbemerkung&id='+id, data:$('#bem').serialize(), success: function(result) { alert('Bemerkung wurde gespeichert'); } });
3221}
3222
3223var expertenanzahl=0;
3224function Expertensuche(nr,chiro)
3225{
3226   $('#expertensuche').show();
3227   $('#expertebutton1').hide();
3228   $('#expertebutton2').show();
3229   if (expertenanzahl<nr) expertenanzahl=nr;
3230   expertenanzahl++;
3231   var elem=$('#experte_0').clone();
3232   elem.show();
3233   ItemsSetIDLine(elem,'experte_',expertenanzahl,true);
3234   elem.appendTo('#expertensuche');
3235   if (chiro) $('#expertefeld'+expertenanzahl).val('mitgliedsnummer');
3236   $('#expertefkt'+expertenanzahl).val('=');
3237   $('#expertewert'+expertenanzahl).focus();
3238}
3239
3240function ExperteDelete(element)
3241{
3242   var id=element.parent().parent().parent().attr('id');
3243   if (id.indexOf('_')>0) id=id.substr(id.indexOf('_')+1, 99);
3244   $('#expertefeld'+id).val('');
3245   element.parent().parent().parent().hide();
3246}
3247
3248
3249function KopiereRabatt(currency)
3250{
3251   var row;
3252   var std=$('#stdrabatt').val();
3253   for(row=0; row<=1000; row++) if ($('#anz'+row).length>0) $('#rabatt'+row).val(std);
3254   Rechnungssumme(currency);
3255}
3256
3257function Rechnungssumme(currency)
3258{
3259   var su=0, row, rab, gewinn=0;
3260   for(row=0; row<=1000; row++)
3261      if ($('#anz'+row).length>0)
3262      {
3263         var wrt=$('#anz'+row).val();
3264         var z=GetKommaZahlWert(wrt);
3265         var vk=GetKommaZahl('betrag'+row);
3266         if (vk!=0 && wrt=='') { z=1; $('#anz'+row).val('1'); }
3267         if (z!=0)
3268         {
3269            var r=$('#rabatt'+row).val();
3270            if (r.length>0)
3271            { 
3272               if (r.substring(r.length-1)=='%') rab=vk*GetKommaZahlWert(r.substring(0,r.length-1))/100; else rab=GetKommaZahl('rabatt'+row)/z;
3273               vk-=rab;
3274               $('#rabattbetrag'+row).html(rab==0?'':'-'+FormatEuro(rab,currency)+' / Stk.<BR>='+FormatEuro(vk,currency)+' / Stk');
3275            }
3276            var nb=$('#nettobrutto').val();
3277            var ek=nb=='n'?$('#eknetto'+row).val():$('#ekbrutto'+row).val();
3278            if (ek>0 && ek>vk)
3279               $('#gewinnwarnung'+row).html('<DIV style="background-color:red;color:white;padding:3px;margin-right:7px;">Achtung: Verlust von '+FormatEuro(ek-vk,currency)+' pro Stück</DIV>');
3280            else
3281               $('#gewinnwarnung'+row).html('');
3282            su=su+round2(z*vk);
3283            if (ek>0) gewinn=gewinn+z*(vk-ek);
3284         }
3285      }
3286   $('#summe').html(su==0?'':'Summe: '+FormatEuro(su,currency));
3287   $('#gewinnwarnung').html();
3288   if (gewinn<0)
3289      $('#gewinnwarnung').html('<SPAN style="background-color:red;color:white;padding:3px;margin-left:20px;">Gesamt-Verlust: '+FormatEuro(-gewinn,currency)+'</SPAN>');
3290   else if (gewinn>0)
3291      $('#gewinnwarnung').html('<SPAN style="background-color:lightgreen;padding:3px;margin-left:20px;">Gesamt-Gewinn: '+FormatEuro(gewinn,currency)+'</SPAN>');
3292   else
3293      $('#gewinnwarnung').html('');
3294}
3295
3296function Belegsumme(currency)
3297{
3298   var su=0,row;
3299   for(row=1; row<=25; row++) if ($('#betrag'+row).length>0) su+=GetKommaZahl('betrag'+row)*($('#einaus'+row).val()=='-'?-1:1);
3300   $('#summe').html(su==0?'':'Summe: '+FormatEuro(su,currency));
3301}
3302
3303function Aufgabensumme(stundensatz, kmsatz, currency, rows)
3304{
3305   var summestd=0, summeeuro=0, summekm=0, summekmeuro=0, row;
3306   for(row=1; row<=rows; row++)
3307   {
3308      if ($('#stunden'+row).length>0)
3309      {
3310         var z=GetKommaZahl('stunden'+row);
3311         if (z!=0) { summestd+=z, summeeuro+=z*stundensatz; }
3312      }
3313      if ($('#km'+row).length>0)
3314      {
3315         var z=GetKommaZahl('km'+row);
3316         if (z!=0) { summekm+=z, summekmeuro+=z*kmsatz; }
3317      }
3318   }
3319   $('#summestd').html(summestd==0?'':summestd+' Std.');
3320   $('#summeeuro').html(summeeuro==0?'':summeeuro+' '+currency);
3321   $('#summekm').html(summekm==0?'':summekm+' km');
3322   $('#summekmeuro').html(summekmeuro==0?'':summekmeuro+' '+currency);
3323}
3324
3325function OpenFancybox(id)
3326{
3327  $(document).fancybox({
3328     'autoScale': true,
3329     'transitionIn': 'elastic',
3330     'transitionOut': 'elastic',
3331     'speedIn': 500,
3332     'speedOut': 300,
3333     'autoDimensions': true,
3334     'centerOnScroll': true,
3335     'href' : id+' [data-fancybox]'
3336  });
3337}
3338
3339function ReloadKalender(url, sekunden, ajax)
3340{
3341   if (ajax) $.ajax({ type: 'GET', url: url, success: function(result) { $('#divkalender').html($(result).find('#divkalender').html()); } });
3342   window.setTimeout(function() { ReloadKalender(url, sekunden, true); }, sekunden*1000);
3343}
3344
3345function SetzeRechte(alle)
3346{
3347   $('select').each(function(index, value)
3348   {
3349      if ($(this).attr('id').indexOf('kosten')>0 || $(this).attr('id').indexOf('visible')>0) return;
3350      if (alle) { var l=$(this).find('option').length; if ($(this).attr('id').indexOf('membersGeb')>0) l=2; var p=$(this).find('option:nth-child('+l+')').val(); $(this).val(p); } else $(this).val('');
3351   });
3352}
3353
3354function EnableIsDirty()
3355{
3356   $('input').on('keypress', function() { SetDirty($(this).attr('name')); });
3357   $('input').on('change', function() { SetDirty($(this).attr('name')); });
3358   $('textarea').on('keypress', function() { isDirty=true; });
3359   $('textarea').on('change', function() { isDirty=true; });
3360   $('select').on('change', function() { SetDirty($(this).attr('name')); });
3361   //echo "  $(window).on('beforeunload', function() { if (isDirty) return 'Achtung, Daten nicht gespeichert!'; });\n";
3362}
3363function SetDirty(name)
3364{
3365   if (name==undefined) return;
3366   if (name.substr(0,4)!='fake' && name!='suche' && name!='strukt1' && name!='strukt2' && name!='strukt3') { isDirty=true; }
3367}
3368function SetDirtyDirect()
3369{
3370   isDirty=true;
3371}
3372function ResetDirty()
3373{
3374   isDirty=false;
3375}
3376function DirtyMessage()
3377{
3378   if (isDirty) return confirm('Wirklich ohne speichern schließen ?');
3379   return true;
3380}
3381
3382function RolleMarkieren(feld)
3383{
3384//alert('o');
3385//   $(feld).css('padding','10px');
3386   $(feld).css('background-color','#c0ffc0');
3387}
3388
3389function EventSetBegeiter(w)
3390{
3391   ShowHide('.rowmaxbegleiter',w!=4 && w!=7 && w!=8 && w!=3 && w!=10 && w!=13 && w!=14);
3392}
3393
3394function FeldJBHLE(id)
3395{
3396   if (id==0 || id=='') return;
3397   $.ajax({ type: 'POST', url: './?webservice=memberdata&id='+id, success: function(result) 
3398   {
3399      eval('werte='+result);
3400      if ($('#key_organisation').val()=='') $('#key_organisation').val(werte['firma']);
3401      if ($('#key_anrede').val()=='') $('#key_anrede').val(werte['anrede']);
3402      if ($('#key_vorname').val()=='') $('#key_vorname').val(werte['vorname']);
3403      if ($('#key_nachname').val()=='') $('#key_nachname').val(werte['nachname']);
3404      if ($('#key_strasse').val()=='') $('#key_strasse').val(werte['g_strasse']);
3405      if ($('#key_plz').val()=='') $('#key_plz').val(werte['g_plz']);
3406      if ($('#key_ort').val()=='') $('#key_ort').val(werte['g_ort']);
3407      if ($('#key_telefon').val()=='') $('#key_telefon').val(werte['g_telefon']);
3408      if ($('#key_mobil').val()=='') $('#key_mobil').val(werte['g_mobil']);
3409      if ($('#key_geburtsdatum').val()=='') $('#key_geburtsdatum').val(werte['geburtstag']);
3410      if ($('#key_email').val()=='') $('#key_email').val(werte['g_email']);
3411   } });
3412}
3413
3414function SucheFLAnsicht(id, code, sort)
3415{
3416   var suche=encodeURIComponent($('#suche'+id).val());
3417   $('#flexansicht'+id).html('<I>Suche läuft...</I><BR><BR><IMG SRC="/admin/img/ajax.gif">');
3418   $.ajax({ type: 'GET', url: './?webservice=sucheflansicht&id='+id+'&code='+code+'&suche'+id+'='+suche+'&sort='+sort, success: function(result) { $('#flexansicht'+id).html(result); } });
3419}
3420
3421function KeyCheck(e)
3422{
3423   var keycode;
3424   if (window.event) keycode = window.event.keyCode; else if (e) keycode = e.which; else return true;
3425   if (47 < keycode && keycode < 58) return true; // Zahlen
3426   var kcok = new Array(8, 10, 13, 46, 58, 0); // Steuerzeichen
3427   while (kcok.length > 0) { if (keycode == kcok.pop()) return true; }
3428   return false;
3429}
3430
3431function TableSuche(tableid, suche, headerzeilen)
3432{
3433   if (suche=='') { $('#'+tableid+' .suchenach').val(''); $('#'+tableid+' .suchealles').hide(); $('#'+tableid+' tr').show(); $('.spaltenanzeige').hide(); return; }
3434   $('#'+tableid+' .suchealles').show();
3435   $('#'+tableid+' tr').each(function(index, value)
3436   {
3437      if (index>=headerzeilen) if ($(this).html().toLowerCase().indexOf(suche.toLowerCase())>=0) $(this).show(); else $(this).hide();
3438   });
3439}
3440
3441function TableSucheList(tableid, suche, headerzeilen)
3442{
3443   if (suche=='') { $('#'+tableid+' .suchenach').val(''); $('#'+tableid+' .suchealles').hide(); $('#'+tableid+' tr').show(); $('.spaltenanzeige').hide(); return; }
3444   $('#'+tableid+' .suchealles').show();
3445   $('#'+tableid+' tr').each(function(index, value)
3446   {
3447      if (index>=headerzeilen)
3448      {
3449         var ok=false, w;
3450         w=$(this).find("input[name^='caption']").val(); if (w.toLowerCase().indexOf(suche.toLowerCase())>=0) ok=true;
3451         w=$(this).find("input[name^='datakey']").val(); if (w.toLowerCase().indexOf(suche.toLowerCase())>=0) ok=true;
3452         w=$(this).find("input[name^='datakey']").val(); if (w.toLowerCase().indexOf(suche.toLowerCase())>=0) ok=true;
3453         if (ok) $(this).show(); else $(this).hide();
3454      }
3455   });
3456}
3457
3458function NewsSuche(webpart, suche)
3459{
3460   if (suche=='') { webpart.find('.messages .message').show(); return; }
3461   webpart.find('.messages .message').show();
3462   webpart.find('.messages .message').each(function(index, value)
3463   {
3464      if ($(this).html().toLowerCase().indexOf(suche.toLowerCase())>=0) $(this).show(); else $(this).hide();
3465   });
3466}
3467
3468function AddBegleiter(maxbegleiter, maxfrei, anrededefault, setzefirma, firma, namehidden, adminpath, maxinfo, confirmtext)
3469{
3470   controlnr++;
3471   if (maxbegleiter!='') if (anzahl>=maxbegleiter) { alert(maxinfo); return; }
3472   if (maxfrei!='') if (anzahl>=maxfrei) { if (!confirm(confirmtext)) return; }
3473   var elem = $('#begleiter0').clone();
3474   SetBegleiter(elem, '0', controlnr, true, anrededefault, setzefirma, firma, adminpath);
3475   elem.insertBefore($('#b1'));
3476   InitDatepickerField('#geburtstag'+controlnr, adminpath, false);
3477   if (namehidden==1) $('#nachname'+controlnr).val('Begleiter');
3478   anzahl++;
3479   PrintActivateFields('#'+controlnr);
3480   return elem;
3481}
3482
3483function RemoveBegleiter(nr)
3484{
3485   var elem = $('#begleiter'+nr);
3486   SetBegleiter(elem,nr,nr,false,'',1,'','');
3487   anzahl--;
3488}
3489
3490function AddBegleiterIntern()
3491{
3492   $('#divsendemailbegleiterintern').show();
3493
3494   controlnrIntern++;
3495   var elem = $('#begleiter1000').clone();
3496   SetBegleiterIntern(elem,controlnrIntern);
3497
3498   var nralt='1000', nr=controlnrIntern;
3499   elem.find('input').each(function(index)
3500   {
3501     if ($(this).attr('name')!=null)
3502     {
3503       var na=$(this).attr('name');
3504       var idalt=$(this).attr('id');
3505       if (na.substring(0,4)=='key_' || na.substring(0,10)=='check_key_' || na.substring(0,15)=='fileselect_key_')
3506       {
3507         if (na.substring(na.length-2)!='[]')
3508         {
3509            na=na.replace('#'+nralt,'#'+nr);
3510            idneu=idalt.replace('#'+nralt,'#'+nr);
3511            if (typeof SetExtrafeldTrigger == 'function') { SetExtrafeldTrigger(elem, na.substring(0,na.length-5), nr); }
3512         }
3513       }
3514     }
3515   });
3516   elem.find('select').each(function(index)
3517   {
3518     if ($(this).attr('name')!=null)
3519       if ($(this).attr('name').substring(0,4)=='key_')
3520       {
3521         var na=$(this).attr('name'); na=na.substring(0,na.length-5)+'#'+nr;
3522         if (typeof SetExtrafeldTrigger == 'function') { SetExtrafeldTrigger(elem, na.substring(0,na.length-5), nr); }
3523       }
3524   });
3525
3526   elem.insertBefore($('#bintern1'));
3527   anzahlIntern++;
3528
3529   if (typeof PrintActivateFields == 'function') { PrintActivateFields('#'+nr); }
3530}
3531
3532function RemoveBegleiterIntern(nr)
3533{
3534   var elem = $('#begleiter'+nr);
3535   elem.find('input,select').each(function(index, value) { $(this).val(''); });
3536   elem.hide();
3537   anzahlIntern--;
3538}
3539
3540function SetBegleiterIntern(elem,nr)
3541{
3542   elem.attr('id', 'begleiter'+nr);
3543   elem.show();
3544   var h=elem.html()
3545   while (h.indexOf('1000"')>0) h=h.replace('1000"',nr+'"');
3546   while (h.indexOf('1000\'')>0) h=h.replace('1000\'',nr+'\'');
3547   while (h.indexOf('1000&')>0) h=h.replace('1000&',nr+'&');
3548   while (h.indexOf('1000_')>0) h=h.replace('1000_',nr+'_');
3549   while (h.indexOf('1000[]')>0) h=h.replace('1000[]',nr+'[]');
3550   elem.html(h);
3551}
3552
3553function SetBegleiter(elem, nralt, nr, display, anrededefault, setzefirma, firma, adminpath)
3554{
3555   elem.attr('id', 'begleiter'+nr);
3556   if (display) elem.show(); else elem.hide();
3557   elem.find('input:not([type=checkbox]):not([type=hidden]):not([type=submit]):not([type=radio]):not([type=button]),select,textarea').val('');
3558   elem.find('#anrede'+nralt).attr('id','anrede'+nr).attr('name','anrede'+nr).val(anrededefault);
3559   elem.find('#titel'+nralt).attr('id','titel'+nr).attr('name','titel'+nr);
3560   elem.find('#vorname'+nralt).attr('id','vorname'+nr).attr('name','vorname'+nr);
3561   elem.find('#nachname'+nralt).attr('id','nachname'+nr).attr('name','nachname'+nr);
3562   elem.find('#firma'+nralt).attr('id','firma'+nr).attr('name','firma'+nr).val(setzefirma==1?'':(setzefirma==2?$('#firma').val():firma));
3563   elem.find('#email'+nralt).attr('id','email'+nr).attr('name','email'+nr);
3564   elem.find('#datepickergeburtstag'+nralt).attr('id','datepickergeburtstag'+nr);
3565   elem.find('#geburtstag'+nralt).attr('id','geburtstag'+nr).attr('name','geburtstag'+nr);
3566   elem.find('#begleitungals'+nralt).attr('id','begleitungals'+nr).attr('name','begleitungals'+nr);
3567   elem.find('#begleiterloeschen'+nralt).attr('id','begleiterloeschen'+nr).attr('onclick','javascript:RemoveBegleiter('+nr+');return false;');
3568   elem.find('div.fieldgroup').each(function(index) { $(this).attr('class',$(this).attr('class').replace('_nr'+nralt,'_nr'+nr)); });
3569   elem.find('#linkalle'+nralt).attr('id','linkalle'+nr).attr('onclick','javascript:ProgrammPunkteAlle(\'.programmpunkt_'+nr+'\');return false;');
3570   elem.find('#linkkeiner'+nralt).attr('id','linkkeiner'+nr).attr('onclick','javascript:ProgrammPunkteKeiner(\'.programmpunkt_'+nr+'\');return false;');
3571   elem.find('#geburtstag'+nr).removeClass("hasDatepicker");
3572   elem.find('#datepickergeburtstag'+nr+' img').remove();
3573
3574   //elem.find('#anmeldeoptionenprogrammpunkt57858_'+nralt).attr('id','anmeldeoptionenprogrammpunkt57858_'+nr);
3575   //elem.find('#anmeldeoptionenserienva57858_'+nralt).attr('id','anmeldeoptionenserienva57858_'+nr);
3576   elem.find('tr').each(function(index)
3577   {
3578      var id=$(this).attr('id'); if (id=='' || id==undefined) return;
3579      if (id.substr(0,28)=='anmeldeoptionenprogrammpunkt') if (id.substr(id.length-1-nralt.length)=='_'+nralt) $(this).attr('id',id.substr(0,id.length-nralt.length)+nr);
3580      if (id.substr(0,23)=='anmeldeoptionenserienva') if (id.substr(id.length-1-nralt.length)=='_'+nralt) $(this).attr('id',id.substr(0,id.length-nralt.length)+nr);
3581      if (id.substr(0,17)=='row_programmpunkt') if (id.substr(id.length-1-nralt.length)=='_'+nralt) $(this).attr('id',id.substr(0,id.length-nralt.length)+nr);
3582   });
3583
3584   elem.find('input').each(function(index)
3585   {
3586     if ($(this).attr('name')!=null)
3587     {
3588       var na=$(this).attr('name');
3589       //var typ=$(this).attr('type'); alert(typ); if (typ=='button') return;
3590       var idalt=$(this).attr('id');
3591       if (na.substring(0,4)=='key_' || na.substring(0,10)=='check_key_' || na.substring(0,15)=='fileselect_key_' || na.substring(0,2)=='pp')
3592       {
3593         if (na.substring(na.length-2)=='[]')
3594         {
3595            na=na.substring(0,na.length-4)+'#'+nr+'[]';
3596            $(this).attr('name',na);
3597            idneu=idalt.replace('_nr'+nralt,'_nr'+nr).replace('#'+nralt,'#'+nr);
3598            $(this).attr('id',idneu);
3599         }
3600         else
3601         {
3602            //na=na.substring(0,na.length-2)+'#'+nr;
3603            na=na.replace('#'+nralt,'#'+nr);
3604            idneu=idalt.replace('_nr'+nralt,'_nr'+nr).replace('#'+nralt,'#'+nr);
3605            $(this).attr('name',na);
3606            $(this).attr('id',idneu);
3607            if (typeof SetExtrafeldTrigger == 'function') { SetExtrafeldTrigger(elem, na.substring(0,na.length-2), nr); }
3608         }
3609       }
3610       if (na.substring(0,13)=='programmpunkt' || na.substring(0,8)=='serienva')
3611       {
3612         na=na.substring(0,na.length-2)+'_'+nr;
3613         $(this).attr('name',na);
3614         $(this).attr('id',na);
3615         $(this).attr('grp','_'+nr);
3616         $(this).attr('class','programmpunkt_'+nr);
3617         $(this).attr('onchange',$(this).attr('onchange').replace('_'+nralt,'_'+nr));
3618       }
3619     }
3620   });
3621   elem.find('select').each(function(index)
3622   {
3623     if ($(this).attr('name')!=null)
3624       if ($(this).attr('name').substring(0,4)=='key_' || $(this).attr('name').substring(0,2)=='pp')
3625       {
3626         var na=$(this).attr('name'); na=na.substring(0,na.length-2)+'#'+nr;
3627         $(this).attr('name',na);
3628         $(this).attr('id',na);
3629         var onchange=$(this).attr('onchange');
3630         if (onchange!==undefined && onchange!==false) $(this).attr('onchange',onchange.replace("TischBegleiter('key_kosten_ticketauswahl#0'","TischBegleiter('key_kosten_ticketauswahl#"+nr+"'"));
3631         if (typeof SetExtrafeldTrigger == 'function') { SetExtrafeldTrigger(elem, na.substring(0,na.length-2), nr); }
3632         this.selectedIndex=-1;
3633       }
3634   });
3635   elem.find('.register').attr('id','registerkey'+nr);
3636   elem.find('.tabX a, #begleiter'+nralt+' .tabB a').each(function(index)
3637   {
3638      $(this).attr('onclick',"OpenRegister("+(index+1)+",'registerkey"+nr+"');$(window).trigger('resize');return false;");
3639   });
3640   elem.find('.buttonitem a').each(function(index)
3641   {
3642      $(this).attr('href',$(this).attr('href').replace('#'+nralt,'#'+nr));
3643   });
3644   elem.find('.dateien a').each(function(index)
3645   {
3646      $(this).attr('onclick',$(this).attr('onclick').replace('#'+nralt,'#'+nr).replace('#'+nralt,'#'+nr));
3647   });
3648   elem.find('div.dateien').each(function(index)
3649   {
3650      $(this).attr('id',$(this).attr('id').replace('#'+nralt,'#'+nr));
3651   });
3652   elem.find('div.dateienliste').each(function(index)
3653   {
3654      $(this).attr('id',$(this).attr('id').replace('#'+nralt,'#'+nr));
3655   });
3656   elem.find('input[type=button]').each(function(index)
3657   {
3658      $(this).attr('onclick',$(this).attr('onclick').replace('#'+nralt,'#'+nr).replace('#'+nralt,'#'+nr));
3659   });
3660}
3661
3662function AddAbstimmung()
3663{
3664   var nr=1; $('#alternativen tbody tr').each(function(index, value) { var id=$(this).attr("id"); id=parseFloat(id.substr(2,99)); if (id>=nr) nr=id+1; });
3665   var elem=$('#tr0').clone(true);
3666   elem.show();
3667   ItemsSetIDLine(elem,'tr',nr,true);
3668   elem.find('select').each(function(index, value) { if ($(this).attr('onchange')) $(this).val('').attr('onchange',$(this).attr('onchange').replace('details0','details'+nr)); });
3669   elem.find('a').each(function(index, value) { if ($(this).attr('onclick')) $(this).attr('onclick',$(this).attr('onclick').replace("'0'", "'"+nr+"'")); });
3670   elem.find('div').each(function(index, value) { $(this).attr('id', 'divdetails'+nr); });
3671   elem.insertBefore($('#tr0'));
3672   $('#art'+nr).val($('#art'+(nr-1)).val());
3673   ShowHide('#divdetails'+nr, HatAbstimmungDetails($('#art'+(nr-1)).val()));
3674   if (HatAbstimmungDetails($('#art'+(nr-1)).val())) $('#details'+nr).val($('#details'+(nr-1)).val());
3675}
3676
3677function HatAbstimmungDetails(wert)
3678{
3679   return wert=='' || wert=='#multi2:' || wert=='#multi3:' || wert=='#multi4:' || wert=='#multi5:';
3680}
3681
3682function StarClick(feld, star)
3683{
3684   for(var i=1; i<=5; i++) { ShowHide('#star0'+i+feld, i>star); ShowHide('#star1'+i+feld, i<=star); }
3685   $('#'+feld).val(star);
3686}
3687
3688function BSStarClick(feld, star)
3689{
3690   for(var i=1; i<=10; i++) if (i<=star) $('#'+feld+'-star'+i).addClass('star-selected'); else $('#'+feld+'-star'+i).removeClass('star-selected');
3691   $('#'+feld).val(star);
3692}
3693
3694function AbstimmungLoeschen(nr)
3695{
3696   if (!confirm('Wirklich löschen?')) return;
3697   $('#tr'+nr).remove();
3698}
3699
3700//function(){return isctrl;}
3701function WPDragDropInit(bs)
3702{
3703   // aus Toolbox
3704   $('.wpdrag').draggable({ revert: false, helper: 'clone', zIndex: 1000, cursorAt: { top: 0, left: 0 } });
3705   $('.wpdrag').on('dragstart', function(event, ui) { AddDroppable(bs); });
3706
3707   // aus Dokument
3708   //, start: function(event, ui) { $(this).draggable('option', 'cursorAt', { left: 0, top: 0 }); }
3709   $('.wpitem').draggable({ revert: "invalid", helper: 'clone', zIndex: 1000, cursorAt: { top: 0, left: 0 } });
3710   $('.wpitem').on('dragstart', function(event, ui) { AddDroppable(bs); });
3711
3712   $('.wpitemchild').on('click', function() { StaticHtmlClickChild($(this)); });
3713   $('.wpitemchild .wpitem').each(function() { $(this).parent().parent().off('click'); });
3714}
3715
3716function AddDroppable(bs)
3717{
3718   // Drop auf Zwischenräume
3719   $(".droparea").droppable(
3720   {
3721      accept: ".wpdrag, .wpitem",
3722      tolerance: "pointer",
3723      classes: { "ui-droppable-active": "droparea-active", "ui-droppable-hover": "droparea-hover" },
3724      //over: function(event, ui) { $(this).css('height',ui.draggable.height()+'px'); },
3725      //out: function(event, ui) { $(this).css('height','22px'); },
3726      drop: function(event, ui)
3727      {
3728         $(this).css('height','22px');
3729         if (!ui.draggable.hasClass('wpsection'))
3730            AddDroppableItem(ui.draggable, $(this).parent(), bs);
3731         else
3732            AddDroppableMain(ui.draggable.attr('type'), $(this).parent(), '', bs);
3733      }
3734   });
3735
3736   // Drop in Mehrfachelement
3737   $(".wpitemchild").droppable(
3738   {
3739      accept: ".wpdragchild, .wpitem",
3740      tolerance: "pointer",
3741      classes: { "ui-droppable-active": "droparea-active", "ui-droppable-hover": "droparea-hover" },
3742      drop: function(event, ui)
3743      {
3744         if (!ui.draggable.hasClass('wpsection'))
3745         {
3746            var el=ui.draggable.clone(true);
3747            el.find('.editarea').remove();
3748            AddDroppableChild(ui.draggable.attr('type'), $(this), el.html());
3749            if (!isctrl) StaticHtmlRemove(ui.draggable,false);
3750         }
3751         else
3752            AddDroppableChild(ui.draggable.attr('type'), $(this), '', false);
3753      }
3754   }); 
3755}
3756
3757function AddDroppableMain(type, eleminsert, html, bs)
3758{
3759   if (html=='') html=$('#template'+type).html();
3760   var edit=$('#edit'+type).html();
3761   var item=1, i; $('.webpartlist .dropitem').each(function(index, value) { i=$(this).attr("id"); i=parseFloat(i.substr(4,99)); if (i>=item) item=i+1; });
3762   $("<li class='dropitem' id='item"+item+"'><div class='droparea' onclick='javascript:StaticHtmlClick("+item+","+(bs?'true':'false')+");return false;'>Bitte per Klick oder Drag-and-Drop neue Elemente einfügen</div><div class='wpitem' type='"+type+"'><div class='editarea'>"+edit+"</div>\n"+html+"\n</div></li>").insertBefore(eleminsert);
3763   $('#item'+item+' .wpitem').draggable({ revert: "invalid", helper: 'clone', zIndex: 1000, cursorAt: { top: 0, left: 0 } });
3764   $('.wpitemchild').on('click', function() { StaticHtmlClickChild($(this)); });
3765}
3766
3767function AddDroppableItem(newitem, eleminsert, bs)
3768{
3769   var type=newitem.attr('type')
3770   var edit=$('#edit'+type).html();
3771   var item=1, i; $('.webpartlist .dropitem').each(function(index, value) { i=$(this).attr("id"); i=parseFloat(i.substr(4,99)); if (i>=item) item=i+1; });
3772   $("<li class='dropitem' id='item"+item+"'><div class='droparea'>Bitte per Klick oder Drag-and-Drop neue Elemente einfügen</div><div class='wpitem' type='"+type+"'><div class='editarea'>"+edit+"</div>\n"+newitem.html()+"\n</div></li>").insertBefore(eleminsert);
3773   if (!isctrl) StaticHtmlRemove(newitem,false);
3774   $('#item'+item+' .wpitem').draggable({ revert: "invalid", helper: 'clone', zIndex: 1000, cursorAt: { top: 0, left: 0 } });
3775   $('#item'+item).on('click', function() { StaticHtmlClickChild($(this)); });
3776}
3777
3778function AddDroppableChild(type, eleminsert, html)
3779{
3780   if (html=='') html=$('#template'+type).html();
3781   var edit=$('#edit'+type).html();
3782   var item=1, i; $('.webpartlist .dropitem').each(function(index, value) { i=$(this).attr("id"); i=parseFloat(i.substr(4,99)); if (i>=item) item=i+1; });
3783   eleminsert.html("<!--WPCHILD--><div class='dropitem' id='item"+item+"'><div class='wpitem' type='"+type+"'>\n<div class='editarea'>"+edit+"</div>"+html+"</div>\n</div><!--/WPCHILD-->");
3784   //eleminsert.droppable("disable"); // raus, weil sonst text in Col3 einfügen nicht klappt; // rein, weil sonst 2Zeilen in 3Spalten und dann ELement in Zeilen einfügen nicht klappt
3785   eleminsert.removeClass('wpitemchild');
3786   eleminsert.removeClass('ui-droppable');
3787   eleminsert.removeClass('ui-droppable-active');
3788   eleminsert.removeClass('droparea-active');
3789   eleminsert.off('click');
3790   $('#item'+item+' .wpitem').draggable({ revert: "invalid", helper: 'clone', zIndex: 1000, cursorAt: { top: 0, left: 0 } });
3791   AddDroppable(true);
3792}
3793
3794function SetForm1Top()
3795{
3796   GetForm1().target='_top';
3797}
3798
3799function StaticHtmlSave(cmd,dialog)
3800{
3801   SetForm1Value('cmd',cmd);
3802   GetForm1().target='';
3803   SetForm1Value('dialog',dialog);
3804   //$('.webpartlist').hide();
3805   $('.webpartlist .droparea').remove();
3806   $('.webpartlist .contentdisplay').remove();
3807   $('.webpartlist .content').removeClass('hidden');
3808   $('.webpartlist .content').attr('contenteditable','');
3809   $('.webpartlist .droparea-active').removeClass('droparea-active');
3810   $('.webpartlist .editarea').remove();
3811   $('.wpitem').removeClass('ui-draggable').removeClass('ui-draggable-handle');
3812   var html=''; $.each( $(".webpartlist > li"), function(key, value) { html=html+$(this).html(); });
3813   $('#inhalt1_html').val(html);
3814}
3815
3816function StaticHtmlSize(jq, anz, cls1, cls2)
3817{
3818   jq.parent().parent().find(cls1).each(function() { StaticHtmlSizeElement($(this), -anz); });
3819   jq.parent().parent().find(cls2).each(function() { StaticHtmlSizeElement($(this), anz); });
3820}
3821
3822function StaticHtmlSizeElement(el, anz)
3823{
3824   var w=el.css('width');
3825   var v=parseInt(w);
3826   if (w.substr(0,w.length-1)=='%') el.css('width',parseInt((v+anz)/10)+'%'); else el.css('width',(v+anz)+'px');
3827}
3828
3829function StaticHtmlSetImg(item, file, parent)
3830{
3831   var html='<img src="'+(file.substr(0,5)=='files'?file:'?downloadprojectfile='+file.substr(9))+'" style="max-width:100%">';
3832   parent.$('.webpartlist #'+item+' .content').html(html);
3833   parent.$('.webpartlist #file'+item).val(file);
3834}
3835
3836function StaticHtmlSetImgNew(item, file, bs)
3837{
3838   var html='<div class="content"><img src="'+(file.substr(0,5)=='files'?file:'?downloadprojectfile='+file.substr(9))+'" style="max-width:100%"></div>';
3839   if (item.substr(0,4)=="item")
3840      AddDroppableMain('img', $('.webpartlist #'+item), html, bs);
3841   else
3842      AddDroppableChild('img', $('.webpartlist #'+item), html);
3843}
3844
3845function StaticHtmlClick(nr,bs)
3846{
3847   SetForm1Value('cmd','addwpitem'+nr);
3848   if (!bs)
3849      OpenNewWindow(-1,-1);
3850   else
3851      OpenPopupBS('./?action='+GetForm1Value('action')+'&cmd='+GetForm1Value('cmd')+'&id='+GetForm1Value('id')+'&dialog=2',0,0,120);
3852}
3853
3854function StaticHtmlClickChild(elem)
3855{
3856   var d = new Date(); var ts=d.getTime();
3857   elem.attr('id', ts);
3858   SetForm1Value('cmd','addwp'+ts);
3859   OpenNewWindow(-1,-1);
3860}
3861
3862function StaticHtmlRemove(elem,cf)
3863{
3864   if (cf) if (!confirm('Wirklich löschen?')) return;
3865   var p=elem.parent();
3866   if (p.parent().hasClass('webpartlist'))
3867   {
3868      p.remove();
3869   }
3870   else
3871   {
3872      p=p.parent();
3873      p.html("Bitte per Klick oder Drag-and-Drop neue Elemente einfügen");
3874      p.addClass('wpitemchild');
3875      p.addClass('ui-droppable');
3876      p.droppable("enable");
3877   }
3878}
3879
3880function PlatzPruefen(id)
3881{
3882   var par='id='+id+'&datum='+$('#datum').val()+'&anzahltage='+$('#anzahltage').val()+'&datum_anzahl='+$('#datum_anzahl').val()+'&datum_ende='+$('#datum_ende').val()+'&datum_tage='+$('#datum_tage').val()+'&datum_monate='+$('#datum_monate').val()+'&datum_jederxtag='+$('#datum_jederxtag').val()+'&datum_jederwotag='+$('#datum_jederwotag').val()+'&datum_datumswerte='+$('#datum_datumswerte').val();
3883   par=par+'&raum='+encodeURIComponent($('#raum').val())+'&raumab='+$('#raumab').val()+'&raumbis='+$('#raumbis').val()+$('#raumbucher').val();
3884   par=par+'&akid='+$('#akid').val();
3885   $.ajax({ type: 'GET', url: './?webservice=platzcheck&'+par, success: function(result) { $('#raumbucherverfuegbar').html(result); } });
3886}
3887
3888function SetzeAnrede(vorname, anredefeld)
3889{
3890   if ($('#'+anredefeld).val()!='') return;
3891   $.ajax({ type: 'GET', url: './?webservice=vorname&vorname='+encodeURIComponent(vorname), success: function(result) 
3892   {
3893      if (result!='') $('#'+anredefeld).val(result);
3894   } });
3895}
3896
3897function PytisStueckliste(isMaterial)
3898{
3899   var artikelliste=[];
3900   $.each( $(".stueckanzahl"), function(key, value)
3901   {
3902      var stueckartid=$(this).attr('id').substr(6);
3903      var stueckanzahl=$(this).val();
3904      var artikel=eval($(this).attr('data'));
3905      for(var i=0; i<artikel.length; i++) { var a=artikel[i][1]; artikelliste[a]=(artikelliste[a]==undefined?0:artikelliste[a])+stueckanzahl*artikel[i][0]; }
3906   });
3907   var fehlen=0;
3908   for(var artid in artikelliste)
3909   {
3910      var z=artikelliste[artid];
3911      $.each( $(".art"+artid), function(key, value)
3912      {
3913         if (true)
3914         {
3915            var artlager=$(this).attr('id').substr(3);
3916            var verfuegbar=$('#spanzstck'+artlager).attr('verfuegbar');
3917            var dieseslager=z>verfuegbar?verfuegbar:z;
3918            z=z-dieseslager;
3919            $('#zstck'+artlager).val(dieseslager);
3920            $('#spanzstck'+artlager).html(dieseslager==0?'':'<br>+ '+dieseslager+' für Stücklisten');
3921         }
3922      });
3923      if (z>0) fehlen+=z;
3924   }
3925   if (fehlen>0) alert('nicht genügend '+(isMaterial?'Material':'Equipment')+' vorhanden ('+fehlen+' fehlen)');
3926}
3927
3928function OnceForm1Submit(el)
3929{
3930   ShowLightBox();
3931   $(el).attr('onclick',"javascript:alert('bereits ausgeführt');return false;");
3932   DirectForm1Submit();
3933}
3934
3935function Grossbuchstaben(feld)
3936{
3937   var wrt=$('#'+feld).val(); if (wrt=='' || wrt.indexOf(' ')>0) return;
3938   $('#'+feld).val(wrt.substr(0,1).toUpperCase()+wrt.substr(1));
3939}
3940
3941function ShowVideo(nr)
3942{
3943   $('.videos').hide();
3944   $('#video'+nr).show();
3945   $('#videoplay'+nr).show();
3946   $('.videoplay').each(function(index, value) { $(this)[0].pause(); });
3947   $('#videoplay'+nr)[0].play();
3948}
3949
3950function SetzeRaumZeit(wrt)
3951{
3952   var i=wrt.indexOf('-');
3953   $('#raumab').val((i>=0?wrt.substr(0,i):wrt).trim());
3954   if (i>=0) $('#raumbis').val(wrt.substr(i+1).trim());
3955}
3956
3957function Speisekarte(id,wrt)
3958{
3959   $.ajax({ type: 'GET', url: './?webservice=speisekarte&id='+id+'&wrt='+wrt });
3960}
3961
3962function CheckGruppenMail()
3963{
3964   var msg='';
3965   if (!$('#empf1').prop('checked') && !$('#empf2').prop('checked') && !$('#empf3').prop('checked') && !$('#empf4').prop('checked') && !$('#empf5').prop('checked')) msg+='Bitte Versandart wählen.\n'
3966   if ($('#betreff').val()=='') msg+='Bitte Betreff eingeben.\n'
3967   if (msg!='') alert(msg);
3968   return msg=='';
3969}
3970
3971function NettoToBrutto(feld,mwstfaktor)
3972{
3973   var brutto=GetKommaZahl(feld)*mwstfaktor;
3974   $('#'+feld+'brutto').val(round2(brutto));
3975}
3976
3977function BruttoToNetto(feld,mwstfaktor)
3978{
3979   var netto=GetKommaZahl(feld+'brutto')/mwstfaktor;
3980   $('#'+feld).val(round2(netto));
3981}
3982
3983function RenameFile(caption, field)
3984{
3985   var txt=$('#newfilename_'+field).val();
3986   var pre='';
3987   if (txt.substr(0,2)=='20' && txt.substr(14,1)=="_") { pre=txt.substr(0,15); txt=txt.substr(15); }
3988   var f=prompt(caption, txt);
3989   if (f!=null && f!='') $('#newfilename_'+field).val(pre+f);
3990   if (f!=null && f!='') $('#attlink_'+field).html(f);
3991}
3992
3993
3994function FindeRechnung(renr)
3995{
3996   $.ajax({ type: 'GET', url: './?webservice=sucherenr&renr='+encodeURIComponent(renr), success: function(result) 
3997   {
3998      $('#resuche').html(result);
3999   } });
4000}
4001
4002function ActivateDragDrop()
4003{
4004  $('.draggable').draggable({ revert: true, });
4005  $('.droppable').droppable({ hoverClass: 'draghover', drop: function( event, ui ) { ui.draggable.draggable({revert: false}); MoveMail(ui.draggable, $(this).attr('name')); } });
4006  JsResponsivetable();
4007}
4008
4009function MoveMail(mailelement, zielfolderid) // mailelement=mailid-foldersrc-postfachid
4010{
4011   var par=mailelement.attr('name').split("-");
4012   MoveMailExecute(1, mailelement, par[0], par[1], par[2], zielfolderid);
4013}
4014
4015function MoveMailExecute(fkt, mailelement, mailid, foldersrc, postfachid, zielfolderid) // mailelement=mailid-foldersrc-postfachid
4016{
4017   $.ajax({ type: 'GET', url: './?webservice=movemail&mailid='+mailid+'&folderid='+zielfolderid+'&foldersrc='+foldersrc+'&postfachid='+postfachid, success: function(result)
4018   {
4019      if (result.substring(0,6)=="ERROR:") { alert(result.substring(6,999)); return; }
4020      if (fkt==1) mailelement.parent().parent().remove(); else $('.row'+mailid).remove();
4021      var cnt=result.split(',');
4022      ShowPostfachFolderMark(foldersrc, cnt[0]);
4023      ShowPostfachFolderMark(zielfolderid, cnt[1]);
4024   } });
4025}
4026
4027function JsResponsivetable()
4028{
4029   $.each($('.responsivetable:not(.footable)'), function(index)
4030   {
4031      var tb=$(this);
4032      $(tb).find('thead td,thead th').each(function(index, value)
4033      {
4034         $(tb).find('tbody td:nth-of-type('+(index+1)+')').attr('data-title',$(this).text()+($(this).text().trim()==''||endswith($(this).text().trim(),':')?'':':'));
4035      })
4036   });
4037}
4038
4039function endswith(str, z)
4040{
4041   if (str.length==0) return false;
4042   return str[str.length-1]==z;
4043}
4044
4045var tagesordnungspunkte=0;
4046function SetzeTop(id, status)
4047{
4048   tagesordnungspunkte=3;
4049   $('.top').css('background-color','');
4050   $('#top'+id).css('background-color','#80ff80');
4051   if (status==2) if ($('#abstimmung'+id).html()=='Abstimmung aktivieren') { $('#abstimmung'+id).html('Abstimmung deaktivieren'); } else { $('#abstimmung'+id).html('Abstimmung aktivieren'); status=1; }
4052   var b=''; $(document).find('.blockbodystart').each(function(index, value) { if ($(this).css('display')!='none') b=b+(b==''?'':',')+$(this).attr('id'); });
4053   $.ajax({ type: 'GET', url: './?webservice=setzetop&id='+id+'&status='+status+'&b='+b, success: function(result) 
4054   {
4055      $('.versammlung').html(result);
4056   } });
4057}
4058
4059function UpdateTop(vid)
4060{
4061   if (tagesordnungspunkte>0) { tagesordnungspunkte--; return; }
4062   var b=''; $(document).find('.blockbodystart').each(function(index, value)
4063   {
4064      if ($(this).css('display')!='none') b=b+(b==''?'':',')+$(this).attr('id');
4065   });
4066   $.ajax({ type: 'GET', url: './?webservice=updatetop&id='+vid+'&b='+b, success: function(result) 
4067   {
4068      if (tagesordnungspunkte>0) return;
4069      $('.versammlung').html(result);
4070   } });
4071}
4072
4073function VoteTop(id, vote)
4074{
4075   $.ajax({ type: 'GET', url: './?webservice=votetop&id='+id+'&vote='+vote, success: function(result) 
4076   {
4077      alert(result);
4078   } });
4079}
4080
4081function TopDropped()
4082{
4083   var sort='';
4084   $.each( $(".tops .maintop"), function(key, value) { sort=sort+(sort==''?'':',')+$(this).attr('id').substring(3); });
4085   $.ajax({ type: 'GET', url: './?webservice=reordertop&sort='+sort, success: function(result) 
4086   {
4087      $('.versammlung').html(result);
4088      $(".topdrag").sortable({ items: '.maintop', revert: true, stop: function( event, ui ) { TopDropped(); } });
4089   } });
4090}
4091
4092function AddExternalUser(str)
4093{
4094   var externals=document.getElementById('externals');
4095   externals.value=externals.value+(externals.value==''?'':'\\n')+str;
4096}
4097
4098function CheckSerientermine()
4099{
4100   var alle=$('.serienva').length;
4101   if (alle<=1) return true;
4102   var sel=$('.serienva:checked').length;
4103   if (sel==0) { alert('Sie haben 0 von '+alle+' Serienterminen gewählt.\n\nBitte wählen Sie mindestens einen Termin.'); return false; }
4104   return confirm('Sie haben '+sel+' von '+alle+' Serienterminen gewählt.\n\nAnmeldung speichern?');
4105}
4106
4107function MailArchivCheckbox(id, state)
4108{
4109   $('.mailarchivextra.block'+id+' input:visible').prop('checked',state);
4110}
4111
4112function SetzeAnzeigeRV(el,id,wert)
4113{
4114   $.ajax({ type: 'POST', url: './?webservice=setzeanzeigerv&id='+id+'&w='+wert });
4115   $.each( $(el).parent().parent().find('a'), function(key, value) { if ($(this).html().substring(0,1)=='*') $(this).html($(this).html().substring(2,99)); } );
4116   $(el).html('* '+$(el).html());
4117}
4118
4119function DeleteMail(id)
4120{
4121   $.ajax({ type: 'POST', url: './?webservice=maildelete&id='+id });
4122   $('tr#row'+id).remove();
4123}
4124
4125function SetzeRaum(plaetze, enable)
4126{
4127   for(i=0; i<plaetze.length; i++) $('#platzauswahl'+plaetze[i]).prop('checked',enable);
4128}
4129
4130function Restbudget(grpid)
4131{
4132   if (grpid==0) $('#restbudget').html("");
4133   else $.ajax({ type: 'POST', url: './?webservice=restbudget&id='+grpid, success: function(result) { $('#restbudget').html(result); } });
4134}
4135
4136function SyncExtrafelder(ab,id)
4137{
4138   $.ajax({ type: 'POST', url: './?webservice=syncextrafelder&ab='+ab+'&id='+id, success: function(result) { alert(result); } });
4139}
4140
4141function CheckReRequired(felder,oKst)
4142{
4143   if (felder=='') return true;
4144   var lst=felder.split(',');
4145   var msg='';
4146   for(i=0; i<lst.length; i++) if (!CheckReRequiredField(lst[i],oKst)) msg+='\n- '+lst[i].substring(0,1).toUpperCase()+lst[i].substring(1);
4147   if (msg!='') alert('Bitte vor dem Speichern folgende Felder ausfüllen:'+msg);
4148   return msg=='';
4149}
4150
4151function CheckReRequiredField(feld,oKst)
4152{
4153   if (feld!='kostenstelle') return GetForm1Value(feld)!="";
4154
4155   // Kostenstelle
4156   if (oKst=='') return true;
4157   if (oKst=='ja' || oKst=='gruppen') return GetForm1Value('kategorie')!="";
4158   if (oKst=='multi') { alert('Pflichtfelder bei Kostenstellen=Mehrfachzuordnung nicht unterstützt'); return false; }
4159   var ok=true;
4160   $.each( $("select[name^='kategorie']"), function(key, value) { if ($('#anz'+$(this).attr('id').substr(9)).val()!="") ok=ok && $(this).val().trim()!=''; } );
4161   return ok;
4162}
4163
4164function ErstelleRechnung(jahr,pflicht,oKst,action,art)
4165{
4166   if ((art=='lst' ||art=='uew') && $('#vereinskonto').val()=='') { alert('Bitte Vereinskonto wählen'); return; }
4167   if (!BuchungDatumOk(jahr)) return;
4168   if (!CheckReRequired(pflicht,oKst)) return;
4169   var renr=$('#rechnungsnummer').val().trim();
4170   if (renr=='') { alert("Bitte Rechnungsnummer angeben"); return; }
4171   $.ajax({ url: './?webservice=checkrenr&renr='+encodeURIComponent(renr), success: function(result)
4172   {
4173      if (result!='') { alert(result); return; }
4174      SetForm1Value('action','kasse_'+action);
4175      Form1Submit();
4176   } });
4177}
4178
4179function PopupLogin()
4180{
4181   var myModal = new bootstrap.Modal(document.getElementById('logindialog'), { keyboard: false });
4182   myModal.show()
4183}
4184
4185function FormatZeit(z)
4186{
4187   var hh=parseInt(z);
4188   var mm=parseInt((z-hh)*60);
4189   return hh+':'+(mm<10?'0':'')+mm;
4190}
4191
4192function SaveTerminPlanung(uid,vaid)
4193{
4194   $.ajax({ type: 'POST', url: './?webservice=terminplanung', data: 'uid='+uid+'&vaid='+vaid+'&status='+$('#va'+vaid).val()+'&txt='+encodeURIComponent($('#txt'+vaid).val()), success: function(result) { if (result!='') alert(result); } });
4195}
4196
4197function SaveTerminPlanungKommentar(uid,aid)
4198{
4199   $.ajax({ type: 'POST', url: './?webservice=terminplanungkommentar', data: 'uid='+uid+'&aid='+aid+'&txt='+encodeURIComponent($('#anmerkungen').val()), success: function(result) { if (result!='') alert(result); } });
4200}
4201
4202function BuchungDatumOk(jahr)
4203{
4204   var datum=$('#datum').val();
4205   var data=datum.split('.'); var d=parseInt(data[0]), m=parseInt(data[1]), y=parseInt(data[2]);
4206   if (y<=jahr) { alert('Buchführung bis zum Jahr '+jahr+' gesperrt'); return false; }
4207   if (d<1 || d>31 || m<1 || m>12) { alert('ungültiges Datum'); return false; }
4208   return true;
4209}
4210
4211function FelderMoveSelected(src, dst)
4212{
4213   var s=document.getElementById(src);
4214   var d=document.getElementById(dst);
4215   for(var i=0; i<s.options.length; i++) if (s.options[i].selected) d.add(new Option(s.options[i].text,s.options[i].value));
4216   for(var i=s.options.length-1; i>=0; i--) if (s.options[i].selected) s.options[i]=null;
4217   SelectAll();
4218}
4219function FelderMoveAll(src, dst)
4220{
4221   var s=document.getElementById(src);
4222   var d=document.getElementById(dst);
4223   for(var i=0; i<s.options.length; i++) d.add(new Option(s.options[i].text,s.options[i].value));
4224   for(var i=s.options.length-1; i>=0; i--) s.options[i]=null;
4225   SelectAll();
4226}
4227function SelectAll()
4228{
4229   var d=document.getElementById('selection');
4230   for(var i=d.options.length-1; i>=0; i--) d.options[i].selected=true;
4231}
4232function FelderMoveSelectedUpDown(lst,dir)
4233{
4234   var l=document.getElementById(lst);
4235   var p=l.selectedIndex;
4236   if (p<0 || p+dir<0 || p+dir>=l.length) return;
4237   var o1=new Option(l.options[p].text, l.options[p].value);
4238   var o2=new Option(l.options[p+dir].text, l.options[p+dir].value);
4239   l.options[p+dir]=o1;
4240   l.options[p]=o2;
4241   l.selectedIndex=p+dir;
4242   //SelectAll();
4243}
4244
4245function Rv6Toggle()
4246{
4247   if ($('#sidebar').is(":visible"))
4248   {
4249      $('#sidebar').removeClass('d-md-block').addClass('d-none');
4250      $('.maincontent').removeClass('col-fluid');
4251      document.cookie = 'sidebar=no; path=/';
4252   }
4253   else
4254   {
4255      $('#sidebar').addClass('d-md-block').removeClass('d-none');
4256      $('.maincontent').addClass('col-fluid');
4257      document.cookie = 'sidebar=; path=/';
4258   }
4259   $('html,body').scrollTop(0);
4260}
4261
4262function Rv6Show()
4263{
4264   if ($('#sidebar').hasClass('d-none'))
4265   {
4266      $('#sidebar').addClass('d-md-block').removeClass('d-none');
4267      $('.maincontent').addClass('col-fluid')
4268   }
4269   $('html,body').scrollTop(0);
4270}
4271
4272function Rv6Close()
4273{
4274   if ($(window).width()<=600)
4275   {
4276      $('#sidebar').removeClass('d-md-block').addClass('d-none');
4277      $('.maincontent').removeClass('col-fluid');
4278      document.cookie = 'sidebar=no; path=/';
4279   }
4280}
4281
4282function ReAusblenden(id, nuraktive)
4283{
4284   if (nuraktive==1) $('#rechnung'+id).hide();
4285   $.ajax({ url: './?webservice=reausblenden&id='+id, success: function(result) { $('#link'+id).html(result); } });
4286}
4287
4288function CheckRaumbelegung(ids)
4289{
4290   var par='';
4291   var frm1=document.getElementById('form1');
4292   for(i=0; i<frm1.elements.length; i++) { if (frm1.elements[i].name.substring(0,5)=="platz" || frm1.elements[i].name.substring(0,6)=="beginn" || frm1.elements[i].name.substring(0,4)=="ende") par=par+'&'+frm1.elements[i].name+'='+encodeURIComponent(frm1.elements[i].value); }
4293   $.ajax({ url: './?webservice=checkraumbelegung&ids='+ids+par, success:
4294      function(result)
4295      {
4296         if (result=='') { Form1Submit(); return; }
4297         eval('werte='+result);
4298         for(i=0; i<werte.length; i++) $('#info'+werte[i][0]).html(werte[i][1]);
4299      }
4300   });
4301}
4302
4303function SetzeBildersichtbarkeit(opt)
4304{
4305   $("select[name^='public']").val(opt);
4306}
4307
4308function ChangePositionen(pos)
4309{
4310   var max=$('.selectpos').length;
4311   var wert=parseInt($('#position'+pos).val());
4312   var prewert=parseInt($('#preposition'+pos).val());
4313   for(var p=1; p<=max; p++)
4314   {
4315      if (p!=pos)
4316      {
4317         var w=parseInt($('#position'+p).val()); 
4318         if (wert>prewert && w>prewert && w<=wert) { $('#position'+p).val(w-1); $('#preposition'+p).val(w-1); }
4319         if (wert<prewert && w<prewert && w>=wert) { $('#position'+p).val(w+1); $('#preposition'+p).val(w+1); }
4320      }
4321   }
4322   $('#preposition'+pos).val(wert);
4323}
4324
4325function FlexTypShowDetail(nr)
4326{
4327   var detailtypen=["multiselect","select","selectradio","checkbox","label","workflow","autowert","wert","currency","currencylist","formel"];
4328   var typ=$('#datatyp'+nr).val();
4329   ShowHide('#datatypdetails'+nr, detailtypen.includes(typ));
4330}
4331
4332function FlexListTypAdd()
4333{
4334   flexlistenpos++;
4335
4336   $('.selectpos').each(function(index, value)
4337   {
4338      $(this).find("option[value='x']").remove();
4339      $(this).append("<option value='"+flexlistenpos+"'>"+flexlistenpos+"</option>");
4340      $(this).append("<option value='x'>löschen</option>");
4341   });
4342
4343   var elem=$('.listtable tbody .flexlistrow:first').clone();
4344   elem.find('input,select,textarea').each(function(index, value)
4345   {
4346     var name=$(this).attr('name');
4347     name=name.substr(0,name.length-1)+flexlistenpos;
4348     $(this).attr('name',name);
4349     $(this).attr('id',name);
4350     if ($(this).attr('onchange'))
4351     {
4352        var r=$(this).attr('onchange').replace('ext1','ext0').replace('ext1','ext0').replace('ext1','ext0');
4353        r=r.replace('ext0','ext'+flexlistenpos).replace('ext0','ext'+flexlistenpos).replace('ext0','ext'+flexlistenpos);
4354        r=r.replace('datakey1','datakey'+flexlistenpos);
4355        $(this).attr('onchange',r);
4356     }
4357     $(this).val('');
4358   });
4359   elem.find('textarea').hide();
4360   elem.find('.selectpos').val(flexlistenpos);
4361   elem.find('#preposition'+flexlistenpos).val(flexlistenpos);
4362   elem.find('.selectpos').attr('onchange','javascript:ChangePositionen('+flexlistenpos+')');
4363   elem.find('#datatyp'+flexlistenpos).attr('onchange','javascript:FlexTypShowDetail('+flexlistenpos+')');
4364   elem.find('a').attr('onclick','javascript:$("#divsichtbar'+flexlistenpos+'").toggle();');
4365   elem.find('.linkcondition').attr('onclick','javascript:$("#divsichtbar'+flexlistenpos+'").toggle();');
4366   elem.find('.ergext').attr('id','ergext'+flexlistenpos).html('');
4367   elem.find('.divsichtbar').attr('id','divsichtbar'+flexlistenpos);
4368
4369   elem.appendTo('.listtable tbody');
4370}
4371
4372function KostenAusnahmenAdd(adminpath, showWeek)
4373{
4374   kostentabellenr++;
4375   $('.kostentabellehead').show();
4376
4377   var elem=$('#kostentabelle tbody tr:first').clone();
4378   elem.find('input,select,textarea').each(function(index, value)
4379   {
4380     var name=$(this).attr('name'); if (name.substr(0,3)=='btn') return;
4381     name=name.substr(0,name.length-1)+kostentabellenr;
4382     $(this).attr('name',name);
4383     $(this).attr('id',name);
4384     $(this).val('');
4385     $(this).removeClass("hasDatepicker");
4386   });
4387   elem.find('div').each(function(index, value)
4388   {
4389     var id=$(this).attr('id');
4390     $(this).attr('id',id.substr(0,id.length-1)+kostentabellenr);
4391   });
4392   elem.find('img').each(function(index, value)
4393   {
4394     $(this).remove();
4395   });
4396   elem.show();
4397   elem.appendTo('#kostentabelle tbody');
4398
4399   InitDatepickerField('#kostentabelle tbody #kostenab'+kostentabellenr, adminpath, showWeek);
4400   InitDatepickerField('#kostentabelle tbody #kostenbis'+kostentabellenr, adminpath, showWeek);
4401}
4402
4403function KostenAusnahmenRemove(elem)
4404{
4405   var cnt=elem.parentNode.parentNode.parentNode.children.length;
4406   elem.parentNode.parentNode.remove();
4407   if (cnt<3) $('.kostentabellehead').hide();
4408}
4409
4410function MailAttachUser(id,user,notiz)
4411{
4412   $.ajax({ url: './?webservice=mailattachuser&id='+id+'&user='+user+'&notiz='+encodeURIComponent(notiz), success: function(result) { if (result=='N') alert('Fehler beim Speichern'); else alert('Wurde gespeichert'); } });
4413}
4414
4415function MailPush(art,gid)
4416{
4417   if (art=='mail' && $('#mail'+gid).prop('checked')==false) $('#push'+gid).prop('checked',true);
4418   if (art=='push' && $('#push'+gid).prop('checked')==false) $('#mail'+gid).prop('checked',true);
4419}
4420
4421function Schulschach(kind,cls)
4422{
4423   $('.schachlehrer'+kind+':not('+cls+') input').prop('checked',false);
4424}
4425function Schachkurs(vaid,uid,chk,stufe,iduser,idva)
4426{
4427   $.ajax({ url: './?webservice=schachkurs&vaid='+vaid+'&uid='+uid+'&typ='+(chk?'3':'1') });
4428   var u=$('#user'+stufe+uid).html(); if (u=='') u=0;
4429   var su=$('.su'+stufe+vaid).first().html(); if (su=='') su=0;
4430   if (chk) { u++; su++; } else { u--; su--; }
4431   $('#user'+stufe+uid).html(u==0?'':u);
4432   $('#user'+stufe+uid).css('background-color',u>1?'red':'');
4433   $('#user'+stufe+uid).css('color',u>1?'white':'');
4434   $('#user'+stufe+uid).css('padding',u>1?'3px':'');
4435   $('.su'+stufe+vaid).html(su==0?'':su);
4436}
4437
4438function SucheInTags(field, service)
4439{
4440   $.ajax({ url: './?webservice=filetags'+service+'&field='+field+'&tags='+encodeURIComponent($('#tags').val()), success: function(result) { $('#result').html(result); } });
4441}
4442
4443function CheckUserCode(field)
4444{
4445   var mailtext=GetEditorContent(field);
4446   var i=mailtext.indexOf('usercode=');
4447   if (i>=0)
4448   {
4449      var weiter=parseInt(mailtext.substr(i+9)); if (isNaN(weiter)) weiter=0;
4450      if (weiter!=0) { alert('Der Text darf keinen individuelle Zugriffcode enthalten! (usercode='+weiter+'...)'); return false; }
4451   }
4452   return true;
4453}
4454
4455function AuswahlTag(tag)
4456{
4457   var v=" "+$('#tags').val()+" ";
4458   var p=v.indexOf(" "+tag+" ");
4459
4460   var w;
4461   if (p<0) w=(v+tag).trim();
4462   else if (p==0) w=v.substr(tag.length+2).trim();
4463   else w=v.substr(0,p).trim()+' '+v.substr(p+tag.length+2).trim();
4464
4465   //$('#tag'+tag).css('background-color', p>=0?'#e0e0e0':'#a0a0a0');
4466
4467   $('#tags').val(w);
4468   $('#tags').trigger('keyup');
4469}
4470
4471function FieldInfo(art,field)
4472{
4473   $.ajax({ url: './?webservice=fieldinfo&art='+art+'&field='+field, success: function(result) { alert(result); } });
4474}
4475
4476function LoadJournalZuordnungen(id, print)
4477{
4478   if ($('#aufklappen'+id+'body').html()!="") return;
4479   $.ajax({ url: './?webservice=getzuordnungen&id='+id+(print==''?'':'&print='+print), success: function(result) { $('#aufklappen'+id+'body').html(result); } });
4480}
4481
4482function ICVAnmeldeAdresse(dialog, val, postcount, pstrasse='', pland='', pplz='', port='', pemail='', firma='', gco='', gstrasse='', gland='', gplz='', gort='', gemail='')
4483{
4484   ShowHide('#icvanmeldeadresse', val!='');
4485   if (val=='') { $('#icvanmeldeadresse').html(''); return; }
4486
4487   var par='';
4488   if (val=='privat') par+='&p_strasse='+encodeURIComponent(pstrasse)+'&p_land='+encodeURIComponent(pland)+'&p_plz='+encodeURIComponent(pplz)+'&p_ort='+encodeURIComponent(port)+'&p_email='+encodeURIComponent(pemail);
4489   else par+='&firma='+encodeURIComponent(firma)+'&g_co='+encodeURIComponent(gco)+'&g_strasse
4489='+encodeURIComponent(gstrasse)+'&g_land='+encodeURIComponent(gland)+'&g_plz='+encodeURIComponent(gplz)+'&g_ort='+encodeURIComponent(gort)+'&g_email='+encodeURIComponent(gemail);
4490
4491   $.ajax({ url: (dialog==4?'https://portal.icv-controlling.com/':'./')+'?webservice=icvanmeldeadresse&dialog='+dialog+'&art='+val+'&postcount='+postcount+par, xhrFields: { withCredentials: true }, crossDomain: true, success: function(result)
4492   {
4493     $('#icvanmeldeadresse').html(result);
4494   } });
4495}
4496
4497function UpdatedGeburtstag(datatyp, datakey, datum, vaid, wert)
4498{
4499   var el=document.getElementById('key_kosten');
4500   if (el==null || el=='undefined') return;
4501   if (datakey=='') return;
4502   $.ajax({ url: './?webservice=updatedgeburtstag&datum='+encodeURIComponent(datum)+'&datatyp='+datatyp+'&datakey='+datakey+'&vaid='+vaid+'&wert='+wert, success: function(result) { $(el).parent().html(result); } });
4503}
4504
4505function CheckFieldDubletten()
4506{
4507   var frm1=document.getElementById('form1');
4508   var lst=[];
4509   for(i=0; i<frm1.elements.length; i++)
4510      if (frm1.elements[i].name.substring(0,7)=="datakey" && frm1.elements[i].value!='')
4511      {
4512         var extname='#ext'+frm1.elements[i].name.substring(7);
4513         var ext=$(extname).length==0?'':$(extname).val();
4514//         if (ext=='undefined') ext='';
4515         var val=frm1.elements[i].value.trim()+ext; 
4516         if (lst.indexOf(val)>=0) { alert('Gleichnamige Felder sind nicht zulässig: '+val); return true; }
4517         lst.push(val);
4518      }
4519   return false;
4520}
4521
4522function BlogDelete(id)
4523{
4524   $('#blogdiv'+id).hide();
4525   $.ajax({ url: './?webservice=blogdelete&id='+id });
4526}
4527
4528function SaveGruppenNotify(gruppenid)
4529{
4530   $.ajax({ url: './?webservice=gruppennotify&id='+gruppenid+'&wert='+$('#abo').val() });
4531}
4532
4533function scrollToAnchor(aid, diff)
4534{
4535   var aTag = $("a[name='"+ aid +"']");
4536   $('html,body').animate({scrollTop: aTag.offset().top-diff},'slow');
4537}
4538
4539function SetzeKontoVA(field,vaid)
4540{
4541   $.ajax({ url: './?webservice=setzekontova&id='+vaid, success: function(result)
4542   {
4543      var data=result.split('\n');
4544      KontoPickerSetze(field,data[0]);
4545      $('#kategorie').val(data[1]);
4546   } });
4547}
4548
4549function CopyToClipboard(id, info)
4550{
4551   var content = document.getElementById(id);
4552   ShowHide('#'+id,true);
4553   content.select();
4554   document.execCommand('copy');
4555   ShowHide('#'+id,false);
4556   if (info!='') alert(info+":\n\n"+content.value);
4557}
4558
4559function CopyFieldToClipboard(id)
4560{
4561   var content = document.getElementById(id);
4562   content.select();
4563   document.execCommand('copy');
4564}
4565
4566function CopyFieldToClipboardTiny(id)
4567{
4568   var tiny=GetEditor('tiny'+id);
4569   navigator.clipboard.writeText(tiny.getContent());
4570}
4571
4572function CopyHTMLToClipboard(id)
4573{
4574   var w=$(id).html().replace('&amp;','&').replace('&amp;','&');
4575   $('#copyfield').val(w);
4576   CopyToClipboard('copyfield','');
4577}
4578
4579function ExpertensucheAuswahlfelder(id, feld) //, adminpath, showWeek)
4580{
4581   //if (feld=='aufnahmemitglied') { alert(id+','+feld); $('#experte_'+id+' .expertinput').hide(); $('#experte_'+id+' .expertdatum').show(); InitDatepickerField('#experte_'+id+' .expertdatum', adminpath, showWeek); }
4582   if (feld=='userpwd')
4583   {
4584      $('#expertefkt'+id+' option').prop('disabled',true);
4585      $('#expertefkt'+id+' option:contains("leer")').prop('disabled',false);
4586   }
4587   else if (feld=='alter')
4588   {
4589      $('#expertefkt'+id+' option').prop('disabled',true);
4590      $('#expertefkt'+id+' option:contains("ist")').prop('disabled',false);
4591      $('#expertefkt'+id+' option:contains("leer")').prop('disabled',true);
4592   }
4593   else if (feld=='beitraege')
4594   {
4595      $('#expertefkt'+id+' option').prop('disabled',true);
4596      $('#expertefkt'+id+' option:contains("leer")').prop('disabled',false);
4597      $('#expertefkt'+id+' option:contains("enthält")').prop('disabled',false);
4598      $('#expertefkt'+id+' option:contains("ist nicht gleich")').prop('disabled',false);
4599      $('#expertefkt'+id+' option:contains("ist gleich")').prop('disabled',false);
4600   }
4601   else if (feld=='beitragszahlerfuer')
4602   {
4603      $('#expertefkt'+id+' option').prop('disabled',true);
4604      $('#expertefkt'+id+' option:contains("leer")').prop('disabled',false);
4605   }
4606   else 
4607      $('#expertefkt'+id+' option').prop('disabled',false);
4608
4609   var sel=$('#expertefkt'+id).prop('selectedIndex');
4610   if (sel>=0 && $('#expertefkt'+id+' option:eq('+sel+')').prop('disabled'))
4611   {
4612      var cnt=$('#expertefkt'+id+' option').length;
4613      for(i=0; i<cnt; i++) if (!$('#expertefkt'+id+' option:eq('+i+')').prop('disabled')) { $('#expertefkt'+id).prop("selectedIndex",i); break; }
4614   }
4615
4616   if (feld=='')
4617      $('#experte_'+id+' .experteinfo').html('');
4618   else
4619      $.ajax({ url: './?webservice=fieldinfo&id='+id+'&art=m&komma=1&field='+feld, success: function(result) { $('#experte_'+id+' .experteinfo').html(result); } });
4620}
4621
4622function ShopLieferadresse(wrt)
4623{
4624   ShowHide('.rowlieferadresse',wrt=='');
4625   ShowHide('.rowlieferswitch',wrt=='');
4626   ShowHide('.rowlieferfirma',wrt=='');
4627   ShowHide('.rowliefervollername',wrt=='');
4628   ShowHide('.rowlieferstrasse',wrt=='');
4629   ShowHide('.rowlieferadresse',wrt=='');
4630   ShowHide('.rowlieferemail',wrt=='');
4631}
4632
4633function RefreshICAL()
4634{
4635   $.ajax({ url: './?webservice=refreshical' });
4636}
4637
4638function addattachmentsFile()
4639{
4640   AddExtraFile('attachments');
4641}
4642
4643function GetEditor(field)
4644{
4645   if (tinyMCE.editors==undefined)
4646   {
4647      return tinyMCE.get(field);
4648   }
4649   return tinyMCE.editors[field];
4650}
4651
4652function GetEditorContent(field)
4653{
4654   var edt=GetEditor(field); if (edt==false) return '';
4655   return edt.getContent();
4656}
4657
4658function SetEditorContent(field,txt)
4659{
4660   var edt=GetEditor(field); if (edt==false) return '';
4661   edt.setContent(txt, {format : 'raw'});
4662}
4663
4664
4665function VAControllingAbgeschlossen(vaid,status,abgeschlossen)
4666{
4667   $.ajax({ url: './?webservice=vacontrollingabgeschlossen&vaid='+vaid+'&status='+(status?'1':'') });
4668   if (abgeschlossen!='') $('.va'+vaid).remove();
4669   if (abgeschlossen!='') $('.vasumme').remove();
4670}
4671
4672function VAControllingAbgeschlossen2(vaid,status)
4673{
4674   $.ajax({ url: './?webservice=vacontrollingabgeschlossen2&vaid='+vaid+'&status='+(status?'1':'') });
4675}
4676
4677function BeitragFilter()
4678{
4679   $('#filter').toggle();
4680}
4681
4682function RefreshAufgabenListe()
4683{
4684   $.ajax({ url: './?webservice=topaufgabenliste', success: function(result) { $('#aufgabeneu').html(result); } });
4685}
4686
4687function TischBegleiter(key,wrt,adminpath)
4688{
4689   var clickid=key == "key_kosten_ticketauswahl" ? 0 : parseInt(key.substr(18));
4690   $.ajax({ url: './?webservice=tischreservierung&id='+wrt, success: function(result)
4691   {
4692      if (result=='') return;
4693      var list=[]; if ($('#key_kosten_ticketauswahl').val()==wrt) list.push($('#key_kosten_ticketauswahl'));
4694      $("div[id^='begleiter']:visible").each(function(index, value)
4695      {
4696         var nr=$(this).attr('id').substr(9); if (nr=='0') return;
4697         var select=$(this).find("select[id^='key_kosten_ticketauswahl']");
4698         var keyid=select.attr('id') == "key_ticketauswahl" ? 0 : parseInt(select.attr('id').substr(25));
4699         if (select.val()==wrt) list.push(select); else if (keyid > clickid) $(this).remove();
4700      });
4701      var cnt=(parseInt((list.length-1)/result)+1)*parseInt(result)-list.length;
4702      for(i=1; i<=cnt; i++) { var elem=AddBegleiter('','','','0','',0,adminpath,'',''); elem.find("select[id^='key_kosten_ticketauswahl']").val(wrt); }
4703   } });
4704}
4705
4706function toHex(zahl)
4707{
4708   var hex=zahl.toString(16); if (hex.length==1) hex='0'+hex; return hex;
4709}
4710
4711function toBase64(data)
4712{
4713   var view=new Uint8Array(data);
4714   var result=''; for(var i=0; i<view.length; i++) result+=String.fromCharCode(view[i])
4715   return btoa(result);
4716}
4717
4718function PasskeyCreate(challengedata, challengebase64, passkeysServer, userlogin, username)
4719{
4720   const publicKeyCredentialCreationOptions = {
4721      challenge: challengedata,
4722      rp: { name: "VereinOnline.org", id: passkeysServer },
4723      user: { id: new Uint8Array([1,2,3]), name: userlogin, displayName: username },
4724      pubKeyCredParams: [{alg: -7, type: "public-key"}],
4725      authenticatorSelection: { authenticatorAttachment: "cross-platform" },
4726      timeout: 60000,
4727      attestation: "direct"
4728   };
4729   navigator.credentials.create({ publicKey: publicKeyCredentialCreationOptions }).then((credential) =>
4730   {
4731      //console.log(credential);
4732      const response = credential.response;
4733      const decodedAttestationObject = cbor.decode(credential.response.attestationObject);
4734      //console.log(decodedAttestationObject);
4735
4736      const utf8Decoder = new TextDecoder('utf-8');
4737      const decodedClientData = utf8Decoder.decode(credential.response.clientDataJSON);
4738      const clientDataObj = JSON.parse(decodedClientData);
4739      //console.log(clientDataObj);
4740      if (clientDataObj.type!='webauthn.create') { alert('wrong type:'+clientDataObj.type+'.'); return; }
4741      if (clientDataObj.origin!='https://'+passkeysServer) { alert('wrong server'); return; }
4742      if (clientDataObj.challenge!=challengebase64) { alert('wrong challenge:\n'+clientDataObj.challenge+'\n'+challengebase64); }
4743
4744      const authData = decodedAttestationObject.authData;
4745      const dataView = new DataView(new ArrayBuffer(2));
4746      const idLenBytes = authData.slice(53, 55); idLenBytes.forEach((value, index) => dataView.setUint8(index, value));
4747      const credentialIdLength = dataView.getUint16();
4748      const credentialId = authData.slice(55, 55 + credentialIdLength);
4749      //console.log(credentialId);
4750
4751      const publicKeyBytes = authData.slice(55 + credentialIdLength);
4752      const publicKeyObject = cbor.decode(publicKeyBytes.buffer);
4753      //console.log(publicKeyBytes);
4754      //console.log(publicKeyObject);
4755
4756      var result='';
4757      for(var i=0; i<credentialId.length; i++) result+=toHex(credentialId[i]);
4758      //console.log('hex='+result);
4759      var cdata=toBase64(credential.response.clientDataJSON);
4760      var attest=toBase64(credential.response.attestationObject);
4761      //console.log(attest);
4762      $.ajax({ url: './?webservice=passkeycreate&credential='+encodeURIComponent(result)+'&cdata='+encodeURIComponent(cdata)+'&attest='+encodeURIComponent(attest)+'&id='+encodeURIComponent(credential.id),
4763               success: function(result) { $('#info').html(result); if (result.substr(0,6)=='Fehler') $('#info').css({'background-color':'red', 'color':'white'}); }
4764      });
4765   });
4766}
4767
4768function PasskeyGet(credentials, challengedata, challengebase64, userlogin)
4769{
4770   const publicKeyCredentialRequestOptions = {
4771      challenge: challengedata,
4772      allowCredentials: credentials,     // , transports: ['usb', 'ble', 'nfc']
4773      timeout: 60000
4774   }
4775   navigator.credentials.get({ publicKey: publicKeyCredentialRequestOptions }).then((credential) => 
4776   {
4777      //console.log(credential);
4778      const response = credential.response;
4779
4780      var authdata=toBase64(credential.response.authenticatorData);
4781      var cdata=toBase64(credential.response.clientDataJSON);
4782      var sig=toBase64(credential.response.signature);
4783      //console.log(authdata); console.log(cdata); console.log(sig);
4784
4785      const utf8Decoder = new TextDecoder('utf-8');
4786      const decodedClientData = utf8Decoder.decode(credential.response.clientDataJSON);
4787      const clientDataObj = JSON.parse(decodedClientData);
4788      //console.log(clientDataObj);
4789      if (clientDataObj.challenge!=challengebase64) { alert('wrong challenge:\n'+clientDataObj.challenge+'\n'+challengebase64); }
4790
4791      $.ajax({ url: './?webservice=passkeyget&authdata='+encodeURIComponent(authdata)+'&cdata='+encodeURIComponent(cdata)+'&sig='+encodeURIComponent(sig)+'&id='+encodeURIComponent(credential.id)+'&userlogin='+encodeURIComponent(userlogin),
4792               success: function(result) { $('#info').html(result); if (result.substr(0,6)=='Fehler') $('#info').css({'background-color':'red', 'color':'white'}); } 
4793      });
4794   });
4795}
4796
4797function contextMenuOpen(event, contextmenuaction) 
4798{
4799   if ($("#contextmenu").length==0) return;
4800   if (!event) event = window.event;
4801   event.preventDefault();
4802   event.stopImmediatePropagation();
4803   $.each($("#contextmenu div, #contextmenu hr"), function(key, value) { var cls=$(this).attr('class'); if (cls=='' || contextmenuaction.indexOf(cls.substr(11))>=0) $(this).show(); else $(this).hide(); });
4804   $("#contextmenu").show(); 
4805   var posx=0, posy=0;
4806   if (event.pageX || event.pageY) { posx = event.pageX; posy = event.pageY; } else if (event.clientX || event.clientY) { posx = event.clientX + document.body.scrollLeft +  document.documentElement.scrollLeft; posy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop; }
4807   var menu = document.getElementById("contextmenu");
4808   if (window.innerWidth - posx < menu.offsetWidth) menu.style.left = (posx - menu.offsetWidth) + "px"; else menu.style.left = posx + "px";
4809   if (window.innerHeight - posy < menu.offsetHeight) menu.style.top = (posy - menu.offsetHeight) + "px"; else menu.style.top = posy + "px";
4810}
4811$(document).on('click', function (e) { if ((e.which || e.button) === 1) $("#contextmenu").hide(); });
4812$(window).on('keyup', function (e) { if (e.keyCode === 27) $("#contextmenu").hide(); });
4813
4814function SaalplanSelect(vaid,nr,anzahl)
4815{
4816   //alert(vaid+','+nr+','+anzahl);
4817   var saalplaetze=$('#saalplaetze').val();
4818   var plaetze=saalplaetze.length==0 ? [] : $('#saalplaetze').val().split(',');
4819   var ist=plaetze.length;
4820   var ok=false; for(var i in plaetze) if (plaetze[i]==nr) ok=true;
4821   if (ok)
4822   {
4823      SaalplanUnset(vaid,nr);
4824      var neu=''; for(var i in plaetze) if (plaetze[i]!=nr) neu=neu+(neu==''?'':',')+plaetze[i];
4825      $('#saalplaetze').val(neu);
4826   }
4827   else
4828   {
4829      if (anzahl>0) for(var i=0; i<=ist-anzahl; i++) SaalplanUnset(vaid,plaetze[i]);
4830      var neu=''; for(var i in plaetze) if (ist<anzahl || i>ist-anzahl || anzahl<0) neu=neu+(neu==''?'':',')+plaetze[i];
4831      neu=neu+(neu==''?'':',')+nr;
4832      $('#saalplaetze').val(neu);
4833
4834      $('.sitzplatz.'+nr).addClass('selected').removeClass('belegt').removeClass('frei').removeClass('locked');
4835      $.ajax({ type: 'GET', url: './?webservice=saalplanset&vaid='+vaid+'&nr='+nr, success: function(result)
4836      {
4837         if (result=='lock')
4838         {
4839            $('.sitzplatz.'+nr).addClass('locked').removeClass('belegt').removeClass('frei').removeClass('selected').css('cursor','default');
4840            var neu=''; for(var i in plaetze) if (plaetze[i]!=nr) neu=neu+(neu==''?'':',')+plaetze[i];
4841            $('#saalplaetze').val(neu);
4842            alert('dieser Platz '+nr+' wurde inzwischen reserviert');
4843         }
4844      } });
4845   }
4846}
4847
4848function SaalplanSave(veranstaltungid,csv)
4849{
4850   $.ajax(
4851   {
4852     type: 'POST', url: './?webservice=saalplancsv&vaid='+veranstaltungid, data: csv, cache: false, xhrFields: { withCredentials: true }, processData: false, contentType: false, crossDomain : true
4853   });
4854}
4855
4856function SaalplanUnset(vaid,nr)
4857{
4858   $('.sitzplatz.'+nr).removeClass('belegt').removeClass('locked').removeClass('selected');
4859   $.ajax({ type: 'GET', url: './?webservice=saalplanunset&vaid='+vaid+'&nr='+nr });
4860}
4861
4862function CheckSaalPersonen(anzahl)
4863{
4864   var saalplaetze=$('#saalplaetze').val();
4865   var plaetze=saalplaetze.length==0 ? [] : $('#saalplaetze').val().split(',');
4866   return anzahl==plaetze.length;
4867}
4868
4869function SaalplanUpdate(vaid)
4870{
4871   var saalplaetze=$('#saalplaetze').val();
4872   var plaetze=saalplaetze.length==0 ? [] : $('#saalplaetze').val().split(',');
4873
4874   $.ajax({ type: 'GET', url: './?webservice=saalplan&vaid='+vaid+'&plaetze='+saalplaetze, success: function(result)
4875   {
4876      var vor=$('#saalreserviert').val();
4877      $('#saalreserviert').val(result);
4878
4879      var ist=vor=='' ? [] : vor.split(',');
4880      var soll=result=='' ? [] : result.split(',');
4881
4882      for(var i in ist) if (soll.indexOf(ist[i])==-1) $('.sitzplatz.'+ist[i]).removeClass('selected').removeClass('belegt').removeClass('frei').removeClass('locked').css('cursor','pointer');
4883      for(var i in soll) if (ist.indexOf(soll[i])==-1 && plaetze.indexOf(soll[i])==-1) $('.sitzplatz.'+soll[i]).removeClass('selected').removeClass('belegt').removeClass('frei').addClass('locked').css('cursor','default');
4884
4885      for(var i in ist) if (ist[i].substr(0,1)=='*') $('.sitzplatz.'+ist[i].substr(1)).removeClass('locked').addClass('belegt').css('cursor','default');
4886   } });
4887}
4888
4889var saalplaetzepos, setzenr=0;
4890function SaalPlaetzeInit(isAdmin)
4891{
4892   if (isAdmin)
4893      $("#canvas").on("click", function(event)
4894      {
4895          var dx=8, dy=8;
4896          var x = event.pageX - $('#canvas').offset().left;
4897          var y = event.pageY - $('#canvas').offset().top;
4898          for(var i in saalplaetzepos)
4899          {
4900             var itm=saalplaetzepos[i];
4901             if (itm[0]-dx/2<=x && itm[0]+dx/2>=x && itm[1]-dy/2<=y && itm[1]+dy/2>=y)
4902             {
4903                if (itm[2]!=1) { saalplaetzepos[i][2]=2-saalplaetzepos[i][2]; SaalPlaetzeAnzeigen(); }
4904                return;
4905             }
4906          }
4907          setzenr++;
4908          $('#command').val($('#command').val()+setzenr+'=>array('+Math.round(x)+', '+Math.round(y)+'), ');
4909          saalplaetzepos[saalplaetzepos.length]=[x,y,0];
4910          SaalPlaetzeAnzeigen();
4911      });
4912   SaalPlaetzeAnzeigen();
4913}
4914
4915function SaalPlaetzeAnzeigen()
4916{
4917   var dx=8, dy=8;
4918   jg.clear();
4919   jg.setFont("Arial", "8", "");
4920   for(var i in saalplaetzepos)
4921   {
4922      var itm=saalplaetzepos[i];
4923      if (itm[2]==0) jg.setColor("#00ff00"); else if (itm[2]==1) jg.setColor("#ff0000"); else jg.setColor("#0000ff");
4924      jg.fillRect(itm[0]-dx/2, itm[1]-dy/2, dy, dy);
4925      jg.setColor("#000000");
4926      jg.drawString(i, itm[0]-dx/2+2, itm[1]-dy/2);
4927   }
4928   jg.paint();
4929}
4930
4931function DeleteBelegAttachment(id)
4932{
4933   $('#divatt'+id).hide();
4934   $('#attachments'+id).val('#'+$('#attachments'+id).val());
4935}
4936
4937function ListTypenlisteReNumber()
4938{
4939   var nr=0;
4940   $.each( $(".selectpos"), function(key, value) { nr++; $(this).val(nr); });
4941}
4942
4943function JBHSubmit(workflow)
4944{
4945   var ok=true, msg='';
4946   if (!$('#agb').prop('checked')) { ok=false; msg+='Bitte der AGB zustimmen\n'; }
4947   if (!$('#hausordnung').prop('checked')) { ok=false; msg+='Bitte der Hausordnung zustimmen\n'; }
4948   if (!$('#preisestorno').prop('checked')) { ok=false; msg+='Bitte der Preis- und Stornobedingungen zustimmen\n'; }
4949   if (!$('#haftpflicht').prop('checked')) { ok=false; msg+='Bitte der Haftpflicht-Bedingung zustimmen\n'; }
4950   if (!$('#datenschutz').prop('checked')) { ok=false; msg+='Bitte dem Datenschutz zustimmen\n'; }
4951   if (ok) { SetForm1Value('cmd',workflow); DirectForm1Submit(); } else alert(msg);
4952   return ok;
4953}
4954
4955function GetAllOptions(id)
4956{
4957   var select='';
4958   $('#'+id+' option:selected').each(function() { select+=(select==''?'':',')+$(this).val(); });
4959   return select;
4960}
4961
4962function BugSubscribe(bugid,enable,usercode)
4963{
4964   $('#subscribebtn').html('<DIV style="color:gray;font-weight:normal;min-height:41px;">Bitte warten...</DIV>');
4965   $.ajax({ url: './?webservice=bugsubscribe&bugid='+bugid+'&enable='+enable+'&usercode='+usercode, success: function(result) { $('#subscribelist').html(result); } });
4966}
4967
4968//function CheckSubscribersErwaehnung()
4969//{
4970//   var txt=$('#beschreibung').val();
4971//   ShowLightBox();
4972//   $.ajax({ url: './?webservice=bugcheckerwaehnung', data: 'txt='+encodeURIComponent(txt), success: function(result)
4973//   {
4974//      if (result=='') Form1Submit(); else { CloseLightBox(); alert('Ungültige Erwähnungen:'+result); }
4975//   } });
4976//}
4977
4978function RemoveVARePos(id)
4979{
4980   $.ajax({ url: './?webservice=removevarepos&id='+id, success: function(result)
4981   {
4982      $('#varepos'+id).html(result);
4983   } });
4984}
4985
4986function MySQLDateEx(dat)
4987{
4988   var data=dat.split('.');
4989   return Nr2(data[2],4)+"-"+Nr2(data[1],2)+"-"+Nr2(data[0],2);
4990}
4991
4992function Nr2(wert,stellen)
4993{
4994   while (wert.length<stellen) wert='0'+wert;
4995   return wert;
4996}
4997
4998function TerminplanungNeuALT()
4999{
5000   var kr=$('#filter4').prop('checked');
5001   $.each( $(".responsivetable tbody tr"), function(key, value) { if (!kr || $(this).find('select').val()=='') $(this).show(); else $(this).hide(); });
5002}
5003
5004function TerminplanungNeu()
5005{
5006   var an=!$('#filter1').prop('checked');
5007   var ab=!$('#filter2').prop('checked');
5008   var wa=!$('#filter3').prop('checked');
5009   //var kr=$('#filter4').prop('checked');
5010   $.each( $(".responsivetable tbody tr"), function(key, value)
5011   {
5012      //var w=$(this).find('select').val();
5013      var t=$(this).find('.anmeldestatus').html();
5014      if (t=='angemeldet') if (an) $(this).show(); else $(this).hide(); 
5015      if (t=='abgemeldet') if (ab) $(this).show(); else $(this).hide(); 
5016      if (t=='auf Warteliste') if (wa) $(this).show(); else $(this).hide(); 
5017   });
5018}
5019
5020function VereinOnlineGotoUrl(url)
5021{
5022  jQuery.ajax(
5023  {
5024    type: 'GET',
5025    crossDomain: true, 
5026    url: url + '&dialog=4',
5027    success: function(result) { $('#content').html(result); },
5028    error: function(r,e,txt) { $('#content').html('FEHLER: '+txt); } 
5029  });
5030}
5031
5032function EBriefBruttoPreis(jobid)
5033{
5034   $.ajax({ url: './?webservice=ebriefbruttopreis&id='+jobid, success: function(result) { $('#ebriefpreis').html(result); } });
5035}
5036
5037function ListeResize(id,bottom)
5038{
5039   if ($(id).length>0)
5040   {
5041      var h=$(window).height();
5042      var t=$(id).offset().top;
5043      $('body').css('overflow-y','hidden');
5044      //alert('id='+id+', max-height='+h+', top='+t+', bottom='+bottom);
5045      $(id).css('overflow-y','auto').css('max-height',(h-t-bottom)+'px');
5046   }
5047}
5048
5049function GekuendigtInfo(userid, gekdatum)
5050{
5051   if (userid=='' || userid==0 || gekdatum=='') { $('#gekuendigtinfo').html(''); return; }
5052   $.ajax({ url: './?webservice=gekuendigtinfo&id='+userid, success: function(result) { $('#gekuendigtinfo').html(result); } });
5053}
5054
5055var atzeichen=false, atname='', attextfield='', atselectfield='', atstart=0; atresult=[];
5056function ProcessBugNames(event, textfield, selectfield)
5057{
5058   if (event.key==='@' && ProcessBugCheckVorZeichen(textfield)) { atzeichen=true; attextfield=textfield; atselectfield=selectfield; atname=''; atstart=document.getElementById(attextfield).selectionStart; $('#'+atselectfield+' .processbugauswahl').html("..."); ProcessBugSetHeader(0); ProcessBugSetPosition(attextfield, atselectfield); $('#'+atselectfield).show(); } 
5059   else if (atzeichen && (event.key===' ' || event.key==='Enter' || event.key==='Tab')) { ProcessBugFinish(); event.preventDefault(); }
5060   else if (atzeichen && event.key.length==1) { atname+=event.key; if (atname.length<3) { $('#'+atselectfield+' .processbugauswahl').html(atname+'...'); ProcessBugSetHeader(0); } else ProcessBugSuche(); }
5061   else if (atzeichen && event.key=='Backspace' && atname.length>0) { atname=atname.substring(0,atname.length-1); if (atname.length<3) { $('#'+atselectfield+' .processbugauswahl').html(atname+'...'); ProcessBugSetHeader(0); } else ProcessBugSuche(); }
5062   else if (atzeichen && event.key=='Escape') { atzeichen=false; $('#'+atselectfield).hide(); }
5063   //else { $('#'+atselectfield+' .processbugauswahl').html(atname+'...['+event.key+']'); }
5064}
5065function ProcessBugSuche()
5066{
5067   $('#'+atselectfield+' .processbugauswahl').html('<img src="/admin/img/ajax.gif" WIDTH="60">');
5068   $.ajax({ url: './?webservice=bugname&atname='+encodeURIComponent(atname), success: function(result)
5069   {
5070      atresult=JSON.parse(result);
5071      if (atresult.error!=undefined) { $('#'+atselectfield+' .processbugauswahl').html('Fehler: '+atresult.error); ProcessBugSetHeader(0); return; }
5072      var txt=''; for(var z in atresult) txt+=atresult[z].caption+'<BR>';
5073      ProcessBugSetHeader(atresult.length);
5074      $('#'+atselectfield+' .processbugauswahl').html(txt);
5075   } });
5076}
5077function ProcessBugCheckVorZeichen(textfield)
5078{
5079   var pos=document.getElementById(textfield).selectionStart;
5080   if (pos==0) return true;
5081   var text=$('#'+textfield).val();
5082   var c=text.charCodeAt(pos-1);
5083   return c==10 || c==13 || c==32;
5084}
5085function ProcessBugSetHeader(anzahl)
5086{
5087   if (anzahl==0) $('.processbugheader').html('Auswahl Person oder Einheit<BR><FONT color=\"#444\" size=\"-1\">(bitte VornameNachname oder Einheit ohne Leerzeichen eingeben, mit ESC abbrechen)</FONT>');
5088   if (anzahl==1) $('.processbugheader').html('Auswahl Person oder Einheit<BR><FONT color=\"#444\" size=\"-1\">(mit Leerzeichen/Tab/Enter bestätigen, mit ESC abbrechen)</FONT>');
5089   if (anzahl>=2) $('.processbugheader').html('Auswahl Person oder Einheit<BR><FONT color=\"#444\" size=\"-1\">(bitte einen Treffer anklicken, mit ESC abbrechen)</FONT>');
5090}
5091function ProcessBugFinish()
5092{
5093   if (atresult.error!=undefined) return;
5094   ProcessBugSetName(atresult[0].result);
5095}
5096function ProcessBugSetName(name)
5097{
5098   var html=$('#'+attextfield).val();
5099   var txt=html.substring(0,atstart)+'@'+name+' ';
5100   var pos=txt.length;
5101   txt+=html.substring(atstart+atname.length+1);
5102   $('#'+atselectfield).hide();
5103   $('#'+attextfield).val(txt);
5104   $('#'+attextfield).focus();
5105   document.getElementById(attextfield).selectionStart=pos;
5106   document.getElementById(attextfield).selectionEnd=pos;
5107   atzeichen=false; 
5108}
5109function ProcessBugSetPosition(attextfield, atselectfield)
5110{
5111   const textarea = document.getElementById(attextfield);
5112   const { selectionStart } = textarea;
5113
5114   // Ein "Mirror"-Div erzeugen
5115   const div = document.createElement("div");
5116   const style = getComputedStyle(textarea);
5117   
5118   // Alle relevanten Styles kopieren
5119   for (const prop of [
5120     "boxSizing", "width", "height", "fontSize", "fontFamily", "fontWeight", 
5121     "lineHeight", "padding", "border", "overflow", "whiteSpace", 
5122     "letterSpacing", "textTransform"
5123   ]) {
5124     div.style[prop] = style[prop];
5125   }
5126
5127   div.style.position = "absolute";
5128   div.style.visibility = "hidden";
5129   div.style.whiteSpace = "pre-wrap";
5130   div.style.wordWrap = "break-word";
5131   div.style.top = textarea.offsetTop + "px";
5132   div.style.left = textarea.offsetLeft + "px";
5133
5134   // Inhalt bis zur Cursorposition einfügen
5135   const text = textarea.value.substring(0, selectionStart);
5136   const rest = textarea.value.substring(selectionStart);
5137   div.textContent = text;
5138
5139   // Cursor-Marker einfügen
5140   const span = document.createElement("span");
5141   span.textContent = rest.charAt(0) || '.';
5142   div.appendChild(span);
5143
5144   document.body.appendChild(div);
5145
5146   // Position ermitteln
5147   const { offsetLeft, offsetTop } = span;
5148   const coords = {
5149     x: offsetLeft - textarea.scrollLeft,
5150     y: offsetTop - textarea.scrollTop
5151   };
5152
5153   document.body.removeChild(div);
5154
5155   //alert(`Cursor ist bei: x=${coords.x}px, y=${coords.y}px`);
5156   const popup = document.getElementById(atselectfield);
5157   popup.style.top = (textarea.offsetTop + coords.y + 30) + "px";
5158   popup.style.left = (textarea.offsetLeft + coords.x) + "px";
5159}
5160
5161function KdNummer(kdnummer,id)
5162{
5163   $('#kdnummerinfo').html('').hide();
5164   $.ajax({ url: './?webservice=kdnummer&id='+id+'&kdnummer='+kdnummer.trim(), success: function(result) { if (result!='') $('#kdnummerinfo').show().html(result); } });
5165}
5166
5167function OpenSelectionGroup()
5168{
5169   $.each( $('.selectiongroup'), function(key, value)
5170   {
5171      var na=$(this).attr('id');
5172      var div='#div'+na.substr(3);
5173      if ($(this).prop('checked')) $(div).show(); else $(div).hide();
5174   });
5175}
5176
5177function AntragFamilie(familie)
5178{
5179   var status=$('#'+familie).prop('checked');
5180   if (status) { $('.'+familie).show(); return; }
5181   $('.'+familie).hide();
5182   $('.'+familie+' input:not([type=checkbox])').val('');
5183   $('.'+familie+' input[type=checkbox]').prop('checked',false);
5184}
5185
5186function LazyLoadDialog(url)
5187{
5188  jQuery.ajax(
5189  {
5190    type: 'GET',
5191    crossDomain: true, 
5192    url: url,
5193
5194    success: function(result)
5195    {
5196       var s=result.toLowerCase().indexOf('<body'); if (s<0) s=0;
5197       var e=result.toLowerCase().indexOf('</body'); if (e<0) e=result.length;
5198       $.each( $('.tinymceinstance'), function() { tinymce.EditorManager.execCommand('mceRemoveEditor',true, $(this).attr('id')); });
5199       $('body').html(result.substr(s,e-s+7));
5200       $.each( $('.tinymceinstance'), function() { tinymce.EditorManager.execCommand('mceAddControl',true, $(this).attr('id')); });
5201       LoadMainReady('gewählt','Auswahl');
5202    },
5203    error: function(r,e,txt) { $('html').html('FEHLER: '+txt); } 
5204  });
5205}
5206
5207function FormSubmitLazy(url,form)
5208{
5209   var data=new FormData();
5210   var werte={ dialog:4 }; 
5211   jQuery.each(jQuery('#'+form+' input, #'+form+' select, #'+form+' textarea.mceNoEditor'), function(key,value) 
5212   {
5213      //if (value.value.length>0) alert(value.name+'='+value.value+'.  '+value.value.length);
5214      if (value.name.substr(value.name.length-2)=='[]') { if (value.checked) { var k=value.name.substr(0,value.name.length-2); if (werte[k]!=undefined) werte[k]=werte[k]+'|'+value.value; else werte[k]=value.value; } }
5215      else if (value.type=='radio') { if (jQuery(this).prop('checked')) data.append(value.name, value.value); }
5216      else if (value.type=='checkbox') { if (jQuery(this).prop('checked')) data.append(value.name, value.value); }
5217      else if (value.type!='file') data.append(value.name, value.value); 
5218      else if (value.files.length>0) data.append(value.name, value.files[0]);
5219   });
5220   jQuery.each(jQuery('#'+form+' textarea:not(.mceNoEditor)'), function(key,value) 
5221   {
5222      data.append(value.name, GetEditorContent('tiny'+value.name));
5223   });
5224   for(var k in werte) data.append(k, werte[k]);
5225   jQuery.ajax(
5226   {
5227     type: 'POST', url: url, data: data, cache: false, xhrFields: { withCredentials: true }, processData: false, contentType: false, crossDomain : true,
5228     error: function(r,e,txt) { alert('FEHLER: '+r.status+': '+txt); }, 
5229     success: function(result) { LazyLoadDialog(result); }
5230   });
5231}
5232
5233function SetMaxHeight(selector)
5234{
5235   if ($(window).width()<=767)
5236   {
5237      $(selector).css('height', 'auto');
5238      $(selector).css('max-height', 'auto');
5239      $(selector).css('overflow-y','visible');
5240      $('body').css('overflow-y','visible');
5241   }
5242   else
5243   {
5244      var h=$(window).height()-$(selector).offset().top-50;
5245      //$(selector).css('background', 'lightgreen');
5246      $(selector).css('overflow-y','auto');
5247      $(selector).css('max-height', h+'px');
5248      $(selector).css('height', h+'px');
5249   }
5250}
5251
5252function ScrollToEnd(id)
5253{
5254   var el=document.getElementById(id);
5255   el.scrollTop=el.scrollHeight;
5256}
5257
5258function DeactivateButton(el)
5259{
5260   el.attr('href','#').attr('onclick',"javascript:return false;");
5261}
5262
5263function SpanShowHide(id, typ)
5264{
5265   $('#'+id).css('display', $('#'+id).css('display')!="none" ? "none" : typ);
5266}
5267
5268function SwitchPassword(feld)
5269{
5270   const passwordField = document.getElementById(feld);
5271   passwordField.type = passwordField.type === "password" ? "text" : "password";
5272   SpanShowHide('pwdswitchon'+feld, "inline");
5273   SpanShowHide('pwdswitchoff'+feld, "inline");
5274}
5275
5276function SwitchKommentar(html)
5277{
5278   SpanShowHide('linkkommentarhtml', "inline");
5279   SpanShowHide('linkkommentar', "inline");
5280   SpanShowHide('divkommentarhtml', "block");
5281   SpanShowHide('divkommentar', "block");
5282   tiny=GetEditor('tinykommentarhtml');
5283   if (!html) $('#kommentar').val(tiny.getContent()); else tiny.setContent($('#kommentar').val());
5284   $('#kommentartyp').val(html?"html":"text");
5285}
5286
5287function SendChatMessage(action, cmd, id)
5288{
5289   var post = new FormData(); var j=0;
5290   post.append('nachricht', $('#nachricht').val());
5291   if ($('#mail').prop('checked')) post.append('mail','1');
5292   if ($('#push').prop('checked')) post.append('push','1');
5293   $('#form1 input[type="file"]').each(function() { if (this.files) for (var i=0;i<this.files.length;i++) post.append($(this).attr('name'), this.files[i]); });
5294
5295   $('#chatview').html('<IMG SRC="https://www.vereinonline.org/admin/img/ajax.gif">');
5296
5297   $.ajax({ type: 'POST', url: './?webservice=gui&act='+action+'&cmd='+cmd+'&id='+id, data:post, cache: false, xhrFields: { withCredentials: true }, processData: false, contentType: false, crossDomain : true, success: function(result)
5298   {
5299      $('#chatview').html(result);
5300      SetMaxHeight('#chatviewmessages'); ScrollToEnd('chatviewmessages');
5301   } });
5302}
5303
5304function SendKI(href)
5305{
5306   $('#waiticon').show();
5307   window.location.href = href;
5308}
5309
5310function TabelleSchrumpfen()
5311{
5312  var tables=document.getElementsByClassName('responsivetable');
5313  if (tables.length==0) return;
5314  var table=tables[0];
5315  const containerWidth = table.parentElement.clientWidth;
5316  const totalWidth = table.scrollWidth;
5317
5318  if (totalWidth > containerWidth)
5319  {
5320    const scale = containerWidth / totalWidth;
5321    if (scale<0.75) scale=0.75;
5322    table.style.transform = `scale(${scale})`;
5323    table.style.transformOrigin = 'left top';
5324  }
5325  else 
5326  {
5327    table.style.transform = 'none';
5328  }
5329}
5330
5331function RemoveTaskFromTOP(aufgabenid)
5332{
5333  $('.rowaufgabenid'+aufgabenid).hide();
5334  $('#aufgabenid'+aufgabenid).val('');
5335}
5336
5337function AddTaskToTOP(aufgabenid)
5338{
5339  if (aufgabenid==0) { alert("Bitte Aufgabe wählen"); return; }
5340  var aufgaben='', ok=true;
5341  $.each( $("input[name^='aufgabenid']"), function(key, value) { if ($(this).val()==aufgabenid) ok=false; if ($(this).val()!='') aufgaben+=(aufgaben==''?'':',')+$(this).val(); });
5342  if (!ok) { alert('Diese Aufgabe ist bereits zugeordnet'); return; }
5343  aufgaben+=(aufgaben==''?'':',')+aufgabenid;
5344  $.ajax({ url: './?webservice=topaufgabeadd&aufgaben='+aufgaben, success: function(result) { $('#aufgabeliste').html(result); } });
5345}
5346
5347function CheckAppUser(id)
5348{
5349  if (id=='' || id[0]=='g')
5350    $('#checkappuser').html('');
5351  else
5352    $.ajax({ url: './?webservice=checkappuser&id='+id, success: function(result) { $('#checkappuser').html(result); } });
5353}
5354
5355function SlideDown(all, thisbody)
5356{
5357  if (!$(thisbody).is(':visible'))
5358  {
5359    $(all).slideUp("fast");
5360    $(thisbody).slideDown("fast");
5361  }
5362  else
5363    $(thisbody).slideUp("fast");
5364}
5365
5366function FooTableAlleSpalten()
5367{
5368  var ft = FooTable.get('.footable');
5369  $(ft.columns.array).each(function() { this.breakpoints = []; } );
5370  ft.draw();
5371}
5372
5373function DeleteNeuerBeleg(zeile, reid)
5374{
5375  $('#zeile_'+zeile).remove();
5376  $.ajax({ url: './?webservice=deleteneuerbeleg&id='+reid });
5377}
5378
5379function SendKIAnfrage(kiid)
5380{
5381  var data={ txt: $('#kifragetext').val() };
5382  $('#kiassistent').html("Bitte warten...");
5383  $.ajax({ type: 'POST', url: './?webservice=kiassistent&kiid='+kiid, data: data, success: 
5384    function(result)
5385    {
5386      $('#kiassistent').html(result); 
5387      $('#kifragetext').focus();
5388      document.getElementById('kiletzteantwort').scrollIntoView();
5389    }
5390  });
5391}
5392
5393function WebPushInit(scope)
5394{
5395   var r=CheckNotification();
5396   if (r=='unsupported')
5397      alert("Ihr Browser unterstützt diese Funktion leider nicht");
5398   else if (r=='granted')
5399      alert("Diese Funktion ist bereits aktiviert.\n\nSie können diese im Browser deaktivieren (meist in der Adresszeile des Browsers)");
5400   else if (r=='denied')
5401      alert("Sie haben die Benachrichtigungen für diese Url deaktiviert, bitte ggf. im Browser wieder aktivieren.");
5402   else if (confirm("Möchten Sie Web-Push-Benachrichtigungen im Browser aktivieren?"))
5403   {
5404      EnableNotification(scope);
5405      window.setTimeout("WebPushRefresh();",3000);
5406   }
5407}
5408function WebPushRefresh()
5409{
5410   var r=CheckNotification();
5411   $('#webpushinfo').html(' ('+FormatWebPushInfo(r)+')');
5412}
5413async function WebPushUnsubscribe()
5414{
5415  const reg = await navigator.serviceWorker.ready;
5416  const sub = await reg.pushManager.getSubscription();
5417  if (sub)
5418  {
5419     //console.log(await reg.pushManager.getSubscription());
5420     //const result = await sub.unsubscribe();
5421     //console.log('result:'+result);
5422     //console.log(await reg.pushManager.getSubscription());
5423     //const regs = await navigator.serviceWorker.getRegistrations();
5424     //for (const reg of regs) await reg.unregister();
5425     await $.ajax({ type: 'POST', url: './?action=admin_webpush&cmd=unsubscribe', data: sub.endpoint });
5426  }
5427}
5428async function WebPushLoginResubscribe()
5429{
5430  const reg = await navigator.serviceWorker.ready;
5431  const sub = await reg.pushManager.getSubscription();
5432  if (sub) await $.ajax({ type: 'POST', url: './?action=admin_webpush&cmd=resubscribe', data: JSON.stringify(sub) });
5433}
5434function UrlBase64ToUint8Array(base64String)
5435{
5436   const padding = '='.repeat((4 - base64String.length % 4) % 4);
5437   const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');
5438   const rawData = window.atob(base64);
5439   const outputArray = new Uint8Array(rawData.length);
5440   for (let i = 0; i < rawData.length; ++i) { outputArray[i] = rawData.charCodeAt(i); }
5441   return outputArray;
5442}
5443function IsSupported()
5444{
5445   if (!window.Notification) return false;
5446   if (!('serviceWorker' in navigator)) return false;
5447   if (!('PushManager' in window)) return false;
5448   return true;
5449}
5450function CreateNotificationSubscription(pushServerPublicKey)
5451{
5452   return navigator.serviceWorker.ready.then(function(serviceWorker)
5453   {
5454      return serviceWorker.pushManager
5455         .subscribe({
5456            userVisibleOnly: true,
5457            applicationServerKey: UrlBase64ToUint8Array(pushServerPublicKey)
5458         })
5459         .then(function(pushSubscription) {
5460            var subJSObject = JSON.parse(JSON.stringify(pushSubscription));
5461            var subscription = { 'endpoint': subJSObject.endpoint, 'authToken': subJSObject.keys.auth, 'publicKey': subJSObject.keys.p256dh };
5462            return subscription;
5463         });
5464   });
5465}
5466function RegisterServiceWorker(file,scope)
5467{
5468   if (!navigator.serviceWorker) return;
5469   navigator.serviceWorker.register(file, { scope: scope });
5470}
5471function RegisterSubscription(status)
5472{
5473   // status kann folgende Werte haben: default: User wurde noch nicht gefragt / granted: User hat zugestimmt / denied: User hat abgelehnt
5474   if (status == 'granted')
5475   {
5476      var publickey="BGjFF3anZLhEGyBCKRp0uSN2vYe6TbQzpyC1dSlaC5TH-YtMV173ZQCG9FMyJ5s5LIMi8NuQcskeOzMgq_5X1xs";
5477      //console.log(status);
5478      CreateNotificationSubscription(publickey).then(function(subscription)
5479      {
5480         //console.log(subscription);
5481         fetch('?action=admin_webpush&cmd=subscribe', { method: 'post', headers: { 'Content-type': "application/json" }, body: JSON.stringify(subscription) });
5482      });
5483   }
5484   else if (status=='denied')
5485      alert('Sie haben die Benachrichtigungen für diese Url deaktiviert, bitte ggf. im Browser wieder aktivieren.');
5486}
5487function EnableNotification(scope)
5488{
5489   if (!IsSupported()) { alert('Ihr Browser unterstützt keine Benachrichtigungen'); return; }
5490   RegisterServiceWorker('serviceworker.js',scope);
5491   Notification.requestPermission(RegisterSubscription);
5492}
5493function CheckNotification()
5494{
5495   if (!IsSupported()) return "unsupported";
5496   return Notification.permission;
5497}
5498function FormatWebPushInfo(txt)
5499{
5500   if (txt=='default') return 'nicht aktiviert';
5501   if (txt=='granted') return 'aktiviert';
5502   if (txt=='denied') return 'deaktiviert';
5503   if (txt=='unsupported') return 'vom Browser nicht unterstützt';
5504   return txt;
5505}
5506
5507function GetRegierungsbezirk(ort, suchbegriffort)
5508{
5509  $.ajax({ type: 'POST', url: './?webservice=getregierungsbezirk', data: 'ort='+encodeURIComponent(ort)+'&suchbegriffort='+encodeURIComponent(suchbegriffort), success: function(result) { $('#regierungsbezirk').html(result); } });
5510}
5511
5512function SetReaction(nr, pos, pic, emoij, me)
5513{
5514  $('.reactions.nr'+nr+' .reaction.pos'+pos).toggleClass('me');
5515  $.ajax({ type: 'POST', url: './?webservice=setreaction', data: 'nr='+nr+'&pic='+encodeURIComponent(pic)+'&emoij='+emoij+'&me='+me, success: function(result)
5516  {
5517    $('.reactions.nr'+nr).html(result);
5518  } });
5519}

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.