You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ma...@apache.org on 2014/03/02 13:12:27 UTC

svn commit: r1573291 [5/8] - in /james/hupa/trunk: ./ client/ client/src/main/java/org/apache/hupa/ client/src/main/java/org/apache/hupa/client/ client/src/main/java/org/apache/hupa/client/activity/ client/src/main/java/org/apache/hupa/client/ioc/ clie...

Propchange: james/hupa/trunk/client/src/main/java/org/apache/hupa/public/images/hupa-spinning.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/public/images/linen.jpg
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/public/images/linen.jpg?rev=1573291&view=auto
==============================================================================
Binary file - no diff available.

Propchange: james/hupa/trunk/client/src/main/java/org/apache/hupa/public/images/linen.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/public/images/linen_login.jpg
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/public/images/linen_login.jpg?rev=1573291&view=auto
==============================================================================
Binary file - no diff available.

Propchange: james/hupa/trunk/client/src/main/java/org/apache/hupa/public/images/linen_login.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/public/images/listicons.png
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/public/images/listicons.png?rev=1573291&view=auto
==============================================================================
Binary file - no diff available.

Propchange: james/hupa/trunk/client/src/main/java/org/apache/hupa/public/images/listicons.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/public/images/login_shadow.png
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/public/images/login_shadow.png?rev=1573291&view=auto
==============================================================================
Binary file - no diff available.

Propchange: james/hupa/trunk/client/src/main/java/org/apache/hupa/public/images/login_shadow.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/public/images/splitter.png
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/public/images/splitter.png?rev=1573291&view=auto
==============================================================================
Binary file - no diff available.

Propchange: james/hupa/trunk/client/src/main/java/org/apache/hupa/public/images/splitter.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/public/images/vborder.png
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/public/images/vborder.png?rev=1573291&view=auto
==============================================================================
Binary file - no diff available.

