@*******************************************************************************
 * 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.											   *
 *******************************************************************************@ 

@(title: String, moreScripts: Html = Html(""))(content: Html) 

<!DOCTYPE html>

<html>
<head>

<title>@title</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">

<link rel="stylesheet"
	href='@routes.Assets.at("stylesheets/bootstrap.css")'>
<link rel="stylesheet"
	href='@routes.Assets.at("stylesheets/navbar-fixed-top.css")'>
<link rel="stylesheet"
	href='@routes.Assets.at("stylesheets/custom.css")'>
<link rel="stylesheet" media="screen"
	href='@routes.Assets.at("stylesheets/main.css")'>
<link rel="shortcut icon" type="image/png"
	href='@routes.Assets.at("images/favicon.png")'>
<link href='@routes.Assets.at("stylesheets/bootstrap-editable.css")'
	rel="stylesheet" />
<link href='@routes.Assets.at("stylesheets/jquery.tablesorter.pager.css")'
	rel="stylesheet" />
<link href='@routes.Assets.at("stylesheets/style.css")'
	rel="stylesheet" />

<script src='@routes.Assets.at("javascripts/jquery-1.9.0.min.js")'
	type="text/javascript"></script>	
<script src='@routes.Assets.at("javascripts/bootstrap.min.js")'
	type="text/javascript"></script>
<script type='text/javascript' src='@routes.Assets.at("javascripts/lastLoader.js")'></script>
<script type='text/javascript' src='@routes.Assets.at("javascripts/jquery.metadata.js")'></script>	
<script type='text/javascript' src='@routes.Assets.at("javascripts/jquery.tablesorter.js")'></script>


<script type='text/javascript' src='@routes.Assets.at("javascripts/jstree.js")'></script>
<script type='text/javascript' src='@routes.Assets.at("javascripts/keyword_tree.js")'></script>

<script src='@routes.Assets.at("javascripts/bootstrap-editable.min.js")'></script>








@moreScripts
</head>

<body>
	@header()
	


	<div class="container">

		@content

	</div>
	
	<!-- Footer -->
		<div class="footer" >
			<div class="row">
				<div class="col-lg-6 col-lg-offset-3">
					<p class="text-muted" style="text-align: center; font-size: 14px;">&copy;
						Carnegie Mellon University - Silicon Valley ; NASA Jet Propulsion Laboratory 2015</p>
				</div>
			</div>
		</div>

</body>
</html>
