PageSourceSearch

https://www.ref-sg.ch/Kirchgemeinden.html

html ref-sg.ch collected 2026-10-02 10:27:40 UTC 82,504 bytes, 1,848 lines download raw bytes

1<!DOCTYPE html>
2<html lang="de" class="no-js">
3<head>
4
5        <meta charset="UTF-8">
6    <title>Unsere Kirchgemeinden - Evangelisch-reformierte Kirche des Kantons St.Gallen</title>
7    <base href="https://www.ref-sg.ch/">
8    <link rel="icon" href="/favicon.ico" type="image/x-icon">
9
10        <meta name="robots" content="index,follow">
11    <meta name="description" content="">
12    <meta name="generator" content="Contao Open Source CMS">
13    <meta name="google-site-verification" content="SEb1l4oJW_KJMjPrASAkT07B0MCYm5BODt5rYVtjl8s"/>
14    
15    
16    <meta name="viewport" content="width=device-width,initial-scale=1.0">
17        <link rel="stylesheet" href="/assets/css/layout.min.css,responsive.min.css,reset.min.css,mmenu.css,column...-f43dfc31.css">        
17<script src="/assets/js/jquery.min.js,mmenu.js-7d709994.js"></script>
17<meta name="search:type" content="page"/>
17<script src="/assets/js/vue.min.js,vue-resource.min.js-4467e5c0.js"></script>
17<script src="/assets/js/autoComplete.min.js-be8066c1.js"></script>
17<link href="/assets/css/default.scss,autoComplete.scss-155e173d.css" rel="stylesheet"><link href="/assets/css/elasticsearch.scss-9384fcaf.css" rel="stylesheet">    
18</head>
19<body
20    id="top">
21
22
23  
24<div id="overlay">
25  <div class="inside">
26    
27<div class="info-overlay">
28	<div class="rs-columns ce_rs_columns_start">
29
30	<div class="ce_rs_column_start  rs-column -large-col-2-1 -large-first -large-first-row -medium-col-2-1 -medium-first -medium-first-row -small-col-1-1 -small-first -small-last -small-first-row">
31
32	
33<div class="ce_text block">
34
35            <h1>Evangelisch-reformierte Kirche des Kantons St.Gallen</h1>
36      
37  
38      <p>«Willkommen, unsere Türen sind offen». Dies gilt für fast alle reformierten Kirchen im Kanton St.Gallen. Gleiches gilt auch, wenn Sie ein Anliegen an uns haben. Wenden Sie sich an Ihre Kirchgemeinde.</p>  
39  
40  
41
42</div>
43</div>
44<div class="ce_rs_column_start  rs-column -large-col-2-1 -large-last -large-first-row -medium-col-2-1 -medium-last -medium-first-row -small-col-1-1 -small-first -small-last">
45
46	
47<div class="ce_text second-row block">
48
49        
50  
51      <p>Oder Sie setzen sich direkt mit der Kantonalkirche, also der Evangelisch-reformierten Kirche des Kantons St.Gallen, in Verbindung. Sie finden uns am Oberen Graben 31 in 9000 St.Gallen. Erreichbar sind wir in der Regel werktags von 8 bis 12 Uhr und von 14 bis 17 Uhr unter 071 227 05 00 oder per Mail unter &#105;&#x6E;&#102;&#x6F;&#64;&#x72;&#101;&#x66;&#45;&#x73;&#103;&#x2E;&#99;&#x68;.</p>  
52  
53  
54
55</div>
56</div>
57</div>
58
59<a href="javascript:;" id="overlay_close">
60	<img src="files/template/img/close_overlay.png" alt="Schliessen" />	
61</a>  
62
63</div>  </div>
64</div>
65  
66<div id="search">
67  <div class="inside">
68        <div></div>  </div>
69</div>
70
71<div id="wrapper" class="main-wrapper">
72
73                <header id="header" class="main-header">
74            <div class="inside">
75                
76<!-- indexer::stop -->
77<nav class="mod_navigation headernav block">
78
79  
80  <a href="/Kirchgemeinden.html#skipNavigation1" class="invisible">Navigation überspringen</a>
81
82  <ul class="level_1" role="menubar">
83    
84        
85                    <li class="submenu trail not-clickable">
86                <a                     href="/ueberuns.html"                    title="St.Galler Kirche" class="submenu trail not-clickable"                    role="menuitem" aria-haspopup="true">St.Galler Kirche</a><ul class="level_2" role="menu">
87    
88        
89                    <li class="sibling">
90                <a                     href="/ueberuns.html"                    title="Über uns" class="sibling"                    role="menuitem">Über uns</a>            </li>
91            
92        
93                    <li class="sibling">
94                <a                     href="/neue-kirchenverfassung.html"                    title="Neue Kirchenverfassung" class="sibling"                    role="menuitem">Neue Kirchenverfassung</a>            </li>
95            
96        
97                    <li class="active"><span class="active"
98                                                    role="menuitem">Unsere Kirchgemeinden</span>            </li>
99            
100        
101                    <li class="sibling">
102                <a                     href="/synode.html"                    title="Synode" class="sibling"                    role="menuitem">Synode</a>            </li>
103            
104        
105                    <li class="sibling">
106                <a                     href="/kirchenrat.html"                    title="Kirchenrat" class="sibling"                    role="menuitem">Kirchenrat</a>            </li>
107            
108        
109                    <li class="sibling">
110                <a                     href="/st-galler-kirche/team.html"                    title="team" class="sibling"                    role="menuitem">Team der Kantonalkirche</a>            </li>
111            
112        
113                    <li class="sibling">
114                <a                     href="/fuerdiekirchearbeiten.html"                    title="Für die Kirche arbeiten" class="sibling"                    role="menuitem">Für die Kirche arbeiten</a>            </li>
115            
116        
117                    <li class="sibling">
118                <a                     href="/persoenlichkeitsschutz.html"                    title="Gewährleistung des Persönlichkeitsschutzes in der Kirche" class="sibling"                    role="menuitem">Persönlichkeitsschutz</a>            </li>
119            </ul>
120            </li>
121            
122        
123                    <li class="submenu not-clickable">
124                <a                     href="/gottesdienste.html"                    title="Kirche für alle" class="submenu not-clickable"                    role="menuitem" aria-haspopup="true">Kirche für alle</a><ul class="level_2" role="menu">
125    
126        
127                    <li>
128                <a                     href="/gottesdienste.html"                    title="Gottesdienste"                    role="menuitem">Gottesdienste</a>            </li>
129            
130        
131                    <li>
132                <a                     href="/Musik.html"                    title="Musik"                    role="menuitem">Musik</a>            </li>
133            
134        
135                    <li>
136                <a                     href="/seelsorge-beratung.html"                    title="Seelsorge und Beratung"                    role="menuitem">Seelsorge und Beratung</a>            </li>
137            
138        
139                    <li>
140                <a                     href="/diakonie.html"                    title="Diakonie"                    role="menuitem">Diakonie</a>            </li>
141            
142        
143                    <li>
144                <a                     href="/junge-menschen-begleiten.html"                    title="Junge Menschen begleiten"                    role="menuitem">Junge Menschen begleiten</a>            </li>
145            
146        
147                    <li>
148                <a                     href="/bildung.html"                    title="Bildung"                    role="menuitem">Bildung</a>            </li>
149            
150        
151                    <li>
152                <a                     href="/eintreten.html"                    title="In die Kirche eintreten"                    role="menuitem">In die Kirche eintreten</a>            </li>
153            
154        
155                    <li>
156                <a                     href="https://www.kirche-tut-gut.ch/"                    title="kirche tut gut"                    role="menuitem">Kirche tut gut</a>            </li>
157            </ul>
158            </li>
159            
160        
161                    <li class="submenu not-clickable">
162                <a                     href="/fuer-mitarbeitende/zentrale-dienste.html"                    title="Mitarbeitende und Behörden" class="submenu not-clickable"                    role="menuitem" aria-haspopup="true">Mitarbeitende und Behörden</a><ul class="level_2" role="menu">
163    
164        
165                    <li>
166                <a                     href="/fuer-mitarbeitende/zentrale-dienste.html"                    title="Zentrale Dienste"                    role="menuitem">Zentrale Dienste</a>            </li>
167            
168        
169                    <li>
170                <a                     href="/arbeitsstellen.html"                    title="Arbeitsstellen"                    role="menuitem">Arbeitsstellen</a>            </li>
171            
172        
173                    <li>
174                <a                     href="/seelsorge-und-beratung.html"                    title="Seelsorge und Beratung"                    role="menuitem">Seelsorge und Beratung</a>            </li>
175            
176        
177                    <li>
178                <a                     href="/veranstaltungen.html"                    title="Veranstaltungen und Weiterbildungen"                    role="menuitem">Veranstaltungen und Weiterbildungen</a>            </li>
179            
180        
181                    <li>
182                <a                     href="/Verfassung-und-gueltige-Erlasse.html"                    title="Verfassung und gültige Erlasse"                    role="menuitem">Verfassung und gültige Erlasse</a>            </li>
183            </ul>
184            </li>
185            
186        
187                    <li class="submenu not-clickable">
188                <a                     href="/Kontakt.html"                    title="Service" class="submenu not-clickable"                    role="menuitem" aria-haspopup="true">Service</a><ul class="level_2" role="menu">
189    
190        
191                    <li>
192                <a                     href="/Kontakt.html"                    title="Kontakt"                    role="menuitem">Kontakt</a>            </li>
193            
194        
195                    <li>
196                <a                     href="/Medien.html"                    title="Medien"                    role="menuitem">Medien</a>            </li>
197            
198        
199                    <li>
200                <a                     href="/finanzielle-unterstuetzung.html"                    title="Finanzielle Unterstützung"                    role="menuitem">Finanzielle Unterstützung</a>            </li>
201            
202        
203                    <li>
204                <a                     href="/newsletter-anmeldung.html"                    title="Newsletter"                    role="menuitem">Newsletter</a>            </li>
205            
206        
207                    <li>
208                <a                     href="/pfefferstern.html"                    title="Pfefferstern und Reforum"                    role="menuitem">Pfefferstern und Reforum</a>            </li>
209            
210        
211                    <li>
212                <a                     href="/Material.html"                    title="Zum Mieten"                    role="menuitem">Zum Mieten</a>            </li>
213            
214        
215                    <li>
216                <a                     href="/shop.html"                    title="Zum Bestellen"                    role="menuitem">Zum Bestellen</a>            </li>
217            
218        
219                    <li>
220                <a                     href="/stellen.html"                    title="Stellen"                    role="menuitem">Stellen</a>            </li>
221            </ul>
222            </li>
223            </ul>
224
225  <span id="skipNavigation1" class="invisible"></span>
226
227</nav>
228<!-- indexer::continue -->
229<!-- indexer::stop -->
230<nav class="mod_mmenu mobilenavi" id="mobile-show">
231
232    
233<ul class="level_1" role="menubar">
234                        <li class="submenu trail"><a
235                    href="/ueberuns.html"
236                    title="St.Galler Kirche" class="submenu trail"                    role="menuitem" aria-haspopup="true">St.Galler Kirche</a><ul class="level_2" role="menu">
237                        <li class="sibling"><a
238                    href="/ueberuns.html"
239                    title="Über uns" class="sibling"                    role="menuitem">Über uns</a>            </li>
240                                <li class="sibling"><a
241                    href="/neue-kirchenverfassung.html"
242                    title="Neue Kirchenverfassung" class="sibling"                    role="menuitem">
242Neue Kirchenverfassung</a>            </li>
243                                <li class="active"><span class="active"
244                                                    role="menuitem">Unsere Kirchgemeinden</span>            </li>
245                                <li class="sibling"><a
246                    href="/synode.html"
247                    title="Synode" class="sibling"                    role="menuitem">Synode</a>            </li>
248                                <li class="sibling"><a
249                    href="/kirchenrat.html"
250                    title="Kirchenrat" class="sibling"                    role="menuitem">Kirchenrat</a>            </li>
251                                <li class="sibling"><a
252                    href="/st-galler-kirche/team.html"
253                    title="team" class="sibling"                    role="menuitem">Team der Kantonalkirche</a>            </li>
254                                <li class="sibling"><a
255                    href="/fuerdiekirchearbeiten.html"
256                    title="Für die Kirche arbeiten" class="sibling"                    role="menuitem">Für die Kirche arbeiten</a>            </li>
257                                <li class="sibling"><a
258                    href="/persoenlichkeitsschutz.html"
259                    title="Gewährleistung des Persönlichkeitsschutzes in der Kirche" class="sibling"                    role="menuitem">Persönlichkeitsschutz</a>            </li>
260            </ul>
261            </li>
262                                <li class="submenu"><a
263                    href="/gottesdienste.html"
264                    title="Kirche für alle" class="submenu"                    role="menuitem" aria-haspopup="true">Kirche für alle</a><ul class="level_2" role="menu">
265                        <li><a
266                    href="/gottesdienste.html"
267                    title="Gottesdienste"                    role="menuitem">Gottesdienste</a>            </li>
268                                <li><a
269                    href="/Musik.html"
270                    title="Musik"                    role="menuitem">Musik</a>            </li>
271                                <li><a
272                    href="/seelsorge-beratung.html"
273                    title="Seelsorge und Beratung"                    role="menuitem">Seelsorge und Beratung</a>            </li>
274                                <li><a
275                    href="/diakonie.html"
276                    title="Diakonie"                    role="menuitem">Diakonie</a>            </li>
277                                <li><a
278                    href="/junge-menschen-begleiten.html"
279                    title="Junge Menschen begleiten"                    role="menuitem">Junge Menschen begleiten</a>            </li>
280                                <li><a
281                    href="/bildung.html"
282                    title="Bildung"                    role="menuitem">Bildung</a>            </li>
283                                <li><a
284                    href="/eintreten.html"
285                    title="In die Kirche eintreten"                    role="menuitem">In die Kirche eintreten</a>            </li>
286                                <li><a
287                    href="https://www.kirche-tut-gut.ch/"
288                    title="kirche tut gut"                    role="menuitem">Kirche tut gut</a>            </li>
289            </ul>
290            </li>
291                                <li class="submenu"><a
292                    href="/fuer-mitarbeitende/zentrale-dienste.html"
293                    title="Mitarbeitende und Behörden" class="submenu"                    role="menuitem" aria-haspopup="true">Mitarbeitende und Behörden</a><ul class="level_2" role="menu">
294                        <li><a
295                    href="/fuer-mitarbeitende/zentrale-dienste.html"
296                    title="Zentrale Dienste"                    role="menuitem">Zentrale Dienste</a>            </li>
297                                <li><a
298                    href="/arbeitsstellen.html"
299                    title="Arbeitsstellen"                    role="menuitem">Arbeitsstellen</a>            </li>
300                                <li><a
301                    href="/seelsorge-und-beratung.html"
302                    title="Seelsorge und Beratung"                    role="menuitem">Seelsorge und Beratung</a>            </li>
303                                <li><a
304                    href="/veranstaltungen.html"
305                    title="Veranstaltungen und Weiterbildungen"                    role="menuitem">Veranstaltungen und Weiterbildungen</a>            </li>
306                                <li><a
307                    href="/Verfassung-und-gueltige-Erlasse.html"
308                    title="Verfassung und gültige Erlasse"                    role="menuitem">Verfassung und gültige Erlasse</a>            </li>
309            </ul>
310            </li>
311                                <li class="submenu"><a
312                    href="/Kontakt.html"
313                    title="Service" class="submenu"                    role="menuitem" aria-haspopup="true">Service</a><ul class="level_2" role="menu">
314                        <li><a
315                    href="/Kontakt.html"
316                    title="Kontakt"                    role="menuitem">Kontakt</a>            </li>
317                                <li><a
318                    href="/Medien.html"
319                    title="Medien"                    role="menuitem">Medien</a>            </li>
320                                <li><a
321                    href="/finanzielle-unterstuetzung.html"
322                    title="Finanzielle Unterstützung"                    role="menuitem">Finanzielle Unterstützung</a>            </li>
323                                <li><a
324                    href="/newsletter-anmeldung.html"
325                    title="Newsletter"                    role="menuitem">Newsletter</a>            </li>
326                                <li><a
327                    href="/pfefferstern.html"
328                    title="Pfefferstern und Reforum"                    role="menuitem">Pfefferstern und Reforum</a>            </li>
329                                <li><a
330                    href="/Material.html"
331                    title="Zum Mieten"                    role="menuitem">Zum Mieten</a>            </li>
332                                <li><a
333                    href="/shop.html"
334                    title="Zum Bestellen"                    role="menuitem">Zum Bestellen</a>            </li>
335                                <li><a
336                    href="/stellen.html"
337                    title="Stellen"                    role="menuitem">Stellen</a>            </li>
338            </ul>
339            </li>
340            </ul>
341
342<div class="mm-menu__close">
343    <span class="icon"></span>
344</div>
345
346</nav>
347<!-- indexer::continue -->
348
349<div id="sidenavigation"><a href="#mobile-show"><span></span></a></div>
350<div class="logo"><div class="ce_image only-desktop block">
351
352        
353  
354<figure class="image_container">
355
356        <a href="/evang-ref-kirche-st-gallen.html" title="Reformierte Kirche St.Gallen">
357        
358        
359
360<img src="/files/content/bilder-logos/Logo_2025_rgb_vektor.svg" alt="Reformierte Kirche St.Gallen">
361
362
363            </a>
364
365            
366</figure>
367
368
369</div>
370  
371</div>
372<div class="logo"><div class="ce_image only-mobile block">
373
374        
375  
376<figure class="image_container">
377
378        <a href="/evang-ref-kirche-st-gallen.html" title="Reformierte Kirche St.Gallen">
379        
380        
381
382<img src="/files/content/bilder-logos/Logo_2025_rgb_vektor.png" width="339" height="256" alt="Reformierte Kirche St.Gallen">
383
384
385            </a>
386
387            
388</figure>
389
390
391</div>
392  
393</div>
394<!-- indexer::stop -->
395<div class="mod_elasticsearch block">
396
397        
398      <div id="id_search_6abf871a1635663" class="elasticsearch-container" v-bind:class="{results_open: hasResults}">
399
400        <div class="elasticsearch-container-inside" ref="elasticsearchContainerInside">
401            <form method="GET">
402                <div class="elasticsearch-search-panel">
403                    <div class="elasticsearch-input">
404                        <input id="ctrl_keywords_63" type="search" @keyup="search" @search="search" v-model="keywords" placeholder="Wer sucht, der findet..." spellcheck=false autocomplete="off" autocapitalize="off">
405                        <button @click.stop.prevent="search" class="elasticsearch-input-button">
406                            <img v-if="!loading" src="/files/template/img/new/search.svg" alt="Suchen" class="button-search-icon">
407                            <img v-else src="/files/template/img/new/loading.svg" alt="" class="button-loading-icon">
408                        </button>
409                    </div>
410                </div>
411            </form>
412
413            <div class="elasticsearch-results-panel" v-if="hasResults">
414
415                <div class="close-results">
416                    <button @click.stop.prevent="close" class="close button"><span>Schließen</span></button>
417                </div>
418
419                <div class="suggest-results">
420                    <p v-if="keywords" class="suggest-results-for">Ergebnisse für <span>{{ keywords }}</span></p>
421                    <p v-if="views.didYouMean.length" class="suggest-results-mean">Meinten Sie  <a @click.stop.prevent="setDidYouMeanToKeyword" v-for="didYouMean in views.didYouMean" v-if="didYouMean !== keywords"><span>{{ didYouMean }}</span></a></p>
422                </div>
423
424                <div class="categories-results">
425                    <div class="categories-headline">
426                        <p>Kategorien</p>
427                    </div>
428                    <nav v-if="Object.keys(views.categories).length">
429                        <ul>
430                            <li v-for="category in views.categories" class="category-item" v-bind:class="{active: activeCategory(category.key)}">
431                                <button @click.stop.prevent="setCategory(category.key)" class="category-item-button"><span v-html="category.label"></span><i v-if="category.count">({{ category.count }})</i></button>
432                            </li>
433                        </ul>
434                    </nav>
435                </div>
436
437                <div v-if="Object.keys(views.results).length" class="search-results">
438                    <div v-if="Object.keys(views.globalRichSnippets).length && views.globalRichSnippets.hasOwnProperty('FAQPage')" class="search-rich-snippets">
439                        <div class="faq-rich-snippet" v-if="Object.keys(richSnippets['faq']).length">
440                            <div v-for="(faq,name) in richSnippets['faq']" class="faq-container" v-bind:class="{active:faq.active}">
441                                <div class="faq-question" @click="toggleFaqSnippet(name)">
442                                    <p><strong>{{ faq.question }}</strong></p>
443                                </div>
444                                <div class="faq-answer" v-show="faq.active">
445                                    <p>{{ faq.answer }}</p>
446                                </div>
447                            </div>
448                        </div>
449                    </div>
450
451                    <div v-for="result in views.results" class="results-group" v-if="result.hits.length">
452                        <div class="result-category" v-if="result.label">
453                            <p class="category-name">{{ result.label }} <span class="category-count">({{ result.hits.length }})</span></p>
454                        </div>
455                        <div class="result-hit" v-for="hit in result.hits" v-html="hit.template" @click="sendStat"></div>
456                    </div>
457
458                </div>
459            </div>
460            <div v-if="!hasResults && !initial && !loading && keywords" class="no-search-results">
461                <p>Keine Suchergebnisse gefunden.</p>
462            </div>
463        </div>
464    </div>
465<script>
466    window.elasticInstaces = window.elasticInstaces || [];
467    (function () {
468        let objState = {
469            keywords: '',
470            initial: true,
471            timeout: null,
472            categories: [],
473            loading: false,
474            hasResults: false,
475            resultsOnly: false,
476            autoCompleteJS: null,
477            loadMoreButton: true,
478            lastSort: '',
479            timer: null,
480            time: 0,
481            showOpenAiText: false,
482            openAi: false,
483            views: {
484                total: 0,
485                results: [],
486                didYouMean: [],
487                autocompletion: [],
488                categories: [],
489                globalRichSnippets: {}
490            },
491            options: {
492                categories: {"event":{"id":4,"key":"event","label":"Veranstaltungen"},"news":{"id":3,"key":"news","label":"News"},"page":{"id":1,"key":"page","label":"Seiten"},"pdf":{"id":5,"key":"pdf","label":"pdf"}}            },
493            richSnippets: {
494                faq: {}
495            },
496            urls: []
497        };
498        let elasticComponent = new Vue({
499            el: "#id_search_6abf871a1635663",
500            data: function () {
501                return objState
502            },
503            methods: {
504                hasHits: function (hits) {
505                    if (!hits) {
506                        return false;
507                    }
508                    if (Array.isArray(hits)) {
509                        return false;
510                    }
511                    for (let type in hits) {
512                        if (hits.hasOwnProperty(type)) {
513                            if (hits[type]['hits'].length) {
514                                return true;
515                            }
516                        }
517                    }
518                    return false;
519                },
520                fetch: function (params) {
521
522                    
523                    if (this.keywords.length && this.keywords.length < 0 && !this.categories.length) {
524                        return;
525                    }
526
527                    this.loading = true;
528                    this.initial = false;
529
530                    if (!this.keywords && !this.categories.length) {
531                        this.hasResults = false;
532                        this.views.results = [];
533                        this.views.didYouMean = [];
534                        this.views.autocompletion = [];
535                        this.loading = false;
536                        return;
537                    }
538
539                    this.startAiTimer();
540
541                    let searchAfter = params && params.hasOwnProperty('searchAfter') && params.searchAfter ? ('&search_after=' + params.searchAfter) : ''
542                    this.$http.post('/elastic/search/results?query=' + this.keywords + searchAfter, {
543                            categories: this.categories,
544                            module: "63",
545                            root: "1",
546                            group: true,
547                            source: window.location.href
548                        },
549                        {
550                            emulateJSON: true,
551                            'Content-Type': 'application/x-www-form-urlencoded',
552                            before: function (request) {
553                                if (this.previousRequest) {
554                                    this.previousRequest.abort();
555                                }
556                                this.previousRequest = request;
557                            }
558                        }
559                    ).then(function (res) {
560
561                        let results = res.body.results['hits'] ? res.body.results['hits'] : [];
562                        let arrResults = this.groupResults(results);
563
564                        if (params && params.hasOwnProperty('merge') && params.merge) {
565                            let hasMatches = false;
566                            for (let i = 0; i < arrResults.length; i++) {
567                                if (this.add2ResultsByCategory(arrRe
567sults[i]['value'], arrResults[i])) {
568                                    hasMatches = true;
569                                }
570                            }
571
572                            if (!hasMatches) {
573                                this.loadMoreButton = false;
574                            }
575
576                        } else {
577                            this.views.results = arrResults;
578                        }
579
580                        this.views.didYouMean = res.body.results['didYouMean'];
581                        this.views.autocompletion = res.body.results['autocomplete'];
582
583                        for (let i = 0; i < arrResults.length; i++) {
584                            for (let j = 0; j < arrResults[i]['hits'].length; j++) {
585                                this.urls.push(arrResults[i]['hits'][j]['url']);
586                            }
587                        }
588
589                        if (this.hasHits(results)) {
590                            this.hasResults = true;
591                        } else {
592                            this.categories = [];
593                            this.hasResults = false;
594                        }
595
596                        this.countResults();
597                        this.views.globalRichSnippets = res.body.globalRichSnippets;
598                        this.maxScore = res.body.results['max_score'];
599                        this.setFaqRichSnippets();
600                        this.loading = false;
601                        this.resultsOnly = false;
602                        this.stopAiTimer();
603                        this.clickOutside();
604                        this.autoFocusFirstInputField();
605
606                    }.bind(this));
607                },
608                autoFocusFirstInputField: function () {
609                    setTimeout(function () {
610                        if (this.$refs['elasticsearchResultsContainer']) {
611                            this.$refs['elasticsearchResultsContainer'].querySelector('input[type="search"]').focus();
612                        }
613                    }.bind(this), 50);
614                },
615                startAiTimer: function () {
616                    if (!this.openAi) {
617                        return;
618                    }
619                    this.timer = setInterval(function () {
620                        this.time += 1;
621                        if (this.time > 6 && !this.showOpenAiText) {
622                            this.showOpenAiText = true;
623                        }
624                    }.bind(this), 1000);
625                },
626                stopAiTimer: function () {
627                    clearInterval(this.timer);
628                    this.showOpenAiText = false;
629                    this.timer = null;
630                    this.time = 0;
631                },
632                add2ResultsByCategory: function (category, results) {
633                    let added = false;
634                    let exist = false;
635                    for (let i = 0; i < this.views.results.length; i++) {
636                        if (this.views.results[i]['value'] === category) {
637                            for (let j = 0; j < results['hits'].length; j++) {
638                                if (!this.urls.includes(results['hits'][j]['url'])) {
639                                    this.views.results[i]['hits'].push(results['hits'][j]);
640                                    added = true;
641                                }
642                            }
643                            exist = true;
644                        }
645                    }
646                    if (!exist) {
647                        this.views.results.push(results)
648                    }
649                    return added;
650                },
651                loadMoreResults: function () {
652                    this.fetch({
653                        'searchAfter': this.lastSort,
654                        'merge': true
655                    })
656                },
657                setDidYouMeanToKeyword: function () {
658                    this.keywords = this.views.didYouMean[0];
659                    this.views.didYouMean = [];
660                    this.fetch({})
661                },
662                setFaqRichSnippets: function () {
663                    this.richSnippets['faq'] = {};
664                    if (Object.keys(this.views.globalRichSnippets).length && this.views.globalRichSnippets.hasOwnProperty('FAQPage')) {
665                        for (let i = 0; i < this.views.globalRichSnippets['FAQPage'].length; i++) {
666                            let faqPages = this.views.globalRichSnippets['FAQPage'][i];
667                            for (let j = 0; j < faqPages['mainEntity'].length; j++) {
668                                let page = faqPages['mainEntity'][j];
669                                if (page['name'] && page['acceptedA
669nswer'] && page['acceptedAnswer']['text'] && page['_matched']) {
670                                    this.richSnippets['faq'][page.name] = {
671                                        question: page['name'],
672                                        answer: page['acceptedAnswer']['text'],
673                                        active: false
674                                    }
675                                }
676                            }
677                        }
678                    }
679                },
680                toggleFaqSnippet: function (name) {
681                    this.richSnippets['faq'][name]['active'] = !this.richSnippets['faq'][name]['active'];
682                    this.$forceUpdate();
683                },
684                groupResults: function (hits) {
685
686                    if (Array.isArray(hits)) {
687                        return [];
688                    }
689
690                    let group = {};
691                    this.views.total = 0;
692                    let onlyCategories = [];
693                    for (let type in hits) {
694                        if (hits.hasOwnProperty(type)) {
695                            let val = hits[type]['value'];
696                            if ((this.categories.length && this.categories.indexOf(val) === -1) || (onlyCategories.length && onlyCategories.indexOf(val) === -1)) {
697                                continue;
698                            }
699                            group[type] = hits[type];
700                            this.lastSort = hits[type]['hits'].length ? hits[type]['hits'][hits[type]['hits'].length - 1]['sort'].join() : '';
701                            this.views.total = this.views.total + hits[type]['hits'].length;
702                        }
703                    }
704
705                    let _sortedGroup = [];
706                    if (onlyCategories.length) {
707                        for (let i = 0; i < onlyCategories.length; i++) {
708                            for (let groupLabel in group) {
709                                if (group[groupLabel]['value'] === onlyCategories[i]) {
710                                    _sortedGroup.push(group[groupLabel]);
711                                }
712                            }
713                        }
714                        return _sortedGroup;
715                    } else {
716                        _sortedGroup = this.sortObject(group);
717                    }
718
719                    return _sortedGroup;
720                },
721                countResults: function () {
722
723                    let categories = [];
724
725                    for (let i = 0; i < this.views.results.length; i++) {
726
727                        let val = this.views.results[i]['value'];
728                        let category = this.options.categories[val];
729                        if (typeof category === 'undefined' || !category) {
730                            category = {};
731                        }
732
733                        category['count'] = Array.isArray(this.views.results[i]['hits']) ? this.views.results[i]['hits'].length : 0;
734
735                        if (typeof categories[i] === 'undefined') {
736                            categories[i] = this.options.categories[val];
737                        }
738                    }
739
740                    if (!this.resultsOnly) {
741                        this.views.categories = categories;
742                    }
743                },
744                sortObject: function (obj) {
745                    let arrReturn = [];
746                    Object.keys(obj).sort(function (a, b) {return a.toLowerCase().localeCompare(b.toLowerCase())}).forEach(function (v) {
747                        arrReturn.push(obj[v]);
748                    });
749                    return arrReturn;
750                },
751                startsWithUppercase: function (str) {
752                    return str.substr(0, 1).match(/[A-Z\u00C0-\u00DC]/);
753                },
754                setCategory: function (category) {
755                    this.resultsOnly = true;
756                    let index = this.categories.indexOf(category);
757                    if (index === -1) {
758                        this.categories.push(category);
759                    } else {
760                        this.categories.splice(index, 1);
761                    }
762                    this.fetch({});
763                },
764                activeCategory: function (category) {
765                    let index = this.categories.indexOf(category);
766                    return index !== -1;
767                },
768                search: function () {
769
770                    
771                    this.loadMoreButton = true;
772                    clearTimeout(this.timeout);
773                    this.timeout = setTimeout(function () {
774                        this.fetch({});
775                    }.bind(this), 800);
776                },
777                submit: function () {
778
779                    let match = this.autoCompleteJS.feedback && this.autoCompleteJS.feedback.hasOwnProperty('cursor') ? this.autoCompleteJS.feedback.matches[this.autoCompleteJS.feedback.cursor] : '';
780                    if (match) {
781                        this.keywords = match.value;
782                        this.fetch({})
783                    } else {
784                        this.keywords = '';
785                        this.fetch({})
786                    }
787                },
788                sendStat: function (e) {
789                    let href = e.currentTarget.querySelector('a').href;
790                    if (!href) {
791                        return;
792                    }
793                    this.$http.post('/stat/click?query=' + this.keywords, {
794                            url: href,
795                            categories: this.categories
796                        },
797                        {
798                            emulateJSON: true,
799                            'Content-Type': 'application/x-www-form-urlencoded'
800                        }
801                    ).then(function (res) {
802                        //
803                    });
804                },
805                clickOutside: function () {
806                    if (this.$refs['elasticsearchContainerInside']) {
807                        window.addEventListener('click', function () {
808                            this.close();
809                        }.bind(this));
810                        this.$refs['elasticsearchContainerInside'].addEventListener('click', function (e) {
811                            e.stopPropagation();
812                        });
813                    }
814                },
815                close: function () {
816                    this.hasResults = false;
817                    this.keywords = "";
818                    this.categories = []
819                },
820                setAutoComplete: function () {
821                    let self = this;
822                    this.autoCompleteJS = new autoComplete({
823                        selector: "#ctrl_keywords_63",
824                        placeHolder: "Wer sucht, der findet...",
825                        threshold: 2,
826                        debounce: 600,
827                        submit: true,
828                        data: {
829                            src: async function (query) {
830                                let headers = new Headers();
831                                headers.append('Accept', 'application/json');
832                                headers.append('Content-Type', 'application/json');
833                                const source = await fetch('/elastic/search/autocompletion?query=' + query, {
834                                    method: "POST",
835                                    headers: headers,
836                                    cache: "no-cache",
837                                    redirect: "follow",
838                                    credentials: "same-origin",
839                                    referrerPolicy: "no-referrer",
840                                    body: JSON.stringify({
841                                        categories: self.categories,
842                                        module: "63",
843                                        root: "1"
844                                    })
845                                });
846                                let results = [];
847                                let data = await source.json();
848                                for (let i = 0; i < data.results['hits'].length; i++) {
849                                    results.push(data.results['hits'][i]['term']);
850                                }
851                                return results;
852                            }
853                        },
854                        resultsList: {
855                            maxResults: 50,
856                            tabSelect: true
857                        },
858                        resultItem: {
859                            highlight: true
860                        },
861                        events: {
862                            input: {
863                                selection: (event) => {
864                                    self.keywords = event.detail.selection.value;
865                                    self.fetch({});
866                                },
867                                keydown(event) {
868                                    switch (event.keyCode) {
869                                        case 40:
870                                        case 38:
871                                            event.preventDefault();
872                                            event.keyCode === 40 ? objState.autoCompleteJS.next() : objState.autoCompleteJS.previous();
873                                            break;
874                                        case 9:
875                                            event.preventDefault();
876                                            if (objState.autoCompleteJS.resultsList.tabSelect) {
877                                                objState.autoCompleteJS.next()
878                                            }
879                                            break;
880                                        case 27:
881                                            objState.autoCompleteJS.input.value = "";
882                                            objState.autoCompleteJS.close();
883                                            break;
884                                        case 13:
885                                            event.preventDefault()
886                                            self.submit();
887                                            objState.autoCompleteJS.close();
888                                            break;
889                                    }
890                                }
891                            }
892                        }
893                    });
894                }
895            },
896            watch: {
897                'hasResults': {
898                    handler: function (val) {
899                        let objBody = document.querySelector('body');
900                        if (val) {
901                            objBody.classList.add('search-panel-open');
902                        } else {
903                            objBody.classList.remove('search-panel-open');
904                        }
905                    }
906                }
907            },
908            mounted: function () {
909                this.fetch({});
910            }
911        });
912        window.elasticInstaces.push(elasticComponent);
913    })();
914</script>
914
915</div>
916<!-- indexer::continue -->
917            </div>
918        </header>
919        
920    
921        <div id="container" class="main-container">
922
923                <main id="main" class="main">
924            <div class="inside">
925                
926<!-- indexer::stop -->
927<div class="mod_breadcrumb block">
928
929        
930  
931<ul>
932                                                    <li>
933                    <a
934                        href="/ueberuns.html" title="St.Galler Kirche">St.Galler Kirche</a></li>
935                                                            <li class="active last">Unsere Kirchgemeinden</li>
936                        </ul>
937
938
939</div>
940<!-- indexer::continue -->
941
942
943  <div class="mod_article block" id="article-437">
944    
945          <div class="ce_rsce_bild_mit_claim block">
946
947    
948    
949        <div class="pic-with-claim">
950                            
951<figure class="image_container">
952  
953  
954  <picture>
955          <source srcset="/assets/images/x/Hemberge_Kirchgemeinden-czjs1p8n2zm587d.avif 1120w, /assets/images/8/Hemberge_Kirchgemeinden-adrjsrhe99jf5cn.avif 360w, /assets/images/v/Hemberge_Kirchgemeinden-k93pmna0gb3kj5k.avif 720w" sizes="100%" type="image/avif" width="1120" height="590">
956          <source srcset="/assets/images/g/Hemberge_Kirchgemeinden-ksdtjevxpz6ahz3.webp 1120w, /assets/images/5/Hemberge_Kirchgemeinden-kv95zxxyg5s9yp9.webp 360w, /assets/images/5/Hemberge_Kirchgemeinden-3qb8fqwbtcq9dwe.webp 720w" sizes="100%" type="image/webp" width="1120" height="590">
957    
958<img src="/assets/images/d/Hemberge_Kirchgemeinden-sz9ckst72572mg5.jpg" srcset="/assets/images/d/Hemberge_Kirchgemeinden-sz9ckst72572mg5.jpg 1120w, /assets/images/8/Hemberge_Kirchgemeinden-cw44waxd74rqtpk.jpg 360w, /assets/images/7/Hemberge_Kirchgemeinden-dsyeax1nh67qkb0.jpg 720w" sizes="100%" width="1120" height="590" alt="">
959
960  </picture>
961
962  
963  </figure>
964
965                        <div class="claim color-sheme color-sheme--nohover color-sheme--wert7">
966                <h1>Die Kirchgemeinden</h1>
967<h3>Die Evangelisch-reformierte Kirche des Kantons St.Gallen zählt neunundreissig Kirchgemeinden. Hier kommen die Menschen zusammen – zum Feiern, Glauben und Leben.</h3>            </div>
968        </div>
969
970        </div>
971<div class="rs-columns ce_rs_columns_start">
972
973	<div class="ce_rs_column_start  rs-column -large-col-2-1 -large-first -large-first-row -medium-col-2-1 -medium-first -medium-first-row -small-col-1-1 -small-first -small-last -small-first-row">
974
975	
976<div class="ce_text block">
977
978        
979  
980      <div>
981<div>
982<p>In den Kirchgemeinden findet das kirchliche Leben statt. Die Angebote sind vielfältig und zahlreich: Gottesdienste – von traditionell bis modern, Seelsorge, Erlebnisprogramme für Kinder und Jugendliche, Kinderkirche, Unterricht und Bildungsangebote, Frauentreff oder Mittagstisch für Ältere.</p>
983<p>Jeder Kirchgemeinde steht eine Kirchenvorsteherschaft vor. Gewählt werden die Mitglieder der Vorsteherschaft durch die Kirchgemeinde.</p>
984</div>
985</div>  
986  
987  
988
989</div>
990</div>
991<div class="ce_rs_column_start  rs-column -large-col-2-1 -large-last -large-first-row -medium-col-2-1 -medium-last -medium-first-row -small-col-1-1 -small-first -small-last">
992
993	
994<div class="ce_text block">
995
996        
997  
998      <div>
999<div>
1000<p>Tätig in den Gemeinden sind Pfarrerinnen und Pfarrer, sozialdiakonische Mitarbeitende, Kirchenmusikerinnen und -musiker, Fachlehrpersonen für ERG Kirche und Religionsunterricht, Mesmerinnen und Mesmer oder Sekretariatsmitarbeitende. Damit jedoch das vielfältige Angebot überhaupt erst möglich ist, engagieren sich zahlreiche Freiwillige in den Kirchgemeinden.</p>
1001<p>Englisch- und französischsprachige Kirchbürgerinnen und -bürger&nbsp;heissen wir&nbsp;besonders in der&nbsp;<a href="eglise-francaise.html" target="_blank" rel="noopener">Eglise française </a>willkommen.</p>
1002</div>
1003</div>  
1004  
1005  
1006
1007</div>
1008</div>
1009</div>
1010<div class="ce_rsce_infoboxes_multicolor block">
1011    
1012        <div
1013            class="infoboxes  clickable color-sheme color-sheme--wert7">
1014                            <a href="/kirchgemeinden-von-a-z.html">
1015                                        <h2 title="Index mit Kurzinfo, alphabetisch geordnet.">Verzeichnis der Kirchgemeinden von A–Z</h2>
1016                    </a>        </div>
1017
1018    
1019        <div
1020            class="infoboxes  clickable color-sheme color-sheme--wert7">
1021                            <a href="/karte-der-kirchgemeinden.html">
1022                                        <h2 title="Unsere vierzig Gemeinden auf einen Blick.">Karte der Kirchgemeinden</h2>
1023                    </a>        </div>
1024
1025    
1026        <div
1027            class="infoboxes  clickable color-sheme color-sheme--wert7">
1028                            <a href="/kirchgemeinden-kantonalkirche-adressen.html">
1029                                        <h2 title="In der Adressübersicht sind die Anschriften von Kirchgemeinden und der Kantonalkirche sowie der Mitarbeiterinnen und Mitarbeiter aufgeführt.">Adressen der Kirchgemeinden und der Kantonalkirche</h2>
1030                    </a>        </div>
1031
1032    </div>
1033    
1034      </div>
1035
1036            </div>
1037            
1038            <div class="scroll-down hidden"><a href="#infos-anmeldung" class="button button--big active">Infos und Anmeldung</a></div>
1039        </main>
1040        
1041                        
1042                        
1043    </div>
1044    
1045    
1046                <footer id="footer" class="main-footer">
1047            <div class="inside">
1048                
1049<div class="footer"><div class="rs-columns ce_rs_columns_start">
1050
1051	<div class="ce_rs_column_start address rs-column -large-col-4-1 -large-first -large-first-row -medium-col-2-1 -medium-first -medium-first-row -small-col-1-1 -small-first -small-last -small-first-row">
1052
1053	
1054<div class="ce_text block">
1055
1056        
1057  
1058      <p>Evang.-ref.&nbsp;Kirche des Kantons St. Gallen<br>Oberer&nbsp;Graben&nbsp;31<br>9000&nbsp;St.Gallen<br><a href="tel:+41712270500">T&nbsp;+41&nbsp;(0)71&nbsp;227&nbsp;05&nbsp;00</a><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#105;&#x6E;&#102;&#x6F;&#64;&#x72;&#101;&#x66;&#45;&#x73;&#103;&#x2E;&#99;&#x68;" target="_blank" rel="noopener">&#105;&#x6E;&#102;&#x6F;&#64;&#x72;&#101;&#x66;&#45;&#x73;&#103;&#x2E;&#99;&#x68;</a></p>  
1059  
1060  
1061
1062</div>
1063</div>
1064<div class="ce_rs_column_start navigation rs-column -large-col-4-1 -large-first-row -medium-col-2-1 -medium-last -medium-first-row -small-col-1-1 -small-first -small-last">
1065
1066	
1067<!-- indexer::stop -->
1068<nav class="mod_customnav first-column block">
1069
1070  
1071  <a href="/Kirchgemeinden.html#skipNavigation54" class="invisible">Navigation überspringen</a>
1072
1073  <ul class="level_1" role="menubar">
1074    
1075        
1076                    <li>
1077                <a                     href="/kirchgemeinden-von-a-z.html"                    title="Kirchgemeinden von A-Z"                    role="menuitem">Kirchgemeinden von A-Z</a>            </li>
1078            
1079        
1080                    <li>
1081                <a                     href="/kirchgemeinden-kantonalkirche-adressen.html"                    title="Kirchgemeinden / Kantonalkirche Adressen"                    role="menuitem">Kirchgemeinden / Kantonalkirche Adressen</a>            </li>
1082            
1083        
1084                    <li>
1085                <a                     href="http://www.kirchenbote-sg.ch/startseite/"                    title="Kirchenbote" target="_blank"                    role="menuitem">Kirchenbote</a>            </li>
1086            </ul>
1087
1088  <span id="skipNavigation54" class="invisible"></span>
1089
1090</nav>
1091<!-- indexer::continue -->
1092
1093<div id="scrolltop">
1094	<a href="#" class="scrollup" title="Scroll to top" style="display: inline;">
1095		<img src="files/template/img/icons/scrolltop.svg" alt="Scroll to top">
1096	</a>
1097</div></div>
1098<div class="ce_rs_column_start navigation-2 rs-column -large-col-4-1 -large-first-row -medium-col-2-1 -medium-first -small-col-1-1 -small-first -small-last">
1099
1100	
1101<!-- indexer::stop -->
1102<nav class="mod_customnav third-column block">
1103
1104  
1105  <a href="/Kirchgemeinden.html#skipNavigation55" class="invisible">Navigation überspringen</a>
1106
1107  <ul class="level_1" role="menubar">
1108    
1109        
1110                    <li>
1111                <a                     href="/Verfassung-und-gueltige-Erlasse.html"                    title="Gültige Erlasse"                    role="menuitem">Gültige Erlasse</a>            </li>
1112            
1113        
1114                    <li>
1115                <a                     href="/neue-kirchenverfassung.html"                    title="St.Galler Kirche 2025"                    role="menuitem">St.Galler Kirche 2025</a>            </li>
1116            
1117        
1118                    <li>
1119                <a                     href="/stellen.html"                    title="Stellen"                    role="menuitem">Stellen</a>            </li>
1120            
1121        
1122                    <li>
1123                <a                     href="/persoenlichkeitsschutz.html"                    title="Persönlichkeitsschutz in der Kirche"                    role="menuitem">Persönlichkeitsschutz in der Kirche</a>            </li>
1124            </ul>
1125
1126  <span id="skipNavigation55" class="invisible"></span>
1127
1128</nav>
1129<!-- indexer::continue -->
1130</div>
1131<div class="ce_rs_column_start social-media rs-column -large-col-4-1 -large-last -large-first-row -medium-col-2-1 -medium-last -small-col-1-1 -small-first -small-last">
1132
1133	
1134<div class="ce_text block">
1135
1136        
1137  
1138  
1139      
1140<figure class="image_container float_above">
1141      <a href="https://www.google.com/maps/place/Evang.-ref.+Kirche+des+Kantons+St.Gallen/@47.422964,9.3725055,17z/data&#61;!3m1!4b1!4m5!3m4!1s0x479b1ff56897219f:0xf5e1e7f2ea85841d!8m2!3d47.4229613!4d9.3746824" target="_blank" rel="noreferrer noopener">
1142  
1143  
1144
1145<img src="/files/template/img/icons/google_maps.svg" width="17" height="24" alt="">
1146
1147
1148      </a>
1149  
1150  </figure>
1151
1152  
1153      <p><a href="https://www.google.com/maps/place/Evang.-ref.+Kirche+des+Kantons+St.Gallen/@47.422964,9.3725055,17z/data=!3m1!4b1!4m5!3m4!1s0x479b1ff56897219f:0xf5e1e7f2ea85841d!8m2!3d47.4229613!4d9.3746824" target="_blank" rel="noopener">Google Maps</a></p>  
1154
1155</div>
1156
1157<div class="ce_text block">
1158
1159        
1160  
1161  
1162      
1163<figure class="image_container float_above">
1164      <a href="https://www.youtube.com/channel/UCYRDpJLQCVbNvjHJ9bI90LA" target="_blank" rel="noreferrer noopener">
1165  
1166  
1167
1168<img src="/files/template/img/icons/youtube.svg" width="24" height="18" alt="">
1169
1170
1171      </a>
1172  
1173  </figure>
1174
1175  
1176      <p><a href="https://www.youtube.com/channel/UCYRDpJLQCVbNvjHJ9bI90LA" target="_blank" rel="noopener">Youtube</a></p>  
1177
1178</div>
1179
1180<div class="ce_text block">
1181
1182        
1183  
1184  
1185      
1186<figure class="image_container float_above">
1187      <a href="https://www.instagram.com/ref_st_gallen/" target="_blank" rel="noreferrer noopener">
1188  
1189  
1190
1191<img src="/files/template/img/icons/instagram.svg" width="24" height="24" alt="">
1192
1193
1194      </a>
1195  
1196  </figure>
1197
1198  
1199      <p><a href="https://www.instagram.com/ref_st_gallen/" target="_blank" rel="noopener">Instagram</a></p>  
1200
1201</div>
1202
1203<div class="ce_text block">
1204
1205        
1206  
1207  
1208      
1209<figure class="image_container float_above">
1210      <a href="https://vimeo.com/gedankenzurzeit" title="zu Vimeo" target="_blank" rel="noreferrer noopener">
1211  
1212  
1213
1214<img src="/files/template/img/icons/vimeo.svg" width="24" height="22" alt="">
1215
1216
1217      </a>
1218  
1219  </figure>
1220
1221  
1222      <p><a title="Gedanken zur Zeit" href="https://vimeo.com/gedankenzurzeit" target="_blank" rel="noopener">Vimeo</a></p>  
1223
1224</div>
1225</div>
1226</div>
1227
1228<!-- indexer::stop -->
1229<nav class="mod_customnav first-column meta block">
1230
1231  
1232  <a href="/Kirchgemeinden.html#skipNavigation56" class="invisible">Navigation überspringen</a>
1233
1234  <ul class="level_1" role="menubar">
1235    
1236        
1237                    <li>
1238                <a                     href="/impressum.html"                    title="Impressum"                    role="menuitem">Impressum</a>            </li>
1239            
1240        
1241                    <li>
1242                <a                     href="/disclaimer.html"                    title="Disclaimer"                    role="menuitem">Disclaimer</a>            </li>
1243            
1244        
1245                    <li>
1246                <a                     href="/datenschutz.html"                    title="Datenschutz"                    role="menuitem">Datenschutz</a>            </li>
1247            </ul>
1248
1249  <span id="skipNavigation56" class="invisible"></span>
1250
1251</nav>
1252<!-- indexer::continue -->
1253  
1254</div>
1255<div class="newsletter-footer"></div>
1256<div id="scrolltop">
1257	<a href="#" class="scrollup" title="Scroll to top" style="display: inline;">
1258		<img src="files/template/img/icons/scrolltop.svg" alt="Scroll to top">
1259	</a>
1260</div>            </div>
1261        </footer>
1262        
1263</div>
1264
1265
1266
1267<script src="/assets/colorbox/js/colorbox.min.js?v=1.6.4.2"></script>
vendor: 1 bytes, line 1267
1267
1268<script>
1269
1270    jQuery(function ($) {
1271        $('a[data-lightbox]').map(function () {
1272            if ($(this).hasClass('colorbox_iframe')) {
1273                $(this).colorbox({
1274                    iframe: true,
1275                    width: "900px",
1276                    height: "600px",
1277                    maxWidth: '95%',
1278                    maxHeight: '80%',
1279                    onOpen: function () {
1280                        $('html:not(.lightbox)').addClass('no-scroll');
1281                    },
1282                    onClosed: function () {
1283                        $('html:not(.lightbox)').removeClass('no-scroll');
1284                    }
1285                });
1286            } else {
1287                $(this).colorbox({
1288                    loop: false,
1289                    rel: $(this).attr('data-lightbox'),
1290                    maxWidth: '95%',
1291                    maxHeight: '80%'
1292                });
1293            }
1294
1295
1296        });
1297    });
1298</script>
vendor: 1 bytes, line 1298
1298
1299<script src="/assets/jquery-ui/js/jquery-ui.min.js?v=1.13.2"></script>
vendor: 1 bytes, line 1299
1299
1300<script>
1301    jQuery(function ($) {
1302        $(document).accordion({
1303            // Put custom options here
1304            heightStyle: 'content',
1305            header: '.toggler',
1306            collapsible: true,
1307            active: false,
1308            create: function (event, ui) {
1309                ui.header.addClass('active');
1310                $('.toggler').attr('tabindex', 0);
1311            },
1312            activate: function (event, ui) {
1313                ui.newHeader.addClass('active');
1314                ui.oldHeader.removeClass('active');
1315                $('.toggler').attr('tabindex', 0);
1316            }
1317        });
1318    });
1319</script>
vendor: 1 bytes, line 1319
1319
1320<script>
1321    window.elasticInstaces = window.elasticInstaces || [];
1322    (function () {
1323        let objState = {
1324            keywords: '',
1325            initial: true,
1326            timeout: null,
1327            categories: null,
1328            loading: false,
1329            hasResults: false,
1330            resultsOnly: false,
1331            autoCompleteJS: null,
1332            loadMoreButton: true,
1333            lastSort: '',
1334            timer: null,
1335            time: 0,
1336            showOpenAiText: false,
1337            openAi: false,
1338            views: {
1339                total: 0,
1340                results: [],
1341                didYouMean: [],
1342                autocompletion: [],
1343                categories: [],
1344                globalRichSnippets: {}
1345            },
1346            options: {
1347                categories: null            },
1348            richSnippets: {
1349                faq: {}
1350            },
1351            urls: []
1352        };
1353        let elasticComponent = new Vue({
1354            el: "#",
1355            data: function () {
1356                return objState
1357            },
1358            methods: {
1359                hasHits: function (hits) {
1360                    if (!hits) {
1361                        return false;
1362                    }
1363                    if (Array.isArray(hits)) {
1364                        return false;
1365                    }
1366                    for (let type in hits) {
1367                        if (hits.hasOwnProperty(type)) {
1368                            if (hits[type]['hits'].length) {
1369                                return true;
1370                            }
1371                        }
1372                    }
1373                    return false;
1374                },
1375                fetch: function (params) {
1376
1377                    
1378                    if (this.keywords.length && this.keywords.length < 0 && !this.categories.length) {
1379                        return;
1380                    }
1381
1382                    this.loading = true;
1383                    this.initial = false;
1384
1385                    if (!this.keywords && !this.categories.length) {
1386                        this.hasResults = false;
1387                        this.views.results = [];
1388                        this.views.didYouMean = [];
1389                        this.views.autocompletion = [];
1390                        this.loading = false;
1391                        return;
1392                    }
1393
1394                    this.startAiTimer();
1395
1396                    let searchAfter = params && params.hasOwnProperty('searchAfter') && params.searchAfter ? ('&search_after=' + params.searchAfter) : ''
1397                    this.$http.post('/elastic/search/results?query=' + this.keywords + searchAfter, {
1398                            categories: this.categories,
1399                            module: "",
1400                            root: "",
1401                            group: true,
1402                            source: window.location.href
1403                        },
1404                        {
1405                            emulateJSON: true,
1406                            'Content-Type': 'application/x-www-form-urlencoded',
1407                            before: function (request) {
1408                                if (this.previousRequest) {
1409                                    this.previousRequest.abort();
1410                                }
1411                                this.previousRequest = request;
1412                            }
1413                        }
1414                    ).then(function (res) {
1415
1416                        let results = res.body.results['hits'] ? res.body.results['hits'] : [];
1417                        let arrResults = this.groupResults(results);
1418
1419                        if (params && params.hasOwnProperty('merge') && params.merge) {
1420                            let hasMatches = false;
1421                            for (let i = 0; i < arrResults.length; i++) {
1422                                if (this.add2ResultsByCategory(arrResults[i]['value'], arrResults[i])) {
1423                                    hasMatches = true;
1424                                }
1425                            }
1426
1427                            if (!hasMatches) {
1428                                this.loadMoreButton = false;
1429                            }
1430
1431                        } else {
1432                            this.views.results = arrResults;
1433                        }
1434
1435                        this.views.didYouMean = res.body.results['didYouMean'];
1436                        this.views.autocompletion = res.body.results['autocomplete'];
1437
1438                        for (let i = 0; i < arrResults.length; i++) {
1439                            for (let j = 0; j < arrResults[i]['hits'].length; j++) {
1440                                this.urls.push(arrResults[i]['hits'][j]['url']);
1441                            }
1442                        }
1443
1444                        if (this.hasHits(results)) {
1445                            this.hasResults = true;
1446                        } else {
1447                            this.categories = [];
1448                            this.hasResults = false;
1449                        }
1450
1451                        this.countResults();
1452                        this.views.globalRichSnippets = res.body.globalRichSnippets;
1453                        this.maxScore = res.body.results['max_score'];
1454                        this.setFaqRichSnippets();
1455                        this.loading = false;
1456                        this.resultsOnly = false;
1457                        this.stopAiTimer();
1458                        this.clickOutside();
1459                        this.autoFocusFirstInputField();
1460
1461                    }.bind(this));
1462                },
1463                autoFocusFirstInputField: function () {
1464                    setTimeout(function () {
1465                        if (this.$refs['elasticsearchResultsContainer']) {
1466                            this.$refs['elasticsearchResultsContainer'].querySelector('input[type="search"]').focus();
1467                        }
1468                    }.bind(this), 50);
1469                },
1470                startAiTimer: function () {
1471                    if (!this.openAi) {
1472                        return;
1473                    }
1474                    this.timer = setInterval(function () {
1475                        this.time += 1;
1476                        if (this.time > 6 && !this.showOpenAiText) {
1477                            this.showOpenAiText = true;
1478                        }
1479                    }.bind(this), 1000);
1480                },
1481                stopAiTimer: function () {
1482                    clearInterval(this.timer);
1483                    this.showOpenAiText = false;
1484                    this.timer = null;
1485                    this.time = 0;
1486                },
1487                add2ResultsByCategory: function (category, results) {
1488                    let added = false;
1489                    let exist = false;
1490                    for (let i = 0; i < this.views.results.length; i++) {
1491                        if (this.views.results[i]['value'] === category) {
1492                            for (let j = 0; j < results['hits'].length; j++) {
1493                                if (!this.urls.includes(results['hits'][j]['url'])) {
1494                                    this.views.results[i]['hits'].push(results['hits'][j]);
1495                                    added = true;
1496                                }
1497                            }
1498                            exist = true;
1499                        }
1500                    }
1501                    if (!exist) {
1502                        this.views.results.push(results)
1503                    }
1504                    return added;
1505                },
1506                loadMoreResults: function () {
1507                    this.fetch({
1508                        'searchAfter': this.lastSort,
1509                        'merge': true
1510                    })
1511                },
1512                setDidYouMeanToKeyword: function () {
1513                    this.keywords = this.views.didYouMean[0];
1514                    this.views.didYouMean = [];
1515                    this.fetch({})
1516                },
1517                setFaqRichSnippets: function () {
1518                    this.richSnippets['faq'] = {};
1519                    if (Object.keys(this.views.globalRichSnippets).length && this.views.globalRichSnippets.hasOwnProperty('FAQPage')) {
1520                        for (let i = 0; i < this.views.globalRichSnippets['FAQPage'].length; i++) {
1521                            let faqPages = this.views.globalRichSnippets['FAQPage'][i];
1522                            for (let j = 0; j < faqPages['mainEntity'].length; j++) {
1523                                let page = faqPages['mainEntity'][j];
1524                                if (page['name'] && page['acceptedA
1524nswer'] && page['acceptedAnswer']['text'] && page['_matched']) {
1525                                    this.richSnippets['faq'][page.name] = {
1526                                        question: page['name'],
1527                                        answer: page['acceptedAnswer']['text'],
1528                                        active: false
1529                                    }
1530                                }
1531                            }
1532                        }
1533                    }
1534                },
1535                toggleFaqSnippet: function (name) {
1536                    this.richSnippets['faq'][name]['active'] = !this.richSnippets['faq'][name]['active'];
1537                    this.$forceUpdate();
1538                },
1539                groupResults: function (hits) {
1540
1541                    if (Array.isArray(hits)) {
1542                        return [];
1543                    }
1544
1545                    let group = {};
1546                    this.views.total = 0;
1547                    let onlyCategories = [];
1548                    for (let type in hits) {
1549                        if (hits.hasOwnProperty(type)) {
1550                            let val = hits[type]['value'];
1551                            if ((this.categories.length && this.categories.indexOf(val) === -1) || (onlyCategories.length && onlyCategories.indexOf(val) === -1)) {
1552                                continue;
1553                            }
1554                            group[type] = hits[type];
1555                            this.lastSort = hits[type]['hits'].length ? hits[type]['hits'][hits[type]['hits'].length - 1]['sort'].join() : '';
1556                            this.views.total = this.views.total + hits[type]['hits'].length;
1557                        }
1558                    }
1559
1560                    let _sortedGroup = [];
1561                    if (onlyCategories.length) {
1562                        for (let i = 0; i < onlyCategories.length; i++) {
1563                            for (let groupLabel in group) {
1564                                if (group[groupLabel]['value'] === onlyCategories[i]) {
1565                                    _sortedGroup.push(group[groupLabel]);
1566                                }
1567                            }
1568                        }
1569                        return _sortedGroup;
1570                    } else {
1571                        _sortedGroup = this.sortObject(group);
1572                    }
1573
1574                    return _sortedGroup;
1575                },
1576                countResults: function () {
1577
1578                    let categories = [];
1579
1580                    for (let i = 0; i < this.views.results.length; i++) {
1581
1582                        let val = this.views.results[i]['value'];
1583                        let category = this.options.categories[val];
1584                        if (typeof category === 'undefined' || !category) {
1585                            category = {};
1586                        }
1587
1588                        category['count'] = Array.isArray(this.views.results[i]['hits']) ? this.views.results[i]['hits'].length : 0;
1589
1590                        if (typeof categories[i] === 'undefined') {
1591                            categories[i] = this.options.categories[val];
1592                        }
1593                    }
1594
1595                    if (!this.resultsOnly) {
1596                        this.views.categories = categories;
1597                    }
1598                },
1599                sortObject: function (obj) {
1600                    let arrReturn = [];
1601                    Object.keys(obj).sort(function (a, b) {return a.toLowerCase().localeCompare(b.toLowerCase())}).forEach(function (v) {
1602                        arrReturn.push(obj[v]);
1603                    });
1604                    return arrReturn;
1605                },
1606                startsWithUppercase: function (str) {
1607                    return str.substr(0, 1).match(/[A-Z\u00C0-\u00DC]/);
1608                },
1609                setCategory: function (category) {
1610                    this.resultsOnly = true;
1611                    let index = this.categories.indexOf(category);
1612                    if (index === -1) {
1613                        this.categories.push(category);
1614                    } else {
1615                        this.categories.splice(index, 1);
1616                    }
1617                    this.fetch({});
1618                },
1619                activeCategory: function (category) {
1620                    let index = this.categories.indexOf(category);
1621                    return index !== -1;
1622                },
1623                search: function () {
1624
1625                    
1626                    this.loadMoreButton = true;
1627                    clearTimeout(this.timeout);
1628                    this.timeout = setTimeout(function () {
1629                        this.fetch({});
1630                    }.bind(this), 800);
1631                },
1632                submit: function () {
1633
1634                    let match = this.autoCompleteJS.feedback && this.autoCompleteJS.feedback.hasOwnProperty('cursor') ? this.autoCompleteJS.feedback.matches[this.autoCompleteJS.feedback.cursor] : '';
1635                    if (match) {
1636                        this.keywords = match.value;
1637                        this.fetch({})
1638                    } else {
1639                        this.keywords = '';
1640                        this.fetch({})
1641                    }
1642                },
1643                sendStat: function (e) {
1644                    let href = e.currentTarget.querySelector('a').href;
1645                    if (!href) {
1646                        return;
1647                    }
1648                    this.$http.post('/stat/click?query=' + this.keywords, {
1649                            url: href,
1650                            categories: this.categories
1651                        },
1652                        {
1653                            emulateJSON: true,
1654                            'Content-Type': 'application/x-www-form-urlencoded'
1655                        }
1656                    ).then(function (res) {
1657                        //
1658                    });
1659                },
1660                clickOutside: function () {
1661                    if (this.$refs['elasticsearchContainerInside']) {
1662                        window.addEventListener('click', function () {
1663                            this.close();
1664                        }.bind(this));
1665                        this.$refs['elasticsearchContainerInside'].addEventListener('click', function (e) {
1666                            e.stopPropagation();
1667                        });
1668                    }
1669                },
1670                close: function () {
1671                    this.hasResults = false;
1672                    this.keywords = "";
1673                    this.categories = []
1674                },
1675                setAutoComplete: function () {
1676                    let self = this;
1677                    this.autoCompleteJS = new autoComplete({
1678                        selector: "#ctrl_keywords_",
1679                        placeHolder: "",
1680                        threshold: 2,
1681                        debounce: 600,
1682                        submit: true,
1683                        data: {
1684                            src: async function (query) {
1685                                let headers = new Headers();
1686                                headers.append('Accept', 'application/json');
1687                                headers.append('Content-Type', 'application/json');
1688                                const source = await fetch('/elastic/search/autocompletion?query=' + query, {
1689                                    method: "POST",
1690                                    headers: headers,
1691                                    cache: "no-cache",
1692                                    redirect: "follow",
1693                                    credentials: "same-origin",
1694                                    referrerPolicy: "no-referrer",
1695                                    body: JSON.stringify({
1696                                        categories: self.categories,
1697                                        module: "",
1698                                        root: ""
1699                                    })
1700                                });
1701                                let results = [];
1702                                let data = await source.json();
1703                                for (let i = 0; i < data.results['hits'].length; i++) {
1704                                    results.push(data.results['hits'][i]['term']);
1705                                }
1706                                return results;
1707                            }
1708                        },
1709                        resultsList: {
1710                            maxResults: 50,
1711                            tabSelect: true
1712                        },
1713                        resultItem: {
1714                            highlight: true
1715                        },
1716                        events: {
1717                            input: {
1718                                selection: (event) => {
1719                                    self.keywords = event.detail.selection.value;
1720                                    self.fetch({});
1721                                },
1722                                keydown(event) {
1723                                    switch (event.keyCode) {
1724                                        case 40:
1725                                        case 38:
1726                                            event.preventDefault();
1727                                            event.keyCode === 40 ? objState.autoCompleteJS.next() : objState.autoCompleteJS.previous();
1728                                            break;
1729                                        case 9:
1730                                            event.preventDefault();
1731                                            if (objState.autoCompleteJS.resultsList.tabSelect) {
1732                                                objState.autoCompleteJS.next()
1733                                            }
1734                                            break;
1735                                        case 27:
1736                                            objState.autoCompleteJS.input.value = "";
1737                                            objState.autoCompleteJS.close();
1738                                            break;
1739                                        case 13:
1740                                            event.preventDefault()
1741                                            self.submit();
1742                                            objState.autoCompleteJS.close();
1743                                            break;
1744                                    }
1745                                }
1746                            }
1747                        }
1748                    });
1749                }
1750            },
1751            watch: {
1752                'hasResults': {
1753                    handler: function (val) {
1754                        let objBody = document.querySelector('body');
1755                        if (val) {
1756                            objBody.classList.add('search-panel-open');
1757                        } else {
1758                            objBody.classList.remove('search-panel-open');
1759                        }
1760                    }
1761                }
1762            },
1763            mounted: function () {
1764                this.fetch({});
1765            }
1766        });
1767        window.elasticInstaces.push(elasticComponent);
1768    })();
1769</script>
1769<script>
1770    document.addEventListener(
1771        "DOMContentLoaded", function () {
1772            const menu = document.querySelector('#mobile-show');
1773            if (null !== menu && 0 === menu.querySelectorAll('li.active').length) {
1774                const trails = menu.querySelectorAll('li.trail');
1775                if (0 < trails.length) {
1776                    trails.item(trails.length - 1).classList.add('active');
1777                }
1778            }
1779            new Mmenu('#mobile-show', {"navbar":{"title":"Men\u00fc"},"offCanvas":{"position":"left-front"},"slidingSubmenus":false,"theme":"white"}, {"classNames":{"selected":"active"}});
1780        }
1781    );
1782</script>
vendor: 1 bytes, line 1782
1782
1783<script src="/files/template/js/main.js?v=9fdcece1"></script>
1783<script src="/files/template/js/masonry/imagesloaded.pkgd.min.js?v=58bf596a"></script>
1783<script src="/files/template/js/masonry/masonry-config.js?v=7a3f53d5"></script>
1783<script src="/files/template/js/masonry/masonry.pkgd.js?v=66e69a74"></script>
1783<script src="/files/template/js/toggle_overlay.js?v=6ff317e0"></script>
1783<script src="/files/template/js/jquery-migrate-3.0.0.min.js?v=9c9b2812"></script>
1783<script src="/files/template/libs/featherlight/featherlight.js?v=51e6593a"></script>
1783<script src="/files/template/libs/slick/slick.min.js?v=51e6593a"></script>
1783<script src="/files/template/libs/nlwaypoints/lib/jquery.waypoints.min.js?v=262720f3"></script>
1783<script src="/files/template/libs/nlwaypoints/lib/noframework.waypoints.min.js?v=262720f3"></script>
1783<script src="/files/template/libs/Blob.js/Blob.js?v=262720f3"></script>
1783<script src="/files/template/libs/FileSaver.js/dist/FileSaver.min.js?v=262720f3"></script>
1783<script src="/files/template/js/isotope/isotope.pkgd.min.js?v=262720f3"></script>
1783<script src="/files/template/libs/ics.js/ics.min.js?v=262720f3"></script>
vendor: 1 bytes, line 1783
1783
1784<script>
1785var j = jQuery.noConflict();
1786j( document ).ready(function() {
1787	if (j('#cbp-ntaccordion').length > 0) {
1788		j('#cbp-ntaccordion').cbpNTAccordion();
1789	}
1790});
1791</script>
vendor: 1 bytes, line 1791
1791
1792<script type="application/ld+json">
1793{
1794    "@context": "https:\/\/schema.org",
1795    "@graph": [
1796        {
1797            "@type": "WebPage"
1798        },
1799        {
1800            "@id": "#\/schema\/image\/de7dfc38-04bf-11eb-bea0-02000a1e000d",
1801            "@type": "ImageObject",
1802            "contentUrl": "\/assets\/images\/d\/Hemberge_Kirchgemeinden-sz9ckst72572mg5.jpg"
1803        },
1804        {
1805            "@id": "#\/schema\/image\/945bc5f8-6333-11ec-912e-02000a1e000d",
1806            "@type": "ImageObject",
1807            "contentUrl": "\/files\/template\/img\/icons\/google_maps.svg"
1808        },
1809        {
1810            "@id": "#\/schema\/image\/719332b5-6333-11ec-912e-02000a1e000d",
1811            "@type": "ImageObject",
1812            "contentUrl": "\/files\/template\/img\/icons\/youtube.svg"
1813        },
1814        {
1815            "@id": "#\/schema\/image\/b59436a4-6333-11ec-912e-02000a1e000d",
1816            "@type": "ImageObject",
1817            "contentUrl": "\/files\/template\/img\/icons\/instagram.svg"
1818        },
1819        {
1820            "@id": "#\/schema\/image\/d0282b42-6333-11ec-912e-02000a1e000d",
1821            "@type": "ImageObject",
1822            "contentUrl": "\/files\/template\/img\/icons\/vimeo.svg",
1823            "name": "zu Vimeo"
1824        }
1825    ]
1826}
1827</script>
vendor: 1 bytes, line 1827
1827
1828<script type="application/ld+json">
1829{
1830    "@context": "https:\/\/schema.contao.org",
1831    "@graph": [
1832        {
1833            "@type": "Page",
1834            "fePreview": false,
1835            "groups": [],
1836            "noSearch": false,
1837            "pageId": 373,
1838            "protected": false,
1839            "title": "Unsere Kirchgemeinden"
1840        }
1841    ]
1842}
1843</script>
1843
1844
1845
1846
1847</body>
1848</html>

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.