<?xml version="1.0" encoding="ISO-8859-1"?>

<!--
   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.
-->

<project xmlns="http://maven.apache.org/DECORATION/1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/DECORATION/1.3.0 http://maven.apache.org/xsd/decoration-1.3.0.xsd"
         name="Ambari">
  <skin>
    <groupId>org.apache.maven.skins</groupId>
    <artifactId>maven-fluido-skin</artifactId>
    <version>1.3.0</version>
  </skin>
  <custom>
    <fluidoSkin>
      <topBarEnabled>true</topBarEnabled>
      <sideBarEnabled>false</sideBarEnabled>
    </fluidoSkin>
  </custom>
  <bannerLeft>
    <name>Ambari</name>
    <src>http://incubator.apache.org/ambari/images/apache-ambari-project.jpg</src>
    <href>http://incubator.apache.org/ambari</href>
  </bannerLeft>

  <publishDate position="right"/>
  <version position="right"/>

  <body>
    <head>
       <!-- Start of Google analytics -->
       <script type="text/javascript">
         var _gaq = _gaq || [];
         _gaq.push(['_setAccount', 'UA-27188762-1']);
         _gaq.push(['_trackPageview']);

         (function() {
            var ga = document.createElement('script'); 
            ga.type = 'text/javascript'; ga.async = true;
            ga.src = ('https:' == document.location.protocol ? 
                      'https://ssl' : 'http://www') + 
                     '.google-analytics.com/ga.js';
            var s = document.getElementsByTagName('script')[0]; 
            s.parentNode.insertBefore(ga, s);
          })();
       </script>
       <!-- End of Google analytics -->
    </head>

    <links>
      <item name="JIRA" href="https://issues.apache.org/jira/browse/AMBARI" />
      <item name="SVN" href="https://svn.apache.org/repos/asf/incubator/ambari/" />
      <item name="WIKI" href="https://cwiki.apache.org/confluence/display/AMBARI/Ambari" />
    </links>

    <breadcrumbs>
      <item name="Ambari" href="index.html"/>
    </breadcrumbs>

    <menu name="Ambari">
      <item name="What's New?" href="whats-new.html"/>
      <item name="About" href="index.html"/>
      <item name="Wiki" href="https://cwiki.apache.org/confluence/display/AMBARI/Ambari"/>
      <item name="Project Team" href="team-list.html"/>
      <item name="Mailing Lists" href="mail-lists.html"/>
      <item name="Issue Tracking" href="issue-tracking.html"/>
      <item name="Project License" href="license.html"/>
    </menu>

    <menu name="Releases">
        <item name="1.2.1 (coming soon)" href="whats-new.html"/>
        <item name="1.2.0" href="http://www.apache.org/dist/incubator/ambari/ambari-1.2.0/"/>
        <item name="0.9" href="http://www.apache.org/dist/incubator/ambari/ambari-0.9-incubating/"/>
    </menu>

    <menu name="Documentation">
        <item name="Install Guide for 1.2.1" href="1.2.1/installing-hadoop-using-ambari/content/index.html"/>
        <item name="Install Guide for 1.2.0" href="1.2.0/installing-hadoop-using-ambari/content/index.html"/>
        <item name="Install Guide for 0.9" href="install-0.9.html"/>
    </menu>

    <footer>
      <div class="row span12">
        Apache Ambari, Apache, the Apache feather logo, and the Apache Ambari project logos are trademarks
        of The Apache Software Foundation.
        All other marks mentioned may be trademarks or registered trademarks of their respective owners.
      </div>
      <div class="row span12">
        <a href="${project.url}/privacy-policy.html">Privacy Policy</a>
      </div>
    </footer>

  </body>
</project>
