<!-- 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. -->

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
	xmlns:g='urn:import:com.google.gwt.user.client.ui'>
	<ui:style>
		.box {
			border: 1px solid #A3A3A3;
			border-radius: 4px;
			overflow: hidden;
			box-shadow: 0 0 2px #999;
			-o-box-shadow: 0 0 2px #999;
			-webkit-box-shadow: 0 0 2px #999;
			-moz-box-shadow: 0 0 2px #999;
			background: white;
		}
		
		.composeHeader {
			border-radius: 4px 4px 0 0;
			-webkit-box-shadow: 0 2px 3px 0 #999;
			-moz-box-shadow: 0 2px 3px 0 #999;
			box-shadow: 0 2px 3px 0 #999;
			border-bottom: 0;
			position: relative;
			padding: 3px 0;
			background: #f9f9f9;
			background: -moz-linear-gradient(top, #fff 0%, #f0f0f0 100%);
			background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff),
				color-stop(100%, #f0f0f0) );
			background: -o-linear-gradient(top, #fff 0%, #f0f0f0 100%);
			background: -ms-linear-gradient(top, #fff 0%, #f0f0f0 100%);
			background: linear-gradient(top, #fff 0%, #f0f0f0 100%);
			border-bottom: 1px solid #dfdfdf;
		}
		
		.composeHeader td {
			padding: 3px 8px;
		}
		
		.composeHeader td textarea,.composeHeader td input {
			width: 100%;
			height: 13px;
			resize: none;
			font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
			font-size: 11px;
		}
		
		.mailviewbottom {
			position: absolute;
			left: 0;
			bottom: 0;
			width: 100%;
			height: 26px;
		}
	</ui:style>
	<g:DockLayoutPanel ui:field="thisPanel" unit="PX"
		addStyleNames="{style.box}">
		<g:north size="135">
			<g:SimplePanel ui:field="composeHeaderContainer"
				addStyleNames="{style.composeHeader}">
			</g:SimplePanel>
		</g:north>
		<g:center>
			<g:SimpleLayoutPanel ui:field="composeContentContainer">
			</g:SimpleLayoutPanel>
		</g:center>
		<g:south size="28">
			<g:SimplePanel ui:field="composeStatusContainer"
				addStyleNames="{style.mailviewbottom}{style.box}" />
		</g:south>
	</g:DockLayoutPanel>
</ui:UiBinder>