<!-- 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>
<html xmlns:wicket="http://wicket.apache.org">
<head>
<meta charset="utf-8" />
<title>Wicket extend</title>
</head>

<body>
	<wicket:extend>
		<div wicket:id="notificationPanel"></div>

		<form class="form-horizontal" wicket:id="crawlForm">
			<div class="form-group">
				<label for="inputEmail" class="control-label col-xs-2">Crawl id</label>
				<div class="col-xs-10">
					<span wicket:id="crawlId">123-1321-123</span>
				</div>
			</div>
			<div class="form-group">
				<label for="seedDir" class="control-label col-xs-2">Crawl name</label>
				<div class="col-xs-10">
					<input class="form-control" id="seedDir" wicket:id="crawlName" placeholder="Crawl name">
				</div>
			</div>
			<div class="form-group">
				<label for="seedDir" class="control-label col-xs-2">Seed list</label>
				<div class="col-xs-10">
					<select wicket:id="seedList">
						<option>Google list</option>
						<option>Yahoo list</option>
					</select>
				</div>
			</div>

			<div class="form-group">
				<label for="numberOfRounds" class="control-label col-xs-2">Rounds</label>
				<div class="col-xs-10">
					<select wicket:id="numberOfRounds">
						<option>1</option>
						<option>2</option>
					</select>
				</div>
			</div>
		</form>

	</wicket:extend>
</body>
</html>
