diff -rupN jamm-0.9.6/WEB-INF/classes/ApplicationResources.properties jamm/WEB-INF/classes/ApplicationResources.properties
--- jamm-0.9.6/WEB-INF/classes/ApplicationResources.properties	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/classes/ApplicationResources.properties	2012-02-10 17:24:19.000000000 -0500
@@ -17,21 +17,20 @@ errors.creditcard={0} is an invalid cred
 errors.email={0} is an invalid e-mail address.
 errors.identical={0} entries must be identical
 
-home.welcome = Welcome to Jamm! You are logged in as: 
-home.login = Log into Jamm
+home.welcome = Welcome to Mail Admin! You are logged in as: 
+home.login = Log into Mail Admin
 home.logout = Log out
 home.link.user_home = Go to your home page
 home.change_password = Change Password
 
-errors.header=<h3><font color="red">Validation Error</font></h3>\
-    You must correct the following error(s) before proceeding:<ul>
-errors.footer=</ul>
+errors.header=<div id="note" class="error"><h3>\n\tValidation Error\n</h3><p class="direction">You must correct the following error(s) before proceeding:</p>\n<ul class="nolist">
+errors.footer=</ul>\n</div>
 
 button.cancel = Cancel
 button.reset = Reset
 
 # Generic errors
-password.error.do_not_match = <li>Passwords do not match.</li>
+password.error.do_not_match = <li>Passwords do not match</li>
 password.error.too_short = \
     <li>Password must be at least 5 characters.</li>
 
@@ -42,7 +41,7 @@ login.prompt.username = Username
 login.prompt.password = Password
 login.button.submit = Login
 login.button.cancel = Cancel Login
-login.error.invalid_login = <li>Username and password do not match.</li>
+login.error.invalid_login = <li>Incorrect username and/or password</li>
 
 change_password.user_info = Changing password for:
 change_password.prompt.password = New Password:
@@ -75,11 +74,11 @@ catch_all_admin.status = Status
 catch_all_admin.destination = Destination
 catch_all_admin.button.submit = Update Catch-All
 catch_all_admin.error.no_destination = \
-	<li>Catch-All must have a destination.</li>
+	<li>Catch-All must have a destination</li>
 
 add_domain.prompt.domain_name = Domain Name:
 add_domain.prompt.postmaster_password = Postmaster Password:
-add_domain.prompt.retype_postmaster_password = Retype Postmaster Password:
+add_domain.prompt.retype_postmaster_password = Retype Password:
 add_domain.prompt.optional = (Optional)
 add_domain.note = Note:
 add_domain.note.content = \
@@ -107,32 +106,28 @@ add_account.prompt.retype_password = Ret
 add_account.button.submit = Add Account
 add_account.error.no_name = <li>You must enter a name for this account</li>
 
-general.error.domain.is.null = <li>Domain we are dealing with lost.</li>
+general.error.domain.is.null = <li>Domain we are dealing with lost</li>
 
-access.error  = <li>You do not have access to be here.  Naughty, Naughty!</li>
+access.error  = <li>You do not seem to have permission to be here</li>
 
-general.error.header = <p><font color="red">An unknown error has occured!</font></p>
+general.error.header = <p id="note" class="error">An unknown error has occured!</p>
 general.error.body = Please contact the system administrator
 general.error.footer = <p>We're sorry for the inconvience.  \
                        Please try again later.</p>
 
-communication.error.header = <p><font color="red">An fatal error has occured! \
-			     </font></p>
-communication.error.body = Could not contact the ldap server.
+communication.error.header = <p id="note" class="error">A fatal error has occured!</p>
+communication.error.body = Could not contact the ldap server
 communication.error.footer = <p>We're sorry for the inconvience.  \
 	                       Please try again later.</p>
 
-account_exists.error.header = <p><font color="red">A account or alias for \
-	this address already exists</font></p>
+account_exists.error.header = <p id="note" class="error">A account or alias for this address already exists</p>
 account_exists.error.body = already exists.
-account_exists.error.footer = <p>Please try again</p>
+account_exists.error.footer = 
 
-domain_exists.error.header = <p><font color="red">A domain with \
-	this name already exists</font></p>
-domain_exists.error.body = Whee!
-domain_exists.error.footer = <p>Please try again</p>
-
-permission.error.header = <p><font color="red">Permission problem</font></p>
-permission.error.body = Whee!
-permission.error.footer = <p>If you received this in error, please contact \
-	your postmaster</p>
+domain_exists.error.header = <p id="note" class="error">A domain with this name already exists</p>
+domain_exists.error.body = 
+domain_exists.error.footer = 
+
+permission.error.header = <p id="note" class="error">Permission problem</p>
+permission.error.body = 
+permission.error.footer = <p>If you received this in error, please contact <a href="mailto:ronald@rmacd.com">your administrator</a></p>
diff -rupN jamm-0.9.6/WEB-INF/common/all_definitions.jsp jamm/WEB-INF/common/all_definitions.jsp
--- jamm-0.9.6/WEB-INF/common/all_definitions.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/common/all_definitions.jsp	2011-05-31 10:33:38.000000000 -0400
@@ -4,6 +4,7 @@
 <%@ taglib uri="/WEB-INF/tld/struts-logic.tld" prefix="logic" %>
 <%@ taglib uri="/WEB-INF/tld/struts-tiles.tld" prefix="tiles" %>
 <%@ taglib uri="/WEB-INF/tld/jamm.tld" prefix="jamm" %>
+<%-- TODO: ADD THE JAKARTA/STRING TO HERE --%>
 <logic:present name="user" scope="session">
   <jsp:useBean id="user" scope="session" class="jamm.webapp.User"/>
 </logic:present>
diff -rupN jamm-0.9.6/WEB-INF/common/footer.jsp jamm/WEB-INF/common/footer.jsp
--- jamm-0.9.6/WEB-INF/common/footer.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/common/footer.jsp	2010-05-05 15:36:30.000000000 -0400
@@ -1,6 +1 @@
-          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
+<div id="footer">&nbsp;</div>
diff -rupN jamm-0.9.6/WEB-INF/common/header.jsp jamm/WEB-INF/common/header.jsp
--- jamm-0.9.6/WEB-INF/common/header.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/common/header.jsp	2011-05-30 19:04:42.000000000 -0400
@@ -1,11 +1,5 @@
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
-<table width="90%" border="0">
-  <tr>
-    <td vAlign=top width="20">&nbsp;</td>
-    <td vAlign=top>
-      <table width="100%" border="0" cellspacing="0" cellpadding="3">
-        <tr>
-          <td>
-            <html:img page="/imgs/jamm_logo.gif" width="230"
-                      height="48" alt="" border="0"/> 0.9.6
-            <br />
+<%--<div id="header">
+	<html:img page="/imgs/jamm_logo.gif" width="230" height="48" alt="Jamm Mail Administration" border="0"/>
+</div>
+--%>
\ No newline at end of file
diff -rupN jamm-0.9.6/WEB-INF/common/private_footer.jsp jamm/WEB-INF/common/private_footer.jsp
--- jamm-0.9.6/WEB-INF/common/private_footer.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/common/private_footer.jsp	2012-02-10 12:42:11.000000000 -0500
@@ -1,6 +1 @@
-          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
+<div id="footer">Mail Admin <html:link forward="logout"><bean:message key="home.logout"/></html:link></div>
diff -rupN jamm-0.9.6/WEB-INF/common/private_header.jsp jamm/WEB-INF/common/private_header.jsp
--- jamm-0.9.6/WEB-INF/common/private_header.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/common/private_header.jsp	2011-05-31 10:59:39.000000000 -0400
@@ -1,24 +1,27 @@
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
-<table width="90%" border="0">
-  <tr>
-    <td vAlign=top width="20">&nbsp;</td>
-    <td vAlign=top>
-      <table width="100%" border="0" cellspacing="0" cellpadding="3">
-        <tr>
-          <td>
-            <p>
-              <html:link forward="logout">
-                <bean:message key="home.logout"/>
-              </html:link> :
-              <logic:present name="breadCrumbs">
-                <logic:iterate id="breadCrumb" name="breadCrumbs"
-                               type="jamm.webapp.BreadCrumb">
-                  <html:link page="<%= breadCrumb.getLink() %>">
-                    <%= breadCrumb.getText() %>
-                  </html:link> :
-                </logic:iterate>
-              </logic:present>
-            </p>
-            <html:img page="/imgs/jamm_logo.gif" width="230"
-                      height="48" alt="" border="0"/> 0.9.6
-            <br />
+<!-- <%@ taglib uri="http://jakarta.apache.org/taglibs/string-1.1" prefix="str" %> -->
+<bean:define id="i18n_logout"><bean:message key="home.logout"/></bean:define>
+<div id="header">
+<%--<html:img page="/imgs/jamm_logo.gif" width="230" height="48" alt="RMacD.com Web Mail Administration" border="0"/>--%>
+	<div id="links">
+		<ul>
+		<%-- add i18n for logout link text --%>
+			<li><html:link forward="logout" styleClass="rollover logout" title="<%=i18n_logout%>">
+				<bean:message key="home.logout"/></html:link>
+			</li>
+			<logic:present name="breadCrumbs">
+			<logic:iterate id="breadCrumb" name="breadCrumbs" type="jamm.webapp.BreadCrumb">
+
+			<bean:define id="id">rollover 
+			<str:replace replace=" " with="">
+				<str:uncapitalize><%= breadCrumb.getText() %></str:uncapitalize>
+			</str:replace>
+			</bean:define>
+		
+
+				<li><html:link page="<%= breadCrumb.getLink() %>" styleClass="<%=id%>"><%= breadCrumb.getText() %></html:link></li> 
+			</logic:iterate>
+			</logic:present>
+		</ul>
+	</div>
+</div>
diff -rupN jamm-0.9.6/WEB-INF/jamm.properties jamm/WEB-INF/jamm.properties
--- jamm-0.9.6/WEB-INF/jamm.properties	1969-12-31 19:00:00.000000000 -0500
+++ jamm/WEB-INF/jamm.properties	2011-05-30 13:36:20.000000000 -0400
@@ -0,0 +1,37 @@
+
+# The LDAP host.  The default is localhost
+#
+jamm.ldap.host = 192.168.56.101
+
+# The LDAP port. The default is 389
+#
+#jamm.ldap.port =
+
+# The search base.
+#
+jamm.ldap.search_base = o=mailsrv,dc=rmacd,dc=com
+
+# The DN of the "root" user
+#
+jamm.ldap.root_dn = cn=admin,dc=rmacd,dc=com
+
+# The login of the "root" user.  The default is root
+#
+jamm.ldap.root_login = ronald
+
+# The class used to generate random numbers.  The default is
+# java.security.SecureRandom.
+#
+#jamm.random_class = java.util.Random
+
+# Should jamm use the Modify Password Extended Operation to set the
+# users's password?  If true, it will.  If false, jamm itself will
+# generate an SSHA hash and set the userPassword attribute to it.
+# The default is true
+#
+#jamm.password.exop = true
+
+# The directory on the server where the virtual accounts store their
+# data.  Defaults to /home/vmail/domains
+#
+jamm.vmail.homedir = /home/vmail/domains
diff -rupN jamm-0.9.6/WEB-INF/jamm.properties.dist jamm/WEB-INF/jamm.properties.dist
--- jamm-0.9.6/WEB-INF/jamm.properties.dist	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/jamm.properties.dist	1969-12-31 19:00:00.000000000 -0500
@@ -1,37 +0,0 @@
-
-# The LDAP host.  The default is localhost
-#
-#jamm.ldap.host =
-
-# The LDAP port. The default is 389
-#
-#jamm.ldap.port =
-
-# The search base.
-#
-#jamm.ldap.search_base =
-
-# The DN of the "root" user
-#
-#jamm.ldap.root_dn =
-
-# The login of the "root" user.  The default is root
-#
-#jamm.ldap.root_login =
-
-# The class used to generate random numbers.  The default is
-# java.security.SecureRandom.
-#
-#jamm.random_class = java.util.Random
-
-# Should jamm use the Modify Password Extended Operation to set the
-# users's password?  If true, it will.  If false, jamm itself will
-# generate an SSHA hash and set the userPassword attribute to it.
-# The default is true
-#
-#jamm.password.exop = true
-
-# The directory on the server where the virtual accounts store their
-# data.  Defaults to /home/vmail/domains
-#
-#jamm.vmail.homedir = /home/vmail/domains
diff -rupN jamm-0.9.6/WEB-INF/layouts/main.jsp jamm/WEB-INF/layouts/main.jsp
--- jamm-0.9.6/WEB-INF/layouts/main.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/layouts/main.jsp	2010-05-06 10:02:26.000000000 -0400
@@ -1,24 +1,43 @@
-<!DOCTYPE html
-          PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-          "DTD/xhtml11-strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml11-strict.dtd">
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
 <html:html>
-  <head>
-    <title><tiles:getAsString name="title"/></title>
-    <link rel="STYLESHEET" type="text/css" href="<%= CSS %>">
-    <script>
-    <!--
-     ROOT = "<%= ROOT %>";
-     //-->
-    </script>
-    <script type="text/javascript" LANGUAGE="Javascript1.2"
-            SRC="<%= JS %>"></script>
-    <html:base/>
-  </head>
+<head>
+	<title>
+		<tiles:getAsString name="title"/>
+	</title>
+<link rel="STYLESHEET" type="text/css" href="<%= CSS %>">
+<script>
+<!--
+	ROOT = "<%= ROOT %>";
+//-->
+</script>
+<script type="text/javascript" language="Javascript1.2" src="<%= JS %>"></script>
 
-  <body bgcolor="#FFFFFF">
-    <tiles:insert attribute="header"/>
-    <tiles:insert attribute="body"/>
-    <tiles:insert attribute="footer"/>
-  </body>
+<style type="text/css">
+        @import "tab/domtab.css";
+</style>
+    <script type="text/javascript" src="tab/domtab.js"></script>
+    <script type="text/javascript">
+        document.write('<style type="text/css">');
+        document.write('div.domtab div{display:none;}<');
+        document.write('/s'+'tyle>');
+</script>
+
+<!--
+<script type="text/javascript" src="tab/addclasskillclass.js"></script>
+<script type="text/javascript" src="tab/attachevent.js"></script>
+<script type="text/javascript" src="tab/addcss.js"></script>
+<script type="text/javascript" src="tab/tabtastic.js"></script>
+<style type="text/css">
+        @import "tab/tabtastic.css";
+</style>
+-->
+
+<!-- <html:base/>-->
+</head>
+<body id="jamm">
+	<tiles:insert attribute="header"/>
+	<tiles:insert attribute="body"/>
+	<tiles:insert attribute="footer"/>
+</body>
 </html:html>
