module ApplicationHelper
  def body_attrs
    attrs = {}
    class_name = [location_name,I18n.locale,ENV['RAILS_ENV']]
    class_name << 'signup_process' if signup_location?
    class_name << 'admin'          if admin_location?
    class_name << 'static'         if static_pages?
    class_name << (logged_in? ? 'logged_in' : 'logged_out')
    attrs[:location]   = location_name
    attrs[:controller] = controller.controller_name
    attrs[:action]     = action_name
    attrs[:class]      = class_name.join ' '
    attrs[:query]      = controller.controller_name if admin_location?
    attrs
  end

  def content_attrs
    class_name = if content_for?(:extra) && content_for?(:column)
      'content_wrap_extra'
    elsif content_for? :extra
      'content_single_extra'
    elsif content_for? :column
      'content_wrap'
    else
      'content_single'
    end
    attrs = {}
    attrs[:class] = class_name
    attrs
  end

  def asset_dir
    admin_location? ? :admin : :application
  end

  def admin_location?
    location_match? 'admin'
  end

  def signup_location?
    location_name? 'new_users'
  end

  def location_name?(*names)
    names.any?{ |name| name == location_name }
  end

  def location_name
    "#{action_name}_#{controller.controller_name}"
  end

  def location_match?(*names)
    names.any?{ |name| controller.controller_path.match(/#{name}/) }
  end

  def static_pages?
    pages = %w{about_pages}
    location_name? *pages
  end

  def ascii
    partial 'layouts/ascii'
  end

  def head
    partial '%head', 'layouts/head'
  end

  def content
    partial 'layouts/content'
  end

  def extra
    return unless content_for? :extra
    partial ['.extra_wrap','.extra'], 'layouts/extra'
  end

  def column
    return unless content_for? :column
    partial '.column.expand', 'layouts/column'
  end

  def header
    partial ['.header_wrap','.header'], 'layouts/header'
  end

  def footer
    partial ['.footer_wrap','.footer'], 'layouts/footer'
  end

  def google_analytics
    javascript_include_tag 'lib/analytics'
  end
end