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

<!--
 ! Copyright 2009-2013 by The Regents of the University of California
 ! Licensed 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 from
 ! 
 !     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 name="AsterixDB" xmlns="http://maven.apache.org/DECORATION/1.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
  <bannerLeft>
    <name>AsterixDB</name>
    <src>images/asterixlogo.png</src>
    <href>http://asterixdb.ics.uci.edu/</href>
  </bannerLeft>
  
  <version position="right"/>

  <poweredBy>
    <logo name="Hyracks"
          href="https://code.google.com/p/hyracks/"
          img="images/hyrax_ts.png"/>
  </poweredBy>

  <skin>
    <groupId>org.apache.maven.skins</groupId>
    <artifactId>maven-fluido-skin</artifactId>
    <version>1.3.0</version>
  </skin>
  <custom>
    <fluidoSkin>
      <!-- <topBarEnabled>true</topBarEnabled>
      <topBarIcon>
        <name>AsterixDB</name>
        <alt>AsterixDB</alt>
        <src>images/asterixlogo.png</src>
        <href>/index.html</href>
      </topBarIcon>
      <sideBarEnabled>false</sideBarEnabled> -->
      <!-- <topBarContainerStyle>width: 90%;</topBarContainerStyle> -->
      <sourceLineNumbersEnabled>true</sourceLineNumbersEnabled>
      <!-- <googlePlusOne /> -->
    </fluidoSkin>
  </custom>

  <body>
    <head>
      <script>
        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
    
        ga('create', 'UA-41536543-1', 'uci.edu');
        ga('send', 'pageview');
      </script>
    </head>
    <links>
      <item name="Documentation Home" href="index.html"/>
    </links>

    <menu name="Documentation">
      <item name="Installing AsterixDB using Managix" href="install.html"/>
      <item name="AsterixDB 101: An ADM and AQL Primer" href="aql/primer.html"/>
      <item name="Asterix Data Model (ADM)" href="aql/datamodel.html"/>
      <item name="Asterix Query Language (AQL)" href="aql/manual.html"/>
      <item name="AQL Functions" href="aql/functions.html"/>
      <item name="AQL Allen's Relations Functions" href="aql/allens.html"/>
      <item name="AQL Support of Similarity Queries" href="aql/similarity.html"/>
      <item name="Accessing External Data" href="aql/externaldata.html"/>
      <item name="REST API to AsterixDB" href="api.html"/>
    </menu>

    <menu ref="reports"/>

    <footer>&copy; Copyright 2013 University of California, Irvine</footer>

  </body>
</project>
