# File lib/ramaze/helper/form.rb, line 49
      def form_select(label, name, values, hash = {})
        name = name.to_sym
        id = "form-#{name}"
        multiple, size = hash.values_at(:multiple, :size)

        s_args = {:name => name, :id => id}.merge(form_tabindex)
        s_args[:multiple] = :multiple if multiple
        s_args[:size] = (size || multiple || 1).to_i

        has_selected, selected = hash.key?(:selected), hash[:selected]
        error = form_errors[name.to_s]

        g = Ramaze::Gestalt.new
        g.tr do
          g.td do
            g.label(:for => id){ "#{label}:" }
            g.span(:class => 'error'){ error } if error
          end
          g.td do
            g.select(s_args) do
              values.each do |key, value|
                value ||= key
                o_args = {:value => value}
                o_args[:selected] = :selected if has_selected and value == selected
                g.option(o_args){ key }
              end
            end
          end
        end

        g.to_s
      end