    # File lib/ramaze/helper/form.rb, line 55
          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