# @_obj isn't working anymore
module Merb::Helpers::Form::Builder
  class Base
    def current_obj
      @obj
    end
  end
end


module SexyForms
  def field(control, attribute, options = {})
    field_class = options.delete(:field_class)
    note        = options.delete(:note)
    required    = options.delete(:required)
    errors_for  = options.delete(:errors_for) || attribute
    options[:label] = humanize(attribute) if options[:label].blank?
    
    errors = errors_on_attribute(errors_for)
    
    field_classes = ["field"]
    field_classes << "error" if errors.any?
    field_classes << options[:field_class] if options[:field_class]
    field_classes << control.to_s
    field_classes << "required" if required
    
    
    begin
      content = send("#{control}_field", attribute, options)
    rescue
      content = send(control, attribute, options)
    end
    content += %(<p class="note">#{note}</p>) if note
    content += %(<p class="error">#{errors}</p>) if errors.any?
    
    tag :div, content, :class => field_classes.join(' ')
  end

  def humanize(sym)
    sym.to_s.gsub(/_id$/, "").gsub(/_/, " ").gsub( /\S+/ ){|s| s.capitalize}
  end
  
  def errors_on_attribute(attribute)
    [current_form_context.current_obj.errors.on(attribute)].flatten.join(' and ') rescue []
  end
  
  # Pass more_html for cancel link (or whatever)
  def form_submit(string, options = {})
    %(<div class="field controls">)+
      (submit_button string, :class => "positive") +
      (options[:cancel] ? link_to("Cancel", options[:cancel], :class => "cancel") : '')+
    %(</div>)
  end
end