Binary files jamm-0.9.6/WEB-INF/lib/commons-lang.jar and jamm/WEB-INF/lib/commons-lang.jar differ
Binary files jamm-0.9.6/WEB-INF/lib/taglibs-string.jar and jamm/WEB-INF/lib/taglibs-string.jar differ
diff -rupN jamm-0.9.6/WEB-INF/taglibs-string.tld jamm/WEB-INF/taglibs-string.tld
--- jamm-0.9.6/WEB-INF/taglibs-string.tld	1969-12-31 19:00:00.000000000 -0500
+++ jamm/WEB-INF/taglibs-string.tld	2011-05-31 10:03:26.000000000 -0400
@@ -0,0 +1,748 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+
+
+
+
+
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
+<taglib>
+  <tlibversion>1.1.0</tlibversion>
+  <jspversion>1.1</jspversion>
+  <shortname>string</shortname>
+  <uri>http://jakarta.apache.org/taglibs/string-1.1</uri>
+  <info>
+    The String taglibrary provides a host of tags for manipulating 
+    java.lang.Strings. The style is that the String to act upon is the 
+    body of the tag, and attributes are used as parameters for the 
+    manipulation.
+  </info>
+  <tag>
+    <name>length</name>
+    <tagclass>org.apache.taglibs.string.LengthTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>capitalize</name>
+    <tagclass>org.apache.taglibs.string.CapitalizeTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>uncapitalize</name>
+    <tagclass>org.apache.taglibs.string.UncapitalizeTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>upperCase</name>
+    <tagclass>org.apache.taglibs.string.UpperCaseTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>lowerCase</name>
+    <tagclass>org.apache.taglibs.string.LowerCaseTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>trim</name>
+    <tagclass>org.apache.taglibs.string.TrimTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>chop</name>
+    <tagclass>org.apache.taglibs.string.ChopTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>chopNewline</name>
+    <tagclass>org.apache.taglibs.string.ChopNewlineTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>escape</name>
+    <tagclass>org.apache.taglibs.string.EscapeTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>reverse</name>
+    <tagclass>org.apache.taglibs.string.ReverseTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>swapCase</name>
+    <tagclass>org.apache.taglibs.string.SwapCaseTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>soundex</name>
+    <tagclass>org.apache.taglibs.string.SoundexTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>metaphone</name>
+    <tagclass>org.apache.taglibs.string.MetaphoneTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>quoteRegexp</name>
+    <tagclass>org.apache.taglibs.string.QuoteRegexpTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>capitalizeAllWords</name>
+    <tagclass>org.apache.taglibs.string.CapitalizeAllWordsTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>removeXml</name>
+    <tagclass>org.apache.taglibs.string.RemoveXmlTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>encodeUrl</name>
+    <tagclass>org.apache.taglibs.string.EncodeUrlTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>decodeUrl</name>
+    <tagclass>org.apache.taglibs.string.DecodeUrlTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>count</name>
+    <tagclass>org.apache.taglibs.string.CountTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>set</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>delete</name>
+    <tagclass>org.apache.taglibs.string.DeleteTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>set</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>squeeze</name>
+    <tagclass>org.apache.taglibs.string.SqueezeTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>set</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>center</name>
+    <tagclass>org.apache.taglibs.string.CenterTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>delimiter</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>width</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>rightPad</name>
+    <tagclass>org.apache.taglibs.string.RightPadTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>delimiter</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>width</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>leftPad</name>
+    <tagclass>org.apache.taglibs.string.LeftPadTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>delimiter</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>width</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>chomp</name>
+    <tagclass>org.apache.taglibs.string.ChompTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>delimiter</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>getChomp</name>
+    <tagclass>org.apache.taglibs.string.GetChompTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>delimiter</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>prechomp</name>
+    <tagclass>org.apache.taglibs.string.PrechompTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>delimiter</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>getPrechomp</name>
+    <tagclass>org.apache.taglibs.string.GetPrechompTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>delimiter</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>strip</name>
+    <tagclass>org.apache.taglibs.string.StripTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>delimiter</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>stripEnd</name>
+    <tagclass>org.apache.taglibs.string.StripEndTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>delimiter</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>stripStart</name>
+    <tagclass>org.apache.taglibs.string.StripStartTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>delimiter</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>reverseDelimitedString</name>
+    <tagclass>org.apache.taglibs.string.ReverseDelimitedStringTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>delimiter</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>overlay</name>
+    <tagclass>org.apache.taglibs.string.OverlayTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>with</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>start</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>end</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>substring</name>
+    <tagclass>org.apache.taglibs.string.SubstringTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>start</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>end</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>repeat</name>
+    <tagclass>org.apache.taglibs.string.RepeatTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>count</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>wordWrap</name>
+    <tagclass>org.apache.taglibs.string.WordWrapTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>width</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>delimiter</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>split</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>delimiterInside</name>
+      <required>false</required>
+      <rtexprvalue>false</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>nestedString</name>
+    <tagclass>org.apache.taglibs.string.NestedStringTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>open</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>close</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>countMatches</name>
+    <tagclass>org.apache.taglibs.string.CountMatchesTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>substring</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>default</name>
+    <tagclass>org.apache.taglibs.string.DefaultTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>value</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>default</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>replace</name>
+    <tagclass>org.apache.taglibs.string.ReplaceTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>replace</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>with</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>count</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>newlineToken</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>carriageToken</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>randomString</name>
+    <tagclass>org.apache.taglibs.string.RandomStringTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>count</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>start</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>end</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>type</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>left</name>
+    <tagclass>org.apache.taglibs.string.LeftTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>count</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>right</name>
+    <tagclass>org.apache.taglibs.string.RightTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>count</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>mid</name>
+    <tagclass>org.apache.taglibs.string.MidTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>start</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>count</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>truncateNicely</name>
+    <tagclass>org.apache.taglibs.string.TruncateNicelyTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>var</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>lower</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>upper</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>appendToEnd</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>join</name>
+    <tagclass>org.apache.taglibs.string.JoinTag</tagclass>
+    <bodycontent>EMPTY</bodycontent>
+    <attribute>
+      <name>items</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>separator</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+  <tag>
+    <name>split</name>
+    <tagclass>org.apache.taglibs.string.SplitTag</tagclass>
+    <bodycontent>JSP</bodycontent>
+    <attribute>
+      <name>separator</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
+      <name>var</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+  </tag>
+</taglib>
+
+
+
+
+
+
+
+
diff -rupN jamm-0.9.6/WEB-INF/tiles/access_error.jsp jamm/WEB-INF/tiles/access_error.jsp
--- jamm-0.9.6/WEB-INF/tiles/access_error.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/tiles/access_error.jsp	2010-05-05 13:04:59.000000000 -0400
@@ -1,5 +1,5 @@
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
-<h1 align="center">
+<h1 class="error">
     JAMM Access Error Page
 </h1>
 
diff -rupN jamm-0.9.6/WEB-INF/tiles/account_admin.jsp jamm/WEB-INF/tiles/account_admin.jsp
--- jamm-0.9.6/WEB-INF/tiles/account_admin.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/tiles/account_admin.jsp	2012-02-11 17:16:51.000000000 -0500
@@ -1,19 +1,16 @@
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
-<span class=header>ACCOUNT ADMINISTRATION for <bean:write name="mail"/></span>
-<br />
-<html:link forward="change_password" paramId="mail"
-           name="passwordParameters">
-  Change Password
-</html:link>
+<div id="body">
+<h1 class="header">Account settings: <span class="title_address"><bean:write name="mail"/></span></h1>
+
+	<p id="options"><html:link forward="change_password" paramId="mail" name="passwordParameters">Change Password</html:link></p>
 
 <html:errors/>
+
 <html:form action="/private/update_account">
 
-  <p>
-    Full Name: <html:text property="commonName" name="account" size="50"/>
-  </p>
-  <html:hidden property="mail"/>
-  <p>
-    <html:submit styleClass="mbutton">Submit</html:submit>
-  </p>
+    <label for="account">Full Name: </label><html:text property="commonName" name="account" size="50"/>
+	<html:hidden property="mail"/>
+	<html:submit styleClass="mbutton">Submit</html:submit>
+
 </html:form>
+</div>
diff -rupN jamm-0.9.6/WEB-INF/tiles/account_exists_error.jsp jamm/WEB-INF/tiles/account_exists_error.jsp
--- jamm-0.9.6/WEB-INF/tiles/account_exists_error.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/tiles/account_exists_error.jsp	2012-02-10 16:25:14.000000000 -0500
@@ -1,25 +1,16 @@
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
-<h2 align="center">
-  Account or Alias already exists.
-</h2>
+<div id="body">
 
-<p>
-  <font color="red">An account or alias for <bean:write name="mail"/>
-  already exists.</font>
-</p>
+<h1 class="header error">Account or Alias already exists</h1>
+
+<p class="errortext">An account or alias for <bean:write name="mail"/> already exists.</p>
 
-<p>
   <logic:present name="aliasDomain">
-    <html:link forward="add_alias" paramName="aliasDomain" paramId="domain">
-      Please try again.
-    </html:link>
+    <p class="options"><html:link forward="add_alias" paramName="aliasDomain" paramId="domain">Please try again.</html:link></p>
   </logic:present>
 
   <logic:present name="accountDomain">
-    <html:link forward="add_account" paramName="accountDomain"
-               paramId="domain">
-      Please try again.
-    </html:link>
+    <p class="options"><html:link forward="add_account" paramName="accountDomain" paramId="domain">Please try again.</html:link></p>
   </logic:present>
-</p>
-  
+
+</div>
diff -rupN jamm-0.9.6/WEB-INF/tiles/add_account.jsp jamm/WEB-INF/tiles/add_account.jsp
--- jamm-0.9.6/WEB-INF/tiles/add_account.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/tiles/add_account.jsp	2012-02-10 16:46:31.000000000 -0500
@@ -1,53 +1,44 @@
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
 <bean:parameter id="domain" name="domain"/>
-<span class=header>ADD ACCOUNT for domain <bean:write name="domain"/></span>
-<br />
+<div id="body">
+	<h1 class="header">Add account on <bean:write name="domain"/></h1>
 <html:errors/>
 <html:form action="/private/add_account" focus="name">
-  <html:hidden property="domain"/>
-  <table border="0">
-    <tr>
-      <td align="right">
-        <bean:message key="add_account.prompt.account_name"/>
-      </td>
-      <td align="left">
-        <html:text property="name" size="30"/>@<bean:write name="domain"/>
-      </td>
-    </tr>
-    <tr>
-      <td align="right">
-        <bean:message key="add_account.prompt.common_name"/>
-      </td>
-      <td align="left">
-        <html:text property="commonName" size="30"/>
-      </td>
-    </tr>
-    <tr>
-      <td align="right">
-        <bean:message key="add_account.prompt.password"/>
-      </td>
-      <td align="left">
-        <html:password property="password" size="30"/>
-      </td>
-    </tr>
-    <tr>
-      <td align="right">
-        <bean:message key="add_account.prompt.retype_password"/>
-      </td>
-      <td align="left">
-        <html:password property="retypedPassword" size="30"/>
-      </td>
-    </tr>
-    <tr>
-      <td><br></td>
-      <td>
-        <html:submit styleClass="mbutton">
-          <bean:message key="add_account.button.submit"/>
-        </html:submit>
-        <html:cancel styleClass="button">
-          <bean:message key="button.cancel"/>
-        </html:cancel>
-      </td>
-    </tr>
-  </table>
+
+	<html:hidden property="domain"/>
+	<div id="form" class="wide">
+		<div id="required">
+			<label for="name">
+				<bean:message key="add_account.prompt.account_name"/>
+			</label>
+			<html:text property="name" size="30"/> @<bean:write name="domain"/>
+		</div>
+		<div id="optional">
+			<label for="commonName">
+				<bean:message key="add_account.prompt.common_name"/>
+			</label>
+			<html:text property="commonName" size="30"/>
+		</div>
+		<div id="required">
+			<label for="password">
+				<bean:message key="add_account.prompt.password"/>
+			</label>
+			<html:password property="password" size="30"/>
+		</div>
+		<div id="required">
+			<label for="retypedPassword">
+				<bean:message key="add_account.prompt.retype_password"/>
+			</label>
+			<html:password property="retypedPassword" size="30"/>
+		</div>
+
+			<html:submit styleClass="mbutton">
+				<bean:message key="add_account.button.submit"/>
+			</html:submit>
+			<html:cancel styleClass="button">
+				<bean:message key="button.cancel"/>
+			</html:cancel>
+
+	</div>
 </html:form>
+
diff -rupN jamm-0.9.6/WEB-INF/tiles/add_alias.jsp jamm/WEB-INF/tiles/add_alias.jsp
--- jamm-0.9.6/WEB-INF/tiles/add_alias.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/tiles/add_alias.jsp	2012-02-10 16:47:27.000000000 -0500
@@ -1,68 +1,53 @@
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
-<bean:parameter id="domain" name="domain"/>
-<span class=header>ADD ALIAS for domain <bean:write name="domain"/></span>
+<div id="body">
+	<bean:parameter id="domain" name="domain"/>
+<h1 class="header">Add alias for domain <bean:write name="domain"/></h1>
 <html:errors/>
 <html:form action="/private/add_alias" focus="name">
-  <html:hidden property="domain"/>
-  <table border="0">
-    <tr>
-      <td align="right">
-        <bean:message key="add_alias.prompt.alias_name"/>
-      </td>
-      <td align="left">
-        <html:text property="name" size="30"/>@<bean:write name="domain"/>
-      </td>
-    </tr>
-    <tr>
-      <td align="right">
-        <bean:message key="add_alias.prompt.common_name"/>
-      </td>
-      <td align="left">
-        <html:text property="commonName" size="30"/>
-      </td>
-    </tr>
-    <tr>
-      <td align="right">
-        <bean:message key="add_alias.prompt.destinations"/>
-      </td>
-      <td align="left">
-        <html:textarea rows="6" cols="35" property="destinations"/>
-      </td>
-    </tr>
-    <tr>
-      <td align="right">
-        <bean:message key="add_alias.prompt.password"/>
-      </td>
-      <td align="left">
-        <html:password property="password" size="30"/>
-        <bean:message key="add_alias.prompt.optional"/>
-      </td>
-    </tr>
-    <tr>
-      <td align="right">
-        <bean:message key="add_alias.prompt.retype_password"/>
-      </td>
-      <td align="left">
-        <html:password property="retypedPassword" size="30"/>
-        <bean:message key="add_alias.prompt.optional"/>
-      </td>
-    </tr>
-    <tr>
-      <td align="right" valign="top">
-        <b><bean:message key="add_alias.note"/></b>
-      </td>
-      <td> <bean:message key="add_alias.note.content"/> </td>
-    </tr>
-    <tr>
-      <td><br></td>
-      <td>
-        <html:submit styleClass="mbutton">
-          <bean:message key="add_alias.button.submit"/>
-        </html:submit>
-        <html:cancel styleClass="button">
-          <bean:message key="button.cancel"/>
-        </html:cancel>
-      </td>
-    </tr>
-  </table>
-</html:form>
+<html:hidden property="domain"/>
+<div id="form" class="wide">
+	<div id="required">
+		<label for="name">
+			<bean:message key="add_alias.prompt.alias_name"/>
+		</label>
+		<html:text property="name" size="30"/> @<bean:write name="domain"/>
+	</div>
+	<div id="required">
+		<label for="commonName">
+			<bean:message key="add_alias.prompt.common_name"/>
+	    </label>
+		<html:text property="commonName" size="30"/>
+	</div>
+	<div id="required">
+		<label for="destinations">
+			<bean:message key="add_alias.prompt.destinations"/>
+		</label>
+		<html:textarea rows="6" cols="35" property="destinations"/>
+	</div>
+	<div id="required">
+		<label for="password">
+			<bean:message key="add_alias.prompt.password"/>
+		</label>
+		<html:password property="password" size="30"/><bean:message key="add_alias.prompt.optional"/>
+	</div>
+	<div id="required">
+		<label for="retypedPassword">
+			<bean:message key="add_alias.prompt.retype_password"/>
+		</label>
+		<html:password property="retypedPassword" size="30"/><bean:message key="add_alias.prompt.optional"/>
+	</div>
+	<div>
+		<strong>
+			<bean:message key="add_alias.note"/>
+		</strong>
+		<bean:message key="add_alias.note.content"/>
+	</div>
+
+	<html:submit styleClass="mbutton">
+		<bean:message key="add_alias.button.submit"/>
+	</html:submit>
+	<html:cancel styleClass="button">
+		<bean:message key="button.cancel"/>
+	</html:cancel>
+	</html:form>
+</div>
diff -rupN jamm-0.9.6/WEB-INF/tiles/add_domain.jsp jamm/WEB-INF/tiles/add_domain.jsp
--- jamm-0.9.6/WEB-INF/tiles/add_domain.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/tiles/add_domain.jsp	2012-02-10 17:22:48.000000000 -0500
@@ -1,50 +1,35 @@
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
-<span class=header>ADD DOMAIN</span>
-<html:errors/>
-<html:form action="/private/add_domain" focus="domain">
-  <table border="0">
-    <tr>
-      <td align="right">
-        <bean:message key="add_domain.prompt.domain_name"/>
-      </td>
-      <td align="left">
-        <html:text property="domain" size="30"/>
-      </td>
-    </tr>
-    <tr>
-      <td align="right">
-        <bean:message key="add_domain.prompt.postmaster_password"/>
-      </td>
-      <td align="left">
-        <html:password property="password" size="30"/>
-        <bean:message key="add_domain.prompt.optional"/>
-      </td>
-    </tr>
-    <tr>
-      <td align="right">
-        <bean:message key="add_domain.prompt.retype_postmaster_password"/>
-      </td>
-      <td align="left">
-        <html:password property="retypedPassword" size="30"/>
-        <bean:message key="add_domain.prompt.optional"/>
-      </td>
-    </tr>
-    <tr>
-      <td align="right" valign="top">
-        <b><bean:message key="add_domain.note"/></b>
-      </td>
-      <td> <bean:message key="add_domain.note.content"/> </td>
-    </tr>
-    <tr>
-      <td><br></td>
-      <td>
-        <html:submit styleClass="mbutton">
-          <bean:message key="add_domain.button.submit"/>
-        </html:submit>
-        <html:cancel styleClass="button">
-          <bean:message key="button.cancel"/>
-        </html:cancel>
-      </td>
-    </tr>
-  </table>
-</html:form>
+<div id="body">
+	<h1 class="header">ADD DOMAIN</h1>
+	<html:errors/>
+	<html:form action="/private/add_domain" focus="domain">
+	<div id="form" class="wide">
+		<div id="required">
+			<label for="domain">
+				<bean:message key="add_domain.prompt.domain_name"/>
+			</label>
+			<html:text property="domain" size="30"/>
+		</div>
+		<div id="required">
+			<label for="password">
+				<bean:message key="add_domain.prompt.postmaster_password"/>
+			</label>
+			<html:password property="password" size="30"/><bean:message key="add_domain.prompt.optional"/>
+		</div>
+		<div id="required">
+			<label for="retypedPassword">
+				<bean:message key="add_domain.prompt.retype_postmaster_password"/>
+			</label>
+			<html:password property="retypedPassword" size="30"/><bean:message key="add_domain.prompt.optional"/>
+		</div>
+		
+		<html:submit styleClass="mbutton">
+			<bean:message key="add_domain.button.submit"/>
+		</html:submit>
+		<html:cancel styleClass="button">
+			<bean:message key="button.cancel"/>
+		</html:cancel>
+		</html:form>
+	</div>
+	<p><bean:message key="add_domain.note"/></strong> <bean:message key="add_domain.note.content"/></p>
+</div>
diff -rupN jamm-0.9.6/WEB-INF/tiles/alias_admin.jsp jamm/WEB-INF/tiles/alias_admin.jsp
--- jamm-0.9.6/WEB-INF/tiles/alias_admin.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/tiles/alias_admin.jsp	2012-02-11 15:30:30.000000000 -0500
@@ -1,55 +1,63 @@
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
-<span class=header>ALIAS ADMINISTRATION for <bean:write name="mail"/></span>
-<br />
-<html:link forward="change_password" paramId="mail"
-           name="passwordParameters">
-  Change Password
-</html:link>
+<div id="body">
+<h1 class="header">Edit alias: <bean:write name="mail"/></h1>
 
