<%--
  The contents of this file are subject to the Mozilla Public License Version 1.1
  (the "License"); you may not use this file except in compliance with the License.
  You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.

  Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
  WARRANTY OF ANY KIND, either express or implied. See the License for the specific
  language governing rights and limitations under the License.
  
  The Original Code is the Venice Web Communities System.
  
  The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
  for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
  Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.

  Contributor(s): 
--%>
<%@ page import = "java.util.Iterator" %>
<%@ page import = "java.util.List" %>
<%@ page import = "com.silverwrist.util.*" %>
<%@ page import = "com.silverwrist.venice.core.*" %>
<%@ page import = "com.silverwrist.venice.ui.view.FindView" %>
<%@ taglib uri="/tlds/util" prefix="util" %>
<%@ taglib uri="/tlds/global" prefix="global" %>
<%
  FindView data = FindView.get(request);
  CategoryDescriptor cat = null;
%>
<util:comment>Find page</util:comment>
<util:menuheader caption="Find:">
  <% if (data.testDisplayMode(FindView.FD_COMMUNITIES)) { %>
    <util:menuheaderitem selected="true">
      <util:href type="servlet">find.js.vs?disp=<%= FindView.FD_COMMUNITIES %></util:href>
      <util:text>Communities</util:text>
    </util:menuheaderitem>
  <% } else { %>
    <util:menuheaderitem>
      <util:href type="servlet">find.js.vs?disp=<%= FindView.FD_COMMUNITIES %></util:href>
      <util:text>Communities</util:text>
    </util:menuheaderitem>
  <% } // end if %>
  <% if (data.testDisplayMode(FindView.FD_USERS)) { %>
    <util:menuheaderitem selected="true">
      <util:href type="servlet">find.js.vs?disp=<%= FindView.FD_USERS %></util:href>
      <util:text>Users</util:text>
    </util:menuheaderitem>
  <% } else { %>
    <util:menuheaderitem>
      <util:href type="servlet">find.js.vs?disp=<%= FindView.FD_USERS %></util:href>
      <util:text>Users</util:text>
    </util:menuheaderitem>
  <% } // end if %>
  <global:categories_enabled>
    <% if (data.testDisplayMode(FindView.FD_CATEGORIES)) { %>
      <util:menuheaderitem selected="true">
        <util:href type="servlet">find.js.vs?disp=<%= FindView.FD_CATEGORIES %></util:href>
        <util:text>Categories</util:text>
      </util:menuheaderitem>
    <% } else { %>
      <util:menuheaderitem>
        <util:href type="servlet">find.js.vs?disp=<%= FindView.FD_CATEGORIES %></util:href>
        <util:text>Categories</util:text>
      </util:menuheaderitem>
    <% } // end if %>
  </global:categories_enabled>
  <% if (data.testDisplayMode(FindView.FD_POSTS)) { %>
    <util:menuheaderitem selected="true">
      <util:href type="servlet">find.js.vs?disp=<%= FindView.FD_POSTS %></util:href>
      <util:text>Posts</util:text>
    </util:menuheaderitem>
  <% } else { %>
    <util:menuheaderitem>
      <util:href type="servlet">find.js.vs?disp=<%= FindView.FD_POSTS %></util:href>
      <util:text>Posts</util:text>
    </util:menuheaderitem>
  <% } // end if %>
</util:menuheader>

