<?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:head>
	   <script type="text/javascript">
	       function omUserPanelInit() {
	           var documentHeight = $(document).height();
	           $('#adminForm').height(documentHeight-114);
	           $('#adminTable').height(documentHeight-144);
	       }
	   </script>
	</wicket:head>
	<wicket:panel>
		<div class="adminPanel">
			<div class="adminPanelColumnTable">
				<span wicket:id="navigator">[dataview navigator]</span>
				<table class="adminListTable">
					<thead>
						<tr>
							<th class="four_column_layout_column1"><span wicket:id="orderById"></span><wicket:ommessage key="146" /></th>
							<th class="four_column_layout_column2"><span wicket:id="orderByLogin"></span><wicket:ommessage key="147" /></th>
							<th class="four_column_layout_column3"><span wicket:id="orderByFirstName"></span><wicket:ommessage key="148" /></th>
							<th class="four_column_layout_column4"><span wicket:id="orderByLastName"></span><wicket:ommessage key="149" /></th>
						</tr>	
					</thead>
				</table>
				<div class="tableWrapper" id="adminTable">
					<table class="adminListTable">
						<tbody wicket:id="listContainer">	
				    		<tr wicket:id="userList">
								<td class="four_column_layout_column1"><div class="four_column_layout_divcolumn1"><span wicket:id="userId"></span></div></td>
								<td class="four_column_layout_column2"><div class="four_column_layout_divcolumn2"><span wicket:id="login"></span></div></td>
								<td class="four_column_layout_column3"><div class="four_column_layout_divcolumn3"><span wicket:id="firstName"></span></div></td>
								<td class="four_column_layout_column4"><div class="four_column_layout_divcolumn4"><span wicket:id="lastName"></span></div></td>
							</tr>
						</tbody>
					</table>
				</div>
			</div>
			<div class="adminPanelColumnForm">
				<form wicket:id="form" class="adminForm" >
					<div wicket:id="buttons"></div>
					<div class="scrollcontent" id="adminForm">
						<fieldset>
							<legend><wicket:ommessage key="143" /></legend>
							<div class="formelement">
				                <label><wicket:ommessage key="132" /></label><input type="text" wicket:id="login"/>
				            </div>
				            <div class="formelement">
				            <label><wicket:ommessage key="133" /></label><input type="password" wicket:id="password"/>
				            </div>
				            <div class="formelement">
				                <label><wicket:ommessage key="135" /></label><select wicket:id="salutations_id" style="width: 60px;"/><input type="text" wicket:id="firstname" style="width: 216px;"/>
				            </div>
				            <div class="formelement">
				                <label><wicket:ommessage key="136" /></label><input type="text" wicket:id="lastname"/>
				            </div>
				            <div class="formelement">
				                <label><wicket:ommessage key="1143" /></label><select wicket:id="omTimeZone"/>
				            </div>
				            <div class="formelement">
				                <label><wicket:ommessage key="111" /></label><select wicket:id="language_id"/>
				            </div>
				            <div class="formelement">
				                <label><wicket:ommessage key="1110" /></label><span wicket:id="starttime"/>
				            </div>
				            <div class="formelement">
				                <label><wicket:ommessage key="1112" /></label><span wicket:id="updatetime"/>
				            </div>
				            <div class="formelement">
				                <div class="info-icon" /><span style="font-style: italic;"><wicket:ommessage key="1149" /></span>
				                <br/>
				                <label><wicket:ommessage key="1148" /></label><input class="formcheckbox" type="checkbox" wicket:id="forceTimeZoneCheck" />
				            </div>
			                <div class="formelement">
				                <label><wicket:ommessage key="137" /></label><input type="text" wicket:id="adresses.email"/>
				            </div>
				            <div class="formelement">
				                <label><wicket:ommessage key="607" /></label><input type="text" wicket:id="adresses.phone"/>
				            </div>
				            <div class="formelement">
				                <label><wicket:ommessage key="1503" /></label><input class="formcheckbox" type="checkbox" wicket:id="sendSMS"/>
				            </div>
				            <div class="formelement">
				                <label><wicket:ommessage key="138" /></label><input type="text" wicket:id="age" style="width: 258px;"/>
				            </div>
				            <div class="formelement">
				                <label><wicket:ommessage key="139" /></label><input type="text" wicket:id="adresses.street" style="width: 244px;"/> <input type="text" wicket:id="adresses.additionalname" style="width: 30px;"/>
				            </div>
				            <div class="formelement">
				                <label><wicket:ommessage key="140" /></label><input type="text" wicket:id="adresses.zip" style="width: 60px;"/> <input type="text" wicket:id="adresses.town" style="width: 214px;"/>
				            </div>
				            <div class="formelement">
				                <label><wicket:ommessage key="141" /></label><select wicket:id="adresses.states"/>
				            </div>
				            <div class="formelement">
				                <label><wicket:ommessage key="158" /></label><select wicket:id="status"/>
				            </div>
			                <div class="formelement">
				                <label><wicket:ommessage key="169" /></label><select wicket:id="level_id"/>
				            </div>
				            <div class="formelement">
				                <label><wicket:ommessage key="142" /></label><textarea wicket:id="adresses.comment"/>
				            </div>
				            <div class="formelement">
				                <label><wicket:ommessage key="161" /></label><select wicket:id="organisation_users" style="height: 80px"/>
				            </div>
			            </fieldset>
			            <fieldset>
							<legend><wicket:ommessage key="1159" /></legend>
				            <div class="formelementradiobox">
					            <span wicket:id="community_settings" >
								    <input type="radio"/>
								    <input type="radio"/>
								    <input type="radio"/>
								</span>
				            </div>
				            <div class="formelement">
				                <label><wicket:ommessage key="1162" /></label><textarea wicket:id="userOffers"/>
				            </div>
				            <div class="formelement">
				                <label><wicket:ommessage key="1163" /></label><textarea wicket:id="userSearchs"/>
				            </div>
				        </fieldset>
			        </div>
		        </form>
			</div>
		</div>
	</wicket:panel>
</html>
