# 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.size == 1
        f = checked.first
        successful_controls << f
      elsif checked.size > 1
        raise Mechanize::Error,
              "multiple radiobuttons are checked in the same group!"
      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