<!DOCTYPE html>

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

<link rel="stylesheet" type="text/css" href="css/bootstrap.css" />
<html>
<head>
	<title>Wiki - Apache Bloodhound</title>
</head>
<body>
	<div class="container">
		<header>
		<div class="row">
			<div id="logo-container"></div>
		</div>
		<div class="row">
<!-- Search box -->
			<div class="span4">
			<form class="form-inline" style="margin-bottom:0px;">
				<input type="text" class="span3" placeholder="Search anything. Try #EF-492." style="margin-bottom:0px;" />
				<input type="button" value="Search" href="search.html" class="btn btn-warning" />
			</form>
			</div>

<!-- Create button -->
			<div class="span4">
			  	<button class="btn btn-primary" href="#">Create Ticket</a>
			</div>
			
<!-- Main navigation tabs -->
			<div class="span4">
				<ul class="nav nav-tabs pull-right" style="margin-bottom:0px; border-bottom: 0px;">
					<li><a href="dashboard.html">Tickets</a></li>
					<li class="active"><a href="wiki.html">Wiki</a></li>
					<li><a href="source.html">Source</a></li>
					<li class="dropdown">
						<a class="dropdown-toggle" data-toggle="dropdown" href="#">Apps<b class="caret"></b></a>
						<ul class="dropdown-menu">
							<li><a href="#">SuperAdmin</a></li>
							<li><a href="#">Tag Cloud</a></li>
							<li><a href="#">Blog</a></li>
							<li class="divider"></li>
							<li><a href="#">Something</a></li>
						</ul>
					</li>
				</ul>
			</div>
		</div>
		
<!-- Breadcrumb -->
		<div class="row">
      		<div class="span12">
      			<ul class="breadcrumb">
      				<li class="active"><a href="#">Wiki</a></li>
      				<li class="pull-right"><a href="#">Custom Query</a><a href="#" style="margin-left:15px;">Reports</a></li>
				</ul>
			</div>
     	</div>
		</header>     	

<!--	#	Header ends 
		#	Main body begins	-->

		<div class="row">
<!-- Main element starts -->
      		<div class="span8" id="content">
      			<h1>Apache Bloodhound (incubating)</h1>
      			<p>Apache Bloodhound is a tool created for issue tracking and managing of software projects.</p>
      			<h2>Multiple Projects</h2>
      			<p>Bloodhound will manage anything from your one pet project to dozens of commercial or open source projects, and scale seamlessly in-between. The built-in Wiki allows you to create proposals and store other information.</p>
      			<h2>Easy to install</h2>
      			<p>An easy installation process for Windows, Linux and Mac OS X. Everything you need to run Bloodhound with your favourite web server and database will be provided.</p>
      			<h2>User-friendly design</h2>
      			<p>A consistent experience throughout. It will be obvious even to beginners how to carry out common tasks. A dashboard will provide an overview of work assigned to you, or watched by you.</p>
      			<h2>All of Trac's power</h2>
      			<p>Apache Bloodhound is being built on the shoulders of the ​Trac project, a giant in the field of project management and bug tracking. Features such Wiki and a source code browser are deeply integrated.</p>
      		</div>
      		<div class="span4"></div>
      	</div>
     	
<!-- Footer -->
     	<div class="row" id="footer-container"></div>

    </div>
<script type="text/javascript" src="js/jquery-1.8.2.js"></script>
<script type="text/javascript" src="js/bootstrap-dropdown.js"></script>
<script type="text/javascript" src="js/bootstrap-button.js"></script>
<script type="text/javascript">
    $('div#logo-container').load('placeholders/header.html #logo-user');
    $('div#ticketlist-container').load('placeholders/ticketlist.html #myAll');
    $('div#activity-container').load('placeholders/activity.html');
    $('div#footer-container').load('placeholders/header.html footer');
</script>
</body>
</html>

