# File lib/mechanize/form.rb, line 206
  def build_query(buttons = [])
    query = []
    @mech.log.info("form encoding: #{encoding}") if @mech && @mech.log

    successful_controls = []

    (fields + checkboxes).sort.each do |f|
      case f
      when Mechanize::Form::CheckBox
        if f.checked
          successful_controls << f
        end
      when Mechanize::Form::Field
        successful_controls << f
      end
    end

    radio_groups = {}
    radiobuttons.each do |f|
      fname = from_native_charset(f.name)
      radio_groups[fname] ||= []
      radio_groups[fname] << f
    end

    # take one radio button from each group
    radio_groups.each_value do |g|
      checked = g.select {|f| f.checked}

      if checked.uniq.size > 1 then
        values = checked.map { |button| button.value }.join(', ').inspect
        name = checked.first.name.inspect
        raise Mechanize::Error,
              "radiobuttons #{values} are checked in the #{name} group, " \
              "only one is allowed"
      else
        successful_controls << checked.first unless checked.empty?
      end
    end

    @clicked_buttons.each { |b|
      successful_controls << b
    }

    successful_controls.sort.each do |ctrl| # DOM order
      qval = proc_query(ctrl)
      query.push(*qval)
    end

    query
  end