def render_field_template(name, field, options)

      tippable = !options[:tip].nil?

      # used by country, state and other selects to specify a different id
      field_id = options[:field_id]
    
      local_options = {
        :pre_html         => options.delete(:pre_html),
        :after_label_html => options.delete(:after_label_html),
        :extra_html       => options.delete(:extra_html),
        :tip              => options.delete(:tip),
        :tip_title        => options.delete(:tip_title),
        :tip_key          => options.delete(:tip_key),
        :tip_position     => options.delete(:tip_position) || 'right',
        :wrapper_id       => options.delete(:wrapper_id),
        :wrapper_class    => options.delete(:wrapper_class),
        :hide_required    => options.delete(:hide_required),
        :hide_control_error => options.delete(:hide_control_error),
        :css_class        => options.delete(:css_class)
      }
      # TODO css_class does not appear to be used. Can just use the standard :class in html options to set the class
    
      is_checkbox = false
      is_checkbox = true if %w(check_box).include?(name)
    
      required_text_mark = options.delete(:required_text_mark)
    
      type = options.delete(:type)
      type ||= :tippable if tippable

      label_class = ''
      label_class << "checkbox-label" if is_checkbox
      label_class << " #{options.delete(:label_class)}" if !options[:label_class].nil?
      if label_class.blank?
        label_options = {}
      else
        label_options = { :class => label_class }
      end
  
      if local_options[:hide_required]
        required = false
        label_text = options[:label]
      else
        required = required_field?(field)
        label_text = (options[:label] || field.to_s.camelize)
        label_text = label_text + required_mark(field, required_text_mark) if required
      end
      label_name = options.delete(:label)

      options[:class] ||= ''
      options[:class] << add_space_to_css(options) + 'tip-field' if tippable
      options[:class] << add_space_to_css(options) + "required-value" if required

      if type == :choose_menu
        options[:label_class] = 'desc'
      end

      if options.delete(:hide_label)
        label_element = ''
      else
        label_element = label(field, label_text.html_safe, label_options)
      end
    
      locals = {
        :field_element  => yield,
        :field_name     => field_id || field_name(field),
        :label_name     => options.delete(:required_label) || label_name || '',
        :label_element  => label_element,
        :is_checkbox    => is_checkbox,
        :required       => required
      }.merge(local_options)

      if object.nil?
        locals[:value] = ''
        locals[:id] = ''
      else
        locals[:value] = object.send(field)
        locals[:id] = object.id
      end

      if has_errors_on?(field)
        locals.merge!(:error => error_message(field, options))
      end

      @template.capture do

        if type == :tippable              
          @template.render :partial => 'forms/field_with_tips', :locals => locals
        elsif type == :choose_menu
          @template.render :partial => 'forms/menu_field', :locals => locals
        elsif type == :color_picker
          @template.render :partial => 'forms/color_picker_field', :locals => locals
        elsif type == :default  
          @template.render :partial => 'forms/default', :locals => locals
        else
          @template.render :partial => 'forms/field', :locals => locals
        end
      end
    end
def render_field_template(name, field, options)

      tippable = !options[:tip].nil?

      # used by country, state and other selects to specify a different id
      field_id = options[:field_id]
    
      local_options = {
        :pre_html         => options.delete(:pre_html),
        :after_label_html => options.delete(:after_label_html),
        :extra_html       => options.delete(:extra_html),
        :tip              => options.delete(:tip),
        :tip_title        => options.delete(:tip_title),
        :tip_key          => options.delete(:tip_key),
        :tip_position     => options.delete(:tip_position) || 'right',
        :wrapper_id       => options.delete(:wrapper_id),
        :wrapper_class    => options.delete(:wrapper_class),
        :hide_required    => options.delete(:hide_required),
        :hide_control_error => options.delete(:hide_control_error),
        :css_class        => options.delete(:css_class)
      }
      # TODO css_class does not appear to be used. Can just use the standard :class in html options to set the class
    
      is_checkbox = false
      is_checkbox = true if %w(check_box).include?(name)
    
      required_text_mark = options.delete(:required_text_mark)
    
      type = options.delete(:type)
      type ||= :tippable if tippable

      label_class = ''
      label_class << "checkbox-label" if is_checkbox
      label_class << " #{options.delete(:label_class)}" if !options[:label_class].nil?
      if label_class.blank?
        label_options = {}
      else
        label_options = { :class => label_class }
      end
  
      if local_options[:hide_required]
        required = false
        label_text = options[:label]
      else
        required = required_field?(field)
        label_text = (options[:label] || field.to_s.camelize)
        label_text = label_text + required_mark(field, required_text_mark) if required
      end
      label_name = options.delete(:label)

      options[:class] ||= ''
      options[:class] << add_space_to_css(options) + 'tip-field' if tippable
      options[:class] << add_space_to_css(options) + "required-value" if required

      if type == :choose_menu
        options[:label_class] = 'desc'
      end

      if options.delete(:hide_label)
        label_element = ''
      else
        label_element = label(field, label_text.html_safe, label_options)
      end
    
      locals = {
        :field_element  => yield,
        :field_name     => field_id || field_name(field),
        :label_name     => options.delete(:required_label) || label_name || '',
        :label_element  => label_element,
        :is_checkbox    => is_checkbox,
        :required       => required
      }.merge(local_options)

      if object.nil?
        locals[:value] = ''
        locals[:id] = ''
      else
        locals[:value] = object.send(field)
        locals[:id] = object.id
      end

      if has_errors_on?(field)
        locals.merge!(:error => error_message(field, options))
      end

      @template.capture do

        if type == :tippable              
          @template.render :partial => 'forms/field_with_tips', :locals => locals
        elsif type == :choose_menu
          @template.render :partial => 'forms/menu_field', :locals => locals
        elsif type == :color_picker
          @template.render :partial => 'forms/color_picker_field', :locals => locals
        elsif type == :default  
          @template.render :partial => 'forms/default', :locals => locals
        else
          @template.render :partial => 'forms/field', :locals => locals
        end
      end
    end
Options to pass to render_field_template through the 'options' argument.
 pre_html               html content to insert at the beginning of the container
 extra_html             html content to insert at the end of the container
 tip                    Text for a popup text tip.
 tip_title              Title for popup text tip
 tip_key                The id of the div that contains the tip text.
 tip_position           Position for tip text.  Valid values are 'top', 'right', 'bottom', 'left'.  Default is 'right'
 wrapper_id             Alternate id for the container.  Each field is typically wrapper in a div.  This is the id of that div.
 wrapper_class          Css class for the container. All containers have the class form-row. This value will be in addition to that class.
 label_class            Css class for the label
 hide_label             Prevents a label from being output
 hide_required          Do not show 'required' label even though field is required
 hide_control_error     Hide errors that show up next to the field
 required_text_mark     By default '(required)' is used to show required fields. Override this by setting required_text_mark to something else - ie '*'
                        Alternatively override 'muck.engine.required_text_mark' in your app's en.yml or the appropriate localization file. You can also
                        specify a value in global_config.yml with required_text_mark: *