[%# This Source Code Form is subject to the terms of the Mozilla Public
  # License, v. 2.0. If a copy of the MPL was not distributed with this
  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
  #
  # This Source Code Form is "Incompatible With Secondary Licenses", as
  # defined by the Mozilla Public License, v. 2.0.
  #%]

[% PROCESS global/header.html.tmpl 
  title = "Simple Search"
  style_urls = ['skins/standard/buglist.css']
  doc_section = "using/finding.html"
%]

[% WRAPPER search/tabs.html.tmpl %]

<p>
Find a specific [% terms.bug %] by entering words that describe it.  
Bugzilla will search [% terms.bug %] descriptions and comments
for those words and return a list of matching [% terms.bugs %] sorted
by relevance.
</p>

<p>
For example, if the [% terms.bug %] you are looking for is a browser crash when you go to a secure web site with an embedded Flash animation, you might search
for "crash secure SSL flash".
</p>

<form name="queryform" method="get" action="buglist.cgi">
<input type="hidden" name="query_format" value="specific">
<input type="hidden" name="order" value="Importance">
<input type="hidden" id="no_redirect" name="no_redirect" value="0">
<script type="text/javascript">
  if (history && history.replaceState) {
    var no_redirect = document.getElementById("no_redirect");
    no_redirect.value = 1;
  }
</script>

<table class="bz_simple_search_form">
  <tr>
    <th>
      <label for="bug_status">[% field_descs.bug_status FILTER html %]:</label>
    </th>
    <td>
      <select name="bug_status" id="bug_status">
        [% statuses = [ { name = 'open', label = "Open" },
                        { name = 'closed', label = "Closed" },
                        { name = 'all', label = "All" } ] %]
        [% FOREACH status = statuses %]
            <option value="__[% status.name %]__" 
                  [% " selected" IF default.bug_status.0 == "__${status.name}__" %]>
            [% status.label FILTER html %]
          </option>
        [% END %]
      </select>
    </td>
  </tr>
  <tr>
    <th>
      <label for="product">[% field_descs.product FILTER html %]:</label>
    </th>
    <td>
      [% INCLUDE "global/product-select.html.tmpl"
         id   => "product"
         name => "product"
         add  => "All"
      %]
    </td>
  </tr>
  <tr>
    <th>
      <label for="content">Words:</label>
    </th>
    <td>
      <input name="content" size="40" id="content" autofocus
             value="[% default.content.0 FILTER html %]"
             [%- " required" UNLESS Param('search_allow_no_criteria') %]>
    </td>
  </tr>
  <tr>
    <td></td>
    <td><input type="submit" id="search" value="Search"></td>
  </tr>
</table>
</form>

[% END %]

[% PROCESS global/footer.html.tmpl %]