Propchange: james/hupa/trunk/client/src/main/java/org/apache/hupa/public/images/vborder.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/public/styles.css
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/public/styles.css?rev=1573291&view=auto
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/public/styles.css (added)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/public/styles.css Sun Mar  2 12:12:22 2014
@@ -0,0 +1,2512 @@
+/**
+ * Roundcube webmail styles for skin "Larry"
+ *
+ * Copyright (c) 2012, The Roundcube Dev Team
+ * Screendesign by FLINT / B�ro f�r Gestaltung, bueroflint.com
+ *
+ * The contents are subject to the Creative Commons Attribution-ShareAlike
+ * License. It is allowed to copy, distribute, transmit and to adapt the work
+ * by keeping credits to the original autors in the README file.
+ * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
+ *
+ * $Id$
+ */
+body {
+	font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+	font-size: 11px;
+	color: #333;
+	background: url(images/linen.jpg) repeat #d1d5d8;
+	margin: 0;
+}
+
+body.noscroll { /* also avoids bounce effect in Chrome and Safari */
+	overflow: hidden;
+}
+
+a {
+	color: #0069a6;
+}
+
+a:visited {
+	color: #0186ba;
+}
+
+img {
+	border: 0;
+}
+
+input[type="text"],input[type="password"],textarea {
+	margin: 0; /* Safari by default adds a margin */
+	padding: 4px;
+	border: 1px solid #b2b2b2;
+	border-radius: 4px;
+	box-shadow: inset 0 0 2px 1px rgba(0, 0, 0, 0.1);
+	-moz-box-shadow: inset 0 0 2px 1px rgba(0, 0, 0, 0.1);
+	-webkit-box-shadow: inset 0 0 2px 1px rgba(0, 0, 0, 0.1);
+	-o-box-shadow: inset 0 0 2px 1px rgba(0, 0, 0, 0.1);
+}
+
+input[type="text"]:focus,input[type="password"]:focus,input.button:focus,textarea:focus
+	{
+	border-color: #4787b1;
+	box-shadow: 0 0 5px 2px rgba(71, 135, 177, 0.9);
+	-moz-box-shadow: 0 0 5px 2px rgba(71, 135, 177, 0.9);
+	-webkit-box-shadow: 0 0 5px 2px rgba(71, 135, 177, 0.9);
+	-o-box-shadow: 0 0 5px 2px rgba(71, 135, 177, 0.9);
+	outline: none;
+}
+
+input.placeholder,textarea.placeholder {
+	color: #aaa;
+}
+
+.bold {
+	font-weight: bold;
+}
+
+/*** buttons ***/
+input.button {
+	display: inline-block;
+	margin: 0 2px;
+	padding: 2px 5px;
+	color: #525252;
+	text-shadow: 0px 1px 1px #fff;
+	border: 1px solid #c0c0c0;
+	border-radius: 4px;
+	background: #f7f7f7;
+	background: -moz-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f9f9f9),
+		color-stop(100%, #e6e6e6) );
+	background: -o-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
+	background: -ms-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
+	background: linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
+	box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
+	-o-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
+	-webkit-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
+	-moz-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
+	text-decoration: none;
+	outline: none;
+}
+
+.formbuttons input.button {
+	color: #ddd;
+	font-size: 110%;
+	text-shadow: 0px 1px 1px #333;
+	padding: 4px 12px;
+	border-color: #465864;
+	border-radius: 5px;
+	background: #7a7b7d;
+	background: -moz-linear-gradient(top, #7b7b7b 0%, #606060 100%);
+	/* FF3.6+ */
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #7b7b7b),
+		color-stop(100%, #606060) ); /* Chrome,Safari4+ */
+	background: -o-linear-gradient(top, #7b7b7b 0%, #606060 100%);
+	/* Opera 11.10+ */
+	background: -ms-linear-gradient(top, #7b7b7b 0%, #606060 100%);
+	/* IE10+ */
+	background: linear-gradient(top, #7b7b7b 0%, #606060 100%); /* W3C */
+	box-shadow: 0 1px 1px 0 #ccc, inset 0 1px 0 0 #888;
+	-o-box-shadow: 0 1px 1px 0 #ccc, inset 0 1px 0 0 #888;
+	-webkit-box-shadow: 0 1px 1px 0 #ccc, inset 0 1px 0 0 #888;
+	-moz-box-shadow: 0 1px 1px 0 #ccc, inset 0 1px 0 0 #888;
+}
+
+.formbuttons input.button:hover,.formbuttons input.button:focus,input.button.mainaction:hover,input.button.mainaction:focus
+	{
+	color: #f2f2f2;
+	border-color: #465864;
+	box-shadow: 0 0 5px 2px rgba(71, 135, 177, 0.6), inset 0 1px 0 0 #888;
+	-moz-box-shadow: 0 0 5px 2px rgba(71, 135, 177, 0.6), inset 0 1px 0 0
+		#888;
+	-webkit-box-shadow: 0 0 5px 2px rgba(71, 135, 177, 0.6), inset 0 1px 0 0
+		#888;
+	-o-box-shadow: 0 0 5px 2px rgba(71, 135, 177, 0.6), inset 0 1px 0 0 #888;
+}
+
+.formbuttons input.button:active {
+	color: #fff;
+	background: -moz-linear-gradient(top, #5c5c5c 0%, #7b7b7b 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5c5c5c),
+		color-stop(100%, #7b7b7b) );
+	background: -o-linear-gradient(top, #5c5c5c 0%, #7b7b7b 100%);
+	background: -ms-linear-gradient(top, #5c5c5c 0%, #7b7b7b 100%);
+	background: linear-gradient(top, #5c5c5c 0%, #7b7b7b 100%);
+}
+
+input.button.mainaction {
+	color: #ededed;
+	text-shadow: 0px 1px 1px #333;
+	border-color: #1f262c;
+	background: #505050;
+	background: -moz-linear-gradient(top, #505050 0%, #2a2e31 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #505050),
+		color-stop(100%, #2a2e31) );
+	background: -o-linear-gradient(top, #505050 0%, #2a2e31 100%);
+	background: -ms-linear-gradient(top, #505050 0%, #2a2e31 100%);
+	background: linear-gradient(top, #505050 0%, #2a2e31 100%);
+	box-shadow: inset 0 1px 0 0 #777;
+	-moz-box-shadow: inset 0 1px 0 0 #777;
+	-webkit-box-shadow: inset 0 1px 0 0 #777;
+	-o-box-shadow: inset 0 1px 0 0 #777;
+}
+
+input.button.mainaction:active {
+	color: #fff;
+	background: #515151;
+	background: -moz-linear-gradient(top, #2a2e31 0%, #505050 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2a2e31),
+		color-stop(100%, #505050) );
+	background: -o-linear-gradient(top, #2a2e31 0%, #505050 100%);
+	background: -ms-linear-gradient(top, #2a2e31 0%, #505050 100%);
+	background: linear-gradient(top, #2a2e31 0%, #505050 100%);
+}
+
+input.button[disabled],input.button[disabled]:hover,input.button.mainaction[disabled]
+	{
+	color: #aaa !important;
+}
+
+input.mainaction {
+	font-weight: bold;
+}
+
+/** link buttons **/
+a.button {
+	display: inline-block;
+	margin: 0 2px;
+	padding: 2px 5px;
+	color: #525252;
+	text-shadow: 0px 1px 1px #fff;
+	border: 1px solid #c6c6c6;
+	border-radius: 4px;
+	background: #f7f7f7;
+	background: -moz-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f9f9f9),
+		color-stop(100%, #e6e6e6) );
+	background: -o-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
+	background: -ms-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
+	background: linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
+	box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
+	-o-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
+	-webkit-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
+	-moz-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
+	text-decoration: none;
+}
+
+a.button:focus,input.button:focus {
+	border-color: #4fadd5;
+	box-shadow: 0 0 2px 1px rgba(71, 135, 177, 0.6);
+	-moz-box-shadow: 0 0 2px 1px rgba(71, 135, 177, 0.6);
+	-webkit-box-shadow: 0 0 2px 1px rgba(71, 135, 177, 0.6);
+	-o-box-shadow: 0 0 2px 1px rgba(71, 135, 177, 0.6);
+	outline: none;
+}
+
+label.disabled,a.button.disabled {
+	color: #999;
+}
+
+a.button.disabled,input.button.disabled,input.button[disabled],a.button.disabled:hover,input.button.disabled:hover,input.button[disabled]:hover
+	{
+	border-color: #c6c6c6;
+	box-shadow: 0 1px 1px 0 rgba(160, 160, 160, 0.4);
+	-o-box-shadow: 0 1px 1px 0 rgba(160, 160, 160, 0.4);
+	-webkit-box-shadow: 0 1px 1px 0 rgba(160, 160, 160, 0.4);
+	-moz-box-shadow: 0 1px 1px 0 rgba(160, 160, 160, 0.4);
+}
+
+a.button.disabled span.inner {
+	opacity: 0.4;
+	filter: alpha(opacity =     40);
+}
+
+a.button.pressed,a.button:active,input.button:active {
+	background: #e6e6e6;
+	background: -moz-linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #e6e6e6),
+		color-stop(100%, #f9f9f9) );
+	background: -o-linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
+	background: -ms-linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
+	background: linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
+}
+
+.pagenav.dark a.button {
+	font-weight: bold;
+	border-color: #e6e6e6;
+	background: #d8d8d8;
+	background: -moz-linear-gradient(top, #d8d8d8 0%, #bababa 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #d8d8d8),
+		color-stop(100%, #bababa) );
+	background: -o-linear-gradient(top, #d8d8d8 0%, #bababa 100%);
+	background: -ms-linear-gradient(top, #d8d8d8 0%, #bababa 100%);
+	background: linear-gradient(top, #d8d8d8 0%, #bababa 100%);
+	box-shadow: 0 1px 1px 0 #999;
+	-o-box-shadow: 0 1px 1px 0 #999;
+	-webkit-box-shadow: 0 1px 1px 0 #999;
+	-moz-box-shadow: 0 1px 1px 0 #999;
+}
+
+.pagenav.dark a.button.pressed {
+	background: #bababa;
+	background: -moz-linear-gradient(top, #bababa 0%, #d8d8d8 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #bababa),
+		color-stop(100%, #d8d8d8) );
+	background: -o-linear-gradient(top, #bababa 0%, #d8d8d8 100%);
+	background: -ms-linear-gradient(top, #bababa 0%, #d8d8d8 100%);
+	background: linear-gradient(top, #bababa 0%, #d8d8d8 100%);
+}
+
+.pagenav a.button {
+	padding: 1px 3px;
+	height: 16px;
+	vertical-align: middle;
+	margin-bottom: 1px;
+}
+
+.pagenav a.button span.inner {
+	display: inline-block;
+	width: 16px;
+	height: 13px;
+	text-indent: 1000px;
+	overflow: hidden;
+	background: url(images/buttons.png) -6px -211px no-repeat;
+}
+
+.pagenav a.prevpage span.inner {
+	background-position: -7px -226px;
+}
+
+.pagenav a.nextpage span.inner {
+	background-position: -28px -226px;
+}
+
+.pagenav a.lastpage span.inner {
+	background-position: -28px -211px;
+}
+
+.pagenav a.pageup span.inner {
+	background-position: -7px -241px;
+}
+
+.pagenav a.pagedown span.inner {
+	background-position: -29px -241px;
+}
+
+.pagenav a.reply span.inner {
+	background-position: -7px -256px;
+}
+
+.pagenav a.forward span.inner {
+	background-position: -29px -256px;
+}
+
+.pagenav a.replyall span.inner {
+	background-position: -7px -271px;
+}
+
+.pagenav a.extwin span.inner {
+	background-position: -29px -271px;
+}
+
+.pagenav .countdisplay {
+	display: inline-block;
+	padding: 3px 1em 0 1em;
+	text-shadow: 0px 1px 1px #fff;
+	min-width: 16em;
+}
+
+.pagenavbuttons {
+	position: relative;
+	top: -2px;
+}
+
+a.iconbutton {
+	display: inline-block;
+	width: 24px;
+	height: 18px;
+	text-decoration: none;
+	text-indent: -5000px;
+	background: url(images/buttons.png) -1000px 0 no-repeat;
+}
+
+a.iconbutton.disabled {
+	opacity: 0.4;
+	filter: alpha(opacity =     40);
+	cursor: default;
+}
+
+a.iconbutton.searchoptions {
+	background-position: -2px -317px;
+}
+
+a.iconbutton.reset {
+	background-position: -25px -317px;
+}
+
+a.iconbutton.cancel {
+	background-position: -7px -377px;
+}
+
+a.iconlink {
+	display: inline-block;
+	color: #888;
+	text-decoration: none;
+	white-space: nowrap;
+	padding: 2px 8px 2px 20px;
+	background: url(images/buttons.png) -1000px 0 no-repeat;
+}
+
+a.iconlink:hover {
+	text-decoration: underline;
+}
+
+a.iconlink.delete {
+	background-position: -7px -337px;
+}
+
+a.iconlink.add {
+	background-position: -7px -357px;
+}
+
+a.iconlink.remove {
+	background-position: -7px -378px;
+}
+
+a.iconlink.cancel {
+	background-position: -7px -397px;
+}
+
+a.iconlink.edit {
+	background-position: -7px -417px;
+}
+
+a.iconlink.upload {
+	background-position: -6px -437px;
+}
+
+/*** message bar ***/
+#message div.loading,#message div.warning,#message div.error,#message div.notice,#message div.confirmation,#message-objects div.notice
+	{
+	color: #555;
+	font-weight: bold;
+	padding: 6px 30px 6px 25px;
+	display: inline-block;
+	white-space: nowrap;
+	background: url(images/messages.png) 0 5px no-repeat;
+	cursor: default;
+}
+
+#message div.warning {
+	color: #960;
+	background-position: 0 -86px;
+}
+
+#message div.error {
+	color: #cf2734;
+	background-position: 0 -55px;
+}
+
+#message div.confirmation {
+	color: #093;
+	background-position: 0 -25px;
+}
+
+#message div.loading {
+	background: url(images/ajaxloader.gif) 2px 6px no-repeat;
+}
+
+#message div a,#message div span {
+	padding-right: 0.5em;
+	text-decoration: none;
+}
+
+#message div a:hover {
+	text-decoration: underline;
+	cursor: pointer;
+}
+
+#message.statusbar {
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	right: 0;
+	height: 27px;
+	padding-left: 8px;
+	border-top: 1px solid #ddd;
+	border-radius: 0 0 4px 4px;
+	background: #eaeaea;
+	background: -moz-linear-gradient(top, #eaeaea 0%, #c8c8c8 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #eaeaea),
+		color-stop(100%, #c8c8c8) );
+	background: -o-linear-gradient(top, #eaeaea 0%, #c8c8c8 100%);
+	background: -ms-linear-gradient(top, #eaeaea 0%, #c8c8c8 100%);
+	background: linear-gradient(top, #eaeaea 0%, #c8c8c8 100%);
+	white-space: nowrap;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+.ui-dialog.error .ui-dialog-title,.ui-dialog.warning .ui-dialog-title,.ui-dialog.confirmation .ui-dialog-title
+	{
+	padding-left: 25px;
+	background: url(images/messages.png) 0 5px no-repeat;
+	text-shadow: 0 1px 1px #fff;
+}
+
+.ui-dialog.warning .ui-dialog-title {
+	color: #960;
+	background-position: 0 -90px;
+}
+
+.ui-dialog.error .ui-dialog-title {
+	color: #cf2734;
+	background-position: 0 -60px;
+}
+
+.ui-dialog.confirmation .ui-dialog-title {
+	color: #093;
+	background-position: 0 -30px;
+}
+
+.ui-dialog.popupmessage .ui-dialog-titlebar {
+	padding: 8px 1em 4px 1em;
+	background: #e3e3e3;
+	background: -moz-linear-gradient(top, #e3e3e3 0%, #cfcfcf 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #e3e3e3),
+		color-stop(100%, #cfcfcf) );
+	background: -o-linear-gradient(top, #e3e3e3 0%, #cfcfcf 100%);
+	background: -ms-linear-gradient(top, #e3e3e3 0%, #cfcfcf 100%);
+	background: linear-gradient(top, #e3e3e3 0%, #cfcfcf 100%);
+}
+
+.ui-dialog.popupmessage .ui-widget-content {
+	font-size: 12px;
+	background: #eee;
+	background: -moz-linear-gradient(top, #eee 0%, #dcdcdc 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #eee),
+		color-stop(100%, #dcdcdc) );
+	background: -o-linear-gradient(top, #eee 0%, #dcdcdc 100%);
+	background: -ms-linear-gradient(top, #eee 0%, #dcdcdc 100%);
+	background: linear-gradient(top, #eee 0%, #dcdcdc 100%);
+}
+
+/*** basic page layout ***/
+#topline {
+	height: 18px;
+	background: url(images/linen_header.jpg) repeat #666;
+	border-bottom: 1px solid #4f4f4f;
+	padding: 2px 0 2px 10px;
+	color: #aaa;
+}
+
+#topnav {
+	height: 46px;
+	margin-bottom: 10px;
+	padding: 0 0 0 10px;
+	background: #111;
+	background: -moz-linear-gradient(top, #404040 0%, #060606 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #404040),
+		color-stop(100%, #060606) );
+	background: -o-linear-gradient(top, #404040 0%, #060606 100%);
+	background: -ms-linear-gradient(top, #404040 0%, #060606 100%);
+	background: linear-gradient(top, #404040 0%, #060606 100%);
+}
+
+#topline a,#topnav a {
+	color: #eee;
+	text-decoration: none;
+}
+
+#topline a:hover {
+	text-decoration: underline;
+}
+
+#toplogo {
+	padding-top: 2px;
+}
+
+.topleft {
+	float: left;
+}
+
+.topright {
+	float: right;
+}
+
+.closelink {
+	display: inline-block;
+	padding: 2px 10px 2px 20px;
+}
+
+#topline span.username {
+	padding-right: 1em;
+}
+
+#topline .topleft a {
+	display: inline-block;
+	padding: 2px 0.8em 0 0;
+	color: #aaa;
+}
+
+#topline a.button-logout {
+	display: inline-block;
+	padding: 2px 10px 2px 20px;
+	background: url(images/buttons.png) -6px -193px no-repeat;
+	color: #fff;
+}
+
+/*** taskbar ***/
+#taskbar a {
+	display: inline-block;
+	height: 34px;
+	padding: 12px 10px 0 6px;
+}
+
+#taskbar a span.button-inner {
+	display: inline-block;
+	font-size: 110%;
+	font-weight: normal;
+	text-shadow: 0px 1px 1px black;
+	padding: 5px 0 0 34px;
+	height: 19px;
+	background: url(images/buttons.png) -1000px 0 no-repeat;
+}
+
+#taskbar a.button-selected {
+	color: #3cf;
+	background-color: #2c2c2c;
+}
+
+#taskbar a.button-mail span.button-inner {
+	background-position: 0 2px;
+}
+
+#taskbar a.button-mail:hover span.button-inner,#taskbar a.button-mail.button-selected span.button-inner
+	{
+	background-position: 0 -22px;
+}
+
+#taskbar a.button-addressbook span.button-inner {
+	background-position: 0 -48px;
+}
+
+#taskbar a.button-addressbook:hover span.button-inner,#taskbar a.button-addressbook.button-selected span.button-inner
+	{
+	background-position: 0 -72px;
+}
+
+#taskbar a.button-settings span.button-inner {
+	background-position: 0 -96px;
+}
+
+#taskbar a.button-settings:hover span.button-inner,#taskbar a.button-settings.button-selected span.button-inner
+	{
+	background-position: 0 -120px;
+}
+
+#taskbar a.button-calendar span.button-inner {
+	background-position: 0 -144px;
+}
+
+#taskbar a.button-calendar:hover span.button-inner,#taskbar a.button-calendar.button-selected span.button-inner
+	{
+	background-position: 0 -168px;
+}
+
+#mainscreen {
+	position: absolute;
+	top: 88px;
+	left: 10px;
+	right: 10px;
+	bottom: 20px;
+}
+
+#mainscreen.offset {
+	top: 130px;
+}
+
+#mainscreen .offset {
+	margin-top: 42px;
+}
+
+.uibox {
+	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: #fff;
+}
+
+.minwidth {
+	position: absolute;
+	top: 0;
+	left: 0;
+	bottom: 0;
+	width: 100%;
+	min-width: 1150px;
+}
+
+.scroller {
+	overflow: auto;
+}
+
+.readtext {
+	width: 42em;
+	padding: 12px;
+	font-size: 12px;
+}
+
+.readtext>h1,.readtext>h2,.readtext>h3 {
+	margin-top: 0;
+}
+
+.watermark {
+	background-image: url(images/watermark.jpg);
+	background-position: center;
+	background-repeat: no-repeat;
+}
+
+/*** lists ***/
+.listbox {
+	background: #d9ecf4;
+	overflow: hidden;
+}
+
+.listbox .scroller {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 100%;
+	bottom: 0;
+	overflow-x: hidden;
+	overflow-y: auto;
+}
+
+.listbox .scroller.withfooter {
+	bottom: 42px;
+}
+
+.listbox .boxtitle+.scroller {
+	top: 34px;
+}
+
+.boxtitle,.uibox .listing thead td {
+	font-size: 12px;
+	font-weight: bold;
+	padding: 10px 8px 3px 8px;
+	height: 20px; /* doesn't affect table-cells in FF */
+	margin: 0;
+	text-shadow: 0px 1px 1px #fff;
+	border-bottom: 1px solid #bbd3da;
+	white-space: nowrap;
+}
+
+.uibox .listing thead td {
+	padding-bottom: 8px;
+	height: auto;
+}
+
+.uibox .boxtitle,.uibox .listing thead td {
+	background: #b0ccd7;
+	color: #004458;
+	border-radius: 4px 4px 0 0;
+}
+
+.listbox .listitem,.listbox .tablink,.listing tbody td,.listing li {
+	display: block;
+	border-top: 1px solid #fff;
+	border-bottom: 1px solid #bbd3da;
+	cursor: default;
+	font-weight: normal;
+}
+
+.listbox .listitem a,.listbox .tablink a,.listing tbody td,.listing li a
+	{
+	display: block;
+	color: #376572;
+	text-shadow: 0px 1px 1px #fff;
+	text-decoration: none;
+	cursor: default;
+	padding: 6px 8px 2px 8px;
+	height: 17px; /* doesn't affect table-cells in FF */
+	white-space: nowrap;
+}
+
+.listing tbody td {
+	display: table-cell;
+	padding-bottom: 5px;
+	height: auto;
+	min-height: 14px;
+}
+
+.webkit .listing tbody td {
+	height: 14px;
+}
+
+.listbox .listitem.selected,.listbox .tablink.selected,.listbox .listitem.selected>a,.listbox .tablink.selected>a,.listing tbody tr.unfocused td,.listing tbody tr.selected td,.listing li.selected,.listing li.selected>a
+	{
+	color: #004458;
+	font-weight: bold;
+	background-color: #c7e3ef;
+}
+
+ul.listing {
+	display: block;
+	list-style: none;
+	margin: 0;
+	padding: 0;
+}
+
+ul.listing li {
+	background-color: #d9ecf4;
+}
+
+ul.listing li.droptarget,table.listing tr.droptarget td {
+	background-color: #e8e798;
+}
+
+table.listing,table.layout {
+	border: 0;
+	width: 100%;
+	border-spacing: 0;
+}
+
+table.layout td {
+	vertical-align: top;
+}
+
+.listbox .boxfooter {
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	width: 100%;
+	height: 42px;
+	border-top: 1px solid #ccdde4;
+	background: #d9ecf4;
+	-webkit-box-shadow: inset 0 1px 0 0 #fff;
+	-moz-box-shadow: inset 0 1px 0 0 #fff;
+	box-shadow: inset 0 1px 0 0 #fff;
+	white-space: nowrap;
+	overflow: hidden;
+}
+
+.uibox .boxfooter {
+	border-radius: 0 0 4px 4px;
+}
+
+.boxfooter .listbutton {
+	display: inline-block;
+	text-decoration: none;
+	width: 48px;
+	border-right: 1px solid #fff;
+	background: #c7e3ef;
+	padding: 3px 0;
+	margin-top: 1px;
+}
+
+.uibox .boxfooter .listbutton:first-child {
+	border-radius: 0 0 0 4px;
+}
+
+.boxfooter .listbutton .inner {
+	display: inline-block;
+	width: 48px;
+	height: 35px;
+	text-indent: -5000px;
+	background: url(images/buttons.png) -1000px 0 no-repeat;
+}
+
+.boxfooter .listbutton.add .inner {
+	background-position: 10px -1301px;
+}
+
+.boxfooter .listbutton.delete .inner {
+	background-position: 10px -1342px;
+}
+
+.boxfooter .listbutton.groupactions .inner {
+	background-position: 5px -1382px;
+}
+
+.boxfooter .listbutton.addto .inner {
+	background-position: 5px -1422px;
+}
+
+.boxfooter .listbutton.addcc .inner {
+	background-position: 5px -1462px;
+}
+
+.boxfooter .listbutton.addbcc {
+	width: 54px;
+}
+
+.boxfooter .listbutton.addbcc .inner {
+	width: 54px;
+	background-position: 2px -1502px;
+}
+
+.boxfooter .listbutton.removegroup .inner {
+	background-position: 5px -1540px;
+}
+
+.boxfooter .listbutton.disabled .inner {
+	opacity: 0.4;
+	filter: alpha(opacity =     40);
+}
+
+.boxfooter .countdisplay {
+	display: inline-block;
+	position: relative;
+	top: 10px;
+	color: #69929e;
+	padding: 3px 6px;
+}
+
+.boxpagenav {
+	position: absolute;
+	top: 10px;
+	right: 6px;
+	width: auto;
+}
+
+.boxpagenav a.icon {
+	display: inline-block;
+	padding: 1px 3px;
+	height: 13px;
+	width: 14px;
+	text-indent: 1000px;
+	vertical-align: bottom;
+	overflow: hidden;
+	background: url(images/buttons.png) -4px -286px no-repeat;
+}
+
+.boxpagenav a.icon.prevpage {
+	background-position: -4px -301px;
+}
+
+.boxpagenav a.icon.nextpage {
+	background-position: -28px -301px;
+}
+
+.boxpagenav a.icon.lastpage {
+	background-position: -28px -286px;
+}
+
+.boxpagenav a.icon.disabled {
+	opacity: 0.4;
+	filter: alpha(opacity =     40);
+}
+
+.centerbox {
+	width: 40em;
+	margin: 16px auto;
+}
+
+.errorbox {
+	width: 40em;
+	padding: 20px;
+}
+
+.errorbox h3 {
+	font-size: 16px;
+	margin-top: 0;
+}
+
+/*** Records table ***/
+table.records-table {
+	display: table;
+	width: 100%;
+	table-layout: fixed;
+	border-collapse: collapse;
+	border-spacing: 0;
+	border: 1px solid #bbd3da;
+}
+
+.boxlistcontent .records-table {
+	border: 0;
+}
+
+.records-table thead td {
+	color: #69939e;
+	font-size: 11px;
+	font-weight: bold;
+	background: #d6eaf3;
+	background: -moz-linear-gradient(left, #e3f2f6 0, #d6eaf3 14px, #d6eaf3 100%);
+	background: -webkit-gradient(linear, left top, right top, color-stop(0, #e3f2f6),
+		color-stop(8%, #d6eaf3), color-stop(100%, #d6eaf3) );
+	background: -o-linear-gradient(left, #e3f2f6 0, #d6eaf3 14px, #d6eaf3 100%);
+	background: -ms-linear-gradient(left, #e3f2f6 0, #d6eaf3 14px, #d6eaf3 100%);
+	background: linear-gradient(left, #e3f2f6 0, #d6eaf3 14px, #d6eaf3 100%);
+	border-left: 1px solid #bbd3da;
+	padding: 8px 7px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+.records-table.sortheader thead td {
+	padding: 0;
+}
+
+.records-table thead td a,.records-table thead td span {
+	display: block;
+	padding: 7px 7px;
+	color: #69939e;
+	text-decoration: none;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+.records-table tbody td {
+	padding: 2px 7px;
+	border-bottom: 1px solid #ddd;
+	border-left: 1px dotted #bbd3da;
+	white-space: nowrap;
+	cursor: default;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	background-color: #fff;
+}
+
+.records-table thead tr td:first-child,.records-table tbody tr td:first-child
+	{
+	border-left: 0;
+}
+
+.records-table tr.selected td {
+	color: #fff !important;
+	background: #019bc6;
+	background: -moz-linear-gradient(top, #019bc6 0%, #017cb4 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #019bc6),
+		color-stop(100%, #017cb4) );
+	background: -o-linear-gradient(top, #019bc6 0%, #017cb4 100%);
+	background: -ms-linear-gradient(top, #019bc6 0%, #017cb4 100%);
+	background: linear-gradient(top, #019bc6 0%, #017cb4 100%);
+}
+
+.records-table tr.selected td a,.records-table tr.selected td span {
+	color: #fff !important;
+}
+
+.records-table tr.unfocused td {
+	color: #fff !important;
+	background: #4db0d2 !important;
+}
+
+.records-table tr.unfocused td a,.records-table tr.unfocused td span {
+	color: #fff !important;
+}
+
+.records-table tr.deleted td,.records-table tr.deleted td a {
+	color: #ccc !important;
+}
+
+/*** iFrames ***/
+#aboutframe {
+	width: 97%;
+	height: 100%;
+	border: 0;
+	padding: 0;
+}
+
+body.iframe {
+	background: #fff;
+	margin: 38px 0 10px 0;
+}
+
+body.iframe.floatingbuttons {
+	margin-bottom: 40px;
+}
+
+body.iframe.fullheight {
+	margin: 0;
+}
+
+.contentbox .boxtitle,body.iframe .boxtitle {
+	color: #777;
+	background: #eee;
+	background: -moz-linear-gradient(top, #eee 0%, #dfdfdf 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #eee),
+		color-stop(100%, #dfdfdf) );
+	background: -o-linear-gradient(top, #eee 0%, #dfdfdf 100%);
+	background: -ms-linear-gradient(top, #eee 0%, #dfdfdf 100%);
+	background: linear-gradient(top, #eee 0%, #dfdfdf 100%);
+	border-bottom: 1px solid #ccc;
+}
+
+body.iframe .boxtitle {
+	position: fixed;
+	top: 0;
+	left: 0;
+	width: 100%;
+	z-index: 100;
+}
+
+body.iframe .footerleft.floating {
+	position: fixed;
+	left: 0;
+	bottom: 0;
+	width: 100%;
+	z-index: 110;
+	background: #fff;
+	padding-top: 8px;
+	padding-bottom: 12px;
+}
+
+body.iframe .footerleft.floating:before {
+	content: " ";
+	position: absolute;
+	top: -6px;
+	left: 0;
+	width: 100%;
+	height: 6px;
+	background: url(images/overflowshadow.png) top center no-repeat;
+}
+
+.boxcontent {
+	padding: 10px;
+}
+
+.contentbox .scroller {
+	position: absolute;
+	top: 34px;
+	left: 0;
+	right: 0;
+	bottom: 28px;
+	overflow: auto;
+}
+
+.iframebox {
+	position: absolute;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 28px;
+}
+
+.footerleft {
+	padding: 0 12px 4px 12px;
+}
+
+.propform fieldset {
+	margin-bottom: 20px;
+	border: 0;
+	padding: 0;
+}
+
+.propform fieldset legend {
+	display: block;
+	font-size: 14px;
+	font-weight: bold;
+	padding-bottom: 10px;
+	margin-bottom: 0;
+}
+
+.propform fieldset fieldset legend {
+	color: #666;
+	font-size: 12px;
+}
+
+fieldset.floating {
+	float: left;
+	margin-right: 10px;
+	margin-bottom: 10px;
+}
+
+table.propform {
+	width: 100%;
+	border-spacing: 0;
+	border-collapse: collapse;
+}
+
+ul.proplist li,table.propform td {
+	width: 80%;
+	padding: 4px 10px;
+	background: #eee;
+	border-bottom: 2px solid #fff;
+}
+
+table.propform td.title {
+	width: 20%;
+	color: #333;
+	padding-right: 20px;
+	white-space: nowrap;
+}
+
+table.propform .mceLayout td {
+	padding: 0;
+	border-bottom: 0;
+}
+
+ul.proplist {
+	list-style: none;
+	margin: 0;
+	padding: 0;
+}
+
+ul.proplist li {
+	width: auto;
+}
+
+#pluginbody {
+	position: absolute;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0;
+}
+
+/*** Login form ***/
+#login-form {
+	position: relative;
+	width: 580px;
+	margin: 20ex auto 2ex auto;
+}
+
+#login-form .box-inner {
+	width: 430px;
+	background: url(images/linen_login.jpg) top left no-repeat #5c5c5c;
+	margin: 0 50px;
+	padding: 10px 24px 24px 24px;
+	border: 1px solid #333;
+	border-radius: 5px;
+	box-shadow: inset 0 0 1px #ccc;
+	-o-box-shadow: inset 0 0 1px #ccc;
+	-webkit-box-shadow: inset 0 0 1px #ccc;
+	-moz-box-shadow: inset 0 0 1px #ccc;
+}
+
+#login-form .box-bottom {
+	background: url(images/login_shadow.png) top center no-repeat;
+	margin-top: -3px;
+	padding-top: 10px;
+}
+
+#login-form td.input {
+	width: 80%;
+	padding: 8px;
+}
+
+#login-form input[type="text"],#login-form input[type="password"] {
+	width: 100%;
+	border-color: #666;
+}
+
+#login-form input.button {
+	color: #444;
+	text-shadow: 0px 1px 1px #fff;
+	border-color: #f9f9f9;
+	background: #f9f9f9;
+	background: -moz-linear-gradient(top, #f9f9f9 0%, #e2e2e2 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f9f9f9),
+		color-stop(100%, #e2e2e2) );
+	background: -o-linear-gradient(top, #f9f9f9 0%, #e2e2e2 100%);
+	background: -ms-linear-gradient(top, #f9f9f9 0%, #e2e2e2 100%);
+	background: linear-gradient(top, #f9f9f9 0%, #e2e2e2 100%);
+	box-shadow: inset 0 1px 0 0 #fff;
+	-moz-box-shadow: inset 0 1px 0 0 #fff;
+	-webkit-box-shadow: inset 0 1px 0 0 #fff;
+	-o-box-shadow: inset 0 1px 0 0 #fff;
+}
+
+#login-form input.button:hover,#login-form input.button:focus {
+	box-shadow: 0 0 5px 2px rgba(71, 135, 177, 0.9), inset 0 1px 0 0 #fff;
+	-moz-box-shadow: 0 0 5px 2px rgba(71, 135, 177, 0.9), inset 0 1px 0 0
+		#fff;
+	-webkit-box-shadow: 0 0 5px 2px rgba(71, 135, 177, 0.9), inset 0 1px 0 0
+		#fff;
+	-o-box-shadow: 0 0 5px 2px rgba(71, 135, 177, 0.9), inset 0 1px 0 0 #fff;
+}
+
+#login-form input.button:active {
+	color: #333;
+	background: -moz-linear-gradient(top, #dcdcdc 0%, #f9f9f9 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #dcdcdc),
+		color-stop(100%, #f9f9f9) );
+	background: -o-linear-gradient(top, #dcdcdc 0%, #f9f9f9 100%);
+	background: -ms-linear-gradient(top, #dcdcdc 0%, #f9f9f9 100%);
+	background: linear-gradient(top, #dcdcdc 0%, #f9f9f9 100%);
+}
+
+#login-form form table {
+	width: 98%;
+}
+
+#login-form td.title {
+	width: 20%;
+	white-space: nowrap;
+	color: #cecece;
+	text-shadow: 0px 1px 1px black;
+	text-align: right;
+	padding-right: 1em;
+}
+
+#login-form p.formbuttons {
+	margin-top: 2em;
+	text-align: center;
+}
+
+#login-form #logo {
+	margin-bottom: 20px;
+}
+
+#login-form #message {
+	min-height: 40px;
+	padding: 5px 25px;
+	text-align: center;
+}
+
+#login-form #message div {
+	display: inline-block;
+	padding-right: 0;
+}
+
+#bottomline {
+	font-size: 90%;
+	text-align: center;
+	margin-top: 2em;
+}
+
+/*** quicksearch **/
+#quicksearchbar {
+	position: absolute;
+	right: 1px;
+	top: 0;
+	width: 240px;
+}
+
+#quicksearchbar input {
+	width: 176px;
+	margin: 0;
+	margin-top: 7px;
+	padding: 3px 30px 3px 34px;
+	height: 18px;
+	background: #f1f1f1;
+	border-color: #ababab;
+	font-weight: bold;
+	font-size: 11px;
+}
+
+#quicksearchbar #searchmenulink {
+	position: absolute;
+	top: 12px;
+	left: 6px;
+}
+
+#quicksearchbar #searchreset {
+	position: absolute;
+	top: 11px;
+	right: 1px;
+}
+
+/*** toolbar ***/
+.toolbar .spacer {
+	display: inline-block;
+	width: 24px;
+	height: 40px;
+	padding: 0;
+}
+
+.toolbar a.button {
+	text-align: center;
+	font-size: 10px;
+	color: #555;
+	min-width: 50px;
+	max-width: 75px;
+	height: 13px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	padding: 28px 2px 0 2px;
+	text-shadow: 0px 1px 1px #eee;
+	box-shadow: none;
+	-moz-box-shadow: none;
+	-webkit-box-shadow: none;
+	-o-box-shadow: none;
+	background: url(images/buttons.png) -100px 0 no-repeat transparent;
+	border: 0;
+}
+
+.toolbar a.button.disabled {
+	opacity: 0.4;
+	filter: alpha(opacity =     40);
+}
+
+.dropbutton {
+	display: inline-block;
+	position: relative;
+}
+
+.dropbutton .dropbuttontip {
+	display: block;
+	position: absolute;
+	right: 0;
+	top: 0;
+	height: 42px;
+	width: 18px;
+	background: url(images/buttons.png) 0 -1255px no-repeat;
+	cursor: pointer;
+}
+
+.dropbutton .dropbuttontip:hover {
+	background-position: -26px -1255px;
+}
+
+.dropbutton a.button.disabled+.dropbuttontip {
+	opacity: 0.5;
+	filter: alpha(opacity =     50);
+}
+
+.dropbutton a.button.disabled+.dropbuttontip:hover {
+	background-position: 0 -1255px;
+}
+
+.dropbutton a.button {
+	margin-left: 0;
+	padding-left: 0;
+	margin-right: 0;
+	padding-right: 0;
+}
+
+.toolbar a.button.back {
+	background-position: 0 -1216px;
+}
+
+.toolbar a.button.checkmail {
+	background-position: center -1176px;
+}
+
+.toolbar a.button.compose {
+	background-position: center -530px;
+}
+
+.toolbar a.button.reply {
+	background-position: center -570px;
+}
+
+.toolbar a.button.reply-all {
+	min-width: 64px;
+	background-position: left -610px;
+}
+
+.toolbar a.button.forward {
+	min-width: 64px;
+	background-position: left -650px;
+}
+
+.toolbar a.button.delete {
+	background-position: center -690px;
+}
+
+.toolbar a.button.archive {
+	background-position: center -730px;
+}
+
+.toolbar a.button.junk {
+	background-position: center -770px;
+}
+
+.toolbar a.button.print {
+	background-position: center -810px;
+}
+
+.toolbar a.button.markmessage {
+	background-position: center -1094px;
+}
+
+.toolbar a.button.more {
+	background-position: center -850px;
+}
+
+.toolbar a.button.attach {
+	background-position: center -890px;
+}
+
+.toolbar a.button.spellcheck {
+	min-width: 64px;
+	background-position: left -930px;
+}
+
+.toolbar a.button.spellcheck.selected {
+	background-position: left -1580px;
+	color: #1978a1;
+}
+
+.toolbar a.button.insertsig {
+	background-position: center -1135px;
+}
+
+.toolbar a.button.search {
+	background-position: center -970px;
+}
+
+.toolbar a.button.import {
+	background-position: center -1012px;
+}
+
+.toolbar a.button.export {
+	background-position: center -1054px;
+}
+
+a.menuselector {
+	display: inline-block;
+	border: 1px solid #ababab;
+	border-radius: 4px;
+	background: #f8f8f8;
+	background: -moz-linear-gradient(top, #f8f8f8 0%, #dddddd 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8),
+		color-stop(100%, #dddddd) );
+	background: -o-linear-gradient(top, #f8f8f8 0%, #dddddd 100%);
+	background: -ms-linear-gradient(top, #f9f9f9 0%, #dddddd 100%);
+	background: linear-gradient(top, #f8f8f8 0%, #dddddd 100%);
+	text-decoration: none;
+	color: #333;
+	cursor: pointer;
+	white-space: nowrap;
+}
+
+a.menuselector .handle {
+	display: inline-block;
+	padding: 0 32px 0 6px;
+	height: 20px;
+	line-height: 19px;
+	text-shadow: 0px 1px 1px #fff;
+	background: url(images/selector.png) right center no-repeat;
+	border-radius: 4px;
+}
+
+a.menuselector:active {
+	background: #dddddd;
+	background: -moz-linear-gradient(top, #dddddd 0%, #f8f8f8 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #dddddd),
+		color-stop(100%, #f8f8f8) );
+	background: -o-linear-gradient(top, #dddddd 0%, #f8f8f8 100%);
+	background: -ms-linear-gradient(top, #dddddd 0%, #f8f8f8 100%);
+	background: linear-gradient(top, #dddddd 0%, #f8f8f8 100%);
+	text-decoration: none;
+}
+
+select.decorated {
+	position: relative;
+	z-index: 10;
+	opacity: 0;
+	height: 22px;
+	cursor: pointer;
+	filter: alpha(opacity =     0);
+	-khtml-appearance: none;
+	-webkit-appearance: none;
+}
+
+html.opera select.decorated {
+	opacity: 1;
+}
+
+select.decorated option {
+	color: #fff;
+	background: #444;
+	border: 0;
+	border-top: 1px solid #5a5a5a;
+	border-bottom: 1px solid #333;
+	text-shadow: 0px 1px 1px #333;
+	padding: 4px 6px;
+	outline: none;
+}
+
+/*** quota indicator ***/
+#quotadisplay {
+	left: 6px;
+	font-size: 12px;
+	font-weight: bold;
+	text-shadow: 0px 1px 1px #fff;
+	padding-left: 30px;
+	height: 18px;
+	background: url(images/quota.png) -100px 0 no-repeat;
+}
+
+/*** popup menus ***/
+.popupmenu,#rcmKSearchpane {
+	display: none;
+	position: absolute;
+	top: 32px;
+	left: 90px;
+	width: auto;
+	background: #444;
+	border: 1px solid #999;
+	z-index: 240;
+	border-radius: 4px;
+	box-shadow: 0 2px 6px 0 #333;
+	-moz-box-shadow: 0 2px 6px 0 #333;
+	-webkit-box-shadow: 0 2px 6px 0 #333;
+	-o-box-shadow: 0 2px 6px 0 #333;
+}
+
+.popupmenu.dropdown {
+	border-radius: 0 0 4px 4px;
+	border-top: 0;
+}
+
+ul.toolbarmenu,#rcmKSearchpane ul {
+	margin: 0;
+	padding: 0;
+	list-style: none;
+}
+
+.googie_list td,ul.toolbarmenu li,#rcmKSearchpane ul li {
+	color: #fff;
+	white-space: nowrap;
+	min-width: 130px;
+	margin: 0;
+	border-top: 1px solid #5a5a5a;
+	border-bottom: 1px solid #333;
+}
+
+.googie_list tr:first-child td,ul.toolbarmenu li:first-child,select.decorated option:first-child
+	{
+	border-top: 0;
+}
+
+.googie_list tr:last-child td,ul.toolbarmenu li:last-child,select.decorated option:last-child
+	{
+	border-bottom: 0;
+}
+
+.googie_list td span,ul.toolbarmenu li a {
+	display: block;
+	color: #666;
+	text-shadow: 0px 1px 1px #333;
+	text-decoration: none;
+	min-height: 14px;
+	padding: 6px 10px 6px 10px;
+}
+
+.googie_list td span {
+	padding: 3px 10px;
+}
+
+.googie_list td span,ul.toolbarmenu li a.active {
+	color: #fff;
+	cursor: default;
+}
+
+.googie_list td.googie_list_onhover,ul.toolbarmenu li a.active:hover,#rcmKSearchpane ul li.selected,select.decorated option:hover,select.decorated option[selected='selected']
+	{
+	background-color: #00aad6;
+	background: -moz-linear-gradient(top, #00aad6 0%, #008fc9 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #00aad6),
+		color-stop(100%, #008fc9) );
+	background: -o-linear-gradient(top, #00aad6 0%, #008fc9 100%);
+	background: -ms-linear-gradient(top, #00aad6 0%, #008fc9 100%);
+	background: linear-gradient(top, #00aad6 0%, #008fc9 100%);
+}
+
+ul.toolbarmenu.iconized li a,ul.toolbarmenu.selectable li a {
+	padding-left: 30px;
+}
+
+ul.toolbarmenu.selectable li a.selected {
+	background: url(images/messages.png) 4px -27px no-repeat;
+}
+
+ul.toolbarmenu li label {
+	display: block;
+	color: #fff;
+	padding: 4px 8px;
+	text-shadow: 0px 1px 1px #333;
+}
+
+ul.toolbarmenu li a.icon {
+	color: #eee;
+	padding: 2px 6px;
+}
+
+ul.toolbarmenu li span.icon {
+	display: block;
+	min-height: 14px;
+	padding: 4px 4px 1px 24px;
+	height: 17px;
+	background-image: url(images/listicons.png);
+	background-position: -100px 0;
+	background-repeat: no-repeat;
+	opacity: 0.2;
+	filter: alpha(opacity =     20);
+}
+
+ul.toolbarmenu li a.active span.icon {
+	opacity: 0.99;
+	filter: alpha(opacity =     100);
+}
+
+ul.toolbarmenu li span.read {
+	background-position: 0 -1220px;
+}
+
+ul.toolbarmenu li span.unread {
+	background-position: 0 -1196px;
+}
+
+ul.toolbarmenu li span.flagged {
+	background-position: 0 -1244px;
+}
+
+ul.toolbarmenu li span.unflagged {
+	background-position: 0 -1268px;
+}
+
+ul.toolbarmenu li span.mail {
+	background-position: 0 -1293px;
+}
+
+ul.toolbarmenu li span.list {
+	background-position: 0 -1317px;
+}
+
+ul.toolbarmenu li span.invert {
+	background-position: 0 -1340px;
+}
+
+ul.toolbarmenu li span.cross {
+	background-position: 0 -1365px;
+}
+
+ul.toolbarmenu li span.print {
+	background-position: 0 -1436px;
+}
+
+ul.toolbarmenu li span.download {
+	background-position: 0 -1412px;
+}
+
+ul.toolbarmenu li span.edit {
+	background-position: 0 -1388px;
+}
+
+ul.toolbarmenu li span.viewsource {
+	background-position: 0 -1460px;
+}
+
+ul.toolbarmenu li span.extwin {
+	background-position: 0 -1484px;
+}
+
+ul.toolbarmenu li span.conversation {
+	background-position: 0 -1532px;
+}
+
+#rcmKSearchpane {
+	border-radius: 0 0 4px 4px;
+	border-top: 0;
+}
+
+#rcmKSearchpane ul li {
+	text-shadow: 0px 1px 1px #333;
+	text-decoration: none;
+	min-height: 14px;
+	padding: 6px 10px 6px 10px;
+	border: 0;
+	cursor: default;
+}
+
+.popupdialog {
+	display: none;
+	padding: 10px;
+}
+
+.popupdialog .formbuttons {
+	margin: 20px 0 4px 0;
+}
+
+.ui-dialog .prompt input {
+	display: block;
+	margin: 8px 0;
+}
+
+.hint {
+	margin: 4px 0;
+	color: #999;
+	text-shadow: 0px 1px 1px #fff;
+}
+
+.splitter {
+	user-select: none;
+	-moz-user-select: none;
+	-khtml-user-select: none;
+	position: absolute;
+	background: url(images/splitter.png) center no-repeat;
+}
+
+.splitter-h {
+	height: 10px;
+	width: 100%;
+	cursor: n-resize;
+	cursor: row-resize;
+	background-position: center 0;
+}
+
+.splitter-v {
+	width: 10px;
+	height: 100%;
+	cursor: e-resize;
+	cursor: col-resize;
+	background-position: 0 center;
+}
+
+#rcmdraglayer {
+	min-width: 260px;
+	width: auto !important;
+	width: 260px;
+	padding: 6px 8px;
+	background: #444;
+	border: 1px solid #555;
+	border-radius: 4px;
+	box-shadow: 0 2px 6px 0 #333;
+	-moz-box-shadow: 0 2px 6px 0 #333;
+	-webkit-box-shadow: 0 2px 6px 0 #333;
+	-o-box-shadow: 0 2px 6px 0 #333;
+	z-index: 250;
+	color: #ccc;
+	white-space: nowrap;
+	opacity: 0.92;
+	filter: alpha(opacity =     92);
+	text-shadow: 0px 1px 1px #333;
+}
+
+#rcmdraglayer:after {
+	content: "";
+	position: absolute;
+	top: 6px;
+	left: -6px;
+	border-style: solid;
+	border-width: 6px 6px 6px 0;
+	border-color: transparent #444;
+	/* reduce the damage in FF3.0 */
+	display: block;
+	width: 0;
+	z-index: 251;
+}
+
+.draglayercopy:before {
+	position: absolute;
+	bottom: -6px;
+	left: -6px;
+	content: " ";
+	width: 16px;
+	height: 16px;
+	background: url(images/buttons.png) -7px -358px no-repeat;
+	z-index: 255;
+}
+
+/*** attachment list ***/
+.attachmentslist {
+	list-style: none;
+	margin: 0;
+	padding: 0;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+.attachmentslist li {
+	display: block;
+	position: relative;
+	background: url(images/filetypes.png) 0 0 no-repeat;
+	margin-bottom: 1px;
+}
+
+.attachmentslist li.pdf {
+	background-position: 0 -26px;
+}
+
+.attachmentslist li.doc,.attachmentslist li.docx,.attachmentslist li.msword
+	{
+	background-position: 0 -52px;
+}
+
+.attachmentslist li.odt {
+	background-position: 0 -78px;
+}
+
+.attachmentslist li.xls,.attachmentslist li.xlsx,.attachmentslist li.msexcel
+	{
+	background-position: 0 -104px;
+}
+
+.attachmentslist li.ods {
+	background-position: 0 -130px;
+}
+
+.attachmentslist li.zip,.attachmentslist li.gz {
+	background-position: 0 -156px;
+}
+
+.attachmentslist li.rar {
+	background-position: 0 -182px;
+}
+
+.attachmentslist li.image {
+	background-position: 0 -208px;
+}
+
+.attachmentslist li.jpg,.attachmentslist li.jpeg {
+	background-position: 0 -234px;
+}
+
+.attachmentslist li.png {
+	background-position: 0 -260px;
+}
+
+.attachmentslist li.m4p {
+	background-position: 0 -286px;
+}
+
+.attachmentslist li.mp3,.attachmentslist li.audio {
+	background-position: 0 -312px;
+}
+
+.attachmentslist li.video {
+	background-position: 0 -338px;
+}
+
+.attachmentslist li.txt,.attachmentslist li.text {
+	background-position: 0 -416px;
+}
+
+.attachmentslist li.ics,.attachmentslist li.calendar {
+	background-position: 0 -364px;
+}
+
+.attachmentslist li.vcard {
+	background-position: 0 -390px;
+}
+
+.attachmentslist li.html {
+	background-position: 0 -442px;
+}
+
+.attachmentslist li a,#compose-attachments ul li {
+	display: block;
+	color: #333;
+	font-weight: bold;
+	padding: 8px 4px 3px 30px;
+	text-shadow: 0px 1px 1px #fff;
+	text-decoration: none;
+	white-space: nowrap;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+#compose-attachments ul li {
+	padding-right: 28px;
+}
+
+.attachmentslist li a:hover {
+	text-decoration: underline;
+}
+
+.attachmentslist li.uploading {
+	background: url(images/ajaxloader.gif) 2px 6px no-repeat;
+}
+
+.attachmentslist li a.delete,.attachmentslist li a.cancelupload {
+	position: absolute;
+	top: 6px;
+	right: 0;
+	width: 24px;
+	height: 18px;
+	padding: 0;
+	text-decoration: none;
+	text-indent: -5000px;
+	background: url(images/buttons.png) -7px -337px no-repeat;
+}
+
+.attachmentslist li a.cancelupload {
+	background-position: -7px -377px;
+}
+
+/*** fieldset tabs ***/
+.tabsbar {
+	margin-bottom: 12px;
+	padding-top: 15px;
+	height: 27px;
+	white-space: nowrap;
+}
+
+.tabsbar .tablink {
+	padding: 15px 1px 15px 0;
+	background: #f8f8f8;
+	background: -moz-linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8),
+		color-stop(50%, #d3d3d3), color-stop(100%, #f8f8f8) );
+	background: -webkit-linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%);
+	background: -o-linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%);
+	background: -ms-linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%);
+	background: linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%);
+}
+
+.tabsbar .tablink:last-child {
+	background: none;
+}
+
+.tabsbar .tablink:last-child a {
+	border-right: 0;
+}
+
+.tabsbar .tablink a {
+	padding: 15px;
+	color: #999;
+	font-size: 12px;
+	font-weight: bold;
+	text-decoration: none;
+	background: #fff;
+	border-right: 1px solid #fafafa;
+}
+
+.tabsbar .tablink.selected a {
+	color: #004458;
+	background: #f6f6f6;
+	background: -moz-linear-gradient(top, #fff 40%, #efefef 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(40%, #fff),
+		color-stop(100%, #efefef) );
+	background: -o-linear-gradient(top, #fff 40%, #efefef 100%);
+	background: -ms-linear-gradient(top, #fff 40%, #efefef 100%);
+	background: linear-gradient(top, #fff 40%, #efefef 100%);
+}
+
+fieldset.tab {
+	border: 0;
+	padding: 0;
+	margin-left: 0;
+}
+
+.gwt-SplitLayoutPanel-HDragger {
+	user-select: none;
+	-moz-user-select: none;
+	-khtml-user-select: none;
+	position: absolute;
+	background: url(images/splitter.png) center no-repeat;
+	width: 10px;
+	height: 100%;
+	cursor: e-resize;
+	cursor: col-resize;
+	background-position: 0 center;
+}
+
+.gwt-SplitLayoutPanel-VDragger {
+    user-select: none;
+    -moz-user-select: none;
+    -khtml-user-select: none;
+    position: absolute;
+    background: url(images/splitter.png) center no-repeat;
+    height: 10px;
+    width: 100%;
+    cursor: n-resize;
+    cursor: row-resize;
+    background-position: center 0;
+}
+
+.GWTUpld,table.GWTUpld td {
+	font-family: Verdana, Arial;
+	font-size: 12px;
+}
+
+.GWTUpld form,.GWTUpld .upld-form-elements {
+	padding: 0px;
+	vertical-align: top;
+}
+
+.GWTUpld .upld-status {
+	font-family: arial;
+	font-size: 12px;
+	font-weight: bold;
+}
+
+.GWTUpld .upld-status div.cancel {
+	background: url(images/buttons.png) -7px -337px no-repeat;
+	width: 24px;
+	height: 18px;
+	cursor: pointer;
+	margin-top: 1px;
+}
+
+* html .GWTUpld .upld-status div.cancel {
+	width: 14px;
+	height: 10px;
+	margin-top: 2px;
+}
+
+.GWTUpld .upld-status .filename {
+	overflow: hidden;
+	white-space: nowrap;
+	margin-left: 8px;
+	margin-right: 11px;
+	height: 100%;
+	font-size: 12px;
+	width: 105px;
+	text-overflow: ellipsis;
+}
+
+.GWTUpld .upld-status .status {
+	padding-left: 8px;
+	white-space: nowrap;
+	height: 100%;
+	font-size: 12px;
+}
+
+.GWTUpld .upld-status .status-success {
+	color: green;
+}
+
+.GWTUpld .upld-status .status-error,.GWTUpld .upld-status .status-canceled
+	{
+	color: red;
+}
+
+.GWTUpld .prgbar-back {
+	background: #ffffff none repeat scroll 0 0;
+	border: 1px solid #999999;
+	height: 10px;
+	overflow: hidden;
+	padding: 1px;
+	width: 100px;
+	float: left;
+}
+
+* html .GWTUpld .prgbar-back {
+	height: 12px;
+	margin-top: 2px;
+}
+
+.GWTUpld .prgbar-done {
+	background: #d4e4ff none repeat scroll 0 0;
+	font-size: 0;
+	height: 100%;
+	float: left;
+}
+
+.GWTUpld .prgbar-msg {
+	position: absolute;
+	z-index: 9;
+	font-size: 9px;
+	font-weight: normal;
+	margin-left: 3px;
+}
+
+* html .GWTUpld .prgbar-msg {
+	top: 0px;
+	left: 4px;
+}
+
+.GWTUpld .changed {
+	color: red;
+	font-weight: bold;
+	text-decoration: blink;
+}
+
+.gwt-PopupPanel .GWTUpld {
+	border: 2px groove #F6A828;
+	padding: 10px;
+	background: #bf984c;
+	-moz-border-radius-bottomleft: 6px;
+	-moz-border-radius-bottomright: 6px;
+	-moz-border-radius-topleft: 6px;
+	-moz-border-radius-topright: 6px;
+}
+
+.GWTUpld .DecoratedFileUpload {
+	margin-right: 5px;
+}
+
+.GWTUpld .DecoratedFileUpload .gwt-Button,.GWTUpld .DecoratedFileUpload .gwt-Anchor,.GWTUpld .DecoratedFileUpload .gwt-Label
+	{
+	white-space: nowrap;
+	font-size: 10px;
+}
+
+.GWTUpld .gwt-Button,.GWTUpld .gwt-FileUpload {
+	font-size: 10px;
+	min-height: 15px;
+}
+
+.GWTUpld .DecoratedFileUpload .gwt-Anchor,.GWTUpld .DecoratedFileUpload .gwt-Label
+	{
+	color: blue;
+	text-decoration: underline;
+	cursor: pointer;
+}
+
+.GWTUpld .gwt-Button:HOVER,.GWTUpld .DecoratedFileUpload .gwt-Button-over,.GWTUpld .DecoratedFileUpload .gwt-Anchor-over,.GWTUpld .DecoratedFileUpload .gwt-Label-over
+	{
+	color: #af6b29;
+}
+
+.GWTUpld .DecoratedFileUpload-disabled .gwt-Button,.GWTUpld .DecoratedFileUpload-disabled .gwt-Anchor,.GWTUpld .DecoratedFileUpload-disabled .gwt-Label
+	{
+	color: grey;
+}
+
+.gwt-PopupPanelGlass {
+	background-color: #d4e4ff;
+	opacity: 0.3;
+	filter: alpha(opacity =     30);
+}
+.hupa-attachment .hupa-hyperlink {
+    padding-right: 5px;
+    color: #0d0eb0;
+    text-decoration: underline;
+    cursor: pointer;
+    width: 155px;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    overflow: hidden;
+}
+
+.gwt-SuggestBox {
+  padding: 5px 4px;
+  border: 1px solid #ccc;
+  border-top: 1px solid #999;
+  font-size: 100%;
+  font-family: Arial Unicode MS, Arial, sans-serif;
+}
+
+.gwt-SuggestBoxPopup {
+}
+
+.gwt-SuggestBoxPopup .item {
+  padding: 2px 6px;
+  color: #000;
+  cursor: default;
+  font-size: 110%;
+}
+.gwt-SuggestBoxPopup .item-selected {
+  background: #d9ecf4;
+}
+.gwt-SuggestBoxPopup .suggestPopupContent {
+  background: white;
+}
+.gwt-SuggestBoxPopup .suggestPopupTopCenter {
+  border-top: 1px solid #bbb;
+}
+.gwt-SuggestBoxPopup .suggestPopupBottomCenter {
+  border-bottom: 1px solid #bbb;
+}
+.gwt-SuggestBoxPopup .suggestPopupTopCenterInner,
+.gwt-SuggestBoxPopup .suggestPopupBottomCenterInner {
+  height: 1px;
+  line-height: 1px;
+}
+.gwt-SuggestBoxPopup .suggestPopupMiddleLeft {
+  border-left: 1px solid #bbb;
+}
+.gwt-SuggestBoxPopup .suggestPopupMiddleRight {
+  border-right: 1px solid #bbb;
+}
+.gwt-SuggestBoxPopup .suggestPopupMiddleLeftInner,
+.gwt-SuggestBoxPopup .suggestPopupMiddleRightInner {
+  width: 1px;
+  line-height: 1px;
+}
+.gwt-SuggestBoxPopup .suggestPopupTopLeftInner {
+  width: 0px;
+  height: 0px;
+  zoom: 1;  
+}
+.gwt-SuggestBoxPopup .suggestPopupTopRightInner {
+  width: 0px;
+  height: 0px;
+  zoom: 1;
+}
+.gwt-SuggestBoxPopup .suggestPopupBottomLeftInner {
+  width: 0px;
+  height: 0px;
+  zoom: 1;
+}
+.gwt-SuggestBoxPopup .suggestPopupBottomRightInner {
+  width: 0px;
+  height: 0px;
+  zoom: 1;
+}
+.gwt-SuggestBoxPopup .suggestPopupTopLeft {
+  width:5px;
+  height:5px;
+}
+.gwt-SuggestBoxPopup .suggestPopupTopRight {
+  width:5px;
+  height:5px;
+}
+.gwt-SuggestBoxPopup .suggestPopupBottomLeft {
+  width:5px;
+  height:5px;
+}
+.gwt-SuggestBoxPopup .suggestPopupBottomRight {
+  width:5px;
+  height:5px;
+}
+* html .gwt-SuggestBoxPopup .suggestPopupTopLeftInner {
+  width: 0px;
+  height: 0px;
+  overflow: hidden;
+}
+* html .gwt-SuggestBoxPopup .suggestPopupTopRightInner {
+  width: 0px;
+  height: 0px;
+  overflow: hidden;
+}
+* html .gwt-SuggestBoxPopup .suggestPopupBottomLeftInner {
+  width: 0px;
+  height: 0px;
+  overflow: hidden;
+}
+* html .gwt-SuggestBoxPopup .suggestPopupBottomRightInner {
+  width: 0px;
+  height: 0px;
+  overflow: hidden;
+}
+
+
+#settings-sections {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 220px;
+    bottom: 0;
+}
+
+#pluginbody,
+#settings-right {
+    position: absolute;
+    top: 0;
+    left: 232px;
+    right: 0;
+    bottom: 0;
+}
+
+#sectionslist {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 260px;
+    bottom: 0;
+}
+
+#preferences-box {
+    position: absolute;
+    top: 0;
+    left: 272px;
+    right: 0;
+    bottom: 0;
+}
+
+#preferences-frame {
+    border: 0;
+    border-radius: 4px 4px 0 0;
+}
+
+#sections-table tbody td.section,
+#settings-sections span.listitem a,
+#settings-sections span.tablink a {
+    padding-left: 36px;
+    background-image: url(images/listicons.png);
+    background-position: -100px 0;
+    background-repeat: no-repeat;
+}
+
+/* note: support span.tablink because this is used by plugins */
+#settings-sections span.listitem a,
+#settings-sections span.tablink a {
+    background-position: 6px -862px;
+}
+
+#settings-sections span.selected a,
+#settings-sections span.tablink.selected a {
+    background-position: 6px -887px;
+}
+
+#settings-sections span.preferences a {
+    background-position: 6px -431px;
+}
+
+#settings-sections span.preferences.selected a {
+    background-position: 6px -455px;
+}
+
+#settings-sections span.folders a,
+#sections-table #rcmrowfolders td.section {
+    background-position: 6px 2px;
+}
+
+#settings-sections span.folders.selected a,
+#sections-table #rcmrowfolders.selected td.section {
+    background-position: 6px -22px;
+}
+
+#settings-sections span.identities a {
+    background-position: 6px -478px;
+}
+
+#settings-sections span.identities.selected a {
+    background-position: 6px -502px;
+}
+
+#settings-sections span.filter a {
+    background-position: 6px -1746px;
+}
+
+#settings-sections span.filter.selected a {
+    background-position: 6px -1770px;
+}
+
+#settings-sections span.password a {
+    background-position: 6px -1795px;
+}
+
+#settings-sections span.password.selected a {
+    background-position: 6px -1819px;
+}
+
+#sections-table #rcmrowgeneral td.section {
+    background-position: 6px -573px;
+}
+
+#sections-table #rcmrowgeneral.selected td.section {
+    background-position: 6px -598px;
+}
+
+#sections-table #rcmrowmailbox td.section {
+    background-position: 6px -621px;
+}
+
+#sections-table #rcmrowmailbox.selected td.section {
+    background-position: 6px -646px;
+}
+
+#sections-table #rcmrowcompose td.section {
+    background-position: 6px -670px;
+}
+
+#sections-table #rcmrowcompose.selected td.section {
+    background-position: 6px -695px;
+}
+
+#sections-table #rcmrowmailview td.section {
+    background-position: 6px -718px;
+}
+
+#sections-table #rcmrowmailview.selected td.section {
+    background-position: 6px -742px;
+}
+
+#sections-table #rcmrowaddressbook td.section {
+    background-position: 6px -766px;
+}
+
+#sections-table #rcmrowaddressbook.selected td.section {
+    background-position: 6px -791px;
+}
+
+#sections-table #rcmrowserver td.section {
+    background-position: 6px -814px;
+}
+
+#sections-table #rcmrowserver.selected td.section {
+    background-position: 6px -838px;
+}
+
+#sections-table #rcmrowcalendar td.section {
+    background-position: 6px -526px;
+}
+
+#sections-table #rcmrowcalendar.selected td.section {
+    background-position: 6px -550px;
+}
+
+#folderslist,
+#identitieslist {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 260px;
+    bottom: 0;
+}
+
+#identities-table {
+    width: 100%;
+    table-layout: fixed;
+}
+
+#identities-table tbody td.mail {
+    width: 100%;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+
+#folder-details,
+#identity-details {
+    position: absolute;
+    top: 0;
+    left: 272px;
+    right: 0;
+    bottom: 0;
+}
+
+#subscription-table {
+    table-layout: fixed;
+}
+
+#subscription-table tr.root td {
+    font-size: 5%;
+    height: 5px;
+    padding: 2px;
+}
+
+#subscription-table td.name {
+    width: 85%;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+
+#subscription-table td.subscribed {
+    min-width: 30px;
+    padding: 3px 12px 3px 3px;
+    text-align: right;
+}
+
+#pluginlist td.version {
+    width: 5em;
+}
+
+.webkit #pluginlist td.version {
+    width: 6em;
+}
+
+#pluginlist td.license,
+#pluginlist td.source {
+    width: 8em;
+}
+
+.webkit #pluginlist td.license,
+.webkit #pluginlist td.source {
+    width: 9em;
+}
+
+.hupa-dialog {
+    box-shadow: 0 1px 4px grey;
+    border-radius: 8px; 
+    background-color: #AFD561;
+    padding: 10px 10px 0px 10px;
+}
+
+.hupa-dialog table {
+    max-width: 400px;
+}
+
+.hupa-dialog tr:last-child td {
+   padding: 8px;
+   text-align: center;
+}
+
+.hupa-dialog button {
+	margin: 10px 3px 0px 3px;
+	font-size: 1em;
+	font-family: helvetica;
+}
+

Added: james/hupa/trunk/client/src/test/java/org/apache/hupa/client/HupaClientTestBase.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/test/java/org/apache/hupa/client/HupaClientTestBase.java?rev=1573291&view=auto
==============================================================================
--- james/hupa/trunk/client/src/test/java/org/apache/hupa/client/HupaClientTestBase.java (added)
+++ james/hupa/trunk/client/src/test/java/org/apache/hupa/client/HupaClientTestBase.java Sun Mar  2 12:12:22 2014
@@ -0,0 +1,52 @@
+package org.apache.hupa.client;
+
+
+import javax.servlet.http.HttpSession;
+
+import org.apache.commons.logging.Log;
+import org.apache.hupa.client.ioc.GinClientTestModule;
+import org.apache.hupa.server.FileItemRegistry;
+import org.apache.hupa.server.IMAPStoreCache;
+import org.apache.hupa.server.guice.GuiceJunitRunner;
+import org.apache.hupa.server.guice.GuiceJunitRunner.GuiceModules;
+import org.apache.hupa.server.guice.GuiceServerTestModule;
+import org.apache.hupa.server.utils.SessionUtils;
+import org.apache.hupa.shared.SConsts;
+import org.apache.hupa.shared.domain.User;
+import org.apache.log4j.Level;
+import org.apache.log4j.LogManager;
+import org.junit.Before;
+import org.junit.runner.RunWith;
+
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import com.sun.mail.imap.IMAPStore;
+
+/**
+ * @author manolo
+ */
+@RunWith(GuiceJunitRunner.class)
+@GuiceModules({GuiceServerTestModule.class, GinClientTestModule.class})
+public abstract class HupaClientTestBase  {
+  
+  static {
+    LogManager.getRootLogger().setLevel(Level.INFO);
+  }
+
+  @Inject protected Log logger;
+  @Inject protected Injector injector;
+  @Inject protected HttpSession httpSession;
+  @Inject protected User testUser;
+  @Inject protected IMAPStoreCache storeCache;
+  protected IMAPStore store;
+  protected FileItemRegistry registry;
+
+  @Before
+  public void setup() throws Exception {
+      SessionUtils.cleanSessionAttributes(httpSession);
+      store = storeCache.get(testUser);
+      httpSession.setAttribute(SConsts.USER_SESS_ATTR, testUser);
+      registry = SessionUtils.getSessionRegistry(logger, httpSession);
+  }
+  
+}

Added: james/hupa/trunk/client/src/test/java/org/apache/hupa/client/ioc/GinClientTestModule.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/test/java/org/apache/hupa/client/ioc/GinClientTestModule.java?rev=1573291&view=auto
==============================================================================
--- james/hupa/trunk/client/src/test/java/org/apache/hupa/client/ioc/GinClientTestModule.java (added)
+++ james/hupa/trunk/client/src/test/java/org/apache/hupa/client/ioc/GinClientTestModule.java Sun Mar  2 12:12:22 2014
@@ -0,0 +1,81 @@
+/****************************************************************
+ * 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.                                           *
+ ****************************************************************/
+
+package org.apache.hupa.client.ioc;
+
+import java.util.logging.Logger;
+
+import org.apache.hupa.client.rf.HupaRequestFactory;
+import org.apache.hupa.server.ioc.IocRfServiceDecorator;
+import org.apache.hupa.shared.storage.AppCache;
+import org.apache.hupa.shared.storage.AppCacheMemory;
+import org.apache.hupa.shared.storage.AppSerializer;
+
+import com.google.gwt.event.shared.EventBus;
+import com.google.gwt.event.shared.SimpleEventBus;
+import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
+import com.google.inject.Singleton;
+import com.google.web.bindery.autobean.shared.AutoBeanFactory;
+import com.google.web.bindery.autobean.vm.AutoBeanFactorySource;
+import com.google.web.bindery.requestfactory.server.ExceptionHandler;
+import com.google.web.bindery.requestfactory.server.ServiceLayer;
+import com.google.web.bindery.requestfactory.server.SimpleRequestProcessor;
+import com.google.web.bindery.requestfactory.server.testing.InProcessRequestTransport;
+import com.google.web.bindery.requestfactory.shared.RequestFactory;
+import com.google.web.bindery.requestfactory.shared.ServerFailure;
+import com.google.web.bindery.requestfactory.vm.RequestFactorySource;
+
+public class GinClientTestModule extends AbstractModule {
+    
+	public static Logger logger = Logger.getLogger(GinClientTestModule.class.getName());
+
+	@Override
+	protected void configure() {
+		bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class);
+		bind(RequestFactory.class).to(HupaRequestFactory.class).in(Singleton.class);
+	}
+
+	@Provides
+	@Singleton
+	HupaRequestFactory getRequestFactory(EventBus eventBus, IocRfServiceDecorator decorator) {
+		HupaRequestFactory requestFactory = RequestFactorySource.create(HupaRequestFactory.class);
+	    SimpleRequestProcessor processor = new SimpleRequestProcessor(ServiceLayer.create(decorator));
+	    processor.setExceptionHandler(new ExceptionHandler() {
+	        public ServerFailure createServerFailure(Throwable throwable) {
+	          throwable.printStackTrace();
+	          return null;
+	        }
+	      });
+		requestFactory.initialize(eventBus, new InProcessRequestTransport(processor));
+		return requestFactory;
+	}
+	
+    @Provides
+    @Singleton
+	AutoBeanFactory getAutoBeanFactory() {
+        return AutoBeanFactorySource.create(AutoBeanFactory.class);
+	}
+    
+    @Provides
+    @Singleton
+    AppCache getAppCache(AppSerializer serializer) {
+        return new AppCacheMemory(serializer);
+    }
+}