-<html:errors/>
 <html:form action="/private/update_alias">
-  <p>
-    Full Name: <html:text property="commonName" name="alias" size="50"/>
-  </p>
-  <html:hidden property="mail"/>
-  <table width="100%" border="0">
-    <tr>
-      <th align="left">Destination</th>
-      <td align="left" width="6">&nbsp;</td>
-      <td align="right" width="79">
-        <html:img page="/imgs/delete_alias.gif"
-                  alt="Delete Alias"
-                  width="79" height="23"/>
-      </td>
-    </tr>
-    <logic:iterate indexId="count" id="destination" name="alias"
-                   property="mailDestinations"
-                   type="String">
-      <tr class="datarow"
-          onmouseover='OverRow(this, "<%=destination%>")'
-          onmouseout='OutRow(this, "<%=destination%>")'>
-        <td>&nbsp;<bean:write name="destination"/></td>
-        <td align="left" width="6" bgcolor="#FFFFFF">
-          <html:img page='/imgs/sm_arrow.gif'
-                    width="6" height="9"
-                    border="0" align="middle"
-                    imageName='<%=destination%>'/>
-        </td>
-        <td align="center" width="79" class="multibox">
-          <html:multibox property="deleted">
-            <bean:write name="destination"/>
-          </html:multibox>
-        </td>
-      </tr>
-    </logic:iterate>
-  </table>
-  <p>
-    List email addresses to add as destinations:
-  </p>
-  <p>
-    <html:textarea rows="6" cols="35" property="added"/>
-  </p>
-  <p>
-    <html:submit styleClass="mbutton">Update Destinations</html:submit>
-  </p>
+
+<html:errors/>
+
+<div class="domtab">
+	<ul class="domtabs">
+		<li><a href="#general">General alias settings</a></li>
+		<li><a href="#forwards">Forwarding settings</a></li>
+	</ul>
+
+	<div id="domcontent">
+		<h2><a name="general" id="general">General settings</a></h2>
+
+			<p><html:link forward="change_password" paramId="mail" name="passwordParameters">Click here to change the alias password</html:link></p>
+			
+			<p>
+				<label for="commonName">
+					Full Name: 
+				</label>
+				<html:text property="commonName" name="alias" size="50"/>
+			</p>
+			<html:submit styleClass="mbutton">Update</html:submit>
+	</div>
+	<div id="domcontent">
+		<h2><a name="forwards" id="forwards">Forwarding settings</a></h2>
+
+		<html:hidden property="mail"/>
+
+		<h3>Destinations</h3>
+		<p>Destinations are attributed to each particular alias. An email may be delivered to more than one recipient.</p>
+		<p>To delete an alias, click the checkbox and press 'Update destinations'.</p>
+		<table>
+			<logic:iterate indexId="count" id="destination" name="alias"
+					property="mailDestinations"
+					type="String">
+				<tr>
+					<td>
+						<html:multibox property="deleted">
+							<bean:write name="destination"/>
+						</html:multibox>
+					</td>
+					<td class="email datarow" onmouseover='OverRow(this, "<%=destination%>")' onmouseout='OutRow(this, "<%=destination%>")'>
+						<bean:write name="destination"/>
+					</td>
+				</tr>
+	
+			</logic:iterate>
+		</table>
+
+		<p id="form" class="wide">
+			<p id="required">
+				<label for="added">Destinations</label>
+				<html:textarea rows="6" cols="35" property="added"/>	
+			</p>
+			<html:submit styleClass="mbutton">Update Destinations</html:submit>
+		</p>
 </html:form>
+
+</div></div>
diff -rupN jamm-0.9.6/WEB-INF/tiles/catch_all_admin.jsp jamm/WEB-INF/tiles/catch_all_admin.jsp
--- jamm-0.9.6/WEB-INF/tiles/catch_all_admin.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/tiles/catch_all_admin.jsp	2010-05-06 06:59:05.000000000 -0400
@@ -1,37 +1,28 @@
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
-<span class=header>
-  CATCH-ALL ADMIN for domain <bean:write name="domain"/>
-</span>
+<div id="body">
+<h1 class="header">Edit Catch-All for domain <bean:write name="domain"/></h1>
+<p class="note"><strong>Note: </strong><u>all</u> mail to this domain will be forwarded to the specified address below.</p>
 <html:errors/>
 <html:form action="/private/update_catch_all">
-  <html:hidden property="domain"/>
-  <table border="0">
-    <tr>
-      <td align="right" valign="top">
-        <bean:message key="catch_all_admin.status"/>:
-      </td>
-      <td>
-        <html:radio property="status" value="on"/>
-        <bean:message key="catch_all.active"/>
-        <br />
-        <html:radio property="status" value="off"/>
-        <bean:message key="catch_all.inactive"/>
-      </td>
-    </tr>
-    <tr>
-      <td align="right">
-        <bean:message key="catch_all_admin.destination"/>:
-      </td>
-      <td>
-        <html:text property="destination" />
-      </td>
-    </tr>
-  </table>
-  <br />
-  <html:submit styleClass="mbutton">
-    <bean:message key="catch_all_admin.button.submit"/>
-  </html:submit>
-  <html:cancel styleClass="button">
-    <bean:message key="button.cancel"/>
-  </html:cancel>
+<html:hidden property="domain"/>
+<p>
+	<label for="status">
+		<bean:message key="catch_all_admin.status"/>:
+	</label>
+	<html:radio property="status" value="on"/> <bean:message key="catch_all.active"/>
+	<html:radio property="status" value="off"/> <bean:message key="catch_all.inactive"/>
+</p>
+<p>
+	<label for="destination">
+		<bean:message key="catch_all_admin.destination"/>:
+	</label>
+	<html:text property="destination" />
+</p>
+<html:submit styleClass="mbutton">
+	<bean:message key="catch_all_admin.button.submit"/>
+</html:submit>
+<html:cancel styleClass="button">
+	<bean:message key="button.cancel"/>
+</html:cancel>
 </html:form>
+</div>
diff -rupN jamm-0.9.6/WEB-INF/tiles/change_password.jsp jamm/WEB-INF/tiles/change_password.jsp
--- jamm-0.9.6/WEB-INF/tiles/change_password.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/tiles/change_password.jsp	2012-02-10 16:46:05.000000000 -0500
@@ -1,40 +1,33 @@
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
-<bean:parameter id="mail" name="mail" value=""/>
-<span class=header>CHANGE PASSWORD for <bean:write name="mail"/></span>
-<html:errors/>
-<html:form action="/private/change_password" focus="password">
-  <html:hidden property="mail"/>
-  <html:hidden property="done"/>
-  <table border="0">
-    <tr>
-      <td align="right">
-        <bean:message key="change_password.prompt.password"/>
-      </td>
-      <td align="left">
-        <html:password property="password" size="30"/>
-      </td>
-    </tr>
-    <tr>
-      <td align="right">
-        <bean:message key="change_password.prompt.retype_password"/>
-      </td>
-      <td align="left">
-        <html:password property="retypedPassword" size="30"/>
-      </td>
-    </tr>
-    <tr>
-      <td><br></td>
-      <td>
-        <html:submit styleClass="mbutton">
-          <bean:message key="change_password.button.submit"/>
-        </html:submit>
-        <html:submit property="clear" styleClass="button">
-          Clear Password
-        </html:submit>
-        <html:cancel styleClass="button">
-          <bean:message key="button.cancel"/>
-        </html:cancel>
-      </td>
-    </tr>
-  </table>
-</html:form>
+<div id="body">
+	<bean:parameter id="mail" name="mail" value=""/>
+		<h1 class=header>Change password for <bean:write name="mail"/></h1>
+	<html:errors/>
+	<html:form action="/private/change_password" focus="password">
+	<html:hidden property="mail"/>
+	<html:hidden property="done"/>
+	<div id="form" class="wide">
+		<div id="required">
+			<label for="password">
+				<bean:message key="change_password.prompt.password"/>
+			</label>
+			<html:password property="password" size="30"/>
+		</div>
+		<div id="required">
+			<label for="retypedPassword">
+				<bean:message key="change_password.prompt.retype_password"/>
+			</label>
+			<html:password property="retypedPassword" size="30"/>
+		</div>
+		<html:submit styleClass="mbutton">
+			<bean:message key="change_password.button.submit"/>
+		</html:submit>
+		<html:submit property="clear" styleClass="button">
+			Reset
+		</html:submit>
+		<html:cancel styleClass="button">
+			<bean:message key="button.cancel"/>
+		</html:cancel>
+		</html:form>
+	</div>
+</div>
diff -rupN jamm-0.9.6/WEB-INF/tiles/communication_error.jsp jamm/WEB-INF/tiles/communication_error.jsp
--- jamm-0.9.6/WEB-INF/tiles/communication_error.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/tiles/communication_error.jsp	2010-05-06 07:05:06.000000000 -0400
@@ -1,9 +1,7 @@
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
-<h1 align="center">
-  JAMM Communication Error Page
+<h1 class="header">
+	JAMM Communication Error Page
 </h1>
-
-<html:messages header="communication.error.header"
-               footer="communication.error.footer" id="error">
-  <bean:write name="error"/>
+<html:messages header="communication.error.header" footer="communication.error.footer" id="error">
+	<bean:write name="error"/>
 </html:messages>
diff -rupN jamm-0.9.6/WEB-INF/tiles/domain_admin.jsp jamm/WEB-INF/tiles/domain_admin.jsp
--- jamm-0.9.6/WEB-INF/tiles/domain_admin.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/tiles/domain_admin.jsp	2012-02-10 16:54:23.000000000 -0500
@@ -1,226 +1,241 @@
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
-<span class=header>DOMAIN ADMINISTRATION for <bean:write name="domain"/></span>
-<br />
+<div id="body">
+<h1 class="header">Domain administration for <bean:write name="domain"/></h1>
 <html:errors/>
 
