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 & 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 & 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 & 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 & 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.