<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
   $HeadURL$
   $Revision$
   $Date$

   ====================================================================
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
   regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
   ====================================================================

   This software consists of voluntary contributions made by many
   individuals on behalf of the Apache Software Foundation.  For more
   information on the Apache Software Foundation, please see
   <http://www.apache.org/>.
 -->

<project name="Apache HttpComponents">

<!-- N.B. all non-body elements are automatically inherited -->

  <skin>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>maven-site-skin</artifactId>
    <version>1.1</version>
  </skin>

  <bannerLeft>
    <name>Apache</name>
    <src>http://www.apache.org/images/asf_logo_wide.gif</src>
    <href>http://www.apache.org/</href>
  </bannerLeft>

  <bannerRight>
    <name>HttpComponents</name>
    <src>http://hc.apache.org/images/logos/httpcomponents.png</src>
    <href>http://hc.apache.org/</href>
  </bannerRight>

  <body>
    <!-- N.B. body links are automatically inherited -->
    <links>
      <item name="Apache" href="http://www.apache.org/"/>
      <item name="HttpComponents" href="http://hc.apache.org/index.html"/>
    </links>
    
    <!-- add standard menu links for all sub-sites -->
    <menu name="HttpComponents" inherit="top">
      <item name="Home" href="index.html"/>
      <item name="License" href="http://www.apache.org/licenses/"/>
      <item name="Download" href="downloads.cgi"/>
      <item name="Mailing Lists" href="mail.html"/>
      <item name="Developer documents" href="dev-docs.html"/>
      <item name="Wiki (external)" href="http://wiki.apache.org/HttpComponents/"/>
      <item name="Security" href="http://www.apache.org/security/"/>
    </menu>
    
    <!-- sections for top-level site only -->
    <menu name="Overview">
      <item name="About" href="index.html"/>
      <item name="News" href="news.html"/>
      <item name="Powered by" href="poweredby.html"/>
      <item name="Get Involved" href="get-involved.html"/>
    </menu>
    <menu name="Components">
      <item name="HttpClient 5.0 beta" collapse="true" href="httpcomponents-client-5.0.x/index.html">
        <item name="Quick Start" href="httpcomponents-client-5.0.x/quickstart.html"/>
        <item name="Examples (Classic)" href="httpcomponents-client-5.0.x/examples.html"/>
        <item name="Examples (Async)" href="httpcomponents-client-5.0.x/examples-async.html"/>
        <item name="Examples (Reactive)" href="httpcomponents-client-5.0.x/examples-reactive.html"/>
        <item name="Logging Guide" href="httpcomponents-client-5.0.x/logging.html"/>
        <item name="Download" href="httpcomponents-client-5.0.x/download.html"/>
        <item name="Project Info" href="httpcomponents-client-5.0.x/project-info.html"/>
      </item>
      <item name="HttpClient 4.5" collapse="true" href="httpcomponents-client-4.5.x/index.html">
        <item name="Quick Start" href="httpcomponents-client-4.5.x/quickstart.html"/>
        <item name="Tutorial" href="httpcomponents-client-4.5.x/tutorial/html/index.html"/>
        <item name="Examples" href="httpcomponents-client-4.5.x/examples.html"/>
        <item name="Android Port" href="httpcomponents-client-4.5.x/android-port.html"/>
        <item name="Programming Primer" href="httpcomponents-client-4.5.x/primer.html"/>
        <item name="NTLM Guide" href="httpcomponents-client-4.5.x/ntlm.html"/>
        <item name="Logging Guide" href="httpcomponents-client-4.5.x/logging.html"/>
        <item name="Download" href="httpcomponents-client-4.5.x/download.html"/>
        <item name="Project Info" href="httpcomponents-client-4.5.x/project-info.html"/>
      </item>
      <item name="HttpCore 5.0 beta" collapse="true" href="httpcomponents-core-5.0.x/index.html">
        <item name="Examples" href="httpcomponents-core-5.0.x/examples.html"/>
        <item name="Download" href="httpcomponents-core-5.0.x/download.html"/>
        <item name="Project Info" href="httpcomponents-core-5.0.x/project-info.html"/>
      </item>
      <item name="HttpCore 4.4" collapse="true" href="httpcomponents-core-4.4.x/index.html">
        <item name="Tutorial" href="httpcomponents-core-4.4.x/tutorial/html/index.html"/>
        <item name="Examples" href="httpcomponents-core-4.4.x/examples.html"/>
        <item name="Download" href="httpcomponents-core-4.4.x/download.html"/>
        <item name="Project Info" href="httpcomponents-core-4.4.x/project-info.html"/>
      </item>
      <item name="HttpAsyncClient 4.1" collapse="true" href="httpcomponents-asyncclient-4.1.x/index.html">
        <item name="Quick Start" href="httpcomponents-asyncclient-4.1.x/quickstart.html"/>
        <item name="Examples" href="httpcomponents-asyncclient-4.1.x/examples.html"/>
        <item name="Download" href="httpcomponents-asyncclient-4.1.x/download.html"/>
        <item name="Project Info" href="httpcomponents-asyncclient-4.1.x/project-info.html"/>
      </item>
    </menu>
    <menu name="Legacy">
      <item name="Commons HttpClient" href="httpclient-legacy/index.html"/>
    </menu>
    <menu name="Project">
      <item name="Status" href="status.html"/>
      <item name="Charter" href="charter.html"/>
    </menu>

    <!-- inherited -->
    <menu ref="reports" inherit="bottom"/>

    <menu name="ASF" inherit="bottom">
      <item name="ASF Home Page" href="http://www.apache.org"/>
      <item name="Foundation" href="http://www.apache.org/foundation/"/>
      <item name="Sponsor Apache" href="http://www.apache.org/foundation/sponsorship.html"/>
      <item name="Thanks" href="http://www.apache.org/foundation/thanks.html"/>
    </menu>
  </body>
  
  <!-- inherited -->
  <poweredBy>
    <!-- Add ApacheCon logo -->
    <logo name="ApacheCon" href="http://www.apache.org/events/current-event.html"
          img="http://www.apache.org/events/current-event-125x125.png"/>
    <!-- Keep the default logo as well -->
    <logo name="Maven" href="http://maven.apache.org/"
          img="http://maven.apache.org/images/logos/maven-feather.png"/>
  </poweredBy>

  <!-- inherited -->
  <custom>
    <footer>
      <div class="xleft">Apache HttpComponents, Commons HttpClient, Apache, the Apache feather logo, and the Apache HttpComponents project logo are trademarks of The Apache Software Foundation.</div>
      <br/>
      <div class="xleft">All other marks mentioned may be trademarks or registered trademarks of their respective owners.</div>
    </footer>
  </custom>
</project>
