<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
  
-->
<html xmlns:wicket="http://wicket.apache.org">
	<wicket:panel>
		<form wicket:id="appForm" class="appointmentPopUp">
			<span wicket:id="feedback"></span>
			<table>
				<tr>
					<td><wicket:message key="572" /></td>
					<td><input type="text" wicket:id="title" /></td>
				</tr>
				<tr>
					<td><wicket:message key="570" /></td>
					<td><span class="date time picker" wicket:id="start"></span></td>
				</tr>
				<tr>
					<td><wicket:message key="571" /></td>
					<td><span class="date time picker" wicket:id="end"></span></td>
				</tr>
				<tr>
					<td><wicket:message key="565" /></td>
					<td><select wicket:id="remind" ></select></td>
				</tr>
				<tr>
					<td colspan="2"><input type="checkbox" wicket:id="createRoom" /><label wicket:for="createRoom"><wicket:message key="1509" /></label></td>
				</tr>
				<tr>
					<td><wicket:message key="619" /></td>
					<td><select wicket:id="room.roomtype" ></select></td>
				</tr>
				<tr>
					<td><wicket:message key="406" /></td>
					<td><select wicket:id="room" ></select></td>
				</tr>
				<tr>
					<td colspan="2"><input type="checkbox" wicket:id="passwordProtected" /><label wicket:for="passwordProtected"><wicket:message key="524" /></label></td>
				</tr>
				<tr>
					<td><wicket:message key="525" /></td>
					<td><input type="password" wicket:id="password" /></td>
				</tr>
				<tr>
					<td colspan="2" style="font-size: smaller;"><wicket:message key="1445" /></td>
				</tr>
				<tr>
					<td><wicket:message key="1156" /></td>
					<td><span wicket:id="aowner"></span></td>
				</tr>
				<tr>
					<td><wicket:message key="803" /></td>
					<td wicket:message="title:1588"><input class="appointment attendees" type="hidden" wicket:id="attendees"/></td>
				</tr>
				<tr>
					<td><wicket:message key="569" /></td>
					<td><input type="text" wicket:id="location" /></td>
				</tr>
				<tr>
					<td><wicket:message key="573" /></td>
					<td>
						<div wicket:id="toolbarContainer"></div>
						<div wicket:id="description"></div>
					</td>
				</tr>
			</table>
		</form>
		<div wicket:id="confirmDelete"></div>
	</wicket:panel>
</html>
