<!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" />
<link rel="stylesheet" type="text/css" href="css/bloodhound-custom.css" />
<html>
<head>
	<title>14.3 - MultiSite - 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</button>
			</div>
			
<!-- Main navigation tabs -->
			<div class="span4">
				<ul class="nav nav-tabs pull-right" style="margin-bottom:0px; border-bottom: 0px;">
					<li class="active"><a href="dashboard.html">Tickets</a></li>
					<li><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 class="span12">
      			<ul class="breadcrumb">
      				<li><a href="dashboard.html">Dashboard</a> <span class="divider">/</span></li>
      				<li><a href="product.html">MultiSite</a> <span class="divider">/</span></li>
      				<li class="active"><a href="#">14.3</a></li>
      				<li class="pull-right"><a href="#">Custom Query</a><a href="#" style="margin-left:15px;">Reports</a></li>
				</ul>
			</div>
     	</div>
     	</header>
		<div class="row">
      		<div class="span8" id="content">
			<div id="stickyStatus">
				<div id="whitebox"></div>
				<div style="position: absolute; z-index: 20;">
					<hgroup>
						<h1>14.3</h1>
						<h6>Due in <time datetime="2012-05-27"><a href="#">3 weeks</a></time>, assigned to <a href="profile.html">Werner Hoffer</a></h6>
					</hgroup>
					<div id="statusBar">
					<div id="statusBarBox"></div>
						<div style="width: 150px; margin-left: 40px;" class="first">
							<p style="margin-bottom:-2px;">75% complete</p>
							<div class="progress">
								<div class="bar" style="width: 75%;"></div>
							</div>
						</div>
					<div id="status" class="other">
						<p style="margin-bottom:-2px;">In progress</p>
						<p style="font-size:150%;"><a href="#">4</a></p>
					</div>
					<div id="type" class="other">
						<p style="margin-bottom:-2px;">Open</p>
						<p style="font-size:150%;"><a href="#">25</a></p>
					</div>
					<div id="type" class="other">
						<p style="margin-bottom:-2px;">Complete</p>
						<p style="font-size:150%;"><a href="#">75</a></p>
					</div>
				</div>
				</div>
			</div>
			<div id="belowStatus">
				<div class="well">
					<h3>Sit amet vestibulum</h3>
					<div>
						<p><i class="icon-tags"></i> <a href="#">Trac</a>, <a href="#">components</a></p>
					</div>
					<p>Note to maintainers:</p>
					<ul>
						<li>Move tickets from next-minor-0.14.x to here once you know you're going to fix them for the 0.14.2 release.</li>
						<li>There should be no enhancements here, only defects</li>
						<li>There should be only major defects here anyway, focus is now on 0.15</li>
					</ul>
					<button	class="btn" style="margin-right: 10px;"><i class="icon-edit"></i> Edit</button> <button class="btn"><i class="icon-file"></i> Attach file</button>
				</div>
      			<div class="tabbable tabs-left">
					<ul class="nav nav-tabs" style="text-align:right;">
						<li class="active"><a href="#Undefined"><span class="label">Undefined</span></a></li>
						<li><a href="#14.3">Singularity</a></li>
						<li><a href="#14.3"><span class="label label-warning">Aktuell</span></a></li>
						<li><a href="#">Anterior</a></li>
					</ul>
					<div class="tab-content" style="width: auto;">
						<div class="tab-pane active" id="Undefined">
							<h3>Create Milestone</h3>
							<form method="post" class="form-horizontal">
							<label>Name</label>
							<input type="text" />
							<label>Summary</label>
							<input type="text" />
							</form>
								<a href="#" style="font-size:14pt;">+ Attach files</a><p>Upload or link to files.</p>
								<a href="#" style="font-size:14pt;">+ Set owner</a><p>This is you by default.</p>
								<a href="#" style="font-size:14pt;">+ Due date</a><p>Upload or link to files.</p>
								<a href="#" style="font-size:14pt;">+ Component</a><p>Upload or link to files.</p>
							<button class="btn btn-primary" style="margin-right: 15px;">Create</button><a href="#">Cancel</a>
						</div>
					</div>
				</div>
      		</div>
      		<!-- This is only here to force the footer further down! -->
      		<div style="height:150px;"></div>
      		<!-- Likely due to a position: style that I got wrong somewhere in the 'content' div -->
      		</div>
      			
<!-- Activity -->
			<div id="activity" class="span4">
				<div id="stickyActivity">
					<h1>Activity</h1>
				</div>
				<div id="activity-container"></div>
			</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" src="js/bloodhound-activitysize.js"></script>
    <script type="text/javascript" src="js/bloodhound-stickyscroll.js"></script>
    <script type="text/javascript">
        $('div#logo-container').load('placeholders/header.html #logo-user');
        $('div#ticketlist-container').load('placeholders/ticketlist.html #myHigh');
        $('div#activity-container').load('placeholders/activity.html');
        $('div#footer-container').load('placeholders/header.html footer');
    </script>
</body>
</html>

