<!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>Milestone 2 - 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><a href="version.html">14.3</a> <span class="divider">/</span></li>
      				<li class="active"><a href="#">Milestone 2</a></li>
      				<li class="pull-right"><a href="#">Custom Query</a><a href="#" style="margin-left:15px;">Reports</a></li>
				</ul>
			</div>
      		<div class="span3" style="text-align:right;"></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>Milestone 2</h1>
		      			<h6>Due in <time datetime="2012-04-27"><a href="#">6 days</a></time>, assigned to <a href="profile.html">Karl Krombacher</a></h6>
	      			</hgroup>
	      			<div id="statusBar">
	      			<div id="statusBarBox"></div>
	      				<div style="width: 150px; margin-left: 40px;" class="first">
		      				<p style="margin-bottom:-2px;">24% complete</p>
		      				<div class="progress">
		      					<div class="bar" style="width: 24%;"></div>
		      				</div>
	      				</div>
						<div id="status" class="other">
							<p style="margin-bottom:-2px;">In progress</p>
							<p style="font-size:150%;"><a href="#">14</a></p>
						</div>
						<div id="type" class="other">
							<p style="margin-bottom:-2px;">Open</p>
							<p style="font-size:150%;"><a href="#">20</a></p>
						</div>
						<div id="type" class="other">
							<p style="margin-bottom:-2px;">Complete</p>
							<p style="font-size:150%;"><a href="#">24</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="#">lorum ipsum</a>, <a href="#">dolor</a>, <a href="#">header</a></p>
	      			      </div>
							<p>Vel fusce in aliquam egestas gravida vitae at blandit porta suscipit suspendisse sit sem id. Ipsum rutrum aenean. Id mollis cursus felis dictum elementum. Ut facilisi turpis dui ipsum vitae quis quis id. Fusce nisi posuere. Vivamus in mi. Vestibulum lacus lorem aliquam feugiat.</p>
							<p>Sodales donec sem risus bibendum semper. Velit et mauris. Vestibulum sit quam mollis massa consectetuer nonummy mattis imperdiet. Ornare varius natoque. Tortor amet venenatis pede.</p>
							<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 id="ticketlist-container"></div>
      			
				<!-- This is only here to force the footer further down! -->
				<div style="height:150px;"></div>
      			<!-- Likely due to a poisition: style that I got wrong somewhere in the 'content' div -->
      		</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.7.2.min.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 #myAll');
        $('div#activity-container').load('placeholders/activity.html');
        $('div#footer-container').load('placeholders/header.html footer');
    </script>
</body>
</html>