<%-- Display the search form --%>
<util:comment>Find form</util:comment>
<util:form action="find.js.vs" type="servlet"><div class="content">
  <input type="hidden" name="disp" value="<%= data.getDisplayMode() %>" />
  <input type="hidden" name="ofs" VALUE="0" />
  <% if (data.testDisplayMode(FindView.FD_POSTS)) { %>
    <util:comment>Find Posts form</util:comment>
    <util:font color="content.fg" size="content-heading"><b>Find Posts:</b></util:font>
    <util:font color="content.fg" size="content">
      Keywords: <span class="cinput"><input type="text" class="cinput" name="term" size="64" maxlength="255"
                                            value="<%= data.getTerm() %>" /></span>
    </util:font><br />
  <% } else { %>
    <% if (data.testDisplayMode(FindView.FD_COMMUNITIES)) { %>
      <util:comment>Find Communities form</util:comment>
      <util:font color="content.fg" size="content-heading"><b>Find Communities:</b></util:font>
      <util:font color="content.fg" size="content">
        Display all communities whose&nbsp;&nbsp;
        <select name="field" size="1">
          <option value="<%= SearchMode.FIELD_COMMUNITY_NAME %>"
            <% if (data.testField(SearchMode.FIELD_COMMUNITY_NAME)) { %>selected="selected"<% } %> >name</option>
          <option value="<%= SearchMode.FIELD_COMMUNITY_SYNOPSIS %>"
            <% if (data.testField(SearchMode.FIELD_COMMUNITY_SYNOPSIS)) { %>selected="selected"<% } %>
            >synopsis</option>
        </select><br />
      </util:font>
    <% } else if (data.testDisplayMode(FindView.FD_USERS)) { %>
      <util:comment>Find Users form</util:comment>
      <util:font color="content.fg" size="content-heading"><b>Find Users:</b></util:font>
      <util:font color="content.fg" size="content">
        Display all users whose&nbsp;&nbsp;
        <select name="field" size="1">
          <option value="<%= SearchMode.FIELD_USER_NAME %>"
            <% if (data.testField(SearchMode.FIELD_USER_NAME)) { %>selected="selected"<% } %> >user name</option>
          <option value="<%= SearchMode.FIELD_USER_DESCRIPTION %>"
            <% if (data.testField(SearchMode.FIELD_USER_DESCRIPTION)) { %>selected="selected"<% } %>
            >description</option>
          <option value="<%= SearchMode.FIELD_USER_GIVEN_NAME %>"
            <% if (data.testField(SearchMode.FIELD_USER_GIVEN_NAME)) { %>selected="selected"<% } %> >first
            name</option>
          <option value="<%= SearchMode.FIELD_USER_FAMILY_NAME %>"
            <% if (data.testField(SearchMode.FIELD_USER_FAMILY_NAME)) { %>selected="selected"<% } %> >last
            name</option>
        </select><br />
      </util:font>
    <% } else if (data.testDisplayMode(FindView.FD_CATEGORIES)) { %>
      <global:categories_enabled>
        <util:comment>Find Categories form</util:comment>
        <util:font color="content.fg" size="content-heading"><b>Find Categories:</b></util:font>
        <util:font color="content.fg" size="content">
          Display all categories whose name&nbsp;&nbsp;
        </util:font>
      </global:categories_enabled>
      <global:categories_disabled>
        <%-- shouldn't get here --%>
        <h1><font color="red">Display parameter invalid!</font></h1>
      </global:categories_disabled>
    <% } else { %>
      <%-- shouldn't get here --%>
      <h1><font color="red">Display parameter invalid!</font></h1>
    <% } // end if %>
    <util:font color="content.fg" size="content">
      <select name="mode" size="1">
        <option value="<%= SearchMode.SEARCH_PREFIX %>"
          <% if (data.testMode(SearchMode.SEARCH_PREFIX)) { %>selected="selected"<% } %> >starts with the
          string</option>
        <option value="<%= SearchMode.SEARCH_SUBSTRING %>"
          <% if (data.testMode(SearchMode.SEARCH_SUBSTRING)) { %>selected="selected"<% } %> >contains the
          string</option>
        <option value="<%= SearchMode.SEARCH_REGEXP %>"
          <% if (data.testMode(SearchMode.SEARCH_REGEXP)) { %>selected="selected"<% } %> >matches the regular
          expression</option>
      </select>
      <% if (data.testDisplayMode(FindView.FD_CATEGORIES)) { %><br /><% } else { %>&nbsp;&nbsp;<% } %>
      <span class="cinput"><input type="text" class="cinput" name="term" size="32" maxlength="255"
                                  value="<%= data.getTerm() %>"></span><br />
    </util:font>
  <% } // end if %>
  <util:button id="search" type="input"/>
</div></util:form>