Modified: james/hupa/trunk/client/src/test/java/org/apache/hupa/client/mock/MockMessageSendDisplay.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/test/java/org/apache/hupa/client/mock/MockMessageSendDisplay.java?rev=1573291&r1=1573290&r2=1573291&view=diff
==============================================================================
--- james/hupa/trunk/client/src/test/java/org/apache/hupa/client/mock/MockMessageSendDisplay.java (original)
+++ james/hupa/trunk/client/src/test/java/org/apache/hupa/client/mock/MockMessageSendDisplay.java Sun Mar  2 12:12:22 2014
@@ -26,6 +26,8 @@ import org.apache.hupa.shared.rpc.Contac
 import org.apache.hupa.widgets.ui.HasEnable;
 
 import com.google.gwt.event.dom.client.HasClickHandlers;
+import com.google.gwt.event.dom.client.HasFocusHandlers;
+import com.google.gwt.user.client.TakesValue;
 import com.google.gwt.user.client.ui.Focusable;
 import com.google.gwt.user.client.ui.HasHTML;
 import com.google.gwt.user.client.ui.HasText;
@@ -278,4 +280,10 @@ public class MockMessageSendDisplay impl
 		return null;
 	}
 
+	@Override
+	public HasFocusHandlers getAttachButton() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
 }

