PageSourceSearch

https://www.werkenbijvangelder.com/contact

html werkenbijvangelder.com collected 2026-10-08 16:25:22 UTC 63,979 bytes, 805 lines download raw bytes

1<!DOCTYPE html>
2<html lang="nl"><head><meta property="og:description" content="Heb je vragen over een vacature, het sollicitatieproces of werken bij Van Gelder? Dan zijn er meerdere manieren waarop je ons eenvoudig kunt bereiken."></meta><meta property="og:locale" content="nl"></meta><meta property="og:title" content="Contact"></meta><meta property="og:type" content="article"></meta><meta property="og:url" content="https://www.werkenbijvangelder.com/contact"></meta>
2<script>(function () {
3  let consentLevel = null;
4  let consentFetched = false;
5
6  function activatePlaceholders(scope) {
7    if (consentLevel !== "marketing") return;
8    const root = scope || document;
9    if (!root.querySelectorAll) return;
10    const placeholders = root.querySelectorAll(".video-wrapper.placeholder");
11    placeholders.forEach((wrapper) => {
12      const placeholderVideo = wrapper.querySelector(".placeholder-video");
13      const iframe = wrapper.querySelector("iframe");
14      if (placeholderVideo) placeholderVideo.classList.add("hidden");
15      wrapper.classList.remove("placeholder");
16      if (iframe && iframe.dataset && iframe.dataset.src) {
17        iframe.src = iframe.dataset.src;
18      }
19    });
20  }
21
22  function init() {
23    fetch("/api/cookie-consent")
24      .then((response) => response.json())
25      .then((data) => {
26        consentLevel = data;
27        consentFetched = true;
28        activatePlaceholders(document);
29      })
30      .catch(() => {});
31
32    if (typeof MutationObserver === "undefined") return;
33    const observer = new MutationObserver((mutations) => {
34      if (!consentFetched || consentLevel !== "marketing") return;
35      for (const mut of mutations) {
36        for (const node of mut.addedNodes) {
37          if (node.nodeType !== 1) continue;
38          const isPlaceholder = node.matches && node.matches(".video-wrapper.placeholder");
39          const hasPlaceholder = node.querySelector && node.querySelector(".video-wrapper.placeholder");
40          if (isPlaceholder || hasPlaceholder) {
41            activatePlaceholders(isPlaceholder ? node.parentNode || document : node);
42          }
43        }
44      }
45    });
46    observer.observe(document.body, { childList: true, subtree: true });
47  }
48
49  if (document.readyState === "loading") {
50    document.addEventListener("DOMContentLoaded", init);
51  } else {
52    init();
53  }
54})();
55</script>
55<script>(function() {
56  var STORAGE_KEY = 'utm_params';
57  // CMS-2161: project-level feature flag toggling the HTTP referrer fallback.
58  var referrerFallbackEnabled = false;
59
60  // Check cookie consent level before storing UTM parameters
61  fetch("/api/cookie-consent")
62    .then(function(response) { return response.json(); })
63    .then(function(consentLevel) {
64      // Only store UTM params if marketing cookies are accepted
65      var analyticsConsented = consentLevel === "marketing";
66
67      // Don't store anything if consent not given or UTM params haven't been stored yet (first-touch)
68      if (!analyticsConsented || sessionStorage.getItem(STORAGE_KEY)) {
69        return;
70      }
71
72      var params = new URLSearchParams(window.location.search);
73
74      var gaPlaceholders = ['direct', 'none', 'not set', 'not provided'];
75
76      function cleanUtmValue(value) {
77        if (!value) return null;
78        var trimmed = value.trim().replace(/^\(|\)$/g, '');
79        if (trimmed === '' || gaPlaceholders.indexOf(trimmed.toLowerCase()) !== -1) return null;
80        return trimmed;
81      }
82
83      var utmData = {
84        utm_source: cleanUtmValue(params.get('utm_source')),
85        utm_medium: cleanUtmValue(params.get('utm_medium')),
86        utm_campaign: cleanUtmValue(params.get('utm_campaign')),
87        utm_term: cleanUtmValue(params.get('utm_term')),
88        utm_content: cleanUtmValue(params.get('utm_content')),
89        utm_id: cleanUtmValue(params.get('utm_id')),
90        sourceUrl: window.location.href
91      };
92
93      // Check if at least one UTM parameter (excluding sourceUrl) is present
94      var utmKeys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'utm_id'];
95      var hasUtm = utmKeys.some(function(key) { return utmData[key] !== null; });
96
97      // CMS-2161: when the feature flag is on, capture the cross-origin
98      // document.referrer host as a *separate* field so exports can use
99      // it as a fallback when real UTM attribution is missing. utm_*
100      // fields are never overwritten by this capture.
101      if (referrerFallbackEnabled) {
102        var referrerHost = getCrossOriginReferrerHost();
103        if (referrerHost) {
104          utmData.referrer_host = referrerHost;
105        }
106      }
107
108      // Store if we have any UTM values OR a referrer-host fallback.
109      if (hasUtm || utmData.referrer_host) {
110        try {
111          sessionStorage.setItem(STORAGE_KEY, JSON.stringify(utmData));
112        } catch (e) {
113          console.warn('Failed to store UTM params:', e);
114        }
115      }
116    })
117    .catch(function(e) {
118      console.warn('Failed to check cookie consent:', e);
119    });
120
121  function getCrossOriginReferrerHost() {
122    if (!document.referrer) return null;
123    try {
124      var referrerUrl = new URL(document.referrer);
125      // Same-origin referrals are noise — only keep external referrers.
126      if (referrerUrl.hostname === window.location.hostname) return null;
127      var host = referrerUrl.hostname.trim().toLowerCase();
128      return host || null;
129    } catch (e) {
130      // Referrer header was not a valid URL — per CMS-2161 we skip it.
131      return null;
132    }
133  }
134
135  /**
136   * Retrieve stored UTM parameters from sessionStorage
137   *
138   * @returns {Object} UTM parameters object, or empty object if not found
139   */
140  window.getUtmParams = function() {
141    try {
142      var stored = sessionStorage.getItem(STORAGE_KEY);
143      return stored ? JSON.parse(stored) : {};
144    } catch (e) {
145      console.warn('Failed to read UTM params:', e);
146      return {};
147    }
148  };
149
150  window.appendUtmToUrl = function() {
151    try {
152      var utmParams = window.getUtmParams();
153      var currentUrl = new URL(window.location.href);
154      var currentParams = currentUrl.searchParams;
155      var modified = false;
156
157      // UTM parameters and the CMS-2161 referrer-host fallback travel
158      // back to the server as URL query params on form submit.
159      var forwardedKeys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'utm_id', 'referrer_host'];
160
161      // Add stored params to URL if they are not already present.
162      forwardedKeys.forEach(function(key) {
163        if (utmParams[key] && !currentParams.has(key)) {
164          currentParams.set(key, utmParams[key]);
165          modified = true;
166        }
167      });
168
169      // Reload page with params so server can capture them
170      if (modified) {
171        window.location.href = currentUrl.toString();
172      }
173    } catch (e) {
174      console.warn('Failed to append UTM params to URL:', e);
175    }
176  };
177})();
178</script>
178<script>// Single-flight CSRF token shared by every component on the page. An
179// edge-cached page carries no session cookie, so each request a page fires on
180// load mints its own session and only the last Set-Cookie survives — every
181// component holding one of the others' tokens then 403s.
182if (!window.getCsrfToken) {
183  let csrfTokenRequest = null;
184
185  const fetchToken = () =>
186    fetch("/api/token")
187      .then((response) => response.json())
188      .then((data) => data.token)
189      .catch((error) => {
190        csrfTokenRequest = null;
191        console.error("Error fetching CSRF token:", error);
192        return null;
193      });
194
195  const loaded = () =>
196    document.readyState === "complete"
197      ? Promise.resolve()
198      : new Promise((resolve) =>
199          window.addEventListener("load", resolve, { once: true })
200        );
201
202  // Deferred to load so the page's own requests have settled on one session
203  // before we ask which token belongs to it.
204  window.getCsrfToken = () => {
205    if (!csrfTokenRequest) {
206      csrfTokenRequest = loaded().then(fetchToken);
207    }
208    return csrfTokenRequest;
209  };
210
211  // Forces a re-fetch, so the token is minted against the session cookie the
212  // next request will actually carry. Used before every submit and after a
213  // submit the server rejected with a 403.
214  window.refreshCsrfToken = () => {
215    csrfTokenRequest = fetchToken();
216    return csrfTokenRequest;
217  };
218}
219</script>
219<script>document.addEventListener('DOMContentLoaded', function () {
220  // Utility: Check if an element is hidden (by display, visibility, or layout)
221  function isElementHidden(el) {
222    const style = window.getComputedStyle(el);
223    const isHidden = (style.display === 'none' || style.visibility === 'hidden')
224    return isHidden && !el.classList.contains("open");
225  }
226
227  // Utility: Check if element is natively tabbable
228  function isNaturallyTabbable(el) {
229    const focusableTags = ['A', 'BUTTON', 'INPUT', 'SELECT', 'TEXTAREA'];
230    if (focusableTags.includes(el.tagName)) {
231      if (el.tagName === 'A') {
232        return el.hasAttribute('href');
233      }
234      return !el.hasAttribute('disabled');
235    }
236    return el.hasAttribute('tabindex');
237  }
238
239  // Main logic
240  function updateTabindexForHiddenContainers() {
241    const containers = document.querySelectorAll('[data-tab-scope]');
242    containers.forEach(container => {
243      const hidden = isElementHidden(container);
244      const tabbableElements = container.querySelectorAll(
245        'a, button, input, select, textarea, [tabindex]'
246      );
247
248      tabbableElements.forEach(el => {
249        const currentTabindex = el.getAttribute('tabindex');
250
251        if (hidden) {
252          // Save original tabindex (including implicit) if not already stored
253          if (!el.hasAttribute('data-original-tabindex')) {
254            if (currentTabindex !== null) {
255              el.setAttribute('data-original-tabindex', currentTabindex);
256            } else {
257              el.setAttribute('data-original-tabindex', 'auto');
258            }
259          }
260          el.setAttribute('tabindex', '-1');
261        } else {
262          const original = el.getAttribute('data-original-tabindex');
263          if (original !== null) {
264            if (original === 'auto') {
265              el.removeAttribute('tabindex');
266            } else {
267              el.setAttribute('tabindex', original);
268            }
269            el.removeAttribute('data-original-tabindex');
270          }
271        }
272      });
273    });
274  }
275
276  // Run on load
277  updateTabindexForHiddenContainers();
278  window.addEventListener('resize', updateTabindexForHiddenContainers);
279  window.addEventListener('orientationchange', updateTabindexForHiddenContainers);
280
281  // Watch for visibility-related changes
282  const observer = new MutationObserver((_) => updateTabindexForHiddenContainers());
283  observer.observe(document.body, {
284    attributes: true,
285    childList: true,
286    subtree: true,
287    attributeFilter: ['class', 'style', 'hidden']
288  })
289});
290</script>
290<script>fetch("/api/cookie-consent").then((response) => response.json())
291.then((data) => {const granted = (values, alwaysEnabled) => data !== "necessary" && values.includes(data) || alwaysEnabled ? "granted" : "denied";
292// Update consent based on cookie preferences
293gtag('consent', 'update', {'ad_storage': granted(["marketing"], false),
294'ad_user_data': granted(["marketing"], false),
295'ad_personalization': granted(["marketing"], false),
296'analytics_storage': granted(["statistics", "marketing"], false),
297'wait_for_update': 2000});
298// Initialize GTM after consent is updated
299if (data !== "necessary" || false) {(function (w, d, s, l, i) {w[l] = w[l] || []; w[l].push({"gtm.start": new Date().getTime(), event: "gtm.js",});var f = d.getElementsByTagName(s)[0],j = d.createElement(s),dl = l != "dataLayer" ? "&l=" + l : "";j.async = true;
300j.src ="https://www.googletagmanager.com/gtm.js?id=" + i + dl; f.parentNode.insertBefore(j, f); })(window, document, "script", "dataLayer", "GTM-M92FPZM9");}});</script>
300<script>function onClickSettings () {
301  const consentCards = document.querySelector("#consent-cards");
302  const openSettingsLink = document.querySelector("#settings-link");
303  const submitBtn = document.querySelector("#submit-button");
304  const body = document.querySelector("body");
305  const consentMsgs = document.querySelectorAll(".selected-consent-msg");
306
307  openSettingsLink.classList.toggle("visible");
308  const cardsVisible = consentCards.classList.toggle("visible");
309
310  consentMsgs.forEach(e => {
311    e.classList.toggle("visible");
312  })
313
314  if (window.innerWidth < 768) {
315    body.classList.toggle("no-scroll")
316  }
317
318  // The cards render below the intro text, so on mobile they open below the fold
319  // of the modal — scroll the modal body so the cards start at the top.
320  if (cardsVisible) {
321    const scrollContainer = consentCards.closest(".cookie-body");
322    if (scrollContainer) {
323      scrollContainer.scrollTo({
324        top: scrollContainer.scrollTop
325          + consentCards.getBoundingClientRect().top
326          - scrollContainer.getBoundingClientRect().top,
327        behavior: "smooth"
328      });
329    }
330  }
331}
332
333
334function onClickCheckBox (index, adjustSubmit) {
335  const cookieModal = document.querySelector(".cookie-modal");
336  const cookieConsentForm = cookieModal && cookieModal.querySelector("#consent-form")
337  const allCheckboxes = cookieModal && cookieModal.querySelectorAll(".form-checkbox");
338  const arrayFromCheckboxes = Array.from(allCheckboxes);
339  const hiddenInput = cookieModal && cookieModal.querySelector("#hidden-input");
340  const submitButton = cookieModal && cookieModal.querySelector("#submit-button");
341
342  if (!arrayFromCheckboxes.length) return;
343
344  const currentCheckbox = arrayFromCheckboxes[index]
345  const previousCheckbox =
346    arrayFromCheckboxes[index - 1]
347    && arrayFromCheckboxes[index - 1]
348    || arrayFromCheckboxes[0]
349  const isChecked = currentCheckbox.checked
350
351  // set hidden input with value of the clicked card
352  const hiddenInputValue = isChecked && currentCheckbox.value || previousCheckbox.value
353  hiddenInput.setAttribute("value", hiddenInputValue);
354  hiddenInput.value = hiddenInputValue;
355
356
357  // Select checkbox and all preceding ones
358  const arrayFromCheckboxes_ = arrayFromCheckboxes.map((checkbox, i) => {
359    const currentCheckbox = i === index;
360    const nextCheckbox = arrayFromCheckboxes[i + 1] && arrayFromCheckboxes[i + 1].checked;
361
362    // Set first checkbox always true
363    if (i === 0) return checkbox.checked = true;
364
365    // Set all previous checkboxes to true
366    if (i < index && !checkbox.checked) return checkbox.checked = true;
367
368    // Set all next checkboxes to false
369    if (i > index && checkbox.checked) return checkbox.checked = false;
370  });
371
372  // Set "is-full-consent" class on submit button if last checkbox is selected
373  adjustSubmit && submitButton.classList.toggle(
374    "is-full-consent",
375    (arrayFromCheckboxes.slice(-1)[0]).checked
376  )
377
378  return arrayFromCheckboxes_
379}
380
381// A reminder deep-link's ?resume token is captured + stripped from the URL by the
382// apply form before consent is given. Carry it through the consent POST *body* (so
383// it never leaks via Referer) — the consent handler re-appends it to the redirect
384// target so the draft still restores after accepting cookies.
385function appendResumeToConsent (form) {
386  if (form && window.__resumeParam && !form.querySelector('input[name="resume"]')) {
387    const resume = document.createElement("input");
388    resume.type = "hidden";
389    resume.name = "resume";
390    resume.value = window.__resumeParam;
391    form.appendChild(resume);
392  }
393}
394
395function onClickDeclineAll () {
396  const cookieModal = document.querySelector(".cookie-modal");
397  const cookieConsentForm = cookieModal && cookieModal.querySelector("#consent-form")
398  onClickCheckBox(0, false);
399  appendResumeToConsent(cookieConsentForm);
400  cookieConsentForm && cookieConsentForm.submit();
401}
402
403function onClickAcceptAll () {
404  const cookieModal = document.querySelector(".cookie-modal");
405  const cookieConsentForm = cookieModal && cookieModal.querySelector("#consent-form")
406  const inputs = cookieModal && cookieModal.querySelectorAll("#consent-form .form-checkbox")
407  inputs.forEach((input) => {
408    input.checked = true;
409  })
410  const hiddenInput = cookieModal && cookieModal.querySelector("#hidden-input");
411  hiddenInput.setAttribute("value", "marketing");
412  hiddenInput.value = "marketing";
413  appendResumeToConsent(cookieConsentForm);
414  cookieConsentForm && cookieConsentForm.submit();
415}
416
417// The cookie modal (and the cookie page) is edge-cached without varying on the
418// consent cookie, so the server renders the checkboxes in a consent-neutral
419// state (functional always on; statistics/marketing off). Hydrate the real
420// state here from the uncached consent endpoint so the UI reflects *this*
421// visitor's choice rather than whichever render happens to be cached.
422function hydrateConsentState () {
423  const cookieModal = document.querySelector(".cookie-modal");
424  if (!cookieModal) return;
425  fetch(`/api/cookie-consent`, { headers: { "Accept": "application/json" } })
426    .then((response) => response.json())
427    .then((level) => {
428      const checkboxes = cookieModal.querySelectorAll("#consent-form .form-checkbox");
429      if (!checkboxes.length) return;
430      // Checkbox order: 0 = functional, 1 = statistics, 2 = marketing.
431      const targetIndex = level === "marketing" ? 2 : level === "statistics" ? 1 : 0;
432      checkboxes[targetIndex].checked = true;
433      // Reuse the click cascade so the hidden input + submit button reflect the
434      // restored level; otherwise submitting without a change would downgrade it.
435      onClickCheckBox(targetIndex, true);
436    });
437}
438
439addEventListener('DOMContentLoaded', (event) => {
440	hydrateConsentState();
441	fetch(`/api/show-cookie-modal`)
442		.then((response) => response.json())
443		.then((showCookieModal) => {
444			const cookieModal = document.querySelector(".cookie-modal");
445			if (!showCookieModal || !cookieModal) return
446			cookieModal.classList.add("open");
447			// FHSD-17305: do NOT auto-open the settings here. On a cookie page the
448			// server already renders them open (see grid/cookie-modal.hamlet), and
449			// `onClickSettings` toggles — calling it would close them again. This
450			// branch only runs when consent is absent, which is why the cards used
451			// to vanish for exactly the visitors who still had to choose.
452		});
453
454	document.querySelectorAll('.cookie-modal .card-title').forEach(title => {
455    handleKeys([' ', 'Enter'], function (event) {
456      if (event.target === title) {
457        event.preventDefault(); // Prevent page scroll
458
459        const parent = title.closest('.top');
460        if (parent) {
461          const checkbox = parent.querySelector('.form-checkbox');
462          if (checkbox) {
463            checkbox.click(); // Trigger the checkbox's onclick handler
464          }
465        }
466      }
467    });
468  });
469});
470</script>
470<script>window.dataLayer = window.dataLayer || [];
471
472(function checkConsent () {
473  const dataLayerObj = {"event":"cms_page_loaded"};
474  // The page event (application_form on the apply page, …) is pushed only
475  // once the consent request returns. Record it now, so the application
476  // funnel below never sends it a second time while that request is in flight.
477  window.tafkarPageEvents = (window.tafkarPageEvents || []).concat(
478    dataLayerObj && dataLayerObj.event ? [dataLayerObj.event] : []
479  );
480  // The funnel below sends the page event: on the apply page it is the
481  // application_form event and carries the identity of the form on the page.
482  function sendPageEvent(consent) {
483    window.tafkarApplicationFunnel.sendPageEvent({...dataLayerObj, consent: consent});
484  }
485  fetch(`/api/cookie-consent`)
486    .then(function (response) { return response.json(); })
487    .then(function (data) { sendPageEvent(data); })
488    .catch(function () { sendPageEvent("necessary"); });
489})();
490
491// Application funnel events for Google Tag Manager (FHSD-22268). Customers map
492// them onto GA4 in GTM:
493//
494//  - application_form  -> application_start: an application form became
495//    visible to the applicant. On the apply page that is the page event
496//    above. A form that is part of the page (a banner with the form in it)
497//    counts once it is really on screen. A hidden form (the banner behind a
498//    "Solliciteer direct" button) counts when the applicant opens it, never
499//    while it is closed.
500//  - application_input -> application_input: the applicant started filling in
501//    the form, sent on the first interaction.
502//
503// Each event is sent at most once per page, however many form variants
504// (desktop and mobile banner) or script copies the page holds. Every form and
505// banner goes through this one object instead of pushing these events itself;
506// the old per-component pushes fired on page load and double-counted both
507// events.
508//
509// Both events carry the identity of the form (form_id, form_name, form_type,
510// total_steps), registered by the form script, so GA4 can split the funnel per
511// form and per form type. The Elm form used to send that identity in an
512// application_form_view event of its own on mount, which counted every copy of
513// the form, including closed and hidden ones, as a view.
514//
515// Plain functions only: the production minifier breaks arrow bodies.
516(function installApplicationFunnel() {
517  if (window.tafkarApplicationFunnel) {
518    return;
519  }
520
521  // The identity of the first application form registered on the page, and
522  // the apply page's application_form page event while it waits for it.
523  var pageIdentity = null;
524  var heldPageEvent = null;
525
526  function alreadySent(eventName) {
527    var dataLayer = window.dataLayer || [];
528    if ((window.tafkarPageEvents || []).indexOf(eventName) !== -1) {
529      return true;
530    }
531    for (var i = 0; i < dataLayer.length; i++) {
532      if (dataLayer[i] && dataLayer[i].event === eventName) {
533        return true;
534      }
535    }
536    return false;
537  }
538
539  function push(event) {
540    window.dataLayer = window.dataLayer || [];
541    window.dataLayer.push(event);
542  }
543
544  function send(eventName, funnel) {
545    if (alreadySent(eventName)) {
546      return false;
547    }
548    push(Object.assign({}, funnel.payload, funnel.identity, { event: eventName }));
549    return true;
550  }
551
552  function formViewed(funnel) {
553    send("application_form", funnel);
554  }
555
556  // Starting implies the form was seen: a form the visibility check could not
557  // see (an iframe that resizes, a browser without IntersectionObserver) still
558  // reaches the funnel in the right order.
559  function formStarted(funnel) {
560    formViewed(funnel);
561    if (send("application_input", funnel) && window._paq) {
562      window._paq.push(["trackEvent", "Application", "Application form started"]);
563    }
564  }
565
566  function releasePageEvent() {
567    if (heldPageEvent) {
568      push(Object.assign({}, heldPageEvent, pageIdentity || {}));
569      heldPageEvent = null;
570    }
571  }
572
573  // The apply page's page event is its application_form. The consent request
574  // usually returns before the page's form script has run, so the event waits
575  // for the form to register its identity, and goes out without one once the
576  // page has loaded when no form does (an external form type).
577  function sendPageEvent(event) {
578    if (event.event !== "application_form" || pageIdentity) {
579      push(Object.assign({}, event, event.event === "application_form" ? pageIdentity : {}));
580      return;
581    }
582    heldPageEvent = event;
583    if (document.readyState === "complete") {
584      releasePageEvent();
585    } else {
586      window.addEventListener("load", releasePageEvent);
587    }
588  }
589
590  // A closed hidden-form banner still renders its form as a strip of a few
591  // dozen pixels (fixed to the bottom of the screen on mobile) behind the
592  // "Solliciteer direct" button, so the form's size alone does not tell
593  // whether the applicant can see it; the container's `visible` class does.
594  function isClosedHiddenForm(wrapper) {
595    var container = wrapper.closest(".hidden-form .form-container");
596    return container !== null && !container.classList.contains("visible");
597  }
598
599  function isShown(wrapper) {
600    if (wrapper.offsetParent === null || isClosedHiddenForm(wrapper)) {
601      return false;
602    }
603    var rect = wrapper.getBoundingClientRect();
604    if (rect.height === 0 || rect.width === 0) {
605      return false;
606    }
607    return window.getComputedStyle(wrapper).visibility !== "hidden";
608  }
609
610  // A page can render the same form more than once (a desktop and a mobile
611  // banner, CSS showing one per viewport): observe every copy and count the
612  // first one that is actually shown.
613  var observer =
614    typeof IntersectionObserver === "function"
615      ? new IntersectionObserver(function (entries) {
616          for (var i = 0; i < entries.length; i++) {
617            if (entries[i].isIntersecting && isShown(entries[i].target)) {
618              formViewed(entries[i].target.tafkarFunnel);
619              observer.disconnect();
620              return;
621            }
622          }
623        })
624      : null;
625
626  function follow(wrapper) {
627    var funnel = wrapper.tafkarFunnel;
628    function onField(event) {
629      var tag = event.target.tagName;
630      if (tag === "INPUT" || tag === "TEXTAREA" || tag === "SELECT") {
631        formStarted(funnel);
632      }
633    }
634    function onButton(event) {
635      if (event.target.closest && event.target.closest("button")) {
636        formStarted(funnel);
637      }
638    }
639    wrapper.addEventListener("input", onField, true);
640    wrapper.addEventListener("change", onField, true);
641    wrapper.addEventListener("click", onButton, true);
642    if (observer) {
643      observer.observe(wrapper);
644    } else if (isShown(wrapper)) {
645      formViewed(funnel);
646    }
647  }
648
649  // Follow one `.application-form-wrapper`: count it as viewed once it is on
650  // screen, and as started on the first field interaction or button press.
651  // Capture phase, so Elm stopping propagation cannot hide the interaction.
652  //
653  // A banner and the form inside it both register the same wrapper, in either
654  // order: the banner with the vacancy payload, the form script with the
655  // vacancy payload and the form's identity. The wrapper is followed once and
656  // keeps whatever each registration adds.
657  function track(wrapper, payload, identity) {
658    if (!wrapper) {
659      return;
660    }
661    var known = wrapper.tafkarFunnel;
662    wrapper.tafkarFunnel = known || { payload: {}, identity: {} };
663    Object.assign(wrapper.tafkarFunnel.payload, payload || {});
664    Object.assign(wrapper.tafkarFunnel.identity, identity || {});
665    if (identity && !pageIdentity) {
666      pageIdentity = identity;
667      releasePageEvent();
668    }
669    if (!known) {
670      follow(wrapper);
671    }
672  }
673
674  // The hidden-form banner opened its form: count the form in it as viewed.
675  function formOpened(container, payload) {
676    var wrapper = container.querySelector(".application-form-wrapper");
677    formViewed((wrapper && wrapper.tafkarFunnel) || { payload: payload || {}, identity: {} });
678  }
679
680  window.tafkarApplicationFunnel = {
681    formOpened: formOpened,
682    sendPageEvent: sendPageEvent,
683    track: track
684  };
685})();
686</script>
686<script>window.dataLayer = window.dataLayer || [];
687window.gtag_enable_tcf_support = true;
688function gtag() { dataLayer.push(arguments); }
689gtag('consent', 'default', {'ad_storage': "denied",
690'ad_user_data': "denied",
691'ad_personalization': "denied",
692'analytics_storage': "denied",
693'functionality_storage': "granted",
694'security_storage': "granted",
695'wait_for_update': 2000
696});</script>
696<script type="text/javascript">document.addEventListener('touchstart',function(){},{passive:true});
697function openConsolidationDialog(uuid, vacancyId, event) {// Stop event from bubbling to prevent backdrop click handler from firing
698if (event) {event.stopPropagation();
699event.preventDefault();}
700// Update URL with dialog parameter
701const url = new URL(location.href);
702url.searchParams.set('dialog', vacancyId);
703history.pushState(null, '', url);
704// Notify Elm components about URL change
705window.dispatchEvent(new Event('urlChange'));
706// Find and open the dialog
707const dialogId = 'dialog-' + vacancyId;
708const el = uuid ? document.getElementById(uuid) : document;
709const dialog = el.querySelector('#' + dialogId);
710if (dialog) {dialog.setAttribute('open', '');}
711return false;}
712function dialogClose(uuid) {// Get vacancy ID from URL dialog parameter
713const url = new URL(location.href);
714const vacancyId = url.searchParams.get('dialog');
715if (vacancyId) {// Remove dialog parameter from URL
716url.searchParams.delete('dialog');
717history.pushState(null, '', url.toString());
718// Notify Elm components about URL change
719window.dispatchEvent(new Event('urlChange'));
720// Find and close the dialog
721const el = uuid ? document.getElementById(uuid) : document;
722const dialog = el.querySelector(`#dialog-${vacancyId}`);
723if (dialog) {dialog.removeAttribute('open');
724// Only reset back to search-only when no location keyword is active.
725// The server renders data-state="locations-shown" whenever a location
726// is selected, so resetting it here would hide the resolved locations
727// when the dialog is reopened without a page reload (FHSD-21002).
728const activeLocation = url.searchParams.get('location');
729if (!activeLocation) {dialog.setAttribute('data-state', 'search-only');
730// Clear location search input if it exists
731const locationInput = dialog.querySelector('input[name="location"]');
732if (locationInput) {locationInput.value = '';}}}}
733return false;}
734function dialogGoBack(button) {// Find the parent dialog
735const dialog = button.closest('dialog');
736if (!dialog) return;
737// Remove location parameter from URL
738const url = new URL(location.href);
739url.searchParams.delete('location');
740history.pushState(null, '', url.toString());
741// Notify Elm components about URL change
742window.dispatchEvent(new Event('urlChange'));
743// Update dialog state from locations-shown to search-only
744dialog.setAttribute('data-state', 'search-only');
745// Clear location search input if it exists
746const locationInput = dialog.querySelector('input[name="location"]');
747if (locationInput) {locationInput.value = '';}
748window.location.reload();
749return false;}
750function locationCombinationGoBack() {const url = new URL(location.href);
751url.searchParams.delete('location');
752history.pushState(null, '', url.toString());
753// Notify Elm components about URL change
754window.dispatchEvent(new Event('urlChange'));
755window.location.reload();
756return false;}
757// Close dialog on Escape key
758handleKeys(['Escape'], function(event) {const url = new URL(location.href);
759if (url.searchParams.has('dialog')) {event.preventDefault();
760const vacancyId = url.searchParams.get('dialog');
761const dialogId = 'dialog-' + vacancyId;
762const openDialog = document.querySelector('#' + dialogId + '[open]');
763if (openDialog) {const banner = openDialog.closest('.banner');
764const bannerUuid = banner ? banner.id : null;
765dialogClose(bannerUuid);} else {dialogClose(null);}}});
766// Close dialog when clicking outside (backdrop click)
767document.addEventListener('click', function(event) {const url = new URL(location.href);
768if (url.searchParams.has('dialog')) {const vacancyId = url.searchParams.get('dialog');
769const dialogId = 'dialog-' + vacancyId;
770const openDialog = document.querySelector('#' + dialogId + '[open]');
771if (openDialog) {// Check if click is on the dialog backdrop (not on dialog content)
772const dialogRect = openDialog.getBoundingClientRect();
773const clickX = event.clientX;
774const clickY = event.clientY;
775// Find the actual content area (dialog-header, dialog-body, dialog-footer)
776const dialogChildren = openDialog.children;
777let clickedOutside = true;
778for (let i = 0; i < dialogChildren.length; i++) {const child = dialogChildren[i];
779const childRect = child.getBoundingClientRect();
780if (clickX >= childRect.left && clickX <= childRect.right &&clickY >= childRect.top && clickY <= childRect.bottom) {
781clickedOutside = false;
782break;}}
783if (clickedOutside) {const banner = openDialog.closest('.banner');
784const bannerUuid = banner ? banner.id : null;
785dialogClose(bannerUuid);}}}});
786function uuidv4() {return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>(c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16));}
787function formatDate(dateString, showTime) {// Backend now sends times already formatted in the correct timezone (domain's langCode timezone)
788// Format: "2024-03-15T14:30" - just need to reformat for display
789// NO timezone conversion needed here - would cause double conversion!
790try {// Parse as local time components (no "Z" suffix - NOT UTC!)
791var parts = dateString.split("T");
792var dateParts = parts[0].split("-");
793var timeParts = parts.length > 1 ? parts[1].split(":") : ["00", "00"];
794const formattedDate = dateParts[2] + "-" + dateParts[1] + "-" + dateParts[0];
795const formattedTime = timeParts[0] + ":" + timeParts[1];
796if (showTime) {return formattedDate + " " + formattedTime;} else {return formattedDate;};} catch (e) {console.error("Failed to format date:", dateString, e);
797return dateString;}}
798function handleKeys(keys, callback) {document.addEventListener("keydown", function(event) {if (keys.includes(event.key)) {callback(event);}});}</script>
798<link rel="canonical" href="https://www.werkenbijvangelder.com/contact"><link rel="icon" type="image/png" href="https://www.werkenbijvangelder.com/static/favicon/icon-16x16-1-van-gelder-favicon.jpg" sizes="16x16"><link rel="icon" type="image/png" href="https://www.werkenbijvangelder.com/static/favicon/icon-32x32-1-van-gelder-favicon.jpg" sizes="32x32"><link rel="preload" as="script" href="/static/js/components-nl.js?v=22.13.13"><link rel="preload" as="style" href="/static/css/site.css?v=22.13.13"><link rel="stylesheet" media="all" href="/static/css/site.css?v=22.13.13"><meta charset="UTF-8"><meta name="author" content><meta name="generator" content="Hamilton CMS by Floyd &amp; Hamilton"><meta name="viewport" content="width=device-width,initial-scale=1,interactive-widget=resizes-content">
799<!-- Hamilton CMS by Floyd & Hamilton - https://floydhamilton.com -->
800<title>Contact | Van Gelder</title>
801<meta name="description" content="Heb je vragen over een vacature, het sollicitatieproces of werken bij Van Gelder? Dan zijn er meerdere manieren waarop je ons eenvoudig kunt bereiken.">
802</head>
803<body><div class="page"><header class="header bg-white " data-tab-scope><div class="header-wrapper"><div class="visually-hidden" id="top-page"><a tabindex="11" href="#main-content" aria-label="Menu-items overslaan"></a><a tabindex="12" href="#top-page" aria-label="Ga naar het begin van de pagina"></a></div><div class="header-container"><div class="link link-menu-toggle"><div class="link-icon" aria-label="Open submenu"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 20.1 19.1" x="0px" y="0px" style="enable-background:new 0 0 20.1 19.1;"><path d="M0,7h20v2H0V7z M0,0h20v2H0V0z M3.3,19H2.5v-2.4c0-0.3-0.1-0.5-0.2-0.7c-0.1-0.1-0.3-0.2-0.5-0.2  c-0.3,0-0.6,0.1-0.7,0.3c-0.1,0.2-0.2,0.6-0.2,1V19H0v-3.9h0.6l0.1,0.5h0c0.1-0.2,0.3-0.3,0.5-0.4C1.5,15.1,1.7,15,2,15  c0.6,0,1,0.2,1.2,0.6h0.1c0.1-0.2,0.3-0.3,0.5-0.4C3.9,15.1,4.2,15,4.4,15c0.5,0,0.8,0.1,1,0.4c0.2,0.2,0.3,0.6,0.3,1.1V19H4.9v-2.4  c0-0.3-0.1-0.5-0.2-0.7c-0.1-0.1-0.3-0.2-0.5-0.2c-0.3,0-0.6,0.1-0.7,0.3c-0.1,0.2-0.2,0.5-0.2,0.9V19z M9,19.1  c-0.6,0-1.1-0.2-1.4-0.5C7.2,18.2,7,17.7,7,17.1c0-0.6,0.2-1.1,0.5-1.5C7.8,15.2,8.3,15,8.8,15c0.5,0,0.9,0.2,1.2,0.5  c0.3,0.3,0.4,0.7,0.4,1.3v0.4H7.9c0,0.4,0.1,0.7,0.3,0.9c0.2,0.2,0.5,0.3,0.8,0.3c0.2,0,0.4,0,0.6-0.1c0.2,0,0.4-0.1,0.6-0.2v0.7  C10.1,18.9,9.9,19,9.7,19C9.5,19,9.2,19.1,9,19.1z M8.8,15.7c-0.3,0-0.5,0.1-0.6,0.2c-0.2,0.2-0.3,0.4-0.3,0.7h1.8  c0-0.3-0.1-0.6-0.2-0.7C9.3,15.8,9.1,15.7,8.8,15.7z M15.2,19h-0.8v-2.4c0-0.3-0.1-0.5-0.2-0.7c-0.1-0.1-0.3-0.2-0.6-0.2  c-0.3,0-0.6,0.1-0.8,0.3c-0.2,0.2-0.2,0.6-0.2,1V19h-0.8v-3.9h0.6l0.1,0.5h0c0.1-0.2,0.3-0.3,0.5-0.4c0.2-0.1,0.5-0.2,0.7-0.2  c0.9,0,1.4,0.5,1.4,1.4V19z M19.4,19l-0.1-0.5h0c-0.1,0.2-0.3,0.3-0.5,0.4c-0.2,0.1-0.5,0.2-0.7,0.2c-0.5,0-0.8-0.1-1.1-0.4  c-0.2-0.2-0.3-0.6-0.3-1.1v-2.5h0.8v2.4c0,0.3,0.1,0.5,0.2,0.7c0.1,0.1,0.3,0.2,0.6,0.2c0.3,0,0.6-0.1,0.8-0.3  c0.2-0.2,0.2-0.6,0.2-1v-1.9h0.8V19H19.4z" /></path></svg></div><div class="link-icon"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 18 26.07"><polygon points="15.46,15.78 16.88,14.36 10.43,7.89 16.88,1.41 15.46,0 9.01,6.47 2.54,0 1.12,1.41 7.6,7.89 1.12,14.36   2.54,15.78 9.01,9.3 " /></polygon><path d="M10.1,24.1c0,0.47-0.08,0.81-0.24,1.02c-0.16,0.2-0.4,0.3-0.74,0.3c-0.25,0-0.44-0.07-0.56-0.22  c-0.12-0.15-0.18-0.36-0.18-0.65v-2.33H7.57v2.47c0,0.46,0.11,0.81,0.34,1.04c0.23,0.23,0.57,0.34,1.03,0.34  c0.26,0,0.5-0.05,0.7-0.15c0.21-0.1,0.37-0.24,0.48-0.41h0.04l0.11,0.5h0.63v-3.78H10.1V24.1z" /></path><rect x="4.65" y="20.68" width="0.8" height="5.32" /></rect><path d="M2.36,24.11c-0.14-0.1-0.37-0.21-0.68-0.33c-0.37-0.14-0.61-0.26-0.72-0.34c-0.11-0.08-0.16-0.18-0.16-0.3  c0-0.24,0.21-0.36,0.64-0.36c0.28,0,0.62,0.08,1.03,0.25l0.26-0.61c-0.4-0.18-0.82-0.27-1.26-0.27c-0.45,0-0.8,0.09-1.07,0.27  C0.13,22.6,0,22.85,0,23.17c0,0.27,0.08,0.49,0.23,0.66c0.15,0.17,0.45,0.34,0.89,0.51c0.22,0.09,0.4,0.16,0.52,0.23  c0.13,0.07,0.22,0.13,0.27,0.2c0.05,0.06,0.08,0.14,0.08,0.24c0,0.3-0.25,0.45-0.74,0.45c-0.38,0-0.8-0.1-1.24-0.31v0.69  c0.31,0.15,0.71,0.23,1.21,0.23c0.5,0,0.89-0.1,1.16-0.29c0.27-0.2,0.4-0.48,0.4-0.85c0-0.18-0.03-0.34-0.1-0.47  C2.61,24.32,2.5,24.21,2.36,24.11z" /></path><rect x="13.05" y="22.22" width="0.8" height="3.78" /></rect><path d="M17.41,25.42c-0.16,0-0.28-0.05-0.38-0.14c-0.1-0.09-0.14-0.24-0.14-0.43v-2.02h1.08v-0.61h-1.08v-0.84h-0.5l-0.27,0.8  l-0.55,0.29v0.36h0.52v2.04c0,0.8,0.38,1.2,1.14,1.2c0.15,0,0.29-0.01,0.43-0.04c0.14-0.02,0.26-0.06,0.35-0.1v-0.6  C17.8,25.39,17.61,25.42,17.41,25.42z" /></path><path d="M13.46,20.77c-0.15,0-0.26,0.04-0.34,0.12C13.04,20.96,13,21.07,13,21.22c0,0.14,0.04,0.24,0.12,0.32  c0.08,0.08,0.19,0.12,0.34,0.12c0.14,0,0.25-0.04,0.33-0.
80312c0.08-0.08,0.12-0.19,0.12-0.32c0-0.14-0.04-0.25-0.12-0.33  C13.71,20.81,13.6,20.77,13.46,20.77z" /></path></svg></div></div><div class="logo"><a tabindex="13" href="https://www.werkenbijvangelder.com"><img alt="Ga naar de homepagina van Van Gelder" src="https://www.werkenbijvangelder.com/static/logos/1-gelder-logo.svg" /></a></div><nav class="nav nav-menu" aria-label="Hoofd navigatie"><div class="close-menu" aria-label="Sluit submenu"><div class="close-icon"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 13.44 13.44"><polygon points="13.44,11.31 8.84,6.72 13.43,2.12 11.31,0 6.72,4.6 2.12,0 0,2.12 4.6,6.72 0,11.31 2.12,13.44   6.72,8.84 11.31,13.43 " /></polygon></svg></div></div><a class="link link-underline" href="https://www.werkenbijvangelder.com/vacatures" tabindex="13">Vacatures</a><div class="header-item-with-dropdown " tabindex="14"><div class="link header-item-with-dropdown-toggle" tabindex="-1"><span class="link-label">Waar wil je werken?</span><span class="link-icon"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 19 11"><path id="Path" d="M16.76,0L9.5,6.8L2.24,0L0,2.1L9.5,11L19,2.1L16.76,0z" /></path></svg></span></div><nav class="dropdown-menu multiple-columns columns-3"><div class="dropdown-container"><ul class="dropdown-columns"><li class="dropdown-column"><ul class="dropdown-top-level"><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/vakgebieden" tabindex="15">Vakgebieden</a><span class="show-children-toggle" id="Vakgebieden"></span><ul class="dropdown-menu-items"><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/vakgebied/uitvoerder" tabindex="16">Uitvoering</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/vakgebied/werkvoorbereider" tabindex="17">Werkvoorbereiding</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/vakgebied/ontwerp-en-engineering" tabindex="18">Ontwerp &amp; Engineering</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/vakgebied/projectleider" tabindex="19">Projectleiding</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/vakgebied/monteur" tabindex="20">Montage</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/vakgebied/veiligheid-en-kwaliteit" tabindex="21">Veiligheid &amp; kwaliteit</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/vakgebied/staf" tabindex="22">Staf</a></li></ul></li></ul></li><li class="dropdown-column"><ul class="dropdown-top-level"><li class="dropdown-menu-item"><div class="link-less link link-underline" tabindex="23">Expertises<span class="show-children-toggle" id="Expertises"></span></div><ul class="dropdown-menu-items"><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/ondergrondse-infrastructuur" tabindex="24">Ondergrondse Infrastructuur</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/rail" tabindex="25">Rail</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/wegenbouw" tabindex="26">Wegenbouw</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/verkeerstechniek" tabindex="27">Verkeerstechniek</a></li></ul></li></ul></li><li class="dropdown-column"><ul class="dropdown-top-level"><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/organisatie" tabindex="28">Organisaties</a><span class="show-children-toggle" id="Organisaties"></span><ul class="dropdown-menu-items"><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/organisatie/asfaltproductie-midden-nederland" tabindex="29">Asfaltproductie Midden-Nederland</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/organisatie/klever-boor-en-perstechniek" tabindex="30">Klever Boor- en Perstechniek</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/organisatie/opleidingscentrum-gelderpoort" tabindex="31">
803Opleidingscentrum Gelderpoort</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/organisatie/stam-en-co" tabindex="32">Stam &amp; Co</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/organisatie/vandenheuvellightrail" tabindex="33">Van den Heuvel Lightrail</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/organisatie/kabel-leiding-en-montagewerken" tabindex="34">Van Gelder Kabel-, Leiding- en Montagewerken</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/organisatie/telecom" tabindex="35">Van Gelder Telecom</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/organisatie/van-voskuilen-groep" tabindex="36">Van Voskuilen Groep</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/organisaties/vermeulen" tabindex="37">Vermeulen</a></li></ul></li></ul></li></ul></div></nav></div><div class="header-item-with-dropdown " tabindex="38"><div class="link header-item-with-dropdown-toggle" tabindex="-1"><span class="link-label">Leren en ontwikkelen</span><span class="link-icon"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 19 11"><path id="Path" d="M16.76,0L9.5,6.8L2.24,0L0,2.1L9.5,11L19,2.1L16.76,0z" /></path></svg></span></div><nav class="dropdown-menu column-1"><div class="dropdown-container"><ul class="dropdown-columns"><li class="dropdown-column"><ul class="dropdown-top-level"><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/stage" tabindex="39">Stage</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/traineeship" tabindex="40">Traineeships</a></li></ul></li></ul></div></nav></div><a class="link link-underline" href="https://www.werkenbijvangelder.com/verhalen" tabindex="41">Verhalen</a><div class="header-item-with-dropdown " tabindex="42"><div class="link header-item-with-dropdown-toggle" tabindex="-1"><span class="link-label">Over Van Gelder</span><span class="link-icon"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 19 11"><path id="Path" d="M16.76,0L9.5,6.8L2.24,0L0,2.1L9.5,11L19,2.1L16.76,0z" /></path></svg></span></div><nav class="dropdown-menu column-1"><div class="dropdown-container"><ul class="dropdown-columns"><li class="dropdown-column"><ul class="dropdown-top-level"><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/van-gelder-groep" tabindex="43">Als werkgever</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/missie-en-visie" tabindex="44">Missie en visie</a></li><li class="dropdown-menu-item"><a class="active link link-underline with-link" href="https://www.werkenbijvangelder.com/contact" tabindex="45">Contact</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/veelgestelde-vragen" tabindex="46">Veelgestelde vragen</a></li><li class="dropdown-menu-item"><a class="link link-underline with-link" href="https://www.werkenbijvangelder.com/open-sollicitatie" tabindex="47">Open sollicitatie</a></li></ul></li></ul></div></nav></div><div class="job-alert-mobile"><h2>Job alert mobile</h2><div class="search"><form class="job-alert-content" action="https://www.werkenbijvangelder.com/job-alert" method="GET"><div class="form-field"><input class="form-input" type="text" name="email" autocomplete="off" placeholder="E-mailadres" value=""></div><div class="button-submit"><button class="btn btn-submit bg-color-2 color-white"><span>Stel job alert in</span></button></div></form></div></div></nav><nav class="nav nav-actions"><div class="link link-job-alert"><a class="link-page" tabindex="50" href="https://www.werkenbijvangelder.com/job-alert" title="Meld je aan voor job alerts" aria-label="Meld je aan voor job alerts"><div class="link-icon"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 43.2 42.24" style="enable-background:new 0 0 43.2 42.24;" xml:space="preserve">
803<path d="M41.95,30c-3.04-2.57-5.78-6.33-5.78-10.31v-5.61C36.17,6.32,29.86,0,22.1,0C14.34,0,7.03,6.32,7.03,14.08v5.61  c0,3.98-2.74,7.74-5.8,10.32C0.45,30.68,0,31.66,0,32.69c0,1.94,1.58,3.52,3.52,3.52h11.2c0.7,3.44,3.74,6.03,7.38,6.03  c3.64,0,6.68-2.6,7.38-6.03h10.2c1.94,0,3.52-1.58,3.52-3.52C43.2,31.66,42.75,30.68,41.95,30z M22.1,39.23  c-1.96,0-3.62-1.26-4.24-3.02h8.49C25.72,37.96,24.06,39.23,22.1,39.23z M39.68,33.19H3.52c-0.27,0-0.5-0.23-0.5-0.5  c0-0.2,0.11-0.33,0.18-0.39c3.72-3.14,6.85-7.74,6.85-12.61v-5.61c0-6.1,5.96-11.06,12.05-11.06c6.09,0,11.05,4.96,11.05,11.06v5.61  c0,4.87,3.13,9.47,6.85,12.62c0.07,0.06,0.18,0.18,0.18,0.38C40.18,32.96,39.95,33.19,39.68,33.19z" /></path></svg></div></a></div><div class="link link-favorites hidden" id="favorites-page-link"><a class="link-page" tabindex="51" href="https://www.werkenbijvangelder.com/vacatures/favorieten" title="Mijn favoriete vacatures" aria-label="Mijn favoriete vacatures bekijken"><div class="link-icon"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 46.13 42.21" style="enable-background:new 0 0 46.13 42.21;" xml:space="preserve"><path d="M23.06,42.21c-0.98,0-1.92-0.36-2.65-1.02c-1.73-1.55-3.4-3-4.87-4.28c-4.44-3.87-8.24-7.18-10.93-10.5  C1.47,22.54,0,18.82,0,14.74c0-3.99,1.35-7.69,3.81-10.41C6.32,1.54,9.78,0,13.54,0c2.83,0,5.42,0.91,7.7,2.71  c0.65,0.51,1.26,1.09,1.83,1.73c0.57-0.64,1.18-1.21,1.83-1.73C27.17,0.91,29.76,0,32.59,0c3.76,0,7.21,1.54,9.73,4.33l0,0  c2.45,2.72,3.81,6.42,3.81,10.41c0,4.09-1.46,7.8-4.61,11.68c-2.7,3.32-6.5,6.63-10.9,10.47l-0.32,0.28  c-1.4,1.22-2.96,2.58-4.58,4.03C24.98,41.85,24.04,42.21,23.06,42.21z M13.54,2.94c-2.91,0-5.59,1.19-7.54,3.36  c-1.96,2.18-3.05,5.17-3.05,8.44c0,3.38,1.26,6.5,3.95,9.82c2.53,3.12,6.24,6.35,10.53,10.09c1.52,1.33,3.2,2.79,4.94,4.34  c0.39,0.35,0.99,0.35,1.38,0c1.63-1.45,3.2-2.83,4.61-4.05l0.33-0.28c4.3-3.74,8.01-6.98,10.54-10.1c2.7-3.33,3.95-6.45,3.95-9.83  c0-3.26-1.08-6.26-3.05-8.43c-1.95-2.16-4.63-3.36-7.54-3.36c-2.15,0-4.13,0.7-5.87,2.08c-0.9,0.71-1.73,1.6-2.45,2.62l-1.2,1.7  l-1.2-1.7c-0.73-1.03-1.55-1.91-2.45-2.62C17.67,3.64,15.69,2.94,13.54,2.94z"></path></svg></div><div class="hidden link-counter"><span>0</span></div></a></div></nav></div></div></header><div class="page-wrapper with-header"><div class="visually-hidden" id="main-content"></div><div class="row hide-in-css bg-color-3 bg-color  no-margin layout-1 row-gutter full-width-background " style=" "><div class="row-wrapper"><div class="col col-md-12  " style=""><div class="banner banner-default banner-sm "><div class="banner-wrapper"><div class="banner-content banner-vertical-align-bottom"><div class="headings"><h1 class="heading heading-one text-align-left " tabindex="108">Heb je vragen?<br></h1><h2 class="heading heading-two text-align-left " tabindex="109">Wij helpen je graag verder</h2></div></div><div class="banner-background banner-focus-center-center"><div class="image"><div class="image-wrapper"><picture><source media="(min-width: 1180px)" srcset="/static/uploads/502-1-(1).jpg# 1180w" sizes="100vw"><source media="(min-width: 768px)" srcset="/static/uploads/502-1-(1).jpg# 768w" sizes="100vw"><source media="(min-width: 320px)" srcset="/static/uploads/502-1-(1).jpg# 320w" sizes="100vw"><img src="/static/uploads/502-1-(1).jpg" title="" alt=""></picture></div></div></div></div></div></div></div></div><div class="row hide-in-css   no-margin layout-1 row-gutter hide-on-mobile hide-on-tablet " style=" "><div class="row-wrapper"><div class="col col-md-12  " style=""><div class="spacer spacer-size-xl" style=""></div></div></div></div><div class="row hide-in-css   no-margin layout-1 row-gutter hide-on-desktop " style=" "><div class="row-wrapper"><div class="col col-md-12  " style=""><div class="spacer spacer-size-lg" style=""></div></div></div></div><div class="row hide-in-css   no-margin layout-7 row-gutter " style=" "><div class="row-wrapper"><div class="col col-md-8  " style=""><div class="group group-vertical-align-top full-height"><div class="intro text-align-left" tabindex="110"><div class="text ">Heb je vragen over een vacature, het sollicitatieproces of werken bij ons? Dan zijn er meerdere manieren waarop je ons eenvoudig kunt bereiken.</div></div><div class="spacer spacer-size-lg" style=""></div><h3 class="heading heading-three text-align-left " tabindex="111">Werkwijze</h3><div class="spacer spacer-size-md" style=""></div><div class="text text-align-left " tabindex="112">Wil je als bureau kandidaten aandragen? Bekijk dan onze werkwijze voor alle afspraken en aanleverrichtlijnen.</div><div class="spacer spacer-size-sm" style=""></div><div class="link-group link-horizontal-align-left"><a class="link color-1" href="https://www.vangelder-externeinleen.com/" target="_self" aria-label="" tabindex="113"><span>Bekijk de werkwijze</span><div class="icon"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewB
803ox="0 0 8 14"><path d="M0,1.65085L4.94673,7L0,12.3491L1.52661,14L8,7L1.52661,0L0,1.65085Z" /></path></svg></div></a></div><div class="spacer spacer-size-lg" style=""></div><h3 class="heading heading-three text-align-left " tabindex="114">Contact per vacature</h3><div class="spacer spacer-size-md" style=""></div><div class="text text-align-left " tabindex="115">Heb je een vraag over een vacature? Neem dan contact op met de recruiter die bij de vacature vermeld staat. Zo krijg je snel en gericht antwoord.</div><div class="spacer spacer-size-lg" style=""></div><a class="anchor-link" id="contactformulier"></a><h3 class="heading heading-three text-align-left " tabindex="116">Contactformulier</h3><div class="spacer spacer-size-sm" style=""></div><div class="text text-align-left " tabindex="117">Gebruik ons contactformulier om je vraag snel en gemakkelijk door te geven. Wij zorgen dat je zo snel mogelijk reactie krijgt.</div></div><div class="contact-form component"><div id="contact-form-hident2"></div></div></div><div class="col col-md-4  " style=""><div class="contact-person "><div class="image image-vertical-align-top image-horizontal-align-fill"><div class="image-wrapper"><img src="/static/uploads/1031-ontwerp-zonder-titel.jpg" title="Van-gelder-infra" alt="Recruitment Business Partners Van Gelder" aria-label=""></div></div><div class="contact-person-body"><div class="contact-content"><h3 class="heading heading-three text-align-left " tabindex="125">Direct contact opnemen</h3><div class="text text-align-left " tabindex="126">Liever persoonlijk contact? Dat kan natuurlijk ook.</div><h3></h3><div class="spacer spacer-size-md"></div><a class="email link" href="/cdn-cgi/l/email-protection#e0928583929589948d858e94a096818e87858c848592ce838f8d" target="_blank" tabindex="131"><div class="link-icon"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 22 15"><path d="M20.62,0H1.38C0.62,0,0,0.63,0,1.41v0.8L11,7l11-4.79v-0.8C22,0.63,21.38,0,20.62,0z" /></path><path d="M11.27,8.36C11.18,8.39,11.09,8.41,11,8.41s-0.18-0.02-0.27-0.05L0,4v9.68C0,14.41,0.62,15,1.38,15h19.25  c0.76,0,1.38-0.59,1.38-1.32V4L11.27,8.36z" /></path></svg></div>Stuur een e-mail</a></div></div></div></div></div></div><div class="row hide-in-css   no-margin layout-1 row-gutter " style=" "><div class="row-wrapper"><div class="col col-md-12  " style=""><div class="spacer spacer-size-xl" style=""></div></div></div></div></div>
vendor: 108 bytes, line 803
803<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
803<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","address":null,"logo":"https://www.werkenbijvangelder.com/static/favicon/icon-32x32-1-van-gelder-favicon.jpg","name":"Van Gelder","sameAs":["https://www.linkedin.com/company/van-gelder-bv/","https://www.instagram.com/vangeldergroep/","https://www.youtube.com/channel/UCvS6FdEO_y4xddnNentiupw","https://www.facebook.com/vGelderGroep"],"url":"/"}</script>
803</script>
803<footer class="footer bg-white" aria-label="Handige links"><div class="footer-container"><div class="nav-footer"><nav class="nav nav-social"><a class="link" href="https://www.linkedin.com/company/van-gelder-bv/" target="_blank" title="Bezoek onze LinkedIn pagina" aria-label="Bezoek onze LinkedIn pagina" tabindex="132"><div class="link-icon"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 13.8 13.2"><path d="M13.8,8.1v5.1h-3V8.4c0-1.2-0.4-2-1.5-2C8.5,6.4,8,7,7.8,7.5C7.7,7.7,7.7,8,7.7,8.2v5h-3 c0,0,0-8.1,0-8.9h3v1.3l0,0l0,0l0,0C8.1,5,8.8,4.1,10.4,4.1C12.4,4.1,13.8,5.4,13.8,8.1z M1.7,0C0.7,0,0,0.7,0,1.5 C0,2.4,0.6,3,1.6,3l0,0c1,0,1.7-0.7,1.7-1.5S2.7,0,1.7,0z M0.2,13.2h3V4.3h-3V13.2z" /></path></svg></div></a><a class="link" href="https://www.instagram.com/vangeldergroep/" target="_blank" title="Bezoek onze Instagram pagina" aria-label="Bezoek onze Instagram pagina" tabindex="133"><div class="link-icon"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 20 20"><path d="M14.017 0h-8.07A5.954 5.954 0 0 0 0 5.948v8.07a5.954 5.954 0 0 0 5.948 5.947h8.07a5.954 5.954 0 0 0 5.947-5.948v-8.07A5.954 5.954 0 0 0 14.017 0zm3.94 14.017a3.94 3.94 0 0 1-3.94 3.94h-8.07a3.94 3.94 0 0 1-3.939-3.94v-8.07a3.94 3.94 0 0 1 3.94-3.939h8.07a3.94 3.94 0 0 1 3.939 3.94v8.07z" /></path><path d="M9.982 4.819A5.17 5.17 0 0 0 4.82 9.982a5.17 5.17 0 0 0 5.163 5.164 5.17 5.17 0 0 0 5.164-5.164A5.17 5.17 0 0 0 9.982 4.82zm0 8.319a3.155 3.155 0 1 1 0-6.31 3.155 3.155 0 0 1 0 6.31z" /></path><circle cx="15.156" cy="4.858" r="1.237" /></circle></svg></div></a><a class="link" href="https://www.youtube.com/channel/UCvS6FdEO_y4xddnNentiupw" target="_blank" title="Bezoek onze YouTube pagina" aria-label="Bezoek onze YouTube pagina" tabindex="134"><div class="link-icon"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 17.6 12.2"><path d="M17.3,10.3c-0.2,0.9-1,1.6-1.9,1.7c-2.2,0.2-4.4,0.2-6.6,0.2s-4.4,0-6.6-0.2c-0.9,0-1.7-0.7-1.9-1.7 C0,9,0,7.5,0,6.1s0-2.8,0.3-4.2c0.2-0.9,1-1.6,1.9-1.7C4.4,0,6.6,0,8.8,0s4.4,0,6.6,0.2c0.9,0.2,1.7,0.9,1.9,1.8 c0.3,1.3,0.3,2.8,0.3,4.2S17.6,9,17.3,10.3z M6.5,8.9c1.9-1,3.7-1.9,5.6-2.9c-1.9-1-3.7-1.9-5.6-2.9C6.5,5,6.5,7,6.5,8.9z" /></path></svg></div></a><a class="link" href="https://www.facebook.com/vGelderGroep" target="_blank" title="Bezoek onze Facebook pagina" aria-label="Bezoek onze Facebook pagina" tabindex="135"><div class="link-icon"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 7.5 16.2"><path d="M7.1,8.1H4.9v8.1H1.6V8.1H0V5.2h1.6V3.4C1.6,2.1,2.2,0,5,0h2.5v2.8H5.6c-0.3,0-0.7,0.1-0.7,0.8v1.6 h2.5L7.1,8.1z" /></path></svg></div></a></nav></div><div class="nav-footer"><nav class="nav nav-cms-pages"><a class="link" href="https://www.werkenbijvangelder.com/veelgestelde-vragen" tabindex="136">Veelgestelde vragen</a><a class="link" href="https://www.werkenbijvangelder.com/privacy" tabindex="137">Privacy</a><a class="link" href="https://www.werkenbijvangelder.com/cookies" tabindex="138">Cookies</a><a class="link" href="https://www.werkenbijvangelder.com/contact" tabindex="139">Contact</a></nav></div><div class="nav-footer"><div class="corporate-link"><a class="link" href="https://vangelder.com" target="_blank" title="Ga naar de bedrijfswebsite" aria-label="Ga naar de bedrijfswebsite" tabindex="140">Van Gelder<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 12 12" xml:space="preserve"><path d="M10.7,10.7H1.3V1.3H6V0H1.3C0.6,0,0,0.6,0,1.3v9.3c0,0.4,0.1,0.7,0.4,0.9S1,12,1.3,12h9.3c0.4,0,0.7-0.1,0.9-0.4S12,11,12,10.7V6h-1.3L10.7,10.7L10.7,10.7z M7.3,0v1.3h2.4L3.2,7.9l0.9,0.9l6.6-6.6v2.4H12V0H7.3z" /></svg></path></svg></a></div></div></div></footer><div class="cookie-modal tafkar-modal bg-color-3" data-tab-scope><div class="cookie-body"><div class="cookie-info"><h2 class="title" tabindex="2">Deze website maakt gebruik van cookies</h2><p class="description" tabindex="3">Wij, en derde partijen, maken op onze website gebruik van cookies. Wij gebruiken cookies om ervoor te zorgen dat onze website goed functioneert, om jouw voorkeuren op te slaan, om inzicht te verkrijgen in bezoekersgedrag, maar ook voor marketing en s
803ocial media doeleinden (laten zien van gepersonaliseerde advertenties). Door op ‘Accepteren’ te klikken, ga je akkoord met het gebruik van alle cookies. In onze Cookieverklaring kun je meer lezen over de cookies die wij gebruiken en kun je jouw voorkeuren opslaan of wijzigen.  Door ‘Weigeren’ te klikken ga je alleen akkoord met het gebruik van functionele cookies.</p><form action="/api/cookie-consent" method="post" id="consent-form"><input hidden id="hidden-input" name="consent" value="functional"><div class="card-container row " id="consent-cards"><div class="col col-sm-4"><label class="disabled card"><div class="top"><input class="form-checkbox" type="checkbox" onClick="onClickCheckBox(0, true)" value="functional" checked><div class="checkbox"><svg version="1.1" x="0px" y="0px" viewBox="0 0 499.03 385.45"><path d="M490.51,47.56L451.46,8.52C445.79,2.84,439.04,0,431.23,0c-7.8,0-14.55,2.84-20.23,8.52L181.36,238.15l-93.34-93.35  c-5.68-5.68-12.43-8.52-20.23-8.52c-7.81,0-14.55,2.84-20.23,8.52L8.52,183.85C2.84,189.53,0,196.27,0,204.08  c0,7.81,2.84,14.55,8.52,20.23l152.62,152.62c5.68,5.68,12.43,8.52,20.23,8.52c7.81,0,14.55-2.83,20.23-8.52L490.51,88.02  c5.67-5.68,8.52-12.42,8.52-20.23S496.19,53.24,490.51,47.56z" /></path></svg></div><h2 class="card-title" tabindex="5">Functioneel</h2></div><div class="card-description">Functionele cookies zorgen ervoor dat deze website informatie kan onthouden die van invloed is op het gedrag en de vormgeving van de website, zoals bijvoorbeeld welke vacatures jouw favorieten zijn.</div></label></div><div class="col col-sm-4"><label class="card"><div class="top"><input class="form-checkbox" type="checkbox" onClick="onClickCheckBox(1, true)" value="statistics"><div class="checkbox"><svg version="1.1" x="0px" y="0px" viewBox="0 0 499.03 385.45"><path d="M490.51,47.56L451.46,8.52C445.79,2.84,439.04,0,431.23,0c-7.8,0-14.55,2.84-20.23,8.52L181.36,238.15l-93.34-93.35  c-5.68-5.68-12.43-8.52-20.23-8.52c-7.81,0-14.55,2.84-20.23,8.52L8.52,183.85C2.84,189.53,0,196.27,0,204.08  c0,7.81,2.84,14.55,8.52,20.23l152.62,152.62c5.68,5.68,12.43,8.52,20.23,8.52c7.81,0,14.55-2.83,20.23-8.52L490.51,88.02  c5.67-5.68,8.52-12.42,8.52-20.23S496.19,53.24,490.51,47.56z" /></path></svg></div><h2 class="card-title" tabindex="6">Statistieken</h2></div><div class="card-description">Statistische cookies helpen ons te begrijpen hoe bezoekers deze website gebruiken, door anoniem gegevens te verzamelen en te rapporteren.</div></label></div><div class="col col-sm-4"><label class="card"><div class="top"><input class="form-checkbox" id="marketing-checkbox" type="checkbox" onClick="onClickCheckBox(2, true)" value="marketing"><div class="checkbox"><svg version="1.1" x="0px" y="0px" viewBox="0 0 499.03 385.45"><path d="M490.51,47.56L451.46,8.52C445.79,2.84,439.04,0,431.23,0c-7.8,0-14.55,2.84-20.23,8.52L181.36,238.15l-93.34-93.35  c-5.68-5.68-12.43-8.52-20.23-8.52c-7.81,0-14.55,2.84-20.23,8.52L8.52,183.85C2.84,189.53,0,196.27,0,204.08  c0,7.81,2.84,14.55,8.52,20.23l152.62,152.62c5.68,5.68,12.43,8.52,20.23,8.52c7.81,0,14.55-2.83,20.23-8.52L490.51,88.02  c5.67-5.68,8.52-12.42,8.52-20.23S496.19,53.24,490.51,47.56z" /></path></svg></div><h2 class="card-title" tabindex="7">Marketing</h2></div><div class="card-description">Marketing cookies worden op deze site gebruikt om eventueel video’s via YouTube af te kunnen spelen. Verder ook om relevante advertenties weer te geven tijdens het bezoeken van andere websites.</div></label></div></div><div class="cookie-footer"><div class="btn-row"><div class="link color-1 visible" id="settings-link" onClick="onClickSettings()" onFocus="onClickSettings()" tabindex="4">Zelf instellen</div><button class="btn bg-color-1 color-white visible" type="submit" value="default" id="submit-button" tabindex="8"><span class="btn-label selected-consent-msg visible">Weigeren</span><span class="btn-label selected-consent-msg ">Accepteer geselecteerde cookies</span></button><button class="visible btn bg-color-1 color-white" onClick="onClickAcceptAll()" value="default" id="accept-all" tabindex="9"><span class="btn-label">Accepteren</span></button></div><a class="link cookie-declaration" href="https://www.werkenbijvangelder.com/cookies" tabindex="10">Lees meer in de cookieverklaring</a></a></div></form></div></div></div>
803<script src="/static/js/components-nl.js?v=22.13.13"></script>
803<script src="/static/tmp/autogen-_lYjea2J.js"></script>
803</div>
804</body>
805</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.