<?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:ommessage key="572" /></td>
					<td><input type="text" wicket:id="title" /></td>
				</tr>
				<tr>
					<td><wicket:ommessage key="570" /></td>
					<td><span class="date time picker" wicket:id="start"></span></td>
				</tr>
				<tr>
					<td><wicket:ommessage key="571" /></td>
					<td><span class="date time picker" wicket:id="end"></span></td>
				</tr>
				<tr>
					<td><wicket:ommessage 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:ommessage key="1509" /></label></td>
				</tr>
				<tr>
					<td><wicket:ommessage key="619" /></td>
					<td><select wicket:id="room.roomtype" ></select></td>
				</tr>
				<tr>
					<td><wicket:ommessage 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:ommessage key="524" /></label></td>
				</tr>
				<tr>
					<td><wicket:ommessage key="525" /></td>
					<td><input type="password" wicket:id="password" /></td>
				</tr>
				<tr>
					<td colspan="2" style="font-size: smaller;"><wicket:ommessage key="1445" /></td>
				</tr>
				<tr>
					<td><wicket:ommessage key="1156" /></td>
					<td><span wicket:id="aowner"></span></td>
				</tr>
				<tr>
					<td><wicket:ommessage key="803" /></td>
					<td wicket:ommessage="title:1588"><input class="appointment attendees" type="hidden" wicket:id="attendees"/></td>
				</tr>
				<tr>
					<td><wicket:ommessage key="569" /></td>
					<td><input type="text" wicket:id="location" /></td>
				</tr>
				<tr>
					<td><wicket:ommessage 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>