-<html:link forward="change_password" paramId="mail"
-           name="postmasterPasswordParameters">
-  <bean:message key="domain_admin.link.change_postmaster_pw"/>
-</html:link>
-<br />
-
-Catch-All:
-<logic:notEmpty name="catchAllAlias">
-  <b><bean:message key="catch_all.active"/></b>
-  Destination: <b><bean:write name="catchAllAlias"/></b>
-</logic:notEmpty>
-<logic:empty name="catchAllAlias">
-  <b><bean:message key="catch_all.inactive"/></b>
-</logic:empty>
-<html:link forward="catch_all_admin" paramId="domain" paramName="domain">
-  Edit Catch-All
-</html:link>
-<br />
-
-<html:form action="/private/domain_account">
-  <html:hidden property="domain"/>
-  <logic:iterate id="account" name="domainAccountForm"
-                 property="originalActiveItems" type="String">
-    <html:hidden property="originalActiveItems" value="<%=account%>"/>
-  </logic:iterate>
-
-  <logic:iterate id="account" name="domainAccountForm"
-                 property="originalAdminItems" type="String">
-    <html:hidden property="originalAdminItems" value="<%=account%>"/>
-  </logic:iterate>
-
-  <logic:iterate id="account" name="domainAccountForm"
-                 property="originalItemsToDelete" type="String">
-    <html:hidden property="originalItemsToDelete" value="<%=account%>"/>
-  </logic:iterate>
-
-  <table width="100%" border="0">
-    <tr>
-      <td>
-        <span class=title>MANAGE ACCOUNTS</span>
-        <logic:equal name="canEditAccounts" value="true">
-          <html:link forward="add_account" paramId="domain"
-                     paramName="domain">
-            <bean:message key="domain_admin.link.add_account"/>
-          </html:link>
-        </logic:equal>
-      </td>
-      <td width="6">&nbsp;</td>
-
-      <logic:equal name="canEditAccounts" value="true">
-        <td align=middle width=79>
-          <html:img page='/imgs/delete_account.gif'
-                    alt='Delete Account' width='79' height='23'/>
-        </td>
-        <td align=middle width=81>
-          <html:img page='/imgs/account_is_active.gif'
-                    alt='Account is active' width='79'
-                    height='23' hspace='2'/>
-        </td>
-        <logic:equal name="canEditPostmasters" value="true">
-          <td align=middle width=79>
-            <html:img page='/imgs/postmaster.gif' alt='Postmaster'
-                      width='79' height='23'/>
-          </td>
-        </logic:equal>
-      </logic:equal>
-    </tr>
-    <logic:iterate indexId="i" id="account" name="accounts"
-                   type="jamm.backend.AccountInfo">
-      <tr class="datarow"
-          onmouseover='OverRow(this, "<%=account.getName()%>")'
-          onmouseout='OutRow(this, "<%=account.getName()%>")'>
-        
-        <td>
-          &nbsp;<html:link page="/private/account_admin.do"
-                           paramId="mail"
-                           paramName="account" paramProperty="name">
-            <bean:write name="account" property="name"/>
-          </html:link>
-          <logic:notEmpty name="account" property="commonName">
-            &nbsp;"<bean:write name="account" property="commonName"/>"
-          </logic:notEmpty>
-          <br/>
-        </td>
-        <td align="left" width="6" bgcolor="#FFFFFF">
-          <html:img page='/imgs/sm_arrow.gif' width="6" height="9"
-                    border="0"
-                    imageName='<%=account.getName()%>'/>
-        </td>
-        <logic:equal name="canEditAccounts" value="true">
-          <td align="center" width="79" class="multibox">
-            <html:multibox property="itemsToDelete" onclick="Toggle(this)">
-              <bean:write name="account" property="name"/>
-            </html:multibox>
-          </td>
-          <td align="center" width="79" class="multibox">  
-            <html:multibox property="activeItems">
-              <bean:write name="account" property="name"/>
-            </html:multibox>
-          </td>
-          <logic:equal name="canEditPostmasters" value="true">
-            <td align="center" width="79" class="multibox">
-              <html:multibox property="adminItems">
-                <bean:write name="account" property="name"/>
-              </html:multibox>
-            </td>
-          </logic:equal>
-        </logic:equal>
-      </tr>
-    </logic:iterate>
-  </table>
-  <table width="100%" border="0" cellspacing="0" cellpadding="4">
-    <tr>
-      <td>
-        <tr>
-          <td align=right>
-            <logic:equal name="canEditAccounts" value="true">
-              <html:submit styleClass="mbutton">
-                <bean:message key="domain_admin.button.submit"/>
-              </html:submit>
-              <html:reset styleClass="button">
-                <bean:message key="button.reset"/> </html:reset>
-            </logic:equal>
-          </td>
-        </tr>
-      </td>
-    </tr>
-  </table>
-</html:form>
-
-<html:form action="/private/domain_alias">
-  <html:hidden property="domain"/>
-  <logic:iterate id="alias" name="domainAliasForm"
-                 property="originalActiveItems" type="String">
-    <html:hidden property="originalActiveItems" value="<%=alias%>"/>
-  </logic:iterate>
-
-  <logic:iterate id="alias" name="domainAliasForm"
-                 property="originalAdminItems" type="String">
-    <html:hidden property="originalAdminItems" value="<%=alias%>"/>
-  </logic:iterate>
-
-  <table width="100%" border="0">
-    <tr>
-      <td>
-        <span class=title>MANAGE ALIASES</span>
-        <html:link forward="add_alias" paramId="domain"
-                   paramName="domain">
-          <bean:message key="domain_admin.link.add_alias"/>
-        </html:link>
-      </td>
-      <td width="6">&nbsp;</td>
-      <td align="middle" width="79">
-        <html:img page='/imgs/delete_alias.gif'
-                  alt='Delete Account' width='79' height='23'/>
-      </td>
-      <td align="middle" width="81">
-        <html:img page='/imgs/alias_is_active.gif'
-                  alt='Account is active' width='79'
-                  height='23' hspace='2'/>
-      </td>
-      <logic:equal name="canEditPostmasters" value="true">
-        <td align=middle width=79>
-          <html:img page='/imgs/postmaster.gif' alt='Postmaster'
-                    width='79' height='23'/>
-        </td>
-      </logic:equal>
-    </tr>
-    <logic:iterate indexId="i" id="alias" name="aliases"
-                   type="jamm.backend.AliasInfo">
-      <tr class="datarow"
-          onmouseover='OverRow(this, "<%=alias.getName()%>")'
-          onmouseout='OutRow(this, "<%=alias.getName()%>")'>
-        <td>
-          &nbsp;<html:link page="/private/account_admin.do" paramId="mail"
-                           paramName="alias" paramProperty="name">
-            <bean:write name="alias" property="name"/>
-          </html:link>
-          <logic:notEmpty name="alias" property="commonName">
-            &nbsp;"<bean:write name="alias" property="commonName"/>"
-          </logic:notEmpty>
-          <div class=destinations>&nbsp;Destinations:
-            <jamm:join limit="3" name="alias" property="mailDestinations"/>
-          </div>
-        </td>
-        <td align="left" width="6" bgcolor="#FFFFFF">
-          <html:img page='/imgs/sm_arrow.gif' width="6" height="9"
-                    border="0"
-                    imageName='<%=alias.getName()%>'/>
-        </td>
-        <td align="center" width="79" class="multibox">
-          <html:multibox property="itemsToDelete">
-            <bean:write name="alias" property="name"/>
-          </html:multibox>
-        </td>
-        <td align="center" width="79" class="multibox">
-          <html:multibox property="activeItems">
-            <bean:write name="alias" property="name"/>
-          </html:multibox>
-        </td>
-        <logic:equal name="canEditPostmasters" value="true">
-          <td align="center" width="79" class="multibox">
-            <html:multibox property="adminItems">
-              <bean:write name="alias" property="name"/>
-            </html:multibox>
-          </td>
-        </logic:equal>
-      </tr>
-    </logic:iterate>
-  </table>
-  <table width="100%" border="0" cellspacing="0" cellpadding="4"><tr><td>
-        <tr>
-          <td align=right>
-            <html:submit styleClass="mbutton">
-              <bean:message key="domain_admin.button.submit"/>
-            </html:submit>
-            <html:reset styleClass="button">
-              <bean:message key="button.reset"/> </html:reset>
-        </tr>
-  </table>
-</html:form>
+<!-- domain form begin -->
+
+<p id="domtabprintview"></p>
+<div class="domtab">
+	<ul class="domtabs">
+		<li><a href="#global">Global Settings</a></li>
+		<li><a href="#accounts">Account Settings</a></li>
+		<li><a href="#forwards">Forwarding (Aliases)</a></li>
+	</ul>
+
+	<div id="domcontent">
+		<h2><a name="global" id="global">Global Domain Settings</a></h2>
+		<logic:notEmpty name="catchAllAlias">
+			<p class="note important green">Catch all is currently <strong>active</strong>!<br />Destination: <strong><bean:write name="catchAllAlias"/></strong></p>
+		</logic:notEmpty>
+		<p><html:link forward="change_password" paramId="mail" name="postmasterPasswordParameters"><bean:message key="domain_admin.link.change_postmaster_pw"/></html:link></p>
+		<p>Use this option to change the password for the postmaster user (postmaster@<bean:write name="domain"/>)</p>
+		<p><html:link forward="catch_all_admin" paramId="domain" paramName="domain">Edit Catch-All</span></html:link></p>
+		<p>A catch-all enables all mail to the domain @<bean:write name="domain"/> to be delivered to a single inbox</p>
+		<p><a href="#top">back to menu</a></p>
+	</div>
+	<div id="domcontent">
+        <h2><a name="accounts" id="accounts">Account Management</a></h2>
+		<logic:equal name="canEditAccounts" value="true">
+		    <p><html:link forward="add_account" paramId="domain" paramName="domain"><bean:message key="domain_admin.link.add_account"/></html:link></p>
+		</logic:equal>
+		<h2><a>Accounts currently listed on <bean:write name="domain"/></a></h2>
+		<logic:empty name="accounts"><p>No aliases listed. Use the link above to add a new one.</p></logic:empty>
+		
+		<logic:notEmpty name="accounts">
+		
+			<html:form action="/private/domain_account">
+			  <html:hidden property="domain"/>
+			  <logic:iterate id="account" name="domainAccountForm"
+			                 property="originalActiveItems" type="String">
+			    <html:hidden property="originalActiveItems" value="<%=account%>"/>
+			  </logic:iterate>
+
+			  <logic:iterate id="account" name="domainAccountForm"
+			                 property="originalAdminItems" type="String">
+			    <html:hidden property="originalAdminItems" value="<%=account%>"/>
+			  </logic:iterate>
+
+			  <logic:iterate id="account" name="domainAccountForm"
+			                 property="originalItemsToDelete" type="String">
+			    <html:hidden property="originalItemsToDelete" value="<%=account%>"/>
+			  </logic:iterate>
+
+			<%-- FUCKING SON OF A BITCH
+			<html:form action="/private/site_config">
+			  <logic:iterate indexId="i" id="domain" name="domains" type="jamm.backend.DomainInfo">
+			<html:link page="/private/domain_admin.do" paramId="domain" paramName="domain" paramProperty="name">
+			                <bean:write name="domain" property="name"/>
+			            </html:link>
+			  </logic:iterate>
+			</html:form>
+			--%>
+		
+			<table summary="Accounts list">
+				<caption>Accounts list</caption>
+				<thead>
+					<tr>
+						<th scope="col">Address/name</th>
+						<logic:equal name="canEditAccounts" value="true">
+							<th scope="col" abbr="Delete Domain"><html:img page="/imgs/delete_domain.png" width="16" height="16" alt="Delete Domain" border="0"/></th>
+							<th scope="col" abbr="Domain is Active"><html:img page="/imgs/domain_is_active.png" width="16" height="16" alt="Domain is acive?" border="0"/></th>
+							<logic:equal name="canEditPostmasters" value="true">
+								<th scope="col" abbr="Appoint Postmasters"><html:img page="/imgs/appoint_postmasters.png" width="16" height="16" alt="Appoint Postmasters" border="0"/></th>
+							</logic:equal>
+						</logic:equal>
+					</tr>
+				</thead>
+				<tbody>
+				<logic:iterate indexId="i" id="account" name="accounts" type="jamm.backend.AccountInfo">
+					<tr>
+						<th scope="row" class="main">
+							<html:link page="/private/account_admin.do" paramId="mail" paramName="account" paramProperty="name">
+							<bean:write name="account" property="name"/>
+							<logic:notEmpty name="account" property="commonName">
+								<span id="commonName">(<bean:write name="account" property="commonName"/>)</span>
+							</logic:notEmpty>
+							</html:link>
+						</th>
+						<td><html:multibox property="itemsToDelete" onclick="Toggle(this)">
+	                            <bean:write name="account" property="name"/>
+	                        </html:multibox></td>
+						<td><html:multibox property="activeItems">
+	                            <bean:write name="account" property="name"/>
+	                        </html:multibox></td>
+						<logic:equal name="canEditPostmasters" value="true">
+							<td><html:multibox property="adminItems">
+						            <bean:write name="account" property="name"/>
+						        </html:multibox></td>
+						</logic:equal>
+					</tr>
+				</logic:iterate>
+				</tbody>
+				</table>
+				
+				<logic:equal name="canEditAccounts" value="true">
+				<div id="clearboth">&nbsp;</div>
+					<html:submit styleClass="mbutton">
+						<bean:message key="domain_admin.button.submit"/>
+					</html:submit>
+					<html:reset styleClass="button">
+						<bean:message key="button.reset"/> </html:reset>
+				</logic:equal>
+
+				</html:form>
+				
+			</logic:notEmpty>
+		</div>
+		
+		
+		
+		<div id="domcontent">
+			<h2><a name="forwards" id="forwards">Fowards (Mail Aliases)</a></h2>
+			
+			<p><html:link forward="add_alias" paramId="domain" paramName="domain"><bean:message key="domain_admin.link.add_alias"/></html:link></p>
+			
+			<h2><a>Aliases currently listed on <bean:write name="domain"/></a></h2>
+			
+			<logic:empty name="aliases"><p>No aliases listed. Use the link above to add a new one.</p></logic:empty>
+			<logic:notEmpty name="aliases">
+				<%-- alias form begin --%><html:form action="/private/domain_alias">
+
+				<%-- Alias - hidden values --%>
+				<html:hidden property="domain"/>
+					<logic:iterate id="alias" name="domainAliasForm"
+					property="originalActiveItems" type="String">
+					<html:hidden property="originalActiveItems" value="<%=alias%>"/>
+				</logic:iterate>
+				<logic:iterate id="alias" name="domainAliasForm"
+					property="originalAdminItems" type="String">
+					<html:hidden property="originalAdminItems" value="<%=alias%>"/>
+				</logic:iterate>
+
+				<table width="100%" border="0" id="aliases">
+
+					<tr class="header">
+						<th scope="col" abbr="Aliases">&nbsp;</th>
+						<th scope="col" abbr="Hover">&nbsp;</th>
+						<th scope="col" abbr="Delete Account"><html:img page="/imgs/delete_domain.png" width="16" height="16" alt="Delete Account" border="0"/></th>
+						<th scope="col" abbr="Alias is active"><html:img page="/imgs/domain_is_active.png" width="16" height="16" alt="Alias is active" border="0"/></th>
+						<logic:equal name="canEditPostmasters" value="true">
+							<th scope="col" abbr="Is Postmaster"><html:img page="/imgs/appoint_postmasters.png" width="16" height="16" alt="Appoint Postmasters" border="0" hspace="1"/></th>
+						</logic:equal>
+					</tr>
+			
+
+				<logic:iterate indexId="i" id="alias" name="aliases" type="jamm.backend.AliasInfo">
+					<tr <% if ((i % 2) == 0) {%> class="odd green" <% } else {%> class ="even green" <%} %>
+						onmouseover='OverRow(this, "<%=alias.getName()%>")'
+						onmouseout='OutRow(this, "<%=alias.getName()%>")'>
+					<td>&nbsp;<html:link page="/private/account_admin.do" paramId="mail"
+						paramName="alias" paramProperty="name">
+						<bean:write name="alias" property="name"/></html:link>
+						
+						<logic:notEmpty name="alias" property="commonName">
+						&nbsp;&#8220;<bean:write name="alias" property="commonName"/>&#8221;
+						</logic:notEmpty>
+					<div class="destinations">Redirects to:
+					<jamm:join limit="3" name="alias" property="mailDestinations"/>
+					</div>
+					</td>
+					<td align="left" width="6" bgcolor="#FFFFFF">
+					<html:img page='/imgs/sm_arrow.gif' width="6" height="9"
+					border="0"
+					imageName='<%=alias.getName()%>'/>
+					</td>
+					<td align="center" class="multibox">
+					<html:multibox property="itemsToDelete">
+					<bean:write name="alias" property="name"/>
+					</html:multibox>
+					</td>
+					<td align="center" class="multibox">
+					<html:multibox property="activeItems">
+					<bean:write name="alias" property="name"/>
+					</html:multibox>
+					</td>
+					<logic:equal name="canEditPostmasters" value="true">
+					<td align="center" class="multibox">
+					<html:multibox property="adminItems">
+					<bean:write name="alias" property="name"/>
+					</html:multibox>
+					</td>
+					</logic:equal>
+					</tr>
+				</logic:iterate>
+				</table>
+				
+				<html:submit styleClass="mbutton">
+				<bean:message key="domain_admin.button.submit"/>
+				</html:submit>
+				<html:reset styleClass="button">
+				<bean:message key="button.reset"/> </html:reset>
+				</html:form>
+			</logic:notEmpty>
+
+			</div></div>
+</div>
+
+<%--
+<logic:equal name="canEditAccounts" value="true">
+	<div style="float:right">
+	<html:img page='/imgs/delete_account.gif' alt='Delete Account' width='79' height='23'/>
+	<html:img page='/imgs/account_is_active.gif' alt='Account is active' width='79' height='23' hspace='2'/>
+	<logic:equal name="canEditPostmasters" value="true">
+		<html:img page='/imgs/postmaster.gif' alt='Postmaster' width='79' height='23'/>
+	</logic:equal>
+	</div>
+</logic:equal>
+<ul id="inlinerows">
+<logic:iterate indexId="i" id="account" name="accounts" type="jamm.backend.AccountInfo">
+	<li class="datarow" onmouseover='OverRow(this, "<%=account.getName()%>")' onmouseout='OutRow(this, "<%=account.getName()%>")'>
+		<ul class="inlinerow">
+			<li class="main">&nbsp;
+				<html:link page="/private/account_admin.do" paramId="mail" paramName="account" paramProperty="name">
+	 		  		<bean:write name="account" property="name"/>
+				</html:link>
+				<logic:notEmpty name="account" property="commonName">&nbsp;
+					"<bean:write name="account" property="commonName"/>"
+				</logic:notEmpty>
+			</li>
+	<li class="arrow">
+                <html:img page='/imgs/sm_arrow.gif' width="6" height="9" border="0" imageName='<%=account.getName()%>'/>
+	</li>
+
+</ul>
+
+
+<div class="clearboth">&nbsp;</div>
+</logic:iterate>
+--%>
+
+</div>
diff -rupN jamm-0.9.6/WEB-INF/tiles/domain_exists_error.jsp jamm/WEB-INF/tiles/domain_exists_error.jsp
--- jamm-0.9.6/WEB-INF/tiles/domain_exists_error.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/tiles/domain_exists_error.jsp	2012-02-10 16:24:47.000000000 -0500
@@ -1,9 +1,11 @@
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
-<h1 align="center">
+<div id="body">
+<h1 class="header">
   JAMM Account or Alias Error Page
 </h1>
 
 <html:messages header="domain_exists.error.header"
                footer="domain_exists.error.footer" id="error">