<%-- Display the current category --%>
<global:categories_enabled>
  <% cat = data.getCategory(); %>
  <% if (cat!=null) { %>
    <util:comment>Display Category Name</util:comment>
    <hr /><util:font color="content.fg" size="subhead">
      <b>Category:
        <% if (cat.getCategoryID()<0) { %>
          Top
        <% } else { %>
          <util:xlink>
            <util:href type="servlet">find.js.vs?disp=<%= FindView.FD_COMMUNITIES %></util:href>
            <util:text>Top</util:text>
          </util:xlink>
          <% for (int i=0; i<cat.getNumLevels(); i++) { %>
            <% if (i<(cat.getNumLevels()-1)) { %>
              :
              <util:xlink>
                <util:href type="servlet">
                  find.js.vs?disp=<%= FindView.FD_COMMUNITIES %>&cat=<%= cat.getIDAtLevel(i) %>
                </util:href>
                <util:text><util:escape><%= cat.getTitleAtLevel(i) %></util:escape></util:text>
              </util:xlink>
            <% } else { %>
              : <util:escape><%= cat.getTitleAtLevel(i) %></util:escape>
            <% } // end if %>
          <% } // end for %>
        <% } // end if (displaying the subcategory tree) %> 
      </b><P>

      <%-- Display the subcategory list --%>
      <% List subcats = data.getSubCategories(); %>
      <% if ((subcats!=null) && (subcats.size()>0)) { %>
        <util:comment>Display Subcategory List</util:comment>
        <b>Subcategories:</b><br />
        <table border="0" cellpadding="0" cellspacing="2">
          <% for (Iterator it = subcats.iterator(); it.hasNext(); ) { %>
            <% CategoryDescriptor c = (CategoryDescriptor)(it.next()); %>
            <tr valign="top">
              <td align="center" width="14"><util:stdbullet/></td>
              <td align="left" class="content"><util:font color="content.fg" size="content">
                <b><util:xlink>
                  <util:href type="servlet">
                    find.js.vs?disp=<%= FindView.FD_COMMUNITIES %>&cat=<%= c.getLinkedCategoryID() %>
                  </util:href>
                  <util:text>
                    <util:escape><%= c.getTitleAtLevel(c.getNumLevels()-1) %></util:escape>
                  </util:text>
                </util:xlink>
                <% if (c.isSymbolicLink()) { %><i>@</i><% } %>
              </util:font></td>
            </tr>
          <% } // end for %>
        </table>
      <% } // end if (displaying subcategory list) %>
    </util:font>
  <% } // end if (category specified) %>
</global:categories_enabled>

