Services
NV5 - Community Relations and Public Outreach

Community Relations & Public Outreach

Building understanding and support.

We live in a time where public opinion is shaped with a click of a button and the share of a post. This is why it is so important to implement a public outreach plan at the outset of a project or program. Your technical team certainly understands your project to its very last detail and supports it wholeheartedly, but that doesn’t guarantee your stakeholders — the workers, public, regulators, media, and elected officials — automatically do too. A project’s launch, progress, and completion can hinge solely on the rigor of its community relations program and the care with which it is implemented. By offering this strategic service in-house at NV5 through a team of dedicated public affairs professionals, information flows smoothly between our technical leads and your target audience. Our award-winning community relations team consists of former journalists, public agency staffers, and creative and tech experts who will uphold “one voice” consistent messaging to your stakeholders. This protects your project from public outcry, political opposition, schedule slip, cost creep, and other unnecessary headaches!

Expertise

  • Strategic & Crisis Communications Plans
  • Websites & Social Media
  • Public Meetings & Facilitation
  • Presentations & Tours
  • Groundbreakings & Dedications
  • Videos, Fact Sheets, & Newsletters

 

LEARN MORE

Related Media

Contact

//---------------------------------------------------------- //------ JAVASCRIPT HOOK FUNCTIONS FOR GRAVITY FORMS ------- //---------------------------------------------------------- if ( ! gform ) { document.addEventListener( 'gform_main_scripts_loaded', function() { gform.scriptsLoaded = true; } ); document.addEventListener( 'gform/theme/scripts_loaded', function() { gform.themeScriptsLoaded = true; } ); window.addEventListener( 'DOMContentLoaded', function() { gform.domLoaded = true; } ); var gform = { domLoaded: false, scriptsLoaded: false, themeScriptsLoaded: false, isFormEditor: () => typeof InitializeEditor === 'function', /** * @deprecated 2.9 the use of initializeOnLoaded in the form editor context is deprecated. * @remove-in 4.0 this function will not check for gform.isFormEditor(). */ callIfLoaded: function ( fn ) { if ( gform.domLoaded && gform.scriptsLoaded && ( gform.themeScriptsLoaded || gform.isFormEditor() ) ) { if ( gform.isFormEditor() ) { console.warn( 'The use of gform.initializeOnLoaded() is deprecated in the form editor context and will be removed in Gravity Forms 3.1.' ); } fn(); return true; } return false; }, /** * Call a function when all scripts are loaded * * @param function fn the callback function to call when all scripts are loaded * * @returns void */ initializeOnLoaded: function( fn ) { if ( ! gform.callIfLoaded( fn ) ) { document.addEventListener( 'gform_main_scripts_loaded', () => { gform.scriptsLoaded = true; gform.callIfLoaded( fn ); } ); document.addEventListener( 'gform/theme/scripts_loaded', () => { gform.themeScriptsLoaded = true; gform.callIfLoaded( fn ); } ); window.addEventListener( 'DOMContentLoaded', () => { gform.domLoaded = true; gform.callIfLoaded( fn ); } ); } }, hooks: { action: {}, filter: {} }, addAction: function( action, callable, priority, tag ) { gform.addHook( 'action', action, callable, priority, tag ); }, addFilter: function( action, callable, priority, tag ) { gform.addHook( 'filter', action, callable, priority, tag ); }, doAction: function( action ) { gform.doHook( 'action', action, arguments ); }, applyFilters: function( action ) { return gform.doHook( 'filter', action, arguments ); }, removeAction: function( action, tag ) { gform.removeHook( 'action', action, tag ); }, removeFilter: function( action, priority, tag ) { gform.removeHook( 'filter', action, priority, tag ); }, addHook: function( hookType, action, callable, priority, tag ) { if ( undefined == gform.hooks[hookType][action] ) { gform.hooks[hookType][action] = []; } var hooks = gform.hooks[hookType][action]; if ( undefined == tag ) { tag = action + '_' + hooks.length; } if( priority == undefined ){ priority = 10; } gform.hooks[hookType][action].push( { tag:tag, callable:callable, priority:priority } ); }, doHook: function( hookType, action, args ) { // splice args from object into array and remove first index which is the hook name args = Array.prototype.slice.call(args, 1); if ( undefined != gform.hooks[hookType][action] ) { var hooks = gform.hooks[hookType][action], hook; //sort by priority hooks.sort(function(a,b){return a["priority"]-b["priority"]}); hooks.forEach( function( hookItem ) { hook = hookItem.callable; if(typeof hook != 'function') hook = window[hook]; if ( 'action' == hookType ) { hook.apply(null, args); } else { args[0] = hook.apply(null, args); } } ); } if ( 'filter'==hookType ) { return args[0]; } }, removeHook: function( hookType, action, priority, tag ) { if ( undefined != gform.hooks[hookType][action] ) { var hooks = gform.hooks[hookType][action]; hooks = hooks.filter( function(hook, index, arr) { var removeHook = (undefined==tag||tag==hook.tag) && (undefined==priority||priority==hook.priority); return !removeHook; } ); gform.hooks[hookType][action] = hooks; } } }; } gform.initializeOnLoaded( function() {gformInitSpinner( 73, 'https://www.nv5.com/wp-content/plugins/gravityforms/images/spinner.svg', true );jQuery('#gform_ajax_frame_73').on('load',function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') >= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_73');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_73').length > 0;var is_redirect = contents.indexOf('gformRedirect(){') >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;var mt = parseInt(jQuery('html').css('margin-top'), 10) + parseInt(jQuery('body').css('margin-top'), 10) + 100;if(is_form){form_content.find('form').css('opacity', 0);jQuery('#gform_wrapper_73').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_73').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_73').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_73').offset().top - mt); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_73').val();gformInitSpinner( 73, 'https://www.nv5.com/wp-content/plugins/gravityforms/images/spinner.svg', true );jQuery(document).trigger('gform_page_loaded', [73, current_page]);window['gf_submitting_73'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}jQuery('#gform_wrapper_73').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_73').offset().top - mt);jQuery(document).trigger('gform_confirmation_loaded', [73]);window['gf_submitting_73'] = false;wp.a11y.speak(jQuery('#gform_confirmation_message_73').text());}else{jQuery('#gform_73').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger("gform_pre_post_render", [{ formId: "73", currentPage: "current_page", abort: function() { this.preventDefault(); } }]); if (event && event.defaultPrevented) { return; } const gformWrapperDiv = document.getElementById( "gform_wrapper_73" ); if ( gformWrapperDiv ) { const visibilitySpan = document.createElement( "span" ); visibilitySpan.id = "gform_visibility_test_73"; gformWrapperDiv.insertAdjacentElement( "afterend", visibilitySpan ); } const visibilityTestDiv = document.getElementById( "gform_visibility_test_73" ); let postRenderFired = false; function triggerPostRender() { if ( postRenderFired ) { return; } postRenderFired = true; gform.core.triggerPostRenderEvents( 73, current_page ); if ( visibilityTestDiv ) { visibilityTestDiv.parentNode.removeChild( visibilityTestDiv ); } } function debounce( func, wait, immediate ) { var timeout; return function() { var context = this, args = arguments; var later = function() { timeout = null; if ( !immediate ) func.apply( context, args ); }; var callNow = immediate && !timeout; clearTimeout( timeout ); timeout = setTimeout( later, wait ); if ( callNow ) func.apply( context, args ); }; } const debouncedTriggerPostRender = debounce( function() { triggerPostRender(); }, 200 ); if ( visibilityTestDiv && visibilityTestDiv.offsetParent === null ) { const observer = new MutationObserver( ( mutations ) => { mutations.forEach( ( mutation ) => { if ( mutation.type === 'attributes' && visibilityTestDiv.offsetParent !== null ) { debouncedTriggerPostRender(); observer.disconnect(); } }); }); observer.observe( document.body, { attributes: true, childList: false, subtree: true, attributeFilter: [ 'style', 'class' ], }); } else { triggerPostRender(); } } );} );