{"browserTitle":"London Event Photographer - Corporate Events & Conferences","copyright":"","metaDescription":"London Event Photographer shooting conferences, corporate events, parties, dinners, award shows, workshops, product launches and more. ","metaKeywords":"Event Photography, Events, London Event Photographer, Corporate Event Photographer, Conference Photography","localMasterVersion":"16.0","backgroundImages":[],"filters":["-Social Media Links","Byron","Climbing-draft","Index Thumbs","Leegate-web-finals","Motion","Portrait_Portfolio","Text Pages"],"portfolioEmailMessage":"Check out this photograph:","socialLinks":[],"useHTML":true,"globalBrowserTitle":false,"facebookImage":"fb-Newsagents_001.jpg","facebookAdmins":"","facebookUseMeta":true,"podUseDesktop":true,"padUseDesktop":false,"generalEmail":"","inquiryTitle":"","inquiryInfo":"","lang":"en","betaProgramEnabled":false,"advancedSeo":true,"betaProgramVisible":true,"adminSortDefault":"dateAdded descending","enablePinterest":false,"currentTemplate":17,"enableCookieBanner":false,"cookieBannerPosition":"bottom","cookieBannerLink":"","cookieBannerMessage":"By continuing to visit this site you agree to our use of cookies.","revision":0,"cdnSslUri":"/pf-media","defaultEditorMode":"source","siteHead":"<script type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"LocalBusiness\",\n  \"name\": \"Ollie Rudkin Photography\",\n  \"description\": \"London event and corporate portrait photographer covering conferences, parties, awards and headshots.\",\n  \"url\": \"https://www.ollierudkin.co.uk\",\n  \"telephone\": \"07828724663\",\n  \"email\": \"ollie@ollierudkin.co.uk\",\n  \"address\": {\n    \"@type\": \"PostalAddress\",\n    \"addressLocality\": \"London\",\n    \"addressRegion\": \"England\",\n    \"addressCountry\": \"GB\"\n  },\n  \"geo\": {\n    \"@type\": \"GeoCoordinates\",\n    \"latitude\": \"51.5074\",\n    \"longitude\": \"-0.1278\"\n  },\n  \"areaServed\": \"London\",\n  \"priceRange\": \"££\",\n  \"image\": \"https://www.ollierudkin.co.uk/pf-media/London-Corporate-Portraits-1.jpg\",\n  \"sameAs\": [\n    \"https://www.linkedin.com/in/ollierudkin/\"\n  ]\n}\n</script>","logoText":"OLLIE RUDKIN","redirects":[],"blogSectionId":"146","favicon":"logo-3.ico","disableRightClick":false,"searchCaptions":true,"searchLabels":false,"globalMediaSearch":true,"siteBody":"<script>\n(function () {\n\"use strict\";\n\nvar CFG = {\ncontactEndpoint: \"https://api.photofolio.com/dx/public/email/contact\",\ncontactFormNotificationEmail: \"notificationEmail1\",\ntitle: \"Ollie Event Photography Enquiry\",\nsubject: \"New Enquiry – Ollie\",\naccountName: \"oliverrudkin\",\nwrapId: \"olxDxContactWrap\",\nstyleId: \"olxDxContactStyles\",\nobserverKey: \"__olxDxContactObserver\",\nresizeKey: \"__olxDxContactResizeBound\",\nfooterGapDesktop: 40,\nfooterGapMobile: 40,\nmaxWidthDesktop: 840,\nmobileSidePad: 0,\nminReadyGridHeight: 180,\nscheduleDelayMs: 140,\nroutePollMs: 1400\n};\n\nvar UPDATE_TIMER = null;\nvar LAST_ROUTE = \"\";\nvar LAST_LAYOUT_KEY = \"\";\nvar HAS_REVEALED = false;\nvar FORM_LOCKED = false;\n\nfunction $(id){ return document.getElementById(id); }\nfunction trimString(v){ return typeof v === \"string\" ? v.trim() : \"\"; }\nfunction safeText(v){ return typeof v === \"string\" ? v.replace(/\\u2028|\\u2029/g,\"\") : v; }\nfunction setOpacity(el,val){ if(el) el.style.opacity = String(val); }\n\nfunction setInputWarn(el, warning){\nif(!el) return;\nel._savedColor = el.style.color;\nel._savedValue = el.value;\nel.style.color = \"#cc2222\";\nel.value = warning;\nsetTimeout(function(){\nel.style.color = el._savedColor || \"\";\nel.value = el._savedValue || \"\";\n},1500);\n}\n\nfunction validateEmailBasic(v){\nreturn /^\\w+([.-]?\\w+)*@[a-zA-Z_]+?\\.[a-zA-Z]{2,20}$/.test(v || \"\");\n}\n\nfunction resolveAccountName(){\nreturn CFG.accountName;\n}\n\nfunction JSONXHR(opts){\nvar xhr = new XMLHttpRequest();\nxhr.open(opts.method || \"POST\", opts.url, true);\nxhr.setRequestHeader(\"Content-Type\", \"application/json; charset=utf-8\");\n\nxhr.addEventListener(\"load\", function(){\nvar resp = xhr.responseText;\nvar parsed = null;\ntry{\nparsed = resp ? JSON.parse(resp) : null;\n}catch(err){\nconsole.error(\"JSON parse failed:\", err, resp);\n}\nif(opts.callback) opts.callback(parsed, xhr.status, resp);\n});\n\nxhr.addEventListener(\"error\", function(e){\nif(typeof opts.onError === \"function\") opts.onError(e, xhr.status);\n});\n\nxhr.addEventListener(\"abort\", function(e){\nif(typeof opts.onError === \"function\") opts.onError(e, xhr.status);\n});\n\nxhr.send(safeText(JSON.stringify(opts.params || {})));\n}\n\nfunction getPath(){\ntry{\nreturn (window.location.pathname || \"\").toLowerCase();\n}catch(e){\nreturn \"\";\n}\n}\n\nfunction isStandalonePage(){\nvar p = getPath();\nreturn p.indexOf(\"/connect\") > -1;\n}\n\nfunction shouldShowContact(){\nif (isStandalonePage()) return false;\nvar p = getPath();\nreturn p.indexOf(\"/thumbs\") > -1 || p === \"/\" || p === \"/home\" || p.indexOf(\"/home/\") === 0;\n}\n\nfunction getGalleryTitle(){\nvar candidates = [\ndocument.querySelector(\"h1\"),\ndocument.querySelector(\".Title\"),\ndocument.querySelector(\".pageTitle\"),\ndocument.querySelector(\".SectionTitle\"),\ndocument.querySelector(\"[data-title]\")\n];\nfor(var i=0;i<candidates.length;i++){\nvar el = candidates[i];\nif(el && el.textContent && el.textContent.trim()) return el.textContent.trim();\n}\nreturn document.title ? document.title.trim() : \"\";\n}\n\nfunction getGrid(){ return document.querySelector(\".Thumbs\\\\.grid\"); }\nfunction getGridContainer(){ return document.querySelector(\".Thumbs\\\\.grid\\\\.container\"); }\nfunction getMask(){ return document.querySelector(\".Thumbs\\\\.mask\"); }\nfunction getWrap(){ return $(CFG.wrapId); }\n\nfunction injectStyles(){\nif($(CFG.styleId)) return;\n\nvar css = `\n#${CFG.wrapId}{\nposition:absolute;\nbox-sizing:border-box;\ncolor:#444444;\nfont-family:\"Work Sans\",sans-serif;\nfont-weight:300;\nfont-size:17px;\nline-height:1.72;\nletter-spacing:0;\nz-index:9999;\npointer-events:auto;\nvisibility:hidden;\nopacity:0;\ntransform:translateY(8px);\ntransition:opacity .18s ease, transform .18s ease;\nwill-change:opacity,transform;\n}\n\n#${CFG.wrapId}.is-ready{\nvisibility:visible;\nopacity:1;\ntransform:none;\n}\n\n#${CFG.wrapId},\n#${CFG.wrapId} *{\nbox-sizing:border-box;\n}\n\n#${CFG.wrapId} .olx-contact-inner{\nwidth:100%;\nmax-width:${CFG.maxWidthDesktop}px;\nmargin:0 auto;\npadding-top:12px;\n}\n\n#${CFG.wrapId} .olx-contact-heading{\nmargin:0 0 14px;\ntext-align:center;\nfont-family:\"Work Sans\",sans-serif;\nfont-weight:300;\nfont-size:clamp(28px,2vw,38px);\nline-height:1.12;\nletter-spacing:.01em;\ntext-transform:none;\ncolor:#444444;\n}\n\n#${CFG.wrapId} .olx-contact-sub{\nmax-width:680px;\nmargin:0 auto 34px;\ntext-align:center;\nfont-family:\"Work Sans\",sans-serif;\nfont-weight:300;\nfont-size:17px;\nline-height:1.8;\ncolor:#444444;\nopacity:.9;\n}\n\n#${CFG.wrapId} form{\nwidth:100%;\nmargin:0;\n}\n\n#${CFG.wrapId} .olx-contact-grid{\ndisplay:grid;\ngrid-template-columns:minmax(0,1fr) minmax(0,1fr);\ngap:22px 24px;\nalign-items:start;\nwidth:100%;\n}\n\n#${CFG.wrapId} .olx-contact-field{\ndisplay:flex;\nflex-direction:column;\ngap:10px;\nmin-width:0;\n}\n\n#${CFG.wrapId} .olx-contact-field--full{\ngrid-column:1 / -1;\n}\n\n#${CFG.wrapId} .olx-contact-label{\nfont-family:\"Work Sans\",sans-serif;\nfont-weight:400;\nfont-size:16px;\nline-height:1.35;\nletter-spacing:.005em;\ncolor:#444444;\nopacity:1;\n}\n\n#${CFG.wrapId} .olx-contact-input,\n#${CFG.wrapId} .olx-contact-textarea{\nwidth:100%;\nmax-width:100%;\nmin-width:0;\nborder:1px solid rgba(68,68,68,.2);\nbackground:#ffffff;\ncolor:#444444;\nfont-family:\"Work Sans\",sans-serif;\nfont-weight:300;\nfont-size:17px;\nline-height:1.5;\nborder-radius:0;\noutline:none;\nbox-shadow:none;\ntransition:border-color .2s ease, background .2s ease, opacity .2s ease;\n-webkit-appearance:none;\nappearance:none;\n}\n\n#${CFG.wrapId} .olx-contact-input{\nmin-height:66px;\npadding:18px 20px;\n}\n\n#${CFG.wrapId} .olx-contact-textarea{\nmin-height:210px;\npadding:18px 20px;\nresize:vertical;\n}\n\n#${CFG.wrapId} .olx-contact-input::placeholder,\n#${CFG.wrapId} .olx-contact-textarea::placeholder{\ncolor:#444444;\nopacity:.46;\nfont-weight:300;\n}\n\n#${CFG.wrapId} .olx-contact-input:focus,\n#${CFG.wrapId} .olx-contact-textarea:focus{\nborder-color:rgba(68,68,68,.48);\nbackground:#fff;\n}\n\n#${CFG.wrapId} .olx-contact-actions{\ndisplay:flex;\ngap:14px;\nalign-items:center;\njustify-content:flex-start;\nmargin-top:26px;\nflex-wrap:wrap;\n}\n\n#${CFG.wrapId} .olx-contact-btn{\ndisplay:inline-flex;\nalign-items:center;\njustify-content:center;\nmin-height:54px;\npadding:0 24px;\nborder:1px solid #444444;\nbackground:transparent;\ncolor:#444444;\ntext-decoration:none;\ntext-transform:uppercase;\nletter-spacing:.08em;\nfont-family:\"Work Sans\",sans-serif;\nfont-weight:300;\nfont-size:13px;\nline-height:1;\ncursor:pointer;\ntransition:background .2s ease, color .2s ease, opacity .2s ease;\n}\n\n#${CFG.wrapId} .olx-contact-btn:hover{\nbackground:#444444;\ncolor:#ffffff;\n}\n\n#${CFG.wrapId} .olx-contact-btn[disabled]{\nopacity:.45;\npointer-events:none;\n}\n\n#${CFG.wrapId} .olx-contact-success,\n#${CFG.wrapId} .olx-contact-error{\nmargin-top:16px;\nfont-family:\"Work Sans\",sans-serif;\nfont-weight:300;\nfont-size:14px;\nline-height:1.55;\nopacity:0;\ntransition:opacity .2s ease;\n}\n\n#${CFG.wrapId} .olx-contact-success{\ncolor:#444444;\n}\n\n#${CFG.wrapId} .olx-contact-error{\ncolor:#a12828;\n}\n\n@media (max-width:900px){\n#${CFG.wrapId}{\npadding-left:${CFG.mobileSidePad}px;\npadding-right:${CFG.mobileSidePad}px;\n}\n\n#${CFG.wrapId} .olx-contact-inner{\nmax-width:100%;\npadding-top:18px;\n}\n\n#${CFG.wrapId} .olx-contact-grid{\ngrid-template-columns:1fr;\ngap:16px;\n}\n\n#${CFG.wrapId} .olx-contact-heading{\nfont-size:30px;\nmargin-bottom:12px;\n}\n\n#${CFG.wrapId} .olx-contact-sub{\nfont-size:16px;\nline-height:1.72;\nmargin-bottom:28px;\n}\n\n#${CFG.wrapId} .olx-contact-label{\nfont-size:16px;\n}\n\n#${CFG.wrapId} .olx-contact-input{\nmin-height:60px;\npadding:16px 18px;\nfont-size:16px;\n}\n\n#${CFG.wrapId} .olx-contact-textarea{\nmin-height:180px;\npadding:16px 18px;\nfont-size:16px;\n}\n}\n`;\n\nvar style = document.createElement(\"style\");\nstyle.id = CFG.styleId;\nstyle.appendChild(document.createTextNode(css));\ndocument.head.appendChild(style);\n}\n\nfunction buildWrap(){\nreturn ''\n+ '<section id=\"' + CFG.wrapId + '\" aria-label=\"Contact form\">'\n+   '<div class=\"olx-contact-inner\">'\n+     '<h2 class=\"olx-contact-heading\">Request an Estimate</h2>'\n+     '<div class=\"olx-contact-sub\">Please fill out some details below for availability and an estimate</div>'\n+     '<form data-olx-form=\"true\">'\n+       '<div class=\"olx-contact-grid\">'\n\n+         '<div class=\"olx-contact-field olx-contact-field--full\">'\n+           '<label class=\"olx-contact-label\" for=\"olx-inline-name\">Name</label>'\n+           '<input class=\"olx-contact-input\" id=\"olx-inline-name\" data-olx-name=\"true\" type=\"text\" placeholder=\"Your name\" required>'\n+         '</div>'\n\n+         '<div class=\"olx-contact-field\">'\n+           '<label class=\"olx-contact-label\" for=\"olx-inline-phone\">Phone number (optional)</label>'\n+           '<input class=\"olx-contact-input\" id=\"olx-inline-phone\" data-olx-phone=\"true\" type=\"tel\" placeholder=\"Your phone number\">'\n+         '</div>'\n\n+         '<div class=\"olx-contact-field\">'\n+           '<label class=\"olx-contact-label\" for=\"olx-inline-email\">Email address</label>'\n+           '<input class=\"olx-contact-input\" id=\"olx-inline-email\" data-olx-email=\"true\" type=\"email\" placeholder=\"Your email address\" required>'\n+         '</div>'\n\n+         '<div class=\"olx-contact-field\">'\n+           '<label class=\"olx-contact-label\" for=\"olx-inline-date\">Main shoot date</label>'\n+           '<input class=\"olx-contact-input\" id=\"olx-inline-date\" data-olx-date=\"true\" type=\"date\">'\n+         '</div>'\n\n+         '<div class=\"olx-contact-field\">'\n+           '<label class=\"olx-contact-label\" for=\"olx-inline-location\">Shoot location</label>'\n+           '<input class=\"olx-contact-input\" id=\"olx-inline-location\" data-olx-location=\"true\" type=\"text\" placeholder=\"Where is the shoot taking place?\">'\n+         '</div>'\n\n+         '<div class=\"olx-contact-field olx-contact-field--full\">'\n+           '<label class=\"olx-contact-label\" for=\"olx-inline-message\">Message</label>'\n+           '<textarea class=\"olx-contact-textarea\" id=\"olx-inline-message\" data-olx-message=\"true\" placeholder=\"Please give some background or a general overview of your project\" required></textarea>'\n+         '</div>'\n\n+       '</div>'\n\n+       '<div class=\"olx-contact-actions\">'\n+         '<button class=\"olx-contact-btn\" data-olx-submit=\"true\" type=\"button\">Send enquiry</button>'\n+       '</div>'\n\n+       '<div class=\"olx-contact-success\" data-olx-success=\"true\">Thanks — your message has been sent.</div>'\n+       '<div class=\"olx-contact-error\" data-olx-error=\"true\">Something went wrong. Please try again.</div>'\n+     '</form>'\n+   '</div>'\n+ '</section>';\n}\n\nfunction ensureWrap(){\nvar wrap = getWrap();\nif(wrap) return wrap;\n\nvar gridContainer = getGridContainer();\nif(!gridContainer) return null;\n\nvar temp = document.createElement(\"div\");\ntemp.innerHTML = buildWrap();\nwrap = temp.firstChild;\ngridContainer.appendChild(wrap);\nreturn wrap;\n}\n\nfunction removeWrap(){\nvar wrap = getWrap();\nif(wrap) wrap.remove();\nHAS_REVEALED = false;\nLAST_LAYOUT_KEY = \"\";\nFORM_LOCKED = false;\n}\n\nfunction getLayoutKey(grid, gridContainer, mask){\nvar gridRect = grid.getBoundingClientRect();\nvar maskRect = mask.getBoundingClientRect();\nvar containerRect = gridContainer.getBoundingClientRect();\nreturn [\nMath.round(gridRect.height),\nMath.round(gridRect.bottom - containerRect.top),\nMath.round(maskRect.width),\nMath.round(maskRect.left - containerRect.left),\nwindow.innerWidth,\nwindow.innerHeight,\ngetPath()\n].join(\"|\");\n}\n\nfunction unlockFormMaybe(){\nvar wrap = getWrap();\nif(!wrap) {\nFORM_LOCKED = false;\nreturn;\n}\nvar active = document.activeElement;\nif(active && wrap.contains(active)) return;\nFORM_LOCKED = false;\n}\n\nfunction bindFormInteractionGuards(){\nvar wrap = getWrap();\nif(!wrap || wrap.__olxInteractionBound) return;\nwrap.__olxInteractionBound = true;\n\nwrap.addEventListener(\"mouseenter\", function(){\nFORM_LOCKED = true;\n});\n\nwrap.addEventListener(\"mouseleave\", function(){\nsetTimeout(unlockFormMaybe, 0);\n});\n\nwrap.addEventListener(\"focusin\", function(){\nFORM_LOCKED = true;\n});\n\nwrap.addEventListener(\"focusout\", function(){\nsetTimeout(unlockFormMaybe, 0);\n});\n}\n\nfunction updateWrapPosition(forceHideBeforeReveal){\nvar existing = getWrap();\n\nif(!shouldShowContact()){\nif(existing) existing.remove();\nremoveWrap();\nreturn;\n}\n\ninjectStyles();\n\nvar grid = getGrid();\nvar gridContainer = getGridContainer();\nvar mask = getMask();\n\nif(!grid || !gridContainer || !mask) return;\n\nvar gridHeight = grid.offsetHeight || 0;\nif(gridHeight < CFG.minReadyGridHeight){\nscheduleUpdate();\nreturn;\n}\n\nvar wrap = existing || ensureWrap();\nif(!wrap) return;\n\nbindFormInteractionGuards();\n\nif(wrap.parentNode !== gridContainer){\ngridContainer.appendChild(wrap);\n}\n\nvar layoutKey = getLayoutKey(grid, gridContainer, mask);\nif(layoutKey === LAST_LAYOUT_KEY && HAS_REVEALED){\nreturn;\n}\nLAST_LAYOUT_KEY = layoutKey;\n\nif(forceHideBeforeReveal || !HAS_REVEALED){\nwrap.classList.remove(\"is-ready\");\n}\n\nvar containerRect = gridContainer.getBoundingClientRect();\nvar gridRect = grid.getBoundingClientRect();\nvar maskRect = mask.getBoundingClientRect();\n\nvar mobile = window.innerWidth <= 900;\nvar extraGap = mobile ? CFG.footerGapMobile : CFG.footerGapDesktop;\nvar gridBottomInsideContainer = gridRect.bottom - containerRect.top;\nvar wrapTop = Math.max(gridBottomInsideContainer, grid.offsetHeight || 0) + extraGap;\n\nvar availableWidth = mobile\n? Math.max(0, maskRect.width - (CFG.mobileSidePad * 2))\n: Math.min(maskRect.width, CFG.maxWidthDesktop);\n\nvar wrapLeft = mobile\n? (maskRect.left - containerRect.left) + CFG.mobileSidePad\n: (maskRect.left - containerRect.left) + Math.max(0, (maskRect.width - availableWidth) / 2);\n\ntry{\ngridContainer.style.overflow = \"visible\";\ngridContainer.style.position = \"relative\";\n}catch(e){}\n\nwrap.style.top = wrapTop + \"px\";\nwrap.style.left = wrapLeft + \"px\";\nwrap.style.width = availableWidth + \"px\";\n\nvar wrapHeight = wrap.offsetHeight || 0;\nvar neededHeight = wrapTop + wrapHeight + (mobile ? 90 : 60);\nvar currentHeight = gridContainer.offsetHeight || parseInt(gridContainer.style.height || \"0\", 10) || 0;\n\nif(neededHeight > currentHeight){\ngridContainer.style.height = neededHeight + \"px\";\n}\n\nif(!HAS_REVEALED){\nrequestAnimationFrame(function(){\nrequestAnimationFrame(function(){\nif(getWrap() === wrap){\nwrap.classList.add(\"is-ready\");\nHAS_REVEALED = true;\n}\n});\n});\n}\n}\n\nfunction scheduleUpdate(){\nclearTimeout(UPDATE_TIMER);\nUPDATE_TIMER = setTimeout(function(){\nif(FORM_LOCKED) return;\nupdateWrapPosition(false);\n}, CFG.scheduleDelayMs);\n}\n\nfunction submitFormFrom(button){\nvar form = button && button.closest ? button.closest(\"[data-olx-form='true']\") : null;\nif(!form) return;\n\nvar nameEl = form.querySelector(\"[data-olx-name='true']\");\nvar phoneEl = form.querySelector(\"[data-olx-phone='true']\");\nvar emailEl = form.querySelector(\"[data-olx-email='true']\");\nvar dateEl = form.querySelector(\"[data-olx-date='true']\");\nvar locationEl = form.querySelector(\"[data-olx-location='true']\");\nvar messageEl = form.querySelector(\"[data-olx-message='true']\");\nvar successEl = form.querySelector(\"[data-olx-success='true']\");\nvar errorEl = form.querySelector(\"[data-olx-error='true']\");\n\nif(!nameEl || !emailEl || !messageEl || !successEl || !errorEl) return;\n\nvar nameVal = trimString(nameEl.value || \"\");\nvar phoneVal = trimString(phoneEl ? phoneEl.value : \"\");\nvar emailVal = trimString(emailEl.value || \"\");\nvar dateVal = trimString(dateEl ? dateEl.value : \"\");\nvar locationVal = trimString(locationEl ? locationEl.value : \"\");\nvar messageVal = trimString(messageEl.value || \"\");\nvar galleryTitle = trimString(getGalleryTitle());\nvar accountName = resolveAccountName();\n\nif(!nameVal){\nsetInputWarn(nameEl,\"Please enter name\");\nreturn;\n}\nif(!emailVal){\nsetInputWarn(emailEl,\"Please enter email\");\nreturn;\n}\nif(!validateEmailBasic(emailVal)){\nsetInputWarn(emailEl,\"Please enter valid email\");\nreturn;\n}\nif(!messageVal){\nsetInputWarn(messageEl,\"Please enter message\");\nreturn;\n}\nif(!accountName){\nsetOpacity(errorEl,1);\nconsole.error(\"Unable to resolve PhotoFolio account name\");\nreturn;\n}\n\nsetOpacity(successEl,0);\nsetOpacity(errorEl,0);\nbutton.disabled = true;\n\nvar comments = [];\ncomments.push(messageVal);\nif(dateVal) comments.push(\"Main Shoot Date: \" + dateVal);\nif(locationVal) comments.push(\"Shoot Location: \" + locationVal);\nif(galleryTitle) comments.push(\"Gallery Page: \" + galleryTitle);\ncomments.push(\"Page URL: \" + window.location.href);\n\nJSONXHR({\nurl: CFG.contactEndpoint,\nparams: {\naccount: accountName,\nTitle: CFG.title,\nName: nameVal,\nEmail: emailVal,\nPhone: phoneVal,\nComments: comments.join(\"\\n\\n\"),\nsubject: CFG.subject,\ncontactFormNotificationEmail: CFG.contactFormNotificationEmail\n},\ncallback: function(r,status,raw){\nbutton.disabled = false;\n\nvar ok = !!(\n(r && r.status === \"pass\") ||\n(r && r.status === \"success\") ||\n(r && r.success === true) ||\n(status >= 200 && status < 300 && (!r || r.status !== \"fail\"))\n);\n\nif(ok){\nnameEl.value = \"\";\nif(phoneEl) phoneEl.value = \"\";\nemailEl.value = \"\";\nif(dateEl) dateEl.value = \"\";\nif(locationEl) locationEl.value = \"\";\nmessageEl.value = \"\";\nsetOpacity(successEl,1);\n}else{\nsetOpacity(errorEl,1);\nconsole.error(\"Contact form failed:\",r,status,raw);\n}\n},\nonError: function(e,status){\nbutton.disabled = false;\nsetOpacity(errorEl,1);\nconsole.error(\"XHR error:\",e,status);\n}\n});\n}\n\nfunction wireEvents(){\nif(document.body.__olxDxContactBound) return;\ndocument.body.__olxDxContactBound = true;\n\ndocument.addEventListener(\"click\", function(e){\nvar t = e.target;\nvar submitBtn = t && (t.matches && t.matches(\"[data-olx-submit='true']\") ? t : (t.closest ? t.closest(\"[data-olx-submit='true']\") : null));\nif(submitBtn){\ne.preventDefault();\nsubmitFormFrom(submitBtn);\n}\n}, true);\n}\n\nfunction bindResize(){\nif(window[CFG.resizeKey]) return;\nwindow[CFG.resizeKey] = true;\n\nwindow.addEventListener(\"resize\", function(){\nif(FORM_LOCKED) return;\nHAS_REVEALED = false;\nLAST_LAYOUT_KEY = \"\";\nscheduleUpdate();\n});\n\nwindow.addEventListener(\"orientationchange\", function(){\nif(FORM_LOCKED) return;\nHAS_REVEALED = false;\nLAST_LAYOUT_KEY = \"\";\nscheduleUpdate();\n});\n\nwindow.addEventListener(\"popstate\", function(){\nFORM_LOCKED = false;\nHAS_REVEALED = false;\nLAST_LAYOUT_KEY = \"\";\nsetTimeout(function(){ updateWrapPosition(true); }, 500);\n});\n\nwindow.addEventListener(\"hashchange\", function(){\nFORM_LOCKED = false;\nHAS_REVEALED = false;\nLAST_LAYOUT_KEY = \"\";\nsetTimeout(function(){ updateWrapPosition(true); }, 500);\n});\n}\n\nfunction observePF(){\nif(window[CFG.observerKey]) return;\n\nvar observer = new MutationObserver(function(mutations){\nif(FORM_LOCKED) return;\n\nfor(var i=0;i<mutations.length;i++){\nvar target = mutations[i].target;\nvar wrap = getWrap();\nif(wrap && target && wrap.contains(target)) continue;\nscheduleUpdate();\nbreak;\n}\n});\n\nobserver.observe(document.body, {\nchildList: true,\nsubtree: true\n});\n\nwindow[CFG.observerKey] = observer;\n}\n\nfunction boot(){\nif (isStandalonePage()) return;\n\nwireEvents();\nbindResize();\nobservePF();\n\nLAST_ROUTE = location.pathname + location.search + location.hash;\n\nsetTimeout(function(){ updateWrapPosition(true); }, 700);\nsetTimeout(function(){ updateWrapPosition(true); }, 1400);\nsetTimeout(function(){ updateWrapPosition(true); }, 2400);\n\nsetInterval(function(){\nvar route = location.pathname + location.search + location.hash;\nif(route !== LAST_ROUTE){\nLAST_ROUTE = route;\nFORM_LOCKED = false;\nHAS_REVEALED = false;\nLAST_LAYOUT_KEY = \"\";\nsetTimeout(function(){ updateWrapPosition(true); }, 500);\nsetTimeout(function(){ updateWrapPosition(true); }, 1100);\n}\n}, CFG.routePollMs);\n}\n\nif(document.readyState === \"loading\"){\ndocument.addEventListener(\"DOMContentLoaded\", boot);\n}else{\nboot();\n}\n})();\n</script>","customFonts":[],"contactInfo":"Ollie Rudkin\n\n","globalMasterVersion":"16.0","globalBetaVersion":"16.1","accountName":"oliverrudkin","rsSslUri":"/pf-media","adminLockout":false}