Added: james/hupa/trunk/client/src/test/java/org/apache/hupa/client/storage/HupaStorageTest.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/test/java/org/apache/hupa/client/storage/HupaStorageTest.java?rev=1573291&view=auto
==============================================================================
--- james/hupa/trunk/client/src/test/java/org/apache/hupa/client/storage/HupaStorageTest.java (added)
+++ james/hupa/trunk/client/src/test/java/org/apache/hupa/client/storage/HupaStorageTest.java Sun Mar  2 12:12:22 2014
@@ -0,0 +1,88 @@
+package org.apache.hupa.client.storage;
+
+import java.util.List;
+
+import junit.framework.Assert;
+
+import org.apache.hupa.client.HupaClientTestBase;
+import org.apache.hupa.shared.domain.ImapFolder;
+import org.apache.hupa.shared.events.LoginEvent;
+import org.apache.hupa.shared.storage.AppCache;
+import org.junit.Test;
+
+import com.google.gwt.event.shared.EventBus;
+import com.google.gwt.query.client.Function;
+import com.google.inject.Inject;
+
+public class HupaStorageTest extends HupaClientTestBase {
+    
+    @Inject HupaStorage storage;
+    @Inject AppCache cache;
+    @Inject EventBus eventBus;
+    
+    @Test
+    public void testUserPrefix() {
+        String uk1 = cache.enCrypt("manuel.carrasco.m@gmail.com");
+        System.out.println(uk1);
+        String uk2 = cache.enCrypt("manuel.carrasco.m@outlook.com");
+        System.out.println(uk2);
+//        cache.setPrefix(uk.substring(0, 6) + "_");
+    }
+    
+    @Test
+    public void testFolderList() {
+        storage.gettingFolders().done(new Function() {
+            public void f() {
+                List<ImapFolder> folderNodes = arguments(0);
+                Assert.assertEquals(4, folderNodes.size());
+            }
+        });
+        Assert.assertEquals(5,cache.getLength());
+
+        cache.removeItem("Mock-Sent");
+        storage.gettingFolders().done(new Function() {
+            public void f() {
+                List<ImapFolder> folderNodes = arguments(0);
+                Assert.assertEquals(3, folderNodes.size());
+            }
+        });
+        cache.setExpires("fld", 0);
+        Assert.assertEquals(0,cache.getLength());
+
+        storage.gettingFolders().done(new Function() {
+            public void f() {
+                List<ImapFolder> folderNodes = arguments(0);
+                Assert.assertEquals(4, folderNodes.size());
+            }
+        });
+        
+        Assert.assertEquals(5,cache.getLength());
+        
+        eventBus.fireEvent(new LoginEvent(testUser));
+        storage.gettingFolders().done(new Function() {
+            public void f() {
+                List<ImapFolder> folderNodes = arguments(0);
+                Assert.assertEquals(4, folderNodes.size());
+            }
+        });
+
+        Assert.assertEquals(10,cache.getLength());
+    }
+
+    @Test
+    public void testEncrypt() {
+        storage.gettingFolders().done(new Function() {
+            public void f() {
+                List<ImapFolder> folderNodes = arguments(0);
+                Assert.assertEquals(4, folderNodes.size());
+                Assert.assertEquals(5,cache.getLength());
+                cache.storeProxiesCrypt("fld", folderNodes);
+                Assert.assertEquals(5,cache.getLength());
+                folderNodes = cache.restoreProxiesCrypt(ImapFolder.class, "fld");
+                Assert.assertEquals(4, folderNodes.size());
+                folderNodes = cache.restoreProxies(ImapFolder.class, "fld");
+                Assert.assertEquals(0, folderNodes.size());
+            }
+        });
+    }
+}