-  <bean:write name="error"/>
+<bean:write name="error"/>
 </html:messages>
+</body>
\ No newline at end of file
diff -rupN jamm-0.9.6/WEB-INF/tiles/general_error.jsp jamm/WEB-INF/tiles/general_error.jsp
--- jamm-0.9.6/WEB-INF/tiles/general_error.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/tiles/general_error.jsp	2012-02-10 16:24:42.000000000 -0500
@@ -1,5 +1,5 @@
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
-<h1 align="center">
+<h1 class="header error">
   JAMM Error Page
 </h1>
 
diff -rupN jamm-0.9.6/WEB-INF/tiles/login.jsp jamm/WEB-INF/tiles/login.jsp
--- jamm-0.9.6/WEB-INF/tiles/login.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/tiles/login.jsp	2012-02-10 16:39:50.000000000 -0500
@@ -1,38 +1,42 @@
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
-<span class=header>MAIL ADMINISTRATION</span>
-<br />
-
 <bean:parameter id="done" name="done" value="/"/>
-<html:errors/>
+<bean:define id="i18n_username"><bean:message key="login.prompt.username"/></bean:define>
+<bean:define id="i18n_password"><bean:message key="login.prompt.password"/></bean:define>
+
 <html:form action="/login" focus="username">
-  <html:hidden property="done" value="<%= done %>"/>
-  <table border="0">
-    <tr>
-      <td align="right">
-        <bean:message key="login.prompt.username"/>
-      </td>
-      <td align="left">
-        <html:text property="username" size="30"/>
-      </td>
-    </tr>
-    <tr>
-      <td align="right">
-        <bean:message key="login.prompt.password"/>
-      </td>
-      <td align="left">
-        <html:password property="password" size="30"/>
-      </td>
-    </tr>
-    <tr>
-      <td><br></td>
-      <td>
-        <html:submit styleClass="mbutton">
-          <bean:message key="login.button.submit"/>
-        </html:submit>
-        <html:cancel styleClass="button">
-          <bean:message key="login.button.cancel"/>
-        </html:cancel>
-      </td>
-    </tr>
-  </table>
+<html:hidden property="done" value="<%= done %>"/>
+
+<div id="login">
+	<%-- <html:img page="/imgs/login-top.png" width="443" height="144" border="0"/>--%>
+	<div id="login-header">
+
+	<h1>eMail Admin: Please log in</h1>
+	<html:errors/>
+	
+	</div>
+	<div id="login-body">
+		<div class="wrap">
+			<div id="form">
+				<div id="required">
+					<label for="username"><bean:message key="login.prompt.username"/></label>
+					<html:text property="username" size="35"/>
+				</div>
+				<div id="required">
+					<label for="password"><bean:message key="login.prompt.password"/></label>
+					<html:password property="password" size="35"/>
+				</div>
+				<fieldset class="center">
+					<html:submit styleClass="button">
+						<bean:message key="login.button.submit"/>
+					</html:submit>
+					<html:cancel styleClass="button">
+						<bean:message key="login.button.cancel"/>
+					</html:cancel>
+				</fieldset>
+			</div>
+		</div>
+	</div>
+	<div id="login-footer">&nbsp;</div>	
+</div>
+        
 </html:form>
diff -rupN jamm-0.9.6/WEB-INF/tiles/permission_error.jsp jamm/WEB-INF/tiles/permission_error.jsp
--- jamm-0.9.6/WEB-INF/tiles/permission_error.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/tiles/permission_error.jsp	2010-01-03 10:03:14.000000000 -0500
@@ -1,6 +1,6 @@
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
 <h1 align="center">
-  JAMM Permission Error Page
+ Permission Error!
 </h1>
 
 <html:messages header="permission.error.header"
diff -rupN jamm-0.9.6/WEB-INF/tiles/site_admin.jsp jamm/WEB-INF/tiles/site_admin.jsp
--- jamm-0.9.6/WEB-INF/tiles/site_admin.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/WEB-INF/tiles/site_admin.jsp	2012-02-10 16:55:29.000000000 -0500
@@ -1,5 +1,6 @@
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
-<span class=header>SITE ADMINISTRATION</span>
+<div id="body">
+<h1 class="header">SITE ADMINISTRATION</h1>
 <html:errors/>
 <html:form action="/private/site_config">
   <logic:iterate id="domain" name="siteConfigForm"
@@ -22,86 +23,63 @@
     <html:hidden property="originalDelete" value="<%=domain%>"/>
   </logic:iterate>
 
-  <table width="100%" border="0">
-    <tr>
-      <td>
-        <span class=title>MANAGE DOMAINS</span>
-        <html:link forward="add_domain">
-          <bean:message key="site_admin.link.add_domain"/>
-        </html:link>
-      </td>
-      <td width="6">&nbsp;</td>
-      <td width="79">
-        <html:img page="/imgs/delete_domain.gif"
-                  width="79" height="23" alt="" border="0"/>
-      </td>
-      <td width="79">
-        <html:img page="/imgs/edit_accounts.gif"
-                  width="79" height="23" alt="" border="0"/>
-      </td>
-      <td width="81">
-        <html:img page="/imgs/appoint_postmasters.gif"
-                  width="79" height="23" alt="" border="0"
-                  hspace="1"/>
-      </td>
-      <td width="79">
-        <html:img page="/imgs/domain_is_active.gif"
-                  width="79" height="23" alt="" border="0"/>
-      </td>
-    </tr>
-    <logic:iterate indexId="i" id="domain" name="domains"
-                   type="jamm.backend.DomainInfo">
-      <tr class="datarow"
-          onmouseover='OverRow(this, "<%=domain.getName()%>")'
-          onmouseout='OutRow(this, "<%=domain.getName()%>")'>
+<html:link forward="add_domain" styleClass="add_domain">
+	<bean:message key="site_admin.link.add_domain"/>
+</html:link>
+<table id="Domains" cellspacing="0" summary="Manage domains">
+<caption>Manage Domains</caption>
+<tr class="header">
+  <th scope="col" abbr="Domain">&nbsp;</th>
+  <th scope="col" abbr="Hover">&nbsp;</th>
+  <th scope="col" abbr="Delete Domain"><html:img page="/imgs/delete_domain.png" width="16" height="16" alt="Delete Domain" border="0"/></th>
+  <th scope="col" abbr="Edit Accounts"><html:img page="/imgs/edit_accounts.png" width="16" height="16" alt="Edit Accounts" border="0"/></th>
+  <th scope="col" abbr="Appoint Postmasters"><html:img page="/imgs/appoint_postmasters.png" width="16" height="16" alt="Appoint Postmasters" border="0"/></th>
+  <th scope="col" abbr="Domain is Active"><html:img page="/imgs/domain_is_active.png" width="16" height="16" alt="Domain is acive?" border="0"/></th>
+</tr>
+<!-- <iterate> -->
+<logic:iterate indexId="i" id="domain" name="domains" type="jamm.backend.DomainInfo">
+	<tr <% if ((i % 2) == 0) {%> class="odd" <% } else {%> class ="even" <%} %>
+		onmouseover='OverRow(this, "<%=domain.getName()%>")' onmouseout='OutRow(this, "<%=domain.getName()%>")'>
+    	<td class="domain"><html:link page="/private/domain_admin.do" paramId="domain" paramName="domain" paramProperty="name">
+          		<bean:write name="domain" property="name"/>
+            </html:link>
+            <span class="destinations">
+            	<bean:write name="domain" property="accountCount"/> mailboxes, 
+                <bean:write name="domain" property="aliasCount"/> aliases.
+            </span>
+        </td>
+        <td class="hover">
+			<html:img page='/imgs/sm_arrow.gif' width="6" height="9" border="0" imageName='<%=domain.getName()%>'/>
+        </td>
         <td>
-          <html:link page="/private/domain_admin.do" paramId="domain"
-                     paramName="domain" paramProperty="name">
-            <bean:write name="domain" property="name"/>
-          </html:link>
-          <br />
-          <div class="destinations">
-            &nbsp;
-            accounts: <bean:write name="domain" property="accountCount"/>
-            &nbsp;
-            aliases: <bean:write name="domain" property="aliasCount"/>
-          </div>
-        </td>
-        <td align="left" width="6" bgcolor="#FFFFFF">
-          <html:img page='/imgs/sm_arrow.gif' width="6" height="9"
-                    border="0" align="middle"
-                    imageName='<%=domain.getName()%>'/>
-        </td>
-        <td align="center" width="79" class="multibox">
-          <html:multibox property="delete">
-            <bean:write name="domain" property="name"/>
-          </html:multibox>
-        </td>
-        <td align="center" width="79" class="multibox">
-          <html:multibox property="allowEditAccounts" onclick="Toggle(this)">
-            <bean:write name="domain" property="name"/>
-          </html:multibox>
-        </td>
-        <td align="center" width="81" class="multibox">
-          <html:multibox property="allowEditPostmasters">
-            <bean:write name="domain" property="name"/>
-          </html:multibox>
-        </td>
-        <td align="center" width=79 class="multibox">
-          <html:multibox property="active">
-            <bean:write name="domain" property="name"/>
-          </html:multibox>
-        </td>
-      </tr>
-    </logic:iterate>
-  </table>
-  <table width="100%" border="0" cellspacing="0" cellpadding="4"><tr><td>
-        <tr>
-          <td align=right>
-            <html:submit styleClass="mbutton">
-              <bean:message key="site_admin.button.submit"/>
-            </html:submit>
-          </td>
-        </tr>
-  </table>
+        	<html:multibox property="delete">
+            	<bean:write name="domain" property="name"/>
+        	</html:multibox>
+        </td>
+      	<td>
+        	<html:multibox property="allowEditAccounts" onclick="Toggle(this)">
+          		<bean:write name="domain" property="name"/>
+       	 	</html:multibox>
+        </td>
+      	<td><html:multibox property="allowEditPostmasters">
+          		<bean:write name="domain" property="name"/>
+        	</html:multibox>
+        </td>
+      	<td>
+        	<html:multibox property="active">
+          		<bean:write name="domain" property="name"/>
+        	</html:multibox>
+        </td>
+	</tr>
+</logic:iterate>
+<!-- </iterate> -->
+</table>
+<div id="submit_bar">
+	<div class="floatRight">
+		<html:submit styleClass="mbutton">
+			<bean:message key="site_admin.button.submit"/>
+		</html:submit>
+	</div>
+</div>
 </html:form>
+</div>
diff -rupN jamm-0.9.6/WEB-INF/web.xml jamm/WEB-INF/web.xml
--- jamm-0.9.6/WEB-INF/web.xml	2003-12-02 09:51:02.000000000 -0500
+++ jamm/WEB-INF/web.xml	2011-05-31 10:07:06.000000000 -0400
@@ -86,6 +86,11 @@
   in your merge dir.
   -->
 
+<taglib>
+  <taglib-uri>http://jakarta.apache.org/taglibs/string-1.1</taglib-uri>
+  <taglib-location>/WEB-INF/taglibs-string.tld</taglib-location>
+</taglib>
+
    <!--
    To set up security settings for your web app, create a file named web-security.xml, put it in your project's mergedir.
    Organize web-security.xml following this DTD slice:
diff -rupN jamm-0.9.6/common.css jamm/common.css
--- jamm-0.9.6/common.css	2003-12-02 09:51:00.000000000 -0500
+++ jamm/common.css	2012-02-10 17:17:33.000000000 -0500
@@ -1,73 +1,421 @@
+#body {
+	padding-bottom:50px;
+}
+
+* {
+	padding:0;
+	margin:0;
+	list-style-type:none;   
+}
+
+.padLeft {
+	padding-left:1em;
+}
+
 body {
-  font-family: verdana,helvetica;
+	font-family: verdana,helvetica;
+	background-color:#333;
+	color:#ccc;	
+}
+
+#domcontent a {
+	text-decoration:none;
+}
+
+#domcontent h2 {
+
 }
+
+#jamm {
+/*	background-color: #FAFAF0;*/
+/*	background-color: #E4ECF6; */
+}
+
 h3 {
-  color:#FF3300;
-  font-family: helvetica,arial;
+
 }
 .title {
-  font-size: 14px;
   font-weight: bold;
-  color:#00000;
 }
+.tabs ul {
+  display: block;
+  background-color: #EFF7FF;
+}
+.tabs ul li {
+margin 0 10px 0 10px;
+}
+
 .header {
-  font-size: 18px;
-  font-weight: bold;
-  color:#000000;
+	font-size: 1.3em;
+	font-weight: bold;
+	color:#ccc;
+	margin: 1em 0;
 }
+
+#header {
+	padding: 8px;
+	background-color: #3f3f3f;
+	border-bottom: 5px #000 solid;
+	min-height: 81px;
+}
+
+#links {
+	color: #333;
+	padding: 0; margin: 0;
+}
+
+#links ul {
+	list-style-type: none;
+	margin: 0;
+	padding: 0;
+}
+
+#links ul li {
+	display: inline;
+}
+
+#links ul li a:link, #links ul li a:visited, #links ul li a:active {
+	padding: 5px;
+	text-decoration:none;
+}
+
+#links ul li a:hover {
+    padding: 5px;
+	color: #333;
+    text-decoration: underline;
+}
+
+#body {
+	margin:0 20px;
+}
+
+a.add_domain, a:visited.add_domain {
+	padding:5px;
+	color:#fff;
+	text-transform:uppercase;
+}
+
 .destinations {
-  font-size: 11px;
-  color:#333333;
+	text-transform:uppercase;
+	font-weight:400;
+	font-size:.8em;
 }
 .datarow {
-  background-color: #E4ECF6;
+	
 }
 .datarowon {
-  background-color: #EFF7FF;
+	
 }
 .datarowhigh {
-  background-color: #B6D3EF;
+	
 }
 .datarowhighon {
-  background-color: #EFF7FF;
+	
 }
 .account {
-  background-color: #EEEEFF;
+	background-color: #EEEEFF;
 }
 .multibox {
-  background-color: #EFF7FF;
+	
 }
 a {
-  font-family: verdana,helvetica;
-  font-size: 12px;
-  color:#333333;
+	color:#A40;
 }
 a:active {
-  color:#666666;
+	color:#666666;
 }
 a:visited {
-  color:#999999;
+	color:#A40;
 }
 a:hover {
-  color:#FF6600;
-  text-decoration: underline;
+	color:#FF6600;
+	text-decoration: underline;
 }
 
+a.rollover {
+	display:block;
+	width: 70px;
+	height: 70px;
+	text-decoration: none;
+	text-indent: -5000px;
+	float: left;
+	margin-right: 8px;
+}
+	
+a.rollover:hover {
+	background-position: 0 -81px!important;
+	}
+
+a.rollover.logout {
+	background: url('/jamm/imgs/button-logout.png') no-repeat;
+	}
+a.rollover.siteAdmin {
+	background: url('/jamm/imgs/button-site.png') no-repeat;
+	}
+a.rollover.domainAdmin {
+	background: url('/jamm/imgs/button-domain.png') no-repeat;
+	}
+
 input.mbutton {
-  cursor: hand; 
-  background-color: #E4ECF6; 
-  text-align: center;
-  font-family: verdana, arial, sans-serif;
-  font-size: 11px;
-  font-weight: bold;
 }
 
 input.button {
-  cursor: hand; 
-  background-color: #E4ECF6; 
-  text-align: center;
-  font-family: verdana, arial, sans-serif;
-  font-size: 11px;
-  font-weight: normal;
 }
 
