
                <div class='gf_browser_unknown gform_wrapper' id='gform_wrapper_1' style='display:none'><a id='gf_1' class='gform_anchor' ></a><form method='post' enctype='multipart/form-data' target='gform_ajax_frame_1' id='gform_1'  action='/contact-us/#gf_1'>
                        <div class='gform_body'><ul id='gform_fields_1' class='gform_fields top_label form_sublabel_below description_below'><li id='field_1_1'  class='gfield field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label gfield_label_before_complex' for='input_1_1_3' >Name</label><div class='ginput_complex ginput_container no_prefix has_first_name no_middle_name has_last_name no_suffix gf_name_has_2 ginput_container_name gfield_trigger_change' id='input_1_1'>
                            
                            <span id='input_1_1_3_container' class='name_first' >
                                                    <input type='text' name='input_1.3' id='input_1_1_3' value='' aria-label='First name'    aria-invalid="false" />
                                                    <label for='input_1_1_3' >First</label>
                                                </span>
                            
                            <span id='input_1_1_6_container' class='name_last' >
                                                    <input type='text' name='input_1.6' id='input_1_1_6' value='' aria-label='Last name'    aria-invalid="false" />
                                                    <label for='input_1_1_6' >Last</label>
                                                </span>
                            
                        </div></li><li id='field_1_4'  class='gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label'  >I prefer to be contacted by:<span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_checkbox'><ul class='gfield_checkbox' id='input_1_4'><li class='gchoice_1_4_1'>
								<input name='input_4.1' type='checkbox' onclick='gf_apply_rules(1,[0,3]);' onkeypress='gf_apply_rules(1,[0,3]);' value='Phone'  id='choice_1_4_1'   />
								<label for='choice_1_4_1' id='label_1_4_1'>Phone</label>
							</li><li class='gchoice_1_4_2'>
								<input name='input_4.2' type='checkbox' onclick='gf_apply_rules(1,[0,3]);' onkeypress='gf_apply_rules(1,[0,3]);' value='Email'  id='choice_1_4_2'   />
								<label for='choice_1_4_2' id='label_1_4_2'>Email</label>
							</li></ul></div></li><li id='field_1_2'  class='gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_1_2' >Email<span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_email'>
                            <input name='input_2' id='input_1_2' type='text' value='' class='medium'  onchange='gf_apply_rules(1,[0]);' onkeyup='clearTimeout(__gf_timeout_handle); __gf_timeout_handle = setTimeout("gf_apply_rules(1,[0])", 300);'   aria-required="true" aria-invalid="false"/>
                        </div></li><li id='field_1_3'  class='gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_1_3' >Phone<span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_phone'><input name='input_3' id='input_1_3' type='text' value='' class='medium'  onchange='gf_apply_rules(1,[0]);' onkeyup='clearTimeout(__gf_timeout_handle); __gf_timeout_handle = setTimeout("gf_apply_rules(1,[0])", 300);'  aria-required="true" aria-invalid="false" /></div></li><li id='field_1_5'  class='gfield field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_1_5' >Message:</label><div class='ginput_container ginput_container_textarea'><textarea name='input_5' id='input_1_5' class='textarea medium'  onchange='gf_apply_rules(1,[0]);' onkeyup='clearTimeout(__gf_timeout_handle); __gf_timeout_handle = setTimeout("gf_apply_rules(1,[0])", 300);'   aria-invalid="false"   rows='10' cols='50'></textarea></div></li><li id='field_1_6'  class='gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label'  >Attorney Advertising. This web site is designed for general information only. The information presented at this site should not be construed to be formal legal advice nor the formation of a lawyer/client relationship.<span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_checkbox'><ul class='gfield_checkbox' id='input_1_6'><li class='gchoice_1_6_1'>
								<input name='input_6.1' type='checkbox' onclick='gf_apply_rules(1,[0]);' onkeypress='gf_apply_rules(1,[0]);' value='I agree'  id='choice_1_6_1'   />
								<label for='choice_1_6_1' id='label_1_6_1'>I agree</label>
							</li></ul></div></li>
                            </ul></div>
        <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_1' class='gform_button button' value='Submit'  onclick='if(window["gf_submitting_1"]){return false;}  window["gf_submitting_1"]=true;  ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_1"]){return false;} window["gf_submitting_1"]=true;  jQuery("#gform_1").trigger("submit",[true]); }' /> <input type='hidden' name='gform_ajax' value='form_id=1&amp;title=&amp;description=&amp;tabindex=0' />
            <input type='hidden' class='gform_hidden' name='is_submit_1' value='1' />
            <input type='hidden' class='gform_hidden' name='gform_submit' value='1' />
            
            <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' />
            <input type='hidden' class='gform_hidden' name='state_1' value='WyJbXSIsIjY4MTdlNDQyZTc5Zjg4YWM0ZWM3ZDFjNzI4ZjdlYWVmIl0=' />
            <input type='hidden' class='gform_hidden' name='gform_target_page_number_1' id='gform_target_page_number_1' value='0' />
            <input type='hidden' class='gform_hidden' name='gform_source_page_number_1' id='gform_source_page_number_1' value='1' />
            <input type='hidden' name='gform_field_values' value='' />
            
        </div>
                        </form>
                        </div>
                <iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_1' id='gform_ajax_frame_1'>This iframe contains the logic required to handle Ajax powered Gravity Forms.</iframe>
                <script type='text/javascript'>jQuery(document).ready(function($){gformInitSpinner( 1, 'https://reecerlaw.com/wp-content/plugins/gravityforms/images/spinner.gif' );jQuery('#gform_ajax_frame_1').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_1');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_1').length > 0;var is_redirect = contents.indexOf('gformRedirect(){') >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;if(is_form){jQuery('#gform_wrapper_1').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_1').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_1').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_1').offset().top); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_1').val();gformInitSpinner( 1, 'https://reecerlaw.com/wp-content/plugins/gravityforms/images/spinner.gif' );jQuery(document).trigger('gform_page_loaded', [1, current_page]);window['gf_submitting_1'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_1').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_1').offset().top);jQuery(document).trigger('gform_confirmation_loaded', [1]);window['gf_submitting_1'] = false;}, 50);}else{jQuery('#gform_1').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger('gform_post_render', [1, current_page]);} );} );</script><script type='text/javascript'> if(typeof gf_global == 'undefined') var gf_global = {"gf_currency_config":{"name":"U.S. Dollar","symbol_left":"$","symbol_right":"","symbol_padding":"","thousand_separator":",","decimal_separator":".","decimals":2},"base_url":"https:\/\/reecerlaw.com\/wp-content\/plugins\/gravityforms","number_formats":[],"spinnerUrl":"https:\/\/reecerlaw.com\/wp-content\/plugins\/gravityforms\/images\/spinner.gif"};jQuery(document).bind('gform_post_render', function(event, formId, currentPage){if(formId == 1) {gf_global["number_formats"][1] = {"1":{"price":false,"value":false},"4":{"price":false,"value":false},"2":{"price":false,"value":false},"3":{"price":false,"value":false},"5":{"price":false,"value":false},"6":{"price":false,"value":false}};if(window['jQuery']){if(!window['gf_form_conditional_logic'])window['gf_form_conditional_logic'] = new Array();window['gf_form_conditional_logic'][1] = { logic: { 3: {"field":{"actionType":"show","logicType":"all","rules":[{"fieldId":"4","operator":"is","value":"Phone"}]},"nextButton":null,"section":null},0: {"field":{"actionType":"show","logicType":"all","rules":[{"fieldId":"6","operator":"is","value":"I agree"}]},"section":null} }, dependents: { 3: [3],0: [0] }, animation: 0, defaults: {"1":{"1.2":"","1.3":"","1.4":"","1.6":"","1.8":""}}, fields: {"1":[0],"4":[0,3],"2":[0],"3":[0],"5":[0],"6":[0]} }; if(!window['gf_number_format'])window['gf_number_format'] = 'decimal_dot';jQuery(document).ready(function(){gf_apply_rules(1, [3,0], true);jQuery('#gform_wrapper_1').show();jQuery(document).trigger('gform_post_conditional_logic', [1, null, true]);jQuery('#gform_1').submit(function(event, isButtonPress){    var visibleButton = jQuery(".gform_next_button:visible, .gform_button:visible, .gform_image_button:visible");    return visibleButton.length > 0 || isButtonPress == true;});} );} jQuery('#input_1_3').mask('(999) 999-9999').bind('keypress', function(e){if(e.which == 13){jQuery(this).blur();} } );} } );jQuery(document).bind('gform_post_conditional_logic', function(event, formId, fields, isInit){} );</script><script type='text/javascript'> jQuery(document).ready(function(){jQuery(document).trigger('gform_post_render', [1, 1]) } ); </script>