<?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>
		<div wicket:id="feedback"></div>
		<script type="text/javascript">
			function labelsInit() {
				$('#addLanguage').dialog({
					closeOnEscape: true
					, autoOpen: false
					, resizable: false
				});
				var documentHeight = $(document).height();
                $('#adminForm').height(documentHeight - 114);
                $('#adminTable').height(documentHeight - 172);
			};
		</script>
		<div class="adminPanel">
			<div class="adminPanelColumnTable">
				<form wicket:id="langForm" class="addLanguagePanel">
					<table>
						<tr>
							<td>
								<div class="formNewButton" wicket:message="title:362" 
									onclick="$('#addLanguage :text').val(''); $('#addLanguage').dialog('open');"><input type="button" title=""/></div>
							</td>
							<td>
								<div wicket:id="deleteLangBtn" class="formCancelButton" wicket:message="title:363"></div>
							</td>
							<td>
								<select wicket:id="language"></select>
							</td>
							<td>
								<span wicket:id="export" class="btn"><wicket:message key="360"/></span>
							</td>
							<td>
								<div class="fileupload fileupload-new" data-provides="fileupload" style="margin: 0;">
									<span class="btn btn-file ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"><span class="ui-button-text"><wicket:message key="387"/></span><input type="file" accept="text/xml" wicket:id="fileInput"/></span>
								</div>
								<span wicket:id="progress">[progressbar]</span>
							</td>
						</tr>
					</table>
				</form>
				<span wicket:id="navigator">[dataview navigator]</span>
				<table class="adminListTable">
					<thead>
						<tr>
							<th class="two_column_layout_column1 ui-widget-header"><span wicket:id="orderByName"></span><wicket:message key="351" /></th>
							<th class="two_column_layout_column2 ui-widget-header"><span wicket:id="orderByValue"></span><wicket:message key="352" /></th>
						</tr>
					</thead>	
				</table>
				<div class="tableWrapper" id="adminTable">
					<table class="adminListTable">
						<tbody wicket:id="listContainer" >
				    		<tr wicket:id="langList">
								<td class="two_column_layout_column1"><div class="three_column_layout_divcolumn2"><span wicket:id="name"></span></div></td>
								<td class="two_column_layout_column2"><div class="three_column_layout_divcolumn3"><span wicket:id="value"></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 class="ui-widget-content">
							<legend class="ui-widget-header"><wicket:message key="353" /></legend>
	                         <div class="formelement">
	                             <label><wicket:message key="354" /></label><input type="text" wicket:id="key"/>
							</div>
	                        <div class="formelement">
	                             <label><wicket:message key="355" /></label><textarea wicket:id="value"></textarea>
	                        </div> 
						</fieldset>
					</div>
				</form>
			</div>
		</div>
		<div id="addLanguage" wicket:message="title:364" style="display: none;">
			<form wicket:id="addLangForm">
				<div wicket:id="feedback"></div>
				<table>
					<tr>
						<td><wicket:message key="1422" /></td>
						<td><input type="text" wicket:id="iso"/></td>
					</tr>
					<tr>
						<td align="right" colspan="2"><input type="submit" wicket:id="add"/></td>
					</tr>
				</table>
			</form>
		</div>
	</wicket:panel>
</html>