+.note {
+	
+}
+
+.important {
+	background:#F96;
+	border: 3px #f33 solid;
+}
+
+.highlight {
+	background: #FF6;
+	color:#333;
+	margin:5px 0px;
+	padding: 3px;
+}
+	
+
+ul#inlinerows {
+	margin: 0;
+	padding: 0;
+}
+
+ul#inlinerows li {
+	display:inline;
+}
+
+ul#inlinerows li.row {
+	display: block;
+	margin-bottom:5px;
+	clear:both;
+}
+
+ul#inlinerows li.email {
+	position:absolute;
+	right:200px;	
+	left:20px;
+	padding: 1px;
+}
+
+ul.inlinerow {
+	clear:both;
+	margin:5px;
+}
+
+#submit_bar {
+	padding:20px;
+}
+
+#Domains {
+	width:95%;
+	margin:0 auto;
+}
+
+tbody tr {
+	line-height:1.3em;
+}
+
+#Domains tbody tr td {
+	padding:0 5px;
+}
+
+tr.header {
+	
+}
+tr.odd {
+	background-color:#3F3F3F;
+}
+
+tr.even {
+	background-color:#333;
+}
+
+tr.odd.green {
+	background-color:#AFCAAF;
+}
+
+tr.even.green {
+	background-color:#8BB18b;
+}
+
+td.domain {
+	width:100%;
+}
+
+td.hover {
+	position:relative;
+}
+
+td.hover#img {
+	position:absolute; top:50%; 8px; margin-top:-4px;
+}
+
+table caption {
+	display:none;
+}
+
+table a {
+	padding: 1px;
+	text-decoration: none;
+}
+
+th.main {
+	text-align:left;
+	float:left;
+	padding-right: 0px;
+}
+
+.floatRight {
+	float:right;
+}
+
+.padClear {
+	clear:both;
+	padding: 10px;
+}
+
+.error {
+	color: #ff5a4e;
+}
+
+.nolist {
+	list-style-type:none;
+	display:block;
+}
+
+.error .nolist {
+	
+}
+
+#clearboth {
+	clear:both;
+}
+
+.iterateInline li {
+	display:block;
+	background: #f00;
+}
+
+#commonName{
+}
+
+#login {
+	width: 433px;
+	margin: 5% auto -1px auto; 
+}
+
+#login-header {
+	color:#eee;
+	background: url('/jamm/imgs/login-top.png') no-repeat;
+	position: relative;
+	height: 144px;
+}
+
+#login-header .error, 
+#login-header h1 {
+	font-size: 0.8em;
+	text-align: right;
+	float: right;
+	width: 200px;
+	overflow: auto;
+}
+
+#note {
+	padding:1em;
+	background-color:#222;
+	border:3px #000 solid;
+}
+
+#login-header h1 {	
+	padding: 60px 60px 0 0;
+}
+
+#login-header .error {
+	padding: 0 60px 0 0;
+}
+
+#login-header .error h3, #login-header p.direction {	
+	display: none;
+}
+
+#login-header ul.nolist {
+	display: inline;
+}
+	
+#login-body{
+	position:relative;
+	margin-top: -5px;
+	width: 443px;
+	padding: 20px 0;
+	background: url('/jamm/imgs/login-background.png') repeat-y;
+}
+#login-body .wrap {
+	padding: 0px 65px;
+	width: 300px;
+	}
+#login-footer{
+	position:absolute;
+	background: url('/jamm/imgs/login-bottom.png');
+	width: 443px;
+	min-height: 40px;
+}
+
+#form div label {
+	display: block;
+	float: left;
+	width:90px;
+	padding: 3px 5px;
+	margin: 0 0 5px 0;
+	text-align: right;
+}
+
+#form.wide div label {
+	width:200px;
+}
+
+#form.wide div {
+	clear: left;
+	display: block;
+	width: 500px;
+}
+
+#required {
+	white-space:nowrap;
+}
+
+#form fieldset {
+	clear: none;
+	border-width: 0;
+	border-style: solid;
+	border-color: #666666;
+	margin: 1em 0;
+	padding: 0;
+}
+
+#form fieldset.center {
+	text-align:center;
+}
+
+#form div {
+	clear: left;
+	display: block;
+	width: 390px;
+}
+
+#form div input {
+	padding: 1px 3px;
+	width:200px;
+}
+
+#footer {
+	display:none;
+	padding:10px;
+	margin:20px 0 0 0;
+	border-top:3px #222 solid;
+	background-color:#363636;
+	bottom:0;
+}
diff -rupN jamm-0.9.6/common.js jamm/common.js
--- jamm-0.9.6/common.js	2003-12-02 09:51:00.000000000 -0500
+++ jamm/common.js	2011-05-30 18:35:26.000000000 -0400
@@ -107,4 +107,16 @@ function OutRow(e,which)
     }
   }
 }
+
+function clickclear(thisfield, defaulttext) {
+if (thisfield.value == defaulttext) {
+thisfield.value = "";
+}
+}
+
+function clickrecall(thisfield, defaulttext) {
+if (thisfield.value == "") {
+thisfield.value = defaulttext;
+}
+}
 //-->
Binary files jamm-0.9.6/commons-lang.jar and jamm/commons-lang.jar differ
Binary files jamm-0.9.6/imgs/appoint_postmasters.png and jamm/imgs/appoint_postmasters.png differ
Binary files jamm-0.9.6/imgs/button-domain.png and jamm/imgs/button-domain.png differ
Binary files jamm-0.9.6/imgs/button-logout.png and jamm/imgs/button-logout.png differ
Binary files jamm-0.9.6/imgs/button-site.png and jamm/imgs/button-site.png differ
Binary files jamm-0.9.6/imgs/delete_domain.png and jamm/imgs/delete_domain.png differ
Binary files jamm-0.9.6/imgs/domain_is_active.png and jamm/imgs/domain_is_active.png differ
Binary files jamm-0.9.6/imgs/edit_accounts.png and jamm/imgs/edit_accounts.png differ
Binary files jamm-0.9.6/imgs/jamm_logo.gif and jamm/imgs/jamm_logo.gif differ
Binary files jamm-0.9.6/imgs/login-background.png and jamm/imgs/login-background.png differ
Binary files jamm-0.9.6/imgs/login-bottom.png and jamm/imgs/login-bottom.png differ
Binary files jamm-0.9.6/imgs/login-top.png and jamm/imgs/login-top.png differ
diff -rupN jamm-0.9.6/jamm.tmproj jamm/jamm.tmproj
--- jamm-0.9.6/jamm.tmproj	1969-12-31 19:00:00.000000000 -0500
+++ jamm/jamm.tmproj	2012-02-12 17:34:20.000000000 -0500
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>currentDocument</key>
+	<string>WEB-INF/tiles/add_account.jsp</string>
+	<key>documents</key>
+	<array>
+		<dict>
+			<key>expanded</key>
+			<true/>
+			<key>name</key>
+			<string>jamm</string>
+			<key>regexFolderFilter</key>
+			<string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
+			<key>sourceDirectory</key>
+			<string></string>
+		</dict>
+	</array>
+	<key>fileHierarchyDrawerWidth</key>
+	<integer>200</integer>
+	<key>metaData</key>
+	<dict>
+		<key>WEB-INF/tiles/access_error.jsp</key>
+		<dict>
+			<key>caret</key>
+			<dict>
+				<key>column</key>
+				<integer>0</integer>
+				<key>line</key>
+				<integer>0</integer>
+			</dict>
+			<key>firstVisibleColumn</key>
+			<integer>0</integer>
+			<key>firstVisibleLine</key>
+			<integer>0</integer>
+		</dict>
+		<key>WEB-INF/tiles/account_exists_error.jsp</key>
+		<dict>
+			<key>caret</key>
+			<dict>
+				<key>column</key>
+				<integer>131</integer>
+				<key>line</key>
+				<integer>12</integer>
+			</dict>
+			<key>firstVisibleColumn</key>
+			<integer>0</integer>
+			<key>firstVisibleLine</key>
+			<integer>0</integer>
+		</dict>
+		<key>WEB-INF/tiles/add_account.jsp</key>
+		<dict>
+			<key>caret</key>
+			<dict>
+				<key>column</key>
+				<integer>0</integer>
+				<key>line</key>
+				<integer>40</integer>
+			</dict>
+			<key>firstVisibleColumn</key>
+			<integer>0</integer>
+			<key>firstVisibleLine</key>
+			<integer>8</integer>
+		</dict>
+	</dict>
+	<key>openDocuments</key>
+	<array>
+		<string>WEB-INF/tiles/access_error.jsp</string>
+		<string>WEB-INF/tiles/account_exists_error.jsp</string>
+		<string>WEB-INF/tiles/add_account.jsp</string>
+	</array>
+	<key>showFileHierarchyDrawer</key>
+	<true/>
+	<key>windowFrame</key>
+	<string>{{61, 182}, {1113, 696}}</string>
+</dict>
+</plist>
diff -rupN jamm-0.9.6/login.jsp jamm/login.jsp
--- jamm-0.9.6/login.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/login.jsp	2009-12-24 05:55:39.000000000 -0500
@@ -1,4 +1,4 @@
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
 <tiles:insert definition="login" flush="false">
-  <tiles:put name="title"  value="Jamm - Log In" />
+  <tiles:put name="title"  value="Mail Admin - Log In" />
 </tiles:insert>
diff -rupN jamm-0.9.6/private/site_admin.jsp jamm/private/site_admin.jsp
--- jamm-0.9.6/private/site_admin.jsp	2003-12-02 09:51:00.000000000 -0500
+++ jamm/private/site_admin.jsp	2012-02-08 01:49:11.000000000 -0500
@@ -1,4 +1,4 @@
 <!-- <%@ include file="/WEB-INF/common/all_definitions.jsp" %>  -->
 <tiles:insert definition="site_admin" flush="false">
-  <tiles:put name="title"  value="Jamm - Site Admin" />
+  <tiles:put name="title" value="Jamm - Site Admin" />
 </tiles:insert>