Added: james/hupa/trunk/hupa/src/main/java/com/google/web/bindery/requestfactory/server/ResolverServiceLayer.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/hupa/src/main/java/com/google/web/bindery/requestfactory/server/ResolverServiceLayer.java?rev=1573291&view=auto
==============================================================================
--- james/hupa/trunk/hupa/src/main/java/com/google/web/bindery/requestfactory/server/ResolverServiceLayer.java (added)
+++ james/hupa/trunk/hupa/src/main/java/com/google/web/bindery/requestfactory/server/ResolverServiceLayer.java Sun Mar  2 12:12:22 2014
@@ -0,0 +1,263 @@
+/*
+ * Copyright 2010 Google Inc.
+ * 
+ * Licensed 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.
+ */
+package com.google.web.bindery.requestfactory.server;
+
+import com.google.gwt.dev.asm.Type;
+import com.google.web.bindery.autobean.vm.impl.TypeUtils;
+import com.google.web.bindery.requestfactory.shared.BaseProxy;
+import com.google.web.bindery.requestfactory.shared.ProxyFor;
+import com.google.web.bindery.requestfactory.shared.ProxyForName;
+import com.google.web.bindery.requestfactory.shared.RequestContext;
+import com.google.web.bindery.requestfactory.shared.RequestFactory;
+import com.google.web.bindery.requestfactory.shared.Service;
+import com.google.web.bindery.requestfactory.shared.ServiceName;
+import com.google.web.bindery.requestfactory.vm.impl.Deobfuscator;
+import com.google.web.bindery.requestfactory.vm.impl.OperationKey;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Implements all of the resolution methods in ServiceLayer.
+ */
+final class ResolverServiceLayer extends ServiceLayerDecorator {
+
+  private static Deobfuscator deobfuscator;
+
+  private static synchronized void updateDeobfuscator(Class<? extends RequestFactory> clazz,
+      ClassLoader resolveClassesWith) {
+    Deobfuscator.Builder builder = Deobfuscator.Builder.load(clazz, resolveClassesWith);
+    if (deobfuscator != null) {
+      builder.merge(deobfuscator);
+    }
+    deobfuscator = builder.build();
+  }
+
+  @Override
+  public ClassLoader getDomainClassLoader() {
+    return Thread.currentThread().getContextClassLoader();
+  }
+
+  @Override
+  public Class<? extends BaseProxy> resolveClass(String typeToken) {
+    String deobfuscated = deobfuscator.getTypeFromToken(typeToken);
+    if (deobfuscated == null) {
+      die(null, "No type for token %s", typeToken);
+    }
+
+    return forName(deobfuscated).asSubclass(BaseProxy.class);
+  }
+
+  @Override
+  public <T> Class<? extends T> resolveClientType(Class<?> domainClass, Class<T> clientClass,
+      boolean required) {
+    if (List.class.isAssignableFrom(domainClass)) {
+      return List.class.asSubclass(clientClass);
+    }
+    if (Set.class.isAssignableFrom(domainClass)) {
+      return Set.class.asSubclass(clientClass);
+    }
+    if (TypeUtils.isValueType(domainClass)) {
+      return domainClass.asSubclass(clientClass);
+    }
+    
+    List<Class<?>> classes = new ArrayList<Class<?>>();
+    Class<?> clazz = domainClass;
+    while (clazz != null) {
+      classes.add(clazz);
+      clazz = clazz.getSuperclass();
+    }
+    classes.addAll(Arrays.asList(domainClass.getInterfaces()));
+    
+    for (Class<?> toSearch : classes) {
+      List<String> clientTypes = deobfuscator.getClientProxies(toSearch.getName());
+      if (clientTypes != null) {
+        for (String clientType : clientTypes) {
+          Class<?> proxy = forName(clientType);
+          if (clientClass.isAssignableFrom(proxy)) {
+            return proxy.asSubclass(clientClass);
+          }
+        }
+      }
+    }
+    
+    if (required) {
+      die(null, "The domain type %s cannot be sent to the client", domainClass.getCanonicalName());
+    }
+    return null;
+  }
+
+  @Override
+  public Class<?> resolveDomainClass(Class<?> clazz) {
+    if (List.class.equals(clazz)) {
+      return List.class;
+    } else if (Set.class.equals(clazz)) {
+      return Set.class;
+    } else if (BaseProxy.class.isAssignableFrom(clazz)) {
+      ProxyFor pf = clazz.getAnnotation(ProxyFor.class);
+      if (pf != null) {
+        return pf.value();
+      }
+      ProxyForName pfn = clazz.getAnnotation(ProxyForName.class);
+      if (pfn != null) {
+        Class<?> toReturn = forName(pfn.value());
+        return toReturn;
+      }
+    }
+    return die(null, "Could not resolve a domain type for client type %s", clazz.getCanonicalName());
+  }
+
+  @Override
+  public Method resolveDomainMethod(String operation) {
+    /*
+     * The validator has already determined the mapping from the RequsetContext
+     * method to a domain method signature. We'll reuse this calculation instead
+     * of iterating over all methods.
+     */
+    String domainDescriptor = deobfuscator.getDomainMethodDescriptor(operation);
+
+    if (domainDescriptor == null) {
+      return die(null, "No domain method descriptor is mapped to operation %s", operation);
+    }
+
+    Class<?>[] domainArgs = getArgumentTypes(domainDescriptor);
+    Class<? extends RequestContext> requestContext = getTop().resolveRequestContext(operation);
+    Class<?> serviceImplementation = getTop().resolveServiceClass(requestContext);
+
+    // Request<FooProxy> someMethod(int a, double b, FooProxy c);
+    Method requestContextMethod = getTop().resolveRequestContextMethod(operation);
+
+    Throwable ex;
+    try {
+      return serviceImplementation.getMethod(requestContextMethod.getName(), domainArgs);
+    } catch (SecurityException e) {
+      ex = e;
+    } catch (NoSuchMethodException e) {
+      ex = e;
+    }
+
+    return die(ex,
+        "Could not find method in implementation %s matching descriptor %s for operation %s",
+        serviceImplementation.getCanonicalName(), domainDescriptor, operation);
+  }
+
+  @Override
+  public Class<? extends RequestContext> resolveRequestContext(String operation) {
+    String requestContextClass = deobfuscator.getRequestContext(operation);
+    if (requestContextClass == null) {
+      die(null, "No RequestContext for operation %s", operation);
+    }
+    return forName(requestContextClass).asSubclass(RequestContext.class);
+  }
+
+  @Override
+  public Method resolveRequestContextMethod(String operation) {
+    Class<?> searchIn = getTop().resolveRequestContext(operation);
+    String methodName = deobfuscator.getRequestContextMethodName(operation);
+    String descriptor = deobfuscator.getRequestContextMethodDescriptor(operation);
+    Class<?>[] params = getArgumentTypes(descriptor);
+    try {
+      return searchIn.getMethod(methodName, params);
+    } catch (NoSuchMethodException ex) {
+      return report("Could not locate %s operation %s", RequestContext.class.getSimpleName(),
+          operation);
+    }
+  }
+
+  @Override
+  public Class<? extends RequestFactory> resolveRequestFactory(String binaryName) {
+    Class<? extends RequestFactory> toReturn = forName(binaryName).asSubclass(RequestFactory.class);
+    updateDeobfuscator(toReturn, getTop().getDomainClassLoader());
+    return toReturn;
+  }
+
+  @Override
+  public Class<?> resolveServiceClass(Class<? extends RequestContext> requestContextClass) {
+    Class<?> searchIn = null;
+    Service s = requestContextClass.getAnnotation(Service.class);
+    if (s != null) {
+      searchIn = s.value();
+    }
+    ServiceName sn = requestContextClass.getAnnotation(ServiceName.class);
+    if (sn != null) {
+      searchIn = forName(sn.value());
+    }
+    if (searchIn == null) {
+      die(null, "The %s type %s did not specify a service type", RequestContext.class
+          .getSimpleName(), requestContextClass.getCanonicalName());
+    }
+    return searchIn;
+  }
+
+  @Override
+  public String resolveTypeToken(Class<? extends BaseProxy> clazz) {
+    return OperationKey.hash(clazz.getName());
+  }
+
+  /**
+   * Call {@link Class#forName(String)} and report any errors through
+   * {@link #die()}.
+   */
+  private Class<?> forName(String name) {
+    try {
+      return Class.forName(name, false, getTop().getDomainClassLoader());
+    } catch (ClassNotFoundException e) {
+      return die(e, "Could not locate class %s", name);
+    }
+  }
+
+  private Class<?>[] getArgumentTypes(String descriptor) {
+    Type[] types = Type.getArgumentTypes(descriptor);
+    Class<?>[] params = new Class<?>[types.length];
+    for (int i = 0, j = types.length; i < j; i++) {
+      params[i] = getClass(types[i]);
+    }
+    return params;
+  }
+
+  private Class<?> getClass(Type type) {
+    switch (type.getSort()) {
+      case Type.BOOLEAN:
+        return boolean.class;
+      case Type.BYTE:
+        return byte.class;
+      case Type.CHAR:
+        return char.class;
+      case Type.DOUBLE:
+        return double.class;
+      case Type.FLOAT:
+        return float.class;
+      case Type.INT:
+        return int.class;
+      case Type.LONG:
+        return long.class;
+      case Type.OBJECT:
+        return forName(type.getClassName());
+      case Type.SHORT:
+        return short.class;
+      case Type.VOID:
+        return void.class;
+      case Type.ARRAY:
+        return die(null, "Unsupported Type used in operation descriptor %s", type.getDescriptor());
+      default:
+        // Error in this switch statement
+        return die(null, "Unhandled Type: %s", type.getDescriptor());
+    }
+  }
+}

