<!--
  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.
-->
<!doctype html>
<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]> 	   <html class="ie"> <![endif]-->
<html class="no-js">
	<!--<![endif]-->
	<head>
		<meta charset="utf-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
		<title>Ranger</title>
		<meta name="description" content="">
		<meta name="viewport" content="width=device-width">

		<!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
		<link rel="shortcut icon" href="images/favicon.ico">
		<link rel="stylesheet" href="styles/app-font.css">

		<link href="styles/bootstrap.css" media="all" rel="stylesheet" type="text/css" id="bootstrap-css">
		<link href="libs/other/backgrid/backgrid.css" media="all" rel="stylesheet" type="text/css" >
		<link href="libs/bower/backgrid-paginator/css/backgrid-paginator.css" media="all" rel="stylesheet" type="text/css" >
		<link href="libs/bower/backgrid-filter/css/backgrid-filter.css" media="all" rel="stylesheet" type="text/css" >
		<link href="libs/bower/select2/select2.css" media="all" rel="stylesheet" type="text/css" >
		<link href="libs/bower/bootstrap-notify/css/bootstrap-notify.css" rel="stylesheet">
		<link href="libs/bower/tag-it/css/jquery.tagit.css" rel="stylesheet">
		<link href="libs/other/datepicker/css/datepicker.css" media="all" rel="stylesheet" type="text/css">
		<link href="libs/bower/x-editable/css/bootstrap-editable.css" media="all" rel="stylesheet" type="text/css">
		<link href="libs/other/jquery-ui/css/jquery-ui-1.10.3.custom.min.css" rel="stylesheet">
		<link href="libs/other/visualsearch/css/workspace.css" rel="stylesheet">
		<link href="libs/other/visualsearch/css/icons.css" rel="stylesheet">   
		<link href="styles/xa.css" media="all" rel="stylesheet" type="text/css" >
	</head>

	<body class="fluid-layout">
		<!-- Main navigation bar
		================================================== -->
		<header class="navbar navbar-fixed-top" id="top-navbar">
			<div class="navbar-inner">
				<div class="container">
					<a class="logo page-logo" href="#"><img alt="Af_logo" src="images/logo.png"></a>
					<a class="btn nav-button collapsed" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-reorder"></span> </a>
					<div id="r_topNav">

					</div>
					<div id="r_topProfileBar">

					</div>
				</div>
			</div>
		</header>
		<!-- / Main navigation bar -->
		<!-- Page content
		================================================== -->
		<section class="container">

			<section id="r_breadcrumbs" class="row-fluid">
				
			</section>
			<div class='notifications top-right ranger-notifications'></div>
			<section id="r_content" class="row-fluid" style="min-height: 450px;">
				<div class="loading-img">
					<div id="center">
						<div class="letter_container_1">
							<span>L</span>
						</div>
						<div class="letter_container_2">
							<span>O</span>
						</div>
						<div class="letter_container_3">
							<span>A</span>
						</div>
						<div class="letter_container_4">
							<span>D</span>
						</div>
						<div class="letter_container_5">
							<span>I</span>
						</div>
						<div class="letter_container_6">
							<span>N</span>
						</div>
						<div class="letter_container_7">
							<span>G</span>
						</div>
						<div class="letter_container_8">
							<span>..</span>
						</div>
					</div>
				</div>

			</section><!-- r_content -->

			<!-- Page footer
			================================================== -->
			<footer id="r_footer">

			</footer>
			<!-- / Page footer -->
		</section>
		<!-- Page content ends
		================================================== -->

		<a href="#" class="btn-top _allowNav" id="back-top" title="Scroll to top">
			<i class="icon-arrow-up bigger-120 _allowNav"></i>
		</a>


		<!-- build:js scripts/main.js -->
		<script data-main="scripts/Init.js?ver=build.version" src="libs/bower/requirejs/js/require.js"></script>
		<!-- endbuild -->
		<script type="text/javascript">
			require.config({
				waitSeconds : 0
			});
			if (!window.console) window.console = {};
            if (!window.console.log) window.console.log = function () { };

		</script>
	</body>
</html>
