<%
  params = request.params.except(:action, :controller, :model_name)
  query = params[:query]
  filter = params[:filter]
  sort = params[:sort]
  sort_reverse = params[:sort_reverse]
  filters_exist = !@properties.select{|property| property[:type] == :boolean}.empty?
%>
        <div id="content-main">
          <ul class="object-tools">
            <li>
              <%= link_to("Add #{@abstract_model.pretty_name.downcase}", url(:merb_admin_new, :model_name => @abstract_model.singular_name), :class => "addlink") %>
            </li>
          </ul>
          <div class="<%= filters_exist ? "module filtered" : "module" %>" id="changelist">
            <div id="toolbar">
              <form id="changelist-search" action="" method="get">
              <div>
                <label for="searchbar"><img src="<%= image_path("icon_searchbox.png") %>" alt="Search" /></label>
                <input type="text" size="40" name="query" value="<%= query %>" id="searchbar" />
                <input type="submit" value="Search" />
                <% if query || filter %>
                  <span class="small quiet"><%= @record_count %> <%= @record_count == 1 ? "result" : "results" %> (<%= link_to("#{@abstract_model.count} total", "?") %>)</span>
                <% end %>
                <% if filter %>
                <% filter.each do |name, value| %>
                <input type="hidden" name="filter[<%= name %>]" value="<%= value %>"/>
                <% end %>
                <% end %>
              </div>
              </form>
            </div>
            <script type="text/javascript">document.getElementById("searchbar").focus();</script>
            <% if filters_exist %>
            <div id="changelist-filter">
              <h2>Filter</h2>
              <% @properties.each do |property| %>
              <% property_type = property[:type] %>
              <% property_name = property[:name] %>
              <% property_pretty_name = property[:pretty_name] %>
              <% if property_type == :boolean %>
              <h3>By <%= property_pretty_name %></h3>
              <ul>
                <li class="<%= filter.nil? || filter[property_name].blank? ? "selected" : nil %>">
                  <%= link_to("All", "?" + Merb::Parse.params_to_query_string(params.merge(:filter => (filter || {}).reject{|key, value| key.to_sym == property_name}))) %>
                </li>
                <li class="<%= filter && filter[property_name] == "true" ? "selected" : nil %>">
                  <%= link_to("Yes", "?" + Merb::Parse.params_to_query_string(params.merge(:filter => (filter || {}).merge({property_name => "true"})))) %>
                </li>
                <li class="<%= filter && filter[property_name] == "false" ? "selected" : nil %>">
                  <%= link_to("No", "?" + Merb::Parse.params_to_query_string(params.merge(:filter => (filter || {}).merge({property_name => "false"})))) %>
                </li>
              </ul>
              <% end %>
              <% end %>
            </div>
            <% end %>
            <table cellspacing="0">
              <thead>
                <tr>
                  <% @properties.each do |property| %>
                  <% property_name = property[:name] %>
                  <% property_pretty_name = property[:pretty_name] %>
                  <th class="<%= sort == property_name.to_s ? sort_reverse ? "sorted descending" : "sorted ascending" : nil %>">
                    <%= link_to(property_pretty_name, "?" + Merb::Parse.params_to_query_string(params.merge(:sort => property_name).reject{|key, value| key.to_sym == :sort_reverse}.merge(sort == property_name.to_s && sort_reverse != "true" ? {:sort_reverse => "true"} : {}))) %>
                  </th>
                  <% end %>
                </tr>
              </thead>
              <tbody>
                <% @objects.each_with_index do |object, index| %>
                <tr class="row<%= index % 2 == 0 ? "1" : "2" %>">
                  <% @properties.each do |property| %>
                  <td>
                    <%= link_to(object_property(object, property), url(:merb_admin_edit, :model_name => @abstract_model.singular_name, :id => object.id)) %>
                  </td>
                  <% end %>
                </tr>
                <% end %>
              </tbody>
            </table>
            <p class="paginator">
              <% if @page_count.to_i > 1 %>
              <%= paginate(@current_page, @page_count, :url => "?" + Merb::Parse.params_to_query_string(params)) %>
              <% end %>
              <%= @record_count %> <%= @record_count == 1 ? @abstract_model.pretty_name.downcase : @abstract_model.pretty_name.downcase.pluralize %>
              <% if @page_count.to_i == 2 %>
              <%= link_to("Show all", "?" + Merb::Parse.params_to_query_string(params.merge(:all => true)), :class => "showall") %>
              <% end %>
            </p>
          </div>
        </div>
        <br class="clear" />