Added: james/hupa/trunk/hupa/src/main/java/org/apache/hupa/HupaDev.gwt.xml
URL: http://svn.apache.org/viewvc/james/hupa/trunk/hupa/src/main/java/org/apache/hupa/HupaDev.gwt.xml?rev=1573291&view=auto
==============================================================================
--- james/hupa/trunk/hupa/src/main/java/org/apache/hupa/HupaDev.gwt.xml (added)
+++ james/hupa/trunk/hupa/src/main/java/org/apache/hupa/HupaDev.gwt.xml Sun Mar  2 12:12:22 2014
@@ -0,0 +1,30 @@
+<?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.
+-->
+<module rename-to='hupa'>
+  <inherits name='org.apache.hupa.Hupa'/> 
+
+  <!-- This reduces a lot the size of compiled javascript-->
+  <set-property name="compiler.stackMode" value="emulated" />
+
+  <set-configuration-property name="locale.useragent" value="Y"/>
+
+  <set-property name="user.agent" value="gecko1_8,safari"/>
+
+  <set-configuration-property name="CssResource.style" value="pretty"/>
+  
+  <entry-point class='org.apache.hupa.client.Hupa'/>  
+</module>

Added: james/hupa/trunk/hupa/src/main/java/org/apache/hupa/HupaProd.gwt.xml
URL: http://svn.apache.org/viewvc/james/hupa/trunk/hupa/src/main/java/org/apache/hupa/HupaProd.gwt.xml?rev=1573291&view=auto
==============================================================================
--- james/hupa/trunk/hupa/src/main/java/org/apache/hupa/HupaProd.gwt.xml (added)
+++ james/hupa/trunk/hupa/src/main/java/org/apache/hupa/HupaProd.gwt.xml Sun Mar  2 12:12:22 2014
@@ -0,0 +1,37 @@
+<?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.
+-->
+<module rename-to='hupa'>
+  <inherits name='org.apache.hupa.Hupa'/> 
+
+  <!-- Provide gzipped version of generated js, so as it will sent compressed by jetty -->
+  <inherits name="com.google.gwt.precompress.Precompress"/>
+
+  <!-- This reduces a lot the size of compiled javascript-->
+  <set-property name="compiler.stackMode" value="strip" />
+
+  <!-- Set the languages to compile -->
+  <!-- It multiplies the number of permutations -->
+  <!-- <extend-property name="locale" values="es,de"/>  -->
+  <set-configuration-property name="locale.useragent" value="Y"/>
+
+  <!-- Compile for all browsers -->
+  <set-property name="user.agent" value="gecko1_8,safari,opera,ie6,ie8,ie9"/>
+
+  <set-configuration-property name="CssResource.style" value="obf"/>
+  
+  <entry-point class='org.apache.hupa.client.Hupa'/>  
+</module>