<%-- Display the search results --%>
<% List results = data.getResults(); %>
<% if (results!=null) { %>
  <util:comment>Display Search Results</util:comment>
  <%
    // Determine the number of results to display and whether to display a "next" button
    int dcount = results.size();
    boolean go_next = false;
    if (dcount>data.getMaxResults())
    { // there's a "next"
      dcount = data.getMaxResults();
      go_next = true;

    } // end if
  %>
  <hr />
  <table width="100%" border="0" align="center"><tr valign="middle">
    <td width="50%" align="left" class="content"><util:font color="content.fg" size="content">
      <%-- The initial search results --%>
      <b><% if (cat!=null) { %>Communities in Category<% } else { %>Search Results<% } %></b>
      <% if (data.getFindCount()>0) { %>
        (Displaying <%= data.getOffset() + 1 %>-<%= data.getOffset() + dcount %> of
        <%= data.getFindCount() %>)
      <% } else { %>(None)<% } %>
    </util:font></td>

    <td width="50%" align="right" class="content">
      <% if (go_next || (data.getOffset()>0)) { %>
        <%-- The navigational form that allows us to page through the results --%>
        <util:comment>Navigational form</util:comment>
        <util:form action="find.js.vs" type="servlet"><div class="content">
          <input type="hidden" name="disp" value="<%= data.getDisplayMode() %>" />
          <% if (cat!=null) { %><input type="hidden" name="cat" value="<%= cat.getCategoryID() %>" /><% } %>
          <input type="hidden" name="ofs" value="<%= data.getOffset() %>" />
          <input type="hidden" name="field" value="<%= data.getField() %>" />
          <input type="hidden" name="mode" value="<%= data.getMode() %>" />
          <input type="hidden" name="term" value="<%= data.getTerm() %>" />
          <input type="hidden" name="fcount" value="<%= data.getFindCount() %>" />
          <% if (data.getOffset()>0) { %>
            <util:button id="previous" type="input"/>
          <% } else { %>
            <util:button id="_null_"/>
          <% } // end if %>
          &nbsp;&nbsp;
          <% if (go_next) { %>
            <util:button id="next" type="input"/>
          <% } else { %>
            <util:button id="_null_"/>
          <% } // end if %>
        </div></util:form>
      <% } else { %>&nbsp;<% } %>
    </td>
  </tr></table><br />

  <%-- Display the results of the search --%>
  <table border="0" align="left" cellpadding="0" cellspacing="4">
    <% if (data.testDisplayMode(FindView.FD_POSTS) && (dcount>0)) { %>
      <tr valign="top">
        <th align="left" class="content">
          <util:font color="content.fg" size="content"><b><u>Post Link</u></b></util:font>
        </th>
        <th align="left" class="content">
          <util:font color="content.fg" size="content"><b><u>Author</u></b></util:font>
        </th>
        <th align="left" class="content">
          <util:font color="content.fg" size="content"><b><u>Post Date</u></b></util:font>
        </th>
        <th align="left" class="content">
          <util:font color="content.fg" size="content"><b><u>Lines</u></b></util:font>
        </th>
        <th align="left" class="content">&nbsp;</th>
      </tr>
    <% } // end if %>
    <% for (int i=0; i<dcount; i++) { %>
      <tr valign="top">
        <% if (data.testDisplayMode(FindView.FD_POSTS)) { %>
          <% TopicMessageFound post = (TopicMessageFound)(results.get(i)); %>
          <td align="left" class="content"><util:font color="content.fg" size="content">
            <util:xlink>
              <util:href type="servlet">go/<%= post.getIdentifier() %></util:href>
              <util:text><%= post.getIdentifier() %></util:text>
            </util:xlink>
          </util:font></td>
          <td align="left" class="content"><util:font color="content.fg" size="content">
            <util:xlink>
              <util:href type="servlet">user/<%= post.getAuthor() %></util:href>
              <util:text><%= post.getAuthor() %></util:text>
            </util:xlink>
          </util:font></td>
          <td align="left" class="content" nowrap="nowrap"><util:font color="content.fg" size="content">
            <%= data.formatDate(post.getPostDate()) %>
          </util:font></td>
          <td align="left" class="content"><util:font color="content.fg" size="content">
            <%= post.getLineCount() %>
          </util:font></td>
          <td align="left" class="content"><util:font color="content.fg" size="content">
            <util:escape><%= post.getText() %></util:escape>
          </util:font></td>
        <% } else { %>
          <td align="center" width="14"><util:stdbullet/></td>
          <td align="left" class="content"><util:font color="content.fg" size="content">
            <% Object item = results.get(i); %>
            <% if (data.testDisplayMode(FindView.FD_COMMUNITIES)) { %>
              <%
                CommunityContext comm = (CommunityContext)item;
                String host_name = FindView.getCommunityHostName(comm);
                int members = FindView.getCommunityMemberCount(comm);
              %>
	      <util:xlink>
                <util:href type="servlet">comm/<%= comm.getAlias() %></util:href>
                <util:text><util:escape><%= comm.getName() %></util:escape></util:text>
              </util:xlink><br />
              <% if (host_name!=null) { %>
                Host:
                <util:xlink>
                  <util:href type="servlet">user/<%= host_name %></util:href>
                  <util:text><%= host_name %></util:text>
                </util:xlink>
              <% } // end if (got host name) %>
              <% if (members>=0) { %>
                <% if (host_name!=null) { %> - <% } %>
                <%= members %> members
              <% } // end if (got member count) %>
              <% if ((host_name!=null) || (members>=0)) { %><br /><% } %>
              Latest activity: <%= data.getActivityString(comm.getLastAccessDate()) %><br />
              <i><util:escape><%= comm.getSynopsis() %></util:escape><i>
            <% } else if (data.testDisplayMode(FindView.FD_USERS)) { %>
              <%
                UserFound uf = (UserFound)item;
                String fullname = uf.getGivenName() + " " + uf.getFamilyName();
                fullname = fullname.trim();
                if (StringUtil.isStringEmpty(fullname))
                  fullname = uf.getName();
                String whence = "";
                if (!(StringUtil.isStringEmpty(uf.getLocality())))
                { // combine locations
                  if (!(StringUtil.isStringEmpty(uf.getRegion())))
                    whence = uf.getLocality() + ", " + uf.getRegion();
                  else
                    whence = uf.getLocality();

                } // end if
                else if (!(StringUtil.isStringEmpty(uf.getRegion())))
                  whence = uf.getRegion();
              %>
              <util:xlink>
                <util:href type="servlet">user/<%= uf.getName() %></util:href>
                <util:text><%= uf.getName() %></util:text>
              </util:xlink><br />
              <util:escape><%= fullname %></util:escape>,
              from <util:escape><%= whence %></util:escape>
              <% if (!(uf.getCountry().equals("XX"))) { %><%= uf.getCountry() %><% } %>
              <% if (uf.getDescription()!=null) { %>
                <br /><i><util:escape><%= uf.getDescription() %></util:escape></i>
              <% } // end if %>
            <% } else if (data.testDisplayMode(FindView.FD_CATEGORIES)) { %>
              <global:categories_enabled>
                <% CategoryDescriptor cd = (CategoryDescriptor)item; %>
                <util:xlink>
                  <util:href type="servlet">
                    find.js.vs?disp=<%= FindView.FD_COMMUNITIES %>&cat=<%= cd.getLinkedCategoryID() %>
                  </util:href>
                  <util:text><util:escape><%= cd.toString() %></util:escape></util:text>
                </util:xlink>
              </global:categories_enabled>
            <% } // end if %>
          </util:font></td>
        <% } // end if %>
      </tr>
    <% } // end for %>
  </table><br clear="left" />
<% } // end if (results found) %>
<%-- EOF --%>
