<?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="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="Related" href="httpcomponents-client-5.0.x/related-projects.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="Related" href="httpcomponents-core-5.0.x/related-projects.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>