Added: james/hupa/trunk/hupa/src/main/java/org/apache/hupa/client/Hupa.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/hupa/src/main/java/org/apache/hupa/client/Hupa.java?rev=1573291&view=auto
==============================================================================
--- james/hupa/trunk/hupa/src/main/java/org/apache/hupa/client/Hupa.java (added)
+++ james/hupa/trunk/hupa/src/main/java/org/apache/hupa/client/Hupa.java Sun Mar  2 12:12:22 2014
@@ -0,0 +1,73 @@
+/****************************************************************
+ * 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.                                           *
+ ****************************************************************/
+
+package org.apache.hupa.client;
+
+import org.apache.hupa.client.ioc.AppGinModule.AppGinjector;
+import org.apache.hupa.client.ioc.AppInjector;
+
+import com.google.gwt.core.client.EntryPoint;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.GWT.UncaughtExceptionHandler;
+import com.google.gwt.query.client.GQuery;
+import com.google.gwt.user.client.DOM;
+
+public class Hupa implements EntryPoint {
+
+	@Override
+	public void onModuleLoad() {
+		handleExceptionsAsync();
+		initApp();
+	}
+	
+	protected void initApp() {
+        DOM.getElementById("loading").removeFromParent();
+        createInjector().getHupaController();
+        bindEvents();
+	}
+	
+	protected void bindEvents() {
+	}
+
+	protected AppInjector createInjector() {
+        return GWT.create(AppGinjector.class);
+    }
+
+	protected void handleExceptionsAsync() {
+		GWT.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
+			public void onUncaughtException(Throwable e) {
+				e.printStackTrace();
+				GQuery.console.log(stackTraceToString(e));
+			}
+		});
+	}
+	
+    private String stackTraceToString(Throwable throwable) {
+        String ret = "";
+        while (throwable != null) {
+            if (ret != "")
+                ret += "\nCaused by: ";
+            ret += throwable.toString();
+            for (StackTraceElement sTE : throwable.getStackTrace())
+                ret += "\n  at " + sTE;
+            throwable = throwable.getCause();
+        }
+        return ret;
+    }
+}

Added: james/hupa/trunk/hupa/src/main/resources/log4j.properties
URL: http://svn.apache.org/viewvc/james/hupa/trunk/hupa/src/main/resources/log4j.properties?rev=1573291&view=auto
==============================================================================
--- james/hupa/trunk/hupa/src/main/resources/log4j.properties (added)
+++ james/hupa/trunk/hupa/src/main/resources/log4j.properties Sun Mar  2 12:12:22 2014
@@ -0,0 +1,26 @@
+#############################################################################
+#    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.
+#############################################################################
+
+# Set root logger level to DEBUG and its only appender to A1.
+log4j.rootLogger=INFO, A1
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org