Binary files jamm-0.9.6/private/tab/.index.html.swp and jamm/private/tab/.index.html.swp differ
diff -rupN jamm-0.9.6/private/tab/AddCSS.js jamm/private/tab/AddCSS.js
--- jamm-0.9.6/private/tab/AddCSS.js	1969-12-31 19:00:00.000000000 -0500
+++ jamm/private/tab/AddCSS.js	2009-07-26 16:08:08.000000000 -0400
@@ -0,0 +1,59 @@
+//*** This code is copyright 2002-2003 by Gavin Kistner, gavin@refinery.com
+//*** It is covered under the license viewable at http://phrogz.net/JS/_ReuseLicense.txt
+//*** Reuse or modification is free provided you abide by the terms of that license.
+//*** (Including the first two lines above in your source code satisfies the conditions.)
+
+// Add a new stylesheet to the document;
+// url [optional] A url to an external stylesheet to use
+// idx [optional] The index in document.styleSheets to insert the new sheet before
+function AddStyleSheet(url,idx){
+	var css,before=null,head=document.getElementsByTagName("head")[0];
+
+	if (document.createElement){
+		if (url){
+			css = document.createElement('link');
+			css.rel  = 'stylesheet';
+			css.href = url;
+		} else css = document.createElement('style');
+		css.media = 'all';
+		css.type  = 'text/css';
+
+		if (idx>=0){
+			for (var i=0,ct=0,len=head.childNodes.length;i<len;i++){
+				var el = head.childNodes[i];
+				if (!el.tagName) continue;
+				var tagName = el.tagName.toLowerCase();
+				if (ct==idx){
+					before = el;
+					break;
+				}
+				if (tagName=='style' || tagName=='link' && (el.rel && el.rel.toLowerCase()=='stylesheet' || el.type && el.type.toLowerCase()=='text/css') ) ct++;
+			}
+		}
+		head.insertBefore(css,before);
+
+		return document.styleSheets[before?idx:document.styleSheets.length-1];
+	} else return alert("I can't create a new stylesheet for you. Sorry.");
+}
+// e.g. var newBlankSheetAfterAllOthers = AddStyleSheet(); 
+// e.g. var newBlankSheetBeforeAllOthers = AddStyleSheet(null,0);
+// e.g. var externalSheetAfterOthers = AddStyleSheet('http://phrogz.net/JS/Classes/docs.css');
+// e.g. var externalSheetBeforeOthers = AddStyleSheet('http://phrogz.net/JS/Classes/docs.css',0);
+
+
+// Cross-browser method for inserting a new rule into an existing stylesheet.
+// ss       - The stylesheet to stick the new rule in
+// selector - The string value to use for the rule selector
+// styles   - The string styles to use with the rule
+function AddRule(ss,selector,styles){
+	if (!ss) return false;
+	if (ss.insertRule) return ss.insertRule(selector+' {'+styles+'}',ss.cssRules.length);
+	if (ss.addRule){
+		ss.addRule(selector,styles);
+		return true;
+	}
+	return false;
+}
+
+// e.g. AddRule( document.styleSheets[0] , 'a:link' , 'color:blue; text-decoration:underline' );
+// e.g. AddRule( AddStyleSheet() , 'hr' , 'display:none' );
diff -rupN jamm-0.9.6/private/tab/addclasskillclass.js jamm/private/tab/addclasskillclass.js
--- jamm-0.9.6/private/tab/addclasskillclass.js	1969-12-31 19:00:00.000000000 -0500
+++ jamm/private/tab/addclasskillclass.js	2009-07-26 16:08:08.000000000 -0400
@@ -0,0 +1,14 @@
+//*** This code is copyright 2002-2003 by Gavin Kistner and Refinery; www.refinery.com
+//*** It is covered under the license viewable at http://phrogz.net/JS/_ReuseLicense.txt
+//*** Reuse or modification is free provided you abide by the terms of that license.
+//*** (Including the first two lines above in your source code satisfies the conditions.)
+
+//***Adds a new class to an object, preserving existing classes
+function AddClass(obj,cName){ KillClass(obj,cName); return obj && (obj.className+=(obj.className.length>0?' ':'')+cName); }
+
+//***Removes a particular class from an object, preserving other existing classes.
+function KillClass(obj,cName){ return obj && (obj.className=obj.className.replace(new RegExp("^"+cName+"\\b\\s*|\\s*\\b"+cName+"\\b",'g'),'')); }
+
+//***Returns true if the object has the class assigned, false otherwise.
+function HasClass(obj,cName){ return (!obj || !obj.className)?false:(new RegExp("\\b"+cName+"\\b")).test(obj.className) }
+
diff -rupN jamm-0.9.6/private/tab/attachevent.js jamm/private/tab/attachevent.js
--- jamm-0.9.6/private/tab/attachevent.js	1969-12-31 19:00:00.000000000 -0500
+++ jamm/private/tab/attachevent.js	2009-07-26 16:08:08.000000000 -0400
@@ -0,0 +1,34 @@
+//*** This code is copyright 2003 by Gavin Kistner, gavin@refinery.com
+//*** It is covered under the license viewable at http://phrogz.net/JS/_ReuseLicense.txt
+//*** Reuse or modification is free provided you abide by the terms of that license.
+//*** (Including the first two lines above in your source code satisfies the conditions.)
+
+
+//***Cross browser attach event function. For 'evt' pass a string value with the leading "on" omitted
+//***e.g. AttachEvent(window,'load',MyFunctionNameWithoutParenthesis,false);
+
+function AttachEvent(obj,evt,fnc,useCapture){
+	if (!useCapture) useCapture=false;
+	if (obj.addEventListener){
+		obj.addEventListener(evt,fnc,useCapture);
+		return true;
+	} else if (obj.attachEvent) return obj.attachEvent("on"+evt,fnc);
+	else{
+		MyAttachEvent(obj,evt,fnc);
+		obj['on'+evt]=function(){ MyFireEvent(obj,evt) };
+	}
+} 
+
+//The following are for browsers like NS4 or IE5Mac which don't support either
+//attachEvent or addEventListener
+function MyAttachEvent(obj,evt,fnc){
+	if (!obj.myEvents) obj.myEvents={};
+	if (!obj.myEvents[evt]) obj.myEvents[evt]=[];
+	var evts = obj.myEvents[evt];
+	evts[evts.length]=fnc;
+}
+function MyFireEvent(obj,evt){
+	if (!obj || !obj.myEvents || !obj.myEvents[evt]) return;
+	var evts = obj.myEvents[evt];
+	for (var i=0,len=evts.length;i<len;i++) evts[i]();
+}
diff -rupN jamm-0.9.6/private/tab/domtab.css jamm/private/tab/domtab.css
--- jamm-0.9.6/private/tab/domtab.css	1969-12-31 19:00:00.000000000 -0500
+++ jamm/private/tab/domtab.css	2012-02-10 13:36:38.000000000 -0500
@@ -0,0 +1,149 @@
+		div.domtab{
+			padding:0 3em;
+
+		}
+		ul.domtabs{
+			float:left;
+			width:100%;
+			margin:2em 0 0 0;				
+		}
+		ul.domtabs li{
+			float:left;
+			padding:0 .5em 0 0;
+		}
+		ul.domtabs a:link,
+		ul.domtabs a:visited,
+		ul.domtabs a:active,
+		ul.domtabs a:hover{
+			width:8em;
+			padding:.2em 1em;
+			display:block;
+			background:#666;
+			color:#ccc;
+			height:3em;
+			font-weight:bold;
+			text-decoration:none;
+		}
+		html>body ul.domtabs a:link,
+		html>body ul.domtabs a:visited,
+		html>body ul.domtabs a:active,
+		html>body ul.domtabs a:hover{
+			height:auto;
+			min-height:3em;
+		}
+		ul.domtabs a:hover{
+			background:#696;
+		}
+		div.domtab div{
+			clear:both;
+			width:auto;
+			background:#696;
+			color:#fff;
+			padding:1em 3em;
+		}
+		ul.domtabs li.active a:link,
+		ul.domtabs li.active a:visited,
+		ul.domtabs li.active a:active,
+		ul.domtabs li.active a:hover{
+			background:#696;
+			color:#fff;
+		}
+		#domtabprintview{
+			display:none;
+			float:right;
+			padding-right:1em;
+			text-align:right;
+		}
+		#domtabprintview a:link,
+		#domtabprintview a:visited,
+		#domtabprintview a:active,
+		#domtabprintview a:hover{
+			color:#fff;
+		}
+		p{
+			margin:0 0 .5em 0;
+			line-height:1.3em;
+		}
+		#domtabs h2{
+			font-size:1.3em;
+			color:#cfc;
+			text-transform:uppercase;
+			font-family:"Trebuchet MS",Arial,Sans-Serif;
+			padding:0 0 .7em .2em;
+		}
+		h1{
+			font-size:2em;
+			text-align:center;
+			font-weight:normal;
+			text-transform:uppercase;
+			font-family:"Trebuchet MS",Arial,Sans-Serif;
+			padding:.5em 0;
+			background:#000;
+			border-bottom:1px solid #666;
+		}
+		pre{
+			font-size:1.2em;
+			padding:1em;
+		}
+		div.domtabs div a:link,
+		div.domtabs div a:visited,
+		div.domtabs div a:active
+		{
+			color:#fff;
+			display:block;
+			padding:1em .5em;
+			font-weight:bold;
+			font-size:1.3em;
+		}
+		div.domtab div h2 a,
+		div.domtab div h2 a:hover,
+		div.domtab div h2 a:active
+		{
+			color:#cfc;
+			display:inline;
+			padding:0;
+			font-weight:normal;
+			font-size:1em;
+		}
+		
+/* other scheme! */
+#other{
+	font-size:.8em;
+	margin-left:.3em;
+	width:60em;
+	margin-bottom:3em;
+	float:left;
+}
+div#other.domtabs div{
+	clear:both;
+	width:54em;
+	background:#669;
+	color:#fff;
+	padding:1em 3em;
+}
+		
+#other ul.domtabs a:hover{
+	background:#669;
+}
+div#other ul.domtabs li.active a:link,
+div#other ul.domtabs li.active a:visited,
+div#other ul.domtabs li.active a:active,
+div#other ul.domtabs li.active a:hover{
+	background:#669;
+	color:#fff;
+}
+#other div{
+	float:left;
+}
+ul.prevnext{
+	float:left;
+	width:100%;
+}
+ul.prevnext li{
+	float:left;
+	width:49%;
+}
+ul.prevnext li.next{
+	float:right;
+	text-align:right;
+}
diff -rupN jamm-0.9.6/private/tab/domtab.js jamm/private/tab/domtab.js
--- jamm-0.9.6/private/tab/domtab.js	1969-12-31 19:00:00.000000000 -0500
+++ jamm/private/tab/domtab.js	2006-03-01 17:38:10.000000000 -0500
@@ -0,0 +1,256 @@
+/*
+	DOMtab Version 3.1415927
+	Updated March the First 2006
+	written by Christian Heilmann
+	check blog for updates: http://www.wait-till-i.com	
+	free to use, not free to resell
+*/
+
+domtab={
+	tabClass:'domtab', // class to trigger tabbing
+	listClass:'domtabs', // class of the menus
+	activeClass:'active', // class of current link
+	contentElements:'div', // elements to loop through
+	backToLinks:/#top/, // pattern to check "back to top" links
+	printID:'domtabprintview', // id of the print all link
+	showAllLinkText:'show all content', // text for the print all link
+	prevNextIndicator:'doprevnext', // class to trigger prev and next links
+	prevNextClass:'prevnext', // class of the prev and next list
+	prevLabel:'previous', // HTML content of the prev link
+	nextLabel:'next', // HTML content of the next link
+	prevClass:'prev', // class for the prev link
+	nextClass:'next', // class for the next link
+	init:function(){
+		var temp;
+		if(!document.getElementById || !document.createTextNode){return;}
+		var tempelm=document.getElementsByTagName('div');		
+		for(var i=0;i<tempelm.length;i++){
+			if(!domtab.cssjs('check',tempelm[i],domtab.tabClass)){continue;}
+			domtab.initTabMenu(tempelm[i]);
+			domtab.removeBackLinks(tempelm[i]);
+			if(domtab.cssjs('check',tempelm[i],domtab.prevNextIndicator)){
+				domtab.addPrevNext(tempelm[i]);
+			}
+			domtab.checkURL();
+		}
+		if(document.getElementById(domtab.printID) 
+		   && !document.getElementById(domtab.printID).getElementsByTagName('a')[0]){
+			var newlink=document.createElement('a');
+			newlink.setAttribute('href','#');
+			domtab.addEvent(newlink,'click',domtab.showAll,false);
+			newlink.onclick=function(){return false;} // safari hack
+			newlink.appendChild(document.createTextNode(domtab.showAllLinkText));
+			document.getElementById(domtab.printID).appendChild(newlink);
+		}
+	},
+	checkURL:function(){
+		var id;
+		var loc=window.location.toString();
+		loc=/#/.test(loc)?loc.match(/#(\w.+)/)[1]:'';
+		if(loc==''){return;}
+		var elm=document.getElementById(loc);
+		if(!elm){return;}
+		var parentMenu=elm.parentNode.parentNode.parentNode;
+		parentMenu.currentSection=loc;
+		parentMenu.getElementsByTagName(domtab.contentElements)[0].style.display='none';
+		domtab.cssjs('remove',parentMenu.getElementsByTagName('a')[0].parentNode,domtab.activeClass);
+		var links=parentMenu.getElementsByTagName('a');
+		for(i=0;i<links.length;i++){
+			if(!links[i].getAttribute('href')){continue;}
+			if(!/#/.test(links[i].getAttribute('href').toString())){continue;}
+			id=links[i].href.match(/#(\w.+)/)[1];
+			if(id==loc){
+				var cur=links[i].parentNode.parentNode;
+				domtab.cssjs('add',links[i].parentNode,domtab.activeClass);
+				break;
+			}
+		}
+		domtab.changeTab(elm,1);
+		elm.focus();
+		cur.currentLink=links[i];
+		cur.currentSection=loc;
+	},
+	showAll:function(e){
+		document.getElementById(domtab.printID).parentNode.removeChild(document.getElementById(domtab.printID));
+		var tempelm=document.getElementsByTagName('div');		
+		for(var i=0;i<tempelm.length;i++){
+			if(!domtab.cssjs('check',tempelm[i],domtab.tabClass)){continue;}
+			var sec=tempelm[i].getElementsByTagName(domtab.contentElements);
+			for(var j=0;j<sec.length;j++){
+				sec[j].style.display='block';
+			}
+		}
+		var tempelm=document.getElementsByTagName('ul');		
+		for(i=0;i<tempelm.length;i++){
+			if(!domtab.cssjs('check',tempelm[i],domtab.prevNextClass)){continue;}
+			tempelm[i].parentNode.removeChild(tempelm[i]);
+			i--;
+		}
+		domtab.cancelClick(e);
+	},
+	addPrevNext:function(menu){
+		var temp;
+		var sections=menu.getElementsByTagName(domtab.contentElements);
+		for(var i=0;i<sections.length;i++){
+			temp=domtab.createPrevNext();
+			if(i==0){
+				temp.removeChild(temp.getElementsByTagName('li')[0]);
+			}
+			if(i==sections.length-1){
+				temp.removeChild(temp.getElementsByTagName('li')[1]);
+			}
+			temp.i=i; // h4xx0r!
+			temp.menu=menu;
+			sections[i].appendChild(temp);
+		}
+	},
+	removeBackLinks:function(menu){
+		var links=menu.getElementsByTagName('a');
+		for(var i=0;i<links.length;i++){
+			if(!domtab.backToLinks.test(links[i].href)){continue;}
+			links[i].parentNode.removeChild(links[i]);
+			i--;
+		}
+	},
+	initTabMenu:function(menu){
+		var id;
+		var lists=menu.getElementsByTagName('ul');
+		for(var i=0;i<lists.length;i++){
+			if(domtab.cssjs('check',lists[i],domtab.listClass)){
+				var thismenu=lists[i];
+				break;
+			}
+		}
+		if(!thismenu){return;}
+		thismenu.currentSection='';
+		thismenu.currentLink='';
+		var links=thismenu.getElementsByTagName('a');
+		for(i=0;i<links.length;i++){
+			if(!/#/.test(links[i].getAttribute('href').toString())){continue;}
+			id=links[i].href.match(/#(\w.+)/)[1];
+			if(document.getElementById(id)){
+				domtab.addEvent(links[i],'click',domtab.showTab,false);
+				links[i].onclick=function(){return false;} // safari hack
+				domtab.changeTab(document.getElementById(id),0);
+			}
+		}
+		id=links[0].href.match(/#(\w.+)/)[1];
+		if(document.getElementById(id)){
+			domtab.changeTab(document.getElementById(id),1);
+			thismenu.currentSection=id;
+			thismenu.currentLink=links[0];
+			domtab.cssjs('add',links[0].parentNode,domtab.activeClass);
+		}
+	},
+	createPrevNext:function(){
+		// this would be so much easier with innerHTML, darn you standards fetish!
+		var temp=document.createElement('ul');
+		temp.className=domtab.prevNextClass;
+		temp.appendChild(document.createElement('li'));
+		temp.getElementsByTagName('li')[0].appendChild(document.createElement('a'));
+		temp.getElementsByTagName('a')[0].setAttribute('href','#');
+		temp.getElementsByTagName('a')[0].innerHTML=domtab.prevLabel;
+		temp.getElementsByTagName('li')[0].className=domtab.prevClass;
+		temp.appendChild(document.createElement('li'));
+		temp.getElementsByTagName('li')[1].appendChild(document.createElement('a'));
+		temp.getElementsByTagName('a')[1].setAttribute('href','#');
+		temp.getElementsByTagName('a')[1].innerHTML=domtab.nextLabel;
+		temp.getElementsByTagName('li')[1].className=domtab.nextClass;
+		domtab.addEvent(temp.getElementsByTagName('a')[0],'click',domtab.navTabs,false);
+		domtab.addEvent(temp.getElementsByTagName('a')[1],'click',domtab.navTabs,false);
+		// safari fix
+		temp.getElementsByTagName('a')[0].onclick=function(){return false;}
+		temp.getElementsByTagName('a')[1].onclick=function(){return false;}
+		return temp;
+	},
+	navTabs:function(e){
+		var li=domtab.getTarget(e);
+		var menu=li.parentNode.parentNode.menu;
+		var count=li.parentNode.parentNode.i;
+		var section=menu.getElementsByTagName(domtab.contentElements);
+		var links=menu.getElementsByTagName('a');
+		var othercount=(li.parentNode.className==domtab.prevClass)?count-1:count+1;
+		section[count].style.display='none';
+		domtab.cssjs('remove',links[count].parentNode,domtab.activeClass);
+		section[othercount].style.display='block';
+		domtab.cssjs('add',links[othercount].parentNode,domtab.activeClass);
+		var parent=links[count].parentNode.parentNode;
+		parent.currentLink=links[othercount];
+		parent.currentSection=links[othercount].href.match(/#(\w.+)/)[1];
+		domtab.cancelClick(e);
+	},
+	changeTab:function(elm,state){
+		do{
+			elm=elm.parentNode;
+		} while(elm.nodeName.toLowerCase()!=domtab.contentElements)
+		elm.style.display=state==0?'none':'block';
+	},
+	showTab:function(e){
+		var o=domtab.getTarget(e);
+		if(o.parentNode.parentNode.currentSection!=''){
+			domtab.changeTab(document.getElementById(o.parentNode.parentNode.currentSection),0);
+			domtab.cssjs('remove',o.parentNode.parentNode.currentLink.parentNode,domtab.activeClass);
+		}
+		var id=o.href.match(/#(\w.+)/)[1];
+		o.parentNode.parentNode.currentSection=id;
+		o.parentNode.parentNode.currentLink=o;
+		domtab.cssjs('add',o.parentNode,domtab.activeClass);
+		domtab.changeTab(document.getElementById(id),1);
+		document.getElementById(id).focus();
+		domtab.cancelClick(e);
+	},
+/* helper methods */
+	getTarget:function(e){
+		var target = window.event ? window.event.srcElement : e ? e.target : null;
+		if (!target){return false;}
+		if (target.nodeName.toLowerCase() != 'a'){target = target.parentNode;}
+		return target;
+	},
+	cancelClick:function(e){
+		if (window.event){
+			window.event.cancelBubble = true;
+			window.event.returnValue = false;
+			return;
+		}
+		if (e){
+			e.stopPropagation();
+			e.preventDefault();
+		}
+	},
+	addEvent: function(elm, evType, fn, useCapture){
+		if (elm.addEventListener) 
+		{
+			elm.addEventListener(evType, fn, useCapture);
+			return true;
+		} else if (elm.attachEvent) {
+			var r = elm.attachEvent('on' + evType, fn);
+			return r;
+		} else {
+			elm['on' + evType] = fn;
+		}
+	},
+	cssjs:function(a,o,c1,c2){
+		switch (a){
+			case 'swap':
+				o.className=!domtab.cssjs('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
+			break;
+			case 'add':
+				if(!domtab.cssjs('check',o,c1)){o.className+=o.className?' '+c1:c1;}
+			break;
+			case 'remove':
+				var rep=o.className.match(' '+c1)?' '+c1:c1;
+				o.className=o.className.replace(rep,'');
+			break;
+			case 'check':
+				var found=false;
+				var temparray=o.className.split(' ');
+				for(var i=0;i<temparray.length;i++){
+					if(temparray[i]==c1){found=true;}
+				}
+				return found;
+			break;
+		}
+	}
+}
+domtab.addEvent(window, 'load', domtab.init, false);
+	
diff -rupN jamm-0.9.6/private/tab/index.html jamm/private/tab/index.html
--- jamm-0.9.6/private/tab/index.html	1969-12-31 19:00:00.000000000 -0500
+++ jamm/private/tab/index.html	2006-03-01 18:08:50.000000000 -0500
@@ -0,0 +1,201 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html dir="ltr" lang="en">
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
+	<title>DOMTab - Navigation tabs with CSS and DOMscripting</title>
+	<style type="text/css">
+		@import "domtab.css";
+	</style>
+<!--[if gt IE 6]>
+	<style type="text/css">
+		html>body ul.domtabs a:link,
+		html>body ul.domtabs a:visited,
+		html>body ul.domtabs a:active,
+		html>body ul.domtabs a:hover{
+			height:3em;
+		}
+	</style>
+<![endif]-->
+	<script type="text/javascript" src="domtab.js"></script>
+	<script type="text/javascript">
+		document.write('<style type="text/css">');    
+		document.write('div.domtab div{display:none;}<');
+		document.write('/s'+'tyle>');    
+    </script>
+</head>
+<body>
+
+<h1><a name="top" id="top">DOMTab - Navigation tabs with CSS and DOMscripting</a></h1>
+<p id="domtabprintview"></p>
+<div class="domtab">
+	<ul class="domtabs">
+		<li><a href="#what">What is DOMtab?</a></li>
+		<li><a href="#how">How to use DOMtab</a></li>
+		<li><a href="#pr">Previous and next links</a></li>
+		<li><a href="#style">How to style DOMtab</a></li>
+		<li><a href="#dl">Download</a></li>
+	</ul>
+	<div>
+		<h2><a name="what" id="what">What is DOMtab?</a></h2>
+		<p>DOMtab is a JavaScript that turns a list of links connected to content
+		sections into a tab interface. The script removes any "back to top" links 
+		in the section and automatically hides all but the first one when the 
+		page is loaded. You can use as many tabbed menus on the page as you want 
+		to.</p>
+		<p><strong>New:</strong> If the URL of the page links directly to one of the tabs it get automatically 
+		highlighted.</p>
+		<p>You can define with an extra class if you want previous and next links 
+		or not.</p>
+		<p>DOMtab uses Unobtrusive JavaScript and does not have any global functions or variables. This page uses DOMtab.</p>		
+		<p><strong>To do:</strong> internal links highlighting tabs (too busy for that now)</p>
+		<p><a href="http://www.wait-till-i.com/index.php?p=242">Comment on the Blog</a></p>
+		<p><a href="https://www.paypal.com/xclick/business=donations%40onlinetools.org&#38;return=http%3A//www.onlinetools.org/ohcheers.php&#38;cancel_return=http%3A//onlinetools.org/">Donations help me buy coffee to stay awake!</a></p>
+		<p><a href="#top">back to menu</a></p>
+	</div>
+	<div>
+		<h2><a name="how" id="how">How to use DOMtab</a></h2>
+		<p>Applying DOMtab to your pages is easy, all you need is to call the 
+		script in the head of the document:</p>
+<pre><code>&#60;script type=&#34;text/javascript&#34; src=&#34;domtab.js&#34;&#62;&#60;/script&#62;</code></pre>
+		<p>DOMtab expects the following classes and element structure to work:</p>
+<pre><code>&#60;div class=&#34;<strong>domtab</strong>&#34;&#62;
+  &#60;ul class=&#34;<strong>domtabs</strong>&#34;&#62;
+    &#60;li&#62;&#60;a href=&#34;#<strong>t1</strong>&#34;&#62;Test 1&#60;/a&#62;&#60;/li&#62;
+    &#60;li&#62;&#60;a href=&#34;#t2&#34;&#62;Test 2&#60;/a&#62;&#60;/li&#62;
+[... and so on ...]
+  &#60;/ul&#62;
+  &#60;div&#62;
+    &#60;h2&#62;&#60;a name=&#34;t1&#34; id=&#34;<strong>t1</strong>&#34;&#62;Proof 1&#60;/a&#62;&#60;/h2&#62;
+    &#60;p&#62;Test to prove that more than one menu is possible&#60;/p&#62;
+    &#60;p&#62;&#60;a href=&#34;#top&#34;&#62;back to menu&#60;/a&#62;&#60;/p&#62;
+  &#60;/div&#62;
+  &#60;div&#62;
+    &#60;h2&#62;&#60;a name=&#34;t2&#34; id=&#34;t2&#34;&#62;Proof 2&#60;/a&#62;&#60;/h2&#62;
+    &#60;p&#62;Test to prove that more than one menu is possible&#60;/p&#62;
+    &#60;p&#62;&#60;a href=&#34;#top&#34;&#62;back to menu&#60;/a&#62;&#60;/p&#62;
+  &#60;/div&#62;
+[... and so on ...]
+&#60;/div&#62;</code></pre>
+<p>The showing and hiding of sections is achieved by reading out the hash data 
+of the link url and retrieving the parent element of the element with the ID the 
+original link points to.</p>
+<p>The links to remove are identified via a pattern in their href attribute, preset to "#top".</p>
+<p>If there is an element with the id <strong>domtabprintview</strong> in the document, DOMtab will
+create a link to show all elements in this one.</p>
+<p>You can change all the settings in the script itself, as all HTML expections are 
+parameters:</p>
+<pre><code>tabClass:'domtab', // class to trigger tabbing
+listClass:'domtabs', // class of the menus
+activeClass:'active', // class of current link
+contentElements:'div', // elements to loop through
+backToLinks:/#top/, // pattern to check "back to top" links
+printID:'domtabprintview', // id of the print all link
+showAllLinkText:'show all content', // text for the print all link
+</code></pre>
+		<p><a href="#top">back to menu</a></p>
+	</div>
+	<div>
+		<h2><a name="pr" id="pr">Previous and next links</a></h2>
+		<p>In this version I added the option to have previous and next links 
+		to navigate around the tabs in addition to clicking them.</p>
+		<p>If you want DOMtab to generate those, all you need to do is to 
+		add the class &#34;doprevnext&#34; in addition to the domtab class to 
+		the div in question:</p>
+<pre><code>&#60;div class=&#34;domtab <strong>doprevnext</strong>&#34;&#62;
+  &#60;ul class=&#34;domtabs&#34;&#62;
+    &#60;li&#62;&#60;a href=&#34;#t1&#34;&#62;Test 1&#60;/a&#62;&#60;/li&#62;
+    &#60;li&#62;&#60;a href=&#34;#t2&#34;&#62;Test 2&#60;/a&#62;&#60;/li&#62;
+    &#60;li&#62;&#60;a href=&#34;#t3&#34;&#62;Test 3&#60;/a&#62;&#60;/li&#62;
+    &#60;li&#62;&#60;a href=&#34;#t4&#34;&#62;Test 4&#60;/a&#62;&#60;/li&#62;
+  &#60;/ul&#62;
+  [... ad nauseam...]
+&#60;/div&#62;</code></pre>
+<p>DOMtab then generates the following link list in each of the sections, automatically 
+removing the previous link in the first and the next in the last section:</p>
+<pre><code>&#60;ul class=&#34;prevnext&#34;&#62;
+  &#60;li class=&#34;prev&#34;&#62;&#60;a href=&#34;#&#34;&#62;previous&#60;/a&#62;&#60;/li&#62;
+  &#60;li class=&#34;next&#34;&#62;&#60;a href=&#34;#&#34;&#62;next&#60;/a&#62;&#60;/li&#62;
+ &#60;/ul&#62;</code></pre>
+<p>Once again, you can override any of these settings in the script's parameters:</p>
+<pre><code>prevNextIndicator:'doprevnext', // class to trigger links
+prevNextClass:'prevnext', // class of the prev and next list
+prevLabel:'previous', // HTML content of the prev link
+nextLabel:'next', // HTML content of the next link
+prevClass:'prev', // class for the prev link
+nextClass:'next', // class for the next link
+</code></pre>
+<p>Both labels are set via innerHTML rather than the proper method :-). This allows you to
+use images if wanted:</p>
+<pre><code>prevLabel:'&#60;img src=&#34;massivebuttonprev.png&#34; alt=&#34;previous&#34; /&#62;',</code></pre>
+		<p><a href="#top">back to menu</a></p>
+	</div>
+	<div>
+		<h2><a name="style" id="style">How to style DOMtab</a></h2>
+		<p>Using the mandatory classes domtab for the main DIV of each menu, 
+		and domtabs for the menu list, you can pretty much style your menus 
+		any way you want to.</p>
+		<p>DOMtab adds the class "active" to the LI containing the currently 
+		active link, to allow you to highlight the currently chosen tab.</p>
+		<p>The previous and next links get classes on their own, which makes 
+		it easy to style them differently.</p>
+		<p>The showing and hiding of the sections is done via JavaScript using 
+		display block and none. It would be pretty easy to replace this with 
+		a styleable show and hide class, if you want to have that, please 
+		contact me on the blog.</p>
+		<p>If you want to avoid the initial flash of all the content until the 
+		script kicks in, you can cheat by adding the following code in the head
+		right after the script element with the domtab call:</p>
+<pre><code>
+&#60;script type=&#34;text/javascript&#34;&#62;
+  document.write('&#60;style type=&#34;text/css&#34;&#62;');    
+  document.write('div.domtab div{display:none;}&#60;');
+  document.write('/s'+'tyle&#62;');    
+&#60;/script&#62;
+</code></pre>
+		<p><a href="#top">back to menu</a></p>
+	</div>
+	<div>
+		<h2><a name="dl" id="dl">Download DOMtab</a></h2>
+<p>DOMtab is provided as-is and I don't take any responsibility for any problems 
+that might occur for using it.</p>
+<p>It is free to use, but not free to resell. If you want to use DOMtab in a 
+commercial site/product please contact me.</p>
+<ul>
+	<li><a href="domtab.zip">DOMtab version 3.1415927</a>
+</ul>
+
+		<p><a href="#top">back to menu</a></p>
+	</div>
+</div>
+<div id="other" class="domtab doprevnext">
+	<ul class="domtabs">
+		<li><a href="#t1">Test 1</a></li>
+		<li><a href="#t2">Test 2</a></li>
+		<li><a href="#t3">Test 3</a></li>
+		<li><a href="#t4">Test 4</a></li>
+	</ul>
+	<h2>You can use content in between the tabs and the sections</h2>
+	<div>
+		<h2><a name="t1" id="t1">Proof 1</a></h2>
+		<p>Test to prove that more than one menu is possible</p>
+		<p><a href="#top">back to menu</a></p>
+	</div>
+	<div>
+		<h2><a name="t2" id="t2">Proof 2</a></h2>
+		<p>Test to prove that more than one menu is possible</p>
+		<p><a href="#top">back to menu</a></p>
+	</div>
+	<div>
+		<h2><a name="t3" id="t3">Proof 3</a></h2>
+		<p>Test to prove that more than one menu is possible</p>
+		<p><a href="#top">back to menu</a></p>
+	</div>
+	<div>
+		<h2><a name="t4" id="t4">Proof 4</a></h2>
+		<p>Test to prove that more than one menu is possible</p>
+		<p><a href="#top">back to menu</a></p>
+	</div>
+</div>
+
+</body>
+</html>
diff -rupN jamm-0.9.6/private/tab/tabtastic.css jamm/private/tab/tabtastic.css
--- jamm-0.9.6/private/tab/tabtastic.css	1969-12-31 19:00:00.000000000 -0500
+++ jamm/private/tab/tabtastic.css	2009-06-27 16:52:41.000000000 -0400
@@ -0,0 +1,17 @@
+.tabset_tabs	{ margin:0; padding:0; list-style-type:none; position:relative; z-index:2; white-space:nowrap }
+.tabset_tabs li	{ margin:0; padding:0; display:inline }
+.tabset_tabs a	{ color:#339 ! important; background-color:#def ! important; border:1px solid #99c; text-decoration:none; padding:0 0.6em; border-left-width:0; border-bottom:none }
+.tabset_tabs a:hover	{ color:#00c ! important; background-color:#eff ! important }
+.tabset_tabs a.active	{ color:black ! important; background-color:white ! important; border-color:black; border-left-width:1px; cursor:default; border-bottom:white; padding-top:1px; padding-bottom:1px }
+
+.tabset_tabs li.firstchild a	{ border-left-width:1px }
+
+.tabset_content	{ border:1px solid black; background-color:white; position:relative; z-index:1; padding:0.5em 1em; display:none }
+.tabset_label	{ display:none }
+
+.tabset_content_active	{ display:block }
+
+@media aural{
+	.tabset_content,
+	.tabset_label	{ display:block }
+}
\ No newline at end of file
diff -rupN jamm-0.9.6/private/tab/tabtastic.js jamm/private/tab/tabtastic.js
--- jamm-0.9.6/private/tab/tabtastic.js	1969-12-31 19:00:00.000000000 -0500
+++ jamm/private/tab/tabtastic.js	2009-07-23 03:03:16.000000000 -0400
@@ -0,0 +1,92 @@
+//*** This library is copyright 2004 by Gavin Kistner, !@phrogz.net
+//*** It is covered under the license viewable at http://phrogz.net/JS/_ReuseLicense.txt
+//*** Reuse or modification is free provided you abide by the terms of that license.
+//*** (Including the first two lines above in your source code mostly satisfies the conditions.)
+
+//*** Tabtastic -- see http://phrogz.net/JS/Tabstatic/index.html
+//*** Version 1.0    20040430   Initial release.
+//***         1.0.2  20040501   IE5Mac, IE6Win compat.
+//***         1.0.3  20040501   Removed IE5Mac/Opera7 compat. (see http://phrogz.net/JS/Tabstatic/index.html#notes)
+//***         1.0.4  20040521   Added scroll-back hack to prevent scrolling down to page anchor. Then commented out :)
+
+AttachEvent(window,'load',function(){
+	var tocTag='ul',tocClass='tabset_tabs',tabTag='a',contentClass='tabset_content';
+
+
+	function FindEl(tagName,evt){
+		if (!evt && window.event) evt=event;
+		if (!evt) return DebugOut("Can't find an event to handle in DLTabSet::SetTab",0);
+		var el=evt.currentTarget || evt.srcElement;
+		while (el && (!el.tagName || el.tagName.toLowerCase()!=tagName)) el=el.parentNode;
+		return el;
+	}
+
+	function SetTabActive(tab){
+		if (tab.tabTOC.activeTab){
+			if (tab.tabTOC.activeTab==tab) return;
+			KillClass(tab.tabTOC.activeTab,'active');
+			if (tab.tabTOC.activeTab.tabContent) KillClass(tab.tabTOC.activeTab.tabContent,'tabset_content_active');
+			//if (tab.tabTOC.activeTab.tabContent) tab.tabTOC.activeTab.tabContent.style.display='';
+			if (tab.tabTOC.activeTab.prevTab) KillClass(tab.tabTOC.activeTab.previousTab,'preActive');
+			if (tab.tabTOC.activeTab.nextTab) KillClass(tab.tabTOC.activeTab.nextTab,'postActive');
+		}
+		AddClass(tab.tabTOC.activeTab=tab,'active');
+		if (tab.tabContent) AddClass(tab.tabContent,'tabset_content_active');				
+		//if (tab.tabContent) tab.tabContent.style.display='block';
+		if (tab.prevTab) AddClass(tab.prevTab,'preActive');
+		if (tab.nextTab) AddClass(tab.nextTab,'postActive');
+	}
+	function SetTabFromAnchor(evt){
+		//setTimeout('document.body.scrollTop='+document.body.scrollTop,1);
+		SetTabActive(FindEl('a',evt).semanticTab);
+	}
+
+	
+	function Init(){
+		window.everyTabThereIsById = {};
+		
+		var anchorMatch = /#([a-z][\w.:-]*)$/i,match;
+		var activeTabs = [];
+		
+		var tocs = document.getElementsByTagName(tocTag);
+		for (var i=0,len=tocs.length;i<len;i++){
+			var toc = tocs[i];
+			if (!HasClass(toc,tocClass)) continue;
+
+			var lastTab;
+			var tabs = toc.getElementsByTagName(tabTag);
+			for (var j=0,len2=tabs.length;j<len2;j++){
+				var tab = tabs[j];
+				if (!tab.href || !(match=anchorMatch.exec(tab.href))) continue;
+				if (lastTab){
+					tab.prevTab=lastTab;
+					lastTab.nextTab=tab;
+				}
+				tab.tabTOC=toc;
+				everyTabThereIsById[tab.tabID=match[1]]=tab;
+				tab.tabContent = document.getElementById(tab.tabID);
+				
+				if (HasClass(tab,'active')) activeTabs[activeTabs.length]=tab;
+				
+				lastTab=tab;
+			}
+			AddClass(toc.getElementsByTagName('li')[0],'firstchild');
+		}
+
+		for (var i=0,len=activeTabs.length;i<len;i++){
+			SetTabActive(activeTabs[i]);
+		}
+
+		for (var i=0,len=document.links.length;i<len;i++){
+			var a = document.links[i];
+			if (!(match=anchorMatch.exec(a.href))) continue;
+			if (a.semanticTab = everyTabThereIsById[match[1]]) AttachEvent(a,'click',SetTabFromAnchor,false);
+		}
+		
+		if ((match=anchorMatch.exec(location.href)) && (a=everyTabThereIsById[match[1]])) SetTabActive(a);
+		
+		//Comment out the next line and include the file directly if you need IE5Mac or Opera7 support.
+		AddStyleSheet('tabtastic.css',0);
+	}
+	Init();
+},false);
\ No newline at end of file
