Merge branch 'master' into 352217-new-admin-console

Conflicts:
	org.eclipse.virgo.apps.admin.core/.classpath
	org.eclipse.virgo.apps.admin.web/.classpath
diff --git a/build-apps/build.xml b/build-apps/build.xml
index b7ced4d..aaa0264 100644
--- a/build-apps/build.xml
+++ b/build-apps/build.xml
@@ -3,8 +3,7 @@
 
 	<path id="unit.test.bundles">
 		<pathelement location="../org.eclipse.virgo.apps.splash"/>
-		<pathelement location="../org.eclipse.virgo.apps.admin.core"/>
-		<pathelement location="../org.eclipse.virgo.apps.admin.web"/>
+		<pathelement location="../org.eclipse.virgo.apps.admin"/>
 		<pathelement location="../org.eclipse.virgo.apps.repository.core"/>
 		<pathelement location="../org.eclipse.virgo.apps.repository.web"/>
 	</path>
diff --git a/build-apps/virgo.profile.js b/build-apps/virgo.profile.js
deleted file mode 100644
index e002bdc..0000000
--- a/build-apps/virgo.profile.js
+++ /dev/null
@@ -1,31 +0,0 @@
-// How to build the dojo libary
-// author Christopher Frost (vmware employee)
-
-// The virgo dojo build is run by calling:
-// ./build.sh profile=virgo action=clean,release
-// from the /util/buildscripts directory of dojo source
-
-dependencies = {
-	stripConsole: "normal",
-
-	layers: [
-		{
-			name: "virgo-dojo.js",
-			dependencies: [
-				"dijit.TitlePane",
-				"dijit.tree.ForestStoreModel",
-				"dijit.Tree",
-				"dojox.data.QueryReadStore",
-				"dijit.form.Button"
-			]
-		}
-	],
-
-	prefixes: [
-		[ "dijit", "../dijit" ],
-		[ "dojox", "../dojox" ]
-	]
-}
-// After running this to produce the required build layers the following can be deleted.
-// ./dojox
-// much more can be deleted but there is no need to do so as it will only mean extra work adding them back in if these features are required later.
\ No newline at end of file
diff --git a/build.versions b/build.versions
index 14e529c..d6452e4 100644
--- a/build.versions
+++ b/build.versions
@@ -22,6 +22,8 @@
 org.springframework=3.0.5.RELEASE
 org.eclipse.osgi.services=3.3.0.v20110513
 org.eclipse.equinox.cm=1.0.300.v20101204
+org.jolokia.osgi=1.0.0
+org.eclipse.gemini.management=1.0.0.M01-incubation
 
 # Test
 org.eclipse.virgo.teststubs=3.5.0.D-20120329112850
diff --git a/org.eclipse.virgo.apps.admin.core/.classpath b/org.eclipse.virgo.apps.admin.core/.classpath
deleted file mode 100644
index 5c878ea..0000000
--- a/org.eclipse.virgo.apps.admin.core/.classpath
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src/main/java">
-		<attributes>
-			<attribute name="com.springsource.server.ide.jdt.core.test.classpathentry" value="false"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" path="src/main/resources">
-		<attributes>
-			<attribute name="com.springsource.server.ide.jdt.core.test.classpathentry" value="false"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
-		<attributes>
-			<attribute name="com.springsource.server.ide.jdt.core.test.classpathentry" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" output="target/test-classes" path="src/test/resources">
-		<attributes>
-			<attribute name="com.springsource.server.ide.jdt.core.test.classpathentry" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.junit/com.springsource.org.junit/4.7.0/com.springsource.org.junit-4.7.0.jar" sourcepath="/APPS_IVY_CACHE/org.junit/com.springsource.org.junit/4.7.0/com.springsource.org.junit-sources-4.7.0.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.virgo.kernel/org.eclipse.virgo.kernel.services/3.5.0.D-20120403111529/org.eclipse.virgo.kernel.services-3.5.0.D-20120403111529.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.virgo.nano/org.eclipse.virgo.kernel.core/3.5.0.D-20120403110031/org.eclipse.virgo.kernel.core-3.5.0.D-20120403110031.jar" sourcepath="/APPS_IVY_CACHE/org.eclipse.virgo.kernel/org.eclipse.virgo.kernel.core/2.0.0.D-164/org.eclipse.virgo.kernel.core-sources-2.0.0.D-164.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.springframework/org.springframework.context/3.0.5.RELEASE/org.springframework.context-3.0.5.RELEASE.jar" sourcepath="/APPS_IVY_CACHE/org.springframework/org.springframework.context/3.0.5.RELEASE/org.springframework.context-sources-3.0.5.RELEASE.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.springframework/org.springframework.core/3.0.5.RELEASE/org.springframework.core-3.0.5.RELEASE.jar" sourcepath="/APPS_IVY_CACHE/org.springframework/org.springframework.core/3.0.5.RELEASE/org.springframework.core-sources-3.0.5.RELEASE.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.springframework/org.springframework.beans/3.0.5.RELEASE/org.springframework.beans-3.0.5.RELEASE.jar" sourcepath="/APPS_IVY_CACHE/org.springframework/org.springframework.beans/3.0.5.RELEASE/org.springframework.beans-sources-3.0.5.RELEASE.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.virgo.kernel/org.eclipse.virgo.kernel.deployer/3.5.0.D-20120403111529/org.eclipse.virgo.kernel.deployer-3.5.0.D-20120403111529.jar" sourcepath="/APPS_IVY_CACHE/org.eclipse.virgo.kernel/org.eclipse.virgo.kernel.deployer.core/3.5.0.D-20120403111529/org.eclipse.virgo.kernel.deployer.core-sources-3.5.0.D-20120403111529.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.osgi/org.eclipse.osgi/3.7.1.R37x_v20110808-1106/org.eclipse.osgi-3.7.1.R37x_v20110808-1106.jar" sourcepath="/APPS_IVY_CACHE/org.eclipse.osgi/org.eclipse.osgi/3.7.1.R37x_v20110808-1106/org.eclipse.osgi-sources-3.7.1.R37x_v20110808-1106.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.virgo.kernel/org.eclipse.virgo.kernel.osgi/3.5.0.D-20120403111529/org.eclipse.virgo.kernel.osgi-3.5.0.D-20120403111529.jar" sourcepath="/APPS_IVY_CACHE/org.eclipse.virgo.kernel/org.eclipse.virgo.kernel.osgi/3.5.0.D-20120403111529/org.eclipse.virgo.kernel.osgi-sources-3.5.0.D-20120403111529.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.virgo.util/org.eclipse.virgo.util.common/3.5.0.D-20120403104609/org.eclipse.virgo.util.common-3.5.0.D-20120403104609.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.gemini/org.eclipse.gemini.blueprint.core/1.0.0.RELEASE/org.eclipse.gemini.blueprint.core-1.0.0.RELEASE.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.osgi/org.eclipse.osgi.services/3.3.0.v20110513/org.eclipse.osgi.services-3.3.0.v20110513.jar" sourcepath="/APPS_IVY_CACHE/org.apache.felix/org.apache.felix.configadmin/1.2.4/org.apache.felix.configadmin-sources-1.2.4.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.virgo.teststubs/org.eclipse.virgo.teststubs.osgi/3.5.0.D-20120403105015/org.eclipse.virgo.teststubs.osgi-3.5.0.D-20120403105015.jar" sourcepath="/APPS_IVY_CACHE/org.eclipse.virgo.test/org.eclipse.virgo.teststubs.osgi/3.5.0.D-20120403105015/org.eclipse.virgo.teststubs.osgi-sources-3.5.0.D-20120403105015.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.virgo.kernel/org.eclipse.virgo.kernel.shell/3.5.0.D-20120403111529/org.eclipse.virgo.kernel.shell-3.5.0.D-20120403111529.jar" sourcepath="/APPS_IVY_CACHE/org.eclipse.virgo.kernel/org.eclipse.virgo.kernel.shell/3.5.0.D-20120403111529/org.eclipse.virgo.kernel.shell-sources-3.5.0.D-20120403111529.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.aspectj/com.springsource.org.aspectj.runtime/1.6.12.RELEASE/com.springsource.org.aspectj.runtime-1.6.12.RELEASE.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.virgo.kernel/org.eclipse.virgo.kernel.model/3.5.0.D-20120403111529/org.eclipse.virgo.kernel.model-3.5.0.D-20120403111529.jar" sourcepath="/APPS_IVY_CACHE/org.eclipse.virgo.kernel/org.eclipse.virgo.kernel.model/2.0.0.D-20091006155952/org.eclipse.virgo.kernel.model-sources-2.0.0.D-20091006155952.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.slf4j/com.springsource.slf4j.api/1.6.1/com.springsource.slf4j.api-1.6.1.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.slf4j/com.springsource.slf4j.nop/1.6.1/com.springsource.slf4j.nop-1.6.1.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.easymock/com.springsource.org.easymock/2.3.0/com.springsource.org.easymock-2.3.0.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.virgo.util/org.eclipse.virgo.util.io/3.5.0.D-20120403104609/org.eclipse.virgo.util.io-3.5.0.D-20120403104609.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.virgo.util/org.eclipse.virgo.util.osgi.manifest/3.5.0.D-20120403104609/org.eclipse.virgo.util.osgi.manifest-3.5.0.D-20120403104609.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.virgo.kernel/org.eclipse.virgo.kernel.artifact/3.5.0.D-20120403111529/org.eclipse.virgo.kernel.artifact-3.5.0.D-20120403111529.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.virgo.nano/org.eclipse.virgo.deployer.api/3.5.0.D-20120403110031/org.eclipse.virgo.deployer.api-3.5.0.D-20120403110031.jar"/>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>
diff --git a/org.eclipse.virgo.apps.admin.core/.project b/org.eclipse.virgo.apps.admin.core/.project
deleted file mode 100644
index 0a6f985..0000000
--- a/org.eclipse.virgo.apps.admin.core/.project
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.virgo.apps.admin.core</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.wst.common.project.facet.core.builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.springframework.ide.eclipse.core.springbuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>com.springsource.server.ide.bundlor.core.builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>com.springsource.server.ide.facet.core.bundlenature</nature>
-		<nature>org.springframework.ide.eclipse.core.springnature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.virgo.apps.admin.core/.settings/org.eclipse.virgo.ide.bundlor.core.prefs b/org.eclipse.virgo.apps.admin.core/.settings/org.eclipse.virgo.ide.bundlor.core.prefs
deleted file mode 100644
index ff53e65..0000000
--- a/org.eclipse.virgo.apps.admin.core/.settings/org.eclipse.virgo.ide.bundlor.core.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Mon Dec 07 16:22:36 GMT 2009
-org.eclipse.virgo.ide.bundlor.core.template.properties.files=../build.properties;../build.versions
-eclipse.preferences.version=1
diff --git a/org.eclipse.virgo.apps.admin.core/.settings/org.eclipse.wst.common.project.facet.core.xml b/org.eclipse.virgo.apps.admin.core/.settings/org.eclipse.wst.common.project.facet.core.xml
deleted file mode 100644
index 801f856..0000000
--- a/org.eclipse.virgo.apps.admin.core/.settings/org.eclipse.wst.common.project.facet.core.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<faceted-project>
-  <installed facet="com.springsource.server.bundle" version="1.0"/>
-</faceted-project>
diff --git a/org.eclipse.virgo.apps.admin.core/.settings/org.springframework.ide.eclipse.core.prefs b/org.eclipse.virgo.apps.admin.core/.settings/org.springframework.ide.eclipse.core.prefs
deleted file mode 100644
index 5bdb54c..0000000
--- a/org.eclipse.virgo.apps.admin.core/.settings/org.springframework.ide.eclipse.core.prefs
+++ /dev/null
@@ -1,32 +0,0 @@
-#Mon Dec 07 16:22:36 GMT 2009
-eclipse.preferences.version=1
-org.springframework.ide.eclipse.core.builders.enable.beanmetadatabuilder=true
-org.springframework.ide.eclipse.core.enable.project.preferences=false
-org.springframework.ide.eclipse.core.validator.enable.com.springsource.server.ide.manifest.core.manifestvalidator=true
-org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.beans.core.beansvalidator=true
-org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.core.springvalidator=false
-org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.applicationSymbolicNameRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.applicationVersionRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleActivationPolicyRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleActivatorRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleManifestVersionRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleSymbolicNameRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleVersionRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.exportPackageRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.importRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.parsingProblemsRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.requireBundleRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanAlias-org.springframework.ide.eclipse.beans.core.beansvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanClass-org.springframework.ide.eclipse.beans.core.beansvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanConstructorArgument-org.springframework.ide.eclipse.beans.core.beansvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinition-org.springframework.ide.eclipse.beans.core.beansvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinitionHolder-org.springframework.ide.eclipse.beans.core.beansvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanFactory-org.springframework.ide.eclipse.beans.core.beansvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanInitDestroyMethod-org.springframework.ide.eclipse.beans.core.beansvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanReference-org.springframework.ide.eclipse.beans.core.beansvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.methodOverride-org.springframework.ide.eclipse.beans.core.beansvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.parsingProblems-org.springframework.ide.eclipse.beans.core.beansvalidator=true
-org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.requiredProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=false
-org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.toolAnnotation-org.springframework.ide.eclipse.beans.core.beansvalidator=false
-org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.core.springClasspath-org.springframework.ide.eclipse.core.springvalidator=false
diff --git a/org.eclipse.virgo.apps.admin.core/.springBeans b/org.eclipse.virgo.apps.admin.core/.springBeans
deleted file mode 100644
index 34b281c..0000000
--- a/org.eclipse.virgo.apps.admin.core/.springBeans
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beansProjectDescription>
-	<version>1</version>
-	<pluginVersion><![CDATA[2.3.0.200912170948-RELEASE]]></pluginVersion>
-	<configSuffixes>
-		<configSuffix><![CDATA[xml]]></configSuffix>
-	</configSuffixes>
-	<enableImports><![CDATA[false]]></enableImports>
-	<configs>
-	</configs>
-	<configSets>
-	</configSets>
-</beansProjectDescription>
diff --git a/org.eclipse.virgo.apps.admin.core/build.xml b/org.eclipse.virgo.apps.admin.core/build.xml
deleted file mode 100644
index 03c2a83..0000000
--- a/org.eclipse.virgo.apps.admin.core/build.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="org.eclipse.virgo.apps.admin.core">
-
-	<property file="${basedir}/../build.properties"/>
-	<property file="${basedir}/../build.versions"/>
-	<import file="${basedir}/../virgo-build/standard/default.xml"/>
-
-</project>
diff --git a/org.eclipse.virgo.apps.admin.core/ivy.xml b/org.eclipse.virgo.apps.admin.core/ivy.xml
deleted file mode 100644
index 805467e..0000000
--- a/org.eclipse.virgo.apps.admin.core/ivy.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet type="text/xsl" href="http://ivyrep.jayasoft.org/ivy-doc.xsl"?>
-<ivy-module
-		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-		xsi:noNamespaceSchemaLocation="http://incubator.apache.org/ivy/schemas/ivy.xsd"
-		version="1.3">
-
-	<info organisation="org.eclipse.virgo.apps" module="${ant.project.name}"/>
-
-	<configurations>
-		<include file="${virgo.build.dir}/common/default-ivy-configurations.xml"/>
-	</configurations>
-
-	<publications>
-		<artifact name="${ant.project.name}"/>
-		<artifact name="${ant.project.name}-sources" type="src" ext="jar"/>
-	</publications>
-
-	<dependencies>
-		<!-- === PROVIDED-COMPILE============================================ -->
-        <dependency org="org.eclipse.virgo.nano" name="org.eclipse.virgo.kernel.core" rev="${org.eclipse.virgo.nano}" conf="provided->compile"/>
-        <dependency org="org.eclipse.virgo.nano" name="org.eclipse.virgo.deployer.api" rev="${org.eclipse.virgo.nano}" conf="provided->compile"/>
-	    <dependency org="org.eclipse.virgo.kernel" name="org.eclipse.virgo.kernel.deployer" rev="${org.eclipse.virgo.kernel}" conf="provided->compile"/>
-	    <dependency org="org.eclipse.virgo.kernel" name="org.eclipse.virgo.kernel.osgi" rev="${org.eclipse.virgo.kernel}" conf="provided->compile"/>
-	    <dependency org="org.eclipse.virgo.kernel" name="org.eclipse.virgo.kernel.model" rev="${org.eclipse.virgo.kernel}" conf="provided->compile"/>
-	    <dependency org="org.eclipse.virgo.kernel" name="org.eclipse.virgo.kernel.services" rev="${org.eclipse.virgo.kernel}" conf="provided->compile"/>
-	    <dependency org="org.eclipse.virgo.kernel" name="org.eclipse.virgo.kernel.shell" rev="${org.eclipse.virgo.kernel}" conf="provided->compile"/>
-	    <dependency org="org.eclipse.virgo.kernel" name="org.eclipse.virgo.kernel.artifact" rev="${org.eclipse.virgo.kernel}" conf="provided->compile"/>
-		<dependency org="org.eclipse.virgo.util" name="org.eclipse.virgo.util.io" rev="${org.eclipse.virgo.util}" conf="provided->compile"/>
-		<dependency org="org.eclipse.virgo.util" name="org.eclipse.virgo.util.osgi.manifest" rev="${org.eclipse.virgo.util}" conf="provided->compile"/>
-		<!-- === RUNTIME-DEFAULT =========================================== -->
-
-		<!-- === PROVIDED-RUNTIME =========================================== -->
-		<dependency org="org.eclipse.osgi" name="org.eclipse.osgi" rev="${org.eclipse.osgi}" conf="provided->runtime"/>
-		<dependency org="org.eclipse.osgi" name="org.eclipse.osgi.services" rev="${org.eclipse.osgi.services}" conf="provided->runtime"/>
-		<dependency org="org.eclipse.osgi" name="org.eclipse.equinox.cm" rev="${org.eclipse.equinox.cm}" conf="provided->runtime"/>
-		<dependency org="org.apache.commons" name="com.springsource.org.apache.commons.fileupload" rev="${org.apache.commons.fileupload}" conf="provided->runtime"/>
-		<dependency org="org.apache.commons" name="com.springsource.org.apache.commons.io" rev="${org.apache.commons.io}" conf="provided->runtime"/>
-		<dependency org="org.springframework" name="org.springframework.core" rev="${org.springframework}" conf="provided->runtime"/>
-		<dependency org="org.springframework" name="org.springframework.context" rev="${org.springframework}" conf="provided->runtime"/>
-		<dependency org="org.springframework" name="org.springframework.beans" rev="${org.springframework}" conf="provided->runtime"/>
-		<dependency org="org.eclipse.gemini" name="org.eclipse.gemini.blueprint.core" rev="${org.eclipse.gemini.blueprint}" conf="provided->runtime"/>
-        <dependency org="org.slf4j" name="com.springsource.slf4j.api" rev="${org.slf4j}" conf="compile->runtime"/>
-		<!-- === TEST ====================================================== -->
-		<dependency org="org.junit" name="com.springsource.org.junit" rev="${org.junit}" conf="test->runtime"/>
-		<dependency org="org.eclipse.virgo.teststubs" name="org.eclipse.virgo.teststubs.osgi" rev="${org.eclipse.virgo.teststubs}" conf="test->runtime"/>
-		<dependency org="org.easymock" name="com.springsource.org.easymock" rev="${org.easymock}" conf="test->runtime"/>
-        <dependency org="org.slf4j" name="com.springsource.slf4j.nop" rev="${org.slf4j}" conf="test->runtime"/>
-		
-		<override org="org.springframework" rev="${org.springframework}"/>
-	</dependencies>
-
-</ivy-module>
diff --git a/org.eclipse.virgo.apps.admin.core/serviceability/dumps/testDumpWithContent/dumpItem1.txt b/org.eclipse.virgo.apps.admin.core/serviceability/dumps/testDumpWithContent/dumpItem1.txt
deleted file mode 100644
index 0b00812..0000000
--- a/org.eclipse.virgo.apps.admin.core/serviceability/dumps/testDumpWithContent/dumpItem1.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Line1
-Line2
-Line3
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.core/serviceability/dumps/testDumpWithContent/dumpItem2.foo b/org.eclipse.virgo.apps.admin.core/serviceability/dumps/testDumpWithContent/dumpItem2.foo
deleted file mode 100644
index e69de29..0000000
--- a/org.eclipse.virgo.apps.admin.core/serviceability/dumps/testDumpWithContent/dumpItem2.foo
+++ /dev/null
diff --git a/org.eclipse.virgo.apps.admin.core/serviceability/dumps/testDumpWithContent/osgi.zip b/org.eclipse.virgo.apps.admin.core/serviceability/dumps/testDumpWithContent/osgi.zip
deleted file mode 100644
index a4f59e9..0000000
--- a/org.eclipse.virgo.apps.admin.core/serviceability/dumps/testDumpWithContent/osgi.zip
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.core/serviceability/dumps/testDumpWithNoContent/.gitignore b/org.eclipse.virgo.apps.admin.core/serviceability/dumps/testDumpWithNoContent/.gitignore
deleted file mode 100644
index e69de29..0000000
--- a/org.eclipse.virgo.apps.admin.core/serviceability/dumps/testDumpWithNoContent/.gitignore
+++ /dev/null
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/ArtifactService.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/ArtifactService.java
deleted file mode 100644
index 3f1f597..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/ArtifactService.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core;
-
-import java.io.File;
-
-/**
- * <code>ApplicationManagerService</code> defines a simple service API for managing applications within the server.
- * <p />
- * 
- * <strong>Concurrent Semantics</strong><br />
- * 
- * Implementations should be thread-safe.
- * 
- */
-public interface ArtifactService {
-
-    /**
-     * @param stagedFile 
-     * @return string describing result
-     */
-    String deploy(File stagedFile);
-
-    /**
-     * Request a reference to the staging directory where artefacts to be deployed should be placed.
-     * 
-     * @return the staging directory.
-     */
-    File getStagingDirectory();
-
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/BundleHolder.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/BundleHolder.java
deleted file mode 100644
index 7710e8b..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/BundleHolder.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core;
-
-import java.util.List;
-
-import org.osgi.framework.Bundle;
-
-import org.eclipse.virgo.kernel.module.Component;
-
-/**
- * <p>
- * BundleHolder represents a bundle artifact with Spring information contained within it.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- *  BundleHolder implementations should be thread safe
- *
- */
-public interface BundleHolder extends Comparable<BundleHolder>{
-
-    public Long getBundleId();
-
-    public String getSymbolicName();
-
-    public String getState();
-    
-    public String getRegion();
-
-    public boolean isResolved();
-
-    public String getVersion();
-
-    public String getBundleLocation();
-
-    public String getSpringName();
-
-    public List<Component> getBeans();
-
-    public List<ExportedPackageHolder> getExportPackages();
-
-    public List<ImportedPackageHolder> getImportPackages();
-
-    public List<RequiredBundleHolder> getRequiredBundles();
-
-    public List<BundleHolder> getHosts();
-
-    public Bundle getRawBundle();
-    
-    public List<BundleHolder> getFragments();
-
-    /**
-     * A list of {@link ServiceHolder}s that are published by this {@link BundleHolder}
-     * @return list of services
-     */
-    public List<ServiceHolder> getExportedServices();
-
-    /**
-     * A list of {@link ServiceHolder}s that are consumed by this {@link BundleHolder}
-     * @return list of services
-     */
-    public List<ServiceHolder> getImportedServices();
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/DumpInspectorService.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/DumpInspectorService.java
deleted file mode 100644
index a2ac7a2..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/DumpInspectorService.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core;
-
-import java.io.File;
-import java.util.List;
-
-/**
- * <code>DumpManagerService</code> defines a simple service API for viewing dumps within the server.
- * <p />
- * 
- * <strong>Concurrent Semantics</strong><br />
- * 
- * Implementations should be thread-safe.
- * 
- */
-public interface DumpInspectorService {
-
-    /**
-     * @return a list of {@link File} of the dumps available for inspection.
-     */
-    public List<File> findAvaliableDumps();
-
-    /**
-     * @param dumpID as returned by a call to {@link DumpInspectorService#findAvaliableDumps}.
-     * @return list of Strings
-     */
-    public List<String> getDumpEntries(String dumpID);
-
-    /**
-     * Read the contents of a dump entry and return it as a string
-     * @param dumpID of dump
-     * @param entryName in dump
-     * 
-     * @return the raw contents of the requested dump entry as a String
-     */
-    public String getDumpEntry(String dumpID, String entryName);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/DumpLocator.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/DumpLocator.java
deleted file mode 100644
index a8e1a39..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/DumpLocator.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.zip.ZipException;
-
-/**
- * <p>
- * DumpExtractor provides an interface for clients to obtain dump directories.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br/>
- *
- * Implementations of this interface must be thread safe.
- *
- */
-public interface DumpLocator {
-
-    /**
-     * Returns a dump directory with the given dump name.
-     * 
-     * @param dump name
-     * @return the dump directory
-     * @throws ZipException when zipping
-     * @throws IOException when reading
-     */
-    public File getDumpDir(String dump) throws ZipException, IOException;
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/ExportedPackageHolder.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/ExportedPackageHolder.java
deleted file mode 100644
index bdc4625..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/ExportedPackageHolder.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core;
-
-import java.util.List;
-import java.util.Map;
-
-
-/**
- * <p>
- * PackageRelationHolder represents a single mapping of and exported 
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * Implementations of PackageRelationHolder should be threadsafe
- *
- */
-public interface ExportedPackageHolder {
-
-    /**
-     * 
-     * @return the name of the package being exported
-     */
-    public String getPackageName();
-
-    /**
-     * 
-     * @return the <code>Version</code> that the package is exported at as a String.
-     */
-    public String getVersion();
-    
-    /**
-     * 
-     * @return the {@link BundleHolder} that provides this <code>ExportedPackageHolder</code>
-     */
-    public BundleHolder getExportingBundle();
-    
-    /**
-     * 
-     * @return A list {@link ImportedPackageHolder}s that are consuming this export
-     */
-    public List<ImportedPackageHolder> getConsumers();
-    
-    /**
-     * Returns the directives for a header.
-     * 
-     * @return a map containing the directives
-     */
-    Map<String, String> getDirectives();
-
-    /**
-     * Returns the attributes for a header.
-     * 
-     * @return a map containing the attributes
-     */
-    Map<String, String> getAttributes();
-    
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/FailedResolutionHolder.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/FailedResolutionHolder.java
deleted file mode 100644
index c075761..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/FailedResolutionHolder.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core;
-
-/**
- * <p>
- * FailedResolutionHolder represents the cause of a bundle failing to resovle.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * Implementations of FailedResolutionHolder must be thread-safe
- *
- */
-public interface FailedResolutionHolder {
-
-    /**
-     * Gets a human readable description of the failure.
-     * 
-     * @return a human readable String
-     */
-    String getDescription();
-    
-    /**
-     * Gets the unresolved {@link BundleHolder}.
-     * 
-     * @return the unresolved <code>BundleHolder</code>
-     */
-    BundleHolder getUnresolvedBundle();
-    
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/ImportedPackageHolder.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/ImportedPackageHolder.java
deleted file mode 100644
index acf7b5b..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/ImportedPackageHolder.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core;
-
-import java.util.Map;
-
-/**
- * <p>
- * PackageRelationHolder represents a single mapping of and exported 
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * Implementations of PackageRelationHolder should be threadsafe
- *
- */
-public interface ImportedPackageHolder {
-
-    /**
-     * The name of the package being imported.
-     * 
-     * @return The package name
-     */
-    public String getPackageName();
-
-    /**
-     * The version range that the exporting package must be within to satisfy this <code>ImportedPackageHolder</code>.
-     * 
-     * @return The VersionRange constraint as a String
-     */
-    public String getVersionConstraint();
-
-    /**
-     * Returns whether or not this import is resolved.
-     * 
-     * @return true if this import is resolved
-     */
-    public boolean isResolved();
-
-    /**
-     * If this import is resolved, return the {@link ExportedPackageHolder} that satisfies it. If this import is not
-     * resolved or if it is resolved but is an optional import that was not satisfied, return null.
-     * 
-     * @return The <code>ExportedPackageHolder</code> that satisfies this import.
-     */
-    public ExportedPackageHolder getProvider();
-
-    /**
-     * The {@link BundleHolder} that specifies this import package.
-     * 
-     * @return The specifying <code>BundleHolder</code>.
-     */
-    public BundleHolder getImportingBundle();
-    
-    /**
-     * Returns the directives for a header.
-     * 
-     * @return a map containing the directives
-     */
-    Map<String, String> getDirectives();
-
-    /**
-     * Returns the attributes for a header.
-     * 
-     * @return a map containing the attributes
-     */
-    Map<String, String> getAttributes();
-    
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/PackagesCollection.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/PackagesCollection.java
deleted file mode 100644
index 51e02a6..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/PackagesCollection.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core;
-
-import java.util.List;
-
-/**
- * <p>
- * PackagesCollection holds an exclusive collection of packages sorted by imports and exports.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * PackagesCollection implementations should be thread-safe
- *
- */
-public interface PackagesCollection {
-
-
-    /**
-     * The name of the package this {@link PackagesCollection} represents.
-     * Will never be null. 
-     * 
-     * @return packageName
-     */
-    public String getPackageName();
-    
-    /**
-     * A list of all the {@link ImportedPackageHolder}s that are imports of this package.
-     * 
-     * @return list of imports
-     */
-    public List<ImportedPackageHolder> getImported();
-    
-    /**
-     * A list of all the {@link ExportedPackageHolder}s that are exports of this package.
-     * 
-     * @return list of exports
-     */
-    public List<ExportedPackageHolder> getExported();
-    
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/RequiredBundleHolder.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/RequiredBundleHolder.java
deleted file mode 100644
index 90c8cf2..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/RequiredBundleHolder.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core;
-
-import java.util.Map;
-
-/**
- * <p>
- * RequiredBundleHolder represents a requirement from one bundle to another.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * RequiredBundleHolder implementations should be thread-safe
- *
- */
-public interface RequiredBundleHolder {
-
-    /**
-     * If this require bundle is resolved, return any specific {@link BundleHolder} that satisfies it. If this require
-     * bundle is not resolved or if it is resolved but is optional and was not satisfied, return null.
-     * 
-     * @return any <code>BundleHolder</code> that satisfies this <code>RequiredBundleHolder</code>
-     */
-    public BundleHolder getProvider();
-    
-    /**
-     * @return The symbolic name of the Bundle required.
-     */
-    public String getRequiredBundleName();
-
-    /**
-     * The version range that must be satisfied by any matching bundles.
-     * 
-     * @return the <code>VersionRange</code> constraint as a String
-     */
-    public String getVersionConstraint();
-
-    /**
-     * Returns whether this require bundle is resolved.
-     * 
-     * @return true if this require bundle is resolved
-     */
-    public boolean isResolved();
-
-    /**
-     * Returns the directives for a header.
-     * 
-     * @return a map containing the directives
-     */
-    Map<String, String> getDirectives();
-
-    /**
-     * Returns the attributes for a header.
-     * 
-     * @return a map containing the attributes
-     */
-    Map<String, String> getAttributes();
-    
-    /**
-     * The {@link BundleHolder} that specifies this <code>RequiredBundleHolder</code> clause.
-     * 
-     * @return The requiring QuasiBundle
-     */
-    public BundleHolder getRequiringBundle();
-    
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/ServiceHolder.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/ServiceHolder.java
deleted file mode 100644
index 69870f2..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/ServiceHolder.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core;
-
-import java.util.List;
-import java.util.Map;
-
-
-/**
- * <p>
- * ServiceHolder represents a single service within OSGi. It will have a single provider and zero to many consumers.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * Implementations of ServiceHolder should be thread-safe
- *
- */
-public interface ServiceHolder extends Comparable<ServiceHolder> {
-
-    /**
-     * Return the Id of this service within OSGi.
-     * 
-     * @return long service Id
-     */
-    long getServiceId();
-    
-    String getFormattedObjectClass();
-    
-    /**
-     * A list of {@link BundleHolder}s of bundles that use the service of this {@link ServiceHolder}.
-     * 
-     * @return List of <code>QuasiLiveBundle</code>s that are using this service
-     */
-    List<BundleHolder> getConsumers();
-    
-    /**
-     * The {@link BundleHolder} of a bundle that provides the service of this {@link ServiceHolder}.
-     * 
-     * @return <code>BundleHolder</code> of bundle that registered this service
-     */
-    BundleHolder getProvider();
-    
-    /**
-     * A map of the Service's properties.
-     * 
-     * @return The service's properties
-     */
-    Map<String, String> getProperties();
-    
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/StateHolder.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/StateHolder.java
deleted file mode 100644
index a6714b1..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/StateHolder.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core;
-
-import java.util.List;
-
-/**
- * <p>
- * <code>StateInspectorService</code> 
- * </p>
- * 
- * <strong>Concurrent Semantics</strong><br />
- * 
- * Implementations should be thread-safe.
- * 
- */
-public interface StateHolder {
-    
-    /**
-     * Obtains {@link BundleHolder} representations of all the bundles present
-     * in the underlying state. 
-     * 
-     * @param dumpName can be null to request the live state
-     * @return all the bundles or the empty list if the source can't be found
-     */
-    public List<BundleHolder> getAllBundles(String dumpName);
-
-    /**
-     * Obtains {@link ServiceHolder} representations of all the services present
-     * in the underlying osgi instance. 
-     * 
-     * @param dumpName can be null to request the live state
-     * @return all the services or the empty list if the source can't be found
-     */
-    public List<ServiceHolder> getAllServices(String dumpName);
-
-    /**
-     * Looks at all the bundles in the underlying state and return the one with 
-     * the given id, if no such bundle exists then null is returned.
-     * 
-     * @param dumpName can be null to request the live state
-     * @param bundleId of required bundle
-     * @return the requested bundle or null
-     */
-    public BundleHolder getBundle(String dumpName, long bundleId);
-    
-    /**
-     * Looks at all the bundles in the underlying state and return the one with 
-     * the given name and version, if no such bundle exists then null is returned.
-     * 
-     * @param source dump name
-     * @param name of bundle
-     * @param version of bundle
-     * @param region to look in
-     * @return holder holding bundle
-     */
-    public BundleHolder getBundle(String source, String name, String version, String region);
-    
-    /**
-     * Returns the {@link ServiceHolder} that represents the service with
-     * the requested service Id. If no such service exists then null is
-     * returned.
-     * 
-     * @param dumpName can be null to request the live state
-     * @param serviceId of service to look for
-     * @return service representation
-     */
-    public ServiceHolder getService(String dumpName, long serviceId) ;
-    
-    /**
-     * Will return {@link FailedResolutionHolder} for the requested bundle. 
-     * If there are no resolution failures then null will be returned.
-     * 
-     * @param dumpName can be null to request the live state
-     * @param bundleId of the fail bundle
-     * @return <code>FailedResolutionHolder</code>
-     */
-    public List<FailedResolutionHolder> getResolverReport(String dumpName, long bundleId);
-    
-    /**
-     * 
-     * @param dumpName can be null to request the live state
-     * @param packageName to find
-     * @return packages matching packageName
-     */
-    public PackagesCollection getPackages(String dumpName, String packageName);
-    
-    /**
-     * Search the requested state for bundles matching the given string
-     * 
-     * @param dumpName can be null to request the live state
-     * @param term to search for
-     * @return list of matching bundles
-     */
-    public List<BundleHolder> search(String dumpName, String term);
-    
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/artifact/StandardArtifactService.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/artifact/StandardArtifactService.java
deleted file mode 100644
index 10c9ef1..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/artifact/StandardArtifactService.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.artifact;
-
-import java.io.File;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.eclipse.virgo.apps.admin.core.ArtifactService;
-import org.eclipse.virgo.kernel.deployer.core.ApplicationDeployer;
-import org.eclipse.virgo.kernel.deployer.core.DeploymentException;
-import org.eclipse.virgo.kernel.services.work.WorkArea;
-
-/**
- * Standard implementation of {@link ArtifactService}.
- * 
- */
-final class StandardArtifactService implements ArtifactService {
-    
-    private static final Logger LOGGER = LoggerFactory.getLogger(StandardArtifactService.class);
-
-    private final ApplicationDeployer applicationDeployer;
-
-    private final File stagingDir;
-
-    /**
-     * @param applicationDeployer
-     * @param subsystemRegistry
-     * @param workAreaManager
-     * @param bundleContext
-     * @param serverApplicationInfoSource
-     */
-    StandardArtifactService(ApplicationDeployer applicationDeployer, WorkArea workArea) {
-        this.applicationDeployer = applicationDeployer;
-        this.stagingDir = workArea.getWorkDirectory().newChild("upload").createDirectory().toFile();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String deploy(File stagedFile) {
-        try {
-            this.applicationDeployer.deploy(stagedFile.toURI());
-            return "Artifact deployed";
-        } catch (DeploymentException e) {
-            if (!stagedFile.delete()) {
-                LOGGER.warn(String.format("Failed to delete %s after a deployment exception.", stagedFile));
-            }
-            return String.format("Deployment Error '%s'", e.getMessage());
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public File getStagingDirectory() {
-        return this.stagingDir;
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/dump/DumpPathLocator.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/dump/DumpPathLocator.java
deleted file mode 100644
index 7caab85..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/dump/DumpPathLocator.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.dump;
-
-import java.io.File;
-
-
-/**
- * <p>
- * DumpPathLocator is used internally to locate the location of the dumps 
- * folder, the dumps within it and the individual dump entries within those.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * Implementations of DumpPathLocator should be threadsafe
- *
- */
-public interface DumpPathLocator {
-    
-    /**
-     * @return directory where the dumps are to be found.
-     */
-    File getDumpDirectory();
-    
-    /**
-     * When given a folder name, this will return that dump as a directory
-     * Will return null if there is no such dump.
-     * 
-     * @param folderName
-     * @return dump directory
-     */
-    File getDumpFolder(String folderName);
-    
-    /**
-     * When given a folder name and an entry name, this will return a file representing that dump entry.
-     * Will return null if there is no such entry.
-     * 
-     * @param folderName
-     * @param fileName
-     * @return entry in dump
-     */
-    File getDumpEntryFile(String folderName, String fileName);
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/dump/StandardDumpInspectorService.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/dump/StandardDumpInspectorService.java
deleted file mode 100644
index 901eb9e..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/dump/StandardDumpInspectorService.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.dump;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.LineNumberReader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.virgo.apps.admin.core.DumpInspectorService;
-import org.eclipse.virgo.util.io.FileSystemUtils;
-
-
-
-/**
- * <p>
- * StandardDumpInspectorService is an implementation of {@link DumpInspectorService} 
- * that uses a {@link DumpPathLocator} to find dumps that the system has produced.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * StandardDumpInspectorService is threadsafe
- *
- */
-final class StandardDumpInspectorService implements DumpInspectorService {
-	
-	private final static String LINE_SEPARATOR = System.getProperty("line.separator");
-    
-    private final DumpPathLocator dumpPathLocator;
-	
-    public StandardDumpInspectorService(DumpPathLocator dumpPathLocator) {
-        this.dumpPathLocator = dumpPathLocator;
-
-    }
-	
-	/**
-	 * {@inheritDoc}
-	 */
-	public List<File> findAvaliableDumps() {
-		List<File> dumps = new ArrayList<File>();
-		File dumpDir = this.dumpPathLocator.getDumpDirectory();
-		if(dumpDir != null){			
-			File[] dumpFolders = FileSystemUtils.listFiles(dumpDir, new FileFilter(){
-
-				public boolean accept(File pathname) {
-					return pathname.isDirectory();
-				}
-				
-			});
-			if(dumpFolders.length > 0){
-				for(File dumpFolder : dumpFolders){
-					dumps.add(dumpFolder);
-				}
-			}
-		}
-		return dumps;
-	}
-
-    /**
-     * {@inheritDoc}
-     */
-	public List<String> getDumpEntries(String dumpID) {
-		if(dumpID == null){
-			return Collections.emptyList();
-		}
-		List<String> dumpEntries = new ArrayList<String>();
-		File dumpDir = this.dumpPathLocator.getDumpFolder(dumpID);
-		if(dumpDir == null){
-			dumpEntries.add(String.format("No Entries have been found for '%s'", dumpID));
-		}else{
-			String[] dumpEntriesArray = FileSystemUtils.list(dumpDir);
-			if(dumpEntriesArray.length ==0){
-				dumpEntries.add(String.format("No Entries have been found for '%s'", dumpID));
-			} else {
-				dumpEntries.addAll(Arrays.asList(dumpEntriesArray));
-			}
-		}
-		return dumpEntries;
-	}
-
-    /**
-     * {@inheritDoc}
-     */
-	public String getDumpEntry(String dumpID, String entryName) {
-		if(dumpID == null || entryName == null){
-			return "";
-		}
-		StringBuilder inspection = new StringBuilder();
-		File dumpEntry = this.dumpPathLocator.getDumpEntryFile(dumpID, entryName);
-		if(dumpEntry != null){
-			LineNumberReader reader = null;
-			try {
-				reader = new LineNumberReader(new FileReader(dumpEntry));
-				while (reader.ready()){
-					String rawLine = reader.readLine();
-					if(rawLine != null){
-						inspection.append(this.escapeAngleBrackets(rawLine));
-						inspection.append(LINE_SEPARATOR);
-					}
-				}
-				reader.close();
-			} catch (IOException e) {
-				try {
-					if(reader != null){
-						reader.close();
-					}
-				} catch (IOException e1) {
-					// no-op to close stream
-				}
-				// no-op just return the default null value and let the jsp deal with it
-			}
-		}
-		return inspection.toString();
-	}
-
-	private String escapeAngleBrackets(String unfriendlyHTML) {
-		String processed = unfriendlyHTML.replace("<", "&#60;");
-		processed = processed.replace(">", "&#62;");
-		processed = processed.replace("°", "&infin;");
-		return processed;
-	}
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/dump/StandardDumpPathLocator.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/dump/StandardDumpPathLocator.java
deleted file mode 100644
index 1ad78ca..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/dump/StandardDumpPathLocator.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.dump;
-
-import java.io.File;
-import java.lang.management.ManagementFactory;
-
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-import javax.management.openmbean.CompositeDataSupport;
-import javax.management.openmbean.TabularDataSupport;
-
-import org.osgi.framework.InvalidSyntaxException;
-
-
-/**
- * <p>
- * StandardDumpPathLocator is an implementation of {@link DumpPathLocator} that 
- * gets the location of the dumps directory from config admin.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * StandardDumpPathLocator is threadsafe
- *
- */
-final class StandardDumpPathLocator implements DumpPathLocator{
-
-    private final static String FILE_SEPARATOR = System.getProperty("file.separator");
-    
-    private static final String CONFIG_PROPERTY = "dump.root.directory";
-
-    private static final String MEDIC_MBEAN_QUERY = "org.eclipse.virgo.kernel:type=Configuration,name=org.eclipse.virgo.medic";
-
-	private String dumpConfigValue;
-    
-    public StandardDumpPathLocator() throws InvalidSyntaxException {
-        MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
-        try {
-            Object attribute = mBeanServer.getAttribute(new ObjectName(MEDIC_MBEAN_QUERY), "Properties");
-            TabularDataSupport table = (TabularDataSupport) attribute;
-            CompositeDataSupport composite = (CompositeDataSupport) table.get(new Object[]{CONFIG_PROPERTY});
-            this.dumpConfigValue = composite.get("value").toString();
-        } catch (Exception e) {
-            //no-op
-        }
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public File getDumpDirectory(){
-        String path = this.dumpConfigValue;
-        if(path != null){
-            File dumpDir = new File(path);
-            if(dumpDir.exists() && dumpDir.isDirectory()){
-                return dumpDir;
-            }
-        }
-        return null;
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public File getDumpFolder(String folderName){
-        String path = String.format("%s%s%s", this.dumpConfigValue, FILE_SEPARATOR, folderName);
-        File dumpDir = new File(path);
-        if(dumpDir.exists() && dumpDir.isDirectory()){
-            return dumpDir;
-        }
-        return null;
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public File getDumpEntryFile(String folderName, String fileName){
-        String path = String.format("%s%s%s%s%s", this.dumpConfigValue, FILE_SEPARATOR, folderName, FILE_SEPARATOR, fileName);
-        File dumpEntry = new File(path);
-        if(dumpEntry.exists() && dumpEntry.isFile()){
-            return dumpEntry;
-        }
-        return null;
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/ObjectFormatter.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/ObjectFormatter.java
deleted file mode 100644
index b3e334d..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/ObjectFormatter.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.state;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.springframework.util.StringUtils;
-
-
-/**
- */
-final class ObjectFormatter {
-
-    
-    private ObjectFormatter() {
-        // stop construction
-    }
-    
-    /**
-     * Return the object after a best attempt to format the object as a string
-     * 
-     * @param value object
-     * @return best attempt to convert object to string representation
-     */
-    public static String formatObject(Object value) {
-        if(value instanceof Object[]) {
-            return StringUtils.arrayToDelimitedString((Object[]) value, ", ");
-        }
-        return value.toString();
-    }
-    
-    /**
-     * Will return a Map<String, String> after doing a best attempt to make the values nicely formatted Strings.
-     * 
-     * @param properties arbitrary property map
-     * @return String->String version of properties
-     */
-    public static Map<String, String> formatMapValues(Map<String, Object> properties){
-        Map<String, String> formattedProperties = new HashMap<String, String>();
-        for(Entry<String, Object> entry : properties.entrySet()) {
-            formattedProperties.put(entry.getKey(), formatObject(entry.getValue()));
-        }
-        return formattedProperties;
-    }
-    
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardBundleHolder.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardBundleHolder.java
deleted file mode 100644
index ca1d9c9..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardBundleHolder.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.state;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.osgi.framework.Bundle;
-
-import org.eclipse.virgo.apps.admin.core.BundleHolder;
-import org.eclipse.virgo.apps.admin.core.ExportedPackageHolder;
-import org.eclipse.virgo.apps.admin.core.ImportedPackageHolder;
-import org.eclipse.virgo.apps.admin.core.RequiredBundleHolder;
-import org.eclipse.virgo.apps.admin.core.ServiceHolder;
-import org.eclipse.virgo.kernel.module.Component;
-import org.eclipse.virgo.kernel.module.ModuleContext;
-import org.eclipse.virgo.kernel.module.ModuleContextAccessor;
-import org.eclipse.virgo.kernel.module.NoSuchComponentException;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiBundle;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiExportPackage;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiImportPackage;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiRequiredBundle;
-import org.eclipse.virgo.kernel.shell.state.QuasiLiveBundle;
-import org.eclipse.virgo.kernel.shell.state.QuasiLiveService;
-import org.eclipse.virgo.kernel.shell.state.StateService;
-
-/**
- * <p>
- * StandardArtifactHolder is the standard implementation of BundleHolder. It represents a 
- * bundle artifact and will provide formatting friendly strings where possible.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * StandardArtifactHolder is thread-safe
- *
- */
-final class StandardBundleHolder implements BundleHolder {
-
-    private final ModuleContextAccessor moduleContextAccessor;
-
-    private final QuasiBundle quasiBundle;
-
-    private final StateService stateService;
-
-    public StandardBundleHolder(QuasiBundle bundle, ModuleContextAccessor moduleContextAccessor, StateService stateService) {
-        if(bundle == null || moduleContextAccessor == null) {
-            throw new IllegalArgumentException("StandardBundleHolder must be provided with non-null QuasiBundle and ModuleContextAccessor.");
-        }
-        this.quasiBundle = bundle;
-        this.moduleContextAccessor = moduleContextAccessor;
-        this.stateService = stateService;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public Long getBundleId() {
-        return this.quasiBundle.getBundleId();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String getRegion(){
-        return this.stateService.getBundleRegionName(getBundleId());
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String getSymbolicName() {
-        return quasiBundle.getSymbolicName();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String getState() {
-        if(this.quasiBundle instanceof QuasiLiveBundle) {
-            QuasiLiveBundle quasiLiveBundle = (QuasiLiveBundle) this.quasiBundle;
-            return quasiLiveBundle.getState();
-        }
-        return this.quasiBundle.isResolved() ? "Resolved" : "Unresolved";
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public boolean isResolved() {
-        return this.quasiBundle.isResolved();
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public String getVersion() {
-        return quasiBundle.getVersion().toString();
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public Bundle getRawBundle() {
-        return this.quasiBundle.getBundle();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String getBundleLocation() {
-        Bundle bundle2 = this.quasiBundle.getBundle();
-        if(bundle2 != null) {
-            return bundle2.getLocation();
-        }
-        return "";
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String getSpringName() {
-        Bundle realBundle = quasiBundle.getBundle();
-        if(realBundle != null) {
-            ModuleContext moduleContext = this.moduleContextAccessor.getModuleContext(realBundle);
-            if(moduleContext != null) {
-                return moduleContext.getDisplayName();
-            }
-        }
-        return "";
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public List<Component> getBeans(){
-        List<Component> beans = new ArrayList<Component>();
-        Bundle realBundle = quasiBundle.getBundle();
-        if(realBundle != null) {
-            ModuleContext moduleContext = this.moduleContextAccessor.getModuleContext(realBundle);
-            if(moduleContext != null) {
-                for(String name : moduleContext.getComponentNames()) {
-                    try {
-                        beans.add(moduleContext.getComponent(name));
-                    } catch (NoSuchComponentException e) {
-                        // no-op it is possible the bean has been removed since getting the list of names, thread safety.
-                    }
-                }
-            }
-        }
-        return beans;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public List<ExportedPackageHolder> getExportPackages() {
-        List<ExportedPackageHolder> exportedPackageHolders = new ArrayList<ExportedPackageHolder>();
-        List<QuasiExportPackage> exportPackages = quasiBundle.getExportPackages();
-        for(QuasiExportPackage exportPackage : exportPackages) {
-            exportedPackageHolders.add(new StandardExportedPackageHolder(exportPackage, this.moduleContextAccessor, this.stateService));
-        }
-        return exportedPackageHolders;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public List<ImportedPackageHolder> getImportPackages() {
-        List<ImportedPackageHolder> importedPackageHolders = new ArrayList<ImportedPackageHolder>();
-        List<QuasiImportPackage> importPackages = quasiBundle.getImportPackages();
-        for(QuasiImportPackage importPackage : importPackages) {
-            importedPackageHolders.add(new StandardImportedPackageHolder(importPackage, this.moduleContextAccessor, this.stateService));
-        }
-        return importedPackageHolders;
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public List<RequiredBundleHolder> getRequiredBundles(){
-        List<QuasiRequiredBundle> quasiRequiredBundles = this.quasiBundle.getRequiredBundles();
-        List<RequiredBundleHolder> requiredBundleHolders = new ArrayList<RequiredBundleHolder>();
-        if(quasiRequiredBundles != null) {
-            for(QuasiRequiredBundle quasiRequiredBundle : quasiRequiredBundles) {
-                requiredBundleHolders.add(new StandardRequiredBundleHolder(quasiRequiredBundle, this.moduleContextAccessor, this.stateService));
-            }
-        }
-        return requiredBundleHolders;
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public List<BundleHolder> getHosts() {
-        List<BundleHolder> artifactHolders = new ArrayList<BundleHolder>();
-        List<QuasiBundle> hosts = quasiBundle.getHosts();
-        if(hosts != null) {
-            for(QuasiBundle hostQuasiBundle : hosts) {
-                artifactHolders.add(new StandardBundleHolder(hostQuasiBundle, this.moduleContextAccessor, this.stateService));
-            }
-        }
-        return artifactHolders;
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public List<BundleHolder> getFragments() {
-        List<BundleHolder> artifactHolders = new ArrayList<BundleHolder>();
-        List<QuasiBundle> fragments = quasiBundle.getFragments();
-        if(fragments != null) {
-            for(QuasiBundle fragmentQuasiBundle : fragments) {
-                artifactHolders.add(new StandardBundleHolder(fragmentQuasiBundle, this.moduleContextAccessor, this.stateService));
-            }
-        }
-        return artifactHolders;
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public List<ServiceHolder> getExportedServices(){
-        List<ServiceHolder> serviceHolders = new ArrayList<ServiceHolder>();
-        if(this.quasiBundle instanceof QuasiLiveBundle) {
-            QuasiLiveBundle quasiLiveBundle = (QuasiLiveBundle) this.quasiBundle;
-            List<QuasiLiveService> exportedServices = quasiLiveBundle.getExportedServices();
-            for(QuasiLiveService quasiLiveService : exportedServices) {
-                serviceHolders.add(new StandardServiceHolder(quasiLiveService, this.moduleContextAccessor, this.stateService));
-            }
-        }
-        return serviceHolders;
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public List<ServiceHolder> getImportedServices(){
-        List<ServiceHolder> serviceHolders = new ArrayList<ServiceHolder>();
-        if(this.quasiBundle instanceof QuasiLiveBundle) {
-            QuasiLiveBundle quasiLiveBundle = (QuasiLiveBundle) this.quasiBundle;
-            List<QuasiLiveService> importedServices = quasiLiveBundle.getImportedServices();
-            for(QuasiLiveService quasiLiveService : importedServices) {
-                serviceHolders.add(new StandardServiceHolder(quasiLiveService, this.moduleContextAccessor, this.stateService));
-            }
-        }
-        return serviceHolders;
-    }
-
-    public int compareTo(BundleHolder o) {
-        return getBundleId().compareTo(o.getBundleId());
-    }
-
-    @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + (int) this.quasiBundle.getBundleId();
-        return result;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj)
-            return true;
-        if (obj == null)
-            return false;
-        if (getClass() != obj.getClass())
-            return false;
-        StandardBundleHolder other = (StandardBundleHolder) obj;
-        if (quasiBundle.getBundleId() != other.quasiBundle.getBundleId()) {
-            return false;
-        }
-        return true;
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardDumpLocator.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardDumpLocator.java
deleted file mode 100644
index bcedae9..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardDumpLocator.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.state;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.eclipse.virgo.apps.admin.core.DumpLocator;
-import org.eclipse.virgo.apps.admin.core.dump.DumpPathLocator;
-
-/**
- * <p>
- * DumpStateExtractor can extract the osgi state from an equinox dump and place it in a staging location for use by
- * clients of this class.
- * </p>
- * 
- * <strong>Concurrent Semantics</strong><br />
- * 
- * DumpStateExtractor is threadsafe
- * 
- */
-final class StandardDumpLocator implements DumpLocator {
-
-    private final DumpPathLocator dumpPathLocator;
-
-    /**
-     * @param dumpPathLocator to get dumps from
-     */
-    public StandardDumpLocator(DumpPathLocator dumpPathLocator) {
-        this.dumpPathLocator = dumpPathLocator;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public File getDumpDir(String dump) throws IOException {
-        if (dump == null) {
-            throw new IllegalArgumentException("Requested dump cannot be null");
-        }
-        File dumpFolder = this.dumpPathLocator.getDumpFolder(dump);
-        if (dumpFolder == null) {
-            throw new IOException(String.format("Requested dump does not exist or is not a folder '%s'", dump));
-        }
-        return dumpFolder;
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardExportedPackageHolder.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardExportedPackageHolder.java
deleted file mode 100644
index ab169c5..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardExportedPackageHolder.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.state;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.virgo.apps.admin.core.BundleHolder;
-import org.eclipse.virgo.apps.admin.core.ExportedPackageHolder;
-import org.eclipse.virgo.apps.admin.core.ImportedPackageHolder;
-import org.eclipse.virgo.kernel.module.ModuleContextAccessor;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiBundle;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiExportPackage;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiImportPackage;
-import org.eclipse.virgo.kernel.shell.state.StateService;
-
-/**
- * <p>
- * StandardExportedPackageHolder is the standard implementation of {@link ExportedPackageHolder}.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * StandardExportedPackageHolder is thread-safe
- *
- */
-final class StandardExportedPackageHolder implements ExportedPackageHolder {
-
-    private final QuasiExportPackage exportPackage;
-    
-    private final ModuleContextAccessor moduleContextAccessor;
-
-    private final StateService stateService;
-
-    public StandardExportedPackageHolder(QuasiExportPackage exportPackage, ModuleContextAccessor moduleContextAccessor, StateService stateService) {
-        this.exportPackage = exportPackage;
-        this.moduleContextAccessor = moduleContextAccessor;
-        this.stateService = stateService;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String getPackageName() {
-        return this.exportPackage.getPackageName();
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public List<ImportedPackageHolder> getConsumers() {
-        List<QuasiImportPackage> consumers = this.exportPackage.getConsumers();
-        List<ImportedPackageHolder> importedPackageHolders = new ArrayList<ImportedPackageHolder>();
-        if(consumers != null) {
-            for(QuasiImportPackage quasiImportPackage : consumers) {
-                importedPackageHolders.add(new StandardImportedPackageHolder(quasiImportPackage, this.moduleContextAccessor, this.stateService));
-            }
-        }
-        return importedPackageHolders;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public BundleHolder getExportingBundle() {
-        QuasiBundle exportingBundle = this.exportPackage.getExportingBundle();
-        if(exportingBundle != null) {
-            return new StandardBundleHolder(exportingBundle, this.moduleContextAccessor, this.stateService) ;
-        }
-        return null;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String getVersion() {
-        return this.exportPackage.getVersion().toString();
-    }
-
-
-    /** 
-     * {@inheritDoc}
-     */
-    public Map<String, String> getAttributes() {
-        return ObjectFormatter.formatMapValues(this.exportPackage.getAttributes());
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public Map<String, String> getDirectives() {
-        return ObjectFormatter.formatMapValues(this.exportPackage.getDirectives());
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardFailedResolutionHolder.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardFailedResolutionHolder.java
deleted file mode 100644
index 690d603..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardFailedResolutionHolder.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.state;
-
-import org.eclipse.virgo.apps.admin.core.BundleHolder;
-import org.eclipse.virgo.apps.admin.core.FailedResolutionHolder;
-import org.eclipse.virgo.kernel.module.ModuleContextAccessor;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiResolutionFailure;
-import org.eclipse.virgo.kernel.shell.state.StateService;
-
-
-/**
- * <p>
- * StandardFailedResolutionHolder represents a single cause of a bundle resolution 
- * failure. A bundle may fail to resolve for many reasons.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * StandardFailedResolutionHolder is threadsafe
- *
- */
-final class StandardFailedResolutionHolder implements FailedResolutionHolder {
-
-    private final ModuleContextAccessor moduleContextAccessor;
-    
-    private final QuasiResolutionFailure quasiResolutionFailure;
-
-    private final StateService stateService;
-
-    /**
-     * 
-     * @param quasiResolutionFailure to be held
-     * @param moduleContextAccessor used for {@link BundleHolder} creation
-     */
-    public StandardFailedResolutionHolder(QuasiResolutionFailure quasiResolutionFailure, ModuleContextAccessor moduleContextAccessor, StateService stateService) {
-        this.quasiResolutionFailure = quasiResolutionFailure;
-        this.moduleContextAccessor = moduleContextAccessor;
-        this.stateService = stateService;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String getDescription() {
-        return escapeAngleBrackets(this.quasiResolutionFailure.getDescription());
-    }
-    
-    private String escapeAngleBrackets(String unfriendlyHTML) {
-        String processed = unfriendlyHTML.replace("<", "&#60;");
-        processed = processed.replace(">", "&#62;");
-        processed = processed.replace("°", "&infin;");
-        return processed;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public BundleHolder getUnresolvedBundle() {
-        return new StandardBundleHolder(this.quasiResolutionFailure.getUnresolvedQuasiBundle(), this.moduleContextAccessor, this.stateService);
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardImportedPackageHolder.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardImportedPackageHolder.java
deleted file mode 100644
index e8f284b..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardImportedPackageHolder.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.state;
-
-import java.util.Map;
-
-import org.eclipse.virgo.apps.admin.core.BundleHolder;
-import org.eclipse.virgo.apps.admin.core.ExportedPackageHolder;
-import org.eclipse.virgo.apps.admin.core.ImportedPackageHolder;
-import org.eclipse.virgo.kernel.module.ModuleContextAccessor;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiBundle;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiExportPackage;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiImportPackage;
-import org.eclipse.virgo.kernel.shell.state.StateService;
-import org.eclipse.virgo.util.osgi.manifest.VersionRange;
-
-/**
- * <p>
- * StandardImportedPackageHolder is the standard implementation of {@link ImportedPackageHolder}.
- * It is backed by a {@link QuasiImportPackage}.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * StandardImportedPackageHolder is thread-safe
- *
- */
-final class StandardImportedPackageHolder implements ImportedPackageHolder {
-
-    private final ModuleContextAccessor moduleContextAccessor;
-    
-    private final QuasiImportPackage importPackage;
-
-    private final StateService stateService;
-    
-    public StandardImportedPackageHolder(QuasiImportPackage importPackage, ModuleContextAccessor moduleContextAccessor, StateService stateService) {
-        this.importPackage = importPackage;
-        this.moduleContextAccessor = moduleContextAccessor;
-        this.stateService = stateService;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public BundleHolder getImportingBundle() {
-        QuasiBundle importingBundle = this.importPackage.getImportingBundle();
-        if(importingBundle != null) {
-            return new StandardBundleHolder(importingBundle, this.moduleContextAccessor, this.stateService);
-        } 
-        return null;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String getPackageName() {
-        return this.importPackage.getPackageName();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String getVersionConstraint() {
-        VersionRange versionConstraint = this.importPackage.getVersionConstraint();
-        return versionConstraint.toString().replace("°", "&infin;");
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public ExportedPackageHolder getProvider() {
-        QuasiExportPackage provider = this.importPackage.getProvider();
-        if(provider != null) {
-            return new StandardExportedPackageHolder(provider, this.moduleContextAccessor, this.stateService);
-        }
-        return null;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public boolean isResolved() {
-        return this.importPackage.isResolved();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public Map<String, String> getAttributes() {
-        return ObjectFormatter.formatMapValues(this.importPackage.getAttributes());
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public Map<String, String> getDirectives() {
-        return ObjectFormatter.formatMapValues(this.importPackage.getDirectives());
-    }    
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardPackagesCollection.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardPackagesCollection.java
deleted file mode 100644
index 70896da..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardPackagesCollection.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.state;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.virgo.apps.admin.core.ExportedPackageHolder;
-import org.eclipse.virgo.apps.admin.core.ImportedPackageHolder;
-import org.eclipse.virgo.apps.admin.core.PackagesCollection;
-
-
-
-/**
- * <p>
- * StandardPackagesCollection is the an implementation of {@link PackagesCollection}.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * StandardPackagesCollection is threadsafe
- *
- */
-final class StandardPackagesCollection implements PackagesCollection {
-
-    private final List<ExportedPackageHolder> exported;
-
-    private final List<ImportedPackageHolder> imported;
-    
-    private final String packageName;
-
-    public StandardPackagesCollection(String packageName, List<ImportedPackageHolder> imported, List<ExportedPackageHolder> exported) {
-        if(packageName == null) {
-            throw new IllegalArgumentException("Package name must be specified for a collection of packages");
-        }
-        this.packageName = packageName;
-        this.imported = imported == null ? new ArrayList<ImportedPackageHolder>() : imported;
-        this.exported = exported == null ? new ArrayList<ExportedPackageHolder>() : exported;
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public List<ExportedPackageHolder> getExported() {
-        return this.exported;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public List<ImportedPackageHolder> getImported() {
-        return this.imported;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String getPackageName() {
-        return this.packageName;
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardRequiredBundleHolder.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardRequiredBundleHolder.java
deleted file mode 100644
index 2d21a74..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardRequiredBundleHolder.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.state;
-
-import java.util.Map;
-
-import org.eclipse.virgo.apps.admin.core.BundleHolder;
-import org.eclipse.virgo.apps.admin.core.RequiredBundleHolder;
-import org.eclipse.virgo.kernel.module.ModuleContextAccessor;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiRequiredBundle;
-import org.eclipse.virgo.kernel.shell.state.StateService;
-import org.eclipse.virgo.util.osgi.manifest.VersionRange;
-
-
-/**
- * <p>
- * StandardRequiredBundleHolder is the standard implementation of {@link RequiredBundleHolder}.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * StandardRequiredBundleHolder is thread-safe
- *
- */
-final class StandardRequiredBundleHolder implements RequiredBundleHolder {
-
-    private final QuasiRequiredBundle quasiRequiredBundle;
-    
-    private final ModuleContextAccessor moduleContextAccessor;
-
-    private final StateService stateService;
-
-    public StandardRequiredBundleHolder(QuasiRequiredBundle quasiRequiredBundle, ModuleContextAccessor moduleContextAccessor, StateService stateService) {
-        this.quasiRequiredBundle = quasiRequiredBundle;
-        this.moduleContextAccessor = moduleContextAccessor;
-        this.stateService = stateService;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public BundleHolder getProvider() {
-        return new StandardBundleHolder(this.quasiRequiredBundle.getProvider(), this.moduleContextAccessor, this.stateService);
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String getRequiredBundleName() {
-        return this.quasiRequiredBundle.getRequiredBundleName();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public BundleHolder getRequiringBundle() {
-        return new StandardBundleHolder(this.quasiRequiredBundle.getRequiringBundle(), this.moduleContextAccessor, this.stateService);
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String getVersionConstraint() {
-        VersionRange versionConstraint = this.quasiRequiredBundle.getVersionConstraint();
-        if(versionConstraint == null) {
-            versionConstraint = VersionRange.NATURAL_NUMBER_RANGE;
-        }
-        return versionConstraint.toString().replace(", oo]", ", &infin;]").replace(", oo)", ", &infin;)");
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public Map<String, String> getAttributes() {
-        return ObjectFormatter.formatMapValues(this.quasiRequiredBundle.getAttributes());
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public Map<String, String> getDirectives() {
-        return ObjectFormatter.formatMapValues(this.quasiRequiredBundle.getDirectives());
-    } 
-
-    /** 
-     * {@inheritDoc}
-     */
-    public boolean isResolved() {
-        return this.quasiRequiredBundle.isResolved();
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardServiceHolder.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardServiceHolder.java
deleted file mode 100644
index 402e49e..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardServiceHolder.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.state;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.osgi.framework.Constants;
-import org.springframework.util.StringUtils;
-
-import org.eclipse.virgo.apps.admin.core.BundleHolder;
-import org.eclipse.virgo.apps.admin.core.ServiceHolder;
-import org.eclipse.virgo.kernel.module.ModuleContextAccessor;
-import org.eclipse.virgo.kernel.shell.state.QuasiLiveBundle;
-import org.eclipse.virgo.kernel.shell.state.QuasiLiveService;
-import org.eclipse.virgo.kernel.shell.state.StateService;
-
-/**
- * <p>
- * StandardServiceHolder is the default implementation of ServiceHolder
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * StandardServiceHolder is thread-safe
- *
- */
-final class StandardServiceHolder implements ServiceHolder {
-
-    private static final String MULTIPLE_OBJECT_CLASSES_SUFFIX = ", ...";
-    
-    private final QuasiLiveService quasiLiveService;
-    
-    private final ModuleContextAccessor moduleContextAccessor;
-
-    private final StateService stateService;
-
-    public StandardServiceHolder(QuasiLiveService quasiLiveService, ModuleContextAccessor moduleContextAccessor, StateService stateService) {
-        if(quasiLiveService == null || moduleContextAccessor == null) {
-            throw new IllegalArgumentException("QuasiLiveService and ModuleContextAccessor must not be null");
-        }
-        this.quasiLiveService = quasiLiveService;
-        this.moduleContextAccessor = moduleContextAccessor;
-        this.stateService = stateService;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public long getServiceId() {
-        return this.quasiLiveService.getServiceId();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getFormattedObjectClass() {
-        return this.formatObjectClass(this.quasiLiveService.getProperties().get(Constants.OBJECTCLASS));
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public List<BundleHolder> getConsumers() {
-        List<QuasiLiveBundle> consumers = this.quasiLiveService.getConsumers();
-        List<BundleHolder> bundleHolders = new ArrayList<BundleHolder>();
-        for(QuasiLiveBundle quasiLiveBundle : consumers) {
-            bundleHolders.add(new StandardBundleHolder(quasiLiveBundle, this.moduleContextAccessor, this.stateService));
-        }
-        return bundleHolders;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public Map<String, String> getProperties() {
-        return ObjectFormatter.formatMapValues(this.quasiLiveService.getProperties());
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public BundleHolder getProvider() {
-        return new StandardBundleHolder(this.quasiLiveService.getProvider(), this.moduleContextAccessor, this.stateService);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public int compareTo(ServiceHolder o) {
-        return Long.valueOf(this.getServiceId()).compareTo(Long.valueOf(o.getServiceId()));
-    }
-    
-    @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + quasiLiveService.hashCode();
-        return result;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj)
-            return true;
-        if (obj == null)
-            return false;
-        if (getClass() != obj.getClass())
-            return false;
-        StandardServiceHolder other = (StandardServiceHolder) obj;
-        if (!quasiLiveService.equals(other.quasiLiveService))
-            return false;
-        return true;
-    }
-
-    private String formatObjectClass(Object objectClass) {
-        StringBuilder sb = new StringBuilder();
-        if(objectClass == null) {
-            objectClass = new String[0];
-        }
-        String[] objectClasses;
-        if(objectClass instanceof String) {
-            objectClasses = StringUtils.commaDelimitedListToStringArray((String) objectClass);
-        } else if(objectClass instanceof Object[]) {
-            objectClasses = (String[]) objectClass;
-        } else {
-            objectClasses = StringUtils.commaDelimitedListToStringArray(objectClass.toString());
-        }
-
-        if (objectClasses.length == 0) {
-            sb.append("<none>");
-        } else {
-
-            String formattedObjectClass = objectClasses[0];
-            sb.append(formattedObjectClass);
-
-            if (objectClasses.length > 1) {
-                sb.append(MULTIPLE_OBJECT_CLASSES_SUFFIX);
-            }
-        }
-        
-        return sb.toString();
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardStateHolder.java b/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardStateHolder.java
deleted file mode 100644
index d0611fb..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/java/org/eclipse/virgo/apps/admin/core/state/StandardStateHolder.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.state;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.virgo.apps.admin.core.BundleHolder;
-import org.eclipse.virgo.apps.admin.core.DumpLocator;
-import org.eclipse.virgo.apps.admin.core.ExportedPackageHolder;
-import org.eclipse.virgo.apps.admin.core.FailedResolutionHolder;
-import org.eclipse.virgo.apps.admin.core.ImportedPackageHolder;
-import org.eclipse.virgo.apps.admin.core.PackagesCollection;
-import org.eclipse.virgo.apps.admin.core.ServiceHolder;
-import org.eclipse.virgo.apps.admin.core.StateHolder;
-import org.eclipse.virgo.kernel.module.ModuleContextAccessor;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiBundle;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiExportPackage;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiFramework;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiFrameworkFactory;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiImportPackage;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiResolutionFailure;
-import org.eclipse.virgo.kernel.shell.state.QuasiLiveService;
-import org.eclipse.virgo.kernel.shell.state.StateService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * <p>
- * StandardStateInspectorService is the standard implementation of {@link StateHolder}.
- * </p>
- * 
- * <strong>Concurrent Semantics</strong><br />
- * 
- * StandardStateInspectorService is Thread-safe
- * 
- */
-final class StandardStateHolder implements StateHolder {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(StandardStateHolder.class);
-
-    private static final String LIVE = "Live";
-
-    private static final Object KERNEL_REGION_NAME = "org.eclipse.equinox.region.kernel";
-
-    private final StateService stateService;
-
-    private final DumpLocator dumpLocator;
-
-    private final ModuleContextAccessor moduleContextAccessor;
-
-    private final QuasiFrameworkFactory quasiFrameworkFactory;
-
-    public StandardStateHolder(StateService stateService, DumpLocator dumpLocator, ModuleContextAccessor moduleContextAccessor,
-        QuasiFrameworkFactory quasiFrameworkFactory) {
-        this.stateService = stateService;
-        this.dumpLocator = dumpLocator;
-        this.moduleContextAccessor = moduleContextAccessor;
-        this.quasiFrameworkFactory = quasiFrameworkFactory;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public List<BundleHolder> getAllBundles(String source) {
-        File dumpDirectory = null;
-        if (source != null && !LIVE.equals(source)) {
-            dumpDirectory = this.getDumpDirectory(source);
-        }
-        List<QuasiBundle> allBundles = this.stateService.getAllBundles(dumpDirectory);
-        List<BundleHolder> heldBundles = new ArrayList<BundleHolder>();
-        for (QuasiBundle quasiBundle : allBundles) {
-            if (quasiBundle != null && (!KERNEL_REGION_NAME.equals(this.stateService.getBundleRegionName(quasiBundle.getBundleId())) ||  0l == quasiBundle.getBundleId())) {
-                heldBundles.add(new StandardBundleHolder(quasiBundle, this.moduleContextAccessor, this.stateService));
-            }
-        }
-        return heldBundles;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public List<ServiceHolder> getAllServices(String source) {
-        File dumpDirectory = null;
-        List<ServiceHolder> serviceHolders = new ArrayList<ServiceHolder>();
-        if (source != null && !LIVE.equals(source)) {
-            dumpDirectory = this.getDumpDirectory(source);
-        }
-        List<QuasiLiveService> allServices = this.stateService.getAllServices(dumpDirectory);
-        for (QuasiLiveService quasiLiveService : allServices) {
-            serviceHolders.add(new StandardServiceHolder(quasiLiveService, moduleContextAccessor, this.stateService));
-        }
-        return serviceHolders;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public BundleHolder getBundle(String source, long bundleId) {
-        File dumpDirectory = null;
-        if (source != null && !LIVE.equals(source)) {
-            dumpDirectory = this.getDumpDirectory(source);
-        }
-
-        QuasiBundle bundle = stateService.getBundle(dumpDirectory, bundleId);
-        if (bundle != null) {
-            return new StandardBundleHolder(bundle, this.moduleContextAccessor, this.stateService);
-        }
-        return null;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public BundleHolder getBundle(String source, String name, String version, String region) {
-        File dumpDirectory = null;
-        if (source != null && !LIVE.equals(source)) {
-            dumpDirectory = this.getDumpDirectory(source);
-        }
-        QuasiBundle result = null;
-        if (name != null && version != null) {
-            List<QuasiBundle> allBundles = this.stateService.getAllBundles(dumpDirectory);
-            for (QuasiBundle quasiBundle : allBundles) {
-                if (quasiBundle.getSymbolicName().equals(name) && quasiBundle.getVersion().toString().equals(version) && this.stateService.getBundleRegionName(quasiBundle.getBundleId()).equals(region)) {
-                    result = quasiBundle;
-                }
-            }
-        }
-        if (result != null) {
-            return new StandardBundleHolder(result, this.moduleContextAccessor, this.stateService);
-        }
-        return null;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public ServiceHolder getService(String source, long serviceId) {
-        File dumpDirectory = null;
-        if (source != null && !LIVE.equals(source)) {
-            dumpDirectory = this.getDumpDirectory(source);
-        }
-        QuasiLiveService service = this.stateService.getService(dumpDirectory, serviceId);
-        if (service != null) {
-            return new StandardServiceHolder(service, this.moduleContextAccessor, this.stateService);
-        }
-        return null;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public PackagesCollection getPackages(String source, String packageName) {
-        QuasiFramework quasiFramework = this.getQuasiFramework(source);
-        List<QuasiBundle> bundles = quasiFramework.getBundles();
-
-        List<ImportedPackageHolder> importedPackageHolders = new ArrayList<ImportedPackageHolder>();
-        List<ExportedPackageHolder> exportedPackageHolders = new ArrayList<ExportedPackageHolder>();
-
-        for (QuasiBundle qBundle : bundles) {
-            ImportedPackageHolder importPackage = processImporters(qBundle, packageName);
-            if (importPackage != null) {
-                importedPackageHolders.add(importPackage);
-            }
-            ExportedPackageHolder exportPackage = processExporters(qBundle, packageName);
-            if (exportPackage != null) {
-                exportedPackageHolders.add(exportPackage);
-            }
-        }
-        return new StandardPackagesCollection(packageName, importedPackageHolders, exportedPackageHolders);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public List<FailedResolutionHolder> getResolverReport(String source, long bundleId) {
-        File dumpDirectory = null;
-        if (source != null && !LIVE.equals(source)) {
-            dumpDirectory = this.getDumpDirectory(source);
-        }
-        List<QuasiResolutionFailure> resolverReport = this.stateService.getResolverReport(dumpDirectory, bundleId);
-        List<FailedResolutionHolder> failedResolutionHolders = new ArrayList<FailedResolutionHolder>();
-        if (resolverReport != null) {
-            for (QuasiResolutionFailure quasiResolutionFailure : resolverReport) {
-                failedResolutionHolders.add(new StandardFailedResolutionHolder(quasiResolutionFailure, this.moduleContextAccessor, this.stateService));
-            }
-        }
-        return failedResolutionHolders;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public List<BundleHolder> search(String source, String term) {
-        File dumpDirectory = null;
-        if (source != null && !LIVE.equals(source)) {
-            dumpDirectory = this.getDumpDirectory(source);
-        }
-        List<QuasiBundle> matchingBundles = this.stateService.search(dumpDirectory, term);
-        List<BundleHolder> heldMatchingBundles = new ArrayList<BundleHolder>();
-        for (QuasiBundle quasiBundle : matchingBundles) {
-            if (quasiBundle != null) {
-                heldMatchingBundles.add(new StandardBundleHolder(quasiBundle, this.moduleContextAccessor, this.stateService));
-            }
-        }
-        return heldMatchingBundles;
-    }
-
-    private File getDumpDirectory(String source) {
-        File dumpDirectory = null;
-        try {
-            dumpDirectory = this.dumpLocator.getDumpDir(source);
-        } catch (Exception e) {
-            LOGGER.warn(String.format("Unable to obtain the dump directory '%s'", source), e);
-        }
-        return dumpDirectory;
-    }
-
-    private QuasiFramework getQuasiFramework(String source) {
-        File dumpDirectory = getDumpDirectory(source);
-        if (dumpDirectory != null) {
-            try {
-                return this.quasiFrameworkFactory.create(dumpDirectory);
-            } catch (Exception e) {
-                throw new RuntimeException("Failed to create quasi-framework", e);
-            }
-        } else {
-            return this.quasiFrameworkFactory.create();
-        }
-    }
-
-    private ImportedPackageHolder processImporters(QuasiBundle qBundle, String packageName) {
-        for (QuasiImportPackage qImportPackage : qBundle.getImportPackages()) {
-            if (qImportPackage.getPackageName().equals(packageName)) {
-                return new StandardImportedPackageHolder(qImportPackage, this.moduleContextAccessor, this.stateService);
-            }
-        }
-        return null;
-    }
-
-    private ExportedPackageHolder processExporters(QuasiBundle qBundle, String packageName) {
-        for (QuasiExportPackage qExportPackage : qBundle.getExportPackages()) {
-            if (qExportPackage.getPackageName().equals(packageName)) {
-                return new StandardExportedPackageHolder(qExportPackage, this.moduleContextAccessor, this.stateService);
-            }
-        }
-        return null;
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/resources/META-INF/spring/module-context.xml b/org.eclipse.virgo.apps.admin.core/src/main/resources/META-INF/spring/module-context.xml
deleted file mode 100644
index 7607dfb..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/resources/META-INF/spring/module-context.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
-
-<!-- ARTEFACT MANAGER -->
-
-	<bean id="artefactManagerContent" class="org.eclipse.virgo.apps.admin.core.artifact.StandardArtifactService">
-		<constructor-arg ref="applicationDeployer"/>		
-		<constructor-arg ref="workArea"/>
-	</bean>
-
-<!-- DUMP INSPECTOR -->
-
-	<bean id="dumpPathLocator" class="org.eclipse.virgo.apps.admin.core.dump.StandardDumpPathLocator" />
-
-    <bean id="dumpInspectorService" class="org.eclipse.virgo.apps.admin.core.dump.StandardDumpInspectorService">
-		<constructor-arg ref="dumpPathLocator"/>
-    </bean>
-
-<!-- STATE INSPECTOR -->
-
-	<bean id="dumpLocator" class="org.eclipse.virgo.apps.admin.core.state.StandardDumpLocator">
-		<constructor-arg ref="dumpPathLocator"/>
-	</bean>
-	
-	<bean id="stateHolder" class="org.eclipse.virgo.apps.admin.core.state.StandardStateHolder">
-		<constructor-arg ref="stateService" />
-		<constructor-arg ref="dumpLocator"/>
-		<constructor-arg ref="moduleContextAccessor"/>
-		<constructor-arg ref="quasiFrameworkFactory" />
-	</bean>
-
-</beans>
diff --git a/org.eclipse.virgo.apps.admin.core/src/main/resources/META-INF/spring/osgi-context.xml b/org.eclipse.virgo.apps.admin.core/src/main/resources/META-INF/spring/osgi-context.xml
deleted file mode 100644
index ec795f4..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/main/resources/META-INF/spring/osgi-context.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xmlns:osgi="http://www.springframework.org/schema/osgi"
-	xsi:schemaLocation="
-		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-		http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd">
-
-<!-- ARTEFACT MANAGER -->
-	<osgi:reference id="applicationDeployer" interface="org.eclipse.virgo.kernel.deployer.core.ApplicationDeployer" />
-	
-	<osgi:reference id="workArea" interface="org.eclipse.virgo.kernel.services.work.WorkArea" />
-
-    <osgi:service ref="artefactManagerContent" interface="org.eclipse.virgo.apps.admin.core.ArtifactService"/>
-    
-    <osgi:reference id="moduleContextAccessor" interface="org.eclipse.virgo.kernel.module.ModuleContextAccessor"/>
-
-<!-- DUMP INSPECTOR -->
-
-    <osgi:service ref="dumpInspectorService" interface="org.eclipse.virgo.apps.admin.core.DumpInspectorService"/>
-
-<!-- STATE INSPECTOR -->
-
-	<osgi:reference id="quasiFrameworkFactory" interface="org.eclipse.virgo.kernel.osgi.quasi.QuasiFrameworkFactory" />
-	
-	<osgi:reference id="stateService" interface="org.eclipse.virgo.kernel.shell.state.StateService" />
-
-    <osgi:service ref="stateHolder" interface="org.eclipse.virgo.apps.admin.core.StateHolder"/>
-
-</beans>
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/artifact/StandardArtifactServiceTests.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/artifact/StandardArtifactServiceTests.java
deleted file mode 100644
index 387494e..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/artifact/StandardArtifactServiceTests.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.artifact;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-
-import org.easymock.EasyMock;
-import org.junit.Test;
-
-import org.eclipse.virgo.apps.admin.core.artifact.StandardArtifactService;
-import org.eclipse.virgo.apps.admin.core.stubs.StubWorkArea;
-import org.eclipse.virgo.kernel.deployer.core.ApplicationDeployer;
-import org.eclipse.virgo.kernel.deployer.core.DeploymentException;
-
-/**
- */
-public class StandardArtifactServiceTests {
-        
-    private final ApplicationDeployer deployer = EasyMock.createNiceMock(ApplicationDeployer.class);
-    
-    private final StandardArtifactService standardArtifactService = new StandardArtifactService(this.deployer, new StubWorkArea());
-
-    @Test
-    public void testDeploy() {
-        String deploy = this.standardArtifactService.deploy(new File("IExist"));
-        assertEquals("Artifact deployed", deploy);
-    }
-
-    @Test
-    public void testDeployError() throws DeploymentException {
-        File stagedFile = new File("IDontExist");
-        
-        EasyMock.expect(this.deployer.deploy(stagedFile.toURI())).andThrow(new DeploymentException("it went wrong"));
-        EasyMock.replay(this.deployer);
-        
-		String deploy = this.standardArtifactService.deploy(stagedFile);
-        assertEquals("Deployment Error 'it went wrong'", deploy);
-    }
-    
-    @Test
-    public void testGetStagingDirectory() {
-        assertTrue(this.standardArtifactService.getStagingDirectory().getPath().contains("target"));
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/dump/StandardDumpManagerServiceTests.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/dump/StandardDumpManagerServiceTests.java
deleted file mode 100644
index c3c35ae..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/dump/StandardDumpManagerServiceTests.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.dump;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import java.io.File;
-import java.util.List;
-
-import org.eclipse.virgo.apps.admin.core.dump.StandardDumpInspectorService;
-import org.eclipse.virgo.apps.admin.core.stubs.StubDumpPathLocator;
-import org.junit.Before;
-import org.junit.Test;
-
-
-/**
- */
-public final class StandardDumpManagerServiceTests {
-
-	private StandardDumpInspectorService dumpInspectorService;
-	
-	private final String DUMP_FOLDER_CONTENT = "testDumpWithContent"; 
-	
-	private final String DUMP_FOLDER_NO_CONTENT = "testDumpWithNoContent"; 
-
-    private final String DUMP_FOLDER_NOT_EXIST = "notHere"; 
-	
-	private final String DUMP_ITEM_ONE = "dumpItem1.txt"; 
-
-    private final String DUMP_ITEM_TWO = "dumpItem2.foo"; 
-    
-    private final String DUMP_ITEM_FAKE = "Not_Here";
-	
-	private final static String LINE_SEPARATOR = System.getProperty("line.separator");
-    
-	@Before
-	public void setup() {
-		this.dumpInspectorService = new StandardDumpInspectorService(new StubDumpPathLocator());
-	}
-	
-	@Test
-	public void testFindAvaliableDumps(){
-		List<File> result = this.dumpInspectorService.findAvaliableDumps();
-		assertNotNull(result);
-		assertEquals(2, result.size());
-	}
-    
-    @Test
-    public void testGetDumpEntriesNoFolder() {
-        List<String> result = this.dumpInspectorService.getDumpEntries(DUMP_FOLDER_NOT_EXIST);
-        assertNotNull(result);
-        assertEquals(1, result.size());
-    }
-    
-    @Test
-    public void testGetDumpEntriesNotExists() {
-        List<String> result = this.dumpInspectorService.getDumpEntries(DUMP_FOLDER_NO_CONTENT);
-        assertNotNull(result);
-        assertEquals(1, result.size());
-    }
-
-    @Test
-    public void testGetDumpEntriesExists() {
-        List<String> result = this.dumpInspectorService.getDumpEntries(DUMP_FOLDER_CONTENT);
-        assertNotNull(result);
-        assertEquals(3, result.size());
-    }
-    
-    @Test
-    public void testGetDumpEntriesWithNullFolderName() {
-        List<String> result = this.dumpInspectorService.getDumpEntries(null);
-        assertNotNull(result);
-        assertEquals(0, result.size());
-    }
-
-    @Test
-    public void testGetEntryNoFolder() {
-        String result = this.dumpInspectorService.getDumpEntry(DUMP_FOLDER_NOT_EXIST, DUMP_ITEM_TWO);
-        assertEquals("", result); 
-    }
-    
-    @Test
-    public void testGetEntryNotExists() {
-        String result = this.dumpInspectorService.getDumpEntry(DUMP_FOLDER_NO_CONTENT, DUMP_ITEM_TWO);
-        assertEquals("", result); 
-    }
-
-    @Test
-    public void testGetEntryNotExists2() {
-        String result = this.dumpInspectorService.getDumpEntry(DUMP_FOLDER_CONTENT, DUMP_ITEM_FAKE);
-        assertEquals("", result); 
-    }
-
-    @Test
-    public void testGetEntryExists() {
-        String result = this.dumpInspectorService.getDumpEntry(DUMP_FOLDER_CONTENT, DUMP_ITEM_ONE);
-        assertEquals("Line1" + LINE_SEPARATOR + "Line2" + LINE_SEPARATOR + "Line3" + LINE_SEPARATOR, result); 
-    }
-
-    @Test
-    public void testGetEntryNullDump() {
-        String result = this.dumpInspectorService.getDumpEntry(null, DUMP_ITEM_ONE);
-        assertEquals("", result); 
-    }
-
-    @Test
-    public void testGetEntryNullItem() {
-        String result = this.dumpInspectorService.getDumpEntry(DUMP_FOLDER_CONTENT, null);
-        assertEquals("", result); 
-    }
-	
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/dump/StandardDumpPathLocatorTests.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/dump/StandardDumpPathLocatorTests.java
deleted file mode 100644
index 5ad71cc..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/dump/StandardDumpPathLocatorTests.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.dump;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
-import java.io.File;
-import java.lang.management.ManagementFactory;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.management.InstanceNotFoundException;
-import javax.management.MBeanRegistrationException;
-import javax.management.MBeanServer;
-import javax.management.MXBean;
-import javax.management.MalformedObjectNameException;
-import javax.management.ObjectName;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.osgi.framework.InvalidSyntaxException;
-
-/**
- */
-public class StandardDumpPathLocatorTests {
-
-    private final static String FILE_SEPARATOR = System.getProperty("file.separator");
-    
-    private static final String CONFIG_PROPERTY = "dump.root.directory";
-
-    private static final String MEDIC_MBEAN_QUERY = "org.eclipse.virgo.kernel:type=Configuration,name=org.eclipse.virgo.medic";
-
-    private static final String TEST_DUMPS_FOLDER = "serviceability" + FILE_SEPARATOR + "dumps";
-    
-    private static final String TEST_DUMP_CONTENT = "testDumpWithContent";
-    
-    private static final String TEST_DUMP_NO_CONTENT = "testDumpWithNoContent";
-    
-    private static final String TEST_DUMP_CONTENT_ITEM = "dumpItem2.foo";
-    
-    private static final String TEST_DUMP_CONTENT_STATE = "osgi.zip";
-    
-    private StandardDumpPathLocator standardDumpPathLocator;
-    
-    @Before
-    public void setUp() throws Exception {
-        MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
-        if(!mBeanServer.isRegistered(new ObjectName(MEDIC_MBEAN_QUERY))){
-        	mBeanServer.registerMBean(new MedicMXBean(), new ObjectName(MEDIC_MBEAN_QUERY));
-        }
-		this.standardDumpPathLocator = new StandardDumpPathLocator();
-    }
-
-    @Test
-    public void testGetDumpDirectory() {
-        File dumpDirectory = standardDumpPathLocator.getDumpDirectory();
-        assertNotNull(dumpDirectory);
-        assertEquals(TEST_DUMPS_FOLDER, dumpDirectory.getPath());
-    }
-
-    @Test
-    public void testGetDumpDirectoryNoConfig() throws InvalidSyntaxException, MBeanRegistrationException, InstanceNotFoundException, MalformedObjectNameException, NullPointerException {
-        MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
-        mBeanServer.unregisterMBean(new ObjectName(MEDIC_MBEAN_QUERY));
-        standardDumpPathLocator = new StandardDumpPathLocator();
-        File dumpDirectory = standardDumpPathLocator.getDumpDirectory();
-        assertNull(dumpDirectory);
-    }
-
-    @Test
-    public void testGetDumpFolder() {
-        File dumpFolder = standardDumpPathLocator.getDumpFolder(TEST_DUMP_CONTENT);
-        assertNotNull(dumpFolder);
-        assertEquals(TEST_DUMPS_FOLDER + FILE_SEPARATOR + TEST_DUMP_CONTENT, dumpFolder.getPath());
-    }
-
-    @Test
-    public void testGetDumpFolderNotExist() {
-        File dumpFolder = standardDumpPathLocator.getDumpFolder("Im not a folder");
-        assertNull(dumpFolder);
-    }
-
-    @Test
-    public void testGetDumpFolderNull() {
-        File dumpFolder = standardDumpPathLocator.getDumpFolder(null);
-        assertNull(dumpFolder);
-    }
-
-    @Test
-    public void testGetDumpEntryFileContent() {
-        File dumpEntryFile = standardDumpPathLocator.getDumpEntryFile(TEST_DUMP_CONTENT, TEST_DUMP_CONTENT_ITEM);
-        assertNotNull(dumpEntryFile);
-    }
-
-    @Test
-    public void testGetDumpEntryFileNoContent() {
-        File dumpEntryFile = standardDumpPathLocator.getDumpEntryFile(TEST_DUMP_NO_CONTENT, TEST_DUMP_CONTENT_STATE);
-        assertNull(dumpEntryFile);
-    }
-
-    @Test
-    public void testGetDumpEntryFileNullFolder() {
-        File dumpEntryFile = standardDumpPathLocator.getDumpEntryFile(null, TEST_DUMP_CONTENT);
-        assertNull(dumpEntryFile);
-    }
-
-    @Test
-    public void testGetDumpEntryFile() {
-        File dumpEntryFile = standardDumpPathLocator.getDumpEntryFile(TEST_DUMPS_FOLDER, null);
-        assertNull(dumpEntryFile);
-    }
-
-    public static class MedicMXBean implements MedicMXBeanAPI {
-    	public Map<String, String> getProperties(){
-    		HashMap<String, String> hashMap = new HashMap<String, String>();
-    		hashMap.put(CONFIG_PROPERTY, TEST_DUMPS_FOLDER);
-			return hashMap;
-    	}
-    }
-
-    @MXBean
-    public static interface MedicMXBeanAPI {
-    	public Map<String, String> getProperties();
-    }
-    
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/state/ObjectFormatterTests.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/state/ObjectFormatterTests.java
deleted file mode 100644
index db15840..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/state/ObjectFormatterTests.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.state;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.virgo.apps.admin.core.state.ObjectFormatter;
-import org.junit.Test;
-
-
-/**
- */
-public class ObjectFormatterTests {
-
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.ObjectFormatter#formatObject(java.lang.Object)}.
-     */
-    @Test
-    public void testFormatObject() {
-        Object[] fooArray = new Object[3];
-        fooArray[0] = "a";
-        fooArray[1] = "b";
-        fooArray[2] = "c";
-        String formatObject = ObjectFormatter.formatObject(fooArray);
-        assertTrue(formatObject.contains("a"));
-        assertTrue(formatObject.contains("b"));
-        assertTrue(formatObject.contains("c"));
-        assertTrue(formatObject.contains(", "));
-    }
-
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.ObjectFormatter#formatMapValues(java.util.Map)}.
-     */
-    @Test
-    public void testFormatMapValues() {
-        Map<String, Object> properties= new HashMap<String, Object>();
-        
-        properties.put("a", 56);
-        
-        Object[] fooArray = new Object[3];
-        fooArray[0] = "a";
-        fooArray[1] = "b";
-        fooArray[2] = "c";
-        properties.put("b", fooArray);
-        
-        Map<String, String> formatMapValues = ObjectFormatter.formatMapValues(properties);
-        
-        assertEquals(2, formatMapValues.size());
-        assertEquals("56", formatMapValues.get("a"));
-        
-        assertTrue(formatMapValues.get("b").contains("a"));
-        assertTrue(formatMapValues.get("b").contains("b"));
-        assertTrue(formatMapValues.get("b").contains("c"));
-        assertTrue(formatMapValues.get("b").contains(", "));
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/state/StandardFailedResolutionHolderTests.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/state/StandardFailedResolutionHolderTests.java
deleted file mode 100644
index 1fba864..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/state/StandardFailedResolutionHolderTests.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.state;
-
-import static org.junit.Assert.assertEquals;
-
-import org.eclipse.virgo.apps.admin.core.BundleHolder;
-import org.eclipse.virgo.apps.admin.core.state.StandardFailedResolutionHolder;
-import org.eclipse.virgo.apps.admin.core.stubs.StubModuleContextAccessor;
-import org.eclipse.virgo.apps.admin.core.stubs.StubQuasiResolutionFaliure;
-import org.eclipse.virgo.apps.admin.core.stubs.StubStateService;
-import org.junit.Before;
-import org.junit.Test;
-
-
-/**
- */
-public class StandardFailedResolutionHolderTests {
-
-    private StandardFailedResolutionHolder standardFailedResolutionHolder;
-   
-    @Before
-    public void setUp(){
-        this.standardFailedResolutionHolder = new StandardFailedResolutionHolder(new StubQuasiResolutionFaliure("test", 5), new StubModuleContextAccessor(), new StubStateService());
-    }
-    
-    @Test
-    public void testGetDescription() {
-        String result = this.standardFailedResolutionHolder.getDescription();
-        assertEquals("test", result);
-    }
-
-    @Test
-    public void testGetUnresolvedBundle() {
-        BundleHolder unresolvedBundle = this.standardFailedResolutionHolder.getUnresolvedBundle();
-        assertEquals(new Long(5), unresolvedBundle.getBundleId());
-    }
-    
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/state/StandardPackagesCollectionTests.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/state/StandardPackagesCollectionTests.java
deleted file mode 100644
index 61f063e..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/state/StandardPackagesCollectionTests.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.state;
-
-import static org.junit.Assert.*;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.virgo.apps.admin.core.ExportedPackageHolder;
-import org.eclipse.virgo.apps.admin.core.ImportedPackageHolder;
-import org.eclipse.virgo.apps.admin.core.state.StandardPackagesCollection;
-import org.eclipse.virgo.apps.admin.core.stubs.StubExportedPackageHolder;
-import org.eclipse.virgo.apps.admin.core.stubs.StubImportedPackageHolder;
-import org.junit.Before;
-import org.junit.Test;
-
-
-
-/**
- */
-public class StandardPackagesCollectionTests {
-
-    private static final String TEST_PACKAGE = "testPackage";
-    private StandardPackagesCollection standardPackagesCollection;
-    
-    @Before
-    public void setUp() {
-        List<ImportedPackageHolder> imported = new ArrayList<ImportedPackageHolder>();
-        imported.add(new StubImportedPackageHolder(TEST_PACKAGE));
-        List<ExportedPackageHolder> exported = new ArrayList<ExportedPackageHolder>();
-        exported.add(new StubExportedPackageHolder(TEST_PACKAGE));
-        this.standardPackagesCollection = new StandardPackagesCollection(TEST_PACKAGE, imported, exported);
-    }
-
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.StandardPackagesCollection#getPackageName()}.
-     */
-    @Test
-    public void testGetPackageName() {
-        assertEquals(TEST_PACKAGE, this.standardPackagesCollection.getPackageName());
-    }
-    
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.StandardPackagesCollection#getPackageName()}.
-     */
-    @Test(expected=IllegalArgumentException.class)
-    public void testGetPackageNameNullName() {
-        this.standardPackagesCollection = new StandardPackagesCollection(null, new ArrayList<ImportedPackageHolder>(), new ArrayList<ExportedPackageHolder>());
-    }
-
-    @Test
-    public void testNullLists() {
-        this.standardPackagesCollection = new StandardPackagesCollection(TEST_PACKAGE, null, null);
-        List<ImportedPackageHolder> imported = this.standardPackagesCollection.getImported();
-        assertNotNull(imported);
-        assertEquals(0, imported.size());
-        List<ExportedPackageHolder> exported = this.standardPackagesCollection.getExported();
-        assertNotNull(exported);
-        assertEquals(0, exported.size());
-    }
-
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.StandardPackagesCollection#getImported()}.
-     */
-    @Test
-    public void testGetImported() {
-        List<ImportedPackageHolder> imported = this.standardPackagesCollection.getImported();
-        assertNotNull(imported);
-        assertEquals(1, imported.size());
-        assertEquals(TEST_PACKAGE, imported.get(0).getPackageName());
-    }
-    
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.StandardPackagesCollection#getExported()}.
-     */
-    @Test
-    public void testGetExported() {
-        List<ExportedPackageHolder> exported = this.standardPackagesCollection.getExported();
-        assertNotNull(exported);
-        assertEquals(1, exported.size());
-        assertEquals(TEST_PACKAGE, exported.get(0).getPackageName());
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/state/StandardRequiredBundleHolderTests.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/state/StandardRequiredBundleHolderTests.java
deleted file mode 100644
index 9a42ac2..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/state/StandardRequiredBundleHolderTests.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.state;
-
-import static org.junit.Assert.*;
-
-import org.eclipse.virgo.apps.admin.core.BundleHolder;
-import org.eclipse.virgo.apps.admin.core.state.StandardRequiredBundleHolder;
-import org.eclipse.virgo.apps.admin.core.stubs.StubModuleContextAccessor;
-import org.eclipse.virgo.apps.admin.core.stubs.StubQuasiRequiredBundle;
-import org.eclipse.virgo.apps.admin.core.stubs.StubStateService;
-import org.junit.Before;
-import org.junit.Test;
-
-
-/**
- */
-public class StandardRequiredBundleHolderTests {
-
-    StandardRequiredBundleHolder standardRequiredBundleHolder;
-    
-    @Before
-    public void setup(){
-        this.standardRequiredBundleHolder = new StandardRequiredBundleHolder(new StubQuasiRequiredBundle("testBundle", 5, 6), new StubModuleContextAccessor(), new StubStateService());
-    }
-    
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.StandardRequiredBundleHolder#getProvider()}.
-     */
-    @Test
-    public void testGetProvider() {
-        BundleHolder provider = this.standardRequiredBundleHolder.getProvider();
-        assertEquals(new Long(5), provider.getBundleId());
-    }
-
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.StandardRequiredBundleHolder#getRequiredBundleName()}.
-     */
-    @Test
-    public void testGetRequiredBundleName() {
-        String requiredBundleName = this.standardRequiredBundleHolder.getRequiredBundleName();
-        assertEquals("testBundle", requiredBundleName);
-    }
-
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.StandardRequiredBundleHolder#getRequiringBundle()}.
-     */
-    @Test
-    public void testGetRequiringBundle() {
-        BundleHolder requiringBundle = this.standardRequiredBundleHolder.getRequiringBundle();
-        assertEquals(new Long(6), requiringBundle.getBundleId());
-    }
-
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.StandardRequiredBundleHolder#getVersionConstraint()}.
-     */
-    @Test
-    public void testGetVersionConstraint() {
-        String versionConstraint = this.standardRequiredBundleHolder.getVersionConstraint();
-        assertEquals("[0.0.0, &infin;)", versionConstraint);
-    }
-
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.StandardRequiredBundleHolder#isResolved()}.
-     */
-    @Test
-    public void testIsResolved() {
-        boolean resolved = this.standardRequiredBundleHolder.isResolved();
-        assertFalse(resolved);
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/state/StandardStateHolderTests.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/state/StandardStateHolderTests.java
deleted file mode 100644
index fb0a755..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/state/StandardStateHolderTests.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.state;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
-import java.util.List;
-
-import org.eclipse.virgo.apps.admin.core.BundleHolder;
-import org.eclipse.virgo.apps.admin.core.FailedResolutionHolder;
-import org.eclipse.virgo.apps.admin.core.PackagesCollection;
-import org.eclipse.virgo.apps.admin.core.ServiceHolder;
-import org.eclipse.virgo.apps.admin.core.state.StandardStateHolder;
-import org.eclipse.virgo.apps.admin.core.stubs.StubDumpExtractor;
-import org.eclipse.virgo.apps.admin.core.stubs.StubModuleContextAccessor;
-import org.eclipse.virgo.apps.admin.core.stubs.StubQuasiFrameworkFactory;
-import org.eclipse.virgo.apps.admin.core.stubs.StubQuasiLiveBundle;
-import org.eclipse.virgo.apps.admin.core.stubs.StubStateService;
-import org.junit.Before;
-import org.junit.Test;
-
-
-/**
- */
-public class StandardStateHolderTests {
-
-    private static final String TEST_DUMP_NAME = "1234";
-    
-    private static final long NOT_EXISTING_ID = 5;
-    
-    private static final long EXISTING_ID = 4;
-    
-    private StandardStateHolder standardStateHolder;
-
-    private StubDumpExtractor stubDumpExtractor;
-
-    private StubStateService stubStateService;
-
-    @Before
-    public void setUp() {
-        this.stubStateService = new StubStateService();
-        this.stubDumpExtractor = new StubDumpExtractor();
-        this.standardStateHolder = new StandardStateHolder(this.stubStateService, this.stubDumpExtractor, new StubModuleContextAccessor(), new StubQuasiFrameworkFactory());
-    }
-    
-    //ALL BUNDLES
-
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.StandardStateHolder#getAllBundles(String)}.
-     */
-    @Test
-    public void testGetAllBundles() {
-        this.stubStateService.setNotNullExpectations();
-        List<BundleHolder> result = this.standardStateHolder.getAllBundles(TEST_DUMP_NAME);
-        assertNotNull(result);
-    }
-
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.StandardStateHolder#getAllBundles(String)}.
-     */
-    @Test
-    public void testGetAllBundlesNull() {
-        this.stubStateService.setNullExpectations();
-        List<BundleHolder> result = this.standardStateHolder.getAllBundles(null);
-        assertNotNull(result);
-    }
-
-    //BUNDLE
-    
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.StandardStateHolder#getBundle(java.lang.String, long)}.
-     */
-    @Test
-    public void testGetBundleExist() {
-        this.stubStateService.setNotNullExpectations();
-        BundleHolder result = this.standardStateHolder.getBundle(TEST_DUMP_NAME, EXISTING_ID);
-        assertNotNull(result);
-        assertEquals("fake.test.bundle", result.getSymbolicName());
-    }
-
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.StandardStateHolder#getBundle(java.lang.String, long)}.
-     */
-    @Test
-    public void testGetBundleNotExist() {
-        this.stubStateService.setNotNullExpectations();
-        BundleHolder result = this.standardStateHolder.getBundle(TEST_DUMP_NAME, NOT_EXISTING_ID);
-        assertNull(result);
-    }
-
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.StandardStateHolder#getBundle(java.lang.String, long)}.
-     */
-    @Test
-    public void testGetBundleNullDumpExists() {
-        this.stubStateService.setNullExpectations();
-        BundleHolder result = this.standardStateHolder.getBundle(null, EXISTING_ID);
-        assertNotNull(result);
-        assertEquals("fake.test.bundle", result.getSymbolicName());
-    }
-
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.StandardStateHolder#getBundle(java.lang.String, long)}.
-     */
-    @Test
-    public void testGetBundleNullDumpNotExists() {
-        this.stubStateService.setNullExpectations();
-        BundleHolder result = this.standardStateHolder.getBundle(null, NOT_EXISTING_ID);
-        assertNull(result);
-    }
-    
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.StandardStateHolder#getBundle(java.lang.String, long)}.
-     */
-    @Test
-    public void testGetBundleByNameExist() {
-        this.stubStateService.setNotNullExpectations();
-        BundleHolder result = this.standardStateHolder.getBundle(TEST_DUMP_NAME, StubQuasiLiveBundle.TEST_NAME, StubQuasiLiveBundle.TEST_VERSION.toString(), StubStateService.TEST_REGION_NAME);
-        assertNotNull(result);
-        assertEquals("fake.test.bundle", result.getSymbolicName());
-    }
-
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.StandardStateHolder#getBundle(java.lang.String, long)}.
-     */
-    @Test
-    public void testGetBundleByNameNotExist() {
-        this.stubStateService.setNotNullExpectations();
-        BundleHolder result = this.standardStateHolder.getBundle(TEST_DUMP_NAME, "nope", "nope", "nope");
-        assertNull(result);
-    }
-
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.StandardStateHolder#getBundle(java.lang.String, long)}.
-     */
-    @Test
-    public void testGetBundleByNameNullDumpExists() {
-        this.stubStateService.setNullExpectations();
-        BundleHolder result = this.standardStateHolder.getBundle(null, StubQuasiLiveBundle.TEST_NAME, StubQuasiLiveBundle.TEST_VERSION.toString(), StubStateService.TEST_REGION_NAME);
-        assertNotNull(result);
-        assertEquals(StubQuasiLiveBundle.TEST_NAME, result.getSymbolicName());
-    }
-
-    /**
-     * Test method for {@link org.eclipse.virgo.apps.admin.core.state.StandardStateHolder#getBundle(java.lang.String, long)}.
-     */
-    @Test
-    public void testGetBundleByNameNullDumpNotExists() {
-        this.stubStateService.setNullExpectations();
-        BundleHolder result = this.standardStateHolder.getBundle(null, "nope", "nope", StubStateService.TEST_REGION_NAME);
-        assertNull(result);
-    }
-
-    //SERVICES
-    
-    @Test
-    public void testGetAllServices(){
-        this.stubStateService.setNotNullExpectations();
-        List<ServiceHolder> allServices = this.standardStateHolder.getAllServices(TEST_DUMP_NAME);
-        assertNotNull(allServices);
-    }
-    
-    @Test
-    public void testGetAllServicesNull(){
-        this.stubStateService.setNullExpectations();
-        List<ServiceHolder> allServices = this.standardStateHolder.getAllServices(null);
-        assertNotNull(allServices);
-    }
-
-    @Test
-    public void testGetServiceExists(){
-        this.stubStateService.setNotNullExpectations();
-        ServiceHolder service = this.standardStateHolder.getService(TEST_DUMP_NAME, EXISTING_ID);
-        assertNotNull(service);
-    }
-    
-    @Test
-    public void testGetServiceNotExists(){
-        this.stubStateService.setNotNullExpectations();
-        ServiceHolder service = this.standardStateHolder.getService(TEST_DUMP_NAME, NOT_EXISTING_ID);
-        assertNull(service);
-    }
-
-    @Test
-    public void testGetServiceNullExists(){
-        this.stubStateService.setNullExpectations();
-        ServiceHolder service = this.standardStateHolder.getService(null, EXISTING_ID);
-        assertNotNull(service);
-    }
-    
-    @Test
-    public void testGetServiceNullNotExists(){
-        this.stubStateService.setNullExpectations();
-        ServiceHolder service = this.standardStateHolder.getService(null, NOT_EXISTING_ID);
-        assertNull(service);
-    }
-    
-    //PACKAGES
-    
-    @Test
-    public void testGetPackages(){
-        this.stubStateService.setNotNullExpectations();
-        PackagesCollection packages = this.standardStateHolder.getPackages(TEST_DUMP_NAME, StubStateService.TEST_PACKAGE_SEARCH);
-        assertNotNull(packages);
-        assertEquals(StubStateService.TEST_PACKAGE_SEARCH, packages.getPackageName());
-    }
-    
-    @Test
-    public void testGetPackagesNotExists(){
-        this.stubStateService.setNotNullExpectations();
-        PackagesCollection packages = this.standardStateHolder.getPackages(TEST_DUMP_NAME, "notExist");
-        assertNotNull(packages);
-        assertEquals(0, packages.getExported().size());
-        assertEquals(0, packages.getImported().size());
-        assertEquals("notExist", packages.getPackageName());
-    }
-    
-    @Test
-    public void testGetPackagesNull(){
-        this.stubStateService.setNullExpectations();
-        PackagesCollection packages = this.standardStateHolder.getPackages(null, StubStateService.TEST_PACKAGE_SEARCH);
-        assertNotNull(packages);
-        assertEquals(StubStateService.TEST_PACKAGE_SEARCH, packages.getPackageName());
-    }
-    
-    @Test
-    public void testGetPackagesNullNotExists(){
-        this.stubStateService.setNullExpectations();
-        PackagesCollection packages = this.standardStateHolder.getPackages(null, "notExist");
-        assertNotNull(packages);
-        assertEquals(0, packages.getExported().size());
-        assertEquals(0, packages.getImported().size());
-        assertEquals("notExist", packages.getPackageName());
-    }
-    
-    //RESOLVER
-    
-    @Test
-    public void testGetResolverReport(){
-        this.stubStateService.setNotNullExpectations();
-        List<FailedResolutionHolder> resolverReport = this.standardStateHolder.getResolverReport(TEST_DUMP_NAME, EXISTING_ID);
-        assertNotNull(resolverReport);
-    }
-    
-    @Test
-    public void testGetResolverReportNotExists(){
-        this.stubStateService.setNotNullExpectations();
-        List<FailedResolutionHolder> resolverReport = this.standardStateHolder.getResolverReport(TEST_DUMP_NAME, NOT_EXISTING_ID);
-        assertNotNull(resolverReport);
-    }
-    
-    @Test
-    public void testGetResolverReportNull(){
-        this.stubStateService.setNullExpectations();
-        List<FailedResolutionHolder> resolverReport = this.standardStateHolder.getResolverReport(null, EXISTING_ID);
-        assertNotNull(resolverReport);
-    }
-    
-    @Test
-    public void testGetResolverReportNullNotExists(){
-        this.stubStateService.setNullExpectations();
-        List<FailedResolutionHolder> resolverReport = this.standardStateHolder.getResolverReport(null, NOT_EXISTING_ID);
-        assertNotNull(resolverReport);
-    }
-    
-    //SEARCH
-    
-    @Test
-    public void testSearch(){
-        this.stubStateService.setNotNullExpectations();
-        assertNotNull(this.standardStateHolder.search(TEST_DUMP_NAME, "term"));
-    }
-    
-    @Test
-    public void testSearchNullTerm(){
-        this.stubStateService.setNotNullExpectations();
-        assertNotNull(this.standardStateHolder.search(TEST_DUMP_NAME, null));
-    }
-    
-    @Test
-    public void testSearchNull(){
-        this.stubStateService.setNullExpectations();
-        assertNotNull(this.standardStateHolder.search(null, "term"));
-    }
-    
-    @Test
-    public void testSearchNullNullTerm(){
-        this.stubStateService.setNullExpectations();
-        assertNotNull(this.standardStateHolder.search(null, null));
-    }
-    
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/state/StateDumpExtractorTests.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/state/StateDumpExtractorTests.java
deleted file mode 100644
index ccd06ed..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/state/StateDumpExtractorTests.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.state;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.zip.ZipException;
-
-import org.eclipse.virgo.apps.admin.core.stubs.StubDumpPathLocator;
-import org.junit.Before;
-import org.junit.Test;
-
-public class StateDumpExtractorTests {
-    
-    private final String DUMP_FOLDER_CONTENT = "testDumpWithContent"; 
-    
-    private final String DUMP_FOLDER_NOT_EXIST = "notHere"; 
-    
-    private StandardDumpLocator stateDumpExtractor;
-    
-    @Before
-    public void setUp() {            
-        StubDumpPathLocator stubDumpPathLocator = new StubDumpPathLocator();
-        this.stateDumpExtractor = new StandardDumpLocator(stubDumpPathLocator);
-    }
-    
-    @Test
-    public void getStateDump() throws ZipException, IOException {
-        File result = this.stateDumpExtractor.getDumpDir(DUMP_FOLDER_CONTENT);
-        assertNotNull(result);
-        assertEquals(DUMP_FOLDER_CONTENT, result.getName());
-    }
-    
-    @Test(expected=IOException.class)
-    public void getStateDumpNotExists() throws ZipException, IOException {
-        this.stateDumpExtractor.getDumpDir(DUMP_FOLDER_NOT_EXIST);
-    }
-    
-    @Test(expected=IllegalArgumentException.class)
-    public void getStateDumpNull() throws ZipException, IOException {
-        this.stateDumpExtractor.getDumpDir(null);
-    }
-    
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubDumpExtractor.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubDumpExtractor.java
deleted file mode 100644
index f5907f8..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubDumpExtractor.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.stubs;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.zip.ZipException;
-
-import org.eclipse.virgo.apps.admin.core.DumpLocator;
-
-
-/**
- */
-final public class StubDumpExtractor implements DumpLocator {
-
-    public List<File> getListOfPossibleDumps() {
-        return new ArrayList<File>();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public File getDumpDir(String dump) throws ZipException, IOException {
-        return new File(dump);
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubDumpManagerService.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubDumpManagerService.java
deleted file mode 100644
index 200a8ad..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubDumpManagerService.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.stubs;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.virgo.apps.admin.core.DumpInspectorService;
-
-
-/**
- */
-public class StubDumpManagerService implements DumpInspectorService{
-
-    /**
-     * {@inheritDoc}
-     */
-    public List<File> findAvaliableDumps() {
-        List<File> dumps = new ArrayList<File>();
-        dumps.add(new File("foo"));
-        return dumps;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public List<String> getDumpEntries(String dumpID) {
-        List<String> entries = new ArrayList<String>();
-        entries.add("bar");
-        return entries;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getDumpEntry(String dumpID, String entryName) {
-        return "baz";
-    }
-    
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubDumpPathLocator.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubDumpPathLocator.java
deleted file mode 100644
index a42727c..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubDumpPathLocator.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.stubs;
-
-import java.io.File;
-
-import org.eclipse.virgo.apps.admin.core.dump.DumpPathLocator;
-
-
-
-/**
- */
-final public class StubDumpPathLocator implements DumpPathLocator{
-
-    private final static String FILE_SEPARATOR = System.getProperty("file.separator");
-    
-    /**
-     * {@inheritDoc}
-     */
-    public File getDumpDirectory(){
-        String path = this.getDumpConfigValue();
-        if(path != null){
-            File dumpDir = new File(path);
-            if(dumpDir.exists() && dumpDir.isDirectory()){
-                return dumpDir;
-            }
-        }
-        return null;
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public File getDumpFolder(String folderName){
-        String path = String.format("%s%s%s", this.getDumpConfigValue(), FILE_SEPARATOR, folderName);
-        File dumpDir = new File(path);
-        if(dumpDir.exists() && dumpDir.isDirectory()){
-            return dumpDir;
-        }else{
-            return null;
-        }
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public File getDumpEntryFile(String folderName, String fileName){
-        String path = String.format("%s%s%s%s%s", this.getDumpConfigValue(), FILE_SEPARATOR, folderName, FILE_SEPARATOR, fileName);
-        File dumpEntry = new File(path);
-        if(dumpEntry.exists() && dumpEntry.isFile()){
-            return dumpEntry;
-        }else{
-            return null;
-        }
-    }
-
-    private String getDumpConfigValue(){
-        return String.format("serviceability%sdumps", FILE_SEPARATOR);
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubExportedPackageHolder.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubExportedPackageHolder.java
deleted file mode 100644
index 96eaa9e..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubExportedPackageHolder.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.stubs;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.virgo.apps.admin.core.BundleHolder;
-import org.eclipse.virgo.apps.admin.core.ExportedPackageHolder;
-import org.eclipse.virgo.apps.admin.core.ImportedPackageHolder;
-
-
-/**
- */
-public final class StubExportedPackageHolder implements ExportedPackageHolder {
-
-    private final String packageName;
-
-    public StubExportedPackageHolder(String packageName) {
-        this.packageName = packageName;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String getPackageName() {
-        return this.packageName;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String getVersion() {
-        return null;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public BundleHolder getExportingBundle() {
-        return null;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public List<ImportedPackageHolder> getConsumers() {
-        return new ArrayList<ImportedPackageHolder>();
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public Map<String, String> getAttributes() {
-        return new HashMap<String, String>();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public Map<String, String> getDirectives() {
-        return new HashMap<String, String>();
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubImportedPackageHolder.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubImportedPackageHolder.java
deleted file mode 100644
index 2aa65e9..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubImportedPackageHolder.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.stubs;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.virgo.apps.admin.core.BundleHolder;
-import org.eclipse.virgo.apps.admin.core.ExportedPackageHolder;
-import org.eclipse.virgo.apps.admin.core.ImportedPackageHolder;
-
-
-
-/**
- */
-public final class StubImportedPackageHolder implements ImportedPackageHolder {
-    
-    private final String packageName;
-
-    public StubImportedPackageHolder(String packageName) {
-        this.packageName = packageName;
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public String getPackageName() {
-        return this.packageName;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String getVersionConstraint() {
-        return null;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public boolean isResolved() {
-        return false;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public ExportedPackageHolder getProvider() {
-        return null;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public BundleHolder getImportingBundle() {
-        return null;
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public Map<String, String> getAttributes() {
-        return new HashMap<String, String>();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public Map<String, String> getDirectives() {
-        return new HashMap<String, String>();
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubModuleContextAccessor.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubModuleContextAccessor.java
deleted file mode 100644
index a79c1b9..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubModuleContextAccessor.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.stubs;
-
-import org.osgi.framework.Bundle;
-
-import org.eclipse.virgo.kernel.module.Component;
-import org.eclipse.virgo.kernel.module.ModuleContext;
-import org.eclipse.virgo.kernel.module.ModuleContextAccessor;
-import org.eclipse.virgo.kernel.module.NoSuchComponentException;
-
-
-/**
- */
-public class StubModuleContextAccessor implements ModuleContextAccessor {
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public ModuleContext getModuleContext(Bundle arg0) {
-        return new ModuleContext() {
-            
-            public String getDisplayName() {
-                return "testDisplayName";
-            }
-            
-            public String[] getComponentNames() {
-                return new String[0];
-            }
-            
-            public Component getComponent(String arg0) throws NoSuchComponentException {
-                throw new NoSuchComponentException("fail");
-            }
-            
-            public Object getApplicationContext() {
-                return new Object();
-            }
-        };
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiFramework.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiFramework.java
deleted file mode 100644
index 67a9039..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiFramework.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.stubs;
-
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.osgi.framework.BundleException;
-import org.osgi.framework.Version;
-
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiBundle;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiFramework;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiResolutionFailure;
-import org.eclipse.virgo.util.osgi.manifest.BundleManifest;
-
-/**
- */
-final class StubQuasiFramework implements QuasiFramework {
-
-    public static final String TEST_PACKAGE_SEARCH = "com.foo.bar";
-
-    public static final String TEST_INSTALL_LOCATION = "src/test/resources";
-    
-    public static final long EXISTING_ID = 4;
-    
-    public static final String EXISTING_NAME = "bundleName";
-    
-    public static final Version EXISTING_VERSION = new Version("2.0");
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public void commit() throws BundleException {
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public List<QuasiResolutionFailure> diagnose(long bundleId) {
-        return null;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public QuasiBundle getBundle(long bundleId) {
-        if(bundleId == EXISTING_ID){
-            return new StubQuasiLiveBundle(EXISTING_ID, null);
-        }
-        return null;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public QuasiBundle getBundle(String name, Version version) {
-        if(EXISTING_NAME.equals(name) && EXISTING_VERSION.equals(version)) {
-            return new StubQuasiLiveBundle(EXISTING_ID, null);
-        }
-        return null;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public List<QuasiBundle> getBundles() {
-        ArrayList<QuasiBundle> arrayList = new ArrayList<QuasiBundle>();
-        arrayList.add(new StubQuasiLiveBundle(EXISTING_ID, null));
-        return arrayList;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public QuasiBundle install(URI location, BundleManifest bundleManifest) throws BundleException {
-        if(TEST_INSTALL_LOCATION.equals(location)) {
-            return new StubQuasiLiveBundle(EXISTING_ID, null);
-        }
-        return null;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public List<QuasiResolutionFailure> resolve() {
-        return new ArrayList<QuasiResolutionFailure>();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    @Override
-    public void destroy() {
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiFrameworkFactory.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiFrameworkFactory.java
deleted file mode 100644
index faf6929..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiFrameworkFactory.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.stubs;
-
-import java.io.File;
-
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiFramework;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiFrameworkFactory;
-
-
-/**
- */
-public final class StubQuasiFrameworkFactory implements QuasiFrameworkFactory {
-
-    /** 
-     * {@inheritDoc}
-     */
-    public QuasiFramework create() {
-        return new StubQuasiFramework();
-    }
-    
-    /**    
-     * {@inheritDoc}
-     */
-    public QuasiFramework create(File stateDump) {
-            return new StubQuasiFramework();
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiLiveBundle.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiLiveBundle.java
deleted file mode 100644
index c26ce12..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiLiveBundle.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.stubs;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.virgo.kernel.artifact.plan.PlanDescriptor.Provisioning;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiBundle;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiExportPackage;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiImportPackage;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiRequiredBundle;
-import org.eclipse.virgo.kernel.shell.state.QuasiLiveBundle;
-import org.eclipse.virgo.kernel.shell.state.QuasiLiveService;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.Version;
-
-public class StubQuasiLiveBundle implements QuasiLiveBundle {
-
-    public static final String TEST_NAME = "fake.test.bundle";
-    
-    public static final Version TEST_VERSION = new Version("1.2.3.test");
-    
-    private final Bundle bundle;
-    
-    private final long id;
-
-    private volatile Provisioning provisioning = Provisioning.AUTO;
-    
-    public StubQuasiLiveBundle(long id, Bundle bundle) {
-        this.bundle = bundle;
-        this.id = id;
-    }
-    
-    public Bundle getBundle() {
-        return this.bundle;
-    }
-
-    public long getBundleId() {
-        return this.id;
-    }
-
-    public List<QuasiBundle> getDependents() {
-        return new ArrayList<QuasiBundle>();
-    }
-
-    public List<QuasiExportPackage> getExportPackages() {
-        return new ArrayList<QuasiExportPackage>();
-    }
-
-    public List<QuasiBundle> getFragments() {
-        return new ArrayList<QuasiBundle>();
-    }
-
-    public List<QuasiBundle> getHosts() {
-        return new ArrayList<QuasiBundle>();
-    }
-
-    public List<QuasiImportPackage> getImportPackages() {
-        return new ArrayList<QuasiImportPackage>();
-    }
-
-    public List<QuasiRequiredBundle> getRequiredBundles() {
-        return new ArrayList<QuasiRequiredBundle>();
-    }
-
-    public String getSymbolicName() {
-        return TEST_NAME;
-    }
-
-    public Version getVersion() {
-        return TEST_VERSION;
-    }
-
-    public boolean isResolved() {
-        return false;
-    }
-
-    public void uninstall() {
-    }
-    
-    public List<QuasiLiveService> getExportedServices() {
-        return new ArrayList<QuasiLiveService>();
-    }
-
-    public List<QuasiLiveService> getImportedServices() {
-        return new ArrayList<QuasiLiveService>();
-    }
-
-    public String getState() {
-        return "Not A State";
-    }
-
-    public File getBundleFile() {
-        return null;
-    }
-    
-    @Override
-    public void setProvisioning(Provisioning provisioning) {
-        this.provisioning  = provisioning;
-    }
-
-    @Override
-    public Provisioning getProvisioning() {
-        return this.provisioning;
-    }
-    
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiLiveService.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiLiveService.java
deleted file mode 100644
index 6498b5c..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiLiveService.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.stubs;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.virgo.kernel.shell.state.QuasiLiveBundle;
-import org.eclipse.virgo.kernel.shell.state.QuasiLiveService;
-
-/**
- */
-final public class StubQuasiLiveService implements QuasiLiveService {
-
-    private long serviceId;
-    
-    private QuasiLiveBundle provider;
-
-    public StubQuasiLiveService(long serviceId, QuasiLiveBundle provider) {
-        this.serviceId = serviceId;
-        this.provider = provider;
-    }
-    
-    public List<QuasiLiveBundle> getConsumers() {
-        return new ArrayList<QuasiLiveBundle>();
-    }
-
-    public Map<String, String> getPropertyMap() {
-        return new HashMap<String, String>();
-    }
-
-    public QuasiLiveBundle getProvider() {
-        return provider;
-    }
-
-    public long getServiceId() {
-        return this.serviceId;
-    }
-
-    public int compareTo(QuasiLiveService o) {
-        return 0;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public Map<String, Object> getProperties() {
-        return new HashMap<String, Object>();
-    }
-    
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiPackages.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiPackages.java
deleted file mode 100644
index 53027d9..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiPackages.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.stubs;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiExportPackage;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiImportPackage;
-import org.eclipse.virgo.kernel.shell.state.QuasiPackage;
-
-
-/**
- */
-public class StubQuasiPackages implements QuasiPackage {
-
-    private String packageName;
-
-    public StubQuasiPackages(String packageName) {
-        this.packageName = packageName;
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public List<QuasiExportPackage> getExporters() {
-        return new ArrayList<QuasiExportPackage>();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public List<QuasiImportPackage> getImporters() {
-        return new ArrayList<QuasiImportPackage>();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String getPackageName() {
-        return this.packageName;
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiRequiredBundle.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiRequiredBundle.java
deleted file mode 100644
index 0e29e4d..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiRequiredBundle.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.stubs;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiBundle;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiRequiredBundle;
-import org.eclipse.virgo.util.osgi.manifest.VersionRange;
-
-/**
- */
-public class StubQuasiRequiredBundle implements QuasiRequiredBundle {
-
-    private final long requirer;
-    
-    private final long provider;
-
-    private final String bundleName;
-
-    public StubQuasiRequiredBundle(String bundleName, long provider, long requirer) {
-        this.bundleName = bundleName;
-        this.provider = provider;
-        this.requirer = requirer;
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public QuasiBundle getProvider() {
-        return new StubQuasiLiveBundle(this.provider, null);
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String getRequiredBundleName() {
-        return this.bundleName;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public QuasiBundle getRequiringBundle() {
-        return new StubQuasiLiveBundle(this.requirer, null);
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public VersionRange getVersionConstraint() {
-        return VersionRange.NATURAL_NUMBER_RANGE;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public boolean isResolved() {
-        return false;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public Map<String, Object> getAttributes() {
-        return new HashMap<String, Object>();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public Map<String, Object> getDirectives() {
-        return new HashMap<String, Object>();
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiResolutionFaliure.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiResolutionFaliure.java
deleted file mode 100644
index 8f3bb51..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubQuasiResolutionFaliure.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.stubs;
-
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiBundle;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiResolutionFailure;
-
-
-/**
- */
-public class StubQuasiResolutionFaliure implements QuasiResolutionFailure {
-
-    private final String description;
-    private final long id;
-
-    public StubQuasiResolutionFaliure(String description, long id) {
-        this.description = description;
-        this.id = id;
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public String getDescription() {
-        return this.description;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public QuasiBundle getUnresolvedQuasiBundle() {
-        return new StubQuasiLiveBundle(this.id, null);
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubStateService.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubStateService.java
deleted file mode 100644
index 93dcadf..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubStateService.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.stubs;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiBundle;
-import org.eclipse.virgo.kernel.osgi.quasi.QuasiResolutionFailure;
-import org.eclipse.virgo.kernel.shell.state.QuasiLiveService;
-import org.eclipse.virgo.kernel.shell.state.QuasiPackage;
-import org.eclipse.virgo.kernel.shell.state.StateService;
-
-/**
- */
-final public class StubStateService implements StateService {
-
-    public static final String TEST_PACKAGE_SEARCH = "com.foo.bar";
-
-    public static final String TEST_REGION_NAME = "myRegion";
-
-    public static final String TEST_INSTALL_LOCATION = "src/test/resources";
-    
-    private static final long EXISTING_ID = 4;
-
-    private boolean expectNull;
-
-    public void setNullExpectations(){
-        this.expectNull = true;
-    }
-    
-    public void setNotNullExpectations(){
-        this.expectNull = false;
-    }
-   
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public List<QuasiBundle> getAllBundles(File source) {
-        this.checkNull(source);
-        ArrayList<QuasiBundle> arrayList = new ArrayList<QuasiBundle>();
-        arrayList.add(new StubQuasiLiveBundle(EXISTING_ID, null));
-        return arrayList;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public QuasiBundle getBundle(File source, long bundleId){ 
-        this.checkNull(source);
-        if(bundleId == EXISTING_ID){
-            return new StubQuasiLiveBundle(EXISTING_ID, null);
-        }
-        return null;
-    }
-
-    @Override
-    public String getBundleRegionName(long bundleId) {
-        if(bundleId == EXISTING_ID){
-            return TEST_REGION_NAME;
-        }
-        return null;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public List<QuasiLiveService> getAllServices(File source) {
-        this.checkNull(source);
-        return new ArrayList<QuasiLiveService>();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public QuasiPackage getPackages(File source, String packageName) {
-        this.checkNull(source);
-        if(packageName.equals(TEST_PACKAGE_SEARCH)) {
-            return new StubQuasiPackages(TEST_PACKAGE_SEARCH);
-        }
-        return null;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public QuasiLiveService getService(File source, long serviceId) {
-        this.checkNull(source);
-        if(serviceId == EXISTING_ID){
-            return new StubQuasiLiveService(serviceId, new StubQuasiLiveBundle(EXISTING_ID, null));
-        }
-        return null;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public List<QuasiBundle> search(File source, String term) {
-        this.checkNull(source);
-        return new ArrayList<QuasiBundle>();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public List<QuasiResolutionFailure> getResolverReport(File source, long bundleId) {
-        this.checkNull(source);
-        return new ArrayList<QuasiResolutionFailure>();
-    }
-    
-    private void checkNull(File source){
-        if(this.expectNull){
-            assertNull(source);
-        } else {
-            assertNotNull(source);
-        }
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubWorkArea.java b/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubWorkArea.java
deleted file mode 100644
index 97a5940..0000000
--- a/org.eclipse.virgo.apps.admin.core/src/test/java/org/eclipse/virgo/apps/admin/core/stubs/StubWorkArea.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.core.stubs;
-
-import org.osgi.framework.Bundle;
-
-import org.eclipse.virgo.kernel.services.work.WorkArea;
-import org.eclipse.virgo.util.io.PathReference;
-
-
-/**
- */
-public class StubWorkArea implements WorkArea {
-
-    /** 
-     * {@inheritDoc}
-     */
-    public Bundle getOwner() {
-        return null;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public PathReference getWorkDirectory() {
-        return new PathReference("target");
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.core/template.mf b/org.eclipse.virgo.apps.admin.core/template.mf
deleted file mode 100644
index 78ff483..0000000
--- a/org.eclipse.virgo.apps.admin.core/template.mf
+++ /dev/null
@@ -1,17 +0,0 @@
-Manifest-Version: 1.0
-Bundle-Name: Admin Console Core Bundle
-Bundle-ManifestVersion: 2
-Bundle-SymbolicName: org.eclipse.virgo.apps.admin.core
-Bundle-Version: ${version}
-Import-Template: 
- javax.management.*;version="0",
- org.eclipse.virgo.kernel.*;version="${org.eclipse.virgo.kernel:[=.=, +1)}",
- org.eclipse.virgo.util.*;version="${org.eclipse.virgo.util:[=.=, +1)}",
- org.springframework.*;version="${org.springframework:[2.5.6, +1)}",
- org.slf4j;version="${org.slf4j:[=.=.=, +1)}",
- org.osgi.framework.*;version="0",
- org.osgi.service.cm.*;version="0"
-Excluded-Exports: 
- org.eclipse.virgo.apps.admin.core.artifact.*,
- org.eclipse.virgo.apps.admin.core.dump.*,
- org.eclipse.virgo.apps.admin.core.state.*
diff --git a/org.eclipse.virgo.apps.admin.web/.classpath b/org.eclipse.virgo.apps.admin.web/.classpath
deleted file mode 100644
index 653187f..0000000
--- a/org.eclipse.virgo.apps.admin.web/.classpath
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src/main/java">
-		<attributes>
-			<attribute name="com.springsource.server.ide.jdt.core.test.classpathentry" value="false"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry excluding="*.js" kind="src" output="target/test-classes" path="src/test/js"/>
-	<classpathentry kind="src" path="src/main/resources">
-		<attributes>
-			<attribute name="com.springsource.server.ide.jdt.core.test.classpathentry" value="false"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
-		<attributes>
-			<attribute name="com.springsource.server.ide.jdt.core.test.classpathentry" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" output="target/test-classes" path="src/test/resources">
-		<attributes>
-			<attribute name="com.springsource.server.ide.jdt.core.test.classpathentry" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.junit/com.springsource.org.junit/4.7.0/com.springsource.org.junit-4.7.0.jar" sourcepath="/APPS_IVY_CACHE/org.junit/com.springsource.org.junit/4.7.0/com.springsource.org.junit-sources-4.7.0.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.springframework/org.springframework.web/3.0.5.RELEASE/org.springframework.web-3.0.5.RELEASE.jar" sourcepath="/APPS_IVY_CACHE/org.springframework/org.springframework.web/3.0.5.RELEASE/org.springframework.web-sources-3.0.5.RELEASE.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.springframework/org.springframework.beans/3.0.5.RELEASE/org.springframework.beans-3.0.5.RELEASE.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.springframework/org.springframework.web.servlet/3.0.5.RELEASE/org.springframework.web.servlet-3.0.5.RELEASE.jar" sourcepath="/APPS_IVY_CACHE/org.springframework/org.springframework.web.servlet/3.0.5.RELEASE/org.springframework.web.servlet-sources-3.0.5.RELEASE.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/javax.servlet/javax.servlet/3.0.0.v201103241009/javax.servlet-3.0.0.v201103241009.jar" sourcepath="/APPS_IVY_CACHE/javax.servlet/javax.servlet/3.0.0.v201103241009/javax.servlet-sources-3.0.0.v201103241009.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.springframework/org.springframework.context/3.0.5.RELEASE/org.springframework.context-3.0.5.RELEASE.jar" sourcepath="/APPS_IVY_CACHE/org.springframework/org.springframework.context/3.0.5.RELEASE/org.springframework.context-sources-3.0.5.RELEASE.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/javax.servlet/javax.servlet.jsp/2.2.0.v201103241009/javax.servlet.jsp-2.2.0.v201103241009.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.springframework/org.springframework.test/3.0.5.RELEASE/org.springframework.test-3.0.5.RELEASE.jar" sourcepath="/APPS_IVY_CACHE/org.springframework/org.springframework.test/3.0.5.RELEASE/org.springframework.test-sources-3.0.5.RELEASE.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/javax.servlet/com.springsource.javax.servlet.jsp.jstl/1.2.0.v20110728/com.springsource.javax.servlet.jsp.jstl-1.2.0.v20110728.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.springframework/org.springframework.core/3.0.5.RELEASE/org.springframework.core-3.0.5.RELEASE.jar" sourcepath="/APPS_IVY_CACHE/org.springframework/org.springframework.core/3.0.5.RELEASE/org.springframework.core-sources-3.0.5.RELEASE.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.apache.taglibs/com.springsource.org.apache.taglibs.standard/1.1.2.v20110517/com.springsource.org.apache.taglibs.standard-1.1.2.v20110517.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.osgi/org.eclipse.osgi/3.7.1.R37x_v20110808-1106/org.eclipse.osgi-3.7.1.R37x_v20110808-1106.jar" sourcepath="/APPS_IVY_CACHE/org.eclipse.osgi/org.eclipse.osgi/3.7.1.R37x_v20110808-1106/org.eclipse.osgi-sources-3.7.1.R37x_v20110808-1106.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.osgi/org.eclipse.osgi.services/3.3.0.v20110513/org.eclipse.osgi.services-3.3.0.v20110513.jar" sourcepath="/APPS_IVY_CACHE/org.apache.felix/org.apache.felix.configadmin/1.2.4/org.apache.felix.configadmin-sources-1.2.4.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.virgo.teststubs/org.eclipse.virgo.teststubs.osgi/3.5.0.D-20120403105015/org.eclipse.virgo.teststubs.osgi-3.5.0.D-20120403105015.jar" sourcepath="/APPS_IVY_CACHE/org.eclipse.virgo.test/org.eclipse.virgo.teststubs.osgi/3.5.0.D-20120403105015/org.eclipse.virgo.teststubs.osgi-sources-3.5.0.D-20120403105015.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.slf4j/com.springsource.slf4j.api/1.6.1/com.springsource.slf4j.api-1.6.1.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.slf4j/com.springsource.slf4j.nop/1.6.1/com.springsource.slf4j.nop-1.6.1.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.virgo.medic/org.eclipse.virgo.medic/3.5.0.D-20120403105200/org.eclipse.virgo.medic-3.5.0.D-20120403105200.jar" sourcepath="/APPS_IVY_CACHE/org.eclipse.virgo.medic/org.eclipse.virgo.medic/3.1.0.M01/org.eclipse.virgo.medic-sources-3.1.0.M01.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.apache.commons/com.springsource.org.apache.commons.logging/1.1.1/com.springsource.org.apache.commons.logging-1.1.1.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.virgo.kernel/org.eclipse.virgo.kernel.deployer/3.5.0.D-20120403111529/org.eclipse.virgo.kernel.deployer-3.5.0.D-20120403111529.jar" sourcepath="/APPS_IVY_CACHE/org.eclipse.virgo.kernel/org.eclipse.virgo.kernel.deployer/3.5.0.D-20120403111529/org.eclipse.virgo.kernel.deployer-sources-3.5.0.D-20120403111529.jar"/>
-	<classpathentry kind="var" path="APPS_IVY_CACHE/org.eclipse.virgo.kernel/org.eclipse.virgo.kernel.shell/3.5.0.D-20120403111529/org.eclipse.virgo.kernel.shell-3.5.0.D-20120403111529.jar" sourcepath="/APPS_IVY_CACHE/org.eclipse.virgo.kernel/org.eclipse.virgo.kernel.shell/3.5.0.D-20120403111529/org.eclipse.virgo.kernel.shell-sources-3.5.0.D-20120403111529.jar"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/org.eclipse.virgo.apps.admin.core"/>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>
diff --git a/org.eclipse.virgo.apps.admin.web/.project b/org.eclipse.virgo.apps.admin.web/.project
deleted file mode 100644
index a76ffcc..0000000
--- a/org.eclipse.virgo.apps.admin.web/.project
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.virgo.apps.admin.web</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.wst.common.project.facet.core.builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.wst.validation.validationbuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>com.springsource.server.ide.bundlor.core.builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.springframework.ide.eclipse.core.springbuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>com.springsource.server.ide.facet.core.bundlenature</nature>
-		<nature>org.springframework.ide.eclipse.core.springnature</nature>
-		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
-		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
-		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.virgo.apps.admin.web/.settings/.jsdtscope b/org.eclipse.virgo.apps.admin.web/.settings/.jsdtscope
deleted file mode 100644
index 5d8de19..0000000
--- a/org.eclipse.virgo.apps.admin.web/.settings/.jsdtscope
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
-		<attributes>
-			<attribute name="hide" value="false"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
-	<classpathentry kind="output" path=""/>
-</classpath>
diff --git a/org.eclipse.virgo.apps.admin.web/.settings/org.eclipse.virgo.ide.bundlor.core.prefs b/org.eclipse.virgo.apps.admin.web/.settings/org.eclipse.virgo.ide.bundlor.core.prefs
deleted file mode 100644
index 4906cbe..0000000
--- a/org.eclipse.virgo.apps.admin.web/.settings/org.eclipse.virgo.ide.bundlor.core.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Wed Jun 10 16:13:51 BST 2009
-org.eclipse.virgo.ide.bundlor.core.template.properties.files=../build.properties;../build.versions
-eclipse.preferences.version=1
diff --git a/org.eclipse.virgo.apps.admin.web/.settings/org.eclipse.wst.common.component b/org.eclipse.virgo.apps.admin.web/.settings/org.eclipse.wst.common.component
deleted file mode 100644
index ebc4447..0000000
--- a/org.eclipse.virgo.apps.admin.web/.settings/org.eclipse.wst.common.component
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project-modules id="moduleCoreId" project-version="1.5.0">
-<wb-module deploy-name="com.springsource.server.admin.web">
-<wb-resource deploy-path="/" source-path="/src/main/webapp"/>
-        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
-        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/js"/>
-        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
-        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/java"/>
-        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/resources"/>
-<property name="context-root" value="admin"/>
-<property name="java-output-path" value="/target/classes"/>
-</wb-module>
-</project-modules>
diff --git a/org.eclipse.virgo.apps.admin.web/.settings/org.eclipse.wst.common.project.facet.core.xml b/org.eclipse.virgo.apps.admin.web/.settings/org.eclipse.wst.common.project.facet.core.xml
deleted file mode 100644
index 45eba1c..0000000
--- a/org.eclipse.virgo.apps.admin.web/.settings/org.eclipse.wst.common.project.facet.core.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<faceted-project>
-  <fixed facet="jst.web"/>
-  <fixed facet="jst.java"/>
-  <installed facet="jst.web" version="2.5"/>
-  <installed facet="com.springsource.server.bundle" version="1.0"/>
-  <installed facet="jst.java" version="6.0"/>
-</faceted-project>
diff --git a/org.eclipse.virgo.apps.admin.web/.springBeans b/org.eclipse.virgo.apps.admin.web/.springBeans
deleted file mode 100644
index 34b281c..0000000
--- a/org.eclipse.virgo.apps.admin.web/.springBeans
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beansProjectDescription>
-	<version>1</version>
-	<pluginVersion><![CDATA[2.3.0.200912170948-RELEASE]]></pluginVersion>
-	<configSuffixes>
-		<configSuffix><![CDATA[xml]]></configSuffix>
-	</configSuffixes>
-	<enableImports><![CDATA[false]]></enableImports>
-	<configs>
-	</configs>
-	<configSets>
-	</configSets>
-</beansProjectDescription>
diff --git a/org.eclipse.virgo.apps.admin.web/build.xml b/org.eclipse.virgo.apps.admin.web/build.xml
deleted file mode 100644
index b13732f..0000000
--- a/org.eclipse.virgo.apps.admin.web/build.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="org.eclipse.virgo.apps.admin.web">
-
-	<property file="${basedir}/../build.properties"/>
-	<property file="${basedir}/../build.versions"/>
-	<import file="${basedir}/../virgo-build/wab/default.xml"/>
-	
-</project>
diff --git a/org.eclipse.virgo.apps.admin.web/ivy.xml b/org.eclipse.virgo.apps.admin.web/ivy.xml
deleted file mode 100644
index 9212f8b..0000000
--- a/org.eclipse.virgo.apps.admin.web/ivy.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet type="text/xsl" href="http://ivyrep.jayasoft.org/ivy-doc.xsl"?>
-<ivy-module
-		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-		xsi:noNamespaceSchemaLocation="http://incubator.apache.org/ivy/schemas/ivy.xsd"
-		version="1.3">
-
-	<info organisation="org.eclipse.virgo.apps" module="${ant.project.name}"/>
-
-	<configurations>
-		<include file="${virgo.build.dir}/common/default-ivy-configurations.xml"/>
-	</configurations>
-
-	<publications>
-		<artifact name="${ant.project.name}" type="wab" ext="jar"/>
-		<artifact name="${ant.project.name}-sources" type="src" ext="jar"/>
-	</publications>
-
-	<dependencies>
-		<!-- === PROVIDED-COMPILE============================================ -->
-        <dependency org="org.eclipse.virgo.nano" name="org.eclipse.virgo.deployer.api" rev="${org.eclipse.virgo.nano}" conf="provided->compile"/>
-	    <dependency org="org.eclipse.virgo.kernel" name="org.eclipse.virgo.kernel.shell" rev="${org.eclipse.virgo.kernel}" conf="provided->compile"/>
-	    <dependency org="org.eclipse.virgo.kernel" name="org.eclipse.virgo.kernel.model" rev="${org.eclipse.virgo.kernel}" conf="provided->compile"/>
-	    <dependency org="org.eclipse.virgo.kernel" name="org.eclipse.virgo.kernel.deployer" rev="${org.eclipse.virgo.kernel}" conf="provided->compile"/>
-	    <dependency org="org.eclipse.virgo.web" name="org.eclipse.virgo.web.dm" rev="${org.eclipse.virgo.web}" conf="provided->compile"/>
-		<dependency org="org.eclipse.virgo.util" name="org.eclipse.virgo.util.io" rev="${org.eclipse.virgo.util}" conf="provided->compile"/>
-        <dependency org="org.eclipse.virgo.apps" name="org.eclipse.virgo.apps.admin.core" rev="latest.integration" conf="provided->compile"/>
-		<!-- === RUNTIME-DEFAULT =========================================== -->
-		<!-- === PROVIDED-RUNTIME =========================================== -->
-		<dependency org="org.eclipse.osgi" name="org.eclipse.osgi.services" rev="${org.eclipse.osgi.services}" conf="provided->runtime"/>
-		<dependency org="org.eclipse.osgi" name="org.eclipse.equinox.cm" rev="${org.eclipse.equinox.cm}" conf="provided->runtime"/>
-		<dependency org="javax.servlet" name="javax.servlet" rev="${javax.servlet}" conf="provided->runtime"/>
-		<dependency org="javax.servlet" name="com.springsource.javax.servlet.jsp.jstl" rev="${javax.servlet.jsp.jstl}" conf="provided->runtime"/>
-        <dependency org="org.apache.taglibs" name="com.springsource.org.apache.taglibs.standard" rev="${org.apache.taglibs.standard}" conf="provided->runtime"/>
-		<dependency org="org.eclipse.osgi" name="org.eclipse.osgi" rev="${org.eclipse.osgi}" conf="provided->runtime"/>
-		<dependency org="org.apache.commons" name="com.springsource.org.apache.commons.fileupload" rev="${org.apache.commons.fileupload}" conf="provided->runtime"/>
-		<dependency org="org.apache.commons" name="com.springsource.org.apache.commons.io" rev="${org.apache.commons.io}" conf="provided->runtime"/>
-		<dependency org="org.springframework" name="org.springframework.core" rev="${org.springframework}" conf="provided->runtime"/>
-		<dependency org="org.springframework" name="org.springframework.context" rev="${org.springframework}" conf="provided->runtime"/>
-		<dependency org="org.springframework" name="org.springframework.beans" rev="${org.springframework}" conf="provided->runtime"/>
-		<dependency org="org.springframework" name="org.springframework.web" rev="${org.springframework}" conf="provided->runtime"/>
-        <dependency org="org.springframework" name="org.springframework.web.servlet" rev="${org.springframework}" conf="provided->runtime"/>
-        <dependency org="org.eclipse.gemini" name="org.eclipse.gemini.blueprint.core" rev="${org.eclipse.gemini.blueprint}" conf="provided->runtime"/>
-        <dependency org="org.slf4j" name="com.springsource.slf4j.api" rev="${org.slf4j}" conf="provided->runtime"/>
-		<!-- === TEST ====================================================== -->
-		<dependency org="org.junit" name="com.springsource.org.junit" rev="${org.junit}" conf="test->runtime"/>
-        <dependency org="org.springframework" name="org.springframework.test" rev="${org.springframework}" conf="test->runtime"/>
-		<dependency org="org.eclipse.virgo.teststubs" name="org.eclipse.virgo.teststubs.osgi" rev="${org.eclipse.virgo.teststubs}" conf="test->runtime"/>
-        <dependency org="org.slf4j" name="com.springsource.slf4j.nop" rev="${org.slf4j}" conf="test->runtime"/>
-		
-		<override org="org.springframework" rev="${org.springframework}"/>
-	</dependencies>
-
-</ivy-module>
diff --git a/org.eclipse.virgo.apps.admin.web/lib/.version b/org.eclipse.virgo.apps.admin.web/lib/.version
deleted file mode 100644
index 6396fc4..0000000
--- a/org.eclipse.virgo.apps.admin.web/lib/.version
+++ /dev/null
@@ -1,2 +0,0 @@
-virgo.kernel.version=test.version.kernel
-virgo.server.version=test.version
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/AppController.java b/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/AppController.java
deleted file mode 100644
index a141b82..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/AppController.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.web;
-
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.eclipse.virgo.apps.admin.web.internal.AdminConsoleUtil;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.servlet.ModelAndView;
-
-
-/**
- * <p>
- * AppController deals with requests for the console landing page, general information view and links.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * AppController is threadsafe
- *
- */
-@Controller
-public final class AppController {
-
-    private AdminConsoleUtil adminConsoleUtil = new AdminConsoleUtil();
-
-    /**
-     * Custom handler for displaying a list of properties.
-     * @return ModelAndView to render
-     */
-    @RequestMapping("/info/overview.htm")
-    public ModelAndView overview() {
-        return new ModelAndView("info-overview").addObject("properties", this.getServerProperties());
-    }
-
-    private Map<String, String> getServerProperties() {
-        Map<String, String> props = new TreeMap<String, String>();
-        props.put("Virgo Server Version", this.adminConsoleUtil.getServerVersion());
-        props.put("Operating System", this.adminConsoleUtil.getOperatingSystem());
-        props.put("Java VM Description", this.adminConsoleUtil.getVMDesc());
-        props.put("Java Version", this.adminConsoleUtil.getJavaDesc());
-        props.put("Server Time Zone", this.adminConsoleUtil.getUserTimeZone());
-        return props;
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/ArtifactController.java b/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/ArtifactController.java
deleted file mode 100644
index 9eb79f0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/ArtifactController.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.web;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintWriter;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.ServletRequestBindingException;
-import org.springframework.web.bind.ServletRequestUtils;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.MultipartHttpServletRequest;
-import org.springframework.web.servlet.ModelAndView;
-
-import org.eclipse.virgo.apps.admin.web.internal.DojoTreeFormatter;
-import org.eclipse.virgo.kernel.shell.model.helper.ArtifactAccessor;
-import org.eclipse.virgo.kernel.shell.model.helper.RamAccessorHelper;
-import org.eclipse.virgo.apps.admin.core.ArtifactService;
-
-/**
- * <p>
- * ArtifactController handles all requests that need the RAM to be rendered for the artifact page/view.
- * </p>
- * 
- * <strong>Concurrent Semantics</strong><br />
- * 
- * ArtifactController is threadsafe, under the assumption that {@link ArtifactService} is also thread safe.
- * 
- */
-@Controller
-public final class ArtifactController {
-    
-    private static final Logger LOGGER = LoggerFactory.getLogger(ArtifactController.class);
-
-    private static final String AJAX_JSON_CONTENT_TYPE = "application/json";
-
-    private static final String TYPE = "type";
-
-    private static final String NAME = "name";
-
-    private static final String VERSION = "version";
-
-    private static final String REGION = "region";
-
-    private static final String PARENT = "parent";
-    
-    private final ArtifactService artifactService;
-
-    private final DojoTreeFormatter dojoTreeJsonFormatter;
-    
-    private final RamAccessorHelper ramAccessorHelper;
-
-    /**
-     * Simple constructor taking an {@link ArtifactService} instance to provide any data required to render requests
-     * 
-     * @param artifactService data to render requests
-     * @param dojoTreeJsonFormatter formatter
-     * @param moduleContextAccessor context
-     * @param stateInspectorService state
-     * @param ramAccessorHelper assistance
-     */
-    @Autowired
-    public ArtifactController(ArtifactService artifactService, DojoTreeFormatter dojoTreeJsonFormatter, RamAccessorHelper ramAccessorHelper) {
-        this.artifactService = artifactService;
-        this.dojoTreeJsonFormatter = dojoTreeJsonFormatter;
-        this.ramAccessorHelper = ramAccessorHelper;
-        
-    }
-
-    /**
-     * Custom handler for displaying a list of all installed applications.
-     * @param request controlling response
-     * @return ModelAndView to render
-     */
-    @RequestMapping("/artifact/overview.htm")
-    public ModelAndView overview(HttpServletRequest request) {
-        String msg = request.getParameter("message");
-        if (msg == null || "".equals(msg)) {
-            return new ModelAndView("artifact-overview");
-        }
-        return new ModelAndView("artifact-overview").addObject("result", msg);
-    }
-
-    /**
-     * Custom handler for deploying an application.
-     * @param request controlling response
-     * @return ModelAndView to render
-     */
-    @RequestMapping("/artifact/deploy.htm")
-    public ModelAndView deploy(HttpServletRequest request) {
-        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
-        MultipartFile multipartFile = multipartRequest.getFile("application");
-        String msg;
-        if (multipartFile == null || multipartFile.isEmpty()) {
-            msg = "Error: Please select the artifact you would like to upload.";
-        } else {
-            msg = this.deployFile(multipartFile);
-        }
-        return new ModelAndView("artifact-overview").addObject("result", msg);
-    }
-
-    private String deployFile(MultipartFile multipartFile) {
-        File dest = new File(this.artifactService.getStagingDirectory().getAbsolutePath(), multipartFile.getOriginalFilename());
-        try {
-            multipartFile.transferTo(dest);
-            return this.artifactService.deploy(dest);
-        } catch (IOException e) {
-            String msg = "An error occurred while transferring an uploaded file to [" + dest.getAbsolutePath()
-                + "]. Consult the serviceability output for further details.";
-            LOGGER.warn(msg, e);
-            return msg;
-        }
-    }
-
-    /**
-     * Custom handler for performing an action upon an artifact.
-     * @param request controlling response
-     * @return ModelAndView to render
-     * @throws ServletRequestBindingException for missing or unparsable parameters
-     */
-    @RequestMapping("/artifact/do/start")
-    public ModelAndView actionStart(HttpServletRequest request) throws ServletRequestBindingException {
-        String type = ServletRequestUtils.getRequiredStringParameter(request, TYPE);
-        String name = ServletRequestUtils.getRequiredStringParameter(request, NAME);
-        String version = ServletRequestUtils.getRequiredStringParameter(request, VERSION);
-        String region = ServletRequestUtils.getRequiredStringParameter(request, REGION);
-
-        String msg = this.ramAccessorHelper.start(type, name, version, region);
-        return new ModelAndView("artifact-overview").addObject("result", msg);
-    }
-
-    /**
-     * Custom handler for performing an action upon an artifact.
-     * @param request controlling response
-     * @return ModelAndView to render
-     * @throws ServletRequestBindingException for missing or unparsable parameters
-     */
-    @RequestMapping("/artifact/do/stop")
-    public ModelAndView actionStop(HttpServletRequest request) throws ServletRequestBindingException {
-        String type = ServletRequestUtils.getRequiredStringParameter(request, TYPE);
-        String name = ServletRequestUtils.getRequiredStringParameter(request, NAME);
-        String version = ServletRequestUtils.getRequiredStringParameter(request, VERSION);
-        String region = ServletRequestUtils.getRequiredStringParameter(request, REGION);
-
-        String msg = this.ramAccessorHelper.stop(type, name, version, region);
-        return new ModelAndView("artifact-overview").addObject("result", msg);
-    }
-
-    /**
-     * Custom handler for performing an action upon an artifact.
-     * @param request controlling response
-     * @return ModelAndView to render
-     * @throws ServletRequestBindingException for missing or unparsable parameters
-     */
-    @RequestMapping("/artifact/do/uninstall")
-    public ModelAndView actionUninstall(HttpServletRequest request) throws ServletRequestBindingException {
-        String type = ServletRequestUtils.getRequiredStringParameter(request, TYPE);
-        String name = ServletRequestUtils.getRequiredStringParameter(request, NAME);
-        String version = ServletRequestUtils.getRequiredStringParameter(request, VERSION);
-        String region = ServletRequestUtils.getRequiredStringParameter(request, REGION);
-
-        String msg = this.ramAccessorHelper.uninstall(type, name, version, region);
-        return new ModelAndView("artifact-overview").addObject("result", msg);
-    }
-
-    /**
-     * Custom handler for performing an action upon an artifact.
-     * @param request controlling response
-     * @return ModelAndView to render
-     * @throws ServletRequestBindingException for missing or unparsable parameters
-     */
-    @RequestMapping("/artifact/do/refresh")
-    public ModelAndView actionRefresh(HttpServletRequest request) throws ServletRequestBindingException {
-        String type = ServletRequestUtils.getRequiredStringParameter(request, TYPE);
-        String name = ServletRequestUtils.getRequiredStringParameter(request, NAME);
-        String version = ServletRequestUtils.getRequiredStringParameter(request, VERSION);
-        String region = ServletRequestUtils.getRequiredStringParameter(request, REGION);
-
-        String msg = this.ramAccessorHelper.refresh(type, name, version, region);
-        return new ModelAndView("artifact-overview").addObject("result", msg);
-    }
-
-    /**
-     * Write a representation of the RAM.
-     * @param request controlling response
-     * @param response formatted descriptions
-     * @throws IOException writing response
-     * @throws ServletRequestBindingException for missing or unparsable parameters
-     */
-    @RequestMapping("/artifact/data")
-    public void data(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletRequestBindingException {
-        String type = ServletRequestUtils.getStringParameter(request, TYPE);
-        String name = ServletRequestUtils.getStringParameter(request, NAME);
-        String version = ServletRequestUtils.getStringParameter(request, VERSION);
-        String region = ServletRequestUtils.getStringParameter(request, REGION);
-        String parent = ServletRequestUtils.getStringParameter(request, PARENT);
-
-        String responseString;
-        if (type == null) {
-            responseString = this.dojoTreeJsonFormatter.formatTypes(this.ramAccessorHelper.getTypes());//Top level request
-        } else if (type != null && name == null) {
-            responseString = this.dojoTreeJsonFormatter.formatArtifactsOfType(parent, this.ramAccessorHelper.getArtifactsOfType(type));//Second level request
-        } else if (type != null && name != null && version != null) {
-            ArtifactAccessor artifact = this.ramAccessorHelper.getArtifact(type, name, version, region);
-            responseString = this.dojoTreeJsonFormatter.formatArtifactDetails(parent, artifact);//All other requests
-        } else {
-            throw new IllegalArgumentException(String.format("Cannot service request with parameters: %s", request.getQueryString()));
-        }
-
-        StringBuilder sb = new StringBuilder();
-        sb.append("{");
-        sb.append("identifier: 'id',");
-        sb.append("label: 'label',");
-        sb.append("items: [ ");
-        if(responseString != null) {
-            sb.append(responseString);
-        }
-        sb.append("]}");
-
-        response.setContentType(AJAX_JSON_CONTENT_TYPE);
-        PrintWriter writer = response.getWriter();
-        writer.write(sb.toString());
-        writer.flush();
-    }
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/ConfigAdminController.java b/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/ConfigAdminController.java
deleted file mode 100644
index f2584b9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/ConfigAdminController.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.web;
-
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.ServletRequestBindingException;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.servlet.ModelAndView;
-
-/**
- * <p>
- * ConfigAdminController deals with requests for configuration information from config admin.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * ConfigAdminController is threadsafe
- *
- */
-@Controller
-public final class ConfigAdminController {
-    
-    private final ConfigurationAdmin configurationAdmin;
-	
-	/**
-	 * Simple constructor taking an {@link ConfigurationAdmin} instance to provide any data required to render requests
-	 * @param configurationAdmin data for request rendering 
-	 */
-    @Autowired
-	public ConfigAdminController(ConfigurationAdmin configurationAdmin) {
-		this.configurationAdmin = configurationAdmin;
-	}
-
-    /**
-	 * Custom handler for displaying all the present configuration
-	 * 
-	 * @return ModelAndView to render
-	 */
-    @SuppressWarnings("unchecked")
-    @RequestMapping("/config/overview.htm")
-    public ModelAndView overview() {
-		Configuration[] configurations = new Configuration[0];
-        try {
-            configurations = this.configurationAdmin.listConfigurations(null);
-        } catch (Exception e) {
-            // no-op
-        }
-        Map<String, Map<String, String>> configs = new HashMap<String, Map<String,String>>();
-        if(configurations != null){
-            Map<String, String> tempProps;
-            for(Configuration c : configurations){
-                tempProps = new HashMap<String, String>();
-                Enumeration<Object> keys = c.getProperties().keys();
-                while(keys.hasMoreElements()){
-                    Object nextElement = keys.nextElement();
-                    tempProps.put(nextElement.toString(), c.getProperties().get(nextElement).toString());
-                }
-                configs.put(c.getPid(), tempProps);
-            }
-        }
-		Map<String, Object> model = new HashMap<String, Object>();
-		model.put("configurations", configs);
-		return createStateModelAndView("config-overview", model);		
-	}
-
-    /**
-     * Add any common model items and return a {@link ModelAndView}
-     * @throws ServletRequestBindingException 
-     */
-	private ModelAndView createStateModelAndView(String viewName, Map<String, Object> model) {
-		return new ModelAndView(viewName, model);
-	}
-
-	
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/DumpController.java b/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/DumpController.java
deleted file mode 100644
index 2adcc07..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/DumpController.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.web;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.eclipse.virgo.apps.admin.web.internal.DumpListFormatterUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.ServletRequestBindingException;
-import org.springframework.web.bind.ServletRequestUtils;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.servlet.ModelAndView;
-
-import org.eclipse.virgo.apps.admin.core.DumpInspectorService;
-
-/**
- * <p>
- * DumpController handles all requests from the dump inspector page of the admin console
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * DumpController is thread safe
- *
- */
-@Controller
-public final class DumpController {
-
-	private final DumpInspectorService dumpInspectorService;
-
-    private final DumpListFormatterUtil dumpListFormatterUtil;
-	
-	private static final int DUMP_TYPE = 1;
-	
-	private static final int ENTRY_TYPE = 2;
-
-	/**
-	 * Simple constructor taking an {@link DumpInspectorService} instance to provide any data required to render requests
-	 * @param dumpManagerService for request rendering
-	 * @param dumpListFormatterUtil for general list formatting
-	 */
-	@Autowired
-	public DumpController(DumpInspectorService dumpManagerService, DumpListFormatterUtil dumpListFormatterUtil) {
-		this.dumpInspectorService = dumpManagerService;
-		this.dumpListFormatterUtil = dumpListFormatterUtil;
-	}
-
-	/**
-	 * Custom handler for displaying the list of available dumps
-	 * @return ModelAndView to render
-	 */
-	@RequestMapping("/dump/inspector.htm")
-	public ModelAndView dump()  {
-		Map<String, String> dumps = this.dumpListFormatterUtil.getAvaliableDumps();
-		List<String> dumpEntries = Collections.emptyList();
-		String inspection = "";
-		return createContextDumpModelAndView(dumps, null, dumpEntries, null, inspection);		
-	}
-
-	/**
-	 * Custom handler for displaying the list of available dumps and dump entries
-	 * @param request to limit response
-	 * @return ModleAndView to render
-	 */
-	@RequestMapping("/dump/entry.htm")
-	public ModelAndView dumpEntry(HttpServletRequest request) {
-		String dumpID = ServletRequestUtils.getStringParameter(request, "dumpID", null);
-		int requestType = getRequestType(request);
-		Map<String, String> dumps = this.dumpListFormatterUtil.getAvaliableDumps();
-		
-		String dumpEntryName = null;
-		List<String> dumpEntries = null;
-		String inspection = null;
-		
-		if(requestType == ENTRY_TYPE || dumpID == null){
-			dumpEntryName = ServletRequestUtils.getStringParameter(request, "dumpEntryName", null);
-			dumpEntries = this.dumpInspectorService.getDumpEntries(dumpID);
-			inspection = this.dumpInspectorService.getDumpEntry(dumpID, dumpEntryName);
-		}
-		return createContextDumpModelAndView(dumps, dumpID, dumpEntries, dumpEntryName, inspection);
-	}
-
-    private ModelAndView createContextDumpModelAndView(Map<String, String> dumps, String selectedDump, List<String> entries, String selectedEntry, String inspection) {
-        String formattedSelectedDump = null;
-        if(selectedDump != null) {
-            formattedSelectedDump = dumps.get(selectedDump);
-        }
-        return new ModelAndView("dump-overview").addObject("dumps", dumps)
-                                                .addObject("selectedDump", selectedDump)
-                                                .addObject("formattedSelectedDump", formattedSelectedDump)
-                                                .addObject("entries", entries)
-                                                .addObject("selectedEntry", selectedEntry)
-                                                .addObject("inspection", inspection);
-    }
-	
-	private int getRequestType(HttpServletRequest request) {
-		String buttonName;
-		try {
-			buttonName = ServletRequestUtils.getStringParameter(request, "Operation");
-			if ("Select Dump".equals(buttonName)) {
-				return DUMP_TYPE;
-			} else {
-				return ENTRY_TYPE;
-			}
-		} catch (ServletRequestBindingException e) {
-			return DUMP_TYPE;
-		}
-	}
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/StateController.java b/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/StateController.java
deleted file mode 100644
index 9585399..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/StateController.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.web;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.eclipse.virgo.apps.admin.web.internal.DumpListFormatterUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.ServletRequestBindingException;
-import org.springframework.web.bind.ServletRequestUtils;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.servlet.ModelAndView;
-
-import org.eclipse.virgo.apps.admin.core.BundleHolder;
-import org.eclipse.virgo.apps.admin.core.DumpInspectorService;
-import org.eclipse.virgo.apps.admin.core.FailedResolutionHolder;
-import org.eclipse.virgo.apps.admin.core.PackagesCollection;
-import org.eclipse.virgo.apps.admin.core.ServiceHolder;
-import org.eclipse.virgo.apps.admin.core.StateHolder;
-
-/**
- * <p>
- * Requests made with either a 'null' or 'Live' value in the state field will get the 
- * live view. Otherwise the requested state dump will be searched for.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * StateManagerController is thread safe
- *
- */
-@Controller
-public final class StateController {
-    
-    private static final Logger LOGGER = LoggerFactory.getLogger(StateController.class);
-    
-    private static final String BUNDLE_ID_NAME = "id";
-
-    private static final String STATE_NAME = "state";
-    
-    private static final String FORMATTED_STATE_NAME = "fState";
-
-    private static final String LIVE_STATE_NAME = "Live";
-
-    private static final String BUNDLE_NAME = "name";
-
-    private static final String VERSION_NAME = "version";
-
-    private static final String REGION_NAME = "region";
-
-    private final StateHolder stateHolder;
-	
-    private final DumpListFormatterUtil dumpListFormatterUtil;
-    
-
-	/**
-	 * Simple constructor taking an {@link DumpInspectorService} instance to provide any data required to render requests
-	 * @param stateHolder for data to render requests
-	 * @param dumpListFormatterUtil for general list formatting
-	 */
-    @Autowired
-	public StateController(StateHolder stateHolder, DumpListFormatterUtil dumpListFormatterUtil) {
-		this.stateHolder = stateHolder;
-	    this.dumpListFormatterUtil = dumpListFormatterUtil;
-	}
-
-    /**
-     * Custom handler for displaying the list of available bundles
-     * @param request to limit response
-     * @return ModelAndView to render
-     * @throws ServletRequestBindingException getting parameters
-     */
-    @RequestMapping("/state/bundles.htm")
-    public ModelAndView bundles(HttpServletRequest request) throws ServletRequestBindingException {
-        String newState = ServletRequestUtils.getStringParameter(request, STATE_NAME);
-        List<BundleHolder> bundleHolders = this.stateHolder.getAllBundles(newState);
-        Collections.sort(bundleHolders);
-        Map<String, Object> model = new HashMap<String, Object>();
-        model.put("bundles", bundleHolders);
-        return createStateModelAndView("state-bundles", request, model);       
-    }
-
-    /**
-     * Custom handler for displaying the list of available services
-     * 
-     * @param request to limit response
-     * @return ModelAndView to render
-     * @throws ServletRequestBindingException getting parameters
-     */
-    @RequestMapping("/state/services.htm")
-    public ModelAndView services(HttpServletRequest request) throws ServletRequestBindingException {
-        String newState = ServletRequestUtils.getStringParameter(request, STATE_NAME);
-        List<ServiceHolder> serviceHolders = this.stateHolder.getAllServices(newState);
-        Collections.sort(serviceHolders);
-        Map<String, Object> model = new HashMap<String, Object>();
-        model.put("services", serviceHolders);
-        return createStateModelAndView("state-services", request, model);       
-    }
-
-	/**
-	 * Custom handler for displaying detailed information on a bundle
-     * @param request to limit response
-     * @return ModelAndView to render
-     * @throws ServletRequestBindingException getting parameters
-	 */
-    @RequestMapping("/state/bundle.htm")
-	public ModelAndView bundle(HttpServletRequest request) throws ServletRequestBindingException {
-		Long bundleId = ServletRequestUtils.getLongParameter(request, BUNDLE_ID_NAME);
-        String name = ServletRequestUtils.getStringParameter(request, BUNDLE_NAME);
-        String version = ServletRequestUtils.getStringParameter(request, VERSION_NAME);
-        String region = ServletRequestUtils.getStringParameter(request, REGION_NAME);
-        String newState = ServletRequestUtils.getStringParameter(request, STATE_NAME);
-		Map<String, Object> model = new HashMap<String, Object>();
-		
-		BundleHolder bundleHolder = null;
-		try {
-    		if(bundleId != null){
-    		    bundleHolder = this.stateHolder.getBundle(newState, bundleId.longValue());
-    		} else if(name != null && version != null && region != null) {
-    		    bundleHolder = this.stateHolder.getBundle(newState, name, version, region);
-    		}
-		} catch(Exception e) {
-		    LOGGER.warn(String.format("Error while retrieving bundle '%d%s'", bundleId, name), e);
-		}
-		
-		if(bundleHolder != null) {
-            model.put("title", String.format("Viewing bundle '%s: %s'", bundleHolder.getSymbolicName(), bundleHolder.getVersion()));
-            model.put("bundle", bundleHolder);
-		} else {
-		    model.put("title", "No bundle has been requested");
-		}
-        
-		return createStateModelAndView("state-bundle", request, model);	
-	}
-
-	/**
-	 * Custom handler for displaying the list of available dumps
-     * @param request to limit response
-     * @return ModelAndView to render
-     * @throws ServletRequestBindingException getting parameters
-	 */
-    @RequestMapping("/state/packages.htm")
-	public ModelAndView packages(HttpServletRequest request) throws ServletRequestBindingException {
-        String packageName = ServletRequestUtils.getStringParameter(request, "name");	 
-        String newState = ServletRequestUtils.getStringParameter(request, STATE_NAME);
-		Map<String, Object> model = new HashMap<String, Object>();
-		if(packageName != null){
-		    PackagesCollection packages = this.stateHolder.getPackages(newState, packageName);
-		    model.put("importers", packages.getImported());
-		    model.put("exporters", packages.getExported());
-    		model.put("title", String.format("Viewing package '%s'", packages.getPackageName()));
-		} else {
-            model.put("title", "No package name has been provided");
-		}
-		return createStateModelAndView("state-packages", request, model);	
-	}
-
-    /**
-     * Custom handler for displaying the possible resolution issues with the requested bundle
-     * @param request to limit response
-     * @return ModelAndView to render
-     * @throws ServletRequestBindingException getting parameters
-     */
-    @RequestMapping("/state/resolve.htm")
-    public ModelAndView resolve(HttpServletRequest request) throws ServletRequestBindingException {
-        Long bundleId = ServletRequestUtils.getLongParameter(request, BUNDLE_ID_NAME);
-        String newState = ServletRequestUtils.getStringParameter(request, STATE_NAME);
-        Map<String, Object> model = new HashMap<String, Object>();
-        if(bundleId != null){
-            List<FailedResolutionHolder> failedResolutions = this.stateHolder.getResolverReport(newState, bundleId);
-            if(failedResolutions.size() == 0){
-                model.put("title", String.format("No resolution faliures found for bundle '%s'", bundleId));
-            } else {
-                FailedResolutionHolder quasiResolutionFailure = failedResolutions.get(0);
-                model.put("title", String.format("State resolver report for '%s - %s'", quasiResolutionFailure.getUnresolvedBundle().getSymbolicName(), quasiResolutionFailure.getUnresolvedBundle().getVersion()));
-                model.put("failure", failedResolutions);
-            }
-        } else {
-            model.put("title", "No bundle has been requested");
-        }
-        return createStateModelAndView("state-resolve", request, model);  
-    }
-    
-    /**
-     * Custom handler for displaying the search results of the given search term
-     * @param request to limit response
-     * @return ModelAndView to render
-     * @throws ServletRequestBindingException getting parameters
-     */
-    @RequestMapping("/state/search.htm")
-    public ModelAndView search(HttpServletRequest request) throws ServletRequestBindingException {
-        String term = ServletRequestUtils.getStringParameter(request, "term");
-        String newState = ServletRequestUtils.getStringParameter(request, STATE_NAME);
-        Map<String, Object> model = new HashMap<String, Object>();
-        if(term != null){        
-            List<BundleHolder> matchingBundles = this.stateHolder.search(newState, term);
-            model.put("title", String.format("Search results for '%s'", term));
-            model.put("bundles", matchingBundles);
-        } else {
-            model.put("title", "No search term given");
-        }
-        return createStateModelAndView("state-search", request, model);  
-    }
-
-
-    /**
-     * Add any common model items and return a {@link ModelAndView}
-     * 
-     * @throws ServletRequestBindingException 
-     */
-	private ModelAndView createStateModelAndView(String viewName, HttpServletRequest request, Map<String, Object> model) throws ServletRequestBindingException {
-	    Map<String, String> dumps = this.dumpListFormatterUtil.getAvaliableDumps();
-	    model.put("stateSources", dumps);
-        String newState = ServletRequestUtils.getStringParameter(request, STATE_NAME); // Don't want to unformat it so that it reads correct on the next call
-        if(newState == null || LIVE_STATE_NAME.equals(newState)){
-            model.put(STATE_NAME, LIVE_STATE_NAME);
-            model.put(FORMATTED_STATE_NAME, LIVE_STATE_NAME);
-        } else {
-            model.put(STATE_NAME, newState);      
-            model.put(FORMATTED_STATE_NAME, dumps.get(newState));
-        }
-		return new ModelAndView(viewName, model);
-	}
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/internal/AdminConsoleUtil.java b/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/internal/AdminConsoleUtil.java
deleted file mode 100644
index cf6eb95..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/internal/AdminConsoleUtil.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.web.internal;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.management.ManagementFactory;
-import java.lang.management.OperatingSystemMXBean;
-import java.lang.management.RuntimeMXBean;
-import java.util.Properties;
-
-/**
- * <p>
- * AdminConsoleUtil is a simple class that provides access to various server properties
- * </p>
- * 
- * <strong>Concurrent Semantics</strong><br />
- * 
- * AdminConsoleUtil is threadsafe and immutable.
- * 
- */
-public final class AdminConsoleUtil {
-
-    private final String version;
-
-    public AdminConsoleUtil() {
-        this.version = this.readServerVersion("lib/.version");
-    }
-
-    public String getServerVersion() {
-        return this.version;
-    }
-
-    public String getOperatingSystem() {
-        OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean();
-        return String.format("%s(%s) - %s", os.getName(), os.getArch(), os.getVersion());
-    }
-
-    public String getVMDesc() {
-        RuntimeMXBean rt = ManagementFactory.getRuntimeMXBean();
-        return String.format("%s(%s) - %s", rt.getVmVendor(), rt.getVmName(), rt.getVmVersion());
-    }
-
-    public String getJavaDesc() {
-        String vendor = System.getProperty("java.vendor");
-        String version = System.getProperty("java.version");
-        return String.format("%s - %s", vendor, version);
-    }
-
-    public String getUserTimeZone() {
-        String timeZone = System.getProperty("user.timezone");
-        if (timeZone == null || "".equals(timeZone)) {
-            timeZone = "Unavaliable";
-        }
-        return timeZone;
-    }
-
-    private final String readServerVersion(String path) {
-        String readVersion;
-        File versionFile = new File(path);
-        Properties versions = new Properties();
-        InputStream stream = null;
-        try {
-            stream = new FileInputStream(versionFile);
-            versions.load(stream);
-            readVersion = versions.getProperty("virgo.server.version");
-            stream.close();
-        } catch (IOException e) {
-            readVersion = "";
-            try {
-                if (stream != null) {
-                    stream.close();
-                }
-            } catch (IOException e1) {
-                // no-op
-            }
-        }
-        return readVersion;
-    }
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/internal/DojoTreeFormatter.java b/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/internal/DojoTreeFormatter.java
deleted file mode 100644
index 4c9cc8b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/internal/DojoTreeFormatter.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.web.internal;
-
-import java.util.List;
-
-import org.eclipse.virgo.kernel.shell.model.helper.ArtifactAccessor;
-import org.eclipse.virgo.kernel.shell.model.helper.ArtifactAccessorPointer;
-
-/**
- * <p>
- * DojoTreeFormatter knows how to format data from the RAM in to a friendly dojo format.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * DojoTreeFormatter is thread safe
- *
- */
-public interface DojoTreeFormatter {
-
-    /**
-     * Return a description of all the artifact types in the system that are user installed
-     * @param types list of type names to describe
-     * @return description
-     */
-    public String formatTypes(final List<String> types);
-
-    /**
-     * Return a description of all the artifacts supplied the system that are user installed and of the given type
-     * @param parent name of parent
-     * @param artifacts to describe
-     * @return description
-     */
-    public String formatArtifactsOfType(final String parent, final List<ArtifactAccessorPointer> artifacts);
-
-    /**
-     * Return detailed information on the given artifact
-     * @param parent name of parent
-     * @param artifact to describe
-     * @return description
-     */
-    public String formatArtifactDetails(final String parent, final ArtifactAccessor artifact);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/internal/DojoTreeJsonFormatter.java b/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/internal/DojoTreeJsonFormatter.java
deleted file mode 100644
index 6bba4d8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/internal/DojoTreeJsonFormatter.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.web.internal;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Map.Entry;
-
-import org.springframework.stereotype.Component;
-
-import org.eclipse.virgo.kernel.shell.model.helper.ArtifactAccessor;
-import org.eclipse.virgo.kernel.shell.model.helper.ArtifactAccessorPointer;
-
-/**
- * <p>
- * DojoTreeJsonFormatter takes in rich objects and formats them in to json for use by the artifacts dojo tree
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * DojoTreeJsonFormatter is thread safe
- *
- */
-@Component
-final class DojoTreeJsonFormatter implements DojoTreeFormatter {
-
-    private static final String SCOPED = "scoped";
-
-    private static final String ATOMIC = "atomic";
-
-    private static final String STATE = "State";
-
-    private static final String SPRING = "Spring";
-
-    private static final String USER_INSTALLED = "user.installed";
-
-    private static final String SCOPED_ATOMIC = "scoped-atomic";
-
-    private static final String BUNDLE_TYPE = "bundle";
-
-    private static final String CONFIG_TYPE = "configuration";
-
-    private static final String BUNDLE_LINK = "/admin/web/state/bundle.htm?name=%s&version=%s&region=%s";
-
-    private static final String CONFIG_LINK = "/admin/web/config/overview.htm#%s";
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public String formatTypes(final List<String> types) {
-        StringBuilder sb = new StringBuilder();
-        if(types != null) {
-            Collections.sort(types);
-            if (types.size() > 0) {
-                for (String type : types) {
-                    sb.append("{");
-                    sb.append("id: '").append(type).append("',");
-                    sb.append("label: '").append(type).append("s',");
-                    sb.append("type: '").append(type).append("',");
-                    sb.append("tooltip: 'all user installed ").append(type).append("s',");
-                    sb.append("children: []");
-                    sb.append("},");
-                }
-                sb.deleteCharAt(sb.length() - 1);
-            }
-        }
-        return sb.toString();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String formatArtifactsOfType(final String parent, final List<ArtifactAccessorPointer> artifacts) {
-        StringBuilder sb = new StringBuilder();
-        if(parent != null && artifacts != null) {
-            Collections.sort(artifacts);
-            
-            if (artifacts.size() > 0) {
-                for (ArtifactAccessorPointer artifact : artifacts) {
-                    FormattingData fd = new FormattingData(sb, parent, artifact.getType(), artifact.getName(), artifact.getVersion(), artifact.getRegion());
-                    renderComplexChild(fd, artifact.getState());
-                }
-                sb.deleteCharAt(sb.length() - 1);
-            }
-        }
-        return sb.toString();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String formatArtifactDetails(final String parent, final ArtifactAccessor artifact) {
-        StringBuilder sb = new StringBuilder();
-        if(parent != null && artifact != null) {
-            FormattingData fd = new FormattingData(sb, parent, artifact.getType(), artifact.getName(), artifact.getVersion(), artifact.getAttributes().get("Region").toString());
-            
-            if(BUNDLE_TYPE.equals(fd.type)) {
-                renderLinkChild(fd, String.format("View this %s artifact", fd.type), String.format(BUNDLE_LINK, fd.name, fd.version, fd.region));
-            } else if(CONFIG_TYPE.equals(fd.type)) {
-                renderLinkChild(fd, String.format("View this %s artifact", fd.type), String.format(CONFIG_LINK, fd.name));
-            }
-            
-            //Attributes
-            Map<String, Object> attributes = artifact.getAttributes();
-            processScopedAtomicAttributes(attributes);
-            String key, value;
-            Set<Entry<String, Object>> attributesEntrySet = attributes.entrySet();
-            if(attributesEntrySet.size() > 0) {
-                for (Entry<String, Object> attribute : attributesEntrySet) {
-                    key  = attribute.getKey();
-                    value = attribute.getValue().toString();
-                    if(!"false".equals(value)) {
-                        if(SCOPED.equalsIgnoreCase(key) || ATOMIC.equalsIgnoreCase(key) || SCOPED_ATOMIC.equalsIgnoreCase(key)) {
-                            renderCustomIconChild(fd, key, key);
-                        } else if("true".equalsIgnoreCase(value)) {
-                            renderSimpleChild(fd, key);
-                        } else if (STATE.equalsIgnoreCase(key)) {
-                            renderCustomIconChild(fd, value, value);
-                        } else {
-                            renderSimpleChild(fd, String.format("%s: %s", key, value));
-                        }
-                    }
-                    
-                }
-                sb.deleteCharAt(sb.length() - 1);
-            }
-            //Properties
-            Set<Entry<String, String>> propertiesEntrySet = artifact.getProperties().entrySet();
-            if(propertiesEntrySet.size() > 0) {
-                sb.append(",");
-                for (Entry<String, String> attribute : propertiesEntrySet) {
-                    key  = attribute.getKey();
-                    value = attribute.getValue();
-                    if(!"false".equals(value)) {
-                        if ("org.eclipse.virgo.web.contextPath".equalsIgnoreCase(key)) {
-                            renderLinkChild(fd, String.format("%s: %s", key, value), value);
-                        } else if(SPRING.equalsIgnoreCase(key)){
-                            renderCustomIconChild(fd, key, key);
-                        } else if(USER_INSTALLED.equalsIgnoreCase(key)){
-                            renderSimpleChild(fd, "User installed");
-                        } else if("true".equalsIgnoreCase(value)) {
-                            renderSimpleChild(fd, key);
-                        } else {
-                            renderSimpleChild(fd, String.format("%s: %s", key, value));
-                        }
-                    }
-                }
-                sb.deleteCharAt(sb.length() - 1);
-            }
-            
-            //Dependents
-            Set<ArtifactAccessorPointer> dependents = artifact.getDependents();
-            if(dependents.size() > 0) {
-                sb.append(",");
-                for (ArtifactAccessorPointer dependent : dependents) {
-                    fd = new FormattingData(sb, parent, dependent.getType(), dependent.getName(), dependent.getVersion(), dependent.getRegion());
-                    renderComplexChild(fd, dependent.getState());
-                }
-                sb.deleteCharAt(sb.length() - 1);
-            }
-        }
-        return sb.toString();
-    }
-    
-    private void processScopedAtomicAttributes(Map<String, Object> attributes) {
-        boolean containsAtomic = attributes.containsKey(ATOMIC);
-        boolean containsScoped = attributes.containsKey(SCOPED);
-
-        if(containsScoped && containsAtomic) {
-            Object scopedObject = attributes.get(SCOPED);
-            boolean scoped = Boolean.parseBoolean(scopedObject.toString());
-
-            Object atomicObject = attributes.get(ATOMIC);
-            boolean atomic = Boolean.parseBoolean(atomicObject.toString());
-            
-            if(scoped && atomic) {
-                attributes.remove(SCOPED);
-                attributes.remove(ATOMIC);
-                attributes.put(SCOPED_ATOMIC, "true");
-            } 
-        }
-    }
-
-    private void renderComplexChild(FormattingData fd, String state) {
-        StringBuilder sb = fd.stringBuilder;
-        sb.append("{");
-        sb.append("id: '").append(fd.parentKey).append(fd.type).append(fd.name).append(fd.version).append(fd.region).append("',");
-        sb.append("label: '").append(fd.name).append("-").append(fd.version).append("',");
-        sb.append("type: '").append(fd.type).append("',");
-        sb.append("name: '").append(fd.name).append("',");
-        sb.append("version: '").append(fd.version).append("',");
-        sb.append("region: '").append(fd.region).append("',");
-        sb.append("state: '").append(state).append("',");
-        sb.append("tooltip: '").append(fd.type).append(" artifact',");
-        sb.append("children: []");
-        sb.append("},");
-    }
-
-    private void renderSimpleChild(FormattingData fd, String label) {
-        StringBuilder sb = fd.stringBuilder;
-        sb.append("{");
-        sb.append("id: '").append(fd.parentKey).append(fd.type).append(fd.name).append(fd.version).append(fd.region).append(label).append("',");
-        sb.append("label: '").append(label).append("'");
-        sb.append("},");
-    }
-
-    private void renderCustomIconChild(FormattingData fd, String label, String iconClass) {
-        StringBuilder sb = fd.stringBuilder;
-        sb.append("{");
-        sb.append("id: '").append(fd.parentKey).append(fd.type).append(fd.name).append(fd.version).append(fd.region).append(label).append("',");
-        sb.append("label: '").append(label).append("',");
-        sb.append("icon: '").append(iconClass).append("'");
-        sb.append("},");
-    }
-
-    private void renderLinkChild(FormattingData fd, String linkText, String link) {
-        StringBuilder sb = fd.stringBuilder;
-        sb.append("{");
-        sb.append("id: '").append(fd.parentKey).append(fd.type).append(fd.name).append(fd.version).append(fd.region).append(linkText).append("',");
-        sb.append("label: '").append(linkText).append("',");
-        sb.append("link: '").append(link).append("'");
-        sb.append("},");
-    }
-    
-    /**
-     * 
-     * <p>
-     * FormattingData is a simple internal data holder as the same set of types are used all over the place
-     * </p>
-     *
-     * FormattingData is thread safe
-     *
-     */
-    private static class FormattingData {
-        
-        final StringBuilder stringBuilder;
-        final String parentKey;
-        final String type;
-        final String name;
-        final String version;
-        final String region;
-
-        public FormattingData(StringBuilder stringBuilder, String parentKey, String type, String name, String version, String region) {
-            this.stringBuilder = stringBuilder;
-            this.parentKey = parentKey;
-            this.type = type;
-            this.name = name;
-            this.version = version;
-            this.region = region;
-        }
-
-    }
-    
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/internal/DumpListFormatterUtil.java b/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/internal/DumpListFormatterUtil.java
deleted file mode 100644
index e529914..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/internal/DumpListFormatterUtil.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.web.internal;
-
-import java.util.Map;
-
-/**
- * <p>
- * DumpListFormatterUtil will get a list of the available dump folders and produce a map 
- * of folder names to formatted display values.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * Implementation of DumpListFormatterUtil should be thread safe
- *
- */
-public interface DumpListFormatterUtil {
-
-    /**
-     * If it is not possible to format the name of the dump folder, maybe because it has 
-     * been renamed, the name of the folder should be used as the display name.
-     * 
-     * @return Map of <Key, Display name>
-     */
-    public Map<String, String> getAvaliableDumps();
-    
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/internal/StandardDumpListFormatterUtil.java b/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/internal/StandardDumpListFormatterUtil.java
deleted file mode 100644
index 0fe08a6..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/java/org/eclipse/virgo/apps/admin/web/internal/StandardDumpListFormatterUtil.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.apps.admin.web.internal;
-
-import java.io.File;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import org.eclipse.virgo.apps.admin.core.DumpInspectorService;
-
-
-/**
- * <p>
- * DumpListFormatterUtil will get a list of the available dump folders and produce a map 
- * of folder names to formatted display values.
- * </p>
- *
- * <strong>Concurrent Semantics</strong><br />
- *
- * DumpListFormatterUtil is thread-safe
- *
- */
-@Component
-public final class StandardDumpListFormatterUtil implements DumpListFormatterUtil {
-    
-    private final DumpInspectorService dumpInspectorService;
-    
-    @Autowired
-    public StandardDumpListFormatterUtil(DumpInspectorService dumpInspectorService) {
-        this.dumpInspectorService = dumpInspectorService;
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public Map<String, String> getAvaliableDumps(){
-        List<File> avaliableDumps = this.dumpInspectorService.findAvaliableDumps();
-        Map<String, String> formattedDumps = new TreeMap<String, String>();
-        for(File dumpDirectory : avaliableDumps){
-                formattedDumps.put(dumpDirectory.getName(), dumpDirectory.getName());
-        }
-        return formattedDumps;
-    }
-    
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/resources/.gitignore b/org.eclipse.virgo.apps.admin.web/src/main/resources/.gitignore
deleted file mode 100644
index e69de29..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/resources/.gitignore
+++ /dev/null
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/admin-servlet.xml b/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/admin-servlet.xml
deleted file mode 100644
index 041e03f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/admin-servlet.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
-	xsi:schemaLocation="
-				http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-				http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
-
-	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
-
-	<bean id="ramAccessorHelper" class="org.eclipse.virgo.kernel.shell.model.helper.StandardRamAccessorHelper" />
-
-	<context:component-scan base-package="org.eclipse.virgo.apps.admin.web" />
-
-	<!-- VIEW CONFIG  -->
-	
-	<bean id="topViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
-		<property name="prefix" value="/WEB-INF/jsp/" />
-		<property name="suffix" value=".jsp" />
-	</bean>
-
-	<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
-		<property name="exceptionMappings">
-			<props>
-				<prop key="java.lang.Exception">error</prop>
-			</props>
-		</property>
-		<property name="warnLogCategory" value="org.eclipse.virgo.apps.admin.web" />
-	</bean>
-
-</beans>
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/applicationContext.xml b/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/applicationContext.xml
deleted file mode 100644
index f518d69..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/applicationContext.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-	xmlns:osgi="http://www.springframework.org/schema/osgi"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd
-		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
-
-	<osgi:reference id="artifactService" interface="org.eclipse.virgo.apps.admin.core.ArtifactService" />
-  
-    <osgi:reference id="dumpInspectorService" interface="org.eclipse.virgo.apps.admin.core.DumpInspectorService"/>
-    
-    <osgi:reference id="stateHolder" interface="org.eclipse.virgo.apps.admin.core.StateHolder"/>
-    
-	<osgi:reference id="configAdmin" interface="org.osgi.service.cm.ConfigurationAdmin" />
-	
-</beans>
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/artifact-overview.jsp b/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/artifact-overview.jsp
deleted file mode 100644
index 6842e2a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/artifact-overview.jsp
+++ /dev/null
@@ -1,250 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %><%-- 
---%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%-- 
---%><%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %><%-- 
---%><jsp:include page="top.jsp" />
-
-<h1>Artifact Console</h1>
-
-<c:if test="${!(empty result)}">
-	<p>The result of the last operation is: <c:out value="${result}" /></p>
-</c:if>
-
-<script language="JavaScript" type="text/javascript">
-/* <![CDATA[ */
-	function validateUploadForm() {
-		if (document.uploadForm.application.value == null || document.uploadForm.application.value == '') {
-			alert("Please select the artifact you would like to upload.");
-			document.uploadForm.application.focus();
-			return false;
-		} else {
-			return true;
-		}
-	}
-/* ]]> */
-</script>
-
-
-<form name="uploadForm" action="<c:url value="deploy.htm" />" method="post" enctype="multipart/form-data">
-	<table id="deploy_application" class="bordered-table">
-		<tr>
-			<th colspan="2">Select an artifact to upload and deploy to Virgo Web Server</th>
-		</tr>
-		<tr>
-			<td id="deploy_application_file" ><input id="deploy_application_file_field" type="file" name="application" size="80"/></td>
-			<td id="deploy_application_submit" ><input id="deploy_application_submit_button" type="submit" value="Upload" onclick="validateUploadForm"/></td>
-		</tr>
-	</table>     
-</form>
-<br/>
-
-<script type="text/javascript" language="Javascript">
-/* <![CDATA[ */
-	dojo.require("dijit.tree.ForestStoreModel");
-	dojo.require("dijit.Tree");
-	dojo.require("dojox.data.QueryReadStore");
-	dojo.require("dijit.form.Button");
-
-//Data Model
-	
-	var treeStore = new dojox.data.QueryReadStore({url: "data"});
-
-//Tree Model
-	
-	function loadChildren(parentItem, complete_cb, error_cb) {
-		if(this.store.hasAttribute(parentItem, "name")) {
-			requestType    = this.store.getValue(parentItem, "type");
-			requestName    = this.store.getValue(parentItem, "name");
-			requestVersion = this.store.getValue(parentItem, "version");
-			requestRegion = this.store.getValue(parentItem, "region");
-			requestParentId    = this.store.getValue(parentItem, "id");
-			this.store.fetch({ query: {parent: requestParentId, type: requestType, name: requestName, version: requestVersion, region: requestRegion}, onComplete: complete_cb, onError: error_cb});
-		} else if (this.store.hasAttribute(parentItem, "type")) {
-			requestType        = this.store.getValue(parentItem, "type");
-			requestParentId    = this.store.getValue(parentItem, "id");
-			this.store.fetch({ query: {parent: requestParentId, type: requestType}, onComplete: complete_cb, onError: error_cb});
-		}
-		return this.inherited(arguments);	
-	}
-	
-	dojo.declare("console.ForestStoreModel", dijit.tree.ForestStoreModel, { getChildren: loadChildren });
-
-//Tree Node
-	
-	function getNewImageNode(iconClass){
-		var newNode = dojo.doc.createElement('img');  // dojo.doc is the current document.
-		dojo.attr(newNode, "class", "dijitTreeIcon treeAtribute-" + iconClass.toLowerCase());
-		dojo.attr(newNode, "wairole", "dijitTreeIcon");
-		dojo.attr(newNode, "dojoattachpoint", "iconNode");
-		dojo.attr(newNode, "alt", "");
-		dojo.attr(newNode, "title", iconClass);
-		dojo.attr(newNode, "src", "../../js/dojo/resources/blank.gif");
-		dojo.attr(newNode, "role", "presentation");
-		return newNode;
-	}
-	
-	function nodePostCreate() {
-		if(!this.item.root){
-			dojo.attr(this.domNode, "id", this.item.i.id); //Set the id of any node other than the root
-
-			if(treeStore.hasAttribute(this.item, "children")) { //Add any extra icons
-	
-				var firstRenderedNode = this.domNode.firstElementChild;
-				if(firstRenderedNode != null){
-					
-					var nextNode = firstRenderedNode.lastElementChild;
-					if(nextNode != null){
-						
-						var goal = this.domNode.firstElementChild.lastElementChild.firstElementChild;
-						if(goal != null){
-							if(treeStore.hasAttribute(this.item, "tooltip")) {
-								dojo.attr(goal, "title", treeStore.getValue(this.item, "tooltip"));
-							} 		
-							if(treeStore.hasAttribute(this.item, "state")) {					
-								var newNode = getNewImageNode(treeStore.getValue(this.item, "state"));
-								dojo.place(newNode, goal, "after");
-							}	
-						}
-						var labelNode = this.domNode.firstElementChild.lastElementChild.lastElementChild;
-						if(labelNode != null){
-							if(treeStore.hasAttribute(this.item, "label") && treeStore.hasAttribute(this.item, "name") && treeStore.hasAttribute(this.item, "version")) {
-								labelNode.innerHTML = treeStore.getValue(this.item, "name") + ": <em>" + treeStore.getValue(this.item, "version") + "</em>";
-							} 
-						}
-						
-					}
-					
-				}
-				
-			}
-		
-		}
-		this.inherited(arguments);	
-	}
-	
-	dojo.declare("console.TreeNode", dijit._TreeNode, { postCreate: nodePostCreate });
-
-//Tree
-	
-	function getTreeIconClass(item, opened){
-		var nodeClass = "dijitLeaf";
-		if(treeStore.hasAttribute(item, "type")) {
-			nodeClass = "treeArtifact-" + treeStore.getValue(item, "type").toLowerCase();
-		} else if (treeStore.hasAttribute(item, "icon")){
-			nodeClass = "dijitLeaf treeAtribute-" + treeStore.getValue(item, "icon").toLowerCase();
-		}
-		return nodeClass;
-	}
-	
-	function getTreeLabelClass(item, opened){
-		var labelClass = "dijitTreeLabel";
-		if(treeStore.hasAttribute(item, "link")) {
-			labelClass = "dijitTreeLabel treeLink";
-		}
-		return labelClass;
-	}
-	
-	function newChild(args) {
-		return new console.TreeNode(args);	
-	}
-
-	dojo.declare("console.Tree", dijit.Tree, { 
-		_createTreeNode: newChild, 
-		getIconClass: getTreeIconClass,
-		getLabelClass: getTreeLabelClass }
-	);
-
-//General page functions
-	
-	function setButtonsDisabled(disabled) {
-		startButton.setDisabled(disabled);
-		stopButton.setDisabled(disabled);
-		refreshButton.setDisabled(disabled);
-		uninstallButton.setDisabled(disabled);
-	};
-	
-	function artifactOperation(operation) {
-		setButtonsDisabled(true);
-		dojo.xhrGet({
-		url: "do/" + operation,
-		content: {
-			type: treeStore.getValue(lastItem, "type"),
-			name: treeStore.getValue(lastItem, "name"),
-			version: treeStore.getValue(lastItem, "version"),
-			region: treeStore.getValue(lastItem, "region")
-			},
-		handle: function () {
-				location = "/admin/web/artifact/overview.htm";
-			}
-		});	
-	}
-
-	function itemClicked(item) {
-		if (treeStore.hasAttribute(item, "link")) {
-			location = treeStore.getValue(item, "link");
-		} else {
-			if (treeStore.hasAttribute(item, "type") && treeStore.hasAttribute(item, "name")) {
-				setButtonsDisabled(false);
-				lastItem = item;
-			} else {
-				setButtonsDisabled(true);
-			}
-		}
-	}	
-	
-/* ]]> */
-</script>
-
-<div dojoType="console.ForestStoreModel" store="treeStore" childrenAttrs="children" jsId="treeModel"> </div>
-
-<div class="consoleContentPane">
-
-	<div jsId="startButton" dojoType="dijit.form.Button" disabled="true">
-		Start
-		<script type="dojo/connect" event="onClick">
-			artifactOperation("start");
-		</script>
-	</div>  
-	
-	<div jsId="stopButton" dojoType="dijit.form.Button" disabled="true">
-		Stop
-		<script type="dojo/connect" event="onClick">
-			artifactOperation("stop");
-		</script>
-	</div>  
-	
-	<div jsId="refreshButton" dojoType="dijit.form.Button" disabled="true">
-		Refresh
-		<script type="dojo/connect" event="onClick">
-			artifactOperation("refresh");
-		</script>
-	</div>  
-	
-	<div jsId="uninstallButton" dojoType="dijit.form.Button" disabled="true">
-		Uninstall
-		<script type="dojo/connect" event="onClick">
-			artifactOperation("uninstall");
-		</script>
-	</div>
-	<div class="consoleFootnote">
-		Select an Artifact in the tree to perform an action upon it.
-	</div>
-	<div id="preloader" class="consoleLoading">
-		Loading the Artifact Tree...	
-	</div>
-	<p>
-		<div dojoType="console.Tree" model="treeModel" jsId="itemTree" persist="false"  showRoot="false">
-			<script type="dojo/connect" event="onClick" args="item">
-				itemClicked(item);
-			</script>
-			<script type="dojo/connect" event="onClose" args="item">
-				itemClicked(item);
-			</script>
-			<script type="dojo/connect" event="onOpen" args="item">
-                dojo.style("preloader", "display", "none");
-				itemClicked(item);
-			</script>
-		</div>
-	</p>
-</div>
-
-<jsp:include page="bottom.jsp" />
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/bottom.jsp b/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/bottom.jsp
deleted file mode 100644
index 2e4d64b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/bottom.jsp
+++ /dev/null
@@ -1,15 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>
-
-        </div> <!-- /content -->
-
-    </div> <!-- /container -->
-    
-    <div id="footer-wrapper">
-      <div id="footer-left">&copy; Copyright 2008, 2011 VMware Inc. Licensed under the Eclipse Public License v1.0.</div>
-      <div id="footer-right"></div> 
-    </div>
-
-  </div> <!-- /page-->
-
-</body>
-</html>
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/config-overview.jsp b/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/config-overview.jsp
deleted file mode 100644
index c50fa17..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/config-overview.jsp
+++ /dev/null
@@ -1,55 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><%-- 
---%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%-- 
---%><jsp:include page="top.jsp" />
-
-<script type="text/javascript">
-	dojo.require("dijit.TitlePane");
-</script>
-
-<h1>Configuration Admin - Overview</h1>
-
-<p>
-	Configuration sets present in the system.
-	<div class="consoleFootnote">Note: A Configuration artifact must be in the 'Active' state to be visible in config admin.</div>
-</p>
-
-<div class="consoleContentPaneMinimal">
-	<c:forEach var="config" items="${configurations}">
-		
-		<div dojoType="dijit.TitlePane" id="${config.key}" title="${config.key}" open="false">
-			<div class="consoleContentPaneSpace">
-				<table id="config-${config.key}">
-					<tr class="sublevel1-odd">
-						<th>Property</th>
-						<th>Value</th>
-					</tr>
-					<c:forEach var="prop" items="${config.value}" varStatus="loopStatus">
-			<!-- ROW COLOURING -->
-						<c:set var="rowStyle" value="odd" scope="page" />
-						<c:if test="${(loopStatus.index % 2) eq 0}">
-							<c:set var="rowStyle" value="even" scope="page" />
-						</c:if>
-			<!-- DISPLAY THE NEXT ROW -->
-						<tr class="sublevel1-${rowStyle}">
-							<td id="key">${prop.key}</td>
-							<td id="value">${prop.value}</td>
-						</tr>
-					</c:forEach>
-				</table>
-			</div>
-		</div>
-	
-	</c:forEach>
-</div>
-
-<script type="text/javascript" >
-	if(location.hash){
-		var paneId = location.hash.replace("#", "");
-		pane = dojo.byId(paneId);
-		if(pane){
-			dojo.attr(pane, "open", "true");
-		}
-	}
-</script>
-
-<jsp:include page="bottom.jsp" />
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/dump-overview.jsp b/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/dump-overview.jsp
deleted file mode 100644
index 2c46483..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/dump-overview.jsp
+++ /dev/null
@@ -1,74 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><%-- 
---%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%-- 
---%>
-
-<jsp:include page="top.jsp" />
-
-<c:choose>
-		<c:when test="${empty formattedSelectedDump}">
-			<h1>Dump Inspector</h1>
-		</c:when>
-		<c:otherwise>
-			<h1>Dump Inspector: '${formattedSelectedDump}'</h1>
-		</c:otherwise>
-</c:choose>
-
-<c:if test="${empty dumps}">
-	There are no dumps available in the system for viewing.
-</c:if>
-
-<c:if test="${!empty dumps}">
-	
-	<table>
-		<tr>
-			<form name="dumpForm" action="<c:url value="entry.htm" />" method="get">
-	            <td>
-	                Dumps available for inspection:<br/>
-			        <select class="dumpSelector" name="dumpID">
-				        <c:forEach var="dump" items="${dumps}">
-					         <c:choose>
-	                            <c:when test="${selectedDump eq dump.key}">
-	                                <option selected value="${dump.key}">${dump.value}</option>
-	                            </c:when>
-	                            <c:otherwise>
-	                                <option value="${dump.key}">${dump.value}</option>
-	                            </c:otherwise>
-	                        </c:choose>
-				        </c:forEach>
-			        </select>
-			        <br/> 
-			        <input id="dump_selector_submit" type="submit" value="Select Dump"/>
-	            </td>
-			    <td>
-			        Dump entries available for inspection:<br/>
-			        <select class="dumpSelector" name="dumpEntryName">
-				        <c:forEach var="entry" items="${entries}">
-	                         <c:choose>
-	                            <c:when test="${selectedEntry eq entry}">
-	                                <option selected value="${entry}">${entry}</option>
-	                            </c:when>
-	                            <c:otherwise>
-	                                <option value="${entry}">${entry}</option>
-	                            </c:otherwise>
-	                        </c:choose>
-				        </c:forEach>
-			        </select>
-			        <br/>
-	                <input id="dump_selector_submit" type="submit" value="Select Entry"/>
-	            </td>
-	        </form>
-		</tr>
-	
-	</table>
-	
-	<c:if test="${!empty inspection}">
-		<h2>Dump Entry Viewer</h2>
-		<c:if test="${!empty selectedEntry}">
-			<p>Viewing Entry '${selectedEntry}'.</p>
-		</c:if>
-		<div class="inspection-box">${inspection}</div>
-	</c:if>
-	
-</c:if>
-
-<jsp:include page="bottom.jsp" />
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/error.jsp b/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/error.jsp
deleted file mode 100644
index 9ad2685..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/error.jsp
+++ /dev/null
@@ -1,17 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %><%-- 
---%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%-- 
---%><%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><%-- 
---%><jsp:include page="top.jsp" />
-
-<h1 class="title">Virgo Web Server</h1>
-<p>
-	An unexpected error occurred while performing your requested operation.
-	Please <a href="<c:url value="/web/info/overview.htm" />">return to the main page</a> and
-	try again.
-</p>
-<p>
-	For further details consult the log and event files in the 
-	'<em>serviceability</em>' directory of the installed server.
-</p>
-
-<jsp:include page="bottom.jsp" />
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/info-overview.jsp b/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/info-overview.jsp
deleted file mode 100644
index 50f006b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/info-overview.jsp
+++ /dev/null
@@ -1,47 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %><%-- 
---%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%-- 
---%><%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><%-- 
---%><%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %><%-- 
---%><jsp:include page="top.jsp" />
-
-<h1>Admin Console - Information</h1>
-
-<p>Congratulations on installing the Virgo Web Server. This is the Web console provided with the server to allow management of a single instance.</p>
-
-<h2>Documentation</h2>
-<p>Documentation is available on-line for the Virgo Web Server.</p>
-<ul>
-  <li><a href="http://www.eclipse.org/virgo/documentation" target="_blank" title="Virgo Server - Documentation">Virgo Server - Documentation</a>, includes links to the User, Programmer and Application Development Guides</li>
-	<li><a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/index.html" target="_blank" title="Spring Framework">Spring Framework Documentation</a>.</li>
-	<li><a href="http://static.springframework.org/osgi/docs/current/reference/html/" target="_blank" title="Spring Dynamic Modules">Spring Dynamic Modules Documentation</a>.</li>
-</ul>
-
-<h2>Server Properties</h2>
-<table id="properties" class="bordered-table">
-	<tr class="sublevel1-even">
-		<th>Name</th>
-		<th>Value</th>
-	</tr>
-	<c:choose>
-		<c:when test="${empty properties}">
-			<tr class="name-sublevel1-odd">
-				<td id="property_null" colspan="2">No properties have been registered.</td>
-			</tr>
-		</c:when>
-		<c:otherwise>
-			<c:forEach var="property" items="${properties}" varStatus="loopStatus">
-				<c:set var="rowStyle" value="even" scope="page" />
-				<c:if test="${(loopStatus.index % 2) eq 0}">
-					<c:set var="rowStyle" value="odd" scope="page" />
-				</c:if>
-				<tr class="sublevel1-${rowStyle}">
-					<td id="property_key">${property.key}</td>
-					<td id="property_value">${property.value}</td>
-				</tr>
-				<c:remove var="rowStyle" />
-			</c:forEach>
-		</c:otherwise>
-	</c:choose>
-</table>
-
-<jsp:include page="bottom.jsp" />
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-bundle.jsp b/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-bundle.jsp
deleted file mode 100644
index 2201c82..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-bundle.jsp
+++ /dev/null
@@ -1,325 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><%-- 
---%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%-- 
---%><%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %><%-- 
---%><jsp:include page="top.jsp" />
-
-<script type="text/javascript">
-	dojo.require("dijit.TitlePane");
-</script>
-
-<jsp:include page="state-header.jsp" />
-
-<h1>${title}</h1>
-
-<c:set var="hostsFragmentsMessage" value="NA" />
-<c:set var="hostsFragments" value="" />
-<c:choose>
-	<c:when test="${!empty bundle.hosts}">
-		<c:set var="hostsFragmentsMessage" value="Host: " />
-		<c:set var="hostsFragments" value="${bundle.hosts}" />
-	</c:when>
-	<c:when test="${!empty bundle.fragments}">
-		<c:set var="hostsFragmentsMessage" value="Fragments: " />
-		<c:set var="hostsFragments" value="${bundle.fragments}" />						
-	</c:when>
-</c:choose>
-
-<table id="bundles-overview" class="bordered-table">
-	<tr class="sublevel1-odd">
-		<td>Bundle Symbolic name</td>
-		<td>${bundle.symbolicName}</td>
-	</tr>
-	<tr class="sublevel1-even">
-		<td>Bundle Version</td>
-		<td>${bundle.version}</td>
-	</tr>
-	<tr class="sublevel1-odd">
-		<td>Bundle ID</td>
-		<td>${bundle.bundleId}</td>
-	</tr>
-	<tr class="sublevel1-even">
-		<td>Region</td>
-		<td>${bundle.region}</td>
-	</tr>
-	<tr class="sublevel1-odd">
-		<td>Hosts/Fragments</td>
-		<td>
-			${hostsFragmentsMessage}
-			<c:forEach var="hfBundle" items="${hostsFragments}">
-				<a href="<c:url value="bundle.htm?id=${hfBundle.bundleId}&state=${state}" />">${hfBundle.bundleId} (${hfBundle.symbolicName}-${hfBundle.version})</a>
-			</c:forEach>
-		</td>
-	</tr>
-	<c:choose>
-		<c:when test="${state eq 'Live'}">
-			<tr class="sublevel1-even">
-				<td>Spring powered</td>
-				<c:choose>
-					<c:when test="${empty bundle.springName}">
-						<td>No</td>
-					</c:when>
-					<c:otherwise>
-						<td>Yes</td>
-					</c:otherwise>
-				</c:choose>
-				
-			</tr>
-			<tr class="sublevel1-odd">
-				<td>State</td>
-				<td><c:choose><c:when test="${bundle.resolved}">${bundle.state}</c:when><c:otherwise><a href="<c:url value="resolve.htm?id=${bundle.bundleId}&state=${state}" />">${bundle.state}</a></c:otherwise></c:choose></td>
-			</tr>
-		</c:when>
-		<c:otherwise>
-			<tr class="sublevel1-even">
-				<td>Spring powered</td>
-				<td>NA</td>
-			</tr>
-			<tr class="sublevel1-odd">
-				<td>State</td>
-				<td><c:choose><c:when test="${bundle.resolved}">Resolved</c:when><c:otherwise><a href="<c:url value="resolve.htm?id=${bundle.bundleId}&state=${state}" />">Unresolved</a></c:otherwise></c:choose></td>
-			</tr>
-		</c:otherwise>
-	</c:choose>
-	<tr class="sublevel1-even">
-		<td>Bundle Location</td>
-		<td>${bundle.bundleLocation}</td>
-	</tr>
-</table>
-	
-	<c:set var="imports" value="${bundle.importPackages}" />
-	<div dojoType="dijit.TitlePane" title="Imported Packages (${fn:length(imports)})" open="false">
-		<div class="consoleContentPaneSpace">
-			<table id="imports-detail" >
-				<tr class="sublevel1-odd">
-					<th>Package Name</th>
-					<th>Version Constraint</th>
-					<th>Provider</th>
-					<th>Import Directives</th>
-					<th>Import Attributes</th>
-				</tr>
-				<c:forEach var="_import" items="${imports}" varStatus="loopStatus">
-		<!-- CREATE THE PROVIDER STRING -->
-					<c:choose>
-						<c:when test="${_import.provider eq null}">
-							<c:set var="provider" value=""/>
-						</c:when>
-						<c:otherwise>
-							<c:set var="provider" value="${_import.provider.exportingBundle.bundleId} (${_import.provider.exportingBundle.symbolicName} - ${_import.provider.exportingBundle.version})"/>
-						</c:otherwise>
-					</c:choose>
-		<!-- ROW COLOURING -->
-					<c:set var="rowStyle" value="odd" scope="page" />
-					<c:if test="${(loopStatus.index % 2) eq 0}">
-						<c:set var="rowStyle" value="even" scope="page" />
-					</c:if>
-		<!-- DISPLAY THE NEXT ROW -->
-					<tr class="sublevel1-${rowStyle}">
-						<td><a href="<c:url value="packages.htm?name=${_import.packageName}&state=${state}" />">${_import.packageName}</a></td>
-						<td>${_import.versionConstraint}</td>
-						<td><a href="<c:url value="bundle.htm?id=${_import.provider.exportingBundle.bundleId}&state=${state}" />">${provider}</a></td>
-						<td>
-							<c:forEach var="directive" items="${_import.directives}">
-								${directive.key}:=${directive.value}<br/>
-							</c:forEach>
-						</td>
-						<td>
-							<c:forEach var="attribute" items="${_import.attributes}">
-								${attribute.key}=${attribute.value}<br/>
-							</c:forEach>
-						</td>
-					</tr>
-				</c:forEach>
-			</table>
-		</div>
-	</div>
-	
-	<c:set var="exports" value="${bundle.exportPackages}" />
-	<div dojoType="dijit.TitlePane" title="Exported Packages (${fn:length(exports)})" open="false">
-		<div class="consoleContentPaneSpace">
-			<table id="exports-detail" >
-				<tr class="sublevel1-odd">
-					<th>Package Name</th>
-					<th>Export Version</th>
-					<th>Consumers</th>
-					<th>Export Directives</th>
-					<th>Export Attributes</th>
-				</tr>
-				<c:forEach var="export" items="${exports}" varStatus="loopStatus">
-		<!-- ROW COLOURING -->
-					<c:set var="rowStyle" value="odd" scope="page" />
-					<c:if test="${(loopStatus.index % 2) eq 0}">
-						<c:set var="rowStyle" value="even" scope="page" />
-					</c:if>
-		<!-- DISPLAY THE NEXT ROW -->
-					<tr class="sublevel1-${rowStyle}">
-						<td><a href="<c:url value="packages.htm?name=${export.packageName}&state=${state}" />">${export.packageName}</a></td>
-						<td>${export.version}</td>
-						<td>${fn:length(export.consumers)}</td>
-						<td>
-							<c:forEach var="directive" items="${export.directives}">
-								${directive.key}:=${directive.value}<br/>
-							</c:forEach>
-						</td>
-						<td>
-							<c:forEach var="attribute" items="${export.attributes}">
-								${attribute.key}=${attribute.value}<br/>
-							</c:forEach>
-						</td>
-					</tr>
-				</c:forEach>
-			</table>
-		</div>
-	</div>
-	
-	<c:set var="requires" value="${bundle.requiredBundles}" />
-	<div dojoType="dijit.TitlePane" title="Required Bundles (${fn:length(requires)})" open="false">
-		<div class="consoleContentPaneSpace">
-			<table id="requires-detail" >
-				<tr class="sublevel1-odd">
-					<th>Bundle Name</th>
-					<th>Version</th>
-					<th>Provider</th>
-					<th>Directives</th>
-					<th>Attributes</th>
-				</tr>
-				<c:forEach var="require" items="${requires}" varStatus="loopStatus">
-		<!-- CREATE THE PROVIDER STRING -->
-					<c:choose>
-						<c:when test="${require eq null}">
-							<c:set var="provider" value=""/>
-						</c:when>
-						<c:otherwise>
-							<c:set var="provider" value="${require.provider.bundleId} (${require.provider.symbolicName} - ${require.provider.version})"/>
-						</c:otherwise>
-					</c:choose>
-		<!-- ROW COLOURING -->
-					<c:set var="rowStyle" value="odd" scope="page" />
-					<c:if test="${(loopStatus.index % 2) eq 0}">
-						<c:set var="rowStyle" value="even" scope="page" />
-					</c:if>
-		<!-- DISPLAY THE NEXT ROW -->
-					<tr class="sublevel1-${rowStyle}">
-						<td><a href="<c:url value="bundle.htm?id=${require.provider.bundleId}&state=${state}" />">${require.requiredBundleName}</a></td>
-						<td>${require.versionConstraint}</td>
-						<td>
-							<c:if test="${require ne null}">
-								<a href="<c:url value="bundle.htm?id=${require.provider.bundleId}&state=${state}" />">${require.provider.bundleId} (${require.provider.symbolicName} - ${require.provider.version})</a>
-							</c:if>
-						</td>
-						<td>
-							<c:forEach var="directive" items="${require.directives}">
-								${directive.key}:=${directive.value}<br/>
-							</c:forEach>
-						</td>
-						<td>
-							<c:forEach var="attribute" items="${require.attributes}">
-								${attribute.key}=${attribute.value}<br/>
-							</c:forEach>
-						</td>
-					</tr>
-				</c:forEach>
-			</table>
-		</div>
-	</div>
-		
-	<c:if test="${state eq 'Live'}">
-		<c:if test="${!empty bundle.springName && !empty bundle.beans }">
-			<div dojoType="dijit.TitlePane" title="Spring Context (${fn:length(bundle.beans)} beans)" open="false">
-				<div class="consoleContentPaneSpace">
-					<p>${bundle.springName}</p>
-					<table id="spring-detail">
-						<tr class="sublevel1-odd">
-							<th>Bean Name</th>
-							<th>Class</th>
-							<th>Singleton</th>
-							<th>Prototype</th>
-						</tr>
-						<c:forEach var="bean" items="${bundle.beans}" varStatus="loopStatus">
-			<!-- ROW COLOURING -->
-							<c:set var="rowStyle" value="odd" scope="page" />
-							<c:if test="${(loopStatus.index % 2) eq 0}">
-								<c:set var="rowStyle" value="even" scope="page" />
-							</c:if>
-			<!-- DISPLAY THE NEXT ROW -->
-							<tr class="sublevel1-${rowStyle}">
-								<td>${bean.name}</td>
-								<td>${bean.type}</td>
-								<td>${bean.prototype}</td>
-								<td>${bean.singleton}</td>
-							</tr>
-						</c:forEach>
-					</table>
-				</div>
-			</div>
-		</c:if>
-	
-		<c:set var="consumedServices" value="${bundle.importedServices}" />			
-		<div dojoType="dijit.TitlePane" title="Consumed Services (${fn:length(consumedServices)})" open="false">
-			<div class="consoleContentPaneMinimal">
-			
-				<c:forEach var="service" items="${consumedServices}">
-					<c:set var="titleString" value="Service ${service.serviceId} provided by bundle ${service.provider.bundleId} - ObjectClass ${service.formattedObjectClass}" />
-					<div dojoType="dijit.TitlePane" title="${titleString}" open="false">
-						<div class="consoleContentPaneSpace">
-							<p>Provider <a href="<c:url value="bundle.htm?id=${service.provider.bundleId}&state=${state}" />">${service.provider.bundleId}</a> ${service.provider.symbolicName}-${service.provider.version}</p>
-							<table id="service-properties">
-								<tr class="sublevel1-odd">
-									<th>Property</th>
-									<th>Value</th>
-								</tr>
-								<c:forEach var="prop" items="${service.properties}" varStatus="loopStatus">
-						<!-- ROW COLOURING -->
-									<c:set var="rowStyle" value="odd" scope="page" />
-									<c:if test="${(loopStatus.index % 2) eq 0}">
-										<c:set var="rowStyle" value="even" scope="page" />
-									</c:if>
-						<!-- DISPLAY THE NEXT ROW -->
-									<tr class="sublevel1-${rowStyle}">
-										<td id="key">${prop.key}</td>
-										<td id="value">${prop.value}</td>
-									</tr>
-								</c:forEach>
-							</table>
-						</div>
-					</div>
-				</c:forEach>
-			
-			</div>
-		
-		</div>
-		
-		<c:set var="providedServices" value="${bundle.exportedServices}" />
-		<div dojoType="dijit.TitlePane" title="Published Services (${fn:length(providedServices)})" open="false">
-			<div class="consoleContentPaneMinimal">
-			
-				<c:forEach var="service" items="${providedServices}">
-					<c:set var="titleString" value="Service ${service.serviceId} - ObjectClass ${service.formattedObjectClass}" />
-					<div dojoType="dijit.TitlePane" title="${titleString}" open="false">
-						<div class="consoleContentPaneSpace">
-							<table id="service-properties">
-								<tr class="sublevel1-odd">
-									<th>Property</th>
-									<th>Value</th>
-								</tr>
-								<c:forEach var="prop" items="${service.properties}" varStatus="loopStatus">
-						<!-- ROW COLOURING -->
-									<c:set var="rowStyle" value="odd" scope="page" />
-									<c:if test="${(loopStatus.index % 2) eq 0}">
-										<c:set var="rowStyle" value="even" scope="page" />
-									</c:if>
-						<!-- DISPLAY THE NEXT ROW -->
-									<tr class="sublevel1-${rowStyle}">
-										<td id="key">${prop.key}</td>
-										<td id="value">${prop.value}</td>
-									</tr>
-								</c:forEach>
-							</table>
-						</div>
-					</div>
-					
-				</c:forEach>
-			</div>
-		</div>
-	</c:if>
-
-<jsp:include page="bottom.jsp" />
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-bundles.jsp b/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-bundles.jsp
deleted file mode 100644
index b23f1de..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-bundles.jsp
+++ /dev/null
@@ -1,111 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><%-- 
---%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%-- 
---%>
-<jsp:include page="top.jsp" />
-
-<jsp:include page="state-header.jsp" />
-
-<h1>State Overview - Bundles</h1>
-
-<table id="bundles-overview" class="bordered-table">
-	<tr>
-		<th>Bundle Id</th>
-		<th></th>
-		<th>Bundle Symbolic Name</th>
-		<th>Bundle Version</th>
-		<th>Hosts/Fragments</th>
-		<th>State</th>
-	</tr>
-	<c:choose>
-		<c:when test="${empty bundles}">
-			<tr class="name-sublevel1-even">
-				<td id="deploy_application_null" colspan="6">No state information available.</td>
-			</tr>
-		</c:when>
-		<c:otherwise>
-
-			<c:forEach var="bundle" items="${bundles}" varStatus="loopStatus">
-<!-- CREATE THE HOSTS FRAGMENTS STRING -->
-				<c:set var="hostsFragmentsMessage" value="" />
-				<c:set var="hostsFragments" value="" />
-				<c:choose>
-					<c:when test="${!empty bundle.hosts}">
-						<c:set var="hostsFragmentsMessage" value="Host: " />
-						<c:set var="hostsFragments" value="${bundle.hosts}" />
-					</c:when>
-					<c:when test="${!empty bundle.fragments}">
-						<c:set var="hostsFragmentsMessage" value="Fragments: " />
-						<c:set var="hostsFragments" value="${bundle.fragments}" />						
-					</c:when>
-				</c:choose>
-<!-- CREATE THE RESOLVE STRING -->
-				<c:choose>
-					<c:when test="${bundle.resolved}">
-						<c:set var="resolveMessage" value="Resolved" />
-					</c:when>
-					<c:otherwise>
-						<c:set var="resolveMessage" value="Unresolved" />
-					</c:otherwise>
-				</c:choose>
-<!-- DO THE ROW COLOURING -->
-					<c:set var="rowStyle" value="odd" scope="page" />
-					<c:if test="${(loopStatus.index % 2) eq 0}">
-						<c:set var="rowStyle" value="even" scope="page" />
-					</c:if>
-<!-- PRINT OUT A LIVE OR STATIC TABLE ROW -->
-					<c:choose>
-						<c:when test="${state eq 'Live'}">			
-							<tr class="sublevel1-${rowStyle}">
-								<td id="bundle-id"><a href="<c:url value="bundle.htm?id=${bundle.bundleId}&state=${state}" />">${bundle.bundleId}</a></td>
-								<td class="table-icon" id="bundle-spring"><c:if test="${!empty bundle.springName}"><img src="<c:url value="/images/spring.png"/>" height="16" width ="16" alt="S" /></c:if></td>
-								<td id="bundle-name">${bundle.symbolicName}</td>
-								<td id="bundle-version">${bundle.version}</td>
-						    	<td id="bundle-hf">${hostsFragmentsMessage}
-									<c:forEach var="hfBundle" items="${hostsFragments}">
-										<a href="<c:url value="bundle.htm?id=${hfBundle.bundleId}&state=${state}" />">${hfBundle.bundleId}</a>
-									</c:forEach>
-						    	</td>
-						    	<td id="bundle-resolved">
-						    		<c:choose>
-						    			<c:when test="${bundle.resolved}">
-						    				${bundle.state}
-						    			</c:when>
-						    			<c:otherwise>
-						    				<a href="<c:url value="resolve.htm?id=${bundle.bundleId}&state=${state}" />">${bundle.state}</a>
-						    			</c:otherwise>
-						    		</c:choose>
-						    	</td>
-							</tr>
-						</c:when>
-						<c:otherwise>	
-							<tr class="sublevel1-${rowStyle}">
-								<td id="bundle-id"><a href="<c:url value="bundle.htm?id=${bundle.bundleId}&state=${state}" />">${bundle.bundleId}</a></td>
-								<td id="bundle-spring" class="table-icon"></td>
-								<td id="bundle-name">${bundle.symbolicName}</td>
-								<td id="bundle-version">${bundle.version}</td>
-						    	<td id="bundle-hf">${hostsFragmentsMessage}
-									<c:forEach var="hfBundle" items="${hostsFragments}">
-										<a href="<c:url value="bundle.htm?id=${hfBundle.bundleId}&state=${state}" />">${hfBundle.bundleId}</a>
-									</c:forEach>
-						    	</td>
-						    	<td id="bundle-resolved">
-						    		<c:choose>
-						    			<c:when test="${bundle.resolved}">
-						    				${resolveMessage}
-						    			</c:when>
-						    			<c:otherwise>
-						    				<a href="<c:url value="resolve.htm?id=${bundle.bundleId}&state=${state}" />">${resolveMessage}</a>
-						    			</c:otherwise>
-						    		</c:choose>
-						    	</td>
-							</tr>
-						</c:otherwise>
-					</c:choose>
-				<c:remove var="rowStyle" />
-			</c:forEach>
-		     
-		</c:otherwise>
-	</c:choose>
-</table>
-
-<jsp:include page="bottom.jsp" />
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-header.jsp b/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-header.jsp
deleted file mode 100644
index f242517..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-header.jsp
+++ /dev/null
@@ -1,42 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><%-- 
---%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%-- 
---%>
-<!-- 
-
--->
-<div class="stateHeader">
-	
-	<div class="stateNavigation">
-		<a href="<c:url value="bundles.htm?state=${state}" />">Bundles Overview</a>
-		<c:if test="${state eq 'Live'}">
-			<a href="<c:url value="services.htm" />">Services Overview</a>
-		</c:if>
-	</div>
-	<form class="dumpStateSelector" name="dumpForm" action="<c:url value="bundles.htm" />" method="get">
-		<fieldset>
-			Viewing state '${fState}':  
-			<select name="state">
-				<option value="Live">Live</option>
-				<c:forEach var="source" items="${stateSources}">
-					<c:choose>
-						<c:when test="${source.key eq state}">
-							<option selected value="${source.key}">${source.value}</option>
-						</c:when>
-						<c:otherwise>
-							<option value="${source.key}">${source.value}</option>
-						</c:otherwise>
-					</c:choose>
-				</c:forEach>
-			</select>
-			<input id="state_selector_submit" type="submit" value="Go"/>
-		</fieldset>
-	</form>
-	<form class="search" name="searchForm" action="<c:url value="search.htm" />" method="get">
-		<fieldset>
-			Search: 
-			<input type="hidden" name="state" value="${state}" />
-			<input type="text" name="term" /> 
-			<input type="submit" name="submit" value="Go" />
-		</fieldset>
-	</form>
-</div>
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-packages.jsp b/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-packages.jsp
deleted file mode 100644
index 2f458c8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-packages.jsp
+++ /dev/null
@@ -1,92 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><%-- 
---%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%-- 
---%>
-<jsp:include page="top.jsp" />
-
-<script type="text/javascript">
-	dojo.require("dijit.TitlePane");
-</script>
-
-<jsp:include page="state-header.jsp" />
-
-<h1>${title}</h1>
-
-<div dojoType="dijit.TitlePane" title="Exporters" open="true">
-	<div class="consoleContentPaneSpace">
-		<table id="exports-detail" >
-			<tr class="sublevel1-odd">
-				<th>Bundle Id</th>
-				<th>Bundle Symbolic Name</th>
-				<th>Bundle Version</th>
-				<th>Export Version</th>
-				<th>Export Directives</th>
-				<th>Export Attributes</th>
-			</tr>
-			<c:forEach var="export" items="${exporters}" varStatus="loopStatus">
-	<!-- ROW COLOURING -->
-				<c:set var="rowStyle" value="odd" scope="page" />
-				<c:if test="${(loopStatus.index % 2) eq 0}">
-					<c:set var="rowStyle" value="even" scope="page" />
-				</c:if>
-	<!-- DISPLAY THE NEXT ROW -->
-				<tr class="sublevel1-${rowStyle}">
-					<td><a href="<c:url value="bundle.htm?id=${export.exportingBundle.bundleId}&state=${state}" />">${export.exportingBundle.bundleId}</a></td>
-					<td>${export.exportingBundle.symbolicName}</td>
-					<td>${export.exportingBundle.version}</td>
-					<td>${export.version}</td>
-					<td>
-						<c:forEach var="directive" items="${export.directives}">
-							${directive.key}:=${directive.value}<br/>
-						</c:forEach>
-					</td>
-					<td>
-						<c:forEach var="attribute" items="${export.attributes}">
-							${attribute.key}=${attribute.value}<br/>
-						</c:forEach>
-					</td>
-				</tr>
-			</c:forEach>
-		</table>
-	</div>
-</div>
-
-<div dojoType="dijit.TitlePane" title="Importers" open="false">
-	<div class="consoleContentPaneSpace">
-		<table id="imports-detail" >
-			<tr class="sublevel1-odd">
-				<th>Bundle Id</th>
-				<th>Bundle Symbolic Name</th>
-				<th>Bundle Version</th>
-				<th>Import Version Constraint</th>
-				<th>Import Directives</th>
-				<th>Import Attributes</th>
-			</tr>
-			<c:forEach var="_import" items="${importers}" varStatus="loopStatus">
-	<!-- ROW COLOURING -->
-				<c:set var="rowStyle" value="odd" scope="page" />
-				<c:if test="${(loopStatus.index % 2) eq 0}">
-					<c:set var="rowStyle" value="even" scope="page" />
-				</c:if>
-	<!-- DISPLAY THE NEXT ROW -->
-				<tr class="sublevel1-${rowStyle}">
-					<td><a href="<c:url value="bundle.htm?id=${_import.importingBundle.bundleId}&state=${state}" />">${_import.importingBundle.bundleId}</a></td>
-					<td>${_import.importingBundle.symbolicName}</td>
-					<td>${_import.importingBundle.version}</td>
-					<td>${_import.versionConstraint}</td>
-					<td>
-						<c:forEach var="directive" items="${_import.directives}">
-							${directive.key}:=${directive.value}<br/>
-						</c:forEach>
-					</td>
-					<td>
-						<c:forEach var="attribute" items="${_import.attributes}">
-							${attribute.key}=${attribute.value}<br/>
-						</c:forEach>
-					</td>
-				</tr>
-			</c:forEach>
-		</table>
-	</div>
-</div>
-
-<jsp:include page="bottom.jsp" />
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-resolve.jsp b/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-resolve.jsp
deleted file mode 100644
index d0b2ca9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-resolve.jsp
+++ /dev/null
@@ -1,80 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %><%-- 
---%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%--  
---%>
-<jsp:include page="top.jsp" />
-
-<jsp:include page="state-header.jsp" />
-
-<h1>${title}</h1>
-
-<c:forEach var="fail" items="${failure}" >
-
-	<c:set var="bundle" value="${fail.unresolvedBundle}" />
-	<c:set var="hostsFragmentsMessage" value="NA" />
-	<c:set var="hostsFragments" value="" />
-	<c:choose>
-		<c:when test="${!empty bundle.hosts}">
-			<c:set var="hostsFragmentsMessage" value="Host: " />
-			<c:set var="hostsFragments" value="${bundle.hosts}" />
-		</c:when>
-		<c:when test="${!empty bundle.fragments}">
-			<c:set var="hostsFragmentsMessage" value="Fragments: " />
-			<c:set var="hostsFragments" value="${bundle.fragments}" />						
-		</c:when>
-	</c:choose>
-
-	<div class="consoleContentPane">
-		<table id="resolve-overview-${bundle.symbolicName}-${bundle.version}">
-			<tr class="name-sublevel1-even">
-				<td>Bundle Symbolic Name</td>
-				<td>${bundle.symbolicName}</td>
-			</tr>
-			<tr class="name-sublevel1-odd">
-				<td>Bundle Version</td>
-				<td>${bundle.version}</td>
-			</tr>
-			<tr class="name-sublevel1-even">
-				<td>Bundle ID</td>
-				<td>${bundle.bundleId}</td>
-			</tr>
-			<tr class="name-sublevel1-odd">
-				<td>Hosts/Fragments</td>
-				<td>
-					${hostsFragmentsMessage}
-					<c:forEach var="hfBundle" items="${hostsFragments}">
-						<a href="<c:url value="bundle.htm?id=${hfBundle.bundleId}&state=${state}" />">${hfBundle.bundleId} (${hfBundle.symbolicName}-${hfBundle.version})</a>
-					</c:forEach>
-				</td>
-			</tr>
-			<c:choose>
-				<c:when test="${state eq 'Live'}">
-					<tr class="name-sublevel1-even">
-						<td>Spring powered</td>
-						<c:choose>
-							<c:when test="${empty bundle.springName}">
-								<td>No</td>
-							</c:when>
-							<c:otherwise>
-								<td>Yes</td>
-							</c:otherwise>
-						</c:choose>
-					</tr>
-					<tr class="name-sublevel1-odd">
-						<td>State</td>
-						<td>${bundle.state}</td>
-					</tr>
-				</c:when>
-				<c:otherwise>
-					<tr class="name-sublevel1-even">
-						<td>State</td>
-						<td><c:choose><c:when test="${bundle.resolved}">Resolved</c:when><c:otherwise>Unresolved</c:otherwise></c:choose></td>
-					</tr>
-				</c:otherwise>
-			</c:choose>
-		</table>
-		<p><pre>${fail.description}</pre></p>
-	</div>
-	<br/>
-</c:forEach>
-
-<jsp:include page="bottom.jsp" />
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-search.jsp b/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-search.jsp
deleted file mode 100644
index 7923366..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-search.jsp
+++ /dev/null
@@ -1,90 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %><%-- 
---%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%-- 
---%><%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %><%-- 
---%><jsp:include page="top.jsp" />
-
-<jsp:include page="state-header.jsp" />
-
-<h1>${title}</h1>
-
-<h2>Matching Bundles</h2>
-<div id="matching-bundles-section">
-	<table id="matching-bundles" class="bordered-table">
-		<tr class="sublevel1-odd">
-			<th>Bundle Id</th>
-			<th></th>
-			<th>Bundle Symbolic Name</th>
-			<th>Bundle Version</th>
-			<th>State</th>
-		</tr>
-		<c:choose>
-			<c:when test="${empty bundles}">
-				<tr class="name-sublevel1-even">
-					<td id="deploy_application_null" colspan="5">No search results available.</td>
-				</tr>
-			</c:when>
-			<c:otherwise>
-	
-				<c:forEach var="bundle" items="${bundles}" varStatus="loopStatus">
-	<!-- CREATE THE RESOLVE STRING -->
-					<c:choose>
-						<c:when test="${bundle.resolved}">
-							<c:set var="resolveMessage" value="Resolved" />
-						</c:when>
-						<c:otherwise>
-							<c:set var="resolveMessage" value="Unresolved" />
-						</c:otherwise>
-					</c:choose>
-	<!-- DO THE ROW COLOURING -->
-						<c:set var="rowStyle" value="odd" scope="page" />
-						<c:if test="${(loopStatus.index % 2) eq 0}">
-							<c:set var="rowStyle" value="even" scope="page" />
-						</c:if>
-	<!-- PRINT OUT A LIVE OR STATIC TABLE ROW -->
-						<c:choose>
-							<c:when test="${state eq 'Live'}">			
-								<tr class="sublevel1-${rowStyle}">
-									<td id="bundle-id"><a href="<c:url value="bundle.htm?id=${bundle.bundleId}&state=${state}" />">${bundle.bundleId}</a></td>
-									<td id="bundle-spring" class="table-icon"><c:if test="${!empty bundle.springName}"><img src="<c:url value="/images/spring.png"/>" height="16" width ="16" alt="S" /></c:if></td>
-									<td id="bundle-name">${bundle.symbolicName}</td>
-									<td id="bundle-version">${bundle.version}</td>
-							    	<td id="bundle-resolved">
-							    		<c:choose>
-							    			<c:when test="${bundle.resolved}">
-							    				${bundle.state}
-							    			</c:when>
-							    			<c:otherwise>
-							    				<a href="<c:url value="resolve.htm?id=${bundle.bundleId}&state=${state}" />">${bundle.state}</a>
-							    			</c:otherwise>
-							    		</c:choose>
-							    	</td>
-								</tr>
-							</c:when>
-							<c:otherwise>	
-								<tr class="sublevel1-${rowStyle}">
-									<td id="bundle-id"><a href="<c:url value="bundle.htm?id=${bundle.bundleId}&state=${state}" />">${bundle.bundleId}</a></td>
-									<td id="bundle-spring" class="table-icon"></td>
-									<td id="bundle-name">${bundle.symbolicName}</td>
-									<td id="bundle-version">${bundle.version}</td>
-							    	<td id="bundle-resolved">
-							    		<c:choose>
-							    			<c:when test="${bundle.resolved}">
-							    				${resolveMessage}
-							    			</c:when>
-							    			<c:otherwise>
-							    				<a href="<c:url value="resolve.htm?id=${bundle.bundleId}&state=${state}" />">${resolveMessage}</a>
-							    			</c:otherwise>
-							    		</c:choose>
-							    	</td>
-								</tr>
-							</c:otherwise>
-						</c:choose>
-					<c:remove var="rowStyle" />
-				</c:forEach>
-			     
-			</c:otherwise>
-		</c:choose>
-	</table>
-</div>
-
-<jsp:include page="bottom.jsp" />
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-services.jsp b/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-services.jsp
deleted file mode 100644
index c2ed78e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/state-services.jsp
+++ /dev/null
@@ -1,45 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><%-- 
---%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%-- 
---%>
-<jsp:include page="top.jsp" />
-
-<script type="text/javascript">
-	dojo.require("dijit.TitlePane");
-</script>
-
-<jsp:include page="state-header.jsp" />
-
-<h1>State Overview - Services</h1>
-
-<div class="consoleContentPaneMinimal">
-
-	<c:forEach var="service" items="${services}">
-		<c:set var="titleString" value="Service ${service.serviceId} provided by bundle ${service.provider.bundleId} - ObjectClass ${service.formattedObjectClass}" />
-		<div dojoType="dijit.TitlePane" title="${titleString}" open="false">
-			<div class="consoleContentPaneSpace">
-				<p>Provided by <a href="<c:url value="bundle.htm?id=${service.provider.bundleId}&state=${state}" />">${service.provider.bundleId}</a> ${service.provider.symbolicName}-${service.provider.version}</p>
-				<table id="service-properties">
-					<tr class="sublevel1-odd">
-						<th>Property</th>
-						<th>Value</th>
-					</tr>
-					<c:forEach var="prop" items="${service.properties}" varStatus="loopStatus">
-			<!-- ROW COLOURING -->
-						<c:set var="rowStyle" value="odd" scope="page" />
-						<c:if test="${(loopStatus.index % 2) eq 0}">
-							<c:set var="rowStyle" value="even" scope="page" />
-						</c:if>
-			<!-- DISPLAY THE NEXT ROW -->
-						<tr class="sublevel1-${rowStyle}">
-							<td id="key">${prop.key}</td>
-							<td id="value">${prop.value}</td>
-						</tr>
-					</c:forEach>
-				</table>
-			</div>
-		</div>
-	</c:forEach>
-
-</div>
-
-<jsp:include page="bottom.jsp" />
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/top.jsp b/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/top.jsp
deleted file mode 100644
index d9ac574..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/jsp/top.jsp
+++ /dev/null
@@ -1,52 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %><%--
---%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%--
---%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-
-<head>
-	<title>Virgo Admin Console</title>
-	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-	<link rel="shortcut icon" href="<c:url value="/images/favicon.ico"             />" />
-	<link rel="stylesheet" href="<c:url value="/js/dijit/themes/tundra/tundra.css" />" type="text/css" />
-	<link rel="stylesheet" href="<c:url value="/styles/main.css"                   />" type="text/css" />
-	<link rel="stylesheet" href="<c:url value="/styles/local.css"                  />" type="text/css" />
-	<link rel="stylesheet" href="<c:url value="/styles/print.css"                  />" type="text/css" media="print" />
-	<script type="text/javascript" src="<c:url value="/js/dojo/dojo.js"            />" djConfig="parseOnLoad: true, baseUrl: '../../js/dojo/'"></script>
-	<script type="text/javascript" src="<c:url value="/js/dojo/virgo-dojo.js"      />" djConfig="parseOnLoad: true, baseUrl: '../../js/dojo/'"></script>
-
-</head>
-
-<body class="main tundra">
-    <div id="page">
-        <div id="header">
-            <div id="name-and-company">
-                <div id='site-name'>
-                    <a href="<c:url value="/" />" title="Virgo Admin Console" rel="home"> </a>
-                </div>
-                <div id='company-name'>
-                    <a href="http://wiki.eclipse.org/Virgo" title="Virgo from EclipseRT" target="_blank"> </a>
-                </div>
-            </div> <!-- /name-and-company -->
-        </div> <!-- /header -->
-
-    <div id="primary-navigation">
-        <div id="primary-left">
-            <ul>
-                <li><a href="<c:url value="/web/artifact/overview.htm" />" title="Artifacts">Artifacts</a></li>
-                <li><a href="<c:url value="/web/config/overview.htm"   />" title="Configuration">Configuration</a></li>
-                <li><a href="<c:url value="/web/dump/inspector.htm"    />" title="Dump Inspector">Dump Inspector</a></li>
-                <li><a href="<c:url value="/web/state/bundles.htm"     />" title="OSGi State">OSGi State</a></li>
-            </ul>
-        </div>
-        <div id="left-cap"></div>
-        <div id="primary-right">
-            <ul>
-                <li><a href="<c:url value="/web/info/overview.htm"     />" title="Information">Information</a></li>
-            </ul>
-        </div>
-        <div id="right-cap"></div>
-    </div><!-- /primary-navigation -->
-
-    <div id="container">
-        <div id="content-no-nav">
-
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/web.xml b/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index f807c16..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
-	version="2.5">
-
-	<display-name>Admin Console</display-name>
-
-	<description>Virgo - Administration Console</description>
-
-	<welcome-file-list>
-		<welcome-file>index.jsp</welcome-file>
-		<welcome-file>index.html</welcome-file>
-	</welcome-file-list>
-
-	<!-- CONFIGURE A PARENT APPLICATION CONTEXT -->
-
-	<context-param>
-		<param-name>contextClass</param-name>
-		<param-value>org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext</param-value>
-	</context-param>
-
-	<listener>
-		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
-	</listener>
-
-	<!-- DISPATCHER SERVLET CONFIG -->
-	<servlet>
-		<servlet-name>admin</servlet-name>
-		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
-	</servlet>
-
-	<servlet-mapping>
-		<servlet-name>admin</servlet-name>
-		<url-pattern>/web/*</url-pattern>
-	</servlet-mapping>
-
-	<!-- SECURITY CONFIG -->
-
-	<security-constraint>
-		<web-resource-collection>
-			<web-resource-name>Virgo Server Admin Console</web-resource-name>
-			<url-pattern>/web/*</url-pattern>
-		</web-resource-collection>
-		<auth-constraint>
-			<role-name>admin</role-name>
-		</auth-constraint>
-	</security-constraint> 
-	
-	<login-config>
-		<auth-method>BASIC</auth-method>
-		<realm-name>Virgo Server Admin Console</realm-name>
-	</login-config>
-	
-	<security-role>
-		<role-name>admin</role-name>
-	</security-role>
-
-</web-app>
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/favicon.ico b/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/favicon.ico
deleted file mode 100755
index 9244a9c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/footer-left.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/footer-left.png
deleted file mode 100644
index 8bfe3b1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/footer-left.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/footer-right.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/footer-right.png
deleted file mode 100644
index 51527ad..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/footer-right.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/footer-stretch.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/footer-stretch.png
deleted file mode 100644
index c58f721..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/footer-stretch.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/loader-white-large.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/loader-white-large.gif
deleted file mode 100644
index aa4ec5a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/loader-white-large.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/loader-white-small.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/loader-white-small.gif
deleted file mode 100644
index 75ad2b3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/loader-white-small.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/menu-curve-left.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/menu-curve-left.png
deleted file mode 100644
index c48a2e0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/menu-curve-left.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/menu-curve-right.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/menu-curve-right.png
deleted file mode 100644
index 1f3b100..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/menu-curve-right.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/menu-stretch.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/menu-stretch.png
deleted file mode 100644
index 0ca66f7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/menu-stretch.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/spring.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/spring.png
deleted file mode 100644
index 05a1940..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/spring.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/table-header-background.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/table-header-background.png
deleted file mode 100644
index 8f2ba1b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/table-header-background.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/attribute-atomic.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/attribute-atomic.png
deleted file mode 100644
index b8c9c58..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/attribute-atomic.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/attribute-scoped-atomic.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/attribute-scoped-atomic.png
deleted file mode 100644
index 1b35a3c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/attribute-scoped-atomic.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/attribute-scoped.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/attribute-scoped.png
deleted file mode 100644
index f0f0e1c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/attribute-scoped.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/state-active.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/state-active.png
deleted file mode 100644
index 4dce2da..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/state-active.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/state-installed.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/state-installed.png
deleted file mode 100644
index 380af4a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/state-installed.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/state-resolved.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/state-resolved.png
deleted file mode 100644
index 1791fb0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/state-resolved.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/state-starting.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/state-starting.png
deleted file mode 100644
index 4123fe2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/state-starting.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/state-stopping.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/state-stopping.png
deleted file mode 100644
index a6204d4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/images/tree-icons/state-stopping.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/index.html b/org.eclipse.virgo.apps.admin.web/src/main/webapp/index.html
deleted file mode 100644
index ee93ff8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/index.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-	<title>Virgo Console</title>
-	<meta http-equiv="REFRESH" content="0;url=web/info/overview.htm">
-</head>
-<body>
-	<br/>
-	<br/>
-	<center>
-		<p>
-			<em>Virgo Admin Console Loading...</em>
-		</p>
-		<img alt="" src="images/loader-white-large.gif">	
-	</center>
-</body>
-</html>
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Calendar.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Calendar.js
deleted file mode 100644
index 01e1a94..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Calendar.js
+++ /dev/null
@@ -1,479 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.Calendar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.Calendar"] = true;
-dojo.provide("dijit.Calendar");
-
-dojo.require("dojo.cldr.supplemental");
-dojo.require("dojo.date");
-dojo.require("dojo.date.locale");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._Templated");
-
-dojo.declare(
-	"dijit.Calendar",
-	[dijit._Widget, dijit._Templated],
-	{
-		// summary:
-		//		A simple GUI for choosing a date in the context of a monthly calendar.
-		//
-		// description:
-		//		A simple GUI for choosing a date in the context of a monthly calendar.
-		//		This widget can't be used in a form because it doesn't serialize the date to an
-		//		`<input>` field.  For a form element, use dijit.form.DateTextBox instead.
-		//
-		//		Note that the parser takes all dates attributes passed in the
-		//		[RFC 3339 format](http://www.faqs.org/rfcs/rfc3339.html), e.g. `2005-06-30T08:05:00-07:00`
-		//		so that they are serializable and locale-independent.
-		//
-		// example:
-		//	|	var calendar = new dijit.Calendar({}, dojo.byId("calendarNode"));
-		//
-		// example:
-		//	|	<div dojoType="dijit.Calendar"></div>
-
-		templateString: dojo.cache("dijit", "templates/Calendar.html", "<table cellspacing=\"0\" cellpadding=\"0\" class=\"dijitCalendarContainer\" role=\"grid\" dojoAttachEvent=\"onkeypress: _onKeyPress\">\n\t<thead>\n\t\t<tr class=\"dijitReset dijitCalendarMonthContainer\" valign=\"top\">\n\t\t\t<th class='dijitReset' dojoAttachPoint=\"decrementMonth\">\n\t\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitCalendarIncrementControl dijitCalendarDecrease\" waiRole=\"presentation\">\n\t\t\t\t<span dojoAttachPoint=\"decreaseArrowNode\" class=\"dijitA11ySideArrow\">-</span>\n\t\t\t</th>\n\t\t\t<th class='dijitReset' colspan=\"5\">\n\t\t\t\t<div class=\"dijitVisible\">\n\t\t\t\t\t<div class=\"dijitPopup dijitMenu dijitMenuPassive dijitHidden\" dojoAttachPoint=\"monthDropDown\" dojoAttachEvent=\"onmouseup: _onMonthSelect, onmouseover: _onMenuHover, onmouseout: _onMenuHover\">\n\t\t\t\t\t\t<div class=\"dijitCalendarMonthLabelTemplate dijitCalendarMonthLabel\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div dojoAttachPoint=\"monthLabelSpacer\" class=\"dijitSpacer\"></div>\n\t\t\t\t<div dojoAttachPoint=\"monthLabelNode\" class=\"dijitCalendarMonthLabel dijitInline dijitVisible\" dojoAttachEvent=\"onmousedown: _onMonthToggle\"></div>\n\t\t\t</th>\n\t\t\t<th class='dijitReset' dojoAttachPoint=\"incrementMonth\">\n\t\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitCalendarIncrementControl dijitCalendarIncrease\" waiRole=\"presentation\">\n\t\t\t\t<span dojoAttachPoint=\"increaseArrowNode\" class=\"dijitA11ySideArrow\">+</span>\n\t\t\t</th>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<th class=\"dijitReset dijitCalendarDayLabelTemplate\" role=\"columnheader\"><span class=\"dijitCalendarDayLabel\"></span></th>\n\t\t</tr>\n\t</thead>\n\t<tbody dojoAttachEvent=\"onclick: _onDayClick, onmouseover: _onDayMouseOver, onmouseout: _onDayMouseOut\" class=\"dijitReset dijitCalendarBodyContainer\">\n\t\t<tr class=\"dijitReset dijitCalendarWeekTemplate\" role=\"row\">\n\t\t\t<td class=\"dijitReset dijitCalendarDateTemplate\" role=\"gridcell\"><span class=\"dijitCalendarDateLabel\"></span></td>\n\t\t</tr>\n\t</tbody>\n\t<tfoot class=\"dijitReset dijitCalendarYearContainer\">\n\t\t<tr>\n\t\t\t<td class='dijitReset' valign=\"top\" colspan=\"7\">\n\t\t\t\t<h3 class=\"dijitCalendarYearLabel\">\n\t\t\t\t\t<span dojoAttachPoint=\"previousYearLabelNode\" class=\"dijitInline dijitCalendarPreviousYear\"></span>\n\t\t\t\t\t<span dojoAttachPoint=\"currentYearLabelNode\" class=\"dijitInline dijitCalendarSelectedYear\"></span>\n\t\t\t\t\t<span dojoAttachPoint=\"nextYearLabelNode\" class=\"dijitInline dijitCalendarNextYear\"></span>\n\t\t\t\t</h3>\n\t\t\t</td>\n\t\t</tr>\n\t</tfoot>\n</table>\n"),
-
-		// value: Date
-		//		The currently selected Date
-		value: new Date(),
-
-		// datePackage: String
-		//		JavaScript namespace to find Calendar routines.  Uses Gregorian Calendar routines
-		//		at dojo.date by default.
-		datePackage: "dojo.date",
-
-		// dayWidth: String
-		//		How to represent the days of the week in the calendar header. See dojo.date.locale
-		dayWidth: "narrow",
-
-		// tabIndex: Integer
-		//		Order fields are traversed when user hits the tab key
-		tabIndex: "0",
-
-		attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
-			tabIndex: "domNode"
- 		}),
-
-		setValue: function(/*Date*/ value){
-			// summary:
-			//      Deprecated.   Used attr('value', ...) instead.
-			// tags:
-			//      deprecated
-			dojo.deprecated("dijit.Calendar:setValue() is deprecated.  Use attr('value', ...) instead.", "", "2.0");
-			this.attr('value', value);
-		},
-
-		_getValueAttr: function(){
-			// summary:
-			//		Support getter attr('value')
-			var value = new this.dateClassObj(this.value);
-			value.setHours(0, 0, 0, 0); // return midnight, local time for back-compat
-
-			// If daylight savings pushes midnight to the previous date, fix the Date
-			// object to point at 1am so it will represent the correct day. See #9366
-			if(value.getDate() < this.value.getDate()){
-				value = this.dateFuncObj.add(value, "hour", 1);
-			}
-			return value;
-		},
-
-		_setValueAttr: function(/*Date*/ value){
-			// summary:
-			//		Support setter attr("value", ...)
-			// description:
-			// 		Set the current date and update the UI.  If the date is disabled, the value will
-			//		not change, but the display will change to the corresponding month.
-			// tags:
-			//      protected
-			if(!this.value || this.dateFuncObj.compare(value, this.value)){
-				value = new this.dateClassObj(value);
-				value.setHours(1); // to avoid issues when DST shift occurs at midnight, see #8521, #9366
-				this.displayMonth = new this.dateClassObj(value);
-				if(!this.isDisabledDate(value, this.lang)){
-					this.value = value;
-					this.onChange(this.attr('value'));
-				}
-				dojo.attr(this.domNode, "aria-label",
-					this.dateLocaleModule.format(value,
-						{selector:"date", formatLength:"full"}));
-				this._populateGrid();
-			}
-		},
-
-		_setText: function(node, text){
-			// summary:
-			//		This just sets the content of node to the specified text.
-			//		Can't do "node.innerHTML=text" because of an IE bug w/tables, see #3434.
-			// tags:
-			//      private
-			while(node.firstChild){
-				node.removeChild(node.firstChild);
-			}
-			node.appendChild(dojo.doc.createTextNode(text));
-		},
-
-		_populateGrid: function(){
-			// summary:
-			//      Fills in the calendar grid with each day (1-31)
-			// tags:
-			//      private
-			var month = this.displayMonth;
-			month.setDate(1);
-			var firstDay = month.getDay(),
-				daysInMonth = this.dateFuncObj.getDaysInMonth(month),
-				daysInPreviousMonth = this.dateFuncObj.getDaysInMonth(this.dateFuncObj.add(month, "month", -1)),
-				today = new this.dateClassObj(),
-				dayOffset = dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
-			if(dayOffset > firstDay){ dayOffset -= 7; }
-
-			// Iterate through dates in the calendar and fill in date numbers and style info
-			dojo.query(".dijitCalendarDateTemplate", this.domNode).forEach(function(template, i){
-				i += dayOffset;
-				var date = new this.dateClassObj(month),
-					number, clazz = "dijitCalendar", adj = 0;
-
-				if(i < firstDay){
-					number = daysInPreviousMonth - firstDay + i + 1;
-					adj = -1;
-					clazz += "Previous";
-				}else if(i >= (firstDay + daysInMonth)){
-					number = i - firstDay - daysInMonth + 1;
-					adj = 1;
-					clazz += "Next";
-				}else{
-					number = i - firstDay + 1;
-					clazz += "Current";
-				}
-
-				if(adj){
-					date = this.dateFuncObj.add(date, "month", adj);
-				}
-				date.setDate(number);
-
-				if(!this.dateFuncObj.compare(date, today, "date")){
-					clazz = "dijitCalendarCurrentDate " + clazz;
-				}
-
-				if(this._isSelectedDate(date, this.lang)){
-					clazz = "dijitCalendarSelectedDate " + clazz;
-				}
-
-				if(this.isDisabledDate(date, this.lang)){
-					clazz = "dijitCalendarDisabledDate " + clazz;
-				}
-
-				var clazz2 = this.getClassForDate(date, this.lang);
-				if(clazz2){
-					clazz = clazz2 + " " + clazz;
-				}
-
-				template.className = clazz + "Month dijitCalendarDateTemplate";
-				template.dijitDateValue = date.valueOf();
-				var label = dojo.query(".dijitCalendarDateLabel", template)[0],
-					text = date.getDateLocalized ? date.getDateLocalized(this.lang) : date.getDate();
-				this._setText(label, text);
-			}, this);
-
-			// Fill in localized month name
-			var monthNames = this.dateLocaleModule.getNames('months', 'wide', 'standAlone', this.lang);
-			this._setText(this.monthLabelNode, monthNames[month.getMonth()]);
-
-			// Fill in localized prev/current/next years
-			var y = month.getFullYear() - 1;
-			var d = new this.dateClassObj();
-			dojo.forEach(["previous", "current", "next"], function(name){
-				d.setFullYear(y++);
-				this._setText(this[name+"YearLabelNode"],
-					this.dateLocaleModule.format(d, {selector:'year', locale:this.lang}));
-			}, this);
-
-			// Set up repeating mouse behavior
-			var _this = this;
-			var typematic = function(nodeProp, dateProp, adj){
-//FIXME: leaks (collects) listeners if populateGrid is called multiple times.  Do this once?
-				_this._connects.push(
-					dijit.typematic.addMouseListener(_this[nodeProp], _this, function(count){
-						if(count >= 0){ _this._adjustDisplay(dateProp, adj); }
-					}, 0.8, 500)
-				);
-			};
-			typematic("incrementMonth", "month", 1);
-			typematic("decrementMonth", "month", -1);
-			typematic("nextYearLabelNode", "year", 1);
-			typematic("previousYearLabelNode", "year", -1);
-		},
-
-		goToToday: function(){
-			// summary:
-			//      Sets calendar's value to today's date
-			this.attr('value', this.dateClassObj());
-		},
-
-		constructor: function(/*Object*/args){
-			var dateClass = (args.datePackage && (args.datePackage != "dojo.date"))? args.datePackage + ".Date" : "Date";
-			this.dateClassObj = dojo.getObject(dateClass, false);
-			this.datePackage = args.datePackage || this.datePackage;
-			this.dateFuncObj = dojo.getObject(this.datePackage, false);
-			this.dateLocaleModule = dojo.getObject(this.datePackage + ".locale", false);
-		},
-
-		postMixInProperties: function(){
-			// parser.instantiate sometimes passes in NaN for IE.  Use default value in prototype instead.
-			if(isNaN(this.value)){ delete this.value; }
-			this.inherited(arguments);
-		},
-
-		postCreate: function(){
-			this.inherited(arguments);
-			dojo.setSelectable(this.domNode, false);
-
-			var cloneClass = dojo.hitch(this, function(clazz, n){
-				var template = dojo.query(clazz, this.domNode)[0];
-	 			for(var i=0; i<n; i++){
-					template.parentNode.appendChild(template.cloneNode(true));
-				}
-			});
-
-			// clone the day label and calendar day templates 6 times to make 7 columns
-			cloneClass(".dijitCalendarDayLabelTemplate", 6);
-			cloneClass(".dijitCalendarDateTemplate", 6);
-
-			// now make 6 week rows
-			cloneClass(".dijitCalendarWeekTemplate", 5);
-
-			// insert localized day names in the header
-			var dayNames = this.dateLocaleModule.getNames('days', this.dayWidth, 'standAlone', this.lang);
-			var dayOffset = dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
-			dojo.query(".dijitCalendarDayLabel", this.domNode).forEach(function(label, i){
-				this._setText(label, dayNames[(i + dayOffset) % 7]);
-			}, this);
-
-			// Fill in spacer/month dropdown element with all the month names (invisible) so that the maximum width will affect layout
-			var monthNames = this.dateLocaleModule.getNames('months', 'wide', 'standAlone', this.lang);
-			cloneClass(".dijitCalendarMonthLabelTemplate", monthNames.length-1);
-			dojo.query(".dijitCalendarMonthLabelTemplate", this.domNode).forEach(function(node, i){
-				dojo.attr(node, "month", i);
-				this._setText(node, monthNames[i]);
-				dojo.place(node.cloneNode(true), this.monthLabelSpacer);
-			}, this);
-
-			var value = this.value;
-			this.value = null;
-			this.attr('value', new this.dateClassObj(value));
-		},
-
-		_onMenuHover: function(e){
-			dojo.stopEvent(e);
-			dojo.toggleClass(e.target, "dijitMenuItemHover");
-		},
-
-		_adjustDisplay: function(/*String*/ part, /*int*/ amount){
-			// summary:
-			//      Moves calendar forwards or backwards by months or years
-			// part:
-			//      "month" or "year"
-			// amount:
-			//      Number of months or years
-			// tags:
-			//      private
-			this.displayMonth = this.dateFuncObj.add(this.displayMonth, part, amount);
-			this._populateGrid();
-		},
-
-		_onMonthToggle: function(/*Event*/ evt){
-			// summary:
-			//      Handler for when user triggers or dismisses the month list
-			// tags:
-			//      protected
-			dojo.stopEvent(evt);
-
-			if(evt.type == "mousedown"){
-				var coords = dojo.position(this.monthLabelNode);
-//				coords.y -= dojo.position(this.domNode, true).y;
-				// Size the dropdown's width to match the label in the widget
-				// so that they are horizontally aligned
-				var dim = {
-					width: coords.w + "px",
-					top: -this.displayMonth.getMonth() * coords.h + "px"
-				};
-				if((dojo.isIE && dojo.isQuirks) || dojo.isIE < 7){
-					dim.left = -coords.w/2 + "px";
-				}
-				dojo.style(this.monthDropDown, dim);
-				this._popupHandler = this.connect(document, "onmouseup", "_onMonthToggle");
-			}else{
-				this.disconnect(this._popupHandler);
-				delete this._popupHandler;
-			}
-
-			dojo.toggleClass(this.monthDropDown, "dijitHidden");
-			dojo.toggleClass(this.monthLabelNode, "dijitVisible");
-		},
-
-		_onMonthSelect: function(/*Event*/ evt){
-			// summary:
-			//      Handler for when user selects a month from a list
-			// tags:
-			//      protected
-			this._onMonthToggle(evt);
-			this.displayMonth.setMonth(dojo.attr(evt.target, "month"));
-			this._populateGrid();
-		},
-
-		_onDayClick: function(/*Event*/ evt){
-			// summary:
-			//      Handler for day clicks, selects the date if appropriate
-			// tags:
-			//      protected
-			dojo.stopEvent(evt);
-			for(var node = evt.target; node && !node.dijitDateValue; node = node.parentNode);
-			if(node && !dojo.hasClass(node, "dijitCalendarDisabledDate")){
-				this.attr('value', node.dijitDateValue);
-				this.onValueSelected(this.attr('value'));
-			}
-		},
-
-		_onDayMouseOver: function(/*Event*/ evt){
-			// summary:
-			//      Handler for mouse over events on days, sets up hovered style
-			// tags:
-			//      protected
-			var node = evt.target;
-			if(node && (node.dijitDateValue || node == this.previousYearLabelNode || node == this.nextYearLabelNode) ){
-				dojo.addClass(node, "dijitCalendarHoveredDate");
-				this._currentNode = node;
-			}
-		},
-
-		_onDayMouseOut: function(/*Event*/ evt){
-			// summary:
-			//      Handler for mouse out events on days, clears hovered style
-			// tags:
-			//      protected
-			if(!this._currentNode){ return; }
-			for(var node = evt.relatedTarget; node;){
-				if(node == this._currentNode){ return; }
-				try{
-					node = node.parentNode;
-				}catch(x){
-					node = null;
-				}
-			}
-			dojo.removeClass(this._currentNode, "dijitCalendarHoveredDate");
-			this._currentNode = null;
-		},
-
-//TODO: use typematic
-//TODO: skip disabled dates without ending up in a loop
-//TODO: could optimize by avoiding populate grid when month does not change
-		_onKeyPress: function(/*Event*/evt){
-			// summary:
-			//		Provides keyboard navigation of calendar
-			// tags:
-			//		protected
-			var dk = dojo.keys,
-				increment = -1,
-				interval,
-				newValue = this.value;
-			switch(evt.keyCode){
-				case dk.RIGHT_ARROW:
-					increment = 1;
-					//fallthrough...
-				case dk.LEFT_ARROW:
-					interval = "day";
-					if(!this.isLeftToRight()){ increment *= -1; }
-					break;
-				case dk.DOWN_ARROW:
-					increment = 1;
-					//fallthrough...
-				case dk.UP_ARROW:
-					interval = "week";
-					break;
-				case dk.PAGE_DOWN:
-					increment = 1;
-					//fallthrough...
-				case dk.PAGE_UP:
-					interval = evt.ctrlKey ? "year" : "month";
-					break;
-				case dk.END:
-					// go to the next month
-					newValue = this.dateFuncObj.add(newValue, "month", 1);
-					// subtract a day from the result when we're done
-					interval = "day";
-					//fallthrough...
-				case dk.HOME:
-					newValue = new Date(newValue).setDate(1);
-					break;
-				case dk.ENTER:
-					this.onValueSelected(this.attr('value'));
-					break;
-				case dk.ESCAPE:
-					//TODO
-				default:
-					return;
-			}
-			dojo.stopEvent(evt);
-
-			if(interval){
-				newValue = this.dateFuncObj.add(newValue, interval, increment);
-			}
-
-			this.attr("value", newValue);
-		},
-
-		onValueSelected: function(/*Date*/ date){
-			// summary:
-			//		Notification that a date cell was selected.  It may be the same as the previous value.
-			// description:
-			//      Used by `dijit.form._DateTimeTextBox` (and thus `dijit.form.DateTextBox`)
-			//      to get notification when the user has clicked a date.
-			// tags:
-			//      protected
-		},
-
-		onChange: function(/*Date*/ date){
-			// summary:
-			//		Called only when the selected date has changed
-		},
-
-		_isSelectedDate: function(/*Date*/ dateObject, /*String?*/ locale){
-			// summary:
-			//		Extension point so developers can subclass Calendar to
-			//		support multiple (concurrently) selected dates
-			// tags:
-			//		protected extension
-			return !this.dateFuncObj.compare(dateObject, this.value, "date")
-		},
-
-		isDisabledDate: function(/*Date*/ dateObject, /*String?*/ locale){
-			// summary:
-			//		May be overridden to disable certain dates in the calendar e.g. `isDisabledDate=dojo.date.locale.isWeekend`
-			// tags:
-			//      extension
-/*=====
-			return false; // Boolean
-=====*/
-		},
-
-		getClassForDate: function(/*Date*/ dateObject, /*String?*/ locale){
-			// summary:
-			//		May be overridden to return CSS classes to associate with the date entry for the given dateObject,
-			//		for example to indicate a holiday in specified locale.
-			// tags:
-			//      extension
-
-/*=====
-			return ""; // String
-=====*/
-		}
-	}
-);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/CheckedMenuItem.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/CheckedMenuItem.js
deleted file mode 100644
index e0e9082..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/CheckedMenuItem.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.CheckedMenuItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.CheckedMenuItem"] = true;
-dojo.provide("dijit.CheckedMenuItem");
-
-dojo.require("dijit.MenuItem");
-
-dojo.declare("dijit.CheckedMenuItem",
-		dijit.MenuItem,
-		{
-		// summary:
-		//		A checkbox-like menu item for toggling on and off
-
-		templateString: dojo.cache("dijit", "templates/CheckedMenuItem.html", "<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitemcheckbox\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuItemIcon dijitCheckedMenuItemIcon\" dojoAttachPoint=\"iconNode\">\n\t\t<span class=\"dijitCheckedMenuItemIconChar\">&#10003;</span>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode,labelNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\">\n\t</td>\n</tr>\n"),
-
-		// checked: Boolean
-		//		Our checked state
-		checked: false,
-		_setCheckedAttr: function(/*Boolean*/ checked){
-			// summary:
-			//		Hook so attr('checked', bool) works.
-			//		Sets the class and state for the check box.
-			dojo.toggleClass(this.domNode, "dijitCheckedMenuItemChecked", checked);
-			dijit.setWaiState(this.domNode, "checked", checked);
-			this.checked = checked;
-		},
-
-		onChange: function(/*Boolean*/ checked){
-			// summary:
-			//		User defined function to handle check/uncheck events
-			// tags:
-			//		callback
-		},
-
-		_onClick: function(/*Event*/ e){
-			// summary:
-			//		Clicking this item just toggles its state
-			// tags:
-			//		private
-			if(!this.disabled){
-				this.attr("checked", !this.checked);
-				this.onChange(this.checked);
-			}
-			this.inherited(arguments);
-		}
-	});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/ColorPalette.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/ColorPalette.js
deleted file mode 100644
index 82eb2cf..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/ColorPalette.js
+++ /dev/null
@@ -1,365 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.ColorPalette"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.ColorPalette"] = true;
-dojo.provide("dijit.ColorPalette");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._Templated");
-dojo.require("dojo.colors");
-dojo.require("dojo.i18n");
-dojo.requireLocalization("dojo", "colors", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
-
-dojo.declare("dijit.ColorPalette",
-	[dijit._Widget, dijit._Templated],
-	{
-	// summary:
-	//		A keyboard accessible color-picking widget
-	// description:
-	//		Grid showing various colors, so the user can pick a certain color.
-	//		Can be used standalone, or as a popup.
-	//
-	// example:
-	// |	<div dojoType="dijit.ColorPalette"></div>
-	//
-	// example:
-	// |    var picker = new dijit.ColorPalette({ },srcNode);
-	// |	picker.startup();
-
-	// defaultTimeout: Number
-	//		Number of milliseconds before a held key or button becomes typematic
-	defaultTimeout: 500,
-
-	// timeoutChangeRate: Number
-	//		Fraction of time used to change the typematic timer between events
-	//		1.0 means that each typematic event fires at defaultTimeout intervals
-	//		< 1.0 means that each typematic event fires at an increasing faster rate
-	timeoutChangeRate: 0.90,
-
-	// palette: String
-	//		Size of grid, either "7x10" or "3x4".
-	palette: "7x10",
-
-	// value: String
-	//		The value of the selected color.
-	value: null,
-
-	// _currentFocus: [private] DomNode
-	//		The currently focused or hovered color.
-	//		Different from value, which represents the selected (i.e. clicked) color.
-	_currentFocus: 0,
-
-	// _xDim: [protected] Integer
-	//		This is the number of colors horizontally across.
-	_xDim: null,
-
-	// _yDim: [protected] Integer
-	///		This is the number of colors vertically down.
-	_yDim: null,
-
-	// _palettes: [protected] Map
-	// 		This represents the value of the colors.
-	//		The first level is a hashmap of the different arrays available
-	//		The next two dimensions represent the columns and rows of colors.
-	_palettes: {
-		"7x10":	[["white", "seashell", "cornsilk", "lemonchiffon","lightyellow", "palegreen", "paleturquoise", "lightcyan",	"lavender", "plum"],
-				["lightgray", "pink", "bisque", "moccasin", "khaki", "lightgreen", "lightseagreen", "lightskyblue", "cornflowerblue", "violet"],
-				["silver", "lightcoral", "sandybrown", "orange", "palegoldenrod", "chartreuse", "mediumturquoise", 	"skyblue", "mediumslateblue","orchid"],
-				["gray", "red", "orangered", "darkorange", "yellow", "limegreen", 	"darkseagreen", "royalblue", "slateblue", "mediumorchid"],
-				["dimgray", "crimson", 	"chocolate", "coral", "gold", "forestgreen", "seagreen", "blue", "blueviolet", "darkorchid"],
-				["darkslategray","firebrick","saddlebrown", "sienna", "olive", "green", "darkcyan", "mediumblue","darkslateblue", "darkmagenta" ],
-				["black", "darkred", "maroon", "brown", "darkolivegreen", "darkgreen", "midnightblue", "navy", "indigo", 	"purple"]],
-
-		"3x4": [["white", "lime", "green", "blue"],
-			["silver", "yellow", "fuchsia", "navy"],
-			["gray", "red", "purple", "black"]]
-	},
-
-	// _imagePaths: [protected] Map
-	//		This is stores the path to the palette images
-	_imagePaths: {
-		"7x10": dojo.moduleUrl("dijit.themes", "a11y/colors7x10.png"),
-		"3x4": dojo.moduleUrl("dijit.themes", "a11y/colors3x4.png")
-	},
-
-	// _paletteCoords: [protected] Map
-	//		This is a map that is used to calculate the coordinates of the
-	//		images that make up the palette.
-	_paletteCoords: {
-		"leftOffset": 3, "topOffset": 3,
-		"cWidth": 20, "cHeight": 20
-	},
-
-	// templateString: String
-	//		The template of this widget.
-	templateString: dojo.cache("dijit", "templates/ColorPalette.html", "<div class=\"dijitInline dijitColorPalette\">\n\t<div class=\"dijitColorPaletteInner\" dojoAttachPoint=\"divNode\" waiRole=\"grid\"\">\n\t\t<img class=\"dijitColorPaletteUnder\" dojoAttachPoint=\"imageNode\" waiRole=\"presentation\" alt=\"\">\n\t</div>\n</div>\n"),
-
-	// _paletteDims: [protected] Object
-	//		Size of the supported palettes for alignment purposes.
-	_paletteDims: {
-		"7x10": {"width": "206px", "height": "145px"},
-		"3x4": {"width": "86px", "height": "64px"}
-	},
-
-	// tabIndex: String
-	//		Widget tab index.
-	tabIndex: "0",
-
-	buildRendering: function(){
-		// Instantiate the template, which makes a skeleton into which we'll insert a bunch of
-		// <img> nodes
-		this.inherited(arguments);
-	
-		// A name has to be given to the colorMap, this needs to be unique per Palette.
-		dojo.mixin(this.divNode.style, this._paletteDims[this.palette]);
-		this.imageNode.setAttribute("src", this._imagePaths[this.palette].toString());
-		var choices = this._palettes[this.palette];
-		this.domNode.style.position = "relative";
-		this._cellNodes = [];
-		this.colorNames = dojo.i18n.getLocalization("dojo", "colors", this.lang);
-		var url = this._blankGif,
-			colorObject = new dojo.Color(),
-			coords = this._paletteCoords;
-		for(var row=0; row < choices.length; row++){
-			var rowNode = dojo.create("div", {
-				role: "row"
-			}, this.divNode);
-			for(var col=0; col < choices[row].length; col++){
-
-				var color = choices[row][col],
-						colorValue = colorObject.setColor(dojo.Color.named[color]);
-
-				var cellNode = dojo.create("span", {
-					"class": "dijitPaletteCell",
-					tabIndex: "-1",
-					title: this.colorNames[color],
-					style: {
-						top: coords.topOffset + (row * coords.cHeight) + "px",
-						left: coords.leftOffset + (col * coords.cWidth) + "px"
-					}
-				});
-
-				var imgNode = dojo.create("img",{
-					src: url,
-					"class":"dijitPaletteImg",
-					alt: this.colorNames[color]
-				}, cellNode);
-
-				// FIXME: color is an attribute of img?
-				imgNode.color = colorValue.toHex();
-				var imgStyle = imgNode.style;
-				imgStyle.color = imgStyle.backgroundColor = imgNode.color;
-
-				dojo.forEach(["Dijitclick", "MouseEnter", "MouseLeave", "Focus"], function(handler){
-					this.connect(cellNode, "on" + handler.toLowerCase(), "_onCell" + handler);
-				}, this);
-
-				dojo.place(cellNode, rowNode);
-
-				dijit.setWaiRole(cellNode, "gridcell");
-				cellNode.index = this._cellNodes.length;
-				this._cellNodes.push(cellNode);
-			}
-		}
-		this._xDim = choices[0].length;
-		this._yDim = choices.length;
-
-		// Now set all events
-		// The palette itself is navigated to with the tab key on the keyboard
-		// Keyboard navigation within the Palette is with the arrow keys
-		// Spacebar selects the color.
-		// For the up key the index is changed by negative the x dimension.
-
-		var keyIncrementMap = {
-			UP_ARROW: -this._xDim,
-			// The down key the index is increase by the x dimension.
-			DOWN_ARROW: this._xDim,
-			// Right and left move the index by 1.
-			RIGHT_ARROW: 1,
-			LEFT_ARROW: -1
-		};
-		for(var key in keyIncrementMap){
-			this._connects.push(dijit.typematic.addKeyListener(this.domNode,
-				{charOrCode:dojo.keys[key], ctrlKey:false, altKey:false, shiftKey:false},
-				this,
-				function(){
-					var increment = keyIncrementMap[key];
-					return function(count){ this._navigateByKey(increment, count); };
-				}(),
-				this.timeoutChangeRate, this.defaultTimeout));
-		}
-	},
-	
-	postCreate: function(){
-		this.inherited(arguments);
-
-		// Set initial navigable node.   At any point in time there's exactly one
-		// cell with tabIndex != -1.   If focus is inside the ColorPalette then
-		// focus is on that cell.
-		// TODO: if we set aria info (for the current value) on the ColorPalette itself then can we avoid
-		// having to focus each individual cell?
-		this._currentFocus = this._cellNodes[0];
-		dojo.attr(this._currentFocus, "tabIndex", this.tabIndex);
-	},
-
-	focus: function(){
-		// summary:
-		//		Focus this ColorPalette.  Puts focus on the most recently focused cell.
-
-		// The cell already has tabIndex set, just need to set CSS and focus it
-		dojo.addClass(this._currentFocus, "dijitPaletteCellHighlight");
-		dijit.focus(this._currentFocus);
-	},
-
-	onChange: function(color){
-		// summary:
-		//		Callback when a color is selected.
-		// color: String
-		//		Hex value corresponding to color.
-//		console.debug("Color selected is: "+color);
-	},
-
-	_onFocus: function(){
-		// summary:
-		//		Handler for when the ColorPalette gets focus (because a cell inside
-		//		the ColorPalette got focus)
-		// tags:
-		//		protected
-
-		dojo.addClass(this._currentFocus, "dijitPaletteCellHighlight");
-		this.inherited(arguments);
-	},
-
-	_onBlur: function(){
-		// summary:
-		//		Handler for when the ColorPalette loses focus
-		// tags:
-		//		protected
-
-		// Just to be the same as 1.3, when I am focused again go to first (0,0) cell rather than
-		// currently focused node.
-		dojo.attr(this._currentFocus, "tabIndex", "-1");
-		dojo.removeClass(this._currentFocus, "dijitPaletteCellHighlight");
-		this._currentFocus = this._cellNodes[0];
-		dojo.attr(this._currentFocus, "tabIndex", this.tabIndex);
-
-		this.inherited(arguments);
-	},
-
-	_onCellDijitclick: function(/*Event*/ evt){
-		// summary:
-		//		Handler for click, enter key & space key. Selects the color.
-		// evt:
-		//		The event.
-		// tags:
-		//		private
-
-		var target = evt.currentTarget;
-		this._selectColor(target);
-		dojo.stopEvent(evt);
-	},
-
-	_onCellMouseEnter: function(/*Event*/ evt){
-		// summary:
-		//		Handler for onMouseEnter event on a cell. Put highlight on the color under the mouse.
-		// evt:
-		//		The mouse event.
-		// tags:
-		//		private
-
-		var target = evt.currentTarget;
-		this._setCurrent(target);
-	},
-
-	_onCellMouseLeave: function(/*Event*/ evt){
-		// summary:
-		//		Handler for onMouseLeave event on a cell. Remove highlight on the color under the mouse.
-		// evt:
-		//		The mouse event.
-		// tags:
-		//		private
-
-		dojo.removeClass(this._currentFocus, "dijitPaletteCellHighlight");
-	},
-
-	_onCellFocus: function(/*Event*/ evt){
-		// summary:
-		//		Handler for onFocus of a cell.
-		// description:
-		//		Removes highlight of the color that just lost focus, and highlights
-		//		the new color.  Also moves the tabIndex setting to the new cell.
-		//		
-		// evt:
-		//		The focus event.
-		// tags:
-		//		private
-
-		this._setCurrent(evt.currentTarget);
-	},
-
-	_setCurrent: function(/*Node*/ node){
-		// summary:
-		//		Called when a color is hovered or focused.
-		// description:
-		//		Removes highlight of the old color, and highlights
-		//		the new color.  Also moves the tabIndex setting to the new cell.
-		// tags:
-		//		protected
-		if("_currentFocus" in this){
-			// Remove highlight and tabIndex on old cell
-			dojo.attr(this._currentFocus, "tabIndex", "-1");
-			dojo.removeClass(this._currentFocus, "dijitPaletteCellHighlight");
-		}
-
-		// Set highlight and tabIndex of new cell
-		this._currentFocus = node;
-		if(node){
-			dojo.attr(node, "tabIndex", this.tabIndex);
-			dojo.addClass(node, "dijitPaletteCellHighlight");
-		}
-	},
-
-	_selectColor: function(selectNode){
-		// summary:
-		// 		This selects a color. It triggers the onChange event
-		// area:
-		//		The area node that covers the color being selected.
-		// tags:
-		//		private
-		var img = selectNode.getElementsByTagName("img")[0];
-		this.onChange(this.value = img.color);
-	},
-
-	_navigateByKey: function(increment, typeCount){
-		// summary:
-		// 	  	This is the callback for typematic.
-		// 		It changes the focus and the highlighed color.
-		// increment:
-		// 		How much the key is navigated.
-		// typeCount:
-		//		How many times typematic has fired.
-		// tags:
-		//		private
-
-		// typecount == -1 means the key is released.
-		if(typeCount == -1){ return; }
-
-		var newFocusIndex = this._currentFocus.index + increment;
-		if(newFocusIndex < this._cellNodes.length && newFocusIndex > -1)
-		{
-			var focusNode = this._cellNodes[newFocusIndex];
-			this._setCurrent(focusNode);
-
-			// Actually focus the node, for the benefit of screen readers.
-			// Use setTimeout because IE doesn't like changing focus inside of an event handler
-			setTimeout(dojo.hitch(dijit, "focus", focusNode), 0);
-		}
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Declaration.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Declaration.js
deleted file mode 100644
index 9403517..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Declaration.js
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.Declaration"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.Declaration"] = true;
-dojo.provide("dijit.Declaration");
-dojo.require("dijit._Widget");
-dojo.require("dijit._Templated");
-
-dojo.declare(
-	"dijit.Declaration",
-	dijit._Widget,
-	{
-		// summary:
-		//		The Declaration widget allows a developer to declare new widget
-		//		classes directly from a snippet of markup.
-
-		// _noScript: [private] Boolean
-		//		Flag to parser to leave alone the script tags contained inside of me
-		_noScript: true,
-
-		// widgetClass: String
-		//		Name of class being declared, ex: "acme.myWidget"
-		widgetClass: "",
-
-		// propList: Object
-		//		Set of attributes for this widget along with default values, ex:
-		//		{delay: 100, title: "hello world"}
-		defaults: null,
-
-		// mixins: String[]
-		//		List containing the prototype for this widget, and also any mixins,
-		//		ex: ["dijit._Widget", "dijit._Container"]
-		mixins: [],
-
-		buildRendering: function(){
-			var src = this.srcNodeRef.parentNode.removeChild(this.srcNodeRef),
-				methods = dojo.query("> script[type^='dojo/method'][event]", src).orphan(),
-				postscriptConnects = dojo.query("> script[type^='dojo/method']", src).orphan(),
-				regularConnects = dojo.query("> script[type^='dojo/connect']", src).orphan(),
-				srcType = src.nodeName;
-
-			var propList = this.defaults || {};
-
-			// For all methods defined like <script type="dojo/method" event="foo">,
-			// add that method to prototype
-			dojo.forEach(methods, function(s){
-				var evt = s.getAttribute("event"),
-					func = dojo.parser._functionFromScript(s);
-				propList[evt] = func;
-			});
-
-			// map array of strings like [ "dijit.form.Button" ] to array of mixin objects
-			// (note that dojo.map(this.mixins, dojo.getObject) doesn't work because it passes
-			// a bogus third argument to getObject(), confusing it)
-			this.mixins = this.mixins.length ?
-				dojo.map(this.mixins, function(name){ return dojo.getObject(name); } ) :
-				[ dijit._Widget, dijit._Templated ];
-
-			propList.widgetsInTemplate = true;
-			propList._skipNodeCache = true;
-			propList.templateString = "<"+srcType+" class='"+src.className+"' dojoAttachPoint='"+(src.getAttribute("dojoAttachPoint") || '')+"' dojoAttachEvent='"+(src.getAttribute("dojoAttachEvent") || '')+"' >"+src.innerHTML.replace(/\%7B/g,"{").replace(/\%7D/g,"}")+"</"+srcType+">";
-
-			// strip things so we don't create stuff under us in the initial setup phase
-			dojo.query("[dojoType]", src).forEach(function(node){
-				node.removeAttribute("dojoType");
-			});
-
-			// create the new widget class
-			var wc = dojo.declare(
-				this.widgetClass,
-				this.mixins,
-				propList
-			);
-
-			// Handle <script> blocks of form:
-			//		<script type="dojo/connect" event="foo">
-			// and
-			//		<script type="dojo/method">
-			// (Note that the second one is just shorthand for a dojo/connect to postscript)
-			// Since this is a connect in the declaration, we are actually connection to the method
-			// in the _prototype_.
-			var connects = regularConnects.concat(postscriptConnects);
-			dojo.forEach(connects, function(s){
-				var evt = s.getAttribute("event") || "postscript",
-					func = dojo.parser._functionFromScript(s);
-				dojo.connect(wc.prototype, evt, func);
-			});
-		}
-	}
-);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Dialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Dialog.js
deleted file mode 100644
index d7e7c06..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Dialog.js
+++ /dev/null
@@ -1,529 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.Dialog"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.Dialog"] = true;
-dojo.provide("dijit.Dialog");
-
-dojo.require("dojo.dnd.move");
-dojo.require("dojo.dnd.TimedMoveable");
-dojo.require("dojo.fx");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._Templated");
-dojo.require("dijit.form._FormMixin");
-dojo.require("dijit._DialogMixin");
-dojo.require("dijit.DialogUnderlay");
-dojo.require("dijit.layout.ContentPane");
-dojo.requireLocalization("dijit", "common", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
-
-/*=====
-dijit._underlay = function(kwArgs){
-	// summary:
-	//		A shared instance of a `dijit.DialogUnderlay`
-	//
-	// description:
-	//		A shared instance of a `dijit.DialogUnderlay` created and
-	//		used by `dijit.Dialog`, though never created until some Dialog
-	//		or subclass thereof is shown.
-};
-=====*/
-
-dojo.declare(
-	"dijit._DialogBase",
-	[dijit._Templated, dijit.form._FormMixin, dijit._DialogMixin],
-	{
-		// summary:
-		//		A modal dialog Widget
-		//
-		// description:
-		//		Pops up a modal dialog window, blocking access to the screen
-		//		and also graying out the screen Dialog is extended from
-		//		ContentPane so it supports all the same parameters (href, etc.)
-		//
-		// example:
-		// |	<div dojoType="dijit.Dialog" href="test.html"></div>
-		//
-		// example:
-		// |	var foo = new dijit.Dialog({ title: "test dialog", content: "test content" };
-		// |	dojo.body().appendChild(foo.domNode);
-		// |	foo.startup();
-
-		templateString: dojo.cache("dijit", "templates/Dialog.html", "<div class=\"dijitDialog\" tabindex=\"-1\" waiRole=\"dialog\" waiState=\"labelledby-${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\" id=\"${id}_title\"></span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"onclick: onCancel, onmouseenter: _onCloseEnter, onmouseleave: _onCloseLeave\" title=\"${buttonCancel}\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\" title=\"${buttonCancel}\">x</span>\n\t</span>\n\t</div>\n\t\t<div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n</div>\n"),
-
-		attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
-			title: [
-				{ node: "titleNode", type: "innerHTML" },
-				{ node: "titleBar", type: "attribute" }
-			],
-			"aria-describedby":""
-		}),
-
-		// open: Boolean
-		//		True if Dialog is currently displayed on screen.
-		open: false,
-
-		// duration: Integer
-		//		The time in milliseconds it takes the dialog to fade in and out
-		duration: dijit.defaultDuration,
-
-		// refocus: Boolean
-		// 		A Toggle to modify the default focus behavior of a Dialog, which
-		// 		is to re-focus the element which had focus before being opened.
-		//		False will disable refocusing. Default: true
-		refocus: true,
-
-		// autofocus: Boolean
-		// 		A Toggle to modify the default focus behavior of a Dialog, which
-		// 		is to focus on the first dialog element after opening the dialog.
-		//		False will disable autofocusing. Default: true
-		autofocus: true,
-
-		// _firstFocusItem: [private] [readonly] DomNode
-		//		The pointer to the first focusable node in the dialog.
-		//		Set by `dijit._DialogMixin._getFocusItems`.
-		_firstFocusItem: null,
-
-		// _lastFocusItem: [private] [readonly] DomNode
-		//		The pointer to which node has focus prior to our dialog.
-		//		Set by `dijit._DialogMixin._getFocusItems`.
-		_lastFocusItem: null,
-
-		// doLayout: [protected] Boolean
-		//		Don't change this parameter from the default value.
-		//		This ContentPane parameter doesn't make sense for Dialog, since Dialog
-		//		is never a child of a layout container, nor can you specify the size of
-		//		Dialog in order to control the size of an inner widget.
-		doLayout: false,
-
-		// draggable: Boolean
-		//		Toggles the moveable aspect of the Dialog. If true, Dialog
-		//		can be dragged by it's title. If false it will remain centered
-		//		in the viewport.
-		draggable: true,
-
-		//aria-describedby: String
-		//		Allows the user to add an aria-describedby attribute onto the dialog.   The value should
-		//		be the id of the container element of text that describes the dialog purpose (usually
-		//		the first text in the dialog).
-		//		<div dojoType="dijit.Dialog" aria-describedby="intro" .....>
-		//			<div id="intro">Introductory text</div>
-		//			<div>rest of dialog contents</div>
-		//		</div>
-		"aria-describedby":"",
-
-		postMixInProperties: function(){
-			var _nlsResources = dojo.i18n.getLocalization("dijit", "common");
-			dojo.mixin(this, _nlsResources);
-			this.inherited(arguments);
-		},
-
-		postCreate: function(){
-			dojo.style(this.domNode, {
-				display: "none",
-				position:"absolute"
-			});
-			dojo.body().appendChild(this.domNode);
-
-			this.inherited(arguments);
-
-			this.connect(this, "onExecute", "hide");
-			this.connect(this, "onCancel", "hide");
-			this._modalconnects = [];
-		},
-
-		onLoad: function(){
-			// summary:
-			//		Called when data has been loaded from an href.
-			//		Unlike most other callbacks, this function can be connected to (via `dojo.connect`)
-			//		but should *not* be overriden.
-			// tags:
-			//		callback
-
-			// when href is specified we need to reposition the dialog after the data is loaded
-			this._position();
-			this.inherited(arguments);
-		},
-
-		_endDrag: function(e){
-			// summary:
-			//		Called after dragging the Dialog. Saves the position of the dialog in the viewport.
-			// tags:
-			//		private
-			if(e && e.node && e.node === this.domNode){
-				this._relativePosition = dojo.position(e.node);
-			}
-		},
-
-		_setup: function(){
-			// summary:
-			//		Stuff we need to do before showing the Dialog for the first
-			//		time (but we defer it until right beforehand, for
-			//		performance reasons).
-			// tags:
-			//		private
-
-			var node = this.domNode;
-
-			if(this.titleBar && this.draggable){
-				this._moveable = (dojo.isIE == 6) ?
-					new dojo.dnd.TimedMoveable(node, { handle: this.titleBar }) :	// prevent overload, see #5285
-					new dojo.dnd.Moveable(node, { handle: this.titleBar, timeout: 0 });
-				dojo.subscribe("/dnd/move/stop",this,"_endDrag");
-			}else{
-				dojo.addClass(node,"dijitDialogFixed");
-			}
-
-			this.underlayAttrs = {
-				dialogId: this.id,
-				"class": dojo.map(this["class"].split(/\s/), function(s){ return s+"_underlay"; }).join(" ")
-			};
-
-			this._fadeIn = dojo.fadeIn({
-				node: node,
-				duration: this.duration,
-				beforeBegin: dojo.hitch(this, function(){
-					var underlay = dijit._underlay;
-					if(!underlay){
-						underlay = dijit._underlay = new dijit.DialogUnderlay(this.underlayAttrs);
-					}else{
-						underlay.attr(this.underlayAttrs);
-					}
-
-					var zIndex = 948 + dijit._dialogStack.length*2;
-					dojo.style(dijit._underlay.domNode, 'zIndex', zIndex);
-					dojo.style(this.domNode, 'zIndex', zIndex + 1);
-					underlay.show();
-				}),
-				onEnd: dojo.hitch(this, function(){
-					if(this.autofocus){
-						// find focusable Items each time dialog is shown since if dialog contains a widget the
-						// first focusable items can change
-						this._getFocusItems(this.domNode);
-						dijit.focus(this._firstFocusItem);
-					}
-				})
-			 });
-
-			this._fadeOut = dojo.fadeOut({
-				node: node,
-				duration: this.duration,
-				onEnd: dojo.hitch(this, function(){
-					node.style.display = "none";
-
-					// Restore the previous dialog in the stack, or if this is the only dialog
-					// then restore to original page
-					var ds = dijit._dialogStack;
-					if(ds.length == 0){
-						dijit._underlay.hide();
-					}else{
-						dojo.style(dijit._underlay.domNode, 'zIndex', 948 + ds.length*2);
-						dijit._underlay.attr(ds[ds.length-1].underlayAttrs);
-					}
-
-					// Restore focus to wherever it was before this dialog was displayed
-					if(this.refocus){
-						var focus = this._savedFocus;
-
-						// If we are returning control to a previous dialog but for some reason
-						// that dialog didn't have a focused field, set focus to first focusable item.
-						// This situation could happen if two dialogs appeared at nearly the same time,
-						// since a dialog doesn't set it's focus until the fade-in is finished.
-						if(ds.length > 0){
-							var pd = ds[ds.length-1];
-							if(!dojo.isDescendant(focus.node, pd.domNode)){
-								pd._getFocusItems(pd.domNode);
-								focus = pd._firstFocusItem;
-							}
-						}
-
-						dijit.focus(focus);
-					}
-				})
-			 });
-		},
-
-		uninitialize: function(){
-			var wasPlaying = false;
-			if(this._fadeIn && this._fadeIn.status() == "playing"){
-				wasPlaying = true;
-				this._fadeIn.stop();
-			}
-			if(this._fadeOut && this._fadeOut.status() == "playing"){
-				wasPlaying = true;
-				this._fadeOut.stop();
-			}
-			
-			// Hide the underlay, unless the underlay widget has already been destroyed
-			// because we are being called during page unload (when all widgets are destroyed)
-			if((this.open || wasPlaying) && !dijit._underlay._destroyed){
-				dijit._underlay.hide();
-			}
-			if(this._moveable){
-				this._moveable.destroy();
-			}
-			this.inherited(arguments);
-		},
-
-		_size: function(){
-			// summary:
-			// 		If necessary, shrink dialog contents so dialog fits in viewport
-			// tags:
-			//		private
-
-			this._checkIfSingleChild();
-
-			// If we resized the dialog contents earlier, reset them back to original size, so
-			// that if the user later increases the viewport size, the dialog can display w/out a scrollbar.
-			// Need to do this before the dojo.marginBox(this.domNode) call below.
-			if(this._singleChild){
-				if(this._singleChildOriginalStyle){
-					this._singleChild.domNode.style.cssText = this._singleChildOriginalStyle;
-				}
-				delete this._singleChildOriginalStyle;
-			}else{
-				dojo.style(this.containerNode, {
-					width:"auto",
-					height:"auto"
-				});
-			}
-
-			var mb = dojo.marginBox(this.domNode);
-			var viewport = dijit.getViewport();
-			if(mb.w >= viewport.w || mb.h >= viewport.h){
-				// Reduce size of dialog contents so that dialog fits in viewport
-
-				var w = Math.min(mb.w, Math.floor(viewport.w * 0.75)),
-					h = Math.min(mb.h, Math.floor(viewport.h * 0.75));
-
-				if(this._singleChild && this._singleChild.resize){
-					this._singleChildOriginalStyle = this._singleChild.domNode.style.cssText;
-					this._singleChild.resize({w: w, h: h});
-				}else{
-					dojo.style(this.containerNode, {
-						width: w + "px",
-						height: h + "px",
-						overflow: "auto",
-						position: "relative"	// workaround IE bug moving scrollbar or dragging dialog
-					});
-				}
-			}else{
-				if(this._singleChild && this._singleChild.resize){
-					this._singleChild.resize();
-				}
-			}
-		},
-
-		_position: function(){
-			// summary:
-			//		Position modal dialog in the viewport. If no relative offset
-			//		in the viewport has been determined (by dragging, for instance),
-			//		center the node. Otherwise, use the Dialog's stored relative offset,
-			//		and position the node to top: left: values based on the viewport.
-			// tags:
-			//		private
-			if(!dojo.hasClass(dojo.body(),"dojoMove")){
-				var node = this.domNode,
-					viewport = dijit.getViewport(),
-					p = this._relativePosition,
-					bb = p ? null : dojo._getBorderBox(node),
-					l = Math.floor(viewport.l + (p ? p.x : (viewport.w - bb.w) / 2)),
-					t = Math.floor(viewport.t + (p ? p.y : (viewport.h - bb.h) / 2))
-				;
-				dojo.style(node,{
-					left: l + "px",
-					top: t + "px"
-				});
-			}
-		},
-
-		_onKey: function(/*Event*/ evt){
-			// summary:
-			//		Handles the keyboard events for accessibility reasons
-			// tags:
-			//		private
-
-			var ds = dijit._dialogStack;
-			if(ds[ds.length-1] != this){
-				// console.debug(this.id + ': skipping because', this, 'is not the active dialog');
-				return;
-			}
-
-			if(evt.charOrCode){
-				var dk = dojo.keys;
-				var node = evt.target;
-				if(evt.charOrCode === dk.TAB){
-					this._getFocusItems(this.domNode);
-				}
-				var singleFocusItem = (this._firstFocusItem == this._lastFocusItem);
-				// see if we are shift-tabbing from first focusable item on dialog
-				if(node == this._firstFocusItem && evt.shiftKey && evt.charOrCode === dk.TAB){
-					if(!singleFocusItem){
-						dijit.focus(this._lastFocusItem); // send focus to last item in dialog
-					}
-					dojo.stopEvent(evt);
-				}else if(node == this._lastFocusItem && evt.charOrCode === dk.TAB && !evt.shiftKey){
-					if(!singleFocusItem){
-						dijit.focus(this._firstFocusItem); // send focus to first item in dialog
-					}
-					dojo.stopEvent(evt);
-				}else{
-					// see if the key is for the dialog
-					while(node){
-						if(node == this.domNode || dojo.hasClass(node, "dijitPopup")){
-							if(evt.charOrCode == dk.ESCAPE){
-								this.onCancel();
-							}else{
-								return; // just let it go
-							}
-						}
-						node = node.parentNode;
-					}
-					// this key is for the disabled document window
-					if(evt.charOrCode !== dk.TAB){ // allow tabbing into the dialog for a11y
-						dojo.stopEvent(evt);
-					// opera won't tab to a div
-					}else if(!dojo.isOpera){
-						try{
-							this._firstFocusItem.focus();
-						}catch(e){ /*squelch*/ }
-					}
-				}
-			}
-		},
-
-		show: function(){
-			// summary:
-			//		Display the dialog
-			if(this.open){ return; }
-
-			// first time we show the dialog, there's some initialization stuff to do
-			if(!this._alreadyInitialized){
-				this._setup();
-				this._alreadyInitialized=true;
-			}
-
-			if(this._fadeOut.status() == "playing"){
-				this._fadeOut.stop();
-			}
-
-			this._modalconnects.push(dojo.connect(window, "onscroll", this, "layout"));
-			this._modalconnects.push(dojo.connect(window, "onresize", this, function(){
-				// IE gives spurious resize events and can actually get stuck
-				// in an infinite loop if we don't ignore them
-				var viewport = dijit.getViewport();
-				if(!this._oldViewport ||
-						viewport.h != this._oldViewport.h ||
-						viewport.w != this._oldViewport.w){
-					this.layout();
-					this._oldViewport = viewport;
-				}
-			}));
-			this._modalconnects.push(dojo.connect(dojo.doc.documentElement, "onkeypress", this, "_onKey"));
-
-			dojo.style(this.domNode, {
-				opacity:0,
-				display:""
-			});
-
-			this.open = true;
-			this._onShow(); // lazy load trigger
-
-			this._size();
-			this._position();
-			dijit._dialogStack.push(this);
-			this._fadeIn.play();
-
-			this._savedFocus = dijit.getFocus(this);
-		},
-
-		hide: function(){
-			// summary:
-			//		Hide the dialog
-
-			// if we haven't been initialized yet then we aren't showing and we can just return
-			// or if we aren't the active dialog, don't allow us to close yet
-			var ds = dijit._dialogStack;
-			if(!this._alreadyInitialized || this != ds[ds.length-1]){
-				return;
-			}
-
-			if(this._fadeIn.status() == "playing"){
-				this._fadeIn.stop();
-			}
-
-			// throw away current active dialog from stack -- making the previous dialog or the node on the original page active
-			ds.pop();
-
-			this._fadeOut.play();
-
-			if(this._scrollConnected){
-				this._scrollConnected = false;
-			}
-			dojo.forEach(this._modalconnects, dojo.disconnect);
-			this._modalconnects = [];
-
-			if(this._relativePosition){
-				delete this._relativePosition;
-			}
-			this.open = false;
-
-			this.onHide();
-		},
-
-		layout: function(){
-			// summary:
-			//		Position the Dialog and the underlay
-			// tags:
-			//		private
-			if(this.domNode.style.display != "none"){
-				if(dijit._underlay){	// avoid race condition during show()
-					dijit._underlay.layout();
-				}
-				this._position();
-			}
-		},
-
-		destroy: function(){
-			dojo.forEach(this._modalconnects, dojo.disconnect);
-			if(this.refocus && this.open){
-				setTimeout(dojo.hitch(dijit,"focus",this._savedFocus), 25);
-			}
-			this.inherited(arguments);
-		},
-
-		_onCloseEnter: function(){
-			// summary:
-			//		Called when user hovers over close icon
-			// tags:
-			//		private
-			dojo.addClass(this.closeButtonNode, "dijitDialogCloseIcon-hover");
-		},
-
-		_onCloseLeave: function(){
-			// summary:
-			//		Called when user stops hovering over close icon
-			// tags:
-			//		private
-			dojo.removeClass(this.closeButtonNode, "dijitDialogCloseIcon-hover");
-		}
-	}
-);
-
-dojo.declare(
-	"dijit.Dialog",
-	[dijit.layout.ContentPane, dijit._DialogBase],
-	{}
-);
-
-// Stack of currenctly displayed dialogs, layered on top of each other
-dijit._dialogStack = [];
-
-// For back-compat.  TODO: remove in 2.0
-dojo.require("dijit.TooltipDialog");
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/DialogUnderlay.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/DialogUnderlay.js
deleted file mode 100644
index d6e6090..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/DialogUnderlay.js
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.DialogUnderlay"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.DialogUnderlay"] = true;
-dojo.provide("dijit.DialogUnderlay");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._Templated");
-
-dojo.declare(
-	"dijit.DialogUnderlay",
-	[dijit._Widget, dijit._Templated],
-	{
-		// summary:
-		//		The component that blocks the screen behind a `dijit.Dialog`
-		//
-		// description:
-		// 		A component used to block input behind a `dijit.Dialog`. Only a single
-		//		instance of this widget is created by `dijit.Dialog`, and saved as
-		//		a reference to be shared between all Dialogs as `dijit._underlay`
-		//
-		//		The underlay itself can be styled based on and id:
-		//	|	#myDialog_underlay { background-color:red; }
-		//
-		//		In the case of `dijit.Dialog`, this id is based on the id of the Dialog,
-		//		suffixed with _underlay.
-
-		// Template has two divs; outer div is used for fade-in/fade-out, and also to hold background iframe.
-		// Inner div has opacity specified in CSS file.
-		templateString: "<div class='dijitDialogUnderlayWrapper'><div class='dijitDialogUnderlay' dojoAttachPoint='node'></div></div>",
-
-		// Parameters on creation or updatable later
-
-		// dialogId: String
-		//		Id of the dialog.... DialogUnderlay's id is based on this id
-		dialogId: "",
-
-		// class: String
-		//		This class name is used on the DialogUnderlay node, in addition to dijitDialogUnderlay
-		"class": "",
-
-		attributeMap: { id: "domNode" },
-
-		_setDialogIdAttr: function(id){
-			dojo.attr(this.node, "id", id + "_underlay");
-		},
-
-		_setClassAttr: function(clazz){
-			this.node.className = "dijitDialogUnderlay " + clazz;
-		},
-
-		postCreate: function(){
-			// summary:
-			//		Append the underlay to the body
-			dojo.body().appendChild(this.domNode);
-		},
-
-		layout: function(){
-			// summary:
-			//		Sets the background to the size of the viewport
-			//
-			// description:
-			//		Sets the background to the size of the viewport (rather than the size
-			//		of the document) since we need to cover the whole browser window, even
-			//		if the document is only a few lines long.
-			// tags:
-			//		private
-
-			var is = this.node.style,
-				os = this.domNode.style;
-
-			// hide the background temporarily, so that the background itself isn't
-			// causing scrollbars to appear (might happen when user shrinks browser
-			// window and then we are called to resize)
-			os.display = "none";
-
-			// then resize and show
-			var viewport = dijit.getViewport();
-			os.top = viewport.t + "px";
-			os.left = viewport.l + "px";
-			is.width = viewport.w + "px";
-			is.height = viewport.h + "px";
-			os.display = "block";
-		},
-
-		show: function(){
-			// summary:
-			//		Show the dialog underlay
-			this.domNode.style.display = "block";
-			this.layout();
-			this.bgIframe = new dijit.BackgroundIframe(this.domNode);
-		},
-
-		hide: function(){
-			// summary:
-			//		Hides the dialog underlay
-			this.bgIframe.destroy();
-			this.domNode.style.display = "none";
-		},
-
-		uninitialize: function(){
-			if(this.bgIframe){
-				this.bgIframe.destroy();
-			}
-			this.inherited(arguments);
-		}
-	}
-);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Editor.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Editor.js
deleted file mode 100644
index fc37881..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Editor.js
+++ /dev/null
@@ -1,604 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.Editor"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.Editor"] = true;
-dojo.provide("dijit.Editor");
-dojo.require("dijit._editor.RichText");
-dojo.require("dijit.Toolbar");
-dojo.require("dijit.ToolbarSeparator");
-dojo.require("dijit._editor._Plugin");
-dojo.require("dijit._editor.plugins.EnterKeyHandling");
-dojo.require("dijit._editor.range");
-dojo.require("dijit._Container");
-dojo.require("dojo.i18n");
-dojo.requireLocalization("dijit._editor", "commands", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
-
-dojo.declare(
-	"dijit.Editor",
-	dijit._editor.RichText,
-	{
-		// summary:
-		//		A rich text Editing widget
-		//
-		// description:
-		//		This widget provides basic WYSIWYG editing features, based on the browser's
-		//		underlying rich text editing capability, accompanied by a toolbar (`dijit.Toolbar`).
-		//		A plugin model is available to extend the editor's capabilities as well as the
-		//		the options available in the toolbar.  Content generation may vary across
-		//		browsers, and clipboard operations may have different results, to name
-		//		a few limitations.  Note: this widget should not be used with the HTML
-		//		&lt;TEXTAREA&gt; tag -- see dijit._editor.RichText for details.
-
-		// plugins: Object[]
-		//		A list of plugin names (as strings) or instances (as objects)
-		//		for this widget.
-		//
-		//		When declared in markup, it might look like:
-		//	|	plugins="['bold',{name:'dijit._editor.plugins.FontChoice', command:'fontName', generic:true}]"
-		plugins: null,
-
-		// extraPlugins: Object[]
-		//		A list of extra plugin names which will be appended to plugins array
-		extraPlugins: null,
-
-		constructor: function(){
-			// summary:
-			//		Runs on widget initialization to setup arrays etc.
-			// tags:
-			//		private
-
-			if(!dojo.isArray(this.plugins)){
-				this.plugins=["undo","redo","|","cut","copy","paste","|","bold","italic","underline","strikethrough","|",
-				"insertOrderedList","insertUnorderedList","indent","outdent","|","justifyLeft","justifyRight","justifyCenter","justifyFull",
-				"dijit._editor.plugins.EnterKeyHandling" /*, "createLink"*/];
-			}
-
-			this._plugins=[];
-			this._editInterval = this.editActionInterval * 1000;
-
-			//IE will always lose focus when other element gets focus, while for FF and safari,
-			//when no iframe is used, focus will be lost whenever another element gets focus.
-			//For IE, we can connect to onBeforeDeactivate, which will be called right before
-			//the focus is lost, so we can obtain the selected range. For other browsers,
-			//no equivelent of onBeforeDeactivate, so we need to do two things to make sure
-			//selection is properly saved before focus is lost: 1) when user clicks another
-			//element in the page, in which case we listen to mousedown on the entire page and
-			//see whether user clicks out of a focus editor, if so, save selection (focus will
-			//only lost after onmousedown event is fired, so we can obtain correct caret pos.)
-			//2) when user tabs away from the editor, which is handled in onKeyDown below.
-			if(dojo.isIE){
-				this.events.push("onBeforeDeactivate");
-				this.events.push("onBeforeActivate");
-			}
-		},
-
-		postCreate: function(){
-			//for custom undo/redo
-			if(this.customUndo){
-				dojo['require']("dijit._editor.range");
-				this._steps=this._steps.slice(0);
-				this._undoedSteps=this._undoedSteps.slice(0);
-//				this.addKeyHandler('z',this.KEY_CTRL,this.undo);
-//				this.addKeyHandler('y',this.KEY_CTRL,this.redo);
-			}
-			if(dojo.isArray(this.extraPlugins)){
-				this.plugins=this.plugins.concat(this.extraPlugins);
-			}
-
-//			try{
-			this.inherited(arguments);
-//			dijit.Editor.superclass.postCreate.apply(this, arguments);
-
-			this.commands = dojo.i18n.getLocalization("dijit._editor", "commands", this.lang);
-
-			if(!this.toolbar){
-				// if we haven't been assigned a toolbar, create one
-				this.toolbar = new dijit.Toolbar({});
-				dojo.place(this.toolbar.domNode, this.editingArea, "before");
-			}
-
-			dojo.forEach(this.plugins, this.addPlugin, this);
-			this.onNormalizedDisplayChanged(); //update toolbar button status
-//			}catch(e){ console.debug(e); }
-
-			this.toolbar.startup();
-		},
-		destroy: function(){
-			dojo.forEach(this._plugins, function(p){
-				if(p && p.destroy){
-					p.destroy();
-				}
-			});
-			this._plugins=[];
-			this.toolbar.destroyRecursive();
-			delete this.toolbar;
-			this.inherited(arguments);
-		},
-		addPlugin: function(/*String||Object*/plugin, /*Integer?*/index){
-			// summary:
-			//		takes a plugin name as a string or a plugin instance and
-			//		adds it to the toolbar and associates it with this editor
-			//		instance. The resulting plugin is added to the Editor's
-			//		plugins array. If index is passed, it's placed in the plugins
-			//		array at that index. No big magic, but a nice helper for
-			//		passing in plugin names via markup.
-			//
-			// plugin: String, args object or plugin instance
-			//
-			// args:
-			//		This object will be passed to the plugin constructor
-			//
-			// index: Integer
-			//		Used when creating an instance from
-			//		something already in this.plugins. Ensures that the new
-			//		instance is assigned to this.plugins at that index.
-			var args=dojo.isString(plugin)?{name:plugin}:plugin;
-			if(!args.setEditor){
-				var o={"args":args,"plugin":null,"editor":this};
-				dojo.publish(dijit._scopeName + ".Editor.getPlugin",[o]);
-				if(!o.plugin){
-					var pc = dojo.getObject(args.name);
-					if(pc){
-						o.plugin=new pc(args);
-					}
-				}
-				if(!o.plugin){
-					console.warn('Cannot find plugin',plugin);
-					return;
-				}
-				plugin=o.plugin;
-			}
-			if(arguments.length > 1){
-				this._plugins[index] = plugin;
-			}else{
-				this._plugins.push(plugin);
-			}
-			plugin.setEditor(this);
-			if(dojo.isFunction(plugin.setToolbar)){
-				plugin.setToolbar(this.toolbar);
-			}
-		},
-		//the following 3 functions are required to make the editor play nice under a layout widget, see #4070
-		startup: function(){
-			// summary:
-			//		Exists to make Editor work as a child of a layout widget.
-			//		Developers don't need to call this method.
-			// tags:
-			//		protected
-			//console.log('startup',arguments);
-		},
-		resize: function(size){
-			// summary:
-			//		Resize the editor to the specified size, see `dijit.layout._LayoutWidget.resize`
-			if(size){
-				// we've been given a height/width for the entire editor (toolbar + contents), calls layout()
-				// to split the allocated size between the toolbar and the contents
-				dijit.layout._LayoutWidget.prototype.resize.apply(this, arguments);
-			}
-			/*
-			else{
-				// do nothing, the editor is already laid out correctly.   The user has probably specified
-				// the height parameter, which was used to set a size on the iframe
-			}
-			*/
-		},
-		layout: function(){
-			// summary:
-			//		Called from `dijit.layout._LayoutWidget.resize`.  This shouldn't be called directly
-			// tags:
-			//		protected
-
-			// Converts the iframe (or rather the <div> surrounding it) to take all the available space
-			// except what's needed for the toolbar
-			this.editingArea.style.height = (this._contentBox.h - dojo.marginBox(this.toolbar.domNode).h)+"px";
-			if(this.iframe){
-				this.iframe.style.height="100%";
-			}
-			this._layoutMode = true;
-		},
-		_onIEMouseDown: function(/*Event*/ e){
-			// summary:
-			//		IE only to prevent 2 clicks to focus
-			// tags:
-			//		private
-
-			var outsideClientArea = this.document.body.componentFromPoint(e.x, e.y);
-			if(!outsideClientArea){
-				delete this._savedSelection; // new mouse position overrides old selection
-				if(e.target.tagName == "BODY"){
-					setTimeout(dojo.hitch(this, "placeCursorAtEnd"), 0);
-				}
-				this.inherited(arguments);
-			}
-		},
-		onBeforeActivate: function(e){
-			this._restoreSelection();
-		},
-		onBeforeDeactivate: function(e){
-			// summary:
-			//		Called on IE right before focus is lost.   Saves the selected range.
-			// tags:
-			//		private
-			if(this.customUndo){
-				this.endEditing(true);
-			}
-			//in IE, the selection will be lost when other elements get focus,
-			//let's save focus before the editor is deactivated
-			if(e.target.tagName != "BODY"){
-				this._saveSelection();
-			}
-			//console.log('onBeforeDeactivate',this);
-		},
-
-		/* beginning of custom undo/redo support */
-
-		// customUndo: Boolean
-		//		Whether we shall use custom undo/redo support instead of the native
-		//		browser support. By default, we only enable customUndo for IE, as it
-		//		has broken native undo/redo support. Note: the implementation does
-		//		support other browsers which have W3C DOM2 Range API implemented.
-		customUndo: dojo.isIE,
-
-		// editActionInterval: Integer
-		//		When using customUndo, not every keystroke will be saved as a step.
-		//		Instead typing (including delete) will be grouped together: after
-		//		a user stops typing for editActionInterval seconds, a step will be
-		//		saved; if a user resume typing within editActionInterval seconds,
-		//		the timeout will be restarted. By default, editActionInterval is 3
-		//		seconds.
-		editActionInterval: 3,
-
-		beginEditing: function(cmd){
-			// summary:
-			//		Called to note that the user has started typing alphanumeric characters, if it's not already noted.
-			//		Deals with saving undo; see editActionInterval parameter.
-			// tags:
-			//		private
-			if(!this._inEditing){
-				this._inEditing=true;
-				this._beginEditing(cmd);
-			}
-			if(this.editActionInterval>0){
-				if(this._editTimer){
-					clearTimeout(this._editTimer);
-				}
-				this._editTimer = setTimeout(dojo.hitch(this, this.endEditing), this._editInterval);
-			}
-		},
-		_steps:[],
-		_undoedSteps:[],
-		execCommand: function(cmd){
-			// summary:
-			//		Main handler for executing any commands to the editor, like paste, bold, etc.
-			//      Called by plugins, but not meant to be called by end users.
-			// tags:
-			//		protected
-			if(this.customUndo && (cmd == 'undo' || cmd == 'redo')){
-				return this[cmd]();
-			}else{
-				if(this.customUndo){
-					this.endEditing();
-					this._beginEditing();
-				}
-				var r;
-				try{
-					r = this.inherited('execCommand', arguments);
-					if(dojo.isWebKit && cmd == 'paste' && !r){ //see #4598: safari does not support invoking paste from js
-						throw { code: 1011 }; // throw an object like Mozilla's error
-					}
-				}catch(e){
-					//TODO: when else might we get an exception?  Do we need the Mozilla test below?
-					if(e.code == 1011 /* Mozilla: service denied */ && /copy|cut|paste/.test(cmd)){
-						// Warn user of platform limitation.  Cannot programmatically access clipboard. See ticket #4136
-						var sub = dojo.string.substitute,
-							accel = {cut:'X', copy:'C', paste:'V'};
-						alert(sub(this.commands.systemShortcut,
-							[this.commands[cmd], sub(this.commands[dojo.isMac ? 'appleKey' : 'ctrlKey'], [accel[cmd]])]));
-					}
-					r = false;
-				}
-				if(this.customUndo){
-					this._endEditing();
-				}
-				return r;
-			}
-		},
-		queryCommandEnabled: function(cmd){
-			// summary:
-			//		Returns true if specified editor command is enabled.
-			//      Used by the plugins to know when to highlight/not highlight buttons.
-			// tags:
-			//		protected
-			if(this.customUndo && (cmd == 'undo' || cmd == 'redo')){
-				return cmd == 'undo' ? (this._steps.length > 1) : (this._undoedSteps.length > 0);
-			}else{
-				return this.inherited('queryCommandEnabled',arguments);
-			}
-		},
-
-		_moveToBookmark: function(b){
-			// summary:
-			//		Selects the text specified in bookmark b
-			// tags:
-			//		private
-			var bookmark = b.mark;
-			var mark = b.mark;
-			var col = b.isCollapsed;
-			if(dojo.isIE){
-				if(dojo.isArray(mark)){//IE CONTROL
-					bookmark = [];
-					dojo.forEach(mark,function(n){
-						bookmark.push(dijit.range.getNode(n,this.editNode));
-					},this);
-				}
-			}else{//w3c range
-				var r=dijit.range.create(this.window);
-				r.setStart(dijit.range.getNode(b.startContainer,this.editNode),b.startOffset);
-				r.setEnd(dijit.range.getNode(b.endContainer,this.editNode),b.endOffset);
-				bookmark=r;
-			}
-			dojo.withGlobal(this.window,'moveToBookmark',dijit,[{mark: bookmark, isCollapsed: col}]);
-		},
-
-		_changeToStep: function(from, to){
-			// summary:
-			//		Reverts editor to "to" setting, from the undo stack.
-			// tags:
-			//		private
-			this.setValue(to.text);
-			var b=to.bookmark;
-			if(!b){ return; }
-			this._moveToBookmark(b);
-		},
-		undo: function(){
-			// summary:
-			//		Handler for editor undo (ex: ctrl-z) operation
-			// tags:
-			//		private
-//			console.log('undo');
-			this.endEditing(true);
-			var s=this._steps.pop();
-			if(this._steps.length>0){
-				this.focus();
-				this._changeToStep(s,this._steps[this._steps.length-1]);
-				this._undoedSteps.push(s);
-				this.onDisplayChanged();
-				return true;
-			}
-			return false;
-		},
-		redo: function(){
-			// summary:
-			//		Handler for editor redo (ex: ctrl-y) operation
-			// tags:
-			//		private
-
-//			console.log('redo');
-			this.endEditing(true);
-			var s=this._undoedSteps.pop();
-			if(s && this._steps.length>0){
-				this.focus();
-				this._changeToStep(this._steps[this._steps.length-1],s);
-				this._steps.push(s);
-				this.onDisplayChanged();
-				return true;
-			}
-			return false;
-		},
-		endEditing: function(ignore_caret){
-			// summary:
-			//		Called to note that the user has stopped typing alphanumeric characters, if it's not already noted.
-			//		Deals with saving undo; see editActionInterval parameter.
-			// tags:
-			//		private
-			if(this._editTimer){
-				clearTimeout(this._editTimer);
-			}
-			if(this._inEditing){
-				this._endEditing(ignore_caret);
-				this._inEditing=false;
-			}
-		},
-		_getBookmark: function(){
-			// summary:
-			//		Get the currently selected text
-			// tags:
-			//		protected
-			var b=dojo.withGlobal(this.window,dijit.getBookmark);
-			var tmp=[];
-			if(b.mark){
-				var mark = b.mark;
-				if(dojo.isIE){
-					if(dojo.isArray(mark)){//CONTROL
-						dojo.forEach(mark,function(n){
-							tmp.push(dijit.range.getIndex(n,this.editNode).o);
-						},this);
-						b.mark = tmp;
-					}
-				}else{//w3c range
-					tmp=dijit.range.getIndex(mark.startContainer,this.editNode).o;
-					b.mark ={startContainer:tmp,
-						startOffset:mark.startOffset,
-						endContainer:mark.endContainer === mark.startContainer?tmp:dijit.range.getIndex(mark.endContainer,this.editNode).o,
-						endOffset:mark.endOffset};
-				}
-			}
-			return b;
-		},
-		_beginEditing: function(cmd){
-			// summary:
-			//		Called when the user starts typing alphanumeric characters.
-			//		Deals with saving undo; see editActionInterval parameter.
-			// tags:
-			//		private
-			if(this._steps.length === 0){
-				this._steps.push({'text':this.savedContent,'bookmark':this._getBookmark()});
-			}
-		},
-		_endEditing: function(ignore_caret){
-			// summary:
-			//		Called when the user stops typing alphanumeric characters.
-			//		Deals with saving undo; see editActionInterval parameter.
-			// tags:
-			//		private
-			var v=this.getValue(true);
-
-			this._undoedSteps=[];//clear undoed steps
-			this._steps.push({text: v, bookmark: this._getBookmark()});
-		},
-		onKeyDown: function(e){
-			// summary:
-			//		Handler for onkeydown event.
-			// tags:
-			//		private
-
-			//We need to save selection if the user TAB away from this editor
-			//no need to call _saveSelection for IE, as that will be taken care of in onBeforeDeactivate
-			if(!dojo.isIE && !this.iframe && e.keyCode == dojo.keys.TAB && !this.tabIndent){
-				this._saveSelection();
-			}
-			if(!this.customUndo){
-				this.inherited(arguments);
-				return;
-			}
-			var k = e.keyCode, ks = dojo.keys;
-			if(e.ctrlKey && !e.altKey){//undo and redo only if the special right Alt + z/y are not pressed #5892
-				if(k == 90 || k == 122){ //z
-					dojo.stopEvent(e);
-					this.undo();
-					return;
-				}else if(k == 89 || k == 121){ //y
-					dojo.stopEvent(e);
-					this.redo();
-					return;
-				}
-			}
-			this.inherited(arguments);
-
-			switch(k){
-					case ks.ENTER:
-					case ks.BACKSPACE:
-					case ks.DELETE:
-						this.beginEditing();
-						break;
-					case 88: //x
-					case 86: //v
-						if(e.ctrlKey && !e.altKey && !e.metaKey){
-							this.endEditing();//end current typing step if any
-							if(e.keyCode == 88){
-								this.beginEditing('cut');
-								//use timeout to trigger after the cut is complete
-								setTimeout(dojo.hitch(this, this.endEditing), 1);
-							}else{
-								this.beginEditing('paste');
-								//use timeout to trigger after the paste is complete
-								setTimeout(dojo.hitch(this, this.endEditing), 1);
-							}
-							break;
-						}
-						//pass through
-					default:
-						if(!e.ctrlKey && !e.altKey && !e.metaKey && (e.keyCode<dojo.keys.F1 || e.keyCode>dojo.keys.F15)){
-							this.beginEditing();
-							break;
-						}
-						//pass through
-					case ks.ALT:
-						this.endEditing();
-						break;
-					case ks.UP_ARROW:
-					case ks.DOWN_ARROW:
-					case ks.LEFT_ARROW:
-					case ks.RIGHT_ARROW:
-					case ks.HOME:
-					case ks.END:
-					case ks.PAGE_UP:
-					case ks.PAGE_DOWN:
-						this.endEditing(true);
-						break;
-					//maybe ctrl+backspace/delete, so don't endEditing when ctrl is pressed
-					case ks.CTRL:
-					case ks.SHIFT:
-					case ks.TAB:
-						break;
-				}
-		},
-		_onBlur: function(){
-			// summary:
-			//		Called from focus manager when focus has moved away from this editor
-			// tags:
-			//		protected
-
-			//this._saveSelection();
-			this.inherited('_onBlur',arguments);
-			this.endEditing(true);
-		},
-		_saveSelection: function(){
-			// summary:
-			//		Save the currently selected text in _savedSelection attribute
-			// tags:
-			//		private
-			this._savedSelection=this._getBookmark();
-			//console.log('save selection',this._savedSelection,this);
-		},
-		_restoreSelection: function(){
-			// summary:
-			//		Re-select the text specified in _savedSelection attribute;
-			//		see _saveSelection().
-			// tags:
-			//		private
-			if(this._savedSelection){
-				// only restore the selection if the current range is collapsed
-				// if not collapsed, then it means the editor does not lose
-				// selection and there is no need to restore it
-				if(dojo.withGlobal(this.window,'isCollapsed',dijit)){
-					this._moveToBookmark(this._savedSelection);
-				}
-				delete this._savedSelection;
-			}
-		},
-
-		onClick: function(){
-			// summary:
-			//		Handler for when editor is clicked
-			// tags:
-			//		protected
-			this.endEditing(true);
-			this.inherited(arguments);
-		}
-		/* end of custom undo/redo support */
-	}
-);
-
-// Register the "default plugins", ie, the built-in editor commands
-dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
-	if(o.plugin){ return; }
-	var args = o.args, p;
-	var _p = dijit._editor._Plugin;
-	var name = args.name;
-	switch(name){
-		case "undo": case "redo": case "cut": case "copy": case "paste": case "insertOrderedList":
-		case "insertUnorderedList": case "indent": case "outdent": case "justifyCenter":
-		case "justifyFull": case "justifyLeft": case "justifyRight": case "delete":
-		case "selectAll": case "removeFormat": case "unlink":
-		case "insertHorizontalRule":
-			p = new _p({ command: name });
-			break;
-
-		case "bold": case "italic": case "underline": case "strikethrough":
-		case "subscript": case "superscript":
-			p = new _p({ buttonClass: dijit.form.ToggleButton, command: name });
-			break;
-		case "|":
-			p = new _p({ button: new dijit.ToolbarSeparator() });
-	}
-//	console.log('name',name,p);
-	o.plugin=p;
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/InlineEditBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/InlineEditBox.js
deleted file mode 100644
index f4b8188..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/InlineEditBox.js
+++ /dev/null
@@ -1,536 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.InlineEditBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.InlineEditBox"] = true;
-dojo.provide("dijit.InlineEditBox");
-
-dojo.require("dojo.i18n");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._Container");
-dojo.require("dijit.form.Button");
-dojo.require("dijit.form.TextBox");
-
-dojo.requireLocalization("dijit", "common", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
-
-dojo.declare("dijit.InlineEditBox",
-	dijit._Widget,
-	{
-	// summary:
-	//		An element with in-line edit capabilitites
-	//
-	// description:
-	//		Behavior for an existing node (`<p>`, `<div>`, `<span>`, etc.) so that
-	// 		when you click it, an editor shows up in place of the original
-	//		text.  Optionally, Save and Cancel button are displayed below the edit widget.
-	//		When Save is clicked, the text is pulled from the edit
-	//		widget and redisplayed and the edit widget is again hidden.
-	//		By default a plain Textarea widget is used as the editor (or for
-	//		inline values a TextBox), but you can specify an editor such as
-	//		dijit.Editor (for editing HTML) or a Slider (for adjusting a number).
-	//		An edit widget must support the following API to be used:
-	//			- displayedValue or value as initialization parameter,
-	//			and available through attr('displayedValue') / attr('value')
-	//			- void focus()
-	//			- DOM-node focusNode = node containing editable text
-
-	// editing: [readonly] Boolean
-	//		Is the node currently in edit mode?
-	editing: false,
-
-	// autoSave: Boolean
-	//		Changing the value automatically saves it; don't have to push save button
-	//		(and save button isn't even displayed)
-	autoSave: true,
-
-	// buttonSave: String
-	//		Save button label
-	buttonSave: "",
-
-	// buttonCancel: String
-	//		Cancel button label
-	buttonCancel: "",
-
-	// renderAsHtml: Boolean
-	//		Set this to true if the specified Editor's value should be interpreted as HTML
-	//		rather than plain text (ex: `dijit.Editor`)
-	renderAsHtml: false,
-
-	// editor: String
-	//		Class name for Editor widget
-	editor: "dijit.form.TextBox",
-
-	// editorWrapper: String
-	//		Class name for widget that wraps the editor widget, displaying save/cancel
-	//		buttons.
-	editorWrapper: "dijit._InlineEditor",
-
-	// editorParams: Object
-	//		Set of parameters for editor, like {required: true}
-	editorParams: {},
-
-	onChange: function(value){
-		// summary:
-		//		Set this handler to be notified of changes to value.
-		// tags:
-		//		callback
-	},
-
-	onCancel: function(){
-		// summary:
-		//		Set this handler to be notified when editing is cancelled.
-		// tags:
-		//		callback
-	},
-
-	// width: String
-	//		Width of editor.  By default it's width=100% (ie, block mode).
-	width: "100%",
-
-	// value: String
-	//		The display value of the widget in read-only mode
-	value: "",
-
-	// noValueIndicator: [const] String
-	//		The text that gets displayed when there is no value (so that the user has a place to click to edit)
-	noValueIndicator: "<span style='font-family: wingdings; text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>",
-
-	constructor: function(){
-		// summary:
-		//		Sets up private arrays etc.
-		// tags:
-		//		private
-		this.editorParams = {};
-	},
-
-	postMixInProperties: function(){
-		this.inherited(arguments);
-
-		// save pointer to original source node, since Widget nulls-out srcNodeRef
-		this.displayNode = this.srcNodeRef;
-
-		// connect handlers to the display node
-		var events = {
-			ondijitclick: "_onClick",
-			onmouseover: "_onMouseOver",
-			onmouseout: "_onMouseOut",
-			onfocus: "_onMouseOver",
-			onblur: "_onMouseOut"
-		};
-		for(var name in events){
-			this.connect(this.displayNode, name, events[name]);
-		}
-		dijit.setWaiRole(this.displayNode, "button");
-		if(!this.displayNode.getAttribute("tabIndex")){
-			this.displayNode.setAttribute("tabIndex", 0);
-		}
-
-		this.attr('value', this.value || this.displayNode.innerHTML);
-	},
-
-	setDisabled: function(/*Boolean*/ disabled){
-		// summary:
-		//		Deprecated.   Use attr('disable', ...) instead.
-		// tags:
-		//		deprecated
-		dojo.deprecated("dijit.InlineEditBox.setDisabled() is deprecated.  Use attr('disabled', bool) instead.", "", "2.0");
-		this.attr('disabled', disabled);
-	},
-
-	_setDisabledAttr: function(/*Boolean*/ disabled){
-		// summary:
-		//		Hook to make attr("disabled", ...) work.
-		//		Set disabled state of widget.
-		this.disabled = disabled;
-		dijit.setWaiState(this.domNode, "disabled", disabled);
-		if(disabled){
-			this.displayNode.removeAttribute("tabIndex");
-		}else{
-			this.displayNode.setAttribute("tabIndex", 0);
-		}
-	},
-
-	_onMouseOver: function(){
-		// summary:
-		//		Handler for onmouseover event.
-		// tags:
-		//		private
-		dojo.addClass(this.displayNode, this.disabled ? "dijitDisabledClickableRegion" : "dijitClickableRegion");
-	},
-
-	_onMouseOut: function(){
-		// summary:
-		//		Handler for onmouseout event.
-		// tags:
-		//		private
-		dojo.removeClass(this.displayNode, this.disabled ? "dijitDisabledClickableRegion" : "dijitClickableRegion");
-	},
-
-	_onClick: function(/*Event*/ e){
-		// summary:
-		//		Handler for onclick event.
-		// tags:
-		//		private
-		if(this.disabled){ return; }
-		if(e){ dojo.stopEvent(e); }
-		this._onMouseOut();
-
-		// Since FF gets upset if you move a node while in an event handler for that node...
-		setTimeout(dojo.hitch(this, "edit"), 0);
-	},
-
-	edit: function(){
-		// summary:
-		//		Display the editor widget in place of the original (read only) markup.
-		// tags:
-		//		private
-
-		if(this.disabled || this.editing){ return; }
-		this.editing = true;
-
-		// save some display node values that can be restored later
-		this._savedPosition = dojo.style(this.displayNode, "position") || "static";
-		this._savedOpacity = dojo.style(this.displayNode, "opacity") || "1";
-		this._savedTabIndex = dojo.attr(this.displayNode, "tabIndex") || "0";
-
-		if(this.wrapperWidget){
-			this.wrapperWidget.editWidget.attr("displayedValue" in this.editorParams ? "displayedValue" : "value", this.value);
-		}else{
-			// Placeholder for edit widget
-			// Put place holder (and eventually editWidget) before the display node so that it's positioned correctly
-			// when Calendar dropdown appears, which happens automatically on focus.
-			var placeholder = dojo.create("span", null, this.domNode, "before");
-
-			// Create the editor wrapper (the thing that holds the editor widget and the save/cancel buttons)
-			var ewc = dojo.getObject(this.editorWrapper);
-			this.wrapperWidget = new ewc({
-				value: this.value,
-				buttonSave: this.buttonSave,
-				buttonCancel: this.buttonCancel,
-				tabIndex: this._savedTabIndex,
-				editor: this.editor,
-				inlineEditBox: this,
-				sourceStyle: dojo.getComputedStyle(this.displayNode),
-				save: dojo.hitch(this, "save"),
-				cancel: dojo.hitch(this, "cancel")
-			}, placeholder);
-		}
-		var ww = this.wrapperWidget;
-
-		if(dojo.isIE){
-			dijit.focus(dijit.getFocus()); // IE (at least 8) needs help with tab order changes
-		}
-		// to avoid screen jitter, we first create the editor with position:absolute, visibility:hidden,
-		// and then when it's finished rendering, we switch from display mode to editor
-		// position:absolute releases screen space allocated to the display node
-		// opacity:0 is the same as visibility:hidden but is still focusable
-		// visiblity:hidden removes focus outline
-
-		dojo.style(this.displayNode, { position: "absolute", opacity: "0", display: "none" }); // makes display node invisible, display style used for focus-ability
-		dojo.style(ww.domNode, { position: this._savedPosition, visibility: "visible", opacity: "1" });
-		dojo.attr(this.displayNode, "tabIndex", "-1"); // needed by WebKit for TAB from editor to skip displayNode
-
-		// Replace the display widget with edit widget, leaving them both displayed for a brief time so that
-		// focus can be shifted without incident.  (browser may needs some time to render the editor.)
-		setTimeout(dojo.hitch(this, function(){
-			ww.focus(); // both nodes are showing, so we can switch focus safely
-			ww._resetValue = ww.getValue();
-		}), 0);
-	},
-
-	_onBlur: function(){
-		// summary:
-		//		Called when focus moves outside the InlineEditBox.
-		//		Performs garbage collection.
-		// tags:
-		//		private
-
-		this.inherited(arguments);
-		if(!this.editing){
-			setTimeout(dojo.hitch(this, function(){
-				if(this.wrapperWidget){
-					this.wrapperWidget.destroy();
-					delete this.wrapperWidget;
-				}
-			}), 0);
-		}
-	},
-
-	_showText: function(/*Boolean*/ focus){
-		// summary:
-		//		Revert to display mode, and optionally focus on display node
-		// tags:
-		//		private
-
-		var ww = this.wrapperWidget;
-		dojo.style(ww.domNode, { position: "absolute", visibility: "hidden", opacity: "0" }); // hide the editor from mouse/keyboard events
-		dojo.style(this.displayNode, { position: this._savedPosition, opacity: this._savedOpacity, display: "" }); // make the original text visible
-		dojo.attr(this.displayNode, "tabIndex", this._savedTabIndex);
-		if(focus){
-			dijit.focus(this.displayNode);
-		}
-	},
-
-	save: function(/*Boolean*/ focus){
-		// summary:
-		//		Save the contents of the editor and revert to display mode.
-		// focus: Boolean
-		//		Focus on the display mode text
-		// tags:
-		//		private
-
-		if(this.disabled || !this.editing){ return; }
-		this.editing = false;
-
-		var ww = this.wrapperWidget;
-		var value = ww.getValue();
-		this.attr('value', value); // display changed, formatted value
-
-		// tell the world that we have changed
-		setTimeout(dojo.hitch(this, "onChange", value), 0); // setTimeout prevents browser freeze for long-running event handlers
-
-		this._showText(focus); // set focus as needed
-	},
-
-	setValue: function(/*String*/ val){
-		// summary:
-		//		Deprecated.   Use attr('value', ...) instead.
-		// tags:
-		//		deprecated
-		dojo.deprecated("dijit.InlineEditBox.setValue() is deprecated.  Use attr('value', ...) instead.", "", "2.0");
-		return this.attr("value", val);
-	},
-
-	_setValueAttr: function(/*String*/ val){
-		// summary:
-		// 		Hook to make attr("value", ...) work.
-		//		Inserts specified HTML value into this node, or an "input needed" character if node is blank.
-
-		this.value = val = dojo.trim(val);
-		if(!this.renderAsHtml){
-			val = val.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;").replace(/\n/g, "<br>");
-		}
-		this.displayNode.innerHTML = val || this.noValueIndicator;
-	},
-
-	getValue: function(){
-		// summary:
-		//		Deprecated.   Use attr('value') instead.
-		// tags:
-		//		deprecated
-		dojo.deprecated("dijit.InlineEditBox.getValue() is deprecated.  Use attr('value') instead.", "", "2.0");
-		return this.attr("value");
-	},
-
-	cancel: function(/*Boolean*/ focus){
-		// summary:
-		//		Revert to display mode, discarding any changes made in the editor
-		// tags:
-		//		private
-
-		if(this.disabled || !this.editing){ return; }
-		this.editing = false;
-
-		// tell the world that we have no changes
-		setTimeout(dojo.hitch(this, "onCancel"), 0); // setTimeout prevents browser freeze for long-running event handlers
-
-		this._showText(focus);
-	}
-});
-
-dojo.declare(
-	"dijit._InlineEditor",
-	 [dijit._Widget, dijit._Templated],
-{
-	// summary:
-	// 		Internal widget used by InlineEditBox, displayed when in editing mode
-	//		to display the editor and maybe save/cancel buttons.  Calling code should
-	//		connect to save/cancel methods to detect when editing is finished
-	//
-	//		Has mainly the same parameters as InlineEditBox, plus these values:
-	//
-	// style: Object
-	//		Set of CSS attributes of display node, to replicate in editor
-	//
-	// value: String
-	//		Value as an HTML string or plain text string, depending on renderAsHTML flag
-
-	templateString: dojo.cache("dijit", "templates/InlineEditBox.html", "<span dojoAttachPoint=\"editNode\" waiRole=\"presentation\" style=\"position: absolute; visibility:hidden\" class=\"dijitReset dijitInline\"\n\tdojoAttachEvent=\"onkeypress: _onKeyPress\"\n\t><span dojoAttachPoint=\"editorPlaceholder\"></span\n\t><span dojoAttachPoint=\"buttonContainer\"\n\t\t><button class='saveButton' dojoAttachPoint=\"saveButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:save\" label=\"${buttonSave}\"></button\n\t\t><button class='cancelButton' dojoAttachPoint=\"cancelButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:cancel\" label=\"${buttonCancel}\"></button\n\t></span\n></span>\n"),
-	widgetsInTemplate: true,
-
-	postMixInProperties: function(){
-		this.inherited(arguments);
-		this.messages = dojo.i18n.getLocalization("dijit", "common", this.lang);
-		dojo.forEach(["buttonSave", "buttonCancel"], function(prop){
-			if(!this[prop]){ this[prop] = this.messages[prop]; }
-		}, this);
-	},
-
-	postCreate: function(){
-		// Create edit widget in place in the template
-		var cls = dojo.getObject(this.editor);
-
-		// Copy the style from the source
-		// Don't copy ALL properties though, just the necessary/applicable ones
-		var srcStyle = this.sourceStyle;
-		var editStyle = "line-height:" + srcStyle.lineHeight + ";";
-		dojo.forEach(["Weight","Family","Size","Style"], function(prop){
-			editStyle += "font-"+prop+":"+srcStyle["font"+prop]+";";
-		}, this);
-		dojo.forEach(["marginTop","marginBottom","marginLeft", "marginRight"], function(prop){
-			this.domNode.style[prop] = srcStyle[prop];
-		}, this);
-		var width = this.inlineEditBox.width;
-		if(width == "100%"){
-			// block mode
-			editStyle += "width:100%;";
-			this.domNode.style.display = "block";
-		}else{
-			// inline-block mode
-			editStyle += "width:" + (width + (Number(width) == width ? "px" : "")) + ";";
-		}
-		var editorParams = this.inlineEditBox.editorParams;
-		editorParams.style = editStyle;
-		editorParams[ "displayedValue" in cls.prototype ? "displayedValue" : "value"] = this.value;
-		var ew = this.editWidget = new cls(editorParams, this.editorPlaceholder);
-
-		if(this.inlineEditBox.autoSave){
-			// Hide the save/cancel buttons since saving is done by simply tabbing away or
-			// selecting a value from the drop down list
-			this.buttonContainer.style.display="none";
-
-			// Selecting a value from a drop down list causes an onChange event and then we save
-			this.connect(ew, "onChange", "_onChange");
-
-			// ESC and TAB should cancel and save.  Note that edit widgets do a stopEvent() on ESC key (to
-			// prevent Dialog from closing when the user just wants to revert the value in the edit widget),
-			// so this is the only way we can see the key press event.
-			this.connect(ew, "onKeyPress", "_onKeyPress");
-		}else{
-			// If possible, enable/disable save button based on whether the user has changed the value
-			if("intermediateChanges" in cls.prototype){
-				ew.attr("intermediateChanges", true);
-				this.connect(ew, "onChange", "_onIntermediateChange");
-				this.saveButton.attr("disabled", true);
-			}
-		}
-	},
-
-	_onIntermediateChange: function(val){
-		// summary:
-		//		Called for editor widgets that support the intermediateChanges=true flag as a way
-		//		to detect when to enable/disabled the save button
-		this.saveButton.attr("disabled", (this.getValue() == this._resetValue) || !this.enableSave());
-	},
-
-	destroy: function(){
-		this.editWidget.destroy(true); // let the parent wrapper widget clean up the DOM
-		this.inherited(arguments);
-	},
-
-	getValue: function(){
-		// summary:
-		//		Return the [display] value of the edit widget
-		var ew = this.editWidget;
-		return String(ew.attr("displayedValue" in ew ? "displayedValue" : "value"));
-	},
-
-	_onKeyPress: function(e){
-		// summary:
-		//		Handler for keypress in the edit box in autoSave mode.
-		// description:
-		//		For autoSave widgets, if Esc/Enter, call cancel/save.
-		// tags:
-		//		private
-
-		if(this.inlineEditBox.autoSave && this.inlineEditBox.editing){
-			if(e.altKey || e.ctrlKey){ return; }
-			// If Enter/Esc pressed, treat as save/cancel.
-			if(e.charOrCode == dojo.keys.ESCAPE){
-				dojo.stopEvent(e);
-				this.cancel(true); // sets editing=false which short-circuits _onBlur processing
-			}else if(e.charOrCode == dojo.keys.ENTER && e.target.tagName == "INPUT"){
-				dojo.stopEvent(e);
-				this._onChange(); // fire _onBlur and then save
-			}
-
-			// _onBlur will handle TAB automatically by allowing
-			// the TAB to change focus before we mess with the DOM: #6227
-			// Expounding by request:
-			// 	The current focus is on the edit widget input field.
-			//	save() will hide and destroy this widget.
-			//	We want the focus to jump from the currently hidden
-			//	displayNode, but since it's hidden, it's impossible to
-			//	unhide it, focus it, and then have the browser focus
-			//	away from it to the next focusable element since each
-			//	of these events is asynchronous and the focus-to-next-element
-			//	is already queued.
-			//	So we allow the browser time to unqueue the move-focus event
-			//	before we do all the hide/show stuff.
-		}
-	},
-
-	_onBlur: function(){
-		// summary:
-		//		Called when focus moves outside the editor
-		// tags:
-		//		private
-
-		this.inherited(arguments);
-		if(this.inlineEditBox.autoSave && this.inlineEditBox.editing){
-			if(this.getValue() == this._resetValue){
-				this.cancel(false);
-			}else if(this.enableSave()){
-				this.save(false);
-			}
-		}
-	},
-
-	_onChange: function(){
-		// summary:
-		//		Called when the underlying widget fires an onChange event,
-		//		such as when the user selects a value from the drop down list of a ComboBox,
-		//		which means that the user has finished entering the value and we should save.
-		// tags:
-		//		private
-
-		if(this.inlineEditBox.autoSave && this.inlineEditBox.editing && this.enableSave()){
-			dojo.style(this.inlineEditBox.displayNode, { display: "" });
-			dijit.focus(this.inlineEditBox.displayNode); // fires _onBlur which will save the formatted value
-		}
-	},
-
-	enableSave: function(){
-		// summary:
-		//		User overridable function returning a Boolean to indicate
-		// 		if the Save button should be enabled or not - usually due to invalid conditions
-		// tags:
-		//		extension
-		return (
-			this.editWidget.isValid
-			? this.editWidget.isValid()
-			: true
-		);
-	},
-
-	focus: function(){
-		// summary:
-		//		Focus the edit widget.
-		// tags:
-		//		protected
-
-		this.editWidget.focus();
-		setTimeout(dojo.hitch(this, function(){
-			if(this.editWidget.focusNode.tagName == "INPUT"){
-				dijit.selectInputText(this.editWidget.focusNode);
-			}
-		}), 0);
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/LICENSE b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/LICENSE
deleted file mode 100644
index ad1676a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/LICENSE
+++ /dev/null
@@ -1,195 +0,0 @@
-Dojo is available under *either* the terms of the modified BSD license *or* the
-Academic Free License version 2.1. As a recipient of Dojo, you may choose which
-license to receive this code under (except as noted in per-module LICENSE
-files). Some modules may not be the copyright of the Dojo Foundation. These
-modules contain explicit declarations of copyright in both the LICENSE files in
-the directories in which they reside and in the code itself. No external
-contributions are allowed under licenses which are fundamentally incompatible
-with the AFL or BSD licenses that Dojo is distributed under.
-
-The text of the AFL and BSD licenses is reproduced below. 
-
--------------------------------------------------------------------------------
-The "New" BSD License:
-**********************
-
-Copyright (c) 2005-2009, The Dojo Foundation
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-  * Redistributions of source code must retain the above copyright notice, this
-    list of conditions and the following disclaimer.
-  * Redistributions in binary form must reproduce the above copyright notice,
-    this list of conditions and the following disclaimer in the documentation
-    and/or other materials provided with the distribution.
-  * Neither the name of the Dojo Foundation nor the names of its contributors
-    may be used to endorse or promote products derived from this software
-    without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
--------------------------------------------------------------------------------
-The Academic Free License, v. 2.1:
-**********************************
-
-This Academic Free License (the "License") applies to any original work of
-authorship (the "Original Work") whose owner (the "Licensor") has placed the
-following notice immediately following the copyright notice for the Original
-Work:
-
-Licensed under the Academic Free License version 2.1
-
-1) Grant of Copyright License. Licensor hereby grants You a world-wide,
-royalty-free, non-exclusive, perpetual, sublicenseable license to do the
-following:
-
-a) to reproduce the Original Work in copies;
-
-b) to prepare derivative works ("Derivative Works") based upon the Original
-Work;
-
-c) to distribute copies of the Original Work and Derivative Works to the
-public;
-
-d) to perform the Original Work publicly; and
-
-e) to display the Original Work publicly.
-
-2) Grant of Patent License. Licensor hereby grants You a world-wide,
-royalty-free, non-exclusive, perpetual, sublicenseable license, under patent
-claims owned or controlled by the Licensor that are embodied in the Original
-Work as furnished by the Licensor, to make, use, sell and offer for sale the
-Original Work and Derivative Works.
-
-3) Grant of Source Code License. The term "Source Code" means the preferred
-form of the Original Work for making modifications to it and all available
-documentation describing how to modify the Original Work. Licensor hereby
-agrees to provide a machine-readable copy of the Source Code of the Original
-Work along with each copy of the Original Work that Licensor distributes.
-Licensor reserves the right to satisfy this obligation by placing a
-machine-readable copy of the Source Code in an information repository
-reasonably calculated to permit inexpensive and convenient access by You for as
-long as Licensor continues to distribute the Original Work, and by publishing
-the address of that information repository in a notice immediately following
-the copyright notice that applies to the Original Work.
-
-4) Exclusions From License Grant. Neither the names of Licensor, nor the names
-of any contributors to the Original Work, nor any of their trademarks or
-service marks, may be used to endorse or promote products derived from this
-Original Work without express prior written permission of the Licensor. Nothing
-in this License shall be deemed to grant any rights to trademarks, copyrights,
-patents, trade secrets or any other intellectual property of Licensor except as
-expressly stated herein. No patent license is granted to make, use, sell or
-offer to sell embodiments of any patent claims other than the licensed claims
-defined in Section 2. No right is granted to the trademarks of Licensor even if
-such marks are included in the Original Work. Nothing in this License shall be
-interpreted to prohibit Licensor from licensing under different terms from this
-License any Original Work that Licensor otherwise would have a right to
-license.
-
-5) This section intentionally omitted.
-
-6) Attribution Rights. You must retain, in the Source Code of any Derivative
-Works that You create, all copyright, patent or trademark notices from the
-Source Code of the Original Work, as well as any notices of licensing and any
-descriptive text identified therein as an "Attribution Notice." You must cause
-the Source Code for any Derivative Works that You create to carry a prominent
-Attribution Notice reasonably calculated to inform recipients that You have
-modified the Original Work.
-
-7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that
-the copyright in and to the Original Work and the patent rights granted herein
-by Licensor are owned by the Licensor or are sublicensed to You under the terms
-of this License with the permission of the contributor(s) of those copyrights
-and patent rights. Except as expressly stated in the immediately proceeding
-sentence, the Original Work is provided under this License on an "AS IS" BASIS
-and WITHOUT WARRANTY, either express or implied, including, without limitation,
-the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU.
-This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No
-license to Original Work is granted hereunder except under this disclaimer.
-
-8) Limitation of Liability. Under no circumstances and under no legal theory,
-whether in tort (including negligence), contract, or otherwise, shall the
-Licensor be liable to any person for any direct, indirect, special, incidental,
-or consequential damages of any character arising as a result of this License
-or the use of the Original Work including, without limitation, damages for loss
-of goodwill, work stoppage, computer failure or malfunction, or any and all
-other commercial damages or losses. This limitation of liability shall not
-apply to liability for death or personal injury resulting from Licensor's
-negligence to the extent applicable law prohibits such limitation. Some
-jurisdictions do not allow the exclusion or limitation of incidental or
-consequential damages, so this exclusion and limitation may not apply to You.
-
-9) Acceptance and Termination. If You distribute copies of the Original Work or
-a Derivative Work, You must make a reasonable effort under the circumstances to
-obtain the express assent of recipients to the terms of this License. Nothing
-else but this License (or another written agreement between Licensor and You)
-grants You permission to create Derivative Works based upon the Original Work
-or to exercise any of the rights granted in Section 1 herein, and any attempt
-to do so except under the terms of this License (or another written agreement
-between Licensor and You) is expressly prohibited by U.S. copyright law, the
-equivalent laws of other countries, and by international treaty. Therefore, by
-exercising any of the rights granted to You in Section 1 herein, You indicate
-Your acceptance of this License and all of its terms and conditions.
-
-10) Termination for Patent Action. This License shall terminate automatically
-and You may no longer exercise any of the rights granted to You by this License
-as of the date You commence an action, including a cross-claim or counterclaim,
-against Licensor or any licensee alleging that the Original Work infringes a
-patent. This termination provision shall not apply for an action alleging
-patent infringement by combinations of the Original Work with other software or
-hardware.
-
-11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this
-License may be brought only in the courts of a jurisdiction wherein the
-Licensor resides or in which Licensor conducts its primary business, and under
-the laws of that jurisdiction excluding its conflict-of-law provisions. The
-application of the United Nations Convention on Contracts for the International
-Sale of Goods is expressly excluded. Any use of the Original Work outside the
-scope of this License or after its termination shall be subject to the
-requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et
-seq., the equivalent laws of other countries, and international treaty. This
-section shall survive the termination of this License.
-
-12) Attorneys Fees. In any action to enforce the terms of this License or
-seeking damages relating thereto, the prevailing party shall be entitled to
-recover its costs and expenses, including, without limitation, reasonable
-attorneys' fees and costs incurred in connection with such action, including
-any appeal of such action. This section shall survive the termination of this
-License.
-
-13) Miscellaneous. This License represents the complete agreement concerning
-the subject matter hereof. If any provision of this License is held to be
-unenforceable, such provision shall be reformed only to the extent necessary to
-make it enforceable.
-
-14) Definition of "You" in This License. "You" throughout this License, whether
-in upper or lower case, means an individual or a legal entity exercising rights
-under, and complying with all of the terms of, this License. For legal
-entities, "You" includes any entity that controls, is controlled by, or is
-under common control with you. For purposes of this definition, "control" means
-(i) the power, direct or indirect, to cause the direction or management of such
-entity, whether by contract or otherwise, or (ii) ownership of fifty percent
-(50%) or more of the outstanding shares, or (iii) beneficial ownership of such
-entity.
-
-15) Right to Use. You may use the Original Work in all ways not otherwise
-restricted or conditioned by this License or by law, and Licensor promises not
-to interfere with or be responsible for such uses by You.
-
-This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved.
-Permission is hereby granted to copy and distribute this license without
-modification. This license may not be modified without the express written
-permission of its copyright owner.
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Menu.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Menu.js
deleted file mode 100644
index 4db6119..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Menu.js
+++ /dev/null
@@ -1,712 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.Menu"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.Menu"] = true;
-dojo.provide("dijit.Menu");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._KeyNavContainer");
-dojo.require("dijit._Templated");
-
-dojo.declare("dijit._MenuBase",
-	[dijit._Widget, dijit._Templated, dijit._KeyNavContainer],
-{
-	// summary:
-	//		Base class for Menu and MenuBar
-
-	// parentMenu: [readonly] Widget
-	//		pointer to menu that displayed me
-	parentMenu: null,
-
-	// popupDelay: Integer
-	//		number of milliseconds before hovering (without clicking) causes the popup to automatically open.
-	popupDelay: 500,
-
-	startup: function(){
-		if(this._started){ return; }
-
-		dojo.forEach(this.getChildren(), function(child){ child.startup(); });
-		this.startupKeyNavChildren();
-
-		this.inherited(arguments);
-	},
-
-	onExecute: function(){
-		// summary:
-		//		Attach point for notification about when a menu item has been executed.
-		//		This is an internal mechanism used for Menus to signal to their parent to
-		//		close them, because they are about to execute the onClick handler.   In
-		//		general developers should not attach to or override this method.
-		// tags:
-		//		protected
-	},
-
-	onCancel: function(/*Boolean*/ closeAll){
-		// summary:
-		//		Attach point for notification about when the user cancels the current menu
-		//		This is an internal mechanism used for Menus to signal to their parent to
-		//		close them.  In general developers should not attach to or override this method.
-		// tags:
-		//		protected
-	},
-
-	_moveToPopup: function(/*Event*/ evt){
-		// summary:
-		//		This handles the right arrow key (left arrow key on RTL systems),
-		//		which will either open a submenu, or move to the next item in the
-		//		ancestor MenuBar
-		// tags:
-		//		private
-
-		if(this.focusedChild && this.focusedChild.popup && !this.focusedChild.disabled){
-			this.focusedChild._onClick(evt);
-		}else{
-			var topMenu = this._getTopMenu();
-			if(topMenu && topMenu._isMenuBar){
-				topMenu.focusNext();
-			}
-		}
-	},
-
-	_onPopupHover: function(/*Event*/ evt){
-		// summary:
-		//		This handler is called when the mouse moves over the popup.
-		// tags:
-		//		private
-
-		// if the mouse hovers over a menu popup that is in pending-close state,
-		// then stop the close operation.
-		// This can't be done in onItemHover since some popup targets don't have MenuItems (e.g. ColorPicker)
-		if(this.currentPopup && this.currentPopup._pendingClose_timer){
-			var parentMenu = this.currentPopup.parentMenu;
-			// highlight the parent menu item pointing to this popup
-			if(parentMenu.focusedChild){
-				parentMenu.focusedChild._setSelected(false);
-			}
-			parentMenu.focusedChild = this.currentPopup.from_item;
-			parentMenu.focusedChild._setSelected(true);
-			// cancel the pending close
-			this._stopPendingCloseTimer(this.currentPopup);
-		}
-	},
-
-	onItemHover: function(/*MenuItem*/ item){
-		// summary:
-		//		Called when cursor is over a MenuItem.
-		// tags:
-		//		protected
-
-		// Don't do anything unless user has "activated" the menu by:
-		//		1) clicking it
-		//		2) opening it from a parent menu (which automatically focuses it)
-		if(this.isActive){
-			this.focusChild(item);
-			if(this.focusedChild.popup && !this.focusedChild.disabled && !this.hover_timer){
-				this.hover_timer = setTimeout(dojo.hitch(this, "_openPopup"), this.popupDelay);
-			}
-		}
-		// if the user is mixing mouse and keyboard navigation,
-		// then the menu may not be active but a menu item has focus,
-		// but it's not the item that the mouse just hovered over.
-		// To avoid both keyboard and mouse selections, use the latest.
-		if(this.focusedChild){
-			this.focusChild(item);
-		}
-		this._hoveredChild = item;
-	},
-
-	_onChildBlur: function(item){
-		// summary:
-		//		Called when a child MenuItem becomes inactive because focus
-		//		has been removed from the MenuItem *and* it's descendant menus.
-		// tags:
-		//		private
-		this._stopPopupTimer();
-		item._setSelected(false);
-		// Close all popups that are open and descendants of this menu
-		var itemPopup = item.popup;
-		if(itemPopup){
-			this._stopPendingCloseTimer(itemPopup);
-			itemPopup._pendingClose_timer = setTimeout(function(){
-				itemPopup._pendingClose_timer = null;
-				if(itemPopup.parentMenu){
-					itemPopup.parentMenu.currentPopup = null;
-				}
-				dijit.popup.close(itemPopup); // this calls onClose
-			}, this.popupDelay);
-		}
-	},
-
-	onItemUnhover: function(/*MenuItem*/ item){
-		// summary:
-		//		Callback fires when mouse exits a MenuItem
-		// tags:
-		//		protected
-
-		if(this.isActive){
-			this._stopPopupTimer();
-		}
-		if(this._hoveredChild == item){ this._hoveredChild = null; }
-	},
-
-	_stopPopupTimer: function(){
-		// summary:
-		//		Cancels the popup timer because the user has stop hovering
-		//		on the MenuItem, etc.
-		// tags:
-		//		private
-		if(this.hover_timer){
-			clearTimeout(this.hover_timer);
-			this.hover_timer = null;
-		}
-	},
-
-	_stopPendingCloseTimer: function(/*dijit._Widget*/ popup){
-		// summary:
-		//		Cancels the pending-close timer because the close has been preempted
-		// tags:
-		//		private
-		if(popup._pendingClose_timer){
-			clearTimeout(popup._pendingClose_timer);
-			popup._pendingClose_timer = null;
-		}
-	},
-
-	_stopFocusTimer: function(){
-		// summary:
-		//		Cancels the pending-focus timer because the menu was closed before focus occured
-		// tags:
-		//		private
-		if(this._focus_timer){
-			clearTimeout(this._focus_timer);
-			this._focus_timer = null;
-		}
-	},
-
-	_getTopMenu: function(){
-		// summary:
-		//		Returns the top menu in this chain of Menus
-		// tags:
-		//		private
-		for(var top=this; top.parentMenu; top=top.parentMenu);
-		return top;
-	},
-
-	onItemClick: function(/*dijit._Widget*/ item, /*Event*/ evt){
-		// summary:
-		//		Handle clicks on an item.
-		// tags:
-		//		private
-		if(item.disabled){ return false; }
-
-		// this can't be done in _onFocus since the _onFocus events occurs asynchronously
-		if(typeof this.isShowingNow == 'undefined'){ // non-popup menu
-			this._markActive();
-		}
-
-		this.focusChild(item);
-
-		if(item.popup){
-			this._openPopup();
-		}else{
-			// before calling user defined handler, close hierarchy of menus
-			// and restore focus to place it was when menu was opened
-			this.onExecute();
-
-			// user defined handler for click
-			item.onClick(evt);
-		}
-	},
-
-	_openPopup: function(){
-		// summary:
-		//		Open the popup to the side of/underneath the current menu item
-		// tags:
-		//		protected
-
-		this._stopPopupTimer();
-		var from_item = this.focusedChild;
-		if(!from_item){ return; } // the focused child lost focus since the timer was started
-		var popup = from_item.popup;
-		if(popup.isShowingNow){ return; }
-		if(this.currentPopup){
-			this._stopPendingCloseTimer(this.currentPopup);
-			dijit.popup.close(this.currentPopup);
-		}
-		popup.parentMenu = this;
-		popup.from_item = from_item; // helps finding the parent item that should be focused for this popup
-		var self = this;
-		dijit.popup.open({
-			parent: this,
-			popup: popup,
-			around: from_item.domNode,
-			orient: this._orient || (this.isLeftToRight() ?
-									{'TR': 'TL', 'TL': 'TR', 'BR': 'BL', 'BL': 'BR'} :
-									{'TL': 'TR', 'TR': 'TL', 'BL': 'BR', 'BR': 'BL'}),
-			onCancel: function(){ // called when the child menu is canceled
-				// set isActive=false (_closeChild vs _cleanUp) so that subsequent hovering will NOT open child menus
-				// which seems aligned with the UX of most applications (e.g. notepad, wordpad, paint shop pro)
-				self.focusChild(from_item);	// put focus back on my node
-				self._cleanUp();			// close the submenu (be sure this is done _after_ focus is moved)
-				from_item._setSelected(true); // oops, _cleanUp() deselected the item
-				self.focusedChild = from_item;	// and unset focusedChild
-			},
-			onExecute: dojo.hitch(this, "_cleanUp")
-		});
-
-		this.currentPopup = popup;
-		// detect mouseovers to handle lazy mouse movements that temporarily focus other menu items
-		popup.connect(popup.domNode, "onmouseenter", dojo.hitch(self, "_onPopupHover")); // cleaned up when the popped-up widget is destroyed on close
-
-		if(popup.focus){
-			// If user is opening the popup via keyboard (right arrow, or down arrow for MenuBar),
-			// if the cursor happens to collide with the popup, it will generate an onmouseover event
-			// even though the mouse wasn't moved.   Use a setTimeout() to call popup.focus so that
-			// our focus() call overrides the onmouseover event, rather than vice-versa.  (#8742)
-			popup._focus_timer = setTimeout(dojo.hitch(popup, function(){
-				this._focus_timer = null;
-				this.focus();
-			}), 0);
-		}
-	},
-
-	_markActive: function(){
-		// summary:
-		//              Mark this menu's state as active.
-		//		Called when this Menu gets focus from:
-		//			1) clicking it (mouse or via space/arrow key)
-		//			2) being opened by a parent menu.
-		//		This is not called just from mouse hover.
-		//		Focusing a menu via TAB does NOT automatically set isActive
-		//		since TAB is a navigation operation and not a selection one.
-		//		For Windows apps, pressing the ALT key focuses the menubar
-		//		menus (similar to TAB navigation) but the menu is not active
-		//		(ie no dropdown) until an item is clicked.
-		this.isActive = true;
-		dojo.addClass(this.domNode, "dijitMenuActive");
-		dojo.removeClass(this.domNode, "dijitMenuPassive");
-	},
-
-	onOpen: function(/*Event*/ e){
-		// summary:
-		//		Callback when this menu is opened.
-		//		This is called by the popup manager as notification that the menu
-		//		was opened.
-		// tags:
-		//		private
-
-		this.isShowingNow = true;
-		this._markActive();
-	},
-
-	_markInactive: function(){
-		// summary:
-		//		Mark this menu's state as inactive.
-		this.isActive = false; // don't do this in _onBlur since the state is pending-close until we get here
-		dojo.removeClass(this.domNode, "dijitMenuActive");
-		dojo.addClass(this.domNode, "dijitMenuPassive");
-	},
-
-	onClose: function(){
-		// summary:
-		//		Callback when this menu is closed.
-		//		This is called by the popup manager as notification that the menu
-		//		was closed.
-		// tags:
-		//		private
-
-		this._stopFocusTimer();
-		this._markInactive();
-		this.isShowingNow = false;
-		this.parentMenu = null;
-	},
-
-	_closeChild: function(){
-		// summary:
-		//		Called when submenu is clicked or focus is lost.  Close hierarchy of menus.
-		// tags:
-		//		private
-		this._stopPopupTimer();
-		if(this.focusedChild){ // unhighlight the focused item
-			this.focusedChild._setSelected(false);
-			this.focusedChild._onUnhover();
-			this.focusedChild = null;
-		}
-		if(this.currentPopup){
-			// Close all popups that are open and descendants of this menu
-			dijit.popup.close(this.currentPopup);
-			this.currentPopup = null;
-		}
-	},
-
-	_onItemFocus: function(/*MenuItem*/ item){
-		// summary:
-		//		Called when child of this Menu gets focus from:
-		//			1) clicking it
-		//			2) tabbing into it
-		//			3) being opened by a parent menu.
-		//		This is not called just from mouse hover.
-		if(this._hoveredChild && this._hoveredChild != item){
-			this._hoveredChild._onUnhover(); // any previous mouse movement is trumped by focus selection
-		}
-	},
-
-	_onBlur: function(){
-		// summary:
-		//		Called when focus is moved away from this Menu and it's submenus.
-		// tags:
-		//		protected
-		this._cleanUp();
-		this.inherited(arguments);
-	},
-
-	_cleanUp: function(){
-		// summary:
-		//		Called when the user is done with this menu.  Closes hierarchy of menus.
-		// tags:
-		//		private
-
-		this._closeChild(); // don't call this.onClose since that's incorrect for MenuBar's that never close
-		if(typeof this.isShowingNow == 'undefined'){ // non-popup menu doesn't call onClose
-			this._markInactive();
-		}
-	}
-});
-
-dojo.declare("dijit.Menu",
-	dijit._MenuBase,
-	{
-	// summary
-	//		A context menu you can assign to multiple elements
-
-	// TODO: most of the code in here is just for context menu (right-click menu)
-	// support.  In retrospect that should have been a separate class (dijit.ContextMenu).
-	// Split them for 2.0
-
-	constructor: function(){
-		this._bindings = [];
-	},
-
-	templateString: dojo.cache("dijit", "templates/Menu.html", "<table class=\"dijit dijitMenu dijitMenuPassive dijitReset dijitMenuTable\" waiRole=\"menu\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress:_onKeyPress\">\n\t<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>\n</table>\n"),
-
-	// targetNodeIds: [const] String[]
-	//		Array of dom node ids of nodes to attach to.
-	//		Fill this with nodeIds upon widget creation and it becomes context menu for those nodes.
-	targetNodeIds: [],
-
-	// contextMenuForWindow: [const] Boolean
-	//		If true, right clicking anywhere on the window will cause this context menu to open.
-	//		If false, must specify targetNodeIds.
-	contextMenuForWindow: false,
-
-	// leftClickToOpen: [const] Boolean
-	//		If true, menu will open on left click instead of right click, similiar to a file menu.
-	leftClickToOpen: false,
-
-	// refocus: Boolean
-	// 		When this menu closes, re-focus the element which had focus before it was opened.
-	refocus: true,
-
-	// _contextMenuWithMouse: [private] Boolean
-	//		Used to record mouse and keyboard events to determine if a context
-	//		menu is being opened with the keyboard or the mouse.
-	_contextMenuWithMouse: false,
-
-	postCreate: function(){
-		if(this.contextMenuForWindow){
-			this.bindDomNode(dojo.body());
-		}else{
-			// TODO: should have _setTargetNodeIds() method to handle initialization and a possible
-			// later attr('targetNodeIds', ...) call.   There's also a problem that targetNodeIds[]
-			// gets stale after calls to bindDomNode()/unBindDomNode() as it still is just the original list (see #9610)
-			dojo.forEach(this.targetNodeIds, this.bindDomNode, this);
-		}
-		var k = dojo.keys, l = this.isLeftToRight();
-		this._openSubMenuKey = l ? k.RIGHT_ARROW : k.LEFT_ARROW;
-		this._closeSubMenuKey = l ? k.LEFT_ARROW : k.RIGHT_ARROW;
-		this.connectKeyNavHandlers([k.UP_ARROW], [k.DOWN_ARROW]);
-	},
-
-	_onKeyPress: function(/*Event*/ evt){
-		// summary:
-		//		Handle keyboard based menu navigation.
-		// tags:
-		//		protected
-
-		if(evt.ctrlKey || evt.altKey){ return; }
-
-		switch(evt.charOrCode){
-			case this._openSubMenuKey:
-				this._moveToPopup(evt);
-				dojo.stopEvent(evt);
-				break;
-			case this._closeSubMenuKey:
-				if(this.parentMenu){
-					if(this.parentMenu._isMenuBar){
-						this.parentMenu.focusPrev();
-					}else{
-						this.onCancel(false);
-					}
-				}else{
-					dojo.stopEvent(evt);
-				}
-				break;
-		}
-	},
-
-	// thanks burstlib!
-	_iframeContentWindow: function(/* HTMLIFrameElement */iframe_el){
-		// summary:
-		//		Returns the window reference of the passed iframe
-		// tags:
-		//		private
-		var win = dijit.getDocumentWindow(this._iframeContentDocument(iframe_el)) ||
-			// Moz. TODO: is this available when defaultView isn't?
-			this._iframeContentDocument(iframe_el)['__parent__'] ||
-			(iframe_el.name && dojo.doc.frames[iframe_el.name]) || null;
-		return win;	//	Window
-	},
-
-	_iframeContentDocument: function(/* HTMLIFrameElement */iframe_el){
-		// summary:
-		//		Returns a reference to the document object inside iframe_el
-		// tags:
-		//		protected
-		var doc = iframe_el.contentDocument // W3
-			|| (iframe_el.contentWindow && iframe_el.contentWindow.document) // IE
-			|| (iframe_el.name && dojo.doc.frames[iframe_el.name] && dojo.doc.frames[iframe_el.name].document)
-			|| null;
-		return doc;	//	HTMLDocument
-	},
-
-	bindDomNode: function(/*String|DomNode*/ node){
-		// summary:
-		//		Attach menu to given node
-		node = dojo.byId(node);
-
-		var cn;	// Connect node
-
-		// Support context menus on iframes.   Rather than binding to the iframe itself we need
-		// to bind to the <body> node inside the iframe.
-		if(node.tagName.toLowerCase() == "iframe"){
-			var iframe = node,
-				win = this._iframeContentWindow(iframe);
-			cn = dojo.withGlobal(win, dojo.body);
-		}else{
-			
-			// To capture these events at the top level, attach to <html>, not <body>.
-			// Otherwise right-click context menu just doesn't work.
-			cn = (node == dojo.body() ? dojo.doc.documentElement : node);
-		}
-
-
-		// "binding" is the object to track our connection to the node (ie, the parameter to bindDomNode())
-		var binding = {
-			node: node,
-			iframe: iframe
-		};
-
-		// Save info about binding in _bindings[], and make node itself record index(+1) into
-		// _bindings[] array.   Prefix w/_dijitMenu to avoid setting an attribute that may
-		// start with a number, which fails on FF/safari.
-		dojo.attr(node, "_dijitMenu" + this.id, this._bindings.push(binding));
-
-		// Setup the connections to monitor click etc., unless we are connecting to an iframe which hasn't finished
-		// loading yet, in which case we need to wait for the onload event first, and then connect
-		var doConnects = dojo.hitch(this, function(cn){
-			return [
-				dojo.connect(cn, (this.leftClickToOpen)?"onclick":"oncontextmenu", this, function(evt){
-					this._openMyself(evt, cn, iframe);
-				}),
-				dojo.connect(cn, "onkeydown", this, "_contextKey"),
-				dojo.connect(cn, "onmousedown", this, "_contextMouse")
-			];
-		});
-		binding.connects = cn ? doConnects(cn) : [];
-
-		if(iframe){
-			// Setup handler to [re]bind to the iframe when the contents are initially loaded,
-			// and every time the contents change.
-			// Need to do this b/c we are actually binding to the iframe's <body> node.
-			// Note: can't use dojo.connect(), see #9609.
-
-			binding.onloadHandler = dojo.hitch(this, function(){
-				// want to remove old connections, but IE throws exceptions when trying to
-				// access the <body> node because it's already gone, or at least in a state of limbo
-
-				var win = this._iframeContentWindow(iframe);
-					cn = dojo.withGlobal(win, dojo.body);
-				binding.connects = doConnects(cn);
-			});
-			if(iframe.addEventListener){
-				iframe.addEventListener("load", binding.onloadHandler, false);
-			}else{
-				iframe.attachEvent("onload", binding.onloadHandler);
-			}
-		}
-	},
-
-	unBindDomNode: function(/*String|DomNode*/ nodeName){
-		// summary:
-		//		Detach menu from given node
-
-		var node;
-		try{
-			node = dojo.byId(nodeName);
-		}catch(e){
-			// On IE the dojo.byId() call will get an exception if the attach point was
-			// the <body> node of an <iframe> that has since been reloaded (and thus the
-			// <body> node is in a limbo state of destruction.
-			return;
-		}
-
-		// node["_dijitMenu" + this.id] contains index(+1) into my _bindings[] array
-		var attrName = "_dijitMenu" + this.id;
-		if(node && dojo.hasAttr(node, attrName)){
-			var bid = dojo.attr(node, attrName)-1, b = this._bindings[bid];
-			dojo.forEach(b.connects, dojo.disconnect);
-
-			// Remove listener for iframe onload events
-			var iframe = b.iframe;
-			if(iframe){
-				if(iframe.removeEventListener){
-					iframe.removeEventListener("load", b.onloadHandler, false);
-				}else{
-					iframe.detachEvent("onload", b.onloadHandler);
-				}
-			}
-
-			dojo.removeAttr(node, attrName);
-			delete this._bindings[bid];
-		}
-	},
-
-	_contextKey: function(e){
-		// summary:
-		//		Code to handle popping up editor using F10 key rather than mouse
-		// tags:
-		//		private
-		this._contextMenuWithMouse = false;
-		if(e.keyCode == dojo.keys.F10){
-			dojo.stopEvent(e);
-			if(e.shiftKey && e.type == "keydown"){
-				// FF: copying the wrong property from e will cause the system
-				// context menu to appear in spite of stopEvent. Don't know
-				// exactly which properties cause this effect.
-				var _e = { target: e.target, pageX: e.pageX, pageY: e.pageY };
-				_e.preventDefault = _e.stopPropagation = function(){};
-				// IE: without the delay, focus work in "open" causes the system
-				// context menu to appear in spite of stopEvent.
-				window.setTimeout(dojo.hitch(this, function(){ this._openMyself(_e); }), 1);
-			}
-		}
-	},
-
-	_contextMouse: function(e){
-		// summary:
-		//		Helper to remember when we opened the context menu with the mouse instead
-		//		of with the keyboard
-		// tags:
-		//		private
-		this._contextMenuWithMouse = true;
-	},
-
-	_openMyself: function(/*Event*/ e, /*DomNode?*/ node, /*DomNode?*/ iframe){
-		// summary:
-		//		Internal function for opening myself when the user
-		//		does a right-click or something similar.
-		// node:
-		//		The node that is being clicked
-		// iframe:
-		//		If an <iframe> is being clicked, iframe points to that iframe and node
-		//		points to the iframe's body.
-		// tags:
-		//		private
-
-		if(this.leftClickToOpen && e.button>0){
-			return;
-		}
-		dojo.stopEvent(e);
-
-		// Get coordinates.
-		// If we are opening the menu with the mouse or on safari open
-		// the menu at the mouse cursor
-		// (Safari does not have a keyboard command to open the context menu
-		// and we don't currently have a reliable way to determine
-		// _contextMenuWithMouse on Safari)
-		var x,y;
-		if(dojo.isSafari || this._contextMenuWithMouse){
-			x=e.pageX;
-			y=e.pageY;
-
-			if(iframe){
-				// Event is on <body> node of an <iframe>, convert coordinates to match main document
-				var od = e.target.ownerDocument,
-					ifc = dojo.position(iframe, true),
-					win = this._iframeContentWindow(iframe),
-					scroll = dojo.withGlobal(win, "_docScroll", dojo);
-
-				var cs = dojo.getComputedStyle(iframe),
-					tp = dojo._toPixelValue,
-					left = (dojo.isIE && dojo.isQuirks ? 0 : tp(iframe, cs.paddingLeft)) + (dojo.isIE && dojo.isQuirks ? tp(iframe, cs.borderLeftWidth) : 0),
-					top = (dojo.isIE && dojo.isQuirks ? 0 : tp(iframe, cs.paddingTop)) + (dojo.isIE && dojo.isQuirks ? tp(iframe, cs.borderTopWidth) : 0);
-
-				x += ifc.x + left - scroll.x;
-				y += ifc.y + top - scroll.y;
-			}
-		}else{
-			// otherwise open near e.target
-			var coords = dojo.position(e.target, true);
-			x = coords.x + 10;
-			y = coords.y + 10;
-		}
-
-		var self=this;
-		var savedFocus = dijit.getFocus(this);
-		function closeAndRestoreFocus(){
-			// user has clicked on a menu or popup
-			if(self.refocus){
-				dijit.focus(savedFocus);
-			}
-			dijit.popup.close(self);
-		}
-		dijit.popup.open({
-			popup: this,
-			x: x,
-			y: y,
-			onExecute: closeAndRestoreFocus,
-			onCancel: closeAndRestoreFocus,
-			orient: this.isLeftToRight() ? 'L' : 'R'
-		});
-		this.focus();
-
-		this._onBlur = function(){
-			this.inherited('_onBlur', arguments);
-			// Usually the parent closes the child widget but if this is a context
-			// menu then there is no parent
-			dijit.popup.close(this);
-			// don't try to restore focus; user has clicked another part of the screen
-			// and set focus there
-		};
-	},
-
-	uninitialize: function(){
- 		dojo.forEach(this._bindings, function(b){ if(b){ this.unBindDomNode(b.node); } }, this);
- 		this.inherited(arguments);
-	}
-}
-);
-
-// Back-compat (TODO: remove in 2.0)
-dojo.require("dijit.MenuItem");
-dojo.require("dijit.PopupMenuItem");
-dojo.require("dijit.CheckedMenuItem");
-dojo.require("dijit.MenuSeparator");
-
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/MenuBar.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/MenuBar.js
deleted file mode 100644
index dbf1eb3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/MenuBar.js
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.MenuBar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.MenuBar"] = true;
-dojo.provide("dijit.MenuBar");
-
-dojo.require("dijit.Menu");
-
-dojo.declare("dijit.MenuBar", dijit._MenuBase, {
-	// summary:
-	//		A menu bar, listing menu choices horizontally, like the "File" menu in most desktop applications
-
-	templateString: dojo.cache("dijit", "templates/MenuBar.html", "<div class=\"dijitMenuBar dijitMenuPassive\" dojoAttachPoint=\"containerNode\"  waiRole=\"menubar\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress: _onKeyPress\"></div>\n"),
-
-	// _isMenuBar: [protected] Boolean
-	//		This is a MenuBar widget, not a (vertical) Menu widget.
-	_isMenuBar: true,
-
-	constructor: function(){
-		// summary:
-		//		Sets up local variables etc.
-		// tags:
-		//		private
-
-		// parameter to dijit.popup.open() about where to put popup (relative to this.domNode)
-		this._orient = this.isLeftToRight() ? {BL: 'TL'} : {BR: 'TR'};
-	},
-
-	postCreate: function(){
-		var k = dojo.keys, l = this.isLeftToRight();
-		this.connectKeyNavHandlers(
-			l ? [k.LEFT_ARROW] : [k.RIGHT_ARROW],
-			l ? [k.RIGHT_ARROW] : [k.LEFT_ARROW]
-		);
-	},
-
-	focusChild: function(item){
-		// overload focusChild so that whenever the focus is moved to a new item,
-		// check the previous focused whether it has its popup open, if so, after
-		// focusing the new item, open its submenu immediately
-		var prev_item = this.focusedChild,
-			showpopup = prev_item && prev_item.popup && prev_item.popup.isShowingNow;
-		this.inherited(arguments);
-		if(showpopup && item.popup && !item.disabled){
-			this._openPopup();		// TODO: on down arrow, _openPopup() is called here and in onItemClick()
-		}
-	},
-
-	_onKeyPress: function(/*Event*/ evt){
-		// summary:
-		//		Handle keyboard based menu navigation.
-		// tags:
-		//		protected
-
-		if(evt.ctrlKey || evt.altKey){ return; }
-
-		switch(evt.charOrCode){
-			case dojo.keys.DOWN_ARROW:
-				this._moveToPopup(evt);
-				dojo.stopEvent(evt);
-		}
-	},
-
-	onItemClick: function(/*dijit._Widget*/ item, /*Event*/ evt){
-		// summary:
-		//		Handle clicks on an item. Cancels a dropdown if already open.
-		// tags:
-		//		private
-		if(item.popup && item.popup.isShowingNow){
-			item.popup.onCancel();
-		}else{
-			this.inherited(arguments);
-		}
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/MenuBarItem.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/MenuBarItem.js
deleted file mode 100644
index a191c2c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/MenuBarItem.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.MenuBarItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.MenuBarItem"] = true;
-dojo.provide("dijit.MenuBarItem");
-
-dojo.require("dijit.MenuItem");
-
-dojo.declare("dijit._MenuBarItemMixin", null, {
-	templateString: dojo.cache("dijit", "templates/MenuBarItem.html", "<div class=\"dijitReset dijitInline dijitMenuItem dijitMenuItemLabel\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitem\" tabIndex=\"-1\"'\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<span dojoAttachPoint=\"containerNode\"></span>\n</div>\n"),
-
-	// overriding attributeMap because we don't have icon
-	attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
-		label: { node: "containerNode", type: "innerHTML" }
-	})
-});
-
-dojo.declare("dijit.MenuBarItem", [dijit.MenuItem, dijit._MenuBarItemMixin], {
-	// summary:
-	//		Item in a MenuBar that's clickable, and doesn't spawn a submenu when pressed (or hovered)
-
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/MenuItem.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/MenuItem.js
deleted file mode 100644
index 59597c2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/MenuItem.js
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.MenuItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.MenuItem"] = true;
-dojo.provide("dijit.MenuItem");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._Templated");
-dojo.require("dijit._Contained");
-
-dojo.declare("dijit.MenuItem",
-		[dijit._Widget, dijit._Templated, dijit._Contained],
-		{
-		// summary:
-		//		A line item in a Menu Widget
-
-		// Make 3 columns
-		// icon, label, and expand arrow (BiDi-dependent) indicating sub-menu
-		templateString: dojo.cache("dijit", "templates/MenuItem.html", "<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitem\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuItemIcon\" dojoAttachPoint=\"iconNode\">\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\">\n\t\t<div dojoAttachPoint=\"arrowWrapper\" style=\"visibility: hidden\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuExpand\">\n\t\t\t<span class=\"dijitMenuExpandA11y\">+</span>\n\t\t</div>\n\t</td>\n</tr>\n"),
-
-		attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
-			label: { node: "containerNode", type: "innerHTML" },
-			iconClass: { node: "iconNode", type: "class" }
-		}),
-
-		// label: String
-		//		Menu text
-		label: '',
-
-		// iconClass: String
-		//		Class to apply to DOMNode to make it display an icon.
-		iconClass: "",
-
-		// accelKey: String
-		//		Text for the accelerator (shortcut) key combination.
-		//		Note that although Menu can display accelerator keys there
-		//		is no infrastructure to actually catch and execute these
-		//		accelerators.
-		accelKey: "",
-
-		// disabled: Boolean
-		//		If true, the menu item is disabled.
-		//		If false, the menu item is enabled.
-		disabled: false,
-
-		_fillContent: function(/*DomNode*/ source){
-			// If button label is specified as srcNodeRef.innerHTML rather than
-			// this.params.label, handle it here.
-			if(source && !("label" in this.params)){
-				this.attr('label', source.innerHTML);
-			}
-		},
-
-		postCreate: function(){
-			dojo.setSelectable(this.domNode, false);
-			var label = this.id+"_text";
-			dojo.attr(this.containerNode, "id", label);
-			if(this.accelKeyNode){
-				dojo.attr(this.accelKeyNode, "id", this.id + "_accel");
-				label += " " + this.id + "_accel";
-			}
-			dijit.setWaiState(this.domNode, "labelledby", label);
-		},
-
-		_onHover: function(){
-			// summary:
-			//		Handler when mouse is moved onto menu item
-			// tags:
-			//		protected
-			dojo.addClass(this.domNode, 'dijitMenuItemHover');
-			this.getParent().onItemHover(this);
-		},
-
-		_onUnhover: function(){
-			// summary:
-			//		Handler when mouse is moved off of menu item,
-			//		possibly to a child menu, or maybe to a sibling
-			//		menuitem or somewhere else entirely.
-			// tags:
-			//		protected
-
-			// if we are unhovering the currently selected item
-			// then unselect it
-			dojo.removeClass(this.domNode, 'dijitMenuItemHover');
-			this.getParent().onItemUnhover(this);
-		},
-
-		_onClick: function(evt){
-			// summary:
-			//		Internal handler for click events on MenuItem.
-			// tags:
-			//		private
-			this.getParent().onItemClick(this, evt);
-			dojo.stopEvent(evt);
-		},
-
-		onClick: function(/*Event*/ evt){
-			// summary:
-			//		User defined function to handle clicks
-			// tags:
-			//		callback
-		},
-
-		focus: function(){
-			// summary:
-			//		Focus on this MenuItem
-			try{
-				if(dojo.isIE == 8){
-					// needed for IE8 which won't scroll TR tags into view on focus yet calling scrollIntoView creates flicker (#10275)
-					this.containerNode.focus();
-				}
-				dijit.focus(this.focusNode);
-			}catch(e){
-				// this throws on IE (at least) in some scenarios
-			}
-		},
-
-		_onFocus: function(){
-			// summary:
-			//		This is called by the focus manager when focus
-			//		goes to this MenuItem or a child menu.
-			// tags:
-			//		protected
-			this._setSelected(true);
-			this.getParent()._onItemFocus(this);
-
-			this.inherited(arguments);
-		},
-
-		_setSelected: function(selected){
-			// summary:
-			//		Indicate that this node is the currently selected one
-			// tags:
-			//		private
-
-			/***
-			 * TODO: remove this method and calls to it, when _onBlur() is working for MenuItem.
-			 * Currently _onBlur() gets called when focus is moved from the MenuItem to a child menu.
-			 * That's not supposed to happen, but the problem is:
-			 * In order to allow dijit.popup's getTopPopup() to work,a sub menu's popupParent
-			 * points to the parent Menu, bypassing the parent MenuItem... thus the
-			 * MenuItem is not in the chain of active widgets and gets a premature call to
-			 * _onBlur()
-			 */
-
-			dojo.toggleClass(this.domNode, "dijitMenuItemSelected", selected);
-		},
-
-		setLabel: function(/*String*/ content){
-			// summary:
-			//		Deprecated.   Use attr('label', ...) instead.
-			// tags:
-			//		deprecated
-			dojo.deprecated("dijit.MenuItem.setLabel() is deprecated.  Use attr('label', ...) instead.", "", "2.0");
-			this.attr("label", content);
-		},
-
-		setDisabled: function(/*Boolean*/ disabled){
-			// summary:
-			//		Deprecated.   Use attr('disabled', bool) instead.
-			// tags:
-			//		deprecated
-			dojo.deprecated("dijit.Menu.setDisabled() is deprecated.  Use attr('disabled', bool) instead.", "", "2.0");
-			this.attr('disabled', disabled);
-		},
-		_setDisabledAttr: function(/*Boolean*/ value){
-			// summary:
-			//		Hook for attr('disabled', ...) to work.
-			//		Enable or disable this menu item.
-			this.disabled = value;
-			dojo[value ? "addClass" : "removeClass"](this.domNode, 'dijitMenuItemDisabled');
-			dijit.setWaiState(this.focusNode, 'disabled', value ? 'true' : 'false');
-		},
-		_setAccelKeyAttr: function(/*String*/ value){
-			// summary:
-			//		Hook for attr('accelKey', ...) to work.
-			//		Set accelKey on this menu item.
-			this.accelKey=value;
-
-			this.accelKeyNode.style.display=value?"":"none";
-			this.accelKeyNode.innerHTML=value;
-			//have to use colSpan to make it work in IE
-			dojo.attr(this.containerNode,'colSpan',value?"1":"2");
-		}
-	});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/MenuSeparator.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/MenuSeparator.js
deleted file mode 100644
index 60e38fa..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/MenuSeparator.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.MenuSeparator"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.MenuSeparator"] = true;
-dojo.provide("dijit.MenuSeparator");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._Templated");
-dojo.require("dijit._Contained");
-
-dojo.declare("dijit.MenuSeparator",
-		[dijit._Widget, dijit._Templated, dijit._Contained],
-		{
-		// summary:
-		//		A line between two menu items
-
-		templateString: dojo.cache("dijit", "templates/MenuSeparator.html", "<tr class=\"dijitMenuSeparator\">\n\t<td colspan=\"4\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n</tr>\n"),
-
-		postCreate: function(){
-			dojo.setSelectable(this.domNode, false);
-		},
-
-		isFocusable: function(){
-			// summary:
-			//		Override to always return false
-			// tags:
-			//		protected
-
-			return false; // Boolean
-		}
-	});
-
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/PopupMenuBarItem.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/PopupMenuBarItem.js
deleted file mode 100644
index 31e9942..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/PopupMenuBarItem.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.PopupMenuBarItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.PopupMenuBarItem"] = true;
-dojo.provide("dijit.PopupMenuBarItem");
-
-dojo.require("dijit.PopupMenuItem");
-dojo.require("dijit.MenuBarItem");
-
-dojo.declare("dijit.PopupMenuBarItem", [dijit.PopupMenuItem, dijit._MenuBarItemMixin], {
-	// summary:
-	//		Item in a MenuBar like "File" or "Edit", that spawns a submenu when pressed (or hovered)
-});
-
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/PopupMenuItem.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/PopupMenuItem.js
deleted file mode 100644
index 4632774..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/PopupMenuItem.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.PopupMenuItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.PopupMenuItem"] = true;
-dojo.provide("dijit.PopupMenuItem");
-
-dojo.require("dijit.MenuItem");
-
-dojo.declare("dijit.PopupMenuItem",
-		dijit.MenuItem,
-		{
-		_fillContent: function(){
-			// summary:
-			//		When Menu is declared in markup, this code gets the menu label and
-			//		the popup widget from the srcNodeRef.
-			// description:
-			//		srcNodeRefinnerHTML contains both the menu item text and a popup widget
-			//		The first part holds the menu item text and the second part is the popup
-			// example:
-			// |	<div dojoType="dijit.PopupMenuItem">
-			// |		<span>pick me</span>
-			// |		<popup> ... </popup>
-			// |	</div>
-			// tags:
-			//		protected
-
-			if(this.srcNodeRef){
-				var nodes = dojo.query("*", this.srcNodeRef);
-				dijit.PopupMenuItem.superclass._fillContent.call(this, nodes[0]);
-
-				// save pointer to srcNode so we can grab the drop down widget after it's instantiated
-				this.dropDownContainer = this.srcNodeRef;
-			}
-		},
-
-		startup: function(){
-			if(this._started){ return; }
-			this.inherited(arguments);
-
-			// we didn't copy the dropdown widget from the this.srcNodeRef, so it's in no-man's
-			// land now.  move it to dojo.doc.body.
-			if(!this.popup){
-				var node = dojo.query("[widgetId]", this.dropDownContainer)[0];
-				this.popup = dijit.byNode(node);
-			}
-			dojo.body().appendChild(this.popup.domNode);
-
-			this.popup.domNode.style.display="none";
-			if(this.arrowWrapper){
-				dojo.style(this.arrowWrapper, "visibility", "");
-			}
-			dijit.setWaiState(this.focusNode, "haspopup", "true");
-		},
-
-		destroyDescendants: function(){
-			if(this.popup){
-				// Destroy the popup, unless it's already been destroyed.  This can happen because
-				// the popup is a direct child of <body> even though it's logically my child.
-				if(!this.popup._destroyed){
-					this.popup.destroyRecursive();
-				}
-				delete this.popup;
-			}
-			this.inherited(arguments);
-		}
-	});
-
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/ProgressBar.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/ProgressBar.js
deleted file mode 100644
index d8c6758..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/ProgressBar.js
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.ProgressBar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.ProgressBar"] = true;
-dojo.provide("dijit.ProgressBar");
-
-dojo.require("dojo.fx");
-dojo.require("dojo.number");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._Templated");
-
-dojo.declare("dijit.ProgressBar", [dijit._Widget, dijit._Templated], {
-	// summary:
-	//		A progress indication widget, showing the amount completed
-	//		(often the percentage completed) of a task.
-	//
-	// example:
-	// |	<div dojoType="ProgressBar"
-	// |		 places="0"
-	// |		 progress="..." maximum="...">
-	// |	</div>
-	//
-	// description:
-	//		Note that the progress bar is updated via (a non-standard)
-	//		update() method, rather than via attr() like other widgets.
-
-	// progress: [const] String (Percentage or Number)
-	//		Number or percentage indicating amount of task completed.
-	// 		With "%": percentage value, 0% <= progress <= 100%, or
-	// 		without "%": absolute value, 0 <= progress <= maximum
-	// TODO: rename to value for 2.0
-	progress: "0",
-
-	// maximum: [const] Float
-	//		Max sample number
-	maximum: 100,
-
-	// places: [const] Number
-	//		Number of places to show in values; 0 by default
-	places: 0,
-
-	// indeterminate: [const] Boolean
-	// 		If false: show progress value (number or percentage).
-	// 		If true: show that a process is underway but that the amount completed is unknown.
-	indeterminate: false,
-
-	// name: String
-	//		this is the field name (for a form) if set. This needs to be set if you want to use
-	//		this widget in a dijit.form.Form widget (such as dijit.Dialog)
-	name: '',
-
-	templateString: dojo.cache("dijit", "templates/ProgressBar.html", "<div class=\"dijitProgressBar dijitProgressBarEmpty\"\n\t><div waiRole=\"progressbar\" dojoAttachPoint=\"internalProgress\" class=\"dijitProgressBarFull\"\n\t\t><div class=\"dijitProgressBarTile\"></div\n\t\t><span style=\"visibility:hidden\">&nbsp;</span\n\t></div\n\t><div dojoAttachPoint=\"label\" class=\"dijitProgressBarLabel\" id=\"${id}_label\">&nbsp;</div\n\t><img dojoAttachPoint=\"indeterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\" alt=\"\"\n\t></img\n></div>\n"),
-
-	// _indeterminateHighContrastImagePath: [private] dojo._URL
-	//		URL to image to use for indeterminate progress bar when display is in high contrast mode
-	_indeterminateHighContrastImagePath:
-		dojo.moduleUrl("dijit", "themes/a11y/indeterminate_progress.gif"),
-
-	// public functions
-	postCreate: function(){
-		this.inherited(arguments);
-		this.indeterminateHighContrastImage.setAttribute("src",
-			this._indeterminateHighContrastImagePath.toString());
-		this.update();
-	},
-
-	update: function(/*Object?*/attributes){
-		// summary:
-		//		Change attributes of ProgressBar, similar to attr(hash).
-		//
-		// attributes:
-		//		May provide progress and/or maximum properties on this parameter;
-		//		see attribute specs for details.
-		//
-		// example:
-		//	|	myProgressBar.update({'indeterminate': true});
-		//	|	myProgressBar.update({'progress': 80});
-
-		// TODO: deprecate this method and use attr() instead
-
-		dojo.mixin(this, attributes || {});
-		var tip = this.internalProgress;
-		var percent = 1, classFunc;
-		if(this.indeterminate){
-			classFunc = "addClass";
-			dijit.removeWaiState(tip, "valuenow");
-			dijit.removeWaiState(tip, "valuemin");
-			dijit.removeWaiState(tip, "valuemax");
-		}else{
-			classFunc = "removeClass";
-			if(String(this.progress).indexOf("%") != -1){
-				percent = Math.min(parseFloat(this.progress)/100, 1);
-				this.progress = percent * this.maximum;
-			}else{
-				this.progress = Math.min(this.progress, this.maximum);
-				percent = this.progress / this.maximum;
-			}
-			var text = this.report(percent);
-			this.label.firstChild.nodeValue = text;
-			dijit.setWaiState(tip, "describedby", this.label.id);
-			dijit.setWaiState(tip, "valuenow", this.progress);
-			dijit.setWaiState(tip, "valuemin", 0);
-			dijit.setWaiState(tip, "valuemax", this.maximum);
-		}
-		dojo[classFunc](this.domNode, "dijitProgressBarIndeterminate");
-		tip.style.width = (percent * 100) + "%";
-		this.onChange();
-	},
-
-	_setValueAttr: function(v){
-		if(v == Infinity){
-			this.update({indeterminate:true});
-		}else{
-			this.update({indeterminate:false, progress:v});
-		}
-	},
-
-	_getValueAttr: function(){
-		return this.progress;
-	},
-
-	report: function(/*float*/percent){
-		// summary:
-		//		Generates message to show inside progress bar (normally indicating amount of task completed).
-		//		May be overridden.
-		// tags:
-		//		extension
-
-		return dojo.number.format(percent, { type: "percent", places: this.places, locale: this.lang });
-	},
-
-	onChange: function(){
-		// summary:
-		//		Callback fired when progress updates.
-		// tags:
-		//		progress
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/TitlePane.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/TitlePane.js
deleted file mode 100644
index e4d65f8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/TitlePane.js
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.TitlePane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.TitlePane"] = true;
-dojo.provide("dijit.TitlePane");
-
-dojo.require("dojo.fx");
-
-dojo.require("dijit._Templated");
-dojo.require("dijit.layout.ContentPane");
-
-dojo.declare(
-	"dijit.TitlePane",
-	[dijit.layout.ContentPane, dijit._Templated],
-{
-	// summary:
-	//		A pane with a title on top, that can be expanded or collapsed.
-	//
-	// description:
-	//		An accessible container with a title Heading, and a content
-	//		section that slides open and closed. TitlePane is an extension to
-	//		`dijit.layout.ContentPane`, providing all the useful content-control aspects from it.
-	//
-	// example:
-	// | 	// load a TitlePane from remote file:
-	// |	var foo = new dijit.TitlePane({ href: "foobar.html", title:"Title" });
-	// |	foo.startup();
-	//
-	// example:
-	// |	<!-- markup href example: -->
-	// |	<div dojoType="dijit.TitlePane" href="foobar.html" title="Title"></div>
-	//
-	// example:
-	// |	<!-- markup with inline data -->
-	// | 	<div dojoType="dijit.TitlePane" title="Title">
-	// |		<p>I am content</p>
-	// |	</div>
-
-	// title: String
-	//		Title of the pane
-	title: "",
-
-	// open: Boolean
-	//		Whether pane is opened or closed.
-	open: true,
-
-	// toggleable: Boolean
-	//		Whether pane can be opened or closed by clicking the title bar.
-	toggleable: true,
-
-	// tabIndex: String
-	//		Tabindex setting for the title (so users can tab to the title then
-	//		use space/enter to open/close the title pane)
-	tabIndex: "0",
-
-	// duration: Integer
-	//		Time in milliseconds to fade in/fade out
-	duration: dijit.defaultDuration,
-
-	// baseClass: [protected] String
-	//		The root className to be placed on this widget's domNode.
-	baseClass: "dijitTitlePane",
-
-	templateString: dojo.cache("dijit", "templates/TitlePane.html", "<div class=\"${baseClass}\">\n\t<div dojoAttachEvent=\"onclick:_onTitleClick, onkeypress:_onTitleKey, onfocus:_handleFocus, onblur:_handleFocus, onmouseenter:_onTitleEnter, onmouseleave:_onTitleLeave\"\n\t\t\tclass=\"dijitTitlePaneTitle\" dojoAttachPoint=\"titleBarNode,focusNode\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"arrowNode\" class=\"dijitArrowNode\" waiRole=\"presentation\"\n\t\t><span dojoAttachPoint=\"arrowNodeInner\" class=\"dijitArrowNodeInner\"></span\n\t\t><span dojoAttachPoint=\"titleNode\" class=\"dijitTitlePaneTextNode\"></span>\n\t</div>\n\t<div class=\"dijitTitlePaneContentOuter\" dojoAttachPoint=\"hideNode\" waiRole=\"presentation\">\n\t\t<div class=\"dijitReset\" dojoAttachPoint=\"wipeNode\" waiRole=\"presentation\">\n\t\t\t<div class=\"dijitTitlePaneContentInner\" dojoAttachPoint=\"containerNode\" waiRole=\"region\" tabindex=\"-1\" id=\"${id}_pane\">\n\t\t\t\t<!-- nested divs because wipeIn()/wipeOut() doesn't work right on node w/padding etc.  Put padding on inner div. -->\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n"),
-
-	attributeMap: dojo.delegate(dijit.layout.ContentPane.prototype.attributeMap, {
-		title: { node: "titleNode", type: "innerHTML" },
-		tooltip: {node: "focusNode", type: "attribute", attribute: "title"},	// focusNode spans the entire width, titleNode doesn't
-		id:""
-	}),
-
-	postCreate: function(){
-		if(!this.open){
-			this.hideNode.style.display = this.wipeNode.style.display = "none";
-		}
-		this._setCss();
-		dojo.setSelectable(this.titleNode, false);
-		dijit.setWaiState(this.containerNode,"hidden", this.open ? "false" : "true");
-		dijit.setWaiState(this.focusNode, "pressed", this.open ? "true" : "false");
-
-		// setup open/close animations
-		var hideNode = this.hideNode, wipeNode = this.wipeNode;
-		this._wipeIn = dojo.fx.wipeIn({
-			node: this.wipeNode,
-			duration: this.duration,
-			beforeBegin: function(){
-				hideNode.style.display="";
-			}
-		});
-		this._wipeOut = dojo.fx.wipeOut({
-			node: this.wipeNode,
-			duration: this.duration,
-			onEnd: function(){
-				hideNode.style.display="none";
-			}
-		});
-		this.inherited(arguments);
-	},
-
-	_setOpenAttr: function(/* Boolean */ open){
-		// summary:
-		//		Hook to make attr("open", boolean) control the open/closed state of the pane.
-		// open: Boolean
-		//		True if you want to open the pane, false if you want to close it.
-		if(this.open !== open){ this.toggle(); }
-	},
-
-	_setToggleableAttr: function(/* Boolean */ canToggle){
-		// summary:
-		//		Hook to make attr("canToggle", boolean) work.
-		// canToggle: Boolean
-		//		True to allow user to open/close pane by clicking title bar.
-		this.toggleable = canToggle;
-		dijit.setWaiRole(this.focusNode, canToggle ? "button" : "heading");
-		dojo.attr(this.focusNode, "tabIndex", canToggle ? this.tabIndex : "-1");
-		if(canToggle){
-			// TODO: if canToggle is switched from true false shouldn't we remove this setting?
-			dijit.setWaiState(this.focusNode, "controls", this.id+"_pane");
-		}
-		this._setCss();
-	},
-
-	_setContentAttr: function(content){
-		// summary:
-		//		Hook to make attr("content", ...) work.
-		// 		Typically called when an href is loaded.  Our job is to make the animation smooth.
-
-		if(!this.open || !this._wipeOut || this._wipeOut.status() == "playing"){
-			// we are currently *closing* the pane (or the pane is closed), so just let that continue
-			this.inherited(arguments);
-		}else{
-			if(this._wipeIn && this._wipeIn.status() == "playing"){
-				this._wipeIn.stop();
-			}
-
-			// freeze container at current height so that adding new content doesn't make it jump
-			dojo.marginBox(this.wipeNode, { h: dojo.marginBox(this.wipeNode).h });
-
-			// add the new content (erasing the old content, if any)
-			this.inherited(arguments);
-
-			// call _wipeIn.play() to animate from current height to new height
-			if(this._wipeIn){
-				this._wipeIn.play();
-			}else{
-				this.hideNode.style.display = "";
-			}
-		}
-	},
-
-	toggle: function(){
-		// summary:
-		//		Switches between opened and closed state
-		// tags:
-		//		private
-
-		dojo.forEach([this._wipeIn, this._wipeOut], function(animation){
-			if(animation && animation.status() == "playing"){
-				animation.stop();
-			}
-		});
-
-		var anim = this[this.open ? "_wipeOut" : "_wipeIn"]
-		if(anim){
-			anim.play();
-		}else{
-			this.hideNode.style.display = this.open ? "" : "none";
-		}
-		this.open =! this.open;
-		dijit.setWaiState(this.containerNode, "hidden", this.open ? "false" : "true");
-		dijit.setWaiState(this.focusNode, "pressed", this.open ? "true" : "false");
-
-		// load content (if this is the first time we are opening the TitlePane
-		// and content is specified as an href, or href was set when hidden)
-		if(this.open){
-			this._onShow();
-		}else{
-			this.onHide();
-		}
-
-		this._setCss();
-	},
-
-	_setCss: function(){
-		// summary:
-		//		Set the open/close css state for the TitlePane
-		// tags:
-		//		private
-
-		var node = this.titleBarNode || this.focusNode;
-
-		if(this._titleBarClass){
-			dojo.removeClass(node, this._titleBarClass);
-		}
-		this._titleBarClass = "dijit" + (this.toggleable ? "" : "Fixed") + (this.open ? "Open" : "Closed");
-		dojo.addClass(node, this._titleBarClass);
-		this.arrowNodeInner.innerHTML = this.open ? "-" : "+";
-	},
-
-	_onTitleKey: function(/*Event*/ e){
-		// summary:
-		//		Handler for when user hits a key
-		// tags:
-		//		private
-
-		if(e.charOrCode == dojo.keys.ENTER || e.charOrCode == ' '){
-			if(this.toggleable){
-				this.toggle();
-			}
-			dojo.stopEvent(e);
-		}else if(e.charOrCode == dojo.keys.DOWN_ARROW && this.open){
-			this.containerNode.focus();
-			e.preventDefault();
-	 	}
-	},
-
-	_onTitleEnter: function(){
-		// summary:
-		//		Handler for when someone hovers over my title
-		// tags:
-		//		private
-		if(this.toggleable){
-			dojo.addClass(this.focusNode, "dijitTitlePaneTitle-hover");
-		}
-	},
-
-	_onTitleLeave: function(){
-		// summary:
-		//		Handler when someone stops hovering over my title
-		// tags:
-		//		private
-		if(this.toggleable){
-			dojo.removeClass(this.focusNode, "dijitTitlePaneTitle-hover");
-		}
-	},
-
-	_onTitleClick: function(){
-		// summary:
-		//		Handler when user clicks the title bar
-		// tags:
-		//		private
-		if(this.toggleable){
-			this.toggle();
-		}
-	},
-
-	_handleFocus: function(/*Event*/ e){
-		// summary:
-		//		Handle blur and focus events on title bar
-		// tags:
-		//		private
-
-		dojo.toggleClass(this.focusNode, this.baseClass + "Focused", e.type == "focus");
-	},
-
-	setTitle: function(/*String*/ title){
-		// summary:
-		//		Deprecated.  Use attr('title', ...) instead.
-		// tags:
-		//		deprecated
-		dojo.deprecated("dijit.TitlePane.setTitle() is deprecated.  Use attr('title', ...) instead.", "", "2.0");
-		this.attr("title", title);
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Toolbar.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Toolbar.js
deleted file mode 100644
index 45ebe1b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Toolbar.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.Toolbar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.Toolbar"] = true;
-dojo.provide("dijit.Toolbar");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._KeyNavContainer");
-dojo.require("dijit._Templated");
-
-dojo.declare("dijit.Toolbar",
-	[dijit._Widget, dijit._Templated, dijit._KeyNavContainer],
-	{
-	// summary:
-	//		A Toolbar widget, used to hold things like `dijit.Editor` buttons
-
-	templateString:
-		'<div class="dijit dijitToolbar" waiRole="toolbar" tabIndex="${tabIndex}" dojoAttachPoint="containerNode">' +
-		//	'<table style="table-layout: fixed" class="dijitReset dijitToolbarTable">' + // factor out style
-		//		'<tr class="dijitReset" dojoAttachPoint="containerNode"></tr>'+
-		//	'</table>' +
-		'</div>',
-
-	postCreate: function(){
-		this.connectKeyNavHandlers(
-			this.isLeftToRight() ? [dojo.keys.LEFT_ARROW] : [dojo.keys.RIGHT_ARROW],
-			this.isLeftToRight() ? [dojo.keys.RIGHT_ARROW] : [dojo.keys.LEFT_ARROW]
-		);
-	},
-
-	startup: function(){
-		if(this._started){ return; }
-
-		this.startupKeyNavChildren();
-
-		this.inherited(arguments);
-	}
-}
-);
-
-// For back-compat, remove for 2.0
-dojo.require("dijit.ToolbarSeparator");
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/ToolbarSeparator.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/ToolbarSeparator.js
deleted file mode 100644
index 29b6853..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/ToolbarSeparator.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.ToolbarSeparator"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.ToolbarSeparator"] = true;
-dojo.provide("dijit.ToolbarSeparator");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._Templated");
-
-dojo.declare("dijit.ToolbarSeparator",
-		[ dijit._Widget, dijit._Templated ],
-		{
-		// summary:
-		//		A spacer between two `dijit.Toolbar` items
-		templateString: '<div class="dijitToolbarSeparator dijitInline"></div>',
-		postCreate: function(){ dojo.setSelectable(this.domNode, false); },
-		isFocusable: function(){
-			// summary:
-			//		This widget isn't focusable, so pass along that fact.
-			// tags:
-			//		protected
-			return false;
-		}
-
-	});
-
-
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Tooltip.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Tooltip.js
deleted file mode 100644
index fa71cae..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Tooltip.js
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.Tooltip"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.Tooltip"] = true;
-dojo.provide("dijit.Tooltip");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._Templated");
-
-dojo.declare(
-	"dijit._MasterTooltip",
-	[dijit._Widget, dijit._Templated],
-	{
-		// summary:
-		//		Internal widget that holds the actual tooltip markup,
-		//		which occurs once per page.
-		//		Called by Tooltip widgets which are just containers to hold
-		//		the markup
-		// tags:
-		//		protected
-
-		// duration: Integer
-		//		Milliseconds to fade in/fade out
-		duration: dijit.defaultDuration,
-
-		templateString: dojo.cache("dijit", "templates/Tooltip.html", "<div class=\"dijitTooltip dijitTooltipLeft\" id=\"dojoTooltip\">\n\t<div class=\"dijitTooltipContainer dijitTooltipContents\" dojoAttachPoint=\"containerNode\" waiRole='alert'></div>\n\t<div class=\"dijitTooltipConnector\"></div>\n</div>\n"),
-
-		postCreate: function(){
-			dojo.body().appendChild(this.domNode);
-
-			this.bgIframe = new dijit.BackgroundIframe(this.domNode);
-
-			// Setup fade-in and fade-out functions.
-			this.fadeIn = dojo.fadeIn({ node: this.domNode, duration: this.duration, onEnd: dojo.hitch(this, "_onShow") });
-			this.fadeOut = dojo.fadeOut({ node: this.domNode, duration: this.duration, onEnd: dojo.hitch(this, "_onHide") });
-
-		},
-
-		show: function(/*String*/ innerHTML, /*DomNode*/ aroundNode, /*String[]?*/ position){
-			// summary:
-			//		Display tooltip w/specified contents to right of specified node
-			//		(To left if there's no space on the right, or if LTR==right)
-
-			if(this.aroundNode && this.aroundNode === aroundNode){
-				return;
-			}
-
-			if(this.fadeOut.status() == "playing"){
-				// previous tooltip is being hidden; wait until the hide completes then show new one
-				this._onDeck=arguments;
-				return;
-			}
-			this.containerNode.innerHTML=innerHTML;
-
-			// Firefox bug. when innerHTML changes to be shorter than previous
-			// one, the node size will not be updated until it moves.
-			this.domNode.style.top = (this.domNode.offsetTop + 1) + "px";
-
-			var pos = dijit.placeOnScreenAroundElement(this.domNode, aroundNode, dijit.getPopupAroundAlignment((position && position.length) ? position : dijit.Tooltip.defaultPosition, this.isLeftToRight()), dojo.hitch(this, "orient"));
-
-			// show it
-			dojo.style(this.domNode, "opacity", 0);
-			this.fadeIn.play();
-			this.isShowingNow = true;
-			this.aroundNode = aroundNode;
-		},
-
-		orient: function(/* DomNode */ node, /* String */ aroundCorner, /* String */ tooltipCorner){
-			// summary:
-			//		Private function to set CSS for tooltip node based on which position it's in.
-			//		This is called by the dijit popup code.
-			// tags:
-			//		protected
-
-			node.className = "dijitTooltip " +
-				{
-					"BL-TL": "dijitTooltipBelow dijitTooltipABLeft",
-					"TL-BL": "dijitTooltipAbove dijitTooltipABLeft",
-					"BR-TR": "dijitTooltipBelow dijitTooltipABRight",
-					"TR-BR": "dijitTooltipAbove dijitTooltipABRight",
-					"BR-BL": "dijitTooltipRight",
-					"BL-BR": "dijitTooltipLeft"
-				}[aroundCorner + "-" + tooltipCorner];
-		},
-
-		_onShow: function(){
-			// summary:
-			//		Called at end of fade-in operation
-			// tags:
-			//		protected
-			if(dojo.isIE){
-				// the arrow won't show up on a node w/an opacity filter
-				this.domNode.style.filter="";
-			}
-		},
-
-		hide: function(aroundNode){
-			// summary:
-			//		Hide the tooltip
-			if(this._onDeck && this._onDeck[1] == aroundNode){
-				// this hide request is for a show() that hasn't even started yet;
-				// just cancel the pending show()
-				this._onDeck=null;
-			}else if(this.aroundNode === aroundNode){
-				// this hide request is for the currently displayed tooltip
-				this.fadeIn.stop();
-				this.isShowingNow = false;
-				this.aroundNode = null;
-				this.fadeOut.play();
-			}else{
-				// just ignore the call, it's for a tooltip that has already been erased
-			}
-		},
-
-		_onHide: function(){
-			// summary:
-			//		Called at end of fade-out operation
-			// tags:
-			//		protected
-
-			this.domNode.style.cssText="";	// to position offscreen again
-			if(this._onDeck){
-				// a show request has been queued up; do it now
-				this.show.apply(this, this._onDeck);
-				this._onDeck=null;
-			}
-		}
-
-	}
-);
-
-dijit.showTooltip = function(/*String*/ innerHTML, /*DomNode*/ aroundNode, /*String[]?*/ position){
-	// summary:
-	//		Display tooltip w/specified contents in specified position.
-	//		See description of dijit.Tooltip.defaultPosition for details on position parameter.
-	//		If position is not specified then dijit.Tooltip.defaultPosition is used.
-	if(!dijit._masterTT){ dijit._masterTT = new dijit._MasterTooltip(); }
-	return dijit._masterTT.show(innerHTML, aroundNode, position);
-};
-
-dijit.hideTooltip = function(aroundNode){
-	// summary:
-	//		Hide the tooltip
-	if(!dijit._masterTT){ dijit._masterTT = new dijit._MasterTooltip(); }
-	return dijit._masterTT.hide(aroundNode);
-};
-
-dojo.declare(
-	"dijit.Tooltip",
-	dijit._Widget,
-	{
-		// summary:
-		//		Pops up a tooltip (a help message) when you hover over a node.
-
-		// label: String
-		//		Text to display in the tooltip.
-		//		Specified as innerHTML when creating the widget from markup.
-		label: "",
-
-		// showDelay: Integer
-		//		Number of milliseconds to wait after hovering over/focusing on the object, before
-		//		the tooltip is displayed.
-		showDelay: 400,
-
-		// connectId: [const] String[]
-		//		Id's of domNodes to attach the tooltip to.
-		//		When user hovers over any of the specified dom nodes, the tooltip will appear.
-		//
-		//		Note: Currently connectId can only be specified on initialization, it cannot
-		//		be changed via attr('connectId', ...)
-		//
-		//		Note: in 2.0 this will be renamed to connectIds for less confusion.
-		connectId: [],
-
-		// position: String[]
-		//		See description of `dijit.Tooltip.defaultPosition` for details on position parameter.
-		position: [],
-
-		constructor: function(){
-			// Map id's of nodes I'm connected to to a list of the this.connect() handles
-			this._nodeConnectionsById = {};
-		},
-
-		_setConnectIdAttr: function(newIds){
-			for(var oldId in this._nodeConnectionsById){
-				this.removeTarget(oldId);
-			}
-			dojo.forEach(dojo.isArrayLike(newIds) ? newIds : [newIds], this.addTarget, this);
-		},
-
-		_getConnectIdAttr: function(){
-			var ary = [];
-			for(var id in this._nodeConnectionsById){
-				ary.push(id);
-			}
-			return ary;
-		},
-
-		addTarget: function(/*DOMNODE || String*/ id){
-			// summary:
-			//		Attach tooltip to specified node, if it's not already connected
-			var node = dojo.byId(id);
-			if(!node){ return; }
-			if(node.id in this._nodeConnectionsById){ return; }//Already connected
-
-			this._nodeConnectionsById[node.id] = [
-				this.connect(node, "onmouseenter", "_onTargetMouseEnter"),
-				this.connect(node, "onmouseleave", "_onTargetMouseLeave"),
-				this.connect(node, "onfocus", "_onTargetFocus"),
-				this.connect(node, "onblur", "_onTargetBlur")
-			];
-			if(dojo.isIE && !node.style.zoom){//preserve zoom
-				// BiDi workaround
-				node.style.zoom = 1;
-			}
-		},
-
-		removeTarget: function(/*DOMNODE || String*/ node){
-			// summary:
-			//		Detach tooltip from specified node
-
-			// map from DOMNode back to plain id string
-			var id = node.id || node;
-
-			if(id in this._nodeConnectionsById){
-				dojo.forEach(this._nodeConnectionsById[id], this.disconnect, this);
-				delete this._nodeConnectionsById[id];
-			}
-		},
-
-		postCreate: function(){
-			dojo.addClass(this.domNode,"dijitTooltipData");
-		},
-
-		startup: function(){
-			this.inherited(arguments);
-
-			// If this tooltip was created in a template, or for some other reason the specified connectId[s]
-			// didn't exist during the widget's initialization, then connect now.
-			var ids = this.connectId;
-			dojo.forEach(dojo.isArrayLike(ids) ? ids : [ids], this.addTarget, this);
-		},
-
-		_onTargetMouseEnter: function(/*Event*/ e){
-			// summary:
-			//		Handler for mouseenter event on the target node
-			// tags:
-			//		private
-			this._onHover(e);
-		},
-
-		_onTargetMouseLeave: function(/*Event*/ e){
-			// summary:
-			//		Handler for mouseleave event on the target node
-			// tags:
-			//		private
-			this._onUnHover(e);
-		},
-
-		_onTargetFocus: function(/*Event*/ e){
-			// summary:
-			//		Handler for focus event on the target node
-			// tags:
-			//		private
-
-			this._focus = true;
-			this._onHover(e);
-		},
-
-		_onTargetBlur: function(/*Event*/ e){
-			// summary:
-			//		Handler for blur event on the target node
-			// tags:
-			//		private
-
-			this._focus = false;
-			this._onUnHover(e);
-		},
-
-		_onHover: function(/*Event*/ e){
-			// summary:
-			//		Despite the name of this method, it actually handles both hover and focus
-			//		events on the target node, setting a timer to show the tooltip.
-			// tags:
-			//		private
-			if(!this._showTimer){
-				var target = e.target;
-				this._showTimer = setTimeout(dojo.hitch(this, function(){this.open(target)}), this.showDelay);
-			}
-		},
-
-		_onUnHover: function(/*Event*/ e){
-			// summary:
-			//		Despite the name of this method, it actually handles both mouseleave and blur
-			//		events on the target node, hiding the tooltip.
-			// tags:
-			//		private
-
-			// keep a tooltip open if the associated element still has focus (even though the
-			// mouse moved away)
-			if(this._focus){ return; }
-
-			if(this._showTimer){
-				clearTimeout(this._showTimer);
-				delete this._showTimer;
-			}
-			this.close();
-		},
-
-		open: function(/*DomNode*/ target){
- 			// summary:
-			//		Display the tooltip; usually not called directly.
-			// tags:
-			//		private
-
-			if(this._showTimer){
-				clearTimeout(this._showTimer);
-				delete this._showTimer;
-			}
-			dijit.showTooltip(this.label || this.domNode.innerHTML, target, this.position);
-
-			this._connectNode = target;
-			this.onShow(target, this.position);
-		},
-
-		close: function(){
-			// summary:
-			//		Hide the tooltip or cancel timer for show of tooltip
-			// tags:
-			//		private
-
-			if(this._connectNode){
-				// if tooltip is currently shown
-				dijit.hideTooltip(this._connectNode);
-				delete this._connectNode;
-				this.onHide();
-			}
-			if(this._showTimer){
-				// if tooltip is scheduled to be shown (after a brief delay)
-				clearTimeout(this._showTimer);
-				delete this._showTimer;
-			}
-		},
-
-		onShow: function(target, position){
-			// summary:
-			//		Called when the tooltip is shown
-			// tags:
-			//		callback
-		},
-
-		onHide: function(){
-			// summary:
-			//		Called when the tooltip is hidden
-			// tags:
-			//		callback
-		},
-
-		uninitialize: function(){
-			this.close();
-			this.inherited(arguments);
-		}
-	}
-);
-
-// dijit.Tooltip.defaultPosition: String[]
-//		This variable controls the position of tooltips, if the position is not specified to
-//		the Tooltip widget or *TextBox widget itself.  It's an array of strings with the following values:
-//
-//			* before: places tooltip to the left of the target node/widget, or to the right in
-//			  the case of RTL scripts like Hebrew and Arabic
-//			* after: places tooltip to the right of the target node/widget, or to the left in
-//			  the case of RTL scripts like Hebrew and Arabic
-//			* above: tooltip goes above target node
-//			* below: tooltip goes below target node
-//
-//		The list is positions is tried, in order, until a position is found where the tooltip fits
-//		within the viewport.
-//
-//		Be careful setting this parameter.  A value of "above" may work fine until the user scrolls
-//		the screen so that there's no room above the target node.   Nodes with drop downs, like
-//		DropDownButton or FilteringSelect, are especially problematic, in that you need to be sure
-//		that the drop down and tooltip don't overlap, even when the viewport is scrolled so that there
-//		is only room below (or above) the target node, but not both.
-dijit.Tooltip.defaultPosition = ["after", "before"];
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/TooltipDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/TooltipDialog.js
deleted file mode 100644
index 0c32eba..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/TooltipDialog.js
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.TooltipDialog"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.TooltipDialog"] = true;
-dojo.provide("dijit.TooltipDialog");
-
-dojo.require("dijit.layout.ContentPane");
-dojo.require("dijit._Templated");
-dojo.require("dijit.form._FormMixin");
-dojo.require("dijit._DialogMixin");
-
-dojo.declare(
-		"dijit.TooltipDialog",
-		[dijit.layout.ContentPane, dijit._Templated, dijit.form._FormMixin, dijit._DialogMixin],
-		{
-			// summary:
-			//		Pops up a dialog that appears like a Tooltip
-
-			// title: String
-			// 		Description of tooltip dialog (required for a11y)
-			title: "",
-
-			// doLayout: [protected] Boolean
-			//		Don't change this parameter from the default value.
-			//		This ContentPane parameter doesn't make sense for TooltipDialog, since TooltipDialog
-			//		is never a child of a layout container, nor can you specify the size of
-			//		TooltipDialog in order to control the size of an inner widget.
-			doLayout: false,
-
-			// autofocus: Boolean
-			// 		A Toggle to modify the default focus behavior of a Dialog, which
-			// 		is to focus on the first dialog element after opening the dialog.
-			//		False will disable autofocusing. Default: true
-			autofocus: true,
-
-			// baseClass: [protected] String
-			//		The root className to use for the various states of this widget
-			baseClass: "dijitTooltipDialog",
-
-			// _firstFocusItem: [private] [readonly] DomNode
-			//		The pointer to the first focusable node in the dialog.
-			//		Set by `dijit._DialogMixin._getFocusItems`.
-			_firstFocusItem: null,
-
-			// _lastFocusItem: [private] [readonly] DomNode
-			//		The pointer to which node has focus prior to our dialog.
-			//		Set by `dijit._DialogMixin._getFocusItems`.
-			_lastFocusItem: null,
-
-			templateString: dojo.cache("dijit", "templates/TooltipDialog.html", "<div waiRole=\"presentation\">\n\t<div class=\"dijitTooltipContainer\" waiRole=\"presentation\">\n\t\t<div class =\"dijitTooltipContents dijitTooltipFocusNode\" dojoAttachPoint=\"containerNode\" tabindex=\"-1\" waiRole=\"dialog\"></div>\n\t</div>\n\t<div class=\"dijitTooltipConnector\" waiRole=\"presentation\"></div>\n</div>\n"),
-
-			postCreate: function(){
-				this.inherited(arguments);
-				this.connect(this.containerNode, "onkeypress", "_onKey");
-				this.containerNode.title = this.title;
-			},
-
-			orient: function(/*DomNode*/ node, /*String*/ aroundCorner, /*String*/ corner){
-				// summary:
-				//		Configure widget to be displayed in given position relative to the button.
-				//		This is called from the dijit.popup code, and should not be called
-				//		directly.
-				// tags:
-				//		protected
-				var c = this._currentOrientClass;
-				if(c){
-					dojo.removeClass(this.domNode, c);
-				}
-				c = "dijitTooltipAB"+(corner.charAt(1) == 'L'?"Left":"Right")+" dijitTooltip"+(corner.charAt(0) == 'T' ? "Below" : "Above");
-				dojo.addClass(this.domNode, c);
-				this._currentOrientClass = c;
-			},
-
-			onOpen: function(/*Object*/ pos){
-				// summary:
-				//		Called when dialog is displayed.
-				//		This is called from the dijit.popup code, and should not be called directly.
-				// tags:
-				//		protected
-
-				this.orient(this.domNode,pos.aroundCorner, pos.corner);
-				this._onShow(); // lazy load trigger
-
-				if(this.autofocus){
-					this._getFocusItems(this.containerNode);
-					dijit.focus(this._firstFocusItem);
-				}
-			},
-
-			onClose: function(){
-				// summary:
-				//		Called when dialog is hidden.
-				//		This is called from the dijit.popup code, and should not be called directly.
-				// tags:
-				//		protected
-				this.onHide();
-			},
-
-			_onKey: function(/*Event*/ evt){
-				// summary:
-				//		Handler for keyboard events
-				// description:
-				//		Keep keyboard focus in dialog; close dialog on escape key
-				// tags:
-				//		private
-
-				var node = evt.target;
-				var dk = dojo.keys;
-				if(evt.charOrCode === dk.TAB){
-					this._getFocusItems(this.containerNode);
-				}
-				var singleFocusItem = (this._firstFocusItem == this._lastFocusItem);
-				if(evt.charOrCode == dk.ESCAPE){
-					// Use setTimeout to avoid crash on IE, see #10396.
-					setTimeout(dojo.hitch(this, "onCancel"), 0);
-					dojo.stopEvent(evt);
-				}else if(node == this._firstFocusItem && evt.shiftKey && evt.charOrCode === dk.TAB){
-					if(!singleFocusItem){
-						dijit.focus(this._lastFocusItem); // send focus to last item in dialog
-					}
-					dojo.stopEvent(evt);
-				}else if(node == this._lastFocusItem && evt.charOrCode === dk.TAB && !evt.shiftKey){
-					if(!singleFocusItem){
-						dijit.focus(this._firstFocusItem); // send focus to first item in dialog
-					}
-					dojo.stopEvent(evt);
-				}else if(evt.charOrCode === dk.TAB){
-					// we want the browser's default tab handling to move focus
-					// but we don't want the tab to propagate upwards
-					evt.stopPropagation();
-				}
-			}
-		}
-	);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Tree.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Tree.js
deleted file mode 100644
index 71ab8ed..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/Tree.js
+++ /dev/null
@@ -1,1559 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.Tree"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.Tree"] = true;
-dojo.provide("dijit.Tree");
-
-dojo.require("dojo.fx");
-dojo.require("dojo.DeferredList");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._Templated");
-dojo.require("dijit._Container");
-dojo.require("dijit._Contained");
-dojo.require("dojo.cookie");
-
-dojo.declare(
-	"dijit._TreeNode",
-	[dijit._Widget, dijit._Templated, dijit._Container, dijit._Contained],
-{
-	// summary:
-	//		Single node within a tree.   This class is used internally
-	//		by Tree and should not be accessed directly.
-	// tags:
-	//		private
-
-	// item: dojo.data.Item
-	//		the dojo.data entry this tree represents
-	item: null,
-
-	// isTreeNode: [protected] Boolean
-	//		Indicates that this is a TreeNode.   Used by `dijit.Tree` only,
-	//		should not be accessed directly.
-	isTreeNode: true,
-
-	// label: String
-	//		Text of this tree node
-	label: "",
-
-	// isExpandable: [private] Boolean
-	//		This node has children, so show the expando node (+ sign)
-	isExpandable: null,
-
-	// isExpanded: [readonly] Boolean
-	//		This node is currently expanded (ie, opened)
-	isExpanded: false,
-
-	// state: [private] String
-	//		Dynamic loading-related stuff.
-	//		When an empty folder node appears, it is "UNCHECKED" first,
-	//		then after dojo.data query it becomes "LOADING" and, finally "LOADED"
-	state: "UNCHECKED",
-
-	templateString: dojo.cache("dijit", "templates/TreeNode.html", "<div class=\"dijitTreeNode\" waiRole=\"presentation\"\n\t><div dojoAttachPoint=\"rowNode\" class=\"dijitTreeRow\" waiRole=\"presentation\" dojoAttachEvent=\"onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick\"\n\t\t><img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" waiRole=\"presentation\"\n\t\t><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" waiRole=\"presentation\"\n\t\t></span\n\t\t><span dojoAttachPoint=\"contentNode\"\n\t\t\tclass=\"dijitTreeContent\" waiRole=\"presentation\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"iconNode\" class=\"dijitTreeIcon\" waiRole=\"presentation\"\n\t\t\t><span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" wairole=\"treeitem\" tabindex=\"-1\" waiState=\"selected-false\" dojoAttachEvent=\"onfocus:_onLabelFocus, onblur:_onLabelBlur\"></span>\n\t\t</span\n\t></div>\n\t<div dojoAttachPoint=\"containerNode\" class=\"dijitTreeContainer\" waiRole=\"presentation\" style=\"display: none;\"></div>\n</div>\n"),
-
-	attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
-		label: {node: "labelNode", type: "innerText"},
-		tooltip: {node: "rowNode", type: "attribute", attribute: "title"}
-	}),
-
-	postCreate: function(){
-		// set expand icon for leaf
-		this._setExpando();
-
-		// set icon and label class based on item
-		this._updateItemClasses(this.item);
-
-		if(this.isExpandable){
-			dijit.setWaiState(this.labelNode, "expanded", this.isExpanded);
-		}
-	},
-
-	_setIndentAttr: function(indent){
-		// summary:
-		//		Tell this node how many levels it should be indented
-		// description:
-		//		0 for top level nodes, 1 for their children, 2 for their
-		//		grandchildren, etc.
-		this.indent = indent;
-
-		// Math.max() is to prevent negative padding on hidden root node (when indent == -1)
-		var pixels = (Math.max(indent, 0) * this.tree._nodePixelIndent) + "px";
-
-		dojo.style(this.domNode, "backgroundPosition",	pixels + " 0px");
-		dojo.style(this.rowNode, dojo._isBodyLtr() ? "paddingLeft" : "paddingRight", pixels);
-
-		dojo.forEach(this.getChildren(), function(child){
-			child.attr("indent", indent+1);
-		});
-	},
-
-	markProcessing: function(){
-		// summary:
-		//		Visually denote that tree is loading data, etc.
-		// tags:
-		//		private
-		this.state = "LOADING";
-		this._setExpando(true);
-	},
-
-	unmarkProcessing: function(){
-		// summary:
-		//		Clear markup from markProcessing() call
-		// tags:
-		//		private
-		this._setExpando(false);
-	},
-
-	_updateItemClasses: function(item){
-		// summary:
-		//		Set appropriate CSS classes for icon and label dom node
-		//		(used to allow for item updates to change respective CSS)
-		// tags:
-		//		private
-		var tree = this.tree, model = tree.model;
-		if(tree._v10Compat && item === model.root){
-			// For back-compat with 1.0, need to use null to specify root item (TODO: remove in 2.0)
-			item = null;
-		}
-		this._applyClassAndStyle(item, "icon", "Icon");
-		this._applyClassAndStyle(item, "label", "Label");
-		this._applyClassAndStyle(item, "row", "Row");
-	},
-
-	_applyClassAndStyle: function(item, lower, upper){
-		// summary:
-		//		Set the appropriate CSS classes and styles for labels, icons and rows.
-		//
-		// item:
-		//		The data item.
-		//
-		// lower:
-		//		The lower case attribute to use, e.g. 'icon', 'label' or 'row'.
-		//
-		// upper:
-		//		The upper case attribute to use, e.g. 'Icon', 'Label' or 'Row'.
-		//
-		// tags:
-		//		private
-
-		var clsName = "_" + lower + "Class";
-		var nodeName = lower + "Node";
-
-		if(this[clsName]){
-			dojo.removeClass(this[nodeName], this[clsName]);
- 		}
-		this[clsName] = this.tree["get" + upper + "Class"](item, this.isExpanded);
-		if(this[clsName]){
-			dojo.addClass(this[nodeName], this[clsName]);
- 		}
-		dojo.style(this[nodeName], this.tree["get" + upper + "Style"](item, this.isExpanded) || {});
- 	},
-
-	_updateLayout: function(){
-		// summary:
-		//		Set appropriate CSS classes for this.domNode
-		// tags:
-		//		private
-		var parent = this.getParent();
-		if(!parent || parent.rowNode.style.display == "none"){
-			/* if we are hiding the root node then make every first level child look like a root node */
-			dojo.addClass(this.domNode, "dijitTreeIsRoot");
-		}else{
-			dojo.toggleClass(this.domNode, "dijitTreeIsLast", !this.getNextSibling());
-		}
-	},
-
-	_setExpando: function(/*Boolean*/ processing){
-		// summary:
-		//		Set the right image for the expando node
-		// tags:
-		//		private
-
-		var styles = ["dijitTreeExpandoLoading", "dijitTreeExpandoOpened",
-						"dijitTreeExpandoClosed", "dijitTreeExpandoLeaf"],
-			_a11yStates = ["*","-","+","*"],
-			idx = processing ? 0 : (this.isExpandable ?	(this.isExpanded ? 1 : 2) : 3);
-
-		// apply the appropriate class to the expando node
-		dojo.removeClass(this.expandoNode, styles);
-		dojo.addClass(this.expandoNode, styles[idx]);
-
-		// provide a non-image based indicator for images-off mode
-		this.expandoNodeText.innerHTML = _a11yStates[idx];
-
-	},
-
-	expand: function(){
-		// summary:
-		//		Show my children
-		// returns:
-		//		Deferred that fires when expansion is complete
-
-		// If there's already an expand in progress or we are already expanded, just return
-		if(this._expandDeferred){
-			return this._expandDeferred;		// dojo.Deferred
-		}
-
-		// cancel in progress collapse operation
-		this._wipeOut && this._wipeOut.stop();
-
-		// All the state information for when a node is expanded, maybe this should be
-		// set when the animation completes instead
-		this.isExpanded = true;
-		dijit.setWaiState(this.labelNode, "expanded", "true");
-		dijit.setWaiRole(this.containerNode, "group");
-		dojo.addClass(this.contentNode,'dijitTreeContentExpanded');
-		this._setExpando();
-		this._updateItemClasses(this.item);
-		if(this == this.tree.rootNode){
-			dijit.setWaiState(this.tree.domNode, "expanded", "true");
-		}
-
-		var def,
-			wipeIn = dojo.fx.wipeIn({
-				node: this.containerNode, duration: dijit.defaultDuration,
-				onEnd: function(){
-					def.callback(true);
-				}
-			});
-
-		// Deferred that fires when expand is complete
-		def = (this._expandDeferred = new dojo.Deferred(function(){
-			// Canceller
-			wipeIn.stop();
-		}));
-
-		wipeIn.play();
-
-		return def;		// dojo.Deferred
-	},
-
-	collapse: function(){
-		// summary:
-		//		Collapse this node (if it's expanded)
-
-		if(!this.isExpanded){ return; }
-
-		// cancel in progress expand operation
-		if(this._expandDeferred){
-			this._expandDeferred.cancel();
-			delete this._expandDeferred;
-		}
-
-		this.isExpanded = false;
-		dijit.setWaiState(this.labelNode, "expanded", "false");
-		if(this == this.tree.rootNode){
-			dijit.setWaiState(this.tree.domNode, "expanded", "false");
-		}
-		dojo.removeClass(this.contentNode,'dijitTreeContentExpanded');
-		this._setExpando();
-		this._updateItemClasses(this.item);
-
-		if(!this._wipeOut){
-			this._wipeOut = dojo.fx.wipeOut({
-				node: this.containerNode, duration: dijit.defaultDuration
-			});
-		}
-		this._wipeOut.play();
-	},
-
-	// indent: Integer
-	//		Levels from this node to the root node
-	indent: 0,
-
-	setChildItems: function(/* Object[] */ items){
-		// summary:
-		//		Sets the child items of this node, removing/adding nodes
-		//		from current children to match specified items[] array.
-		//		Also, if this.persist == true, expands any children that were previously
-		// 		opened.
-		// returns:
-		//		Deferred object that fires after all previously opened children
-		//		have been expanded again (or fires instantly if there are no such children).
-
-		var tree = this.tree,
-			model = tree.model,
-			defs = [];	// list of deferreds that need to fire before I am complete
-
-
-		// Orphan all my existing children.
-		// If items contains some of the same items as before then we will reattach them.
-		// Don't call this.removeChild() because that will collapse the tree etc.
-		this.getChildren().forEach(function(child){
-			dijit._Container.prototype.removeChild.call(this, child);
-		}, this);
-
-		this.state = "LOADED";
-
-		if(items && items.length > 0){
-			this.isExpandable = true;
-
-			// Create _TreeNode widget for each specified tree node, unless one already
-			// exists and isn't being used (presumably it's from a DnD move and was recently
-			// released
-			dojo.forEach(items, function(item){
-				var id = model.getIdentity(item),
-					existingNodes = tree._itemNodesMap[id],
-					node;
-				if(existingNodes){
-					for(var i=0;i<existingNodes.length;i++){
-						if(existingNodes[i] && !existingNodes[i].getParent()){
-							node = existingNodes[i];
-							node.attr('indent', this.indent+1);
-							break;
-						}
-					}
-				}
-				if(!node){
-					node = this.tree._createTreeNode({
-							item: item,
-							tree: tree,
-							isExpandable: model.mayHaveChildren(item),
-							label: tree.getLabel(item),
-							tooltip: tree.getTooltip(item),
-							indent: this.indent + 1
-						});
-					if(existingNodes){
-						existingNodes.push(node);
-					}else{
-						tree._itemNodesMap[id] = [node];
-					}
-				}
-				this.addChild(node);
-
-				// If node was previously opened then open it again now (this may trigger
-				// more data store accesses, recursively)
-				if(this.tree.autoExpand || this.tree._state(item)){
-					defs.push(tree._expandNode(node));
-				}
-			}, this);
-
-			// note that updateLayout() needs to be called on each child after
-			// _all_ the children exist
-			dojo.forEach(this.getChildren(), function(child, idx){
-				child._updateLayout();
-			});
-		}else{
-			this.isExpandable=false;
-		}
-
-		if(this._setExpando){
-			// change expando to/from dot or + icon, as appropriate
-			this._setExpando(false);
-		}
-
-		// On initial tree show, make the selected TreeNode as either the root node of the tree,
-		// or the first child, if the root node is hidden
-		if(this == tree.rootNode){
-			var fc = this.tree.showRoot ? this : this.getChildren()[0];
-			if(fc){
-				fc.setSelected(true);
-				tree.lastFocused = fc;
-			}else{
-				// fallback: no nodes in tree so focus on Tree <div> itself
-				tree.domNode.setAttribute("tabIndex", "0");
-			}
-		}
-
-		return new dojo.DeferredList(defs);	// dojo.Deferred
-	},
-
-	removeChild: function(/* treeNode */ node){
-		this.inherited(arguments);
-
-		var children = this.getChildren();
-		if(children.length == 0){
-			this.isExpandable = false;
-			this.collapse();
-		}
-
-		dojo.forEach(children, function(child){
-				child._updateLayout();
-		});
-	},
-
-	makeExpandable: function(){
-		// summary:
-		//		if this node wasn't already showing the expando node,
-		//		turn it into one and call _setExpando()
-
-		// TODO: hmm this isn't called from anywhere, maybe should remove it for 2.0
-
-		this.isExpandable = true;
-		this._setExpando(false);
-	},
-
-	_onLabelFocus: function(evt){
-		// summary:
-		//		Called when this node is focused (possibly programatically)
-		// tags:
-		//		private
-		dojo.addClass(this.labelNode, "dijitTreeLabelFocused");
-		this.tree._onNodeFocus(this);
-	},
-
-	_onLabelBlur: function(evt){
-		// summary:
-		//		Called when focus was moved away from this node, either to
-		//		another TreeNode or away from the Tree entirely.
-		//		Note that we aren't using _onFocus/_onBlur builtin to dijit
-		//		because _onBlur() isn't called when focus is moved to my child TreeNode.
-		// tags:
-		//		private
-		dojo.removeClass(this.labelNode, "dijitTreeLabelFocused");
-	},
-
-	setSelected: function(/*Boolean*/ selected){
-		// summary:
-		//		A Tree has a (single) currently selected node.
-		//		Mark that this node is/isn't that currently selected node.
-		// description:
-		//		In particular, setting a node as selected involves setting tabIndex
-		//		so that when user tabs to the tree, focus will go to that node (only).
-		var labelNode = this.labelNode;
-		labelNode.setAttribute("tabIndex", selected ? "0" : "-1");
-		dijit.setWaiState(labelNode, "selected", selected);
-		dojo.toggleClass(this.rowNode, "dijitTreeNodeSelected", selected);
-	},
-
-	_onClick: function(evt){
-		// summary:
-		//		Handler for onclick event on a node
-		// tags:
-		//		private
-		this.tree._onClick(this, evt);
-	},
-	_onDblClick: function(evt){
-		// summary:
-		//		Handler for ondblclick event on a node
-		// tags:
-		//		private
-		this.tree._onDblClick(this, evt);
-	},
-
-	_onMouseEnter: function(evt){
-		// summary:
-		//		Handler for onmouseenter event on a node
-		// tags:
-		//		private
-		dojo.addClass(this.rowNode, "dijitTreeNodeHover");
-		this.tree._onNodeMouseEnter(this, evt);
-	},
-
-	_onMouseLeave: function(evt){
-		// summary:
-		//		Handler for onmouseenter event on a node
-		// tags:
-		//		private
-		dojo.removeClass(this.rowNode, "dijitTreeNodeHover");
-		this.tree._onNodeMouseLeave(this, evt);
-	}
-});
-
-dojo.declare(
-	"dijit.Tree",
-	[dijit._Widget, dijit._Templated],
-{
-	// summary:
-	//		This widget displays hierarchical data from a store.
-
-	// store: [deprecated] String||dojo.data.Store
-	//		Deprecated.  Use "model" parameter instead.
-	//		The store to get data to display in the tree.
-	store: null,
-
-	// model: dijit.Tree.model
-	//		Interface to read tree data, get notifications of changes to tree data,
-	//		and for handling drop operations (i.e drag and drop onto the tree)
-	model: null,
-
-	// query: [deprecated] anything
-	//		Deprecated.  User should specify query to the model directly instead.
-	//		Specifies datastore query to return the root item or top items for the tree.
-	query: null,
-
-	// label: [deprecated] String
-	//		Deprecated.  Use dijit.tree.ForestStoreModel directly instead.
-	//		Used in conjunction with query parameter.
-	//		If a query is specified (rather than a root node id), and a label is also specified,
-	//		then a fake root node is created and displayed, with this label.
-	label: "",
-
-	// showRoot: [const] Boolean
-	//		Should the root node be displayed, or hidden?
-	showRoot: true,
-
-	// childrenAttr: [deprecated] String[]
-	//		Deprecated.   This information should be specified in the model.
-	//		One ore more attributes that holds children of a tree node
-	childrenAttr: ["children"],
-
-	// path: String[] or Item[]
-	//		Full path from rootNode to selected node expressed as array of items or array of ids.
-	path: [],
-
-	// selectedItem: [readonly] Item
-	//		The currently selected item in this tree.
-	//		This property can only be set (via attr('selectedItem', ...)) when that item is already
-	//		visible in the tree.   (I.e. the tree has already been expanded to show that node.)
-	//		Should generally use `path` attribute to set the selected item instead.
-	selectedItem: null,
-
-	// openOnClick: Boolean
-	//		If true, clicking a folder node's label will open it, rather than calling onClick()
-	openOnClick: false,
-
-	// openOnDblClick: Boolean
-	//		If true, double-clicking a folder node's label will open it, rather than calling onDblClick()
-	openOnDblClick: false,
-
-	templateString: dojo.cache("dijit", "templates/Tree.html", "<div class=\"dijitTree dijitTreeContainer\" waiRole=\"tree\"\n\tdojoAttachEvent=\"onkeypress:_onKeyPress\">\n\t<div class=\"dijitInline dijitTreeIndent\" style=\"position: absolute; top: -9999px\" dojoAttachPoint=\"indentDetector\"></div>\n</div>\n"),
-
-	// persist: Boolean
-	//		Enables/disables use of cookies for state saving.
-	persist: true,
-
-	// autoExpand: Boolean
-	//		Fully expand the tree on load.   Overrides `persist`
-	autoExpand: false,
-
-	// dndController: [protected] String
-	//		Class name to use as as the dnd controller.  Specifying this class enables DnD.
-	//		Generally you should specify this as "dijit.tree.dndSource".
-	dndController: null,
-
-	// parameters to pull off of the tree and pass on to the dndController as its params
-	dndParams: ["onDndDrop","itemCreator","onDndCancel","checkAcceptance", "checkItemAcceptance", "dragThreshold", "betweenThreshold"],
-
-	//declare the above items so they can be pulled from the tree's markup
-
-	// onDndDrop: [protected] Function
-	//		Parameter to dndController, see `dijit.tree.dndSource.onDndDrop`.
-	//		Generally this doesn't need to be set.
-	onDndDrop: null,
-
-	/*=====
-	itemCreator: function(nodes, target, source){
-		// summary:
-		//		Returns objects passed to `Tree.model.newItem()` based on DnD nodes
-		//		dropped onto the tree.   Developer must override this method to enable
-		// 		dropping from external sources onto this Tree, unless the Tree.model's items
-		//		happen to look like {id: 123, name: "Apple" } with no other attributes.
-		// description:
-		//		For each node in nodes[], which came from source, create a hash of name/value
-		//		pairs to be passed to Tree.model.newItem().  Returns array of those hashes.
-		// nodes: DomNode[]
-		//		The DOMNodes dragged from the source container
-		// target: DomNode
-		//		The target TreeNode.rowNode
-		// source: dojo.dnd.Source
-		//		The source container the nodes were dragged from, perhaps another Tree or a plain dojo.dnd.Source
-		// returns: Object[]
-		//		Array of name/value hashes for each new item to be added to the Tree, like:
-		// |	[
-		// |		{ id: 123, label: "apple", foo: "bar" },
-		// |		{ id: 456, label: "pear", zaz: "bam" }
-		// |	]
-		// tags:
-		//		extension
-		return [{}];
-	},
-	=====*/
-	itemCreator: null,
-
-	// onDndCancel: [protected] Function
-	//		Parameter to dndController, see `dijit.tree.dndSource.onDndCancel`.
-	//		Generally this doesn't need to be set.
-	onDndCancel: null,
-
-/*=====
-	checkAcceptance: function(source, nodes){
-		// summary:
-		//		Checks if the Tree itself can accept nodes from this source
-		// source: dijit.tree._dndSource
-		//		The source which provides items
-		// nodes: DOMNode[]
-		//		Array of DOM nodes corresponding to nodes being dropped, dijitTreeRow nodes if
-		//		source is a dijit.Tree.
-		// tags:
-		//		extension
-		return true;	// Boolean
-	},
-=====*/
-	checkAcceptance: null,
-
-/*=====
-	checkItemAcceptance: function(target, source, position){
-		// summary:
-		//		Stub function to be overridden if one wants to check for the ability to drop at the node/item level
-		// description:
-		//		In the base case, this is called to check if target can become a child of source.
-		//		When betweenThreshold is set, position="before" or "after" means that we
-		//		are asking if the source node can be dropped before/after the target node.
-		// target: DOMNode
-		//		The dijitTreeRoot DOM node inside of the TreeNode that we are dropping on to
-		//		Use dijit.getEnclosingWidget(target) to get the TreeNode.
-		// source: dijit.tree.dndSource
-		//		The (set of) nodes we are dropping
-		// position: String
-		//		"over", "before", or "after"
-		// tags:
-		//		extension
-		return true;	// Boolean
-	},
-=====*/
-	checkItemAcceptance: null,
-
-	// dragThreshold: Integer
-	//		Number of pixels mouse moves before it's considered the start of a drag operation
-	dragThreshold: 5,
-
-	// betweenThreshold: Integer
-	//		Set to a positive value to allow drag and drop "between" nodes.
-	//
-	//		If during DnD mouse is over a (target) node but less than betweenThreshold
-	//		pixels from the bottom edge, dropping the the dragged node will make it
-	//		the next sibling of the target node, rather than the child.
-	//
-	//		Similarly, if mouse is over a target node but less that betweenThreshold
-	//		pixels from the top edge, dropping the dragged node will make it
-	//		the target node's previous sibling rather than the target node's child.
-	betweenThreshold: 0,
-
-	// _nodePixelIndent: Integer
-	//		Number of pixels to indent tree nodes (relative to parent node).
-	//		Default is 19 but can be overridden by setting CSS class dijitTreeIndent
-	//		and calling resize() or startup() on tree after it's in the DOM.
-	_nodePixelIndent: 19,
-
-	_publish: function(/*String*/ topicName, /*Object*/ message){
-		// summary:
-		//		Publish a message for this widget/topic
-		dojo.publish(this.id, [dojo.mixin({tree: this, event: topicName}, message || {})]);
-	},
-
-	postMixInProperties: function(){
-		this.tree = this;
-
-		this._itemNodesMap={};
-
-		if(!this.cookieName){
-			this.cookieName = this.id + "SaveStateCookie";
-		}
-
-		this._loadDeferred = new dojo.Deferred();
-
-		this.inherited(arguments);
-	},
-
-	postCreate: function(){
-		this._initState();
-
-		// Create glue between store and Tree, if not specified directly by user
-		if(!this.model){
-			this._store2model();
-		}
-
-		// monitor changes to items
-		this.connect(this.model, "onChange", "_onItemChange");
-		this.connect(this.model, "onChildrenChange", "_onItemChildrenChange");
-		this.connect(this.model, "onDelete", "_onItemDelete");
-
-		this._load();
-
-		this.inherited(arguments);
-
-		if(this.dndController){
-			if(dojo.isString(this.dndController)){
-				this.dndController = dojo.getObject(this.dndController);
-			}
-			var params={};
-			for(var i=0; i<this.dndParams.length;i++){
-				if(this[this.dndParams[i]]){
-					params[this.dndParams[i]] = this[this.dndParams[i]];
-				}
-			}
-			this.dndController = new this.dndController(this, params);
-		}
-	},
-
-	_store2model: function(){
-		// summary:
-		//		User specified a store&query rather than model, so create model from store/query
-		this._v10Compat = true;
-		dojo.deprecated("Tree: from version 2.0, should specify a model object rather than a store/query");
-
-		var modelParams = {
-			id: this.id + "_ForestStoreModel",
-			store: this.store,
-			query: this.query,
-			childrenAttrs: this.childrenAttr
-		};
-
-		// Only override the model's mayHaveChildren() method if the user has specified an override
-		if(this.params.mayHaveChildren){
-			modelParams.mayHaveChildren = dojo.hitch(this, "mayHaveChildren");
-		}
-
-		if(this.params.getItemChildren){
-			modelParams.getChildren = dojo.hitch(this, function(item, onComplete, onError){
-				this.getItemChildren((this._v10Compat && item === this.model.root) ? null : item, onComplete, onError);
-			});
-		}
-		this.model = new dijit.tree.ForestStoreModel(modelParams);
-
-		// For backwards compatibility, the visibility of the root node is controlled by
-		// whether or not the user has specified a label
-		this.showRoot = Boolean(this.label);
-	},
-
-	onLoad: function(){
-		// summary:
-		//		Called when tree finishes loading and expanding.
-		// description:
-		//		If persist == true the loading may encompass many levels of fetches
-		//		from the data store, each asynchronous.   Waits for all to finish.
-		// tags:
-		//		callback
-	},
-
-	_load: function(){
-		// summary:
-		//		Initial load of the tree.
-		//		Load root node (possibly hidden) and it's children.
-		this.model.getRoot(
-			dojo.hitch(this, function(item){
-				var rn = (this.rootNode = this.tree._createTreeNode({
-					item: item,
-					tree: this,
-					isExpandable: true,
-					label: this.label || this.getLabel(item),
-					indent: this.showRoot ? 0 : -1
-				}));
-				if(!this.showRoot){
-					rn.rowNode.style.display="none";
-				}
-				this.domNode.appendChild(rn.domNode);
-				var identity = this.model.getIdentity(item);
-				if(this._itemNodesMap[identity]){
-					this._itemNodesMap[identity].push(rn);
-				}else{
-					this._itemNodesMap[identity] = [rn];
-				}
-
-				rn._updateLayout();		// sets "dijitTreeIsRoot" CSS classname
-
-				// load top level children and then fire onLoad() event
-				this._expandNode(rn).addCallback(dojo.hitch(this, function(){
-					this._loadDeferred.callback(true);
-					this.onLoad();
-				}));
-			}),
-			function(err){
-				console.error(this, ": error loading root: ", err);
-			}
-		);
-	},
-
-	getNodesByItem: function(/*dojo.data.Item or id*/ item){
-		// summary:
-		//		Returns all tree nodes that refer to an item
-		// returns:
-		//		Array of tree nodes that refer to passed item
-
-		if(!item){ return []; }
-		var identity = dojo.isString(item) ? item : this.model.getIdentity(item);
-		// return a copy so widget don't get messed up by changes to returned array
-		return [].concat(this._itemNodesMap[identity]);
-	},
-
-	_setSelectedItemAttr: function(/*dojo.data.Item or id*/ item){
-		// summary:
-		//		Select a tree node related to passed item.
-		//		WARNING: if model use multi-parented items or desired tree node isn't already loaded
-		//		behavior is not granted. Use 'path' attr instead for full support.
-		var oldValue = this.attr("selectedItem");
-		var identity = (!item || dojo.isString(item)) ? item : this.model.getIdentity(item);
-		if(identity == oldValue ? this.model.getIdentity(oldValue) : null){ return; }
-		var nodes = this._itemNodesMap[identity];
-		if(nodes && nodes.length){
-			//select the first item
-			this.focusNode(nodes[0]);
-		}else if(this.lastFocused){
-			// Select none so deselect current
-			this.lastFocused.setSelected(false);
-			this.lastFocused = null;
-		}
-	},
-
-	_getSelectedItemAttr: function(){
-		// summary:
-		//		Return item related to selected tree node.
-		return this.lastFocused && this.lastFocused.item;
-	},
-
-	_setPathAttr: function(/*Item[] || String[]*/ path){
-		// summary:
-		//		Select the tree node identified by passed path.
-		// path:
-		//		Array of items or item id's
-
-		if(!path || !path.length){ return; }
-
-		// If this is called during initialization, defer running until Tree has finished loading
-		this._loadDeferred.addCallback(dojo.hitch(this, function(){
-			if(!this.rootNode){
-				console.debug("!this.rootNode");
-				return;
-			}
-			if(path[0] !== this.rootNode.item && (dojo.isString(path[0]) && path[0] != this.model.getIdentity(this.rootNode.item))){
-				console.error(this, ":path[0] doesn't match this.rootNode.item.  Maybe you are using the wrong tree.");
-				return;
-			}
-			path.shift();
-
-			var node = this.rootNode;
-
-			function advance(){
-				// summary:
-				// 		Called when "node" has completed loading and expanding.   Pop the next item from the path
-				//		(which must be a child of "node") and advance to it, and then recurse.
-
-				// Set item and identity to next item in path (node is pointing to the item that was popped
-				// from the path _last_ time.
-				var item = path.shift(),
-					identity = dojo.isString(item) ? item : this.model.getIdentity(item);
-
-				// Change "node" from previous item in path to the item we just popped from path
-				dojo.some(this._itemNodesMap[identity], function(n){
-					if(n.getParent() == node){
-						node = n;
-						return true;
-					}
-					return false;
-				});
-
-				if(path.length){
-					// Need to do more expanding
-					this._expandNode(node).addCallback(dojo.hitch(this, advance));
-				}else{
-					// Final destination node, select it
-					if(this.lastFocused != node){
-						this.focusNode(node);
-					}
-				}
-			}
-
-			this._expandNode(node).addCallback(dojo.hitch(this, advance));
-		}));
-	},
-
-	_getPathAttr: function(){
-		// summary:
-		//		Return an array of items that is the path to selected tree node.
-		if(!this.lastFocused){ return; }
-		var res = [];
-		var treeNode = this.lastFocused;
-		while(treeNode && treeNode !== this.rootNode){
-			res.unshift(treeNode.item);
-			treeNode = treeNode.getParent();
-		}
-		res.unshift(this.rootNode.item);
-		return res;
-	},
-
-	////////////// Data store related functions //////////////////////
-	// These just get passed to the model; they are here for back-compat
-
-	mayHaveChildren: function(/*dojo.data.Item*/ item){
-		// summary:
-		//		Deprecated.   This should be specified on the model itself.
-		//
-		//		Overridable function to tell if an item has or may have children.
-		//		Controls whether or not +/- expando icon is shown.
-		//		(For efficiency reasons we may not want to check if an element actually
-		//		has children until user clicks the expando node)
-		// tags:
-		//		deprecated
-	},
-
-	getItemChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ onComplete){
-		// summary:
-		//		Deprecated.   This should be specified on the model itself.
-		//
-		// 		Overridable function that return array of child items of given parent item,
-		//		or if parentItem==null then return top items in tree
-		// tags:
-		//		deprecated
-	},
-
-	///////////////////////////////////////////////////////
-	// Functions for converting an item to a TreeNode
-	getLabel: function(/*dojo.data.Item*/ item){
-		// summary:
-		//		Overridable function to get the label for a tree node (given the item)
-		// tags:
-		//		extension
-		return this.model.getLabel(item);	// String
-	},
-
-	getIconClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
-		// summary:
-		//		Overridable function to return CSS class name to display icon
-		// tags:
-		//		extension
-		return (!item || this.model.mayHaveChildren(item)) ? (opened ? "dijitFolderOpened" : "dijitFolderClosed") : "dijitLeaf"
-	},
-
-	getLabelClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
-		// summary:
-		//		Overridable function to return CSS class name to display label
-		// tags:
-		//		extension
-	},
-
-	getRowClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
-		// summary:
-		//		Overridable function to return CSS class name to display row
-		// tags:
-		//		extension
-	},
-
-	getIconStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
-		// summary:
-		//		Overridable function to return CSS styles to display icon
-		// returns:
-		//		Object suitable for input to dojo.style() like {backgroundImage: "url(...)"}
-		// tags:
-		//		extension
-	},
-
-	getLabelStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
-		// summary:
-		//		Overridable function to return CSS styles to display label
-		// returns:
-		//		Object suitable for input to dojo.style() like {color: "red", background: "green"}
-		// tags:
-		//		extension
-	},
-
-	getRowStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
-		// summary:
-		//		Overridable function to return CSS styles to display row
-		// returns:
-		//		Object suitable for input to dojo.style() like {background-color: "#bbb"}
-		// tags:
-		//		extension
-	},
-
-	getTooltip: function(/*dojo.data.Item*/ item){
-		// summary:
-		//		Overridable function to get the tooltip for a tree node (given the item)
-		// tags:
-		//		extension
-		return "";	// String
-	},
-
-	/////////// Keyboard and Mouse handlers ////////////////////
-
-	_onKeyPress: function(/*Event*/ e){
-		// summary:
-		//		Translates keypress events into commands for the controller
-		if(e.altKey){ return; }
-		var dk = dojo.keys;
-		var treeNode = dijit.getEnclosingWidget(e.target);
-		if(!treeNode){ return; }
-
-		var key = e.charOrCode;
-		if(typeof key == "string"){	// handle printables (letter navigation)
-			// Check for key navigation.
-			if(!e.altKey && !e.ctrlKey && !e.shiftKey && !e.metaKey){
-				this._onLetterKeyNav( { node: treeNode, key: key.toLowerCase() } );
-				dojo.stopEvent(e);
-			}
-		}else{	// handle non-printables (arrow keys)
-			// clear record of recent printables (being saved for multi-char letter navigation),
-			// because "a", down-arrow, "b" shouldn't search for "ab"
-			if(this._curSearch){
-				clearTimeout(this._curSearch.timer);
-				delete this._curSearch;
-			}
-
-			var map = this._keyHandlerMap;
-			if(!map){
-				// setup table mapping keys to events
-				map = {};
-				map[dk.ENTER]="_onEnterKey";
-				map[this.isLeftToRight() ? dk.LEFT_ARROW : dk.RIGHT_ARROW]="_onLeftArrow";
-				map[this.isLeftToRight() ? dk.RIGHT_ARROW : dk.LEFT_ARROW]="_onRightArrow";
-				map[dk.UP_ARROW]="_onUpArrow";
-				map[dk.DOWN_ARROW]="_onDownArrow";
-				map[dk.HOME]="_onHomeKey";
-				map[dk.END]="_onEndKey";
-				this._keyHandlerMap = map;
-			}
-			if(this._keyHandlerMap[key]){
-				this[this._keyHandlerMap[key]]( { node: treeNode, item: treeNode.item, evt: e } );
-				dojo.stopEvent(e);
-			}
-		}
-	},
-
-	_onEnterKey: function(/*Object*/ message, /*Event*/ evt){
-		this._publish("execute", { item: message.item, node: message.node } );
-		this.onClick(message.item, message.node, evt);
-	},
-
-	_onDownArrow: function(/*Object*/ message){
-		// summary:
-		//		down arrow pressed; get next visible node, set focus there
-		var node = this._getNextNode(message.node);
-		if(node && node.isTreeNode){
-			this.focusNode(node);
-		}
-	},
-
-	_onUpArrow: function(/*Object*/ message){
-		// summary:
-		//		Up arrow pressed; move to previous visible node
-
-		var node = message.node;
-
-		// if younger siblings
-		var previousSibling = node.getPreviousSibling();
-		if(previousSibling){
-			node = previousSibling;
-			// if the previous node is expanded, dive in deep
-			while(node.isExpandable && node.isExpanded && node.hasChildren()){
-				// move to the last child
-				var children = node.getChildren();
-				node = children[children.length-1];
-			}
-		}else{
-			// if this is the first child, return the parent
-			// unless the parent is the root of a tree with a hidden root
-			var parent = node.getParent();
-			if(!(!this.showRoot && parent === this.rootNode)){
-				node = parent;
-			}
-		}
-
-		if(node && node.isTreeNode){
-			this.focusNode(node);
-		}
-	},
-
-	_onRightArrow: function(/*Object*/ message){
-		// summary:
-		//		Right arrow pressed; go to child node
-		var node = message.node;
-
-		// if not expanded, expand, else move to 1st child
-		if(node.isExpandable && !node.isExpanded){
-			this._expandNode(node);
-		}else if(node.hasChildren()){
-			node = node.getChildren()[0];
-			if(node && node.isTreeNode){
-				this.focusNode(node);
-			}
-		}
-	},
-
-	_onLeftArrow: function(/*Object*/ message){
-		// summary:
-		//		Left arrow pressed.
-		//		If not collapsed, collapse, else move to parent.
-
-		var node = message.node;
-
-		if(node.isExpandable && node.isExpanded){
-			this._collapseNode(node);
-		}else{
-			var parent = node.getParent();
-			if(parent && parent.isTreeNode && !(!this.showRoot && parent === this.rootNode)){
-				this.focusNode(parent);
-			}
-		}
-	},
-
-	_onHomeKey: function(){
-		// summary:
-		//		Home key pressed; get first visible node, and set focus there
-		var node = this._getRootOrFirstNode();
-		if(node){
-			this.focusNode(node);
-		}
-	},
-
-	_onEndKey: function(/*Object*/ message){
-		// summary:
-		//		End key pressed; go to last visible node.
-
-		var node = this.rootNode;
-		while(node.isExpanded){
-			var c = node.getChildren();
-			node = c[c.length - 1];
-		}
-
-		if(node && node.isTreeNode){
-			this.focusNode(node);
-		}
-	},
-
-	// multiCharSearchDuration: Number
-	//		If multiple characters are typed where each keystroke happens within
-	//		multiCharSearchDuration of the previous keystroke,
-	//		search for nodes matching all the keystrokes.
-	//
-	//		For example, typing "ab" will search for entries starting with
-	//		"ab" unless the delay between "a" and "b" is greater than multiCharSearchDuration.
-	multiCharSearchDuration: 250,
-
-	_onLetterKeyNav: function(message){
-		// summary:
-		//		Called when user presses a prinatable key; search for node starting with recently typed letters.
-		// message: Object
-		//		Like { node: TreeNode, key: 'a' } where key is the key the user pressed.
-
-		// Branch depending on whether this key starts a new search, or modifies an existing search
-		var cs = this._curSearch;
-		if(cs){
-			// We are continuing a search.  Ex: user has pressed 'a', and now has pressed
-			// 'b', so we want to search for nodes starting w/"ab".
-			cs.pattern = cs.pattern + message.key;
-			clearTimeout(cs.timer);
-		}else{
-			// We are starting a new search
-			cs = this._curSearch = {
-					pattern: message.key,
-					startNode: message.node
-			};
-		}
-
-		// set/reset timer to forget recent keystrokes
-		var self = this;
-		cs.timer = setTimeout(function(){
-			delete self._curSearch;
-		}, this.multiCharSearchDuration);
-
-		// Navigate to TreeNode matching keystrokes [entered so far].
-		var node = cs.startNode;
-		do{
-			node = this._getNextNode(node);
-			//check for last node, jump to first node if necessary
-			if(!node){
-				node = this._getRootOrFirstNode();
-			}
-		}while(node !== cs.startNode && (node.label.toLowerCase().substr(0, cs.pattern.length) != cs.pattern));
-		if(node && node.isTreeNode){
-			// no need to set focus if back where we started
-			if(node !== cs.startNode){
-				this.focusNode(node);
-			}
-		}
-	},
-
-	_onClick: function(/*TreeNode*/ nodeWidget, /*Event*/ e){
-		// summary:
-		//		Translates click events into commands for the controller to process
-
-		var domElement = e.target;
-
-		if( (this.openOnClick && nodeWidget.isExpandable) ||
-			(domElement == nodeWidget.expandoNode || domElement == nodeWidget.expandoNodeText) ){
-			// expando node was clicked, or label of a folder node was clicked; open it
-			if(nodeWidget.isExpandable){
-				this._onExpandoClick({node:nodeWidget});
-			}
-		}else{
-			this._publish("execute", { item: nodeWidget.item, node: nodeWidget, evt: e } );
-			this.onClick(nodeWidget.item, nodeWidget, e);
-			this.focusNode(nodeWidget);
-		}
-		dojo.stopEvent(e);
-	},
-	_onDblClick: function(/*TreeNode*/ nodeWidget, /*Event*/ e){
-		// summary:
-		//		Translates double-click events into commands for the controller to process
-
-		var domElement = e.target;
-
-		if( (this.openOnDblClick && nodeWidget.isExpandable) ||
-			(domElement == nodeWidget.expandoNode || domElement == nodeWidget.expandoNodeText) ){
-			// expando node was clicked, or label of a folder node was clicked; open it
-			if(nodeWidget.isExpandable){
-				this._onExpandoClick({node:nodeWidget});
-			}
-		}else{
-			this._publish("execute", { item: nodeWidget.item, node: nodeWidget, evt: e } );
-			this.onDblClick(nodeWidget.item, nodeWidget, e);
-			this.focusNode(nodeWidget);
-		}
-		dojo.stopEvent(e);
-	},
-
-	_onExpandoClick: function(/*Object*/ message){
-		// summary:
-		//		User clicked the +/- icon; expand or collapse my children.
-		var node = message.node;
-
-		// If we are collapsing, we might be hiding the currently focused node.
-		// Also, clicking the expando node might have erased focus from the current node.
-		// For simplicity's sake just focus on the node with the expando.
-		this.focusNode(node);
-
-		if(node.isExpanded){
-			this._collapseNode(node);
-		}else{
-			this._expandNode(node);
-		}
-	},
-
-	onClick: function(/* dojo.data */ item, /*TreeNode*/ node, /*Event*/ evt){
-		// summary:
-		//		Callback when a tree node is clicked
-		// tags:
-		//		callback
-	},
-	onDblClick: function(/* dojo.data */ item, /*TreeNode*/ node, /*Event*/ evt){
-		// summary:
-		//		Callback when a tree node is double-clicked
-		// tags:
-		//		callback
-	},
-	onOpen: function(/* dojo.data */ item, /*TreeNode*/ node){
-		// summary:
-		//		Callback when a node is opened
-		// tags:
-		//		callback
-	},
-	onClose: function(/* dojo.data */ item, /*TreeNode*/ node){
-		// summary:
-		//		Callback when a node is closed
-		// tags:
-		//		callback
-	},
-
-	_getNextNode: function(node){
-		// summary:
-		//		Get next visible node
-
-		if(node.isExpandable && node.isExpanded && node.hasChildren()){
-			// if this is an expanded node, get the first child
-			return node.getChildren()[0];		// _TreeNode
-		}else{
-			// find a parent node with a sibling
-			while(node && node.isTreeNode){
-				var returnNode = node.getNextSibling();
-				if(returnNode){
-					return returnNode;		// _TreeNode
-				}
-				node = node.getParent();
-			}
-			return null;
-		}
-	},
-
-	_getRootOrFirstNode: function(){
-		// summary:
-		//		Get first visible node
-		return this.showRoot ? this.rootNode : this.rootNode.getChildren()[0];
-	},
-
-	_collapseNode: function(/*_TreeNode*/ node){
-		// summary:
-		//		Called when the user has requested to collapse the node
-
-		if(node._expandNodeDeferred){
-			delete node._expandNodeDeferred;
-		}
-
-		if(node.isExpandable){
-			if(node.state == "LOADING"){
-				// ignore clicks while we are in the process of loading data
-				return;
-			}
-
-			node.collapse();
-			this.onClose(node.item, node);
-
-			if(node.item){
-				this._state(node.item,false);
-				this._saveState();
-			}
-		}
-	},
-
-	_expandNode: function(/*_TreeNode*/ node, /*Boolean?*/ recursive){
-		// summary:
-		//		Called when the user has requested to expand the node
-		// recursive:
-		//		Internal flag used when _expandNode() calls itself, don't set.
-		// returns:
-		//		Deferred that fires when the node is loaded and opened and (if persist=true) all it's descendants
-		//		that were previously opened too
-
-		if(node._expandNodeDeferred && !recursive){
-			// there's already an expand in progress (or completed), so just return
-			return node._expandNodeDeferred;	// dojo.Deferred
-		}
-
-		var model = this.model,
-			item = node.item,
-			_this = this;
-
-		switch(node.state){
-			case "UNCHECKED":
-				// need to load all the children, and then expand
-				node.markProcessing();
-
-				// Setup deferred to signal when the load and expand are finished.
-				// Save that deferred in this._expandDeferred as a flag that operation is in progress.
-				var def = (node._expandNodeDeferred = new dojo.Deferred());
-
-				// Get the children
-				model.getChildren(
-					item,
-					function(items){
-						node.unmarkProcessing();
-
-						// Display the children and also start expanding any children that were previously expanded
-						// (if this.persist == true).   The returned Deferred will fire when those expansions finish.
-						var scid = node.setChildItems(items);
-
-						// Call _expandNode() again but this time it will just to do the animation (default branch).
-						// The returned Deferred will fire when the animation completes.
-						// TODO: seems like I can avoid recursion and just use a deferred to sequence the events?
-						var ed = _this._expandNode(node, true);
-
-						// After the above two tasks (setChildItems() and recursive _expandNode()) finish,
-						// signal that I am done.
-						scid.addCallback(function(){
-							ed.addCallback(function(){
-								def.callback();
-							})
-						});
-					},
-					function(err){
-						console.error(_this, ": error loading root children: ", err);
-					}
-				);
-				break;
-
-			default:	// "LOADED"
-				// data is already loaded; just expand node
-				def = (node._expandNodeDeferred = node.expand());
-
-				this.onOpen(node.item, node);
-
-				if(item){
-					this._state(item, true);
-					this._saveState();
-				}
-		}
-
-		return def;	// dojo.Deferred
-	},
-
-	////////////////// Miscellaneous functions ////////////////
-
-	focusNode: function(/* _tree.Node */ node){
-		// summary:
-		//		Focus on the specified node (which must be visible)
-		// tags:
-		//		protected
-
-		// set focus so that the label will be voiced using screen readers
-		dijit.focus(node.labelNode);
-	},
-
-	_onNodeFocus: function(/*dijit._Widget*/ node){
-		// summary:
-		//		Called when a TreeNode gets focus, either by user clicking
-		//		it, or programatically by arrow key handling code.
-		// description:
-		//		It marks that the current node is the selected one, and the previously
-		//		selected node no longer is.
-
-		if(node){
-			if(node != this.lastFocused && this.lastFocused && !this.lastFocused._destroyed){
-				// mark that the previously selected node is no longer the selected one
-				this.lastFocused.setSelected(false);
-			}
-
-			// mark that the new node is the currently selected one
-			node.setSelected(true);
-			this.lastFocused = node;
-		}
-	},
-
-	_onNodeMouseEnter: function(/*dijit._Widget*/ node){
-		// summary:
-		//		Called when mouse is over a node (onmouseenter event)
-	},
-
-	_onNodeMouseLeave: function(/*dijit._Widget*/ node){
-		// summary:
-		//		Called when mouse is over a node (onmouseenter event)
-	},
-
-	//////////////// Events from the model //////////////////////////
-
-	_onItemChange: function(/*Item*/ item){
-		// summary:
-		//		Processes notification of a change to an item's scalar values like label
-		var model = this.model,
-			identity = model.getIdentity(item),
-			nodes = this._itemNodesMap[identity];
-
-		if(nodes){
-			var self = this;
-			dojo.forEach(nodes,function(node){
-				node.attr({
-					label: self.getLabel(item),
-					tooltip: self.getTooltip(item)
-				});
-				node._updateItemClasses(item);
-			});
-		}
-	},
-
-	_onItemChildrenChange: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){
-		// summary:
-		//		Processes notification of a change to an item's children
-		var model = this.model,
-			identity = model.getIdentity(parent),
-			parentNodes = this._itemNodesMap[identity];
-
-		if(parentNodes){
-			dojo.forEach(parentNodes,function(parentNode){
-				parentNode.setChildItems(newChildrenList);
-			});
-		}
-	},
-
-	_onItemDelete: function(/*Item*/ item){
-		// summary:
-		//		Processes notification of a deletion of an item
-		var model = this.model,
-			identity = model.getIdentity(item),
-			nodes = this._itemNodesMap[identity];
-
-		if(nodes){
-			dojo.forEach(nodes,function(node){
-				var parent = node.getParent();
-				if(parent){
-					// if node has not already been orphaned from a _onSetItem(parent, "children", ..) call...
-					parent.removeChild(node);
-				}
-				node.destroyRecursive();
-			});
-			delete this._itemNodesMap[identity];
-		}
-	},
-
-	/////////////// Miscellaneous funcs
-
-	_initState: function(){
-		// summary:
-		//		Load in which nodes should be opened automatically
-		if(this.persist){
-			var cookie = dojo.cookie(this.cookieName);
-			this._openedItemIds = {};
-			if(cookie){
-				dojo.forEach(cookie.split(','), function(item){
-					this._openedItemIds[item] = true;
-				}, this);
-			}
-		}
-	},
-	_state: function(item,expanded){
-		// summary:
-		//		Query or set expanded state for an item,
-		if(!this.persist){
-			return false;
-		}
-		var id=this.model.getIdentity(item);
-		if(arguments.length === 1){
-			return this._openedItemIds[id];
-		}
-		if(expanded){
-			this._openedItemIds[id] = true;
-		}else{
-			delete this._openedItemIds[id];
-		}
-	},
-	_saveState: function(){
-		// summary:
-		//		Create and save a cookie with the currently expanded nodes identifiers
-		if(!this.persist){
-			return;
-		}
-		var ary = [];
-		for(var id in this._openedItemIds){
-			ary.push(id);
-		}
-		dojo.cookie(this.cookieName, ary.join(","), {expires:365});
-	},
-
-	destroy: function(){
-		if(this._curSearch){
-			clearTimeout(this._curSearch.timer);
-			delete this._curSearch;
-		}
-		if(this.rootNode){
-			this.rootNode.destroyRecursive();
-		}
-		if(this.dndController && !dojo.isString(this.dndController)){
-			this.dndController.destroy();
-		}
-		this.rootNode = null;
-		this.inherited(arguments);
-	},
-
-	destroyRecursive: function(){
-		// A tree is treated as a leaf, not as a node with children (like a grid),
-		// but defining destroyRecursive for back-compat.
-		this.destroy();
-	},
-
-	resize: function(changeSize){
-		if(changeSize){
-			dojo.marginBox(this.domNode, changeSize);
-			dojo.style(this.domNode, "overflow", "auto");	// for scrollbars
-		}
-
-		// The only JS sizing involved w/tree is the indentation, which is specified
-		// in CSS and read in through this dummy indentDetector node (tree must be
-		// visible and attached to the DOM to read this)
-		this._nodePixelIndent = dojo.marginBox(this.tree.indentDetector).w;
-
-		if(this.tree.rootNode){
-			// If tree has already loaded, then reset indent for all the nodes
-			this.tree.rootNode.attr('indent', this.showRoot ? 0 : -1);
-		}
-	},
-
-	_createTreeNode: function(/*Object*/ args){
-		// summary:
-		//		creates a TreeNode
-		// description:
-		//		Developers can override this method to define their own TreeNode class;
-		//		However it will probably be removed in a future release in favor of a way
-		//		of just specifying a widget for the label, rather than one that contains
-		//		the children too.
-		return new dijit._TreeNode(args);
-	}
-});
-
-// For back-compat.  TODO: remove in 2.0
-dojo.require("dijit.tree.TreeStoreModel");
-dojo.require("dijit.tree.ForestStoreModel");
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_Calendar.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_Calendar.js
deleted file mode 100644
index e40ca44..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_Calendar.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._Calendar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._Calendar"] = true;
-dojo.provide("dijit._Calendar");
-
-dojo.require("dijit.Calendar");
-dojo.deprecated("dijit._Calendar is deprecated", "dijit._Calendar moved to dijit.Calendar", 1.5);
-
-// dijit._Calendar had an underscore all this time merely because it did
-// not satisfy dijit's a11y policy.
-dijit._Calendar = dijit.Calendar;
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_Contained.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_Contained.js
deleted file mode 100644
index 1543ce1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_Contained.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._Contained"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._Contained"] = true;
-dojo.provide("dijit._Contained");
-
-dojo.declare("dijit._Contained",
-		null,
-		{
-			// summary:
-			//		Mixin for widgets that are children of a container widget
-			//
-			// example:
-			// | 	// make a basic custom widget that knows about it's parents
-			// |	dojo.declare("my.customClass",[dijit._Widget,dijit._Contained],{});
-
-			getParent: function(){
-				// summary:
-				//		Returns the parent widget of this widget, assuming the parent
-				//		specifies isContainer
-				var parent = dijit.getEnclosingWidget(this.domNode.parentNode);
-				return parent && parent.isContainer ? parent : null;
-			},
-
-			_getSibling: function(/*String*/ which){
-				// summary:
-				//      Returns next or previous sibling
-				// which:
-				//      Either "next" or "previous"
-				// tags:
-				//      private
-				var node = this.domNode;
-				do{
-					node = node[which+"Sibling"];
-				}while(node && node.nodeType != 1);
-				return node && dijit.byNode(node);	// dijit._Widget
-			},
-
-			getPreviousSibling: function(){
-				// summary:
-				//		Returns null if this is the first child of the parent,
-				//		otherwise returns the next element sibling to the "left".
-
-				return this._getSibling("previous"); // dijit._Widget
-			},
-
-			getNextSibling: function(){
-				// summary:
-				//		Returns null if this is the last child of the parent,
-				//		otherwise returns the next element sibling to the "right".
-
-				return this._getSibling("next"); // dijit._Widget
-			},
-
-			getIndexInParent: function(){
-				// summary:
-				//		Returns the index of this widget within its container parent.
-				//		It returns -1 if the parent does not exist, or if the parent
-				//		is not a dijit._Container
-
-				var p = this.getParent();
-				if(!p || !p.getIndexOfChild){
-					return -1; // int
-				}
-				return p.getIndexOfChild(this); // int
-			}
-		}
-	);
-
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_Container.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_Container.js
deleted file mode 100644
index 43010a4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_Container.js
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._Container"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._Container"] = true;
-dojo.provide("dijit._Container");
-
-dojo.declare("dijit._Container",
-	null,
-	{
-		// summary:
-		//		Mixin for widgets that contain a set of widget children.
-		// description:
-		//		Use this mixin for widgets that needs to know about and
-		//		keep track of their widget children. Suitable for widgets like BorderContainer
-		//		and TabContainer which contain (only) a set of child widgets.
-		//
-		//		It's not suitable for widgets like ContentPane
-		//		which contains mixed HTML (plain DOM nodes in addition to widgets),
-		//		and where contained widgets are not necessarily directly below
-		//		this.containerNode.   In that case calls like addChild(node, position)
-		//		wouldn't make sense.
-
-		// isContainer: [protected] Boolean
-		//		Indicates that this widget acts as a "parent" to the descendant widgets.
-		//		When the parent is started it will call startup() on the child widgets.
-		//		See also `isLayoutContainer`.
-		isContainer: true,
-
-		buildRendering: function(){
-			this.inherited(arguments);
-			if(!this.containerNode){
-				// all widgets with descendants must set containerNode
-	 				this.containerNode = this.domNode;
-			}
-		},
-
-		addChild: function(/*dijit._Widget*/ widget, /*int?*/ insertIndex){
-			// summary:
-			//		Makes the given widget a child of this widget.
-			// description:
-			//		Inserts specified child widget's dom node as a child of this widget's
-			//		container node, and possibly does other processing (such as layout).
-
-			var refNode = this.containerNode;
-			if(insertIndex && typeof insertIndex == "number"){
-				var children = this.getChildren();
-				if(children && children.length >= insertIndex){
-					refNode = children[insertIndex-1].domNode;
-					insertIndex = "after";
-				}
-			}
-			dojo.place(widget.domNode, refNode, insertIndex);
-
-			// If I've been started but the child widget hasn't been started,
-			// start it now.  Make sure to do this after widget has been
-			// inserted into the DOM tree, so it can see that it's being controlled by me,
-			// so it doesn't try to size itself.
-			if(this._started && !widget._started){
-				widget.startup();
-			}
-		},
-
-		removeChild: function(/*Widget or int*/ widget){
-			// summary:
-			//		Removes the passed widget instance from this widget but does
-			//		not destroy it.  You can also pass in an integer indicating
-			//		the index within the container to remove
-
-			if(typeof widget == "number" && widget > 0){
-				widget = this.getChildren()[widget];
-			}
-
-			if(widget && widget.domNode){
-				var node = widget.domNode;
-				node.parentNode.removeChild(node); // detach but don't destroy
-			}
-		},
-
-		getChildren: function(){
-			// summary:
-			//		Returns array of children widgets.
-			// description:
-			//		Returns the widgets that are directly under this.containerNode.
-			return dojo.query("> [widgetId]", this.containerNode).map(dijit.byNode); // Widget[]
-		},
-
-		hasChildren: function(){
-			// summary:
-			//		Returns true if widget has children, i.e. if this.containerNode contains something.
-			return dojo.query("> [widgetId]", this.containerNode).length > 0;	// Boolean
-		},
-
-		destroyDescendants: function(/*Boolean*/ preserveDom){
-			// summary:
-			//      Destroys all the widgets inside this.containerNode,
-			//      but not this widget itself
-			dojo.forEach(this.getChildren(), function(child){ child.destroyRecursive(preserveDom); });
-		},
-
-		_getSiblingOfChild: function(/*dijit._Widget*/ child, /*int*/ dir){
-			// summary:
-			//		Get the next or previous widget sibling of child
-			// dir:
-			//		if 1, get the next sibling
-			//		if -1, get the previous sibling
-			// tags:
-			//      private
-			var node = child.domNode,
-				which = (dir>0 ? "nextSibling" : "previousSibling");
-			do{
-				node = node[which];
-			}while(node && (node.nodeType != 1 || !dijit.byNode(node)));
-			return node && dijit.byNode(node);	// dijit._Widget
-		},
-
-		getIndexOfChild: function(/*dijit._Widget*/ child){
-			// summary:
-			//		Gets the index of the child in this container or -1 if not found
-			return dojo.indexOf(this.getChildren(), child);	// int
-		},
-
-		startup: function(){
-			// summary:
-			//		Called after all the widgets have been instantiated and their
-			//		dom nodes have been inserted somewhere under dojo.doc.body.
-			//
-			//		Widgets should override this method to do any initialization
-			//		dependent on other widgets existing, and then call
-			//		this superclass method to finish things off.
-			//
-			//		startup() in subclasses shouldn't do anything
-			//		size related because the size of the widget hasn't been set yet.
-
-			if(this._started){ return; }
-
-			// Startup all children of this widget
-			dojo.forEach(this.getChildren(), function(child){ child.startup(); });
-
-			this.inherited(arguments);
-		}
-	}
-);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_DialogMixin.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_DialogMixin.js
deleted file mode 100644
index ff3c970..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_DialogMixin.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._DialogMixin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._DialogMixin"] = true;
-dojo.provide("dijit._DialogMixin");
-
-dojo.declare("dijit._DialogMixin", null,
-	{
-		// summary:
-		//		This provides functions useful to Dialog and TooltipDialog
-
-		attributeMap: dijit._Widget.prototype.attributeMap,
-
-		execute: function(/*Object*/ formContents){
-			// summary:
-			//		Callback when the user hits the submit button.
-			//		Override this method to handle Dialog execution.
-			// description:
-			//		After the user has pressed the submit button, the Dialog
-			//		first calls onExecute() to notify the container to hide the
-			//		dialog and restore focus to wherever it used to be.
-			//
-			//		*Then* this method is called.
-			// type:
-			//		callback
-		},
-
-		onCancel: function(){
-			// summary:
-			//	    Called when user has pressed the Dialog's cancel button, to notify container.
-			// description:
-			//	    Developer shouldn't override or connect to this method;
-			//		it's a private communication device between the TooltipDialog
-			//		and the thing that opened it (ex: `dijit.form.DropDownButton`)
-			// type:
-			//		protected
-		},
-
-		onExecute: function(){
-			// summary:
-			//	    Called when user has pressed the dialog's OK button, to notify container.
-			// description:
-			//	    Developer shouldn't override or connect to this method;
-			//		it's a private communication device between the TooltipDialog
-			//		and the thing that opened it (ex: `dijit.form.DropDownButton`)
-			// type:
-			//		protected
-		},
-
-		_onSubmit: function(){
-			// summary:
-			//		Callback when user hits submit button
-			// type:
-			//		protected
-			this.onExecute();	// notify container that we are about to execute
-			this.execute(this.attr('value'));
-		},
-
-		_getFocusItems: function(/*Node*/ dialogNode){
-			// summary:
-			//		Find focusable Items each time a dialog is opened,
-			//		setting _firstFocusItem and _lastFocusItem
-			// tags:
-			//		protected
-
-			var elems = dijit._getTabNavigable(dojo.byId(dialogNode));
-			this._firstFocusItem = elems.lowest || elems.first || dialogNode;
-			this._lastFocusItem = elems.last || elems.highest || this._firstFocusItem;
-			if(dojo.isMoz && this._firstFocusItem.tagName.toLowerCase() == "input" &&
-					dojo.getNodeProp(this._firstFocusItem, "type").toLowerCase() == "file"){
-				// FF doesn't behave well when first element is input type=file, set first focusable to dialog container
-				dojo.attr(dialogNode, "tabIndex", "0");
-				this._firstFocusItem = dialogNode;
-			}
-		}
-	}
-);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_HasDropDown.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_HasDropDown.js
deleted file mode 100644
index 3055909..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_HasDropDown.js
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._HasDropDown"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._HasDropDown"] = true;
-dojo.provide("dijit._HasDropDown");
-
-dojo.require("dijit._base.place");
-dojo.require("dijit._Widget");
-
-dojo.declare("dijit._HasDropDown",
-	null,
-	{
-		// summary:
-		//		Mixin for widgets that need drop down ability.
-
-		// _buttonNode: [protected] DomNode
-		//		The button/icon/node to click to display the drop down.
-		//		Can be set via a dojoAttachPoint assignment.
-		//		If missing, then either focusNode or domNode (if focusNode is also missing) will be used.
-		_buttonNode: null,
-
-		// _arrowWrapperNode: [protected] DomNode
-		//		Will set CSS class dijitUpArrow, dijitDownArrow, dijitRightArrow etc. on this node depending
-		//		on where the drop down is set to be positioned.
-		//		Can be set via a dojoAttachPoint assignment.
-		//		If missing, then _buttonNode will be used.
-		_arrowWrapperNode: null,
-
-		// _popupStateNode: [protected] DomNode
-		//		The node to set the popupActive class on.
-		//		Can be set via a dojoAttachPoint assignment.
-		//		If missing, then focusNode or _buttonNode (if focusNode is missing) will be used.
-		_popupStateNode: null,
-
-		// _aroundNode: [protected] DomNode
-		//		The node to display the popup around.
-		//		Can be set via a dojoAttachPoint assignment.
-		//		If missing, then domNode will be used.
-		_aroundNode: null,
-
-		// dropDown: [protected] Widget
-		//		The widget to display as a popup.  This widget *must* be
-		//		defined before the startup function is called.
-		dropDown: null,
-
-		// autoWidth: [protected] Boolean
-		//		Set to true to make the drop down at least as wide as this
-		//		widget.  Set to false if the drop down should just be its
-		//		default width
-		autoWidth: true,
-
-		// forceWidth: [protected] Boolean
-		//		Set to true to make the drop down exactly as wide as this
-		//		widget.  Overrides autoWidth.
-		forceWidth: false,
-
-		// maxHeight: [protected] Integer
-		//		The max height for our dropdown.  Set to 0 for no max height.
-		//		any dropdown taller than this will have scrollbars
-		maxHeight: 0,
-
-		// dropDownPosition: [const] String[]
-		//		This variable controls the position of the drop down.
-		//		It's an array of strings with the following values:
-		//
-		//			* before: places drop down to the left of the target node/widget, or to the right in
-		//			  the case of RTL scripts like Hebrew and Arabic
-		//			* after: places drop down to the right of the target node/widget, or to the left in
-		//			  the case of RTL scripts like Hebrew and Arabic
-		//			* above: drop down goes above target node
-		//			* below: drop down goes below target node
-		//
-		//		The list is positions is tried, in order, until a position is found where the drop down fits
-		//		within the viewport.
-		//
-		dropDownPosition: ["below","above"],
-
-		// _stopClickEvents: Boolean
-		//		When set to false, the click events will not be stopped, in
-		//		case you want to use them in your subwidget
-		_stopClickEvents: true,
-
-		_onDropDownMouse: function(/*Event*/ e){
-			// summary:
-			//		Callback when the user mouse clicks on the arrow icon, or presses the down
-			//		arrow key, to open the drop down.
-
-			// We handle mouse events using onmousedown in order to allow for selecting via
-			// a mouseDown --> mouseMove --> mouseUp.  So, our click is already handled, unless
-			// we are executed via keypress - in which case, this._seenKeydown
-			// will be set to true.
-			if(e.type == "click" && !this._seenKeydown){ return; }
-			this._seenKeydown = false;
-
-			// If we are a mouse event, set up the mouseup handler.  See _onDropDownMouse() for
-			// details on this handler.
-			if(e.type == "mousedown"){
-				this._docHandler = this.connect(dojo.doc, "onmouseup", "_onDropDownMouseup");
-			}
-			if(this.disabled || this.readOnly){ return; }
-			if(this._stopClickEvents){
-				dojo.stopEvent(e);
-			}
-			this.toggleDropDown();
-
-			// If we are a click, then we'll pretend we did a mouse up
-			if(e.type == "click" || e.type == "keypress"){
-				this._onDropDownMouseup();
-			}
-		},
-
-		_onDropDownMouseup: function(/*Event?*/ e){
-			// summary:
-			//		Callback when the user lifts their mouse after mouse down on the arrow icon.
-			//		If the drop is a simple menu and the mouse is over the menu, we execute it, otherwise, we focus our
-			//		dropDown node.  If the event is missing, then we are not
-			//		a mouseup event.
-			//
-			//		This is useful for the common mouse movement pattern
-			//		with native browser <select> nodes:
-			//			1. mouse down on the select node (probably on the arrow)
-			//			2. move mouse to a menu item while holding down the mouse button
-			//			3. mouse up.  this selects the menu item as though the user had clicked it.
-
-			if(e && this._docHandler){
-				this.disconnect(this._docHandler);
-			}
-			var dropDown = this.dropDown, overMenu = false;
-
-			if(e && this._opened){
-				// This code deals with the corner-case when the drop down covers the original widget,
-				// because it's so large.  In that case mouse-up shouldn't select a value from the menu.
-				// Find out if our target is somewhere in our dropdown widget,
-				// but not over our _buttonNode (the clickable node)
-				var c = dojo.position(this._buttonNode, true);
-				if(!(e.pageX >= c.x && e.pageX <= c.x + c.w) ||
-					!(e.pageY >= c.y && e.pageY <= c.y + c.h)){
-					var t = e.target;
-					while(t && !overMenu){
-						if(dojo.hasClass(t, "dijitPopup")){
-							overMenu = true;
-						}else{
-							t = t.parentNode;
-						}
-					}
-					if(overMenu){
-						t = e.target;
-						if(dropDown.onItemClick){
-							var menuItem;
-							while(t && !(menuItem = dijit.byNode(t))){
-								t = t.parentNode;
-							}
-							if(menuItem && menuItem.onClick && menuItem.getParent){
-								menuItem.getParent().onItemClick(menuItem, e);
-							}
-						}
-						return;
-					}
-				}
-			}
-			if(this._opened && dropDown.focus){
-				// Focus the dropdown widget - do it on a delay so that we
-				// don't steal our own focus.
-				window.setTimeout(dojo.hitch(dropDown, "focus"), 1);
-			}
-		},
-
-		_setupDropdown: function(){
-			// summary:
-			//		set up nodes and connect our mouse and keypress events
-			this._buttonNode = this._buttonNode || this.focusNode || this.domNode;
-			this._popupStateNode = this._popupStateNode || this.focusNode || this._buttonNode;
-			this._aroundNode = this._aroundNode || this.domNode;
-			this.connect(this._buttonNode, "onmousedown", "_onDropDownMouse");
-			this.connect(this._buttonNode, "onclick", "_onDropDownMouse");
-			this.connect(this._buttonNode, "onkeydown", "_onDropDownKeydown");
-			this.connect(this._buttonNode, "onblur", "_onDropDownBlur");
-			this.connect(this._buttonNode, "onkeypress", "_onKey");
-
-			// If we have a _setStateClass function (which happens when
-			// we are a form widget), then we need to connect our open/close
-			// functions to it
-			if(this._setStateClass){
-				this.connect(this, "openDropDown", "_setStateClass");
-				this.connect(this, "closeDropDown", "_setStateClass");
-			}
-
-			// Add a class to the "dijitDownArrowButton" type class to _buttonNode so theme can set direction of arrow
-			// based on where drop down will normally appear
-			var defaultPos = {
-					"after" : this.isLeftToRight() ? "Right" : "Left",
-					"before" : this.isLeftToRight() ? "Left" : "Right",
-					"above" : "Up",
-					"below" : "Down",
-					"left" : "Left",
-					"right" : "Right"
-			}[this.dropDownPosition[0]] || this.dropDownPosition[0] || "Down";
-			dojo.addClass(this._arrowWrapperNode || this._buttonNode, "dijit" + defaultPos + "ArrowButton");
-		},
-
-		postCreate: function(){
-			this._setupDropdown();
-			this.inherited(arguments);
-		},
-
-		destroyDescendants: function(){
-			if(this.dropDown){
-				// Destroy the drop down, unless it's already been destroyed.  This can happen because
-				// the drop down is a direct child of <body> even though it's logically my child.
-				if(!this.dropDown._destroyed){
-					this.dropDown.destroyRecursive();
-				}
-				delete this.dropDown;
-			}
-			this.inherited(arguments);
-		},
-
-		_onDropDownKeydown: function(/*Event*/ e){
-			this._seenKeydown = true;
-		},
-
-		_onKeyPress: function(/*Event*/ e){
-			if(this._opened && e.charOrCode == dojo.keys.ESCAPE && !e.shiftKey && !e.ctrlKey && !e.altKey){
-				this.toggleDropDown();
-				dojo.stopEvent(e);
-				return;
-			}
-			this.inherited(arguments);
-		},
-
-		_onDropDownBlur: function(/*Event*/ e){
-			this._seenKeydown = false;
-		},
-
-		_onKey: function(/*Event*/ e){
-			// summary:
-			//		Callback when the user presses a key on menu popup node
-
-			if(this.disabled || this.readOnly){ return; }
-			var d = this.dropDown;
-			if(d && this._opened && d.handleKey){
-				if(d.handleKey(e) === false){ return; }
-			}
-			if(d && this._opened && e.keyCode == dojo.keys.ESCAPE){
-				this.toggleDropDown();
-				return;
-			}
-			if(e.keyCode == dojo.keys.DOWN_ARROW || e.keyCode == dojo.keys.ENTER || e.charOrCode == " "){
-				this._onDropDownMouse(e);
-			}
-		},
-
-		_onBlur: function(){
-			// summary:
-			//		Called magically when focus has shifted away from this widget and it's dropdown
-
-			this.closeDropDown();
-			// don't focus on button.  the user has explicitly focused on something else.
-			this.inherited(arguments);
-		},
-
-		isLoaded: function(){
-			// summary:
-			//		Returns whether or not the dropdown is loaded.  This can
-			//		be overridden in order to force a call to loadDropDown().
-			// tags:
-			//		protected
-
-			return true;
-		},
-
-		loadDropDown: function(/* Function */ loadCallback){
-			// summary:
-			//		Loads the data for the dropdown, and at some point, calls
-			//		the given callback
-			// tags:
-			//		protected
-
-			loadCallback();
-		},
-
-		toggleDropDown: function(){
-			// summary:
-			//		Toggle the drop-down widget; if it is up, close it, if not, open it
-			// tags:
-			//		protected
-
-			if(this.disabled || this.readOnly){ return; }
-			this.focus();
-			var dropDown = this.dropDown;
-			if(!dropDown){ return; }
-			if(!this._opened){
-				// If we aren't loaded, load it first so there isn't a flicker
-				if(!this.isLoaded()){
-					this.loadDropDown(dojo.hitch(this, "openDropDown"));
-					return;
-				}else{
-					this.openDropDown();
-				}
-			}else{
-				this.closeDropDown();
-			}
-		},
-
-		openDropDown: function(){
-			// summary:
-			//		Opens the dropdown for this widget - it returns the
-			//		return value of dijit.popup.open
-			// tags:
-			//		protected
-
-			var dropDown = this.dropDown;
-			var ddNode = dropDown.domNode;
-			var self = this;
-
-			// Prepare our popup's height and honor maxHeight if it exists.
-
-			// TODO: isn't maxHeight dependent on the return value from dijit.popup.open(),
-			// ie, dependent on how much space is available (BK)
-
-			if(!this._preparedNode){
-				dijit.popup.moveOffScreen(ddNode);
-				this._preparedNode = true;			
-				// Check if we have explicitly set width and height on the dropdown widget dom node
-				if(ddNode.style.width){
-					this._explicitDDWidth = true;
-				}
-				if(ddNode.style.height){
-					this._explicitDDHeight = true;
-				}
-			}
-			if(this.maxHeight || this.forceWidth || this.autoWidth){
-				var myStyle = {
-					display: "",
-					visibility: "hidden"
-				};
-				if(!this._explicitDDWidth){
-					myStyle.width = "";
-				}
-				if(!this._explicitDDHeight){
-					myStyle.height = "";
-				}
-				dojo.style(ddNode, myStyle);
-				var mb = dojo.marginBox(ddNode);
-				var overHeight = (this.maxHeight && mb.h > this.maxHeight);
-				dojo.style(ddNode, {overflow: overHeight ? "auto" : "hidden"});
-				if(this.forceWidth){
-					mb.w = this.domNode.offsetWidth;
-				}else if(this.autoWidth){
-					mb.w = Math.max(mb.w, this.domNode.offsetWidth);
-				}else{
-					delete mb.w;
-				}
-				if(overHeight){
-					mb.h = this.maxHeight;
-					if("w" in mb){
-						mb.w += 16;
-					}
-				}else{
-					delete mb.h;
-				}
-				delete mb.t;
-				delete mb.l;
-				if(dojo.isFunction(dropDown.resize)){
-					dropDown.resize(mb);
-				}else{
-					dojo.marginBox(ddNode, mb);
-				}
-			}
-			var retVal = dijit.popup.open({
-				parent: this,
-				popup: dropDown,
-				around: this._aroundNode,
-				orient: dijit.getPopupAroundAlignment((this.dropDownPosition && this.dropDownPosition.length) ? this.dropDownPosition : ["below"],this.isLeftToRight()),
-				onExecute: function(){
-					self.closeDropDown(true);
-				},
-				onCancel: function(){
-					self.closeDropDown(true);
-				},
-				onClose: function(){
-					dojo.attr(self._popupStateNode, "popupActive", false);
-					dojo.removeClass(self._popupStateNode, "dijitHasDropDownOpen");
-					self._opened = false;
-					self.state = "";
-				}
-			});
-			dojo.attr(this._popupStateNode, "popupActive", "true");
-			dojo.addClass(self._popupStateNode, "dijitHasDropDownOpen");
-			this._opened=true;
-			this.state="Opened";
-			// TODO: set this.checked and call setStateClass(), to affect button look while drop down is shown
-			return retVal;
-		},
-
-		closeDropDown: function(/*Boolean*/ focus){
-			// summary:
-			//		Closes the drop down on this widget
-			// tags:
-			//		protected
-
-			if(this._opened){
-				dijit.popup.close(this.dropDown);
-				if(focus){ this.focus(); }
-				this._opened = false;
-				this.state = "";
-			}
-		}
-
-	}
-);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_KeyNavContainer.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_KeyNavContainer.js
deleted file mode 100644
index 1df9bd3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_KeyNavContainer.js
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._KeyNavContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._KeyNavContainer"] = true;
-dojo.provide("dijit._KeyNavContainer");
-dojo.require("dijit._Container");
-
-dojo.declare("dijit._KeyNavContainer",
-	dijit._Container,
-	{
-
-		// summary:
-		//		A _Container with keyboard navigation of its children.
-		// description:
-		//		To use this mixin, call connectKeyNavHandlers() in
-		//		postCreate() and call startupKeyNavChildren() in startup().
-		//		It provides normalized keyboard and focusing code for Container
-		//		widgets.
-/*=====
-		// focusedChild: [protected] Widget
-		//		The currently focused child widget, or null if there isn't one
-		focusedChild: null,
-=====*/
-
-		// tabIndex: Integer
-		//		Tab index of the container; same as HTML tabIndex attribute.
-		//		Note then when user tabs into the container, focus is immediately
-		//		moved to the first item in the container.
-		tabIndex: "0",
-
-		_keyNavCodes: {},
-
-		connectKeyNavHandlers: function(/*dojo.keys[]*/ prevKeyCodes, /*dojo.keys[]*/ nextKeyCodes){
-			// summary:
-			//		Call in postCreate() to attach the keyboard handlers
-			//		to the container.
-			// preKeyCodes: dojo.keys[]
-			//		Key codes for navigating to the previous child.
-			// nextKeyCodes: dojo.keys[]
-			//		Key codes for navigating to the next child.
-			// tags:
-			//		protected
-
-			var keyCodes = (this._keyNavCodes = {});
-			var prev = dojo.hitch(this, this.focusPrev);
-			var next = dojo.hitch(this, this.focusNext);
-			dojo.forEach(prevKeyCodes, function(code){ keyCodes[code] = prev; });
-			dojo.forEach(nextKeyCodes, function(code){ keyCodes[code] = next; });
-			this.connect(this.domNode, "onkeypress", "_onContainerKeypress");
-			this.connect(this.domNode, "onfocus", "_onContainerFocus");
-		},
-
-		startupKeyNavChildren: function(){
-			// summary:
-			//		Call in startup() to set child tabindexes to -1
-			// tags:
-			//		protected
-			dojo.forEach(this.getChildren(), dojo.hitch(this, "_startupChild"));
-		},
-
-		addChild: function(/*dijit._Widget*/ widget, /*int?*/ insertIndex){
-			// summary:
-			//		Add a child to our _Container
-			dijit._KeyNavContainer.superclass.addChild.apply(this, arguments);
-			this._startupChild(widget);
-		},
-
-		focus: function(){
-			// summary:
-			//		Default focus() implementation: focus the first child.
-			this.focusFirstChild();
-		},
-
-		focusFirstChild: function(){
-			// summary:
-			//		Focus the first focusable child in the container.
-			// tags:
-			//		protected
-			var child = this._getFirstFocusableChild();
-			if(child){ // edge case: Menu could be empty or hidden
-				this.focusChild(child);
-			}
-		},
-
-		focusNext: function(){
-			// summary:
-			//		Focus the next widget
-			// tags:
-			//		protected
-			var child = this._getNextFocusableChild(this.focusedChild, 1);
-			this.focusChild(child);
-		},
-
-		focusPrev: function(){
-			// summary:
-			//		Focus the last focusable node in the previous widget
-			//		(ex: go to the ComboButton icon section rather than button section)
-			// tags:
-			//		protected
-			var child = this._getNextFocusableChild(this.focusedChild, -1);
-			this.focusChild(child, true);
-		},
-
-		focusChild: function(/*dijit._Widget*/ widget, /*Boolean*/ last){
-			// summary:
-			//		Focus widget.
-			// widget:
-			//		Reference to container's child widget
-			// last:
-			//		If true and if widget has multiple focusable nodes, focus the
-			//		last one instead of the first one
-			// tags:
-			//		protected
-			
-			if(this.focusedChild && widget !== this.focusedChild){
-				this._onChildBlur(this.focusedChild);
-			}
-			widget.focus(last ? "end" : "start");
-			this.focusedChild = widget;
-		},
-
-		_startupChild: function(/*dijit._Widget*/ widget){
-			// summary:
-			//		Setup for each child widget
-			// description:
-			//		Sets tabIndex=-1 on each child, so that the tab key will 
-			//		leave the container rather than visiting each child.
-			// tags:
-			//		private
-			
-			widget.attr("tabIndex", "-1");
-			
-			this.connect(widget, "_onFocus", function(){
-				// Set valid tabIndex so tabbing away from widget goes to right place, see #10272
-				widget.attr("tabIndex", this.tabIndex);
-			});
-			this.connect(widget, "_onBlur", function(){
-				widget.attr("tabIndex", "-1");
-			});
-		},
-
-		_onContainerFocus: function(evt){
-			// summary:
-			//		Handler for when the container gets focus
-			// description:
-			//		Initially the container itself has a tabIndex, but when it gets
-			//		focus, switch focus to first child...
-			// tags:
-			//		private
-
-			// Note that we can't use _onFocus() because switching focus from the
-			// _onFocus() handler confuses the focus.js code
-			// (because it causes _onFocusNode() to be called recursively)
-
-			// focus bubbles on Firefox,
-			// so just make sure that focus has really gone to the container
-			if(evt.target !== this.domNode){ return; }
-
-			this.focusFirstChild();
-
-			// and then set the container's tabIndex to -1,
-			// (don't remove as that breaks Safari 4)
-			// so that tab or shift-tab will go to the fields after/before
-			// the container, rather than the container itself
-			dojo.attr(this.domNode, "tabIndex", "-1");
-		},
-
-		_onBlur: function(evt){
-			// When focus is moved away the container, and it's descendant (popup) widgets,
-			// then restore the container's tabIndex so that user can tab to it again.
-			// Note that using _onBlur() so that this doesn't happen when focus is shifted
-			// to one of my child widgets (typically a popup)
-			if(this.tabIndex){
-				dojo.attr(this.domNode, "tabIndex", this.tabIndex);
-			}
-			this.inherited(arguments);
-		},
-
-		_onContainerKeypress: function(evt){
-			// summary:
-			//		When a key is pressed, if it's an arrow key etc. then
-			//		it's handled here.
-			// tags:
-			//		private
-			if(evt.ctrlKey || evt.altKey){ return; }
-			var func = this._keyNavCodes[evt.charOrCode];
-			if(func){
-				func();
-				dojo.stopEvent(evt);
-			}
-		},
-
-		_onChildBlur: function(/*dijit._Widget*/ widget){
-			// summary:
-			//		Called when focus leaves a child widget to go
-			//		to a sibling widget.
-			// tags:
-			//		protected
-		},
-
-		_getFirstFocusableChild: function(){
-			// summary:
-			//		Returns first child that can be focused
-			return this._getNextFocusableChild(null, 1);	// dijit._Widget
-		},
-
-		_getNextFocusableChild: function(child, dir){
-			// summary:
-			//		Returns the next or previous focusable child, compared
-			//		to "child"
-			// child: Widget
-			//		The current widget
-			// dir: Integer
-			//		* 1 = after
-			//		* -1 = before
-			if(child){
-				child = this._getSiblingOfChild(child, dir);
-			}
-			var children = this.getChildren();
-			for(var i=0; i < children.length; i++){
-				if(!child){
-					child = children[(dir>0) ? 0 : (children.length-1)];
-				}
-				if(child.isFocusable()){
-					return child;	// dijit._Widget
-				}
-				child = this._getSiblingOfChild(child, dir);
-			}
-			// no focusable child found
-			return null;	// dijit._Widget
-		}
-	}
-);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_Templated.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_Templated.js
deleted file mode 100644
index 9885e80..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_Templated.js
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._Templated"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._Templated"] = true;
-dojo.provide("dijit._Templated");
-
-dojo.require("dijit._Widget");
-dojo.require("dojo.string");
-dojo.require("dojo.parser");
-dojo.require("dojo.cache");
-
-dojo.declare("dijit._Templated",
-	null,
-	{
-		// summary:
-		//		Mixin for widgets that are instantiated from a template
-
-		// templateString: [protected] String
-		//		A string that represents the widget template. Pre-empts the
-		//		templatePath. In builds that have their strings "interned", the
-		//		templatePath is converted to an inline templateString, thereby
-		//		preventing a synchronous network call.
-		//
-		//		Use in conjunction with dojo.cache() to load from a file.
-		templateString: null,
-
-		// templatePath: [protected deprecated] String
-		//		Path to template (HTML file) for this widget relative to dojo.baseUrl.
-		//		Deprecated: use templateString with dojo.cache() instead.
-		templatePath: null,
-
-		// widgetsInTemplate: [protected] Boolean
-		//		Should we parse the template to find widgets that might be
-		//		declared in markup inside it?  False by default.
-		widgetsInTemplate: false,
-
-		// skipNodeCache: [protected] Boolean
-		//		If using a cached widget template node poses issues for a
-		//		particular widget class, it can set this property to ensure
-		//		that its template is always re-built from a string
-		_skipNodeCache: false,
-
-		// _earlyTemplatedStartup: Boolean
-		//		A fallback to preserve the 1.0 - 1.3 behavior of children in
-		//		templates having their startup called before the parent widget
-		//		fires postCreate. Defaults to 'false', causing child widgets to
-		//		have their .startup() called immediately before a parent widget
-		//		.startup(), but always after the parent .postCreate(). Set to
-		//		'true' to re-enable to previous, arguably broken, behavior.
-		_earlyTemplatedStartup: false,
-
-		// _attachPoints: [private] String[]
-		//		List of widget attribute names associated with dojoAttachPoint=... in the
-		//		template, ex: ["containerNode", "labelNode"]
-/*=====
- 		_attachPoints: [],
- =====*/
-
-		constructor: function(){
-			this._attachPoints = [];
-		},
-
-		_stringRepl: function(tmpl){
-			// summary:
-			//		Does substitution of ${foo} type properties in template string
-			// tags:
-			//		private
-			var className = this.declaredClass, _this = this;
-			// Cache contains a string because we need to do property replacement
-			// do the property replacement
-			return dojo.string.substitute(tmpl, this, function(value, key){
-				if(key.charAt(0) == '!'){ value = dojo.getObject(key.substr(1), false, _this); }
-				if(typeof value == "undefined"){ throw new Error(className+" template:"+key); } // a debugging aide
-				if(value == null){ return ""; }
-
-				// Substitution keys beginning with ! will skip the transform step,
-				// in case a user wishes to insert unescaped markup, e.g. ${!foo}
-				return key.charAt(0) == "!" ? value :
-					// Safer substitution, see heading "Attribute values" in
-					// http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.3.2
-					value.toString().replace(/"/g,"&quot;"); //TODO: add &amp? use encodeXML method?
-			}, this);
-		},
-
-		// method over-ride
-		buildRendering: function(){
-			// summary:
-			//		Construct the UI for this widget from a template, setting this.domNode.
-			// tags:
-			//		protected
-
-			// Lookup cached version of template, and download to cache if it
-			// isn't there already.  Returns either a DomNode or a string, depending on
-			// whether or not the template contains ${foo} replacement parameters.
-			var cached = dijit._Templated.getCachedTemplate(this.templatePath, this.templateString, this._skipNodeCache);
-
-			var node;
-			if(dojo.isString(cached)){
-				node = dojo._toDom(this._stringRepl(cached));
-				if(node.nodeType != 1){
-					// Flag common problems such as templates with multiple top level nodes (nodeType == 11)
-					throw new Error("Invalid template: " + cached);
-				}
-			}else{
-				// if it's a node, all we have to do is clone it
-				node = cached.cloneNode(true);
-			}
-
-			this.domNode = node;
-
-			// recurse through the node, looking for, and attaching to, our
-			// attachment points and events, which should be defined on the template node.
-			this._attachTemplateNodes(node);
-
-			if(this.widgetsInTemplate){
-				// Make sure dojoType is used for parsing widgets in template.
-				// The dojo.parser.query could be changed from multiversion support.
-				var parser = dojo.parser, qry, attr;
-				if(parser._query != "[dojoType]"){
-					qry = parser._query;
-					attr = parser._attrName;
-					parser._query = "[dojoType]";
-					parser._attrName = "dojoType";
-				}
-
-				// Store widgets that we need to start at a later point in time
-				var cw = (this._startupWidgets = dojo.parser.parse(node, {
-					noStart: !this._earlyTemplatedStartup
-				}));
-
-				// Restore the query.
-				if(qry){
-					parser._query = qry;
-					parser._attrName = attr;
-				}
-
-				this._supportingWidgets = dijit.findWidgets(node);
-
-				this._attachTemplateNodes(cw, function(n,p){
-					return n[p];
-				});
-			}
-
-			this._fillContent(this.srcNodeRef);
-		},
-
-		_fillContent: function(/*DomNode*/ source){
-			// summary:
-			//		Relocate source contents to templated container node.
-			//		this.containerNode must be able to receive children, or exceptions will be thrown.
-			// tags:
-			//		protected
-			var dest = this.containerNode;
-			if(source && dest){
-				while(source.hasChildNodes()){
-					dest.appendChild(source.firstChild);
-				}
-			}
-		},
-
-		_attachTemplateNodes: function(rootNode, getAttrFunc){
-			// summary:
-			//		Iterate through the template and attach functions and nodes accordingly.
-			// description:
-			//		Map widget properties and functions to the handlers specified in
-			//		the dom node and it's descendants. This function iterates over all
-			//		nodes and looks for these properties:
-			//			* dojoAttachPoint
-			//			* dojoAttachEvent
-			//			* waiRole
-			//			* waiState
-			// rootNode: DomNode|Array[Widgets]
-			//		the node to search for properties. All children will be searched.
-			// getAttrFunc: Function?
-			//		a function which will be used to obtain property for a given
-			//		DomNode/Widget
-			// tags:
-			//		private
-
-			getAttrFunc = getAttrFunc || function(n,p){ return n.getAttribute(p); };
-
-			var nodes = dojo.isArray(rootNode) ? rootNode : (rootNode.all || rootNode.getElementsByTagName("*"));
-			var x = dojo.isArray(rootNode) ? 0 : -1;
-			for(; x<nodes.length; x++){
-				var baseNode = (x == -1) ? rootNode : nodes[x];
-				if(this.widgetsInTemplate && getAttrFunc(baseNode, "dojoType")){
-					continue;
-				}
-				// Process dojoAttachPoint
-				var attachPoint = getAttrFunc(baseNode, "dojoAttachPoint");
-				if(attachPoint){
-					var point, points = attachPoint.split(/\s*,\s*/);
-					while((point = points.shift())){
-						if(dojo.isArray(this[point])){
-							this[point].push(baseNode);
-						}else{
-							this[point]=baseNode;
-						}
-						this._attachPoints.push(point);
-					}
-				}
-
-				// Process dojoAttachEvent
-				var attachEvent = getAttrFunc(baseNode, "dojoAttachEvent");
-				if(attachEvent){
-					// NOTE: we want to support attributes that have the form
-					// "domEvent: nativeEvent; ..."
-					var event, events = attachEvent.split(/\s*,\s*/);
-					var trim = dojo.trim;
-					while((event = events.shift())){
-						if(event){
-							var thisFunc = null;
-							if(event.indexOf(":") != -1){
-								// oh, if only JS had tuple assignment
-								var funcNameArr = event.split(":");
-								event = trim(funcNameArr[0]);
-								thisFunc = trim(funcNameArr[1]);
-							}else{
-								event = trim(event);
-							}
-							if(!thisFunc){
-								thisFunc = event;
-							}
-							this.connect(baseNode, event, thisFunc);
-						}
-					}
-				}
-
-				// waiRole, waiState
-				var role = getAttrFunc(baseNode, "waiRole");
-				if(role){
-					dijit.setWaiRole(baseNode, role);
-				}
-				var values = getAttrFunc(baseNode, "waiState");
-				if(values){
-					dojo.forEach(values.split(/\s*,\s*/), function(stateValue){
-						if(stateValue.indexOf('-') != -1){
-							var pair = stateValue.split('-');
-							dijit.setWaiState(baseNode, pair[0], pair[1]);
-						}
-					});
-				}
-			}
-		},
-
-		startup: function(){
-			dojo.forEach(this._startupWidgets, function(w){
-				if(w && !w._started && w.startup){
-					w.startup();
-				}
-			});
-			this.inherited(arguments);
-		},
-
-		destroyRendering: function(){
-			// Delete all attach points to prevent IE6 memory leaks.
-			dojo.forEach(this._attachPoints, function(point){
-				delete this[point];
-			}, this);
-			this._attachPoints = [];
-
-			this.inherited(arguments);
-		}
-	}
-);
-
-// key is either templatePath or templateString; object is either string or DOM tree
-dijit._Templated._templateCache = {};
-
-dijit._Templated.getCachedTemplate = function(templatePath, templateString, alwaysUseString){
-	// summary:
-	//		Static method to get a template based on the templatePath or
-	//		templateString key
-	// templatePath: String||dojo.uri.Uri
-	//		The URL to get the template from.
-	// templateString: String?
-	//		a string to use in lieu of fetching the template from a URL. Takes precedence
-	//		over templatePath
-	// returns: Mixed
-	//		Either string (if there are ${} variables that need to be replaced) or just
-	//		a DOM tree (if the node can be cloned directly)
-
-	// is it already cached?
-	var tmplts = dijit._Templated._templateCache;
-	var key = templateString || templatePath;
-	var cached = tmplts[key];
-	if(cached){
-		try{
-			// if the cached value is an innerHTML string (no ownerDocument) or a DOM tree created within the current document, then use the current cached value
-			if(!cached.ownerDocument || cached.ownerDocument == dojo.doc){
-				// string or node of the same document
-				return cached;
-			}
-		}catch(e){ /* squelch */ } // IE can throw an exception if cached.ownerDocument was reloaded
-		dojo.destroy(cached);
-	}
-
-	// If necessary, load template string from template path
-	if(!templateString){
-		templateString = dojo.cache(templatePath, {sanitize: true});
-	}
-	templateString = dojo.string.trim(templateString);
-
-	if(alwaysUseString || templateString.match(/\$\{([^\}]+)\}/g)){
-		// there are variables in the template so all we can do is cache the string
-		return (tmplts[key] = templateString); //String
-	}else{
-		// there are no variables in the template so we can cache the DOM tree
-		var node = dojo._toDom(templateString);
-		if(node.nodeType != 1){
-			throw new Error("Invalid template: " + templateString);
-		}
-		return (tmplts[key] = node); //Node
-	}
-};
-
-if(dojo.isIE){
-	dojo.addOnWindowUnload(function(){
-		var cache = dijit._Templated._templateCache;
-		for(var key in cache){
-			var value = cache[key];
-			if(typeof value == "object"){ // value is either a string or a DOM node template
-				dojo.destroy(value);
-			}
-			delete cache[key];
-		}
-	});
-}
-
-// These arguments can be specified for widgets which are used in templates.
-// Since any widget can be specified as sub widgets in template, mix it
-// into the base widget class.  (This is a hack, but it's effective.)
-dojo.extend(dijit._Widget,{
-	dojoAttachEvent: "",
-	dojoAttachPoint: "",
-	waiRole: "",
-	waiState:""
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_TimePicker.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_TimePicker.js
deleted file mode 100644
index cdaf5ad..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_TimePicker.js
+++ /dev/null
@@ -1,499 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._TimePicker"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._TimePicker"] = true;
-dojo.provide("dijit._TimePicker");
-
-dojo.require("dijit.form._FormWidget");
-dojo.require("dojo.date.locale");
-
-/*=====
-dojo.declare(
-	"dijit._TimePicker.__Constraints",
-	dojo.date.locale.__FormatOptions,
-	{
-		// clickableIncrement: String
-		//		See `dijit._TimePicker.clickableIncrement`
-		clickableIncrement: "T00:15:00",
-
-		// visibleIncrement: String
-		//		See `dijit._TimePicker.visibleIncrement`
-		visibleIncrement: "T01:00:00",
-
-		// visibleRange: String
-		//		See `dijit._TimePicker.visibleRange`
-		visibleRange: "T05:00:00"
-	}
-);
-=====*/
-
-dojo.declare("dijit._TimePicker",
-	[dijit._Widget, dijit._Templated],
-	{
-		// summary:
-		//		A graphical time picker.
-		//		This widget is used internally by other widgets and is not available
-		//		as a standalone widget due to lack of accessibility support.
-
-		templateString: dojo.cache("dijit", "templates/TimePicker.html", "<div id=\"widget_${id}\" class=\"dijitMenu ${baseClass}\"\n    ><div dojoAttachPoint=\"upArrow\" class=\"dijitButtonNode dijitUpArrowButton\" dojoAttachEvent=\"onmouseenter:_buttonMouse,onmouseleave:_buttonMouse\"\n\t\t><div class=\"dijitReset dijitInline dijitArrowButtonInner\" wairole=\"presentation\" role=\"presentation\">&nbsp;</div\n\t\t><div class=\"dijitArrowButtonChar\">&#9650;</div></div\n    ><div dojoAttachPoint=\"timeMenu,focusNode\" dojoAttachEvent=\"onclick:_onOptionSelected,onmouseover,onmouseout\"></div\n    ><div dojoAttachPoint=\"downArrow\" class=\"dijitButtonNode dijitDownArrowButton\" dojoAttachEvent=\"onmouseenter:_buttonMouse,onmouseleave:_buttonMouse\"\n\t\t><div class=\"dijitReset dijitInline dijitArrowButtonInner\" wairole=\"presentation\" role=\"presentation\">&nbsp;</div\n\t\t><div class=\"dijitArrowButtonChar\">&#9660;</div></div\n></div>\n"),
-
-		// baseClass: [protected] String
-		//		The root className to use for the various states of this widget
-		baseClass: "dijitTimePicker",
-
-		// clickableIncrement: String
-		//		ISO-8601 string representing the amount by which
-		//		every clickable element in the time picker increases.
-		//		Set in local time, without a time zone.
-		//		Example: `T00:15:00` creates 15 minute increments
-		//		Must divide dijit._TimePicker.visibleIncrement evenly
-		clickableIncrement: "T00:15:00",
-
-		// visibleIncrement: String
-		//		ISO-8601 string representing the amount by which
-		//		every element with a visible time in the time picker increases.
-		//		Set in local time, without a time zone.
-		//		Example: `T01:00:00` creates text in every 1 hour increment
-		visibleIncrement: "T01:00:00",
-
-		// visibleRange: String
-		//		ISO-8601 string representing the range of this TimePicker.
-		//		The TimePicker will only display times in this range.
-		//		Example: `T05:00:00` displays 5 hours of options
-		visibleRange: "T05:00:00",
-
-		// value: String
-		//		Date to display.
-		//		Defaults to current time and date.
-		//		Can be a Date object or an ISO-8601 string.
-		//		If you specify the GMT time zone (`-01:00`),
-		//		the time will be converted to the local time in the local time zone.
-		//		Otherwise, the time is considered to be in the local time zone.
-		//		If you specify the date and isDate is true, the date is used.
-		//		Example: if your local time zone is `GMT -05:00`,
-		//		`T10:00:00` becomes `T10:00:00-05:00` (considered to be local time),
-		//		`T10:00:00-01:00` becomes `T06:00:00-05:00` (4 hour difference),
-		//		`T10:00:00Z` becomes `T05:00:00-05:00` (5 hour difference between Zulu and local time)
-		//		`yyyy-mm-ddThh:mm:ss` is the format to set the date and time
-		//		Example: `2007-06-01T09:00:00`
-		value: new Date(),
-
-		_visibleIncrement:2,
-		_clickableIncrement:1,
-		_totalIncrements:10,
-
-		// constraints: dijit._TimePicker.__Constraints
-		//		Specifies valid range of times (start time, end time)
-		constraints:{},
-
-/*=====
-		serialize: function(val, options){
-			// summary:
-			//		User overridable function used to convert the attr('value') result to a String
-			// val: Date
-			//		The current value
-			// options: Object?
-			// tags:
-			//		protected
-		},
-=====*/
-		serialize: dojo.date.stamp.toISOString,
-
-		// _filterString: string
-		//		The string to filter by
-		_filterString: "",
-
-		setValue: function(/*Date*/ value){
-			// summary:
-			//		Deprecated.  Used attr('value') instead.
-			// tags:
-			//		deprecated
-			dojo.deprecated("dijit._TimePicker:setValue() is deprecated.  Use attr('value') instead.", "", "2.0");
-			this.attr('value', value);
-		},
-		_setValueAttr: function(/*Date*/ date){
-			// summary:
-			//		Hook so attr('value', ...) works.
-			// description:
-			//		Set the value of the TimePicker.
-			//		Redraws the TimePicker around the new date.
-			// tags:
-			//		protected
-			this.value = date;
-			this._showText();
-		},
-
-		onOpen: function(best){
-			// summary:
-			//		This is called by the popup manager when a TimeTextBox is displayed on the screen
-			// best:
-			//		Whether it is being displayed above or below the `dijit.form.TimeTextBox`
-			// tags:
-			//		protected
-			if(this._beenOpened && this.domNode.parentNode){
-				// We've been opened before - so set our filter to to the
-				// currently-displayed value (or empty string if it's already
-				// valid)
-				var p = dijit.byId(this.domNode.parentNode.dijitPopupParent);
-				if(p){
-					var val = p.attr('displayedValue');
-					if(val && !p.parse(val, p.constraints)){
-						this._filterString = val;
-					}else{
-						this._filterString = "";
-					}
-					this._showText();
-				}
-			}
-			this._beenOpened = true;
-		},
-
-		isDisabledDate: function(/*Date*/ dateObject, /*String?*/ locale){
-			// summary:
-			//		May be overridden to disable certain dates in the TimePicker e.g. `isDisabledDate=dojo.date.locale.isWeekend`
-			// type:
-			//		extension
-			return false; // Boolean
-		},
-
-		_getFilteredNodes: function(/*number*/ start, /*number*/ maxNum, /*Boolean*/ before){
-			// summary:
-			//		Returns an array of nodes with the filter applied.  At most maxNum nodes
-			//		will be returned - but fewer may be returned as well.  If the
-			//		before parameter is set to true, then it will return the elements
-			//		before the given index
-			// tags:
-			//		private
-			var nodes = [], n, i = start, max = this._maxIncrement + Math.abs(i),
-				chk = before?-1:1, dec = before?1:0, inc = before?0:1;
-			do{
-				i = i - dec;
-				n = this._createOption(i);
-				if(n){nodes.push(n);}
-				i = i + inc;
-			}while(nodes.length < maxNum && (i*chk) < max);
-			if(before){ nodes.reverse(); }
-			return nodes;
-		},
-
-		_showText: function(){
-			// summary:
-			//		Displays the relevant choices in the drop down list
-			// tags:
-			//		private
-			this.timeMenu.innerHTML = "";
-			var fromIso = dojo.date.stamp.fromISOString;
-			this._clickableIncrementDate=fromIso(this.clickableIncrement);
-			this._visibleIncrementDate=fromIso(this.visibleIncrement);
-			this._visibleRangeDate=fromIso(this.visibleRange);
-			// get the value of the increments and the range in seconds (since 00:00:00) to find out how many divs to create
-			var sinceMidnight = function(/*Date*/ date){
-				return date.getHours() * 60 * 60 + date.getMinutes() * 60 + date.getSeconds();
-			};
-
-			var clickableIncrementSeconds = sinceMidnight(this._clickableIncrementDate);
-			var visibleIncrementSeconds = sinceMidnight(this._visibleIncrementDate);
-			var visibleRangeSeconds = sinceMidnight(this._visibleRangeDate);
-
-			// round reference date to previous visible increment
-			var time = this.value.getTime();
-			this._refDate = new Date(time - time % (visibleIncrementSeconds*1000));
-			this._refDate.setFullYear(1970,0,1); // match parse defaults
-
-			// assume clickable increment is the smallest unit
-			this._clickableIncrement = 1;
-			// divide the visible range by the clickable increment to get the number of divs to create
-			// example: 10:00:00/00:15:00 -> display 40 divs
-			this._totalIncrements = visibleRangeSeconds / clickableIncrementSeconds;
-			// divide the visible increments by the clickable increments to get how often to display the time inline
-			// example: 01:00:00/00:15:00 -> display the time every 4 divs
-			this._visibleIncrement = visibleIncrementSeconds / clickableIncrementSeconds;
-			// divide the number of seconds in a day by the clickable increment in seconds to get the
-			// absolute max number of increments.
-			this._maxIncrement = (60 * 60 * 24) / clickableIncrementSeconds;
-
-			// find the nodes we should display based on our filter
-			var before = this._getFilteredNodes(0, this._totalIncrements >> 1, true);
-			var after = this._getFilteredNodes(0, this._totalIncrements >> 1, false);
-			if(before.length < this._totalIncrements >> 1){
-				before = before.slice(before.length / 2);
-				after = after.slice(0, after.length / 2);
-			}
-			dojo.forEach(before.concat(after), function(n){this.timeMenu.appendChild(n);}, this);
-
-			// TODO:
-			// I commented this out because it
-			// causes problems for a TimeTextBox in a Dialog, or as the editor of an InlineEditBox,
-			// because the timeMenu node isn't visible yet. -- Bill (Bug #????)
-			// dijit.focus(this.timeMenu);
-		},
-
-		postCreate: function(){
-			// instantiate constraints
-			if(this.constraints === dijit._TimePicker.prototype.constraints){
-				this.constraints={};
-			}
-
-			// brings in visibleRange, increments, etc.
-			dojo.mixin(this, this.constraints);
-
-			// dojo.date.locale needs the lang in the constraints as locale
-			if(!this.constraints.locale){
-				this.constraints.locale=this.lang;
-			}
-
-			// assign typematic mouse listeners to the arrow buttons
-			this.connect(this.timeMenu, dojo.isIE ? "onmousewheel" : 'DOMMouseScroll', "_mouseWheeled");
-			var _this = this;
-			var typematic = function(){
-				_this._connects.push(
-					dijit.typematic.addMouseListener.apply(null, arguments)
-				);
-			};
-			typematic(this.upArrow,this,this._onArrowUp, 1.0, 50);
-			typematic(this.downArrow,this,this._onArrowDown, 1.0, 50);
-
-			// Connect some callback functions to the hover event of the arrows
-			var triggerFx = function(cb){
-				return function(cnt){
-					// don't run on the first firing
-					if(cnt > 0){cb.call(this, arguments);}
-				};
-			};
-			var hoverFx = function(node, cb){
-				return function(e){
-					dojo.stopEvent(e);
-					dijit.typematic.trigger(e, this, node, triggerFx(cb), node, 1.0, 50);
-				};
-			};
-			this.connect(this.upArrow, "onmouseover", hoverFx(this.upArrow, this._onArrowUp));
-			this.connect(this.downArrow, "onmouseover", hoverFx(this.downArrow, this._onArrowDown));
-
-			this.inherited(arguments);
-		},
-
-		_buttonMouse: function(/*Event*/ e){
-			// summary:
-			//		Handler for mouse button presses
-			// tags:
-			//		private
-			dojo.toggleClass(e.currentTarget, "dijitButtonNodeHover", e.type == "mouseover");
-		},
-
-		_createOption: function(/*Number*/ index){
-			// summary:
-			//		Creates a clickable time option
-			// tags:
-			//		private
-			var date = new Date(this._refDate);
-			var incrementDate = this._clickableIncrementDate;
-			date.setHours(date.getHours() + incrementDate.getHours() * index,
-				date.getMinutes() + incrementDate.getMinutes() * index,
-				date.getSeconds() + incrementDate.getSeconds() * index);
-			if(this.constraints.selector == "time"){
-				date.setFullYear(1970,0,1); // make sure each time is for the same date
-			}
-			var dateString = dojo.date.locale.format(date, this.constraints);
-			if(this._filterString && dateString.toLowerCase().indexOf(this._filterString) !== 0){
-				// Doesn't match the filter - return null
-				return null;
-			}
-
-			var div = dojo.create("div", {"class": this.baseClass+"Item"});
-			div.date = date;
-			div.index = index;
-			dojo.create('div',{
-				"class": this.baseClass + "ItemInner",
-				innerHTML: dateString
-			}, div);
-
-			if(index%this._visibleIncrement<1 && index%this._visibleIncrement>-1){
-				dojo.addClass(div, this.baseClass+"Marker");
-			}else if(!(index%this._clickableIncrement)){
-				dojo.addClass(div, this.baseClass+"Tick");
-			}
-
-			if(this.isDisabledDate(date)){
-				// set disabled
-				dojo.addClass(div, this.baseClass+"ItemDisabled");
-			}
-			if(!dojo.date.compare(this.value, date, this.constraints.selector)){
-				div.selected = true;
-				dojo.addClass(div, this.baseClass+"ItemSelected");
-				if(dojo.hasClass(div, this.baseClass+"Marker")){
-					dojo.addClass(div, this.baseClass+"MarkerSelected");
-				}else{
-					dojo.addClass(div, this.baseClass+"TickSelected");
-				}
-			}
-			return div;
-		},
-
-		_onOptionSelected: function(/*Object*/ tgt){
-			// summary:
-			//		Called when user clicks an option in the drop down list
-			// tags:
-			//		private
-			var tdate = tgt.target.date || tgt.target.parentNode.date;
-			if(!tdate || this.isDisabledDate(tdate)){ return; }
-			this._highlighted_option = null;
-			this.attr('value', tdate);
-			this.onValueSelected(tdate);
-		},
-
-		onValueSelected: function(/*Date*/ time){
-			// summary:
-			//		Notification that a time was selected.  It may be the same as the previous value.
-			// description:
-			//      Used by `dijit.form._DateTimeTextBox` (and thus `dijit.form.TimeTextBox`)
-			//      to get notification when the user has clicked a time.
-			// tags:
-			//      protected
-		},
-
-
-		_highlightOption: function(/*node*/ node, /*Boolean*/ highlight){
-			// summary:
-			//		Turns on/off hover effect on a node based on mouse out/over event
-			// tags:
-			//		private
-			if(!node){return;}
-			if(highlight){
-				if(this._highlighted_option){
-					this._highlightOption(this._highlighted_option, false);
-				}
-				this._highlighted_option = node;
-			}else if(this._highlighted_option !== node){
-				return;
-			}else{
-				this._highlighted_option = null;
-			}
-			dojo.toggleClass(node, this.baseClass+"ItemHover", highlight);
-			if(dojo.hasClass(node, this.baseClass+"Marker")){
-				dojo.toggleClass(node, this.baseClass+"MarkerHover", highlight);
-			}else{
-				dojo.toggleClass(node, this.baseClass+"TickHover", highlight);
-			}
-		},
-
-		onmouseover: function(/*Event*/ e){
-			// summary:
-			//		Handler for onmouseover event
-			// tags:
-			//		private
-			this._keyboardSelected = null;
-			var tgr = (e.target.parentNode === this.timeMenu) ? e.target : e.target.parentNode;
-			// if we aren't targeting an item, then we return
-			if(!dojo.hasClass(tgr, this.baseClass+"Item")){return;}
-			this._highlightOption(tgr, true);
-		},
-
-		onmouseout: function(/*Event*/ e){
-			// summary:
-			//		Handler for onmouseout event
-			// tags:
-			//		private
-			this._keyboardSelected = null;
-			var tgr = (e.target.parentNode === this.timeMenu) ? e.target : e.target.parentNode;
-			this._highlightOption(tgr, false);
-		},
-
-		_mouseWheeled: function(/*Event*/ e){
-			// summary:
-			//		Handle the mouse wheel events
-			// tags:
-			//		private
-			this._keyboardSelected = null;
-			dojo.stopEvent(e);
-			// we're not _measuring_ the scroll amount, just direction
-			var scrollAmount = (dojo.isIE ? e.wheelDelta : -e.detail);
-			this[(scrollAmount>0 ? "_onArrowUp" : "_onArrowDown")](); // yes, we're making a new dom node every time you mousewheel, or click
-		},
-
-		_onArrowUp: function(count){
-			// summary:
-			//		Handler for up arrow key.
-			// description:
-			//		Removes the bottom time and add one to the top
-			// tags:
-			//		private
-			if(typeof count == "number" && count == -1){ return; } // typematic end
-			if(!this.timeMenu.childNodes.length){ return; }
-			var index = this.timeMenu.childNodes[0].index;
-			var divs = this._getFilteredNodes(index, 1, true);
-			if(divs.length){
-				this.timeMenu.removeChild(this.timeMenu.childNodes[this.timeMenu.childNodes.length - 1]);
-				this.timeMenu.insertBefore(divs[0], this.timeMenu.childNodes[0]);
-			}
-		},
-
-		_onArrowDown: function(count){
-			// summary:
-			//		Handler for up arrow key.
-			// description:
-			//		Remove the top time and add one to the bottom
-			// tags:
-			//		private
-			if(typeof count == "number" && count == -1){ return; } // typematic end
-			if(!this.timeMenu.childNodes.length){ return; }
-			var index = this.timeMenu.childNodes[this.timeMenu.childNodes.length - 1].index + 1;
-			var divs = this._getFilteredNodes(index, 1, false);
-			if(divs.length){
-				this.timeMenu.removeChild(this.timeMenu.childNodes[0]);
-				this.timeMenu.appendChild(divs[0]);
-			}
-		},
-
-		handleKey: function(/*Event*/ e){
-			// summary:
-			//		Called from `dijit.form._DateTimeTextBox` to pass a keypress event
-			//		from the `dijit.form.TimeTextBox` to be handled in this widget
-			// tags:
-			//		protected
-			var dk = dojo.keys;
-			if(e.keyChar || e.charOrCode === dk.BACKSPACE || e.charOrCode == dk.DELETE){
-				// Set a timeout to kick off our filter
-				setTimeout(dojo.hitch(this, function(){
-					this._filterString = e.target.value.toLowerCase();
-					this._showText();
-				}),1);
-			}else if(e.charOrCode == dk.DOWN_ARROW || e.charOrCode == dk.UP_ARROW){
-				dojo.stopEvent(e);
-				// Figure out which option to highlight now and then highlight it
-				if(this._highlighted_option && !this._highlighted_option.parentNode){
-					this._highlighted_option = null;
-				}
-				var timeMenu = this.timeMenu,
-					tgt = this._highlighted_option || dojo.query("." + this.baseClass + "ItemSelected", timeMenu)[0];
-				if(!tgt){
-					tgt = timeMenu.childNodes[0];
-				}else if(timeMenu.childNodes.length){
-					if(e.charOrCode == dk.DOWN_ARROW && !tgt.nextSibling){
-						this._onArrowDown();
-					}else if(e.charOrCode == dk.UP_ARROW && !tgt.previousSibling){
-						this._onArrowUp();
-					}
-					if(e.charOrCode == dk.DOWN_ARROW){
-						tgt = tgt.nextSibling;
-					}else{
-						tgt = tgt.previousSibling;
-					}
-				}
-				this._highlightOption(tgt, true);
-				this._keyboardSelected = tgt;
-			}else if(this._highlighted_option && (e.charOrCode == dk.ENTER || e.charOrCode === dk.TAB)){
-				// Accept the currently-highlighted option as the value
-				if(!this._keyboardSelected && e.charOrCode === dk.TAB){ return; } // mouse hover followed by TAB is NO selection
-				if(e.charOrCode == dk.ENTER){dojo.stopEvent(e);}
-				this._onOptionSelected({target: this._highlighted_option});
-			}
-		}
-	}
-);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_Widget.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_Widget.js
deleted file mode 100644
index 65248bf..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_Widget.js
+++ /dev/null
@@ -1,1142 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._Widget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._Widget"] = true;
-dojo.provide("dijit._Widget");
-
-dojo.require( "dijit._base" );
-
-
-// This code is to assist deferring dojo.connect() calls in widgets (connecting to events on the widgets'
-// DOM nodes) until someone actually needs to monitor that event.
-dojo.connect(dojo, "_connect",
-	function(/*dijit._Widget*/ widget, /*String*/ event){
-		if(widget && dojo.isFunction(widget._onConnect)){
-			widget._onConnect(event);
-		}
-	});
-
-dijit._connectOnUseEventHandler = function(/*Event*/ event){};
-
-// Keep track of where the last keydown event was, to help avoid generating
-// spurious ondijitclick events when:
-// 1. focus is on a <button> or <a>
-// 2. user presses then releases the ENTER key
-// 3. onclick handler fires and shifts focus to another node, with an ondijitclick handler
-// 4. onkeyup event fires, causing the ondijitclick handler to fire
-dijit._lastKeyDownNode = null;
-if(dojo.isIE){
-	(function(){
-		var keydownCallback = function(evt){
-			dijit._lastKeyDownNode = evt.srcElement;
-		};
-		dojo.doc.attachEvent('onkeydown', keydownCallback);
-		dojo.addOnWindowUnload(function(){
-			dojo.doc.detachEvent('onkeydown', keydownCallback);
-		});
-	})();
-}else{
-	dojo.doc.addEventListener('keydown', function(evt){
-		dijit._lastKeyDownNode = evt.target;
-	}, true);
-}
-
-(function(){
-
-var _attrReg = {},	// cached results from getSetterAttributes
-	getSetterAttributes = function(widget){
-		// summary:
-		//		Returns list of attributes with custom setters for specified widget
-		var dc = widget.declaredClass;
-		if(!_attrReg[dc]){
-			var r = [],
-				attrs,
-				proto = widget.constructor.prototype;
-			for(var fxName in proto){
-				if(dojo.isFunction(proto[fxName]) && (attrs = fxName.match(/^_set([a-zA-Z]*)Attr$/)) && attrs[1]){
-					r.push(attrs[1].charAt(0).toLowerCase() + attrs[1].substr(1));
-				}
-			}
-			_attrReg[dc] = r;
-		}
-		return _attrReg[dc] || [];	// String[]
-	};
-
-dojo.declare("dijit._Widget", null, {
-	// summary:
-	//		Base class for all Dijit widgets.
-
-	// id: [const] String
-	//		A unique, opaque ID string that can be assigned by users or by the
-	//		system. If the developer passes an ID which is known not to be
-	//		unique, the specified ID is ignored and the system-generated ID is
-	//		used instead.
-	id: "",
-
-	// lang: [const] String
-	//		Rarely used.  Overrides the default Dojo locale used to render this widget,
-	//		as defined by the [HTML LANG](http://www.w3.org/TR/html401/struct/dirlang.html#adef-lang) attribute.
-	//		Value must be among the list of locales specified during by the Dojo bootstrap,
-	//		formatted according to [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt) (like en-us).
-	lang: "",
-
-	// dir: [const] String
-	//		Unsupported by Dijit, but here for completeness.  Dijit only supports setting text direction on the
-	//		entire document.
-	//		Bi-directional support, as defined by the [HTML DIR](http://www.w3.org/TR/html401/struct/dirlang.html#adef-dir)
-	//		attribute. Either left-to-right "ltr" or right-to-left "rtl".
-	dir: "",
-
-	// class: String
-	//		HTML class attribute
-	"class": "",
-
-	// style: String||Object
-	//		HTML style attributes as cssText string or name/value hash
-	style: "",
-
-	// title: String
-	//		HTML title attribute.
-	//
-	//		For form widgets this specifies a tooltip to display when hovering over
-	//		the widget (just like the native HTML title attribute).
-	//
-	//		For TitlePane or for when this widget is a child of a TabContainer, AccordionContainer,
-	//		etc., it's used to specify the tab label, accordion pane title, etc.
-	title: "",
-
-	// tooltip: String
-	//		When this widget's title attribute is used to for a tab label, accordion pane title, etc.,
-	//		this specifies the tooltip to appear when the mouse is hovered over that text.
-	tooltip: "",
-
-	// srcNodeRef: [readonly] DomNode
-	//		pointer to original DOM node
-	srcNodeRef: null,
-
-	// domNode: [readonly] DomNode
-	//		This is our visible representation of the widget! Other DOM
-	//		Nodes may by assigned to other properties, usually through the
-	//		template system's dojoAttachPoint syntax, but the domNode
-	//		property is the canonical "top level" node in widget UI.
-	domNode: null,
-
-	// containerNode: [readonly] DomNode
-	//		Designates where children of the source DOM node will be placed.
-	//		"Children" in this case refers to both DOM nodes and widgets.
-	//		For example, for myWidget:
-	//
-	//		|	<div dojoType=myWidget>
-	//		|		<b> here's a plain DOM node
-	//		|		<span dojoType=subWidget>and a widget</span>
-	//		|		<i> and another plain DOM node </i>
-	//		|	</div>
-	//
-	//		containerNode would point to:
-	//
-	//		|		<b> here's a plain DOM node
-	//		|		<span dojoType=subWidget>and a widget</span>
-	//		|		<i> and another plain DOM node </i>
-	//
-	//		In templated widgets, "containerNode" is set via a
-	//		dojoAttachPoint assignment.
-	//
-	//		containerNode must be defined for any widget that accepts innerHTML
-	//		(like ContentPane or BorderContainer or even Button), and conversely
-	//		is null for widgets that don't, like TextBox.
-	containerNode: null,
-
-/*=====
-	// _started: Boolean
-	//		startup() has completed.
-	_started: false,
-=====*/
-
-	// attributeMap: [protected] Object
-	//		attributeMap sets up a "binding" between attributes (aka properties)
-	//		of the widget and the widget's DOM.
-	//		Changes to widget attributes listed in attributeMap will be
-	//		reflected into the DOM.
-	//
-	//		For example, calling attr('title', 'hello')
-	//		on a TitlePane will automatically cause the TitlePane's DOM to update
-	//		with the new title.
-	//
-	//		attributeMap is a hash where the key is an attribute of the widget,
-	//		and the value reflects a binding to a:
-	//
-	//		- DOM node attribute
-	// |		focus: {node: "focusNode", type: "attribute"}
-	// 		Maps this.focus to this.focusNode.focus
-	//
-	//		- DOM node innerHTML
-	//	|		title: { node: "titleNode", type: "innerHTML" }
-	//		Maps this.title to this.titleNode.innerHTML
-	//
-	//		- DOM node innerText
-	//	|		title: { node: "titleNode", type: "innerText" }
-	//		Maps this.title to this.titleNode.innerText
-	//
-	//		- DOM node CSS class
-	// |		myClass: { node: "domNode", type: "class" }
-	//		Maps this.myClass to this.domNode.className
-	//
-	//		If the value is an array, then each element in the array matches one of the
-	//		formats of the above list.
-	//
-	//		There are also some shorthands for backwards compatibility:
-	//		- string --> { node: string, type: "attribute" }, for example:
-	//	|	"focusNode" ---> { node: "focusNode", type: "attribute" }
-	//		- "" --> { node: "domNode", type: "attribute" }
-	attributeMap: {id:"", dir:"", lang:"", "class":"", style:"", title:""},
-
-	// _deferredConnects: [protected] Object
-	//		attributeMap addendum for event handlers that should be connected only on first use
-	_deferredConnects: {
-		onClick: "",
-		onDblClick: "",
-		onKeyDown: "",
-		onKeyPress: "",
-		onKeyUp: "",
-		onMouseMove: "",
-		onMouseDown: "",
-		onMouseOut: "",
-		onMouseOver: "",
-		onMouseLeave: "",
-		onMouseEnter: "",
-		onMouseUp: ""
-	},
-
-	onClick: dijit._connectOnUseEventHandler,
-	/*=====
-	onClick: function(event){
-		// summary:
-		//		Connect to this function to receive notifications of mouse click events.
-		// event:
-		//		mouse Event
-		// tags:
-		//		callback
-	},
-	=====*/
-	onDblClick: dijit._connectOnUseEventHandler,
-	/*=====
-	onDblClick: function(event){
-		// summary:
-		//		Connect to this function to receive notifications of mouse double click events.
-		// event:
-		//		mouse Event
-		// tags:
-		//		callback
-	},
-	=====*/
-	onKeyDown: dijit._connectOnUseEventHandler,
-	/*=====
-	onKeyDown: function(event){
-		// summary:
-		//		Connect to this function to receive notifications of keys being pressed down.
-		// event:
-		//		key Event
-		// tags:
-		//		callback
-	},
-	=====*/
-	onKeyPress: dijit._connectOnUseEventHandler,
-	/*=====
-	onKeyPress: function(event){
-		// summary:
-		//		Connect to this function to receive notifications of printable keys being typed.
-		// event:
-		//		key Event
-		// tags:
-		//		callback
-	},
-	=====*/
-	onKeyUp: dijit._connectOnUseEventHandler,
-	/*=====
-	onKeyUp: function(event){
-		// summary:
-		//		Connect to this function to receive notifications of keys being released.
-		// event:
-		//		key Event
-		// tags:
-		//		callback
-	},
-	=====*/
-	onMouseDown: dijit._connectOnUseEventHandler,
-	/*=====
-	onMouseDown: function(event){
-		// summary:
-		//		Connect to this function to receive notifications of when the mouse button is pressed down.
-		// event:
-		//		mouse Event
-		// tags:
-		//		callback
-	},
-	=====*/
-	onMouseMove: dijit._connectOnUseEventHandler,
-	/*=====
-	onMouseMove: function(event){
-		// summary:
-		//		Connect to this function to receive notifications of when the mouse moves over nodes contained within this widget.
-		// event:
-		//		mouse Event
-		// tags:
-		//		callback
-	},
-	=====*/
-	onMouseOut: dijit._connectOnUseEventHandler,
-	/*=====
-	onMouseOut: function(event){
-		// summary:
-		//		Connect to this function to receive notifications of when the mouse moves off of nodes contained within this widget.
-		// event:
-		//		mouse Event
-		// tags:
-		//		callback
-	},
-	=====*/
-	onMouseOver: dijit._connectOnUseEventHandler,
-	/*=====
-	onMouseOver: function(event){
-		// summary:
-		//		Connect to this function to receive notifications of when the mouse moves onto nodes contained within this widget.
-		// event:
-		//		mouse Event
-		// tags:
-		//		callback
-	},
-	=====*/
-	onMouseLeave: dijit._connectOnUseEventHandler,
-	/*=====
-	onMouseLeave: function(event){
-		// summary:
-		//		Connect to this function to receive notifications of when the mouse moves off of this widget.
-		// event:
-		//		mouse Event
-		// tags:
-		//		callback
-	},
-	=====*/
-	onMouseEnter: dijit._connectOnUseEventHandler,
-	/*=====
-	onMouseEnter: function(event){
-		// summary:
-		//		Connect to this function to receive notifications of when the mouse moves onto this widget.
-		// event:
-		//		mouse Event
-		// tags:
-		//		callback
-	},
-	=====*/
-	onMouseUp: dijit._connectOnUseEventHandler,
-	/*=====
-	onMouseUp: function(event){
-		// summary:
-		//		Connect to this function to receive notifications of when the mouse button is released.
-		// event:
-		//		mouse Event
-		// tags:
-		//		callback
-	},
-	=====*/
-
-	// Constants used in templates
-
-	// _blankGif: [protected] String
-	//		Path to a blank 1x1 image.
-	//		Used by <img> nodes in templates that really get their image via CSS background-image.
-	_blankGif: (dojo.config.blankGif || dojo.moduleUrl("dojo", "resources/blank.gif")).toString(),
-
-	//////////// INITIALIZATION METHODS ///////////////////////////////////////
-
-	postscript: function(/*Object?*/params, /*DomNode|String*/srcNodeRef){
-		// summary:
-		//		Kicks off widget instantiation.  See create() for details.
-		// tags:
-		//		private
-		this.create(params, srcNodeRef);
-	},
-
-	create: function(/*Object?*/params, /*DomNode|String?*/srcNodeRef){
-		// summary:
-		//		Kick off the life-cycle of a widget
-		// params:
-		//		Hash of initialization parameters for widget, including
-		//		scalar values (like title, duration etc.) and functions,
-		//		typically callbacks like onClick.
-		// srcNodeRef:
-		//		If a srcNodeRef (DOM node) is specified:
-		//			- use srcNodeRef.innerHTML as my contents
-		//			- if this is a behavioral widget then apply behavior
-		//			  to that srcNodeRef
-		//			- otherwise, replace srcNodeRef with my generated DOM
-		//			  tree
-		// description:
-		//		Create calls a number of widget methods (postMixInProperties, buildRendering, postCreate,
-		//		etc.), some of which of you'll want to override. See http://docs.dojocampus.org/dijit/_Widget
-		//		for a discussion of the widget creation lifecycle.
-		//
-		//		Of course, adventurous developers could override create entirely, but this should
-		//		only be done as a last resort.
-		// tags:
-		//		private
-
-		// store pointer to original DOM tree
-		this.srcNodeRef = dojo.byId(srcNodeRef);
-
-		// For garbage collection.  An array of handles returned by Widget.connect()
-		// Each handle returned from Widget.connect() is an array of handles from dojo.connect()
-		this._connects = [];
-
-		// For garbage collection.  An array of handles returned by Widget.subscribe()
-		// The handle returned from Widget.subscribe() is the handle returned from dojo.subscribe()
-		this._subscribes = [];
-
-		// To avoid double-connects, remove entries from _deferredConnects
-		// that have been setup manually by a subclass (ex, by dojoAttachEvent).
-		// If a subclass has redefined a callback (ex: onClick) then assume it's being
-		// connected to manually.
-		this._deferredConnects = dojo.clone(this._deferredConnects);
-		for(var attr in this.attributeMap){
-			delete this._deferredConnects[attr]; // can't be in both attributeMap and _deferredConnects
-		}
-		for(attr in this._deferredConnects){
-			if(this[attr] !== dijit._connectOnUseEventHandler){
-				delete this._deferredConnects[attr];	// redefined, probably dojoAttachEvent exists
-			}
-		}
-
-		//mixin our passed parameters
-		if(this.srcNodeRef && (typeof this.srcNodeRef.id == "string")){ this.id = this.srcNodeRef.id; }
-		if(params){
-			this.params = params;
-			dojo.mixin(this,params);
-		}
-		this.postMixInProperties();
-
-		// generate an id for the widget if one wasn't specified
-		// (be sure to do this before buildRendering() because that function might
-		// expect the id to be there.)
-		if(!this.id){
-			this.id = dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
-		}
-		dijit.registry.add(this);
-
-		this.buildRendering();
-
-		if(this.domNode){
-			// Copy attributes listed in attributeMap into the [newly created] DOM for the widget.
-			this._applyAttributes();
-
-			var source = this.srcNodeRef;
-			if(source && source.parentNode){
-				source.parentNode.replaceChild(this.domNode, source);
-			}
-
-			// If the developer has specified a handler as a widget parameter
-			// (ex: new Button({onClick: ...})
-			// then naturally need to connect from DOM node to that handler immediately,
-			for(attr in this.params){
-				this._onConnect(attr);
-			}
-		}
-
-		if(this.domNode){
-			this.domNode.setAttribute("widgetId", this.id);
-		}
-		this.postCreate();
-
-		// If srcNodeRef has been processed and removed from the DOM (e.g. TemplatedWidget) then delete it to allow GC.
-		if(this.srcNodeRef && !this.srcNodeRef.parentNode){
-			delete this.srcNodeRef;
-		}
-
-		this._created = true;
-	},
-
-	_applyAttributes: function(){
-		// summary:
-		//		Step during widget creation to copy all widget attributes to the
-		//		DOM as per attributeMap and _setXXXAttr functions.
-		// description:
-		//		Skips over blank/false attribute values, unless they were explicitly specified
-		//		as parameters to the widget, since those are the default anyway,
-		//		and setting tabIndex="" is different than not setting tabIndex at all.
-		//
-		//		It processes the attributes in the attribute map first, and then
-		//		it goes through and processes the attributes for the _setXXXAttr
-		//		functions that have been specified
-		// tags:
-		//		private
-		var condAttrApply = function(attr, scope){
-			if((scope.params && attr in scope.params) || scope[attr]){
-				scope.attr(attr, scope[attr]);
-			}
-		};
-
-		// Do the attributes in attributeMap
-		for(var attr in this.attributeMap){
-			condAttrApply(attr, this);
-		}
-
-		// And also any attributes with custom setters
-		dojo.forEach(getSetterAttributes(this), function(a){
-			if(!(a in this.attributeMap)){
-				condAttrApply(a, this);
-			}
-		}, this);
-	},
-
-	postMixInProperties: function(){
-		// summary:
-		//		Called after the parameters to the widget have been read-in,
-		//		but before the widget template is instantiated. Especially
-		//		useful to set properties that are referenced in the widget
-		//		template.
-		// tags:
-		//		protected
-	},
-
-	buildRendering: function(){
-		// summary:
-		//		Construct the UI for this widget, setting this.domNode
-		// description:
-		//		Most widgets will mixin `dijit._Templated`, which implements this
-		//		method.
-		// tags:
-		//		protected
-		this.domNode = this.srcNodeRef || dojo.create('div');
-	},
-
-	postCreate: function(){
-		// summary:
-		//		Processing after the DOM fragment is created
-		// description:
-		//		Called after the DOM fragment has been created, but not necessarily
-		//		added to the document.  Do not include any operations which rely on
-		//		node dimensions or placement.
-		// tags:
-		//		protected
-	},
-
-	startup: function(){
-		// summary:
-		//		Processing after the DOM fragment is added to the document
-		// description:
-		//		Called after a widget and its children have been created and added to the page,
-		//		and all related widgets have finished their create() cycle, up through postCreate().
-		//		This is useful for composite widgets that need to control or layout sub-widgets.
-		//		Many layout widgets can use this as a wiring phase.
-		this._started = true;
-	},
-
-	//////////// DESTROY FUNCTIONS ////////////////////////////////
-
-	destroyRecursive: function(/*Boolean?*/ preserveDom){
-		// summary:
-		// 		Destroy this widget and its descendants
-		// description:
-		//		This is the generic "destructor" function that all widget users
-		// 		should call to cleanly discard with a widget. Once a widget is
-		// 		destroyed, it is removed from the manager object.
-		// preserveDom:
-		//		If true, this method will leave the original DOM structure
-		//		alone of descendant Widgets. Note: This will NOT work with
-		//		dijit._Templated widgets.
-
-		this._beingDestroyed = true;
-		this.destroyDescendants(preserveDom);
-		this.destroy(preserveDom);
-	},
-
-	destroy: function(/*Boolean*/ preserveDom){
-		// summary:
-		// 		Destroy this widget, but not its descendants.
-		//		This method will, however, destroy internal widgets such as those used within a template.
-		// preserveDom: Boolean
-		//		If true, this method will leave the original DOM structure alone.
-		//		Note: This will not yet work with _Templated widgets
-
-		this._beingDestroyed = true;
-		this.uninitialize();
-		var d = dojo,
-			dfe = d.forEach,
-			dun = d.unsubscribe;
-		dfe(this._connects, function(array){
-			dfe(array, d.disconnect);
-		});
-		dfe(this._subscribes, function(handle){
-			dun(handle);
-		});
-
-		// destroy widgets created as part of template, etc.
-		dfe(this._supportingWidgets || [], function(w){
-			if(w.destroyRecursive){
-				w.destroyRecursive();
-			}else if(w.destroy){
-				w.destroy();
-			}
-		});
-
-		this.destroyRendering(preserveDom);
-		dijit.registry.remove(this.id);
-		this._destroyed = true;
-	},
-
-	destroyRendering: function(/*Boolean?*/ preserveDom){
-		// summary:
-		//		Destroys the DOM nodes associated with this widget
-		// preserveDom:
-		//		If true, this method will leave the original DOM structure alone
-		//		during tear-down. Note: this will not work with _Templated
-		//		widgets yet.
-		// tags:
-		//		protected
-
-		if(this.bgIframe){
-			this.bgIframe.destroy(preserveDom);
-			delete this.bgIframe;
-		}
-
-		if(this.domNode){
-			if(preserveDom){
-				dojo.removeAttr(this.domNode, "widgetId");
-			}else{
-				dojo.destroy(this.domNode);
-			}
-			delete this.domNode;
-		}
-
-		if(this.srcNodeRef){
-			if(!preserveDom){
-				dojo.destroy(this.srcNodeRef);
-			}
-			delete this.srcNodeRef;
-		}
-	},
-
-	destroyDescendants: function(/*Boolean?*/ preserveDom){
-		// summary:
-		//		Recursively destroy the children of this widget and their
-		//		descendants.
-		// preserveDom:
-		//		If true, the preserveDom attribute is passed to all descendant
-		//		widget's .destroy() method. Not for use with _Templated
-		//		widgets.
-
-		// get all direct descendants and destroy them recursively
-		dojo.forEach(this.getChildren(), function(widget){
-			if(widget.destroyRecursive){
-				widget.destroyRecursive(preserveDom);
-			}
-		});
-	},
-
-
-	uninitialize: function(){
-		// summary:
-		//		Stub function. Override to implement custom widget tear-down
-		//		behavior.
-		// tags:
-		//		protected
-		return false;
-	},
-
-	////////////////// MISCELLANEOUS METHODS ///////////////////
-
-	onFocus: function(){
-		// summary:
-		//		Called when the widget becomes "active" because
-		//		it or a widget inside of it either has focus, or has recently
-		//		been clicked.
-		// tags:
-		//		callback
-	},
-
-	onBlur: function(){
-		// summary:
-		//		Called when the widget stops being "active" because
-		//		focus moved to something outside of it, or the user
-		//		clicked somewhere outside of it, or the widget was
-		//		hidden.
-		// tags:
-		//		callback
-	},
-
-	_onFocus: function(e){
-		// summary:
-		//		This is where widgets do processing for when they are active,
-		//		such as changing CSS classes.  See onFocus() for more details.
-		// tags:
-		//		protected
-		this.onFocus();
-	},
-
-	_onBlur: function(){
-		// summary:
-		//		This is where widgets do processing for when they stop being active,
-		//		such as changing CSS classes.  See onBlur() for more details.
-		// tags:
-		//		protected
-		this.onBlur();
-	},
-
-	_onConnect: function(/*String*/ event){
-		// summary:
-		//		Called when someone connects to one of my handlers.
-		//		"Turn on" that handler if it isn't active yet.
-		//
-		//		This is also called for every single initialization parameter
-		//		so need to do nothing for parameters like "id".
-		// tags:
-		//		private
-		if(event in this._deferredConnects){
-			var mapNode = this[this._deferredConnects[event] || 'domNode'];
-			this.connect(mapNode, event.toLowerCase(), event);
-			delete this._deferredConnects[event];
-		}
-	},
-
-	_setClassAttr: function(/*String*/ value){
-		// summary:
-		//		Custom setter for the CSS "class" attribute
-		// tags:
-		//		protected
-		var mapNode = this[this.attributeMap["class"] || 'domNode'];
-		dojo.removeClass(mapNode, this["class"])
-		this["class"] = value;
-		dojo.addClass(mapNode, value);
-	},
-
-	_setStyleAttr: function(/*String||Object*/ value){
-		// summary:
-		//		Sets the style attribut of the widget according to value,
-		//		which is either a hash like {height: "5px", width: "3px"}
-		//		or a plain string
-		// description:
-		//		Determines which node to set the style on based on style setting
-		//		in attributeMap.
-		// tags:
-		//		protected
-
-		var mapNode = this[this.attributeMap.style || 'domNode'];
-
-		// Note: technically we should revert any style setting made in a previous call
-		// to his method, but that's difficult to keep track of.
-
-		if(dojo.isObject(value)){
-			dojo.style(mapNode, value);
-		}else{
-			if(mapNode.style.cssText){
-				mapNode.style.cssText += "; " + value;
-			}else{
-				mapNode.style.cssText = value;
-			}
-		}
-
-		this.style = value;
-	},
-
-	setAttribute: function(/*String*/ attr, /*anything*/ value){
-		// summary:
-		//		Deprecated.  Use attr() instead.
-		// tags:
-		//		deprecated
-		dojo.deprecated(this.declaredClass+"::setAttribute() is deprecated. Use attr() instead.", "", "2.0");
-		this.attr(attr, value);
-	},
-
-	_attrToDom: function(/*String*/ attr, /*String*/ value){
-		// summary:
-		//		Reflect a widget attribute (title, tabIndex, duration etc.) to
-		//		the widget DOM, as specified in attributeMap.
-		//
-		// description:
-		//		Also sets this["attr"] to the new value.
-		//		Note some attributes like "type"
-		//		cannot be processed this way as they are not mutable.
-		//
-		// tags:
-		//		private
-
-		var commands = this.attributeMap[attr];
-		dojo.forEach(dojo.isArray(commands) ? commands : [commands], function(command){
-
-			// Get target node and what we are doing to that node
-			var mapNode = this[command.node || command || "domNode"];	// DOM node
-			var type = command.type || "attribute";	// class, innerHTML, innerText, or attribute
-
-			switch(type){
-				case "attribute":
-					if(dojo.isFunction(value)){ // functions execute in the context of the widget
-						value = dojo.hitch(this, value);
-					}
-
-					// Get the name of the DOM node attribute; usually it's the same
-					// as the name of the attribute in the widget (attr), but can be overridden.
-					// Also maps handler names to lowercase, like onSubmit --> onsubmit
-					var attrName = command.attribute ? command.attribute :
-						(/^on[A-Z][a-zA-Z]*$/.test(attr) ? attr.toLowerCase() : attr);
-
-					dojo.attr(mapNode, attrName, value);
-					break;
-				case "innerText":
-					mapNode.innerHTML = "";
-					mapNode.appendChild(dojo.doc.createTextNode(value));
-					break;
-				case "innerHTML":
-					mapNode.innerHTML = value;
-					break;
-				case "class":
-					dojo.removeClass(mapNode, this[attr]);
-					dojo.addClass(mapNode, value);
-					break;
-			}
-		}, this);
-		this[attr] = value;
-	},
-
-	attr: function(/*String|Object*/name, /*Object?*/value){
-		// summary:
-		//		Set or get properties on a widget instance.
-		//	name:
-		//		The property to get or set. If an object is passed here and not
-		//		a string, its keys are used as names of attributes to be set
-		//		and the value of the object as values to set in the widget.
-		//	value:
-		//		Optional. If provided, attr() operates as a setter. If omitted,
-		//		the current value of the named property is returned.
-		// description:
-		//		Get or set named properties on a widget. If no value is
-		//		provided, the current value of the attribute is returned,
-		//		potentially via a getter method. If a value is provided, then
-		//		the method acts as a setter, assigning the value to the name,
-		//		potentially calling any explicitly provided setters to handle
-		//		the operation. For instance, if the widget has properties "foo"
-		//		and "bar" and a method named "_setFooAttr", calling:
-		//	|	myWidget.attr("foo", "Howdy!");
-		//		would be equivalent to calling:
-		//	|	widget._setFooAttr("Howdy!");
-		//		while calling:
-		//	|	myWidget.attr("bar", "Howdy!");
-		//		would be the same as writing:
-		//	|	widget.bar = "Howdy!";
-		//		It also tries to copy the changes to the widget's DOM according
-		//		to settings in attributeMap (see description of `dijit._Widget.attributeMap`
-		//		for details)
-		//		For example, calling:
-		//	|	myTitlePane.attr("title", "Howdy!");
-		//		will do
-		//	|	myTitlePane.title = "Howdy!";
-		//	|	myTitlePane.title.innerHTML = "Howdy!";
-		//		It works for DOM node attributes too.  Calling
-		//	|	widget.attr("disabled", true)
-		//		will set the disabled attribute on the widget's focusNode,
-		//		among other housekeeping for a change in disabled state.
-
-		//	open questions:
-		//		- how to handle build shortcut for attributes which want to map
-		//		into DOM attributes?
-		//		- what relationship should setAttribute()/attr() have to
-		//		layout() calls?
-		var args = arguments.length;
-		if(args == 1 && !dojo.isString(name)){
-			for(var x in name){ this.attr(x, name[x]); }
-			return this;
-		}
-		var names = this._getAttrNames(name);
-		if(args >= 2){ // setter
-			if(this[names.s]){
-				// use the explicit setter
-				args = dojo._toArray(arguments, 1);
-				return this[names.s].apply(this, args) || this;
-			}else{
-				// if param is specified as DOM node attribute, copy it
-				if(name in this.attributeMap){
-					this._attrToDom(name, value);
-				}
-
-				// FIXME: what about function assignments? Any way to connect() here?
-				this[name] = value;
-			}
-			return this;
-		}else{ // getter
-			return this[names.g] ? this[names.g]() : this[name];
-		}
-	},
-
-	_attrPairNames: {},		// shared between all widgets
-	_getAttrNames: function(name){
-		// summary:
-		//		Helper function for Widget.attr().
-		//		Caches attribute name values so we don't do the string ops every time.
-		// tags:
-		//		private
-
-		var apn = this._attrPairNames;
-		if(apn[name]){ return apn[name]; }
-		var uc = name.charAt(0).toUpperCase() + name.substr(1);
-		return (apn[name] = {
-			n: name+"Node",
-			s: "_set"+uc+"Attr",
-			g: "_get"+uc+"Attr"
-		});
-	},
-
-	toString: function(){
-		// summary:
-		//		Returns a string that represents the widget
-		// description:
-		//		When a widget is cast to a string, this method will be used to generate the
-		//		output. Currently, it does not implement any sort of reversible
-		//		serialization.
-		return '[Widget ' + this.declaredClass + ', ' + (this.id || 'NO ID') + ']'; // String
-	},
-
-	getDescendants: function(){
-		// summary:
-		//		Returns all the widgets contained by this, i.e., all widgets underneath this.containerNode.
-		//		This method should generally be avoided as it returns widgets declared in templates, which are
-		//		supposed to be internal/hidden, but it's left here for back-compat reasons.
-
-		return this.containerNode ? dojo.query('[widgetId]', this.containerNode).map(dijit.byNode) : []; // dijit._Widget[]
-	},
-
-	getChildren: function(){
-		// summary:
-		//		Returns all the widgets contained by this, i.e., all widgets underneath this.containerNode.
-		//		Does not return nested widgets, nor widgets that are part of this widget's template.
-		return this.containerNode ? dijit.findWidgets(this.containerNode) : []; // dijit._Widget[]
-	},
-
-	// nodesWithKeyClick: [private] String[]
-	//		List of nodes that correctly handle click events via native browser support,
-	//		and don't need dijit's help
-	nodesWithKeyClick: ["input", "button"],
-
-	connect: function(
-			/*Object|null*/ obj,
-			/*String|Function*/ event,
-			/*String|Function*/ method){
-		// summary:
-		//		Connects specified obj/event to specified method of this object
-		//		and registers for disconnect() on widget destroy.
-		// description:
-		//		Provide widget-specific analog to dojo.connect, except with the
-		//		implicit use of this widget as the target object.
-		//		This version of connect also provides a special "ondijitclick"
-		//		event which triggers on a click or space or enter keyup
-		// returns:
-		//		A handle that can be passed to `disconnect` in order to disconnect before
-		//		the widget is destroyed.
-		// example:
-		//	|	var btn = new dijit.form.Button();
-		//	|	// when foo.bar() is called, call the listener we're going to
-		//	|	// provide in the scope of btn
-		//	|	btn.connect(foo, "bar", function(){
-		//	|		console.debug(this.toString());
-		//	|	});
-		// tags:
-		//		protected
-
-		var d = dojo,
-			dc = d._connect,
-			handles = [];
-		if(event == "ondijitclick"){
-			// add key based click activation for unsupported nodes.
-			// do all processing onkey up to prevent spurious clicks
-			// for details see comments at top of this file where _lastKeyDownNode is defined
-			if(!this.nodesWithKeyClick[obj.tagName.toLowerCase()]){
-				var m = d.hitch(this, method);
-				handles.push(
-					dc(obj, "onkeydown", this, function(e){
-						//console.log(this.id + ": onkeydown, e.target = ", e.target, ", lastKeyDownNode was ", dijit._lastKeyDownNode, ", equality is ", (e.target === dijit._lastKeyDownNode));
-						if((e.keyCode == d.keys.ENTER || e.keyCode == d.keys.SPACE) &&
-							!e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey){
-							// needed on IE for when focus changes between keydown and keyup - otherwise dropdown menus do not work
-							dijit._lastKeyDownNode = e.target;
-							d.stopEvent(e);		// stop event to prevent scrolling on space key in IE
-						}
-			 		}),
-					dc(obj, "onkeyup", this, function(e){
-						//console.log(this.id + ": onkeyup, e.target = ", e.target, ", lastKeyDownNode was ", dijit._lastKeyDownNode, ", equality is ", (e.target === dijit._lastKeyDownNode));
-						if( (e.keyCode == d.keys.ENTER || e.keyCode == d.keys.SPACE) &&
-							e.target === dijit._lastKeyDownNode &&
-							!e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey){
-								//need reset here or have problems in FF when focus returns to trigger element after closing popup/alert
-								dijit._lastKeyDownNode = null;
-								return m(e);
-						}
-					})
-				);
-			}
-			event = "onclick";
-		}
-		handles.push(dc(obj, event, this, method));
-
-		this._connects.push(handles);
-		return handles;		// _Widget.Handle
-	},
-
-	disconnect: function(/* _Widget.Handle */ handles){
-		// summary:
-		//		Disconnects handle created by `connect`.
-		//		Also removes handle from this widget's list of connects.
-		// tags:
-		//		protected
-		for(var i=0; i<this._connects.length; i++){
-			if(this._connects[i] == handles){
-				dojo.forEach(handles, dojo.disconnect);
-				this._connects.splice(i, 1);
-				return;
-			}
-		}
-	},
-
-	subscribe: function(
-			/*String*/ topic,
-			/*String|Function*/ method){
-		// summary:
-		//		Subscribes to the specified topic and calls the specified method
-		//		of this object and registers for unsubscribe() on widget destroy.
-		// description:
-		//		Provide widget-specific analog to dojo.subscribe, except with the
-		//		implicit use of this widget as the target object.
-		// example:
-		//	|	var btn = new dijit.form.Button();
-		//	|	// when /my/topic is published, this button changes its label to
-		//	|   // be the parameter of the topic.
-		//	|	btn.subscribe("/my/topic", function(v){
-		//	|		this.attr("label", v);
-		//	|	});
-		var d = dojo,
-			handle = d.subscribe(topic, this, method);
-
-		// return handles for Any widget that may need them
-		this._subscribes.push(handle);
-		return handle;
-	},
-
-	unsubscribe: function(/*Object*/ handle){
-		// summary:
-		//		Unsubscribes handle created by this.subscribe.
-		//		Also removes handle from this widget's list of subscriptions
-		for(var i=0; i<this._subscribes.length; i++){
-			if(this._subscribes[i] == handle){
-				dojo.unsubscribe(handle);
-				this._subscribes.splice(i, 1);
-				return;
-			}
-		}
-	},
-
-	isLeftToRight: function(){
-		// summary:
-		//		Checks the page for text direction
-		// tags:
-		//		protected
-		return dojo._isBodyLtr(); //Boolean
-	},
-
-	isFocusable: function(){
-		// summary:
-		//		Return true if this widget can currently be focused
-		//		and false if not
-		return this.focus && (dojo.style(this.domNode, "display") != "none");
-	},
-
-	placeAt: function(/* String|DomNode|_Widget */reference, /* String?|Int? */position){
-		// summary:
-		//		Place this widget's domNode reference somewhere in the DOM based
-		//		on standard dojo.place conventions, or passing a Widget reference that
-		//		contains and addChild member.
-		//
-		// description:
-		//		A convenience function provided in all _Widgets, providing a simple
-		//		shorthand mechanism to put an existing (or newly created) Widget
-		//		somewhere in the dom, and allow chaining.
-		//
-		// reference:
-		//		The String id of a domNode, a domNode reference, or a reference to a Widget posessing
-		//		an addChild method.
-		//
-		// position:
-		//		If passed a string or domNode reference, the position argument
-		//		accepts a string just as dojo.place does, one of: "first", "last",
-		//		"before", or "after".
-		//
-		//		If passed a _Widget reference, and that widget reference has an ".addChild" method,
-		//		it will be called passing this widget instance into that method, supplying the optional
-		//		position index passed.
-		//
-		// returns:
-		//		dijit._Widget
-		//		Provides a useful return of the newly created dijit._Widget instance so you
-		//		can "chain" this function by instantiating, placing, then saving the return value
-		//		to a variable.
-		//
-		// example:
-		// | 	// create a Button with no srcNodeRef, and place it in the body:
-		// | 	var button = new dijit.form.Button({ label:"click" }).placeAt(dojo.body());
-		// | 	// now, 'button' is still the widget reference to the newly created button
-		// | 	dojo.connect(button, "onClick", function(e){ console.log('click'); });
-		//
-		// example:
-		// |	// create a button out of a node with id="src" and append it to id="wrapper":
-		// | 	var button = new dijit.form.Button({},"src").placeAt("wrapper");
-		//
-		// example:
-		// |	// place a new button as the first element of some div
-		// |	var button = new dijit.form.Button({ label:"click" }).placeAt("wrapper","first");
-		//
-		// example:
-		// |	// create a contentpane and add it to a TabContainer
-		// |	var tc = dijit.byId("myTabs");
-		// |	new dijit.layout.ContentPane({ href:"foo.html", title:"Wow!" }).placeAt(tc)
-
-		if(reference.declaredClass && reference.addChild){
-			reference.addChild(this, position);
-		}else{
-			dojo.place(this.domNode, reference, position);
-		}
-		return this;
-	},
-
-	_onShow: function(){
-		// summary:
-		//		Internal method called when this widget is made visible.
-		//		See `onShow` for details.
-		this.onShow();
-	},
-
-	onShow: function(){
-		// summary:
-		//		Called when this widget becomes the selected pane in a
-		//		`dijit.layout.TabContainer`, `dijit.layout.StackContainer`,
-		//		`dijit.layout.AccordionContainer`, etc.
-		//
-		//		Also called to indicate display of a `dijit.Dialog`, `dijit.TooltipDialog`, or `dijit.TitlePane`.
-		// tags:
-		//		callback
-	},
-
-	onHide: function(){
-		// summary:
-			//		Called when another widget becomes the selected pane in a
-			//		`dijit.layout.TabContainer`, `dijit.layout.StackContainer`,
-			//		`dijit.layout.AccordionContainer`, etc.
-			//
-			//		Also called to indicate hide of a `dijit.Dialog`, `dijit.TooltipDialog`, or `dijit.TitlePane`.
-			// tags:
-			//		callback
-	}
-});
-
-})();
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base.js
deleted file mode 100644
index bb505eb..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._base"] = true;
-dojo.provide("dijit._base");
-
-dojo.require("dijit._base.focus");
-dojo.require("dijit._base.manager");
-dojo.require("dijit._base.place");
-dojo.require("dijit._base.popup");
-dojo.require("dijit._base.scroll");
-dojo.require("dijit._base.sniff");
-dojo.require("dijit._base.typematic");
-dojo.require("dijit._base.wai");
-dojo.require("dijit._base.window");
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/focus.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/focus.js
deleted file mode 100644
index 6e327ea..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/focus.js
+++ /dev/null
@@ -1,519 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._base.focus"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._base.focus"] = true;
-dojo.provide("dijit._base.focus");
-
-dojo.require("dijit._base.manager");	// for dijit.isTabNavigable()
-
-// summary:
-//		These functions are used to query or set the focus and selection.
-//
-//		Also, they trace when widgets become activated/deactivated,
-//		so that the widget can fire _onFocus/_onBlur events.
-//		"Active" here means something similar to "focused", but
-//		"focus" isn't quite the right word because we keep track of
-//		a whole stack of "active" widgets.  Example: ComboButton --> Menu -->
-//		MenuItem.  The onBlur event for ComboButton doesn't fire due to focusing
-//		on the Menu or a MenuItem, since they are considered part of the
-//		ComboButton widget.  It only happens when focus is shifted
-//		somewhere completely different.
-
-dojo.mixin(dijit, {
-	// _curFocus: DomNode
-	//		Currently focused item on screen
-	_curFocus: null,
-
-	// _prevFocus: DomNode
-	//		Previously focused item on screen
-	_prevFocus: null,
-
-	isCollapsed: function(){
-		// summary:
-		//		Returns true if there is no text selected
-		return dijit.getBookmark().isCollapsed;
-	},
-
-	getBookmark: function(){
-		// summary:
-		//		Retrieves a bookmark that can be used with moveToBookmark to return to the same range
-		var bm, rg, tg, sel = dojo.doc.selection, cf = dijit._curFocus;
-
-		if(dojo.global.getSelection){
-			//W3C Range API for selections.
-			sel = dojo.global.getSelection();
-			if(sel){
-				if(sel.isCollapsed){
-					tg = cf? cf.tagName : "";
-					if(tg){
-						//Create a fake rangelike item to restore selections.
-						tg = tg.toLowerCase();
-						if(tg == "textarea" ||
-								(tg == "input" && (!cf.type || cf.type.toLowerCase() == "text"))){
-							sel = {
-								start: cf.selectionStart,
-								end: cf.selectionEnd,
-								node: cf,
-								pRange: true
-							};
-							return {isCollapsed: (sel.end <= sel.start), mark: sel}; //Object.
-						}
-					}
-					bm = {isCollapsed:true};
-				}else{
-					rg = sel.getRangeAt(0);
-					bm = {isCollapsed: false, mark: rg.cloneRange()};
-				}
-			}
-		}else if(sel){
-			// If the current focus was a input of some sort and no selection, don't bother saving
-			// a native bookmark.  This is because it causes issues with dialog/page selection restore.
-			// So, we need to create psuedo bookmarks to work with.
-			tg = cf ? cf.tagName : "";
-			tg = tg.toLowerCase();
-			if(cf && tg && (tg == "button" || tg == "textarea" || tg == "input")){
-				if(sel.type && sel.type.toLowerCase() == "none"){
-					return {
-						isCollapsed: true,
-						mark: null
-					}
-				}else{
-					rg = sel.createRange();
-					return {
-						isCollapsed: rg.text && rg.text.length?false:true,
-						mark: {
-							range: rg,
-							pRange: true
-						}
-					};
-				}
-			}
-			bm = {};
-
-			//'IE' way for selections.
-			try{
-				// createRange() throws exception when dojo in iframe
-				//and nothing selected, see #9632
-				rg = sel.createRange();
-				bm.isCollapsed = !(sel.type == 'Text' ? rg.htmlText.length : rg.length);
-			}catch(e){
-				bm.isCollapsed = true;
-				return bm;
-			}
-			if(sel.type.toUpperCase() == 'CONTROL'){
-				if(rg.length){
-					bm.mark=[];
-					var i=0,len=rg.length;
-					while(i<len){
-						bm.mark.push(rg.item(i++));
-					}
-				}else{
-					bm.isCollapsed = true;
-					bm.mark = null;
-				}
-			}else{
-				bm.mark = rg.getBookmark();
-			}
-		}else{
-			console.warn("No idea how to store the current selection for this browser!");
-		}
-		return bm; // Object
-	},
-
-	moveToBookmark: function(/*Object*/bookmark){
-		// summary:
-		//		Moves current selection to a bookmark
-		// bookmark:
-		//		This should be a returned object from dijit.getBookmark()
-
-		var _doc = dojo.doc,
-			mark = bookmark.mark;
-		if(mark){
-			if(dojo.global.getSelection){
-				//W3C Rangi API (FF, WebKit, Opera, etc)
-				var sel = dojo.global.getSelection();
-				if(sel && sel.removeAllRanges){
-					if(mark.pRange){
-						var r = mark;
-						var n = r.node;
-						n.selectionStart = r.start;
-						n.selectionEnd = r.end;
-					}else{
-						sel.removeAllRanges();
-						sel.addRange(mark);
-					}
-				}else{
-					console.warn("No idea how to restore selection for this browser!");
-				}
-			}else if(_doc.selection && mark){
-				//'IE' way.
-				var rg;
-				if(mark.pRange){
-					rg = mark.range;
-				}else if(dojo.isArray(mark)){
-					rg = _doc.body.createControlRange();
-					//rg.addElement does not have call/apply method, so can not call it directly
-					//rg is not available in "range.addElement(item)", so can't use that either
-					dojo.forEach(mark, function(n){
-						rg.addElement(n);
-					});
-				}else{
-					rg = _doc.body.createTextRange();
-					rg.moveToBookmark(mark);
-				}
-				rg.select();
-			}
-		}
-	},
-
-	getFocus: function(/*Widget?*/ menu, /*Window?*/ openedForWindow){
-		// summary:
-		//		Called as getFocus(), this returns an Object showing the current focus
-		//		and selected text.
-		//
-		//		Called as getFocus(widget), where widget is a (widget representing) a button
-		//		that was just pressed, it returns where focus was before that button
-		//		was pressed.   (Pressing the button may have either shifted focus to the button,
-		//		or removed focus altogether.)   In this case the selected text is not returned,
-		//		since it can't be accurately determined.
-		//
-		// menu: dijit._Widget or {domNode: DomNode} structure
-		//		The button that was just pressed.  If focus has disappeared or moved
-		//		to this button, returns the previous focus.  In this case the bookmark
-		//		information is already lost, and null is returned.
-		//
-		// openedForWindow:
-		//		iframe in which menu was opened
-		//
-		// returns:
-		//		A handle to restore focus/selection, to be passed to `dijit.focus`
-		var node = !dijit._curFocus || (menu && dojo.isDescendant(dijit._curFocus, menu.domNode)) ? dijit._prevFocus : dijit._curFocus;
-		return {
-			node: node,
-			bookmark: (node == dijit._curFocus) && dojo.withGlobal(openedForWindow || dojo.global, dijit.getBookmark),
-			openedForWindow: openedForWindow
-		}; // Object
-	},
-
-	focus: function(/*Object || DomNode */ handle){
-		// summary:
-		//		Sets the focused node and the selection according to argument.
-		//		To set focus to an iframe's content, pass in the iframe itself.
-		// handle:
-		//		object returned by get(), or a DomNode
-
-		if(!handle){ return; }
-
-		var node = "node" in handle ? handle.node : handle,		// because handle is either DomNode or a composite object
-			bookmark = handle.bookmark,
-			openedForWindow = handle.openedForWindow,
-			collapsed = bookmark ? bookmark.isCollapsed : false;
-
-		// Set the focus
-		// Note that for iframe's we need to use the <iframe> to follow the parentNode chain,
-		// but we need to set focus to iframe.contentWindow
-		if(node){
-			var focusNode = (node.tagName.toLowerCase() == "iframe") ? node.contentWindow : node;
-			if(focusNode && focusNode.focus){
-				try{
-					// Gecko throws sometimes if setting focus is impossible,
-					// node not displayed or something like that
-					focusNode.focus();
-				}catch(e){/*quiet*/}
-			}
-			dijit._onFocusNode(node);
-		}
-
-		// set the selection
-		// do not need to restore if current selection is not empty
-		// (use keyboard to select a menu item) or if previous selection was collapsed
-		// as it may cause focus shift (Esp in IE).
-		if(bookmark && dojo.withGlobal(openedForWindow || dojo.global, dijit.isCollapsed) && !collapsed){
-			if(openedForWindow){
-				openedForWindow.focus();
-			}
-			try{
-				dojo.withGlobal(openedForWindow || dojo.global, dijit.moveToBookmark, null, [bookmark]);
-			}catch(e2){
-				/*squelch IE internal error, see http://trac.dojotoolkit.org/ticket/1984 */
-			}
-		}
-	},
-
-	// _activeStack: dijit._Widget[]
-	//		List of currently active widgets (focused widget and it's ancestors)
-	_activeStack: [],
-
-	registerIframe: function(/*DomNode*/ iframe){
-		// summary:
-		//		Registers listeners on the specified iframe so that any click
-		//		or focus event on that iframe (or anything in it) is reported
-		//		as a focus/click event on the <iframe> itself.
-		// description:
-		//		Currently only used by editor.
-		// returns:
-		//		Handle to pass to unregisterIframe()
-		return dijit.registerWin(iframe.contentWindow, iframe);
-	},
-
-	unregisterIframe: function(/*Object*/ handle){
-		// summary:
-		//		Unregisters listeners on the specified iframe created by registerIframe.
-		//		After calling be sure to delete or null out the handle itself.
-		// handle:
-		//		Handle returned by registerIframe()
-
-		dijit.unregisterWin(handle);
-	},
-
-	registerWin: function(/*Window?*/targetWindow, /*DomNode?*/ effectiveNode){
-		// summary:
-		//		Registers listeners on the specified window (either the main
-		//		window or an iframe's window) to detect when the user has clicked somewhere
-		//		or focused somewhere.
-		// description:
-		//		Users should call registerIframe() instead of this method.
-		// targetWindow:
-		//		If specified this is the window associated with the iframe,
-		//		i.e. iframe.contentWindow.
-		// effectiveNode:
-		//		If specified, report any focus events inside targetWindow as
-		//		an event on effectiveNode, rather than on evt.target.
-		// returns:
-		//		Handle to pass to unregisterWin()
-
-		// TODO: make this function private in 2.0; Editor/users should call registerIframe(),
-
-		var mousedownListener = function(evt){
-			dijit._justMouseDowned = true;
-			setTimeout(function(){ dijit._justMouseDowned = false; }, 0);
-			dijit._onTouchNode(effectiveNode || evt.target || evt.srcElement, "mouse");
-		};
-		//dojo.connect(targetWindow, "onscroll", ???);
-
-		// Listen for blur and focus events on targetWindow's document.
-		// IIRC, I'm using attachEvent() rather than dojo.connect() because focus/blur events don't bubble
-		// through dojo.connect(), and also maybe to catch the focus events early, before onfocus handlers
-		// fire.
-		// Connect to <html> (rather than document) on IE to avoid memory leaks, but document on other browsers because
-		// (at least for FF) the focus event doesn't fire on <html> or <body>.
-		var doc = dojo.isIE ? targetWindow.document.documentElement : targetWindow.document;
-		if(doc){
-			if(dojo.isIE){
-				doc.attachEvent('onmousedown', mousedownListener);
-				var activateListener = function(evt){
-					// IE reports that nodes like <body> have gotten focus, even though they have tabIndex=-1,
-					// Should consider those more like a mouse-click than a focus....
-					if(evt.srcElement.tagName.toLowerCase() != "#document" &&
-						dijit.isTabNavigable(evt.srcElement)){
-						dijit._onFocusNode(effectiveNode || evt.srcElement);
-					}else{
-						dijit._onTouchNode(effectiveNode || evt.srcElement);
-					}
-				};
-				doc.attachEvent('onactivate', activateListener);
-				var deactivateListener =  function(evt){
-					dijit._onBlurNode(effectiveNode || evt.srcElement);
-				};
-				doc.attachEvent('ondeactivate', deactivateListener);
-
-				return function(){
-					doc.detachEvent('onmousedown', mousedownListener);
-					doc.detachEvent('onactivate', activateListener);
-					doc.detachEvent('ondeactivate', deactivateListener);
-					doc = null;	// prevent memory leak (apparent circular reference via closure)
-				};
-			}else{
-				doc.addEventListener('mousedown', mousedownListener, true);
-				var focusListener = function(evt){
-					dijit._onFocusNode(effectiveNode || evt.target);
-				};
-				doc.addEventListener('focus', focusListener, true);
-				var blurListener = function(evt){
-					dijit._onBlurNode(effectiveNode || evt.target);
-				};
-				doc.addEventListener('blur', blurListener, true);
-
-				return function(){
-					doc.removeEventListener('mousedown', mousedownListener, true);
-					doc.removeEventListener('focus', focusListener, true);
-					doc.removeEventListener('blur', blurListener, true);
-					doc = null;	// prevent memory leak (apparent circular reference via closure)
-				};
-			}
-		}
-	},
-
-	unregisterWin: function(/*Handle*/ handle){
-		// summary:
-		//		Unregisters listeners on the specified window (either the main
-		//		window or an iframe's window) according to handle returned from registerWin().
-		//		After calling be sure to delete or null out the handle itself.
-
-		// Currently our handle is actually a function
-		handle && handle();
-	},
-
-	_onBlurNode: function(/*DomNode*/ node){
-		// summary:
-		// 		Called when focus leaves a node.
-		//		Usually ignored, _unless_ it *isn't* follwed by touching another node,
-		//		which indicates that we tabbed off the last field on the page,
-		//		in which case every widget is marked inactive
-		dijit._prevFocus = dijit._curFocus;
-		dijit._curFocus = null;
-
-		if(dijit._justMouseDowned){
-			// the mouse down caused a new widget to be marked as active; this blur event
-			// is coming late, so ignore it.
-			return;
-		}
-
-		// if the blur event isn't followed by a focus event then mark all widgets as inactive.
-		if(dijit._clearActiveWidgetsTimer){
-			clearTimeout(dijit._clearActiveWidgetsTimer);
-		}
-		dijit._clearActiveWidgetsTimer = setTimeout(function(){
-			delete dijit._clearActiveWidgetsTimer;
-			dijit._setStack([]);
-			dijit._prevFocus = null;
-		}, 100);
-	},
-
-	_onTouchNode: function(/*DomNode*/ node, /*String*/ by){
-		// summary:
-		//		Callback when node is focused or mouse-downed
-		// node:
-		//		The node that was touched.
-		// by:
-		//		"mouse" if the focus/touch was caused by a mouse down event
-
-		// ignore the recent blurNode event
-		if(dijit._clearActiveWidgetsTimer){
-			clearTimeout(dijit._clearActiveWidgetsTimer);
-			delete dijit._clearActiveWidgetsTimer;
-		}
-
-		// compute stack of active widgets (ex: ComboButton --> Menu --> MenuItem)
-		var newStack=[];
-		try{
-			while(node){
-				var popupParent = dojo.attr(node, "dijitPopupParent");
-				if(popupParent){
-					node=dijit.byId(popupParent).domNode;
-				}else if(node.tagName && node.tagName.toLowerCase() == "body"){
-					// is this the root of the document or just the root of an iframe?
-					if(node === dojo.body()){
-						// node is the root of the main document
-						break;
-					}
-					// otherwise, find the iframe this node refers to (can't access it via parentNode,
-					// need to do this trick instead). window.frameElement is supported in IE/FF/Webkit
-					node=dijit.getDocumentWindow(node.ownerDocument).frameElement;
-				}else{
-					var id = node.getAttribute && node.getAttribute("widgetId");
-					if(id){
-						newStack.unshift(id);
-					}
-					node=node.parentNode;
-				}
-			}
-		}catch(e){ /* squelch */ }
-
-		dijit._setStack(newStack, by);
-	},
-
-	_onFocusNode: function(/*DomNode*/ node){
-		// summary:
-		//		Callback when node is focused
-
-		if(!node){
-			return;
-		}
-
-		if(node.nodeType == 9){
-			// Ignore focus events on the document itself.  This is here so that
-			// (for example) clicking the up/down arrows of a spinner
-			// (which don't get focus) won't cause that widget to blur. (FF issue)
-			return;
-		}
-
-		dijit._onTouchNode(node);
-
-		if(node == dijit._curFocus){ return; }
-		if(dijit._curFocus){
-			dijit._prevFocus = dijit._curFocus;
-		}
-		dijit._curFocus = node;
-		dojo.publish("focusNode", [node]);
-	},
-
-	_setStack: function(/*String[]*/ newStack, /*String*/ by){
-		// summary:
-		//		The stack of active widgets has changed.  Send out appropriate events and records new stack.
-		// newStack:
-		//		array of widget id's, starting from the top (outermost) widget
-		// by:
-		//		"mouse" if the focus/touch was caused by a mouse down event
-
-		var oldStack = dijit._activeStack;
-		dijit._activeStack = newStack;
-
-		// compare old stack to new stack to see how many elements they have in common
-		for(var nCommon=0; nCommon<Math.min(oldStack.length, newStack.length); nCommon++){
-			if(oldStack[nCommon] != newStack[nCommon]){
-				break;
-			}
-		}
-
-		var widget;
-		// for all elements that have gone out of focus, send blur event
-		for(var i=oldStack.length-1; i>=nCommon; i--){
-			widget = dijit.byId(oldStack[i]);
-			if(widget){
-				widget._focused = false;
-				widget._hasBeenBlurred = true;
-				if(widget._onBlur){
-					widget._onBlur(by);
-				}
-				if(widget._setStateClass){
-					widget._setStateClass();
-				}
-				dojo.publish("widgetBlur", [widget, by]);
-			}
-		}
-
-		// for all element that have come into focus, send focus event
-		for(i=nCommon; i<newStack.length; i++){
-			widget = dijit.byId(newStack[i]);
-			if(widget){
-				widget._focused = true;
-				if(widget._onFocus){
-					widget._onFocus(by);
-				}
-				if(widget._setStateClass){
-					widget._setStateClass();
-				}
-				dojo.publish("widgetFocus", [widget, by]);
-			}
-		}
-	}
-});
-
-// register top window and all the iframes it contains
-dojo.addOnLoad(function(){
-	var handle = dijit.registerWin(window);
-	if(dojo.isIE){
-		dojo.addOnWindowUnload(function(){
-			dijit.unregisterWin(handle);
-			handle = null;
-		})
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/manager.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/manager.js
deleted file mode 100644
index b83a5a8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/manager.js
+++ /dev/null
@@ -1,452 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._base.manager"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._base.manager"] = true;
-dojo.provide("dijit._base.manager");
-
-dojo.declare("dijit.WidgetSet", null, {
-	// summary:
-	//		A set of widgets indexed by id. A default instance of this class is
-	//		available as `dijit.registry`
-	//
-	// example:
-	//		Create a small list of widgets:
-	//		|	var ws = new dijit.WidgetSet();
-	//		|	ws.add(dijit.byId("one"));
-	//		| 	ws.add(dijit.byId("two"));
-	//		|	// destroy both:
-	//		|	ws.forEach(function(w){ w.destroy(); });
-	//
-	// example:
-	//		Using dijit.registry:
-	//		|	dijit.registry.forEach(function(w){ /* do something */ });
-
-	constructor: function(){
-		this._hash = {};
-		this.length = 0;
-	},
-
-	add: function(/*dijit._Widget*/ widget){
-		// summary:
-		//		Add a widget to this list. If a duplicate ID is detected, a error is thrown.
-		//
-		// widget: dijit._Widget
-		//		Any dijit._Widget subclass.
-		if(this._hash[widget.id]){
-			throw new Error("Tried to register widget with id==" + widget.id + " but that id is already registered");
-		}
-		this._hash[widget.id] = widget;
-		this.length++;
-	},
-
-	remove: function(/*String*/ id){
-		// summary:
-		//		Remove a widget from this WidgetSet. Does not destroy the widget; simply
-		//		removes the reference.
-		if(this._hash[id]){
-			delete this._hash[id];
-			this.length--;
-		}
-	},
-
-	forEach: function(/*Function*/ func, /* Object? */thisObj){
-		// summary:
-		//		Call specified function for each widget in this set.
-		//
-		// func:
-		//		A callback function to run for each item. Is passed the widget, the index
-		//		in the iteration, and the full hash, similar to `dojo.forEach`.
-		//
-		// thisObj:
-		//		An optional scope parameter
-		//
-		// example:
-		//		Using the default `dijit.registry` instance:
-		//		|	dijit.registry.forEach(function(widget){
-		//		|		console.log(widget.declaredClass);
-		//		|	});
-		//
-		// returns:
-		//		Returns self, in order to allow for further chaining.
-
-		thisObj = thisObj || dojo.global;
-		var i = 0, id;
-		for(id in this._hash){
-			func.call(thisObj, this._hash[id], i++, this._hash);
-		}
-		return this;	// dijit.WidgetSet
-	},
-
-	filter: function(/*Function*/ filter, /* Object? */thisObj){
-		// summary:
-		//		Filter down this WidgetSet to a smaller new WidgetSet
-		//		Works the same as `dojo.filter` and `dojo.NodeList.filter`
-		//
-		// filter:
-		//		Callback function to test truthiness. Is passed the widget
-		//		reference and the pseudo-index in the object.
-		//
-		// thisObj: Object?
-		//		Option scope to use for the filter function.
-		//
-		// example:
-		//		Arbitrary: select the odd widgets in this list
-		//		|	dijit.registry.filter(function(w, i){
-		//		|		return i % 2 == 0;
-		//		|	}).forEach(function(w){ /* odd ones */ });
-
-		thisObj = thisObj || dojo.global;
-		var res = new dijit.WidgetSet(), i = 0, id;
-		for(id in this._hash){
-			var w = this._hash[id];
-			if(filter.call(thisObj, w, i++, this._hash)){
-				res.add(w);
-			}
-		}
-		return res; // dijit.WidgetSet
-	},
-
-	byId: function(/*String*/ id){
-		// summary:
-		//		Find a widget in this list by it's id.
-		// example:
-		//		Test if an id is in a particular WidgetSet
-		//		| var ws = new dijit.WidgetSet();
-		//		| ws.add(dijit.byId("bar"));
-		//		| var t = ws.byId("bar") // returns a widget
-		//		| var x = ws.byId("foo"); // returns undefined
-
-		return this._hash[id];	// dijit._Widget
-	},
-
-	byClass: function(/*String*/ cls){
-		// summary:
-		//		Reduce this widgetset to a new WidgetSet of a particular `declaredClass`
-		//
-		// cls: String
-		//		The Class to scan for. Full dot-notated string.
-		//
-		// example:
-		//		Find all `dijit.TitlePane`s in a page:
-		//		|	dijit.registry.byClass("dijit.TitlePane").forEach(function(tp){ tp.close(); });
-
-		var res = new dijit.WidgetSet(), id, widget;
-		for(id in this._hash){
-			widget = this._hash[id];
-			if(widget.declaredClass == cls){
-				res.add(widget);
-			}
-		 }
-		 return res; // dijit.WidgetSet
-},
-
-	toArray: function(){
-		// summary:
-		//		Convert this WidgetSet into a true Array
-		//
-		// example:
-		//		Work with the widget .domNodes in a real Array
-		//		|	dojo.map(dijit.registry.toArray(), function(w){ return w.domNode; });
-
-		var ar = [];
-		for(var id in this._hash){
-			ar.push(this._hash[id]);
-		}
-		return ar;	// dijit._Widget[]
-},
-
-	map: function(/* Function */func, /* Object? */thisObj){
-		// summary:
-		//		Create a new Array from this WidgetSet, following the same rules as `dojo.map`
-		// example:
-		//		|	var nodes = dijit.registry.map(function(w){ return w.domNode; });
-		//
-		// returns:
-		//		A new array of the returned values.
-		return dojo.map(this.toArray(), func, thisObj); // Array
-	},
-
-	every: function(func, thisObj){
-		// summary:
-		// 		A synthetic clone of `dojo.every` acting explictly on this WidgetSet
-		//
-		// func: Function
-		//		A callback function run for every widget in this list. Exits loop
-		//		when the first false return is encountered.
-		//
-		// thisObj: Object?
-		//		Optional scope parameter to use for the callback
-
-		thisObj = thisObj || dojo.global;
-		var x = 0, i;
-		for(i in this._hash){
-			if(!func.call(thisObj, this._hash[i], x++, this._hash)){
-				return false; // Boolean
-			}
-		}
-		return true; // Boolean
-	},
-
-	some: function(func, thisObj){
-		// summary:
-		// 		A synthetic clone of `dojo.some` acting explictly on this WidgetSet
-		//
-		// func: Function
-		//		A callback function run for every widget in this list. Exits loop
-		//		when the first true return is encountered.
-		//
-		// thisObj: Object?
-		//		Optional scope parameter to use for the callback
-
-		thisObj = thisObj || dojo.global;
-		var x = 0, i;
-		for(i in this._hash){
-			if(func.call(thisObj, this._hash[i], x++, this._hash)){
-				return true; // Boolean
-			}
-		}
-		return false; // Boolean
-	}
-
-});
-
-/*=====
-dijit.registry = {
-	// summary:
-	//		A list of widgets on a page.
-	// description:
-	//		Is an instance of `dijit.WidgetSet`
-};
-=====*/
-dijit.registry= new dijit.WidgetSet();
-
-dijit._widgetTypeCtr = {};
-
-dijit.getUniqueId = function(/*String*/widgetType){
-	// summary:
-	//		Generates a unique id for a given widgetType
-
-	var id;
-	do{
-		id = widgetType + "_" +
-			(widgetType in dijit._widgetTypeCtr ?
-				++dijit._widgetTypeCtr[widgetType] : dijit._widgetTypeCtr[widgetType] = 0);
-	}while(dijit.byId(id));
-	return dijit._scopeName == "dijit" ? id : dijit._scopeName + "_" + id; // String
-};
-
-dijit.findWidgets = function(/*DomNode*/ root){
-	// summary:
-	//		Search subtree under root returning widgets found.
-	//		Doesn't search for nested widgets (ie, widgets inside other widgets).
-
-	var outAry = [];
-
-	function getChildrenHelper(root){
-		for(var node = root.firstChild; node; node = node.nextSibling){
-			if(node.nodeType == 1){
-				var widgetId = node.getAttribute("widgetId");
-				if(widgetId){
-					var widget = dijit.byId(widgetId);
-					outAry.push(widget);
-				}else{
-					getChildrenHelper(node);
-				}
-			}
-		}
-	}
-
-	getChildrenHelper(root);
-	return outAry;
-};
-
-dijit._destroyAll = function(){
-	// summary:
-	//		Code to destroy all widgets and do other cleanup on page unload
-
-	// Clean up focus manager lingering references to widgets and nodes
-	dijit._curFocus = null;
-	dijit._prevFocus = null;
-	dijit._activeStack = [];
-
-	// Destroy all the widgets, top down
-	dojo.forEach(dijit.findWidgets(dojo.body()), function(widget){
-		// Avoid double destroy of widgets like Menu that are attached to <body>
-		// even though they are logically children of other widgets.
-		if(!widget._destroyed){
-			if(widget.destroyRecursive){
-				widget.destroyRecursive();
-			}else if(widget.destroy){
-				widget.destroy();
-			}
-		}
-	});
-};
-
-if(dojo.isIE){
-	// Only run _destroyAll() for IE because we think it's only necessary in that case,
-	// and because it causes problems on FF.  See bug #3531 for details.
-	dojo.addOnWindowUnload(function(){
-		dijit._destroyAll();
-	});
-}
-
-dijit.byId = function(/*String|Widget*/id){
-	// summary:
-	//		Returns a widget by it's id, or if passed a widget, no-op (like dojo.byId())
-	return typeof id == "string" ? dijit.registry._hash[id] : id; // dijit._Widget
-};
-
-dijit.byNode = function(/* DOMNode */ node){
-	// summary:
-	//		Returns the widget corresponding to the given DOMNode
-	return dijit.registry.byId(node.getAttribute("widgetId")); // dijit._Widget
-};
-
-dijit.getEnclosingWidget = function(/* DOMNode */ node){
-	// summary:
-	//		Returns the widget whose DOM tree contains the specified DOMNode, or null if
-	//		the node is not contained within the DOM tree of any widget
-	while(node){
-		var id = node.getAttribute && node.getAttribute("widgetId");
-		if(id){
-			return dijit.byId(id);
-		}
-		node = node.parentNode;
-	}
-	return null;
-};
-
-dijit._isElementShown = function(/*Element*/elem){
-	var style = dojo.style(elem);
-	return (style.visibility != "hidden")
-		&& (style.visibility != "collapsed")
-		&& (style.display != "none")
-		&& (dojo.attr(elem, "type") != "hidden");
-}
-
-dijit.isTabNavigable = function(/*Element*/elem){
-	// summary:
-	//		Tests if an element is tab-navigable
-
-	// TODO: convert (and rename method) to return effectivite tabIndex; will save time in _getTabNavigable()
-	if(dojo.attr(elem, "disabled")){
-		return false;
-	}else if(dojo.hasAttr(elem, "tabIndex")){
-		// Explicit tab index setting
-		return dojo.attr(elem, "tabIndex") >= 0; // boolean
-	}else{
-		// No explicit tabIndex setting, need to investigate node type
-		switch(elem.nodeName.toLowerCase()){
-			case "a":
-				// An <a> w/out a tabindex is only navigable if it has an href
-				return dojo.hasAttr(elem, "href");
-			case "area":
-			case "button":
-			case "input":
-			case "object":
-			case "select":
-			case "textarea":
-				// These are navigable by default
-				return true;
-			case "iframe":
-				// If it's an editor <iframe> then it's tab navigable.
-				if(dojo.isMoz){
-					return elem.contentDocument.designMode == "on";
-				}else if(dojo.isWebKit){
-					var doc = elem.contentDocument,
-						body = doc && doc.body;
-					return body && body.contentEditable == 'true';
-				}else{
-					// contentWindow.document isn't accessible within IE7/8
-					// if the iframe.src points to a foreign url and this
-					// page contains an element, that could get focus
-					try{
-						doc = elem.contentWindow.document;
-						body = doc && doc.body;
-						return body && body.firstChild && body.firstChild.contentEditable == 'true';
-					}catch(e){
-						return false;
-					}
-				}
-			default:
-				return elem.contentEditable == 'true';
-		}
-	}
-};
-
-dijit._getTabNavigable = function(/*DOMNode*/root){
-	// summary:
-	//		Finds descendants of the specified root node.
-	//
-	// description:
-	//		Finds the following descendants of the specified root node:
-	//		* the first tab-navigable element in document order
-	//		  without a tabIndex or with tabIndex="0"
-	//		* the last tab-navigable element in document order
-	//		  without a tabIndex or with tabIndex="0"
-	//		* the first element in document order with the lowest
-	//		  positive tabIndex value
-	//		* the last element in document order with the highest
-	//		  positive tabIndex value
-	var first, last, lowest, lowestTabindex, highest, highestTabindex;
-	var walkTree = function(/*DOMNode*/parent){
-		dojo.query("> *", parent).forEach(function(child){
-			var isShown = dijit._isElementShown(child);
-			if(isShown && dijit.isTabNavigable(child)){
-				var tabindex = dojo.attr(child, "tabIndex");
-				if(!dojo.hasAttr(child, "tabIndex") || tabindex == 0){
-					if(!first){ first = child; }
-					last = child;
-				}else if(tabindex > 0){
-					if(!lowest || tabindex < lowestTabindex){
-						lowestTabindex = tabindex;
-						lowest = child;
-					}
-					if(!highest || tabindex >= highestTabindex){
-						highestTabindex = tabindex;
-						highest = child;
-					}
-				}
-			}
-			if(isShown && child.nodeName.toUpperCase() != 'SELECT'){ walkTree(child) }
-		});
-	};
-	if(dijit._isElementShown(root)){ walkTree(root) }
-	return { first: first, last: last, lowest: lowest, highest: highest };
-}
-dijit.getFirstInTabbingOrder = function(/*String|DOMNode*/root){
-	// summary:
-	//		Finds the descendant of the specified root node
-	//		that is first in the tabbing order
-	var elems = dijit._getTabNavigable(dojo.byId(root));
-	return elems.lowest ? elems.lowest : elems.first; // DomNode
-};
-
-dijit.getLastInTabbingOrder = function(/*String|DOMNode*/root){
-	// summary:
-	//		Finds the descendant of the specified root node
-	//		that is last in the tabbing order
-	var elems = dijit._getTabNavigable(dojo.byId(root));
-	return elems.last ? elems.last : elems.highest; // DomNode
-};
-
-/*=====
-dojo.mixin(dijit, {
-	// defaultDuration: Integer
-	//		The default animation speed (in ms) to use for all Dijit
-	//		transitional animations, unless otherwise specified
-	//		on a per-instance basis. Defaults to 200, overrided by
-	//		`djConfig.defaultDuration`
-	defaultDuration: 300
-});
-=====*/
-
-dijit.defaultDuration = dojo.config["defaultDuration"] || 200;
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/place.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/place.js
deleted file mode 100644
index 020b71d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/place.js
+++ /dev/null
@@ -1,394 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._base.place"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._base.place"] = true;
-dojo.provide("dijit._base.place");
-
-dojo.require("dojo.AdapterRegistry");
-
-// ported from dojo.html.util
-
-dijit.getViewport = function(){
-	// summary:
-	//		Returns the dimensions and scroll position of the viewable area of a browser window
-
-	var scrollRoot = (dojo.doc.compatMode == 'BackCompat')? dojo.body() : dojo.doc.documentElement;
-
-	// get scroll position
-	var scroll = dojo._docScroll(); // scrollRoot.scrollTop/Left should work
-	return { w: scrollRoot.clientWidth, h: scrollRoot.clientHeight, l: scroll.x, t: scroll.y };
-};
-
-/*=====
-dijit.__Position = function(){
-	// x: Integer
-	//		horizontal coordinate in pixels, relative to document body
-	// y: Integer
-	//		vertical coordinate in pixels, relative to document body
-
-	thix.x = x;
-	this.y = y;
-}
-=====*/
-
-
-dijit.placeOnScreen = function(
-	/* DomNode */			node,
-	/* dijit.__Position */	pos,
-	/* String[] */			corners,
-	/* dijit.__Position? */	padding){
-	// summary:
-	//		Positions one of the node's corners at specified position
-	//		such that node is fully visible in viewport.
-	// description:
-	//		NOTE: node is assumed to be absolutely or relatively positioned.
-	//	pos:
-	//		Object like {x: 10, y: 20}
-	//	corners:
-	//		Array of Strings representing order to try corners in, like ["TR", "BL"].
-	//		Possible values are:
-	//			* "BL" - bottom left
-	//			* "BR" - bottom right
-	//			* "TL" - top left
-	//			* "TR" - top right
-	//	padding:
-	//		set padding to put some buffer around the element you want to position.
-	// example:
-	//		Try to place node's top right corner at (10,20).
-	//		If that makes node go (partially) off screen, then try placing
-	//		bottom left corner at (10,20).
-	//	|	placeOnScreen(node, {x: 10, y: 20}, ["TR", "BL"])
-
-	var choices = dojo.map(corners, function(corner){
-		var c = { corner: corner, pos: {x:pos.x,y:pos.y} };
-		if(padding){
-			c.pos.x += corner.charAt(1) == 'L' ? padding.x : -padding.x;
-			c.pos.y += corner.charAt(0) == 'T' ? padding.y : -padding.y;
-		}
-		return c;
-	});
-
-	return dijit._place(node, choices);
-}
-
-dijit._place = function(/*DomNode*/ node, /* Array */ choices, /* Function */ layoutNode){
-	// summary:
-	//		Given a list of spots to put node, put it at the first spot where it fits,
-	//		of if it doesn't fit anywhere then the place with the least overflow
-	// choices: Array
-	//		Array of elements like: {corner: 'TL', pos: {x: 10, y: 20} }
-	//		Above example says to put the top-left corner of the node at (10,20)
-	// layoutNode: Function(node, aroundNodeCorner, nodeCorner)
-	//		for things like tooltip, they are displayed differently (and have different dimensions)
-	//		based on their orientation relative to the parent.   This adjusts the popup based on orientation.
-
-	// get {x: 10, y: 10, w: 100, h:100} type obj representing position of
-	// viewport over document
-	var view = dijit.getViewport();
-
-	// This won't work if the node is inside a <div style="position: relative">,
-	// so reattach it to dojo.doc.body.   (Otherwise, the positioning will be wrong
-	// and also it might get cutoff)
-	if(!node.parentNode || String(node.parentNode.tagName).toLowerCase() != "body"){
-		dojo.body().appendChild(node);
-	}
-
-	var best = null;
-	dojo.some(choices, function(choice){
-		var corner = choice.corner;
-		var pos = choice.pos;
-
-		// configure node to be displayed in given position relative to button
-		// (need to do this in order to get an accurate size for the node, because
-		// a tooltips size changes based on position, due to triangle)
-		if(layoutNode){
-			layoutNode(node, choice.aroundCorner, corner);
-		}
-
-		// get node's size
-		var style = node.style;
-		var oldDisplay = style.display;
-		var oldVis = style.visibility;
-		style.visibility = "hidden";
-		style.display = "";
-		var mb = dojo.marginBox(node);
-		style.display = oldDisplay;
-		style.visibility = oldVis;
-
-		// coordinates and size of node with specified corner placed at pos,
-		// and clipped by viewport
-		var startX = Math.max(view.l, corner.charAt(1) == 'L' ? pos.x : (pos.x - mb.w)),
-			startY = Math.max(view.t, corner.charAt(0) == 'T' ? pos.y : (pos.y - mb.h)),
-			endX = Math.min(view.l + view.w, corner.charAt(1) == 'L' ? (startX + mb.w) : pos.x),
-			endY = Math.min(view.t + view.h, corner.charAt(0) == 'T' ? (startY + mb.h) : pos.y),
-			width = endX - startX,
-			height = endY - startY,
-			overflow = (mb.w - width) + (mb.h - height);
-
-		if(best == null || overflow < best.overflow){
-			best = {
-				corner: corner,
-				aroundCorner: choice.aroundCorner,
-				x: startX,
-				y: startY,
-				w: width,
-				h: height,
-				overflow: overflow
-			};
-		}
-		return !overflow;
-	});
-
-	node.style.left = best.x + "px";
-	node.style.top = best.y + "px";
-	if(best.overflow && layoutNode){
-		layoutNode(node, best.aroundCorner, best.corner);
-	}
-	return best;
-}
-
-dijit.placeOnScreenAroundNode = function(
-	/* DomNode */		node,
-	/* DomNode */		aroundNode,
-	/* Object */		aroundCorners,
-	/* Function? */		layoutNode){
-
-	// summary:
-	//		Position node adjacent or kitty-corner to aroundNode
-	//		such that it's fully visible in viewport.
-	//
-	// description:
-	//		Place node such that corner of node touches a corner of
-	//		aroundNode, and that node is fully visible.
-	//
-	// aroundCorners:
-	//		Ordered list of pairs of corners to try matching up.
-	//		Each pair of corners is represented as a key/value in the hash,
-	//		where the key corresponds to the aroundNode's corner, and
-	//		the value corresponds to the node's corner:
-	//
-	//	|	{ aroundNodeCorner1: nodeCorner1, aroundNodeCorner2: nodeCorner2, ...}
-	//
-	//		The following strings are used to represent the four corners:
-	//			* "BL" - bottom left
-	//			* "BR" - bottom right
-	//			* "TL" - top left
-	//			* "TR" - top right
-	//
-	// layoutNode: Function(node, aroundNodeCorner, nodeCorner)
-	//		For things like tooltip, they are displayed differently (and have different dimensions)
-	//		based on their orientation relative to the parent.   This adjusts the popup based on orientation.
-	//
-	// example:
-	//	|	dijit.placeOnScreenAroundNode(node, aroundNode, {'BL':'TL', 'TR':'BR'});
-	//		This will try to position node such that node's top-left corner is at the same position
-	//		as the bottom left corner of the aroundNode (ie, put node below
-	//		aroundNode, with left edges aligned).  If that fails it will try to put
-	// 		the bottom-right corner of node where the top right corner of aroundNode is
-	//		(ie, put node above aroundNode, with right edges aligned)
-	//
-
-	// get coordinates of aroundNode
-	aroundNode = dojo.byId(aroundNode);
-	var oldDisplay = aroundNode.style.display;
-	aroundNode.style.display="";
-	// #3172: use the slightly tighter border box instead of marginBox
-	var aroundNodePos = dojo.position(aroundNode, true);
-	aroundNode.style.display=oldDisplay;
-
-	// place the node around the calculated rectangle
-	return dijit._placeOnScreenAroundRect(node,
-		aroundNodePos.x, aroundNodePos.y, aroundNodePos.w, aroundNodePos.h,	// rectangle
-		aroundCorners, layoutNode);
-};
-
-/*=====
-dijit.__Rectangle = function(){
-	// x: Integer
-	//		horizontal offset in pixels, relative to document body
-	// y: Integer
-	//		vertical offset in pixels, relative to document body
-	// width: Integer
-	//		width in pixels
-	// height: Integer
-	//		height in pixels
-
-	this.x = x;
-	this.y = y;
-	this.width = width;
-	this.height = height;
-}
-=====*/
-
-
-dijit.placeOnScreenAroundRectangle = function(
-	/* DomNode */			node,
-	/* dijit.__Rectangle */	aroundRect,
-	/* Object */			aroundCorners,
-	/* Function */			layoutNode){
-
-	// summary:
-	//		Like dijit.placeOnScreenAroundNode(), except that the "around"
-	//		parameter is an arbitrary rectangle on the screen (x, y, width, height)
-	//		instead of a dom node.
-
-	return dijit._placeOnScreenAroundRect(node,
-		aroundRect.x, aroundRect.y, aroundRect.width, aroundRect.height,	// rectangle
-		aroundCorners, layoutNode);
-};
-
-dijit._placeOnScreenAroundRect = function(
-	/* DomNode */		node,
-	/* Number */		x,
-	/* Number */		y,
-	/* Number */		width,
-	/* Number */		height,
-	/* Object */		aroundCorners,
-	/* Function */		layoutNode){
-
-	// summary:
-	//		Like dijit.placeOnScreenAroundNode(), except it accepts coordinates
-	//		of a rectangle to place node adjacent to.
-
-	// TODO: combine with placeOnScreenAroundRectangle()
-
-	// Generate list of possible positions for node
-	var choices = [];
-	for(var nodeCorner in aroundCorners){
-		choices.push( {
-			aroundCorner: nodeCorner,
-			corner: aroundCorners[nodeCorner],
-			pos: {
-				x: x + (nodeCorner.charAt(1) == 'L' ? 0 : width),
-				y: y + (nodeCorner.charAt(0) == 'T' ? 0 : height)
-			}
-		});
-	}
-
-	return dijit._place(node, choices, layoutNode);
-};
-
-dijit.placementRegistry= new dojo.AdapterRegistry();
-dijit.placementRegistry.register("node",
-	function(n, x){
-		return typeof x == "object" &&
-			typeof x.offsetWidth != "undefined" && typeof x.offsetHeight != "undefined";
-	},
-	dijit.placeOnScreenAroundNode);
-dijit.placementRegistry.register("rect",
-	function(n, x){
-		return typeof x == "object" &&
-			"x" in x && "y" in x && "width" in x && "height" in x;
-	},
-	dijit.placeOnScreenAroundRectangle);
-
-dijit.placeOnScreenAroundElement = function(
-	/* DomNode */		node,
-	/* Object */		aroundElement,
-	/* Object */		aroundCorners,
-	/* Function */		layoutNode){
-
-	// summary:
-	//		Like dijit.placeOnScreenAroundNode(), except it accepts an arbitrary object
-	//		for the "around" argument and finds a proper processor to place a node.
-
-	return dijit.placementRegistry.match.apply(dijit.placementRegistry, arguments);
-};
-
-dijit.getPopupAlignment = function(/*Array*/ position, /*Boolean*/ leftToRight){
-	// summary:
-	//		Transforms the passed array of preferred positions into a format suitable for passing as the aroundCorners argument to dijit.placeOnScreenAroundElement.
-	//
-	// position: String[]
-	//		This variable controls the position of the drop down.
-	//		It's an array of strings with the following values:
-	//
-	//			* before: places drop down to the left of the target node/widget, or to the right in
-	//			  the case of RTL scripts like Hebrew and Arabic
-	//			* after: places drop down to the right of the target node/widget, or to the left in
-	//			  the case of RTL scripts like Hebrew and Arabic
-	//			* above: drop down goes above target node
-	//			* below: drop down goes below target node
-	//
-	//		The list is positions is tried, in order, until a position is found where the drop down fits
-	//		within the viewport.
-	//
-	// leftToRight: Boolean
-	//		Whether the popup will be displaying in leftToRight mode.
-	//
-	var align = {};
-	dojo.forEach(position, function(pos){
-		switch(pos){
-			case "after":
-				align[leftToRight ? "BR" : "BL"] = leftToRight ? "BL" : "BR";
-				break;
-			case "before":
-				align[leftToRight ? "BL" : "BR"] = leftToRight ? "BR" : "BL";
-				break;
-			case "below":
-				// first try to align left borders, next try to align right borders (or reverse for RTL mode)
-				align[leftToRight ? "BL" : "BR"] = leftToRight ? "TL" : "TR";
-				align[leftToRight ? "BR" : "BL"] = leftToRight ? "TR" : "TL";
-				break;
-			case "above":
-			default:
-				// first try to align left borders, next try to align right borders (or reverse for RTL mode)
-				align[leftToRight ? "TL" : "TR"] = leftToRight ? "BL" : "BR";
-				align[leftToRight ? "TR" : "TL"] = leftToRight ? "BR" : "BL";
-				break;
-		}
-	});
-	return align;
-};
-dijit.getPopupAroundAlignment = function(/*Array*/ position, /*Boolean*/ leftToRight){
-	// summary:
-	//		Transforms the passed array of preferred positions into a format suitable for passing as the aroundCorners argument to dijit.placeOnScreenAroundElement.
-	//
-	// position: String[]
-	//		This variable controls the position of the drop down.
-	//		It's an array of strings with the following values:
-	//
-	//			* before: places drop down to the left of the target node/widget, or to the right in
-	//			  the case of RTL scripts like Hebrew and Arabic
-	//			* after: places drop down to the right of the target node/widget, or to the left in
-	//			  the case of RTL scripts like Hebrew and Arabic
-	//			* above: drop down goes above target node
-	//			* below: drop down goes below target node
-	//
-	//		The list is positions is tried, in order, until a position is found where the drop down fits
-	//		within the viewport.
-	//
-	// leftToRight: Boolean
-	//		Whether the popup will be displaying in leftToRight mode.
-	//
-	var align = {};
-	dojo.forEach(position, function(pos){
-		switch(pos){
-			case "after":
-				align[leftToRight ? "BR" : "BL"] = leftToRight ? "BL" : "BR";
-				break;
-			case "before":
-				align[leftToRight ? "BL" : "BR"] = leftToRight ? "BR" : "BL";
-				break;
-			case "below":
-				// first try to align left borders, next try to align right borders (or reverse for RTL mode)
-				align[leftToRight ? "BL" : "BR"] = leftToRight ? "TL" : "TR";
-				align[leftToRight ? "BR" : "BL"] = leftToRight ? "TR" : "TL";
-				break;
-			case "above":
-			default:
-				// first try to align left borders, next try to align right borders (or reverse for RTL mode)
-				align[leftToRight ? "TL" : "TR"] = leftToRight ? "BL" : "BR";
-				align[leftToRight ? "TR" : "TL"] = leftToRight ? "BR" : "BL";
-				break;
-		}
-	});
-	return align;
-};
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/popup.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/popup.js
deleted file mode 100644
index ec7ba54..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/popup.js
+++ /dev/null
@@ -1,365 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._base.popup"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._base.popup"] = true;
-dojo.provide("dijit._base.popup");
-
-dojo.require("dijit._base.focus");
-dojo.require("dijit._base.place");
-dojo.require("dijit._base.window");
-
-dijit.popup = new function(){
-	// summary:
-	//		This class is used to show/hide widgets as popups.
-
-	var stack = [],
-		beginZIndex=1000,
-		idGen = 1;
-
-	this.moveOffScreen = function(/*DomNode*/ node){
-		// summary:
-		//		Moves node offscreen without hiding it (so that all layout widgets included 
-		//		in this node can still layout properly)
-		//
-		// description:
-		//		Attaches node to dojo.doc.body, and
-		//		positions it off screen, but not display:none, so that
-		//		the widget doesn't appear in the page flow and/or cause a blank
-		//		area at the bottom of the viewport (making scrollbar longer), but
-		//		initialization of contained widgets works correctly
-
-		var s = node.style;
-		s.visibility = "hidden";	// so TAB key doesn't navigate to hidden popup
-		s.position = "absolute";
-		s.top = "-9999px";
-		if(s.display == "none"){
-			s.display="";
-		}
-		dojo.body().appendChild(node);
-	};
-
-/*=====
-dijit.popup.__OpenArgs = function(){
-	// popup: Widget
-	//		widget to display
-	// parent: Widget
-	//		the button etc. that is displaying this popup
-	// around: DomNode
-	//		DOM node (typically a button); place popup relative to this node.  (Specify this *or* "x" and "y" parameters.)
-	// x: Integer
-	//		Absolute horizontal position (in pixels) to place node at.  (Specify this *or* "around" parameter.)
-	// y: Integer
-	//		Absolute vertical position (in pixels) to place node at.  (Specity this *or* "around" parameter.)
-	// orient: Object || String
-	//		When the around parameter is specified, orient should be an
-	//		ordered list of tuples of the form (around-node-corner, popup-node-corner).
-	//		dijit.popup.open() tries to position the popup according to each tuple in the list, in order,
-	//		until the popup appears fully within the viewport.
-	//
-	//		The default value is {BL:'TL', TL:'BL'}, which represents a list of two tuples:
-	//			1. (BL, TL)
-	//			2. (TL, BL)
-	//		where BL means "bottom left" and "TL" means "top left".
-	//		So by default, it first tries putting the popup below the around node, left-aligning them,
-	//		and then tries to put it above the around node, still left-aligning them.   Note that the
-	//		default is horizontally reversed when in RTL mode.
-	//
-	//		When an (x,y) position is specified rather than an around node, orient is either
-	//		"R" or "L".  R (for right) means that it tries to put the popup to the right of the mouse,
-	//		specifically positioning the popup's top-right corner at the mouse position, and if that doesn't
-	//		fit in the viewport, then it tries, in order, the bottom-right corner, the top left corner,
-	//		and the top-right corner.
-	// onCancel: Function
-	//		callback when user has canceled the popup by
-	//			1. hitting ESC or
-	//			2. by using the popup widget's proprietary cancel mechanism (like a cancel button in a dialog);
-	//			   i.e. whenever popupWidget.onCancel() is called, args.onCancel is called
-	// onClose: Function
-	//		callback whenever this popup is closed
-	// onExecute: Function
-	//		callback when user "executed" on the popup/sub-popup by selecting a menu choice, etc. (top menu only)
-	// padding: dijit.__Position
-	//		adding a buffer around the opening position. This is only useful when around is not set.
-	this.popup = popup;
-	this.parent = parent;
-	this.around = around;
-	this.x = x;
-	this.y = y;
-	this.orient = orient;
-	this.onCancel = onCancel;
-	this.onClose = onClose;
-	this.onExecute = onExecute;
-	this.padding = padding;
-}
-=====*/
-
-	// Compute the closest ancestor popup that's *not* a child of another popup.
-	// Ex: For a TooltipDialog with a button that spawns a tree of menus, find the popup of the button.
-	var getTopPopup = function(){
-		for(var pi=stack.length-1; pi > 0 && stack[pi].parent === stack[pi-1].widget; pi--){
-			/* do nothing, just trying to get right value for pi */
-		}
-		return stack[pi];
-	};
-
-	var wrappers=[];
-	this.open = function(/*dijit.popup.__OpenArgs*/ args){
-		// summary:
-		//		Popup the widget at the specified position
-		//
-		// example:
-		//		opening at the mouse position
-		//		|		dijit.popup.open({popup: menuWidget, x: evt.pageX, y: evt.pageY});
-		//
-		// example:
-		//		opening the widget as a dropdown
-		//		|		dijit.popup.open({parent: this, popup: menuWidget, around: this.domNode, onClose: function(){...}});
-		//
-		//		Note that whatever widget called dijit.popup.open() should also listen to its own _onBlur callback
-		//		(fired from _base/focus.js) to know that focus has moved somewhere else and thus the popup should be closed.
-
-		var widget = args.popup,
-			orient = args.orient || (
-				dojo._isBodyLtr() ?
-				{'BL':'TL', 'BR':'TR', 'TL':'BL', 'TR':'BR'} :
-				{'BR':'TR', 'BL':'TL', 'TR':'BR', 'TL':'BL'}
-			),
-			around = args.around,
-			id = (args.around && args.around.id) ? (args.around.id+"_dropdown") : ("popup_"+idGen++);
-
-		// make wrapper div to hold widget and possibly hold iframe behind it.
-		// we can't attach the iframe as a child of the widget.domNode because
-		// widget.domNode might be a <table>, <ul>, etc.
-
-		var wrapperobj = wrappers.pop(), wrapper, iframe;
-		if(!wrapperobj){
-			wrapper = dojo.create("div",{
-				"class":"dijitPopup"
-			}, dojo.body());
-			dijit.setWaiRole(wrapper, "presentation");
-		}else{
-			// recycled a old wrapper, so that we don't need to reattach the iframe
-			// which is slow even if the iframe is empty, see #10167
-			wrapper = wrapperobj[0];
-			iframe = wrapperobj[1];
-		}
-
-		dojo.attr(wrapper,{
-			id: id,
-			style:{
-				zIndex: beginZIndex + stack.length,
-				visibility:"hidden",
-				// prevent transient scrollbar causing misalign (#5776), and initial flash in upper left (#10111)
-				top: "-9999px"
-			},
-			dijitPopupParent: args.parent ? args.parent.id : ""
-		});
-
-		var s = widget.domNode.style;
-		s.display = "";
-		s.visibility = "";
-		s.position = "";
-		s.top = "0px";
-		wrapper.appendChild(widget.domNode);
-
-		if(!iframe){
-			iframe = new dijit.BackgroundIframe(wrapper);
-		}else{
-			iframe.resize(wrapper)
-		}
-
-		// position the wrapper node
-		var best = around ?
-			dijit.placeOnScreenAroundElement(wrapper, around, orient, widget.orient ? dojo.hitch(widget, "orient") : null) :
-			dijit.placeOnScreen(wrapper, args, orient == 'R' ? ['TR','BR','TL','BL'] : ['TL','BL','TR','BR'], args.padding);
-
-		wrapper.style.visibility = "visible";
-		// TODO: use effects to fade in wrapper
-
-		var handlers = [];
-
-		// provide default escape and tab key handling
-		// (this will work for any widget, not just menu)
-		handlers.push(dojo.connect(wrapper, "onkeypress", this, function(evt){
-			if(evt.charOrCode == dojo.keys.ESCAPE && args.onCancel){
-				dojo.stopEvent(evt);
-				args.onCancel();
-			}else if(evt.charOrCode === dojo.keys.TAB){
-				dojo.stopEvent(evt);
-				var topPopup = getTopPopup();
-				if(topPopup && topPopup.onCancel){
-					topPopup.onCancel();
-				}
-			}
-		}));
-
-		// watch for cancel/execute events on the popup and notify the caller
-		// (for a menu, "execute" means clicking an item)
-		if(widget.onCancel){
-			handlers.push(dojo.connect(widget, "onCancel", args.onCancel));
-		}
-
-		handlers.push(dojo.connect(widget, widget.onExecute ? "onExecute" : "onChange", function(){
-			var topPopup = getTopPopup();
-			if(topPopup && topPopup.onExecute){
-				topPopup.onExecute();
-			}
-		}));
-
-		stack.push({
-			wrapper: wrapper,
-			iframe: iframe,
-			widget: widget,
-			parent: args.parent,
-			onExecute: args.onExecute,
-			onCancel: args.onCancel,
- 			onClose: args.onClose,
-			handlers: handlers
-		});
-
-		if(widget.onOpen){
-			// TODO: in 2.0 standardize onShow() (used by StackContainer) and onOpen() (used here)
-			widget.onOpen(best);
-		}
-
-		return best;
-	};
-
-	this.close = function(/*dijit._Widget*/ popup){
-		// summary:
-		//		Close specified popup and any popups that it parented
-		
-		// Basically work backwards from the top of the stack closing popups
-		// until we hit the specified popup, but IIRC there was some issue where closing
-		// a popup would cause others to close too.  Thus if we are trying to close B in [A,B,C]
-		// closing C might close B indirectly and then the while() condition will run where stack==[A]...
-		// so the while condition is constructed defensively.
-		while(dojo.some(stack, function(elem){return elem.widget == popup;})){
-			var top = stack.pop(),
-				wrapper = top.wrapper,
-				iframe = top.iframe,
-				widget = top.widget,
-				onClose = top.onClose;
-
-			if(widget.onClose){
-				// TODO: in 2.0 standardize onHide() (used by StackContainer) and onClose() (used here)
-				widget.onClose();
-			}
-			dojo.forEach(top.handlers, dojo.disconnect);
-
-			// Move the widget offscreen, unless it has already been destroyed in above onClose() etc.
-			if(widget && widget.domNode){
-				this.moveOffScreen(widget.domNode);
-			}
-                        
-			// recycle the wrapper plus iframe, so we prevent reattaching iframe everytime an popup opens
-			// don't use moveOffScreen which would also reattach the wrapper to body, which causes reloading of iframe
-			wrapper.style.top = "-9999px";
-			wrapper.style.visibility = "hidden";
-			wrappers.push([wrapper,iframe]);
-
-			if(onClose){
-				onClose();
-			}
-		}
-	};
-}();
-
-dijit._frames = new function(){
-	// summary:
-	//		cache of iframes
-	var queue = [];
-
-	this.pop = function(){
-		var iframe;
-		if(queue.length){
-			iframe = queue.pop();
-			iframe.style.display="";
-		}else{
-			if(dojo.isIE){
-				var burl = dojo.config["dojoBlankHtmlUrl"] || (dojo.moduleUrl("dojo", "resources/blank.html")+"") || "javascript:\"\"";
-				var html="<iframe src='" + burl + "'"
-					+ " style='position: absolute; left: 0px; top: 0px;"
-					+ "z-index: -1; filter:Alpha(Opacity=\"0\");'>";
-				iframe = dojo.doc.createElement(html);
-			}else{
-			 	iframe = dojo.create("iframe");
-				iframe.src = 'javascript:""';
-				iframe.className = "dijitBackgroundIframe";
-				dojo.style(iframe, "opacity", 0.1);
-			}
-			iframe.tabIndex = -1; // Magic to prevent iframe from getting focus on tab keypress - as style didnt work.
-		}
-		return iframe;
-	};
-
-	this.push = function(iframe){
-		iframe.style.display="none";
-		queue.push(iframe);
-	}
-}();
-
-
-dijit.BackgroundIframe = function(/* DomNode */node){
-	// summary:
-	//		For IE/FF z-index schenanigans. id attribute is required.
-	//
-	// description:
-	//		new dijit.BackgroundIframe(node)
-	//			Makes a background iframe as a child of node, that fills
-	//			area (and position) of node
-
-	if(!node.id){ throw new Error("no id"); }
-	if(dojo.isIE || dojo.isMoz){
-		var iframe = dijit._frames.pop();
-		node.appendChild(iframe);
-		if(dojo.isIE<7){
-			this.resize(node);
-			this._conn = dojo.connect(node, 'onresize', this, function(){
-				this.resize(node);
-			});
-		}else{
-			dojo.style(iframe, {
-				width: '100%',
-				height: '100%'
-			});
-		}
-		this.iframe = iframe;
-	}
-};
-
-dojo.extend(dijit.BackgroundIframe, {
-	resize: function(node){
-		// summary:
-		// 		resize the iframe so its the same size as node
-		// description:
-		//		this function is a no-op in all browsers except
-		//		IE6, which does not support 100% width/height 
-		//		of absolute positioned iframes
-		if(this.iframe && dojo.isIE<7){
-			dojo.style(this.iframe, {
-				width: node.offsetWidth + 'px',
-				height: node.offsetHeight + 'px'
-			});
-		}
-	},
-	destroy: function(){
-		// summary:
-		//		destroy the iframe
-		if(this._conn){
-			dojo.disconnect(this._conn);
-			this._conn = null;
-		}
-		if(this.iframe){
-			dijit._frames.push(this.iframe);
-			delete this.iframe;
-		}
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/scroll.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/scroll.js
deleted file mode 100644
index 74834a2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/scroll.js
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._base.scroll"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._base.scroll"] = true;
-dojo.provide("dijit._base.scroll");
-
-dijit.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){
-	// summary:
-	//		Scroll the passed node into view, if it is not already.
-	
-	// don't rely on that node.scrollIntoView works just because the function is there
-
-	try{ // catch unexpected/unrecreatable errors (#7808) since we can recover using a semi-acceptable native method
-	node = dojo.byId(node);
-	var doc = node.ownerDocument || dojo.doc,
-		body = doc.body || dojo.body(),
-		html = doc.documentElement || body.parentNode,
-		isIE = dojo.isIE, isWK = dojo.isWebKit;
-	// if an untested browser, then use the native method
-	if((!(dojo.isMoz || isIE || isWK) || node == body || node == html) && (typeof node.scrollIntoView != "undefined")){
-		node.scrollIntoView(false); // short-circuit to native if possible
-		return;
-	}
-	var backCompat = doc.compatMode == 'BackCompat',
-		clientAreaRoot = backCompat? body : html,
-		scrollRoot = isWK ? body : clientAreaRoot,
-		rootWidth = clientAreaRoot.clientWidth,
-		rootHeight = clientAreaRoot.clientHeight,
-		rtl = !dojo._isBodyLtr(),
-		nodePos = pos || dojo.position(node),
-		el = node.parentNode,
-		isFixed = function(el){
-			return ((isIE <= 6 || (isIE && backCompat))? false : (dojo.style(el, 'position').toLowerCase() == "fixed"));
-		};
-	if(isFixed(node)){ return; } // nothing to do
-	while(el){
-		if(el == body){ el = scrollRoot; }
-		var elPos = dojo.position(el),
-			fixedPos = isFixed(el);
-		with(elPos){
-			if(el == scrollRoot){
-				w = rootWidth, h = rootHeight;
-				if(scrollRoot == html && isIE && rtl){ x += scrollRoot.offsetWidth-w; } // IE workaround where scrollbar causes negative x
-				if(x < 0 || !isIE){ x = 0; } // IE can have values > 0
-				if(y < 0 || !isIE){ y = 0; }
-			}else{
-				var pb = dojo._getPadBorderExtents(el);
-				w -= pb.w; h -= pb.h; x += pb.l; y += pb.t;
-			}
-			with(el){
-				if(el != scrollRoot){ // body, html sizes already have the scrollbar removed
-					var clientSize = clientWidth,
-						scrollBarSize = w - clientSize;
-					if(clientSize > 0 && scrollBarSize > 0){
-						w = clientSize;
-						if(isIE && rtl){ x += scrollBarSize; }
-					}
-					clientSize = clientHeight;
-					scrollBarSize = h - clientSize;
-					if(clientSize > 0 && scrollBarSize > 0){
-						h = clientSize;
-					}
-				}
-				if(fixedPos){ // bounded by viewport, not parents
-					if(y < 0){
-						h += y, y = 0;
-					}
-					if(x < 0){
-						w += x, x = 0;
-					}
-					if(y + h > rootHeight){
-						h = rootHeight - y;
-					}
-					if(x + w > rootWidth){
-						w = rootWidth - x;
-					}
-				}
-				// calculate overflow in all 4 directions
-				var l = nodePos.x - x, // beyond left: < 0
-					t = nodePos.y - Math.max(y, 0), // beyond top: < 0
-					r = l + nodePos.w - w, // beyond right: > 0
-					bot = t + nodePos.h - h; // beyond bottom: > 0
-				if(r * l > 0){
-					var s = Math[l < 0? "max" : "min"](l, r);
-					nodePos.x += scrollLeft;
-					scrollLeft += (isIE >= 8 && !backCompat && rtl)? -s : s;
-					nodePos.x -= scrollLeft;
-				}
-				if(bot * t > 0){
-					nodePos.y += scrollTop;
-					scrollTop += Math[t < 0? "max" : "min"](t, bot);
-					nodePos.y -= scrollTop;
-				}
-			}
-		}
-		el = (el != scrollRoot) && !fixedPos && el.parentNode;
-	}
-	}catch(error){
-		console.error('scrollIntoView: ' + error);
-		node.scrollIntoView(false);
-	}
-};
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/sniff.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/sniff.js
deleted file mode 100644
index 0cb0ab6..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/sniff.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._base.sniff"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._base.sniff"] = true;
-// summary:
-//		Applies pre-set CSS classes to the top-level HTML node, based on:
-// 			- browser (ex: dj_ie)
-//			- browser version (ex: dj_ie6)
-//			- box model (ex: dj_contentBox)
-//			- text direction (ex: dijitRtl)
-//
-//		In addition, browser, browser version, and box model are
-//		combined with an RTL flag when browser text is RTL.  ex: dj_ie-rtl.
-//
-//		Simply doing a require on this module will
-//		establish this CSS.  Modified version of Morris' CSS hack.
-
-dojo.provide("dijit._base.sniff");
-
-(function(){
-
-	var d = dojo,
-		html = d.doc.documentElement,
-		ie = d.isIE,
-		opera = d.isOpera,
-		maj = Math.floor,
-		ff = d.isFF,
-		boxModel = d.boxModel.replace(/-/,''),
-
-		classes = {
-			dj_ie: ie,
-			dj_ie6: maj(ie) == 6,
-			dj_ie7: maj(ie) == 7,
-			dj_ie8: maj(ie) == 8,
-			dj_iequirks: ie && d.isQuirks,
-
-			// NOTE: Opera not supported by dijit
-			dj_opera: opera,
-
-			dj_khtml: d.isKhtml,
-
-			dj_webkit: d.isWebKit,
-			dj_safari: d.isSafari,
-			dj_chrome: d.isChrome,
-
-			dj_gecko: d.isMozilla,
-			dj_ff3: maj(ff) == 3
-		}; // no dojo unsupported browsers
-
-	classes["dj_" + boxModel] = true;
-
-	// apply browser, browser version, and box model class names
-	for(var p in classes){
-		if(classes[p]){
-			if(html.className){
-				html.className += " " + p;
-			}else{
-				html.className = p;
-			}
-		}
-	}
-
-	// If RTL mode then add dijitRtl flag plus repeat existing classes
-	// with -rtl extension
-	// (unshift is to make this code run after <body> node is loaded but before parser runs)
-	dojo._loaders.unshift(function(){
-		if(!dojo._isBodyLtr()){
-			html.className += " dijitRtl";
-			for(var p in classes){
-				if(classes[p]){
-					html.className += " " + p + "-rtl";
-				}
-			}
-		}
-	});
-
-})();
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/typematic.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/typematic.js
deleted file mode 100644
index faefbce..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/typematic.js
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._base.typematic"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._base.typematic"] = true;
-dojo.provide("dijit._base.typematic");
-
-dijit.typematic = {
-	// summary:
-	//		These functions are used to repetitively call a user specified callback
-	//		method when a specific key or mouse click over a specific DOM node is
-	//		held down for a specific amount of time.
-	//		Only 1 such event is allowed to occur on the browser page at 1 time.
-
-	_fireEventAndReload: function(){
-		this._timer = null;
-		this._callback(++this._count, this._node, this._evt);
-		
-		// Schedule next event, reducing the timer a little bit each iteration, bottoming-out at 10 to avoid
-		// browser overload (particularly avoiding starving DOH robot so it never gets to send a mouseup)
-		this._currentTimeout = Math.max(
-			this._currentTimeout < 0 ? this._initialDelay :
-				(this._subsequentDelay > 1 ? this._subsequentDelay : Math.round(this._currentTimeout * this._subsequentDelay)),
-			10);
-		this._timer = setTimeout(dojo.hitch(this, "_fireEventAndReload"), this._currentTimeout);
-	},
-
-	trigger: function(/*Event*/ evt, /* Object */ _this, /*DOMNode*/ node, /* Function */ callback, /* Object */ obj, /* Number */ subsequentDelay, /* Number */ initialDelay){
-		// summary:
-		//		Start a timed, repeating callback sequence.
-		//		If already started, the function call is ignored.
-		//		This method is not normally called by the user but can be
-		//		when the normal listener code is insufficient.
-		// evt:
-		//		key or mouse event object to pass to the user callback
-		// _this:
-		//		pointer to the user's widget space.
-		// node:
-		//		the DOM node object to pass the the callback function
-		// callback:
-		//		function to call until the sequence is stopped called with 3 parameters:
-		// count:
-		//		integer representing number of repeated calls (0..n) with -1 indicating the iteration has stopped
-		// node:
-		//		the DOM node object passed in
-		// evt:
-		//		key or mouse event object
-		// obj:
-		//		user space object used to uniquely identify each typematic sequence
-		// subsequentDelay:
-		//		if > 1, the number of milliseconds until the 3->n events occur
-		//		or else the fractional time multiplier for the next event's delay, default=0.9
-		// initialDelay:
-		//		the number of milliseconds until the 2nd event occurs, default=500ms
-		if(obj != this._obj){
-			this.stop();
-			this._initialDelay = initialDelay || 500;
-			this._subsequentDelay = subsequentDelay || 0.90;
-			this._obj = obj;
-			this._evt = evt;
-			this._node = node;
-			this._currentTimeout = -1;
-			this._count = -1;
-			this._callback = dojo.hitch(_this, callback);
-			this._fireEventAndReload();
-		}
-	},
-
-	stop: function(){
-		// summary:
-		//		Stop an ongoing timed, repeating callback sequence.
-		if(this._timer){
-			clearTimeout(this._timer);
-			this._timer = null;
-		}
-		if(this._obj){
-			this._callback(-1, this._node, this._evt);
-			this._obj = null;
-		}
-	},
-
-	addKeyListener: function(/*DOMNode*/ node, /*Object*/ keyObject, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay){
-		// summary:
-		//		Start listening for a specific typematic key.
-		//		See also the trigger method for other parameters.
-		// keyObject:
-		//		an object defining the key to listen for.
-		// charOrCode:
-		//		the printable character (string) or keyCode (number) to listen for.
-		// keyCode:
-		//		(deprecated - use charOrCode) the keyCode (number) to listen for (implies charCode = 0).
-		// charCode:
-		//		(deprecated - use charOrCode) the charCode (number) to listen for.
-		// ctrlKey:
-		//		desired ctrl key state to initiate the calback sequence:
-		//			- pressed (true)
-		//			- released (false)
-		//			- either (unspecified)
-		// altKey:
-		//		same as ctrlKey but for the alt key
-		// shiftKey:
-		//		same as ctrlKey but for the shift key
-		// returns:
-		//		an array of dojo.connect handles
-		if(keyObject.keyCode){
-			keyObject.charOrCode = keyObject.keyCode;
-			dojo.deprecated("keyCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.", "", "2.0");
-		}else if(keyObject.charCode){
-			keyObject.charOrCode = String.fromCharCode(keyObject.charCode);
-			dojo.deprecated("charCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.", "", "2.0");
-		}
-		return [
-			dojo.connect(node, "onkeypress", this, function(evt){
-				if(evt.charOrCode == keyObject.charOrCode &&
-				(keyObject.ctrlKey === undefined || keyObject.ctrlKey == evt.ctrlKey) &&
-				(keyObject.altKey === undefined || keyObject.altKey == evt.altKey) &&
-				(keyObject.metaKey === undefined || keyObject.metaKey == (evt.metaKey || false)) && // IE doesn't even set metaKey
-				(keyObject.shiftKey === undefined || keyObject.shiftKey == evt.shiftKey)){
-					dojo.stopEvent(evt);
-					dijit.typematic.trigger(keyObject, _this, node, callback, keyObject, subsequentDelay, initialDelay);
-				}else if(dijit.typematic._obj == keyObject){
-					dijit.typematic.stop();
-				}
-			}),
-			dojo.connect(node, "onkeyup", this, function(evt){
-				if(dijit.typematic._obj == keyObject){
-					dijit.typematic.stop();
-				}
-			})
-		];
-	},
-
-	addMouseListener: function(/*DOMNode*/ node, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay){
-		// summary:
-		//		Start listening for a typematic mouse click.
-		//		See the trigger method for other parameters.
-		// returns:
-		//		an array of dojo.connect handles
-		var dc = dojo.connect;
-		return [
-			dc(node, "mousedown", this, function(evt){
-				dojo.stopEvent(evt);
-				dijit.typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay);
-			}),
-			dc(node, "mouseup", this, function(evt){
-				dojo.stopEvent(evt);
-				dijit.typematic.stop();
-			}),
-			dc(node, "mouseout", this, function(evt){
-				dojo.stopEvent(evt);
-				dijit.typematic.stop();
-			}),
-			dc(node, "mousemove", this, function(evt){
-				dojo.stopEvent(evt);
-			}),
-			dc(node, "dblclick", this, function(evt){
-				dojo.stopEvent(evt);
-				if(dojo.isIE){
-					dijit.typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay);
-					setTimeout(dojo.hitch(this, dijit.typematic.stop), 50);
-				}
-			})
-		];
-	},
-
-	addListener: function(/*Node*/ mouseNode, /*Node*/ keyNode, /*Object*/ keyObject, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay){
-		// summary:
-		//		Start listening for a specific typematic key and mouseclick.
-		//		This is a thin wrapper to addKeyListener and addMouseListener.
-		//		See the addMouseListener and addKeyListener methods for other parameters.
-		// mouseNode:
-		//		the DOM node object to listen on for mouse events.
-		// keyNode:
-		//		the DOM node object to listen on for key events.
-		// returns:
-		//		an array of dojo.connect handles
-		return this.addKeyListener(keyNode, keyObject, _this, callback, subsequentDelay, initialDelay).concat(
-			this.addMouseListener(mouseNode, _this, callback, subsequentDelay, initialDelay));
-	}
-};
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/wai.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/wai.js
deleted file mode 100644
index 231fdc1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/wai.js
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._base.wai"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._base.wai"] = true;
-dojo.provide("dijit._base.wai");
-
-dijit.wai = {
-	onload: function(){
-		// summary:
-		//		Detects if we are in high-contrast mode or not
-
-		// This must be a named function and not an anonymous
-		// function, so that the widget parsing code can make sure it
-		// registers its onload function after this function.
-		// DO NOT USE "this" within this function.
-
-		// create div for testing if high contrast mode is on or images are turned off
-		var div = dojo.create("div",{
-			id: "a11yTestNode",
-			style:{
-				cssText:'border: 1px solid;'
-					+ 'border-color:red green;'
-					+ 'position: absolute;'
-					+ 'height: 5px;'
-					+ 'top: -999px;'
-					+ 'background-image: url("' + (dojo.config.blankGif || dojo.moduleUrl("dojo", "resources/blank.gif")) + '");'
-			}
-		}, dojo.body());
-
-		// test it
-		var cs = dojo.getComputedStyle(div);
-		if(cs){
-			var bkImg = cs.backgroundImage;
-			var needsA11y = (cs.borderTopColor == cs.borderRightColor) || (bkImg != null && (bkImg == "none" || bkImg == "url(invalid-url:)" ));
-			dojo[needsA11y ? "addClass" : "removeClass"](dojo.body(), "dijit_a11y");
-			if(dojo.isIE){
-				div.outerHTML = "";		// prevent mixed-content warning, see http://support.microsoft.com/kb/925014
-			}else{
-				dojo.body().removeChild(div);
-			}
-		}
-	}
-};
-
-// Test if computer is in high contrast mode.
-// Make sure the a11y test runs first, before widgets are instantiated.
-if(dojo.isIE || dojo.isMoz){	// NOTE: checking in Safari messes things up
-	dojo._loaders.unshift(dijit.wai.onload);
-}
-
-dojo.mixin(dijit, {
-	_XhtmlRoles: /banner|contentinfo|definition|main|navigation|search|note|secondary|seealso/,
-
-	hasWaiRole: function(/*Element*/ elem, /*String*/ role){
-		// summary:
-		//		Determines if an element has a particular non-XHTML role.
-		// returns:
-		//		True if elem has the specific non-XHTML role attribute and false if not.
-		// 		For backwards compatibility if role parameter not provided,
-		// 		returns true if has non XHTML role
-		var waiRole = this.getWaiRole(elem);
-		return role ? (waiRole.indexOf(role) > -1) : (waiRole.length > 0);
-	},
-
-	getWaiRole: function(/*Element*/ elem){
-		// summary:
-		//		Gets the non-XHTML role for an element (which should be a wai role).
-		// returns:
-		//		The non-XHTML role of elem or an empty string if elem
-		//		does not have a role.
-		 return dojo.trim((dojo.attr(elem, "role") || "").replace(this._XhtmlRoles,"").replace("wairole:",""));
-	},
-
-	setWaiRole: function(/*Element*/ elem, /*String*/ role){
-		// summary:
-		//		Sets the role on an element.
-		// description:
-		//		Replace existing role attribute with new role.
-		//		If elem already has an XHTML role, append this role to XHTML role
-		//		and remove other ARIA roles.
-
-		var curRole = dojo.attr(elem, "role") || "";
-		if(!this._XhtmlRoles.test(curRole)){
-			dojo.attr(elem, "role", role);
-		}else{
-			if((" "+ curRole +" ").indexOf(" " + role + " ") < 0){
-				var clearXhtml = dojo.trim(curRole.replace(this._XhtmlRoles, ""));
-				var cleanRole = dojo.trim(curRole.replace(clearXhtml, ""));
-				dojo.attr(elem, "role", cleanRole + (cleanRole ? ' ' : '') + role);
-			}
-		}
-	},
-
-	removeWaiRole: function(/*Element*/ elem, /*String*/ role){
-		// summary:
-		//		Removes the specified non-XHTML role from an element.
-		// 		Removes role attribute if no specific role provided (for backwards compat.)
-
-		var roleValue = dojo.attr(elem, "role");
-		if(!roleValue){ return; }
-		if(role){
-			var t = dojo.trim((" " + roleValue + " ").replace(" " + role + " ", " "));
-			dojo.attr(elem, "role", t);
-		}else{
-			elem.removeAttribute("role");
-		}
-	},
-
-	hasWaiState: function(/*Element*/ elem, /*String*/ state){
-		// summary:
-		//		Determines if an element has a given state.
-		// description:
-		//		Checks for an attribute called "aria-"+state.
-		// returns:
-		//		true if elem has a value for the given state and
-		//		false if it does not.
-
-		return elem.hasAttribute ? elem.hasAttribute("aria-"+state) : !!elem.getAttribute("aria-"+state);
-	},
-
-	getWaiState: function(/*Element*/ elem, /*String*/ state){
-		// summary:
-		//		Gets the value of a state on an element.
-		// description:
-		//		Checks for an attribute called "aria-"+state.
-		// returns:
-		//		The value of the requested state on elem
-		//		or an empty string if elem has no value for state.
-
-		return elem.getAttribute("aria-"+state) || "";
-	},
-
-	setWaiState: function(/*Element*/ elem, /*String*/ state, /*String*/ value){
-		// summary:
-		//		Sets a state on an element.
-		// description:
-		//		Sets an attribute called "aria-"+state.
-
-		elem.setAttribute("aria-"+state, value);
-	},
-
-	removeWaiState: function(/*Element*/ elem, /*String*/ state){
-		// summary:
-		//		Removes a state from an element.
-		// description:
-		//		Sets an attribute called "aria-"+state.
-
-		elem.removeAttribute("aria-"+state);
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/window.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/window.js
deleted file mode 100644
index cbafd87..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_base/window.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._base.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._base.window"] = true;
-dojo.provide("dijit._base.window");
-
-// TODO: remove this in 2.0, it's not used anymore, or at least not internally
-
-dijit.getDocumentWindow = function(doc){
-	// summary:
-	// 		Get window object associated with document doc
-
-	// In some IE versions (at least 6.0), document.parentWindow does not return a
-	// reference to the real window object (maybe a copy), so we must fix it as well
-	// We use IE specific execScript to attach the real window reference to
-	// document._parentWindow for later use
-	if(dojo.isIE && window !== document.parentWindow && !doc._parentWindow){
-		/*
-		In IE 6, only the variable "window" can be used to connect events (others
-		may be only copies).
-		*/
-		doc.parentWindow.execScript("document._parentWindow = window;", "Javascript");
-		//to prevent memory leak, unset it after use
-		//another possibility is to add an onUnload handler which seems overkill to me (liucougar)
-		var win = doc._parentWindow;
-		doc._parentWindow = null;
-		return win;	//	Window
-	}
-
-	return doc._parentWindow || doc.parentWindow || doc.defaultView;	//	Window
-}
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/RichText.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/RichText.js
deleted file mode 100644
index 839cd9d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/RichText.js
+++ /dev/null
@@ -1,1811 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._editor.RichText"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.RichText"] = true;
-dojo.provide("dijit._editor.RichText");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._editor.selection");
-dojo.require("dijit._editor.range");
-dojo.require("dijit._editor.html");
-
-// used to restore content when user leaves this page then comes back
-// but do not try doing dojo.doc.write if we are using xd loading.
-// dojo.doc.write will only work if RichText.js is included in the dojo.js
-// file. If it is included in dojo.js and you want to allow rich text saving
-// for back/forward actions, then set dojo.config.allowXdRichTextSave = true.
-if(!dojo.config["useXDomain"] || dojo.config["allowXdRichTextSave"]){
-	if(dojo._postLoad){
-		(function(){
-			var savetextarea = dojo.doc.createElement('textarea');
-			savetextarea.id = dijit._scopeName + "._editor.RichText.savedContent";
-			dojo.style(savetextarea, {
-				display:'none',
-				position:'absolute',
-				top:"-100px",
-				height:"3px",
-				width:"3px"
-			});
-			dojo.body().appendChild(savetextarea);
-		})();
-	}else{
-		//dojo.body() is not available before onLoad is fired
-		try{
-			dojo.doc.write('<textarea id="' + dijit._scopeName + '._editor.RichText.savedContent" ' +
-				'style="display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;"></textarea>');
-		}catch(e){ }
-	}
-}
-
-dojo.declare("dijit._editor.RichText", dijit._Widget, {
-	constructor: function(params){
-		// summary:
-		//		dijit._editor.RichText is the core of dijit.Editor, which provides basic
-		//		WYSIWYG editing features.
-		//
-		// description:
-		//		dijit._editor.RichText is the core of dijit.Editor, which provides basic
-		//		WYSIWYG editing features. It also encapsulates the differences
-		//		of different js engines for various browsers.  Do not use this widget
-		//		with an HTML &lt;TEXTAREA&gt; tag, since the browser unescapes XML escape characters,
-		//		like &lt;.  This can have unexpected behavior and lead to security issues
-		//		such as scripting attacks.
-		//
-		// tags:
-		//		private
-
-		// contentPreFilters: Function(String)[]
-		//		Pre content filter function register array.
-		//		these filters will be executed before the actual
-		//		editing area gets the html content.
-		this.contentPreFilters = [];
-
-		// contentPostFilters: Function(String)[]
-		//		post content filter function register array.
-		//		These will be used on the resulting html
-		//		from contentDomPostFilters. The resulting
-		//		content is the final html (returned by getValue()).
-		this.contentPostFilters = [];
-
-		// contentDomPreFilters: Function(DomNode)[]
-		//		Pre content dom filter function register array.
-		//		These filters are applied after the result from
-		//		contentPreFilters are set to the editing area.
-		this.contentDomPreFilters = [];
-
-		// contentDomPostFilters: Function(DomNode)[]
-		//		Post content dom filter function register array.
-		//		These filters are executed on the editing area dom.
-		//		The result from these will be passed to contentPostFilters.
-		this.contentDomPostFilters = [];
-
-		// editingAreaStyleSheets: dojo._URL[]
-		//		array to store all the stylesheets applied to the editing area
-		this.editingAreaStyleSheets = [];
-
-		// Make a copy of this.events before we start writing into it, otherwise we
-		// will modify the prototype which leads to bad things on pages w/multiple editors
-		this.events = [].concat(this.events);
-
-		this._keyHandlers = {};
-		this.contentPreFilters.push(dojo.hitch(this, "_preFixUrlAttributes"));
-		if(dojo.isMoz){
-			this.contentPreFilters.push(this._normalizeFontStyle);
-			this.contentPostFilters.push(this._removeMozBogus);
-		}
-		if(dojo.isWebKit){
-			// Try to clean up WebKit bogus artifacts.  The inserted classes
-			// made by WebKit sometimes messes things up.
-			this.contentPreFilters.push(this._removeWebkitBogus);
-			this.contentPostFilters.push(this._removeWebkitBogus);
-		}
-		if(dojo.isIE){
-			// IE generates <strong> and <em> but we want to normalize to <b> and <i>
-			this.contentPostFilters.push(this._normalizeFontStyle);
-		}
-		//this.contentDomPostFilters.push(this._postDomFixUrlAttributes);
-
-		this.onLoadDeferred = new dojo.Deferred();
-	},
-
-	// inheritWidth: Boolean
-	//		whether to inherit the parent's width or simply use 100%
-	inheritWidth: false,
-
-	// focusOnLoad: [deprecated] Boolean
-	//		Focus into this widget when the page is loaded
-	focusOnLoad: false,
-
-	// name: String?
-	//		Specifies the name of a (hidden) <textarea> node on the page that's used to save
-	//		the editor content on page leave.   Used to restore editor contents after navigating
-	//		to a new page and then hitting the back button.
-	name: "",
-
-	// styleSheets: [const] String
-	//		semicolon (";") separated list of css files for the editing area
-	styleSheets: "",
-
-	// _content: [private] String
-	//		temporary content storage
-	_content: "",
-
-	// height: String
-	//		Set height to fix the editor at a specific height, with scrolling.
-	//		By default, this is 300px.  If you want to have the editor always
-	//		resizes to accommodate the content, use AlwaysShowToolbar plugin
-	//		and set height="".  If this editor is used within a layout widget,
-	//		set height="100%".
-	height: "300px",
-
-	// minHeight: String
-	//		The minimum height that the editor should have.
-	minHeight: "1em",
-
-	// isClosed: [private] Boolean
-	isClosed: true,
-
-	// isLoaded: [private] Boolean
-	isLoaded: false,
-
-	// _SEPARATOR: [private] String
-	//		Used to concat contents from multiple editors into a single string,
-	//		so they can be saved into a single <textarea> node.  See "name" attribute.
-	_SEPARATOR: "@@**%%__RICHTEXTBOUNDRY__%%**@@",
-
-	// onLoadDeferred: [protected] dojo.Deferred
-	//		Deferred which is fired when the editor finishes loading
-	onLoadDeferred: null,
-
-	// isTabIndent: Boolean
-	//		Make tab key and shift-tab indent and outdent rather than navigating.
-	//		Caution: sing this makes web pages inaccessible to users unable to use a mouse.
-	isTabIndent: false,
-
-	// disableSpellCheck: [const] Boolean
-	//		When true, disables the browser's native spell checking, if supported.
-	//		Works only in Firefox.
-	disableSpellCheck: false,
-
-	postCreate: function(){
-		if("textarea" == this.domNode.tagName.toLowerCase()){
-			console.warn("RichText should not be used with the TEXTAREA tag.  See dijit._editor.RichText docs.");
-		}
-		dojo.publish(dijit._scopeName + "._editor.RichText::init", [this]);
-		this.open();
-		this.setupDefaultShortcuts();
-	},
-
-	setupDefaultShortcuts: function(){
-		// summary:
-		//		Add some default key handlers
-		// description:
-		// 		Overwrite this to setup your own handlers. The default
-		// 		implementation does not use Editor commands, but directly
-		//		executes the builtin commands within the underlying browser
-		//		support.
-		// tags:
-		//		protected
-		var exec = dojo.hitch(this, function(cmd, arg){
-			return function(){
-				return !this.execCommand(cmd,arg);
-			};
-		});
-
-		var ctrlKeyHandlers = {
-			b: exec("bold"),
-			i: exec("italic"),
-			u: exec("underline"),
-			a: exec("selectall"),
-			s: function(){ this.save(true); },
-			m: function(){ this.isTabIndent = !this.isTabIndent; },
-
-			"1": exec("formatblock", "h1"),
-			"2": exec("formatblock", "h2"),
-			"3": exec("formatblock", "h3"),
-			"4": exec("formatblock", "h4"),
-
-			"\\": exec("insertunorderedlist")
-		};
-
-		if(!dojo.isIE){
-			ctrlKeyHandlers.Z = exec("redo"); //FIXME: undo?
-		}
-
-		for(var key in ctrlKeyHandlers){
-			this.addKeyHandler(key, true, false, ctrlKeyHandlers[key]);
-		}
-	},
-
-	// events: [private] String[]
-	//		 events which should be connected to the underlying editing area
-	events: ["onKeyPress", "onKeyDown", "onKeyUp", "onClick"],
-
-	// captureEvents: [deprecated] String[]
-	//		 Events which should be connected to the underlying editing
-	//		 area, events in this array will be addListener with
-	//		 capture=true.
-	// TODO: looking at the code I don't see any distinction between events and captureEvents,
-	// so get rid of this for 2.0 if not sooner
-	captureEvents: [],
-
-	_editorCommandsLocalized: false,
-	_localizeEditorCommands: function(){
-		// summary:
-		//		When IE is running in a non-English locale, the API actually changes,
-		//		so that we have to say (for example) danraku instead of p (for paragraph).
-		//		Handle that here.
-		// tags:
-		//		private
-		if(this._editorCommandsLocalized){
-			return;
-		}
-		this._editorCommandsLocalized = true;
-
-		//in IE, names for blockformat is locale dependent, so we cache the values here
-
-		//if the normal way fails, we try the hard way to get the list
-
-		//do not use _cacheLocalBlockFormatNames here, as it will
-		//trigger security warning in IE7
-
-		//put p after div, so if IE returns Normal, we show it as paragraph
-		//We can distinguish p and div if IE returns Normal, however, in order to detect that,
-		//we have to call this.document.selection.createRange().parentElement() or such, which
-		//could slow things down. Leave it as it is for now
-		var formats = ['div', 'p', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ol', 'ul', 'address'];
-		var localhtml = "", format, i=0;
-		while((format=formats[i++])){
-			//append a <br> after each element to separate the elements more reliably
-			if(format.charAt(1) != 'l'){
-				localhtml += "<"+format+"><span>content</span></"+format+"><br/>";
-			}else{
-				localhtml += "<"+format+"><li>content</li></"+format+"><br/>";
-			}
-		}
-		//queryCommandValue returns empty if we hide editNode, so move it out of screen temporary
-		var div = dojo.doc.createElement('div');
-		dojo.style(div, {
-			position: "absolute",
-			top: "-2000px"
-		});
-		dojo.doc.body.appendChild(div);
-		div.innerHTML = localhtml;
-		var node = div.firstChild;
-		while(node){
-			dijit._editor.selection.selectElement(node.firstChild);
-			dojo.withGlobal(this.window, "selectElement", dijit._editor.selection, [node.firstChild]);
-			var nativename = node.tagName.toLowerCase();
-			this._local2NativeFormatNames[nativename] = document.queryCommandValue("formatblock");
-			//this.queryCommandValue("formatblock");
-			this._native2LocalFormatNames[this._local2NativeFormatNames[nativename]] = nativename;
-			node = node.nextSibling.nextSibling;
-		}
-		dojo.body().removeChild(div);
-	},
-
-	open: function(/*DomNode?*/ element){
-		// summary:
-		//		Transforms the node referenced in this.domNode into a rich text editing
-		//		node.
-		// description:
-		//		Sets up the editing area asynchronously. This will result in
-		//		the creation and replacement with an <iframe>.
-		//
-		//		A dojo.Deferred object is created at this.onLoadDeferred, and
-		//		users may attach to it to be informed when the rich-text area
-		//		initialization is finalized.
-		// tags:
-		//		private
-
-		if(!this.onLoadDeferred || this.onLoadDeferred.fired >= 0){
-			this.onLoadDeferred = new dojo.Deferred();
-		}
-
-		if(!this.isClosed){ this.close(); }
-		dojo.publish(dijit._scopeName + "._editor.RichText::open", [ this ]);
-
-		this._content = "";
-		if(arguments.length == 1 && element.nodeName){ // else unchanged
-			this.domNode = element;
-		}
-
-		var dn = this.domNode;
-
-		// "html" will hold the innerHTML of the srcNodeRef and will be used to
-		// initialize the editor.
-		var html;
-
-		if(dn.nodeName && dn.nodeName.toLowerCase() == "textarea"){
-			// if we were created from a textarea, then we need to create a
-			// new editing harness node.
-			var ta = (this.textarea = dn);
-			this.name = ta.name;
-			html = ta.value;
-			dn = this.domNode = dojo.doc.createElement("div");
-			dn.setAttribute('widgetId', this.id);
-			ta.removeAttribute('widgetId');
-			dn.cssText = ta.cssText;
-			dn.className += " " + ta.className;
-			dojo.place(dn, ta, "before");
-			var tmpFunc = dojo.hitch(this, function(){
-				//some browsers refuse to submit display=none textarea, so
-				//move the textarea off screen instead
-				dojo.style(ta, {
-					display: "block",
-					position: "absolute",
-					top: "-1000px"
-				});
-
-				if(dojo.isIE){ //nasty IE bug: abnormal formatting if overflow is not hidden
-					var s = ta.style;
-					this.__overflow = s.overflow;
-					s.overflow = "hidden";
-				}
-			});
-			if(dojo.isIE){
-				setTimeout(tmpFunc, 10);
-			}else{
-				tmpFunc();
-			}
-
-			if(ta.form){
-				dojo.connect(ta.form, "onsubmit", this, function(){
-					// FIXME: should we be calling close() here instead?
-					ta.value = this.getValue();
-				});
-			}
-		}else{
-			html = dijit._editor.getChildrenHtml(dn);
-			dn.innerHTML = "";
-		}
-
-		var content = dojo.contentBox(dn);
-		this._oldHeight = content.h;
-		this._oldWidth = content.w;
-
-		this.savedContent = html;
-
-		// If we're a list item we have to put in a blank line to force the
-		// bullet to nicely align at the top of text
-		if(dn.nodeName && dn.nodeName == "LI"){
-			dn.innerHTML = " <br>";
-		}
-
-		this.editingArea = dn.ownerDocument.createElement("div");
-		dn.appendChild(this.editingArea);
-
-		// User has pressed back/forward button so we lost the text in the editor, but it's saved
-		// in a hidden <textarea> (which contains the data for all the editors on this page),
-		// so get editor value from there
-		if(this.name !== "" && (!dojo.config["useXDomain"] || dojo.config["allowXdRichTextSave"])){
-			var saveTextarea = dojo.byId(dijit._scopeName + "._editor.RichText.savedContent");
-			if(saveTextarea.value !== ""){
-				var datas = saveTextarea.value.split(this._SEPARATOR), i=0, dat;
-				while((dat=datas[i++])){
-					var data = dat.split(":");
-					if(data[0] == this.name){
-						html = data[1];
-						datas.splice(i, 1);	// TODO: this has no effect
-						break;
-					}
-				}
-			}
-
-			// TODO: this is troublesome if this editor has been destroyed, should have global handler.
-			// TODO: need to clear <textarea> in global handler
-			dojo.addOnUnload(dojo.hitch(this, "_saveContent"));
-		}
-
-		this.isClosed = false;
-
-		var ifr = (this.editorObject = this.iframe = dojo.doc.createElement('iframe'));
-		ifr.id = this.id+"_iframe";
-		this._iframeSrc = this._getIframeDocTxt();
-		ifr.style.border = "none";
-		ifr.style.width = "100%";
-		if(this._layoutMode){
-			// iframe should be 100% height, thus getting it's height from surrounding
-			// <div> (which has the correct height set by Editor)
-			ifr.style.height = "100%";
-		}else{
-			if(dojo.isIE >= 7){
-				if(this.height){
-					ifr.style.height = this.height;
-				}
-				if(this.minHeight){
-					ifr.style.minHeight = this.minHeight;
-				}
-			}else{
-				ifr.style.height = this.height ? this.height : this.minHeight;
-			}
-		}
-		ifr.frameBorder = 0;
-		ifr._loadFunc = dojo.hitch( this, function(win){
-			this.window = win;
-			this.document = this.window.document;
-
-			if(dojo.isIE){
-				this._localizeEditorCommands();
-			}
-
-			// Do final setup and set initial contents of editor
-			this.onLoad(html);
-
-			this.savedContent = this.getValue(true);
-		});
-
-		// Set the iframe's initial (blank) content.
-		var s = 'javascript:parent.' + dijit._scopeName + '.byId("'+this.id+'")._iframeSrc';
-		ifr.setAttribute('src', s);
-		this.editingArea.appendChild(ifr);
-
-		if(dojo.isSafari){ // Safari seems to always append iframe with src=about:blank
-			setTimeout(function(){ifr.setAttribute('src', s);},0);
-		}
-
-		// TODO: this is a guess at the default line-height, kinda works
-		if(dn.nodeName == "LI"){
-			dn.lastChild.style.marginTop = "-1.2em";
-		}
-
-		dojo.addClass(this.domNode, "RichTextEditable");
-	},
-
-	//static cache variables shared among all instance of this class
-	_local2NativeFormatNames: {},
-	_native2LocalFormatNames: {},
-
-	_getIframeDocTxt: function(){
-		// summary:
-		//		Generates the boilerplate text of the document inside the iframe (ie, <html><head>...</head><body/></html>).
-		//		Editor content (if not blank) should be added afterwards.
-		// tags:
-		//		private
-		var _cs = dojo.getComputedStyle(this.domNode);
-
-		// The contents inside of <body>.  The real contents are set later via a call to setValue().
-		var html = "";
-		if(dojo.isIE || (!this.height && !dojo.isMoz)){
-			// In auto-expand mode, need a wrapper div for AlwaysShowToolbar plugin to correctly
-			// expand/contract the editor as the content changes.
-			html = "<div></div>";
-		}else if(dojo.isMoz){
-			// workaround bug where can't select then delete text (until user types something
-			// into the editor)... and/or issue where typing doesn't erase selected text
-			this._cursorToStart = true;
-			html = "&nbsp;";
-		}
-
-		var font = [ _cs.fontWeight, _cs.fontSize, _cs.fontFamily ].join(" ");
-
-		// line height is tricky - applying a units value will mess things up.
-		// if we can't get a non-units value, bail out.
-		var lineHeight = _cs.lineHeight;
-		if(lineHeight.indexOf("px") >= 0){
-			lineHeight = parseFloat(lineHeight)/parseFloat(_cs.fontSize);
-			// console.debug(lineHeight);
-		}else if(lineHeight.indexOf("em")>=0){
-			lineHeight = parseFloat(lineHeight);
-		}else{
-			// If we can't get a non-units value, just default
-			// it to the CSS spec default of 'normal'.  Seems to
-			// work better, esp on IE, than '1.0'
-			lineHeight = "normal";
-		}
-		var userStyle = "";
-		this.style.replace(/(^|;)(line-|font-?)[^;]+/g, function(match){ userStyle += match.replace(/^;/g,"") + ';'; });
-
-		// need to find any associated label element and update iframe document title
-		var label=dojo.query('label[for="'+this.id+'"]');
-
-		return [
-			this.isLeftToRight() ? "<html><head>" : "<html dir='rtl'><head>",
-			(dojo.isMoz && label.length ? "<title>" + label[0].innerHTML + "</title>" : ""),
-			"<meta http-equiv='Content-Type' content='text/html'>",
-			"<style>",
-			"body,html {",
-			"\tbackground:transparent;",
-			"\tpadding: 1px 0 0 0;",
-			"\tmargin: -1px 0 0 0;", // remove extraneous vertical scrollbar on safari and firefox
-			(dojo.isWebKit?"\twidth: 100%;":""),
-			(dojo.isWebKit?"\theight: 100%;":""),
-			"}",
-			// TODO: left positioning will cause contents to disappear out of view
-			//	   if it gets too wide for the visible area
-			"body{",
-			"\ttop:0px; left:0px; right:0px;",
-			"\tfont:", font, ";",
-				((this.height||dojo.isOpera) ? "" : "position: fixed;"),
-			// FIXME: IE 6 won't understand min-height?
-			"\tmin-height:", this.minHeight, ";",
-			"\tline-height:", lineHeight,
-			"}",
-			"p{ margin: 1em 0; }",
-			(this.height ? // height:auto undoes the height:100%
-				"" : "body,html{overflow-y:hidden;/*for IE*/} body > div {overflow-x:auto;/*FF:horizontal scrollbar*/ overflow-y:hidden;/*safari*/ min-height:"+this.minHeight+";/*safari*/}"
-			),
-			"li > ul:-moz-first-node, li > ol:-moz-first-node{ padding-top: 1.2em; } ",
-			"li{ min-height:1.2em; }",
-			"</style>",
-			this._applyEditingAreaStyleSheets(),
-			"</head><body onload='frameElement._loadFunc(window,document)' style='"+userStyle+"'>", html, "</body></html>"
-		].join(""); // String
-	},
-
-	_applyEditingAreaStyleSheets: function(){
-		// summary:
-		//		apply the specified css files in styleSheets
-		// tags:
-		//		private
-		var files = [];
-		if(this.styleSheets){
-			files = this.styleSheets.split(';');
-			this.styleSheets = '';
-		}
-
-		//empty this.editingAreaStyleSheets here, as it will be filled in addStyleSheet
-		files = files.concat(this.editingAreaStyleSheets);
-		this.editingAreaStyleSheets = [];
-
-		var text='', i=0, url;
-		while((url=files[i++])){
-			var abstring = (new dojo._Url(dojo.global.location, url)).toString();
-			this.editingAreaStyleSheets.push(abstring);
-			text += '<link rel="stylesheet" type="text/css" href="'+abstring+'"/>';
-		}
-		return text;
-	},
-
-	addStyleSheet: function(/*dojo._Url*/ uri){
-		// summary:
-		//		add an external stylesheet for the editing area
-		// uri:
-		//		A dojo.uri.Uri pointing to the url of the external css file
-		var url=uri.toString();
-
-		//if uri is relative, then convert it to absolute so that it can be resolved correctly in iframe
-		if(url.charAt(0) == '.' || (url.charAt(0) != '/' && !uri.host)){
-			url = (new dojo._Url(dojo.global.location, url)).toString();
-		}
-
-		if(dojo.indexOf(this.editingAreaStyleSheets, url) > -1){
-//			console.debug("dijit._editor.RichText.addStyleSheet: Style sheet "+url+" is already applied");
-			return;
-		}
-
-		this.editingAreaStyleSheets.push(url);
-		this.onLoadDeferred.addCallback(dojo.hitch(function(){
-			if(this.document.createStyleSheet){ //IE
-				this.document.createStyleSheet(url);
-			}else{ //other browser
-				var head = this.document.getElementsByTagName("head")[0];
-				var stylesheet = this.document.createElement("link");
-				stylesheet.rel="stylesheet";
-				stylesheet.type="text/css";
-				stylesheet.href=url;
-				head.appendChild(stylesheet);
-			}
-		}));
-	},
-
-	removeStyleSheet: function(/*dojo._Url*/ uri){
-		// summary:
-		//		remove an external stylesheet for the editing area
-		var url=uri.toString();
-		//if uri is relative, then convert it to absolute so that it can be resolved correctly in iframe
-		if(url.charAt(0) == '.' || (url.charAt(0) != '/' && !uri.host)){
-			url = (new dojo._Url(dojo.global.location, url)).toString();
-		}
-		var index = dojo.indexOf(this.editingAreaStyleSheets, url);
-		if(index == -1){
-//			console.debug("dijit._editor.RichText.removeStyleSheet: Style sheet "+url+" has not been applied");
-			return;
-		}
-		delete this.editingAreaStyleSheets[index];
-		dojo.withGlobal(this.window,'query', dojo, ['link:[href="'+url+'"]']).orphan();
-	},
-
-	// disabled: Boolean
-	//		The editor is disabled; the text cannot be changed.
-	disabled: false,
-
-	_mozSettingProps: {'styleWithCSS':false},
-	_setDisabledAttr: function(/*Boolean*/ value){
-		this.disabled = value;
-		if(!this.isLoaded){ return; } // this method requires init to be complete
-		value = !!value;
-		if(dojo.isIE || dojo.isWebKit || dojo.isOpera){
-			var preventIEfocus = dojo.isIE && (this.isLoaded || !this.focusOnLoad);
-			if(preventIEfocus){ this.editNode.unselectable = "on"; }
-			this.editNode.contentEditable = !value;
-			if(preventIEfocus){
-				var _this = this;
-				setTimeout(function(){ _this.editNode.unselectable = "off"; }, 0);
-			}
-		}else{ //moz
-			try{
-				this.document.designMode=(value?'off':'on');
-			}catch(e){ return; } // ! _disabledOK
-			if(!value && this._mozSettingProps){
-				var ps = this._mozSettingProps;
-				for(var n in ps){
-					if(ps.hasOwnProperty(n)){
-						try{
-							this.document.execCommand(n,false,ps[n]);
-						}catch(e2){}
-					}
-				}
-			}
-//			this.document.execCommand('contentReadOnly', false, value);
-//				if(value){
-//					this.blur(); //to remove the blinking caret
-//				}
-		}
-		this._disabledOK = true;
-	},
-
-/* Event handlers
- *****************/
-
-	onLoad: function(/*String*/ html){
-		// summary:
-		//		Handler after the iframe finishes loading.
-		// html: String
-		//		Editor contents should be set to this value
-		// tags:
-		//		protected
-
-		// TODO: rename this to _onLoad, make empty public onLoad() method, deprecate/make protected onLoadDeferred handler?
-
-		if(!this.window.__registeredWindow){
-			this.window.__registeredWindow = true;
-			this._iframeRegHandle = dijit.registerIframe(this.iframe);
-		}
-		if(!dojo.isIE && (this.height || dojo.isMoz)){
-			this.editNode=this.document.body;
-		}else{
-			// there's a wrapper div around the content, see _getIframeDocTxt().
-			this.editNode=this.document.body.firstChild;
-			var _this = this;
-			if(dojo.isIE){ // #4996 IE wants to focus the BODY tag
-				var tabStop = (this.tabStop = dojo.doc.createElement('<div tabIndex=-1>'));
-				this.editingArea.appendChild(tabStop);
-				this.iframe.onfocus = function(){ _this.editNode.setActive(); };
-			}
-		}
-		this.focusNode = this.editNode; // for InlineEditBox
-
-
-		var events = this.events.concat(this.captureEvents);
-		var ap = this.iframe ? this.document : this.editNode;
-		dojo.forEach(events, function(item){
-			this.connect(ap, item.toLowerCase(), item);
-		}, this);
-
-		if(dojo.isIE){ // IE contentEditable
-			this.connect(this.document, "onmousedown", "_onIEMouseDown"); // #4996 fix focus
-
-			// give the node Layout on IE
-			// TODO: this may no longer be needed, since we've reverted IE to using an iframe,
-			// not contentEditable.   Removing it would also probably remove the need for creating
-			// the extra <div> in _getIframeDocTxt()
-			this.editNode.style.zoom = 1.0;
-		}
-
-		if(dojo.isWebKit){
-			//WebKit sometimes doesn't fire right on selections, so the toolbar
-			//doesn't update right.  Therefore, help it out a bit with an additional
-			//listener.  A mouse up will typically indicate a display change, so fire this
-			//and get the toolbar to adapt.  Reference: #9532
-			this._webkitListener = this.connect(this.document, "onmouseup", "onDisplayChanged");
-		}
-
-		if(dojo.isIE){
-			// Try to make sure 'hidden' elements aren't visible in edit mode (like browsers other than IE
-			// do).  See #9103
-			try{
-				this.document.execCommand('RespectVisibilityInDesign', true, null);
-			}catch(e){/* squelch */}
-		}
-
-		this.isLoaded = true;
-
-		this.attr('disabled', this.disabled); // initialize content to editable (or not)
-
-		// Note that setValue() call will only work after isLoaded is set to true (above)
-		this.setValue(html);
-
-		if(this.onLoadDeferred){
-			this.onLoadDeferred.callback(true);
-		}
-
-		this.onDisplayChanged();
-
-		if(this.focusOnLoad){
-			// after the document loads, then set focus after updateInterval expires so that
-			// onNormalizedDisplayChanged has run to avoid input caret issues
-			dojo.addOnLoad(dojo.hitch(this, function(){ setTimeout(dojo.hitch(this, "focus"), this.updateInterval); }));
-		}
-	},
-
-	onKeyDown: function(/* Event */ e){
-		// summary:
-		//		Handler for onkeydown event
-		// tags:
-		//		protected
-
-		// we need this event at the moment to get the events from control keys
-		// such as the backspace. It might be possible to add this to Dojo, so that
-		// keyPress events can be emulated by the keyDown and keyUp detection.
-
-		if(e.keyCode === dojo.keys.TAB && this.isTabIndent ){
-			dojo.stopEvent(e); //prevent tab from moving focus out of editor
-
-			// FIXME: this is a poor-man's indent/outdent. It would be
-			// better if it added 4 "&nbsp;" chars in an undoable way.
-			// Unfortunately pasteHTML does not prove to be undoable
-			if(this.queryCommandEnabled((e.shiftKey ? "outdent" : "indent"))){
-				this.execCommand((e.shiftKey ? "outdent" : "indent"));
-			}
-		}
-		if(dojo.isIE){
-			if(e.keyCode == dojo.keys.TAB && !this.isTabIndent){
-				if(e.shiftKey && !e.ctrlKey && !e.altKey){
-					// focus the BODY so the browser will tab away from it instead
-					this.iframe.focus();
-				}else if(!e.shiftKey && !e.ctrlKey && !e.altKey){
-					// focus the BODY so the browser will tab away from it instead
-					this.tabStop.focus();
-				}
-			}else if(e.keyCode === dojo.keys.BACKSPACE && this.document.selection.type === "Control"){
-				// IE has a bug where if a non-text object is selected in the editor,
-				// hitting backspace would act as if the browser's back button was
-				// clicked instead of deleting the object. see #1069
-				dojo.stopEvent(e);
-				this.execCommand("delete");
-			}else if((65 <= e.keyCode && e.keyCode <= 90) ||
-				(e.keyCode>=37 && e.keyCode<=40) // FIXME: get this from connect() instead!
-			){ //arrow keys
-				e.charCode = e.keyCode;
-				this.onKeyPress(e);
-			}
-		}
-		return true;
-	},
-
-	onKeyUp: function(e){
-		// summary:
-		//		Handler for onkeyup event
-		// tags:
-		//      callback
-		return;
-	},
-
-	setDisabled: function(/*Boolean*/ disabled){
-		// summary:
-		//		Deprecated, use attr('disabled', ...) instead.
-		// tags:
-		//		deprecated
-		dojo.deprecated('dijit.Editor::setDisabled is deprecated','use dijit.Editor::attr("disabled",boolean) instead', 2.0);
-		this.attr('disabled',disabled);
-	},
-	_setValueAttr: function(/*String*/ value){
-		// summary:
-		//      Registers that attr("value", foo) should call setValue(foo)
-		this.setValue(value);
-	},
-	_setDisableSpellCheckAttr: function(/*Boolean*/ disabled){
-		if(this.document){
-			dojo.attr(this.document.body, "spellcheck", !disabled);
-		}else{
-			// try again after the editor is finished loading
-			this.onLoadDeferred.addCallback(dojo.hitch(this, function(){
-				dojo.attr(this.document.body, "spellcheck", !disabled);
-			}));
-		}
-		this.disableSpellCheck = disabled;
-	},
-
-	onKeyPress: function(e){
-		// summary:
-		//		Handle the various key events
-		// tags:
-		//		protected
-
-		var c = (e.keyChar && e.keyChar.toLowerCase()) || e.keyCode,
-			handlers = this._keyHandlers[c],
-			args = arguments;
-
-		if(handlers && !e.altKey){
-			dojo.some(handlers, function(h){
-				if(!(h.shift ^ e.shiftKey) && !(h.ctrl ^ e.ctrlKey)){
-					if(!h.handler.apply(this, args)){
-						e.preventDefault();
-					}
-					return true;
-				}
-			}, this);
-		}
-
-		// function call after the character has been inserted
-		if(!this._onKeyHitch){
-			this._onKeyHitch = dojo.hitch(this, "onKeyPressed");
-		}
-		setTimeout(this._onKeyHitch, 1);
-		return true;
-	},
-
-	addKeyHandler: function(/*String*/ key, /*Boolean*/ ctrl, /*Boolean*/ shift, /*Function*/ handler){
-		// summary:
-		//		Add a handler for a keyboard shortcut
-		// description:
-		//		The key argument should be in lowercase if it is a letter character
-		// tags:
-		//		protected
-		if(!dojo.isArray(this._keyHandlers[key])){
-			this._keyHandlers[key] = [];
-		}
-		//TODO: would be nice to make this a hash instead of an array for quick lookups
-		this._keyHandlers[key].push({
-			shift: shift || false,
-			ctrl: ctrl || false,
-			handler: handler
-		});
-	},
-
-	onKeyPressed: function(){
-		// summary:
-		//		Handler for after the user has pressed a key, and the display has been updated.
-		//		(Runs on a timer so that it runs after the display is updated)
-		// tags:
-		//		private
-		this.onDisplayChanged(/*e*/); // can't pass in e
-	},
-
-	onClick: function(/*Event*/ e){
-		// summary:
-		//		Handler for when the user clicks.
-		// tags:
-		//		private
-
-		// console.info('onClick',this._tryDesignModeOn);
-		this.onDisplayChanged(e);
-	},
-
-	_onIEMouseDown: function(/*Event*/ e){
-		// summary:
-		//		IE only to prevent 2 clicks to focus
-		// tags:
-		//		protected
-
-		if(!this._focused && !this.disabled){
-			this.focus();
-		}
-	},
-
-	_onBlur: function(e){
-		// summary:
-		//		Called from focus manager when focus has moved away from this editor
-		// tags:
-		//		protected
-
-		// console.info('_onBlur')
-
-		this.inherited(arguments);
-		var _c=this.getValue(true);
-
-		if(_c!=this.savedContent){
-			this.onChange(_c);
-			this.savedContent=_c;
-		}
-	},
-	_onFocus: function(/*Event*/ e){
-		// summary:
-		//		Called from focus manager when focus has moved into this editor
-		// tags:
-		//		protected
-
-		// console.info('_onFocus')
-		if(!this.disabled){
-			if(!this._disabledOK){
-				this.attr('disabled', false);
-			}
-			this.inherited(arguments);
-		}
-	},
-
-	// TODO: why is this needed - should we deprecate this ?
-	blur: function(){
-		// summary:
-		//		Remove focus from this instance.
-		// tags:
-		//		deprecated
-		if(!dojo.isIE && this.window.document.documentElement && this.window.document.documentElement.focus){
-			this.window.document.documentElement.focus();
-		}else if(dojo.doc.body.focus){
-			dojo.doc.body.focus();
-		}
-	},
-
-	focus: function(){
-		// summary:
-		//		Move focus to this editor
-		if(!dojo.isIE){
-			dijit.focus(this.iframe);
-			if(this._cursorToStart){ 
-				delete this._cursorToStart;
-				if(this.editNode.childNodes && 
-					this.editNode.childNodes.length === 1 && 
-					this.editNode.innerHTML === "&nbsp;"){
-						this.placeCursorAtStart();
-				}
-			}
-		}else if(this.editNode && this.editNode.focus){
-			// editNode may be hidden in display:none div, lets just punt in this case
-			//this.editNode.focus(); -> causes IE to scroll always (strict and quirks mode) to the top the Iframe
-			// if we fire the event manually and let the browser handle the focusing, the latest
-			// cursor position is focused like in FF
-			this.iframe.fireEvent('onfocus', document.createEventObject()); // createEventObject only in IE
-		//	}else{
-		// TODO: should we throw here?
-		// console.debug("Have no idea how to focus into the editor!");
-		}
-	},
-
-	// _lastUpdate: 0,
-	updateInterval: 200,
-	_updateTimer: null,
-	onDisplayChanged: function(/*Event*/ e){
-		// summary:
-		//		This event will be fired everytime the display context
-		//		changes and the result needs to be reflected in the UI.
-		// description:
-		//		If you don't want to have update too often,
-		//		onNormalizedDisplayChanged should be used instead
-		// tags:
-		//		private
-
-		// var _t=new Date();
-		if(this._updateTimer){
-			clearTimeout(this._updateTimer);
-		}
-		if(!this._updateHandler){
-			this._updateHandler = dojo.hitch(this,"onNormalizedDisplayChanged");
-		}
-		this._updateTimer = setTimeout(this._updateHandler, this.updateInterval);
-	},
-	onNormalizedDisplayChanged: function(){
-		// summary:
-		//		This event is fired every updateInterval ms or more
-		// description:
-		//		If something needs to happen immediately after a
-		//		user change, please use onDisplayChanged instead.
-		// tags:
-		//		private
-		delete this._updateTimer;
-	},
-	onChange: function(newContent){
-		// summary:
-		//		This is fired if and only if the editor loses focus and
-		//		the content is changed.
-	},
-	_normalizeCommand: function(/*String*/ cmd, /*Anything?*/argument){
-		// summary:
-		//		Used as the advice function by dojo.connect to map our
-		//		normalized set of commands to those supported by the target
-		//		browser.
-		// tags:
-		//		private
-
-		var command = cmd.toLowerCase();
-		if(command == "formatblock"){
-			if(dojo.isSafari && argument === undefined){ command = "heading"; }
-		}else if(command == "hilitecolor" && !dojo.isMoz){
-			command = "backcolor";
-		}
-
-		return command;
-	},
-
-	_qcaCache: {},
-	queryCommandAvailable: function(/*String*/ command){
-		// summary:
-		//		Tests whether a command is supported by the host. Clients
-		//		SHOULD check whether a command is supported before attempting
-		//		to use it, behaviour for unsupported commands is undefined.
-		// command:
-		//		The command to test for
-		// tags:
-		//		private
-
-		// memoizing version. See _queryCommandAvailable for computing version
-		var ca = this._qcaCache[command];
-		if(ca !== undefined){ return ca; }
-		return (this._qcaCache[command] = this._queryCommandAvailable(command));
-	},
-
-	_queryCommandAvailable: function(/*String*/ command){
-		// summary:
-		//		See queryCommandAvailable().
-		// tags:
-		//		private
-
-		var ie = 1;
-		var mozilla = 1 << 1;
-		var webkit = 1 << 2;
-		var opera = 1 << 3;
-		var webkit420 = 1 << 4;
-
-		function isSupportedBy(browsers){
-			return {
-				ie: Boolean(browsers & ie),
-				mozilla: Boolean(browsers & mozilla),
-				webkit: Boolean(browsers & webkit),
-				webkit420: Boolean(browsers & webkit420),
-				opera: Boolean(browsers & opera)
-			};
-		}
-
-		var supportedBy = null;
-
-		switch(command.toLowerCase()){
-			case "bold": case "italic": case "underline":
-			case "subscript": case "superscript":
-			case "fontname": case "fontsize":
-			case "forecolor": case "hilitecolor":
-			case "justifycenter": case "justifyfull": case "justifyleft":
-			case "justifyright": case "delete": case "selectall": case "toggledir":
-				supportedBy = isSupportedBy(mozilla | ie | webkit | opera);
-				break;
-
-			case "createlink": case "unlink": case "removeformat":
-			case "inserthorizontalrule": case "insertimage":
-			case "insertorderedlist": case "insertunorderedlist":
-			case "indent": case "outdent": case "formatblock":
-			case "inserthtml": case "undo": case "redo": case "strikethrough": case "tabindent":
-				supportedBy = isSupportedBy(mozilla | ie | opera | webkit420);
-				break;
-
-			case "blockdirltr": case "blockdirrtl":
-			case "dirltr": case "dirrtl":
-			case "inlinedirltr": case "inlinedirrtl":
-				supportedBy = isSupportedBy(ie);
-				break;
-			case "cut": case "copy": case "paste":
-				supportedBy = isSupportedBy( ie | mozilla | webkit420);
-				break;
-
-			case "inserttable":
-				supportedBy = isSupportedBy(mozilla | ie);
-				break;
-
-			case "insertcell": case "insertcol": case "insertrow":
-			case "deletecells": case "deletecols": case "deleterows":
-			case "mergecells": case "splitcell":
-				supportedBy = isSupportedBy(ie | mozilla);
-				break;
-
-			default: return false;
-		}
-
-		return (dojo.isIE && supportedBy.ie) ||
-			(dojo.isMoz && supportedBy.mozilla) ||
-			(dojo.isWebKit && supportedBy.webkit) ||
-			(dojo.isWebKit > 420 && supportedBy.webkit420) ||
-			(dojo.isOpera && supportedBy.opera);	// Boolean return true if the command is supported, false otherwise
-	},
-
-	execCommand: function(/*String*/ command, argument){
-		// summary:
-		//		Executes a command in the Rich Text area
-		// command:
-		//		The command to execute
-		// argument:
-		//		An optional argument to the command
-		// tags:
-		//		protected
-		var returnValue;
-
-		//focus() is required for IE to work
-		//In addition, focus() makes sure after the execution of
-		//the command, the editor receives the focus as expected
-		this.focus();
-
-		command = this._normalizeCommand(command, argument);
-
-
-		if(argument !== undefined){
-			if(command == "heading"){
-				throw new Error("unimplemented");
-			}else if((command == "formatblock") && dojo.isIE){
-				argument = '<'+argument+'>';
-			}
-		}
-
-		//Check to see if we have any over-rides for commands, they will be functions on this
-		//widget of the form _commandImpl.  If we don't, fall through to the basic native
-		//exec command of the browser.
-		var implFunc = "_" + command + "Impl";
-		if(this[implFunc]){
-			returnValue = this[implFunc](argument);
-		}else{
-			argument = arguments.length > 1 ? argument : null;
-			if(argument || command!="createlink"){
-				returnValue = this.document.execCommand(command, false, argument);
-			}
-		}
-
-		this.onDisplayChanged();
-		return returnValue;
-	},
-
-	queryCommandEnabled: function(/*String*/ command){
-		// summary:
-		//		Check whether a command is enabled or not.
-		// tags:
-		//		protected
-		if(this.disabled || !this._disabledOK){ return false; }
-		command = this._normalizeCommand(command);
-		if(dojo.isMoz || dojo.isWebKit){
-			if(command == "unlink"){ // mozilla returns true always
-				// console.debug(this._sCall("hasAncestorElement", ['a']));
-				return this._sCall("hasAncestorElement", ["a"]);
-			}else if(command == "inserttable"){
-				return true;
-			}
-		}
-		//see #4109
-		if(dojo.isWebKit){
-			if(command == "copy"){
-				command = "cut";
-			}else if(command == "paste"){
-				return true;
-			}
-		}
-
-		var elem = dojo.isIE ? this.document.selection.createRange() : this.document;
-		try{
-			return elem.queryCommandEnabled(command);
-		}catch(e){
-			//Squelch, occurs if editor is hidden on FF 3 (and maybe others.)
-			return false;
-		}
-
-	},
-
-	queryCommandState: function(command){
-		// summary:
-		//		Check the state of a given command and returns true or false.
-		// tags:
-		//		protected
-
-		if(this.disabled || !this._disabledOK){ return false; }
-		command = this._normalizeCommand(command);
-		try{
-			return this.document.queryCommandState(command);
-		}catch(e){
-			//Squelch, occurs if editor is hidden on FF 3 (and maybe others.)
-			return false;
-		}
-	},
-
-	queryCommandValue: function(command){
-		// summary:
-		//		Check the value of a given command. This matters most for
-		//		custom selections and complex values like font value setting.
-		// tags:
-		//		protected
-
-		if(this.disabled || !this._disabledOK){ return false; }
-		var r;
-		command = this._normalizeCommand(command);
-		if(dojo.isIE && command == "formatblock"){
-			r = this._native2LocalFormatNames[this.document.queryCommandValue(command)];
-		}else if(dojo.isMoz && command === "hilitecolor"){
-			var oldValue;
-			try{
-				oldValue = this.document.queryCommandValue("styleWithCSS");
-			}catch(e){
-				oldValue = false;
-			}
-			this.document.execCommand("styleWithCSS", false, true);
-			r = this.document.queryCommandValue(command);
-			this.document.execCommand("styleWithCSS", false, oldValue);
-		}else{
-			r = this.document.queryCommandValue(command);
-		}
-		return r;
-	},
-
-	// Misc.
-
-	_sCall: function(name, args){
-		// summary:
-		//		Run the named method of dijit._editor.selection over the
-		//		current editor instance's window, with the passed args.
-		// tags:
-		//		private
-		return dojo.withGlobal(this.window, name, dijit._editor.selection, args);
-	},
-
-	// FIXME: this is a TON of code duplication. Why?
-
-	placeCursorAtStart: function(){
-		// summary:
-		//		Place the cursor at the start of the editing area.
-		// tags:
-		//		private
-
-		this.focus();
-
-		//see comments in placeCursorAtEnd
-		var isvalid=false;
-		if(dojo.isMoz){
-			// TODO:  Is this branch even necessary?
-			var first=this.editNode.firstChild;
-			while(first){
-				if(first.nodeType == 3){
-					if(first.nodeValue.replace(/^\s+|\s+$/g, "").length>0){
-						isvalid=true;
-						this._sCall("selectElement", [ first ]);
-						break;
-					}
-				}else if(first.nodeType == 1){
-					isvalid=true;
-					var tg = first.tagName ? first.tagName.toLowerCase() : "";
-					// Collapse before childless tags.
-					if(/br|input|img|base|meta|area|basefont/.test(tg)){
-						this._sCall("selectElement", [ first ]);
-					}else{
-						// Collapse inside tags with children.
-						this._sCall("selectElementChildren", [ first ]);
-					}
-					break;
-				}
-				first = first.nextSibling;
-			}
-		}else{
-			isvalid=true;
-			this._sCall("selectElementChildren", [ this.editNode ]);
-		}
-		if(isvalid){
-			this._sCall("collapse", [ true ]);
-		}
-	},
-
-	placeCursorAtEnd: function(){
-		// summary:
-		//		Place the cursor at the end of the editing area.
-		// tags:
-		//		private
-
-		this.focus();
-
-		//In mozilla, if last child is not a text node, we have to use
-		// selectElementChildren on this.editNode.lastChild otherwise the
-		// cursor would be placed at the end of the closing tag of
-		//this.editNode.lastChild
-		var isvalid=false;
-		if(dojo.isMoz){
-			var last=this.editNode.lastChild;
-			while(last){
-				if(last.nodeType == 3){
-					if(last.nodeValue.replace(/^\s+|\s+$/g, "").length>0){
-						isvalid=true;
-						this._sCall("selectElement", [ last ]);
-						break;
-					}
-				}else if(last.nodeType == 1){
-					isvalid=true;
-					if(last.lastChild){
-						this._sCall("selectElement", [ last.lastChild ]);
-					}else{
-						this._sCall("selectElement", [ last ]);
-					}
-					break;
-				}
-				last = last.previousSibling;
-			}
-		}else{
-			isvalid=true;
-			this._sCall("selectElementChildren", [ this.editNode ]);
-		}
-		if(isvalid){
-			this._sCall("collapse", [ false ]);
-		}
-	},
-
-	getValue: function(/*Boolean?*/ nonDestructive){
-		// summary:
-		//		Return the current content of the editing area (post filters
-		//		are applied).  Users should call attr('value') instead.
-		//	nonDestructive:
-		//		defaults to false. Should the post-filtering be run over a copy
-		//		of the live DOM? Most users should pass "true" here unless they
-		//		*really* know that none of the installed filters are going to
-		//		mess up the editing session.
-		// tags:
-		//		private
-		if(this.textarea){
-			if(this.isClosed || !this.isLoaded){
-				return this.textarea.value;
-			}
-		}
-
-		return this._postFilterContent(null, nonDestructive);
-	},
-	_getValueAttr: function(){
-		// summary:
-		//		Hook to make attr("value") work
-		return this.getValue(true);
-	},
-
-	setValue: function(/*String*/ html){
-		// summary:
-		//		This function sets the content. No undo history is preserved.
-		//		Users should use attr('value', ...) instead.
-		// tags:
-		//		deprecated
-
-		// TODO: remove this and getValue() for 2.0, and move code to _setValueAttr()
-
-		if(!this.isLoaded){
-			// try again after the editor is finished loading
-			this.onLoadDeferred.addCallback(dojo.hitch(this, function(){
-				this.setValue(html);
-			}));
-			return;
-		}
-		if(this.textarea && (this.isClosed || !this.isLoaded)){
-			this.textarea.value=html;
-		}else{
-			html = this._preFilterContent(html);
-			var node = this.isClosed ? this.domNode : this.editNode;
-
-			// Use &nbsp; to avoid webkit problems where editor is disabled until the user clicks it
-			if(!html && dojo.isWebKit){
-				this._cursorToStart = true;
-				html = "&nbsp;";
-			}
-			node.innerHTML = html;
-			this._preDomFilterContent(node);
-		}
-		this.onDisplayChanged();
-	},
-
-	replaceValue: function(/*String*/ html){
-		// summary:
-		//		This function set the content while trying to maintain the undo stack
-		//		(now only works fine with Moz, this is identical to setValue in all
-		//		other browsers)
-		// tags:
-		//		protected
-
-		if(this.isClosed){
-			this.setValue(html);
-		}else if(this.window && this.window.getSelection && !dojo.isMoz){ // Safari
-			// look ma! it's a totally f'd browser!
-			this.setValue(html);
-		}else if(this.window && this.window.getSelection){ // Moz
-			html = this._preFilterContent(html);
-			this.execCommand("selectall");
-			if(!html){ 
-				this._cursorToStart = true;
-				html = "&nbsp;"; 
-			}
-			this.execCommand("inserthtml", html);
-			this._preDomFilterContent(this.editNode);
-		}else if(this.document && this.document.selection){//IE
-			//In IE, when the first element is not a text node, say
-			//an <a> tag, when replacing the content of the editing
-			//area, the <a> tag will be around all the content
-			//so for now, use setValue for IE too
-			this.setValue(html);
-		}
-	},
-
-	_preFilterContent: function(/*String*/ html){
-		// summary:
-		//		Filter the input before setting the content of the editing
-		//		area. DOM pre-filtering may happen after this
-		//		string-based filtering takes place but as of 1.2, this is not
-		//		guaranteed for operations such as the inserthtml command.
-		// tags:
-		//		private
-
-		var ec = html;
-		dojo.forEach(this.contentPreFilters, function(ef){ if(ef){ ec = ef(ec); } });
-		return ec;
-	},
-	_preDomFilterContent: function(/*DomNode*/ dom){
-		// summary:
-		//		filter the input's live DOM. All filter operations should be
-		//		considered to be "live" and operating on the DOM that the user
-		//		will be interacting with in their editing session.
-		// tags:
-		//		private
-		dom = dom || this.editNode;
-		dojo.forEach(this.contentDomPreFilters, function(ef){
-			if(ef && dojo.isFunction(ef)){
-				ef(dom);
-			}
-		}, this);
-	},
-
-	_postFilterContent: function(
-		/*DomNode|DomNode[]|String?*/ dom,
-		/*Boolean?*/ nonDestructive){
-		// summary:
-		//		filter the output after getting the content of the editing area
-		//
-		// description:
-		//		post-filtering allows plug-ins and users to specify any number
-		//		of transforms over the editor's content, enabling many common
-		//		use-cases such as transforming absolute to relative URLs (and
-		//		vice-versa), ensuring conformance with a particular DTD, etc.
-		//		The filters are registered in the contentDomPostFilters and
-		//		contentPostFilters arrays. Each item in the
-		//		contentDomPostFilters array is a function which takes a DOM
-		//		Node or array of nodes as its only argument and returns the
-		//		same. It is then passed down the chain for further filtering.
-		//		The contentPostFilters array behaves the same way, except each
-		//		member operates on strings. Together, the DOM and string-based
-		//		filtering allow the full range of post-processing that should
-		//		be necessaray to enable even the most agressive of post-editing
-		//		conversions to take place.
-		//
-		//		If nonDestructive is set to "true", the nodes are cloned before
-		//		filtering proceeds to avoid potentially destructive transforms
-		//		to the content which may still needed to be edited further.
-		//		Once DOM filtering has taken place, the serialized version of
-		//		the DOM which is passed is run through each of the
-		//		contentPostFilters functions.
-		//
-		//	dom:
-		//		a node, set of nodes, which to filter using each of the current
-		//		members of the contentDomPostFilters and contentPostFilters arrays.
-		//
-		//	nonDestructive:
-		//		defaults to "false". If true, ensures that filtering happens on
-		//		a clone of the passed-in content and not the actual node
-		//		itself.
-		//
-		// tags:
-		//		private
-
-		var ec;
-		if(!dojo.isString(dom)){
-			dom = dom || this.editNode;
-			if(this.contentDomPostFilters.length){
-				if(nonDestructive){
-					dom = dojo.clone(dom);
-				}
-				dojo.forEach(this.contentDomPostFilters, function(ef){
-					dom = ef(dom);
-				});
-			}
-			ec = dijit._editor.getChildrenHtml(dom);
-		}else{
-			ec = dom;
-		}
-
-		if(!dojo.trim(ec.replace(/^\xA0\xA0*/, '').replace(/\xA0\xA0*$/, '')).length){
-			ec = "";
-		}
-
-		//	if(dojo.isIE){
-		//		//removing appended <P>&nbsp;</P> for IE
-		//		ec = ec.replace(/(?:<p>&nbsp;</p>[\n\r]*)+$/i,"");
-		//	}
-		dojo.forEach(this.contentPostFilters, function(ef){
-			ec = ef(ec);
-		});
-
-		return ec;
-	},
-
-	_saveContent: function(/*Event*/ e){
-		// summary:
-		//		Saves the content in an onunload event if the editor has not been closed
-		// tags:
-		//		private
-
-		var saveTextarea = dojo.byId(dijit._scopeName + "._editor.RichText.savedContent");
-		if(saveTextarea.value){
-			saveTextarea.value += this._SEPARATOR;
-		}
-		saveTextarea.value += this.name + ":" + this.getValue(true);
-	},
-
-
-	escapeXml: function(/*String*/ str, /*Boolean*/ noSingleQuotes){
-		// summary:
-		//		Adds escape sequences for special characters in XML: &<>"'
-		//		Optionally skips escapes for single quotes
-		// tags:
-		//		private
-
-		str = str.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
-		if(!noSingleQuotes){
-			str = str.replace(/'/gm, "&#39;");
-		}
-		return str; // string
-	},
-
-	getNodeHtml: function(/* DomNode */ node){
-		// summary:
-		//		Deprecated.   Use dijit._editor._getNodeHtml() instead.
-		// tags:
-		//		deprecated
-		dojo.deprecated('dijit.Editor::getNodeHtml is deprecated','use dijit._editor.getNodeHtml instead', 2);
-		return dijit._editor.getNodeHtml(node); // String
-	},
-
-	getNodeChildrenHtml: function(/* DomNode */ dom){
-		// summary:
-		//		Deprecated.   Use dijit._editor.getChildrenHtml() instead.
-		// tags:
-		//		deprecated
-		dojo.deprecated('dijit.Editor::getNodeChildrenHtml is deprecated','use dijit._editor.getChildrenHtml instead', 2);
-		return dijit._editor.getChildrenHtml(dom);
-	},
-
-	close: function(/*Boolean*/ save){
-		// summary:
-		//		Kills the editor and optionally writes back the modified contents to the
-		//		element from which it originated.
-		// save:
-		//		Whether or not to save the changes. If false, the changes are discarded.
-		// tags:
-		//		private
-
-		if(this.isClosed){return false; }
-
-		if(!arguments.length){ save = true; }
-		this._content = this.getValue();
-		var changed = (this.savedContent != this._content);
-
-		// line height is squashed for iframes
-		// FIXME: why was this here? if (this.iframe){ this.domNode.style.lineHeight = null; }
-
-		if(this.interval){ clearInterval(this.interval); }
-
-		if(this._webkitListener){
-			//Cleaup of WebKit fix: #9532
-			this.disconnect(this._webkitListener);
-			delete this._webkitListener;
-		}
-
-		// Guard against memory leaks on IE (see #9268)
-		if(dojo.isIE){
-			 this.iframe.onfocus = null;
-		}
-		this.iframe._loadFunc = null;
-
-		if(this._iframeRegHandle){
-			dijit.unregisterIframe(this._iframeRegHandle);
-			delete this._iframeRegHandle;
-		}
-
-		if(this.textarea){
-			var s = this.textarea.style;
-			s.position = "";
-			s.left = s.top = "";
-			if(dojo.isIE){
-				s.overflow = this.__overflow;
-				this.__overflow = null;
-			}
-			this.textarea.value = save ? this._content : this.savedContent;
-			dojo.destroy(this.domNode);
-			this.domNode = this.textarea;
-		}else{
-			// if(save){
-			// why we treat moz differently? comment out to fix #1061
-			//		if(dojo.isMoz){
-			//			var nc = dojo.doc.createElement("span");
-			//			this.domNode.appendChild(nc);
-			//			nc.innerHTML = this.editNode.innerHTML;
-			//		}else{
-			//			this.domNode.innerHTML = this._content;
-			//		}
-			// }
-
-			// Note that this destroys the iframe
-			this.domNode.innerHTML = save ? this._content : this.savedContent;
-		}
-		delete this.iframe;
-
-		dojo.removeClass(this.domNode, "RichTextEditable");
-		this.isClosed = true;
-		this.isLoaded = false;
-
-		delete this.editNode;
-		delete this.focusNode;
-
-		if(this.window && this.window._frameElement){
-			this.window._frameElement = null;
-		}
-
-		this.window = null;
-		this.document = null;
-		this.editingArea = null;
-		this.editorObject = null;
-
-		return changed; // Boolean: whether the content has been modified
-	},
-
-	destroy: function(){
-		if(!this.isClosed){ this.close(false); }
-		this.inherited(arguments);
-	},
-
-	_removeMozBogus: function(/* String */ html){
-		// summary:
-		//		Post filter to remove unwanted HTML attributes generated by mozilla
-		// tags:
-		//		private
-		return html.replace(/\stype="_moz"/gi, '').replace(/\s_moz_dirty=""/gi, '').replace(/_moz_resizing="(true|false)"/gi,''); // String
-	},
-	_removeWebkitBogus: function(/* String */ html){
-		// summary:
-		//		Post filter to remove unwanted HTML attributes generated by webkit
-		// tags:
-		//		private
-		html = html.replace(/\sclass="webkit-block-placeholder"/gi, '');
-		html = html.replace(/\sclass="apple-style-span"/gi, '');
-		return html; // String
-	},
-	_normalizeFontStyle: function(/* String */ html){
-		// summary:
-		//		Convert <strong> and <em> to <b> and <i>.
-		// description:
-		//		Moz can not handle strong/em tags correctly, so to help
-		//		mozilla and also to normalize output, convert them to <b> and <i>.
-		//
-		//		Note the IE generates <strong> and <em> rather than <b> and <i>
-		// tags:
-		//		private
-		return html.replace(/<(\/)?strong([ \>])/gi, '<$1b$2')
-			.replace(/<(\/)?em([ \>])/gi, '<$1i$2' ); // String
-	},
-
-	_preFixUrlAttributes: function(/* String */ html){
-		// summary:
-		//		Pre-filter to do fixing to href attributes on <a> and <img> tags
-		// tags:
-		//		private
-		return html.replace(/(?:(<a(?=\s).*?\shref=)("|')(.*?)\2)|(?:(<a\s.*?href=)([^"'][^ >]+))/gi,
-				'$1$4$2$3$5$2 _djrealurl=$2$3$5$2')
-			.replace(/(?:(<img(?=\s).*?\ssrc=)("|')(.*?)\2)|(?:(<img\s.*?src=)([^"'][^ >]+))/gi,
-				'$1$4$2$3$5$2 _djrealurl=$2$3$5$2'); // String
-	},
-
-	/*****************************************************************************
-		The following functions implement HTML manipulation commands for various
-		browser/contentEditable implementations.  The goal of them is to enforce
-		standard behaviors of them.
-	******************************************************************************/
-
-	_inserthorizontalruleImpl: function(argument){
-		// summary:
-		//		This function implements the insertion of HTML <HR> tags.
-		//		into a point on the page.  IE doesn't to it right, so
-		//		we have to use an alternate form
-		// argument:
-		//		arguments to the exec command, if any.
-		// tags:
-		//		protected
-		if(dojo.isIE){
-			return this._inserthtmlImpl("<hr>");
-		}
-		return this.document.execCommand("inserthorizontalrule", false, argument);
-	},
-
-	_unlinkImpl: function(argument){
-		// summary:
-		//		This function implements the unlink of an <a> tag.
-		// argument:
-		//		arguments to the exec command, if any.
-		// tags:
-		//		protected
-		if((this.queryCommandEnabled("unlink")) && (dojo.isMoz || dojo.isWebKit)){
-			var a = this._sCall("getAncestorElement", [ "a" ]);
-			this._sCall("selectElement", [ a ]);
-			return this.document.execCommand("unlink", false, null);
-		}
-		return this.document.execCommand("unlink", false, argument);
-	},
-
-	_hilitecolorImpl: function(argument){
-		// summary:
-		//		This function implements the hilitecolor command
-		// argument:
-		//		arguments to the exec command, if any.
-		// tags:
-		//		protected
-		var returnValue;
-		if(dojo.isMoz){
-			// mozilla doesn't support hilitecolor properly when useCSS is
-			// set to false (bugzilla #279330)
-			this.document.execCommand("styleWithCSS", false, true);
-			returnValue = this.document.execCommand("hilitecolor", false, argument);
-			this.document.execCommand("styleWithCSS", false, false);
-		}else{
-			returnValue = this.document.execCommand("hilitecolor", false, argument);
-		}
-		return returnValue;
-	},
-
-	_backcolorImpl: function(argument){
-		// summary:
-		//		This function implements the backcolor command
-		// argument:
-		//		arguments to the exec command, if any.
-		// tags:
-		//		protected
-		if(dojo.isIE){
-			// Tested under IE 6 XP2, no problem here, comment out
-			// IE weirdly collapses ranges when we exec these commands, so prevent it
-			//	var tr = this.document.selection.createRange();
-			argument = argument ? argument : null;
-		}
-		return this.document.execCommand("backcolor", false, argument);
-	},
-
-	_forecolorImpl: function(argument){
-		// summary:
-		//		This function implements the forecolor command
-		// argument:
-		//		arguments to the exec command, if any.
-		// tags:
-		//		protected
-		if(dojo.isIE){
-			// Tested under IE 6 XP2, no problem here, comment out
-			// IE weirdly collapses ranges when we exec these commands, so prevent it
-			//	var tr = this.document.selection.createRange();
-			argument = argument? argument : null;
-		}
-		return this.document.execCommand("forecolor", false, argument);
-	},
-
-	_inserthtmlImpl: function(argument){
-		// summary:
-		//		This function implements the insertion of HTML content into
-		//		a point on the page.
-		// argument:
-		//		The content to insert, if any.
-		// tags:
-		//		protected
-		argument = this._preFilterContent(argument);
-		var rv = true;
-		if(dojo.isIE){
-			var insertRange = this.document.selection.createRange();
-			if(this.document.selection.type.toUpperCase() == 'CONTROL'){
-				var n=insertRange.item(0);
-				while(insertRange.length){
-					insertRange.remove(insertRange.item(0));
-				}
-				n.outerHTML=argument;
-			}else{
-				insertRange.pasteHTML(argument);
-			}
-			insertRange.select();
-			//insertRange.collapse(true);
-		}else if(dojo.isMoz && !argument.length){
-			//mozilla can not inserthtml an empty html to delete current selection
-			//so we delete the selection instead in this case
-			this._sCall("remove"); // FIXME
-		}else{
-			rv = this.document.execCommand("inserthtml", false, argument);
-		}
-		return rv;
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/_Plugin.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/_Plugin.js
deleted file mode 100644
index ffcd59f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/_Plugin.js
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._editor._Plugin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor._Plugin"] = true;
-dojo.provide("dijit._editor._Plugin");
-dojo.require("dijit._Widget");
-dojo.require("dijit.Editor");
-dojo.require("dijit.form.Button");
-
-dojo.declare("dijit._editor._Plugin", null, {
-	// summary
-	//		Base class for a "plugin" to the editor, which is usually
-	//		a single button on the Toolbar and some associated code
-
-	constructor: function(/*Object?*/args, /*DomNode?*/node){
-		this.params = args || {};
-		dojo.mixin(this, this.params);
-		this._connects=[];
-	},
-
-	// editor: [const] dijit.Editor
-	//		Points to the parent editor
-	editor: null,
-
-	// iconClassPrefix: [const] String
-	//		The CSS class name for the button node is formed from `iconClassPrefix` and `command`
-	iconClassPrefix: "dijitEditorIcon",
-
-	// button: dijit._Widget?
-	//		Pointer to `dijit.form.Button` or other widget (ex: `dijit.form.FilteringSelect`)
-	//		that is added to the toolbar to control this plugin.
-	//		If not specified, will be created on initialization according to `buttonClass`
-	button: null,
-
-	// command: String
-	//		String like "insertUnorderedList", "outdent", "justifyCenter", etc. that represents an editor command.
-	//		Passed to editor.execCommand() if `useDefaultCommand` is true.
-	command: "",
-
-	// useDefaultCommand: Boolean
-	//		If true, this plugin executes by calling Editor.execCommand() with the argument specified in `command`.
-	useDefaultCommand: true,
-
-	// buttonClass: Widget Class
-	//		Class of widget (ex: dijit.form.Button or dijit.form.FilteringSelect)
-	//		that is added to the toolbar to control this plugin.
-	//		This is used to instantiate the button, unless `button` itself is specified directly.
-	buttonClass: dijit.form.Button,
-
-	getLabel: function(/*String*/key){
-		// summary:
-		//		Returns the label to use for the button
-		// tags:
-		//		private
-		return this.editor.commands[key];		// String
-	},
-
-	_initButton: function(){
-		// summary:
-		//		Initialize the button or other widget that will control this plugin.
-		//		This code only works for plugins controlling built-in commands in the editor.
-		// tags:
-		//		protected extension
-		if(this.command.length){
-			var label = this.getLabel(this.command);
-			var className = this.iconClassPrefix+" "+this.iconClassPrefix + this.command.charAt(0).toUpperCase() + this.command.substr(1);
-			if(!this.button){
-				var props = dojo.mixin({
-					label: label,
-					showLabel: false,
-					iconClass: className,
-					dropDown: this.dropDown,
-					tabIndex: "-1"
-				}, this.params || {});
-				this.button = new this.buttonClass(props);
-			}
-		}
-	},
-
-	destroy: function(){
-		// summary:
-		//		Destroy this plugin
-
-		dojo.forEach(this._connects, dojo.disconnect);
-		if(this.dropDown){
-			this.dropDown.destroyRecursive();
-		}
-	},
-
-	connect: function(o, f, tf){
-		// summary:
-		//		Make a dojo.connect() that is automatically disconnected when this plugin is destroyed.
-		//		Similar to `dijit._Widget.connect`.
-		// tags:
-		//		protected
-		this._connects.push(dojo.connect(o, f, this, tf));
-	},
-
-	updateState: function(){
-		// summary:
-		//		Change state of the plugin to respond to events in the editor.
-		// description:
-		//		This is called on meaningful events in the editor, such as change of selection
-		//		or caret position (but not simple typing of alphanumeric keys).   It gives the
-		//		plugin a chance to update the CSS of its button.
-		//
-		//		For example, the "bold" plugin will highlight/unhighlight the bold button depending on whether the
-		//		characters next to the caret are bold or not.
-		//
-		//		Only makes sense when `useDefaultCommand` is true, as it calls Editor.queryCommandEnabled(`command`).
-		var e = this.editor,
-			c = this.command,
-			checked, enabled;
-		if(!e || !e.isLoaded || !c.length){ return; }
-		if(this.button){
-			try{
-				enabled = e.queryCommandEnabled(c);
-				if(this.enabled !== enabled){
-					this.enabled = enabled;
-					this.button.attr('disabled', !enabled);
-				}
-				if(typeof this.button.checked == 'boolean'){
-					checked = e.queryCommandState(c);
-					if(this.checked !== checked){
-						this.checked = checked;
-						this.button.attr('checked', e.queryCommandState(c));
-					}
-				}
-			}catch(e){
-				console.log(e); // FIXME: we shouldn't have debug statements in our code.  Log as an error?
-			}
-		}
-	},
-
-	setEditor: function(/*dijit.Editor*/ editor){
-		// summary:
-		//		Tell the plugin which Editor it is associated with.
-
-		// TODO: refactor code to just pass editor to constructor.
-
-		// FIXME: detach from previous editor!!
-		this.editor = editor;
-
-		// FIXME: prevent creating this if we don't need to (i.e., editor can't handle our command)
-		this._initButton();
-
-		// FIXME: wire up editor to button here!
-		if(this.command.length &&
-			!this.editor.queryCommandAvailable(this.command)){
-			// console.debug("hiding:", this.command);
-			if(this.button){
-				this.button.domNode.style.display = "none";
-			}
-		}
-		if(this.button && this.useDefaultCommand){
-			this.connect(this.button, "onClick",
-				dojo.hitch(this.editor, "execCommand", this.command, this.commandArg)
-			);
-		}
-		this.connect(this.editor, "onNormalizedDisplayChanged", "updateState");
-	},
-
-	setToolbar: function(/*dijit.Toolbar*/ toolbar){
-		// summary:
-		//		Tell the plugin to add it's controller widget (often a button)
-		//		to the toolbar.  Does nothing if there is no controller widget.
-
-		// TODO: refactor code to just pass toolbar to constructor.
-
-		if(this.button){
-			toolbar.addChild(this.button);
-		}
-		// console.debug("adding", this.button, "to:", toolbar);
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/html.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/html.js
deleted file mode 100644
index 43048a8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/html.js
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._editor.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.html"] = true;
-dojo.provide("dijit._editor.html");
-
-dijit._editor.escapeXml=function(/*String*/str, /*Boolean?*/noSingleQuotes){
-	// summary:
-	//		Adds escape sequences for special characters in XML: &<>"'
-	//		Optionally skips escapes for single quotes
-	str = str.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
-	if(!noSingleQuotes){
-		str = str.replace(/'/gm, "&#39;");
-	}
-	return str; // string
-};
-
-dijit._editor.getNodeHtml=function(/* DomNode */node){
-	var output;
-	switch(node.nodeType){
-		case 1: //element node
-			var lName = node.nodeName.toLowerCase();
-			if(lName.charAt(0) == "/"){
-				// IE does some strange things with malformed HTML input, like
-				// treating a close tag </span> without an open tag <span>, as
-				// a new tag with tagName of /span.  Corrupts output HTML, remove
-				// them.  Other browsers don't prefix tags that way, so will
-				// never show up.
-				return "";
-			}
-			output = '<' + lName;
-
-			//store the list of attributes and sort it to have the
-			//attributes appear in the dictionary order
-			var attrarray = [];
-			var attr;
-			if(dojo.isIE && node.outerHTML){
-				var s = node.outerHTML;
-				s = s.substr(0, s.indexOf('>'))
-					.replace(/(['"])[^"']*\1/g, ''); //to make the following regexp safe
-				var reg = /(\b\w+)\s?=/g;
-				var m, key;
-				while((m = reg.exec(s))){
-					key = m[1];
-					if(key.substr(0,3) != '_dj'){
-						if(key == 'src' || key == 'href'){
-							if(node.getAttribute('_djrealurl')){
-								attrarray.push([key,node.getAttribute('_djrealurl')]);
-								continue;
-							}
-						}
-						var val, match;
-						switch(key){
-							case 'style':
-								val = node.style.cssText.toLowerCase();
-								break;
-							case 'class':
-								val = node.className;
-								break;
-							case 'width':
-								if(lName === "img"){
-									// This somehow gets lost on IE for IMG tags and the like
-									// and we have to find it in outerHTML, known IE oddity.
-									match=/width=(\S+)/i.exec(s);
-									if(match){
-										val = match[1];
-									}
-									break;
-								}
-							case 'height':
-								if(lName === "img"){
-									// This somehow gets lost on IE for IMG tags and the like
-									// and we have to find it in outerHTML, known IE oddity.
-									match=/height=(\S+)/i.exec(s);
-									if(match){
-										val = match[1];
-									}
-									break;
-								}
-							default:
-								val = node.getAttribute(key);
-						}
-						if(val != null){
-							attrarray.push([key, val.toString()]);
-						}
-					}
-				}
-			}else{
-				var i = 0;
-				while((attr = node.attributes[i++])){
-					//ignore all attributes starting with _dj which are
-					//internal temporary attributes used by the editor
-					var n = attr.name;
-					if(n.substr(0,3) != '_dj' /*&&
-						(attr.specified == undefined || attr.specified)*/){
-						var v = attr.value;
-						if(n == 'src' || n == 'href'){
-							if(node.getAttribute('_djrealurl')){
-								v = node.getAttribute('_djrealurl');
-							}
-						}
-						attrarray.push([n,v]);
-					}
-				}
-			}
-			attrarray.sort(function(a,b){
-				return a[0] < b[0] ? -1 : (a[0] == b[0] ? 0 : 1);
-			});
-			var j = 0;
-			while((attr = attrarray[j++])){
-				output += ' ' + attr[0] + '="' +
-					(dojo.isString(attr[1]) ? dijit._editor.escapeXml(attr[1], true) : attr[1]) + '"';
-			}
-			if(lName === "script"){
-				// Browsers handle script tags differently in how you get content,
-				// but innerHTML always seems to work, so insert its content that way
-				// Yes, it's bad to allow script tags in the editor code, but some people
-				// seem to want to do it, so we need to at least return them right.
-				// other plugins/filters can strip them.
-				output += '>' + node.innerHTML +'</' + lName + '>';
-			}else{
-				if(node.childNodes.length){
-					output += '>' + dijit._editor.getChildrenHtml(node)+'</' + lName +'>';
-				}else{
-					switch(lName){
-						case 'br':
-						case 'hr':
-						case 'img':
-						case 'input':
-						case 'base':
-						case 'meta':
-						case 'area':
-						case 'basefont':
-							// These should all be singly closed
-							output += ' />';
-							break;
-						default:
-							// Assume XML style separate closure for everything else.
-							output += '></' + lName + '>';
-					}
-				}
-			}
-			break;
-		case 4: // cdata
-		case 3: // text
-			// FIXME:
-			output = dijit._editor.escapeXml(node.nodeValue, true);
-			break;
-		case 8: //comment
-			// FIXME:
-			output = '<!--' + dijit._editor.escapeXml(node.nodeValue, true) + '-->';
-			break;
-		default:
-			output = "<!-- Element not recognized - Type: " + node.nodeType + " Name: " + node.nodeName + "-->";
-	}
-	return output;
-};
-
-dijit._editor.getChildrenHtml = function(/* DomNode */dom){
-	// summary:
-	//		Returns the html content of a DomNode and children
-	var out = "";
-	if(!dom){ return out; }
-	var nodes = dom["childNodes"] || dom;
-
-	//IE issue.
-	//If we have an actual node we can check parent relationships on for IE,
-	//We should check, as IE sometimes builds invalid DOMS.  If no parent, we can't check
-	//And should just process it and hope for the best.
-	var checkParent = !dojo.isIE || nodes !== dom;
-
-	var node, i = 0;
-	while((node = nodes[i++])){
-		//IE is broken.  DOMs are supposed to be a tree.  But in the case of malformed HTML, IE generates a graph
-		//meaning one node ends up with multiple references (multiple parents).  This is totally wrong and invalid, but
-		//such is what it is.  We have to keep track and check for this because otherise the source output HTML will have dups.
-		//No other browser generates a graph.  Leave it to IE to break a fundamental DOM rule.  So, we check the parent if we can
-		//If we can't, nothing more we can do other than walk it.
-		if(!checkParent || node.parentNode == dom){
-			out += dijit._editor.getNodeHtml(node);
-		}
-	}
-	return out; // String
-};
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/FontChoice.js
deleted file mode 100644
index 71da48d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"xx-small","2":"x-small","formatBlock":"Format","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Paragraph","pre":"Pre-formatted","sans-serif":"sans-serif","fontName":"Font","h1":"Heading","h2":"Subheading","h3":"Sub-subheading","monospace":"monospace","fontSize":"Size","cursive":"cursive"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/LinkDialog.js
deleted file mode 100644
index 0dd81f1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"text":"Description:","insertImageTitle":"Image Properties","set":"Set","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","createLinkTitle":"Link Properties","parentWindow":"Parent Window","currentWindow":"Current Window","url":"URL:"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ar/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ar/FontChoice.js
deleted file mode 100644
index 78c3ed9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ar/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"صغير جدا جدا","2":"صغير جدا","formatBlock":"النسق","3":"صغير","4":"متوسط","5":"كبير","6":"كبير جدا","7":"كبير جدا جدا","fantasy":"خيالي","serif":"serif","p":"فقرة","pre":"منسق بصفة مسبقة","sans-serif":"sans-serif","fontName":"طاقم طباعة","h1":"عنوان","h2":"عنوان فرعي","h3":"فرعي-عنوان فرعي","monospace":"أحادي المسافة","fontSize":"الحجم","cursive":"كتابة بحروف متصلة"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ar/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ar/LinkDialog.js
deleted file mode 100644
index 8545531..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ar/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"set":"تحديد","text":"الوصف:","insertImageTitle":"خصائص الصورة","url":"عنوان URL:","createLinkTitle":"خصائص الوصلة","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ar/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ar/commands.js
deleted file mode 100644
index 23e83e7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ar/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"ازالة النسق","copy":"نسخ","paste":"لصق","selectAll":"اختيار كل","insertOrderedList":"‏كشف مرقم‏","insertTable":"ادراج/تحرير جدول","underline":"تسطير","foreColor":"لون الواجهة الأمامية","htmlToggle":"مصدر HTML","formatBlock":"نمط الفقرة","insertHorizontalRule":"مسطرة أفقية","delete":"حذف","insertUnorderedList":"كشف نقطي","tableProp":"خصائص الجدول","insertImage":"ادراج صورة","superscript":"رمز علوي","subscript":"رمز سفلي","createLink":"تكوين وصلة","undo":"تراجع","italic":"مائل","fontName":"اسم طاقم الطباعة","justifyLeft":"محاذاة الى اليسار","unlink":"ازالة وصلة","toggleTableBorder":"تبديل حدود الجدول","fontSize":"حجم طاقم الطباعة","systemShortcut":"يكون التصرف \"${0}\" متاحا فقط ببرنامج الاستعراض الخاص بك باستخدام المسار المختصر للوحة المفاتيح.  استخدم ${1}.","indent":"‏ازاحة للداخل‏","redo":"اعادة","strikethrough":"تشطيب","justifyFull":"ضبط","justifyCenter":"محاذاة في الوسط","hiliteColor":"‏لون الخلفية‏","deleteTable":"حذف جدول","outdent":"ازاحة للخارج","cut":"قص","plainFormatBlock":"نمط الفقرة","toggleDir":"تبديل الاتجاه","bold":"عريض","tabIndent":"ازاحة علامة الجدولة للداخل","justifyRight":"محاذاة الى اليمين","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ca/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ca/FontChoice.js
deleted file mode 100644
index 8d3dabe..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ca/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"xx-petit","2":"x-petit","formatBlock":"Format","3":"petit","4":"mitjà","5":"gran","6":"x-gran","7":"xx-gran","fantasy":"Fantasia","serif":"serif","p":"Paràgraf","pre":"Format previ","sans-serif":"sans-serif","fontName":"Tipus de lletra","h1":"Títol","h2":"Subtítol","h3":"Subsubtítol","monospace":"monoespai","fontSize":"Mida","cursive":"Cursiva"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ca/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ca/LinkDialog.js
deleted file mode 100644
index 7b3aa02..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ca/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"set":"Defineix","text":"Descripció:","insertImageTitle":"Propietats de la imatge","url":"URL:","createLinkTitle":"Propietats de l'enllaç","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ca/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ca/commands.js
deleted file mode 100644
index aec09d8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ca/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Elimina el format","copy":"Copia","paste":"Enganxa","selectAll":"Selecciona-ho tot","insertOrderedList":"Llista numerada","insertTable":"Insereix/edita la taula","underline":"Subratllat","foreColor":"Color de primer pla","htmlToggle":"Font HTML","formatBlock":"Estil de paràgraf","insertHorizontalRule":"Regle horitzontal","delete":"Suprimeix","insertUnorderedList":"Llista de vinyetes","tableProp":"Propietat de taula","insertImage":"Insereix imatge","superscript":"Superíndex","subscript":"Subíndex","createLink":"Crea un enllaç","undo":"Desfés","italic":"Cursiva","fontName":"Nom del tipus de lletra","justifyLeft":"Alinea a la esquerra","unlink":"Elimina l'enllaç","toggleTableBorder":"Inverteix els contorns de taula","ctrlKey":"control+${0}","fontSize":"Cos de la lletra","systemShortcut":"L'acció \"${0}\" és l'única disponible al navegador utilitzant una drecera del teclat. Utilitzeu ${1}.","indent":"Sagnat","redo":"Refés","strikethrough":"Ratllat","justifyFull":"Justifica","justifyCenter":"Centra","hiliteColor":"Color de fons","deleteTable":"Suprimeix la taula","outdent":"Sagna a l'esquerra","cut":"Retalla","plainFormatBlock":"Estil de paràgraf","toggleDir":"Inverteix la direcció","bold":"Negreta","tabIndent":"Sagnat","justifyRight":"Alinea a la dreta","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/commands.js
deleted file mode 100644
index 582b782..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Remove Format","copy":"Copy","paste":"Paste","selectAll":"Select All","insertOrderedList":"Numbered List","insertTable":"Insert/Edit Table","print":"Print","underline":"Underline","foreColor":"Foreground Color","htmlToggle":"HTML Source","formatBlock":"Paragraph Style","newPage":"New Page","insertHorizontalRule":"Horizontal Rule","delete":"Delete","appleKey":"⌘${0}","insertUnorderedList":"Bullet List","tableProp":"Table Property","insertImage":"Insert Image","superscript":"Superscript","subscript":"Subscript","createLink":"Create Link","undo":"Undo","fullScreen":"Toggle Full Screen","italic":"Italic","fontName":"Font Name","justifyLeft":"Align Left","unlink":"Remove Link","toggleTableBorder":"Toggle Table Border","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}","fontSize":"Font Size","systemShortcut":"The \"${0}\" action is only available in your browser using a keyboard shortcut. Use ${1}.","indent":"Indent","redo":"Redo","strikethrough":"Strikethrough","justifyFull":"Justify","justifyCenter":"Align Center","hiliteColor":"Background Color","deleteTable":"Delete Table","outdent":"Outdent","cut":"Cut","plainFormatBlock":"Paragraph Style","toggleDir":"Toggle Direction","bold":"Bold","tabIndent":"Tab Indent","justifyRight":"Align Right"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/cs/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/cs/FontChoice.js
deleted file mode 100644
index 4f82895..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/cs/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"extra malé","2":"velmi malé","formatBlock":"Formát","3":"malé","4":"střední","5":"velké","6":"velmi velké","7":"extra velké","fantasy":"fantasy","serif":"serif","p":"Odstavec","pre":"Předformátované","sans-serif":"sans-serif","fontName":"Písmo","h1":"Nadpis","h2":"Podnadpis","h3":"Podnadpis 2","monospace":"monospace","fontSize":"Velikost","cursive":"cursive"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/cs/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/cs/LinkDialog.js
deleted file mode 100644
index 41dad34..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/cs/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"text":"Popis:","insertImageTitle":"Vlastnosti obrázku","set":"Nastavit","newWindow":"Nové okno","topWindow":"Okno nejvyšší úrovně","target":"Cíl:","createLinkTitle":"Vlastnosti odkazu","parentWindow":"Nadřízené okno","currentWindow":"Aktuální okno","url":"Adresa URL:"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/cs/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/cs/commands.js
deleted file mode 100644
index ce51558..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/cs/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Odebrat formát","copy":"Kopírovat","paste":"Vložit","selectAll":"Vybrat vše","insertOrderedList":"Číslovaný seznam","insertTable":"Vložit/upravit tabulku","print":"Tisk","underline":"Podtržení","foreColor":"Barva popředí","htmlToggle":"Zdroj HTML","formatBlock":"Styl odstavce","newPage":"Nová stránka","insertHorizontalRule":"Vodorovná čára","delete":"Odstranit","insertUnorderedList":"Seznam s odrážkami","tableProp":"Vlastnost tabulky","insertImage":"Vložit obrázek","superscript":"Horní index","subscript":"Dolní index","createLink":"Vytvořit odkaz","undo":"Zpět","fullScreen":"Přepnout režim celé obrazovky","italic":"Kurzíva","fontName":"Název písma","justifyLeft":"Zarovnat vlevo","unlink":"Odebrat odkaz","toggleTableBorder":"Přepnout ohraničení tabulky","viewSource":"Zobrazit zdroj ve formátu HTML","fontSize":"Velikost písma","systemShortcut":"Akce \"${0}\" je v prohlížeči dostupná pouze prostřednictvím klávesové zkratky. Použijte klávesovou zkratku ${1}.","indent":"Odsadit","redo":"Opakovat","strikethrough":"Přeškrtnutí","justifyFull":"Do bloku","justifyCenter":"Zarovnat na střed","hiliteColor":"Barva pozadí","deleteTable":"Odstranit tabulku","outdent":"Předsadit","cut":"Vyjmout","plainFormatBlock":"Styl odstavce","toggleDir":"Přepnout směr","bold":"Tučné","tabIndent":"Odsazení tabulátoru","justifyRight":"Zarovnat vpravo","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/da/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/da/FontChoice.js
deleted file mode 100644
index 2ecab08..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/da/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"xx-small","2":"x-small","formatBlock":"Format","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Afsnit","pre":"Forudformateret","sans-serif":"sans-serif","fontName":"Skrifttype","h1":"Overskrift","h2":"Underoverskrift","h3":"Underunderoverskrift","monospace":"monospace","fontSize":"Størrelse","cursive":"kursiv"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/da/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/da/LinkDialog.js
deleted file mode 100644
index c7590f0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/da/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"set":"Definér","text":"Beskrivelse:","insertImageTitle":"Billedegenskaber","url":"URL:","createLinkTitle":"Linkegenskaber","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/da/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/da/commands.js
deleted file mode 100644
index b7aed14..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/da/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Fjern format","copy":"Kopiér","paste":"Sæt ind","selectAll":"Markér alle","insertOrderedList":"Nummereret liste","insertTable":"Indsæt/redigér tabel","underline":"Understreget","foreColor":"Forgrundsfarve","htmlToggle":"HTML-kilde","formatBlock":"Afsnitstypografi","insertHorizontalRule":"Vandret linje","delete":"Slet","insertUnorderedList":"Punktliste","tableProp":"Tabelegenskab","insertImage":"Indsæt billede","superscript":"Hævet skrift","subscript":"Sænket skrift","createLink":"Opret link","undo":"Fortryd","italic":"Kursiv","fontName":"Skriftnavn","justifyLeft":"Venstrejusteret","unlink":"Fjern link","toggleTableBorder":"Skift tabelramme","ctrlKey":"Ctrl+${0}","fontSize":"Skriftstørrelse","systemShortcut":"Funktionen \"${0}\" kan kun bruges i your browser med en tastaturgenvej. Brug ${1}.","indent":"Indrykning","redo":"Annullér Fortryd","strikethrough":"Gennemstreget","justifyFull":"Lige margener","justifyCenter":"Centreret","hiliteColor":"Baggrundsfarve","deleteTable":"Slet tabel","outdent":"Udrykning","cut":"Klip","plainFormatBlock":"Afsnitstypografi","toggleDir":"Skift retning","bold":"Fed","tabIndent":"Indrykning med tabulator","justifyRight":"Højrejusteret","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/de/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/de/FontChoice.js
deleted file mode 100644
index f16b312..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/de/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"XXS","2":"XS","formatBlock":"Format","3":"S","4":"M","5":"L","6":"XL","7":"XXL","fantasy":"Fantasie","serif":"Serife","p":"Absatz","pre":"Vorformatiert","sans-serif":"Serifenlos","fontName":"Schriftart","h1":"Überschrift","h2":"Unterüberschrift","h3":"Unterunterüberschrift","monospace":"Monospaceschrift","fontSize":"Größe","cursive":"Kursiv"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/de/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/de/LinkDialog.js
deleted file mode 100644
index b1eab6c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/de/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"text":"Beschreibung:","insertImageTitle":"Grafikeigenschaften","set":"Festlegen","newWindow":"Neues Fenster","topWindow":"Aktives Fenster","target":"Ziel:","createLinkTitle":"Linkeigenschaften","parentWindow":"Übergeordnetes Fenster","currentWindow":"Aktuelles Fenster","url":"URL:"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/de/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/de/commands.js
deleted file mode 100644
index 8fa589c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/de/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Formatierung entfernen","copy":"Kopieren","paste":"Einfügen","selectAll":"Alles auswählen","insertOrderedList":"Nummerierung","insertTable":"Tabelle einfügen/bearbeiten","print":"Drucken","underline":"Unterstrichen","foreColor":"Vordergrundfarbe","htmlToggle":"HTML-Quelltext","formatBlock":"Absatzstil","newPage":"Neue Seite","insertHorizontalRule":"Horizontaler Strich","delete":"Löschen","insertUnorderedList":"Aufzählungszeichen","tableProp":"Tabelleneigenschaft","insertImage":"Grafik einfügen","superscript":"Hochgestellt","subscript":"Tiefgestellt","createLink":"Link erstellen","undo":"Rückgängig","fullScreen":"Gesamtanzeige","italic":"Kursiv","fontName":"Schriftartname","justifyLeft":"Linksbündig","unlink":"Link entfernen","toggleTableBorder":"Tabellenumrandung ein-/ausschalten","viewSource":"HTML-Quelle","ctrlKey":"Strg+${0}","fontSize":"Schriftgröße","systemShortcut":"Die Aktion \"${0}\" ist nur über einen Direktaufruf in Ihrem Browser verfügbar. Verwenden Sie ${1}.","indent":"Einrücken","redo":"Wiederherstellen","strikethrough":"Durchgestrichen","justifyFull":"Blocksatz","justifyCenter":"Zentriert","hiliteColor":"Hintergrundfarbe","deleteTable":"Tabelle löschen","outdent":"Ausrücken","cut":"Ausschneiden","plainFormatBlock":"Absatzstil","toggleDir":"Wechselrichtung","bold":"Fett","tabIndent":"Tabulatoreinrückung","justifyRight":"Rechtsbündig","appleKey":"⌘${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/el/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/el/FontChoice.js
deleted file mode 100644
index 2d51628..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/el/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"xx-μικρά","2":"x-μικρά","formatBlock":"Μορφή","3":"μικρά","4":"μεσαία","5":"μεγάλα","6":"x-μεγάλα","7":"xx-μεγάλα","fantasy":"φαντασίας","serif":"με πατούρες (serif)","p":"Παράγραφος","pre":"Προ-μορφοποιημένο","sans-serif":"χωρίς πατούρες (sans-serif)","fontName":"Γραμματοσειρά","h1":"Επικεφαλίδα","h2":"Δευτερεύουσα επικεφαλίδα","h3":"Δευτερεύουσα επικεφαλίδα τρίτου επιπέδου","monospace":"σταθερού πλάτους","fontSize":"Μέγεθος","cursive":"πλάγιοι"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/el/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/el/LinkDialog.js
deleted file mode 100644
index 9eef633..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/el/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"set":"Ορισμός","text":"Περιγραφή:","insertImageTitle":"Ιδιότητες εικόνας","url":"Διεύθυνση URL:","createLinkTitle":"Ιδιότητες διασύνδεσης","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/el/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/el/commands.js
deleted file mode 100644
index eaf90eb..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/el/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Αφαίρεση μορφοποίησης","copy":"Αντιγραφή","paste":"Επικόλληση","selectAll":"Επιλογή όλων","insertOrderedList":"Αριθμημένη λίστα","insertTable":"Εισαγωγή/Τροποποίηση πίνακα","underline":"Υπογράμμιση","foreColor":"Χρώμα προσκηνίου","htmlToggle":"Πρωτογενής κώδικας HTML","formatBlock":"Στυλ παραγράφου","insertHorizontalRule":"Οριζόντια γραμμή","delete":"Διαγραφή","insertUnorderedList":"Λίστα με κουκίδες","tableProp":"Ιδιότητα πίνακα","insertImage":"Εισαγωγή εικόνας","superscript":"Εκθέτης","subscript":"Δείκτης","createLink":"Δημιουργία διασύνδεσης","undo":"Αναίρεση","italic":"Πλάγια","fontName":"Όνομα γραμματοσειράς","justifyLeft":"Στοίχιση αριστερά","unlink":"Αφαίρεση διασύνδεσης","toggleTableBorder":"Εναλλαγή εμφάνισης περιγράμματος πίνακα","fontSize":"Μέγεθος γραμματοσειράς","systemShortcut":"Σε αυτό το πρόγραμμα πλοήγησης, η ενέργεια \"${0}\" είναι διαθέσιμη μόνο με τη χρήση μιας συντόμευσης πληκτρολογίου. Χρησιμοποιήστε τη συντόμευση ${1}.","indent":"Εσοχή","redo":"Ακύρωση αναίρεσης","strikethrough":"Διαγράμμιση","justifyFull":"Πλήρης στοίχιση","justifyCenter":"Στοίχιση στο κέντρο","hiliteColor":"Χρώμα φόντου","deleteTable":"Διαγραφή πίνακα","outdent":"Μείωση περιθωρίου","cut":"Αποκοπή","plainFormatBlock":"Στυλ παραγράφου","toggleDir":"Εναλλαγή κατεύθυνσης","bold":"Έντονα","tabIndent":"Εσοχή με το πλήκτρο Tab","justifyRight":"Στοίχιση δεξιά","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/es/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/es/FontChoice.js
deleted file mode 100644
index bacacf0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/es/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"xx-pequeño","2":"x-pequeño","formatBlock":"Formato","3":"pequeño","4":"medio","5":"grande","6":"x-grande","7":"xx-grande","fantasy":"fantasía","serif":"serif","p":"Párrafo","pre":"Preformateado","sans-serif":"sans-serif","fontName":"Font","h1":"Cabecera","h2":"Subcabecera","h3":"Sub-subcabecera","monospace":"espacio sencillo","fontSize":"Tamaño","cursive":"cursiva"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/es/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/es/LinkDialog.js
deleted file mode 100644
index 15802d7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/es/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"text":"Descripción: ","insertImageTitle":"Propiedades de la imagen","set":"Establecer","newWindow":"Nueva ventana","topWindow":"Ventana superior","target":"Destino: ","createLinkTitle":"Propiedades del enlace","parentWindow":"Ventana padre","currentWindow":"Ventana actual","url":"URL:"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/es/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/es/commands.js
deleted file mode 100644
index 0d189dc..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/es/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Eliminar formato","copy":"Copiar","paste":"Pegar","selectAll":"Seleccionar todo","insertOrderedList":"Lista numerada","insertTable":"Insertar/Editar tabla","print":"Imprimir","underline":"Subrayado","foreColor":"Color de primer plano","htmlToggle":"Fuente HTML","formatBlock":"Estilo de párrafo","newPage":"Nueva página","insertHorizontalRule":"Regla horizontal","delete":"Suprimir","insertUnorderedList":"Lista con viñetas","tableProp":"Propiedad de tabla","insertImage":"Insertar imagen","superscript":"Superíndice","subscript":"Subíndice","createLink":"Crear enlace","undo":"Deshacer","fullScreen":"Conmutar pantalla completa","italic":"Cursiva","fontName":"Nombre de font","justifyLeft":"Alinear izquierda","unlink":"Eliminar enlace","toggleTableBorder":"Conmutar borde de tabla","viewSource":"Ver fuente HTML","ctrlKey":"control+${0}","fontSize":"Tamaño de font","systemShortcut":"La acción \"${0}\" sólo está disponible en su navegador mediante un atajo de teclado. Utilice ${1}.","indent":"Sangría","redo":"Rehacer","strikethrough":"Tachado","justifyFull":"Justificar","justifyCenter":"Alinear centro","hiliteColor":"Color de segundo plano","deleteTable":"Suprimir tabla","outdent":"Anular sangría","cut":"Cortar","plainFormatBlock":"Estilo de párrafo","toggleDir":"Conmutar dirección","bold":"Negrita","tabIndent":"Sangría de tabulador","justifyRight":"Alinear derecha","appleKey":"⌘${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/fi/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/fi/FontChoice.js
deleted file mode 100644
index 37d3962..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/fi/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"xx-small","2":"x-small","formatBlock":"Muoto","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Kappale","pre":"Esimuotoiltu","sans-serif":"sans-serif","fontName":"Fontti","h1":"Otsikko","h2":"Alatason otsikko","h3":"Alimman tason otsikko","monospace":"monospace","fontSize":"Koko","cursive":"cursive"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/fi/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/fi/LinkDialog.js
deleted file mode 100644
index 0f8c69f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/fi/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"set":"Aseta","text":"Kuvaus:","insertImageTitle":"Kuvan ominaisuudet","url":"URL-osoite:","createLinkTitle":"Linkin ominaisuudet","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/fi/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/fi/commands.js
deleted file mode 100644
index 60f87bb..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/fi/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Poista muotoilu","copy":"Kopioi","paste":"Liitä","selectAll":"Valitse kaikki","insertOrderedList":"Numeroitu luettelo","insertTable":"Lisää taulukko/muokkaa taulukkoa","underline":"Alleviivaus","foreColor":"Edustaväri","htmlToggle":"HTML-lähde","formatBlock":"Kappaletyyli","insertHorizontalRule":"Vaakasuuntainen viiva","delete":"Poista","insertUnorderedList":"Numeroimaton luettelo","tableProp":"Taulukon ominaisuudet","insertImage":"Lisää kuva","superscript":"Korotettu","subscript":"Alennettu","createLink":"Luo linkki","undo":"Kumoa","italic":"Kursivointi","fontName":"Fontin nimi","justifyLeft":"Tasaus vasemmalle","unlink":"Poista linkki","toggleTableBorder":"Ota taulukon kehys käyttöön/poista kehys käytöstä","fontSize":"Fontin koko","systemShortcut":"Toiminto \"${0}\" on käytettävissä selaimessa vain näppäimistön pikatoiminnolla. Käytä seuraavaa: ${1}.","indent":"Sisennä","redo":"Tee uudelleen","strikethrough":"Yliviivaus","justifyFull":"Tasaus","justifyCenter":"Tasaus keskelle","hiliteColor":"Taustaväri","deleteTable":"Poista taulukko","outdent":"Ulonna","cut":"Leikkaa","plainFormatBlock":"Kappaletyyli","toggleDir":"Vaihda suuntaa","bold":"Lihavointi","tabIndent":"Sarkainsisennys","justifyRight":"Tasaus oikealle","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/fr/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/fr/FontChoice.js
deleted file mode 100644
index 9063de8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/fr/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"xxs","2":"xs","formatBlock":"Mise en forme","3":"s","4":"m","5":"l","6":"xl","7":"xxl","fantasy":"fantaisie","serif":"serif","p":"Paragraphe","pre":"Pré-mise en forme","sans-serif":"sans serif","fontName":"Police","h1":"En-tête","h2":"Sous-en-tête","h3":"Sous-sous-en-tête","monospace":"espacement fixe","fontSize":"Taille","cursive":"cursive"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/fr/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/fr/LinkDialog.js
deleted file mode 100644
index 7094601..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/fr/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"text":"Description :","insertImageTitle":"Propriétés des images","set":"Définir","newWindow":"Nouvelle fenêtre","topWindow":"Première fenêtre","target":"Cible :","createLinkTitle":"Propriétés des liens","parentWindow":"Fenêtre parent","currentWindow":"Fenêtre en cours","url":"URL :"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/fr/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/fr/commands.js
deleted file mode 100644
index df8cb3b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/fr/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Supprimer la mise en forme","copy":"Copier","paste":"Coller","selectAll":"Sélectionner tout","insertOrderedList":"Liste numérotée","insertTable":"Insérer/Modifier un tableau","print":"Imprimer","underline":"Souligner","foreColor":"Couleur avant-plan","htmlToggle":"Source HTML","formatBlock":"Style de paragraphe","newPage":"Nouvelle page","insertHorizontalRule":"Règle horizontale","delete":"Supprimer","insertUnorderedList":"Liste à puces","tableProp":"Propriété du tableau","insertImage":"Insérer une image","superscript":"Exposant","subscript":"Indice","createLink":"Créer un lien","undo":"Annuler","fullScreen":"Basculer vers le mode plein écran","italic":"Italique","fontName":"Nom de police","justifyLeft":"Aligner à gauche","unlink":"Supprimer le lien","toggleTableBorder":"Afficher/Masquer la bordure du tableau","viewSource":"Afficher la source HTML","fontSize":"Taille de police","systemShortcut":"Action \"${0}\" uniquement disponible dans votre navigateur via un raccourci clavier. Utilisez ${1}.","indent":"Retrait","redo":"Rétablir","strikethrough":"Barrer","justifyFull":"Justifier","justifyCenter":"Aligner au centre","hiliteColor":"Couleur arrière-plan","deleteTable":"Supprimer le tableau","outdent":"Retrait négatif","cut":"Couper","plainFormatBlock":"Style de paragraphe","toggleDir":"Changer de sens","bold":"Gras","tabIndent":"Retrait de tabulation","justifyRight":"Aligner à droite","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/he/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/he/FontChoice.js
deleted file mode 100644
index 9f1b213..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/he/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"קטן ביות","2":"קטן מאוד","formatBlock":"עיצוב","3":"קטן","4":"בינוני","5":"גדול","6":"גדול מאוד","7":"גדול ביותר","fantasy":"fantasy","serif":"serif","p":"פיסקה","pre":"מעוצב מראש","sans-serif":"sans-serif","fontName":"גופן","h1":"כותרת","h2":"תת-כותרת","h3":"תת-תת-כותרת","monospace":"monospace","fontSize":"גודל","cursive":"cursive"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/he/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/he/LinkDialog.js
deleted file mode 100644
index bd36d66..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/he/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"set":"הגדרה","text":"תיאור:","insertImageTitle":"תכונות תמונה","url":"URL:‏","createLinkTitle":"תכונות קישור","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/he/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/he/commands.js
deleted file mode 100644
index f599a63..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/he/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"סילוק עיצוב","copy":"העתקה","paste":"הדבקה","selectAll":"בחירת הכל","insertOrderedList":"רשימה ממוספרת","insertTable":"הוספת/עריכת טבלה","underline":"קו תחתי","foreColor":"צבע חזית","htmlToggle":"מקור HTML","formatBlock":"סגנון פיסקה","insertHorizontalRule":"קו אופקי","delete":"מחיקה","insertUnorderedList":"רשימה עם תבליטים","tableProp":"תכונת טבלה","insertImage":"הוספת תמונה","superscript":"כתב עילי","subscript":"כתב תחתי","createLink":"יצירת קישור","undo":"ביטול פעולה","italic":"נטוי","fontName":"שם גופן","justifyLeft":"יישור לשמאל","unlink":"סילוק הקישור","toggleTableBorder":"מיתוג גבול טבלה","fontSize":"גופן יחסי","systemShortcut":"הפעולה \"${0}\" זמינה בדפדפן רק באמצעות קיצור דרך במקלדת. השתמשו בקיצור ${1}.","indent":"הגדלת כניסה","redo":"שחזור פעולה","strikethrough":"קו חוצה","justifyFull":"יישור דו-צדדי","justifyCenter":"יישור למרכז","hiliteColor":"צבע רקע","deleteTable":"מחיקת טבלה","outdent":"הקטנת כניסה","cut":"גזירה","plainFormatBlock":"סגנון פיסקה","toggleDir":"מיתוג כיוון","bold":"מודגש","tabIndent":"כניסת טאב","justifyRight":"יישור לימין","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/hu/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/hu/FontChoice.js
deleted file mode 100644
index 858d77a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/hu/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"xx-kicsi","2":"x-kicsi","formatBlock":"Formátum","3":"kicsi","4":"közepes","5":"nagy","6":"x-nagy","7":"xx-nagy","fantasy":"fantázia","serif":"talpas","p":"Bekezdés","pre":"Előformázott","sans-serif":"talpatlan","fontName":"Betűtípus","h1":"Címsor","h2":"Alcím","h3":"Al-alcím","monospace":"rögzített szélességű","fontSize":"Méret","cursive":"kurzív"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/hu/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/hu/LinkDialog.js
deleted file mode 100644
index 23f765e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/hu/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"text":"Leírás:","insertImageTitle":"Kép tulajdonságai","set":"Beállítás","newWindow":"Új ablak","topWindow":"Legfelső szintű ablak","target":"Cél:","createLinkTitle":"Hivatkozás tulajdonságai","parentWindow":"Szülő ablak","currentWindow":"Aktuális ablak","url":"URL:"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/hu/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/hu/commands.js
deleted file mode 100644
index bd016cf..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/hu/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Formázás eltávolítása","copy":"Másolás","paste":"Beillesztés","selectAll":"Összes kijelölése","insertOrderedList":"Számozott lista","insertTable":"Táblázat beszúrása/szerkesztése","print":"Nyomtatás","underline":"Aláhúzott","foreColor":"Előtérszín","htmlToggle":"HTML forrás","formatBlock":"Bekezdés stílusa","newPage":"Új oldal","insertHorizontalRule":"Vízszintes vonalzó","delete":"Törlés","insertUnorderedList":"Felsorolásjeles lista","tableProp":"Táblázat tulajdonságai","insertImage":"Kép beszúrása","superscript":"Felső index","subscript":"Alsó index","createLink":"Hivatkozás létrehozása","undo":"Visszavonás","fullScreen":"Váltás teljes képernyőre","italic":"Dőlt","fontName":"Betűtípus","justifyLeft":"Balra igazítás","unlink":"Hivatkozás eltávolítása","toggleTableBorder":"Táblázatszegély ki-/bekapcsolása","viewSource":"HTML forrás megjelenítése","fontSize":"Betűméret","systemShortcut":"A(z) \"${0}\" művelet a böngészőben csak billentyűparancs használatával érhető el. Használja a következőt: ${1}.","indent":"Behúzás","redo":"Újra","strikethrough":"Áthúzott","justifyFull":"Sorkizárás","justifyCenter":"Középre igazítás","hiliteColor":"Háttérszín","deleteTable":"Táblázat törlése","outdent":"Negatív behúzás","cut":"Kivágás","plainFormatBlock":"Bekezdés stílusa","toggleDir":"Irány váltókapcsoló","bold":"Félkövér","tabIndent":"Tab behúzás","justifyRight":"Jobbra igazítás","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/it/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/it/FontChoice.js
deleted file mode 100644
index 1a180df..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/it/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"xx-small","2":"x-small","formatBlock":"Formato","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Paragrafo","pre":"Preformattato","sans-serif":"sans-serif","fontName":"Carattere","h1":"Intestazione","h2":"Sottointestazione","h3":"Sottointestazione secondaria","monospace":"spaziatura fissa","fontSize":"Dimensione","cursive":"corsivo"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/it/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/it/LinkDialog.js
deleted file mode 100644
index ad3adef..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/it/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"text":"Descrizione:","insertImageTitle":"Proprietà immagine","set":"Imposta","newWindow":"Nuova finestra","topWindow":"Finestra superiore","target":"Destinazione:","createLinkTitle":"Proprietà collegamento","parentWindow":"Finestra padre","currentWindow":"Finestra corrente","url":"URL:"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/it/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/it/commands.js
deleted file mode 100644
index 4abbd7e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/it/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Rimuovi formato","copy":"Copia","paste":"Incolla","selectAll":"Seleziona tutto","insertOrderedList":"Elenco numerato","insertTable":"Inserisci/Modifica tabella","print":"Stampa","underline":"Sottolinea","foreColor":"Colore primo piano","htmlToggle":"Origine HTML","formatBlock":"Stile paragrafo","newPage":"Nuova pagina","insertHorizontalRule":"Righello orizzontale","delete":"Elimina","insertUnorderedList":"Elenco puntato","tableProp":"Proprietà tabella","insertImage":"Inserisci immagine","superscript":"Apice","subscript":"Pedice","createLink":"Crea collegamento","undo":"Annulla","fullScreen":"Attiva/Disattiva schermo intero","italic":"Corsivo","fontName":"Nome carattere","justifyLeft":"Allinea a sinistra","unlink":"Rimuovi collegamento","toggleTableBorder":"Attiva/Disattiva bordo tabella","viewSource":"Visualizza origine HTML","fontSize":"Dimensione carattere","systemShortcut":"La azione \"${0}\" è disponibile solo nel browser tramite un tasto di scelta rapida. Utilizzare ${1}.","indent":"Rientro","redo":"Ripristina","strikethrough":"Barrato","justifyFull":"Giustifica","justifyCenter":"Allinea al centro","hiliteColor":"Colore sfondo","deleteTable":"Elimina tabella","outdent":"Annulla rientro","cut":"Taglia","plainFormatBlock":"Stile paragrafo","toggleDir":"Attiva/Disattiva direzione","bold":"Grassetto","tabIndent":"Rientro tabulazione","justifyRight":"Allinea a destra","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ja/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ja/FontChoice.js
deleted file mode 100644
index a938d6b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ja/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"超極小","2":"極小","formatBlock":"フォーマット","3":"小","4":"標準","5":"大","6":"特大","7":"超特大","fantasy":"fantasy","serif":"serif","p":"段落","pre":"事前フォーマット済み","sans-serif":"sans-serif","fontName":"フォント","h1":"見出し","h2":"副見出し","h3":"副見出しの副見出し","monospace":"monospace","fontSize":"サイズ","cursive":"cursive"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ja/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ja/LinkDialog.js
deleted file mode 100644
index 815f508..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ja/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"text":"説明:","insertImageTitle":"イメージ・プロパティー","set":"設定","newWindow":"新規ウィンドウ","topWindow":"最上位ウィンドウ","target":"ターゲット:","createLinkTitle":"リンク・プロパティー","parentWindow":"親ウィンドウ","currentWindow":"現行ウィンドウ","url":"URL:"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ja/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ja/commands.js
deleted file mode 100644
index 0ca112a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ja/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"形式の除去","copy":"コピー","paste":"貼り付け","selectAll":"すべて選択","insertOrderedList":"番号付きリスト","insertTable":"テーブルの挿入/編集","print":"印刷","underline":"下線","foreColor":"前景色","htmlToggle":"HTML ソース","formatBlock":"段落スタイル","newPage":"改ページ","insertHorizontalRule":"水平罫線","delete":"削除","insertUnorderedList":"黒丸付きリスト","tableProp":"テーブル・プロパティー","insertImage":"イメージの挿入","superscript":"上付き文字","subscript":"下付き文字","createLink":"リンクの作成","undo":"元に戻す","fullScreen":"フルスクリーンの切り替え","italic":"イタリック","fontName":"フォント名","justifyLeft":"左揃え","unlink":"リンクの除去","toggleTableBorder":"テーブル・ボーダーの切り替え","viewSource":"HTML ソースの表示","fontSize":"フォント・サイズ","systemShortcut":"\"${0}\" アクションは、キーボード・ショートカットを使用して、ブラウザーでのみ使用できます。${1} を使用します。","indent":"インデント","redo":"やり直し","strikethrough":"取り消し線","justifyFull":"両端揃え","justifyCenter":"中央揃え","hiliteColor":"背景色","deleteTable":"テーブルの削除","outdent":"アウトデント","cut":"切り取り","plainFormatBlock":"段落スタイル","toggleDir":"方向の切り替え","bold":"太字","tabIndent":"タブ・インデント","justifyRight":"右揃え","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ko/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ko/FontChoice.js
deleted file mode 100644
index 2603063..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ko/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"가장 작게","2":"조금 작게","formatBlock":"서식","3":"작게","4":"중간","5":"크게","6":"조금 크게","7":"가장 크게","fantasy":"fantasy","serif":"serif","p":"단락","pre":"서식이 지정됨","sans-serif":"sans-serif","fontName":"글꼴","h1":"제목","h2":"부제목","h3":"하위 부제목","monospace":"monospace","fontSize":"크기","cursive":"cursive"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ko/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ko/LinkDialog.js
deleted file mode 100644
index 1f46bd7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ko/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"text":"설명:","insertImageTitle":"이미지 특성","set":"설정","newWindow":"새 창","topWindow":"최상위 창","target":"대상:","createLinkTitle":"링크 특성","parentWindow":"상위 창","currentWindow":"현재 창","url":"URL:"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ko/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ko/commands.js
deleted file mode 100644
index 4c8f954..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ko/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"형식 제거","copy":"복사","paste":"붙여넣기","selectAll":"모두 선택","insertOrderedList":"번호 목록","insertTable":"테이블 삽입/편집","print":"인쇄","underline":"밑줄","foreColor":"전경색","htmlToggle":"HTML 소스","formatBlock":"단락 스타일","newPage":"새 페이지","insertHorizontalRule":"수평 자","delete":"삭제","insertUnorderedList":"글머리표 목록","tableProp":"테이블 특성","insertImage":"이미지 삽입","superscript":"위첨자","subscript":"아래첨자","createLink":"링크 작성","undo":"실행 취소","fullScreen":"토글 전체 화면","italic":"기울임체","fontName":"글꼴 이름","justifyLeft":"왼쪽 맞춤","unlink":"링크 제거","toggleTableBorder":"토글 테이블 테두리","viewSource":"HTML 소스 보기","fontSize":"글꼴 크기","systemShortcut":"\"${0}\" 조치는 브라우저에서 키보드 단축키를 이용해서만 사용할 수 있습니다. ${1}을(를) 사용하십시오.","indent":"들여쓰기","redo":"다시 실행","strikethrough":"취소선","justifyFull":"양쪽 맞춤","justifyCenter":"가운데 맞춤","hiliteColor":"배경색","deleteTable":"테이블 삭제","outdent":"내어쓰기","cut":"잘라내기","plainFormatBlock":"단락 스타일","toggleDir":"토글 방향","bold":"굵은체","tabIndent":"탭 들여쓰기","justifyRight":"오른쪽 맞춤","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/nb/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/nb/FontChoice.js
deleted file mode 100644
index f22d972..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/nb/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"xx-liten","2":"x-liten","formatBlock":"Format","3":"liten","4":"middels","5":"stor","6":"x-stor","7":"xx-stor","fantasy":"fantasi","serif":"serif","p":"Avsnitt","pre":"Forhåndsformatert","sans-serif":"sans-serif","fontName":"Skrift","h1":"Overskrift","h2":"Undertittel","h3":"Under-undertittel","monospace":"monospace","fontSize":"Størrelse","cursive":"kursiv"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/nb/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/nb/LinkDialog.js
deleted file mode 100644
index 6349943..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/nb/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"set":"Definer","text":"Beskrivelse:","insertImageTitle":"Bildeegenskaper","url":"URL:","createLinkTitle":"Koblingsegenskaper","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/nb/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/nb/commands.js
deleted file mode 100644
index 1b3a56f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/nb/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Fjern format","copy":"Kopier","paste":"Lim inn","selectAll":"Velg alle","insertOrderedList":"Nummerert liste","insertTable":"Sett inn/rediger tabell","underline":"Understreking","foreColor":"Forgrunnsfarge","htmlToggle":"HTML-kilde","formatBlock":"Avsnittsstil","insertHorizontalRule":"Vannrett strek","delete":"Slett","insertUnorderedList":"Punktliste","tableProp":"Tabellegenskap","insertImage":"Sett inn bilde","superscript":"Hevet skrift","subscript":"Senket skrift","createLink":"Opprett kobling","undo":"Angre","italic":"Kursiv","fontName":"Skriftnavn","justifyLeft":"Venstrejuster","unlink":"Fjern kobling","toggleTableBorder":"Bytt tabellkant","fontSize":"Skriftstørrelse","systemShortcut":"Handlingen \"${0}\" er bare tilgjengelig i nettleseren ved hjelp av en tastatursnarvei. Bruk ${1}.","indent":"Innrykk","redo":"Gjør om","strikethrough":"Gjennomstreking","justifyFull":"Juster","justifyCenter":"Midtstill","hiliteColor":"Bakgrunnsfarge","deleteTable":"Slett tabell","outdent":"Fjern innrykk","cut":"Klipp ut","plainFormatBlock":"Avsnittsstil","toggleDir":"Bytt retning","bold":"Fet","tabIndent":"Tabulatorinnrykk","justifyRight":"Høyrejuster","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/nl/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/nl/FontChoice.js
deleted file mode 100644
index e6811aa..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/nl/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"xx-klein","2":"x-klein","formatBlock":"Opmaak","3":"klein","4":"gemiddeld","5":"groot","6":"x-groot","7":"xx-groot","fantasy":"fantasy","serif":"serif","p":"Alinea","pre":"Vooraf opgemaakt","sans-serif":"sans-serif","fontName":"Lettertype","h1":"Kop","h2":"Subkop","h3":"Sub-subkop","monospace":"monospace","fontSize":"Grootte","cursive":"cursief"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/nl/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/nl/LinkDialog.js
deleted file mode 100644
index ddcd2fd..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/nl/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"set":"Instellen","text":"Beschrijving:","insertImageTitle":"Afbeeldingseigenschappen","url":"URL:","createLinkTitle":"Linkeigenschappen","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/nl/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/nl/commands.js
deleted file mode 100644
index bae4fe8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/nl/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Opmaak verwijderen","copy":"Kopiëren","paste":"Plakken","selectAll":"Alles selecteren","insertOrderedList":"Genummerde lijst","insertTable":"Tabel invoegen/bewerken","underline":"Onderstrepen","foreColor":"Voorgrondkleur","htmlToggle":"HTML-bron","formatBlock":"Alineastijl","insertHorizontalRule":"Horizontale liniaal","delete":"Wissen","insertUnorderedList":"Lijst met opsommingstekens","tableProp":"Tabeleigenschap","insertImage":"Afbeelding invoegen","superscript":"Superscript","subscript":"Subscript","createLink":"Link maken","undo":"Ongedaan maken","italic":"Cursief","fontName":"Lettertype","justifyLeft":"Links uitlijnen","unlink":"Link verwijderen","toggleTableBorder":"Tabelkader wijzigen","fontSize":"Lettergrootte","systemShortcut":"De actie \"${0}\" is alleen beschikbaar in uw browser via een sneltoetscombinatie. Gebruik ${1}.","indent":"Inspringen","redo":"Opnieuw","strikethrough":"Doorhalen","justifyFull":"Uitvullen","justifyCenter":"Centreren","hiliteColor":"Achtergrondkleur","deleteTable":"Tabel wissen","outdent":"Uitspringen","cut":"Knippen","plainFormatBlock":"Alineastijl","toggleDir":"Schrijfrichting wijzigen","bold":"Vet","tabIndent":"Inspringen","justifyRight":"Rechts uitlijnen","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pl/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pl/FontChoice.js
deleted file mode 100644
index 3c03893..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pl/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"najmniejsza","2":"mniejsza","formatBlock":"Format","3":"mała","4":"średnia","5":"duża","6":"większa","7":"największa","fantasy":"fantazyjna","serif":"szeryfowa","p":"Akapit","pre":"Wstępnie sformatowane","sans-serif":"bezszeryfowa","fontName":"Czcionka","h1":"Nagłówek","h2":"Nagłówek 2-go poziomu","h3":"Nagłówek 3-go poziomu","monospace":"czcionka o stałej szerokości","fontSize":"Wielkość","cursive":"kursywa"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pl/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pl/LinkDialog.js
deleted file mode 100644
index 86f71e5..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pl/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"text":"Opis:","insertImageTitle":"Właściwości obrazu","set":"Ustaw","newWindow":"Nowe okno","topWindow":"Okno najwyższego poziomu","target":"Cel:","createLinkTitle":"Właściwości odsyłacza","parentWindow":"Okno macierzyste","currentWindow":"Bieżące okno","url":"Adres URL:"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pl/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pl/commands.js
deleted file mode 100644
index 8ee8acf..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pl/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Usuń formatowanie","copy":"Kopiuj","paste":"Wklej","selectAll":"Wybierz wszystko","insertOrderedList":"Lista numerowana","insertTable":"Wstaw/edytuj tabelę","print":"Drukuj","underline":"Podkreślenie","foreColor":"Kolor pierwszego planu","htmlToggle":"Źródło HTML","formatBlock":"Styl akapitu","newPage":"Nowa strona","insertHorizontalRule":"Linia pozioma","delete":"Usuń","insertUnorderedList":"Lista wypunktowana","tableProp":"Właściwość tabeli","insertImage":"Wstaw obraz","superscript":"Indeks górny","subscript":"Indeks dolny","createLink":"Utwórz odsyłacz","undo":"Cofnij","fullScreen":"Przełącz pełny ekran","italic":"Kursywa","fontName":"Nazwa czcionki","justifyLeft":"Wyrównaj do lewej","unlink":"Usuń odsyłacz","toggleTableBorder":"Przełącz ramkę tabeli","viewSource":"Wyświetl kod źródłowy HTML","ctrlKey":"Ctrl+${0}","fontSize":"Wielkość czcionki","systemShortcut":"Działanie ${0} jest dostępne w tej przeglądarce wyłącznie przy użyciu skrótu klawiaturowego. Należy użyć klawiszy ${1}.","indent":"Wcięcie","redo":"Ponów","strikethrough":"Przekreślenie","justifyFull":"Wyrównaj do lewej i prawej","justifyCenter":"Wyrównaj do środka","hiliteColor":"Kolor tła","deleteTable":"Usuń tabelę","outdent":"Usuń wcięcie","cut":"Wytnij","plainFormatBlock":"Styl akapitu","toggleDir":"Przełącz kierunek","bold":"Pogrubienie","tabIndent":"Wcięcie o tabulator","justifyRight":"Wyrównaj do prawej","appleKey":"⌘${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pt-pt/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pt-pt/FontChoice.js
deleted file mode 100644
index c72a102..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pt-pt/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"xxs","2":"xs","formatBlock":"Formato","3":"small","4":"medium","5":"large","6":"xl","7":"xxl","fantasy":"fantasy","serif":"serif","p":"Parágrafo","pre":"Pré-formatado","sans-serif":"sans-serif","fontName":"Tipo de letra","h1":"Título","h2":"Sub-título","h3":"Sub-subtítulo","monospace":"monospace","fontSize":"Tamanho","cursive":"cursive"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pt-pt/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pt-pt/LinkDialog.js
deleted file mode 100644
index 09da9f6..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pt-pt/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"set":"Definir","text":"Descrição:","insertImageTitle":"Propriedades da imagem","url":"URL:","createLinkTitle":"Propriedades da ligação","newWindow":"Nova Janela","topWindow":"Primeira Janela","target":"Destino:","parentWindow":"Janela Pai","currentWindow":"Janela Atual"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pt-pt/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pt-pt/commands.js
deleted file mode 100644
index 678ba22..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pt-pt/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Remover formato","copy":"Copiar","paste":"Colar","selectAll":"Seleccionar tudo","insertOrderedList":"Lista numerada","insertTable":"Inserir/Editar tabela","underline":"Sublinhado","foreColor":"Cor de primeiro plano","htmlToggle":"Origem HTML","formatBlock":"Estilo de parágrafo","insertHorizontalRule":"Régua horizontal","delete":"Eliminar","insertUnorderedList":"Lista marcada","tableProp":"Propriedades da tabela","insertImage":"Inserir imagem","superscript":"Superior à linha","subscript":"Inferior à linha","createLink":"Criar ligação","undo":"Anular","italic":"Itálico","fontName":"Nome do tipo de letra","justifyLeft":"Alinhar à esquerda","unlink":"Remover ligação","toggleTableBorder":"Alternar contorno da tabela","fontSize":"Tamanho do tipo de letra","systemShortcut":"A acção \"${0}\" apenas está disponível no navegador utilizando um atalho de teclado. Utilize ${1}.","indent":"Indentar","redo":"Repetir","strikethrough":"Rasurado","justifyFull":"Justificar","justifyCenter":"Alinhar ao centro","hiliteColor":"Cor de segundo plano","deleteTable":"Eliminar tabela","outdent":"Recuar","cut":"Cortar","plainFormatBlock":"Estilo de parágrafo","toggleDir":"Alternar direcção","bold":"Negrito","tabIndent":"Indentar com a tecla Tab","justifyRight":"Alinhar à direita","print":"Impressão","newPage":"Nova Página","fullScreen":"Comutar Tela Cheia","viewSource":"Visualizar Origem HTML","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pt/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pt/FontChoice.js
deleted file mode 100644
index 5919b43..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pt/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"extra-extra-pequeno","2":"extra-pequeno","formatBlock":"Formatar","3":"pequena","4":"médio","5":"grande","6":"extra-grande","7":"extra-extra-grande","fantasy":"fantasy","serif":"serif","p":"Parágrafo","pre":"Pré-formatado","sans-serif":"sans-serif","fontName":"Fonte","h1":"Título","h2":"Subtítulo","h3":"Sub-subtítulo","monospace":"espaço simples","fontSize":"Tamanho","cursive":"cursiva"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pt/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pt/LinkDialog.js
deleted file mode 100644
index 0a55795..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pt/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"text":"Descrição:","insertImageTitle":"Propriedades de Imagem","set":"Definir","newWindow":"Nova Janela","topWindow":"Primeira Janela","target":"Destino:","createLinkTitle":"Propriedades de Link","parentWindow":"Janela Pai","currentWindow":"Janela Atual","url":"URL:"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pt/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pt/commands.js
deleted file mode 100644
index 271c6cf..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/pt/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Remover Formato","copy":"Copiar","paste":"Colar","selectAll":"Selecionar Todos","insertOrderedList":"Lista Numerada","insertTable":"Inserir/Editar Tabela","print":"Impressão","underline":"Sublinhado","foreColor":"Cor do Primeiro Plano","htmlToggle":"Origem HTML","formatBlock":"Estilo de Parágrafo","newPage":"Nova Página","insertHorizontalRule":"Régua Horizontal","delete":"Excluir","insertUnorderedList":"Lista com Marcadores","tableProp":"Propriedade da Tabela","insertImage":"Inserir Imagem","superscript":"Sobrescrito","subscript":"Subscrito","createLink":"Criar Link","undo":"Desfazer","fullScreen":"Comutar Tela Cheia","italic":"Itálico","fontName":"Nome da Fonte","justifyLeft":"Alinhar pela Esquerda","unlink":"Remover Link","toggleTableBorder":"Alternar Moldura da Tabela","viewSource":"Visualizar Origem HTML","fontSize":"Tamanho da Fonte","systemShortcut":"A ação \"${0}\" está disponível em seu navegador apenas usando um atalho do teclado. Use ${1}.","indent":"Recuar","redo":"Refazer","strikethrough":"Tachado","justifyFull":"Justificar","justifyCenter":"Alinhar pelo Centro","hiliteColor":"Cor de segundo plano","deleteTable":"Excluir Tabela","outdent":"Não-chanfrado","cut":"Recortar","plainFormatBlock":"Estilo de Parágrafo","toggleDir":"Comutar Direção","bold":"Negrito","tabIndent":"Recuo de Guia","justifyRight":"Alinhar pela Direita","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ru/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ru/FontChoice.js
deleted file mode 100644
index cebf574..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ru/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"самый маленький","2":"очень маленький","formatBlock":"Формат","3":"маленький","4":"средний","5":"большой","6":"очень большой","7":"самый большой","fantasy":"артистический","serif":"с засечками","p":"Абзац","pre":"Заранее отформатированный","sans-serif":"без засечек","fontName":"Шрифт","h1":"Заголовок","h2":"Подзаголовок","h3":"Вложенный подзаголовок","monospace":"непропорциональный","fontSize":"Размер","cursive":"курсив"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ru/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ru/LinkDialog.js
deleted file mode 100644
index ddc2f7b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ru/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"text":"Описание:","insertImageTitle":"Свойства изображения","set":"Задать","newWindow":"Новое окно","topWindow":"Окно верхнего уровня","target":"Целевой объект:","createLinkTitle":"Свойства ссылки","parentWindow":"Родительское окно","currentWindow":"Текущее окно","url":"URL:"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ru/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ru/commands.js
deleted file mode 100644
index bbc7617..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/ru/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Удалить формат","copy":"Копировать","paste":"Вставить","selectAll":"Выбрать все","insertOrderedList":"Нумерованный список","insertTable":"Вставить/изменить таблицу","print":"Печать","underline":"Подчеркивание","foreColor":"Цвет текста","htmlToggle":"Код HTML","formatBlock":"Стиль абзаца","newPage":"Создать страницу","insertHorizontalRule":"Горизонтальная линейка","delete":"Удалить","insertUnorderedList":"Список с маркерами","tableProp":"Свойства таблицы","insertImage":"Вставить изображение","superscript":"Верхний индекс","subscript":"Нижний индекс","createLink":"Создать ссылку","undo":"Отменить","fullScreen":"Переключить полноэкранный режим","italic":"Курсив","fontName":"Название шрифта","justifyLeft":"По левому краю","unlink":"Удалить ссылку","toggleTableBorder":"Переключить рамку таблицы","viewSource":"Показать исходный код HTML","fontSize":"Размер шрифта","systemShortcut":"Действие \"${0}\" можно выполнить в браузере только путем нажатия клавиш ${1}.","indent":"Отступ","redo":"Повторить","strikethrough":"Перечеркивание","justifyFull":"По ширине","justifyCenter":"По центру","hiliteColor":"Цвет фона","deleteTable":"Удалить таблицу","outdent":"Втяжка","cut":"Вырезать","plainFormatBlock":"Стиль абзаца","toggleDir":"Изменить направление","bold":"Полужирный","tabIndent":"Табуляция","justifyRight":"По правому краю","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sk/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sk/FontChoice.js
deleted file mode 100644
index 9f8dc09..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sk/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"xx-small","2":"x-small","formatBlock":"Formát","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Odsek","pre":"Predformátované","sans-serif":"sans-serif","fontName":"Písmo","h1":"Hlavička","h2":"Podhlavička","h3":"Pod-podhlavička","monospace":"monospace","fontSize":"Veľkosť","cursive":"cursive"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sk/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sk/LinkDialog.js
deleted file mode 100644
index 3b4d7a8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sk/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"set":"Nastaviť","text":"Popis:","insertImageTitle":"Vlastnosti obrázku","url":"URL:","createLinkTitle":"Vlastnosti odkazu","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sk/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sk/commands.js
deleted file mode 100644
index 1118482..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sk/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Odstrániť formát","copy":"Kopírovať","paste":"Nalepiť","selectAll":"Vybrať všetko","insertOrderedList":"Číslovaný zoznam","insertTable":"Vložiť/upraviť tabuľku","underline":"Podčiarknuť","foreColor":"Farba popredia","htmlToggle":"Zdroj HTML","formatBlock":"Štýl odseku","insertHorizontalRule":"Horizontálna čiara","delete":"Vymazať","insertUnorderedList":"Zoznam s odrážkami","tableProp":"Vlastnosť tabuľky","insertImage":"Vložiť obrázok","superscript":"Horný index","subscript":"Dolný index","createLink":"Vytvoriť prepojenie","undo":"Vrátiť späť","italic":"Kurzíva","fontName":"Názov písma","justifyLeft":"Zarovnať doľava","unlink":"Odstrániť prepojenie","toggleTableBorder":"Prepnúť rámček tabuľky","fontSize":"Veľkosť písma","systemShortcut":"Akcia \"${0}\" je vo vašom prehliadači dostupná len s použitím klávesovej skratky. Použite ${1}.","indent":"Odsadiť","redo":"Znova vykonať","strikethrough":"Prečiarknuť","justifyFull":"Zarovnať podľa okraja","justifyCenter":"Zarovnať na stred","hiliteColor":"Farba pozadia","deleteTable":"Vymazať tabuľku","outdent":"Predsadiť","cut":"Vystrihnúť","plainFormatBlock":"Štýl odseku","toggleDir":"Prepnúť smer","bold":"Tučné písmo","tabIndent":"Odsadenie tabulátora","justifyRight":"Zarovnať doprava","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sl/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sl/FontChoice.js
deleted file mode 100644
index 3a7094c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sl/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"xx-majhno","2":"x-majhno","formatBlock":"Oblika","3":"majhno","4":"srednje","5":"veliko","6":"x-veliko","7":"xx-veliko","fantasy":"fantasy","serif":"serif","p":"Odstavek","pre":"Vnaprej oblikovano","sans-serif":"sans-serif","fontName":"Pisava","h1":"Naslov","h2":"Podnaslov","h3":"Pod podnaslov","monospace":"monospace","fontSize":"Velikost","cursive":"cursive"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sl/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sl/LinkDialog.js
deleted file mode 100644
index 203a25d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sl/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"set":"Nastavi","text":"Opis:","insertImageTitle":"Lastnosti slike","url":"URL:","createLinkTitle":"Lastnosti povezave","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sl/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sl/commands.js
deleted file mode 100644
index 4fb720c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sl/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Odstrani obliko zapisa","copy":"Prekopiraj","paste":"Prilepi","selectAll":"Izberi vse","insertOrderedList":"Oštevilčen seznam","insertTable":"Vstavi/Uredi tabelo","underline":"Podčrtano","foreColor":"Barva ospredja","htmlToggle":"Izvor HTML","formatBlock":"Slog odstavka","insertHorizontalRule":"Horizontalno pravilo","delete":"Izbriši","insertUnorderedList":"Naštevni seznam","tableProp":"Lastnost tabele","insertImage":"Vstavi sliko","superscript":"Nadpisano","subscript":"Podpisano","createLink":"Ustvari povezavo","undo":"Razveljavi","italic":"Ležeče","fontName":"Ime pisave","justifyLeft":"Poravnaj levo","unlink":"Odstrani povezavo","toggleTableBorder":"Preklopi obrobo tabele","fontSize":"Velikost pisave","systemShortcut":"Dejanje \"${0}\" lahko v vašem brskalniku uporabite samo z bližnjico na tipkovnici. Uporabite ${1}.","indent":"Zamik","redo":"Znova uveljavi","strikethrough":"Prečrtano","justifyFull":"Obojestranka poravnava","justifyCenter":"Sredinska poravnava","hiliteColor":"Barva ozadja","deleteTable":"Izbriši tabelo","outdent":"Zamik navzven","cut":"Izreži","plainFormatBlock":"Slog odstavka","toggleDir":"Preklopi usmeritev","bold":"Krepko","tabIndent":"Zamik tabulatorja","justifyRight":"Poravnaj desno","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sv/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sv/FontChoice.js
deleted file mode 100644
index 106f020..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sv/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"mycket, mycket litet","2":"mycket litet","formatBlock":"Format","3":"litet","4":"medelstort","5":"stort","6":"extra stort","7":"extra extra stort","fantasy":"fantasy","serif":"serif","p":"Stycke","pre":"Förformaterat","sans-serif":"sans-serif","fontName":"Teckensnitt","h1":"Rubrik","h2":"Underrubrik","h3":"Underunderrubrik","monospace":"monospace","fontSize":"Storlek","cursive":"kursivt"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sv/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sv/LinkDialog.js
deleted file mode 100644
index ed6c3da..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sv/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"set":"Ange","text":"Beskrivning:","insertImageTitle":"Bildegenskaper","url":"URL-adress:","createLinkTitle":"Länkegenskaper","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sv/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sv/commands.js
deleted file mode 100644
index df5e091..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/sv/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Ta bort format","copy":"Kopiera","paste":"Klistra in","selectAll":"Markera allt","insertOrderedList":"Numrerad lista","insertTable":"Infoga/redigera tabell","underline":"Understrykning","foreColor":"Förgrundsfärg","htmlToggle":"HTML-källkod","formatBlock":"Styckeformat","insertHorizontalRule":"Horisontell linjal","delete":"Ta bort","insertUnorderedList":"Punktlista","tableProp":"Tabellegenskap","insertImage":"Infoga bild","superscript":"Upphöjt","subscript":"Nedsänkt","createLink":"Skapa länk","undo":"Ångra","italic":"Kursiv","fontName":"Teckensnittsnamn","justifyLeft":"Vänsterjustera","unlink":"Ta bort länk","toggleTableBorder":"Aktivera/avaktivera tabellram","ctrlKey":"Ctrl+${0}","fontSize":"Teckenstorlek","systemShortcut":"Åtgärden \"${0}\" är endast tillgänglig i webbläsarenmed hjälp av ett kortkommando. Använd ${1}.","indent":"Indrag","redo":"Gör om","strikethrough":"Genomstruken","justifyFull":"Marginaljustera","justifyCenter":"Centrera","hiliteColor":"Bakgrundsfärg","deleteTable":"Ta bort tabell","outdent":"Utdrag","cut":"Klipp ut","plainFormatBlock":"Styckeformat","toggleDir":"Växla riktning","bold":"Fetstil","tabIndent":"Tabbindrag","justifyRight":"Högerjustera","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/th/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/th/FontChoice.js
deleted file mode 100644
index 63613a4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/th/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"xx-small","2":"x-small","formatBlock":"รูปแบบ","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"ย่อหน้า","pre":"การกำหนดรูปแบบล่วงหน้า","sans-serif":"sans-serif","fontName":"ฟอนต์","h1":"ส่วนหัว","h2":"ส่วนหัวย่อย","h3":"ส่วนย่อยของส่วนหัวย่อย","monospace":"monospace","fontSize":"ขนาด","cursive":"cursive"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/th/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/th/LinkDialog.js
deleted file mode 100644
index b5ce3f8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/th/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"set":"ตั้งค่า","text":"รายละเอียด","insertImageTitle":"คุณสมบัติอิมเมจ","url":"URL:","createLinkTitle":"คุณสมบัติลิงก์","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/th/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/th/commands.js
deleted file mode 100644
index ec513a5..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/th/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"ลบรูปแบบออก","copy":"คัดลอก","paste":"วาง","selectAll":"เลือกทั้งหมด","insertOrderedList":"ลำดับเลข","insertTable":"แทรก/แก้ไข ตาราง","underline":"ขีดเส้นใต้","foreColor":"สีพื้นหน้า","htmlToggle":"ซอร์ส HTML","formatBlock":"ลักษณะย่อหน้า","insertHorizontalRule":"ไม้บรรทัดแนวนอน","delete":"ลบ","insertUnorderedList":"หัวข้อย่อย","tableProp":"คุณสมบัติตาราง","insertImage":"แทรกอิมเมจ","superscript":"ตัวยก","subscript":"ตัวห้อย","createLink":"สร้างลิงก์","undo":"เลิกทำ","italic":"ตัวเอียง","fontName":"ชื่อฟอนต์","justifyLeft":"จัดชิดซ้าย","unlink":"ลบลิงก์ออก","toggleTableBorder":"สลับเส้นขอบตาราง","fontSize":"ขนาดฟอนต์","systemShortcut":"แอ็กชัน \"${0}\" ใช้งานได้เฉพาะกับเบราว์เซอร์ของคุณโดยใช้แป้นพิมพ์ลัด ใช้ ${1}","indent":"เพิ่มการเยื้อง","redo":"ทำซ้ำ","strikethrough":"ขีดทับ","justifyFull":"จัดชิดขอบ","justifyCenter":"จัดกึ่งกลาง","hiliteColor":"สีพื้นหลัง","deleteTable":"ลบตาราง","outdent":"ลดการเยื้อง","cut":"ตัด","plainFormatBlock":"ลักษณะย่อหน้า","toggleDir":"สลับทิศทาง","bold":"ตัวหนา","tabIndent":"เยื้องแท็บ","justifyRight":"จัดชิดขวา","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/tr/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/tr/FontChoice.js
deleted file mode 100644
index d2ca7c4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/tr/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"xx-küçük","2":"x-küçük","formatBlock":"Biçim","3":"küçük","4":"orta","5":"büyük","6":"x-büyük","7":"xx-büyük","fantasy":"fantazi","serif":"serif","p":"Paragraf","pre":"Önceden Biçimlendirilmiş","sans-serif":"sans-serif","fontName":"Yazı Tipi","h1":"Başlık","h2":"Alt Başlık","h3":"Alt Alt Başlık","monospace":"tek aralıklı","fontSize":"Boyut","cursive":"el yazısı"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/tr/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/tr/LinkDialog.js
deleted file mode 100644
index 2a2491a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/tr/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"set":"Ayarla","text":"Açıklama:","insertImageTitle":"Resim Özellikleri","url":"URL:","createLinkTitle":"Bağlantı Özellikleri","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/tr/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/tr/commands.js
deleted file mode 100644
index 99c966c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/tr/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"Biçimi Kaldır","copy":"Kopyala","paste":"Yapıştır","selectAll":"Tümünü Seç","insertOrderedList":"Numaralı Liste","insertTable":"Tablo Ekle/Düzenle","underline":"Altı Çizili","foreColor":"Ön Plan Rengi","htmlToggle":"HTML Kaynağı","formatBlock":"Paragraf Stili","insertHorizontalRule":"Yatay Kural","delete":"Sil","insertUnorderedList":"Madde İşaretli Liste","tableProp":"Tablo Özelliği","insertImage":"Resim Ekle","superscript":"Üst Simge","subscript":"Alt Simge","createLink":"Bağlantı Oluştur","undo":"Geri Al","italic":"İtalik","fontName":"Yazı Tipi Adı","justifyLeft":"Sola Hizala","unlink":"Bağlantıyı Kaldır","toggleTableBorder":"Tablo Kenarlığını Göster/Gizle","fontSize":"Yazı Tipi Boyutu","systemShortcut":"\"${0}\" işlemi yalnızca tarayıcınızda bir klavye kısayoluyla birlikte kullanılabilir. Şunu kullanın: ${1}.","indent":"Girinti","redo":"Yinele","strikethrough":"Üstü Çizili","justifyFull":"Yasla","justifyCenter":"Ortaya Hizala","hiliteColor":"Arka Plan Rengi","deleteTable":"Tabloyu Sil","outdent":"Çıkıntı","cut":"Kes","plainFormatBlock":"Paragraf Stili","toggleDir":"Yönü Değiştir","bold":"Kalın","tabIndent":"Sekme Girintisi","justifyRight":"Sağa Hizala","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/zh-tw/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/zh-tw/FontChoice.js
deleted file mode 100644
index d32e163..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/zh-tw/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"最小","2":"較小","formatBlock":"格式","3":"小","4":"中","5":"大","6":"較大","7":"最大","fantasy":"Fantasy","serif":"新細明體","p":"段落","pre":"預先格式化","sans-serif":"新細明體","fontName":"字型","h1":"標題","h2":"子標題","h3":"次子標題","monospace":"等寬","fontSize":"大小","cursive":"Cursive"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/zh-tw/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/zh-tw/LinkDialog.js
deleted file mode 100644
index a639ac7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/zh-tw/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"text":"說明:","insertImageTitle":"影像內容","set":"設定","newWindow":"新視窗","topWindow":"最上層視窗","target":"目標:","createLinkTitle":"鏈結內容","parentWindow":"上層視窗","currentWindow":"現行視窗","url":"URL:"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/zh-tw/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/zh-tw/commands.js
deleted file mode 100644
index d72dc4e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/zh-tw/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"移除格式","copy":"複製","paste":"貼上","selectAll":"全選","insertOrderedList":"編號清單","insertTable":"插入/編輯表格","print":"列印","underline":"底線","foreColor":"前景顏色","htmlToggle":"HTML 原始檔","formatBlock":"段落樣式","newPage":"新建頁面","insertHorizontalRule":"水平尺規","delete":"刪除","insertUnorderedList":"項目符號清單","tableProp":"表格內容","insertImage":"插入影像","superscript":"上標","subscript":"下標","createLink":"建立鏈結","undo":"復原","fullScreen":"切換全螢幕","italic":"斜體","fontName":"字型名稱","justifyLeft":"靠左對齊","unlink":"移除鏈結","toggleTableBorder":"切換表格邊框","viewSource":"檢視 HTML 原始檔","fontSize":"字型大小","systemShortcut":"\"${0}\" 動作只能在瀏覽器中透過使用鍵盤快速鍵來使用。請使用 ${1}。","indent":"縮排","redo":"重做","strikethrough":"加刪除線","justifyFull":"對齊","justifyCenter":"置中對齊","hiliteColor":"背景顏色","deleteTable":"刪除表格","outdent":"凸排","cut":"剪下","plainFormatBlock":"段落樣式","toggleDir":"切換方向","bold":"粗體","tabIndent":"定位點縮排","justifyRight":"靠右對齊","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/zh/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/zh/FontChoice.js
deleted file mode 100644
index c5d8510..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/zh/FontChoice.js
+++ /dev/null
@@ -1 +0,0 @@
-({"1":"XXS 号","2":"XS 号","formatBlock":"格式","3":"S 号","4":"M 号","5":"L 号","6":"XL 号","7":"XXL 号","fantasy":"虚线","serif":"有衬线","p":"段落","pre":"预设有格式的","sans-serif":"无衬线","fontName":"字体","h1":"标题","h2":"子标题","h3":"二级子标题","monospace":"等宽字体","fontSize":"大小","cursive":"草书"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/zh/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/zh/LinkDialog.js
deleted file mode 100644
index da4c500..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/zh/LinkDialog.js
+++ /dev/null
@@ -1 +0,0 @@
-({"text":"描述:","insertImageTitle":"图像属性","set":"设置","newWindow":"新窗口","topWindow":"最顶部窗口","target":"目标:","createLinkTitle":"链接属性","parentWindow":"父窗口","currentWindow":"当前窗口","url":"URL:"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/zh/commands.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/zh/commands.js
deleted file mode 100644
index 43d29c8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/nls/zh/commands.js
+++ /dev/null
@@ -1 +0,0 @@
-({"removeFormat":"除去格式","copy":"复制","paste":"粘贴","selectAll":"全选","insertOrderedList":"编号列表","insertTable":"插入/编辑表","print":"打印","underline":"下划线","foreColor":"前景色","htmlToggle":"HTML 源代码","formatBlock":"段落样式","newPage":"新建页面","insertHorizontalRule":"水平线","delete":"删除","insertUnorderedList":"符号列表","tableProp":"表属性","insertImage":"插入图像","superscript":"上标","subscript":"下标","createLink":"创建链接","undo":"撤销","fullScreen":"切换全屏","italic":"斜体","fontName":"字体名称","justifyLeft":"左对齐","unlink":"除去链接","toggleTableBorder":"切换表边框","viewSource":"查看 HTML 源代码","fontSize":"字体大小","systemShortcut":"只能通过使用键盘快捷键在浏览器中执行 \"${0}\" 操作。请使用 ${1}。","indent":"增加缩进","redo":"重做","strikethrough":"删除线","justifyFull":"对齐","justifyCenter":"居中","hiliteColor":"背景色","deleteTable":"删除表","outdent":"减少缩进","cut":"剪切","plainFormatBlock":"段落样式","toggleDir":"切换方向","bold":"粗体","tabIndent":"制表符缩进","justifyRight":"右对齐","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/AlwaysShowToolbar.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/AlwaysShowToolbar.js
deleted file mode 100644
index d60427e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/AlwaysShowToolbar.js
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._editor.plugins.AlwaysShowToolbar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.plugins.AlwaysShowToolbar"] = true;
-dojo.provide("dijit._editor.plugins.AlwaysShowToolbar");
-
-dojo.declare("dijit._editor.plugins.AlwaysShowToolbar", dijit._editor._Plugin,
-	{
-	// summary:
-	//		This plugin is required for Editors in auto-expand mode.
-	//		It handles the auto-expansion as the user adds/deletes text,
-	//		and keeps the editor's toolbar visible even when the top of the editor
-	//		has scrolled off the top of the viewport (usually when editing a long
-	//		document).
-	// description:
-	//		Specify this in extraPlugins (or plugins) parameter and also set
-	//		height to "".
-	// example:
-	//	|	<div dojoType="dijit.Editor" height=""
-	//	|	extraPlugins="['dijit._editor.plugins.AlwaysShowToolbar']">
-
-	// _handleScroll: Boolean
-	//		Enables/disables the handler for scroll events
-	_handleScroll: true,
-
-	setEditor: function(e){
-		// Overrides _Plugin.setEditor().
-		if(!e.iframe){
-			console.log('Port AlwaysShowToolbar plugin to work with Editor without iframe');
-			return;
-		}
-
-		this.editor = e;
-
-		e.onLoadDeferred.addCallback(dojo.hitch(this, this.enable));
-	},
-
-	enable: function(d){
-		// summary:
-		//		Enable plugin.  Called when Editor has finished initializing.
-		// tags:
-		//		private
-
-		this._updateHeight();
-		this.connect(window, 'onscroll', "globalOnScrollHandler");
-		this.connect(this.editor, 'onNormalizedDisplayChanged', "_updateHeight");
-		return d;
-	},
-
-	_updateHeight: function(){
-		// summary:
-		//		Updates the height of the editor area to fit the contents.
-		var e = this.editor;
-		if(!e.isLoaded){ return; }
-		if(e.height){ return; }
-
-		var height = dojo.marginBox(e.editNode).h;
-		if(dojo.isOpera){
-			height = e.editNode.scrollHeight;
-		}
-		// console.debug('height',height);
-		// alert(this.editNode);
-
-		//height maybe zero in some cases even though the content is not empty,
-		//we try the height of body instead
-		if(!height){
-			height = dojo.marginBox(e.document.body).h;
-		}
-
-		if(height == 0){
-			console.debug("Can not figure out the height of the editing area!");
-			return; //prevent setting height to 0
-		}
-		if(dojo.isIE <= 7 && this.editor.minHeight){
-			var min = parseInt(this.editor.minHeight);
-			if(height < min){ height = min; }
-		}
-		if(height != this._lastHeight){
-			this._lastHeight = height;
-			// this.editorObject.style.height = this._lastHeight + "px";
-			dojo.marginBox(e.iframe, { h: this._lastHeight });
-		}
-	},
-
-	// _lastHeight: Integer
-	//		Height in px of the editor at the last time we did sizing
-	_lastHeight: 0,
-
-	globalOnScrollHandler: function(){
-		// summary:
-		//		Handler for scroll events that bubbled up to <html>
-		// tags:
-		//		private
-
-		var isIE6 = dojo.isIE < 7;
-		if(!this._handleScroll){ return; }
-		var tdn = this.editor.toolbar.domNode;
-		var db = dojo.body;
-
-		if(!this._scrollSetUp){
-			this._scrollSetUp = true;
-			this._scrollThreshold = dojo.position(tdn, true).y;
-//			console.log("threshold:", this._scrollThreshold);
-			//what's this for?? comment out for now
-//			if((isIE6)&&(db)&&(dojo.style(db, "backgroundIimage")=="none")){
-//				db.style.backgroundImage = "url(" + dojo.uri.moduleUri("dijit", "templates/blank.gif") + ")";
-//				db.style.backgroundAttachment = "fixed";
-//			}
-		}
-
-		var scrollPos = dojo._docScroll().y;
-		var s = tdn.style;
-
-		if(scrollPos > this._scrollThreshold && scrollPos < this._scrollThreshold+this._lastHeight){
-			// dojo.debug(scrollPos);
-			if(!this._fixEnabled){
-				var tdnbox = dojo.marginBox(tdn);
-				this.editor.iframe.style.marginTop = tdnbox.h+"px";
-
-				if(isIE6){
-					s.left = dojo.position(tdn).x;
-					if(tdn.previousSibling){
-						this._IEOriginalPos = ['after',tdn.previousSibling];
-					}else if(tdn.nextSibling){
-						this._IEOriginalPos = ['before',tdn.nextSibling];
-					}else{
-						this._IEOriginalPos = ['last',tdn.parentNode];
-					}
-					dojo.body().appendChild(tdn);
-					dojo.addClass(tdn,'dijitIEFixedToolbar');
-				}else{
-					s.position = "fixed";
-					s.top = "0px";
-				}
-
-				dojo.marginBox(tdn, { w: tdnbox.w });
-				s.zIndex = 2000;
-				this._fixEnabled = true;
-			}
-			// if we're showing the floating toolbar, make sure that if
-			// we've scrolled past the bottom of the editor that we hide
-			// the toolbar for this instance of the editor.
-
-			// TODO: when we get multiple editor toolbar support working
-			// correctly, ensure that we check this against the scroll
-			// position of the bottom-most editor instance.
-			var eHeight = (this.height) ? parseInt(this.editor.height) : this.editor._lastHeight;
-			s.display = (scrollPos > this._scrollThreshold+eHeight) ? "none" : "";
-		}else if(this._fixEnabled){
-			this.editor.iframe.style.marginTop = '';
-			s.position = "";
-			s.top = "";
-			s.zIndex = "";
-			s.display = "";
-			if(isIE6){
-				s.left = "";
-				dojo.removeClass(tdn,'dijitIEFixedToolbar');
-				if(this._IEOriginalPos){
-					dojo.place(tdn, this._IEOriginalPos[1], this._IEOriginalPos[0]);
-					this._IEOriginalPos = null;
-				}else{
-					dojo.place(tdn, this.editor.iframe, 'before');
-				}
-			}
-			s.width = "";
-			this._fixEnabled = false;
-		}
-	},
-
-	destroy: function(){
-		// Overrides _Plugin.destroy().   TODO: call this.inherited() rather than repeating code.
-		this._IEOriginalPos = null;
-		this._handleScroll = false;
-		dojo.forEach(this._connects, dojo.disconnect);
-//		clearInterval(this.scrollInterval);
-
-		if(dojo.isIE < 7){
-			dojo.removeClass(this.editor.toolbar.domNode, 'dijitIEFixedToolbar');
-		}
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/EnterKeyHandling.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/EnterKeyHandling.js
deleted file mode 100644
index 1c051e8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/EnterKeyHandling.js
+++ /dev/null
@@ -1,602 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._editor.plugins.EnterKeyHandling"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.plugins.EnterKeyHandling"] = true;
-dojo.provide("dijit._editor.plugins.EnterKeyHandling");
-
-dojo.require("dijit._base.scroll");
-
-dojo.declare("dijit._editor.plugins.EnterKeyHandling", dijit._editor._Plugin, {
-	// summary:
-	//		This plugin tries to make all browsers behave consistently w.r.t
-	//		displaying paragraphs, specifically dealing with when the user presses
-	//		the ENTER key.
-	//
-	//		It deals mainly with how the text appears on the screen (specifically
-	//		address the double-spaced line problem on IE), but also has some code
-	//		to normalize what attr('value') returns.
-	//
-	// description:
-	//		This plugin has three modes:
-	//
-	//			* blockModeForEnter=BR
-	//			* blockModeForEnter=DIV
-	//			* blockModeForEnter=P
-	//
-	//		In blockModeForEnter=P, the ENTER key semantically means "start a new
-	//		paragraph", whereas shift-ENTER means  "new line in the current paragraph".
-	//		For example:
-	//
-	//		|	first paragraph <shift-ENTER>
-	//		|	second line of first paragraph <ENTER>
-	//		|
-	//		|	second paragraph
-	//
-	//		In the other two modes, the ENTER key means to go to a new line in the
-	//		current paragraph, and users [visually] create a new paragraph by pressing ENTER twice.
-	//		For example, if the user enters text into an editor like this:
-	//
-	//		|		one <ENTER>
-	//		|		two <ENTER>
-	//		|		three <ENTER>
-	//		|		<ENTER>
-	//		|		four <ENTER>
-	//		|		five <ENTER>
-	//		|		six <ENTER>
-	//
-	//		It will appear on the screen as two paragraphs of three lines each.
-	//
-	//		blockNodeForEnter=BR
-	//		--------------------
-	//		On IE, typing the above keystrokes in the editor will internally produce DOM of:
-	//
-	//		|		<p>one</p>
-	//		|		<p>two</p>
-	//		|		<p>three</p>
-	//		|		<p></p>
-	//		|		<p>four</p>
-	//		|		<p>five</p>
-	//		|		<p>six</p>
-	//
-	//		However, blockNodeForEnter=BR makes the Editor on IE display like other browsers, by
-	//		changing the CSS for the <p> node to not have top/bottom margins,
-	//		thus eliminating the double-spaced appearance.
-	//
-	//		Also, attr('value') when used w/blockNodeForEnter=br on IE will return:
-	//
-	//		|	<p> one <br> two <br> three </p>
-	//		|	<p> four <br> five <br> six </p>
-	//
-	//		This output normalization implemented by a filter when the
-	//		editor writes out it's data, to convert consecutive <p>
-	//		nodes into a single <p> node with internal <br> separators.
-	//
-	//		There's also a pre-filter to mirror the post-filter.
-	//		It converts a single <p> with <br> line breaks
-	//		into separate <p> nodes, and creates empty <p> nodes for spacing
-	//		between paragraphs.
-	//
-	//		On FF typing the above keystrokes will internally generate:
-	//
-	//		|		one <br> two <br> three <br> <br> four <br> five <br> six <br>
-	//
-	//		And on Safari it will generate:
-	//
-	//		|		"one"
-	//		|		<div>two</div>
-	//		|		<div>three</div>
-	//		|		<div><br></div>
-	//		|		<div>four</div>
-	//		|		<div>five</div>
-	//		|		<div>six</div>
-	//
-	//		Thus, Safari and FF already look correct although semantically their content is a bit strange.
-	//		On Safari or Firefox blockNodeForEnter=BR uses the builtin editor command "insertBrOnReturn",
-	//		but that doesn't seem to do anything.
-	//		Thus, attr('value') on safari/FF returns the browser-specific HTML listed above,
-	//		rather than the semantically meaningful value that IE returns: <p>one<br>two</p> <p>three<br>four</p>.
-	//
-	//		(Note: originally based on http://bugs.dojotoolkit.org/ticket/2859)
-	//
-	//		blockNodeForEnter=P
-	//		-------------------
-	//		Plugin will monitor keystrokes and update the editor's content on the fly,
-	//		so that the ENTER key will create a new <p> on FF and Safari (it already
-	//		works that way by default on IE).
-	//
-	//		blockNodeForEnter=DIV
-	//		---------------------
-	//		Follows the same code path as blockNodeForEnter=P but inserting a <div>
-	//		on ENTER key.  Although it produces strange internal DOM, like this:
-	//
-	//		|	<div>paragraph one</div>
-	//		|	<div>paragraph one, line 2</div>
-	//		|	<div>&nbsp;</div>
-	//		|	<div>paragraph two</div>
-	//
-	//		it does provide a consistent look on all browsers, and the on-the-fly DOM updating
-	//		can be useful for collaborative editing.
-
-	// blockNodeForEnter: String
-	//		This property decides the behavior of Enter key. It can be either P,
-	//		DIV, BR, or empty (which means disable this feature). Anything else
-	//		will trigger errors.
-	//
-	//		See class description for more details.
-	blockNodeForEnter: 'BR',
-
-	constructor: function(args){
-		if(args){
-			dojo.mixin(this,args);
-		}
-	},
-
-	setEditor: function(editor){
-		// Overrides _Plugin.setEditor().
-		this.editor = editor;
-		if(this.blockNodeForEnter == 'BR'){
-			if(dojo.isIE){
-				editor.contentDomPreFilters.push(dojo.hitch(this, "regularPsToSingleLinePs"));
-				editor.contentDomPostFilters.push(dojo.hitch(this, "singleLinePsToRegularPs"));
-				editor.onLoadDeferred.addCallback(dojo.hitch(this, "_fixNewLineBehaviorForIE"));
-			}else{
-				editor.onLoadDeferred.addCallback(dojo.hitch(this,function(d){
-					try{
-						this.editor.document.execCommand("insertBrOnReturn", false, true);
-					}catch(e){}
-					return d;
-				}));
-			}
-		}else if(this.blockNodeForEnter){
-			// add enter key handler
-			// FIXME: need to port to the new event code!!
-			dojo['require']('dijit._editor.range');
-			var h = dojo.hitch(this,this.handleEnterKey);
-			editor.addKeyHandler(13, 0, 0, h); //enter
-			editor.addKeyHandler(13, 0, 1, h); //shift+enter
-			this.connect(this.editor,'onKeyPressed','onKeyPressed');
-		}
-	},
-	onKeyPressed: function(e){
-		// summary:
-		//		Handler for keypress events.
-		// tags:
-		//		private
-		if(this._checkListLater){
-			if(dojo.withGlobal(this.editor.window, 'isCollapsed', dijit)){
-				var liparent=dojo.withGlobal(this.editor.window, 'getAncestorElement', dijit._editor.selection, ['LI']);
-				if(!liparent){
-					// circulate the undo detection code by calling RichText::execCommand directly
-					dijit._editor.RichText.prototype.execCommand.call(this.editor, 'formatblock',this.blockNodeForEnter);
-					// set the innerHTML of the new block node
-					var block = dojo.withGlobal(this.editor.window, 'getAncestorElement', dijit._editor.selection, [this.blockNodeForEnter]);
-					if(block){
-						block.innerHTML=this.bogusHtmlContent;
-						if(dojo.isIE){
-							// move to the start by moving backwards one char
-							var r = this.editor.document.selection.createRange();
-							r.move('character',-1);
-							r.select();
-						}
-					}else{
-						console.error('onKeyPressed: Cannot find the new block node'); // FIXME
-					}
-				}else{
-					if(dojo.isMoz){
-						if(liparent.parentNode.parentNode.nodeName == 'LI'){
-							liparent=liparent.parentNode.parentNode;
-						}
-					}
-					var fc=liparent.firstChild;
-					if(fc && fc.nodeType == 1 && (fc.nodeName == 'UL' || fc.nodeName == 'OL')){
-						liparent.insertBefore(fc.ownerDocument.createTextNode('\xA0'),fc);
-						var newrange = dijit.range.create(this.editor.window);
-						newrange.setStart(liparent.firstChild,0);
-						var selection = dijit.range.getSelection(this.editor.window, true);
-						selection.removeAllRanges();
-						selection.addRange(newrange);
-					}
-				}
-			}
-			this._checkListLater = false;
-		}
-		if(this._pressedEnterInBlock){
-			// the new created is the original current P, so we have previousSibling below
-			if(this._pressedEnterInBlock.previousSibling){
-				this.removeTrailingBr(this._pressedEnterInBlock.previousSibling);
-			}
-			delete this._pressedEnterInBlock;
-		}
-	},
-
-	// bogusHtmlContent: [private] String
-	//		HTML to stick into a new empty block
-	bogusHtmlContent: '&nbsp;',
-
-	// blockNodes: [private] Regex
-	//		Regex for testing if a given tag is a block level (display:block) tag
-	blockNodes: /^(?:P|H1|H2|H3|H4|H5|H6|LI)$/,
-
-	handleEnterKey: function(e){
-		// summary:
-		//		Handler for enter key events when blockModeForEnter is DIV or P.
-		// description:
-		//		Manually handle enter key event to make the behavior consistent across
-		//		all supported browsers. See class description for details.
-		// tags:
-		//		private
-
-		var selection, range, newrange, doc=this.editor.document,br;
-		if(e.shiftKey){		// shift+enter always generates <br>
-			var parent = dojo.withGlobal(this.editor.window, "getParentElement", dijit._editor.selection);
-			var header = dijit.range.getAncestor(parent,this.blockNodes);
-			if(header){
-				if(!e.shiftKey && header.tagName == 'LI'){
-					return true; // let browser handle
-				}
-				selection = dijit.range.getSelection(this.editor.window);
-				range = selection.getRangeAt(0);
-				if(!range.collapsed){
-					range.deleteContents();
-					selection = dijit.range.getSelection(this.editor.window);
-					range = selection.getRangeAt(0);
-				}
-				if(dijit.range.atBeginningOfContainer(header, range.startContainer, range.startOffset)){
-					if(e.shiftKey){
-						br=doc.createElement('br');
-						newrange = dijit.range.create(this.editor.window);
-						header.insertBefore(br,header.firstChild);
-						newrange.setStartBefore(br.nextSibling);
-						selection.removeAllRanges();
-						selection.addRange(newrange);
-					}else{
-						dojo.place(br, header, "before");
-					}
-				}else if(dijit.range.atEndOfContainer(header, range.startContainer, range.startOffset)){
-					newrange = dijit.range.create(this.editor.window);
-					br=doc.createElement('br');
-					if(e.shiftKey){
-						header.appendChild(br);
-						header.appendChild(doc.createTextNode('\xA0'));
-						newrange.setStart(header.lastChild,0);
-					}else{
-						dojo.place(br, header, "after");
-						newrange.setStartAfter(header);
-					}
-
-					selection.removeAllRanges();
-					selection.addRange(newrange);
-				}else{
-					return true; // let browser handle
-				}
-			}else{
-				// don't change this: do not call this.execCommand, as that may have other logic in subclass
-				dijit._editor.RichText.prototype.execCommand.call(this.editor, 'inserthtml', '<br>');
-			}
-			return false;
-		}
-		var _letBrowserHandle = true;
-
-		// first remove selection
-		selection = dijit.range.getSelection(this.editor.window);
-		range = selection.getRangeAt(0);
-		if(!range.collapsed){
-			range.deleteContents();
-			selection = dijit.range.getSelection(this.editor.window);
-			range = selection.getRangeAt(0);
-		}
-
-		var block = dijit.range.getBlockAncestor(range.endContainer, null, this.editor.editNode);
-		var blockNode = block.blockNode;
-
-		// if this is under a LI or the parent of the blockNode is LI, just let browser to handle it
-		if((this._checkListLater = (blockNode && (blockNode.nodeName == 'LI' || blockNode.parentNode.nodeName == 'LI')))){
-			if(dojo.isMoz){
-				// press enter in middle of P may leave a trailing <br/>, let's remove it later
-				this._pressedEnterInBlock = blockNode;
-			}
-			// if this li only contains spaces, set the content to empty so the browser will outdent this item
-			if(/^(\s|&nbsp;|\xA0|<span\b[^>]*\bclass=['"]Apple-style-span['"][^>]*>(\s|&nbsp;|\xA0)<\/span>)?(<br>)?$/.test(blockNode.innerHTML)){
-				// empty LI node
-				blockNode.innerHTML = '';
-				if(dojo.isWebKit){ // WebKit tosses the range when innerHTML is reset
-					newrange = dijit.range.create(this.editor.window);
-					newrange.setStart(blockNode, 0);
-					selection.removeAllRanges();
-					selection.addRange(newrange);
-				}
-				this._checkListLater = false; // nothing to check since the browser handles outdent
-			}
-			return true;
-		}
-
-		// text node directly under body, let's wrap them in a node
-		if(!block.blockNode || block.blockNode===this.editor.editNode){
-			try{
-				dijit._editor.RichText.prototype.execCommand.call(this.editor, 'formatblock',this.blockNodeForEnter);
-			}catch(e2){ /*squelch FF3 exception bug when editor content is a single BR*/ }
-			// get the newly created block node
-			// FIXME
-			block = {blockNode:dojo.withGlobal(this.editor.window, "getAncestorElement", dijit._editor.selection, [this.blockNodeForEnter]),
-					blockContainer: this.editor.editNode};
-			if(block.blockNode){
-				if(block.blockNode != this.editor.editNode &&
-					(!(block.blockNode.textContent || block.blockNode.innerHTML).replace(/^\s+|\s+$/g, "").length)){
-					this.removeTrailingBr(block.blockNode);
-					return false;
-				}
-			}else{	// we shouldn't be here if formatblock worked
-				block.blockNode = this.editor.editNode;
-			}
-			selection = dijit.range.getSelection(this.editor.window);
-			range = selection.getRangeAt(0);
-		}
-
-		var newblock = doc.createElement(this.blockNodeForEnter);
-		newblock.innerHTML=this.bogusHtmlContent;
-		this.removeTrailingBr(block.blockNode);
-		if(dijit.range.atEndOfContainer(block.blockNode, range.endContainer, range.endOffset)){
-			if(block.blockNode === block.blockContainer){
-				block.blockNode.appendChild(newblock);
-			}else{
-				dojo.place(newblock, block.blockNode, "after");
-			}
-			_letBrowserHandle = false;
-			// lets move caret to the newly created block
-			newrange = dijit.range.create(this.editor.window);
-			newrange.setStart(newblock, 0);
-			selection.removeAllRanges();
-			selection.addRange(newrange);
-			if(this.editor.height){
-				dijit.scrollIntoView(newblock);
-			}
-		}else if(dijit.range.atBeginningOfContainer(block.blockNode,
-				range.startContainer, range.startOffset)){
-			dojo.place(newblock, block.blockNode, block.blockNode === block.blockContainer ? "first" : "before");
-			if(newblock.nextSibling && this.editor.height){
-				// position input caret - mostly WebKit needs this
-				newrange = dijit.range.create(this.editor.window);
-				newrange.setStart(newblock.nextSibling, 0);
-				selection.removeAllRanges();
-				selection.addRange(newrange);
-				// browser does not scroll the caret position into view, do it manually
-				dijit.scrollIntoView(newblock.nextSibling);
-			}
-			_letBrowserHandle = false;
-		}else{ // press enter in the middle of P
-			if(dojo.isMoz){
-				// press enter in middle of P may leave a trailing <br/>, let's remove it later
-				this._pressedEnterInBlock = block.blockNode;
-			}
-		}
-		return _letBrowserHandle;
-	},
-
-	removeTrailingBr: function(container){
-		// summary:
-		//		If last child of container is a <br>, then remove it.
-		// tags:
-		//		private
-		var para = /P|DIV|LI/i.test(container.tagName) ?
-			container : dijit._editor.selection.getParentOfType(container,['P','DIV','LI']);
-
-		if(!para){ return; }
-		if(para.lastChild){
-			if((para.childNodes.length > 1 && para.lastChild.nodeType == 3 && /^[\s\xAD]*$/.test(para.lastChild.nodeValue)) ||
-				para.lastChild.tagName=='BR'){
-
-				dojo.destroy(para.lastChild);
-			}
-		}
-		if(!para.childNodes.length){
-			para.innerHTML=this.bogusHtmlContent;
-		}
-	},
-	_fixNewLineBehaviorForIE: function(d){
-		// summary:
-		//		Insert CSS so <p> nodes don't have spacing around them,
-		//		thus hiding the fact that ENTER key on IE is creating new
-		//		paragraphs
-
-		// cannot use !important since there may be custom user styling;
-		var doc = this.editor.document;
-		if(doc.__INSERTED_EDITIOR_NEWLINE_CSS === undefined){
-			var style = dojo.create("style", {type: "text/css"}, doc.getElementsByTagName("head")[0]);
-			style.styleSheet.cssText = "p{margin:0;}"; // cannot use !important since there may be custom user styling;
-			this.editor.document.__INSERTED_EDITIOR_NEWLINE_CSS = true;
-		}
-		return d;
-	},
-	regularPsToSingleLinePs: function(element, noWhiteSpaceInEmptyP){
-		// summary:
-		//		Converts a <p> node containing <br>'s into multiple <p> nodes.
-		// description:
-		//		See singleLinePsToRegularPs().   This method does the
-		//		opposite thing, and is used as a pre-filter when loading the
-		//		editor, to mirror the effects of the post-filter at end of edit.
-		// tags:
-		//		private
-		function wrapLinesInPs(el){
-		  // move "lines" of top-level text nodes into ps
-			function wrapNodes(nodes){
-				// nodes are assumed to all be siblings
-				var newP = nodes[0].ownerDocument.createElement('p'); // FIXME: not very idiomatic
-				nodes[0].parentNode.insertBefore(newP, nodes[0]);
-				dojo.forEach(nodes, function(node){
-					newP.appendChild(node);
-				});
-			}
-
-			var currentNodeIndex = 0;
-			var nodesInLine = [];
-			var currentNode;
-			while(currentNodeIndex < el.childNodes.length){
-				currentNode = el.childNodes[currentNodeIndex];
-				if( currentNode.nodeType==3 ||	// text node
-					(currentNode.nodeType==1 && currentNode.nodeName!='BR' && dojo.style(currentNode, "display")!="block")
-				){
-					nodesInLine.push(currentNode);
-				}else{
-					// hit line delimiter; process nodesInLine if there are any
-					var nextCurrentNode = currentNode.nextSibling;
-					if(nodesInLine.length){
-						wrapNodes(nodesInLine);
-						currentNodeIndex = (currentNodeIndex+1)-nodesInLine.length;
-						if(currentNode.nodeName=="BR"){
-							dojo.destroy(currentNode);
-						}
-					}
-					nodesInLine = [];
-				}
-				currentNodeIndex++;
-			}
-			if(nodesInLine.length){ wrapNodes(nodesInLine); }
-		}
-
-		function splitP(el){
-			// split a paragraph into seperate paragraphs at BRs
-			var currentNode = null;
-			var trailingNodes = [];
-			var lastNodeIndex = el.childNodes.length-1;
-			for(var i=lastNodeIndex; i>=0; i--){
-				currentNode = el.childNodes[i];
-				if(currentNode.nodeName=="BR"){
-					var newP = currentNode.ownerDocument.createElement('p');
-					dojo.place(newP, el, "after");
-					if(trailingNodes.length==0 && i != lastNodeIndex){
-						newP.innerHTML = "&nbsp;"
-					}
-					dojo.forEach(trailingNodes, function(node){
-						newP.appendChild(node);
-					});
-					dojo.destroy(currentNode);
-					trailingNodes = [];
-				}else{
-					trailingNodes.unshift(currentNode);
-				}
-			}
-		}
-
-		var pList = [];
-		var ps = element.getElementsByTagName('p');
-		dojo.forEach(ps, function(p){ pList.push(p); });
-		dojo.forEach(pList, function(p){
-			var prevSib = p.previousSibling;
-			if(	(prevSib) && (prevSib.nodeType == 1) && 
-				(prevSib.nodeName == 'P' || dojo.style(prevSib, 'display') != 'block')
-			){
-				var newP = p.parentNode.insertBefore(this.document.createElement('p'), p);
-				// this is essential to prevent IE from losing the P.
-				// if it's going to be innerHTML'd later we need
-				// to add the &nbsp; to _really_ force the issue
-				newP.innerHTML = noWhiteSpaceInEmptyP ? "" : "&nbsp;";
-			}
-			splitP(p);
-		},this.editor);
-		wrapLinesInPs(element);
-		return element;
-	},
-
-	singleLinePsToRegularPs: function(element){
-		// summary:
-		//		Called as post-filter.
-		//		Apparently collapses adjacent <p> nodes into a single <p>
-		//		nodes with <br> separating each line.
-		//
-		// example:
-		//		Given this input:
-		//	|	<p>line 1</p>
-		//	|	<p>line 2</p>
-		//	|	<ol>
-		//	|		<li>item 1
-		//	|		<li>item 2
-		//	|	</ol>
-		//	|	<p>line 3</p>
-		//	|	<p>line 4</p>
-		//
-		//		Will convert to:
-		//	|	<p>line 1<br>line 2</p>
-		//	|	<ol>
-		//	|		<li>item 1
-		//	|		<li>item 2
-		//	|	</ol>
-		//	|	<p>line 3<br>line 4</p>
-		//
-		//		Not sure why this situation would even come up after the pre-filter and
-		//		the enter-key-handling code.
-		//
-		// tags:
-		//		private
-
-		function getParagraphParents(node){
-			// summary:
-			//		Used to get list of all nodes that contain paragraphs.
-			//		Seems like that would just be the very top node itself, but apparently not.
-			var ps = node.getElementsByTagName('p');
-			var parents = [];
-			for(var i=0; i<ps.length; i++){
-				var p = ps[i];
-				var knownParent = false;
-				for(var k=0; k < parents.length; k++){
-					if(parents[k] === p.parentNode){
-						knownParent = true;
-						break;
-					}
-				}
-				if(!knownParent){
-					parents.push(p.parentNode);
-				}
-			}
-			return parents;
-		}
-
-		function isParagraphDelimiter(node){
-			return (!node.childNodes.length || node.innerHTML=="&nbsp;");
-		}
-
-		var paragraphContainers = getParagraphParents(element);
-		for(var i=0; i<paragraphContainers.length; i++){
-			var container = paragraphContainers[i];
-			var firstPInBlock = null;
-			var node = container.firstChild;
-			var deleteNode = null;
-			while(node){
-				if(node.nodeType != 1 || node.tagName != 'P' ||
-						(node.getAttributeNode('style') || {/*no style*/}).specified){
-					firstPInBlock = null;
-				}else if(isParagraphDelimiter(node)){
-					deleteNode = node;
-					firstPInBlock = null;
-				}else{
-					if(firstPInBlock == null){
-						firstPInBlock = node;
-					}else{
-						if( (!firstPInBlock.lastChild || firstPInBlock.lastChild.nodeName != 'BR') &&
-							(node.firstChild) &&
-							(node.firstChild.nodeName != 'BR')
-						){
-							firstPInBlock.appendChild(this.editor.document.createElement('br'));
-						}
-						while(node.firstChild){
-							firstPInBlock.appendChild(node.firstChild);
-						}
-						deleteNode = node;
-					}
-				}
-				node = node.nextSibling;
-				if(deleteNode){
-					dojo.destroy(deleteNode);
-					deleteNode = null;
-				}
-			}
-		}
-		return element;
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/FontChoice.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/FontChoice.js
deleted file mode 100644
index 25ab7b7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/FontChoice.js
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._editor.plugins.FontChoice"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.plugins.FontChoice"] = true;
-dojo.provide("dijit._editor.plugins.FontChoice");
-
-dojo.require("dijit._editor._Plugin");
-dojo.require("dijit._editor.range");
-dojo.require("dijit.form.FilteringSelect");
-dojo.require("dojo.data.ItemFileReadStore");
-dojo.require("dojo.i18n");
-
-dojo.requireLocalization("dijit._editor", "FontChoice", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
-
-dojo.declare("dijit._editor.plugins._FontDropDown",
-	[dijit._Widget, dijit._Templated],{
-	// summary:
-	//		Base class for widgets that contains a label (like "Font:")
-	//		and a FilteringSelect drop down to pick a value.
-	//		Used as Toolbar entry.
-
-	// label: [public] String
-	//		The label to apply to this particular FontDropDown.
-	label: "",
-
-	// widgetsInTemplate: [public] boolean
-	//		Over-ride denoting the template has widgets to parse.
-	widgetsInTemplate: true,
-
-	// plainText: [public] boolean
-	//		Flag to indicate that the returned label should be plain text
-	//		instead of an example.
-	plainText: false,
-
-	// templateString: [public] String
-	//		The template used to construct the labeled dropdown.
-	templateString:
-		"<span style='white-space: nowrap' class='dijit dijitReset dijitInline'>" +
-			"<label class='dijitLeft dijitInline' for='${selectId}'>${label}</label>" +
-			"<input dojoType='dijit.form.FilteringSelect' required=false labelType=html labelAttr=label searchAttr=name " +
-					"tabIndex='-1' id='${selectId}' dojoAttachPoint='select' value=''/>" +
-		"</span>",
-
-	postMixInProperties: function(){
-		// summary:
-		//		Over-ride to misin specific properties.
-		this.inherited(arguments);
-
-		this.strings = dojo.i18n.getLocalization("dijit._editor", "FontChoice");
-
-		// Set some substitution variables used in the template
-		this.label = this.strings[this.command];
-		this.id = dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
-		this.selectId = this.id + "_select";
-
-		this.inherited(arguments);
-	},
-
-	postCreate: function(){
-		// summary:
-		//		Over-ride for the default postCreate action
-		//		This establishes the filtering selects and the like.
-
-		// Initialize the list of items in the drop down by creating data store with items like:
-		// {value: 1, name: "xx-small", label: "<font size=1>xx-small</font-size>" }
-		var	items = dojo.map(this.values, function(value){
-				var name = this.strings[value] || value;
-				return {
-					label: this.getLabel(value, name),
-					name: name,
-					value: value
-				};
-			}, this);
-
-		this.select.store = new dojo.data.ItemFileReadStore({
-			data: {
-				identifier: "value",
-				items: items
-			}
-		});
-
-		this.select.attr("value", "", false);
-		this.disabled = this.select.attr("disabled");
-	},
-
-	_setValueAttr: function(value, priorityChange){
-		// summary:
-		//		Over-ride for the default action of setting the
-		//		widget value, maps the input to known values
-		// value: Object|String
-		//		The value to set in the select.
-		// priorityChange:
-		//		Optional parameter used to tell the select whether or not to fire
-		//		onChange event.
-
-		//if the value is not a permitted value, just set empty string to prevent showing the warning icon
-		priorityChange = priorityChange !== false?true:false;
-		this.select.attr('value', dojo.indexOf(this.values,value) < 0 ? "" : value, priorityChange);
-		if(!priorityChange){
-			// Clear the last state in case of updateState calls.  Ref: #10466
-			this.select._lastValueReported=null;
-		}
-	},
-
-	_getValueAttr: function(){
-		// summary:
-		//		Allow retreving the value from the composite select on
-		//		call to button.attr("value");
-		return this.select.attr('value');
-	},
-
-	focus: function(){
-		// summary:
-		//		Over-ride for focus control of this widget.  Delegates focus down to the
-		//		filtering select.
-		this.select.focus();
-	},
-
-	_setDisabledAttr: function(value){
-		// summary:
-		//		Over-ride for the button's 'disabled' attribute so that it can be
-		//		disabled programmatically.
-
-		// Save off ths disabled state so the get retrieves it correctly
-		//without needing to have a function proxy it.
-		this.disabled = value;
-		this.select.attr("disabled", value);
-	}
-});
-
-
-dojo.declare("dijit._editor.plugins._FontNameDropDown", dijit._editor.plugins._FontDropDown, {
-	// summary:
-	//		Dropdown to select a font; goes in editor toolbar.
-
-	// generic: Boolean
-	//		Use generic (web standard) font names
-	generic: false,
-
-	// command: [public] String
-	//		The editor 'command' implemented by this plugin.
-	command: "fontName",
-
-	postMixInProperties: function(){
-		// summary:
-		//		Over-ride for the default posr mixin control
-		if(!this.values){
-			this.values = this.generic ?
-				["serif", "sans-serif", "monospace", "cursive", "fantasy"] : // CSS font-family generics
-					["Arial", "Times New Roman", "Comic Sans MS", "Courier New"];
-		}
-		this.inherited(arguments);
-	},
-
-	getLabel: function(value, name){
-		// summary:
-		//		Function used to generate the labels of the format dropdown
-		//		will return a formatted, or plain label based on the value
-		//		of the plainText option.
-		// value: String
-		//		The 'insert value' associated with a name
-		// name: String
-		//		The text name of the value
-		if(this.plainText){
-			return name;
-		}else{
-			return "<div style='font-family: "+value+"'>" + name + "</div>";
-		}
-	},
-
-	_setValueAttr: function(value, priorityChange){
-		// summary:
-		//		Over-ride for the default action of setting the
-		//		widget value, maps the input to known values
-
-		priorityChange = priorityChange !== false?true:false;
-		if(this.generic){
-			var map = {
-				"Arial": "sans-serif",
-				"Helvetica": "sans-serif",
-				"Myriad": "sans-serif",
-				"Times": "serif",
-				"Times New Roman": "serif",
-				"Comic Sans MS": "cursive",
-				"Apple Chancery": "cursive",
-				"Courier": "monospace",
-				"Courier New": "monospace",
-				"Papyrus": "fantasy"
-//					,"????": "fantasy" TODO: IE doesn't map fantasy font-family?
-			};
-			value = map[value] || value;
-		}
-		this.inherited(arguments, [value, priorityChange]);
-	}
-});
-
-dojo.declare("dijit._editor.plugins._FontSizeDropDown", dijit._editor.plugins._FontDropDown, {
-	// summary:
-	//		Dropdown to select a font size; goes in editor toolbar.
-
-	// command: [public] String
-	//		The editor 'command' implemented by this plugin.
-	command: "fontSize",
-
-	// values: [public] Number[]
-	//		The HTML font size values supported by this plugin
-	values: [1,2,3,4,5,6,7], // sizes according to the old HTML FONT SIZE
-
-	getLabel: function(value, name){
-		// summary:
-		//		Function used to generate the labels of the format dropdown
-		//		will return a formatted, or plain label based on the value
-		//		of the plainText option.
-		//		We're stuck using the deprecated FONT tag to correspond
-		//		with the size measurements used by the editor
-		// value: String
-		//		The 'insert value' associated with a name
-		// name: String
-		//		The text name of the value
-		if(this.plainText){
-			return name;
-		}else{
-			return "<font size=" + value + "'>" + name + "</font>";
-		}
-	},
-
-	_setValueAttr: function(value, priorityChange){
-		// summary:
-		//		Over-ride for the default action of setting the
-		//		widget value, maps the input to known values
-		priorityChange = priorityChange !== false?true:false;
-		if(value.indexOf && value.indexOf("px") != -1){
-			var pixels = parseInt(value, 10);
-			value = {10:1, 13:2, 16:3, 18:4, 24:5, 32:6, 48:7}[pixels] || value;
-		}
-
-		this.inherited(arguments, [value, priorityChange]);
-	}
-});
-
-
-dojo.declare("dijit._editor.plugins._FormatBlockDropDown", dijit._editor.plugins._FontDropDown, {
-	// summary:
-	//		Dropdown to select a format (like paragraph or heading); goes in editor toolbar.
-
-	// command: [public] String
-	//		The editor 'command' implemented by this plugin.
-	command: "formatBlock",
-
-	// values: [public] Array
-	//		The HTML format tags supported by this plugin
-	values: ["p", "h1", "h2", "h3", "pre"],
-
-	getLabel: function(value, name){
-		// summary:
-		//		Function used to generate the labels of the format dropdown
-		//		will return a formatted, or plain label based on the value
-		//		of the plainText option.
-		// value: String
-		//		The 'insert value' associated with a name
-		// name: String
-		//		The text name of the value
-		if(this.plainText){
-			return name;
-		}else{
-			return "<" + value + ">" + name + "</" + value + ">";
-		}
-	}
-});
-
-// TODO: for 2.0, split into FontChoice plugin into three separate classes,
-// one for each command (and change registry below)
-dojo.declare("dijit._editor.plugins.FontChoice", dijit._editor._Plugin,{
-	// summary:
-	//		This plugin provides three drop downs for setting style in the editor
-	//		(font, font size, and format block), as controlled by command.
-	//
-	// description:
-	//		The commands provided by this plugin are:
-	//
-	//		* fontName
-	//	|		Provides a drop down to select from a list of font names
-	//		* fontSize
-	//	|		Provides a drop down to select from a list of font sizes
-	//		* formatBlock
-	//	|		Provides a drop down to select from a list of block styles
-	//	|
-	//
-	//		which can easily be added to an editor by including one or more of the above commands
-	//		in the `plugins` attribute as follows:
-	//
-	//	|	plugins="['fontName','fontSize',...]"
-	//
-	//		It is possible to override the default dropdown list by providing an Array for the `custom` property when
-	//		instantiating this plugin, e.g.
-	//
-	//	|	plugins="[{name:'dijit._editor.plugins.FontChoice', command:'fontName', custom:['Verdana','Myriad','Garamond']},...]"
-	//
-	//		Alternatively, for `fontName` only, `generic:true` may be specified to provide a dropdown with
-	//		[CSS generic font families](http://www.w3.org/TR/REC-CSS2/fonts.html#generic-font-families)
-	//
-	//		Note that the editor is often unable to properly handle font styling information defined outside
-	//		the context of the current editor instance, such as pre-populated HTML.
-
-	// useDefaultCommand: [protected] booleam
-	//		Override _Plugin.useDefaultCommand...
-	//		processing is handled by this plugin, not by dijit.Editor.
-	useDefaultCommand: false,
-
-	_initButton: function(){
-		// summary:
-		//		Overrides _Plugin._initButton(), to initialize the FilteringSelect+label in toolbar,
-		//		rather than a simple button.
-		// tags:
-		//		protected
-
-		// Create the widget to go into the toolbar (the so-called "button")
-		var clazz = {
-				fontName: dijit._editor.plugins._FontNameDropDown,
-				fontSize: dijit._editor.plugins._FontSizeDropDown,
-				formatBlock: dijit._editor.plugins._FormatBlockDropDown
-			}[this.command],
-		params = this.params;
-
-		// For back-compat reasons support setting custom values via "custom" parameter
-		// rather than "values" parameter
-		if(this.params.custom){
-			params.values = this.params.custom;
-		}
-
-		this.button = new clazz(params);
-
-		// Reflect changes to the drop down in the editor
-		this.connect(this.button.select, "onChange", function(choice){
-			// User invoked change, since all internal updates set priorityChange to false and will
-			// not trigger an onChange event.
-			this.editor.focus();
-
-			if(this.command == "fontName" && choice.indexOf(" ") != -1){ choice = "'" + choice + "'"; }
-
-			// Invoke, the editor already normalizes commands called through its
-			// execCommand.
-			this.editor.execCommand(this.command, choice);
-		});
-	},
-
-	updateState: function(){
-		// summary:
-		//		Overrides _Plugin.updateState().  This controls updating the menu
-		//		options to the right values on state changes in the document (that trigger a
-		//		test of the actions.)
-		//		It set value of drop down in toolbar to reflect font/font size/format block
-		//		of text at current caret position.
-		// tags:
-		//		protected
-		var _e = this.editor;
-		var _c = this.command;
-		if(!_e || !_e.isLoaded || !_c.length){ return; }
-		if(this.button){
-			var value;
-			try{
-				value = _e.queryCommandValue(_c) || "";
-			}catch(e){
-				//Firefox may throw error above if the editor is just loaded, ignore it
-				value = "";
-			}
-
-			// strip off single quotes, if any
-			var quoted = dojo.isString(value) && value.match(/'([^']*)'/);
-			if(quoted){ value = quoted[1]; }
-
-			if(!value && _c === "formatBlock"){
-				// Some browsers (WebKit) doesn't actually get the tag info right.
-				// So ... lets double-check it.
-				var elem;
-				// Try to find the current element where the caret is.
-				var sel = dijit.range.getSelection(this.editor.window);
-				if(sel && sel.rangeCount > 0){
-					var range = sel.getRangeAt(0);
-					if(range){
-						elem = range.endContainer;
-					}
-				}
-
-				// Okay, now see if we can find one of the formatting types we're in.
-				while(elem && elem !== _e.editNode && elem !== _e.document){
-					var tg = elem.tagName?elem.tagName.toLowerCase():"";
-					if(tg && dojo.indexOf(this.button.values, tg) > -1){
-						value = tg;
-						break;
-					}
-					elem = elem.parentNode;
-				}
-			}
-
-			if(value !== this.button.attr("value")){
-				// Set the value, but denote it is not a priority change, so no
-				// onchange fires.
-				this.button.attr('value', value, false);
-			}
-		}
-	}
-});
-
-// Register this plugin.
-dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
-	if(o.plugin){ return; }
-	switch(o.args.name){
-	case "fontName": case "fontSize": case "formatBlock":
-		o.plugin = new dijit._editor.plugins.FontChoice({
-			command: o.args.name,
-			plainText: o.args.plainText?o.args.plainText:false
-		});
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/FullScreen.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/FullScreen.js
deleted file mode 100644
index 137cd4f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/FullScreen.js
+++ /dev/null
@@ -1,393 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._editor.plugins.FullScreen"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.plugins.FullScreen"] = true;
-dojo.provide("dijit._editor.plugins.FullScreen");
-
-dojo.require("dijit._editor._Plugin");
-dojo.require("dijit.form.Button");
-dojo.require("dojo.i18n");
-
-dojo.requireLocalization("dijit._editor", "commands", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
-
-dojo.declare("dijit._editor.plugins.FullScreen",dijit._editor._Plugin,{
-	// summary:
-	//		This plugin provides FullScreen cabability to the editor.  When
-	//		toggled on, it will render the editor into the full window and
-	//		overlay everything.  It also binds to the hotkey: CTRL-SHIFT-F11
-	//		for toggling fullscreen mode.
-
-	// zIndex: [public] Number
-	//		zIndex value used for overlaying the full page.
-	//		default is 500.
-	zIndex: 500,
-
-	// _origState: [private] Object
-	//		The original view state of the editor.
-	_origState: null,
-
-	// _origiFrameState: [private] Object
-	//		The original view state of the iframe of the editor.
-	_origiFrameState: null,
-
-	// _resizeHandle: [private] Object
-	//		Connection point used for handling resize when window resizes.
-	_resizeHandle: null,
-
-	// isFullscreen: [const] boolean
-	//		Read-Only variable used to denote of the editor is in fullscreen mode or not.
-	isFullscreen: false,
-
-	toggle: function(){
-		// summary:
-		//		Function to allow programmatic toggling of the view.
-		this.button.attr("checked", !this.button.attr("checked"));
-	},
-
-	_initButton: function(){
-		// summary:
-		//		Over-ride for creation of the resize button.
-		var strings = dojo.i18n.getLocalization("dijit._editor", "commands");
-		this.button = new dijit.form.ToggleButton({
-			label: strings["fullScreen"],
-			showLabel: false,
-			iconClass: this.iconClassPrefix + " " + this.iconClassPrefix + "FullScreen",
-			tabIndex: "-1",
-			onChange: dojo.hitch(this, "_setFullScreen")
-		});
-	},
-
-	setEditor: function(editor){
-		// summary:
-		//		Over-ride for the setting of the editor.
-		// editor: Object
-		//		The editor to configure for this plugin to use.
-		this.editor = editor;
-		this._initButton();
-
-		this.editor.addKeyHandler(dojo.keys.F11, true, true, dojo.hitch(this, function(e){
-			// Enable the CTRL-SHIFT-F11 hotkey for fullscreen mode.
-			this.toggle();
-			dojo.stopEvent(e);
-			setTimeout(dojo.hitch(this, function(){this.editor.focus();}), 250);
-			return true;
-		}));
-		this.connect(this.editor.domNode, "onkeydown", "_containFocus");
-	},
-
-	_containFocus: function(e){
-		// summary:
-		//		When in Full Screen mode, it's good to try and retain focus in the editor
-		//		so this function is intended to try and constrain the TAB key.
-		// e: Event
-		//		The key event.
-		// tags:
-		//		private
-		if(this.isFullscreen){
-			var ed = this.editor;
-			if(!ed.isTabIndent &&
-				ed._fullscreen_oldOnKeyDown &&
-				e.keyCode === dojo.keys.TAB){
-				// If we're in fullscreen mode, we want to take over how tab moves focus a bit.
-				// to keep it within the editor since it's hiding the rest of the page.
-				// IE hates changing focus IN the event handler, so need to put calls
-				// in a timeout.  Gotta love IE.
-				// Also need to check for alternate view nodes if present and active.
-				var f = dijit.getFocus();
-				var avn = this._getAltViewNode();
-				if(f.node == ed.iframe ||
-					(avn && f.node === avn)){
-					setTimeout(dojo.hitch(this, function(){
-						ed.toolbar.focus();
-					}), 10);
-				}else{
-					if(avn && dojo.style(ed.iframe, "display") === "none"){
-						setTimeout(dojo.hitch(this, function(){
-							dijit.focus(avn);
-						}), 10);
-					}else{
-						setTimeout(dojo.hitch(this, function(){
-							ed.focus();
-						}), 10);
-					}
-				}
-				dojo.stopEvent(e);
-			}else if(ed._fullscreen_oldOnKeyDown){
-				// Only call up when it's a different function.  Traps corner case event issue
-				// on IE which caused stack overflow on handler cleanup.
-				ed._fullscreen_oldOnKeyDown(e);
-			}
-		}
-	},
-
-	_resizeEditor: function(){
-		// summary:
-		//		Function to handle resizing the editor as the viewport
-		//		resizes (window scaled)
-		// tags:
-		//		private
-		var vp = dijit.getViewport();
-		dojo.marginBox(this.editor.domNode, {
-			w: vp.w,
-			h: vp.h
-		});
-
-		//Adjust the inernal heights too, as they can be a bit off.
-		var tBox = dojo.marginBox(this.editor.toolbar.domNode);
-		var extents = dojo._getPadBorderExtents(this.editor.domNode);
-
-		//AQdjust it.
-		var cHeight = vp.h - (tBox.h + extents.h);
-		dojo.marginBox(this.editor.iframe.parentNode, {
-			h: cHeight
-		});
-		dojo.marginBox(this.editor.iframe, {
-			h: cHeight
-		});
-	},
-
-	_getAltViewNode: function(){
-		// summary:
-		//		This function is intended as a hook point for setting an
-		//		alternate view node for when in full screen mode and the
-		//		editable iframe is hidden.
-		// tags:
-		//		protected.
-	},
-
-	_setFullScreen: function(full){
-		// summary:
-		//		Function to handle toggling between full screen and
-		//		regular view.
-		// tags:
-		//		private
-		var vp = dijit.getViewport();
-
-		//Alias this for shorter code.
-		var ed = this.editor;
-		var body = dojo.body();
-		var editorParent = ed.domNode.parentNode;
-
-		this.isFullscreen = full;
-
-		if(full){
-			//Parent classes can royally screw up this plugin, so we 
-			//have to set eveything to position static.
-			while(editorParent && editorParent !== dojo.body()){
-				dojo.addClass(editorParent, "dijitForceStatic");
-				editorParent = editorParent.parentNode;
-			}
-
-			// Save off the resize function.  We want to kill its behavior.
-			this._editorResizeHolder = this.editor.resize;
-			ed.resize = function() {} ;
-
-			// Try to constrain focus control.
-			ed._fullscreen_oldOnKeyDown = ed.onKeyDown;
-			ed.onKeyDown = dojo.hitch(this, this._containFocus);
-
-			this._origState = {};
-			this._origiFrameState = {};
-
-			// Store the basic editor state we have to restore later.
-			// Not using dojo.style here, had problems, didn't
-			// give me stuff like 100%, gave me pixel calculated values.
-			// Need the exact original values.
-			var domNode = ed.domNode,
-				domStyle = domNode && domNode.style || {};
-			this._origState = {
-				width: domStyle.width || "",
-				height: domStyle.height || "",
-				top: dojo.style(domNode, "top") || "",
-				left: dojo.style(domNode, "left") || "",
-				position: dojo.style(domNode, "position") || "static"
-			};
-
-			// Store the iframe state we have to restore later.
-			// Not using dojo.style here, had problems, didn't
-			// give me stuff like 100%, gave me pixel calculated values.
-			// Need the exact original values.
-			var iframe = ed.iframe,
-				iframeStyle = iframe && iframe.style || {};
-
-			var bc = dojo.style(ed.iframe, "backgroundColor");
-			this._origiFrameState = {
-				backgroundColor: bc || "transparent",
-				width: iframeStyle.width || "auto",
-				height: iframeStyle.height || "auto",
-				zIndex: iframeStyle.zIndex || ""
-			};
-
-			// Okay, size everything.
-			dojo.style(ed.domNode, {
-				position: "absolute",
-				top: "0px",
-				left: "0px",
-				zIndex: this.zIndex,
-				width: vp.w + "px",
-				height: vp.h + "px"
-			});
-
-			dojo.style(ed.iframe, {
-				height: "100%",
-				width: "100%",
-				zIndex: this.zIndex,
-				backgroundColor: bc !== "transparent" &&
-					bc !== "rgba(0, 0, 0, 0)"?bc:"white"
-			});
-
-			dojo.style(ed.iframe.parentNode, {
-				height: "95%",
-				width: "100%"
-			});
-
-			// Store the overflow state we have to restore later.
-			// IE had issues, so have to check that it's defined.  Ugh.
-			if(body.style && body.style.overflow){
-				this._oldOverflow = dojo.style(body, "overflow");
-			}else{
-				this._oldOverflow = "";
-			}
-
-			if(dojo.isIE && !dojo.isQuirks){
-				// IE will put scrollbars in anyway, html (parent of body)
-				// also controls them in standards mode, so we have to
-				// remove them, argh.
-				if(body.parentNode &&
-					body.parentNode.style &&
-					body.parentNode.style.overflow){
-					this._oldBodyParentOverflow = body.parentNode.style.overflow;
-				}else{
-					this._oldBodyParentOverflow = "scroll";
-				}
-				dojo.style(body.parentNode, "overflow", "hidden");
-			}
-			dojo.style(body, "overflow", "hidden");
-
-			var resizer = function(){
-				// function to handle resize events.
-				// Will check current VP and only resize if
-				// different.
-				var vp = dijit.getViewport();
-				if("_prevW" in this && "_prevH" in this){
-					// No actual size change, ignore.
-					if(vp.w === this._prevW && vp.h === this._prevH){
-						return;
-					}
-				}else{
-					this._prevW = vp.w;
-					this._prevH = vp.h;
-				}
-				if(this._resizer){
-					clearTimeout(this._resizer);
-					delete this._resizer;
-				}
-				// Timeout it to help avoid spamming resize on IE.
-				// Works for all browsers.
-				this._resizer = setTimeout(dojo.hitch(this, function(){
-					delete this._resizer;
-					this._resizeEditor();
-				}), 10);
-			};
-			this._resizeHandle = dojo.connect(window, "onresize", this, resizer);
-
-			// Call it once to work around IE glitchiness.  Safe for other browsers too.
-			this._resizeEditor();
-			var dn = this.editor.toolbar.domNode;
-			setTimeout(function(){dijit.scrollIntoView(dn);}, 250);
-		}else{
-			// Restore resize function
-			if(this._editorResizeHolder){
-				this.editor.resize = this._editorResizeHolder;
-			}
-
-			if(!this._origState && !this._origiFrameState){
-				// If we actually didn't toggle, then don't do anything.
-				return;
-			}
-			if(ed._fullscreen_oldOnKeyDown){
-				ed.onKeyDown = ed._fullscreen_oldOnKeyDown;
-				delete ed._fullscreen_oldOnKeyDown;
-			}
-			if(this._resizeHandle){
-				// Cleanup resizing listeners
-				dojo.disconnect(this._resizeHandle);
-				this._resizeHandle = null;
-			}
-			if(this._rst){
-				clearTimeout(this._rst);
-				this._rst = null;
-			}
-
-			//Remove all position static class assigns.
-			while(editorParent && editorParent !== dojo.body()){
-				dojo.removeClass(editorParent, "dijitForceStatic");
-				editorParent = editorParent.parentNode;
-			}
-
-			// Add a timeout to make sure we don't have a resize firing in the
-			// background at the time of minimize.
-			var self = this;
-			setTimeout(function(){
-				// Restore all the editor state.
-				if(dojo.isIE && !dojo.isQuirks){
-					body.parentNode.style.overflow = self._oldBodyParentOverflow;
-					delete self._oldBodyParentOverflow;
-				}
-				dojo.style(body, "overflow", self._oldOverflow);
-				delete self._oldOverflow;
-
-				dojo.style(ed.domNode, self._origState);
-				dojo.style(ed.iframe.parentNode, {
-					height: "",
-					width: ""
-				});
-				dojo.style(ed.iframe, self._origiFrameState);
-				delete self._origState;
-				delete self._origiFrameState;
-				// In case it is contained in a layout and the layout changed size,
-				// go ahead and call resize.
-				ed.resize();
-				var pWidget = dijit.getEnclosingWidget(ed.domNode.parentNode);
-				if(pWidget && pWidget.resize){
-				    pWidget.resize();
-				}
-				dijit.scrollIntoView(self.editor.toolbar.domNode);
-			}, 100);
-		}
-	},
-
-	destroy: function(){
-		// summary:
-		//		Over-ride to ensure the resize handle gets cleaned up.
-		if(this._resizeHandle){
-			// Cleanup resizing listeners
-			dojo.disconnect(this._resizeHandle);
-			this._resizeHandle = null;
-		}
-		if(this._resizer){
-			clearTimeout(this._resizer);
-			this._resizer = null;
-		}
-		this.inherited(arguments);
-	}
-});
-
-
-// Register this plugin.
-dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
-	if(o.plugin){ return; }
-	var name = o.args.name.toLowerCase();
-	if(name === "fullscreen"){
-		o.plugin = new dijit._editor.plugins.FullScreen({
-			zIndex: ("zIndex" in o.args)?o.args.zIndex:500
-		});
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/LinkDialog.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/LinkDialog.js
deleted file mode 100644
index 54c4ab9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/LinkDialog.js
+++ /dev/null
@@ -1,456 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._editor.plugins.LinkDialog"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.plugins.LinkDialog"] = true;
-dojo.provide("dijit._editor.plugins.LinkDialog");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._Templated");
-dojo.require("dijit._editor._Plugin");
-dojo.require("dijit.TooltipDialog");
-dojo.require("dijit.form.Button");
-dojo.require("dijit.form.ValidationTextBox");
-dojo.require("dijit.form.Select");
-dojo.require("dijit._editor.range");
-dojo.require("dojo.i18n");
-dojo.require("dojo.string");
-dojo.requireLocalization("dijit", "common", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
-dojo.requireLocalization("dijit._editor", "LinkDialog", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
-
-dojo.declare("dijit._editor.plugins.LinkDialog", dijit._editor._Plugin, {
-	// summary:
-	//		This plugin provides the basis for an 'anchor' (link) dialog and an extension of it
-	//		provides the image link dialog.
-	//
-	// description:
-	//		The command provided by this plugin is:
-	//		* createLink
-
-	// Override _Plugin.buttonClass.   This plugin is controlled by a DropDownButton
-	// (which triggers a TooltipDialog).
-	buttonClass: dijit.form.DropDownButton,
-
-	// Override _Plugin.useDefaultCommand... processing is handled by this plugin, not by dijit.Editor.
-	useDefaultCommand: false,
-
-	// urlRegExp: [protected] String
-	//		Used for validating input as correct URL.  While file:// urls are not terribly
-	//		useful, they are technically valid.
-	urlRegExp: "((https?|ftps?|file)\\://|\./|/|)(/[a-zA-Z]{1,1}:/|)(((?:(?:[\\da-zA-Z](?:[-\\da-zA-Z]{0,61}[\\da-zA-Z])?)\\.)*(?:[a-zA-Z](?:[-\\da-zA-Z]{0,80}[\\da-zA-Z])?)\\.?)|(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])|(0[xX]0*[\\da-fA-F]?[\\da-fA-F]\\.){3}0[xX]0*[\\da-fA-F]?[\\da-fA-F]|(0+[0-3][0-7][0-7]\\.){3}0+[0-3][0-7][0-7]|(0|[1-9]\\d{0,8}|[1-3]\\d{9}|4[01]\\d{8}|42[0-8]\\d{7}|429[0-3]\\d{6}|4294[0-8]\\d{5}|42949[0-5]\\d{4}|429496[0-6]\\d{3}|4294967[01]\\d{2}|42949672[0-8]\\d|429496729[0-5])|0[xX]0*[\\da-fA-F]{1,8}|([\\da-fA-F]{1,4}\\:){7}[\\da-fA-F]{1,4}|([\\da-fA-F]{1,4}\\:){6}((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])))(\\:\\d+)?(/(?:[^?#\\s/]+/)*(?:[^?#\\s/]+(?:\\?[^?#\\s/]*)?(?:#.*)?)?)?",
-
-	// htmlTemplate: [protected] String
-	//		String used for templating the HTML to insert at the desired point.
-	htmlTemplate: "<a href=\"${urlInput}\" _djrealurl=\"${urlInput}\"" +
-		" target=\"${targetSelect}\"" +
-		">${textInput}</a>",
-
-	// tag: [protected] String
-	//		Tag used for the link type.
-	tag: "a",
-
-	// _hostRxp [private] RegExp
-	//		Regular expression used to validate url fragments (ip address, hostname, etc)
-	_hostRxp:  new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"),
-
-	// linkDialogTemplate: [protected] String
-	//		Template for contents of TooltipDialog to pick URL
-	linkDialogTemplate: [
-		"<table><tr><td>",
-		"<label for='${id}_urlInput'>${url}</label>",
-		"</td><td>",
-		"<input dojoType='dijit.form.ValidationTextBox' regExp='${urlRegExp}' required='true' " +
-		"id='${id}_urlInput' name='urlInput' intermediateChanges='true'>",
-		"</td></tr><tr><td>",
-		"<label for='${id}_textInput'>${text}</label>",
-		"</td><td>",
-		"<input dojoType='dijit.form.ValidationTextBox' required='true' id='${id}_textInput' " +
-		"name='textInput' intermediateChanges='true'>",
-		"</td></tr><tr><td>",
-		"<label for='${id}_targetSelect'>${target}</label>",
-		"</td><td>",
-		"<select id='${id}_targetSelect' name='targetSelect' dojoType='dijit.form.Select'>",
-		"<option selected='selected' value='_self'>${currentWindow}</option>",
-		"<option value='_blank'>${newWindow}</option>",
-		"<option value='_top'>${topWindow}</option>",
-		"<option value='_parent'>${parentWindow}</option>",
-		"</select>",
-		"</td></tr><tr><td colspan='2'>",
-		"<button dojoType='dijit.form.Button' type='submit' id='${id}_setButton'>${set}</button>",
-		"<button dojoType='dijit.form.Button' type='button' id='${id}_cancelButton'>${buttonCancel}</button>",
-		"</td></tr></table>"
-	].join(""),
-
-	_initButton: function(){
-		// Override _Plugin._initButton() to initialize DropDownButton and TooltipDialog.
-		var _this = this;
-		this.tag = this.command == 'insertImage' ? 'img' : 'a';
-		var messages = dojo.mixin(dojo.i18n.getLocalization("dijit", "common", this.lang),
-			dojo.i18n.getLocalization("dijit._editor", "LinkDialog", this.lang));
-		var dropDown = (this.dropDown = new dijit.TooltipDialog({
-			title: messages[this.command + "Title"],
-			execute: dojo.hitch(this, "setValue"),
-			onOpen: function(){
-				_this._onOpenDialog();
-				dijit.TooltipDialog.prototype.onOpen.apply(this, arguments);
-			},
-			onCancel: function(){
-				setTimeout(dojo.hitch(_this, "_onCloseDialog"),0);
-			}
-		}));
-		messages.urlRegExp = this.urlRegExp;
-		messages.id = dijit.getUniqueId(this.editor.id);
-		this._uniqueId = messages.id;
-		this._setContent(dropDown.title +
-			"<div style='border-bottom: 1px black solid;padding-bottom:2pt;margin-bottom:4pt'></div>" +
-			dojo.string.substitute(this.linkDialogTemplate, messages));
-		dropDown.startup();
-		this._urlInput = dijit.byId(this._uniqueId + "_urlInput");
-		this._textInput = dijit.byId(this._uniqueId + "_textInput");
-		this._setButton = dijit.byId(this._uniqueId + "_setButton");
-		this.connect(dijit.byId(this._uniqueId + "_cancelButton"), "onClick", function(){
-			this.dropDown.onCancel();
-		});
-		if(this._urlInput){
-			this.connect(this._urlInput, "onChange", "_checkAndFixInput");
-		}
-		if(this._textInput){
-			this.connect(this._textInput, "onChange", "_checkAndFixInput");
-		}
-		this._connectTagEvents();
-		this.inherited(arguments);
-	},
-
-	_checkAndFixInput: function(){
-		// summary:
-		//		A function to listen for onChange events and test the input contents
-		//		for valid information, such as valid urls with http/https/ftp and if
-		//		not present, try and guess if the input url is relative or not, and if
-		//		not, append http:// to it.  Also validates other fields as determined by
-		//		the internal _isValid function.
-		var self = this;
-		var url = this._urlInput.attr("value");
-		var fixupUrl = function(url){
-			var appendHttp = false;
-			if(url && url.length > 7){
-				url = dojo.trim(url);
-				if(url.indexOf("/") > 0){
-					if(url.indexOf("://") === -1){
-						// Check that it doesn't start with / or ./, which would
-						// imply 'target server relativeness'
-						if(url.charAt(0) !== '/' && url.indexOf("./") !== 0){
-							if(self._hostRxp.test(url)){
-								appendHttp = true;
-							}
-						}
-					}
-				}
-			}
-			if(appendHttp){
-				self._urlInput.attr("value", "http://" + url);
-			}
-			self._setButton.attr("disabled", !self._isValid());
-		};
-		if(this._delayedCheck){
-			clearTimeout(this._delayedCheck);
-			this._delayedCheck = null;
-		}
-		this._delayedCheck = setTimeout(function(){
-			fixupUrl(url);
-		}, 250);
-	},
-
-	_connectTagEvents: function(){
-		// summary:
-		//		Over-ridable function that connects tag specific events.
-		this.editor.onLoadDeferred.addCallback(dojo.hitch(this, function(){
-			this.connect(this.editor.editNode, "ondblclick", this._onDblClick);
-		}));
-	},
-
-	_isValid: function(){
-		// summary:
-		//		Internal function to allow validating of the inputs
-		//		for a link to determine if set should be disabled or not
-		// tags:
-		//		protected
-		return this._urlInput.isValid() && this._textInput.isValid();
-	},
-
-	_setContent: function(staticPanel){
-		// summary:
-		//		Helper for _initButton above.   Not sure why it's a separate method.
-		this.dropDown.attr('content', staticPanel);
-	},
-
-	_checkValues: function(args){
-		// summary:
-		//		Function to check the values in args and 'fix' them up as needed.
-		// args: Object
-		//		Content being set.		
-		// tags: 
-		//		protected
-		if(args && args.urlInput){
-			args.urlInput = args.urlInput.replace(/"/g, "&quot;");
-		}
-		return args;
-	},
-
-	setValue: function(args){
-		// summary:
-		//		Callback from the dialog when user presses "set" button.
-		// tags:
-		//		private
-		//TODO: prevent closing popup if the text is empty
-		this._onCloseDialog();
-		if(dojo.isIE){ //see #4151
-			var sel = dijit.range.getSelection(this.editor.window);
-			var range = sel.getRangeAt(0);
-			var a = range.endContainer;
-			if(a.nodeType === 3){
-				// Text node, may be the link contents, so check parent.
-				// This plugin doesn't really support nested HTML elements
-				// in the link, it assumes all link content is text.
-				a = a.parentNode;
-			}
-			if(a && (a.nodeName && a.nodeName.toLowerCase() !== this.tag)){
-				// Stll nothing, one last thing to try on IE, as it might be 'img'
-				// and thus considered a control.
-				a = dojo.withGlobal(this.editor.window,
-					"getSelectedElement", dijit._editor.selection, [this.tag]);
-			}
-			if(a && (a.nodeName && a.nodeName.toLowerCase() === this.tag)){
-				// Okay, we do have a match.  IE, for some reason, sometimes pastes before
-				// instead of removing the targetted paste-over element, so we unlink the
-				// old one first.  If we do not the <a> tag remains, but it has no content,
-				// so isn't readily visible (but is wrong for the action).
-				if(this.editor.queryCommandEnabled("unlink")){
-					// Select all the link childent, then unlink.  The following insert will
-					// then replace the selected text.
-					dojo.withGlobal(this.editor.window,
-						"selectElementChildren", dijit._editor.selection, [a]);
-					this.editor.execCommand("unlink");
-				}
-			}
-		}
-		// make sure values are properly escaped, etc.
-		args = this._checkValues(args); 
-		this.editor.execCommand('inserthtml',
-			dojo.string.substitute(this.htmlTemplate, args));
-	},
-
-	_onCloseDialog: function(){
-		// summary:
-		//		Handler for close event on the dialog
-		this.editor.focus();
-	},
-
-	_getCurrentValues: function(a){
-		// summary:
-		//		Over-ride for getting the values to set in the dropdown.
-		// a:
-		//		The anchor/link to process for data for the dropdown.
-		// tags:
-		//		protected
-		var url, text, target;
-		if(a && a.tagName.toLowerCase() === this.tag){
-			url = a.getAttribute('_djrealurl');
-			target = a.getAttribute('target') || "_self";
-			text = a.textContent || a.innerText;
-			dojo.withGlobal(this.editor.window, "selectElement", dijit._editor.selection, [a, true]);
-		}else{
-			text = dojo.withGlobal(this.editor.window, dijit._editor.selection.getSelectedText);
-		}
-		return {urlInput: url || '', textInput: text || '', targetSelect: target || ''}; //Object;
-	},
-
-	_onOpenDialog: function(){
-		// summary:
-		//		Handler for when the dialog is opened.
-		//		If the caret is currently in a URL then populate the URL's info into the dialog.
-		var a;
-		if(dojo.isIE){
-			// IE is difficult to select the element in, using the range unified
-			// API seems to work reasonably well.
-			var sel = dijit.range.getSelection(this.editor.window);
-			var range = sel.getRangeAt(0);
-			a = range.endContainer;
-			if(a.nodeType === 3){
-				// Text node, may be the link contents, so check parent.
-				// This plugin doesn't really support nested HTML elements
-				// in the link, it assumes all link content is text.
-				a = a.parentNode;
-			}
-			if(a && (a.nodeName && a.nodeName.toLowerCase() !== this.tag)){
-				// Stll nothing, one last thing to try on IE, as it might be 'img'
-				// and thus considered a control.
-				a = dojo.withGlobal(this.editor.window,
-					"getSelectedElement", dijit._editor.selection, [this.tag]);
-			}
-		}else{
-			a = dojo.withGlobal(this.editor.window,
-				"getAncestorElement", dijit._editor.selection, [this.tag]);
-		}
-		this.dropDown.reset();
-		this._setButton.attr("disabled", true);
-		this.dropDown.attr("value", this._getCurrentValues(a));
-	},
-
-	_onDblClick: function(e){
-		// summary:
-		// 		Function to define a behavior on double clicks on the element
-		//		type this dialog edits to select it and pop up the editor
-		//		dialog.
-		// e: Object
-		//		The double-click event.
-		// tags:
-		//		protected.
-		if(e && e.target){
-			var t = e.target;
-			var tg = t.tagName? t.tagName.toLowerCase() : "";
-			if(tg === this.tag){
-				this.editor.onDisplayChanged();
-				dojo.withGlobal(this.editor.window,
-					 "selectElement",
-					 dijit._editor.selection, [t]);
-				setTimeout(dojo.hitch(this, function(){
-					// Focus shift outside the event handler.
-					// IE doesn't like focus changes in event handles.
-					this.button.attr("disabled", false);
-					this.button.openDropDown();
-				}), 10);
-			}
-		}
-	}
-});
-
-dojo.declare("dijit._editor.plugins.ImgLinkDialog", [dijit._editor.plugins.LinkDialog], {
-	// summary:
-	//		This plugin extends LinkDialog and adds in a plugin for handling image links.
-	//		provides the image link dialog.
-	//
-	// description:
-	//		The command provided by this plugin is:
-	//		* insertImage
-
-	// linkDialogTemplate: [protected] String
-	//		Over-ride for template since img dialog doesn't need target that anchor tags may.
-	linkDialogTemplate: [
-		"<table><tr><td>",
-		"<label for='${id}_urlInput'>${url}</label>",
-		"</td><td>",
-		"<input dojoType='dijit.form.ValidationTextBox' regExp='${urlRegExp}' " +
-		"required='true' id='${id}_urlInput' name='urlInput' intermediateChanges='true'>",
-		"</td></tr><tr><td>",
-		"<label for='${id}_textInput'>${text}</label>",
-		"</td><td>",
-		"<input dojoType='dijit.form.ValidationTextBox' required='false' id='${id}_textInput' " +
-		"name='textInput' intermediateChanges='true'>",
-		"</td></tr><tr><td>",
-		"</td><td>",
-		"</td></tr><tr><td colspan='2'>",
-		"<button dojoType='dijit.form.Button' type='submit' id='${id}_setButton'>${set}</button>",
-		"<button dojoType='dijit.form.Button' type='button' id='${id}_cancelButton'>${buttonCancel}</button>",
-		"</td></tr></table>"
-	].join(""),
-
-	// htmlTemplate: [protected] String
-	//		String used for templating the <img> HTML to insert at the desired point.
-	htmlTemplate: "<img src=\"${urlInput}\" _djrealurl=\"${urlInput}\" alt=\"${textInput}\" />",
-
-	// tag: [protected] String
-	//		Tag used for the link type (img).
-	tag: "img",
-
-	_getCurrentValues: function(img){
-		// summary:
-		//		Over-ride for getting the values to set in the dropdown.
-		// a:
-		//		The anchor/link to process for data for the dropdown.
-		// tags:
-		//		protected
-		var url, text;
-		if(img && img.tagName.toLowerCase() === this.tag){
-			url = img.getAttribute('_djrealurl');
-			text = img.getAttribute('alt');
-			dojo.withGlobal(this.editor.window,
-				"selectElement", dijit._editor.selection, [img, true]);
-		}else{
-			text = dojo.withGlobal(this.editor.window, dijit._editor.selection.getSelectedText);
-		}
-		return {urlInput: url || '', textInput: text || ''}; //Object;
-	},
-
-	_isValid: function(){
-		// summary:
-		//		Over-ride for images.  You can have alt text of blank, it is valid.
-		// tags:
-		//		protected
-		return this._urlInput.isValid();
-	},
-
-	_connectTagEvents: function(){
-		// summary:
-		//		Over-ridable function that connects tag specific events.
-		this.inherited(arguments);
-		this.editor.onLoadDeferred.addCallback(dojo.hitch(this, function(){
-			this.connect(this.editor.editNode, "onclick", this._selectTag);
-		}));
-	},
-
-	_selectTag: function(e){
-		// summary:
-		//		A simple event handler that lets me select an image if it is clicked on.
-		//		makes it easier to select images in a standard way across browsers.  Otherwise
-		//		selecting an image for edit becomes difficult.
-		// e: Event
-		//		The click event.
-		// tags:
-		//		private
-		if(e && e.target){
-			var t = e.target;
-			var tg = t.tagName? t.tagName.toLowerCase() : "";
-			if(tg === this.tag){
-				dojo.withGlobal(this.editor.window,
-					"selectElement",
-					dijit._editor.selection, [t]);
-			}
-		}
-	},
-
-	_checkValues: function(args){
-		// summary:
-		//		Function to check the values in args and 'fix' them up as needed 
-		//		(special characters in the url or alt text)
-		// args: Object
-		//		Content being set.		
-		// tags: 
-		//		protected
-		if(args && args.urlInput){
-			args.urlInput = args.urlInput.replace(/"/g, "&quot;");
-		}
-		if(args && args.textInput){
-			args.textInput = args.textInput.replace(/"/g, "&quot;");
-		}
-		return args;
-	}
-});
-
-// Register this plugin.
-dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
-	if(o.plugin){ return; }
-	switch(o.args.name){
-		case "createLink":
-			o.plugin = new dijit._editor.plugins.LinkDialog({command: o.args.name});
-			break;
-		case "insertImage":
-			o.plugin = new dijit._editor.plugins.ImgLinkDialog({command: o.args.name});
-			break;
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/NewPage.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/NewPage.js
deleted file mode 100644
index cec37f4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/NewPage.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._editor.plugins.NewPage"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.plugins.NewPage"] = true;
-dojo.provide("dijit._editor.plugins.NewPage");
-
-dojo.require("dijit._editor._Plugin");
-dojo.require("dijit.form.Button");
-dojo.require("dojo.i18n");
-
-dojo.requireLocalization("dijit._editor", "commands", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
-
-dojo.declare("dijit._editor.plugins.NewPage",dijit._editor._Plugin,{
-	// summary:
-	//		This plugin provides a simple 'new page' calability.  In other
-	//		words, set content to some default user defined string.
-
-	// content: [public] String
-	//		The default content to insert into the editor as the new page.
-	//		The default is the <br> tag, a single blank line.
-	content: "<br>",
-
-	_initButton: function(){
-		// summary:
-		//		Over-ride for creation of the Print button.
-		var strings = dojo.i18n.getLocalization("dijit._editor", "commands");
-		this.button = new dijit.form.Button({
-			label: strings["newPage"],
-			showLabel: false,
-			iconClass: this.iconClassPrefix + " " + this.iconClassPrefix + "NewPage",
-			tabIndex: "-1",
-			onClick: dojo.hitch(this, "_newPage")
-		});
-	},
-
-	setEditor: function(/*dijit.Editor*/ editor){
-		// summary:
-		//		Tell the plugin which Editor it is associated with.
-		// editor: Object
-		//		The editor object to attach the newPage capability to.
-		this.editor = editor;
-		this._initButton();
-	},
-
-	_newPage: function(){
-		// summary:
-		//		Function to set the content to blank.
-		// tags:
-		//		private
-		this.editor.attr("value", this.content);
-		this.editor.focus();
-	}
-});
-
-// Register this plugin.
-dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
-	if(o.plugin){ return; }
-	var name = o.args.name.toLowerCase();
-	if(name === "newpage"){
-		o.plugin = new dijit._editor.plugins.NewPage({
-			content: ("content" in o.args)?o.args.content:"<br>"
-		});
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/Print.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/Print.js
deleted file mode 100644
index 3e6870a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/Print.js
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._editor.plugins.Print"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.plugins.Print"] = true;
-dojo.provide("dijit._editor.plugins.Print");
-
-dojo.require("dijit._editor._Plugin");
-dojo.require("dijit.form.Button");
-dojo.require("dojo.i18n");
-
-dojo.requireLocalization("dijit._editor", "commands", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
-
-dojo.declare("dijit._editor.plugins.Print",dijit._editor._Plugin,{
-	// summary:
-	//		This plugin provides Print cabability to the editor.  When
-	//		clicked, the document in the editor frame will be printed.
-
-	_initButton: function(){
-		// summary:
-		//		Over-ride for creation of the Print button.
-		var strings = dojo.i18n.getLocalization("dijit._editor", "commands");
-		this.button = new dijit.form.Button({
-			label: strings["print"],
-			showLabel: false,
-			iconClass: this.iconClassPrefix + " " + this.iconClassPrefix + "Print",
-			tabIndex: "-1",
-			onClick: dojo.hitch(this, "_print")
-		});
-	},
-
-	setEditor: function(/*dijit.Editor*/ editor){
-		// summary:
-		//		Tell the plugin which Editor it is associated with.
-		// editor: Object
-		//		The editor object to attach the print capability to.
-		this.editor = editor;
-		this._initButton();
-
-		// Set up a check that we have a print function
-		// and disable button if we do not.
-		this.editor.onLoadDeferred.addCallback(
-			dojo.hitch(this, function(){
-				if(!this.editor.iframe.contentWindow["print"]){
-					this.button.attr("disabled", true);
-				}
-			})
-		);
-	},
-
-	_print: function(){
-		// summary:
-		//		Function to trigger printing of the editor document
-		// tags:
-		//		private
-		var edFrame = this.editor.iframe;
-		if(edFrame.contentWindow["print"]){
-			// IE requires the frame to be focused for
-			// print to work, but since this is okay for all
-			// no special casing.
-			if(!dojo.isOpera && !dojo.isChrome){
-				dijit.focus(edFrame);
-				edFrame.contentWindow.print();
-			}else{
-				// Neither Opera nor Chrome 3 et you print single frames.
-				// So, open a new 'window', print it, and close it.
-				// Also, can't use size 0x0, have to use 1x1
-				var edDoc = this.editor.document;
-				var content = this.editor.attr("value");
-				content = "<html><head><meta http-equiv='Content-Type' " +
-					"content='text/html; charset='UTF-8'></head><body>" +
-					content + "</body></html>";
-				var win = window.open("javascript: ''",
-					"",
-					"status=0,menubar=0,location=0,toolbar=0," +
-					"width=1,height=1,resizable=0,scrollbars=0");
-				win.document.open();
-				win.document.write(content);
-				win.document.close();
-				var styles = [];
-				var styleNodes = edDoc.getElementsByTagName("style");
-				if(styleNodes){
-					// Clone over any editor view styles, since we can't print the iframe
-					// directly.
-					var i;
-					for(i = 0; i < styleNodes.length; i++){
-						var style = styleNodes[i].innerHTML;
-						var sNode = win.document.createElement("style");
-						sNode.appendChild(win.document.createTextNode(style));
-						win.document.getElementsByTagName("head")[0].appendChild(sNode);
-					}
-				}
-				win.print();
-				win.close();
-			}
-		}
-	}
-});
-
-// Register this plugin.
-dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
-	if(o.plugin){ return; }
-	var name = o.args.name.toLowerCase();
-	if(name === "print"){
-		o.plugin = new dijit._editor.plugins.Print({command: "print"});
-	}
-});
-
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/TabIndent.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/TabIndent.js
deleted file mode 100644
index 03f2472..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/TabIndent.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._editor.plugins.TabIndent"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.plugins.TabIndent"] = true;
-dojo.provide("dijit._editor.plugins.TabIndent");
-dojo.experimental("dijit._editor.plugins.TabIndent");
-
-dojo.require("dijit._editor._Plugin");
-dojo.require("dijit.form.ToggleButton");
-
-dojo.declare("dijit._editor.plugins.TabIndent",
-	dijit._editor._Plugin,
-	{
-		// summary:
-		//		This plugin is used to allow the use of the tab and shift-tab keys
-		//		to indent/outdent list items.  This overrides the default behavior
-		//		of moving focus from/to the toolbar
-
-		// Override _Plugin.useDefaultCommand... processing is handled by this plugin, not by dijit.Editor.
-		useDefaultCommand: false,
-
-		// Override _Plugin.buttonClass to use a ToggleButton for this plugin rather than a vanilla Button
-		buttonClass: dijit.form.ToggleButton,
-
-		command: "tabIndent",
-
-		_initButton: function(){
-			// Override _Plugin._initButton() to setup listener on button click
-			this.inherited(arguments);
-
-			var e = this.editor;
-			this.connect(this.button, "onChange", function(val){
-				e.attr("isTabIndent", val);
-			});
-
-			// Set initial checked state of button based on Editor.isTabIndent
-			this.updateState();
-		},
-
-		updateState: function(){
-			// Overrides _Plugin.updateState().
-			// Ctrl-m in the editor will switch tabIndent mode on/off, so we need to react to that.
-
-			this.button.attr('checked', this.editor.isTabIndent, false);
-		}
-	}
-);
-
-// Register this plugin.
-dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
-	if(o.plugin){ return; }
-	switch(o.args.name){
-	case "tabIndent":
-		o.plugin = new dijit._editor.plugins.TabIndent({command: o.args.name});
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/TextColor.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/TextColor.js
deleted file mode 100644
index 0040792..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/TextColor.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._editor.plugins.TextColor"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.plugins.TextColor"] = true;
-dojo.provide("dijit._editor.plugins.TextColor");
-
-dojo.require("dijit._editor._Plugin");
-dojo.require("dijit.ColorPalette");
-
-dojo.declare("dijit._editor.plugins.TextColor",
-	dijit._editor._Plugin,
-	{
-		// summary:
-		//		This plugin provides dropdown color pickers for setting text color and background color
-		//
-		// description:
-		//		The commands provided by this plugin are:
-		//		* foreColor - sets the text color
-		//		* hiliteColor - sets the background color
-
-		// Override _Plugin.buttonClass to use DropDownButton (with ColorPalette) to control this plugin
-		buttonClass: dijit.form.DropDownButton,
-
-//TODO: set initial focus/selection state?
-
-		constructor: function(){
-			this.dropDown = new dijit.ColorPalette();
-			this.connect(this.dropDown, "onChange", function(color){
-				this.editor.execCommand(this.command, color);
-			});
-		}
-	}
-);
-
-// Register this plugin.
-dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
-	if(o.plugin){ return; }
-	switch(o.args.name){
-	case "foreColor": case "hiliteColor":
-		o.plugin = new dijit._editor.plugins.TextColor({command: o.args.name});
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/ToggleDir.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/ToggleDir.js
deleted file mode 100644
index a1f9e7e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/ToggleDir.js
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._editor.plugins.ToggleDir"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.plugins.ToggleDir"] = true;
-dojo.provide("dijit._editor.plugins.ToggleDir");
-dojo.experimental("dijit._editor.plugins.ToggleDir");
-
-dojo.require("dijit._editor._Plugin");
-dojo.require("dijit.form.ToggleButton");
-
-dojo.declare("dijit._editor.plugins.ToggleDir",
-	dijit._editor._Plugin,
-	{
-		// summary:
-		//		This plugin is used to toggle direction of the edited document,
-		//		independent of what direction the whole page is.
-
-		// Override _Plugin.useDefaultCommand: processing is done in this plugin
-		// rather than by sending commands to the Editor
-		useDefaultCommand: false,
-
-		command: "toggleDir",
-
-		// Override _Plugin.buttonClass to use a ToggleButton for this plugin rather than a vanilla Button
-		buttonClass: dijit.form.ToggleButton,
-
-		_initButton: function(){
-			// Override _Plugin._initButton() to setup handler for button click events.
-			this.inherited(arguments);
-			this.editor.onLoadDeferred.addCallback(dojo.hitch(this, function(){
-				var editDoc = this.editor.editorObject.contentWindow.document.documentElement;
-				//IE direction has to toggle on the body, not document itself.
-				//If you toggle just the document, things get very strange in the
-				//view.  But, the nice thing is this works for all supported browsers.
-				editDoc = editDoc.getElementsByTagName("body")[0];
-				var isLtr = dojo.getComputedStyle(editDoc).direction == "ltr";
-				this.button.attr("checked", !isLtr);
-				this.connect(this.button, "onChange", "_setRtl");
-			}));
-		},
-
-		updateState: function(){
-			// Override _Plugin.updateState() to do nothing, since we don't need to react to changes in the
-			// editor like arrow keys etc.
-		},
-
-		_setRtl: function(rtl){
-			// summary:
-			//		Handler for button click events, to switch the text direction of the editor
-			var dir = "ltr";
-			if(rtl){
-				dir = "rtl";
-			}
-			var editDoc = this.editor.editorObject.contentWindow.document.documentElement;
-			editDoc = editDoc.getElementsByTagName("body")[0];
-			editDoc.dir/*html node*/ = dir;
-		}
-	}
-);
-
-// Register this plugin.
-dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
-	if(o.plugin){ return; }
-	switch(o.args.name){
-	case "toggleDir":
-		o.plugin = new dijit._editor.plugins.ToggleDir({command: o.args.name});
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/ViewSource.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/ViewSource.js
deleted file mode 100644
index 56332a1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/plugins/ViewSource.js
+++ /dev/null
@@ -1,543 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._editor.plugins.ViewSource"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.plugins.ViewSource"] = true;
-dojo.provide("dijit._editor.plugins.ViewSource");
-
-dojo.require("dijit._editor._Plugin");
-dojo.require("dijit.form.Button");
-dojo.require("dojo.i18n");
-
-dojo.requireLocalization("dijit._editor", "commands", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
-
-dojo.declare("dijit._editor.plugins.ViewSource",dijit._editor._Plugin,{
-	// summary:
-	//		This plugin provides a simple view source capability.  When view
-	//		source mode is enabled, it disables all other buttons/plugins on the RTE.
-	//		It also binds to the hotkey: CTRL-SHIFT-F11 for toggling ViewSource mode.
-
-	// stripScripts: [public] Boolean
-	//		Boolean flag used to indicate if script tags should be stripped from the document.
-	//		Defaults to true.
-	stripScripts: true,
-
-	// stripComments: [public] Boolean
-	//		Boolean flag used to indicate if comment tags should be stripped from the document.
-	//		Defaults to true.
-	stripComments: true,
-
-	// stripComments: [public] Boolean
-	//		Boolean flag used to indicate if iframe tags should be stripped from the document.
-	//		Defaults to true.
-	stripIFrames: true,
-
-	// readOnly: [const] Boolean
-	//		Boolean flag used to indicate if the source view should be readonly or not.
-	//		Cannot be changed after initialization of the plugin.
-	//		Defaults to false.
-	readOnly: false,
-
-	// _fsPlugin: [private] Object
-	//		Reference to a registered fullscreen plugin so that viewSource knows
-	//		how to scale.
-	_fsPlugin: null,
-
-	toggle: function(){
-		// summary:
-		//		Function to allow programmatic toggling of the view.
-
-		// For Webkit, we have to focus a very particular way.
-		// when swapping views, otherwise focus doesn't shift right
-		// but can't focus this way all the time, only for VS changes.
-		// If we did it all the time, buttons like bold, italic, etc
-		// break.
-		if(dojo.isWebKit){this._vsFocused = true;}
-		this.button.attr("checked", !this.button.attr("checked"));
-
-	},
-
-	_initButton: function(){
-		// summary:
-		//		Over-ride for creation of the resize button.
-		var strings = dojo.i18n.getLocalization("dijit._editor", "commands");
-		this.button = new dijit.form.ToggleButton({
-			label: strings["viewSource"],
-			showLabel: false,
-			iconClass: this.iconClassPrefix + " " + this.iconClassPrefix + "ViewSource",
-			tabIndex: "-1",
-			onChange: dojo.hitch(this, "_showSource")
-		});
-
-		// IE 7 has a horrible bug with zoom, so we have to create this node
-		// to cross-check later.  Sigh.
-		if(dojo.isIE == 7){
-			this._ieFixNode = dojo.create("div", {
-				style: {
-					opacity: "0",
-					zIndex: "-1000",
-					position: "absolute",
-					top: "-1000px"
-				}
-			}, dojo.body());
-		}
-		// Make sure readonly mode doesn't make the wrong cursor appear over the button.
-		this.button.attr("readOnly", false);
-	},
-
-
-	setEditor: function(/*dijit.Editor*/ editor){
-		// summary:
-		//		Tell the plugin which Editor it is associated with.
-		// editor: Object
-		//		The editor object to attach the print capability to.
-		this.editor = editor;
-		this._initButton();
-
-		this.editor.addKeyHandler(dojo.keys.F12, true, true, dojo.hitch(this, function(e){
-			// Move the focus before switching
-			// It'll focus back.  Hiding a focused
-			// node causes issues.
-			this.button.focus();
-			this.toggle();
-			dojo.stopEvent(e);
-
-			// Call the focus shift outside of the handler.
-			setTimeout(dojo.hitch(this, function(){
-				// We over-ride focus, so we just need to call.
-				this.editor.focus();
-			}), 100);
-		}));
-	},
-
-	_showSource: function(source){
-		// summary:
-		//		Function to toggle between the source and RTE views.
-		// source: boolean
-		//		Boolean value indicating if it should be in source mode or not.
-		// tags:
-		//		private
-		var ed = this.editor;
-		var edPlugins = ed._plugins;
-		var html;
-		this._sourceShown = source;
-		var self = this;
-		try{
-			if(!this.sourceArea){
-				this._createSourceView();
-			}
-			if(source){
-				// Update the QueryCommandEnabled function to disable everything but
-				// the source view mode.  Have to over-ride a function, then kick all
-				// plugins to check their state.
-				ed._sourceQueryCommandEnabled = ed.queryCommandEnabled;
-				ed.queryCommandEnabled = function(cmd){
-					var lcmd = cmd.toLowerCase();
-					if(lcmd === "viewsource"){
-						return true;
-					}else{
-						return false;
-					}
-				};
-				this.editor.onDisplayChanged();
-				html = ed.attr("value");
-				html = this._filter(html);
-				ed.attr("value", html);
-				this._pluginList = [];
-				this._disabledPlugins = dojo.filter(edPlugins, function(p){
-					// Turn off any plugins not controlled by queryCommandenabled.
-					if(p && p.button && !p.button.attr("disabled") &&
-						!(p instanceof dijit._editor.plugins.ViewSource)){
-						p._vs_updateState = p.updateState;
-						p.updateState = function(){
-							return false;
-						};
-						p.button.attr("disabled", true);
-						if(p.command){
-							// FF has a weird behavior when spellcheck is off,
-							// queryCommandValue() returns true on the doc, and as such
-							// toggles 'on' some actions.  So, we need to explictly 
-							// toggle them off.  TODO:  Add a disable API to _Plugin.js
-							// It would aleviate the need for this.
-							switch(p.command){
-								case "bold":
-								case "italic":
-								case "underline":
-								case "strikethrough":
-								case "superscript":
-								case "subscript":
-									p.button.attr("checked", false);
-									break;
-								default:
-									break;
-							}
-						}
-						return true;
-					}
-				});
-
-				// We actually do need to trap this plugin and adjust how we
-				// display the textarea.
-				if(this._fsPlugin){
-					this._fsPlugin._getAltViewNode = function(){
-						return self.sourceArea;
-					};
-				}
-
-				this.sourceArea.value = html;
-				var is = dojo.marginBox(ed.iframe.parentNode);
-				dojo.marginBox(this.sourceArea, {
-					w: is.w,
-					h: is.h
-				});
-
-				dojo.style(ed.iframe, "display", "none");
-				dojo.style(this.sourceArea, {
-					display: "block"
-				});
-
-				var resizer = function(){
-					// function to handle resize events.
-					// Will check current VP and only resize if
-					// different.
-					var vp = dijit.getViewport();
-
-					if("_prevW" in this && "_prevH" in this){
-						// No actual size change, ignore.
-						if(vp.w === this._prevW && vp.h === this._prevH){
-							return;
-						}else{
-							this._prevW = vp.w;
-							this._prevH = vp.h;
-						}
-					}else{
-						this._prevW = vp.w;
-						this._prevH = vp.h;
-					}
-					if(this._resizer){
-						clearTimeout(this._resizer);
-						delete this._resizer;
-					}
-					// Timeout it to help avoid spamming resize on IE.
-					// Works for all browsers.
-					this._resizer = setTimeout(dojo.hitch(this, function(){
-						delete this._resizer;
-						this._resize();
-					}), 10);
-				};
-				this._resizeHandle = dojo.connect(window, "onresize", this, resizer);
-
-				//Call this on a delay once to deal with IE glitchiness on initial size.
-				setTimeout(dojo.hitch(this, this._resize), 100);
-
-				//Trigger a check for command enablement/disablement.
-				this.editor.onNormalizedDisplayChanged();
-			}else{
-				// First check that we were in source view before doing anything.
-				// corner case for being called with a value of false and we hadn't
-				// actually been in source display mode.
-				if(!ed._sourceQueryCommandEnabled){
-					return;
-				}
-				dojo.disconnect(this._resizeHandle);
-				delete this._resizeHandle;
-
-				// Restore all the plugin buttons state.
-				ed.queryCommandEnabled = ed._sourceQueryCommandEnabled;
-				if(!this._readOnly){
-					html = this.sourceArea.value;
-					html = this._filter(html);
-					ed.attr("value", html);
-				}
-
-				dojo.forEach(this._disabledPlugins, function(p){
-					// Turn back on any plugins we turned off.
-					p.button.attr("disabled", false);
-					if(p._vs_updateState){
-						p.updateState = p._vs_updateState;
-					}
-				});
-
-				this._disabledPlugins = null;
-				dojo.style(this.sourceArea, "display", "none");
-				dojo.style(ed.iframe, "display", "block");
-				delete ed._sourceQueryCommandEnabled;
-
-				//Trigger a check for command enablement/disablement.
-				this.editor.onDisplayChanged();
-			}
-		}catch(e){
-			console.log(e);
-		}
-	},
-
-	_resize: function(){
-		// summary:
-		//		Internal function to resize the source view
-		// tags:
-		//		private
-		var ed = this.editor;
-		var tb = dojo.position(ed.toolbar.domNode);
-		var eb = dojo.position(ed.domNode);
-
-		var extents = dojo._getPadBorderExtents(ed.domNode);
-		var edb = {
-			w: eb.w - extents.w,
-			h: eb.h - (tb.h + extents.h)
-		};
-
-		// Fullscreen gets odd, so we need to check for the FS plugin and
-		// adapt.
-		if(this._fsPlugin && this._fsPlugin.isFullscreen){
-			//Okay, probably in FS, adjust.
-			var vp = dijit.getViewport();
-			edb.w = (vp.w - extents.w);
-			edb.h = (vp.h - (tb.h + extents.h));
-		}
-
-		if(dojo.isIE){
-			// IE is always off by 2px, so we have to adjust here
-			// Note that IE ZOOM is broken here.  I can't get
-			//it to scale right.
-			edb.h -= 2;
-		}
-
-		// IE has a horrible zoom bug.  So, we have to try and account for
-		// it and fix up the scaling.
-		if(this._ieFixNode){
-			var _ie7zoom = -this._ieFixNode.offsetTop / 1000;
-			edb.w = Math.floor((edb.w + 0.9) / _ie7zoom);
-			edb.h = Math.floor((edb.h + 0.9) / _ie7zoom);
-		}
-
-
-		dojo.marginBox(this.sourceArea, {
-			w: edb.w,
-			h: edb.h
-		});
-	},
-
-	_createSourceView: function(){
-		// summary:
-		//		Internal function for creating the source view area.
-		// tags:
-		//		private
-		var ed = this.editor;
-		var edPlugins = ed._plugins;
-		this.sourceArea = dojo.create("textarea");
-		if(this.readOnly){
-			dojo.attr(this.sourceArea, "readOnly", true);
-			this._readOnly = true;
-		}
-		dojo.style(this.sourceArea, {
-			padding: "0px",
-			margin: "0px",
-			borderWidth: "0px",
-			borderStyle: "none"
-		});
-		dojo.place(this.sourceArea, ed.iframe, "before");
-		dojo.style(this.sourceArea.parentNode, {
-			padding: "0px",
-			margin: "0px",
-			borderWidth: "0px",
-			borderStyle: "none"
-		});
-
-		if(dojo.isIE && ed.iframe.parentNode.lastChild !== ed.iframe){
-			// There's some weirdo div in IE used for focus control
-			// But is messed up scaling the textarea if we don't config
-			// it some so it doesn't have a varying height.
-			dojo.style(ed.iframe.parentNode.lastChild,{
-				width: "0px",
-				height: "0px",
-				padding: "0px",
-				margin: "0px",
-				borderWidth: "0px",
-				borderStyle: "none"
-			});
-		}
-
-		// We also need to take over editor focus a bit here, so that focus calls to
-		// focus the editor will focus to the right node when VS is active.
-		ed._viewsource_oldFocus = ed.focus;
-		var self = this;
-		ed.focus = function(){
-			if(self._sourceShown){
-				self.setSourceAreaCaret();
-			}else{
-				try{
-					if(this._vsFocused){
-						delete this._vsFocused;
-						// Must focus edit node in this case (webkit only) or
-						// focus doesn't shift right, but in normal
-						// cases we focus with the regular function.
-						dijit.focus(ed.editNode);
-					}else{
-						ed._viewsource_oldFocus();
-					}
-				}catch(e){
-					console.log(e);
-				}
-			}
-		};
-
-		var i, p;
-		for(i = 0; i < edPlugins.length; i++){
-			// We actually do need to trap this plugin and adjust how we
-			// display the textarea.
-			p = edPlugins[i];
-			if(p && (p.declaredClass === "dijit._editor.plugins.FullScreen" ||
-					p.declaredClass === (dijit._scopeName +
-					"._editor.plugins.FullScreen"))){
-				this._fsPlugin = p;
-				break;
-			}
-		}
-		if(this._fsPlugin){
-			// Found, we need to over-ride the alt-view node function
-			// on FullScreen with our own, chain up to parent call when appropriate.
-			this._fsPlugin._viewsource_getAltViewNode = this._fsPlugin._getAltViewNode;
-			this._fsPlugin._getAltViewNode = function(){
-				return self._sourceShown?self.sourceArea:this._viewsource_getAltViewNode();
-			};
-		}
-
-		// Listen to the source area for key events as well, as we need to be able to hotkey toggle
-		// it from there too.
-		this.connect(this.sourceArea, "onkeydown", dojo.hitch(this, function(e){
-			if(this._sourceShown && e.keyCode == dojo.keys.F12 && e.ctrlKey && e.shiftKey){
-				this.button.focus();
-				this.button.attr("checked", false);
-				setTimeout(dojo.hitch(this, function(){ed.focus();}), 100);
-				dojo.stopEvent(e);
-			}
-		}));
-	},
-
-	_stripScripts: function(html){
-		// summary:
-		//		Strips out script tags from the HTML used in editor.
-		// html: String
-		//		The HTML to filter
-		// tags:
-		//		private
-		if(html){
-			// Look for closed and unclosed (malformed) script attacks.
-			html = html.replace(/<\s*script[^>]*>((.|\s)*?)<\\?\/\s*script\s*>/ig, "");
-			html = html.replace(/<\s*script\b([^<>]|\s)*>?/ig, "")
-			html = html.replace(/<[^>]*=(\s|)*[("|')]javascript:[^$1][(\s|.)]*[$1][^>]*>/ig, "");
-		}
-		return html;
-	},
-
-	_stripComments: function(html){
-		// summary:
-		//		Strips out comments from the HTML used in editor.
-		// html: String
-		//		The HTML to filter
-		// tags:
-		//		private
-		if(html){
-			html = html.replace(/<!--(.|\s){1,}?-->/g, "");
-		}
-		return html;
-	},
-
-	_stripIFrames: function(html){
-		// summary:
-		//		Strips out iframe tags from the content, to avoid iframe script
-		//		style injection attacks.
-		// html: String
-		//		The HTML to filter
-		// tags:
-		//		private
-		if(html){
-			html = html.replace(/<\s*iframe[^>]*>((.|\s)*?)<\\?\/\s*iframe\s*>/ig, "");
-		}
-		return html;
-	},
-
-	_filter: function(html){
-		// summary:
-		//		Internal function to perform some filtering on the HTML.
-		// html: String
-		//		The HTML to filter
-		// tags:
-		//		private
-		if(html){
-			if(this.stripScripts){
-				html = this._stripScripts(html);
-			}
-			if(this.stripComments){
-				html = this._stripComments(html);
-			}
-			if(this.stripIFrames){
-				html = this._stripIFrames(html);
-			}
-		}
-		return html;
-	},
-
-	setSourceAreaCaret: function(){
-		// summary:
-		//		Internal function to set the caret in the sourceArea
-		//		to 0x0
-		var win = dojo.global;
-		var elem = this.sourceArea;
-		dijit.focus(elem);
-		if(this._sourceShown && !this.readOnly){
-			if(dojo.isIE){
-				if(this.sourceArea.createTextRange){
-					var range = elem.createTextRange();
-					range.collapse(true);
-					range.moveStart("character", -99999); // move to 0
-					range.moveStart("character", 0); // delta from 0 is the correct position
-					range.moveEnd("character", 0);
-					range.select();
-				}
-			}else if(win.getSelection){
-				if(elem.setSelectionRange){
-					elem.setSelectionRange(0,0);
-				}
-			}
-		}
-	},
-
-	destroy: function(){
-		// summary:
-		//		Over-ride to remove the node used to correct for IE's
-		//		zoom bug.
-		if(this._ieFixNode){
-			dojo.body().removeChild(this._ieFixNode);
-		}
-		if(this._resizer){
-			clearTimeout(this._resizer);
-			delete this._resizer;
-		}
-		if(this._resizeHandle){
-			dojo.disconnect(this._resizeHandle);
-			delete this._resizeHandle;
-		}
-		this.inherited(arguments);
-	}
-});
-
-// Register this plugin.
-dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
-	if(o.plugin){ return; }
-	var name = o.args.name.toLowerCase();
-	if(name ===  "viewsource"){
-		o.plugin = new dijit._editor.plugins.ViewSource({
-			readOnly: ("readOnly" in o.args)?o.args.readOnly:false,
-			stripComments: ("stripComments" in o.args)?o.args.stripComments:true,
-			stripScripts: ("stripScripts" in o.args)?o.args.stripScripts:true,
-			stripIFrames: ("stripIFrames" in o.args)?o.args.stripIFrames:true
-		});
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/range.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/range.js
deleted file mode 100644
index 789b6dc..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/range.js
+++ /dev/null
@@ -1,537 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._editor.range"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.range"] = true;
-dojo.provide("dijit._editor.range");
-
-dijit.range={};
-
-dijit.range.getIndex=function(/*DomNode*/node, /*DomNode*/parent){
-//	dojo.profile.start("dijit.range.getIndex");
-	var ret=[], retR=[];
-	var stop = parent;
-	var onode = node;
-
-	var pnode, n;
-	while(node != stop){
-		var i = 0;
-		pnode = node.parentNode;
-		while((n=pnode.childNodes[i++])){
-			if(n === node){
-				--i;
-				break;
-			}
-		}
-		if(i>=pnode.childNodes.length){
-			dojo.debug("Error finding index of a node in dijit.range.getIndex");
-		}
-		ret.unshift(i);
-		retR.unshift(i-pnode.childNodes.length);
-		node = pnode;
-	}
-
-	//normalized() can not be called so often to prevent
-	//invalidating selection/range, so we have to detect
-	//here that any text nodes in a row
-	if(ret.length > 0 && onode.nodeType == 3){
-		n = onode.previousSibling;
-		while(n && n.nodeType == 3){
-			ret[ret.length-1]--;
-			n = n.previousSibling;
-		}
-		n = onode.nextSibling;
-		while(n && n.nodeType == 3){
-			retR[retR.length-1]++;
-			n = n.nextSibling;
-		}
-	}
-//	dojo.profile.end("dijit.range.getIndex");
-	return {o: ret, r:retR};
-}
-
-dijit.range.getNode = function(/*Array*/index, /*DomNode*/parent){
-	if(!dojo.isArray(index) || index.length == 0){
-		return parent;
-	}
-	var node = parent;
-//	if(!node)debugger
-	dojo.every(index, function(i){
-		if(i >= 0 && i < node.childNodes.length){
-			node = node.childNodes[i];
-		}else{
-			node = null;
-			console.debug('Error: can not find node with index',index,'under parent node',parent );
-			return false; //terminate dojo.every
-		}
-		return true; //carry on the every loop
-	});
-
-	return node;
-}
-
-dijit.range.getCommonAncestor = function(n1,n2){
-	var getAncestors = function(n){
-		var as=[];
-		while(n){
-			as.unshift(n);
-			if(n.nodeName!='BODY'){
-				n = n.parentNode;
-			}else{
-				break;
-			}
-		}
-		return as;
-	};
-	var n1as = getAncestors(n1);
-	var n2as = getAncestors(n2);
-
-	var m = Math.min(n1as.length,n2as.length);
-	var com = n1as[0]; //at least, one element should be in the array: the root (BODY by default)
-	for(var i=1;i<m;i++){
-		if(n1as[i] === n2as[i]){
-			com = n1as[i]
-		}else{
-			break;
-		}
-	}
-	return com;
-}
-
-dijit.range.getAncestor = function(/*DomNode*/node, /*RegEx?*/regex, /*DomNode?*/root){
-	root = root || node.ownerDocument.body;
-	while(node && node !== root){
-		var name = node.nodeName.toUpperCase() ;
-		if(regex.test(name)){
-			return node;
-		}
-
-		node = node.parentNode;
-	}
-	return null;
-}
-
-dijit.range.BlockTagNames = /^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DT|DE)$/;
-dijit.range.getBlockAncestor = function(/*DomNode*/node, /*RegEx?*/regex, /*DomNode?*/root){
-	root = root || node.ownerDocument.body;
-	regex = regex || dijit.range.BlockTagNames;
-	var block=null, blockContainer;
-	while(node && node !== root){
-		var name = node.nodeName.toUpperCase() ;
-		if(!block && regex.test(name)){
-			block = node;
-		}
-		if(!blockContainer && (/^(?:BODY|TD|TH|CAPTION)$/).test(name)){
-			blockContainer = node;
-		}
-
-		node = node.parentNode;
-	}
-	return {blockNode:block, blockContainer:blockContainer || node.ownerDocument.body};
-}
-
-dijit.range.atBeginningOfContainer = function(/*DomNode*/container, /*DomNode*/node, /*Int*/offset){
-	var atBeginning = false;
-	var offsetAtBeginning = (offset == 0);
-	if(!offsetAtBeginning && node.nodeType == 3){ //if this is a text node, check whether the left part is all space
-		if(/^[\s\xA0]+$/.test(node.nodeValue.substr(0,offset))){
-			offsetAtBeginning = true;
-		}
-	}
-	if(offsetAtBeginning){
-		var cnode = node;
-		atBeginning = true;
-		while(cnode && cnode !== container){
-			if(cnode.previousSibling){
-				atBeginning = false;
-				break;
-			}
-			cnode = cnode.parentNode;
-		}
-	}
-	return atBeginning;
-}
-
-dijit.range.atEndOfContainer = function(/*DomNode*/container, /*DomNode*/node, /*Int*/offset){
-	var atEnd = false;
-	var offsetAtEnd = (offset == (node.length || node.childNodes.length));
-	if(!offsetAtEnd && node.nodeType == 3){ //if this is a text node, check whether the right part is all space
-		if(/^[\s\xA0]+$/.test(node.nodeValue.substr(offset))){
-			offsetAtEnd = true;
-		}
-	}
-	if(offsetAtEnd){
-		var cnode = node;
-		atEnd = true;
-		while(cnode && cnode !== container){
-			if(cnode.nextSibling){
-				atEnd = false;
-				break;
-			}
-			cnode = cnode.parentNode;
-		}
-	}
-	return atEnd;
-}
-
-dijit.range.adjacentNoneTextNode=function(startnode, next){
-	var node = startnode;
-	var len = (0-startnode.length) || 0;
-	var prop = next?'nextSibling':'previousSibling';
-	while(node){
-		if(node.nodeType!=3){
-			break;
-		}
-		len += node.length
-		node = node[prop];
-	}
-	return [node,len];
-}
-
-dijit.range._w3c = Boolean(window['getSelection']);
-dijit.range.create = function(/*Window?*/win){
-	if(dijit.range._w3c){
-		return (win || dojo.global).document.createRange();
-	}else{//IE
-		return new dijit.range.W3CRange;
-	}
-}
-
-dijit.range.getSelection = function(/*Window*/win, /*Boolean?*/ignoreUpdate){
-	if(dijit.range._w3c){
-		return win.getSelection();
-	}else{//IE
-		var s = new dijit.range.ie.selection(win);
-		if(!ignoreUpdate){
-			s._getCurrentSelection();
-		}
-		return s;
-	}
-}
-
-if(!dijit.range._w3c){
-	dijit.range.ie={
-		cachedSelection: {},
-		selection: function(win){
-			this._ranges = [];
-			this.addRange = function(r, /*boolean*/internal){
-				this._ranges.push(r);
-				if(!internal){
-					r._select();
-				}
-				this.rangeCount = this._ranges.length;
-			};
-			this.removeAllRanges = function(){
-				//don't detach, the range may be used later
-//				for(var i=0;i<this._ranges.length;i++){
-//					this._ranges[i].detach();
-//				}
-				this._ranges = [];
-				this.rangeCount = 0;
-			};
-			var _initCurrentRange = function(){
-				var r = win.document.selection.createRange();
-				var type=win.document.selection.type.toUpperCase();
-				if(type == "CONTROL"){
-					//TODO: multiple range selection(?)
-					return new dijit.range.W3CRange(dijit.range.ie.decomposeControlRange(r));
-				}else{
-					return new dijit.range.W3CRange(dijit.range.ie.decomposeTextRange(r));
-				}
-			};
-			this.getRangeAt = function(i){
-				return this._ranges[i];
-			};
-			this._getCurrentSelection = function(){
-				this.removeAllRanges();
-				var r=_initCurrentRange();
-				if(r){
-					this.addRange(r, true);
-				}
-			};
-		},
-		decomposeControlRange: function(range){
-			var firstnode = range.item(0), lastnode = range.item(range.length-1);
-			var startContainer = firstnode.parentNode, endContainer = lastnode.parentNode;
-			var startOffset = dijit.range.getIndex(firstnode, startContainer).o;
-			var endOffset = dijit.range.getIndex(lastnode, endContainer).o+1;
-			return [startContainer, startOffset,endContainer, endOffset];
-		},
-		getEndPoint: function(range, end){
-			var atmrange = range.duplicate();
-			atmrange.collapse(!end);
-			var cmpstr = 'EndTo' + (end?'End':'Start');
-			var parentNode = atmrange.parentElement();
-
-			var startnode, startOffset, lastNode;
-			if(parentNode.childNodes.length>0){
-				dojo.every(parentNode.childNodes, function(node,i){
-					var calOffset;
-					if(node.nodeType != 3){
-						atmrange.moveToElementText(node);
-
-						if(atmrange.compareEndPoints(cmpstr,range) > 0){
-							//startnode = node.previousSibling;
-							if(lastNode && lastNode.nodeType == 3){
-								//where shall we put the start? in the text node or after?
-								startnode = lastNode;
-								calOffset = true;
-							}else{
-								startnode = parentNode;
-								startOffset = i;
-								return false;
-							}
-						}else{
-							if(i == parentNode.childNodes.length-1){
-								startnode = parentNode;
-								startOffset = parentNode.childNodes.length;
-								return false;
-							}
-						}
-					}else{
-						if(i == parentNode.childNodes.length-1){//at the end of this node
-							startnode = node;
-							calOffset = true;
-						}
-					}
-		//			try{
-						if(calOffset && startnode){
-							var prevnode = dijit.range.adjacentNoneTextNode(startnode)[0];
-							if(prevnode){
-								startnode = prevnode.nextSibling;
-							}else{
-								startnode = parentNode.firstChild; //firstChild must be a text node
-							}
-							var prevnodeobj = dijit.range.adjacentNoneTextNode(startnode);
-							prevnode = prevnodeobj[0];
-							var lenoffset = prevnodeobj[1];
-							if(prevnode){
-								atmrange.moveToElementText(prevnode);
-								atmrange.collapse(false);
-							}else{
-								atmrange.moveToElementText(parentNode);
-							}
-							atmrange.setEndPoint(cmpstr, range);
-							startOffset = atmrange.text.length-lenoffset;
-
-							return false;
-						}
-		//			}catch(e){ debugger }
-					lastNode = node;
-					return true;
-				});
-			}else{
-				startnode = parentNode;
-				startOffset = 0;
-			}
-
-			//if at the end of startnode and we are dealing with start container, then
-			//move the startnode to nextSibling if it is a text node
-			//TODO: do this for end container?
-			if(!end && startnode.nodeType == 1 && startOffset == startnode.childNodes.length){
-				var nextnode=startnode.nextSibling;
-				if(nextnode && nextnode.nodeType == 3){
-					startnode = nextnode;
-					startOffset = 0;
-				}
-			}
-			return [startnode, startOffset];
-		},
-		setEndPoint: function(range, container, offset){
-			//text node
-			var atmrange = range.duplicate(), node, len;
-			if(container.nodeType!=3){ //normal node
-				if(offset > 0){
-					node = container.childNodes[offset-1];
-					if(node.nodeType == 3){
-						container = node;
-						offset = node.length;
-						//pass through
-					}else{
-						if(node.nextSibling && node.nextSibling.nodeType == 3){
-							container=node.nextSibling;
-							offset=0;
-							//pass through
-						}else{
-							atmrange.moveToElementText(node.nextSibling?node:container);
-							var parent = node.parentNode;
-							var tempNode = parent.insertBefore(node.ownerDocument.createTextNode(' '), node.nextSibling);
-							atmrange.collapse(false);
-							parent.removeChild(tempNode);
-						}
-					}
-				}else{
-					atmrange.moveToElementText(container);
-					atmrange.collapse(true);
-				}
-			}
-			if(container.nodeType == 3){
-				var prevnodeobj = dijit.range.adjacentNoneTextNode(container);
-				var prevnode = prevnodeobj[0];
-				len = prevnodeobj[1];
-				if(prevnode){
-					atmrange.moveToElementText(prevnode);
-					atmrange.collapse(false);
-					//if contentEditable is not inherit, the above collapse won't make the end point
-					//in the correctly position: it always has a -1 offset, so compensate it
-					if(prevnode.contentEditable!='inherit'){
-						len++;
-					}
-				}else{
-					atmrange.moveToElementText(container.parentNode);
-					atmrange.collapse(true);
-				}
-
-				offset += len;
-				if(offset>0){
-					if(atmrange.move('character',offset) != offset){
-						console.error('Error when moving!');
-					}
-				}
-			}
-
-			return atmrange;
-		},
-		decomposeTextRange: function(range){
-			var tmpary = dijit.range.ie.getEndPoint(range);
-			var startContainer = tmpary[0], startOffset = tmpary[1];
-			var endContainer = tmpary[0], endOffset = tmpary[1];
-
-			if(range.htmlText.length){
-				if(range.htmlText == range.text){ //in the same text node
-					endOffset = startOffset+range.text.length;
-				}else{
-					tmpary = dijit.range.ie.getEndPoint(range,true);
-					endContainer = tmpary[0], endOffset = tmpary[1];
-//					if(startContainer.tagName == "BODY"){
-//						startContainer = startContainer.firstChild;
-//					}
-				}
-			}
-			return [startContainer, startOffset, endContainer, endOffset];
-		},
-		setRange: function(range, startContainer,
-			startOffset, endContainer, endOffset, collapsed){
-			var start=dijit.range.ie.setEndPoint(range, startContainer, startOffset);
-
-			range.setEndPoint('StartToStart',start);
-			if(!collapsed){
-				var end=dijit.range.ie.setEndPoint(range, endContainer, endOffset);
-			}
-			range.setEndPoint('EndToEnd',end || start);
-
-			return range;
-		}
-	}
-
-dojo.declare("dijit.range.W3CRange",null, {
-	constructor: function(){
-		if(arguments.length>0){
-			this.setStart(arguments[0][0],arguments[0][1]);
-			this.setEnd(arguments[0][2],arguments[0][3]);
-		}else{
-			this.commonAncestorContainer = null;
-			this.startContainer = null;
-			this.startOffset = 0;
-			this.endContainer = null;
-			this.endOffset = 0;
-			this.collapsed = true;
-		}
-	},
-	_updateInternal: function(){
-		if(this.startContainer !== this.endContainer){
-			this.commonAncestorContainer = dijit.range.getCommonAncestor(this.startContainer, this.endContainer);
-		}else{
-			this.commonAncestorContainer = this.startContainer;
-		}
-		this.collapsed = (this.startContainer === this.endContainer) && (this.startOffset == this.endOffset);
-	},
-	setStart: function(node, offset){
-		offset=parseInt(offset);
-		if(this.startContainer === node && this.startOffset == offset){
-			return;
-		}
-		delete this._cachedBookmark;
-
-		this.startContainer = node;
-		this.startOffset = offset;
-		if(!this.endContainer){
-			this.setEnd(node, offset);
-		}else{
-			this._updateInternal();
-		}
-	},
-	setEnd: function(node, offset){
-		offset=parseInt(offset);
-		if(this.endContainer === node && this.endOffset == offset){
-			return;
-		}
-		delete this._cachedBookmark;
-
-		this.endContainer = node;
-		this.endOffset = offset;
-		if(!this.startContainer){
-			this.setStart(node, offset);
-		}else{
-			this._updateInternal();
-		}
-	},
-	setStartAfter: function(node, offset){
-		this._setPoint('setStart', node, offset, 1);
-	},
-	setStartBefore: function(node, offset){
-		this._setPoint('setStart', node, offset, 0);
-	},
-	setEndAfter: function(node, offset){
-		this._setPoint('setEnd', node, offset, 1);
-	},
-	setEndBefore: function(node, offset){
-		this._setPoint('setEnd', node, offset, 0);
-	},
-	_setPoint: function(what, node, offset, ext){
-		var index = dijit.range.getIndex(node, node.parentNode).o;
-		this[what](node.parentNode, index.pop()+ext);
-	},
-	_getIERange: function(){
-		var r = (this._body || this.endContainer.ownerDocument.body).createTextRange();
-		dijit.range.ie.setRange(r, this.startContainer, this.startOffset, this.endContainer, this.endOffset, this.collapsed);
-		return r;
-	},
-	getBookmark: function(body){
-		this._getIERange();
-		return this._cachedBookmark;
-	},
-	_select: function(){
-		var r = this._getIERange();
-		r.select();
-	},
-	deleteContents: function(){
-		var r = this._getIERange();
-		r.pasteHTML('');
-		this.endContainer = this.startContainer;
-		this.endOffset = this.startOffset;
-		this.collapsed = true;
-	},
-	cloneRange: function(){
-		var r = new dijit.range.W3CRange([this.startContainer,this.startOffset,
-			this.endContainer,this.endOffset]);
-		r._body = this._body;
-		return r;
-	},
-	detach: function(){
-		this._body = null;
-		this.commonAncestorContainer = null;
-		this.startContainer = null;
-		this.startOffset = 0;
-		this.endContainer = null;
-		this.endOffset = 0;
-		this.collapsed = true;
-}
-});
-} //if(!dijit.range._w3c)
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/selection.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/selection.js
deleted file mode 100644
index 1f360f8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_editor/selection.js
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._editor.selection"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.selection"] = true;
-dojo.provide("dijit._editor.selection");
-
-// FIXME:
-//		all of these methods branch internally for IE. This is probably
-//		sub-optimal in terms of runtime performance. We should investigate the
-//		size difference for differentiating at definition time.
-
-dojo.mixin(dijit._editor.selection, {
-	getType: function(){
-		// summary:
-		//		Get the selection type (like dojo.doc.select.type in IE).
-		if(dojo.isIE){
-			return dojo.doc.selection.type.toLowerCase();
-		}else{
-			var stype = "text";
-
-			// Check if the actual selection is a CONTROL (IMG, TABLE, HR, etc...).
-			var oSel;
-			try{
-				oSel = dojo.global.getSelection();
-			}catch(e){ /*squelch*/ }
-
-			if(oSel && oSel.rangeCount == 1){
-				var oRange = oSel.getRangeAt(0);
-				if(	(oRange.startContainer == oRange.endContainer) &&
-					((oRange.endOffset - oRange.startOffset) == 1) &&
-					(oRange.startContainer.nodeType != 3 /* text node*/)
-				){
-					stype = "control";
-				}
-			}
-			return stype; //String
-		}
-	},
-
-	getSelectedText: function(){
-		// summary:
-		//		Return the text (no html tags) included in the current selection or null if no text is selected
-		if(dojo.isIE){
-			if(dijit._editor.selection.getType() == 'control'){
-				return null;
-			}
-			return dojo.doc.selection.createRange().text;
-		}else{
-			var selection = dojo.global.getSelection();
-			if(selection){
-				return selection.toString(); //String
-			}
-		}
-		return '';
-	},
-
-	getSelectedHtml: function(){
-		// summary:
-		//		Return the html text of the current selection or null if unavailable
-		if(dojo.isIE){
-			if(dijit._editor.selection.getType() == 'control'){
-				return null;
-			}
-			return dojo.doc.selection.createRange().htmlText;
-		}else{
-			var selection = dojo.global.getSelection();
-			if(selection && selection.rangeCount){
-				var i;
-				var html = "";
-				for(i = 0; i < selection.rangeCount; i++){
-					//Handle selections spanning ranges, such as Opera
-					var frag = selection.getRangeAt(i).cloneContents();
-					var div = dojo.doc.createElement("div");
-					div.appendChild(frag);
-					html += div.innerHTML;
-				}
-				return html; //String
-			}
-			return null;
-		}
-	},
-
-	getSelectedElement: function(){
-		// summary:
-		//		Retrieves the selected element (if any), just in the case that
-		//		a single element (object like and image or a table) is
-		//		selected.
-		if(dijit._editor.selection.getType() == "control"){
-			if(dojo.isIE){
-				var range = dojo.doc.selection.createRange();
-				if(range && range.item){
-					return dojo.doc.selection.createRange().item(0);
-				}
-			}else{
-				var selection = dojo.global.getSelection();
-				return selection.anchorNode.childNodes[ selection.anchorOffset ];
-			}
-		}
-		return null;
-	},
-
-	getParentElement: function(){
-		// summary:
-		//		Get the parent element of the current selection
-		if(dijit._editor.selection.getType() == "control"){
-			var p = this.getSelectedElement();
-			if(p){ return p.parentNode; }
-		}else{
-			if(dojo.isIE){
-				var r = dojo.doc.selection.createRange();
-				r.collapse(true);
-				return r.parentElement();
-			}else{
-				var selection = dojo.global.getSelection();
-				if(selection){
-					var node = selection.anchorNode;
-					while(node && (node.nodeType != 1)){ // not an element
-						node = node.parentNode;
-					}
-					return node;
-				}
-			}
-		}
-		return null;
-	},
-
-	hasAncestorElement: function(/*String*/tagName /* ... */){
-		// summary:
-		// 		Check whether current selection has a  parent element which is
-		// 		of type tagName (or one of the other specified tagName)
-		// tagName: String
-		//		The tag name to determine if it has an ancestor of.
-		return this.getAncestorElement.apply(this, arguments) != null; //Boolean
-	},
-
-	getAncestorElement: function(/*String*/tagName /* ... */){
-		// summary:
-		//		Return the parent element of the current selection which is of
-		//		type tagName (or one of the other specified tagName)
-		// tagName: String
-		//		The tag name to determine if it has an ancestor of.
-		var node = this.getSelectedElement() || this.getParentElement();
-		return this.getParentOfType(node, arguments); //DOMNode
-	},
-
-	isTag: function(/*DomNode*/ node, /*String[]*/ tags){
-		// summary:
-		//		Function to determine if a node is one of an array of tags.
-		// node:
-		//		The node to inspect.
-		// tags:
-		//		An array of tag name strings to check to see if the node matches.
-		if(node && node.tagName){
-			var _nlc = node.tagName.toLowerCase();
-			for(var i=0; i<tags.length; i++){
-				var _tlc = String(tags[i]).toLowerCase();
-				if(_nlc == _tlc){
-					return _tlc; // String
-				}
-			}
-		}
-		return "";
-	},
-
-	getParentOfType: function(/*DomNode*/ node, /*String[]*/ tags){
-		// summary:
-		//		Function to locate a parent node that matches one of a set of tags
-		// node:
-		//		The node to inspect.
-		// tags:
-		//		An array of tag name strings to check to see if the node matches.
-		while(node){
-			if(this.isTag(node, tags).length){
-				return node; // DOMNode
-			}
-			node = node.parentNode;
-		}
-		return null;
-	},
-
-	collapse: function(/*Boolean*/beginning){
-		// summary:
-		//		Function to collapse (clear), the current selection
-		// beginning: Boolean
-		//		Boolean to indicate whether to collapse the cursor to the beginning of the selection or end.
-		if(window.getSelection){
-			var selection = dojo.global.getSelection();
-			if(selection.removeAllRanges){ // Mozilla
-				if(beginning){
-					selection.collapseToStart();
-				}else{
-					selection.collapseToEnd();
-				}
-			}else{ // Safari
-				// pulled from WebCore/ecma/kjs_window.cpp, line 2536
-				selection.collapse(beginning);
-			}
-		}else if(dojo.isIE){ // IE
-			var range = dojo.doc.selection.createRange();
-			range.collapse(beginning);
-			range.select();
-		}
-	},
-
-	remove: function(){
-		// summary:
-		//		Function to delete the currently selected content from the document.
-		var sel = dojo.doc.selection;
-		if(dojo.isIE){
-			if(sel.type.toLowerCase() != "none"){
-				sel.clear();
-			}
-			return sel; //Selection
-		}else{
-			sel = dojo.global.getSelection();
-			sel.deleteFromDocument();
-			return sel; //Selection
-		}
-	},
-
-	selectElementChildren: function(/*DomNode*/element,/*Boolean?*/nochangefocus){
-		// summary:
-		//		clear previous selection and select the content of the node
-		//		(excluding the node itself)
-		// element: DOMNode
-		//		The element you wish to select the children content of.
-		// nochangefocus: Boolean
-		//		Boolean to indicate if the foxus should change or not.
-		var win = dojo.global;
-		var doc = dojo.doc;
-		var range;
-		element = dojo.byId(element);
-		if(doc.selection && dojo.isIE && dojo.body().createTextRange){ // IE
-			range = element.ownerDocument.body.createTextRange();
-			range.moveToElementText(element);
-			if(!nochangefocus){
-				try{
-					range.select(); // IE throws an exception here if the widget is hidden.  See #5439
-				}catch(e){ /* squelch */}
-			}
-		}else if(win.getSelection){
-			var selection = dojo.global.getSelection();
-			if(selection.setBaseAndExtent){ // Safari
-				selection.setBaseAndExtent(element, 0, element, element.innerText.length - 1);
-			}else if(dojo.isOpera){
-				//Opera's selectAllChildren doesn't seem to work right
-				//against <body> nodes and possibly others ... so
-				//we use the W3C range API
-				if(selection.rangeCount){
-					range = selection.getRangeAt(0);
-				}else{
-					range = doc.createRange();
-				}
-				range.setStart(element, 0);
-				range.setEnd(element,(element.nodeType == 3)?element.length:element.childNodes.length);
-				selection.addRange(range);
-			}else if(selection.selectAllChildren){ // Mozilla
-				selection.selectAllChildren(element);
-			}
-		}
-	},
-
-	selectElement: function(/*DomNode*/element,/*Boolean?*/nochangefocus){
-		// summary:
-		//		clear previous selection and select element (including all its children)
-		// element:  DOMNode
-		//		The element to select.
-		// nochangefocus: Boolean
-		//		Boolean indicating if the focus should be changed.  IE only.
-		var range;
-		var doc = dojo.doc;
-		var win = dojo.global;
-		element = dojo.byId(element);
-		if(dojo.isIE && dojo.body().createTextRange){
-			try{
-				range = dojo.body().createControlRange();
-				range.addElement(element);
-				if(!nochangefocus){
-					range.select();
-				}
-			}catch(e){
-				this.selectElementChildren(element,nochangefocus);
-			}
-		}else if(dojo.global.getSelection){
-			var selection = win.getSelection();
-			range = doc.createRange();
-			if(selection.removeAllRanges){ // Mozilla
-				// FIXME: does this work on Safari?
-				if(dojo.isOpera){
-					//Opera works if you use the current range on
-					//the selection if present.
-					if(selection.getRangeAt(0)){
-						range = selection.getRangeAt(0);
-					}
-				}
-				range.selectNode(element);
-				selection.removeAllRanges();
-				selection.addRange(range);
-			}
-		}
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_tree/dndSource.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_tree/dndSource.js
deleted file mode 100644
index 6b2daa6..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/_tree/dndSource.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._tree.dndSource"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._tree.dndSource"] = true;
-dojo.provide("dijit._tree.dndSource");
-dojo.require("dijit.tree.dndSource");
-
-// TODO: remove this file in 2.0
-dojo.deprecated("dijit._tree.dndSource has been moved to dijit.tree.dndSource, use that instead", "", "2.0");
-
-dijit._tree.dndSource = dijit.tree.dndSource;
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/dijit-all.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/dijit-all.js
deleted file mode 100644
index b481792..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/dijit-all.js
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.dijit-all"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.dijit-all"] = true;
-console.warn("dijit-all may include much more code than your application actually requires. We strongly recommend that you investigate a custom build or the web build tool");
-dojo.provide("dijit.dijit-all");
-
-/*=====
-dijit["dijit-all"] = {
-	// summary:
-	//		A rollup that includes every dijit. You probably don't need this.
-};
-=====*/
-
-dojo.require("dijit.dijit");
-
-dojo.require("dijit.ColorPalette");
-dojo.require("dijit.Declaration");
-
-dojo.require("dijit.Dialog");
-dojo.require("dijit.DialogUnderlay");
-dojo.require("dijit.TooltipDialog");
-
-dojo.require("dijit.Editor");
-
-dojo.require("dijit.Menu");
-dojo.require("dijit.MenuItem");
-dojo.require("dijit.PopupMenuItem");
-dojo.require("dijit.MenuBar");
-dojo.require("dijit.MenuBarItem");
-dojo.require("dijit.PopupMenuBarItem");
-dojo.require("dijit.MenuSeparator");
-
-dojo.require("dijit.ProgressBar");
-dojo.require("dijit.TitlePane");
-dojo.require("dijit.Toolbar");
-dojo.require("dijit.Tooltip");
-dojo.require("dijit.Tree");
-dojo.require("dijit.InlineEditBox");
-
-// Form widgets
-dojo.require("dijit.form.Form");
-
-// Button widgets
-dojo.require("dijit.form.Button");
-dojo.require("dijit.form.DropDownButton");
-dojo.require("dijit.form.ComboButton");
-dojo.require("dijit.form.ToggleButton");
-dojo.require("dijit.form.CheckBox");
-dojo.require("dijit.form.RadioButton");
-
-// Textbox widgets
-dojo.require("dijit.form.TextBox");
-dojo.require("dijit.form.ValidationTextBox");
-dojo.require("dijit.form.CurrencyTextBox");
-dojo.require("dijit.form.DateTextBox");
-dojo.require("dijit.form.NumberSpinner");
-dojo.require("dijit.form.NumberTextBox");
-
-// Select widgets
-dojo.require("dijit.form.ComboBox");
-dojo.require("dijit.form.FilteringSelect");
-dojo.require("dijit.form.MultiSelect");
-
-// Slider widgets
-dojo.require("dijit.form.HorizontalSlider");
-dojo.require("dijit.form.VerticalSlider");
-dojo.require("dijit.form.HorizontalRule");
-dojo.require("dijit.form.VerticalRule");
-dojo.require("dijit.form.HorizontalRuleLabels");
-dojo.require("dijit.form.VerticalRuleLabels");
-
-// Textarea widgets
-dojo.require("dijit.form.SimpleTextarea");
-dojo.require("dijit.form.Textarea");
-
-// Layout widgets
-dojo.require("dijit.layout.AccordionContainer");
-dojo.require("dijit.layout.ContentPane");
-dojo.require("dijit.layout.BorderContainer");
-dojo.require("dijit.layout.LayoutContainer"); //deprecated
-dojo.require("dijit.layout.LinkPane");
-dojo.require("dijit.layout.SplitContainer"); //deprecated
-dojo.require("dijit.layout.StackContainer");
-dojo.require("dijit.layout.TabContainer");
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/dijit.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/dijit.js
deleted file mode 100644
index c56bfc2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/dijit.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.dijit"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.dijit"] = true;
-dojo.provide("dijit.dijit");
-
-/*=====
-dijit.dijit = {
-	// summary:
-	//		A roll-up for common dijit methods
-	// description:
-	//	A rollup file for the build system including the core and common
-	//	dijit files.
-	//
-	// example:
-	// | <script type="text/javascript" src="js/dojo/dijit/dijit.js"></script>
-	//
-};
-=====*/
-
-// All the stuff in _base (these are the function that are guaranteed available without an explicit dojo.require)
-dojo.require("dijit._base");
-
-// And some other stuff that we tend to pull in all the time anyway
-dojo.require("dojo.parser");
-dojo.require("dijit._Widget");
-dojo.require("dijit._Templated");
-dojo.require("dijit._Container");
-dojo.require("dijit.layout._LayoutWidget");
-dojo.require("dijit.form._FormWidget");
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/Button.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/Button.js
deleted file mode 100644
index d31fb24..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/Button.js
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.Button"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.Button"] = true;
-dojo.provide("dijit.form.Button");
-
-dojo.require("dijit.form._FormWidget");
-dojo.require("dijit._Container");
-dojo.require("dijit._HasDropDown");
-
-dojo.declare("dijit.form.Button",
-	dijit.form._FormWidget,
-	{
-	// summary:
-	//		Basically the same thing as a normal HTML button, but with special styling.
-	// description:
-	//		Buttons can display a label, an icon, or both.
-	//		A label should always be specified (through innerHTML) or the label
-	//		attribute.  It can be hidden via showLabel=false.
-	// example:
-	// |	<button dojoType="dijit.form.Button" onClick="...">Hello world</button>
-	//
-	// example:
-	// |	var button1 = new dijit.form.Button({label: "hello world", onClick: foo});
-	// |	dojo.body().appendChild(button1.domNode);
-
-	// label: HTML String
-	//		Text to display in button.
-	//		If the label is hidden (showLabel=false) then and no title has
-	//		been specified, then label is also set as title attribute of icon.
-	label: "",
-
-	// showLabel: Boolean
-	//		Set this to true to hide the label text and display only the icon.
-	//		(If showLabel=false then iconClass must be specified.)
-	//		Especially useful for toolbars.
-	//		If showLabel=true, the label will become the title (a.k.a. tooltip/hint) of the icon.
-	//
-	//		The exception case is for computers in high-contrast mode, where the label
-	//		will still be displayed, since the icon doesn't appear.
-	showLabel: true,
-
-	// iconClass: String
-	//		Class to apply to DOMNode in button to make it display an icon
-	iconClass: "",
-
-	// type: String
-	//		Defines the type of button.  "button", "submit", or "reset".
-	type: "button",
-
-	baseClass: "dijitButton",
-
-	templateString: dojo.cache("dijit.form", "templates/Button.html", "<span class=\"dijit dijitReset dijitLeft dijitInline\"\n\tdojoAttachEvent=\"onclick:_onButtonClick,onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\"\n\t><span class=\"dijitReset dijitRight dijitInline\"\n\t\t><span class=\"dijitReset dijitInline dijitButtonNode\"\n\t\t\t><button class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\t\tdojoAttachPoint=\"titleNode,focusNode\"\n\t\t\t\t${nameAttrSetting} type=\"${type}\" value=\"${value}\" waiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t\t><span class=\"dijitReset dijitInline\" dojoAttachPoint=\"iconNode\"\n\t\t\t\t\t><span class=\"dijitReset dijitToggleButtonIconChar\">&#10003;</span\n\t\t\t\t></span\n\t\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\t\tid=\"${id}_label\"\n\t\t\t\t\tdojoAttachPoint=\"containerNode\"\n\t\t\t\t></span\n\t\t\t></button\n\t\t></span\n\t></span\n></span>\n"),
-
-	attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, {
-		label: { node: "containerNode", type: "innerHTML" },
-		iconClass: { node: "iconNode", type: "class" }
-	}),
-
-
-	_onClick: function(/*Event*/ e){
-		// summary:
-		//		Internal function to handle click actions
-		if(this.disabled){
-			return false;
-		}
-		this._clicked(); // widget click actions
-		return this.onClick(e); // user click actions
-	},
-
-	_onButtonClick: function(/*Event*/ e){
-		// summary:
-		//		Handler when the user activates the button portion.
-		if(this._onClick(e) === false){ // returning nothing is same as true
-			e.preventDefault(); // needed for checkbox
-		}else if(this.type == "submit" && !this.focusNode.form){ // see if a nonform widget needs to be signalled
-			for(var node=this.domNode; node.parentNode/*#5935*/; node=node.parentNode){
-				var widget=dijit.byNode(node);
-				if(widget && typeof widget._onSubmit == "function"){
-					widget._onSubmit(e);
-					break;
-				}
-			}
-		}
-	},
-
-	_setValueAttr: function(/*String*/ value){
-		// Verify that value cannot be set for BUTTON elements.
-		var attr = this.attributeMap.value || '';
-		if(this[attr.node || attr || 'domNode'].tagName == 'BUTTON'){
-			// On IE, setting value actually overrides innerHTML, so disallow for everyone for consistency
-			if(value != this.value){
-				console.debug('Cannot change the value attribute on a Button widget.');
-			}
-		}
-	},
-
-	_fillContent: function(/*DomNode*/ source){
-		// Overrides _Templated._fillContent().
-		// If button label is specified as srcNodeRef.innerHTML rather than
-		// this.params.label, handle it here.
-		if(source && (!this.params || !("label" in this.params))){
-			this.attr('label', source.innerHTML);
-		}
-	},
-
-	postCreate: function(){
-		dojo.setSelectable(this.focusNode, false);
-		this.inherited(arguments);
-	},
-
-	_setShowLabelAttr: function(val){
-		if(this.containerNode){
-			dojo.toggleClass(this.containerNode, "dijitDisplayNone", !val);
-		}
-		this.showLabel = val;
-	},
-
-	onClick: function(/*Event*/ e){
-		// summary:
-		//		Callback for when button is clicked.
-		//		If type="submit", return true to perform submit, or false to cancel it.
-		// type:
-		//		callback
-		return true;		// Boolean
-	},
-
-	_clicked: function(/*Event*/ e){
-		// summary:
-		//		Internal overridable function for when the button is clicked
-	},
-
-	setLabel: function(/*String*/ content){
-		// summary:
-		//		Deprecated.  Use attr('label', ...) instead.
-		dojo.deprecated("dijit.form.Button.setLabel() is deprecated.  Use attr('label', ...) instead.", "", "2.0");
-		this.attr("label", content);
-	},
-	_setLabelAttr: function(/*String*/ content){
-		// summary:
-		//		Hook for attr('label', ...) to work.
-		// description:
-		//		Set the label (text) of the button; takes an HTML string.
-		this.containerNode.innerHTML = this.label = content;
-		if(this.showLabel == false && !this.params.title){
-			this.titleNode.title = dojo.trim(this.containerNode.innerText || this.containerNode.textContent || '');
-		}
-	}
-});
-
-
-dojo.declare("dijit.form.DropDownButton", [dijit.form.Button, dijit._Container, dijit._HasDropDown], {
-	// summary:
-	//		A button with a drop down
-	//
-	// example:
-	// |	<button dojoType="dijit.form.DropDownButton" label="Hello world">
-	// |		<div dojotype="dijit.Menu">...</div>
-	// |	</button>
-	//
-	// example:
-	// |	var button1 = new dijit.form.DropDownButton({ label: "hi", dropDown: new dijit.Menu(...) });
-	// |	dojo.body().appendChild(button1);
-	//
-
-	baseClass : "dijitDropDownButton",
-
-	templateString: dojo.cache("dijit.form", "templates/DropDownButton.html", "<span class=\"dijit dijitReset dijitLeft dijitInline\"\n\tdojoAttachPoint=\"_buttonNode\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\"\n\t><span class='dijitReset dijitRight dijitInline'\n\t\t><span class='dijitReset dijitInline dijitButtonNode'\n\t\t\t><button class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\t\t${nameAttrSetting} type=\"${type}\" value=\"${value}\"\n\t\t\t\tdojoAttachPoint=\"focusNode,titleNode,_arrowWrapperNode\"\n\t\t\t\twaiRole=\"button\" waiState=\"haspopup-true,labelledby-${id}_label\"\n\t\t\t\t><span class=\"dijitReset dijitInline\"\n\t\t\t\t\tdojoAttachPoint=\"iconNode\"\n\t\t\t\t></span\n\t\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\t\tdojoAttachPoint=\"containerNode,_popupStateNode\"\n\t\t\t\t\tid=\"${id}_label\"\n\t\t\t\t></span\n\t\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonInner\">&thinsp;</span\n\t\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonChar\">&#9660;</span\n\t\t\t></button\n\t\t></span\n\t></span\n></span>\n"),
-
-	_fillContent: function(){
-		// Overrides Button._fillContent().
-		//
-		// My inner HTML contains both the button contents and a drop down widget, like
-		// <DropDownButton>  <span>push me</span>  <Menu> ... </Menu> </DropDownButton>
-		// The first node is assumed to be the button content. The widget is the popup.
-
-		if(this.srcNodeRef){ // programatically created buttons might not define srcNodeRef
-			//FIXME: figure out how to filter out the widget and use all remaining nodes as button
-			//	content, not just nodes[0]
-			var nodes = dojo.query("*", this.srcNodeRef);
-			dijit.form.DropDownButton.superclass._fillContent.call(this, nodes[0]);
-
-			// save pointer to srcNode so we can grab the drop down widget after it's instantiated
-			this.dropDownContainer = this.srcNodeRef;
-		}
-	},
-
-	startup: function(){
-		if(this._started){ return; }
-
-		// the child widget from srcNodeRef is the dropdown widget.  Insert it in the page DOM,
-		// make it invisible, and store a reference to pass to the popup code.
-		if(!this.dropDown){
-			var dropDownNode = dojo.query("[widgetId]", this.dropDownContainer)[0];
-			this.dropDown = dijit.byNode(dropDownNode);
-			delete this.dropDownContainer;
-		}
-		dijit.popup.moveOffScreen(this.dropDown.domNode);
-
-		this.inherited(arguments);
-	},
-
-	isLoaded: function(){
-		// Returns whether or not we are loaded - if our dropdown has an href,
-		// then we want to check that.
-		var dropDown = this.dropDown;
-		return (!dropDown.href || dropDown.isLoaded);
-	},
-
-	loadDropDown: function(){
-		// Loads our dropdown
-		var dropDown = this.dropDown;
-		if(!dropDown){ return; }
-		if(!this.isLoaded()){
-			var handler = dojo.connect(dropDown, "onLoad", this, function(){
-				dojo.disconnect(handler);
-				this.openDropDown();
-			});
-			dropDown.refresh();
-		}else{
-			this.openDropDown();
-		}
-	},
-
-	isFocusable: function(){
-		// Overridden so that focus is handled by the _HasDropDown mixin, not by
-		// the _FormWidget mixin.
-		return this.inherited(arguments) && !this._mouseDown;
-	}
-});
-
-dojo.declare("dijit.form.ComboButton", dijit.form.DropDownButton, {
-	// summary:
-	//		A combination button and drop-down button.
-	//		Users can click one side to "press" the button, or click an arrow
-	//		icon to display the drop down.
-	//
-	// example:
-	// |	<button dojoType="dijit.form.ComboButton" onClick="...">
-	// |		<span>Hello world</span>
-	// |		<div dojoType="dijit.Menu">...</div>
-	// |	</button>
-	//
-	// example:
-	// |	var button1 = new dijit.form.ComboButton({label: "hello world", onClick: foo, dropDown: "myMenu"});
-	// |	dojo.body().appendChild(button1.domNode);
-	//
-
-	templateString: dojo.cache("dijit.form", "templates/ComboButton.html", "<table class='dijit dijitReset dijitInline dijitLeft'\n\tcellspacing='0' cellpadding='0' waiRole=\"presentation\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonNode\"><button id=\"${id}_button\" class=\"dijitReset dijitButtonContents\"\n\t\t\tdojoAttachEvent=\"onclick:_onButtonClick,onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse,onkeypress:_onButtonKeyPress\"  dojoAttachPoint=\"titleNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><div class=\"dijitReset dijitInline\" dojoAttachPoint=\"iconNode\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitInline dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\" waiRole=\"presentation\"></div\n\t\t></button></td\n\t\t><td id=\"${id}_arrow\" class='dijitReset dijitRight dijitButtonNode dijitArrowButton'\n\t\t\tdojoAttachPoint=\"_popupStateNode,focusNode,_buttonNode\"\n\t\t\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onkeypress:_onArrowKeyPress\"\n\t\t\tstateModifier=\"DownArrow\"\n\t\t\ttitle=\"${optionsTitle}\" ${nameAttrSetting}\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" waiRole=\"presentation\">&thinsp;</div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">&#9660;</div\n\t\t></td\n\t></tr></tbody\n></table>\n"),
-
-	attributeMap: dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap), {
-		id: "",
-		tabIndex: ["focusNode", "titleNode"],
-		title: "titleNode"
-	}),
-
-	// optionsTitle: String
-	//		Text that describes the options menu (accessibility)
-	optionsTitle: "",
-
-	baseClass: "dijitComboButton",
-
-	_focusedNode: null,
-
-	postCreate: function(){
-		this.inherited(arguments);
-		this._focalNodes = [this.titleNode, this._popupStateNode];
-		var isIE = dojo.isIE;
-		dojo.forEach(this._focalNodes, dojo.hitch(this, function(node){
-			this.connect(node, isIE? "onactivate" : "onfocus", this._onNodeFocus);
-			this.connect(node, isIE? "ondeactivate" : "onblur", this._onNodeBlur);
-		}));
-		if(isIE && (isIE < 8 || dojo.isQuirks)){ // fixed in IE8/strict
-			with(this.titleNode){ // resize BUTTON tag so parent TD won't inherit extra padding
-				style.width = scrollWidth + "px";
-				this.connect(this.titleNode, "onresize", function(){
-					setTimeout( function(){ style.width = scrollWidth + "px"; }, 0);
-				});
-			}
-		}
-	},
-
-	_onNodeFocus: function(evt){
-		this._focusedNode = evt.currentTarget;
-		var fnc = this._focusedNode == this.focusNode ? "dijitDownArrowButtonFocused" : "dijitButtonContentsFocused";
-		dojo.addClass(this._focusedNode, fnc);
-	},
-
-	_onNodeBlur: function(evt){
-		var fnc = evt.currentTarget == this.focusNode ? "dijitDownArrowButtonFocused" : "dijitButtonContentsFocused";
-		dojo.removeClass(evt.currentTarget, fnc);
-	},
-
-	_onBlur: function(){
-		this.inherited(arguments);
-		this._focusedNode = null;
-	},
-	
-	_onButtonKeyPress: function(/*Event*/ evt){
-		// summary:
-		//		Handler for right arrow key when focus is on left part of button
-		if(evt.charOrCode == dojo.keys[this.isLeftToRight() ? "RIGHT_ARROW" : "LEFT_ARROW"]){
-			dijit.focus(this._popupStateNode);
-			dojo.stopEvent(evt);
-		}
-	},
-
-	_onArrowKeyPress: function(/*Event*/ evt){
-		// summary:
-		//		Handler for left arrow key when focus is on right part of button
-		if(evt.charOrCode == dojo.keys[this.isLeftToRight() ? "LEFT_ARROW" : "RIGHT_ARROW"]){
-			dijit.focus(this.titleNode);
-			dojo.stopEvent(evt);
-		}
-	},
-	
-	focus: function(/*String*/ position){
-		// summary:
-		//		Focuses this widget to according to position, if specified,
-		//		otherwise on arrow node
-		// position:
-		//		"start" or "end"
-		
-		dijit.focus(position == "start" ? this.titleNode : this._popupStateNode);
-	}
-});
-
-dojo.declare("dijit.form.ToggleButton", dijit.form.Button, {
-	// summary:
-	//		A button that can be in two states (checked or not).
-	//		Can be base class for things like tabs or checkbox or radio buttons
-
-	baseClass: "dijitToggleButton",
-
-	// checked: Boolean
-	//		Corresponds to the native HTML <input> element's attribute.
-	//		In markup, specified as "checked='checked'" or just "checked".
-	//		True if the button is depressed, or the checkbox is checked,
-	//		or the radio button is selected, etc.
-	checked: false,
-
-	attributeMap: dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap), {
-		checked:"focusNode"
-	}),
-
-	_clicked: function(/*Event*/ evt){
-		this.attr('checked', !this.checked);
-	},
-
-	_setCheckedAttr: function(/*Boolean*/ value){
-		this.checked = value;
-		dojo.attr(this.focusNode || this.domNode, "checked", value);
-		dijit.setWaiState(this.focusNode || this.domNode, "pressed", value);
-		this._setStateClass();
-		this._handleOnChange(value, true);
-	},
-
-	setChecked: function(/*Boolean*/ checked){
-		// summary:
-		//		Deprecated.   Use attr('checked', true/false) instead.
-		dojo.deprecated("setChecked("+checked+") is deprecated. Use attr('checked',"+checked+") instead.", "", "2.0");
-		this.attr('checked', checked);
-	},
-
-	reset: function(){
-		// summary:
-		//		Reset the widget's value to what it was at initialization time
-
-		this._hasBeenBlurred = false;
-
-		// set checked state to original setting
-		this.attr('checked', this.params.checked || false);
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/CheckBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/CheckBox.js
deleted file mode 100644
index e07fbb8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/CheckBox.js
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.CheckBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.CheckBox"] = true;
-dojo.provide("dijit.form.CheckBox");
-
-dojo.require("dijit.form.Button");
-
-dojo.declare(
-	"dijit.form.CheckBox",
-	dijit.form.ToggleButton,
-	{
-		// summary:
-		// 		Same as an HTML checkbox, but with fancy styling.
-		//
-		// description:
-		// User interacts with real html inputs.
-		// On onclick (which occurs by mouse click, space-bar, or
-		// using the arrow keys to switch the selected radio button),
-		// we update the state of the checkbox/radio.
-		//
-		// There are two modes:
-		//   1. High contrast mode
-		//   2. Normal mode
-		// In case 1, the regular html inputs are shown and used by the user.
-		// In case 2, the regular html inputs are invisible but still used by
-		// the user. They are turned quasi-invisible and overlay the background-image.
-
-		templateString: dojo.cache("dijit.form", "templates/CheckBox.html", "<div class=\"dijitReset dijitInline\" waiRole=\"presentation\"\n\t><input\n\t \t${nameAttrSetting} type=\"${type}\" ${checkedAttrSetting}\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"focusNode\"\n\t \tdojoAttachEvent=\"onmouseover:_onMouse,onmouseout:_onMouse,onclick:_onClick\"\n/></div>\n"),
-
-		baseClass: "dijitCheckBox",
-
-		// type: [private] String
-		//		type attribute on <input> node.
-		//		Overrides `dijit.form.Button.type`.   Users should not change this value.
-		type: "checkbox",
-
-		// value: String
-		//		As an initialization parameter, equivalent to value field on normal checkbox
-		//		(if checked, the value is passed as the value when form is submitted).
-		//
-		//		However, attr('value') will return either the string or false depending on
-		//		whether or not the checkbox is checked.
-		//
-		//		attr('value', string) will check the checkbox and change the value to the
-		//		specified string
-		//
-		//		attr('value', boolean) will change the checked state.
-		value: "on",
-
-		// readOnly: Boolean
-		//		Should this widget respond to user input?
-		//		In markup, this is specified as "readOnly".
-		//		Similar to disabled except readOnly form values are submitted.
-		readOnly: false,
-
-		attributeMap: dojo.delegate(dijit.form.ToggleButton.prototype.attributeMap, {
-			readOnly: "focusNode"
-		}),
-
-		_setReadOnlyAttr: function(/*Boolean*/ value){
-			this.readOnly = value;
-			dojo.attr(this.focusNode, 'readOnly', value);
-			dijit.setWaiState(this.focusNode, "readonly", value);
-			this._setStateClass();
-		},
-
-		_setValueAttr: function(/*String or Boolean*/ newValue){
-			// summary:
-			//		Handler for value= attribute to constructor, and also calls to
-			//		attr('value', val).
-			// description:
-			//		During initialization, just saves as attribute to the <input type=checkbox>.
-			//
-			//		After initialization,
-			//		when passed a boolean, controls whether or not the CheckBox is checked.
-			//		If passed a string, changes the value attribute of the CheckBox (the one
-			//		specified as "value" when the CheckBox was constructed (ex: <input
-			//		dojoType="dijit.CheckBox" value="chicken">)
-			if(typeof newValue == "string"){
-				this.value = newValue;
-				dojo.attr(this.focusNode, 'value', newValue);
-				newValue = true;
-			}
-			if(this._created){
-				this.attr('checked', newValue);
-			}
-		},
-		_getValueAttr: function(){
-			// summary:
-			//		Hook so attr('value') works.
-			// description:
-			//		If the CheckBox is checked, returns the value attribute.
-			//		Otherwise returns false.
-			return (this.checked ? this.value : false);
-		},
-
-		postMixInProperties: function(){
-			if(this.value == ""){
-				this.value = "on";
-			}
-
-			// Need to set initial checked state as part of template, so that form submit works.
-			// dojo.attr(node, "checked", bool) doesn't work on IEuntil node has been attached
-			// to <body>, see #8666
-			this.checkedAttrSetting = this.checked ? "checked" : "";
-
-			this.inherited(arguments);
-		},
-
-		 _fillContent: function(/*DomNode*/ source){
-			// Override Button::_fillContent() since it doesn't make sense for CheckBox,
-			// since CheckBox doesn't even have a container
-		},
-
-		reset: function(){
-			// Override ToggleButton.reset()
-
-			this._hasBeenBlurred = false;
-
-			this.attr('checked', this.params.checked || false);
-
-			// Handle unlikely event that the <input type=checkbox> value attribute has changed
-			this.value = this.params.value || "on";
-			dojo.attr(this.focusNode, 'value', this.value);
-		},
-
-		_onFocus: function(){
-			if(this.id){
-				dojo.query("label[for='"+this.id+"']").addClass("dijitFocusedLabel");
-			}
-		},
-
-		_onBlur: function(){
-			if(this.id){
-				dojo.query("label[for='"+this.id+"']").removeClass("dijitFocusedLabel");
-			}
-		},
-
-		_onClick: function(/*Event*/ e){
-			// summary:
-			//		Internal function to handle click actions - need to check
-			//		readOnly, since button no longer does that check.
-			if(this.readOnly){
-				return false;
-			}
-			return this.inherited(arguments);
-		}
-	}
-);
-
-dojo.declare(
-	"dijit.form.RadioButton",
-	dijit.form.CheckBox,
-	{
-		// summary:
-		// 		Same as an HTML radio, but with fancy styling.
-
-		type: "radio",
-		baseClass: "dijitRadio",
-
-		_setCheckedAttr: function(/*Boolean*/ value){
-			// If I am being checked then have to deselect currently checked radio button
-			this.inherited(arguments);
-			if(!this._created){ return; }
-			if(value){
-				var _this = this;
-				// search for radio buttons with the same name that need to be unchecked
-				dojo.query("INPUT[type=radio]", this.focusNode.form || dojo.doc).forEach( // can't use name= since dojo.query doesn't support [] in the name
-					function(inputNode){
-						if(inputNode.name == _this.name && inputNode != _this.focusNode && inputNode.form == _this.focusNode.form){
-							var widget = dijit.getEnclosingWidget(inputNode);
-							if(widget && widget.checked){
-								widget.attr('checked', false);
-							}
-						}
-					}
-				);
-			}
-		},
-
-		_clicked: function(/*Event*/ e){
-			if(!this.checked){
-				this.attr('checked', true);
-			}
-		}
-	}
-);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/ComboBox.js
deleted file mode 100644
index ee78224..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/ComboBox.js
+++ /dev/null
@@ -1,1240 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.ComboBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.ComboBox"] = true;
-dojo.provide("dijit.form.ComboBox");
-
-dojo.require("dijit.form._FormWidget");
-dojo.require("dijit.form.ValidationTextBox");
-dojo.require("dojo.data.util.simpleFetch");
-dojo.require("dojo.data.util.filter");
-dojo.require("dojo.regexp");
-
-dojo.requireLocalization("dijit.form", "ComboBox", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
-
-dojo.declare(
-	"dijit.form.ComboBoxMixin",
-	null,
-	{
-		// summary:
-		//		Implements the base functionality for `dijit.form.ComboBox`/`dijit.form.FilteringSelect`
-		// description:
-		//		All widgets that mix in dijit.form.ComboBoxMixin must extend `dijit.form._FormValueWidget`.
-		// tags:
-		//		protected
-
-		// item: Object
-		//		This is the item returned by the dojo.data.store implementation that
-		//		provides the data for this ComboBox, it's the currently selected item.
-		item: null,
-
-		// pageSize: Integer
-		//		Argument to data provider.
-		//		Specifies number of search results per page (before hitting "next" button)
-		pageSize: Infinity,
-
-		// store: Object
-		//		Reference to data provider object used by this ComboBox
-		store: null,
-
-		// fetchProperties: Object
-		//		Mixin to the dojo.data store's fetch.
-		//		For example, to set the sort order of the ComboBox menu, pass:
-		//	|	{ sort: {attribute:"name",descending: true} }
-		//		To override the default queryOptions so that deep=false, do:
-		//	|	{ queryOptions: {ignoreCase: true, deep: false} }
-		fetchProperties:{},
-
-		// query: Object
-		//		A query that can be passed to 'store' to initially filter the items,
-		//		before doing further filtering based on `searchAttr` and the key.
-		//		Any reference to the `searchAttr` is ignored.
-		query: {},
-
-		// autoComplete: Boolean
-		//		If user types in a partial string, and then tab out of the `<input>` box,
-		//		automatically copy the first entry displayed in the drop down list to
-		//		the `<input>` field
-		autoComplete: true,
-
-		// highlightMatch: String
-		// 		One of: "first", "all" or "none".
-		//
-		//		If the ComboBox/FilteringSelect opens with the search results and the searched
-		//		string can be found, it will be highlighted.  If set to "all"
-		//		then will probably want to change `queryExpr` parameter to '*${0}*'
-		//
-		//		Highlighting is only performed when `labelType` is "text", so as to not
-		//		interfere with any HTML markup an HTML label might contain.
-		highlightMatch: "first",
-
-		// searchDelay: Integer
-		//		Delay in milliseconds between when user types something and we start
-		//		searching based on that value
-		searchDelay: 100,
-
-		// searchAttr: String
-		//		Search for items in the data store where this attribute (in the item)
-		//		matches what the user typed
-		searchAttr: "name",
-
-		// labelAttr: String?
-		//		The entries in the drop down list come from this attribute in the
-		//		dojo.data items.
-		//		If not specified, the searchAttr attribute is used instead.
-		labelAttr: "",
-
-		// labelType: String
-		//		Specifies how to interpret the labelAttr in the data store items.
-		//		Can be "html" or "text".
-		labelType: "text",
-
-		// queryExpr: String
-		//		This specifies what query ComboBox/FilteringSelect sends to the data store,
-		//		based on what the user has typed.  Changing this expression will modify
-		//		whether the drop down shows only exact matches, a "starting with" match,
-		//		etc.   Use it in conjunction with highlightMatch.
-		//		dojo.data query expression pattern.
-		//		`${0}` will be substituted for the user text.
-		//		`*` is used for wildcards.
-		//		`${0}*` means "starts with", `*${0}*` means "contains", `${0}` means "is"
-		queryExpr: "${0}*",
-
-		// ignoreCase: Boolean
-		//		Set true if the ComboBox/FilteringSelect should ignore case when matching possible items
-		ignoreCase: true,
-
-		// hasDownArrow: [const] Boolean
-		//		Set this textbox to have a down arrow button, to display the drop down list.
-		//		Defaults to true.
-		hasDownArrow: true,
-
-		templateString: dojo.cache("dijit.form", "templates/ComboBox.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\" dojoAttachPoint=\"comboNode\" waiRole=\"combobox\" tabIndex=\"-1\"\n\t><div style=\"overflow:hidden;\"\n\t\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton'\n\t\t\tdojoAttachPoint=\"downArrowNode\" waiRole=\"presentation\"\n\t\t\tdojoAttachEvent=\"onmousedown:_onArrowMouseDown,onmouseup:_onMouse,onmouseenter:_onMouse,onmouseleave:_onMouse\"\n\t\t\t><div class=\"dijitArrowButtonInner\">&thinsp;</div\n\t\t\t><div class=\"dijitArrowButtonChar\">&#9660;</div\n\t\t></div\n\t\t><div class=\"dijitReset dijitValidationIcon\"><br></div\n\t\t><div class=\"dijitReset dijitValidationIconText\">&Chi;</div\n\t\t><div class=\"dijitReset dijitInputField\"\n\t\t\t><input ${nameAttrSetting} type=\"text\" autocomplete=\"off\" class='dijitReset'\n\t\t\tdojoAttachEvent=\"onkeypress:_onKeyPress,compositionend\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" waiRole=\"textbox\" waiState=\"haspopup-true,autocomplete-list\"\n\t\t/></div\n\t></div\n></div>\n"),
-
-		baseClass:"dijitComboBox",
-
-		_getCaretPos: function(/*DomNode*/ element){
-			// khtml 3.5.2 has selection* methods as does webkit nightlies from 2005-06-22
-			var pos = 0;
-			if(typeof(element.selectionStart) == "number"){
-				// FIXME: this is totally borked on Moz < 1.3. Any recourse?
-				pos = element.selectionStart;
-			}else if(dojo.isIE){
-				// in the case of a mouse click in a popup being handled,
-				// then the dojo.doc.selection is not the textarea, but the popup
-				// var r = dojo.doc.selection.createRange();
-				// hack to get IE 6 to play nice. What a POS browser.
-				var tr = dojo.doc.selection.createRange().duplicate();
-				var ntr = element.createTextRange();
-				tr.move("character",0);
-				ntr.move("character",0);
-				try{
-					// If control doesnt have focus, you get an exception.
-					// Seems to happen on reverse-tab, but can also happen on tab (seems to be a race condition - only happens sometimes).
-					// There appears to be no workaround for this - googled for quite a while.
-					ntr.setEndPoint("EndToEnd", tr);
-					pos = String(ntr.text).replace(/\r/g,"").length;
-				}catch(e){
-					// If focus has shifted, 0 is fine for caret pos.
-				}
-			}
-			return pos;
-		},
-
-		_setCaretPos: function(/*DomNode*/ element, /*Number*/ location){
-			location = parseInt(location);
-			dijit.selectInputText(element, location, location);
-		},
-
-		_setDisabledAttr: function(/*Boolean*/ value){
-			// Additional code to set disabled state of ComboBox node.
-			// Overrides _FormValueWidget._setDisabledAttr() or ValidationTextBox._setDisabledAttr().
-			this.inherited(arguments);
-			dijit.setWaiState(this.comboNode, "disabled", value);
-		},
-
-		_abortQuery: function(){
-			// stop in-progress query
-			if(this.searchTimer){
-				clearTimeout(this.searchTimer);
-				this.searchTimer = null;
-			}
-			if(this._fetchHandle){
-				if(this._fetchHandle.abort){ this._fetchHandle.abort(); }
-				this._fetchHandle = null;
-			}
-		},
-
-		_onKeyPress: function(/*Event*/ evt){
-			// summary:
-			//		Handles keyboard events
-			var key = evt.charOrCode;
-			// except for cutting/pasting case - ctrl + x/v
-			if(evt.altKey || ((evt.ctrlKey || evt.metaKey) && (key != 'x' && key != 'v')) || key == dojo.keys.SHIFT){
-				return; // throw out weird key combinations and spurious events
-			}
-			var doSearch = false;
-			var searchFunction = "_startSearchFromInput";
-			var pw = this._popupWidget;
-			var dk = dojo.keys;
-			var highlighted = null;
-			this._prev_key_backspace = false;
-			this._abortQuery();
-			if(this._isShowingNow){
-				pw.handleKey(key);
-				highlighted = pw.getHighlightedOption();
-			}
-			switch(key){
-				case dk.PAGE_DOWN:
-				case dk.DOWN_ARROW:
-				case dk.PAGE_UP:
-				case dk.UP_ARROW:
-					if(!this._isShowingNow){
-						this._arrowPressed();
-						doSearch = true;
-						searchFunction = "_startSearchAll";
-					}else{
-						this._announceOption(highlighted);
-					}
-					dojo.stopEvent(evt);
-					break;
-
-				case dk.ENTER:
-					// prevent submitting form if user presses enter. Also
-					// prevent accepting the value if either Next or Previous
-					// are selected
-					if(highlighted){
-						// only stop event on prev/next
-						if(highlighted == pw.nextButton){
-							this._nextSearch(1);
-							dojo.stopEvent(evt);
-							break;
-						}else if(highlighted == pw.previousButton){
-							this._nextSearch(-1);
-							dojo.stopEvent(evt);
-							break;
-						}
-					}else{
-						// Update 'value' (ex: KY) according to currently displayed text
-						this._setBlurValue(); // set value if needed
-						this._setCaretPos(this.focusNode, this.focusNode.value.length); // move cursor to end and cancel highlighting
-					}
-					// default case:
-					// prevent submit, but allow event to bubble
-					evt.preventDefault();
-					// fall through
-
-				case dk.TAB:
-					var newvalue = this.attr('displayedValue');
-					//	if the user had More Choices selected fall into the
-					//	_onBlur handler
-					if(pw && (
-						newvalue == pw._messages["previousMessage"] ||
-						newvalue == pw._messages["nextMessage"])
-					){
-						break;
-					}
-					if(highlighted){
-						this._selectOption();
-					}
-					if(this._isShowingNow){
-						this._lastQuery = null; // in case results come back later
-						this._hideResultList();
-					}
-					break;
-
-				case ' ':
-					if(highlighted){
-						dojo.stopEvent(evt);
-						this._selectOption();
-						this._hideResultList();
-					}else{
-						doSearch = true;
-					}
-					break;
-
-				case dk.ESCAPE:
-					if(this._isShowingNow){
-						dojo.stopEvent(evt);
-						this._hideResultList();
-					}
-					break;
-
-				case dk.DELETE:
-				case dk.BACKSPACE:
-					this._prev_key_backspace = true;
-					doSearch = true;
-					break;
-
-				default:
-					// Non char keys (F1-F12 etc..)  shouldn't open list.
-					// Ascii characters and IME input (Chinese, Japanese etc.) should.
-					// On IE and safari, IME input produces keycode == 229, and we simulate
-					// it on firefox by attaching to compositionend event (see compositionend method)
-					doSearch = typeof key == 'string' || key == 229;
-			}
-			if(doSearch){
-				// need to wait a tad before start search so that the event
-				// bubbles through DOM and we have value visible
-				this.item = undefined; // undefined means item needs to be set
-				this.searchTimer = setTimeout(dojo.hitch(this, searchFunction),1);
-			}
-		},
-
-		_autoCompleteText: function(/*String*/ text){
-			// summary:
-			// 		Fill in the textbox with the first item from the drop down
-			// 		list, and highlight the characters that were
-			// 		auto-completed. For example, if user typed "CA" and the
-			// 		drop down list appeared, the textbox would be changed to
-			// 		"California" and "ifornia" would be highlighted.
-
-			var fn = this.focusNode;
-
-			// IE7: clear selection so next highlight works all the time
-			dijit.selectInputText(fn, fn.value.length);
-			// does text autoComplete the value in the textbox?
-			var caseFilter = this.ignoreCase? 'toLowerCase' : 'substr';
-			if(text[caseFilter](0).indexOf(this.focusNode.value[caseFilter](0)) == 0){
-				var cpos = this._getCaretPos(fn);
-				// only try to extend if we added the last character at the end of the input
-				if((cpos+1) > fn.value.length){
-					// only add to input node as we would overwrite Capitalisation of chars
-					// actually, that is ok
-					fn.value = text;//.substr(cpos);
-					// visually highlight the autocompleted characters
-					dijit.selectInputText(fn, cpos);
-				}
-			}else{
-				// text does not autoComplete; replace the whole value and highlight
-				fn.value = text;
-				dijit.selectInputText(fn);
-			}
-		},
-
-		_openResultList: function(/*Object*/ results, /*Object*/ dataObject){
-			this._fetchHandle = null;
-			if(	this.disabled ||
-				this.readOnly ||
-				(dataObject.query[this.searchAttr] != this._lastQuery)
-			){
-				return;
-			}
-			this._popupWidget.clearResultList();
-			if(!results.length){
-				this._hideResultList();
-				return;
-			}
-
-
-			// Fill in the textbox with the first item from the drop down list,
-			// and highlight the characters that were auto-completed. For
-			// example, if user typed "CA" and the drop down list appeared, the
-			// textbox would be changed to "California" and "ifornia" would be
-			// highlighted.
-
-			dataObject._maxOptions = this._maxOptions;
-			var nodes = this._popupWidget.createOptions(
-				results,
-				dataObject,
-				dojo.hitch(this, "_getMenuLabelFromItem")
-			);
-
-			// show our list (only if we have content, else nothing)
-			this._showResultList();
-
-			// #4091:
-			//		tell the screen reader that the paging callback finished by
-			//		shouting the next choice
-			if(dataObject.direction){
-				if(1 == dataObject.direction){
-					this._popupWidget.highlightFirstOption();
-				}else if(-1 == dataObject.direction){
-					this._popupWidget.highlightLastOption();
-				}
-				this._announceOption(this._popupWidget.getHighlightedOption());
-			}else if(this.autoComplete && !this._prev_key_backspace /*&& !dataObject.direction*/
-				// when the user clicks the arrow button to show the full list,
-				// startSearch looks for "*".
-				// it does not make sense to autocomplete
-				// if they are just previewing the options available.
-				&& !/^[*]+$/.test(dataObject.query[this.searchAttr])){
-					this._announceOption(nodes[1]); // 1st real item
-			}
-		},
-
-		_showResultList: function(){
-			this._hideResultList();
-			this._arrowPressed();
-			// hide the tooltip
-			this.displayMessage("");
-
-			// Position the list and if it's too big to fit on the screen then
-			// size it to the maximum possible height
-			// Our dear friend IE doesnt take max-height so we need to
-			// calculate that on our own every time
-
-			// TODO: want to redo this, see
-			//		http://trac.dojotoolkit.org/ticket/3272
-			//	and
-			//		http://trac.dojotoolkit.org/ticket/4108
-
-
-			// natural size of the list has changed, so erase old
-			// width/height settings, which were hardcoded in a previous
-			// call to this function (via dojo.marginBox() call)
-			dojo.style(this._popupWidget.domNode, {width: "", height: ""});
-
-			var best = this.open();
-			// #3212:
-			//		only set auto scroll bars if necessary prevents issues with
-			//		scroll bars appearing when they shouldn't when node is made
-			//		wider (fractional pixels cause this)
-			var popupbox = dojo.marginBox(this._popupWidget.domNode);
-			this._popupWidget.domNode.style.overflow =
-				((best.h == popupbox.h) && (best.w == popupbox.w)) ? "hidden" : "auto";
-			// #4134:
-			//		borrow TextArea scrollbar test so content isn't covered by
-			//		scrollbar and horizontal scrollbar doesn't appear
-			var newwidth = best.w;
-			if(best.h < this._popupWidget.domNode.scrollHeight){
-				newwidth += 16;
-			}
-			dojo.marginBox(this._popupWidget.domNode, {
-				h: best.h,
-				w: Math.max(newwidth, this.domNode.offsetWidth)
-			});
-			
-			// If we increased the width of drop down to match the width of ComboBox.domNode,
-			// then need to reposition the drop down (wrapper) so (all of) the drop down still
-			// appears underneath the ComboBox.domNode
-			if(newwidth < this.domNode.offsetWidth){
-				this._popupWidget.domNode.parentNode.style.left = dojo.position(this.domNode).x + "px";
-			}
-
-			dijit.setWaiState(this.comboNode, "expanded", "true");
-		},
-
-		_hideResultList: function(){
-			this._abortQuery();
-			if(this._isShowingNow){
-				dijit.popup.close(this._popupWidget);
-				this._arrowIdle();
-				this._isShowingNow=false;
-				dijit.setWaiState(this.comboNode, "expanded", "false");
-				dijit.removeWaiState(this.focusNode,"activedescendant");
-			}
-		},
-
-		_setBlurValue: function(){
-			// if the user clicks away from the textbox OR tabs away, set the
-			// value to the textbox value
-			// #4617:
-			//		if value is now more choices or previous choices, revert
-			//		the value
-			var newvalue=this.attr('displayedValue');
-			var pw = this._popupWidget;
-			if(pw && (
-				newvalue == pw._messages["previousMessage"] ||
-				newvalue == pw._messages["nextMessage"]
-				)
-			){
-				this._setValueAttr(this._lastValueReported, true);
-			}else if(typeof this.item == "undefined"){
-				// Update 'value' (ex: KY) according to currently displayed text
-				this.item = null;
-				this.attr('displayedValue', newvalue);
-			}else{
-				if(this.value != this._lastValueReported){
-					dijit.form._FormValueWidget.prototype._setValueAttr.call(this, this.value, true);
-				}
-				this._refreshState();
-			}
-		},
-
-		_onBlur: function(){
-			// summary:
-			//		Called magically when focus has shifted away from this widget and it's drop down
-			this._hideResultList();
-			this._arrowIdle();
-			this.inherited(arguments);
-		},
-
-		_setItemAttr: function(/*item*/ item, /*Boolean?*/ priorityChange, /*String?*/ displayedValue){
-			// summary:
-			//              Set the displayed valued in the input box, and the hidden value
-			//              that gets submitted, based on a dojo.data store item.
-			// description:
-			//              Users shouldn't call this function; they should be calling
-			//              attr('item', value)
-			// tags:
-			//              private
-			if(!displayedValue){ displayedValue = this.labelFunc(item, this.store); }
-			this.value = this._getValueField() != this.searchAttr? this.store.getIdentity(item) : displayedValue;
-			this.item = item;
-			dijit.form.ComboBox.superclass._setValueAttr.call(this, this.value, priorityChange, displayedValue);
-		},
-
-		_announceOption: function(/*Node*/ node){
-			// summary:
-			//		a11y code that puts the highlighted option in the textbox.
-			//		This way screen readers will know what is happening in the
-			//		menu.
-
-			if(!node){
-				return;
-			}
-			// pull the text value from the item attached to the DOM node
-			var newValue;
-			if( node == this._popupWidget.nextButton ||
-				node == this._popupWidget.previousButton){
-				newValue = node.innerHTML;
-				this.item = undefined;
-				this.value = '';
-			}else{
-				newValue = this.labelFunc(node.item, this.store);
-				this.attr('item', node.item, false, newValue);
-			}
-			// get the text that the user manually entered (cut off autocompleted text)
-			this.focusNode.value = this.focusNode.value.substring(0, this._lastInput.length);
-			// set up ARIA activedescendant
-			dijit.setWaiState(this.focusNode, "activedescendant", dojo.attr(node, "id"));
-			// autocomplete the rest of the option to announce change
-			this._autoCompleteText(newValue);
-		},
-
-		_selectOption: function(/*Event*/ evt){
-			// summary:
-			//		Menu callback function, called when an item in the menu is selected.
-			if(evt){
-				this._announceOption(evt.target);
-			}
-			this._hideResultList();
-			this._setCaretPos(this.focusNode, this.focusNode.value.length);
-			dijit.form._FormValueWidget.prototype._setValueAttr.call(this, this.value, true); // set this.value and fire onChange
-		},
-
-		_onArrowMouseDown: function(evt){
-			// summary:
-			//		Callback when arrow is clicked
-			if(this.disabled || this.readOnly){
-				return;
-			}
-			dojo.stopEvent(evt);
-			this.focus();
-			if(this._isShowingNow){
-				this._hideResultList();
-			}else{
-				// forces full population of results, if they click
-				// on the arrow it means they want to see more options
-				this._startSearchAll();
-			}
-		},
-
-		_startSearchAll: function(){
-			this._startSearch('');
-		},
-
-		_startSearchFromInput: function(){
-			this._startSearch(this.focusNode.value.replace(/([\\\*\?])/g, "\\$1"));
-		},
-
-		_getQueryString: function(/*String*/ text){
-			return dojo.string.substitute(this.queryExpr, [text]);
-		},
-
-		_startSearch: function(/*String*/ key){
-			if(!this._popupWidget){
-				var popupId = this.id + "_popup";
-				this._popupWidget = new dijit.form._ComboBoxMenu({
-					onChange: dojo.hitch(this, this._selectOption),
-					id: popupId
-				});
-				dijit.removeWaiState(this.focusNode,"activedescendant");
-				dijit.setWaiState(this.textbox,"owns",popupId); // associate popup with textbox
-			}
-			// create a new query to prevent accidentally querying for a hidden
-			// value from FilteringSelect's keyField
-			var query = dojo.clone(this.query); // #5970
-			this._lastInput = key; // Store exactly what was entered by the user.
-			this._lastQuery = query[this.searchAttr] = this._getQueryString(key);
-			// #5970: set _lastQuery, *then* start the timeout
-			// otherwise, if the user types and the last query returns before the timeout,
-			// _lastQuery won't be set and their input gets rewritten
-			this.searchTimer=setTimeout(dojo.hitch(this, function(query, _this){
-				this.searchTimer = null;
-				var fetch = {
-					queryOptions: {
-						ignoreCase: this.ignoreCase,
-						deep: true
-					},
-					query: query,
-					onBegin: dojo.hitch(this, "_setMaxOptions"),
-					onComplete: dojo.hitch(this, "_openResultList"),
-					onError: function(errText){
-						_this._fetchHandle = null;
-						console.error('dijit.form.ComboBox: ' + errText);
-						dojo.hitch(_this, "_hideResultList")();
-					},
-					start: 0,
-					count: this.pageSize
-				};
-				dojo.mixin(fetch, _this.fetchProperties);
-				this._fetchHandle = _this.store.fetch(fetch);
-
-				var nextSearch = function(dataObject, direction){
-					dataObject.start += dataObject.count*direction;
-					// #4091:
-					//		tell callback the direction of the paging so the screen
-					//		reader knows which menu option to shout
-					dataObject.direction = direction;
-					this._fetchHandle = this.store.fetch(dataObject);
-				};
-				this._nextSearch = this._popupWidget.onPage = dojo.hitch(this, nextSearch, this._fetchHandle);
-			}, query, this), this.searchDelay);
-		},
-
-		_setMaxOptions: function(size, request){
-			 this._maxOptions = size;
-		},
-
-		_getValueField: function(){
-			// summmary:
-			//		Helper for postMixInProperties() to set this.value based on data inlined into the markup.
-			//		Returns the attribute name in the item (in dijit.form._ComboBoxDataStore) to use as the value.
-			return this.searchAttr;
-		},
-
-		/////////////// Event handlers /////////////////////
-
-		_arrowPressed: function(){
-			if(!this.disabled && !this.readOnly && this.hasDownArrow){
-				dojo.addClass(this.downArrowNode, "dijitArrowButtonActive");
-			}
-		},
-
-		_arrowIdle: function(){
-			if(!this.disabled && !this.readOnly && this.hasDownArrow){
-				dojo.removeClass(this.downArrowNode, "dojoArrowButtonPushed");
-			}
-		},
-
-		// FIXME: For 2.0, rename to "_compositionEnd"
-		compositionend: function(/*Event*/ evt){
-			// summary:
-			//		When inputting characters using an input method, such as
-			//		Asian languages, it will generate this event instead of
-			//		onKeyDown event.
-			//		Note: this event is only triggered in FF (not in IE/safari)
-			// tags:
-			//		private
-
-			// 229 is the code produced by IE and safari while pressing keys during
-			// IME input mode
-			this._onKeyPress({charOrCode: 229});
-		},
-
-		//////////// INITIALIZATION METHODS ///////////////////////////////////////
-
-		constructor: function(){
-			this.query={};
-			this.fetchProperties={};
-		},
-
-		postMixInProperties: function(){
-			if(!this.hasDownArrow){
-				this.baseClass = "dijitTextBox";
-			}
-			if(!this.store){
-				var srcNodeRef = this.srcNodeRef;
-
-				// if user didn't specify store, then assume there are option tags
-				this.store = new dijit.form._ComboBoxDataStore(srcNodeRef);
-
-				// if there is no value set and there is an option list, set
-				// the value to the first value to be consistent with native
-				// Select
-
-				// Firefox and Safari set value
-				// IE6 and Opera set selectedIndex, which is automatically set
-				// by the selected attribute of an option tag
-				// IE6 does not set value, Opera sets value = selectedIndex
-				if(	!this.value || (
-						(typeof srcNodeRef.selectedIndex == "number") &&
-						srcNodeRef.selectedIndex.toString() === this.value)
-				){
-					var item = this.store.fetchSelectedItem();
-					if(item){
-						var valueField = this._getValueField();
-						this.value = valueField != this.searchAttr? this.store.getValue(item, valueField) : this.labelFunc(item, this.store);
-					}
-				}
-			}
-			this.inherited(arguments);
-		},
-
-		postCreate: function(){
-			// summary:
-			//		Subclasses must call this method from their postCreate() methods
-			// tags:
-			//		protected
-
-			// find any associated label element and add to ComboBox node.
-			var label=dojo.query('label[for="'+this.id+'"]');
-			if(label.length){
-				label[0].id = (this.id+"_label");
-				var cn=this.comboNode;
-				dijit.setWaiState(cn, "labelledby", label[0].id);
-
-			}
-			this.inherited(arguments);
-		},
-
-		uninitialize: function(){
-			if(this._popupWidget && !this._popupWidget._destroyed){
-				this._hideResultList();
-				this._popupWidget.destroy();
-			}
-			this.inherited(arguments);
-		},
-
-		_getMenuLabelFromItem: function(/*Item*/ item){
-			var label = this.labelAttr? this.store.getValue(item, this.labelAttr) : this.labelFunc(item, this.store);
-			var labelType = this.labelType;
-			// If labelType is not "text" we don't want to screw any markup ot whatever.
-			if(this.highlightMatch != "none" && this.labelType == "text" && this._lastInput){
-				label = this.doHighlight(label, this._escapeHtml(this._lastInput));
-				labelType = "html";
-			}
-			return {html: labelType == "html", label: label};
-		},
-
-		doHighlight: function(/*String*/label, /*String*/find){
-			// summary:
-			//		Highlights the string entered by the user in the menu.  By default this
-			//		highlights the first occurence found. Override this method
-			//		to implement your custom highlighing.
-			// tags:
-			//		protected
-
-			// Add greedy when this.highlightMatch == "all"
-			var modifiers = "i"+(this.highlightMatch == "all"?"g":"");
-			var escapedLabel = this._escapeHtml(label);
-			find = dojo.regexp.escapeString(find); // escape regexp special chars
-			var ret = escapedLabel.replace(new RegExp("(^|\\s)("+ find +")", modifiers),
-					'$1<span class="dijitComboBoxHighlightMatch">$2</span>');
-			return ret;// returns String, (almost) valid HTML (entities encoded)
-		},
-
-		_escapeHtml: function(/*string*/str){
-			// TODO Should become dojo.html.entities(), when exists use instead
-			// summary:
-			//		Adds escape sequences for special characters in XML: &<>"'
-			str = String(str).replace(/&/gm, "&amp;").replace(/</gm, "&lt;")
-				.replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
-			return str; // string
-		},
-
-		open: function(){
-			// summary:
-			//		Opens the drop down menu.  TODO: rename to _open.
-			// tags:
-			//		private
-			this._isShowingNow=true;
-			return dijit.popup.open({
-				popup: this._popupWidget,
-				around: this.domNode,
-				parent: this
-			});
-		},
-
-		reset: function(){
-			// Overrides the _FormWidget.reset().
-			// Additionally reset the .item (to clean up).
-			this.item = null;
-			this.inherited(arguments);
-		},
-
-		labelFunc: function(/*item*/ item, /*dojo.data.store*/ store){
-			// summary:
-			//              Computes the label to display based on the dojo.data store item.
-			// returns:
-			//              The label that the ComboBox should display
-			// tags:
-			//              private
-
-			// Use toString() because XMLStore returns an XMLItem whereas this
-			// method is expected to return a String (#9354)
-			return store.getValue(item, this.searchAttr).toString(); // String
-		}
-	}
-);
-
-dojo.declare(
-	"dijit.form._ComboBoxMenu",
-	[dijit._Widget, dijit._Templated],
-	{
-		// summary:
-		//		Focus-less menu for internal use in `dijit.form.ComboBox`
-		// tags:
-		//		private
-
-		templateString: "<ul class='dijitReset dijitMenu' dojoAttachEvent='onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut' tabIndex='-1' style='overflow: \"auto\"; overflow-x: \"hidden\";'>"
-				+"<li class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton' waiRole='option'></li>"
-				+"<li class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton' waiRole='option'></li>"
-			+"</ul>",
-
-		// _messages: Object
-		//		Holds "next" and "previous" text for paging buttons on drop down
-		_messages: null,
-
-		postMixInProperties: function(){
-			this._messages = dojo.i18n.getLocalization("dijit.form", "ComboBox", this.lang);
-			this.inherited(arguments);
-		},
-
-		_setValueAttr: function(/*Object*/ value){
-			this.value = value;
-			this.onChange(value);
-		},
-
-		// stubs
-		onChange: function(/*Object*/ value){
-			// summary:
-			//		Notifies ComboBox/FilteringSelect that user clicked an option in the drop down menu.
-			//		Probably should be called onSelect.
-			// tags:
-			//		callback
-		},
-		onPage: function(/*Number*/ direction){
-			// summary:
-			//		Notifies ComboBox/FilteringSelect that user clicked to advance to next/previous page.
-			// tags:
-			//		callback
-		},
-
-		postCreate: function(){
-			// fill in template with i18n messages
-			this.previousButton.innerHTML = this._messages["previousMessage"];
-			this.nextButton.innerHTML = this._messages["nextMessage"];
-			this.inherited(arguments);
-		},
-
-		onClose: function(){
-			// summary:
-			//		Callback from dijit.popup code to this widget, notifying it that it closed
-			// tags:
-			//		private
-			this._blurOptionNode();
-		},
-
-		_createOption: function(/*Object*/ item, labelFunc){
-			// summary:
-			//		Creates an option to appear on the popup menu subclassed by
-			//		`dijit.form.FilteringSelect`.
-
-			var labelObject = labelFunc(item);
-			var menuitem = dojo.doc.createElement("li");
-			dijit.setWaiRole(menuitem, "option");
-			if(labelObject.html){
-				menuitem.innerHTML = labelObject.label;
-			}else{
-				menuitem.appendChild(
-					dojo.doc.createTextNode(labelObject.label)
-				);
-			}
-			// #3250: in blank options, assign a normal height
-			if(menuitem.innerHTML == ""){
-				menuitem.innerHTML = "&nbsp;";
-			}
-			menuitem.item=item;
-			return menuitem;
-		},
-
-		createOptions: function(results, dataObject, labelFunc){
-			// summary:
-			//		Fills in the items in the drop down list
-			// results:
-			//		Array of dojo.data items
-			// dataObject:
-			//		dojo.data store
-			// labelFunc:
-			//		Function to produce a label in the drop down list from a dojo.data item
-
-			//this._dataObject=dataObject;
-			//this._dataObject.onComplete=dojo.hitch(comboBox, comboBox._openResultList);
-			// display "Previous . . ." button
-			this.previousButton.style.display = (dataObject.start == 0) ? "none" : "";
-			dojo.attr(this.previousButton, "id", this.id + "_prev");
-			// create options using _createOption function defined by parent
-			// ComboBox (or FilteringSelect) class
-			// #2309:
-			//		iterate over cache nondestructively
-			dojo.forEach(results, function(item, i){
-				var menuitem = this._createOption(item, labelFunc);
-				menuitem.className = "dijitReset dijitMenuItem";
-				dojo.attr(menuitem, "id", this.id + i);
-				this.domNode.insertBefore(menuitem, this.nextButton);
-			}, this);
-			// display "Next . . ." button
-			var displayMore = false;
-			//Try to determine if we should show 'more'...
-			if(dataObject._maxOptions && dataObject._maxOptions != -1){
-				if((dataObject.start + dataObject.count) < dataObject._maxOptions){
-					displayMore = true;
-				}else if((dataObject.start + dataObject.count) > (dataObject._maxOptions - 1)){
-					//Weird return from a datastore, where a start + count > maxOptions
-					// implies maxOptions isn't really valid and we have to go into faking it.
-					//And more or less assume more if count == results.length
-					if(dataObject.count == results.length){
-						displayMore = true;
-					}
-				}
-			}else if(dataObject.count == results.length){
-				//Don't know the size, so we do the best we can based off count alone.
-				//So, if we have an exact match to count, assume more.
-				displayMore = true;
-			}
-
-			this.nextButton.style.display = displayMore ? "" : "none";
-			dojo.attr(this.nextButton,"id", this.id + "_next");
-			return this.domNode.childNodes;
-		},
-
-		clearResultList: function(){
-			// summary:
-			//		Clears the entries in the drop down list, but of course keeps the previous and next buttons.
-			while(this.domNode.childNodes.length>2){
-				this.domNode.removeChild(this.domNode.childNodes[this.domNode.childNodes.length-2]);
-			}
-		},
-
-		_onMouseDown: function(/*Event*/ evt){
-			dojo.stopEvent(evt);
-		},
-
-		_onMouseUp: function(/*Event*/ evt){
-			if(evt.target === this.domNode){
-				return;
-			}else if(evt.target == this.previousButton){
-				this.onPage(-1);
-			}else if(evt.target == this.nextButton){
-				this.onPage(1);
-			}else{
-				var tgt = evt.target;
-				// while the clicked node is inside the div
-				while(!tgt.item){
-					// recurse to the top
-					tgt = tgt.parentNode;
-				}
-				this._setValueAttr({ target: tgt }, true);
-			}
-		},
-
-		_onMouseOver: function(/*Event*/ evt){
-			if(evt.target === this.domNode){ return; }
-			var tgt = evt.target;
-			if(!(tgt == this.previousButton || tgt == this.nextButton)){
-				// while the clicked node is inside the div
-				while(!tgt.item){
-					// recurse to the top
-					tgt = tgt.parentNode;
-				}
-			}
-			this._focusOptionNode(tgt);
-		},
-
-		_onMouseOut: function(/*Event*/ evt){
-			if(evt.target === this.domNode){ return; }
-			this._blurOptionNode();
-		},
-
-		_focusOptionNode: function(/*DomNode*/ node){
-			// summary:
-			//		Does the actual highlight.
-			if(this._highlighted_option != node){
-				this._blurOptionNode();
-				this._highlighted_option = node;
-				dojo.addClass(this._highlighted_option, "dijitMenuItemSelected");
-			}
-		},
-
-		_blurOptionNode: function(){
-			// summary:
-			//		Removes highlight on highlighted option.
-			if(this._highlighted_option){
-				dojo.removeClass(this._highlighted_option, "dijitMenuItemSelected");
-				this._highlighted_option = null;
-			}
-		},
-
-		_highlightNextOption: function(){
-			// summary:
-			// 		Highlight the item just below the current selection.
-			// 		If nothing selected, highlight first option.
-
-			// because each press of a button clears the menu,
-			// the highlighted option sometimes becomes detached from the menu!
-			// test to see if the option has a parent to see if this is the case.
-			var fc = this.domNode.firstChild;
-			if(!this.getHighlightedOption()){
-				this._focusOptionNode(fc.style.display == "none" ? fc.nextSibling : fc);
-			}else{
-				var ns = this._highlighted_option.nextSibling;
-				if(ns && ns.style.display != "none"){
-					this._focusOptionNode(ns);
-				}
-			}
-			// scrollIntoView is called outside of _focusOptionNode because in IE putting it inside causes the menu to scroll up on mouseover
-			dijit.scrollIntoView(this._highlighted_option);
-		},
-
-		highlightFirstOption: function(){
-			// summary:
-			// 		Highlight the first real item in the list (not Previous Choices).
-			this._focusOptionNode(this.domNode.firstChild.nextSibling);
-			dijit.scrollIntoView(this._highlighted_option);
-		},
-
-		highlightLastOption: function(){
-			// summary:
-			// 		Highlight the last real item in the list (not More Choices).
-			this._focusOptionNode(this.domNode.lastChild.previousSibling);
-			dijit.scrollIntoView(this._highlighted_option);
-		},
-
-		_highlightPrevOption: function(){
-			// summary:
-			// 		Highlight the item just above the current selection.
-			// 		If nothing selected, highlight last option (if
-			// 		you select Previous and try to keep scrolling up the list).
-			var lc = this.domNode.lastChild;
-			if(!this.getHighlightedOption()){
-				this._focusOptionNode(lc.style.display == "none" ? lc.previousSibling : lc);
-			}else{
-				var ps = this._highlighted_option.previousSibling;
-				if(ps && ps.style.display != "none"){
-					this._focusOptionNode(ps);
-				}
-			}
-			dijit.scrollIntoView(this._highlighted_option);
-		},
-
-		_page: function(/*Boolean*/ up){
-			// summary:
-			//		Handles page-up and page-down keypresses
-
-			var scrollamount = 0;
-			var oldscroll = this.domNode.scrollTop;
-			var height = dojo.style(this.domNode, "height");
-			// if no item is highlighted, highlight the first option
-			if(!this.getHighlightedOption()){
-				this._highlightNextOption();
-			}
-			while(scrollamount<height){
-				if(up){
-					// stop at option 1
-					if(!this.getHighlightedOption().previousSibling ||
-						this._highlighted_option.previousSibling.style.display == "none"){
-						break;
-					}
-					this._highlightPrevOption();
-				}else{
-					// stop at last option
-					if(!this.getHighlightedOption().nextSibling ||
-						this._highlighted_option.nextSibling.style.display == "none"){
-						break;
-					}
-					this._highlightNextOption();
-				}
-				// going backwards
-				var newscroll=this.domNode.scrollTop;
-				scrollamount+=(newscroll-oldscroll)*(up ? -1:1);
-				oldscroll=newscroll;
-			}
-		},
-
-		pageUp: function(){
-			// summary:
-			//		Handles pageup keypress.
-			//		TODO: just call _page directly from handleKey().
-			// tags:
-			//		private
-			this._page(true);
-		},
-
-		pageDown: function(){
-			// summary:
-			//		Handles pagedown keypress.
-			//		TODO: just call _page directly from handleKey().
-			// tags:
-			//		private
-			this._page(false);
-		},
-
-		getHighlightedOption: function(){
-			// summary:
-			//		Returns the highlighted option.
-			var ho = this._highlighted_option;
-			return (ho && ho.parentNode) ? ho : null;
-		},
-
-		handleKey: function(key){
-			switch(key){
-				case dojo.keys.DOWN_ARROW:
-					this._highlightNextOption();
-					break;
-				case dojo.keys.PAGE_DOWN:
-					this.pageDown();
-					break;
-				case dojo.keys.UP_ARROW:
-					this._highlightPrevOption();
-					break;
-				case dojo.keys.PAGE_UP:
-					this.pageUp();
-					break;
-			}
-		}
-	}
-);
-
-dojo.declare(
-	"dijit.form.ComboBox",
-	[dijit.form.ValidationTextBox, dijit.form.ComboBoxMixin],
-	{
-		// summary:
-		//		Auto-completing text box, and base class for dijit.form.FilteringSelect.
-		//
-		// description:
-		//		The drop down box's values are populated from an class called
-		//		a data provider, which returns a list of values based on the characters
-		//		that the user has typed into the input box.
-		//		If OPTION tags are used as the data provider via markup,
-		//		then the OPTION tag's child text node is used as the widget value
-		//		when selected.  The OPTION tag's value attribute is ignored.
-		//		To set the default value when using OPTION tags, specify the selected
-		//		attribute on 1 of the child OPTION tags.
-		//
-		//		Some of the options to the ComboBox are actually arguments to the data
-		//		provider.
-
-		_setValueAttr: function(/*String*/ value, /*Boolean?*/ priorityChange, /*String?*/ displayedValue){
-			// summary:
-			//		Hook so attr('value', value) works.
-			// description:
-			//		Sets the value of the select.
-			this.item = null; // value not looked up in store
-			if(!value){ value = ''; } // null translates to blank
-			dijit.form.ValidationTextBox.prototype._setValueAttr.call(this, value, priorityChange, displayedValue);
-		}
-	}
-);
-
-dojo.declare("dijit.form._ComboBoxDataStore", null, {
-	// summary:
-	//		Inefficient but small data store specialized for inlined `dijit.form.ComboBox` data
-	//
-	// description:
-	//		Provides a store for inlined data like:
-	//
-	//	|	<select>
-	//	|		<option value="AL">Alabama</option>
-	//	|		...
-	//
-	//		Actually. just implements the subset of dojo.data.Read/Notification
-	//		needed for ComboBox and FilteringSelect to work.
-	//
-	//		Note that an item is just a pointer to the <option> DomNode.
-
-	constructor: function( /*DomNode*/ root){
-		this.root = root;
-
-		dojo.query("> option", root).forEach(function(node){
-			//	TODO: this was added in #3858 but unclear why/if it's needed;  doesn't seem to be.
-			//	If it is needed then can we just hide the select itself instead?
-			//node.style.display="none";
-			node.innerHTML = dojo.trim(node.innerHTML);
-		});
-
-	},
-
-	getValue: function(	/* item */ item,
-						/* attribute-name-string */ attribute,
-						/* value? */ defaultValue){
-		return (attribute == "value") ? item.value : (item.innerText || item.textContent || '');
-	},
-
-	isItemLoaded: function(/* anything */ something){
-		return true;
-	},
-
-	getFeatures: function(){
-		return {"dojo.data.api.Read": true, "dojo.data.api.Identity": true};
-	},
-
-	_fetchItems: function(	/* Object */ args,
-							/* Function */ findCallback,
-							/* Function */ errorCallback){
-		// summary:
-		//		See dojo.data.util.simpleFetch.fetch()
-		if(!args.query){ args.query = {}; }
-		if(!args.query.name){ args.query.name = ""; }
-		if(!args.queryOptions){ args.queryOptions = {}; }
-		var matcher = dojo.data.util.filter.patternToRegExp(args.query.name, args.queryOptions.ignoreCase),
-			items = dojo.query("> option", this.root).filter(function(option){
-				return (option.innerText || option.textContent || '').match(matcher);
-			} );
-		if(args.sort){
-			items.sort(dojo.data.util.sorter.createSortFunction(args.sort, this));
-		}
-		findCallback(items, args);
-	},
-
-	close: function(/*dojo.data.api.Request || args || null */ request){
-		return;
-	},
-
-	getLabel: function(/* item */ item){
-		return item.innerHTML;
-	},
-
-	getIdentity: function(/* item */ item){
-		return dojo.attr(item, "value");
-	},
-
-	fetchItemByIdentity: function(/* Object */ args){
-		// summary:
-		//		Given the identity of an item, this method returns the item that has
-		//		that identity through the onItem callback.
-		//		Refer to dojo.data.api.Identity.fetchItemByIdentity() for more details.
-		//
-		// description:
-		//		Given arguments like:
-		//
-		//	|		{identity: "CA", onItem: function(item){...}
-		//
-		//		Call `onItem()` with the DOM node `<option value="CA">California</option>`
-		var item = dojo.query("option[value='" + args.identity + "']", this.root)[0];
-		args.onItem(item);
-	},
-
-	fetchSelectedItem: function(){
-		// summary:
-		//		Get the option marked as selected, like `<option selected>`.
-		//		Not part of dojo.data API.
-		var root = this.root,
-			si = root.selectedIndex;
-		return dojo.query("> option:nth-child(" +
-			(si != -1 ? si+1 : 1) + ")",
-			root)[0];	// dojo.data.Item
-	}
-});
-//Mix in the simple fetch implementation to this class.
-dojo.extend(dijit.form._ComboBoxDataStore,dojo.data.util.simpleFetch);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/ComboButton.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/ComboButton.js
deleted file mode 100644
index e480ff7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/ComboButton.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.ComboButton"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.ComboButton"] = true;
-dojo.provide("dijit.form.ComboButton");
-dojo.require("dijit.form.Button");
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/CurrencyTextBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/CurrencyTextBox.js
deleted file mode 100644
index 1bf2284..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/CurrencyTextBox.js
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.CurrencyTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.CurrencyTextBox"] = true;
-dojo.provide("dijit.form.CurrencyTextBox");
-
-dojo.require("dojo.currency");
-dojo.require("dijit.form.NumberTextBox");
-
-/*=====
-dojo.declare(
-	"dijit.form.CurrencyTextBox.__Constraints",
-	[dijit.form.NumberTextBox.__Constraints, dojo.currency.__FormatOptions, dojo.currency.__ParseOptions], {
-	// summary:
-	//		Specifies both the rules on valid/invalid values (minimum, maximum,
-	//		number of required decimal places), and also formatting options for
-	//		displaying the value when the field is not focused (currency symbol,
-	//		etc.)
-	// description:
-	//		Follows the pattern of `dijit.form.NumberTextBox.constraints`.
-	//		In general developers won't need to set this parameter
-	// example:
-	//		To ensure that the user types in the cents (for example, 1.00 instead of just 1):
-	//	|		{fractional:true}
-});
-=====*/
-
-dojo.declare(
-	"dijit.form.CurrencyTextBox",
-	dijit.form.NumberTextBox,
-	{
-		// summary:
-		//		A validating currency textbox
-		// description:
-		//		CurrencyTextBox is similar to `dijit.form.NumberTextBox` but has a few
-		//		extra features related to currency:
-		//
-		//		1. After specifying the currency type (american dollars, euros, etc.) it automatically
-		//			sets parse/format options such as how many decimal places to show.
-		//		2. The currency mark (dollar sign, euro mark, etc.) is displayed when the field is blurred
-		//			but erased during editing, so that the user can just enter a plain number.
-
-		// currency: String
-		//		the [ISO4217](http://en.wikipedia.org/wiki/ISO_4217) currency code, a three letter sequence like "USD"
-		currency: "",
-
-		// constraints: dijit.form.CurrencyTextBox.__Constraints
-		//		Despite the name, this parameter specifies both constraints on the input
-		//		(including minimum/maximum allowed values) as well as
-		//		formatting options.   See `dijit.form.CurrencyTextBox.__Constraints` for details.
-		/*=====
-		constraints: {},
-		======*/
-
-		// Override regExpGen ValidationTextBox.regExpGen().... we use a reg-ex generating function rather
-		// than a straight regexp to deal with locale  (plus formatting options too?)
-		regExpGen: function(constraints){
-			// if focused, accept either currency data or NumberTextBox format
-			return '(' + (this._focused? this.inherited(arguments, [ dojo.mixin({}, constraints, this.editOptions) ]) + '|' : '')
-				+ dojo.currency.regexp(constraints) + ')';
-		},
-
-		// Override NumberTextBox._formatter to deal with currencies, ex: converts "123.45" to "$123.45"
-		_formatter: dojo.currency.format,
-
-		parse: function(/* String */ value, /* Object */ constraints){
-			// summary:
-			// 		Parses string value as a Currency, according to the constraints object
-			// tags:
-			// 		protected extension
-			var v = dojo.currency.parse(value, constraints);
-			if(isNaN(v) && /\d+/.test(value)){ // currency parse failed, but it could be because they are using NumberTextBox format so try its parse
-				return this.inherited(arguments, [ value, dojo.mixin({}, constraints, this.editOptions) ]);
-			}
-			return v;
-		},
-
-
-		postMixInProperties: function(){
-			this.constraints = dojo.currency._mixInDefaults(dojo.mixin(this.constraints, { currency: this.currency, exponent: false })); // get places
-			this.inherited(arguments);
-		}
-	}
-);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/DateTextBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/DateTextBox.js
deleted file mode 100644
index e88489b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/DateTextBox.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.DateTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.DateTextBox"] = true;
-dojo.provide("dijit.form.DateTextBox");
-
-dojo.require("dijit.Calendar");
-dojo.require("dijit.form._DateTimeTextBox");
-
-dojo.declare(
-	"dijit.form.DateTextBox",
-	dijit.form._DateTimeTextBox,
-	{
-		// summary:
-		//		A validating, serializable, range-bound date text box with a drop down calendar
-		//
-		//		Example:
-		// |	new dijit.form.DateTextBox({value: new Date(2009, 0, 20)})
-		//
-		//		Example:
-		// |	<input dojotype='dijit.form.DateTextBox' value='2009-01-20'>
-
-		baseClass: "dijitTextBox dijitDateTextBox",
-		popupClass: "dijit.Calendar",
-		_selector: "date",
-
-		// value: Date
-		//		The value of this widget as a JavaScript Date object, with only year/month/day specified.
-		//		If specified in markup, use the format specified in `dojo.date.stamp.fromISOString`
-		value: new Date("")	// value.toString()="NaN"
-	}
-);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/DropDownButton.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/DropDownButton.js
deleted file mode 100644
index c7accbd..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/DropDownButton.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.DropDownButton"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.DropDownButton"] = true;
-dojo.provide("dijit.form.DropDownButton");
-dojo.require("dijit.form.Button");
-
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/FilteringSelect.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/FilteringSelect.js
deleted file mode 100644
index 0723cbc..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/FilteringSelect.js
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.FilteringSelect"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.FilteringSelect"] = true;
-dojo.provide("dijit.form.FilteringSelect");
-
-dojo.require("dijit.form.ComboBox");
-
-dojo.declare(
-	"dijit.form.FilteringSelect",
-	[dijit.form.MappedTextBox, dijit.form.ComboBoxMixin],
-	{
-		// summary:
-		//		An enhanced version of the HTML SELECT tag, populated dynamically
-		//
-		// description:
-		//		An enhanced version of the HTML SELECT tag, populated dynamically. It works
-		//		very nicely with very large data sets because it can load and page data as needed.
-		//		It also resembles ComboBox, but does not allow values outside of the provided ones.
-		//		If OPTION tags are used as the data provider via markup, then the
-		//		OPTION tag's child text node is used as the displayed value when selected
-		//		while the OPTION tag's value attribute is used as the widget value on form submit.
-		//		To set the default value when using OPTION tags, specify the selected
-		//		attribute on 1 of the child OPTION tags.
-		//
-		//		Similar features:
-		//			- There is a drop down list of possible values.
-		//			- You can only enter a value from the drop down list.  (You can't
-		//				enter an arbitrary value.)
-		//			- The value submitted with the form is the hidden value (ex: CA),
-		//				not the displayed value a.k.a. label (ex: California)
-		//
-		//		Enhancements over plain HTML version:
-		//			- If you type in some text then it will filter down the list of
-		//				possible values in the drop down list.
-		//			- List can be specified either as a static list or via a javascript
-		//				function (that can get the list from a server)
-
-		_isvalid: true,
-
-		// required: Boolean
-		//		True (default) if user is required to enter a value into this field.
-		required: true,
-
-		_lastDisplayedValue: "",
-
-		isValid: function(){
-			// Overrides ValidationTextBox.isValid()
-			return this._isvalid || (!this.required && this.attr('displayedValue') == ""); // #5974
-		},
-
-		_callbackSetLabel: function(	/*Array*/ result,
-						/*Object*/ dataObject,
-						/*Boolean?*/ priorityChange){
-			// summary:
-			//		Callback function that dynamically sets the label of the
-			//		ComboBox
-
-			// setValue does a synchronous lookup,
-			// so it calls _callbackSetLabel directly,
-			// and so does not pass dataObject
-			// still need to test against _lastQuery in case it came too late
-			if((dataObject && dataObject.query[this.searchAttr] != this._lastQuery) || (!dataObject && result.length && this.store.getIdentity(result[0]) != this._lastQuery)){
-				return;
-			}
-			if(!result.length){
-				//#3268: do nothing on bad input
-				//#3285: change CSS to indicate error
-				this.valueNode.value = "";
-				dijit.form.TextBox.superclass._setValueAttr.call(this, "", priorityChange || (priorityChange === undefined && !this._focused));
-				this._isvalid = false;
-				this.validate(this._focused);
-				this.item = null;
-			}else{
-				this.attr('item', result[0], priorityChange);
-			}
-		},
-
-		_openResultList: function(/*Object*/ results, /*Object*/ dataObject){
-			// Overrides ComboBox._openResultList()
-
-			// #3285: tap into search callback to see if user's query resembles a match
-			if(dataObject.query[this.searchAttr] != this._lastQuery){
-				return;
-			}
-			this._isvalid = results.length != 0; // FIXME: should this be greater-than?
-			this.validate(true);
-			dijit.form.ComboBoxMixin.prototype._openResultList.apply(this, arguments);
-		},
-
-		_getValueAttr: function(){
-			// summary:
-			//		Hook for attr('value') to work.
-
-			// don't get the textbox value but rather the previously set hidden value.
-			// Use this.valueNode.value which isn't always set for other MappedTextBox widgets until blur
-			return this.valueNode.value;
-		},
-
-		_getValueField: function(){
-			// Overrides ComboBox._getValueField()
-			return "value";
-		},
-
-		_setValueAttr: function(/*String*/ value, /*Boolean?*/ priorityChange){
-			// summary:
-			//		Hook so attr('value', value) works.
-			// description:
-			//		Sets the value of the select.
-			//		Also sets the label to the corresponding value by reverse lookup.
-			if(!this._onChangeActive){ priorityChange = null; }
-			this._lastQuery = value;
-
-			if(value === null || value === ''){
-				this._setDisplayedValueAttr('', priorityChange);
-				return;
-			}
-
-			//#3347: fetchItemByIdentity if no keyAttr specified
-			var self = this;
-			this.store.fetchItemByIdentity({
-				identity: value,
-				onItem: function(item){
-					self._callbackSetLabel([item], undefined, priorityChange);
-				}
-			});
-		},
-
-		_setItemAttr: function(/*item*/ item, /*Boolean?*/ priorityChange, /*String?*/ displayedValue){
-			// summary:
-			//		Set the displayed valued in the input box, and the hidden value
-			//		that gets submitted, based on a dojo.data store item.
-			// description:
-			//		Users shouldn't call this function; they should be calling
-			//		attr('item', value)
-			// tags:
-			//		private
-			this._isvalid = true;
-			this.inherited(arguments);
-			this.valueNode.value = this.value;
-			this._lastDisplayedValue = this.textbox.value;
-		},
-
-		_getDisplayQueryString: function(/*String*/ text){
-			return text.replace(/([\\\*\?])/g, "\\$1");
-		},
-
-		_setDisplayedValueAttr: function(/*String*/ label, /*Boolean?*/ priorityChange){
-			// summary:
-			//		Hook so attr('displayedValue', label) works.
-			// description:
-			//		Sets textbox to display label. Also performs reverse lookup
-			//		to set the hidden value.
-
-			// When this is called during initialization it'll ping the datastore
-			// for reverse lookup, and when that completes (after an XHR request)
-			// will call setValueAttr()... but that shouldn't trigger an onChange()
-			// event, even when it happens after creation has finished
-			if(!this._created){
-				priorityChange = false;
-			}
-
-			if(this.store){
-				this._hideResultList();
-				var query = dojo.clone(this.query); // #6196: populate query with user-specifics
-				// escape meta characters of dojo.data.util.filter.patternToRegExp().
-				this._lastQuery = query[this.searchAttr] = this._getDisplayQueryString(label);
-				// if the label is not valid, the callback will never set it,
-				// so the last valid value will get the warning textbox set the
-				// textbox value now so that the impending warning will make
-				// sense to the user
-				this.textbox.value = label;
-				this._lastDisplayedValue = label;
-				var _this = this;
-				var fetch = {
-					query: query,
-					queryOptions: {
-						ignoreCase: this.ignoreCase,
-						deep: true
-					},
-					onComplete: function(result, dataObject){
-						_this._fetchHandle = null;
-						dojo.hitch(_this, "_callbackSetLabel")(result, dataObject, priorityChange);
-					},
-					onError: function(errText){
-						_this._fetchHandle = null;
-						console.error('dijit.form.FilteringSelect: ' + errText);
-						dojo.hitch(_this, "_callbackSetLabel")([], undefined, false);
-					}
-				};
-				dojo.mixin(fetch, this.fetchProperties);
-				this._fetchHandle = this.store.fetch(fetch);
-			}
-		},
-
-		postMixInProperties: function(){
-			this.inherited(arguments);
-			this._isvalid = !this.required;
-		},
-
-		undo: function(){
-			this.attr('displayedValue', this._lastDisplayedValue);
-		}
-	}
-);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/Form.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/Form.js
deleted file mode 100644
index d891b2f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/Form.js
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.Form"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.Form"] = true;
-dojo.provide("dijit.form.Form");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._Templated");
-dojo.require("dijit.form._FormMixin");
-
-dojo.declare(
-	"dijit.form.Form",
-	[dijit._Widget, dijit._Templated, dijit.form._FormMixin],
-	{
-		// summary:
-		//		Widget corresponding to HTML form tag, for validation and serialization
-		//
-		// example:
-		//	|	<form dojoType="dijit.form.Form" id="myForm">
-		//	|		Name: <input type="text" name="name" />
-		//	|	</form>
-		//	|	myObj = {name: "John Doe"};
-		//	|	dijit.byId('myForm').attr('value', myObj);
-		//	|
-		//	|	myObj=dijit.byId('myForm').attr('value');
-
-		// HTML <FORM> attributes
-
-		// name: String?
-		//		Name of form for scripting.
-		name: "",
-
-		// action: String?
-		//		Server-side form handler.
-		action: "",
-
-		// method: String?
-		//		HTTP method used to submit the form, either "GET" or "POST".
-		method: "",
-
-		// encType: String?
-		//		Encoding type for the form, ex: application/x-www-form-urlencoded.
-		encType: "",
-
-		// accept-charset: String?
-		//		List of supported charsets.
-		"accept-charset": "",
-
-		// accept: String?
-		//		List of MIME types for file upload.
-		accept: "",
-
-		// target: String?
-		//		Target frame for the document to be opened in.
-		target: "",
-
-		templateString: "<form dojoAttachPoint='containerNode' dojoAttachEvent='onreset:_onReset,onsubmit:_onSubmit' ${nameAttrSetting}></form>",
-
-		attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
-			action: "",
-			method: "",
-			encType: "",
-			"accept-charset": "",
-			accept: "",
-			target: ""
-		}),
-
-		postMixInProperties: function(){
-			// Setup name=foo string to be referenced from the template (but only if a name has been specified)
-			// Unfortunately we can't use attributeMap to set the name due to IE limitations, see #8660
-			this.nameAttrSetting = this.name ? ("name='" + this.name + "'") : "";
-			this.inherited(arguments);
-		},
-
-		execute: function(/*Object*/ formContents){
-			// summary:
-			//		Deprecated: use submit()
-			// tags:
-			//		deprecated
-		},
-
-		onExecute: function(){
-			// summary:
-			//		Deprecated: use onSubmit()
-			// tags:
-			//		deprecated
-		},
-
-		_setEncTypeAttr: function(/*String*/ value){
-			this.encType = value;
-			dojo.attr(this.domNode, "encType", value);
-			if(dojo.isIE){ this.domNode.encoding = value; }
-		},
-
-		postCreate: function(){
-			// IE tries to hide encType
-			// TODO: this code should be in parser, not here.
-			if(dojo.isIE && this.srcNodeRef && this.srcNodeRef.attributes){
-				var item = this.srcNodeRef.attributes.getNamedItem('encType');
-				if(item && !item.specified && (typeof item.value == "string")){
-					this.attr('encType', item.value);
-				}
-			}
-			this.inherited(arguments);
-		},
-
-		onReset: function(/*Event?*/ e){
-			// summary:
-			//		Callback when user resets the form. This method is intended
-			//		to be over-ridden. When the `reset` method is called
-			//		programmatically, the return value from `onReset` is used
-			//		to compute whether or not resetting should proceed
-			// tags:
-			//		callback
-			return true; // Boolean
-		},
-
-		_onReset: function(e){
-			// create fake event so we can know if preventDefault() is called
-			var faux = {
-				returnValue: true, // the IE way
-				preventDefault: function(){ // not IE
-							this.returnValue = false;
-						},
-				stopPropagation: function(){}, currentTarget: e.currentTarget, target: e.target
-			};
-			// if return value is not exactly false, and haven't called preventDefault(), then reset
-			if(!(this.onReset(faux) === false) && faux.returnValue){
-				this.reset();
-			}
-			dojo.stopEvent(e);
-			return false;
-		},
-
-		_onSubmit: function(e){
-			var fp = dijit.form.Form.prototype;
-			// TODO: remove this if statement beginning with 2.0
-			if(this.execute != fp.execute || this.onExecute != fp.onExecute){
-				dojo.deprecated("dijit.form.Form:execute()/onExecute() are deprecated. Use onSubmit() instead.", "", "2.0");
-				this.onExecute();
-				this.execute(this.getValues());
-			}
-			if(this.onSubmit(e) === false){ // only exactly false stops submit
-				dojo.stopEvent(e);
-			}
-		},
-
-		onSubmit: function(/*Event?*/e){
-			// summary:
-			//		Callback when user submits the form.
-			// description:
-			//		This method is intended to be over-ridden, but by default it checks and
-			//		returns the validity of form elements. When the `submit`
-			//		method is called programmatically, the return value from
-			//		`onSubmit` is used to compute whether or not submission
-			//		should proceed
-			// tags:
-			//		extension
-
-			return this.isValid(); // Boolean
-		},
-
-		submit: function(){
-			// summary:
-			//		programmatically submit form if and only if the `onSubmit` returns true
-			if(!(this.onSubmit() === false)){
-				this.containerNode.submit();
-			}
-		}
-	}
-);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/HorizontalRule.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/HorizontalRule.js
deleted file mode 100644
index 4880365..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/HorizontalRule.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.HorizontalRule"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.HorizontalRule"] = true;
-dojo.provide("dijit.form.HorizontalRule");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._Templated");
-
-dojo.declare("dijit.form.HorizontalRule", [dijit._Widget, dijit._Templated],
-{
-	// summary:
-	//		Hash marks for `dijit.form.HorizontalSlider`
-
-	templateString: '<div class="dijitRuleContainer dijitRuleContainerH"></div>',
-
-	// count: Integer
-	//		Number of hash marks to generate
-	count: 3,
-
-	// container: String
-	//		For HorizontalSlider, this is either "topDecoration" or "bottomDecoration",
-	//		and indicates whether this rule goes above or below the slider.
-	container: "containerNode",
-
-	// ruleStyle: String
-	//		CSS style to apply to individual hash marks
-	ruleStyle: "",
-
-	_positionPrefix: '<div class="dijitRuleMark dijitRuleMarkH" style="left:',
-	_positionSuffix: '%;',
-	_suffix: '"></div>',
-
-	_genHTML: function(pos, ndx){
-		return this._positionPrefix + pos + this._positionSuffix + this.ruleStyle + this._suffix;
-	},
-
-	// _isHorizontal: [protected extension] Boolean
-	//		VerticalRule will override this...
-	_isHorizontal: true,
-
-	postCreate: function(){
-		var innerHTML;
-		if(this.count == 1){
-			innerHTML = this._genHTML(50, 0);
-		}else{
-			var i;
-			var interval = 100 / (this.count-1);
-			if(!this._isHorizontal || this.isLeftToRight()){
-				innerHTML = this._genHTML(0, 0);
-				for(i=1; i < this.count-1; i++){
-					innerHTML += this._genHTML(interval*i, i);
-				}
-				innerHTML += this._genHTML(100, this.count-1);
-			}else{
-				innerHTML = this._genHTML(100, 0);
-				for(i=1; i < this.count-1; i++){
-					innerHTML += this._genHTML(100-interval*i, i);
-				}
-				innerHTML += this._genHTML(0, this.count-1);
-			}
-		}
-		this.domNode.innerHTML = innerHTML;
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/HorizontalRuleLabels.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/HorizontalRuleLabels.js
deleted file mode 100644
index 3a9a4ba..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/HorizontalRuleLabels.js
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.HorizontalRuleLabels"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.HorizontalRuleLabels"] = true;
-dojo.provide("dijit.form.HorizontalRuleLabels");
-
-dojo.require("dijit.form.HorizontalRule");
-
-dojo.declare("dijit.form.HorizontalRuleLabels", dijit.form.HorizontalRule,
-{
-	// summary:
-	//		Labels for `dijit.form.HorizontalSlider`
-
-	templateString: '<div class="dijitRuleContainer dijitRuleContainerH dijitRuleLabelsContainer dijitRuleLabelsContainerH"></div>',
-
-	// labelStyle: String
-	//		CSS style to apply to individual text labels
-	labelStyle: "",
-
-	// labels: String[]?
-	//		Array of text labels to render - evenly spaced from left-to-right or bottom-to-top.
-	//		Alternately, minimum and maximum can be specified, to get numeric labels.
-	labels: [],
-
-	// numericMargin: Integer
-	//		Number of generated numeric labels that should be rendered as '' on the ends when labels[] are not specified
-	numericMargin: 0,
-
-	// numericMinimum: Integer
-	//		Leftmost label value for generated numeric labels when labels[] are not specified
-	minimum: 0,
-
-	// numericMaximum: Integer
-	//		Rightmost label value for generated numeric labels when labels[] are not specified
-	maximum: 1,
-
-	// constraints: Object
-	//		pattern, places, lang, et al (see dojo.number) for generated numeric labels when labels[] are not specified
-	constraints: {pattern:"#%"},
-
-	_positionPrefix: '<div class="dijitRuleLabelContainer dijitRuleLabelContainerH" style="left:',
-	_labelPrefix: '"><span class="dijitRuleLabel dijitRuleLabelH">',
-	_suffix: '</span></div>',
-
-	_calcPosition: function(pos){
-		// summary:
-		//		Returns the value to be used in HTML for the label as part of the left: attribute
-		// tags:
-		//		protected extension
-		return pos;
-	},
-
-	_genHTML: function(pos, ndx){
-		return this._positionPrefix + this._calcPosition(pos) + this._positionSuffix + this.labelStyle + this._labelPrefix + this.labels[ndx] + this._suffix;
-	},
-
-	getLabels: function(){
-		// summary:
-		//		Overridable function to return array of labels to use for this slider.
-		//		Can specify a getLabels() method instead of a labels[] array, or min/max attributes.
-		// tags:
-		//		protected extension
-
-		// if the labels array was not specified directly, then see if <li> children were
-		var labels = this.labels;
-		if(!labels.length){
-			// for markup creation, labels are specified as child elements
-			labels = dojo.query("> li", this.srcNodeRef).map(function(node){
-				return String(node.innerHTML);
-			});
-		}
-		this.srcNodeRef.innerHTML = '';
-		// if the labels were not specified directly and not as <li> children, then calculate numeric labels
-		if(!labels.length && this.count > 1){
-			var start = this.minimum;
-			var inc = (this.maximum - start) / (this.count-1);
-			for(var i=0; i < this.count; i++){
-				labels.push((i < this.numericMargin || i >= (this.count-this.numericMargin)) ? '' : dojo.number.format(start, this.constraints));
-				start += inc;
-			}
-		}
-		return labels;
-	},
-
-	postMixInProperties: function(){
-		this.inherited(arguments);
-		this.labels = this.getLabels();
-		this.count = this.labels.length;
-	}
-});
-
-
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/HorizontalSlider.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/HorizontalSlider.js
deleted file mode 100644
index 26ea3e1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/HorizontalSlider.js
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.HorizontalSlider"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.HorizontalSlider"] = true;
-dojo.provide("dijit.form.HorizontalSlider");
-
-dojo.require("dijit.form._FormWidget");
-dojo.require("dijit._Container");
-dojo.require("dojo.dnd.move");
-dojo.require("dijit.form.Button");
-dojo.require("dojo.number");
-dojo.require("dojo._base.fx");
-
-dojo.declare(
-	"dijit.form.HorizontalSlider",
-	[dijit.form._FormValueWidget, dijit._Container],
-{
-	// summary:
-	//		A form widget that allows one to select a value with a horizontally draggable handle
-
-	templateString: dojo.cache("dijit.form", "templates/HorizontalSlider.html", "<table class=\"dijit dijitReset dijitSlider\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\" dojoAttachEvent=\"onkeypress:_onKeyPress,onkeyup:_onKeyUp\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t\t><td dojoAttachPoint=\"topDecoration\" class=\"dijitReset\" style=\"text-align:center;width:100%;\"></td\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH\"\n\t\t\t><div class=\"dijitSliderDecrementIconH\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\"><span class=\"dijitSliderButtonInner\">-</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperH dijitSliderLeftBumper dijitSliderLeftBumper\" dojoAttachEvent=\"onmousedown:_onClkDecBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" ${nameAttrSetting}\n\t\t\t/><div class=\"dijitReset dijitSliderBarContainerH\" waiRole=\"presentation\" dojoAttachPoint=\"sliderBarContainer\"\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"progressBar\" class=\"dijitSliderBar dijitSliderBarH dijitSliderProgressBar dijitSliderProgressBarH\" dojoAttachEvent=\"onmousedown:_onBarClick\"\n\t\t\t\t\t><div class=\"dijitSliderMoveable dijitSliderMoveableH\"\n\t\t\t\t\t\t><div dojoAttachPoint=\"sliderHandle,focusNode\" class=\"dijitSliderImageHandle dijitSliderImageHandleH\" dojoAttachEvent=\"onmousedown:_onHandleClick\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"></div\n\t\t\t\t\t></div\n\t\t\t\t></div\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitSliderBarH dijitSliderRemainingBar dijitSliderRemainingBarH\" dojoAttachEvent=\"onmousedown:_onBarClick\"></div\n\t\t\t></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperH dijitSliderRightBumper dijitSliderRightBumper\" dojoAttachEvent=\"onmousedown:_onClkIncBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH\" style=\"right:0px;\"\n\t\t\t><div class=\"dijitSliderIncrementIconH\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\"><span class=\"dijitSliderButtonInner\">+</span></div\n\t\t></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t\t><td dojoAttachPoint=\"containerNode,bottomDecoration\" class=\"dijitReset\" style=\"text-align:center;\"></td\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t></tr\n></table>\n"),
-
-	// Overrides FormValueWidget.value to indicate numeric value
-	value: 0,
-
-	// showButtons: Boolean
-	//		Show increment/decrement buttons at the ends of the slider?
-	showButtons: true,
-
-	// minimum:: Integer
-	//		The minimum value the slider can be set to.
-	minimum: 0,
-
-	// maximum: Integer
-	//		The maximum value the slider can be set to.
-	maximum: 100,
-
-	// discreteValues: Integer
-	//		If specified, indicates that the slider handle has only 'discreteValues' possible positions,
-	//      and that after dragging the handle, it will snap to the nearest possible position.
-	//      Thus, the slider has only 'discreteValues' possible values.
-	//
-	//		For example, if minimum=10, maxiumum=30, and discreteValues=3, then the slider handle has
-	//		three possible positions, representing values 10, 20, or 30.
-	//
-	//		If discreteValues is not specified or if it's value is higher than the number of pixels
-	//		in the slider bar, then the slider handle can be moved freely, and the slider's value will be
-	//		computed/reported based on pixel position (in this case it will likely be fractional,
-	//      such as 123.456789).
-	discreteValues: Infinity,
-
-	// pageIncrement: Integer
-	//		If discreteValues is also specified, this indicates the amount of clicks (ie, snap positions)
-	//      that the slider handle is moved via pageup/pagedown keys.
-	//	If discreteValues is not specified, it indicates the number of pixels.
-	pageIncrement: 2,
-
-	// clickSelect: Boolean
-	//		If clicking the slider bar changes the value or not
-	clickSelect: true,
-
-	// slideDuration: Number
-	//		The time in ms to take to animate the slider handle from 0% to 100%,
-	//		when clicking the slider bar to make the handle move.
-	slideDuration: dijit.defaultDuration,
-
-	// Flag to _Templated
-	widgetsInTemplate: true,
-
-	attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, {
-		id: ""
-	}),
-
-	baseClass: "dijitSlider",
-
-	_mousePixelCoord: "pageX",
-	_pixelCount: "w",
-	_startingPixelCoord: "x",
-	_startingPixelCount: "l",
-	_handleOffsetCoord: "left",
-	_progressPixelSize: "width",
-
-	_onKeyUp: function(/*Event*/ e){
-		if(this.disabled || this.readOnly || e.altKey || e.ctrlKey || e.metaKey){ return; }
-		this._setValueAttr(this.value, true);
-	},
-
-	_onKeyPress: function(/*Event*/ e){
-		if(this.disabled || this.readOnly || e.altKey || e.ctrlKey || e.metaKey){ return; }
-		switch(e.charOrCode){
-			case dojo.keys.HOME:
-				this._setValueAttr(this.minimum, false);
-				break;
-			case dojo.keys.END:
-				this._setValueAttr(this.maximum, false);
-				break;
-			// this._descending === false: if ascending vertical (min on top)
-			// (this._descending || this.isLeftToRight()): if left-to-right horizontal or descending vertical
-			case ((this._descending || this.isLeftToRight()) ? dojo.keys.RIGHT_ARROW : dojo.keys.LEFT_ARROW):
-			case (this._descending === false ? dojo.keys.DOWN_ARROW : dojo.keys.UP_ARROW):
-			case (this._descending === false ? dojo.keys.PAGE_DOWN : dojo.keys.PAGE_UP):
-				this.increment(e);
-				break;
-			case ((this._descending || this.isLeftToRight()) ? dojo.keys.LEFT_ARROW : dojo.keys.RIGHT_ARROW):
-			case (this._descending === false ? dojo.keys.UP_ARROW : dojo.keys.DOWN_ARROW):
-			case (this._descending === false ? dojo.keys.PAGE_UP : dojo.keys.PAGE_DOWN):
-				this.decrement(e);
-				break;
-			default:
-				return;
-		}
-		dojo.stopEvent(e);
-	},
-
-	_onHandleClick: function(e){
-		if(this.disabled || this.readOnly){ return; }
-		if(!dojo.isIE){
-			// make sure you get focus when dragging the handle
-			// (but don't do on IE because it causes a flicker on mouse up (due to blur then focus)
-			dijit.focus(this.sliderHandle);
-		}
-		dojo.stopEvent(e);
-	},
-
-	_isReversed: function(){
-		// summary:
-		//		Returns true if direction is from right to left
-		// tags:
-		//		protected extension
-		return !this.isLeftToRight();
-	},
-
-	_onBarClick: function(e){
-		if(this.disabled || this.readOnly || !this.clickSelect){ return; }
-		dijit.focus(this.sliderHandle);
-		dojo.stopEvent(e);
-		var abspos = dojo.position(this.sliderBarContainer, true);
-		var pixelValue = e[this._mousePixelCoord] - abspos[this._startingPixelCoord];
-		this._setPixelValue(this._isReversed() ? (abspos[this._pixelCount] - pixelValue) : pixelValue, abspos[this._pixelCount], true);
-		this._movable.onMouseDown(e);
-	},
-
-	_setPixelValue: function(/*Number*/ pixelValue, /*Number*/ maxPixels, /*Boolean, optional*/ priorityChange){
-		if(this.disabled || this.readOnly){ return; }
-		pixelValue = pixelValue < 0 ? 0 : maxPixels < pixelValue ? maxPixels : pixelValue;
-		var count = this.discreteValues;
-		if(count <= 1 || count == Infinity){ count = maxPixels; }
-		count--;
-		var pixelsPerValue = maxPixels / count;
-		var wholeIncrements = Math.round(pixelValue / pixelsPerValue);
-		this._setValueAttr((this.maximum-this.minimum)*wholeIncrements/count + this.minimum, priorityChange);
-	},
-
-	_setValueAttr: function(/*Number*/ value, /*Boolean, optional*/ priorityChange){
-		// summary:
-		//		Hook so attr('value', value) works.
-		this.valueNode.value = this.value = value;
-		dijit.setWaiState(this.focusNode, "valuenow", value);
-		this.inherited(arguments);
-		var percent = (value - this.minimum) / (this.maximum - this.minimum);
-		var progressBar = (this._descending === false) ? this.remainingBar : this.progressBar;
-		var remainingBar = (this._descending === false) ? this.progressBar : this.remainingBar;
-		if(this._inProgressAnim && this._inProgressAnim.status != "stopped"){
-			this._inProgressAnim.stop(true);
-		}
-		if(priorityChange && this.slideDuration > 0 && progressBar.style[this._progressPixelSize]){
-			// animate the slider
-			var _this = this;
-			var props = {};
-			var start = parseFloat(progressBar.style[this._progressPixelSize]);
-			var duration = this.slideDuration * (percent-start/100);
-			if(duration == 0){ return; }
-			if(duration < 0){ duration = 0 - duration; }
-			props[this._progressPixelSize] = { start: start, end: percent*100, units:"%" };
-			this._inProgressAnim = dojo.animateProperty({ node: progressBar, duration: duration,
-				onAnimate: function(v){ remainingBar.style[_this._progressPixelSize] = (100-parseFloat(v[_this._progressPixelSize])) + "%"; },
-				onEnd: function(){ delete _this._inProgressAnim; },
-				properties: props
-			})
-			this._inProgressAnim.play();
-		}
-		else{
-			progressBar.style[this._progressPixelSize] = (percent*100) + "%";
-			remainingBar.style[this._progressPixelSize] = ((1-percent)*100) + "%";
-		}
-	},
-
-	_bumpValue: function(signedChange, /*Boolean, optional*/ priorityChange){
-		if(this.disabled || this.readOnly){ return; }
-		var s = dojo.getComputedStyle(this.sliderBarContainer);
-		var c = dojo._getContentBox(this.sliderBarContainer, s);
-		var count = this.discreteValues;
-		if(count <= 1 || count == Infinity){ count = c[this._pixelCount]; }
-		count--;
-		var value = (this.value - this.minimum) * count / (this.maximum - this.minimum) + signedChange;
-		if(value < 0){ value = 0; }
-		if(value > count){ value = count; }
-		value = value * (this.maximum - this.minimum) / count + this.minimum;
-		this._setValueAttr(value, priorityChange);
-	},
-
-	_onClkBumper: function(val){
-		if(this.disabled || this.readOnly || !this.clickSelect){ return; }
-		this._setValueAttr(val, true);
-	},
-
-	_onClkIncBumper: function(){
-		this._onClkBumper(this._descending === false ? this.minimum : this.maximum);
-	},
-
-	_onClkDecBumper: function(){
-		this._onClkBumper(this._descending === false ? this.maximum : this.minimum);
-	},
-
-	decrement: function(/*Event*/ e){
-		// summary:
-		//		Decrement slider
-		// tags:
-		//		private
-		this._bumpValue(e.charOrCode == dojo.keys.PAGE_DOWN ? -this.pageIncrement : -1);
-	},
-
-	increment: function(/*Event*/ e){
-		// summary:
-		//		Increment slider
-		// tags:
-		//		private
-		this._bumpValue(e.charOrCode == dojo.keys.PAGE_UP ? this.pageIncrement : 1);
-	},
-
-	_mouseWheeled: function(/*Event*/ evt){
-		// summary:
-		//		Event handler for mousewheel where supported
-		dojo.stopEvent(evt);
-		var janky = !dojo.isMozilla;
-		var scroll = evt[(janky ? "wheelDelta" : "detail")] * (janky ? 1 : -1);
-		this._bumpValue(scroll < 0 ? -1 : 1, true); // negative scroll acts like a decrement
-	},
-
-	startup: function(){
-		dojo.forEach(this.getChildren(), function(child){
-			if(this[child.container] != this.containerNode){
-				this[child.container].appendChild(child.domNode);
-			}
-		}, this);
-	},
-
-	_typematicCallback: function(/*Number*/ count, /*Object*/ button, /*Event*/ e){
-		if(count == -1){
-			this._setValueAttr(this.value, true);
-		}else{
-			this[(button == (this._descending? this.incrementButton : this.decrementButton)) ? "decrement" : "increment"](e);
-		}
-	},
-
-	postCreate: function(){
-		if(this.showButtons){
-			this.incrementButton.style.display="";
-			this.decrementButton.style.display="";
-			this._connects.push(dijit.typematic.addMouseListener(
-				this.decrementButton, this, "_typematicCallback", 25, 500));
-			this._connects.push(dijit.typematic.addMouseListener(
-				this.incrementButton, this, "_typematicCallback", 25, 500));
-		}
-		this.connect(this.domNode, !dojo.isMozilla ? "onmousewheel" : "DOMMouseScroll", "_mouseWheeled");
-
-		// define a custom constructor for a SliderMover that points back to me
-		var mover = dojo.declare(dijit.form._SliderMover, {
-			widget: this
-		});
-
-		this._movable = new dojo.dnd.Moveable(this.sliderHandle, {mover: mover});
-		// find any associated label element and add to slider focusnode.
-		var label=dojo.query('label[for="'+this.id+'"]');
-		if(label.length){
-			label[0].id = (this.id+"_label");
-			dijit.setWaiState(this.focusNode, "labelledby", label[0].id);
-		}
-		dijit.setWaiState(this.focusNode, "valuemin", this.minimum);
-		dijit.setWaiState(this.focusNode, "valuemax", this.maximum);
-
-		this.inherited(arguments);
-		this._layoutHackIE7();
-	},
-
-	destroy: function(){
-		this._movable.destroy();
-		if(this._inProgressAnim && this._inProgressAnim.status != "stopped"){
-			this._inProgressAnim.stop(true);
-		}
-		this._supportingWidgets = dijit.findWidgets(this.domNode); // tells destroy about pseudo-child widgets (ruler/labels)
-		this.inherited(arguments);
-	}
-});
-
-dojo.declare("dijit.form._SliderMover",
-	dojo.dnd.Mover,
-{
-	onMouseMove: function(e){
-		var widget = this.widget;
-		var abspos = widget._abspos;
-		if(!abspos){
-			abspos = widget._abspos = dojo.position(widget.sliderBarContainer, true);
-			widget._setPixelValue_ = dojo.hitch(widget, "_setPixelValue");
-			widget._isReversed_ = widget._isReversed();
-		}
-		var pixelValue = e[widget._mousePixelCoord] - abspos[widget._startingPixelCoord];
-		widget._setPixelValue_(widget._isReversed_ ? (abspos[widget._pixelCount]-pixelValue) : pixelValue, abspos[widget._pixelCount], false);
-	},
-
-	destroy: function(e){
-		dojo.dnd.Mover.prototype.destroy.apply(this, arguments);
-		var widget = this.widget;
-		widget._abspos = null;
-		widget._setValueAttr(widget.value, true);
-	}
-});
-
-
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/MappedTextBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/MappedTextBox.js
deleted file mode 100644
index 11ed9e6..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/MappedTextBox.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.MappedTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.MappedTextBox"] = true;
-dojo.provide("dijit.form.MappedTextBox");
-dojo.require("dijit.form.ValidationTextBox");
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/MultiSelect.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/MultiSelect.js
deleted file mode 100644
index 4b77d83..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/MultiSelect.js
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.MultiSelect"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.MultiSelect"] = true;
-dojo.provide("dijit.form.MultiSelect");
-
-dojo.require("dijit.form._FormWidget");
-
-dojo.declare("dijit.form.MultiSelect", dijit.form._FormValueWidget, {
-	// summary:
-	//		Widget version of a <select multiple=true> element,
-	//		for selecting multiple options.
-
-	// size: Number
-	//		Number of elements to display on a page
-	//		NOTE: may be removed in version 2.0, since elements may have variable height;
-	//		set the size via style="..." or CSS class names instead.
-	size: 7,
-
-	templateString: "<select multiple='true' ${nameAttrSetting} dojoAttachPoint='containerNode,focusNode' dojoAttachEvent='onchange: _onChange'></select>",
-
-	attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, {
-		size: "focusNode"
-	}),
-
-	reset: function(){
-		// summary:
-		//		Reset the widget's value to what it was at initialization time
-
-		// TODO: once we inherit from FormValueWidget this won't be needed
-		this._hasBeenBlurred = false;
-		this._setValueAttr(this._resetValue, true);
-	},
-
-	addSelected: function(/* dijit.form.MultiSelect */ select){
-		// summary:
-		//		Move the selected nodes of a passed Select widget
-		//		instance to this Select widget.
-		//
-		// example:
-		// |	// move all the selected values from "bar" to "foo"
-		// | 	dijit.byId("foo").addSelected(dijit.byId("bar"));
-
-		select.getSelected().forEach(function(n){
-			this.containerNode.appendChild(n);
-			// scroll to bottom to see item
-			// cannot use scrollIntoView since <option> tags don't support all attributes
-			// does not work on IE due to a bug where <select> always shows scrollTop = 0
-			this.domNode.scrollTop = this.domNode.offsetHeight; // overshoot will be ignored
-			// scrolling the source select is trickier esp. on safari who forgets to change the scrollbar size
-			var oldscroll = select.domNode.scrollTop;
-			select.domNode.scrollTop = 0;
-			select.domNode.scrollTop = oldscroll;
-		},this);
-	},
-
-	getSelected: function(){
-		// summary:
-		//		Access the NodeList of the selected options directly
-		return dojo.query("option",this.containerNode).filter(function(n){
-			return n.selected; // Boolean
-		}); // dojo.NodeList
-	},
-
-	_getValueAttr: function(){
-		// summary:
-		//		Hook so attr('value') works.
-		// description:
-		//		Returns an array of the selected options' values.
-		return this.getSelected().map(function(n){
-			return n.value;
-		});
-	},
-
-	multiple: true, // for Form
-
-	_setValueAttr: function(/* Array */values){
-		// summary:
-		//		Hook so attr('value', values) works.
-		// description:
-		//		Set the value(s) of this Select based on passed values
-		dojo.query("option",this.containerNode).forEach(function(n){
-			n.selected = (dojo.indexOf(values,n.value) != -1);
-		});
-	},
-
-	invertSelection: function(onChange){
-		// summary:
-		//		Invert the selection
-		// onChange: Boolean
-		//		If null, onChange is not fired.
-		dojo.query("option",this.containerNode).forEach(function(n){
-			n.selected = !n.selected;
-		});
-		this._handleOnChange(this.attr('value'), onChange == true);
-	},
-
-	_onChange: function(/*Event*/ e){
-		this._handleOnChange(this.attr('value'), true);
-	},
-
-	// for layout widgets:
-	resize: function(/* Object */size){
-		if(size){
-			dojo.marginBox(this.domNode, size);
-		}
-	},
-
-	postCreate: function(){
-		this._onChange();
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/NumberSpinner.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/NumberSpinner.js
deleted file mode 100644
index d9b404e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/NumberSpinner.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.NumberSpinner"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.NumberSpinner"] = true;
-dojo.provide("dijit.form.NumberSpinner");
-
-dojo.require("dijit.form._Spinner");
-dojo.require("dijit.form.NumberTextBox");
-
-dojo.declare("dijit.form.NumberSpinner",
-	[dijit.form._Spinner, dijit.form.NumberTextBoxMixin],
-	{
-	// summary:
-	//		Extends NumberTextBox to add up/down arrows and pageup/pagedown for incremental change to the value
-	//
-	// description:
-	//		A `dijit.form.NumberTextBox` extension to provide keyboard accessible value selection
-	//		as well as icons for spinning direction. When using the keyboard, the typematic rules
-	//		apply, meaning holding the key will gradually increarease or decrease the value and
-	// 		accelerate.
-	//
-	// example:
-	//	| new dijit.form.NumberSpinner({ constraints:{ max:300, min:100 }}, "someInput");
-
-	adjust: function(/* Object */val, /* Number*/delta){
-		// summary:
-		//		Change Number val by the given amount
-		// tags:
-		//		protected
-
-		var tc = this.constraints,
-			v = isNaN(val),
-			gotMax = !isNaN(tc.max),
-			gotMin = !isNaN(tc.min)
-		;
-		if(v && delta != 0){ // blank or invalid value and they want to spin, so create defaults
-			val = (delta > 0) ?
-				gotMin ? tc.min : gotMax ? tc.max : 0 :
-				gotMax ? this.constraints.max : gotMin ? tc.min : 0
-			;
-		}
-		var newval = val + delta;
-		if(v || isNaN(newval)){ return val; }
-		if(gotMax && (newval > tc.max)){
-			newval = tc.max;
-		}
-		if(gotMin && (newval < tc.min)){
-			newval = tc.min;
-		}
-		return newval;
-	},
-
-	_onKeyPress: function(e){
-		if((e.charOrCode == dojo.keys.HOME || e.charOrCode == dojo.keys.END) && !(e.ctrlKey || e.altKey || e.metaKey)
-		&& typeof this.attr('value') != 'undefined' /* gibberish, so HOME and END are default editing keys*/){
-			var value = this.constraints[(e.charOrCode == dojo.keys.HOME ? "min" : "max")];
-			if(value){
-				this._setValueAttr(value,true);
-			}
-			// eat home or end key whether we change the value or not
-			dojo.stopEvent(e);
-		}
-	}
-
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/NumberTextBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/NumberTextBox.js
deleted file mode 100644
index dc37325..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/NumberTextBox.js
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.NumberTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.NumberTextBox"] = true;
-dojo.provide("dijit.form.NumberTextBox");
-
-dojo.require("dijit.form.ValidationTextBox");
-dojo.require("dojo.number");
-
-/*=====
-dojo.declare(
-	"dijit.form.NumberTextBox.__Constraints",
-	[dijit.form.RangeBoundTextBox.__Constraints, dojo.number.__FormatOptions, dojo.number.__ParseOptions], {
-	// summary:
-	//		Specifies both the rules on valid/invalid values (minimum, maximum,
-	//		number of required decimal places), and also formatting options for
-	//		displaying the value when the field is not focused.
-	// example:
-	//		Minimum/maximum:
-	//		To specify a field between 0 and 120:
-	//	|		{min:0,max:120}
-	//		To specify a field that must be an integer:
-	//	|		{fractional:false}
-	//		To specify a field where 0 to 3 decimal places are allowed on input,
-	//		but after the field is blurred the value is displayed with 3 decimal places:
-	//	|		{places:'0,3'}
-});
-=====*/
-
-dojo.declare("dijit.form.NumberTextBoxMixin",
-	null,
-	{
-		// summary:
-		//		A mixin for all number textboxes
-		// tags:
-		//		protected
-
-		// Override ValidationTextBox.regExpGen().... we use a reg-ex generating function rather
-		// than a straight regexp to deal with locale (plus formatting options too?)
-		regExpGen: dojo.number.regexp,
-
-		/*=====
-		// constraints: dijit.form.NumberTextBox.__Constraints
-		//		Despite the name, this parameter specifies both constraints on the input
-		//		(including minimum/maximum allowed values) as well as
-		//		formatting options like places (the number of digits to display after
-		//		the decimal point).   See `dijit.form.NumberTextBox.__Constraints` for details.
-		constraints: {},
-		======*/
-
-		// value: Number
-		//		The value of this NumberTextBox as a javascript Number (ie, not a String).
-		//		If the displayed value is blank, the value is NaN, and if the user types in
-		//		an gibberish value (like "hello world"), the value is undefined
-		//		(i.e. attr('value') returns undefined).
-		//
-		//		Symetrically, attr('value', NaN) will clear the displayed value,
-		//		whereas attr('value', undefined) will have no effect.
-		value: NaN,
-
-		// editOptions: [protected] Object
-		//		Properties to mix into constraints when the value is being edited.
-		//		This is here because we edit the number in the format "12345", which is
-		//		different than the display value (ex: "12,345")
-		editOptions: { pattern: '#.######' },
-
-		/*=====
-		_formatter: function(value, options){
-			// summary:
-			//		_formatter() is called by format().   It's the base routine for formatting a number,
-			//		as a string, for example converting 12345 into "12,345".
-			// value: Number
-			//		The number to be converted into a string.
-			// options: dojo.number.__FormatOptions?
-			//		Formatting options
-			// tags:
-			//		protected extension
-
-			return "12345";		// String
-		},
-		 =====*/
-		_formatter: dojo.number.format,
-
-		postMixInProperties: function(){
-			var places = typeof this.constraints.places == "number"? this.constraints.places : 0;
-			if(places){ places++; } // decimal rounding errors take away another digit of precision
-			if(typeof this.constraints.max != "number"){
-				this.constraints.max = 9 * Math.pow(10, 15-places);
-			}
-			if(typeof this.constraints.min != "number"){
-				this.constraints.min = -9 * Math.pow(10, 15-places);
-			}
-			this.inherited(arguments);
-		},
-
-		_onFocus: function(){
-			if(this.disabled){ return; }
-			var val = this.attr('value');
-			if(typeof val == "number" && !isNaN(val)){
-				var formattedValue = this.format(val, this.constraints);
-				if(formattedValue !== undefined){
-					this.textbox.value = formattedValue;
-				}
-			}
-			this.inherited(arguments);
-		},
-
-		format: function(/*Number*/ value, /*dojo.number.__FormatOptions*/ constraints){
-			// summary:
-			//		Formats the value as a Number, according to constraints.
-			// tags:
-			//		protected
-
-			if(typeof value != "number"){ return String(value); }
-			if(isNaN(value)){ return ""; }
-			if(("rangeCheck" in this) && !this.rangeCheck(value, constraints)){ return String(value) }
-			if(this.editOptions && this._focused){
-				constraints = dojo.mixin({}, constraints, this.editOptions);
-			}
-			return this._formatter(value, constraints);
-		},
-
-		/*=====
-		parse: function(value, constraints){
-			// summary:
-			//		Parses the string value as a Number, according to constraints.
-			// value: String
-			//		String representing a number
-			// constraints: dojo.number.__ParseOptions
-			//		Formatting options
-			// tags:
-			//		protected
-
-			return 123.45;		// Number
-		},
-		=====*/
-		parse: dojo.number.parse,
-
-		_getDisplayedValueAttr: function(){
-			var v = this.inherited(arguments);
-			return isNaN(v) ? this.textbox.value : v;
-		},
-
-		filter: function(/*Number*/ value){
-			// summary:
-			//		This is called with both the display value (string), and the actual value (a number).
-			//		When called with the actual value it does corrections so that '' etc. are represented as NaN.
-			//		Otherwise it dispatches to the superclass's filter() method.
-			//
-			//		See `dijit.form.TextBox.filter` for more details.
-			return (value === null || value === '' || value === undefined) ? NaN : this.inherited(arguments); // attr('value', null||''||undefined) should fire onChange(NaN)
-		},
-
-		serialize: function(/*Number*/ value, /*Object?*/options){
-			// summary:
-			//		Convert value (a Number) into a canonical string (ie, how the number literal is written in javascript/java/C/etc.)
-			// tags:
-			//		protected
-			return (typeof value != "number" || isNaN(value)) ? '' : this.inherited(arguments);
-		},
-
-		_setValueAttr: function(/*Number*/ value, /*Boolean?*/ priorityChange, /*String?*/formattedValue){
-			// summary:
-			//		Hook so attr('value', ...) works.
-			if(value !== undefined && formattedValue === undefined){
-				if(typeof value == "number"){
-					if(isNaN(value)){ formattedValue = '' }
-					else if(("rangeCheck" in this) && !this.rangeCheck(value, this.constraints)){
-						formattedValue = String(value);
-					}
-				}else if(!value){ // 0 processed in if branch above, ''|null|undefined flow thru here
-					formattedValue = '';
-					value = NaN;
-				}else{ // non-numeric values
-					formattedValue = String(value);
-					value = undefined;
-				}
-			}
-			this.inherited(arguments, [value, priorityChange, formattedValue]);
-		},
-
-		_getValueAttr: function(){
-			// summary:
-			//		Hook so attr('value') works.
-			//		Returns Number, NaN for '', or undefined for unparsable text
-			var v = this.inherited(arguments); // returns Number for all values accepted by parse() or NaN for all other displayed values
-
-			// If the displayed value of the textbox is gibberish (ex: "hello world"), this.inherited() above
-			// returns NaN; this if() branch converts the return value to undefined.
-			// Returning undefined prevents user text from being overwritten when doing _setValueAttr(_getValueAttr()).
-			// A blank displayed value is still returned as NaN.
-			if(isNaN(v) && this.textbox.value !== ''){
-				if(this.constraints.exponent !== false && /\de[-+]?|\d/i.test(this.textbox.value) && (new RegExp("^"+dojo.number._realNumberRegexp(dojo.mixin({}, this.constraints))+"$").test(this.textbox.value))){	// check for exponential notation that parse() rejected (erroneously?)
-					var n = Number(this.textbox.value);
-					return isNaN(n) ? undefined : n; // return exponential Number or undefined for random text (may not be possible to do with the above RegExp check)
-				}else{
-					return undefined; // gibberish
-				}
-			}else{
-				return v; // Number or NaN for ''
-			}
-		},
-
-		isValid: function(/*Boolean*/ isFocused){
-			// Overrides dijit.form.RangeBoundTextBox.isValid to check that the editing-mode value is valid since
-			// it may not be formatted according to the regExp vaidation rules
-			if(!this._focused || this._isEmpty(this.textbox.value)){
-				return this.inherited(arguments);
-			}else{
-				var v = this.attr('value');
-				if(!isNaN(v) && this.rangeCheck(v, this.constraints)){
-					if(this.constraints.exponent !== false && /\de[-+]?\d/i.test(this.textbox.value)){ // exponential, parse doesn't like it
-						return true; // valid exponential number in range
-					}else{
-						return this.inherited(arguments);
-					}
-				}else{
-					return false;
-				}
-			}
-		}
-	}
-);
-
-dojo.declare("dijit.form.NumberTextBox",
-	[dijit.form.RangeBoundTextBox,dijit.form.NumberTextBoxMixin],
-	{
-		// summary:
-		//		A TextBox for entering numbers, with formatting and range checking
-		// description:
-		//		NumberTextBox is a textbox for entering and displaying numbers, supporting
-		//		the following main features:
-		//
-		//			1. Enforce minimum/maximum allowed values (as well as enforcing that the user types
-		//				a number rather than a random string)
-		//			2. NLS support (altering roles of comma and dot as "thousands-separator" and "decimal-point"
-		//				depending on locale).
-		//			3. Separate modes for editing the value and displaying it, specifically that
-		//				the thousands separator character (typically comma) disappears when editing
-		//				but reappears after the field is blurred.
-		//			4. Formatting and constraints regarding the number of places (digits after the decimal point)
-		//				allowed on input, and number of places displayed when blurred (see `constraints` parameter).
-	}
-);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/RadioButton.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/RadioButton.js
deleted file mode 100644
index 7adb3c6..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/RadioButton.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.RadioButton"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.RadioButton"] = true;
-dojo.provide("dijit.form.RadioButton");
-dojo.require("dijit.form.CheckBox");
-
-// TODO: for 2.0, move the RadioButton code into this file
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/RangeBoundTextBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/RangeBoundTextBox.js
deleted file mode 100644
index 2ab3b3a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/RangeBoundTextBox.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.RangeBoundTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.RangeBoundTextBox"] = true;
-dojo.provide("dijit.form.RangeBoundTextBox");
-dojo.require("dijit.form.ValidationTextBox");
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/Select.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/Select.js
deleted file mode 100644
index f41ef3d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/Select.js
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.Select"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.Select"] = true;
-dojo.provide("dijit.form.Select");
-
-dojo.require("dijit.form._FormSelectWidget");
-dojo.require("dijit._HasDropDown");
-dojo.require("dijit.Menu");
-
-dojo.requireLocalization("dijit.form", "validate", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
-
-dojo.declare("dijit.form._SelectMenu", dijit.Menu, {
-	// summary:
-	//		An internally-used menu for dropdown that allows us to more
-	//		gracefully overflow our menu
-	buildRendering: function(){
-		// summary:
-		//		Stub in our own changes, so that our domNode is not a table
-		//		otherwise, we won't respond correctly to heights/overflows
-		this.inherited(arguments);
-		var o = (this.menuTableNode = this.domNode);
-		var n = (this.domNode = dojo.doc.createElement("div"));
-		if(o.parentNode){
-			o.parentNode.replaceChild(n, o);
-		}
-		dojo.removeClass(o, "dijitMenuTable");
-		n.className = o.className + " dijitSelectMenu";
-		o.className = "dijitReset dijitMenuTable";
-		dijit.setWaiRole(o,"listbox");
-		dijit.setWaiRole(n,"presentation");
-		n.appendChild(o);
-		this.tabIndex=null; // so tabindex=0 does not get set on domNode (role="presentation" AND tabindex is invalid)
-	},
-	resize: function(/*Object*/ mb){
-		// summary:
-		//		Overridden so that we are able to handle resizing our
-		//		internal widget.  Note that this is not a "full" resize
-		//		implementation - it only works correctly if you pass it a
-		//		marginBox.
-		//
-		// mb: Object
-		//		The margin box to set this dropdown to.
-		if(mb){
-			dojo.marginBox(this.domNode, mb);
-			var w = dojo.contentBox(this.domNode).w;
-			if(dojo.isMoz && this.domNode.scrollHeight > this.domNode.clientHeight){
-				w--;
-			}else if(dojo.isIE < 8 || (dojo.isIE && dojo.isQuirks)){
-				// IE < 8 and IE8 in quirks mode doesn't need this additional
-				// width of the scrollbar...it causes a horizontal scroll bar
-				// (as well as continually expanding the dropdown each time
-				// it is opened)
-				w -= 16;
-			}
-			dojo.marginBox(this.menuTableNode, {w: w});
-		}
-	}
-});
-
-dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropDown], {
-	// summary:
-	//		This is a "styleable" select box - it is basically a DropDownButton which
-	//		can take a <select> as its input.
-
-	baseClass: "dijitSelect",
-
-	templateString: dojo.cache("dijit.form", "templates/Select.html", "<table class='dijit dijitReset dijitInline dijitLeft'\n\tdojoAttachPoint=\"_buttonNode,tableNode\" cellspacing='0' cellpadding='0' waiRole=\"presentation\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonContents dijitButtonNode\" dojoAttachPoint=\"focusNode\"\n\t\t\twaiRole=\"combobox\" waiState=\"haspopup-true\"\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"  dojoAttachPoint=\"containerNode,_popupStateNode\"></span\n\t\t\t><input type=\"hidden\" ${nameAttrSetting} dojoAttachPoint=\"valueNode\" value=\"${value}\" waiState=\"hidden-true\" />\n\t\t</td><td class=\"dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\t\tdojoAttachPoint=\"titleNode\" waiRole=\"presentation\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" waiRole=\"presentation\">&thinsp;</div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">&#9660;</div\n\t\t></td\n\t></tr></tbody\n></table>\n"),
-
-	// attributeMap: Object
-	//		Add in our style to be applied to the focus node
-	attributeMap: dojo.mixin(dojo.clone(dijit.form._FormSelectWidget.prototype.attributeMap),{style:"tableNode"}),
-
-	// required: Boolean
-	//		Can be true or false, default is false.
-	required: false,
-
-	// state: String
-	//		Shows current state (ie, validation result) of input (Normal, Warning, or Error)
-	state: "",
-
-	//	tooltipPosition: String[]
-	//		See description of dijit.Tooltip.defaultPosition for details on this parameter.
-	tooltipPosition: [],
-
-	// emptyLabel: string
-	//		What to display in an "empty" dropdown
-	emptyLabel: "",
-
-	// _isLoaded: Boolean
-	//		Whether or not we have been loaded
-	_isLoaded: false,
-
-	// _childrenLoaded: Boolean
-	//		Whether or not our children have been loaded
-	_childrenLoaded: false,
-
-	_fillContent: function(){
-		// summary:
-		//		Set the value to be the first, or the selected index
-		this.inherited(arguments);
-		if(this.options.length && !this.value && this.srcNodeRef){
-			var si = this.srcNodeRef.selectedIndex;
-			this.value = this.options[si != -1 ? si : 0].value;
-		}
-
-		// Create the dropDown widget
-		this.dropDown = new dijit.form._SelectMenu();
-		dojo.addClass(this.dropDown.domNode, this.baseClass + "Menu");
-	},
-
-	_getMenuItemForOption: function(/*dijit.form.__SelectOption*/ option){
-		// summary:
-		//		For the given option, return the menu item that should be
-		//		used to display it.  This can be overridden as needed
-		if(!option.value){
-			// We are a separator (no label set for it)
-			return new dijit.MenuSeparator();
-		}else{
-			// Just a regular menu option
-			var click = dojo.hitch(this, "_setValueAttr", option);
-			var item = new dijit.MenuItem({
-				option: option,
-				label: option.label,
-				onClick: click,
-				disabled: option.disabled || false
-			});
-			dijit.setWaiRole(item.focusNode, "listitem");
-			return item;
-		}
-	},
-
-	_addOptionItem: function(/*dijit.form.__SelectOption*/ option){
-		// summary:
-		//		For the given option, add an option to our dropdown.
-		//		If the option doesn't have a value, then a separator is added
-		//		in that place.
-		if(this.dropDown){
-			this.dropDown.addChild(this._getMenuItemForOption(option));
-		}
-	},
-
-	_getChildren: function(){
-		if(!this.dropDown){
-			return [];
-		}
-		return this.dropDown.getChildren();
-	},
-
-	_loadChildren: function(/*Boolean*/ loadMenuItems){
-		// summary:
-		//		Resets the menu and the length attribute of the button - and
-		//		ensures that the label is appropriately set.
-		//	loadMenuItems: Boolean
-		//		actually loads the child menu items - we only do this when we are
-		//		populating for showing the dropdown.
-
-		if(loadMenuItems === true){
-			// this.inherited destroys this.dropDown's child widgets (MenuItems).
-			// Avoid this.dropDown (Menu widget) having a pointer to a destroyed widget (which will cause
-			// issues later in _setSelected). (see #10296)
-			if(this.dropDown){
-				delete this.dropDown.focusedChild;
-			}
-			if(this.options.length){
-				this.inherited(arguments);
-			}else{
-				// Drop down menu is blank but add one blank entry just so something appears on the screen
-				// to let users know that they are no choices (mimicing native select behavior)
-				dojo.forEach(this._getChildren(), function(child){ child.destroyRecursive(); });
-				var item = new dijit.MenuItem({label: "&nbsp;"});
-				this.dropDown.addChild(item);
-			}
-		}else{
-			this._updateSelection();
-		}
-
-		var len = this.options.length;
-		this._isLoaded = false;
-		this._childrenLoaded = true;
-
-		if(!this._loadingStore){
-			// Don't call this if we are loading - since we will handle it later
-			this._setValueAttr(this.value);
-		}
-	},
-
-	_setValueAttr: function(value){
-		this.inherited(arguments);
-		dojo.attr(this.valueNode, "value", this.attr("value"));
-	},
-
-	_setDisplay: function(/*String*/ newDisplay){
-		// summary:
-		//		sets the display for the given value (or values)
-		this.containerNode.innerHTML = '<span class="dijitReset dijitInline ' + this.baseClass + 'Label">' +
-					(newDisplay || this.emptyLabel || "&nbsp;") +
-					'</span>';
-		dijit.setWaiState(this.focusNode, "valuenow", (newDisplay || this.emptyLabel || "&nbsp;") );
-	},
-
-	validate: function(/*Boolean*/ isFocused){
-		// summary:
-		//		Called by oninit, onblur, and onkeypress.
-		// description:
-		//		Show missing or invalid messages if appropriate, and highlight textbox field.
-		//		Used when a select is initially set to no value and the user is required to
-		//		set the value.
-		
-		var isValid = this.isValid(isFocused);
-		this.state = isValid ? "" : "Error";
-		this._setStateClass();
-		dijit.setWaiState(this.focusNode, "invalid", isValid ? "false" : "true");
-		var message = isValid ? "" : this._missingMsg;
-		if(this._message !== message){
-			this._message = message;
-			dijit.hideTooltip(this.domNode);
-			if(message){
-				dijit.showTooltip(message, this.domNode, this.tooltipPosition);
-			}
-		}
-		return isValid;
-	},
-
-	isValid: function(/*Boolean*/ isFocused){
-		// summary:
-		//		Whether or not this is a valid value.   The only way a Select
-		//		can be invalid is when it's required but nothing is selected.
-		return (!this.required || !(/^\s*$/.test(this.value)));
-	},
-
-	reset: function(){
-		// summary:
-		//		Overridden so that the state will be cleared.
-		this.inherited(arguments);
-		dijit.hideTooltip(this.domNode);
-		this.state = "";
-		this._setStateClass();
-		delete this._message;
-	},
-
-	postMixInProperties: function(){
-		// summary:
-		//		set the missing message
-		this.inherited(arguments);
-		this._missingMsg = dojo.i18n.getLocalization("dijit.form", "validate",
-									this.lang).missingMessage;
-	},
-
-	postCreate: function(){
-		this.inherited(arguments);
-		if(this.tableNode.style.width){
-			dojo.addClass(this.domNode, this.baseClass + "FixedWidth");
-		}
-	},
-
-	isLoaded: function(){
-		return this._isLoaded;
-	},
-
-	loadDropDown: function(/*Function*/ loadCallback){
-		// summary:
-		//		populates the menu
-		this._loadChildren(true);
-		this._isLoaded = true;
-		loadCallback();
-	},
-
-	uninitialize: function(preserveDom){
-		if(this.dropDown && !this.dropDown._destroyed){
-			this.dropDown.destroyRecursive(preserveDom);
-			delete this.dropDown;
-		}
-		this.inherited(arguments);
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/SimpleTextarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/SimpleTextarea.js
deleted file mode 100644
index 48fc4ca..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/SimpleTextarea.js
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.SimpleTextarea"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.SimpleTextarea"] = true;
-dojo.provide("dijit.form.SimpleTextarea");
-
-dojo.require("dijit.form.TextBox");
-
-dojo.declare("dijit.form.SimpleTextarea",
-	dijit.form.TextBox,
-	{
-	// summary:
-	//		A simple textarea that degrades, and responds to
-	// 		minimal LayoutContainer usage, and works with dijit.form.Form.
-	//		Doesn't automatically size according to input, like Textarea.
-	//
-	// example:
-	//	|	<textarea dojoType="dijit.form.SimpleTextarea" name="foo" value="bar" rows=30 cols=40></textarea>
-	//
-	// example:
-	//	|	new dijit.form.SimpleTextarea({ rows:20, cols:30 }, "foo");
-
-	baseClass: "dijitTextArea",
-
-	attributeMap: dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap, {
-		rows:"textbox", cols: "textbox"
-	}),
-
-	// rows: Number
-	//		The number of rows of text.
-	rows: "3",
-
-	// rows: Number
-	//		The number of characters per line.
-	cols: "20",
-
-	templateString: "<textarea ${nameAttrSetting} dojoAttachPoint='focusNode,containerNode,textbox' autocomplete='off'></textarea>",
-
-	postMixInProperties: function(){
-		// Copy value from srcNodeRef, unless user specified a value explicitly (or there is no srcNodeRef)
-		if(!this.value && this.srcNodeRef){
-			this.value = this.srcNodeRef.value;
-		}
-		this.inherited(arguments);
-	},
-
-	filter: function(/*String*/ value){
-		// Override TextBox.filter to deal with newlines... specifically (IIRC) this is for IE which writes newlines
-		// as \r\n instead of just \n
-		if(value){
-			value = value.replace(/\r/g,"");
-		}
-		return this.inherited(arguments);
-	},
-
-	postCreate: function(){
-		this.inherited(arguments);
-		if(dojo.isIE && this.cols){ // attribute selectors is not supported in IE6
-			dojo.addClass(this.textbox, "dijitTextAreaCols");
-		}
-	},
-
-	_previousValue: "",
-	_onInput: function(/*Event?*/ e){
-		// Override TextBox._onInput() to enforce maxLength restriction
-		if(this.maxLength){
-			var maxLength = parseInt(this.maxLength);
-			var value = this.textbox.value.replace(/\r/g,'');
-			var overflow = value.length - maxLength;
-			if(overflow > 0){
-				if(e){ dojo.stopEvent(e); }
-				var textarea = this.textbox;
-				if(textarea.selectionStart){
-					var pos = textarea.selectionStart;
-					var cr = 0;
-					if(dojo.isOpera){
-						cr = (this.textbox.value.substring(0,pos).match(/\r/g) || []).length;
-					}
-					this.textbox.value = value.substring(0,pos-overflow-cr)+value.substring(pos-cr);
-					textarea.setSelectionRange(pos-overflow, pos-overflow);
-				}else if(dojo.doc.selection){ //IE
-					textarea.focus();
-					var range = dojo.doc.selection.createRange();
-					// delete overflow characters
-					range.moveStart("character", -overflow);
-					range.text = '';
-					// show cursor
-					range.select();
-				}
-			}
-			this._previousValue = this.textbox.value;
-		}
-		this.inherited(arguments);
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/Slider.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/Slider.js
deleted file mode 100644
index 882846a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/Slider.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.Slider"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.Slider"] = true;
-dojo.provide("dijit.form.Slider");
-
-dojo.deprecated("Call require() for HorizontalSlider / VerticalRule, explicitly rather than 'dijit.form.Slider' itself", "", "2.0");
-
-// For back-compat, remove for 2.0
-dojo.require("dijit.form.HorizontalSlider");
-dojo.require("dijit.form.VerticalSlider");
-dojo.require("dijit.form.HorizontalRule");
-dojo.require("dijit.form.VerticalRule");
-dojo.require("dijit.form.HorizontalRuleLabels");
-dojo.require("dijit.form.VerticalRuleLabels");
-
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/TextBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/TextBox.js
deleted file mode 100644
index 1ebf4bc..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/TextBox.js
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.TextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.TextBox"] = true;
-dojo.provide("dijit.form.TextBox");
-
-dojo.require("dijit.form._FormWidget");
-
-dojo.declare(
-	"dijit.form.TextBox",
-	dijit.form._FormValueWidget,
-	{
-		// summary:
-		//		A base class for textbox form inputs
-
-		// trim: Boolean
-		//		Removes leading and trailing whitespace if true.  Default is false.
-		trim: false,
-
-		// uppercase: Boolean
-		//		Converts all characters to uppercase if true.  Default is false.
-		uppercase: false,
-
-		// lowercase: Boolean
-		//		Converts all characters to lowercase if true.  Default is false.
-		lowercase: false,
-
-		// propercase: Boolean
-		//		Converts the first character of each word to uppercase if true.
-		propercase: false,
-
-		//	maxLength: String
-		//		HTML INPUT tag maxLength declaration.
-		maxLength: "",
-
-		//	selectOnClick: [const] Boolean
-		//		If true, all text will be selected when focused with mouse
-		selectOnClick: false,
-
-		templateString: dojo.cache("dijit.form", "templates/TextBox.html", "<input class=\"dijit dijitReset dijitLeft\" dojoAttachPoint='textbox,focusNode'\n\tdojoAttachEvent='onmouseenter:_onMouse,onmouseleave:_onMouse'\n\tautocomplete=\"off\" type=\"${type}\" ${nameAttrSetting}\n\t/>\n"),
-		baseClass: "dijitTextBox",
-
-		attributeMap: dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap, {
-			maxLength: "focusNode"
-		}),
-
-		_getValueAttr: function(){
-			// summary:
-			//		Hook so attr('value') works as we like.
-			// description:
-			//		For `dijit.form.TextBox` this basically returns the value of the <input>.
-			//
-			//		For `dijit.form.MappedTextBox` subclasses, which have both
-			//		a "displayed value" and a separate "submit value",
-			//		This treats the "displayed value" as the master value, computing the
-			//		submit value from it via this.parse().
-			return this.parse(this.attr('displayedValue'), this.constraints);
-		},
-
-		_setValueAttr: function(value, /*Boolean?*/ priorityChange, /*String?*/ formattedValue){
-			// summary:
-			//		Hook so attr('value', ...) works.
-			//
-			// description:
-			//		Sets the value of the widget to "value" which can be of
-			//		any type as determined by the widget.
-			//
-			// value:
-			//		The visual element value is also set to a corresponding,
-			//		but not necessarily the same, value.
-			//
-			// formattedValue:
-			//		If specified, used to set the visual element value,
-			//		otherwise a computed visual value is used.
-			//
-			// priorityChange:
-			//		If true, an onChange event is fired immediately instead of
-			//		waiting for the next blur event.
-
-			var filteredValue;
-			if(value !== undefined){
-				// TODO: this is calling filter() on both the display value and the actual value.
-				// I added a comment to the filter() definition about this, but it should be changed.
-				filteredValue = this.filter(value);
-				if(typeof formattedValue != "string"){
-					if(filteredValue !== null && ((typeof filteredValue != "number") || !isNaN(filteredValue))){
-						formattedValue = this.filter(this.format(filteredValue, this.constraints));
-					}else{ formattedValue = ''; }
-				}
-			}
-			if(formattedValue != null && formattedValue != undefined && ((typeof formattedValue) != "number" || !isNaN(formattedValue)) && this.textbox.value != formattedValue){
-				this.textbox.value = formattedValue;
-			}
-			this.inherited(arguments, [filteredValue, priorityChange]);
-		},
-
-		// displayedValue: String
-		//		For subclasses like ComboBox where the displayed value
-		//		(ex: Kentucky) and the serialized value (ex: KY) are different,
-		//		this represents the displayed value.
-		//
-		//		Setting 'displayedValue' through attr('displayedValue', ...)
-		//		updates 'value', and vice-versa.  Othewise 'value' is updated
-		//		from 'displayedValue' periodically, like onBlur etc.
-		//
-		//		TODO: move declaration to MappedTextBox?
-		//		Problem is that ComboBox references displayedValue,
-		//		for benefit of FilteringSelect.
-		displayedValue: "",
-
-		getDisplayedValue: function(){
-			// summary:
-			//		Deprecated.   Use attr('displayedValue') instead.
-			// tags:
-			//		deprecated
-			dojo.deprecated(this.declaredClass+"::getDisplayedValue() is deprecated. Use attr('displayedValue') instead.", "", "2.0");
-			return this.attr('displayedValue');
-		},
-
-		_getDisplayedValueAttr: function(){
-			// summary:
-			//		Hook so attr('displayedValue') works.
-			// description:
-			//		Returns the displayed value (what the user sees on the screen),
-			// 		after filtering (ie, trimming spaces etc.).
-			//
-			//		For some subclasses of TextBox (like ComboBox), the displayed value
-			//		is different from the serialized value that's actually
-			//		sent to the server (see dijit.form.ValidationTextBox.serialize)
-
-			return this.filter(this.textbox.value);
-		},
-
-		setDisplayedValue: function(/*String*/value){
-			// summary:
-			//		Deprecated.   Use attr('displayedValue', ...) instead.
-			// tags:
-			//		deprecated
-			dojo.deprecated(this.declaredClass+"::setDisplayedValue() is deprecated. Use attr('displayedValue', ...) instead.", "", "2.0");
-			this.attr('displayedValue', value);
-		},
-
-		_setDisplayedValueAttr: function(/*String*/value){
-			// summary:
-			//		Hook so attr('displayedValue', ...) works.
-			// description:
-			//		Sets the value of the visual element to the string "value".
-			//		The widget value is also set to a corresponding,
-			//		but not necessarily the same, value.
-
-			if(value === null || value === undefined){ value = '' }
-			else if(typeof value != "string"){ value = String(value) }
-			this.textbox.value = value;
-			this._setValueAttr(this.attr('value'), undefined, value);
-		},
-
-		format: function(/* String */ value, /* Object */ constraints){
-			// summary:
-			//		Replacable function to convert a value to a properly formatted string.
-			// tags:
-			//		protected extension
-			return ((value == null || value == undefined) ? "" : (value.toString ? value.toString() : value));
-		},
-
-		parse: function(/* String */ value, /* Object */ constraints){
-			// summary:
-			//		Replacable function to convert a formatted string to a value
-			// tags:
-			//		protected extension
-
-			return value;	// String
-		},
-
-		_refreshState: function(){
-			// summary:
-			//		After the user types some characters, etc., this method is
-			//		called to check the field for validity etc.  The base method
-			//		in `dijit.form.TextBox` does nothing, but subclasses override.
-			// tags:
-			//		protected
-		},
-
-		_onInput: function(e){
-			if(e && e.type && /key/i.test(e.type) && e.keyCode){
-				switch(e.keyCode){
-					case dojo.keys.SHIFT:
-					case dojo.keys.ALT:
-					case dojo.keys.CTRL:
-					case dojo.keys.TAB:
-						return;
-				}
-			}
-			if(this.intermediateChanges){
-				var _this = this;
-				// the setTimeout allows the key to post to the widget input box
-				setTimeout(function(){ _this._handleOnChange(_this.attr('value'), false); }, 0);
-			}
-			this._refreshState();
-		},
-
-		postCreate: function(){
-			// setting the value here is needed since value="" in the template causes "undefined"
-			// and setting in the DOM (instead of the JS object) helps with form reset actions
-			this.textbox.setAttribute("value", this.textbox.value); // DOM and JS values shuld be the same
-			this.inherited(arguments);
-			if(dojo.isMoz || dojo.isOpera){
-				this.connect(this.textbox, "oninput", this._onInput);
-			}else{
-				this.connect(this.textbox, "onkeydown", this._onInput);
-				this.connect(this.textbox, "onkeyup", this._onInput);
-				this.connect(this.textbox, "onpaste", this._onInput);
-				this.connect(this.textbox, "oncut", this._onInput);
-			}
-		},
-
-		_blankValue: '', // if the textbox is blank, what value should be reported
-		filter: function(val){
-			// summary:
-			//		Auto-corrections (such as trimming) that are applied to textbox
-			//		value on blur or form submit.
-			// description:
-			//		For MappedTextBox subclasses, this is called twice
-			// 			- once with the display value
-			//			- once the value as set/returned by attr('value', ...)
-			//		and attr('value'), ex: a Number for NumberTextBox.
-			//
-			//		In the latter case it does corrections like converting null to NaN.  In
-			//		the former case the NumberTextBox.filter() method calls this.inherited()
-			//		to execute standard trimming code in TextBox.filter().
-			//
-			//		TODO: break this into two methods in 2.0
-			//
-			// tags:
-			//		protected extension
-			if(val === null){ return this._blankValue; }
-			if(typeof val != "string"){ return val; }
-			if(this.trim){
-				val = dojo.trim(val);
-			}
-			if(this.uppercase){
-				val = val.toUpperCase();
-			}
-			if(this.lowercase){
-				val = val.toLowerCase();
-			}
-			if(this.propercase){
-				val = val.replace(/[^\s]+/g, function(word){
-					return word.substring(0,1).toUpperCase() + word.substring(1);
-				});
-			}
-			return val;
-		},
-
-		_setBlurValue: function(){
-			this._setValueAttr(this.attr('value'), true);
-		},
-
-		_onBlur: function(e){
-			if(this.disabled){ return; }
-			this._setBlurValue();
-			this.inherited(arguments);
-
-			if(this._selectOnClickHandle){
-				this.disconnect(this._selectOnClickHandle);
-			}
-			if(this.selectOnClick && dojo.isMoz){
-				this.textbox.selectionStart = this.textbox.selectionEnd = undefined; // clear selection so that the next mouse click doesn't reselect
-			}
-		},
-
-		_onFocus: function(/*String*/ by){
-			if(this.disabled || this.readOnly){ return; }
-
-			// Select all text on focus via click if nothing already selected.
-			// Since mouse-up will clear the selection need to defer selection until after mouse-up.
-			// Don't do anything on focus by tabbing into the widgetm since there's no associated mouse-up event.
-			if(this.selectOnClick && by == "mouse"){
-				this._selectOnClickHandle = this.connect(this.domNode, "onmouseup", function(){
-					// Only select all text on first click; otherwise users would have no way to clear
-					// the selection.
-					this.disconnect(this._selectOnClickHandle);
-
-					// Check if the user selected some text manually (mouse-down, mouse-move, mouse-up)
-					// and if not, then select all the text
-					var textIsNotSelected;
-					if(dojo.isIE){
-						var range = dojo.doc.selection.createRange();
-						var parent = range.parentElement();
-						textIsNotSelected = parent == this.textbox && range.text.length == 0;
-					}else{
-						textIsNotSelected = this.textbox.selectionStart == this.textbox.selectionEnd;
-					}
-					if(textIsNotSelected){
-						dijit.selectInputText(this.textbox);
-					}
-				});
-			}
-
-			this._refreshState();
-			this.inherited(arguments);
-		},
-
-		reset: function(){
-			// Overrides dijit._FormWidget.reset().
-			// Additionally resets the displayed textbox value to ''
-			this.textbox.value = '';
-			this.inherited(arguments);
-		}
-	}
-);
-
-dijit.selectInputText = function(/*DomNode*/element, /*Number?*/ start, /*Number?*/ stop){
-	// summary:
-	//		Select text in the input element argument, from start (default 0), to stop (default end).
-
-	// TODO: use functions in _editor/selection.js?
-	var _window = dojo.global;
-	var _document = dojo.doc;
-	element = dojo.byId(element);
-	if(isNaN(start)){ start = 0; }
-	if(isNaN(stop)){ stop = element.value ? element.value.length : 0; }
-	dijit.focus(element);
-	if(_document["selection"] && dojo.body()["createTextRange"]){ // IE
-		if(element.createTextRange){
-			var range = element.createTextRange();
-			with(range){
-				collapse(true);
-				moveStart("character", -99999); // move to 0
-				moveStart("character", start); // delta from 0 is the correct position
-				moveEnd("character", stop-start);
-				select();
-			}
-		}
-	}else if(_window["getSelection"]){
-		if(element.setSelectionRange){
-			element.setSelectionRange(start, stop);
-		}
-	}
-};
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/Textarea.js
deleted file mode 100644
index e80ba8e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/Textarea.js
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.Textarea"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.Textarea"] = true;
-dojo.provide("dijit.form.Textarea");
-
-dojo.require("dijit.form.SimpleTextarea");
-
-dojo.declare(
-	"dijit.form.Textarea",
-	dijit.form.SimpleTextarea,
-	{
-	// summary:
-	//		A textarea widget that adjusts it's height according to the amount of data.
-	//
-	// description:
-	//		A textarea that dynamically expands/contracts (changing it's height) as
-	//		the user types, to display all the text without requiring a scroll bar.
-	//
-	//		Takes nearly all the parameters (name, value, etc.) that a vanilla textarea takes.
-	//		Rows is not supported since this widget adjusts the height.
-	//
-	// example:
-	// |	<textarea dojoType="dijit.form.TextArea">...</textarea>
-
-
-	// Override SimpleTextArea.cols to default to width:100%, for backward compatibility
-	cols: "",
-
-	_previousNewlines: 0,
-	_strictMode: (dojo.doc.compatMode != 'BackCompat'), // not the same as !dojo.isQuirks
-
-	_getHeight: function(textarea){
-		var newH = textarea.scrollHeight;
-		if(dojo.isIE){
-			newH += textarea.offsetHeight - textarea.clientHeight - ((dojo.isIE < 8 && this._strictMode) ? dojo._getPadBorderExtents(textarea).h : 0);
-		}else if(dojo.isMoz){
-			newH += textarea.offsetHeight - textarea.clientHeight; // creates room for horizontal scrollbar
-		}else if(dojo.isWebKit && !(dojo.isSafari < 4)){ // Safari 4.0 && Chrome
-			newH += dojo._getBorderExtents(textarea).h;
-		}else{ // Safari 3.x and Opera 9.6
-			newH += dojo._getPadBorderExtents(textarea).h;
-		}
-		return newH;
-	},
-
-	_estimateHeight: function(textarea){
-		// summary:
-		// 		Approximate the height when the textarea is invisible with the number of lines in the text.
-		// 		Fails when someone calls setValue with a long wrapping line, but the layout fixes itself when the user clicks inside so . . .
-		// 		In IE, the resize event is supposed to fire when the textarea becomes visible again and that will correct the size automatically.
-		//
-		textarea.style.maxHeight = "";
-		textarea.style.height = "auto";
-		// #rows = #newlines+1
-		// Note: on Moz, the following #rows appears to be 1 too many.
-		// Actually, Moz is reserving room for the scrollbar.
-		// If you increase the font size, this behavior becomes readily apparent as the last line gets cut off without the +1.
-		textarea.rows = (textarea.value.match(/\n/g) || []).length + 1;
-	},
-
-	_needsHelpShrinking: dojo.isMoz || dojo.isWebKit,
-
-	_onInput: function(){
-		// Override SimpleTextArea._onInput() to deal with height adjustment
-		this.inherited(arguments);
-		if(this._busyResizing){ return; }
-		this._busyResizing = true;
-		var textarea = this.textbox;
-		if(textarea.scrollHeight && textarea.offsetHeight && textarea.clientHeight){
-			var newH = this._getHeight(textarea) + "px";
-			if(textarea.style.height != newH){
-				textarea.style.maxHeight = textarea.style.height = newH;
-			}
-			if(this._needsHelpShrinking){
-				if(this._setTimeoutHandle){
-					clearTimeout(this._setTimeoutHandle);
-				}
-				this._setTimeoutHandle = setTimeout(dojo.hitch(this, "_shrink"), 0); // try to collapse multiple shrinks into 1
-			}
-		}else{
-			// hidden content of unknown size
-			this._estimateHeight(textarea);
-		}
-		this._busyResizing = false;
-	},
-
-	_busyResizing: false,
-	_shrink: function(){
-		// grow paddingBottom to see if scrollHeight shrinks (when it is unneccesarily big)
-		this._setTimeoutHandle = null;
-		if(this._needsHelpShrinking && !this._busyResizing){
-			this._busyResizing = true;
-			var textarea = this.textbox;
-			var empty = false;
-			if(textarea.value == ''){
-				textarea.value = ' '; // prevent collapse all the way back to 0
-				empty = true;
-			}
-			var scrollHeight = textarea.scrollHeight;
-			if(!scrollHeight){
-				this._estimateHeight(textarea);
-			}else{
-				var oldPadding = textarea.style.paddingBottom;
-				var newPadding = dojo._getPadExtents(textarea);
-				newPadding = newPadding.h - newPadding.t;
-				textarea.style.paddingBottom = newPadding + 1 + "px"; // tweak padding to see if height can be reduced
-				var newH = this._getHeight(textarea) - 1 + "px"; // see if the height changed by the 1px added
-				if(textarea.style.maxHeight != newH){ // if can be reduced, so now try a big chunk
-					textarea.style.paddingBottom = newPadding + scrollHeight + "px";
-					textarea.scrollTop = 0;
-					textarea.style.maxHeight = this._getHeight(textarea) - scrollHeight + "px"; // scrollHeight is the added padding
-				}
-				textarea.style.paddingBottom = oldPadding;
-			}
-			if(empty){
-				textarea.value = '';
-			}
-			this._busyResizing = false;
-		}
-	},
-
-	resize: function(){
-		// summary:
-		//		Resizes the textarea vertically (should be called after a style/value change)
-		this._onInput();
-	},
-
-	_setValueAttr: function(){
-		this.inherited(arguments);
-		this.resize();
-	},
-
-	postCreate: function(){
-		this.inherited(arguments);
-		// tweak textarea style to reduce browser differences
-		dojo.style(this.textbox, { overflowY: 'hidden', overflowX: 'auto', boxSizing: 'border-box', MsBoxSizing: 'border-box', WebkitBoxSizing: 'border-box', MozBoxSizing: 'border-box' });
-		this.connect(this.textbox, "onscroll", this._onInput);
-		this.connect(this.textbox, "onresize", this._onInput);
-		this.connect(this.textbox, "onfocus", this._onInput); // useful when a previous estimate was off a bit
-		setTimeout(dojo.hitch(this, "resize"), 0);
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/TimeTextBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/TimeTextBox.js
deleted file mode 100644
index 81f36a1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/TimeTextBox.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.TimeTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.TimeTextBox"] = true;
-dojo.provide("dijit.form.TimeTextBox");
-
-dojo.require("dijit._TimePicker");
-dojo.require("dijit.form._DateTimeTextBox");
-
-/*=====
-dojo.declare(
-	"dijit.form.TimeTextBox.__Constraints",
-	[dijit.form._DateTimeTextBox.__Constraints, dijit._TimePicker.__Constraints]
-);
-=====*/
-
-dojo.declare(
-	"dijit.form.TimeTextBox",
-	dijit.form._DateTimeTextBox,
-	{
-		// summary:
-		//		A validating, serializable, range-bound time text box with a drop down time picker
-
-		baseClass: "dijitTextBox dijitTimeTextBox",
-		popupClass: "dijit._TimePicker",
-		_selector: "time",
-
-/*=====
-		// constraints: dijit.form.TimeTextBox.__Constraints
-		constraints:{},
-=====*/
-
-		// value: Date
-		//		The value of this widget as a JavaScript Date object, with only hours/minutes/seconds specified.
-		//
-		//		Example:
-		// |	new dijit.form.TimeTextBox({value: dojo.date.local.fromISOString("T:12:59:59")})
-		//
-		//		When passed to the parser in markup, must be specified according to locale-independent
-		//		`dojo.date.stamp.fromISOString` format.
-		//
-		//		Example:
-		// |	<input dojotype='dijit.form.TimeTextBox' value='T12:34:00'>
-		value: new Date("")		// value.toString()="NaN"
-	}
-);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/ToggleButton.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/ToggleButton.js
deleted file mode 100644
index 17a5e5a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/ToggleButton.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.ToggleButton"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.ToggleButton"] = true;
-dojo.provide("dijit.form.ToggleButton");
-dojo.require("dijit.form.Button");
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/ValidationTextBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/ValidationTextBox.js
deleted file mode 100644
index b8a1af5..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/ValidationTextBox.js
+++ /dev/null
@@ -1,464 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.ValidationTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.ValidationTextBox"] = true;
-dojo.provide("dijit.form.ValidationTextBox");
-
-dojo.require("dojo.i18n");
-
-dojo.require("dijit.form.TextBox");
-dojo.require("dijit.Tooltip");
-
-dojo.requireLocalization("dijit.form", "validate", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
-
-/*=====
-	dijit.form.ValidationTextBox.__Constraints = function(){
-		// locale: String
-		//		locale used for validation, picks up value from this widget's lang attribute
-		// _flags_: anything
-		//		various flags passed to regExpGen function
-		this.locale = "";
-		this._flags_ = "";
-	}
-=====*/
-
-dojo.declare(
-	"dijit.form.ValidationTextBox",
-	dijit.form.TextBox,
-	{
-		// summary:
-		//		Base class for textbox widgets with the ability to validate content of various types and provide user feedback.
-		// tags:
-		//		protected
-
-		templateString: dojo.cache("dijit.form", "templates/ValidationTextBox.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\" waiRole=\"presentation\"\n\t><div style=\"overflow:hidden;\"\n\t\t><div class=\"dijitReset dijitValidationIcon\"><br></div\n\t\t><div class=\"dijitReset dijitValidationIconText\">&Chi;</div\n\t\t><div class=\"dijitReset dijitInputField\"\n\t\t\t><input class=\"dijitReset\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${nameAttrSetting} type='${type}'\n\t\t/></div\n\t></div\n></div>\n"),
-		baseClass: "dijitTextBox",
-
-		// required: Boolean
-		//		User is required to enter data into this field.
-		required: false,
-
-		// promptMessage: String
-		//		If defined, display this hint string immediately on focus to the textbox, if empty.
-		//		Think of this like a tooltip that tells the user what to do, not an error message
-		//		that tells the user what they've done wrong.
-		//
-		//		Message disappears when user starts typing.
-		promptMessage: "",
-
-		// invalidMessage: String
-		// 		The message to display if value is invalid.
-		invalidMessage: "$_unset_$", // read from the message file if not overridden
-
-		// constraints: dijit.form.ValidationTextBox.__Constraints
-		//		user-defined object needed to pass parameters to the validator functions
-		constraints: {},
-
-		// regExp: [extension protected] String
-		//		regular expression string used to validate the input
-		//		Do not specify both regExp and regExpGen
-		regExp: ".*",
-
-		regExpGen: function(/*dijit.form.ValidationTextBox.__Constraints*/constraints){
-			// summary:
-			//		Overridable function used to generate regExp when dependent on constraints.
-			//		Do not specify both regExp and regExpGen.
-			// tags:
-			//		extension protected
-			return this.regExp; // String
-		},
-
-		// state: [readonly] String
-		//		Shows current state (ie, validation result) of input (Normal, Warning, or Error)
-		state: "",
-
-		// tooltipPosition: String[]
-		//		See description of `dijit.Tooltip.defaultPosition` for details on this parameter.
-		tooltipPosition: [],
-
-		_setValueAttr: function(){
-			// summary:
-			//		Hook so attr('value', ...) works.
-			this.inherited(arguments);
-			this.validate(this._focused);
-		},
-
-		validator: function(/*anything*/value, /*dijit.form.ValidationTextBox.__Constraints*/constraints){
-			// summary:
-			//		Overridable function used to validate the text input against the regular expression.
-			// tags:
-			//		protected
-			return (new RegExp("^(?:" + this.regExpGen(constraints) + ")"+(this.required?"":"?")+"$")).test(value) &&
-				(!this.required || !this._isEmpty(value)) &&
-				(this._isEmpty(value) || this.parse(value, constraints) !== undefined); // Boolean
-		},
-
-		_isValidSubset: function(){
-			// summary:
-			//		Returns true if the value is either already valid or could be made valid by appending characters.
-			//		This is used for validation while the user [may be] still typing.
-			return this.textbox.value.search(this._partialre) == 0;
-		},
-
-		isValid: function(/*Boolean*/ isFocused){
-			// summary:
-			//		Tests if value is valid.
-			//		Can override with your own routine in a subclass.
-			// tags:
-			//		protected
-			return this.validator(this.textbox.value, this.constraints);
-		},
-
-		_isEmpty: function(value){
-			// summary:
-			//		Checks for whitespace
-			return /^\s*$/.test(value); // Boolean
-		},
-
-		getErrorMessage: function(/*Boolean*/ isFocused){
-			// summary:
-			//		Return an error message to show if appropriate
-			// tags:
-			//		protected
-			return this.invalidMessage; // String
-		},
-
-		getPromptMessage: function(/*Boolean*/ isFocused){
-			// summary:
-			//		Return a hint message to show when widget is first focused
-			// tags:
-			//		protected
-			return this.promptMessage; // String
-		},
-
-		_maskValidSubsetError: true,
-		validate: function(/*Boolean*/ isFocused){
-			// summary:
-			//		Called by oninit, onblur, and onkeypress.
-			// description:
-			//		Show missing or invalid messages if appropriate, and highlight textbox field.
-			// tags:
-			//		protected
-			var message = "";
-			var isValid = this.disabled || this.isValid(isFocused);
-			if(isValid){ this._maskValidSubsetError = true; }
-			var isValidSubset = !isValid && isFocused && this._isValidSubset();
-			var isEmpty = this._isEmpty(this.textbox.value);
-			if(isEmpty){ this._maskValidSubsetError = true; }
-			this.state = (isValid || (!this._hasBeenBlurred && isEmpty) || isValidSubset) ? "" : "Error";
-			if(this.state == "Error"){ this._maskValidSubsetError = false; }
-			this._setStateClass();
-			dijit.setWaiState(this.focusNode, "invalid", isValid ? "false" : "true");
-			if(isFocused){
-				if(isEmpty){
-					message = this.getPromptMessage(true);
-				}
-				if(!message && (this.state == "Error" || (isValidSubset && !this._maskValidSubsetError))){
-					message = this.getErrorMessage(true);
-				}
-			}
-			this.displayMessage(message);
-			return isValid;
-		},
-
-		// _message: String
-		//		Currently displayed message
-		_message: "",
-
-		displayMessage: function(/*String*/ message){
-			// summary:
-			//		Overridable method to display validation errors/hints.
-			//		By default uses a tooltip.
-			// tags:
-			//		extension
-			if(this._message == message){ return; }
-			this._message = message;
-			dijit.hideTooltip(this.domNode);
-			if(message){
-				dijit.showTooltip(message, this.domNode, this.tooltipPosition);
-			}
-		},
-
-		_refreshState: function(){
-			// Overrides TextBox._refreshState()
-			this.validate(this._focused);
-			this.inherited(arguments);
-		},
-
-		//////////// INITIALIZATION METHODS ///////////////////////////////////////
-
-		constructor: function(){
-			this.constraints = {};
-		},
-
-		postMixInProperties: function(){
-			this.inherited(arguments);
-			this.constraints.locale = this.lang;
-			this.messages = dojo.i18n.getLocalization("dijit.form", "validate", this.lang);
-			if(this.invalidMessage == "$_unset_$"){ this.invalidMessage = this.messages.invalidMessage; }
-			var p = this.regExpGen(this.constraints);
-			this.regExp = p;
-			var partialre = "";
-			// parse the regexp and produce a new regexp that matches valid subsets
-			// if the regexp is .* then there's no use in matching subsets since everything is valid
-			if(p != ".*"){ this.regExp.replace(/\\.|\[\]|\[.*?[^\\]{1}\]|\{.*?\}|\(\?[=:!]|./g,
-				function (re){
-					switch(re.charAt(0)){
-						case '{':
-						case '+':
-						case '?':
-						case '*':
-						case '^':
-						case '$':
-						case '|':
-						case '(':
-							partialre += re;
-							break;
-						case ")":
-							partialre += "|$)";
-							break;
-						 default:
-							partialre += "(?:"+re+"|$)";
-							break;
-					}
-				}
-			);}
-			try{ // this is needed for now since the above regexp parsing needs more test verification
-				"".search(partialre);
-			}catch(e){ // should never be here unless the original RE is bad or the parsing is bad
-				partialre = this.regExp;
-				console.warn('RegExp error in ' + this.declaredClass + ': ' + this.regExp);
-			} // should never be here unless the original RE is bad or the parsing is bad
-			this._partialre = "^(?:" + partialre + ")$";
-		},
-
-		_setDisabledAttr: function(/*Boolean*/ value){
-			this.inherited(arguments);	// call FormValueWidget._setDisabledAttr()
-			this._refreshState();
-		},
-
-		_setRequiredAttr: function(/*Boolean*/ value){
-			this.required = value;
-			dijit.setWaiState(this.focusNode,"required", value);
-			this._refreshState();
-		},
-
-		postCreate: function(){
-			if(dojo.isIE){ // IE INPUT tag fontFamily has to be set directly using STYLE
-				var s = dojo.getComputedStyle(this.focusNode);
-				if(s){
-					var ff = s.fontFamily;
-					if(ff){
-						this.focusNode.style.fontFamily = ff;
-					}
-				}
-			}
-			this.inherited(arguments);
-		},
-
-		reset:function(){
-			// Overrides dijit.form.TextBox.reset() by also
-			// hiding errors about partial matches
-			this._maskValidSubsetError = true;
-			this.inherited(arguments);
-		},
-
-		_onBlur: function(){
-			this.displayMessage('');
-			this.inherited(arguments);
-		}
-	}
-);
-
-dojo.declare(
-	"dijit.form.MappedTextBox",
-	dijit.form.ValidationTextBox,
-	{
-		// summary:
-		//		A dijit.form.ValidationTextBox subclass which provides a base class for widgets that have
-		//		a visible formatted display value, and a serializable
-		//		value in a hidden input field which is actually sent to the server.
-		// description:
-		//		The visible display may
-		//		be locale-dependent and interactive.  The value sent to the server is stored in a hidden
-		//		input field which uses the `name` attribute declared by the original widget.  That value sent
-		//		to the server is defined by the dijit.form.MappedTextBox.serialize method and is typically
-		//		locale-neutral.
-		// tags:
-		//		protected
-
-		postMixInProperties: function(){
-			this.inherited(arguments);
-
-			// we want the name attribute to go to the hidden <input>, not the displayed <input>,
-			// so override _FormWidget.postMixInProperties() setting of nameAttrSetting
-			this.nameAttrSetting = "";
-		},
-
-		serialize: function(/*anything*/val, /*Object?*/options){
-			// summary:
-			//		Overridable function used to convert the attr('value') result to a canonical
-			//		(non-localized) string.  For example, will print dates in ISO format, and
-			//		numbers the same way as they are represented in javascript.
-			// tags:
-			//		protected extension
-			return val.toString ? val.toString() : ""; // String
-		},
-
-		toString: function(){
-			// summary:
-			//		Returns widget as a printable string using the widget's value
-			// tags:
-			//		protected
-			var val = this.filter(this.attr('value')); // call filter in case value is nonstring and filter has been customized
-			return val != null ? (typeof val == "string" ? val : this.serialize(val, this.constraints)) : ""; // String
-		},
-
-		validate: function(){
-			// Overrides `dijit.form.TextBox.validate`
-			this.valueNode.value = this.toString();
-			return this.inherited(arguments);
-		},
-
-		buildRendering: function(){
-			// Overrides `dijit._Templated.buildRendering`
-
-			this.inherited(arguments);
-
-			// Create a hidden <input> node with the serialized value used for submit
-			// (as opposed to the displayed value).
-			// Passing in name as markup rather than calling dojo.create() with an attrs argument
-			// to make dojo.query(input[name=...]) work on IE. (see #8660)
-			this.valueNode = dojo.place("<input type='hidden'" + (this.name ? " name='" + this.name + "'" : "") + ">", this.textbox, "after");
-		},
-
-		reset:function(){
-			// Overrides `dijit.form.ValidationTextBox.reset` to
-			// reset the hidden textbox value to ''
-			this.valueNode.value = '';
-			this.inherited(arguments);
-		}
-	}
-);
-
-/*=====
-	dijit.form.RangeBoundTextBox.__Constraints = function(){
-		// min: Number
-		//		Minimum signed value.  Default is -Infinity
-		// max: Number
-		//		Maximum signed value.  Default is +Infinity
-		this.min = min;
-		this.max = max;
-	}
-=====*/
-
-dojo.declare(
-	"dijit.form.RangeBoundTextBox",
-	dijit.form.MappedTextBox,
-	{
-		// summary:
-		//		Base class for textbox form widgets which defines a range of valid values.
-
-		// rangeMessage: String
-		//		The message to display if value is out-of-range
-		rangeMessage: "",
-
-		/*=====
-		// constraints: dijit.form.RangeBoundTextBox.__Constraints
-		constraints: {},
-		======*/
-
-		rangeCheck: function(/*Number*/ primitive, /*dijit.form.RangeBoundTextBox.__Constraints*/ constraints){
-			// summary:
-			//		Overridable function used to validate the range of the numeric input value.
-			// tags:
-			//		protected
-			return	("min" in constraints? (this.compare(primitive,constraints.min) >= 0) : true) &&
-				("max" in constraints? (this.compare(primitive,constraints.max) <= 0) : true); // Boolean
-		},
-
-		isInRange: function(/*Boolean*/ isFocused){
-			// summary:
-			//		Tests if the value is in the min/max range specified in constraints
-			// tags:
-			//		protected
-			return this.rangeCheck(this.attr('value'), this.constraints);
-		},
-
-		_isDefinitelyOutOfRange: function(){
-			// summary:
-			//		Returns true if the value is out of range and will remain
-			//		out of range even if the user types more characters
-			var val = this.attr('value');
-			var isTooLittle = false;
-			var isTooMuch = false;
-			if("min" in this.constraints){
-				var min = this.constraints.min;
-				min = this.compare(val, ((typeof min == "number") && min >= 0 && val !=0) ? 0 : min);
-				isTooLittle = (typeof min == "number") && min < 0;
-			}
-			if("max" in this.constraints){
-				var max = this.constraints.max;
-				max = this.compare(val, ((typeof max != "number") || max > 0) ? max : 0);
-				isTooMuch = (typeof max == "number") && max > 0;
-			}
-			return isTooLittle || isTooMuch;
-		},
-
-		_isValidSubset: function(){
-			// summary:
-			//		Overrides `dijit.form.ValidationTextBox._isValidSubset`.
-			//		Returns true if the input is syntactically valid, and either within
-			//		range or could be made in range by more typing.
-			return this.inherited(arguments) && !this._isDefinitelyOutOfRange();
-		},
-
-		isValid: function(/*Boolean*/ isFocused){
-			// Overrides dijit.form.ValidationTextBox.isValid to check that the value is also in range.
-			return this.inherited(arguments) &&
-				((this._isEmpty(this.textbox.value) && !this.required) || this.isInRange(isFocused)); // Boolean
-		},
-
-		getErrorMessage: function(/*Boolean*/ isFocused){
-			// Overrides dijit.form.ValidationTextBox.getErrorMessage to print "out of range" message if appropriate
-			var v = this.attr('value');
-			if(v !== null && v !== '' && v !== undefined && !this.isInRange(isFocused)){ // don't check isInRange w/o a real value
-				return this.rangeMessage; // String
-			}
-			return this.inherited(arguments);
-		},
-
-		postMixInProperties: function(){
-			this.inherited(arguments);
-			if(!this.rangeMessage){
-				this.messages = dojo.i18n.getLocalization("dijit.form", "validate", this.lang);
-				this.rangeMessage = this.messages.rangeMessage;
-			}
-		},
-
-		postCreate: function(){
-			this.inherited(arguments);
-			if(this.constraints.min !== undefined){
-				dijit.setWaiState(this.focusNode, "valuemin", this.constraints.min);
-			}
-			if(this.constraints.max !== undefined){
-				dijit.setWaiState(this.focusNode, "valuemax", this.constraints.max);
-			}
-		},
-
-		_setValueAttr: function(/*Number*/ value, /*Boolean?*/ priorityChange){
-			// summary:
-			//		Hook so attr('value', ...) works.
-
-			dijit.setWaiState(this.focusNode, "valuenow", value);
-			this.inherited(arguments);
-		}
-	}
-);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/VerticalRule.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/VerticalRule.js
deleted file mode 100644
index f0b21b3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/VerticalRule.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.VerticalRule"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.VerticalRule"] = true;
-dojo.provide("dijit.form.VerticalRule");
-
-dojo.require("dijit.form.HorizontalRule");
-
-dojo.declare("dijit.form.VerticalRule", dijit.form.HorizontalRule,
-{
-	// summary:
-	//		Hash marks for the `dijit.form.VerticalSlider`
-
-	templateString: '<div class="dijitRuleContainer dijitRuleContainerV"></div>',
-	_positionPrefix: '<div class="dijitRuleMark dijitRuleMarkV" style="top:',
-
-/*=====
-	// container: String
-	//		This is either "leftDecoration" or "rightDecoration",
-	//		to indicate whether this rule goes to the left or to the right of the slider.
-	//		Note that on RTL system, "leftDecoration" would actually go to the right, and vice-versa.
-	container: "",
-=====*/
-
-	// Overrides HorizontalRule._isHorizontal
-	_isHorizontal: false
-
-});
-
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/VerticalRuleLabels.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/VerticalRuleLabels.js
deleted file mode 100644
index 757e5e3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/VerticalRuleLabels.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.VerticalRuleLabels"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.VerticalRuleLabels"] = true;
-dojo.provide("dijit.form.VerticalRuleLabels");
-
-dojo.require("dijit.form.HorizontalRuleLabels");
-
-dojo.declare("dijit.form.VerticalRuleLabels", dijit.form.HorizontalRuleLabels,
-{
-	// summary:
-	//		Labels for the `dijit.form.VerticalSlider`
-
-	templateString: '<div class="dijitRuleContainer dijitRuleContainerV dijitRuleLabelsContainer dijitRuleLabelsContainerV"></div>',
-
-	_positionPrefix: '<div class="dijitRuleLabelContainer dijitRuleLabelContainerV" style="top:',
-	_labelPrefix: '"><span class="dijitRuleLabel dijitRuleLabelV">',
-
-	_calcPosition: function(pos){
-		// Overrides HorizontalRuleLabel._calcPosition()
-		return 100-pos;
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/VerticalSlider.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/VerticalSlider.js
deleted file mode 100644
index 4512719..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/VerticalSlider.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form.VerticalSlider"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.VerticalSlider"] = true;
-dojo.provide("dijit.form.VerticalSlider");
-
-dojo.require("dijit.form.HorizontalSlider");
-
-dojo.declare(
-	"dijit.form.VerticalSlider",
-	dijit.form.HorizontalSlider,
-{
-	// summary:
-	//		A form widget that allows one to select a value with a vertically draggable handle
-
-	templateString: dojo.cache("dijit.form", "templates/VerticalSlider.html", "<table class=\"dijitReset dijitSlider\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\" dojoAttachEvent=\"onkeypress:_onKeyPress,onkeyup:_onKeyUp\"\n><tbody class=\"dijitReset\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerV\"\n\t\t\t><div class=\"dijitSliderIncrementIconV\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\"><span class=\"dijitSliderButtonInner\">+</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><center><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperV dijitSliderTopBumper dijitSliderTopBumper\" dojoAttachEvent=\"onmousedown:_onClkIncBumper\"></div></center\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td dojoAttachPoint=\"leftDecoration\" class=\"dijitReset\" style=\"text-align:center;height:100%;\"></td\n\t\t><td class=\"dijitReset\" style=\"height:100%;\"\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" ${nameAttrSetting}\n\t\t\t/><center class=\"dijitReset dijitSliderBarContainerV\" waiRole=\"presentation\" dojoAttachPoint=\"sliderBarContainer\"\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitSliderBarV dijitSliderRemainingBar dijitSliderRemainingBarV\" dojoAttachEvent=\"onmousedown:_onBarClick\"><!--#5629--></div\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"progressBar\" class=\"dijitSliderBar dijitSliderBarV dijitSliderProgressBar dijitSliderProgressBarV\" dojoAttachEvent=\"onmousedown:_onBarClick\"\n\t\t\t\t\t><div class=\"dijitSliderMoveable\" style=\"vertical-align:top;\"\n\t\t\t\t\t\t><div dojoAttachPoint=\"sliderHandle,focusNode\" class=\"dijitSliderImageHandle dijitSliderImageHandleV\" dojoAttachEvent=\"onmousedown:_onHandleClick\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"></div\n\t\t\t\t\t></div\n\t\t\t\t></div\n\t\t\t></center\n\t\t></td\n\t\t><td dojoAttachPoint=\"containerNode,rightDecoration\" class=\"dijitReset\" style=\"text-align:center;height:100%;\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><center><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperV dijitSliderBottomBumper dijitSliderBottomBumper\" dojoAttachEvent=\"onmousedown:_onClkDecBumper\"></div></center\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerV\"\n\t\t\t><div class=\"dijitSliderDecrementIconV\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\"><span class=\"dijitSliderButtonInner\">-</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n></tbody></table>\n"),
-	_mousePixelCoord: "pageY",
-	_pixelCount: "h",
-	_startingPixelCoord: "y",
-	_startingPixelCount: "t",
-	_handleOffsetCoord: "top",
-	_progressPixelSize: "height",
-
-	// _descending: Boolean
-	//	   Specifies if the slider values go from high-on-top (true), or low-on-top (false)
-	//	TODO: expose this in 1.2 - the css progress/remaining bar classes need to be reversed
-	_descending: true,
-
-	startup: function(){
-		if(this._started){ return; }
-
-		if(!this.isLeftToRight() && dojo.isMoz){
-			if(this.leftDecoration){this._rtlRectify(this.leftDecoration);}
-			if(this.rightDecoration){this._rtlRectify(this.rightDecoration);}
-		}
-
-		this.inherited(arguments);
-	},
-
-	_isReversed: function(){
-		// summary:
-		//		Overrides HorizontalSlider._isReversed.
-		//		Indicates if values are high on top (with low numbers on the bottom).
-		return this._descending;
-	},
-
-	_rtlRectify: function(decorationNode/*NodeList*/){
-		// summary:
-		//	    Helper function on gecko.
-		//		Rectify children nodes for left/right decoration in rtl case.
-		//		Simply switch the rule and label child for each decoration node.
-		// tags:
-		//		private
-		var childNodes = [];
-		while(decorationNode.firstChild){
-				childNodes.push(decorationNode.firstChild);
-				decorationNode.removeChild(decorationNode.firstChild);
-		}
-		for(var i = childNodes.length-1; i >=0; i--){
-			if(childNodes[i]){
-				decorationNode.appendChild(childNodes[i]);
-			}
-		}
-	}
-});
-
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/_DateTimeTextBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/_DateTimeTextBox.js
deleted file mode 100644
index 6ab13a1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/_DateTimeTextBox.js
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form._DateTimeTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form._DateTimeTextBox"] = true;
-dojo.provide("dijit.form._DateTimeTextBox");
-
-dojo.require("dojo.date");
-dojo.require("dojo.date.locale");
-dojo.require("dojo.date.stamp");
-dojo.require("dijit.form.ValidationTextBox");
-
-/*=====
-dojo.declare(
-	"dijit.form._DateTimeTextBox.__Constraints",
-	[dijit.form.RangeBoundTextBox.__Constraints, dojo.date.locale.__FormatOptions], {
-	// summary:
-	//		Specifies both the rules on valid/invalid values (first/last date/time allowed),
-	//		and also formatting options for how the date/time is displayed.
-	// example:
-	//		To restrict to dates within 2004, displayed in a long format like "December 25, 2005":
-	//	|		{min:'2004-01-01',max:'2004-12-31', formatLength:'long'}
-});
-=====*/
-
-dojo.declare(
-	"dijit.form._DateTimeTextBox",
-	dijit.form.RangeBoundTextBox,
-	{
-		// summary:
-		//		Base class for validating, serializable, range-bound date or time text box.
-
-		// constraints: dijit.form._DateTimeTextBox.__Constraints
-		//		Despite the name, this parameter specifies both constraints on the input
-		//		(including starting/ending dates/times allowed) as well as
-		//		formatting options like whether the date is displayed in long (ex: December 25, 2005)
-		//		or short (ex: 12/25/2005) format.   See `dijit.form._DateTimeTextBox.__Constraints` for details.
-		/*=====
-		constraints: {},
-		======*/
-
-		// Override ValidationTextBox.regExpGen().... we use a reg-ex generating function rather
-		// than a straight regexp to deal with locale  (plus formatting options too?)
-		regExpGen: dojo.date.locale.regexp,
-
-		// datePackage: String
-		//	JavaScript namespace to find calendar routines.  Uses Gregorian calendar routines
-		//	at dojo.date, by default.
-		datePackage: "dojo.date",
-
-		// Override _FormWidget.compare() to work for dates/times
-		compare: dojo.date.compare,
-
-		format: function(/*Date*/ value, /*dojo.date.locale.__FormatOptions*/ constraints){
-			// summary:
-			//		Formats the value as a Date, according to specified locale (second argument)
-			// tags:
-			//		protected
-			if(!value){ return ''; }
-			return this.dateLocaleModule.format(value, constraints);
-		},
-
-		parse: function(/*String*/ value, /*dojo.date.locale.__FormatOptions*/ constraints){
-			// summary:
-			//		Parses as string as a Date, according to constraints
-			// tags:
-			//		protected
-
-			return this.dateLocaleModule.parse(value, constraints) || (this._isEmpty(value) ? null : undefined);	 // Date
-		},
-
-		// Overrides ValidationTextBox.serialize() to serialize a date in canonical ISO format.
-		serialize: function(/*anything*/val, /*Object?*/options){
-			if(val.toGregorian){
-				val = val.toGregorian();
-			}
-			return dojo.date.stamp.toISOString(val, options);
-		},
-
-		// value: Date
-		//		The value of this widget as a JavaScript Date object.  Use attr("value") / attr("value", val) to manipulate.
-		//		When passed to the parser in markup, must be specified according to `dojo.date.stamp.fromISOString`
-		value: new Date(""),	// value.toString()="NaN"
-		_blankValue: null,	// used by filter() when the textbox is blank
-
-		//	popupClass: [protected extension] String
-		//		Name of the popup widget class used to select a date/time.
-		//		Subclasses should specify this.
-		popupClass: "", // default is no popup = text only
-
-
-		// _selector: [protected extension] String
-		//		Specifies constraints.selector passed to dojo.date functions, should be either
-		//		"date" or "time".
-		//		Subclass must specify this.
-		_selector: "",
-
-		constructor: function(/*Object*/args){
-			var dateClass = args.datePackage ? args.datePackage + ".Date" : "Date";
-			this.dateClassObj = dojo.getObject(dateClass, false);
-			this.value = new this.dateClassObj("");
-
-			this.datePackage = args.datePackage || this.datePackage;
-			this.dateLocaleModule = dojo.getObject(this.datePackage + ".locale", false);
-			this.regExpGen = this.dateLocaleModule.regexp;
-		},
-
-		postMixInProperties: function(){
-			this.inherited(arguments);
-
-			if(!this.value || this.value.toString() == dijit.form._DateTimeTextBox.prototype.value.toString()){
-				this.value = null;
-			}
-			var constraints = this.constraints;
-			constraints.selector = this._selector;
-			constraints.fullYear = true; // see #5465 - always format with 4-digit years
-			var fromISO = dojo.date.stamp.fromISOString;
-			if(typeof constraints.min == "string"){ constraints.min = fromISO(constraints.min); }
- 			if(typeof constraints.max == "string"){ constraints.max = fromISO(constraints.max); }
-		},
-
-		_onFocus: function(/*Event*/ evt){
-			// summary:
-			//		open the popup
-			this._open();
-			this.inherited(arguments);
-		},
-
-		_setValueAttr: function(/*Date*/ value, /*Boolean?*/ priorityChange, /*String?*/ formattedValue){
-			// summary:
-			//		Sets the date on this textbox.  Note that `value` must be like a Javascript Date object.
-			if(value instanceof Date && !(this.dateClassObj instanceof Date)){
-				value = new this.dateClassObj(value);
-			}
-
-			this.inherited(arguments);
-			if(this._picker){
-				// #3948: fix blank date on popup only
-				if(!value){value = new this.dateClassObj();}
-				this._picker.attr('value', value);
-			}
-		},
-
-		_open: function(){
-			// summary:
-			//		opens the TimePicker, and sets the onValueSelected value
-
-			if(this.disabled || this.readOnly || !this.popupClass){return;}
-
-			var textBox = this;
-
-			if(!this._picker){
-				var PopupProto = dojo.getObject(this.popupClass, false);
-				this._picker = new PopupProto({
-					onValueSelected: function(value){
-						if(textBox._tabbingAway){
-							delete textBox._tabbingAway;
-						}else{
-							textBox.focus(); // focus the textbox before the popup closes to avoid reopening the popup
-						}
-						setTimeout(dojo.hitch(textBox, "_close"), 1); // allow focus time to take
-
-						// this will cause InlineEditBox and other handlers to do stuff so make sure it's last
-						dijit.form._DateTimeTextBox.superclass._setValueAttr.call(textBox, value, true);
-					},
-					id: this.id + "_popup",
-					lang: textBox.lang,
-					constraints: textBox.constraints,
-
-					datePackage: textBox.datePackage,
-
-					isDisabledDate: function(/*Date*/ date){
-						// summary:
-						// 	disables dates outside of the min/max of the _DateTimeTextBox
-						var compare = dojo.date.compare;
-						var constraints = textBox.constraints;
-						return constraints && (constraints.min && (compare(constraints.min, date, textBox._selector) > 0) ||
-							(constraints.max && compare(constraints.max, date, textBox._selector) < 0));
-					}
-				});
-				this._picker.attr('value', this.attr('value') || new this.dateClassObj());
-			}
-			if(!this._opened){
-				// Open drop down.  Align left sides of input box and drop down, even in RTL mode,
-				// otherwise positioning thrown off when the drop down width is changed in marginBox call below (#10676)
-				dijit.popup.open({
-					parent: this,
-					popup: this._picker,
-					orient: {'BL':'TL', 'TL':'BL'},
-					around: this.domNode,
-					onCancel: dojo.hitch(this, this._close),
-					onClose: function(){ textBox._opened=false; }
-				});
-				this._opened=true;
-			}
-
-			dojo.marginBox(this._picker.domNode,{ w:this.domNode.offsetWidth });
-		},
-
-		_close: function(){
-			if(this._opened){
-				dijit.popup.close(this._picker);
-				this._opened=false;
-			}
-		},
-
-		_onBlur: function(){
-			// summary:
-			//		Called magically when focus has shifted away from this widget and it's dropdown
-			this._close();
-			if(this._picker){
-				// teardown so that constraints will be rebuilt next time (redundant reference: #6002)
-				this._picker.destroy();
-				delete this._picker;
-			}
-			this.inherited(arguments);
-			// don't focus on <input>.  the user has explicitly focused on something else.
-		},
-
-		_getDisplayedValueAttr: function(){
-			return this.textbox.value;
-		},
-
-		_setDisplayedValueAttr: function(/*String*/ value, /*Boolean?*/ priorityChange){
-			this._setValueAttr(this.parse(value, this.constraints), priorityChange, value);
-		},
-
-		destroy: function(){
-			if(this._picker){
-				this._picker.destroy();
-				delete this._picker;
-			}
-			this.inherited(arguments);
-		},
-
-		postCreate: function(){
-			this.inherited(arguments);
-			this.connect(this.focusNode, 'onkeypress', this._onKeyPress);
-			this.connect(this.focusNode, 'onclick', this._open);
-		},
-
-		_onKeyPress: function(/*Event*/ e){
-			// summary:
-			//		Handler for keypress events
-
-			var p = this._picker, dk = dojo.keys;
-			// Handle the key in the picker, if it has a handler.  If the handler
-			// returns false, then don't handle any other keys.
-			if(p && this._opened && p.handleKey){
-				if(p.handleKey(e) === false){ return; }
-			}
-			if(this._opened && e.charOrCode == dk.ESCAPE && !(e.shiftKey || e.ctrlKey || e.altKey || e.metaKey)){
-				this._close();
-				dojo.stopEvent(e);
-			}else if(!this._opened && e.charOrCode == dk.DOWN_ARROW){
-				this._open();
-				dojo.stopEvent(e);
-			}else if(e.charOrCode === dk.TAB){
-				this._tabbingAway = true;
-			}else if(this._opened && (e.keyChar || e.charOrCode === dk.BACKSPACE || e.charOrCode == dk.DELETE)){
-				// Replace the element - but do it after a delay to allow for
-				// filtering to occur
-				setTimeout(dojo.hitch(this, function(){
-					dijit.placeOnScreenAroundElement(p.domNode.parentNode, this.domNode, {'BL':'TL', 'TL':'BL'}, p.orient ? dojo.hitch(p, "orient") : null);
-				}), 1);
-			}
-		}
-	}
-);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/_FormMixin.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/_FormMixin.js
deleted file mode 100644
index 0e7c7d9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/_FormMixin.js
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form._FormMixin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form._FormMixin"] = true;
-dojo.provide("dijit.form._FormMixin");
-
-dojo.declare("dijit.form._FormMixin", null,
-	{
-	// summary:
-	//		Mixin for containers of form widgets (i.e. widgets that represent a single value
-	//		and can be children of a <form> node or dijit.form.Form widget)
-	// description:
-	//		Can extract all the form widgets
-	//		values and combine them into a single javascript object, or alternately
-	//		take such an object and set the values for all the contained
-	//		form widgets
-
-/*=====
-    // value: Object
-	//		Name/value hash for each form element.
-	//		If there are multiple elements w/the same name, value is an array,
-	//		unless they are radio buttons in which case value is a scalar since only
-	//		one can be checked at a time.
-	//
-	//		If the name is a dot separated list (like a.b.c.d), it's a nested structure.
-	//		Only works on widget form elements.
-	// example:
-	//	| { name: "John Smith", interests: ["sports", "movies"] }
-=====*/
-
-	//	TODO:
-	//	* Repeater
-	//	* better handling for arrays.  Often form elements have names with [] like
-	//	* people[3].sex (for a list of people [{name: Bill, sex: M}, ...])
-	//
-	//
-
-		reset: function(){
-			dojo.forEach(this.getDescendants(), function(widget){
-				if(widget.reset){
-					widget.reset();
-				}
-			});
-		},
-
-		validate: function(){
-			// summary:
-			//		returns if the form is valid - same as isValid - but
-			//			provides a few additional (ui-specific) features.
-			//			1 - it will highlight any sub-widgets that are not
-			//				valid
-			//			2 - it will call focus() on the first invalid
-			//				sub-widget
-			var didFocus = false;
-			return dojo.every(dojo.map(this.getDescendants(), function(widget){
-				// Need to set this so that "required" widgets get their
-				// state set.
-				widget._hasBeenBlurred = true;
-				var valid = widget.disabled || !widget.validate || widget.validate();
-				if(!valid && !didFocus){
-					// Set focus of the first non-valid widget
-					dijit.scrollIntoView(widget.containerNode || widget.domNode);
-					widget.focus();
-					didFocus = true;
-				}
-	 			return valid;
-	 		}), function(item){ return item; });
-		},
-
-		setValues: function(val){
-			dojo.deprecated(this.declaredClass+"::setValues() is deprecated. Use attr('value', val) instead.", "", "2.0");
-			return this.attr('value', val);
-		},
-		_setValueAttr: function(/*object*/obj){
-			// summary:
-			//		Fill in form values from according to an Object (in the format returned by attr('value'))
-
-			// generate map from name --> [list of widgets with that name]
-			var map = { };
-			dojo.forEach(this.getDescendants(), function(widget){
-				if(!widget.name){ return; }
-				var entry = map[widget.name] || (map[widget.name] = [] );
-				entry.push(widget);
-			});
-
-			for(var name in map){
-				if(!map.hasOwnProperty(name)){
-					continue;
-				}
-				var widgets = map[name],						// array of widgets w/this name
-					values = dojo.getObject(name, false, obj);	// list of values for those widgets
-
-				if(values === undefined){
-					continue;
-				}
-				if(!dojo.isArray(values)){
-					values = [ values ];
-				}
-				if(typeof widgets[0].checked == 'boolean'){
-					// for checkbox/radio, values is a list of which widgets should be checked
-					dojo.forEach(widgets, function(w, i){
-						w.attr('value', dojo.indexOf(values, w.value) != -1);
-					});
-				}else if(widgets[0].multiple){
-					// it takes an array (e.g. multi-select)
-					widgets[0].attr('value', values);
-				}else{
-					// otherwise, values is a list of values to be assigned sequentially to each widget
-					dojo.forEach(widgets, function(w, i){
-						w.attr('value', values[i]);
-					});
-				}
-			}
-
-			/***
-			 * 	TODO: code for plain input boxes (this shouldn't run for inputs that are part of widgets)
-
-			dojo.forEach(this.containerNode.elements, function(element){
-				if(element.name == ''){return};	// like "continue"
-				var namePath = element.name.split(".");
-				var myObj=obj;
-				var name=namePath[namePath.length-1];
-				for(var j=1,len2=namePath.length;j<len2;++j){
-					var p=namePath[j - 1];
-					// repeater support block
-					var nameA=p.split("[");
-					if(nameA.length > 1){
-						if(typeof(myObj[nameA[0]]) == "undefined"){
-							myObj[nameA[0]]=[ ];
-						} // if
-
-						nameIndex=parseInt(nameA[1]);
-						if(typeof(myObj[nameA[0]][nameIndex]) == "undefined"){
-							myObj[nameA[0]][nameIndex] = { };
-						}
-						myObj=myObj[nameA[0]][nameIndex];
-						continue;
-					} // repeater support ends
-
-					if(typeof(myObj[p]) == "undefined"){
-						myObj=undefined;
-						break;
-					};
-					myObj=myObj[p];
-				}
-
-				if(typeof(myObj) == "undefined"){
-					return;		// like "continue"
-				}
-				if(typeof(myObj[name]) == "undefined" && this.ignoreNullValues){
-					return;		// like "continue"
-				}
-
-				// TODO: widget values (just call attr('value', ...) on the widget)
-
-				// TODO: maybe should call dojo.getNodeProp() instead
-				switch(element.type){
-					case "checkbox":
-						element.checked = (name in myObj) &&
-							dojo.some(myObj[name], function(val){ return val == element.value; });
-						break;
-					case "radio":
-						element.checked = (name in myObj) && myObj[name] == element.value;
-						break;
-					case "select-multiple":
-						element.selectedIndex=-1;
-						dojo.forEach(element.options, function(option){
-							option.selected = dojo.some(myObj[name], function(val){ return option.value == val; });
-						});
-						break;
-					case "select-one":
-						element.selectedIndex="0";
-						dojo.forEach(element.options, function(option){
-							option.selected = option.value == myObj[name];
-						});
-						break;
-					case "hidden":
-					case "text":
-					case "textarea":
-					case "password":
-						element.value = myObj[name] || "";
-						break;
-				}
-	  		});
-	  		*/
-		},
-
-		getValues: function(){
-			dojo.deprecated(this.declaredClass+"::getValues() is deprecated. Use attr('value') instead.", "", "2.0");
-			return this.attr('value');
-		},
-		_getValueAttr: function(){
-			// summary:
-			// 		Returns Object representing form values.
-			// description:
-			//		Returns name/value hash for each form element.
-			//		If there are multiple elements w/the same name, value is an array,
-			//		unless they are radio buttons in which case value is a scalar since only
-			//		one can be checked at a time.
-			//
-			//		If the name is a dot separated list (like a.b.c.d), creates a nested structure.
-			//		Only works on widget form elements.
-			// example:
-			//		| { name: "John Smith", interests: ["sports", "movies"] }
-
-			// get widget values
-			var obj = { };
-			dojo.forEach(this.getDescendants(), function(widget){
-				var name = widget.name;
-				if(!name || widget.disabled){ return; }
-
-				// Single value widget (checkbox, radio, or plain <input> type widget
-				var value = widget.attr('value');
-
-				// Store widget's value(s) as a scalar, except for checkboxes which are automatically arrays
-				if(typeof widget.checked == 'boolean'){
-					if(/Radio/.test(widget.declaredClass)){
-						// radio button
-						if(value !== false){
-							dojo.setObject(name, value, obj);
-						}else{
-							// give radio widgets a default of null
-							value = dojo.getObject(name, false, obj);
-							if(value === undefined){
-								dojo.setObject(name, null, obj);
-							}
-						}
-					}else{
-						// checkbox/toggle button
-						var ary=dojo.getObject(name, false, obj);
-						if(!ary){
-							ary=[];
-							dojo.setObject(name, ary, obj);
-						}
-						if(value !== false){
-							ary.push(value);
-						}
-					}
-				}else{
-					var prev=dojo.getObject(name, false, obj);
-					if(typeof prev != "undefined"){
-						if(dojo.isArray(prev)){
-							prev.push(value);
-						}else{
-							dojo.setObject(name, [prev, value], obj);
-						}
-					}else{
-						// unique name
-						dojo.setObject(name, value, obj);
-					}
-				}
-			});
-
-			/***
-			 * code for plain input boxes (see also dojo.formToObject, can we use that instead of this code?
-			 * but it doesn't understand [] notation, presumably)
-			var obj = { };
-			dojo.forEach(this.containerNode.elements, function(elm){
-				if(!elm.name)	{
-					return;		// like "continue"
-				}
-				var namePath = elm.name.split(".");
-				var myObj=obj;
-				var name=namePath[namePath.length-1];
-				for(var j=1,len2=namePath.length;j<len2;++j){
-					var nameIndex = null;
-					var p=namePath[j - 1];
-					var nameA=p.split("[");
-					if(nameA.length > 1){
-						if(typeof(myObj[nameA[0]]) == "undefined"){
-							myObj[nameA[0]]=[ ];
-						} // if
-						nameIndex=parseInt(nameA[1]);
-						if(typeof(myObj[nameA[0]][nameIndex]) == "undefined"){
-							myObj[nameA[0]][nameIndex] = { };
-						}
-					} else if(typeof(myObj[nameA[0]]) == "undefined"){
-						myObj[nameA[0]] = { }
-					} // if
-
-					if(nameA.length == 1){
-						myObj=myObj[nameA[0]];
-					} else{
-						myObj=myObj[nameA[0]][nameIndex];
-					} // if
-				} // for
-
-				if((elm.type != "select-multiple" && elm.type != "checkbox" && elm.type != "radio") || (elm.type == "radio" && elm.checked)){
-					if(name == name.split("[")[0]){
-						myObj[name]=elm.value;
-					} else{
-						// can not set value when there is no name
-					}
-				} else if(elm.type == "checkbox" && elm.checked){
-					if(typeof(myObj[name]) == 'undefined'){
-						myObj[name]=[ ];
-					}
-					myObj[name].push(elm.value);
-				} else if(elm.type == "select-multiple"){
-					if(typeof(myObj[name]) == 'undefined'){
-						myObj[name]=[ ];
-					}
-					for(var jdx=0,len3=elm.options.length; jdx<len3; ++jdx){
-						if(elm.options[jdx].selected){
-							myObj[name].push(elm.options[jdx].value);
-						}
-					}
-				} // if
-				name=undefined;
-			}); // forEach
-			***/
-			return obj;
-		},
-
-		// TODO: ComboBox might need time to process a recently input value.  This should be async?
-	 	isValid: function(){
-	 		// summary:
-	 		//		Returns true if all of the widgets are valid
-
-	 		// This also populate this._invalidWidgets[] array with list of invalid widgets...
-	 		// TODO: put that into separate function?   It's confusing to have that as a side effect
-	 		// of a method named isValid().
-
-			this._invalidWidgets = dojo.filter(this.getDescendants(), function(widget){
-				return !widget.disabled && widget.isValid && !widget.isValid();
-	 		});
-			return !this._invalidWidgets.length;
-		},
-
-
-		onValidStateChange: function(isValid){
-			// summary:
-			//		Stub function to connect to if you want to do something
-			//		(like disable/enable a submit button) when the valid
-			//		state changes on the form as a whole.
-		},
-
-		_widgetChange: function(widget){
-			// summary:
-			//		Connected to a widget's onChange function - update our
-			//		valid state, if needed.
-			var isValid = this._lastValidState;
-			if(!widget || this._lastValidState === undefined){
-				// We have passed a null widget, or we haven't been validated
-				// yet - let's re-check all our children
-				// This happens when we connect (or reconnect) our children
-				isValid = this.isValid();
-				if(this._lastValidState === undefined){
-					// Set this so that we don't fire an onValidStateChange
-					// the first time
-					this._lastValidState = isValid;
-				}
-			}else if(widget.isValid){
-				this._invalidWidgets = dojo.filter(this._invalidWidgets || [], function(w){
-					return (w != widget);
-				}, this);
-				if(!widget.isValid() && !widget.attr("disabled")){
-					this._invalidWidgets.push(widget);
-				}
-				isValid = (this._invalidWidgets.length === 0);
-			}
-			if(isValid !== this._lastValidState){
-				this._lastValidState = isValid;
-				this.onValidStateChange(isValid);
-			}
-		},
-
-		connectChildren: function(){
-			// summary:
-			//		Connects to the onChange function of all children to
-			//		track valid state changes.  You can call this function
-			//		directly, ex. in the event that you programmatically
-			//		add a widget to the form *after* the form has been
-			//		initialized.
-			dojo.forEach(this._changeConnections, dojo.hitch(this, "disconnect"));
-			var _this = this;
-
-			// we connect to validate - so that it better reflects the states
-			// of the widgets - also, we only connect if it has a validate
-			// function (to avoid too many unneeded connections)
-			var conns = this._changeConnections = [];
-			dojo.forEach(dojo.filter(this.getDescendants(),
-				function(item){ return item.validate; }
-			),
-			function(widget){
-				// We are interested in whenever the widget is validated - or
-				// whenever the disabled attribute on that widget is changed
-				conns.push(_this.connect(widget, "validate",
-									dojo.hitch(_this, "_widgetChange", widget)));
-				conns.push(_this.connect(widget, "_setDisabledAttr",
-									dojo.hitch(_this, "_widgetChange", widget)));
-			});
-
-			// Call the widget change function to update the valid state, in
-			// case something is different now.
-			this._widgetChange(null);
-		},
-
-		startup: function(){
-			this.inherited(arguments);
-			// Initialize our valid state tracking.  Needs to be done in startup
-			// because it's not guaranteed that our children are initialized
-			// yet.
-			this._changeConnections = [];
-			this.connectChildren();
-		}
-	});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/_FormSelectWidget.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/_FormSelectWidget.js
deleted file mode 100644
index cae85e0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/_FormSelectWidget.js
+++ /dev/null
@@ -1,583 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form._FormSelectWidget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form._FormSelectWidget"] = true;
-dojo.provide("dijit.form._FormSelectWidget");
-
-dojo.require("dijit.form._FormWidget");
-dojo.require("dojo.data.util.sorter");
-
-/*=====
-dijit.form.__SelectOption = function(){
-	// value: String
-	//		The value of the option.  Setting to empty (or missing) will
-	//		place a separator at that location
-	// label: String
-	//		The label for our option.  It can contain html tags.
-	//  selected: Boolean
-	//		Whether or not we are a selected option
-	// disabled: Boolean
-	//		Whether or not this specific option is disabled
-	this.value = value;
-	this.label = label;
-	this.selected = selected;
-	this.disabled = disabled;
-}
-=====*/
-
-dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
-	// summary:
-	//		Extends _FormValueWidget in order to provide "select-specific"
-	//		values - i.e., those values that are unique to <select> elements.
-	//		This also provides the mechanism for reading the elements from
-	//		a store, if desired.
-
-	// multiple: Boolean
-	//		Whether or not we are multi-valued
-	multiple: false,
-
-	// options: dijit.form.__SelectOption[]
-	//		The set of options for our select item.  Roughly corresponds to
-	//      the html <option> tag.
-	options: null,
-
-	// store: dojo.data.api.Identity
-	//		A store which, at the very least impelements dojo.data.api.Identity
-	//		to use for getting our list of options - rather than reading them
-	//		from the <option> html tags.
-	store: null,
-
-	// query: object
-	//		A query to use when fetching items from our store
-	query: null,
-
-	// queryOptions: object
-	//		Query options to use when fetching from the store
-	queryOptions: null,
-
-	// onFetch: Function
-	//		A callback to do with an onFetch - but before any items are actually
-	//		iterated over (i.e. to filter even futher what you want to add)
-	onFetch: null,
-
-	// sortByLabel: boolean
-	//		Flag to sort the options returned from a store by the label of
-	//		the store.
-	sortByLabel: true,
-
-
-	// loadChildrenOnOpen: boolean
-	//		By default loadChildren is called when the items are fetched from the
-	//		store.  This property allows delaying loadChildren (and the creation
-	//		of the options/menuitems) until the user opens the click the button.
-	//		dropdown
-	loadChildrenOnOpen: false,
-
-	getOptions: function(/* anything */ valueOrIdx){
-		// summary:
-		//		Returns a given option (or options).
-		// valueOrIdx:
-		//		If passed in as a string, that string is used to look up the option
-		//		in the array of options - based on the value property.
-		//		(See dijit.form.__SelectOption).
-		//
-		//		If passed in a number, then the option with the given index (0-based)
-		//		within this select will be returned.
-		//
-		//		If passed in a dijit.form.__SelectOption, the same option will be
-		//		returned if and only if it exists within this select.
-		//
-		//		If passed an array, then an array will be returned with each element
-		//		in the array being looked up.
-		//
-		//		If not passed a value, then all options will be returned
-		//
-		// returns:
-		//		The option corresponding with the given value or index.  null
-		//		is returned if any of the following are true:
-		//			- A string value is passed in which doesn't exist
-		//			- An index is passed in which is outside the bounds of the array of options
-		//			- A dijit.form.__SelectOption is passed in which is not a part of the select
-
-		// NOTE: the compare for passing in a dijit.form.__SelectOption checks
-		//		if the value property matches - NOT if the exact option exists
-		// NOTE: if passing in an array, null elements will be placed in the returned
-		//		array when a value is not found.
-		var lookupValue = valueOrIdx, opts = this.options || [], l = opts.length;
-
-		if(lookupValue === undefined){
-			return opts; // dijit.form.__SelectOption[]
-		}
-		if(dojo.isArray(lookupValue)){
-			return dojo.map(lookupValue, "return this.getOptions(item);", this); // dijit.form.__SelectOption[]
-		}
-		if(dojo.isObject(valueOrIdx)){
-			// We were passed an option - so see if it's in our array (directly),
-			// and if it's not, try and find it by value.
-			if(!dojo.some(this.options, function(o, idx){
-				if(o === lookupValue ||
-					(o.value && o.value === lookupValue.value)){
-					lookupValue = idx;
-					return true;
-				}
-				return false;
-			})){
-				lookupValue = -1;
-			}
-		}
-		if(typeof lookupValue == "string"){
-			for(var i=0; i<l; i++){
-				if(opts[i].value === lookupValue){
-					lookupValue = i;
-					break;
-				}
-			}
-		}
-		if(typeof lookupValue == "number" && lookupValue >= 0 && lookupValue < l){
-			return this.options[lookupValue] // dijit.form.__SelectOption
-		}
-		return null; // null
-	},
-
-	addOption: function(/* dijit.form.__SelectOption, dijit.form.__SelectOption[] */ option){
-		// summary:
-		//		Adds an option or options to the end of the select.  If value
-		//		of the option is empty or missing, a separator is created instead.
-		//		Passing in an array of options will yield slightly better performance
-		//		since the children are only loaded once.
-		if(!dojo.isArray(option)){ option = [option]; }
-		dojo.forEach(option, function(i){
-			if(i && dojo.isObject(i)){
-				this.options.push(i);
-			}
-		}, this);
-		this._loadChildren();
-	},
-
-	removeOption: function(/* string, dijit.form.__SelectOption, number, or array */ valueOrIdx){
-		// summary:
-		//		Removes the given option or options.  You can remove by string
-		//		(in which case the value is removed), number (in which case the
-		//		index in the options array is removed), or select option (in
-		//		which case, the select option with a matching value is removed).
-		//		You can also pass in an array of those values for a slightly
-		//		better performance since the children are only loaded once.
-		if(!dojo.isArray(valueOrIdx)){ valueOrIdx = [valueOrIdx]; }
-		var oldOpts = this.getOptions(valueOrIdx);
-		dojo.forEach(oldOpts, function(i){
-			// We can get null back in our array - if our option was not found.  In
-			// that case, we don't want to blow up...
-			if(i){
-				this.options = dojo.filter(this.options, function(node, idx){
-					return (node.value !== i.value);
-				});
-				this._removeOptionItem(i);
-			}
-		}, this);
-		this._loadChildren();
-	},
-
-	updateOption: function(/* dijit.form.__SelectOption, dijit.form.__SelectOption[] */ newOption){
-		// summary:
-		//		Updates the values of the given option.  The option to update
-		//		is matched based on the value of the entered option.  Passing
-		//		in an array of new options will yeild better performance since
-		//		the children will only be loaded once.
-		if(!dojo.isArray(newOption)){ newOption = [newOption]; }
-		dojo.forEach(newOption, function(i){
-			var oldOpt = this.getOptions(i), k;
-			if(oldOpt){
-				for(k in i){ oldOpt[k] = i[k]; }
-			}
-		}, this);
-		this._loadChildren();
-	},
-
-	setStore: function(/* dojo.data.api.Identity */ store,
-						/* anything? */ selectedValue,
-						/* Object? */ fetchArgs){
-		// summary:
-		//		Sets the store you would like to use with this select widget.
-		//		The selected value is the value of the new store to set.  This
-		//		function returns the original store, in case you want to reuse
-		//		it or something.
-		// store: dojo.data.api.Identity
-		//		The store you would like to use - it MUST implement Identity,
-		//		and MAY implement Notification.
-		// selectedValue: anything?
-		//		The value that this widget should set itself to *after* the store
-		//		has been loaded
-		// fetchArgs: Object?
-		//		The arguments that will be passed to the store's fetch() function
-		var oStore = this.store;
-		fetchArgs = fetchArgs || {};
-		if(oStore !== store){
-			// Our store has changed, so update our notifications
-			dojo.forEach(this._notifyConnections || [], dojo.disconnect);
-			delete this._notifyConnections;
-			if(store && store.getFeatures()["dojo.data.api.Notification"]){
-				this._notifyConnections = [
-					dojo.connect(store, "onNew", this, "_onNewItem"),
-					dojo.connect(store, "onDelete", this, "_onDeleteItem"),
-					dojo.connect(store, "onSet", this, "_onSetItem")
-				];
-			}
-			this.store = store;
-		}
-
-		// Turn off change notifications while we make all these changes
-		this._onChangeActive = false;
-
-		// Remove existing options (if there are any)
-		if(this.options && this.options.length){
-			this.removeOption(this.options);
-		}
-
-		// Add our new options
-		if(store){
-			var cb = function(items){
-				if(this.sortByLabel && !fetchArgs.sort && items.length){
-					items.sort(dojo.data.util.sorter.createSortFunction([{
-						attribute: store.getLabelAttributes(items[0])[0]
-					}], store));
-				}
-
-				if(fetchArgs.onFetch){
-					items = fetchArgs.onFetch(items);
-				}
-				// TODO: Add these guys as a batch, instead of separately
-				dojo.forEach(items, function(i){
-					this._addOptionForItem(i);
-				}, this);
-
-				// Set our value (which might be undefined), and then tweak
-				// it to send a change event with the real value
-				this._loadingStore = false;
-				this.attr("value", (("_pendingValue" in this) ? this._pendingValue : selectedValue));
-				delete this._pendingValue;
-
-				if(!this.loadChildrenOnOpen){
-					this._loadChildren();
-				}else{
-					this._pseudoLoadChildren(items);
-				}
-				this._fetchedWith = opts;
-				this._lastValueReported = this.multiple ? [] : null;
-				this._onChangeActive = true;
-				this.onSetStore();
-				this._handleOnChange(this.value);
-			};
-			var opts = dojo.mixin({onComplete:cb, scope: this}, fetchArgs);
-			this._loadingStore = true;
-			store.fetch(opts);
-		}else{
-			delete this._fetchedWith;
-		}
-		return oStore;	// dojo.data.api.Identity
-	},
-
-	_setValueAttr: function(/*anything*/ newValue, /*Boolean, optional*/ priorityChange){
-		// summary:
-		//		set the value of the widget.
-		//		If a string is passed, then we set our value from looking it up.
-		if(this._loadingStore){
-			// Our store is loading - so save our value, and we'll set it when
-			// we're done
-			this._pendingValue = newValue;
-			return;
-		}
-		var opts = this.getOptions() || [];
-		if(!dojo.isArray(newValue)){
-			newValue = [newValue];
-		}
-		dojo.forEach(newValue, function(i, idx){
-			if(!dojo.isObject(i)){
-				i = i + "";
-			}
-			if(typeof i === "string"){
-				newValue[idx] = dojo.filter(opts, function(node){
-					return node.value === i;
-				})[0] || {value: "", label: ""};
-			}
-		}, this);
-
-		// Make sure some sane default is set
-		newValue = dojo.filter(newValue, function(i){ return i && i.value; });
-		if(!this.multiple && (!newValue[0] || !newValue[0].value) && opts.length){
-			newValue[0] = opts[0];
-		}
-		dojo.forEach(opts, function(i){
-			i.selected = dojo.some(newValue, function(v){ return v.value === i.value; });
-		});
-		var val = dojo.map(newValue, function(i){ return i.value; }),
-			disp = dojo.map(newValue, function(i){ return i.label; });
-
-		this.value = this.multiple ? val : val[0];
-		this._setDisplay(this.multiple ? disp : disp[0]);
-		this._updateSelection();
-		this._handleOnChange(this.value, priorityChange);
-	},
-
-	_getDisplayedValueAttr: function(){
-		// summary:
-		//		returns the displayed value of the widget
-		var val = this.attr("value");
-		if(!dojo.isArray(val)){
-			val = [val];
-		}
-		var ret = dojo.map(this.getOptions(val), function(v){
-			if(v && "label" in v){
-				return v.label;
-			}else if(v){
-				return v.value;
-			}
-			return null;
-		}, this);
-		return this.multiple ? ret : ret[0];
-	},
-
-	_getValueDeprecated: false, // remove when _FormWidget:getValue is removed
-	getValue: function(){
-		// summary:
-		//		get the value of the widget.
-		return this._lastValue;
-	},
-
-	undo: function(){
-		// summary:
-		//		restore the value to the last value passed to onChange
-		this._setValueAttr(this._lastValueReported, false);
-	},
-
-	_loadChildren: function(){
-		// summary:
-		//		Loads the children represented by this widget's options.
-		//		reset the menu to make it "populatable on the next click
-		if(this._loadingStore){ return; }
-		dojo.forEach(this._getChildren(), function(child){
-			child.destroyRecursive();
-		});
-		// Add each menu item
-		dojo.forEach(this.options, this._addOptionItem, this);
-
-		// Update states
-		this._updateSelection();
-	},
-
-	_updateSelection: function(){
-		// summary:
-		//		Sets the "selected" class on the item for styling purposes
-		this.value = this._getValueFromOpts();
-		var val = this.value;
-		if(!dojo.isArray(val)){
-			val = [val];
-		}
-		if(val && val[0]){
-			dojo.forEach(this._getChildren(), function(child){
-				var isSelected = dojo.some(val, function(v){
-					return child.option && (v === child.option.value);
-				});
-				dojo.toggleClass(child.domNode, this.baseClass + "SelectedOption", isSelected);
-				dijit.setWaiState(child.domNode, "selected", isSelected);
-			}, this);
-		}
-		this._handleOnChange(this.value);
-	},
-
-	_getValueFromOpts: function(){
-		// summary:
-		//		Returns the value of the widget by reading the options for
-		//		the selected flag
-		var opts = this.getOptions() || [];
-		if(!this.multiple && opts.length){
-			// Mirror what a select does - choose the first one
-			var opt = dojo.filter(opts, function(i){
-				return i.selected;
-			})[0];
-			if(opt && opt.value){
-				return opt.value
-			}else{
-				opts[0].selected = true;
-				return opts[0].value;
-			}
-		}else if(this.multiple){
-			// Set value to be the sum of all selected
-			return dojo.map(dojo.filter(opts, function(i){
-				return i.selected;
-			}), function(i){
-				return i.value;
-			}) || [];
-		}
-		return "";
-	},
-
-	// Internal functions to call when we have store notifications come in
-	_onNewItem: function(/* item */ item, /* Object? */ parentInfo){
-		if(!parentInfo || !parentInfo.parent){
-			// Only add it if we are top-level
-			this._addOptionForItem(item);
-		}
-	},
-	_onDeleteItem: function(/* item */ item){
-		var store = this.store;
-		this.removeOption(store.getIdentity(item));
-	},
-	_onSetItem: function(/* item */ item){
-		this.updateOption(this._getOptionObjForItem(item));
-	},
-
-	_getOptionObjForItem: function(item){
-		// summary:
-		//		Returns an option object based off the given item.  The "value"
-		//		of the option item will be the identity of the item, the "label"
-		//		of the option will be the label of the item.  If the item contains
-		//		children, the children value of the item will be set
-		var store = this.store, label = store.getLabel(item),
-			value = (label ? store.getIdentity(item) : null);
-		return {value: value, label: label, item:item}; // dijit.form.__SelectOption
-	},
-
-	_addOptionForItem: function(/* item */ item){
-		// summary:
-		//		Creates (and adds) the option for the given item
-		var store = this.store;
-		if(!store.isItemLoaded(item)){
-			// We are not loaded - so let's load it and add later
-			store.loadItem({item: item, onComplete: function(i){
-				this._addOptionForItem(item);
-			},
-			scope: this});
-			return;
-		}
-		var newOpt = this._getOptionObjForItem(item);
-		this.addOption(newOpt);
-	},
-
-	constructor: function(/* Object */ keywordArgs){
-		// summary:
-		//		Saves off our value, if we have an initial one set so we
-		//		can use it if we have a store as well (see startup())
-		this._oValue = (keywordArgs || {}).value || null;
-	},
-
-	_fillContent: function(){
-		// summary:
-		//		Loads our options and sets up our dropdown correctly.  We
-		//		don't want any content, so we don't call any inherit chain
-		//		function.
-		var opts = this.options;
-		if(!opts){
-			opts = this.options = this.srcNodeRef ? dojo.query(">",
-						this.srcNodeRef).map(function(node){
-							if(node.getAttribute("type") === "separator"){
-								return { value: "", label: "", selected: false, disabled: false };
-							}
-							return { value: node.getAttribute("value"),
-										label: String(node.innerHTML),
-										selected: node.getAttribute("selected") || false,
-										disabled: node.getAttribute("disabled") || false };
-						}, this) : [];
-		}
-		if(!this.value){
-			this.value = this._getValueFromOpts();
-		}else if(this.multiple && typeof this.value == "string"){
-			this.value = this.value.split(",");
-		}
-	},
-
-	postCreate: function(){
-		// summary:
-		//		sets up our event handling that we need for functioning
-		//		as a select
-		dojo.setSelectable(this.focusNode, false);
-		this.inherited(arguments);
-
-		// Make our event connections for updating state
-		this.connect(this, "onChange", "_updateSelection");
-		this.connect(this, "startup", "_loadChildren");
-
-		this._setValueAttr(this.value, null);
-	},
-
-	startup: function(){
-		// summary:
-		//		Connects in our store, if we have one defined
-		this.inherited(arguments);
-		var store = this.store, fetchArgs = {};
-		dojo.forEach(["query", "queryOptions", "onFetch"], function(i){
-			if(this[i]){
-				fetchArgs[i] = this[i];
-			}
-			delete this[i];
-		}, this);
-		if(store && store.getFeatures()["dojo.data.api.Identity"]){
-			// Temporarily set our store to null so that it will get set
-			// and connected appropriately
-			this.store = null;
-			this.setStore(store, this._oValue, fetchArgs);
-		}
-	},
-
-	destroy: function(){
-		// summary:
-		//		Clean up our connections
-		dojo.forEach(this._notifyConnections || [], dojo.disconnect);
-		this.inherited(arguments);
-	},
-
-	_addOptionItem: function(/* dijit.form.__SelectOption */ option){
-		// summary:
-		//		User-overridable function which, for the given option, adds an
-		//		item to the select.  If the option doesn't have a value, then a
-		//		separator is added in that place.  Make sure to store the option
-		//		in the created option widget.
-	},
-
-	_removeOptionItem: function(/* dijit.form.__SelectOption */ option){
-		// summary:
-		//		User-overridable function which, for the given option, removes
-		//		its item from the select.
-	},
-
-	_setDisplay: function(/*String or String[]*/ newDisplay){
-		// summary:
-		//		Overridable function which will set the display for the
-		//		widget.  newDisplay is either a string (in the case of
-		//		single selects) or array of strings (in the case of multi-selects)
-	},
-
-	_getChildren: function(){
-		// summary:
-		//		Overridable function to return the children that this widget contains.
-		return [];
-	},
-
-	_getSelectedOptionsAttr: function(){
-		// summary:
-		//		hooks into this.attr to provide a mechanism for getting the
-		//		option items for the current value of the widget.
-		return this.getOptions(this.attr("value"));
-	},
-
-	_pseudoLoadChildren: function(/* item[] */ items){
-		// summary:
-		//		a function that will "fake" loading children, if needed, and
-		//		if we have set to not load children until the widget opens.
-		// items:
-		//		An array of items that will be loaded, when needed
-	},
-
-	onSetStore: function(){
-		// summary:
-		//		a function that can be connected to in order to receive a
-		//		notification that the store has finished loading and all options
-		//		from that store are available
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/_FormWidget.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/_FormWidget.js
deleted file mode 100644
index fc00da7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/_FormWidget.js
+++ /dev/null
@@ -1,470 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form._FormWidget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form._FormWidget"] = true;
-dojo.provide("dijit.form._FormWidget");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._Templated");
-
-dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated],
-	{
-	// summary:
-	//		Base class for widgets corresponding to native HTML elements such as <checkbox> or <button>,
-	//		which can be children of a <form> node or a `dijit.form.Form` widget.
-	//
-	// description:
-	//		Represents a single HTML element.
-	//		All these widgets should have these attributes just like native HTML input elements.
-	//		You can set them during widget construction or afterwards, via `dijit._Widget.attr`.
-	//
-	//		They also share some common methods.
-
-	// baseClass: [protected] String
-	//		Root CSS class of the widget (ex: dijitTextBox), used to add CSS classes of widget
-	//		(ex: "dijitTextBox dijitTextBoxInvalid dijitTextBoxFocused dijitTextBoxInvalidFocused")
-	//		See _setStateClass().
-	baseClass: "",
-
-	// name: String
-	//		Name used when submitting form; same as "name" attribute or plain HTML elements
-	name: "",
-
-	// alt: String
-	//		Corresponds to the native HTML <input> element's attribute.
-	alt: "",
-
-	// value: String
-	//		Corresponds to the native HTML <input> element's attribute.
-	value: "",
-
-	// type: String
-	//		Corresponds to the native HTML <input> element's attribute.
-	type: "text",
-
-	// tabIndex: Integer
-	//		Order fields are traversed when user hits the tab key
-	tabIndex: "0",
-
-	// disabled: Boolean
-	//		Should this widget respond to user input?
-	//		In markup, this is specified as "disabled='disabled'", or just "disabled".
-	disabled: false,
-
-	// intermediateChanges: Boolean
-	//		Fires onChange for each value change or only on demand
-	intermediateChanges: false,
-
-	// scrollOnFocus: Boolean
-	//		On focus, should this widget scroll into view?
-	scrollOnFocus: true,
-
-	// These mixins assume that the focus node is an INPUT, as many but not all _FormWidgets are.
-	attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
-		value: "focusNode",
-		id: "focusNode",
-		tabIndex: "focusNode",
-		alt: "focusNode",
-		title: "focusNode"
-	}),
-
-	postMixInProperties: function(){
-		// Setup name=foo string to be referenced from the template (but only if a name has been specified)
-		// Unfortunately we can't use attributeMap to set the name due to IE limitations, see #8660
-		this.nameAttrSetting = this.name ? ("name='" + this.name + "'") : "";
-		this.inherited(arguments);
-	},
-
-	_setDisabledAttr: function(/*Boolean*/ value){
-		this.disabled = value;
-		dojo.attr(this.focusNode, 'disabled', value);
-		if(this.valueNode){
-			dojo.attr(this.valueNode, 'disabled', value);
-		}
-		dijit.setWaiState(this.focusNode, "disabled", value);
-
-		if(value){
-			// reset those, because after the domNode is disabled, we can no longer receive
-			// mouse related events, see #4200
-			this._hovering = false;
-			this._active = false;
-			// remove the tabIndex, especially for FF
-			this.focusNode.setAttribute('tabIndex', "-1");
-		}else{
-			this.focusNode.setAttribute('tabIndex', this.tabIndex);
-		}
-		this._setStateClass();
-	},
-
-	setDisabled: function(/*Boolean*/ disabled){
-		// summary:
-		//		Deprecated.   Use attr('disabled', ...) instead.
-		dojo.deprecated("setDisabled("+disabled+") is deprecated. Use attr('disabled',"+disabled+") instead.", "", "2.0");
-		this.attr('disabled', disabled);
-	},
-
-	_onFocus: function(e){
-		if(this.scrollOnFocus){
-			dijit.scrollIntoView(this.domNode);
-		}
-		this.inherited(arguments);
-	},
-
-	_onMouse : function(/*Event*/ event){
-		// summary:
-		//	Sets _hovering, _active, and stateModifier properties depending on mouse state,
-		//	then calls setStateClass() to set appropriate CSS classes for this.domNode.
-		//
-		//	To get a different CSS class for hover, send onmouseover and onmouseout events to this method.
-		//	To get a different CSS class while mouse button is depressed, send onmousedown to this method.
-
-		var mouseNode = event.currentTarget;
-		if(mouseNode && mouseNode.getAttribute){
-			this.stateModifier = mouseNode.getAttribute("stateModifier") || "";
-		}
-
-		if(!this.disabled){
-			switch(event.type){
-				case "mouseenter":
-				case "mouseover":
-					this._hovering = true;
-					this._active = this._mouseDown;
-					break;
-
-				case "mouseout":
-				case "mouseleave":
-					this._hovering = false;
-					this._active = false;
-					break;
-
-				case "mousedown" :
-					this._active = true;
-					this._mouseDown = true;
-					// set a global event to handle mouseup, so it fires properly
-					//	even if the cursor leaves the button
-					var mouseUpConnector = this.connect(dojo.body(), "onmouseup", function(){
-						// if user clicks on the button, even if the mouse is released outside of it,
-						// this button should get focus (which mimics native browser buttons)
-						if(this._mouseDown && this.isFocusable()){
-							this.focus();
-						}
-						this._active = false;
-						this._mouseDown = false;
-						this._setStateClass();
-						this.disconnect(mouseUpConnector);
-					});
-					break;
-			}
-			this._setStateClass();
-		}
-	},
-
-	isFocusable: function(){
-		// summary:
-		//		Tells if this widget is focusable or not.   Used internally by dijit.
-		// tags:
-		//		protected
-		return !this.disabled && !this.readOnly && this.focusNode && (dojo.style(this.domNode, "display") != "none");
-	},
-
-	focus: function(){
-		// summary:
-		//		Put focus on this widget
-		dijit.focus(this.focusNode);
-	},
-
-	_setStateClass: function(){
-		// summary:
-		//		Update the visual state of the widget by setting the css classes on this.domNode
-		//		(or this.stateNode if defined) by combining this.baseClass with
-		//		various suffixes that represent the current widget state(s).
-		//
-		// description:
-		//		In the case where a widget has multiple
-		//		states, it sets the class based on all possible
-		//	 	combinations.  For example, an invalid form widget that is being hovered
-		//		will be "dijitInput dijitInputInvalid dijitInputHover dijitInputInvalidHover".
-		//
-		//		For complex widgets with multiple regions, there can be various hover/active states,
-		//		such as "Hover" or "CloseButtonHover" (for tab buttons).
-		//		This is controlled by a stateModifier="CloseButton" attribute on the close button node.
-		//
-		//		The widget may have one or more of the following states, determined
-		//		by this.state, this.checked, this.valid, and this.selected:
-		//			- Error - ValidationTextBox sets this.state to "Error" if the current input value is invalid
-		//			- Checked - ex: a checkmark or a ToggleButton in a checked state, will have this.checked==true
-		//			- Selected - ex: currently selected tab will have this.selected==true
-		//
-		//		In addition, it may have one or more of the following states,
-		//		based on this.disabled and flags set in _onMouse (this._active, this._hovering, this._focused):
-		//			- Disabled	- if the widget is disabled
-		//			- Active		- if the mouse (or space/enter key?) is being pressed down
-		//			- Focused		- if the widget has focus
-		//			- Hover		- if the mouse is over the widget
-
-		// Compute new set of classes
-		var newStateClasses = this.baseClass.split(" ");
-
-		function multiply(modifier){
-			newStateClasses = newStateClasses.concat(dojo.map(newStateClasses, function(c){ return c+modifier; }), "dijit"+modifier);
-		}
-
-		if(this.checked){
-			multiply("Checked");
-		}
-		if(this.state){
-			multiply(this.state);
-		}
-		if(this.selected){
-			multiply("Selected");
-		}
-
-		if(this.disabled){
-			multiply("Disabled");
-		}else if(this.readOnly){
-			multiply("ReadOnly");
-		}else if(this._active){
-			multiply(this.stateModifier+"Active");
-		}else{
-			if(this._focused){
-				multiply("Focused");
-			}
-			if(this._hovering){
-				multiply(this.stateModifier+"Hover");
-			}
-		}
-
-		// Remove old state classes and add new ones.
-		// For performance concerns we only write into domNode.className once.
-		var tn = this.stateNode || this.domNode,
-			classHash = {};	// set of all classes (state and otherwise) for node
-
-		dojo.forEach(tn.className.split(" "), function(c){ classHash[c] = true; });
-
-		if("_stateClasses" in this){
-			dojo.forEach(this._stateClasses, function(c){ delete classHash[c]; });
-		}
-
-		dojo.forEach(newStateClasses, function(c){ classHash[c] = true; });
-
-		var newClasses = [];
-		for(var c in classHash){
-			newClasses.push(c);
-		}
-		tn.className = newClasses.join(" ");
-
-		this._stateClasses = newStateClasses;
-	},
-
-	compare: function(/*anything*/val1, /*anything*/val2){
-		// summary:
-		//		Compare 2 values (as returned by attr('value') for this widget).
-		// tags:
-		//		protected
-		if(typeof val1 == "number" && typeof val2 == "number"){
-			return (isNaN(val1) && isNaN(val2)) ? 0 : val1 - val2;
-		}else if(val1 > val2){
-			return 1;
-		}else if(val1 < val2){
-			return -1;
-		}else{
-			return 0;
-		}
-	},
-
-	onChange: function(newValue){
-		// summary:
-		//		Callback when this widget's value is changed.
-		// tags:
-		//		callback
-	},
-
-	// _onChangeActive: [private] Boolean
-	//		Indicates that changes to the value should call onChange() callback.
-	//		This is false during widget initialization, to avoid calling onChange()
-	//		when the initial value is set.
-	_onChangeActive: false,
-
-	_handleOnChange: function(/*anything*/ newValue, /* Boolean? */ priorityChange){
-		// summary:
-		//		Called when the value of the widget is set.  Calls onChange() if appropriate
-		// newValue:
-		//		the new value
-		// priorityChange:
-		//		For a slider, for example, dragging the slider is priorityChange==false,
-		//		but on mouse up, it's priorityChange==true.  If intermediateChanges==true,
-		//		onChange is only called form priorityChange=true events.
-		// tags:
-		//		private
-		this._lastValue = newValue;
-		if(this._lastValueReported == undefined && (priorityChange === null || !this._onChangeActive)){
-			// this block executes not for a change, but during initialization,
-			// and is used to store away the original value (or for ToggleButton, the original checked state)
-			this._resetValue = this._lastValueReported = newValue;
-		}
-		if((this.intermediateChanges || priorityChange || priorityChange === undefined) &&
-			((typeof newValue != typeof this._lastValueReported) ||
-				this.compare(newValue, this._lastValueReported) != 0)){
-			this._lastValueReported = newValue;
-			if(this._onChangeActive){
-				if(this._onChangeHandle){
-					clearTimeout(this._onChangeHandle);
-				}
-				// setTimout allows hidden value processing to run and
-				// also the onChange handler can safely adjust focus, etc
-				this._onChangeHandle = setTimeout(dojo.hitch(this,
-					function(){
-						this._onChangeHandle = null;
-						this.onChange(newValue);
-					}), 0); // try to collapse multiple onChange's fired faster than can be processed
-			}
-		}
-	},
-
-	create: function(){
-		// Overrides _Widget.create()
-		this.inherited(arguments);
-		this._onChangeActive = true;
-		this._setStateClass();
-	},
-
-	destroy: function(){
-		if(this._onChangeHandle){ // destroy called before last onChange has fired
-			clearTimeout(this._onChangeHandle);
-			this.onChange(this._lastValueReported);
-		}
-		this.inherited(arguments);
-	},
-
-	setValue: function(/*String*/ value){
-		// summary:
-		//		Deprecated.   Use attr('value', ...) instead.
-		dojo.deprecated("dijit.form._FormWidget:setValue("+value+") is deprecated.  Use attr('value',"+value+") instead.", "", "2.0");
-		this.attr('value', value);
-	},
-
-	getValue: function(){
-		// summary:
-		//		Deprecated.   Use attr('value') instead.
-		dojo.deprecated(this.declaredClass+"::getValue() is deprecated. Use attr('value') instead.", "", "2.0");
-		return this.attr('value');
-	}
-});
-
-dojo.declare("dijit.form._FormValueWidget", dijit.form._FormWidget,
-{
-	// summary:
-	//		Base class for widgets corresponding to native HTML elements such as <input> or <select> that have user changeable values.
-	// description:
-	//		Each _FormValueWidget represents a single input value, and has a (possibly hidden) <input> element,
-	//		to which it serializes it's input value, so that form submission (either normal submission or via FormBind?)
-	//		works as expected.
-
-	// Don't attempt to mixin the 'type', 'name' attributes here programatically -- they must be declared
-	// directly in the template as read by the parser in order to function. IE is known to specifically
-	// require the 'name' attribute at element creation time.   See #8484, #8660.
-	// TODO: unclear what that {value: ""} is for; FormWidget.attributeMap copies value to focusNode,
-	// so maybe {value: ""} is so the value *doesn't* get copied to focusNode?
-	// Seems like we really want value removed from attributeMap altogether
-	// (although there's no easy way to do that now)
-
-	// readOnly: Boolean
-	//		Should this widget respond to user input?
-	//		In markup, this is specified as "readOnly".
-	//		Similar to disabled except readOnly form values are submitted.
-	readOnly: false,
-
-	attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, {
-		value: "",
-		readOnly: "focusNode"
-	}),
-
-	_setReadOnlyAttr: function(/*Boolean*/ value){
-		this.readOnly = value;
-		dojo.attr(this.focusNode, 'readOnly', value);
-		dijit.setWaiState(this.focusNode, "readonly", value);
-		this._setStateClass();
-	},
-
-	postCreate: function(){
-		if(dojo.isIE){ // IE won't stop the event with keypress
-			this.connect(this.focusNode || this.domNode, "onkeydown", this._onKeyDown);
-		}
-		// Update our reset value if it hasn't yet been set (because this.attr
-		// is only called when there *is* a value
-		if(this._resetValue === undefined){
-			this._resetValue = this.value;
-		}
-	},
-
-	_setValueAttr: function(/*anything*/ newValue, /*Boolean, optional*/ priorityChange){
-		// summary:
-		//		Hook so attr('value', value) works.
-		// description:
-		//		Sets the value of the widget.
-		//		If the value has changed, then fire onChange event, unless priorityChange
-		//		is specified as null (or false?)
-		this.value = newValue;
-		this._handleOnChange(newValue, priorityChange);
-	},
-
-	_getValueAttr: function(){
-		// summary:
-		//		Hook so attr('value') works.
-		return this._lastValue;
-	},
-
-	undo: function(){
-		// summary:
-		//		Restore the value to the last value passed to onChange
-		this._setValueAttr(this._lastValueReported, false);
-	},
-
-	reset: function(){
-		// summary:
-		//		Reset the widget's value to what it was at initialization time
-		this._hasBeenBlurred = false;
-		this._setValueAttr(this._resetValue, true);
-	},
-
-	_onKeyDown: function(e){
-		if(e.keyCode == dojo.keys.ESCAPE && !(e.ctrlKey || e.altKey || e.metaKey)){
-			var te;
-			if(dojo.isIE){
-				e.preventDefault(); // default behavior needs to be stopped here since keypress is too late
-				te = document.createEventObject();
-				te.keyCode = dojo.keys.ESCAPE;
-				te.shiftKey = e.shiftKey;
-				e.srcElement.fireEvent('onkeypress', te);
-			}
-		}
-	},
-
-	_layoutHackIE7: function(){
-		// summary:
-		//		Work around table sizing bugs on IE7 by forcing redraw
-
-		if(dojo.isIE == 7){ // fix IE7 layout bug when the widget is scrolled out of sight
-			var domNode = this.domNode;
-			var parent = domNode.parentNode;
-			var pingNode = domNode.firstChild || domNode; // target node most unlikely to have a custom filter
-			var origFilter = pingNode.style.filter; // save custom filter, most likely nothing
-			while(parent && parent.clientHeight == 0){ // search for parents that haven't rendered yet
-				parent._disconnectHandle = this.connect(parent, "onscroll", dojo.hitch(this, function(e){
-					this.disconnect(parent._disconnectHandle); // only call once
-					parent.removeAttribute("_disconnectHandle"); // clean up DOM node
-					pingNode.style.filter = (new Date()).getMilliseconds(); // set to anything that's unique
-					setTimeout(function(){ pingNode.style.filter = origFilter }, 0); // restore custom filter, if any
-				}));
-				parent = parent.parentNode;
-			}
-		}
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/_Spinner.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/_Spinner.js
deleted file mode 100644
index e4d37b3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/_Spinner.js
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.form._Spinner"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form._Spinner"] = true;
-dojo.provide("dijit.form._Spinner");
-
-dojo.require("dijit.form.ValidationTextBox");
-
-dojo.declare(
-	"dijit.form._Spinner",
-	dijit.form.RangeBoundTextBox,
-	{
-		// summary:
-		//		Mixin for validation widgets with a spinner.
-		// description:
-		//		This class basically (conceptually) extends `dijit.form.ValidationTextBox`.
-		//		It modifies the template to have up/down arrows, and provides related handling code.
-
-		// defaultTimeout: Number
-		//		Number of milliseconds before a held arrow key or up/down button becomes typematic
-		defaultTimeout: 500,
-
-		// timeoutChangeRate: Number
-		//		Fraction of time used to change the typematic timer between events.
-		//		1.0 means that each typematic event fires at defaultTimeout intervals.
-		//		< 1.0 means that each typematic event fires at an increasing faster rate.
-		timeoutChangeRate: 0.90,
-
-		// smallDelta: Number
-		//	  Adjust the value by this much when spinning using the arrow keys/buttons
-		smallDelta: 1,
-
-		// largeDelta: Number
-		//	  Adjust the value by this much when spinning using the PgUp/Dn keys
-		largeDelta: 10,
-
-		templateString: dojo.cache("dijit.form", "templates/Spinner.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\" waiRole=\"presentation\"\n\t><div class=\"dijitInputLayoutContainer\"\n\t\t><div class=\"dijitReset dijitSpinnerButtonContainer\"\n\t\t\t>&nbsp;<div class=\"dijitReset dijitLeft dijitButtonNode dijitArrowButton dijitUpArrowButton\"\n\t\t\t\tdojoAttachPoint=\"upArrowNode\"\n\t\t\t\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse\"\n\t\t\t\tstateModifier=\"UpArrow\"\n\t\t\t\t><div class=\"dijitArrowButtonInner\">&thinsp;</div\n\t\t\t\t><div class=\"dijitArrowButtonChar\">&#9650;</div\n\t\t\t></div\n\t\t\t><div class=\"dijitReset dijitLeft dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\t\tdojoAttachPoint=\"downArrowNode\"\n\t\t\t\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse\"\n\t\t\t\tstateModifier=\"DownArrow\"\n\t\t\t\t><div class=\"dijitArrowButtonInner\">&thinsp;</div\n\t\t\t\t><div class=\"dijitArrowButtonChar\">&#9660;</div\n\t\t\t></div\n\t\t></div\n\t\t><div class=\"dijitReset dijitValidationIcon\"><br></div\n\t\t><div class=\"dijitReset dijitValidationIconText\">&Chi;</div\n\t\t><div class=\"dijitReset dijitInputField\"\n\t\t\t><input class='dijitReset' dojoAttachPoint=\"textbox,focusNode\" type=\"${type}\" dojoAttachEvent=\"onkeypress:_onKeyPress\"\n\t\t\t\twaiRole=\"spinbutton\" autocomplete=\"off\" ${nameAttrSetting}\n\t\t/></div\n\t></div\n></div>\n"),
-		baseClass: "dijitSpinner",
-
-		adjust: function(/* Object */ val, /*Number*/ delta){
-			// summary:
-			//		Overridable function used to adjust a primitive value(Number/Date/...) by the delta amount specified.
-			// 		The val is adjusted in a way that makes sense to the object type.
-			// tags:
-			//		protected extension
-			return val;
-		},
-
-		_arrowState: function(/*Node*/ node, /*Boolean*/ pressed){
-			// summary:
-			//		Called when an arrow key is pressed to update the relevant CSS classes
-			this._active = pressed;
-			this.stateModifier = node.getAttribute("stateModifier") || "";
-			this._setStateClass();
-		},
-
-		_arrowPressed: function(/*Node*/ nodePressed, /*Number*/ direction, /*Number*/ increment){
-			// summary:
-			//		Handler for arrow button or arrow key being pressed
-			if(this.disabled || this.readOnly){ return; }
-			this._arrowState(nodePressed, true);
-			this._setValueAttr(this.adjust(this.attr('value'), direction*increment), false);
-			dijit.selectInputText(this.textbox, this.textbox.value.length);
-		},
-
-		_arrowReleased: function(/*Node*/ node){
-			// summary:
-			//		Handler for arrow button or arrow key being released
-			this._wheelTimer = null;
-			if(this.disabled || this.readOnly){ return; }
-			this._arrowState(node, false);
-		},
-
-		_typematicCallback: function(/*Number*/ count, /*DOMNode*/ node, /*Event*/ evt){
-			var inc=this.smallDelta;
-			if(node == this.textbox){
-				var k=dojo.keys;
-				var key = evt.charOrCode;
-				inc = (key == k.PAGE_UP || key == k.PAGE_DOWN) ? this.largeDelta : this.smallDelta;
-				node = (key == k.UP_ARROW || key == k.PAGE_UP) ? this.upArrowNode : this.downArrowNode;
-			}
-			if(count == -1){ this._arrowReleased(node); }
-			else{ this._arrowPressed(node, (node == this.upArrowNode) ? 1 : -1, inc); }
-		},
-
-		_wheelTimer: null,
-		_mouseWheeled: function(/*Event*/ evt){
-			// summary:
-			//		Mouse wheel listener where supported
-
-			dojo.stopEvent(evt);
-			// FIXME: Safari bubbles
-
-			// be nice to DOH and scroll as much as the event says to
-			var scrollAmount = evt.detail ? (evt.detail * -1) : (evt.wheelDelta / 120);
-			if(scrollAmount !== 0){
-				var node = this[(scrollAmount > 0 ? "upArrowNode" : "downArrowNode" )];
-
-				this._arrowPressed(node, scrollAmount, this.smallDelta);
-
-				if(!this._wheelTimer){
-					clearTimeout(this._wheelTimer);
-				}
-				this._wheelTimer = setTimeout(dojo.hitch(this,"_arrowReleased",node), 50);
-			}
-
-		},
-
-		postCreate: function(){
-			this.inherited(arguments);
-
-			// extra listeners
-			this.connect(this.domNode, !dojo.isMozilla ? "onmousewheel" : 'DOMMouseScroll', "_mouseWheeled");
-			this._connects.push(dijit.typematic.addListener(this.upArrowNode, this.textbox, {charOrCode:dojo.keys.UP_ARROW,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout));
-			this._connects.push(dijit.typematic.addListener(this.downArrowNode, this.textbox, {charOrCode:dojo.keys.DOWN_ARROW,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout));
-			this._connects.push(dijit.typematic.addListener(this.upArrowNode, this.textbox, {charOrCode:dojo.keys.PAGE_UP,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout));
-			this._connects.push(dijit.typematic.addListener(this.downArrowNode, this.textbox, {charOrCode:dojo.keys.PAGE_DOWN,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout));
-			if(dojo.isIE){
-				var _this = this;
-				(function resize(){
-					var sz = _this.upArrowNode.parentNode.offsetHeight;
-					if(sz){
-						_this.upArrowNode.style.height = sz >> 1;
-						_this.downArrowNode.style.height = sz - (sz >> 1);
-						_this.focusNode.parentNode.style.height = sz;
-					}
-				})();
-				this.connect(this.domNode, "onresize",
-					function(){ setTimeout(
-						function(){
-							resize();
-							// cause IE to rerender when spinner is moved from hidden to visible
-							_this._setStateClass();
-						}, 0);
-					}
-				);
-				this._layoutHackIE7();
-			}
-		}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ComboBox.js
deleted file mode 100644
index 49bba39..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Previous choices","nextMessage":"More choices"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/Textarea.js
deleted file mode 100644
index 4b0e996..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"edit area","iframeFocusTitle":"edit area frame"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ar/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ar/ComboBox.js
deleted file mode 100644
index 6a84531..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ar/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"الاختيارات السابقة","nextMessage":"مزيد من الاختيارات"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ar/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ar/Textarea.js
deleted file mode 100644
index fe623c6..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ar/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"مساحة التحرير","iframeFocusTitle":"اطار مساحة التحرير"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ar/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ar/validate.js
deleted file mode 100644
index 615e56b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ar/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"هذه القيمة ليس بالمدى الصحيح.","invalidMessage":"القيمة التي تم ادخالها غير صحيحة.","missingMessage":"يجب ادخال هذه القيمة."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ca/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ca/ComboBox.js
deleted file mode 100644
index 1a37868..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ca/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Opcions anteriors","nextMessage":"Més opcions"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ca/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ca/Textarea.js
deleted file mode 100644
index 357f923..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ca/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"àrea d'edició","iframeFocusTitle":"Marc de l'àrea d'edició"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ca/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ca/validate.js
deleted file mode 100644
index a0a592e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ca/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"Aquest valor és fora de l'interval","invalidMessage":"El valor introduït no és vàlid","missingMessage":"Aquest valor és necessari"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/cs/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/cs/ComboBox.js
deleted file mode 100644
index 84e0841..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/cs/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Předchozí volby","nextMessage":"Další volby"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/cs/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/cs/Textarea.js
deleted file mode 100644
index 8a75ddc..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/cs/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"oblast úprav","iframeFocusTitle":"rámec oblasti úprav"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/cs/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/cs/validate.js
deleted file mode 100644
index 7bb7b9e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/cs/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"Tato hodnota je mimo rozsah.","invalidMessage":"Zadaná hodnota není platná.","missingMessage":"Tato hodnota je vyžadována."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/da/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/da/ComboBox.js
deleted file mode 100644
index 4ddc10d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/da/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Forrige valg","nextMessage":"Flere valg"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/da/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/da/Textarea.js
deleted file mode 100644
index 244c210..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/da/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"redigeringsområde","iframeFocusTitle":"ramme om redigeringsområde"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/da/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/da/validate.js
deleted file mode 100644
index 2874dd8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/da/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"Værdien er uden for intervallet.","invalidMessage":"Den angivne værdi er ugyldig.","missingMessage":"Værdien er påkrævet."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/de/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/de/ComboBox.js
deleted file mode 100644
index 6cce34b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/de/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Vorherige Auswahl","nextMessage":"Weitere Auswahlmöglichkeiten"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/de/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/de/Textarea.js
deleted file mode 100644
index 2cf75db..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/de/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"Editierbereich","iframeFocusTitle":"Rahmen für Editierbereich"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/de/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/de/validate.js
deleted file mode 100644
index 597796d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/de/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"Dieser Wert liegt außerhalb des gültigen Bereichs. ","invalidMessage":"Der eingegebene Wert ist ungültig. ","missingMessage":"Dieser Wert ist erforderlich."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/el/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/el/ComboBox.js
deleted file mode 100644
index ec294d1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/el/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Προηγούμενες επιλογές","nextMessage":"Περισσότερες επιλογές"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/el/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/el/Textarea.js
deleted file mode 100644
index 9ce37a9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/el/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"περιοχή επεξεργασίας","iframeFocusTitle":"πλαίσιο περιοχής επεξεργασίας"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/el/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/el/validate.js
deleted file mode 100644
index cc57d55..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/el/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"Η τιμή αυτή δεν ανήκει στο εύρος έγκυρων τιμών.","invalidMessage":"Η τιμή που καταχωρήσατε δεν είναι έγκυρη.","missingMessage":"Η τιμή αυτή πρέπει απαραίτητα να καθοριστεί."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/es/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/es/ComboBox.js
deleted file mode 100644
index 5bf69f9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/es/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Opciones anteriores","nextMessage":"Más opciones"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/es/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/es/Textarea.js
deleted file mode 100644
index f92a50f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/es/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"área de edición","iframeFocusTitle":"marco del área de edición"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/es/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/es/validate.js
deleted file mode 100644
index 65e190e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/es/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"Este valor está fuera del intervalo.","invalidMessage":"El valor especificado no es válido.","missingMessage":"Este valor es necesario."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/fi/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/fi/ComboBox.js
deleted file mode 100644
index 6d9b830..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/fi/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Edelliset valinnat","nextMessage":"Lisää valintoja"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/fi/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/fi/Textarea.js
deleted file mode 100644
index 5efaee9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/fi/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"muokkausalue","iframeFocusTitle":"muokkausalueen kehys"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/fi/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/fi/validate.js
deleted file mode 100644
index 276efcd..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/fi/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"Tämä arvo on sallitun alueen ulkopuolella.","invalidMessage":"Annettu arvo ei kelpaa.","missingMessage":"Tämä arvo on pakollinen."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/fr/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/fr/ComboBox.js
deleted file mode 100644
index 14b3976..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/fr/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Choix précédents","nextMessage":"Plus de choix"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/fr/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/fr/Textarea.js
deleted file mode 100644
index 4abb6c3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/fr/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"zone d'édition","iframeFocusTitle":"cadre de la zone d'édition"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/fr/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/fr/validate.js
deleted file mode 100644
index 95a0169..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/fr/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"Cette valeur n'est pas comprise dans la plage autorisée.","invalidMessage":"La valeur indiquée n'est pas correcte.","missingMessage":"Cette valeur est requise."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/he/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/he/ComboBox.js
deleted file mode 100644
index 169d0f5..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/he/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"האפשרויות הקודמות","nextMessage":"אפשרויות נוספות"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/he/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/he/Textarea.js
deleted file mode 100644
index 809eadf..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/he/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"אזור עריכה","iframeFocusTitle":"מסגרת אזור עריכה"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/he/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/he/validate.js
deleted file mode 100644
index 3d778e2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/he/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"הערך מחוץ לטווח.","invalidMessage":"הערך שצוין אינו חוקי.","missingMessage":"זהו ערך דרוש."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/hu/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/hu/ComboBox.js
deleted file mode 100644
index 4b6a620..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/hu/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Előző menüpontok","nextMessage":"További menüpontok"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/hu/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/hu/Textarea.js
deleted file mode 100644
index 9b4ca01..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/hu/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"szerkesztési terület","iframeFocusTitle":"szerkesztési terület keret"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/hu/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/hu/validate.js
deleted file mode 100644
index b6d7996..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/hu/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"Az érték kívül van a megengedett tartományon.","invalidMessage":"A megadott érték érvénytelen.","missingMessage":"Meg kell adni egy értéket."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/it/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/it/ComboBox.js
deleted file mode 100644
index 9f67072..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/it/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Scelte precedenti","nextMessage":"Altre scelte"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/it/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/it/Textarea.js
deleted file mode 100644
index 1b14ecc..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/it/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"modifica area","iframeFocusTitle":"modifica frame area"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/it/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/it/validate.js
deleted file mode 100644
index af7227f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/it/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"Questo valore non è compreso nell'intervallo.","invalidMessage":"Il valore immesso non è valido.","missingMessage":"Questo valore è obbligatorio."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ja/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ja/ComboBox.js
deleted file mode 100644
index 6b34170..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ja/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"以前の選択項目","nextMessage":"追加の選択項目"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ja/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ja/Textarea.js
deleted file mode 100644
index 8a52f4a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ja/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"編集域","iframeFocusTitle":"編集域フレーム"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ja/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ja/validate.js
deleted file mode 100644
index 450cd7e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ja/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"この値は範囲外です。","invalidMessage":"入力した値は無効です。","missingMessage":"この値は必須です。"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ko/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ko/ComboBox.js
deleted file mode 100644
index 87d0f06..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ko/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"이전 선택사항","nextMessage":"기타 선택사항"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ko/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ko/Textarea.js
deleted file mode 100644
index 5c4e916..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ko/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"편집 영역","iframeFocusTitle":"편집 영역 프레임"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ko/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ko/validate.js
deleted file mode 100644
index c76c676..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ko/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"이 값은 범위를 벗어납니다.","invalidMessage":"입력된 값이 올바르지 않습니다.","missingMessage":"이 값은 필수입니다."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/nb/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/nb/ComboBox.js
deleted file mode 100644
index de14554..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/nb/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Tidligere valg","nextMessage":"Flere valg"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/nb/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/nb/Textarea.js
deleted file mode 100644
index 16fadf5..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/nb/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"redigeringsområde","iframeFocusTitle":"ramme for redigeringsområde"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/nb/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/nb/validate.js
deleted file mode 100644
index 2fe96f2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/nb/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"Denne verdien er utenfor gyldig område.","invalidMessage":"Den angitte verdien er ikke gyldig.","missingMessage":"Denne verdien er obligatorisk."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/nl/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/nl/ComboBox.js
deleted file mode 100644
index b5885d7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/nl/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Eerdere opties","nextMessage":"Meer opties"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/nl/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/nl/Textarea.js
deleted file mode 100644
index d13c3a6..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/nl/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"veld bewerken","iframeFocusTitle":"veldkader bewerken"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/nl/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/nl/validate.js
deleted file mode 100644
index b3062c1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/nl/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"Deze waarde is niet toegestaan.","invalidMessage":"De opgegeven waarde is ongeldig.","missingMessage":"Deze waarde is verplicht."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pl/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pl/ComboBox.js
deleted file mode 100644
index f2b4b08..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pl/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Poprzednie wybory","nextMessage":"Więcej wyborów"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pl/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pl/Textarea.js
deleted file mode 100644
index d918f59..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pl/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"Obszar edycji","iframeFocusTitle":"Ramka obszaru edycji"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pl/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pl/validate.js
deleted file mode 100644
index cf05d2f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pl/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"Ta wartość jest spoza zakresu.","invalidMessage":"Wprowadzona wartość jest niepoprawna.","missingMessage":"Ta wartość jest wymagana."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pt-pt/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pt-pt/ComboBox.js
deleted file mode 100644
index 2540542..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pt-pt/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Opções anteriores","nextMessage":"Mais opções"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pt-pt/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pt-pt/Textarea.js
deleted file mode 100644
index bcd75e7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pt-pt/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"área de edição","iframeFocusTitle":"painel da área de edição"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pt-pt/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pt-pt/validate.js
deleted file mode 100644
index 3d92170..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pt-pt/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"Este valor encontra-se fora do intervalo.","invalidMessage":"O valor introduzido não é válido.","missingMessage":"Este valor é requerido."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pt/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pt/ComboBox.js
deleted file mode 100644
index 2540542..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pt/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Opções anteriores","nextMessage":"Mais opções"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pt/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pt/Textarea.js
deleted file mode 100644
index b4a0b0f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pt/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"editar área","iframeFocusTitle":"editar quadro da área"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pt/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pt/validate.js
deleted file mode 100644
index 3b43579..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/pt/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"Este valor está fora do intervalo. ","invalidMessage":"O valor inserido não é válido.","missingMessage":"Este valor é necessário."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ru/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ru/ComboBox.js
deleted file mode 100644
index 193f4ee..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ru/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Предыдущие варианты","nextMessage":"Следующие варианты"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ru/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ru/Textarea.js
deleted file mode 100644
index ad7ad22..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ru/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"область редактирования","iframeFocusTitle":"фрейм области редактирования"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ru/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ru/validate.js
deleted file mode 100644
index 35fb5ca..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/ru/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"Это значение вне диапазона.","invalidMessage":"Указано недопустимое значение.","missingMessage":"Это обязательное значение."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sk/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sk/ComboBox.js
deleted file mode 100644
index a45c7f2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sk/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Predchádzajúce voľby","nextMessage":"Ďalšie voľby"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sk/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sk/Textarea.js
deleted file mode 100644
index 3ee98c3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sk/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"upraviť oblasť","iframeFocusTitle":"upraviť rám oblasti"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sk/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sk/validate.js
deleted file mode 100644
index 612dab5..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sk/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"Táto hodnota je mimo rozsah.","invalidMessage":"Zadaná hodnota nie je platná.","missingMessage":"Táto hodnota je vyžadovaná."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sl/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sl/ComboBox.js
deleted file mode 100644
index e955688..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sl/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Prejšnje možnosti","nextMessage":"Dodatne možnosti"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sl/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sl/Textarea.js
deleted file mode 100644
index 912ee39..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sl/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"urejanje področja","iframeFocusTitle":"urejanje področja okvirja"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sl/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sl/validate.js
deleted file mode 100644
index 7635724..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sl/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"Ta vrednost je zunaj obsega. ","invalidMessage":"Vnesena vrednost ni veljavna.","missingMessage":"Ta vrednost je zahtevana."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sv/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sv/ComboBox.js
deleted file mode 100644
index 860bf75..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sv/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Föregående alternativ","nextMessage":"Fler alternativ"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sv/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sv/Textarea.js
deleted file mode 100644
index 9e508ac..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sv/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"redigeringsområde","iframeFocusTitle":"redigeringsområdesram"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sv/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sv/validate.js
deleted file mode 100644
index 8c1b537..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/sv/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"Värdet är utanför intervallet.","invalidMessage":"Det angivna värdet är ogiltigt.","missingMessage":"Värdet är obligatoriskt."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/th/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/th/ComboBox.js
deleted file mode 100644
index ff32a4f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/th/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"การเลือกก่อนหน้า","nextMessage":"การเลือกเพิ่มเติม"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/th/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/th/Textarea.js
deleted file mode 100644
index 4361183..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/th/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"แก้ไขพื้นที่","iframeFocusTitle":"แก้ไขกรอบพื้นที่"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/th/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/th/validate.js
deleted file mode 100644
index 86606b7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/th/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"ค่านี้เกินช่วง","invalidMessage":"ค่าที่ป้อนไม่ถูกต้อง","missingMessage":"จำเป็นต้องมีค่านี้"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/tr/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/tr/ComboBox.js
deleted file mode 100644
index 46f71dc..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/tr/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"Önceki seçenekler","nextMessage":"Diğer seçenekler"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/tr/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/tr/Textarea.js
deleted file mode 100644
index 3f2b5e7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/tr/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"düzenleme alanı","iframeFocusTitle":"düzenleme alanı çerçevesi"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/tr/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/tr/validate.js
deleted file mode 100644
index 838dbda..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/tr/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"Bu değer aralık dışında.","invalidMessage":"Girilen değer geçersiz.","missingMessage":"Bu değer gerekli."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/validate.js
deleted file mode 100644
index 29a1a47..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/zh-tw/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/zh-tw/ComboBox.js
deleted file mode 100644
index ead5fa6..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/zh-tw/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"前一個選擇項","nextMessage":"其他選擇項"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/zh-tw/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/zh-tw/Textarea.js
deleted file mode 100644
index cb7abda..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/zh-tw/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"編輯區","iframeFocusTitle":"編輯區框"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/zh-tw/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/zh-tw/validate.js
deleted file mode 100644
index b398a31..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/zh-tw/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"此值超出範圍。","invalidMessage":"輸入的值無效。","missingMessage":"必須提供此值。"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/zh/ComboBox.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/zh/ComboBox.js
deleted file mode 100644
index 7cc92cf..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/zh/ComboBox.js
+++ /dev/null
@@ -1 +0,0 @@
-({"previousMessage":"先前选项","nextMessage":"更多选项"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/zh/Textarea.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/zh/Textarea.js
deleted file mode 100644
index e1cf172..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/zh/Textarea.js
+++ /dev/null
@@ -1 +0,0 @@
-({"iframeEditTitle":"编辑区","iframeFocusTitle":"编辑区框架"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/zh/validate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/zh/validate.js
deleted file mode 100644
index e2c01f5..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/form/nls/zh/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"此值超出范围。","invalidMessage":"输入的值无效。","missingMessage":"此值是必需值。"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/AccordionContainer.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/AccordionContainer.js
deleted file mode 100644
index 0e22a8f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/AccordionContainer.js
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.layout.AccordionContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.AccordionContainer"] = true;
-dojo.provide("dijit.layout.AccordionContainer");
-
-dojo.require("dojo.fx");
-
-dojo.require("dijit._Container");
-dojo.require("dijit._Templated");
-dojo.require("dijit.layout.StackContainer");
-dojo.require("dijit.layout.ContentPane");
-
-dojo.require("dijit.layout.AccordionPane");	// for back compat, remove for 2.0
-
-dojo.declare(
-	"dijit.layout.AccordionContainer",
-	dijit.layout.StackContainer,
-	{
-		// summary:
-		//		Holds a set of panes where every pane's title is visible, but only one pane's content is visible at a time,
-		//		and switching between panes is visualized by sliding the other panes up/down.
-		// example:
-		//	| 	<div dojoType="dijit.layout.AccordionContainer">
-		//	|		<div dojoType="dijit.layout.ContentPane" title="pane 1">
-		//	|		</div>
-		//	|		<div dojoType="dijit.layout.ContentPane" title="pane 2">
-		//	|			<p>This is some text</p>
-		//	|		</div>
-		//	|	</div>
-
-		// duration: Integer
-		//		Amount of time (in ms) it takes to slide panes
-		duration: dijit.defaultDuration,
-
-		// buttonWidget: [const] String
-		//		The name of the widget used to display the title of each pane
-		buttonWidget: "dijit.layout._AccordionButton",
-
-		// _verticalSpace: Number
-		//		Pixels of space available for the open pane
-		//		(my content box size minus the cumulative size of all the title bars)
-		_verticalSpace: 0,
-
-		baseClass: "dijitAccordionContainer",
-
-		postCreate: function(){
-			this.domNode.style.overflow = "hidden";
-			this.inherited(arguments);
-			dijit.setWaiRole(this.domNode, "tablist");
-		},
-
-		startup: function(){
-			if(this._started){ return; }
-			this.inherited(arguments);
-			if(this.selectedChildWidget){
-				var style = this.selectedChildWidget.containerNode.style;
-				style.display = "";
-				style.overflow = "auto";
-				this.selectedChildWidget._buttonWidget._setSelectedState(true);
-			}
-		},
-
-		_getTargetHeight: function(/* Node */ node){
-			// summary:
-			//		For the given node, returns the height that should be
-			//		set to achieve our vertical space (subtract any padding
-			//		we may have).
-			//
-			//		This is used by the animations.
-			//
-			//		TODO: I don't think this works correctly in IE quirks when an elements
-			//		style.height including padding and borders
-			var cs = dojo.getComputedStyle(node);
-			return Math.max(this._verticalSpace - dojo._getPadBorderExtents(node, cs).h, 0);
-		},
-
-		layout: function(){
-			// Implement _LayoutWidget.layout() virtual method.
-			// Set the height of the open pane based on what room remains.
-
-			var openPane = this.selectedChildWidget;
-
-			// get cumulative height of all the title bars
-			var totalCollapsedHeight = 0;
-			dojo.forEach(this.getChildren(), function(child){
-				totalCollapsedHeight += child._buttonWidget.getTitleHeight();
-			});
-			var mySize = this._contentBox;
-			this._verticalSpace = mySize.h - totalCollapsedHeight;
-
-			// Memo size to make displayed child
-			this._containerContentBox = {
-				h: this._verticalSpace,
-				w: mySize.w
-			};
-
-			if(openPane){
-				openPane.resize(this._containerContentBox);
-			}
-		},
-
-		_setupChild: function(child){
-			// Overrides _LayoutWidget._setupChild().
-			// Setup clickable title to sit above the child widget,
-			// and stash pointer to it inside the widget itself.
-
-			var cls = dojo.getObject(this.buttonWidget);
-			var button = (child._buttonWidget = new cls({
-				contentWidget: child,
-				label: child.title,
-				title: child.tooltip,
-				iconClass: child.iconClass,
-				id: child.id + "_button",
-				parent: this
-			}));
-
-			child._accordionConnectHandle = this.connect(child, 'attr', function(name, value){
-				if(arguments.length == 2){
-					switch(name){
-					case 'title':
-					case 'iconClass':
-						button.attr(name, value);
-					}
-				}
-			});
-
-			dojo.place(child._buttonWidget.domNode, child.domNode, "before");
-
-			this.inherited(arguments);
-		},
-
-		removeChild: function(child){
-			// Overrides _LayoutWidget.removeChild().
-			this.disconnect(child._accordionConnectHandle);
-			delete child._accordionConnectHandle;
-
-			child._buttonWidget.destroy();
-			delete child._buttonWidget;
-
-			this.inherited(arguments);
-		},
-
-		getChildren: function(){
-			// Overrides _Container.getChildren() to ignore titles and only look at panes.
-			return dojo.filter(this.inherited(arguments), function(child){
-				return child.declaredClass != this.buttonWidget;
-			}, this);
-		},
-
-		destroy: function(){
-			dojo.forEach(this.getChildren(), function(child){
-				child._buttonWidget.destroy();
-			});
-			this.inherited(arguments);
-		},
-
-		_transition: function(/*Widget?*/newWidget, /*Widget?*/oldWidget){
-			// Overrides StackContainer._transition() to provide sliding of title bars etc.
-
-//TODO: should be able to replace this with calls to slideIn/slideOut
-			if(this._inTransition){ return; }
-			this._inTransition = true;
-			var animations = [];
-			var paneHeight = this._verticalSpace;
-			if(newWidget){
-				newWidget._buttonWidget.setSelected(true);
-
-				this._showChild(newWidget);	// prepare widget to be slid in
-
-				// Size the new widget, in case this is the first time it's being shown,
-				// or I have been resized since the last time it was shown.
-				// Note that page must be visible for resizing to work.
-				if(this.doLayout && newWidget.resize){
-					newWidget.resize(this._containerContentBox);
-				}
-
-				var newContents = newWidget.domNode;
-				dojo.addClass(newContents, "dijitVisible");
-				dojo.removeClass(newContents, "dijitHidden");
-				var newContentsOverflow = newContents.style.overflow;
-				newContents.style.overflow = "hidden";
-				animations.push(dojo.animateProperty({
-					node: newContents,
-					duration: this.duration,
-					properties: {
-						height: { start: 1, end: this._getTargetHeight(newContents) }
-					},
-					onEnd: dojo.hitch(this, function(){
-						newContents.style.overflow = newContentsOverflow;
-						delete this._inTransition;
-					})
-				}));
-			}
-			if(oldWidget){
-				oldWidget._buttonWidget.setSelected(false);
-				var oldContents = oldWidget.domNode,
-					oldContentsOverflow = oldContents.style.overflow;
-				oldContents.style.overflow = "hidden";
-				animations.push(dojo.animateProperty({
-					node: oldContents,
-					duration: this.duration,
-					properties: {
-						height: { start: this._getTargetHeight(oldContents), end: 1 }
-					},
-					onEnd: function(){
-						dojo.addClass(oldContents, "dijitHidden");
-						dojo.removeClass(oldContents, "dijitVisible");
-						oldContents.style.overflow = oldContentsOverflow;
-						if(oldWidget.onHide){
-							oldWidget.onHide();
-						}
-					}
-				}));
-			}
-
-			dojo.fx.combine(animations).play();
-		},
-
-		// note: we are treating the container as controller here
-		_onKeyPress: function(/*Event*/ e, /*dijit._Widget*/ fromTitle){
-			// summary:
-			//		Handle keypress events
-			// description:
-			//		This is called from a handler on AccordionContainer.domNode
-			//		(setup in StackContainer), and is also called directly from
-			//		the click handler for accordion labels
-			if(this._inTransition || this.disabled || e.altKey || !(fromTitle || e.ctrlKey)){
-				if(this._inTransition){
-					dojo.stopEvent(e);
-				}
-				return;
-			}
-			var k = dojo.keys,
-				c = e.charOrCode;
-			if((fromTitle && (c == k.LEFT_ARROW || c == k.UP_ARROW)) ||
-					(e.ctrlKey && c == k.PAGE_UP)){
-				this._adjacent(false)._buttonWidget._onTitleClick();
-				dojo.stopEvent(e);
-			}else if((fromTitle && (c == k.RIGHT_ARROW || c == k.DOWN_ARROW)) ||
-					(e.ctrlKey && (c == k.PAGE_DOWN || c == k.TAB))){
-				this._adjacent(true)._buttonWidget._onTitleClick();
-				dojo.stopEvent(e);
-			}
-		}
-	}
-);
-
-dojo.declare("dijit.layout._AccordionButton",
-	[dijit._Widget, dijit._Templated],
-	{
-	// summary:
-	//		The title bar to click to open up an accordion pane.
-	//		Internal widget used by AccordionContainer.
-	// tags:
-	//		private
-
-	templateString: dojo.cache("dijit.layout", "templates/AccordionButton.html", "<div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='ondijitclick:_onTitleClick,onkeypress:_onTitleKeyPress,onfocus:_handleFocus,onblur:_handleFocus,onmouseenter:_onTitleEnter,onmouseleave:_onTitleLeave'\n\t\tclass='dijitAccordionTitle' wairole=\"tab\" waiState=\"expanded-false\"\n\t\t><span class='dijitInline dijitAccordionArrow' waiRole=\"presentation\"></span\n\t\t><span class='arrowTextUp' waiRole=\"presentation\">+</span\n\t\t><span class='arrowTextDown' waiRole=\"presentation\">-</span\n\t\t><img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint='iconNode' style=\"vertical-align: middle\" waiRole=\"presentation\"/>\n\t\t<span waiRole=\"presentation\" dojoAttachPoint='titleTextNode' class='dijitAccordionText'></span>\n</div>\n"),
-	attributeMap: dojo.mixin(dojo.clone(dijit.layout.ContentPane.prototype.attributeMap), {
-		label: {node: "titleTextNode", type: "innerHTML" },
-		title: {node: "titleTextNode", type: "attribute", attribute: "title"},
-		iconClass: { node: "iconNode", type: "class" }
-	}),
-
-	baseClass: "dijitAccordionTitle",
-
-	getParent: function(){
-		// summary:
-		//		Returns the parent.
-		// tags:
-		//		private
-		return this.parent;
-	},
-
-	postCreate: function(){
-		this.inherited(arguments);
-		dojo.setSelectable(this.domNode, false);
-		this.setSelected(this.selected);
-		var titleTextNodeId = dojo.attr(this.domNode,'id').replace(' ','_');
-		dojo.attr(this.titleTextNode, "id", titleTextNodeId+"_title");
-		dijit.setWaiState(this.focusNode, "labelledby", dojo.attr(this.titleTextNode, "id"));
-	},
-
-	getTitleHeight: function(){
-		// summary:
-		//		Returns the height of the title dom node.
-		return dojo.marginBox(this.titleNode).h;	// Integer
-	},
-
-	_onTitleClick: function(){
-		// summary:
-		//		Callback when someone clicks my title.
-		var parent = this.getParent();
-		if(!parent._inTransition){
-			parent.selectChild(this.contentWidget);
-			dijit.focus(this.focusNode);
-		}
-	},
-
-	_onTitleEnter: function(){
-		// summary:
-		//		Callback when someone hovers over my title.
-		dojo.addClass(this.focusNode, "dijitAccordionTitle-hover");
-	},
-
-	_onTitleLeave: function(){
-		// summary:
-		//		Callback when someone stops hovering over my title.
-		dojo.removeClass(this.focusNode, "dijitAccordionTitle-hover");
-	},
-
-	_onTitleKeyPress: function(/*Event*/ evt){
-		return this.getParent()._onKeyPress(evt, this.contentWidget);
-	},
-
-	_setSelectedState: function(/*Boolean*/ isSelected){
-		this.selected = isSelected;
-		dojo[(isSelected ? "addClass" : "removeClass")](this.titleNode,"dijitAccordionTitle-selected");
-		dijit.setWaiState(this.focusNode, "expanded", isSelected);
-		dijit.setWaiState(this.focusNode, "selected", isSelected);
-		this.focusNode.setAttribute("tabIndex", isSelected ? "0" : "-1");
-	},
-
-	_handleFocus: function(/*Event*/ e){
-		// summary:
-		//		Handle the blur and focus state of this widget.
-		dojo.toggleClass(this.titleTextNode, "dijitAccordionFocused", e.type == "focus");
-	},
-
-	setSelected: function(/*Boolean*/ isSelected){
-		// summary:
-		//		Change the selected state on this pane.
-		this._setSelectedState(isSelected);
-		if(isSelected){
-			var cw = this.contentWidget;
-			if(cw.onSelected){ cw.onSelected(); }
-		}
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/AccordionPane.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/AccordionPane.js
deleted file mode 100644
index 1b88a3f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/AccordionPane.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.layout.AccordionPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.AccordionPane"] = true;
-dojo.provide("dijit.layout.AccordionPane");
-
-dojo.require("dijit.layout.ContentPane");
-
-dojo.declare("dijit.layout.AccordionPane", dijit.layout.ContentPane, {
-	// summary:
-	//		Deprecated widget.   Use `dijit.layout.ContentPane` instead.
-	// tags:
-	//		deprecated
-
-	constructor: function(){
-		dojo.deprecated("dijit.layout.AccordionPane deprecated, use ContentPane instead", "", "2.0");
-	},
-
-	onSelected: function(){
-		// summary:
-		//		called when this pane is selected
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/BorderContainer.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/BorderContainer.js
deleted file mode 100644
index 5785f9b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/BorderContainer.js
+++ /dev/null
@@ -1,648 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.layout.BorderContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.BorderContainer"] = true;
-dojo.provide("dijit.layout.BorderContainer");
-
-dojo.require("dijit.layout._LayoutWidget");
-dojo.require("dojo.cookie");
-
-dojo.declare(
-	"dijit.layout.BorderContainer",
-	dijit.layout._LayoutWidget,
-{
-	// summary:
-	//		Provides layout in up to 5 regions, a mandatory center with optional borders along its 4 sides.
-	//
-	// description:
-	//		A BorderContainer is a box with a specified size, such as style="width: 500px; height: 500px;",
-	//		that contains a child widget marked region="center" and optionally children widgets marked
-	//		region equal to "top", "bottom", "leading", "trailing", "left" or "right".
-	//		Children along the edges will be laid out according to width or height dimensions and may
-	//		include optional splitters (splitter="true") to make them resizable by the user.  The remaining
-	//		space is designated for the center region.
-	//
-	//		NOTE: Splitters must not be more than 50 pixels in width.
-	//
-	//		The outer size must be specified on the BorderContainer node.  Width must be specified for the sides
-	//		and height for the top and bottom, respectively.  No dimensions should be specified on the center;
-	//		it will fill the remaining space.  Regions named "leading" and "trailing" may be used just like
-	//		"left" and "right" except that they will be reversed in right-to-left environments.
-	//
-	// example:
-	// |	<div dojoType="dijit.layout.BorderContainer" design="sidebar" gutters="false"
-	// |            style="width: 400px; height: 300px;">
-	// |		<div dojoType="ContentPane" region="top">header text</div>
-	// |		<div dojoType="ContentPane" region="right" splitter="true" style="width: 200px;">table of contents</div>
-	// |		<div dojoType="ContentPane" region="center">client area</div>
-	// |	</div>
-
-	// design: String
-	//		Which design is used for the layout:
-	//			- "headline" (default) where the top and bottom extend
-	//				the full width of the container
-	//			- "sidebar" where the left and right sides extend from top to bottom.
-	design: "headline",
-
-	// gutters: Boolean
-	//		Give each pane a border and margin.
-	//		Margin determined by domNode.paddingLeft.
-	//		When false, only resizable panes have a gutter (i.e. draggable splitter) for resizing.
-	gutters: true,
-
-	// liveSplitters: Boolean
-	//		Specifies whether splitters resize as you drag (true) or only upon mouseup (false)
-	liveSplitters: true,
-
-	// persist: Boolean
-	//		Save splitter positions in a cookie.
-	persist: false,
-
-	baseClass: "dijitBorderContainer",
-
-	// _splitterClass: String
-	// 		Optional hook to override the default Splitter widget used by BorderContainer
-	_splitterClass: "dijit.layout._Splitter",
-
-	postMixInProperties: function(){
-		// change class name to indicate that BorderContainer is being used purely for
-		// layout (like LayoutContainer) rather than for pretty formatting.
-		if(!this.gutters){
-			this.baseClass += "NoGutter";
-		}
-		this.inherited(arguments);
-	},
-
-	postCreate: function(){
-		this.inherited(arguments);
-
-		this._splitters = {};
-		this._splitterThickness = {};
-	},
-
-	startup: function(){
-		if(this._started){ return; }
-		dojo.forEach(this.getChildren(), this._setupChild, this);
-		this.inherited(arguments);
-	},
-
-	_setupChild: function(/*dijit._Widget*/ child){
-		// Override _LayoutWidget._setupChild().
-
-		var region = child.region;
-		if(region){
-			this.inherited(arguments);
-
-			dojo.addClass(child.domNode, this.baseClass+"Pane");
-
-			var ltr = this.isLeftToRight();
-			if(region == "leading"){ region = ltr ? "left" : "right"; }
-			if(region == "trailing"){ region = ltr ? "right" : "left"; }
-
-			//FIXME: redundant?
-			this["_"+region] = child.domNode;
-			this["_"+region+"Widget"] = child;
-
-			// Create draggable splitter for resizing pane,
-			// or alternately if splitter=false but BorderContainer.gutters=true then
-			// insert dummy div just for spacing
-			if((child.splitter || this.gutters) && !this._splitters[region]){
-				var _Splitter = dojo.getObject(child.splitter ? this._splitterClass : "dijit.layout._Gutter");
-				var splitter = new _Splitter({
-					container: this,
-					child: child,
-					region: region,
-					live: this.liveSplitters
-				});
-				splitter.isSplitter = true;
-				this._splitters[region] = splitter.domNode;
-				dojo.place(this._splitters[region], child.domNode, "after");
-
-				// Splitters arent added as Contained children, so we need to call startup explicitly
-				splitter.startup();
-			}
-			child.region = region;
-		}
-	},
-
-	_computeSplitterThickness: function(region){
-		this._splitterThickness[region] = this._splitterThickness[region] ||
-			dojo.marginBox(this._splitters[region])[(/top|bottom/.test(region) ? 'h' : 'w')];
-	},
-
-	layout: function(){
-		// Implement _LayoutWidget.layout() virtual method.
-		for(var region in this._splitters){ this._computeSplitterThickness(region); }
-		this._layoutChildren();
-	},
-
-	addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
-		// Override _LayoutWidget.addChild().
-		this.inherited(arguments);
-		if(this._started){
-			this.layout(); //OPT
-		}
-	},
-
-	removeChild: function(/*dijit._Widget*/ child){
-		// Override _LayoutWidget.removeChild().
-		var region = child.region;
-		var splitter = this._splitters[region];
-		if(splitter){
-			dijit.byNode(splitter).destroy();
-			delete this._splitters[region];
-			delete this._splitterThickness[region];
-		}
-		this.inherited(arguments);
-		delete this["_"+region];
-		delete this["_" +region+"Widget"];
-		if(this._started){
-			this._layoutChildren(child.region);
-		}
-		dojo.removeClass(child.domNode, this.baseClass+"Pane");
-	},
-
-	getChildren: function(){
-		// Override _LayoutWidget.getChildren() to only return real children, not the splitters.
-		return dojo.filter(this.inherited(arguments), function(widget){
-			return !widget.isSplitter;
-		});
-	},
-
-	getSplitter: function(/*String*/region){
-		// summary:
-		//		Returns the widget responsible for rendering the splitter associated with region
-		var splitter = this._splitters[region];
-		return splitter ? dijit.byNode(splitter) : null;
-	},
-
-	resize: function(newSize, currentSize){
-		// Overrides _LayoutWidget.resize().
-
-		// resetting potential padding to 0px to provide support for 100% width/height + padding
-		// TODO: this hack doesn't respect the box model and is a temporary fix
-		if(!this.cs || !this.pe){
-			var node = this.domNode;
-			this.cs = dojo.getComputedStyle(node);
-			this.pe = dojo._getPadExtents(node, this.cs);
-			this.pe.r = dojo._toPixelValue(node, this.cs.paddingRight);
-			this.pe.b = dojo._toPixelValue(node, this.cs.paddingBottom);
-
-			dojo.style(node, "padding", "0px");
-		}
-
-		this.inherited(arguments);
-	},
-
-	_layoutChildren: function(/*String?*/changedRegion){
-		// summary:
-		//		This is the main routine for setting size/position of each child
-
-		if(!this._borderBox || !this._borderBox.h){
-			// We are currently hidden, or we haven't been sized by our parent yet.
-			// Abort.   Someone will resize us later.
-			return;
-		}
-
-		var sidebarLayout = (this.design == "sidebar");
-		var topHeight = 0, bottomHeight = 0, leftWidth = 0, rightWidth = 0;
-		var topStyle = {}, leftStyle = {}, rightStyle = {}, bottomStyle = {},
-			centerStyle = (this._center && this._center.style) || {};
-
-		var changedSide = /left|right/.test(changedRegion);
-
-		var layoutSides = !changedRegion || (!changedSide && !sidebarLayout);
-		var layoutTopBottom = !changedRegion || (changedSide && sidebarLayout);
-
-		// Ask browser for width/height of side panes.
-		// Would be nice to cache this but height can change according to width
-		// (because words wrap around).  I don't think width will ever change though
-		// (except when the user drags a splitter).
-		if(this._top){
-			topStyle = layoutTopBottom && this._top.style;
-			topHeight = dojo.marginBox(this._top).h;
-		}
-		if(this._left){
-			leftStyle = layoutSides && this._left.style;
-			leftWidth = dojo.marginBox(this._left).w;
-		}
-		if(this._right){
-			rightStyle = layoutSides && this._right.style;
-			rightWidth = dojo.marginBox(this._right).w;
-		}
-		if(this._bottom){
-			bottomStyle = layoutTopBottom && this._bottom.style;
-			bottomHeight = dojo.marginBox(this._bottom).h;
-		}
-
-		var splitters = this._splitters;
-		var topSplitter = splitters.top, bottomSplitter = splitters.bottom,
-			leftSplitter = splitters.left, rightSplitter = splitters.right;
-		var splitterThickness = this._splitterThickness;
-		var topSplitterThickness = splitterThickness.top || 0,
-			leftSplitterThickness = splitterThickness.left || 0,
-			rightSplitterThickness = splitterThickness.right || 0,
-			bottomSplitterThickness = splitterThickness.bottom || 0;
-
-		// Check for race condition where CSS hasn't finished loading, so
-		// the splitter width == the viewport width (#5824)
-		if(leftSplitterThickness > 50 || rightSplitterThickness > 50){
-			setTimeout(dojo.hitch(this, function(){
-				// Results are invalid.  Clear them out.
-				this._splitterThickness = {};
-
-				for(var region in this._splitters){
-					this._computeSplitterThickness(region);
-				}
-				this._layoutChildren();
-			}), 50);
-			return false;
-		}
-
-		var pe = this.pe;
-
-		var splitterBounds = {
-			left: (sidebarLayout ? leftWidth + leftSplitterThickness: 0) + pe.l + "px",
-			right: (sidebarLayout ? rightWidth + rightSplitterThickness: 0) + pe.r + "px"
-		};
-
-		if(topSplitter){
-			dojo.mixin(topSplitter.style, splitterBounds);
-			topSplitter.style.top = topHeight + pe.t + "px";
-		}
-
-		if(bottomSplitter){
-			dojo.mixin(bottomSplitter.style, splitterBounds);
-			bottomSplitter.style.bottom = bottomHeight + pe.b + "px";
-		}
-
-		splitterBounds = {
-			top: (sidebarLayout ? 0 : topHeight + topSplitterThickness) + pe.t + "px",
-			bottom: (sidebarLayout ? 0 : bottomHeight + bottomSplitterThickness) + pe.b + "px"
-		};
-
-		if(leftSplitter){
-			dojo.mixin(leftSplitter.style, splitterBounds);
-			leftSplitter.style.left = leftWidth + pe.l + "px";
-		}
-
-		if(rightSplitter){
-			dojo.mixin(rightSplitter.style, splitterBounds);
-			rightSplitter.style.right = rightWidth + pe.r +	"px";
-		}
-
-		dojo.mixin(centerStyle, {
-			top: pe.t + topHeight + topSplitterThickness + "px",
-			left: pe.l + leftWidth + leftSplitterThickness + "px",
-			right: pe.r + rightWidth + rightSplitterThickness + "px",
-			bottom: pe.b + bottomHeight + bottomSplitterThickness + "px"
-		});
-
-		var bounds = {
-			top: sidebarLayout ? pe.t + "px" : centerStyle.top,
-			bottom: sidebarLayout ? pe.b + "px" : centerStyle.bottom
-		};
-		dojo.mixin(leftStyle, bounds);
-		dojo.mixin(rightStyle, bounds);
-		leftStyle.left = pe.l + "px"; rightStyle.right = pe.r + "px"; topStyle.top = pe.t + "px"; bottomStyle.bottom = pe.b + "px";
-		if(sidebarLayout){
-			topStyle.left = bottomStyle.left = leftWidth + leftSplitterThickness + pe.l + "px";
-			topStyle.right = bottomStyle.right = rightWidth + rightSplitterThickness + pe.r + "px";
-		}else{
-			topStyle.left = bottomStyle.left = pe.l + "px";
-			topStyle.right = bottomStyle.right = pe.r + "px";
-		}
-
-		// More calculations about sizes of panes
-		var containerHeight = this._borderBox.h - pe.t - pe.b,
-			middleHeight = containerHeight - ( topHeight + topSplitterThickness + bottomHeight + bottomSplitterThickness),
-			sidebarHeight = sidebarLayout ? containerHeight : middleHeight;
-
-		var containerWidth = this._borderBox.w - pe.l - pe.r,
-			middleWidth = containerWidth - (leftWidth + leftSplitterThickness + rightWidth + rightSplitterThickness),
-			sidebarWidth = sidebarLayout ? middleWidth : containerWidth;
-
-		// New margin-box size of each pane
-		var dim = {
-			top:	{ w: sidebarWidth, h: topHeight },
-			bottom: { w: sidebarWidth, h: bottomHeight },
-			left:	{ w: leftWidth, h: sidebarHeight },
-			right:	{ w: rightWidth, h: sidebarHeight },
-			center:	{ h: middleHeight, w: middleWidth }
-		};
-
-		// Nodes in IE<8 don't respond to t/l/b/r, and TEXTAREA doesn't respond in any browser
-		var janky = dojo.isIE < 8 || (dojo.isIE && dojo.isQuirks) || dojo.some(this.getChildren(), function(child){
-			return child.domNode.tagName == "TEXTAREA" || child.domNode.tagName == "INPUT";
-		});
-		if(janky){
-			// Set the size of the children the old fashioned way, by setting
-			// CSS width and height
-
-			var resizeWidget = function(widget, changes, result){
-				if(widget){
-					(widget.resize ? widget.resize(changes, result) : dojo.marginBox(widget.domNode, changes));
-				}
-			};
-
-			if(leftSplitter){ leftSplitter.style.height = sidebarHeight; }
-			if(rightSplitter){ rightSplitter.style.height = sidebarHeight; }
-			resizeWidget(this._leftWidget, {h: sidebarHeight}, dim.left);
-			resizeWidget(this._rightWidget, {h: sidebarHeight}, dim.right);
-
-			if(topSplitter){ topSplitter.style.width = sidebarWidth; }
-			if(bottomSplitter){ bottomSplitter.style.width = sidebarWidth; }
-			resizeWidget(this._topWidget, {w: sidebarWidth}, dim.top);
-			resizeWidget(this._bottomWidget, {w: sidebarWidth}, dim.bottom);
-
-			resizeWidget(this._centerWidget, dim.center);
-		}else{
-			// We've already sized the children by setting style.top/bottom/left/right...
-			// Now just need to call resize() on those children telling them their new size,
-			// so they can re-layout themselves
-
-			// Calculate which panes need a notification
-			var resizeList = {};
-			if(changedRegion){
-				resizeList[changedRegion] = resizeList.center = true;
-				if(/top|bottom/.test(changedRegion) && this.design != "sidebar"){
-					resizeList.left = resizeList.right = true;
-				}else if(/left|right/.test(changedRegion) && this.design == "sidebar"){
-					resizeList.top = resizeList.bottom = true;
-				}
-			}
-
-			dojo.forEach(this.getChildren(), function(child){
-				if(child.resize && (!changedRegion || child.region in resizeList)){
-					child.resize(null, dim[child.region]);
-				}
-			}, this);
-		}
-	},
-
-	destroy: function(){
-		for(var region in this._splitters){
-			var splitter = this._splitters[region];
-			dijit.byNode(splitter).destroy();
-			dojo.destroy(splitter);
-		}
-		delete this._splitters;
-		delete this._splitterThickness;
-		this.inherited(arguments);
-	}
-});
-
-// This argument can be specified for the children of a BorderContainer.
-// Since any widget can be specified as a LayoutContainer child, mix it
-// into the base widget class.  (This is a hack, but it's effective.)
-dojo.extend(dijit._Widget, {
-	// region: [const] String
-	//		Parameter for children of `dijit.layout.BorderContainer`.
-	//		Values: "top", "bottom", "leading", "trailing", "left", "right", "center".
-	//		See the `dijit.layout.BorderContainer` description for details.
-	region: '',
-
-	// splitter: [const] Boolean
-	//		Parameter for child of `dijit.layout.BorderContainer` where region != "center".
-	//		If true, enables user to resize the widget by putting a draggable splitter between
-	//		this widget and the region=center widget.
-	splitter: false,
-
-	// minSize: [const] Number
-	//		Parameter for children of `dijit.layout.BorderContainer`.
-	//		Specifies a minimum size (in pixels) for this widget when resized by a splitter.
-	minSize: 0,
-
-	// maxSize: [const] Number
-	//		Parameter for children of `dijit.layout.BorderContainer`.
-	//		Specifies a maximum size (in pixels) for this widget when resized by a splitter.
-	maxSize: Infinity
-});
-
-dojo.require("dijit._Templated");
-
-dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ],
-{
-	// summary:
-	//		A draggable spacer between two items in a `dijit.layout.BorderContainer`.
-	// description:
-	//		This is instantiated by `dijit.layout.BorderContainer`.  Users should not
-	//		create it directly.
-	// tags:
-	//		private
-
-/*=====
- 	// container: [const] dijit.layout.BorderContainer
- 	//		Pointer to the parent BorderContainer
-	container: null,
-
-	// child: [const] dijit.layout._LayoutWidget
-	//		Pointer to the pane associated with this splitter
-	child: null,
-
-	// region: String
-	//		Region of pane associated with this splitter.
-	//		"top", "bottom", "left", "right".
-	region: null,
-=====*/
-
-	// live: [const] Boolean
-	//		If true, the child's size changes and the child widget is redrawn as you drag the splitter;
-	//		otherwise, the size doesn't change until you drop the splitter (by mouse-up)
-	live: true,
-
-	templateString: '<div class="dijitSplitter" dojoAttachEvent="onkeypress:_onKeyPress,onmousedown:_startDrag,onmouseenter:_onMouse,onmouseleave:_onMouse" tabIndex="0" waiRole="separator"><div class="dijitSplitterThumb"></div></div>',
-
-	postCreate: function(){
-		this.inherited(arguments);
-		this.horizontal = /top|bottom/.test(this.region);
-		dojo.addClass(this.domNode, "dijitSplitter" + (this.horizontal ? "H" : "V"));
-//		dojo.addClass(this.child.domNode, "dijitSplitterPane");
-//		dojo.setSelectable(this.domNode, false); //TODO is this necessary?
-
-		this._factor = /top|left/.test(this.region) ? 1 : -1;
-
-		this._cookieName = this.container.id + "_" + this.region;
-		if(this.container.persist){
-			// restore old size
-			var persistSize = dojo.cookie(this._cookieName);
-			if(persistSize){
-				this.child.domNode.style[this.horizontal ? "height" : "width"] = persistSize;
-			}
-		}
-	},
-
-	_computeMaxSize: function(){
-		// summary:
-		//		Compute the maximum size that my corresponding pane can be set to
-
-		var dim = this.horizontal ? 'h' : 'w',
-			thickness = this.container._splitterThickness[this.region];
-			
-		// Get DOMNode of opposite pane, if an opposite pane exists.
-		// Ex: if I am the _Splitter for the left pane, then get the right pane.
-		var flip = {left:'right', right:'left', top:'bottom', bottom:'top', leading:'trailing', trailing:'leading'},
-			oppNode = this.container["_" + flip[this.region]];
-		
-		// I can expand up to the edge of the opposite pane, or if there's no opposite pane, then to
-		// edge of BorderContainer
-		var available = dojo.contentBox(this.container.domNode)[dim] -
-				(oppNode ? dojo.marginBox(oppNode)[dim] : 0) -
-				20 - thickness * 2;
-
-		return Math.min(this.child.maxSize, available);
-	},
-
-	_startDrag: function(e){
-		if(!this.cover){
-			this.cover = dojo.doc.createElement('div');
-			dojo.addClass(this.cover, "dijitSplitterCover");
-			dojo.place(this.cover, this.child.domNode, "after");
-		}
-		dojo.addClass(this.cover, "dijitSplitterCoverActive");
-
-		// Safeguard in case the stop event was missed.  Shouldn't be necessary if we always get the mouse up.
-		if(this.fake){ dojo.destroy(this.fake); }
-		if(!(this._resize = this.live)){ //TODO: disable live for IE6?
-			// create fake splitter to display at old position while we drag
-			(this.fake = this.domNode.cloneNode(true)).removeAttribute("id");
-			dojo.addClass(this.domNode, "dijitSplitterShadow");
-			dojo.place(this.fake, this.domNode, "after");
-		}
-		dojo.addClass(this.domNode, "dijitSplitterActive");
-		dojo.addClass(this.domNode, "dijitSplitter" + (this.horizontal ? "H" : "V") + "Active");
-		if(this.fake){
-			dojo.removeClass(this.fake, "dijitSplitterHover");
-			dojo.removeClass(this.fake, "dijitSplitter" + (this.horizontal ? "H" : "V") + "Hover");
-		}
-
-		//Performance: load data info local vars for onmousevent function closure
-		var factor = this._factor,
-			max = this._computeMaxSize(),
-			min = this.child.minSize || 20,
-			isHorizontal = this.horizontal,
-			axis = isHorizontal ? "pageY" : "pageX",
-			pageStart = e[axis],
-			splitterStyle = this.domNode.style,
-			dim = isHorizontal ? 'h' : 'w',
-			childStart = dojo.marginBox(this.child.domNode)[dim],
-			region = this.region,
-			splitterStart = parseInt(this.domNode.style[region], 10),
-			resize = this._resize,
-			mb = {},
-			childNode = this.child.domNode,
-			layoutFunc = dojo.hitch(this.container, this.container._layoutChildren),
-			de = dojo.doc.body;
-
-		this._handlers = (this._handlers || []).concat([
-			dojo.connect(de, "onmousemove", this._drag = function(e, forceResize){
-				var delta = e[axis] - pageStart,
-					childSize = factor * delta + childStart,
-					boundChildSize = Math.max(Math.min(childSize, max), min);
-
-				if(resize || forceResize){
-					mb[dim] = boundChildSize;
-					// TODO: inefficient; we set the marginBox here and then immediately layoutFunc() needs to query it
-					dojo.marginBox(childNode, mb);
-					layoutFunc(region);
-				}
-				splitterStyle[region] = factor * delta + splitterStart + (boundChildSize - childSize) + "px";
-			}),
-			dojo.connect(dojo.doc, "ondragstart", dojo.stopEvent),
-			dojo.connect(dojo.body(), "onselectstart", dojo.stopEvent),
-			dojo.connect(de, "onmouseup", this, "_stopDrag")
-		]);
-		dojo.stopEvent(e);
-	},
-
-	_onMouse: function(e){
-		var o = (e.type == "mouseover" || e.type == "mouseenter");
-		dojo.toggleClass(this.domNode, "dijitSplitterHover", o);
-		dojo.toggleClass(this.domNode, "dijitSplitter" + (this.horizontal ? "H" : "V") + "Hover", o);
-	},
-
-	_stopDrag: function(e){
-		try{
-			if(this.cover){
-				dojo.removeClass(this.cover, "dijitSplitterCoverActive");
-			}
-			if(this.fake){ dojo.destroy(this.fake); }
-			dojo.removeClass(this.domNode, "dijitSplitterActive");
-			dojo.removeClass(this.domNode, "dijitSplitter" + (this.horizontal ? "H" : "V") + "Active");
-			dojo.removeClass(this.domNode, "dijitSplitterShadow");
-			this._drag(e); //TODO: redundant with onmousemove?
-			this._drag(e, true);
-		}finally{
-			this._cleanupHandlers();
-			delete this._drag;
-		}
-
-		if(this.container.persist){
-			dojo.cookie(this._cookieName, this.child.domNode.style[this.horizontal ? "height" : "width"], {expires:365});
-		}
-	},
-
-	_cleanupHandlers: function(){
-		dojo.forEach(this._handlers, dojo.disconnect);
-		delete this._handlers;
-	},
-
-	_onKeyPress: function(/*Event*/ e){
-		// should we apply typematic to this?
-		this._resize = true;
-		var horizontal = this.horizontal;
-		var tick = 1;
-		var dk = dojo.keys;
-		switch(e.charOrCode){
-			case horizontal ? dk.UP_ARROW : dk.LEFT_ARROW:
-				tick *= -1;
-//				break;
-			case horizontal ? dk.DOWN_ARROW : dk.RIGHT_ARROW:
-				break;
-			default:
-//				this.inherited(arguments);
-				return;
-		}
-		var childSize = dojo.marginBox(this.child.domNode)[ horizontal ? 'h' : 'w' ] + this._factor * tick;
-		var mb = {};
-		mb[ this.horizontal ? "h" : "w"] = Math.max(Math.min(childSize, this._computeMaxSize()), this.child.minSize);
-		dojo.marginBox(this.child.domNode, mb);
-		this.container._layoutChildren(this.region);
-		dojo.stopEvent(e);
-	},
-
-	destroy: function(){
-		this._cleanupHandlers();
-		delete this.child;
-		delete this.container;
-		delete this.cover;
-		delete this.fake;
-		this.inherited(arguments);
-	}
-});
-
-dojo.declare("dijit.layout._Gutter", [dijit._Widget, dijit._Templated ],
-{
-	// summary:
-	// 		Just a spacer div to separate side pane from center pane.
-	//		Basically a trick to lookup the gutter/splitter width from the theme.
-	// description:
-	//		Instantiated by `dijit.layout.BorderContainer`.  Users should not
-	//		create directly.
-	// tags:
-	//		private
-
-	templateString: '<div class="dijitGutter" waiRole="presentation"></div>',
-
-	postCreate: function(){
-		this.horizontal = /top|bottom/.test(this.region);
-		dojo.addClass(this.domNode, "dijitGutter" + (this.horizontal ? "H" : "V"));
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/ContentPane.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/ContentPane.js
deleted file mode 100644
index b35b70b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/ContentPane.js
+++ /dev/null
@@ -1,732 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.layout.ContentPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.ContentPane"] = true;
-dojo.provide("dijit.layout.ContentPane");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._Contained");
-dojo.require("dijit.layout._LayoutWidget");	// for dijit.layout.marginBox2contentBox()
-
-dojo.require("dojo.parser");
-dojo.require("dojo.string");
-dojo.require("dojo.html");
-dojo.requireLocalization("dijit", "loading", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
-
-dojo.declare(
-	"dijit.layout.ContentPane", dijit._Widget,
-{
-	// summary:
-	//		A widget that acts as a container for mixed HTML and widgets, and includes an Ajax interface
-	// description:
-	//		A widget that can be used as a stand alone widget
-	//		or as a base class for other widgets.
-	//
-	//		Handles replacement of document fragment using either external uri or javascript
-	//		generated markup or DOM content, instantiating widgets within that content.
-	//		Don't confuse it with an iframe, it only needs/wants document fragments.
-	//		It's useful as a child of LayoutContainer, SplitContainer, or TabContainer.
-	//		But note that those classes can contain any widget as a child.
-	// example:
-	//		Some quick samples:
-	//		To change the innerHTML use .attr('content', '<b>new content</b>')
-	//
-	//		Or you can send it a NodeList, .attr('content', dojo.query('div [class=selected]', userSelection))
-	//		please note that the nodes in NodeList will copied, not moved
-	//
-	//		To do a ajax update use .attr('href', url)
-
-	// href: String
-	//		The href of the content that displays now.
-	//		Set this at construction if you want to load data externally when the
-	//		pane is shown.  (Set preload=true to load it immediately.)
-	//		Changing href after creation doesn't have any effect; use attr('href', ...);
-	href: "",
-
-/*=====
-	// content: String || DomNode || NodeList || dijit._Widget
-	//		The innerHTML of the ContentPane.
-	//		Note that the initialization parameter / argument to attr("content", ...)
-	//		can be a String, DomNode, Nodelist, or _Widget.
-	content: "",
-=====*/
-
-	// extractContent: Boolean
-	//		Extract visible content from inside of <body> .... </body>.
-	//		I.e., strip <html> and <head> (and it's contents) from the href
-	extractContent: false,
-
-	// parseOnLoad: Boolean
-	//		Parse content and create the widgets, if any.
-	parseOnLoad: true,
-
-	// preventCache: Boolean
-	//		Prevent caching of data from href's by appending a timestamp to the href.
-	preventCache: false,
-
-	// preload: Boolean
-	//		Force load of data on initialization even if pane is hidden.
-	preload: false,
-
-	// refreshOnShow: Boolean
-	//		Refresh (re-download) content when pane goes from hidden to shown
-	refreshOnShow: false,
-
-	// loadingMessage: String
-	//		Message that shows while downloading
-	loadingMessage: "<span class='dijitContentPaneLoading'>${loadingState}</span>",
-
-	// errorMessage: String
-	//		Message that shows if an error occurs
-	errorMessage: "<span class='dijitContentPaneError'>${errorState}</span>",
-
-	// isLoaded: [readonly] Boolean
-	//		True if the ContentPane has data in it, either specified
-	//		during initialization (via href or inline content), or set
-	//		via attr('content', ...) / attr('href', ...)
-	//
-	//		False if it doesn't have any content, or if ContentPane is
-	//		still in the process of downloading href.
-	isLoaded: false,
-
-	baseClass: "dijitContentPane",
-
-	// doLayout: Boolean
-	//		- false - don't adjust size of children
-	//		- true - if there is a single visible child widget, set it's size to
-	//				however big the ContentPane is
-	doLayout: true,
-
-	// ioArgs: Object
-	//		Parameters to pass to xhrGet() request, for example:
-	// |	<div dojoType="dijit.layout.ContentPane" href="./bar" ioArgs="{timeout: 500}">
-	ioArgs: {},
-
-	// isContainer: [protected] Boolean
-	//		Indicates that this widget acts as a "parent" to the descendant widgets.
-	//		When the parent is started it will call startup() on the child widgets.
-	//		See also `isLayoutContainer`.
-	isContainer: true,
-
-	// isLayoutContainer: [protected] Boolean
-	//		Indicates that this widget will call resize() on it's child widgets
-	//		when they become visible.
-	isLayoutContainer: true,
-
-	// onLoadDeferred: [readonly] dojo.Deferred
-	//		This is the `dojo.Deferred` returned by attr('href', ...) and refresh().
-	//		Calling onLoadDeferred.addCallback() or addErrback() registers your
-	//		callback to be called only once, when the prior attr('href', ...) call or
-	//		the initial href parameter to the constructor finishes loading.
-	//
-	//		This is different than an onLoad() handler which gets called any time any href is loaded.
-	onLoadDeferred: null,
-
-	// Override _Widget's attributeMap because we don't want the title attribute (used to specify
-	// tab labels) to be copied to ContentPane.domNode... otherwise a tooltip shows up over the
-	// entire pane.
-	attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
-		title: []
-	}),
-
-	postMixInProperties: function(){
-		this.inherited(arguments);
-		var messages = dojo.i18n.getLocalization("dijit", "loading", this.lang);
-		this.loadingMessage = dojo.string.substitute(this.loadingMessage, messages);
-		this.errorMessage = dojo.string.substitute(this.errorMessage, messages);
-
-		// Detect if we were initialized with data
-		if(!this.href && this.srcNodeRef && this.srcNodeRef.innerHTML){
-			this.isLoaded = true;
-		}
-	},
-
-	buildRendering: function(){
-		// Overrides Widget.buildRendering().
-		// Since we have no template we need to set this.containerNode ourselves.
-		// For subclasses of ContentPane do have a template, does nothing.
-		this.inherited(arguments);
-		if(!this.containerNode){
-			// make getDescendants() work
-			this.containerNode = this.domNode;
-		}
-	},
-
-	postCreate: function(){
-		// remove the title attribute so it doesn't show up when hovering
-		// over a node
-		this.domNode.title = "";
-
-		if(!dojo.attr(this.domNode,"role")){
-			dijit.setWaiRole(this.domNode, "group");
-		}
-
-		dojo.addClass(this.domNode, this.baseClass);
-	},
-
-	startup: function(){
-		// summary:
-		//		See `dijit.layout._LayoutWidget.startup` for description.
-		//		Although ContentPane doesn't extend _LayoutWidget, it does implement
-		//		the same API.
-		if(this._started){ return; }
-
-		var parent = dijit._Contained.prototype.getParent.call(this);
-		this._childOfLayoutWidget = parent && parent.isLayoutContainer;
-
-		// I need to call resize() on my child/children (when I become visible), unless
-		// I'm the child of a layout widget in which case my parent will call resize() on me and I'll do it then.
-		this._needLayout = !this._childOfLayoutWidget;
-
-		if(this.isLoaded){
-			dojo.forEach(this.getChildren(), function(child){
-				child.startup();
-			});
-		}
-
-		if(this._isShown() || this.preload){
-			this._onShow();
-		}
-
-		this.inherited(arguments);
-	},
-
-	_checkIfSingleChild: function(){
-		// summary:
-		//		Test if we have exactly one visible widget as a child,
-		//		and if so assume that we are a container for that widget,
-		//		and should propogate startup() and resize() calls to it.
-		//		Skips over things like data stores since they aren't visible.
-
-		var childNodes = dojo.query("> *", this.containerNode).filter(function(node){
-				return node.tagName !== "SCRIPT"; // or a regexp for hidden elements like script|area|map|etc..
-			}),
-			childWidgetNodes = childNodes.filter(function(node){
-				return dojo.hasAttr(node, "dojoType") || dojo.hasAttr(node, "widgetId");
-			}),
-			candidateWidgets = dojo.filter(childWidgetNodes.map(dijit.byNode), function(widget){
-				return widget && widget.domNode && widget.resize;
-			});
-
-		if(
-			// all child nodes are widgets
-			childNodes.length == childWidgetNodes.length &&
-
-			// all but one are invisible (like dojo.data)
-			candidateWidgets.length == 1
-		){
-			this._singleChild = candidateWidgets[0];
-		}else{
-			delete this._singleChild;
-		}
-
-		// So we can set overflow: hidden to avoid a safari bug w/scrollbars showing up (#9449)
-		dojo.toggleClass(this.containerNode, this.baseClass + "SingleChild", !!this._singleChild);
-	},
-
-	setHref: function(/*String|Uri*/ href){
-		// summary:
-		//		Deprecated.   Use attr('href', ...) instead.
-		dojo.deprecated("dijit.layout.ContentPane.setHref() is deprecated. Use attr('href', ...) instead.", "", "2.0");
-		return this.attr("href", href);
-	},
-	_setHrefAttr: function(/*String|Uri*/ href){
-		// summary:
-		//		Hook so attr("href", ...) works.
-		// description:
-		//		Reset the (external defined) content of this pane and replace with new url
-		//		Note: It delays the download until widget is shown if preload is false.
-		//	href:
-		//		url to the page you want to get, must be within the same domain as your mainpage
-
-		// Cancel any in-flight requests (an attr('href') will cancel any in-flight attr('href', ...))
-		this.cancel();
-
-		this.onLoadDeferred = new dojo.Deferred(dojo.hitch(this, "cancel"));
-
-		this.href = href;
-
-		// _setHrefAttr() is called during creation and by the user, after creation.
-		// only in the second case do we actually load the URL; otherwise it's done in startup()
-		if(this._created && (this.preload || this._isShown())){
-			this._load();
-		}else{
-			// Set flag to indicate that href needs to be loaded the next time the
-			// ContentPane is made visible
-			this._hrefChanged = true;
-		}
-
-		return this.onLoadDeferred;		// dojo.Deferred
-	},
-
-	setContent: function(/*String|DomNode|Nodelist*/data){
-		// summary:
-		//		Deprecated.   Use attr('content', ...) instead.
-		dojo.deprecated("dijit.layout.ContentPane.setContent() is deprecated.  Use attr('content', ...) instead.", "", "2.0");
-		this.attr("content", data);
-	},
-	_setContentAttr: function(/*String|DomNode|Nodelist*/data){
-		// summary:
-		//		Hook to make attr("content", ...) work.
-		//		Replaces old content with data content, include style classes from old content
-		//	data:
-		//		the new Content may be String, DomNode or NodeList
-		//
-		//		if data is a NodeList (or an array of nodes) nodes are copied
-		//		so you can import nodes from another document implicitly
-
-		// clear href so we can't run refresh and clear content
-		// refresh should only work if we downloaded the content
-		this.href = "";
-
-		// Cancel any in-flight requests (an attr('content') will cancel any in-flight attr('href', ...))
-		this.cancel();
-
-		// Even though user is just setting content directly, still need to define an onLoadDeferred
-		// because the _onLoadHandler() handler is still getting called from setContent()
-		this.onLoadDeferred = new dojo.Deferred(dojo.hitch(this, "cancel"));
-
-		this._setContent(data || "");
-
-		this._isDownloaded = false; // mark that content is from a attr('content') not an attr('href')
-
-		return this.onLoadDeferred; 	// dojo.Deferred
-	},
-	_getContentAttr: function(){
-		// summary:
-		//		Hook to make attr("content") work
-		return this.containerNode.innerHTML;
-	},
-
-	cancel: function(){
-		// summary:
-		//		Cancels an in-flight download of content
-		if(this._xhrDfd && (this._xhrDfd.fired == -1)){
-			this._xhrDfd.cancel();
-		}
-		delete this._xhrDfd; // garbage collect
-
-		this.onLoadDeferred = null;
-	},
-
-	uninitialize: function(){
-		if(this._beingDestroyed){
-			this.cancel();
-		}
-		this.inherited(arguments);
-	},
-
-	destroyRecursive: function(/*Boolean*/ preserveDom){
-		// summary:
-		//		Destroy the ContentPane and its contents
-
-		// if we have multiple controllers destroying us, bail after the first
-		if(this._beingDestroyed){
-			return;
-		}
-		this.inherited(arguments);
-	},
-
-	resize: function(changeSize, resultSize){
-		// summary:
-		//		See `dijit.layout._LayoutWidget.resize` for description.
-		//		Although ContentPane doesn't extend _LayoutWidget, it does implement
-		//		the same API.
-
-		// For the TabContainer --> BorderContainer --> ContentPane case, _onShow() is
-		// never called, so resize() is our trigger to do the initial href download.
-		if(!this._wasShown){
-			this._onShow();
-		}
-
-		this._resizeCalled = true;
-
-		// Set margin box size, unless it wasn't specified, in which case use current size.
-		if(changeSize){
-			dojo.marginBox(this.domNode, changeSize);
-		}
-
-		// Compute content box size of containerNode in case we [later] need to size our single child.
-		var cn = this.containerNode;
-		if(cn === this.domNode){
-			// If changeSize or resultSize was passed to this method and this.containerNode ==
-			// this.domNode then we can compute the content-box size without querying the node,
-			// which is more reliable (similar to LayoutWidget.resize) (see for example #9449).
-			var mb = resultSize || {};
-			dojo.mixin(mb, changeSize || {}); // changeSize overrides resultSize
-			if(!("h" in mb) || !("w" in mb)){
-				mb = dojo.mixin(dojo.marginBox(cn), mb); // just use dojo.marginBox() to fill in missing values
-			}
-			this._contentBox = dijit.layout.marginBox2contentBox(cn, mb);
-		}else{
-			this._contentBox = dojo.contentBox(cn);
-		}
-
-		// Make my children layout, or size my single child widget
-		this._layoutChildren();
-	},
-
-	_isShown: function(){
-		// summary:
-		//		Returns true if the content is currently shown.
-		// description:
-		//		If I am a child of a layout widget then it actually returns true if I've ever been visible,
-		//		not whether I'm currently visible, since that's much faster than tracing up the DOM/widget
-		//		tree every call, and at least solves the performance problem on page load by deferring loading
-		//		hidden ContentPanes until they are first shown
-
-		if(this._childOfLayoutWidget){
-			// If we are TitlePane, etc - we return that only *IF* we've been resized
-			if(this._resizeCalled && "open" in this){
-				return this.open;
-			}
-			return this._resizeCalled;
-		}else if("open" in this){
-			return this.open;		// for TitlePane, etc.
-		}else{
-			// TODO: with _childOfLayoutWidget check maybe this branch no longer necessary?
-			var node = this.domNode;
-			return (node.style.display != 'none') && (node.style.visibility != 'hidden') && !dojo.hasClass(node, "dijitHidden");
-		}
-	},
-
-	_onShow: function(){
-		// summary:
-		//		Called when the ContentPane is made visible
-		// description:
-		//		For a plain ContentPane, this is called on initialization, from startup().
-		//		If the ContentPane is a hidden pane of a TabContainer etc., then it's
-		//		called whenever the pane is made visible.
-		//
-		//		Does necessary processing, including href download and layout/resize of
-		//		child widget(s)
-
-		if(this.href){
-			if(!this._xhrDfd && // if there's an href that isn't already being loaded
-				(!this.isLoaded || this._hrefChanged || this.refreshOnShow)
-			){
-				this.refresh();
-			}
-		}else{
-			// If we are the child of a layout widget then the layout widget will call resize() on
-			// us, and then we will size our child/children.   Otherwise, we need to do it now.
-			if(!this._childOfLayoutWidget && this._needLayout){
-				// If a layout has been scheduled for when we become visible, do it now
-				this._layoutChildren();
-			}
-		}
-
-		this.inherited(arguments);
-
-		// Need to keep track of whether ContentPane has been shown (which is different than
-		// whether or not it's currently visible).
-		this._wasShown = true;
-	},
-
-	refresh: function(){
-		// summary:
-		//		[Re]download contents of href and display
-		// description:
-		//		1. cancels any currently in-flight requests
-		//		2. posts "loading..." message
-		//		3. sends XHR to download new data
-
-		// Cancel possible prior in-flight request
-		this.cancel();
-
-		this.onLoadDeferred = new dojo.Deferred(dojo.hitch(this, "cancel"));
-		this._load();
-		return this.onLoadDeferred;
-	},
-
-	_load: function(){
-		// summary:
-		//		Load/reload the href specified in this.href
-
-		// display loading message
-		this._setContent(this.onDownloadStart(), true);
-
-		var self = this;
-		var getArgs = {
-			preventCache: (this.preventCache || this.refreshOnShow),
-			url: this.href,
-			handleAs: "text"
-		};
-		if(dojo.isObject(this.ioArgs)){
-			dojo.mixin(getArgs, this.ioArgs);
-		}
-
-		var hand = (this._xhrDfd = (this.ioMethod || dojo.xhrGet)(getArgs));
-
-		hand.addCallback(function(html){
-			try{
-				self._isDownloaded = true;
-				self._setContent(html, false);
-				self.onDownloadEnd();
-			}catch(err){
-				self._onError('Content', err); // onContentError
-			}
-			delete self._xhrDfd;
-			return html;
-		});
-
-		hand.addErrback(function(err){
-			if(!hand.canceled){
-				// show error message in the pane
-				self._onError('Download', err); // onDownloadError
-			}
-			delete self._xhrDfd;
-			return err;
-		});
-
-		// Remove flag saying that a load is needed
-		delete this._hrefChanged;
-	},
-
-	_onLoadHandler: function(data){
-		// summary:
-		//		This is called whenever new content is being loaded
-		this.isLoaded = true;
-		try{
-			this.onLoadDeferred.callback(data);
-			this.onLoad(data);
-		}catch(e){
-			console.error('Error '+this.widgetId+' running custom onLoad code: ' + e.message);
-		}
-	},
-
-	_onUnloadHandler: function(){
-		// summary:
-		//		This is called whenever the content is being unloaded
-		this.isLoaded = false;
-		try{
-			this.onUnload();
-		}catch(e){
-			console.error('Error '+this.widgetId+' running custom onUnload code: ' + e.message);
-		}
-	},
-
-	destroyDescendants: function(){
-		// summary:
-		//		Destroy all the widgets inside the ContentPane and empty containerNode
-
-		// Make sure we call onUnload (but only when the ContentPane has real content)
-		if(this.isLoaded){
-			this._onUnloadHandler();
-		}
-
-		// Even if this.isLoaded == false there might still be a "Loading..." message
-		// to erase, so continue...
-
-		// For historical reasons we need to delete all widgets under this.containerNode,
-		// even ones that the user has created manually.
-		var setter = this._contentSetter;
-		dojo.forEach(this.getChildren(), function(widget){
-			if(widget.destroyRecursive){
-				widget.destroyRecursive();
-			}
-		});
-		if(setter){
-			// Most of the widgets in setter.parseResults have already been destroyed, but
-			// things like Menu that have been moved to <body> haven't yet
-			dojo.forEach(setter.parseResults, function(widget){
-				if(widget.destroyRecursive && widget.domNode && widget.domNode.parentNode == dojo.body()){
-					widget.destroyRecursive();
-				}
-			});
-			delete setter.parseResults;
-		}
-
-		// And then clear away all the DOM nodes
-		dojo.html._emptyNode(this.containerNode);
-
-		// Delete any state information we have about current contents
-		delete this._singleChild;
-	},
-
-	_setContent: function(cont, isFakeContent){
-		// summary:
-		//		Insert the content into the container node
-
-		// first get rid of child widgets
-		this.destroyDescendants();
-
-		// dojo.html.set will take care of the rest of the details
-		// we provide an override for the error handling to ensure the widget gets the errors
-		// configure the setter instance with only the relevant widget instance properties
-		// NOTE: unless we hook into attr, or provide property setters for each property,
-		// we need to re-configure the ContentSetter with each use
-		var setter = this._contentSetter;
-		if(! (setter && setter instanceof dojo.html._ContentSetter)){
-			setter = this._contentSetter = new dojo.html._ContentSetter({
-				node: this.containerNode,
-				_onError: dojo.hitch(this, this._onError),
-				onContentError: dojo.hitch(this, function(e){
-					// fires if a domfault occurs when we are appending this.errorMessage
-					// like for instance if domNode is a UL and we try append a DIV
-					var errMess = this.onContentError(e);
-					try{
-						this.containerNode.innerHTML = errMess;
-					}catch(e){
-						console.error('Fatal '+this.id+' could not change content due to '+e.message, e);
-					}
-				})/*,
-				_onError */
-			});
-		};
-
-		var setterParams = dojo.mixin({
-			cleanContent: this.cleanContent,
-			extractContent: this.extractContent,
-			parseContent: this.parseOnLoad
-		}, this._contentSetterParams || {});
-
-		dojo.mixin(setter, setterParams);
-
-		setter.set( (dojo.isObject(cont) && cont.domNode) ? cont.domNode : cont );
-
-		// setter params must be pulled afresh from the ContentPane each time
-		delete this._contentSetterParams;
-
-		if(!isFakeContent){
-			// Startup each top level child widget (and they will start their children, recursively)
-			dojo.forEach(this.getChildren(), function(child){
-				// The parser has already called startup on all widgets *without* a getParent() method
-				if(!this.parseOnLoad || child.getParent){
-					child.startup();
-				}
-			}, this);
-
-			// Call resize() on each of my child layout widgets,
-			// or resize() on my single child layout widget...
-			// either now (if I'm currently visible)
-			// or when I become visible
-			this._scheduleLayout();
-
-			this._onLoadHandler(cont);
-		}
-	},
-
-	_onError: function(type, err, consoleText){
-		this.onLoadDeferred.errback(err);
-
-		// shows user the string that is returned by on[type]Error
-		// overide on[type]Error and return your own string to customize
-		var errText = this['on' + type + 'Error'].call(this, err);
-		if(consoleText){
-			console.error(consoleText, err);
-		}else if(errText){// a empty string won't change current content
-			this._setContent(errText, true);
-		}
-	},
-
-	_scheduleLayout: function(){
-		// summary:
-		//		Call resize() on each of my child layout widgets, either now
-		//		(if I'm currently visible) or when I become visible
-		if(this._isShown()){
-			this._layoutChildren();
-		}else{
-			this._needLayout = true;
-		}
-	},
-
-	_layoutChildren: function(){
-		// summary:
-		//		Since I am a Container widget, each of my children expects me to
-		//		call resize() or layout() on them.
-		// description:
-		//		Should be called on initialization and also whenever we get new content
-		//		(from an href, or from attr('content', ...))... but deferred until
-		//		the ContentPane is visible
-
-		if(this.doLayout){
-			this._checkIfSingleChild();
-		}
-
-		if(this._singleChild && this._singleChild.resize){
-			var cb = this._contentBox || dojo.contentBox(this.containerNode);
-
-			// note: if widget has padding this._contentBox will have l and t set,
-			// but don't pass them to resize() or it will doubly-offset the child
-			this._singleChild.resize({w: cb.w, h: cb.h});
-		}else{
-			// All my child widgets are independently sized (rather than matching my size),
-			// but I still need to call resize() on each child to make it layout.
-			dojo.forEach(this.getChildren(), function(widget){
-				if(widget.resize){
-					widget.resize();
-				}
-			});
-		}
-		delete this._needLayout;
-	},
-
-	// EVENT's, should be overide-able
-	onLoad: function(data){
-		// summary:
-		//		Event hook, is called after everything is loaded and widgetified
-		// tags:
-		//		callback
-	},
-
-	onUnload: function(){
-		// summary:
-		//		Event hook, is called before old content is cleared
-		// tags:
-		//		callback
-	},
-
-	onDownloadStart: function(){
-		// summary:
-		//		Called before download starts.
-		// description:
-		//		The string returned by this function will be the html
-		//		that tells the user we are loading something.
-		//		Override with your own function if you want to change text.
-		// tags:
-		//		extension
-		return this.loadingMessage;
-	},
-
-	onContentError: function(/*Error*/ error){
-		// summary:
-		//		Called on DOM faults, require faults etc. in content.
-		//
-		//		In order to display an error message in the pane, return
-		//		the error message from this method, as an HTML string.
-		//
-		//		By default (if this method is not overriden), it returns
-		//		nothing, so the error message is just printed to the console.
-		// tags:
-		//		extension
-	},
-
-	onDownloadError: function(/*Error*/ error){
-		// summary:
-		//		Called when download error occurs.
-		//
-		//		In order to display an error message in the pane, return
-		//		the error message from this method, as an HTML string.
-		//
-		//		Default behavior (if this method is not overriden) is to display
-		//		the error message inside the pane.
-		// tags:
-		//		extension
-		return this.errorMessage;
-	},
-
-	onDownloadEnd: function(){
-		// summary:
-		//		Called when download is finished.
-		// tags:
-		//		callback
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/LayoutContainer.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/LayoutContainer.js
deleted file mode 100644
index 26a1255..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/LayoutContainer.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.layout.LayoutContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.LayoutContainer"] = true;
-dojo.provide("dijit.layout.LayoutContainer");
-
-dojo.require("dijit.layout._LayoutWidget");
-
-dojo.declare("dijit.layout.LayoutContainer",
-	dijit.layout._LayoutWidget,
-	{
-	// summary:
-	//		Deprecated.  Use `dijit.layout.BorderContainer` instead.
-	//
-	// description:
-	//		Provides Delphi-style panel layout semantics.
-	//
-	//		A LayoutContainer is a box with a specified size (like style="width: 500px; height: 500px;"),
-	//		that contains children widgets marked with "layoutAlign" of "left", "right", "bottom", "top", and "client".
-	//		It takes it's children marked as left/top/bottom/right, and lays them out along the edges of the box,
-	//		and then it takes the child marked "client" and puts it into the remaining space in the middle.
-	//
-	//		Left/right positioning is similar to CSS's "float: left" and "float: right",
-	//		and top/bottom positioning would be similar to "float: top" and "float: bottom", if there were such
-	//		CSS.
-	//
-	//		Note that there can only be one client element, but there can be multiple left, right, top,
-	//		or bottom elements.
-	//
-	// example:
-	// |	<style>
-	// |		html, body{ height: 100%; width: 100%; }
-	// |	</style>
-	// |	<div dojoType="dijit.layout.LayoutContainer" style="width: 100%; height: 100%">
-	// |		<div dojoType="dijit.layout.ContentPane" layoutAlign="top">header text</div>
-	// |		<div dojoType="dijit.layout.ContentPane" layoutAlign="left" style="width: 200px;">table of contents</div>
-	// |		<div dojoType="dijit.layout.ContentPane" layoutAlign="client">client area</div>
-	// |	</div>
-	//
-	//		Lays out each child in the natural order the children occur in.
-	//		Basically each child is laid out into the "remaining space", where "remaining space" is initially
-	//		the content area of this widget, but is reduced to a smaller rectangle each time a child is added.
-	// tags:
-	//		deprecated
-
-	baseClass: "dijitLayoutContainer",
-
-	constructor: function(){
-		dojo.deprecated("dijit.layout.LayoutContainer is deprecated", "use BorderContainer instead", 2.0);
-	},
-
-	layout: function(){
-		dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
-	},
-
-	addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
-		this.inherited(arguments);
-		if(this._started){
-			dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
-		}
-	},
-
-	removeChild: function(/*dijit._Widget*/ widget){
-		this.inherited(arguments);
-		if(this._started){
-			dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
-		}
-	}
-});
-
-// This argument can be specified for the children of a LayoutContainer.
-// Since any widget can be specified as a LayoutContainer child, mix it
-// into the base widget class.  (This is a hack, but it's effective.)
-dojo.extend(dijit._Widget, {
-	// layoutAlign: String
-	//		"none", "left", "right", "bottom", "top", and "client".
-	//		See the LayoutContainer description for details on this parameter.
-	layoutAlign: 'none'
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/LinkPane.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/LinkPane.js
deleted file mode 100644
index 5cdcabd..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/LinkPane.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.layout.LinkPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.LinkPane"] = true;
-dojo.provide("dijit.layout.LinkPane");
-
-dojo.require("dijit.layout.ContentPane");
-dojo.require("dijit._Templated");
-
-dojo.declare("dijit.layout.LinkPane",
-	[dijit.layout.ContentPane, dijit._Templated],
-	{
-	// summary:
-	//		A ContentPane with an href where (when declared in markup)
-	//		the title is specified as innerHTML rather than as a title attribute.
-	// description:
-	//		LinkPane is just a ContentPane that is declared in markup similarly
-	//		to an anchor.  The anchor's body (the words between `<a>` and `</a>`)
-	//		become the title of the widget (used for TabContainer, AccordionContainer, etc.)
-	// example:
-	//	| <a href="foo.html">my title</a>
-
-	// I'm using a template because the user may specify the input as
-	// <a href="foo.html">title</a>, in which case we need to get rid of the
-	// <a> because we don't want a link.
-	templateString: '<div class="dijitLinkPane" dojoAttachPoint="containerNode"></div>',
-
-	postMixInProperties: function(){
-		// If user has specified node contents, they become the title
-		// (the link must be plain text)
-		if(this.srcNodeRef){
-			this.title += this.srcNodeRef.innerHTML;
-		}
-		this.inherited(arguments);
-	},
-
-	_fillContent: function(/*DomNode*/ source){
-		// Overrides _Templated._fillContent().
-
-		// _Templated._fillContent() relocates srcNodeRef innerHTML to templated container node,
-		// but in our case the srcNodeRef innerHTML is the title, so shouldn't be
-		// copied
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/ScrollingTabController.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/ScrollingTabController.js
deleted file mode 100644
index 3067e2c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/ScrollingTabController.js
+++ /dev/null
@@ -1,467 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.layout.ScrollingTabController"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.ScrollingTabController"] = true;
-dojo.provide("dijit.layout.ScrollingTabController");
-
-dojo.require("dijit.layout.TabController");
-dojo.require("dijit.Menu");
-
-dojo.declare("dijit.layout.ScrollingTabController",
-	dijit.layout.TabController,
-	{
-	// summary:
-	//		Set of tabs with left/right arrow keys and a menu to switch between tabs not
-	//		all fitting on a single row.
-	//		Works only for horizontal tabs (either above or below the content, not to the left
-	//		or right).
-	// tags:
-	//		private
-
-	templateString: dojo.cache("dijit.layout", "templates/ScrollingTabController.html", "<div class=\"dijitTabListContainer-${tabPosition}\" style=\"visibility:hidden\">\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\" buttonType=\"menuBtn\" buttonClass=\"tabStripMenuButton\"\n\t\t\ttabPosition=\"${tabPosition}\" dojoAttachPoint=\"_menuBtn\" showLabel=false>&darr;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\" buttonType=\"leftBtn\" buttonClass=\"tabStripSlideButtonLeft\"\n\t\t\ttabPosition=\"${tabPosition}\" dojoAttachPoint=\"_leftBtn\" dojoAttachEvent=\"onClick: doSlideLeft\" showLabel=false>&larr;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\" buttonType=\"rightBtn\" buttonClass=\"tabStripSlideButtonRight\"\n\t\t\ttabPosition=\"${tabPosition}\" dojoAttachPoint=\"_rightBtn\" dojoAttachEvent=\"onClick: doSlideRight\" showLabel=false>&rarr;</div>\n\t<div class='dijitTabListWrapper' dojoAttachPoint='tablistWrapper'>\n\t\t<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'\n\t\t\t\tdojoAttachPoint='containerNode' class='nowrapTabStrip'>\n\t\t</div>\n\t</div>\n</div>\n"),
-
-	// useMenu:[const] Boolean
-	//		True if a menu should be used to select tabs when they are too
-	//		wide to fit the TabContainer, false otherwise.
-	useMenu: true,
-
-	// useSlider: [const] Boolean
-	//		True if a slider should be used to select tabs when they are too
-	//		wide to fit the TabContainer, false otherwise.
-	useSlider: true,
-
-	// tabStripClass: String
-	//		The css class to apply to the tab strip, if it is visible.
-	tabStripClass: "",
-
-	widgetsInTemplate: true,
-
-	// _minScroll: Number
-	//		The distance in pixels from the edge of the tab strip which,
-	//		if a scroll animation is less than, forces the scroll to
-	//		go all the way to the left/right.
-	_minScroll: 5,
-
-	attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
-		"class": "containerNode"
-	}),
-
-	postCreate: function(){
-		this.inherited(arguments);
-		var n = this.domNode;
-
-		this.scrollNode = this.tablistWrapper;
-		this._initButtons();
-
-		if(!this.tabStripClass){
-			this.tabStripClass = "dijitTabContainer" +
-				this.tabPosition.charAt(0).toUpperCase() +
-				this.tabPosition.substr(1).replace(/-.*/, "") +
-				"None";
-			dojo.addClass(n, "tabStrip-disabled")
-		}
-
-		dojo.addClass(this.tablistWrapper, this.tabStripClass);
-	},
-
-	onStartup: function(){
-		this.inherited(arguments);
-
-		// Do not show the TabController until the related
-		// StackController has added it's children.  This gives
-		// a less visually jumpy instantiation.
-		dojo.style(this.domNode, "visibility", "visible");
-		this._postStartup = true;
-	},
-
-	onAddChild: function(page, insertIndex){
-		this.inherited(arguments);
-		var menuItem;
-		if(this.useMenu){
-			menuItem = new dijit.MenuItem({
-				label: page.title,
-				onClick: dojo.hitch(this, function(){
-					this.onSelectChild(page);
-				})
-			});
-			this._menuChildren[page.id] = menuItem;
-			this._menu.addChild(menuItem, insertIndex);
-		}
-
-		// update the menuItem label when the button label is updated
-		this.pane2handles[page.id].push(
-			this.connect(this.pane2button[page.id], "attr", function(name, value){
-				if(this._postStartup){
-					if(arguments.length == 2 && name == "label"){
-						if(menuItem){
-							menuItem.attr(name, value);
-						}
-	
-						// The changed label will have changed the width of the
-						// buttons, so do a resize
-						if(this._dim){
-							this.resize(this._dim);
-						}
-					}
-				}
-			})
-		);
-
-		// Increment the width of the wrapper when a tab is added
-		// This makes sure that the buttons never wrap.
-		// The value 200 is chosen as it should be bigger than most
-		// Tab button widths.
-		dojo.style(this.containerNode, "width",
-			(dojo.style(this.containerNode, "width") + 200) + "px");
-	},
-
-	onRemoveChild: function(page, insertIndex){
-		// null out _selectedTab because we are about to delete that dom node
-		var button = this.pane2button[page.id];
-		if(this._selectedTab === button.domNode){
-			this._selectedTab = null;
-		}
-
-		// delete menu entry corresponding to pane that was removed from TabContainer
-		if(this.useMenu && page && page.id && this._menuChildren[page.id]){
-			this._menu.removeChild(this._menuChildren[page.id]);
-			this._menuChildren[page.id].destroy();
-			delete this._menuChildren[page.id];
-		}
-
-		this.inherited(arguments);
-	},
-
-	_initButtons: function(){
-		// summary:
-		//		Creates the buttons used to scroll to view tabs that
-		//		may not be visible if the TabContainer is too narrow.
-		this._menuChildren = {};
-
-		// Make a list of the buttons to display when the tab labels become
-		// wider than the TabContainer, and hide the other buttons.
-		// Also gets the total width of the displayed buttons.
-		this._btnWidth = 0;
-		this._buttons = dojo.query("> .tabStripButton", this.domNode).filter(function(btn){
-			if((this.useMenu && btn == this._menuBtn.domNode) ||
-				(this.useSlider && (btn == this._rightBtn.domNode || btn == this._leftBtn.domNode))){
-				this._btnWidth += dojo.marginBox(btn).w;
-				return true;
-			}else{
-				dojo.style(btn, "display", "none");
-				return false;
-			}
-		}, this);
-
-		if(this.useMenu){
-			// Create the menu that is used to select tabs.
-			this._menu = new dijit.Menu({
-				id: this.id + "_menu",
-				targetNodeIds: [this._menuBtn.domNode],
-				leftClickToOpen: true,
-				refocus: false	// selecting a menu item sets focus to a TabButton
-			});
-			this._supportingWidgets.push(this._menu);
-		}
-	},
-
-	_getTabsWidth: function(){
-		var children = this.getChildren();
-		if(children.length){
-			var leftTab = children[this.isLeftToRight() ? 0 : children.length - 1].domNode,
-				rightTab = children[this.isLeftToRight() ? children.length - 1 : 0].domNode;
-			return rightTab.offsetLeft + dojo.style(rightTab, "width") - leftTab.offsetLeft;
-		}else{
-			return 0;
-		}
-	},
-
-	_enableBtn: function(width){
-		// summary:
-		//		Determines if the tabs are wider than the width of the TabContainer, and
-		//		thus that we need to display left/right/menu navigation buttons.
-		var tabsWidth = this._getTabsWidth();
-		width = width || dojo.style(this.scrollNode, "width");
-		return tabsWidth > 0 && width < tabsWidth;
-	},
-
-	resize: function(dim){
-		// summary:
-		//		Hides or displays the buttons used to scroll the tab list and launch the menu
-		//		that selects tabs.
-
-		if(this.domNode.offsetWidth == 0){
-			return;
-		}
-		
-		// Save the dimensions to be used when a child is renamed.
-		this._dim = dim;
-
-		// Set my height to be my natural height (tall enough for one row of tab labels),
-		// and my content-box width based on margin-box width specified in dim parameter.
-		// But first reset scrollNode.height in case it was set by layoutChildren() call
-		// in a previous run of this method.
-		this.scrollNode.style.height = "auto";
-		this._contentBox = dijit.layout.marginBox2contentBox(this.domNode, {h: 0, w: dim.w});
-		this._contentBox.h = this.scrollNode.offsetHeight;
-		dojo.contentBox(this.domNode, this._contentBox);
-
-		// Show/hide the left/right/menu navigation buttons depending on whether or not they
-		// are needed.
-		var enable = this._enableBtn(this._contentBox.w);
-		this._buttons.style("display", enable ? "" : "none");
-
-		// Position and size the navigation buttons and the tablist
-		this._leftBtn.layoutAlign = "left";
-		this._rightBtn.layoutAlign = "right";
-		this._menuBtn.layoutAlign = this.isLeftToRight() ? "right" : "left";
-		dijit.layout.layoutChildren(this.domNode, this._contentBox,
-			[this._menuBtn, this._leftBtn, this._rightBtn, {domNode: this.scrollNode, layoutAlign: "client"}]);
-
-		// set proper scroll so that selected tab is visible
-		if(this._selectedTab){
-			var w = this.scrollNode,
-				sl = this._convertToScrollLeft(this._getScrollForSelectedTab());
-			w.scrollLeft = sl;
-		}
-
-		// Enable/disabled left right buttons depending on whether or not user can scroll to left or right
-		this._setButtonClass(this._getScroll());
-	},
-
-	_getScroll: function(){
-		// summary:
-		//		Returns the current scroll of the tabs where 0 means
-		//		"scrolled all the way to the left" and some positive number, based on #
-		//		of pixels of possible scroll (ex: 1000) means "scrolled all the way to the right"
-		var sl = (this.isLeftToRight() || dojo.isIE < 8 || dojo.isQuirks || dojo.isWebKit) ? this.scrollNode.scrollLeft :
-				dojo.style(this.containerNode, "width") - dojo.style(this.scrollNode, "width")
-					 + (dojo.isIE == 8 ? -1 : 1) * this.scrollNode.scrollLeft;
-		return sl;
-	},
-
-	_convertToScrollLeft: function(val){
-		// summary:
-		//		Given a scroll value where 0 means "scrolled all the way to the left"
-		//		and some positive number, based on # of pixels of possible scroll (ex: 1000)
-		//		means "scrolled all the way to the right", return value to set this.scrollNode.scrollLeft
-		//		to achieve that scroll.
-		//
-		//		This method is to adjust for RTL funniness in various browsers and versions.
-		if(this.isLeftToRight() || dojo.isIE < 8 || dojo.isQuirks || dojo.isWebKit){
-			return val;
-		}else{
-			var maxScroll = dojo.style(this.containerNode, "width") - dojo.style(this.scrollNode, "width");
-			return (dojo.isIE == 8 ? -1 : 1) * (val - maxScroll);
-		}
-	},
-
-	onSelectChild: function(/*dijit._Widget*/ page){
-		// summary:
-		//		Smoothly scrolls to a tab when it is selected.
-
-		var tab = this.pane2button[page.id];
-		if(!tab || !page){return;}
-
-		var node = tab.domNode;
-		if(node != this._selectedTab){
-			this._selectedTab = node;
-
-			var sl = this._getScroll();
-
-			if(sl > node.offsetLeft ||
-					sl + dojo.style(this.scrollNode, "width") <
-					node.offsetLeft + dojo.style(node, "width")){
-				this.createSmoothScroll().play();
-			}
-		}
-
-		this.inherited(arguments);
-	},
-
-	_getScrollBounds: function(){
-		// summary:
-		//		Returns the minimum and maximum scroll setting to show the leftmost and rightmost
-		//		tabs (respectively)
-		var children = this.getChildren(),
-			scrollNodeWidth = dojo.style(this.scrollNode, "width"),		// about 500px
-			containerWidth = dojo.style(this.containerNode, "width"),	// 50,000px
-			maxPossibleScroll = containerWidth - scrollNodeWidth,	// scrolling until right edge of containerNode visible
-			tabsWidth = this._getTabsWidth();
-
-		if(children.length && tabsWidth > scrollNodeWidth){
-			// Scrolling should happen
-			return {
-				min: this.isLeftToRight() ? 0 : children[children.length-1].domNode.offsetLeft,
-				max: this.isLeftToRight() ?
-					(children[children.length-1].domNode.offsetLeft + dojo.style(children[children.length-1].domNode, "width")) - scrollNodeWidth :
-					maxPossibleScroll
-			};
-		}else{
-			// No scrolling needed, all tabs visible, we stay either scrolled to far left or far right (depending on dir)
-			var onlyScrollPosition = this.isLeftToRight() ? 0 : maxPossibleScroll;
-			return {
-				min: onlyScrollPosition,
-				max: onlyScrollPosition
-			};
-		}
-	},
-
-	_getScrollForSelectedTab: function(){
-		// summary:
-		//		Returns the scroll value setting so that the selected tab
-		//		will appear in the center
-		var w = this.scrollNode,
-			n = this._selectedTab,
-			scrollNodeWidth = dojo.style(this.scrollNode, "width"),
-			scrollBounds = this._getScrollBounds();
-
-		// TODO: scroll minimal amount (to either right or left) so that
-		// selected tab is fully visible, and just return if it's already visible?
-		var pos = (n.offsetLeft + dojo.style(n, "width")/2) - scrollNodeWidth/2;
-		pos = Math.min(Math.max(pos, scrollBounds.min), scrollBounds.max);
-
-		// TODO:
-		// If scrolling close to the left side or right side, scroll
-		// all the way to the left or right.  See this._minScroll.
-		// (But need to make sure that doesn't scroll the tab out of view...)
-		return pos;
-	},
-
-	createSmoothScroll : function(x){
-		// summary:
-		//		Creates a dojo._Animation object that smoothly scrolls the tab list
-		//		either to a fixed horizontal pixel value, or to the selected tab.
-		// description:
-		//		If an number argument is passed to the function, that horizontal
-		//		pixel position is scrolled to.  Otherwise the currently selected
-		//		tab is scrolled to.
-		// x: Integer?
-		//		An optional pixel value to scroll to, indicating distance from left.
-
-		// Calculate position to scroll to
-		if(arguments.length > 0){
-			// position specified by caller, just make sure it's within bounds
-			var scrollBounds = this._getScrollBounds();
-			x = Math.min(Math.max(x, scrollBounds.min), scrollBounds.max);
-		}else{
-			// scroll to center the current tab
-			x = this._getScrollForSelectedTab();
-		}
-
-		if(this._anim && this._anim.status() == "playing"){
-			this._anim.stop();
-		}
-
-		var self = this,
-			w = this.scrollNode,
-			anim = new dojo._Animation({
-				beforeBegin: function(){
-					if(this.curve){ delete this.curve; }
-					var oldS = w.scrollLeft,
-						newS = self._convertToScrollLeft(x);
-					anim.curve = new dojo._Line(oldS, newS);
-				},
-				onAnimate: function(val){
-					w.scrollLeft = val;
-				}
-			});
-		this._anim = anim;
-
-		// Disable/enable left/right buttons according to new scroll position
-		this._setButtonClass(x);
-
-		return anim; // dojo._Animation
-	},
-
-	_getBtnNode: function(e){
-		// summary:
-		//		Gets a button DOM node from a mouse click event.
-		// e:
-		//		The mouse click event.
-		var n = e.target;
-		while(n && !dojo.hasClass(n, "tabStripButton")){
-			n = n.parentNode;
-		}
-		return n;
-	},
-
-	doSlideRight: function(e){
-		// summary:
-		//		Scrolls the menu to the right.
-		// e:
-		//		The mouse click event.
-		this.doSlide(1, this._getBtnNode(e));
-	},
-
-	doSlideLeft: function(e){
-		// summary:
-		//		Scrolls the menu to the left.
-		// e:
-		//		The mouse click event.
-		this.doSlide(-1,this._getBtnNode(e));
-	},
-
-	doSlide: function(direction, node){
-		// summary:
-		//		Scrolls the tab list to the left or right by 75% of the widget width.
-		// direction:
-		//		If the direction is 1, the widget scrolls to the right, if it is
-		//		-1, it scrolls to the left.
-
-		if(node && dojo.hasClass(node, "dijitTabBtnDisabled")){return;}
-
-		var sWidth = dojo.style(this.scrollNode, "width");
-		var d = (sWidth * 0.75) * direction;
-
-		var to = this._getScroll() + d;
-
-		this._setButtonClass(to);
-
-		this.createSmoothScroll(to).play();
-	},
-
-	_setButtonClass: function(scroll){
-		// summary:
-		//		Adds or removes a class to the left and right scroll buttons
-		//		to indicate whether each one is enabled/disabled.
-		// description:
-		//		If the tabs are scrolled all the way to the left, the class
-		//		'dijitTabBtnDisabled' is added to the left button.
-		//		If the tabs are scrolled all the way to the right, the class
-		//		'dijitTabBtnDisabled' is added to the right button.
-		// scroll: Integer
-		//		amount of horizontal scroll
-
-		var cls = "dijitTabBtnDisabled",
-			scrollBounds = this._getScrollBounds();
-		dojo.toggleClass(this._leftBtn.domNode, cls, scroll <= scrollBounds.min);
-		dojo.toggleClass(this._rightBtn.domNode, cls, scroll >= scrollBounds.max);
-	}
-});
-
-dojo.declare("dijit.layout._ScrollingTabControllerButton",
-	dijit.form.Button,
-	{
-		baseClass: "dijitTab",
-
-		buttonType: "",
-
-		buttonClass: "",
-
-		tabPosition: "top",
-
-		templateString: dojo.cache("dijit.layout", "templates/_ScrollingTabControllerButton.html", "<div id=\"${id}-${buttonType}\" class=\"tabStripButton dijitTab ${buttonClass} tabStripButton-${tabPosition}\"\n\t\tdojoAttachEvent=\"onclick:_onButtonClick,onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\">\n\t<div role=\"presentation\" wairole=\"presentation\" class=\"dijitTabInnerDiv\" dojoattachpoint=\"innerDiv,focusNode\">\n\t\t<div role=\"presentation\" wairole=\"presentation\" class=\"dijitTabContent dijitButtonContents\" dojoattachpoint=\"tabContent\">\n\t\t\t<img src=\"${_blankGif}\"/>\n\t\t\t<span dojoAttachPoint=\"containerNode,titleNode\" class=\"dijitButtonText\"></span>\n\t\t</div>\n\t</div>\n</div>\n"),
-
-		// Override inherited tabIndex: 0 from dijit.form.Button, because user shouldn't be
-		// able to tab to the left/right/menu buttons
-		tabIndex: ""
-	}
-);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/SplitContainer.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/SplitContainer.js
deleted file mode 100644
index 1b4d8a3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/SplitContainer.js
+++ /dev/null
@@ -1,589 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.layout.SplitContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.SplitContainer"] = true;
-dojo.provide("dijit.layout.SplitContainer");
-
-//
-// FIXME: make it prettier
-// FIXME: active dragging upwards doesn't always shift other bars (direction calculation is wrong in this case)
-//
-
-dojo.require("dojo.cookie");
-dojo.require("dijit.layout._LayoutWidget");
-
-dojo.declare("dijit.layout.SplitContainer",
-	dijit.layout._LayoutWidget,
-	{
-	// summary:
-	//		Deprecated.  Use `dijit.layout.BorderContainer` instead.
-	// description:
-	//		A Container widget with sizing handles in-between each child.
-	//		Contains multiple children widgets, all of which are displayed side by side
-	//		(either horizontally or vertically); there's a bar between each of the children,
-	//		and you can adjust the relative size of each child by dragging the bars.
-	//
-	//		You must specify a size (width and height) for the SplitContainer.
-	// tags:
-	//		deprecated
-
-	constructor: function(){
-		dojo.deprecated("dijit.layout.SplitContainer is deprecated", "use BorderContainer with splitter instead", 2.0);
-	},
-
-	// activeSizing: Boolean
-	//		If true, the children's size changes as you drag the bar;
-	//		otherwise, the sizes don't change until you drop the bar (by mouse-up)
-	activeSizing: false,
-
-	// sizerWidth: Integer
-	//		Size in pixels of the bar between each child
-	sizerWidth: 7, // FIXME: this should be a CSS attribute (at 7 because css wants it to be 7 until we fix to css)
-
-	// orientation: String
-	//		either 'horizontal' or vertical; indicates whether the children are
-	//		arranged side-by-side or up/down.
-	orientation: 'horizontal',
-
-	// persist: Boolean
-	//		Save splitter positions in a cookie
-	persist: true,
-
-	baseClass: "dijitSplitContainer",
-
-	postMixInProperties: function(){
-		this.inherited("postMixInProperties",arguments);
-		this.isHorizontal = (this.orientation == 'horizontal');
-	},
-
-	postCreate: function(){
-		this.inherited(arguments);
-		this.sizers = [];
-
-		// overflow has to be explicitly hidden for splitContainers using gekko (trac #1435)
-		// to keep other combined css classes from inadvertantly making the overflow visible
-		if(dojo.isMozilla){
-			this.domNode.style.overflow = '-moz-scrollbars-none'; // hidden doesn't work
-		}
-
-		// create the fake dragger
-		if(typeof this.sizerWidth == "object"){
-			try{ //FIXME: do this without a try/catch
-				this.sizerWidth = parseInt(this.sizerWidth.toString());
-			}catch(e){ this.sizerWidth = 7; }
-		}
-		var sizer = dojo.doc.createElement('div');
-		this.virtualSizer = sizer;
-		sizer.style.position = 'relative';
-
-		// #1681: work around the dreaded 'quirky percentages in IE' layout bug
-		// If the splitcontainer's dimensions are specified in percentages, it
-		// will be resized when the virtualsizer is displayed in _showSizingLine
-		// (typically expanding its bounds unnecessarily). This happens because
-		// we use position: relative for .dijitSplitContainer.
-		// The workaround: instead of changing the display style attribute,
-		// switch to changing the zIndex (bring to front/move to back)
-
-		sizer.style.zIndex = 10;
-		sizer.className = this.isHorizontal ? 'dijitSplitContainerVirtualSizerH' : 'dijitSplitContainerVirtualSizerV';
-		this.domNode.appendChild(sizer);
-		dojo.setSelectable(sizer, false);
-	},
-
-	destroy: function(){
-		delete this.virtualSizer;
-		dojo.forEach(this._ownconnects, dojo.disconnect);
-		this.inherited(arguments);
-	},
-	startup: function(){
-		if(this._started){ return; }
-
-		dojo.forEach(this.getChildren(), function(child, i, children){
-			// attach the children and create the draggers
-			this._setupChild(child);
-
-			if(i < children.length-1){
-				this._addSizer();
-			}
-		}, this);
-
-		if(this.persist){
-			this._restoreState();
-		}
-
-		this.inherited(arguments);
-	},
-
-	_setupChild: function(/*dijit._Widget*/ child){
-		this.inherited(arguments);
-		child.domNode.style.position = "absolute";
-		dojo.addClass(child.domNode, "dijitSplitPane");
-	},
-
-	_onSizerMouseDown: function(e){
-		if(e.target.id){
-			for(var i=0;i<this.sizers.length;i++){
-				if(this.sizers[i].id == e.target.id){
-					break;
-				}
-			}
-			if(i<this.sizers.length){
-				this.beginSizing(e,i);
-			}
-		}
-	},
-	_addSizer: function(index){
-		index = index === undefined ? this.sizers.length : index;
-
-		// TODO: use a template for this!!!
-		var sizer = dojo.doc.createElement('div');
-		sizer.id=dijit.getUniqueId('dijit_layout_SplitterContainer_Splitter');
-		this.sizers.splice(index,0,sizer);
-		this.domNode.appendChild(sizer);
-
-		sizer.className = this.isHorizontal ? 'dijitSplitContainerSizerH' : 'dijitSplitContainerSizerV';
-
-		// add the thumb div
-		var thumb = dojo.doc.createElement('div');
-		thumb.className = 'thumb';
-		thumb.id = sizer.id;
-		sizer.appendChild(thumb);
-
-		// FIXME: are you serious? why aren't we using mover start/stop combo?
-		this.connect(sizer, "onmousedown", '_onSizerMouseDown');
-
-		dojo.setSelectable(sizer, false);
-	},
-
-	removeChild: function(widget){
-		// summary:
-		//		Remove sizer, but only if widget is really our child and
-		// we have at least one sizer to throw away
-		if(this.sizers.length){
-			var i=dojo.indexOf(this.getChildren(), widget)
-			if(i != -1){
-				if(i == this.sizers.length){
-					i--;
-				}
-				dojo.destroy(this.sizers[i]);
-				this.sizers.splice(i,1);
-			}
-		}
-
-		// Remove widget and repaint
-		this.inherited(arguments);
-		if(this._started){
-			this.layout();
-		}
-	},
-
-	addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
-		// summary:
-		//		Add a child widget to the container
-		// child:
-		//		a widget to add
-		// insertIndex:
-		//		postion in the "stack" to add the child widget
-
-		this.inherited(arguments);
-
-		if(this._started){
-			// Do the stuff that startup() does for each widget
-			var children = this.getChildren();
-			if(children.length > 1){
-				this._addSizer(insertIndex);
-			}
-
-			// and then reposition (ie, shrink) every pane to make room for the new guy
-			this.layout();
-		}
-	},
-
-	layout: function(){
-		// summary:
-		//		Do layout of panels
-
-		// base class defines this._contentBox on initial creation and also
-		// on resize
-		this.paneWidth = this._contentBox.w;
-		this.paneHeight = this._contentBox.h;
-
-		var children = this.getChildren();
-		if(!children.length){ return; }
-
-		//
-		// calculate space
-		//
-
-		var space = this.isHorizontal ? this.paneWidth : this.paneHeight;
-		if(children.length > 1){
-			space -= this.sizerWidth * (children.length - 1);
-		}
-
-		//
-		// calculate total of SizeShare values
-		//
-		var outOf = 0;
-		dojo.forEach(children, function(child){
-			outOf += child.sizeShare;
-		});
-
-		//
-		// work out actual pixels per sizeshare unit
-		//
-		var pixPerUnit = space / outOf;
-
-		//
-		// set the SizeActual member of each pane
-		//
-		var totalSize = 0;
-		dojo.forEach(children.slice(0, children.length - 1), function(child){
-			var size = Math.round(pixPerUnit * child.sizeShare);
-			child.sizeActual = size;
-			totalSize += size;
-		});
-
-		children[children.length-1].sizeActual = space - totalSize;
-
-		//
-		// make sure the sizes are ok
-		//
-		this._checkSizes();
-
-		//
-		// now loop, positioning each pane and letting children resize themselves
-		//
-
-		var pos = 0;
-		var size = children[0].sizeActual;
-		this._movePanel(children[0], pos, size);
-		children[0].position = pos;
-		pos += size;
-
-		// if we don't have any sizers, our layout method hasn't been called yet
-		// so bail until we are called..TODO: REVISIT: need to change the startup
-		// algorithm to guaranteed the ordering of calls to layout method
-		if(!this.sizers){
-			return;
-		}
-
-		dojo.some(children.slice(1), function(child, i){
-			// error-checking
-			if(!this.sizers[i]){
-				return true;
-			}
-			// first we position the sizing handle before this pane
-			this._moveSlider(this.sizers[i], pos, this.sizerWidth);
-			this.sizers[i].position = pos;
-			pos += this.sizerWidth;
-
-			size = child.sizeActual;
-			this._movePanel(child, pos, size);
-			child.position = pos;
-			pos += size;
-		}, this);
-	},
-
-	_movePanel: function(panel, pos, size){
-		if(this.isHorizontal){
-			panel.domNode.style.left = pos + 'px';	// TODO: resize() takes l and t parameters too, don't need to set manually
-			panel.domNode.style.top = 0;
-			var box = {w: size, h: this.paneHeight};
-			if(panel.resize){
-				panel.resize(box);
-			}else{
-				dojo.marginBox(panel.domNode, box);
-			}
-		}else{
-			panel.domNode.style.left = 0;	// TODO: resize() takes l and t parameters too, don't need to set manually
-			panel.domNode.style.top = pos + 'px';
-			var box = {w: this.paneWidth, h: size};
-			if(panel.resize){
-				panel.resize(box);
-			}else{
-				dojo.marginBox(panel.domNode, box);
-			}
-		}
-	},
-
-	_moveSlider: function(slider, pos, size){
-		if(this.isHorizontal){
-			slider.style.left = pos + 'px';
-			slider.style.top = 0;
-			dojo.marginBox(slider, { w: size, h: this.paneHeight });
-		}else{
-			slider.style.left = 0;
-			slider.style.top = pos + 'px';
-			dojo.marginBox(slider, { w: this.paneWidth, h: size });
-		}
-	},
-
-	_growPane: function(growth, pane){
-		if(growth > 0){
-			if(pane.sizeActual > pane.sizeMin){
-				if((pane.sizeActual - pane.sizeMin) > growth){
-
-					// stick all the growth in this pane
-					pane.sizeActual = pane.sizeActual - growth;
-					growth = 0;
-				}else{
-					// put as much growth in here as we can
-					growth -= pane.sizeActual - pane.sizeMin;
-					pane.sizeActual = pane.sizeMin;
-				}
-			}
-		}
-		return growth;
-	},
-
-	_checkSizes: function(){
-
-		var totalMinSize = 0;
-		var totalSize = 0;
-		var children = this.getChildren();
-
-		dojo.forEach(children, function(child){
-			totalSize += child.sizeActual;
-			totalMinSize += child.sizeMin;
-		});
-
-		// only make adjustments if we have enough space for all the minimums
-
-		if(totalMinSize <= totalSize){
-
-			var growth = 0;
-
-			dojo.forEach(children, function(child){
-				if(child.sizeActual < child.sizeMin){
-					growth += child.sizeMin - child.sizeActual;
-					child.sizeActual = child.sizeMin;
-				}
-			});
-
-			if(growth > 0){
-				var list = this.isDraggingLeft ? children.reverse() : children;
-				dojo.forEach(list, function(child){
-					growth = this._growPane(growth, child);
-				}, this);
-			}
-		}else{
-			dojo.forEach(children, function(child){
-				child.sizeActual = Math.round(totalSize * (child.sizeMin / totalMinSize));
-			});
-		}
-	},
-
-	beginSizing: function(e, i){
-		var children = this.getChildren();
-		this.paneBefore = children[i];
-		this.paneAfter = children[i+1];
-
-		this.isSizing = true;
-		this.sizingSplitter = this.sizers[i];
-
-		if(!this.cover){
-			this.cover = dojo.create('div', {
-					style: {
-						position:'absolute',
-						zIndex:5,
-						top: 0,
-						left: 0,
-						width: "100%",
-						height: "100%"
-					}
-				}, this.domNode);
-		}else{
-			this.cover.style.zIndex = 5;
-		}
-		this.sizingSplitter.style.zIndex = 6;
-
-		// TODO: REVISIT - we want MARGIN_BOX and core hasn't exposed that yet (but can't we use it anyway if we pay attention? we do elsewhere.)
-		this.originPos = dojo.position(children[0].domNode, true);
-		if(this.isHorizontal){
-			var client = e.layerX || e.offsetX || 0;
-			var screen = e.pageX;
-			this.originPos = this.originPos.x;
-		}else{
-			var client = e.layerY || e.offsetY || 0;
-			var screen = e.pageY;
-			this.originPos = this.originPos.y;
-		}
-		this.startPoint = this.lastPoint = screen;
-		this.screenToClientOffset = screen - client;
-		this.dragOffset = this.lastPoint - this.paneBefore.sizeActual - this.originPos - this.paneBefore.position;
-
-		if(!this.activeSizing){
-			this._showSizingLine();
-		}
-
-		//
-		// attach mouse events
-		//
-		this._ownconnects = [];
-		this._ownconnects.push(dojo.connect(dojo.doc.documentElement, "onmousemove", this, "changeSizing"));
-		this._ownconnects.push(dojo.connect(dojo.doc.documentElement, "onmouseup", this, "endSizing"));
-
-		dojo.stopEvent(e);
-	},
-
-	changeSizing: function(e){
-		if(!this.isSizing){ return; }
-		this.lastPoint = this.isHorizontal ? e.pageX : e.pageY;
-		this.movePoint();
-		if(this.activeSizing){
-			this._updateSize();
-		}else{
-			this._moveSizingLine();
-		}
-		dojo.stopEvent(e);
-	},
-
-	endSizing: function(e){
-		if(!this.isSizing){ return; }
-		if(this.cover){
-			this.cover.style.zIndex = -1;
-		}
-		if(!this.activeSizing){
-			this._hideSizingLine();
-		}
-
-		this._updateSize();
-
-		this.isSizing = false;
-
-		if(this.persist){
-			this._saveState(this);
-		}
-
-		dojo.forEach(this._ownconnects, dojo.disconnect);
-	},
-
-	movePoint: function(){
-
-		// make sure lastPoint is a legal point to drag to
-		var p = this.lastPoint - this.screenToClientOffset;
-
-		var a = p - this.dragOffset;
-		a = this.legaliseSplitPoint(a);
-		p = a + this.dragOffset;
-
-		this.lastPoint = p + this.screenToClientOffset;
-	},
-
-	legaliseSplitPoint: function(a){
-
-		a += this.sizingSplitter.position;
-
-		this.isDraggingLeft = !!(a > 0);
-
-		if(!this.activeSizing){
-			var min = this.paneBefore.position + this.paneBefore.sizeMin;
-			if(a < min){
-				a = min;
-			}
-
-			var max = this.paneAfter.position + (this.paneAfter.sizeActual - (this.sizerWidth + this.paneAfter.sizeMin));
-			if(a > max){
-				a = max;
-			}
-		}
-
-		a -= this.sizingSplitter.position;
-
-		this._checkSizes();
-
-		return a;
-	},
-
-	_updateSize: function(){
-	//FIXME: sometimes this.lastPoint is NaN
-		var pos = this.lastPoint - this.dragOffset - this.originPos;
-
-		var start_region = this.paneBefore.position;
-		var end_region = this.paneAfter.position + this.paneAfter.sizeActual;
-
-		this.paneBefore.sizeActual = pos - start_region;
-		this.paneAfter.position	= pos + this.sizerWidth;
-		this.paneAfter.sizeActual = end_region - this.paneAfter.position;
-
-		dojo.forEach(this.getChildren(), function(child){
-			child.sizeShare = child.sizeActual;
-		});
-
-		if(this._started){
-			this.layout();
-		}
-	},
-
-	_showSizingLine: function(){
-
-		this._moveSizingLine();
-
-		dojo.marginBox(this.virtualSizer,
-			this.isHorizontal ? { w: this.sizerWidth, h: this.paneHeight } : { w: this.paneWidth, h: this.sizerWidth });
-
-		this.virtualSizer.style.display = 'block';
-	},
-
-	_hideSizingLine: function(){
-		this.virtualSizer.style.display = 'none';
-	},
-
-	_moveSizingLine: function(){
-		var pos = (this.lastPoint - this.startPoint) + this.sizingSplitter.position;
-		dojo.style(this.virtualSizer,(this.isHorizontal ? "left" : "top"),pos+"px");
-		// this.virtualSizer.style[ this.isHorizontal ? "left" : "top" ] = pos + 'px'; // FIXME: remove this line if the previous is better
-	},
-
-	_getCookieName: function(i){
-		return this.id + "_" + i;
-	},
-
-	_restoreState: function(){
-		dojo.forEach(this.getChildren(), function(child, i){
-			var cookieName = this._getCookieName(i);
-			var cookieValue = dojo.cookie(cookieName);
-			if(cookieValue){
-				var pos = parseInt(cookieValue);
-				if(typeof pos == "number"){
-					child.sizeShare = pos;
-				}
-			}
-		}, this);
-	},
-
-	_saveState: function(){
-		if(!this.persist){
-			return;
-		}
-		dojo.forEach(this.getChildren(), function(child, i){
-			dojo.cookie(this._getCookieName(i), child.sizeShare, {expires:365});
-		}, this);
-	}
-});
-
-// These arguments can be specified for the children of a SplitContainer.
-// Since any widget can be specified as a SplitContainer child, mix them
-// into the base widget class.  (This is a hack, but it's effective.)
-dojo.extend(dijit._Widget, {
-	// sizeMin: [deprecated] Integer
-	//		Deprecated.  Parameter for children of `dijit.layout.SplitContainer`.
-	//		Minimum size (width or height) of a child of a SplitContainer.
-	//		The value is relative to other children's sizeShare properties.
-	sizeMin: 10,
-
-	// sizeShare: [deprecated] Integer
-	//		Deprecated.  Parameter for children of `dijit.layout.SplitContainer`.
-	//		Size (width or height) of a child of a SplitContainer.
-	//		The value is relative to other children's sizeShare properties.
-	//		For example, if there are two children and each has sizeShare=10, then
-	//		each takes up 50% of the available space.
-	sizeShare: 10
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/StackContainer.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/StackContainer.js
deleted file mode 100644
index 0bac766..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/StackContainer.js
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.layout.StackContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.StackContainer"] = true;
-dojo.provide("dijit.layout.StackContainer");
-
-dojo.require("dijit._Templated");
-dojo.require("dijit.layout._LayoutWidget");
-dojo.requireLocalization("dijit", "common", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
-dojo.require("dojo.cookie");
-
-dojo.declare(
-	"dijit.layout.StackContainer",
-	dijit.layout._LayoutWidget,
-	{
-	// summary:
-	//		A container that has multiple children, but shows only
-	//		one child at a time
-	//
-	// description:
-	//		A container for widgets (ContentPanes, for example) That displays
-	//		only one Widget at a time.
-	//
-	//		Publishes topics [widgetId]-addChild, [widgetId]-removeChild, and [widgetId]-selectChild
-	//
-	//		Can be base class for container, Wizard, Show, etc.
-
-	// doLayout: Boolean
-	//		If true, change the size of my currently displayed child to match my size
-	doLayout: true,
-
-	// persist: Boolean
-	//		Remembers the selected child across sessions
-	persist: false,
-
-	baseClass: "dijitStackContainer",
-
-/*=====
-	// selectedChildWidget: [readonly] dijit._Widget
-	//		References the currently selected child widget, if any.
-	//		Adjust selected child with selectChild() method.
-	selectedChildWidget: null,
-=====*/
-
-	postCreate: function(){
-		this.inherited(arguments);
-		dojo.addClass(this.domNode, "dijitLayoutContainer");
-		dijit.setWaiRole(this.containerNode, "tabpanel");
-		this.connect(this.domNode, "onkeypress", this._onKeyPress);
-	},
-
-	startup: function(){
-		if(this._started){ return; }
-
-		var children = this.getChildren();
-
-		// Setup each page panel to be initially hidden
-		dojo.forEach(children, this._setupChild, this);
-
-		// Figure out which child to initially display, defaulting to first one
-		if(this.persist){
-			this.selectedChildWidget = dijit.byId(dojo.cookie(this.id + "_selectedChild"));
-		}else{
-			dojo.some(children, function(child){
-				if(child.selected){
-					this.selectedChildWidget = child;
-				}
-				return child.selected;
-			}, this);
-		}
-		var selected = this.selectedChildWidget;
-		if(!selected && children[0]){
-			selected = this.selectedChildWidget = children[0];
-			selected.selected = true;
-		}
-
-		// Publish information about myself so any StackControllers can initialize.
-		// This needs to happen before this.inherited(arguments) so that for
-		// TabContainer, this._contentBox doesn't include the space for the tab labels.
-		dojo.publish(this.id+"-startup", [{children: children, selected: selected}]);
-
-		// Startup each child widget, and do initial layout like setting this._contentBox,
-		// then calls this.resize() which does the initial sizing on the selected child.
-		this.inherited(arguments);
-	},
-
-	resize: function(){
-		// Resize is called when we are first made visible (it's called from startup()
-		// if we are initially visible).   If this is the first time we've been made
-		// visible then show our first child.
-		var selected = this.selectedChildWidget;
-		if(selected && !this._hasBeenShown){
-			this._hasBeenShown = true;
-			this._showChild(selected);
-		}
-		this.inherited(arguments);
-	},
-
-	_setupChild: function(/*dijit._Widget*/ child){
-		// Overrides _LayoutWidget._setupChild()
-
-		this.inherited(arguments);
-
-		dojo.removeClass(child.domNode, "dijitVisible");
-		dojo.addClass(child.domNode, "dijitHidden");
-
-		// remove the title attribute so it doesn't show up when i hover
-		// over a node
-		child.domNode.title = "";
-	},
-
-	addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
-		// Overrides _Container.addChild() to do layout and publish events
-
-		this.inherited(arguments);
-
-		if(this._started){
-			dojo.publish(this.id+"-addChild", [child, insertIndex]);
-
-			// in case the tab titles have overflowed from one line to two lines
-			// (or, if this if first child, from zero lines to one line)
-			// TODO: w/ScrollingTabController this is no longer necessary, although
-			// ScrollTabController.resize() does need to get called to show/hide
-			// the navigation buttons as appropriate, but that's handled in ScrollingTabController.onAddChild()
-			this.layout();
-
-			// if this is the first child, then select it
-			if(!this.selectedChildWidget){
-				this.selectChild(child);
-			}
-		}
-	},
-
-	removeChild: function(/*dijit._Widget*/ page){
-		// Overrides _Container.removeChild() to do layout and publish events
-
-		this.inherited(arguments);
-
-		if(this._started){
-			// this will notify any tablists to remove a button; do this first because it may affect sizing
-			dojo.publish(this.id + "-removeChild", [page]);
-		}
-
-		// If we are being destroyed than don't run the code below (to select another page), because we are deleting
-		// every page one by one
-		if(this._beingDestroyed){ return; }
-
-		if(this._started){
-			// in case the tab titles now take up one line instead of two lines
-			// TODO: this is overkill in most cases since ScrollingTabController never changes size (for >= 1 tab)
-			this.layout();
-		}
-
-		if(this.selectedChildWidget === page){
-			this.selectedChildWidget = undefined;
-			if(this._started){
-				var children = this.getChildren();
-				if(children.length){
-					this.selectChild(children[0]);
-				}
-			}
-		}
-	},
-
-	selectChild: function(/*dijit._Widget|String*/ page){
-		// summary:
-		//		Show the given widget (which must be one of my children)
-		// page:
-		//		Reference to child widget or id of child widget
-
-		page = dijit.byId(page);
-
-		if(this.selectedChildWidget != page){
-			// Deselect old page and select new one
-			this._transition(page, this.selectedChildWidget);
-			this.selectedChildWidget = page;
-			dojo.publish(this.id+"-selectChild", [page]);
-
-			if(this.persist){
-				dojo.cookie(this.id + "_selectedChild", this.selectedChildWidget.id);
-			}
-		}
-	},
-
-	_transition: function(/*dijit._Widget*/newWidget, /*dijit._Widget*/oldWidget){
-		// summary:
-		//		Hide the old widget and display the new widget.
-		//		Subclasses should override this.
-		// tags:
-		//		protected extension
-		if(oldWidget){
-			this._hideChild(oldWidget);
-		}
-		this._showChild(newWidget);
-
-		// Size the new widget, in case this is the first time it's being shown,
-		// or I have been resized since the last time it was shown.
-		// Note that page must be visible for resizing to work.
-		if(newWidget.resize){
-			if(this.doLayout){
-				newWidget.resize(this._containerContentBox || this._contentBox);
-			}else{
-				// the child should pick it's own size but we still need to call resize()
-				// (with no arguments) to let the widget lay itself out
-				newWidget.resize();
-			}
-		}
-	},
-
-	_adjacent: function(/*Boolean*/ forward){
-		// summary:
-		//		Gets the next/previous child widget in this container from the current selection.
-		var children = this.getChildren();
-		var index = dojo.indexOf(children, this.selectedChildWidget);
-		index += forward ? 1 : children.length - 1;
-		return children[ index % children.length ]; // dijit._Widget
-	},
-
-	forward: function(){
-		// summary:
-		//		Advance to next page.
-		this.selectChild(this._adjacent(true));
-	},
-
-	back: function(){
-		// summary:
-		//		Go back to previous page.
-		this.selectChild(this._adjacent(false));
-	},
-
-	_onKeyPress: function(e){
-		dojo.publish(this.id+"-containerKeyPress", [{ e: e, page: this}]);
-	},
-
-	layout: function(){
-		// Implement _LayoutWidget.layout() virtual method.
-		if(this.doLayout && this.selectedChildWidget && this.selectedChildWidget.resize){
-			this.selectedChildWidget.resize(this._contentBox);
-		}
-	},
-
-	_showChild: function(/*dijit._Widget*/ page){
-		// summary:
-		//		Show the specified child by changing it's CSS, and call _onShow()/onShow() so
-		//		it can do any updates it needs regarding loading href's etc.
-		var children = this.getChildren();
-		page.isFirstChild = (page == children[0]);
-		page.isLastChild = (page == children[children.length-1]);
-		page.selected = true;
-
-		dojo.removeClass(page.domNode, "dijitHidden");
-		dojo.addClass(page.domNode, "dijitVisible");
-
-		page._onShow();
-	},
-
-	_hideChild: function(/*dijit._Widget*/ page){
-		// summary:
-		//		Hide the specified child by changing it's CSS, and call _onHide() so
-		//		it's notified.
-		page.selected=false;
-		dojo.removeClass(page.domNode, "dijitVisible");
-		dojo.addClass(page.domNode, "dijitHidden");
-
-		page.onHide();
-	},
-
-	closeChild: function(/*dijit._Widget*/ page){
-		// summary:
-		//		Callback when user clicks the [X] to remove a page.
-		//		If onClose() returns true then remove and destroy the child.
-		// tags:
-		//		private
-		var remove = page.onClose(this, page);
-		if(remove){
-			this.removeChild(page);
-			// makes sure we can clean up executeScripts in ContentPane onUnLoad
-			page.destroyRecursive();
-		}
-	},
-
-	destroyDescendants: function(/*Boolean*/preserveDom){
-		dojo.forEach(this.getChildren(), function(child){
-			this.removeChild(child);
-			child.destroyRecursive(preserveDom);
-		}, this);
-	}
-});
-
-// For back-compat, remove for 2.0
-dojo.require("dijit.layout.StackController");
-
-
-// These arguments can be specified for the children of a StackContainer.
-// Since any widget can be specified as a StackContainer child, mix them
-// into the base widget class.  (This is a hack, but it's effective.)
-dojo.extend(dijit._Widget, {
-	// selected: Boolean
-	//		Parameter for children of `dijit.layout.StackContainer` or subclasses.
-	//		Specifies that this widget should be the initially displayed pane.
-	//		Note: to change the selected child use `dijit.layout.StackContainer.selectChild`
-	selected: false,
-
-	// closable: Boolean
-	//		Parameter for children of `dijit.layout.StackContainer` or subclasses.
-	//		True if user can close (destroy) this child, such as (for example) clicking the X on the tab.
-	closable: false,
-
-	// iconClass: String
-	//		Parameter for children of `dijit.layout.StackContainer` or subclasses.
-	//		CSS Class specifying icon to use in label associated with this pane.
-	iconClass: "",
-
-	// showTitle: Boolean
-	//		Parameter for children of `dijit.layout.StackContainer` or subclasses.
-	//		When true, display title of this widget as tab label etc., rather than just using
-	//		icon specified in iconClass
-	showTitle: true,
-
-	onClose: function(){
-		// summary:
-		//		Parameter for children of `dijit.layout.StackContainer` or subclasses.
-		//		Callback if a user tries to close the child.   Child will be closed if this function returns true.
-		// tags:
-		//		extension
-
-		return true;		// Boolean
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/StackController.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/StackController.js
deleted file mode 100644
index 5a9f168..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/StackController.js
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.layout.StackController"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.StackController"] = true;
-dojo.provide("dijit.layout.StackController");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._Templated");
-dojo.require("dijit._Container");
-dojo.require("dijit.form.ToggleButton");
-dojo.requireLocalization("dijit", "common", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
-
-dojo.declare(
-		"dijit.layout.StackController",
-		[dijit._Widget, dijit._Templated, dijit._Container],
-		{
-			// summary:
-			//		Set of buttons to select a page in a page list.
-			// description:
-			//		Monitors the specified StackContainer, and whenever a page is
-			//		added, deleted, or selected, updates itself accordingly.
-
-			templateString: "<span wairole='tablist' dojoAttachEvent='onkeypress' class='dijitStackController'></span>",
-
-			// containerId: [const] String
-			//		The id of the page container that I point to
-			containerId: "",
-
-			// buttonWidget: [const] String
-			//		The name of the button widget to create to correspond to each page
-			buttonWidget: "dijit.layout._StackButton",
-
-			postCreate: function(){
-				dijit.setWaiRole(this.domNode, "tablist");
-
-				this.pane2button = {};		// mapping from pane id to buttons
-				this.pane2handles = {};		// mapping from pane id to this.connect() handles
-
-				// Listen to notifications from StackContainer
-				this.subscribe(this.containerId+"-startup", "onStartup");
-				this.subscribe(this.containerId+"-addChild", "onAddChild");
-				this.subscribe(this.containerId+"-removeChild", "onRemoveChild");
-				this.subscribe(this.containerId+"-selectChild", "onSelectChild");
-				this.subscribe(this.containerId+"-containerKeyPress", "onContainerKeyPress");
-			},
-
-			onStartup: function(/*Object*/ info){
-				// summary:
-				//		Called after StackContainer has finished initializing
-				// tags:
-				//		private
-				dojo.forEach(info.children, this.onAddChild, this);
-				if(info.selected){
-					// Show button corresponding to selected pane (unless selected
-					// is null because there are no panes)
-					this.onSelectChild(info.selected);
-				}
-			},
-
-			destroy: function(){
-				for(var pane in this.pane2button){
-					this.onRemoveChild(dijit.byId(pane));
-				}
-				this.inherited(arguments);
-			},
-
-			onAddChild: function(/*dijit._Widget*/ page, /*Integer?*/ insertIndex){
-				// summary:
-				//		Called whenever a page is added to the container.
-				//		Create button corresponding to the page.
-				// tags:
-				//		private
-
-				// add a node that will be promoted to the button widget
-				var refNode = dojo.doc.createElement("span");
-				this.domNode.appendChild(refNode);
-				// create an instance of the button widget
-				var cls = dojo.getObject(this.buttonWidget);
-				var button = new cls({
-					id: this.id + "_" + page.id,
-					label: page.title,
-					showLabel: page.showTitle,
-					iconClass: page.iconClass,
-					closeButton: page.closable,
-					title: page.tooltip
-				}, refNode);
-				dijit.setWaiState(button.focusNode,"selected", "false");
-				this.pane2handles[page.id] = [
-					this.connect(page, 'attr', function(name, value){
-						if(arguments.length == 2){
-							var buttonAttr = {
-								title: 'label',
-								showTitle: 'showLabel',
-								iconClass: 'iconClass',
-								closable: 'closeButton',
-								tooltip: 'title'
-							}[name];
-							if(buttonAttr){
-								button.attr(buttonAttr, value);
-							}
-						}
-					}),
-					this.connect(button, 'onClick', dojo.hitch(this,"onButtonClick", page)),
-					this.connect(button, 'onClickCloseButton', dojo.hitch(this,"onCloseButtonClick", page))
-				];
-				this.addChild(button, insertIndex);
-				this.pane2button[page.id] = button;
-				page.controlButton = button;	// this value might be overwritten if two tabs point to same container
-				if(!this._currentChild){ // put the first child into the tab order
-					button.focusNode.setAttribute("tabIndex", "0");
-					dijit.setWaiState(button.focusNode, "selected", "true");
-					this._currentChild = page;
-				}
-				// make sure all tabs have the same length
-				if(!this.isLeftToRight() && dojo.isIE && this._rectifyRtlTabList){
-					this._rectifyRtlTabList();
-				}
-			},
-
-			onRemoveChild: function(/*dijit._Widget*/ page){
-				// summary:
-				//		Called whenever a page is removed from the container.
-				//		Remove the button corresponding to the page.
-				// tags:
-				//		private
-
-				if(this._currentChild === page){ this._currentChild = null; }
-				dojo.forEach(this.pane2handles[page.id], this.disconnect, this);
-				delete this.pane2handles[page.id];
-				var button = this.pane2button[page.id];
-				if(button){
-					this.removeChild(button);
-					delete this.pane2button[page.id];
-					button.destroy();
-				}
-				delete page.controlButton;
-			},
-
-			onSelectChild: function(/*dijit._Widget*/ page){
-				// summary:
-				//		Called when a page has been selected in the StackContainer, either by me or by another StackController
-				// tags:
-				//		private
-
-				if(!page){ return; }
-
-				if(this._currentChild){
-					var oldButton=this.pane2button[this._currentChild.id];
-					oldButton.attr('checked', false);
-					dijit.setWaiState(oldButton.focusNode, "selected", "false");
-					oldButton.focusNode.setAttribute("tabIndex", "-1");
-				}
-
-				var newButton=this.pane2button[page.id];
-				newButton.attr('checked', true);
-				dijit.setWaiState(newButton.focusNode, "selected", "true");
-				this._currentChild = page;
-				newButton.focusNode.setAttribute("tabIndex", "0");
-				var container = dijit.byId(this.containerId);
-				dijit.setWaiState(container.containerNode, "labelledby", newButton.id);
-			},
-
-			onButtonClick: function(/*dijit._Widget*/ page){
-				// summary:
-				//		Called whenever one of my child buttons is pressed in an attempt to select a page
-				// tags:
-				//		private
-
-				var container = dijit.byId(this.containerId);
-				container.selectChild(page);
-			},
-
-			onCloseButtonClick: function(/*dijit._Widget*/ page){
-				// summary:
-				//		Called whenever one of my child buttons [X] is pressed in an attempt to close a page
-				// tags:
-				//		private
-
-				var container = dijit.byId(this.containerId);
-				container.closeChild(page);
-				if(this._currentChild){
-					var b = this.pane2button[this._currentChild.id];
-					if(b){
-						dijit.focus(b.focusNode || b.domNode);
-					}
-				}
-			},
-
-			// TODO: this is a bit redundant with forward, back api in StackContainer
-			adjacent: function(/*Boolean*/ forward){
-				// summary:
-				//		Helper for onkeypress to find next/previous button
-				// tags:
-				//		private
-
-				if(!this.isLeftToRight() && (!this.tabPosition || /top|bottom/.test(this.tabPosition))){ forward = !forward; }
-				// find currently focused button in children array
-				var children = this.getChildren();
-				var current = dojo.indexOf(children, this.pane2button[this._currentChild.id]);
-				// pick next button to focus on
-				var offset = forward ? 1 : children.length - 1;
-				return children[ (current + offset) % children.length ]; // dijit._Widget
-			},
-
-			onkeypress: function(/*Event*/ e){
-				// summary:
-				//		Handle keystrokes on the page list, for advancing to next/previous button
-				//		and closing the current page if the page is closable.
-				// tags:
-				//		private
-
-				if(this.disabled || e.altKey ){ return; }
-				var forward = null;
-				if(e.ctrlKey || !e._djpage){
-					var k = dojo.keys;
-					switch(e.charOrCode){
-						case k.LEFT_ARROW:
-						case k.UP_ARROW:
-							if(!e._djpage){ forward = false; }
-							break;
-						case k.PAGE_UP:
-							if(e.ctrlKey){ forward = false; }
-							break;
-						case k.RIGHT_ARROW:
-						case k.DOWN_ARROW:
-							if(!e._djpage){ forward = true; }
-							break;
-						case k.PAGE_DOWN:
-							if(e.ctrlKey){ forward = true; }
-							break;
-						case k.DELETE:
-							if(this._currentChild.closable){
-								this.onCloseButtonClick(this._currentChild);
-							}
-							dojo.stopEvent(e);
-							break;
-						default:
-							if(e.ctrlKey){
-								if(e.charOrCode === k.TAB){
-									this.adjacent(!e.shiftKey).onClick();
-									dojo.stopEvent(e);
-								}else if(e.charOrCode == "w"){
-									if(this._currentChild.closable){
-										this.onCloseButtonClick(this._currentChild);
-									}
-									dojo.stopEvent(e); // avoid browser tab closing.
-								}
-							}
-					}
-					// handle page navigation
-					if(forward !== null){
-						this.adjacent(forward).onClick();
-						dojo.stopEvent(e);
-					}
-				}
-			},
-
-			onContainerKeyPress: function(/*Object*/ info){
-				// summary:
-				//		Called when there was a keypress on the container
-				// tags:
-				//		private
-				info.e._djpage = info.page;
-				this.onkeypress(info.e);
-			}
-	});
-
-
-dojo.declare("dijit.layout._StackButton",
-		dijit.form.ToggleButton,
-		{
-		// summary:
-		//		Internal widget used by StackContainer.
-		// description:
-		//		The button-like or tab-like object you click to select or delete a page
-		// tags:
-		//		private
-
-		// Override _FormWidget.tabIndex.
-		// StackContainer buttons are not in the tab order by default.
-		// Probably we should be calling this.startupKeyNavChildren() instead.
-		tabIndex: "-1",
-
-		postCreate: function(/*Event*/ evt){
-			dijit.setWaiRole((this.focusNode || this.domNode), "tab");
-			this.inherited(arguments);
-		},
-
-		onClick: function(/*Event*/ evt){
-			// summary:
-			//		This is for TabContainer where the tabs are <span> rather than button,
-			//		so need to set focus explicitly (on some browsers)
-			//		Note that you shouldn't override this method, but you can connect to it.
-			dijit.focus(this.focusNode);
-
-			// ... now let StackController catch the event and tell me what to do
-		},
-
-		onClickCloseButton: function(/*Event*/ evt){
-			// summary:
-			//		StackContainer connects to this function; if your widget contains a close button
-			//		then clicking it should call this function.
-			//		Note that you shouldn't override this method, but you can connect to it.
-			evt.stopPropagation();
-		}
-	});
-
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/TabContainer.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/TabContainer.js
deleted file mode 100644
index d0c3aec..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/TabContainer.js
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.layout.TabContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.TabContainer"] = true;
-dojo.provide("dijit.layout.TabContainer");
-
-dojo.require("dijit.layout._TabContainerBase");
-dojo.require("dijit.layout.TabController");
-dojo.require("dijit.layout.ScrollingTabController");
-
-dojo.declare("dijit.layout.TabContainer",
-	dijit.layout._TabContainerBase,
-	{
-		// summary:
-		//		A Container with tabs to select each child (only one of which is displayed at a time).
-		// description:
-		//		A TabContainer is a container that has multiple panes, but shows only
-		//		one pane at a time.  There are a set of tabs corresponding to each pane,
-		//		where each tab has the name (aka title) of the pane, and optionally a close button.
-
-		// useMenu: [const] Boolean
-		//		True if a menu should be used to select tabs when they are too
-		//		wide to fit the TabContainer, false otherwise.
-		useMenu: true,
-
-		// useSlider: [const] Boolean
-		//		True if a slider should be used to select tabs when they are too
-		//		wide to fit the TabContainer, false otherwise.
-		useSlider: true,
-
-		// controllerWidget: String
-		//		An optional parameter to override the widget used to display the tab labels
-		controllerWidget: "",
-
-		_makeController: function(/*DomNode*/ srcNode){
-			// summary:
-			//		Instantiate tablist controller widget and return reference to it.
-			//		Callback from _TabContainerBase.postCreate().
-			// tags:
-			//		protected extension
-
-			var cls = this.baseClass + "-tabs" + (this.doLayout ? "" : " dijitTabNoLayout"),
-				TabController = dojo.getObject(this.controllerWidget);
-
-			return new TabController({
-				id: this.id + "_tablist",
-				tabPosition: this.tabPosition,
-				doLayout: this.doLayout,
-				containerId: this.id,
-				"class": cls,
-				nested: this.nested,
-				useMenu: this.useMenu,
-				useSlider: this.useSlider,
-				tabStripClass: this.tabStrip ? this.baseClass + (this.tabStrip ? "":"No") + "Strip": null
-			}, srcNode);
-		},
-
-		postMixInProperties: function(){
-			this.inherited(arguments);
-
-			// Scrolling controller only works for horizontal non-nested tabs
-			if(!this.controllerWidget){
-				this.controllerWidget = (this.tabPosition == "top" || this.tabPosition == "bottom") && !this.nested ?
-							"dijit.layout.ScrollingTabController" : "dijit.layout.TabController";
-			}
-		}
-});
-
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/TabController.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/TabController.js
deleted file mode 100644
index 55e37d0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/TabController.js
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.layout.TabController"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.TabController"] = true;
-dojo.provide("dijit.layout.TabController");
-
-dojo.require("dijit.layout.StackController");
-
-// Menu is used for an accessible close button, would be nice to have a lighter-weight solution
-dojo.require("dijit.Menu");
-dojo.require("dijit.MenuItem");
-
-dojo.requireLocalization("dijit", "common", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
-
-dojo.declare("dijit.layout.TabController",
-	dijit.layout.StackController,
-{
-	// summary:
-	// 		Set of tabs (the things with titles and a close button, that you click to show a tab panel).
-	//		Used internally by `dijit.layout.TabContainer`.
-	// description:
-	//		Lets the user select the currently shown pane in a TabContainer or StackContainer.
-	//		TabController also monitors the TabContainer, and whenever a pane is
-	//		added or deleted updates itself accordingly.
-	// tags:
-	//		private
-
-	templateString: "<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'></div>",
-
-	// tabPosition: String
-	//		Defines where tabs go relative to the content.
-	//		"top", "bottom", "left-h", "right-h"
-	tabPosition: "top",
-
-	// buttonWidget: String
-	//		The name of the tab widget to create to correspond to each page
-	buttonWidget: "dijit.layout._TabButton",
-
-	_rectifyRtlTabList: function(){
-		// summary:
-		//		For left/right TabContainer when page is RTL mode, rectify the width of all tabs to be equal, otherwise the tab widths are different in IE
-
-		if(0 >= this.tabPosition.indexOf('-h')){ return; }
-		if(!this.pane2button){ return; }
-
-		var maxWidth = 0;
-		for(var pane in this.pane2button){
-			var ow = this.pane2button[pane].innerDiv.scrollWidth;
-			maxWidth = Math.max(maxWidth, ow);
-		}
-		//unify the length of all the tabs
-		for(pane in this.pane2button){
-			this.pane2button[pane].innerDiv.style.width = maxWidth + 'px';
-		}
-	}
-});
-
-dojo.declare("dijit.layout._TabButton",
-	dijit.layout._StackButton,
-	{
-	// summary:
-	//		A tab (the thing you click to select a pane).
-	// description:
-	//		Contains the title of the pane, and optionally a close-button to destroy the pane.
-	//		This is an internal widget and should not be instantiated directly.
-	// tags:
-	//		private
-
-	// baseClass: String
-	//		The CSS class applied to the domNode.
-	baseClass: "dijitTab",
-
-	templateString: dojo.cache("dijit.layout", "templates/_TabButton.html", "<div waiRole=\"presentation\" dojoAttachPoint=\"titleNode\" dojoAttachEvent='onclick:onClick,onmouseenter:_onMouse,onmouseleave:_onMouse'>\n    <div waiRole=\"presentation\" class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n        <div waiRole=\"presentation\" class='dijitTabContent' dojoAttachPoint='tabContent,focusNode'>\n\t        <img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint='iconNode' waiRole=\"presentation\"/>\n\t        <span dojoAttachPoint='containerNode' class='tabLabel'></span>\n\t        <span class=\"closeButton\" dojoAttachPoint='closeNode'\n\t        \t\tdojoAttachEvent='onclick: onClickCloseButton, onmouseenter: _onCloseButtonEnter, onmouseleave: _onCloseButtonLeave'>\n\t        \t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint='closeIcon' class='closeImage' waiRole=\"presentation\"/>\n\t            <span dojoAttachPoint='closeText' class='closeText'>x</span>\n\t        </span>\n        </div>\n    </div>\n</div>\n"),
-
-	// Override _FormWidget.scrollOnFocus.
-	// Don't scroll the whole tab container into view when the button is focused.
-	scrollOnFocus: false,
-
-	postMixInProperties: function(){
-		// Override blank iconClass from Button to do tab height adjustment on IE6,
-		// to make sure that tabs with and w/out close icons are same height
-		if(!this.iconClass){
-			this.iconClass = "dijitTabButtonIcon";
-		}
-	},
-
-	postCreate: function(){
-		this.inherited(arguments);
-		dojo.setSelectable(this.containerNode, false);
-
-		// If a custom icon class has not been set for the
-		// tab icon, set its width to one pixel. This ensures
-		// that the height styling of the tab is maintained,
-		// as it is based on the height of the icon.
-		// TODO: I still think we can just set dijitTabButtonIcon to 1px in CSS <Bill>
-		if(this.iconNode.className == "dijitTabButtonIcon"){
-			dojo.style(this.iconNode, "width", "1px");
-		}
-	},
-
-	startup: function(){
-		this.inherited(arguments);
-		var n = this.domNode;
-
-		// Required to give IE6 a kick, as it initially hides the
-		// tabs until they are focused on.
-		setTimeout(function(){
-			n.className = n.className;
-		}, 1);
-	},
-
-	_setCloseButtonAttr: function(disp){
-		this.closeButton = disp;
-		dojo.toggleClass(this.innerDiv, "dijitClosable", disp);
-		this.closeNode.style.display = disp ? "" : "none";
-		if(disp){
-			var _nlsResources = dojo.i18n.getLocalization("dijit", "common");
-			if(this.closeNode){
-				dojo.attr(this.closeNode,"title", _nlsResources.itemClose);
-				if (dojo.isIE<8){
-					// IE<8 needs title set directly on image.  Only set for IE since alt=""
-					// for this node and WCAG 2.0 does not allow title when alt=""
-					dojo.attr(this.closeIcon, "title", _nlsResources.itemClose);
-				}
-			}
-			// add context menu onto title button
-			var _nlsResources = dojo.i18n.getLocalization("dijit", "common");
-			this._closeMenu = new dijit.Menu({
-				id: this.id+"_Menu",
-				targetNodeIds: [this.domNode]
-			});
-
-			this._closeMenu.addChild(new dijit.MenuItem({
-				label: _nlsResources.itemClose,
-				onClick: dojo.hitch(this, "onClickCloseButton")
-			}));
-		}else{
-			if(this._closeMenu){
-				this._closeMenu.destroyRecursive();
-				delete this._closeMenu;
-			}
-		}
-	},
-
-	destroy: function(){
-		if(this._closeMenu){
-			this._closeMenu.destroyRecursive();
-			delete this._closeMenu;
-		}
-		this.inherited(arguments);
-	},
-
-	_onCloseButtonEnter: function(){
-		// summary:
-		//		Handler when mouse is moved over the close icon (the X)
-		dojo.addClass(this.closeNode, "closeButton-hover");
-	},
-
-	_onCloseButtonLeave: function(){
-		// summary:
-		//		Handler when mouse is moved off the close icon (the X)
-		dojo.removeClass(this.closeNode, "closeButton-hover");
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/_LayoutWidget.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/_LayoutWidget.js
deleted file mode 100644
index 77e2e29..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/_LayoutWidget.js
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.layout._LayoutWidget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout._LayoutWidget"] = true;
-dojo.provide("dijit.layout._LayoutWidget");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._Container");
-dojo.require("dijit._Contained");
-
-dojo.declare("dijit.layout._LayoutWidget",
-	[dijit._Widget, dijit._Container, dijit._Contained],
-	{
-		// summary:
-		//		Base class for a _Container widget which is responsible for laying out its children.
-		//		Widgets which mixin this code must define layout() to manage placement and sizing of the children.
-
-		// baseClass: [protected extension] String
-		//		This class name is applied to the widget's domNode
-		//		and also may be used to generate names for sub nodes,
-		//		for example dijitTabContainer-content.
-		baseClass: "dijitLayoutContainer",
-
-		// isLayoutContainer: [protected] Boolean
-		//		Indicates that this widget is going to call resize() on its
-		//		children widgets, setting their size, when they become visible.
-		isLayoutContainer: true,
-
-		postCreate: function(){
-			dojo.addClass(this.domNode, "dijitContainer");
-			dojo.addClass(this.domNode, this.baseClass);
-
-			this.inherited(arguments);
-		},
-
-		startup: function(){
-			// summary:
-			//		Called after all the widgets have been instantiated and their
-			//		dom nodes have been inserted somewhere under dojo.doc.body.
-			//
-			//		Widgets should override this method to do any initialization
-			//		dependent on other widgets existing, and then call
-			//		this superclass method to finish things off.
-			//
-			//		startup() in subclasses shouldn't do anything
-			//		size related because the size of the widget hasn't been set yet.
-
-			if(this._started){ return; }
-
-			// Need to call inherited first - so that child widgets get started
-			// up correctly
-			this.inherited(arguments);
-
-			// If I am a not being controlled by a parent layout widget...
-			var parent = this.getParent && this.getParent()
-			if(!(parent && parent.isLayoutContainer)){
-				// Do recursive sizing and layout of all my descendants
-				// (passing in no argument to resize means that it has to glean the size itself)
-				this.resize();
-
-				// Since my parent isn't a layout container, and my style *may be* width=height=100%
-				// or something similar (either set directly or via a CSS class),
-				// monitor when my size changes so that I can re-layout.
-				// For browsers where I can't directly monitor when my size changes,
-				// monitor when the viewport changes size, which *may* indicate a size change for me.
-				this.connect(dojo.isIE ? this.domNode : dojo.global, 'onresize', function(){
-					// Using function(){} closure to ensure no arguments to resize.
-					this.resize();
-				});
-			}
-		},
-
-		resize: function(changeSize, resultSize){
-			// summary:
-			//		Call this to resize a widget, or after its size has changed.
-			// description:
-			//		Change size mode:
-			//			When changeSize is specified, changes the marginBox of this widget
-			//			and forces it to relayout its contents accordingly.
-			//			changeSize may specify height, width, or both.
-			//
-			//			If resultSize is specified it indicates the size the widget will
-			//			become after changeSize has been applied.
-			//
-			//		Notification mode:
-			//			When changeSize is null, indicates that the caller has already changed
-			//			the size of the widget, or perhaps it changed because the browser
-			//			window was resized.  Tells widget to relayout its contents accordingly.
-			//
-			//			If resultSize is also specified it indicates the size the widget has
-			//			become.
-			//
-			//		In either mode, this method also:
-			//			1. Sets this._borderBox and this._contentBox to the new size of
-			//				the widget.  Queries the current domNode size if necessary.
-			//			2. Calls layout() to resize contents (and maybe adjust child widgets).
-			//
-			// changeSize: Object?
-			//		Sets the widget to this margin-box size and position.
-			//		May include any/all of the following properties:
-			//	|	{w: int, h: int, l: int, t: int}
-			//
-			// resultSize: Object?
-			//		The margin-box size of this widget after applying changeSize (if
-			//		changeSize is specified).  If caller knows this size and
-			//		passes it in, we don't need to query the browser to get the size.
-			//	|	{w: int, h: int}
-
-			var node = this.domNode;
-
-			// set margin box size, unless it wasn't specified, in which case use current size
-			if(changeSize){
-				dojo.marginBox(node, changeSize);
-
-				// set offset of the node
-				if(changeSize.t){ node.style.top = changeSize.t + "px"; }
-				if(changeSize.l){ node.style.left = changeSize.l + "px"; }
-			}
-
-			// If either height or width wasn't specified by the user, then query node for it.
-			// But note that setting the margin box and then immediately querying dimensions may return
-			// inaccurate results, so try not to depend on it.
-			var mb = resultSize || {};
-			dojo.mixin(mb, changeSize || {});	// changeSize overrides resultSize
-			if( !("h" in mb) || !("w" in mb) ){
-				mb = dojo.mixin(dojo.marginBox(node), mb);	// just use dojo.marginBox() to fill in missing values
-			}
-
-			// Compute and save the size of my border box and content box
-			// (w/out calling dojo.contentBox() since that may fail if size was recently set)
-			var cs = dojo.getComputedStyle(node);
-			var me = dojo._getMarginExtents(node, cs);
-			var be = dojo._getBorderExtents(node, cs);
-			var bb = (this._borderBox = {
-				w: mb.w - (me.w + be.w),
-				h: mb.h - (me.h + be.h)
-			});
-			var pe = dojo._getPadExtents(node, cs);
-			this._contentBox = {
-				l: dojo._toPixelValue(node, cs.paddingLeft),
-				t: dojo._toPixelValue(node, cs.paddingTop),
-				w: bb.w - pe.w,
-				h: bb.h - pe.h
-			};
-
-			// Callback for widget to adjust size of its children
-			this.layout();
-		},
-
-		layout: function(){
-			// summary:
-			//		Widgets override this method to size and position their contents/children.
-			//		When this is called this._contentBox is guaranteed to be set (see resize()).
-			//
-			//		This is called after startup(), and also when the widget's size has been
-			//		changed.
-			// tags:
-			//		protected extension
-		},
-
-		_setupChild: function(/*dijit._Widget*/child){
-			// summary:
-			//		Common setup for initial children and children which are added after startup
-			// tags:
-			//		protected extension
-
-			dojo.addClass(child.domNode, this.baseClass+"-child");
-			if(child.baseClass){
-				dojo.addClass(child.domNode, this.baseClass+"-"+child.baseClass);
-			}
-		},
-
-		addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
-			// Overrides _Container.addChild() to call _setupChild()
-			this.inherited(arguments);
-			if(this._started){
-				this._setupChild(child);
-			}
-		},
-
-		removeChild: function(/*dijit._Widget*/ child){
-			// Overrides _Container.removeChild() to remove class added by _setupChild()
-			dojo.removeClass(child.domNode, this.baseClass+"-child");
-			if(child.baseClass){
-				dojo.removeClass(child.domNode, this.baseClass+"-"+child.baseClass);
-			}
-			this.inherited(arguments);
-		}
-	}
-);
-
-dijit.layout.marginBox2contentBox = function(/*DomNode*/ node, /*Object*/ mb){
-	// summary:
-	//		Given the margin-box size of a node, return its content box size.
-	//		Functions like dojo.contentBox() but is more reliable since it doesn't have
-	//		to wait for the browser to compute sizes.
-	var cs = dojo.getComputedStyle(node);
-	var me = dojo._getMarginExtents(node, cs);
-	var pb = dojo._getPadBorderExtents(node, cs);
-	return {
-		l: dojo._toPixelValue(node, cs.paddingLeft),
-		t: dojo._toPixelValue(node, cs.paddingTop),
-		w: mb.w - (me.w + pb.w),
-		h: mb.h - (me.h + pb.h)
-	};
-};
-
-(function(){
-	var capitalize = function(word){
-		return word.substring(0,1).toUpperCase() + word.substring(1);
-	};
-
-	var size = function(widget, dim){
-		// size the child
-		widget.resize ? widget.resize(dim) : dojo.marginBox(widget.domNode, dim);
-
-		// record child's size, but favor our own numbers when we have them.
-		// the browser lies sometimes
-		dojo.mixin(widget, dojo.marginBox(widget.domNode));
-		dojo.mixin(widget, dim);
-	};
-
-	dijit.layout.layoutChildren = function(/*DomNode*/ container, /*Object*/ dim, /*Object[]*/ children){
-		// summary
-		//		Layout a bunch of child dom nodes within a parent dom node
-		// container:
-		//		parent node
-		// dim:
-		//		{l, t, w, h} object specifying dimensions of container into which to place children
-		// children:
-		//		an array like [ {domNode: foo, layoutAlign: "bottom" }, {domNode: bar, layoutAlign: "client"} ]
-
-		// copy dim because we are going to modify it
-		dim = dojo.mixin({}, dim);
-
-		dojo.addClass(container, "dijitLayoutContainer");
-
-		// Move "client" elements to the end of the array for layout.  a11y dictates that the author
-		// needs to be able to put them in the document in tab-order, but this algorithm requires that
-		// client be last.
-		children = dojo.filter(children, function(item){ return item.layoutAlign != "client"; })
-			.concat(dojo.filter(children, function(item){ return item.layoutAlign == "client"; }));
-
-		// set positions/sizes
-		dojo.forEach(children, function(child){
-			var elm = child.domNode,
-				pos = child.layoutAlign;
-
-			// set elem to upper left corner of unused space; may move it later
-			var elmStyle = elm.style;
-			elmStyle.left = dim.l+"px";
-			elmStyle.top = dim.t+"px";
-			elmStyle.bottom = elmStyle.right = "auto";
-
-			dojo.addClass(elm, "dijitAlign" + capitalize(pos));
-
-			// set size && adjust record of remaining space.
-			// note that setting the width of a <div> may affect its height.
-			if(pos == "top" || pos == "bottom"){
-				size(child, { w: dim.w });
-				dim.h -= child.h;
-				if(pos == "top"){
-					dim.t += child.h;
-				}else{
-					elmStyle.top = dim.t + dim.h + "px";
-				}
-			}else if(pos == "left" || pos == "right"){
-				size(child, { h: dim.h });
-				dim.w -= child.w;
-				if(pos == "left"){
-					dim.l += child.w;
-				}else{
-					elmStyle.left = dim.l + dim.w + "px";
-				}
-			}else if(pos == "client"){
-				size(child, dim);
-			}
-		});
-	};
-
-})();
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/_TabContainerBase.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/_TabContainerBase.js
deleted file mode 100644
index 610de78..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/layout/_TabContainerBase.js
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.layout._TabContainerBase"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout._TabContainerBase"] = true;
-dojo.provide("dijit.layout._TabContainerBase");
-
-dojo.require("dijit.layout.StackContainer");
-dojo.require("dijit._Templated");
-
-dojo.declare("dijit.layout._TabContainerBase",
-	[dijit.layout.StackContainer, dijit._Templated],
-	{
-	// summary:
-	//		Abstract base class for TabContainer.   Must define _makeController() to instantiate
-	//		and return the widget that displays the tab labels
-	// description:
-	//		A TabContainer is a container that has multiple panes, but shows only
-	//		one pane at a time.  There are a set of tabs corresponding to each pane,
-	//		where each tab has the name (aka title) of the pane, and optionally a close button.
-
-	// tabPosition: String
-	//		Defines where tabs go relative to tab content.
-	//		"top", "bottom", "left-h", "right-h"
-	tabPosition: "top",
-
-	baseClass: "dijitTabContainer",
-
-	// tabStrip: Boolean
-	//		Defines whether the tablist gets an extra class for layouting, putting a border/shading
-	//		around the set of tabs.
-	tabStrip: false,
-
-	// nested: Boolean
-	//		If true, use styling for a TabContainer nested inside another TabContainer.
-	//		For tundra etc., makes tabs look like links, and hides the outer
-	//		border since the outer TabContainer already has a border.
-	nested: false,
-
-	templateString: dojo.cache("dijit.layout", "templates/TabContainer.html", "<div class=\"dijitTabContainer\">\n\t<div class=\"dijitTabListWrapper\" dojoAttachPoint=\"tablistNode\"></div>\n\t<div dojoAttachPoint=\"tablistSpacer\" class=\"dijitTabSpacer ${baseClass}-spacer\"></div>\n\t<div class=\"dijitTabPaneWrapper ${baseClass}-container\" dojoAttachPoint=\"containerNode\"></div>\n</div>\n"),
-
-	postMixInProperties: function(){
-		// set class name according to tab position, ex: dijitTabContainerTop
-		this.baseClass += this.tabPosition.charAt(0).toUpperCase() + this.tabPosition.substr(1).replace(/-.*/, "");
-
-		this.srcNodeRef && dojo.style(this.srcNodeRef, "visibility", "hidden");
-
-		this.inherited(arguments);
-	},
-
-	postCreate: function(){
-		this.inherited(arguments);
-
-		// Create the tab list that will have a tab (a.k.a. tab button) for each tab panel
-		this.tablist = this._makeController(this.tablistNode);
-
-		if(!this.doLayout){ dojo.addClass(this.domNode, "dijitTabContainerNoLayout"); }
-
-		if(this.nested){
-			/* workaround IE's lack of support for "a > b" selectors by
-			 * tagging each node in the template.
-			 */
-			dojo.addClass(this.domNode, "dijitTabContainerNested");
-			dojo.addClass(this.tablist.containerNode, "dijitTabContainerTabListNested");
-			dojo.addClass(this.tablistSpacer, "dijitTabContainerSpacerNested");
-			dojo.addClass(this.containerNode, "dijitTabPaneWrapperNested");
-		}else{
-			dojo.addClass(this.domNode, "tabStrip-" + (this.tabStrip ? "enabled" : "disabled"));
-		}
-	},
-
-	_setupChild: function(/*dijit._Widget*/ tab){
-		// Overrides StackContainer._setupChild().
-		dojo.addClass(tab.domNode, "dijitTabPane");
-		this.inherited(arguments);
-	},
-
-	startup: function(){
-		if(this._started){ return; }
-
-		// wire up the tablist and its tabs
-		this.tablist.startup();
-
-		this.inherited(arguments);
-	},
-
-	layout: function(){
-		// Overrides StackContainer.layout().
-		// Configure the content pane to take up all the space except for where the tabs are
-
-		if(!this._contentBox || typeof(this._contentBox.l) == "undefined"){return;}
-
-		var sc = this.selectedChildWidget;
-
-		if(this.doLayout){
-			// position and size the titles and the container node
-			var titleAlign = this.tabPosition.replace(/-h/, "");
-			this.tablist.layoutAlign = titleAlign;
-			var children = [this.tablist, {
-				domNode: this.tablistSpacer,
-				layoutAlign: titleAlign
-			}, {
-				domNode: this.containerNode,
-				layoutAlign: "client"
-			}];
-			dijit.layout.layoutChildren(this.domNode, this._contentBox, children);
-
-			// Compute size to make each of my children.
-			// children[2] is the margin-box size of this.containerNode, set by layoutChildren() call above
-			this._containerContentBox = dijit.layout.marginBox2contentBox(this.containerNode, children[2]);
-
-			if(sc && sc.resize){
-				sc.resize(this._containerContentBox);
-			}
-		}else{
-			// just layout the tab controller, so it can position left/right buttons etc.
-			if(this.tablist.resize){
-				this.tablist.resize({w: dojo.contentBox(this.domNode).w});
-			}
-
-			// and call resize() on the selected pane just to tell it that it's been made visible
-			if(sc && sc.resize){
-				sc.resize();
-			}
-		}
-	},
-
-	destroy: function(){
-		if(this.tablist){
-			this.tablist.destroy();
-		}
-		this.inherited(arguments);
-	}
-});
-
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ar/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ar/common.js
deleted file mode 100644
index 99af508..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ar/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"حسنا","buttonCancel":"الغاء","buttonSave":"حفظ","itemClose":"اغلاق"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ar/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ar/loading.js
deleted file mode 100644
index f8bb535..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ar/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"جاري التحميل...","errorState":"عفوا، حدث خطأ"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ca/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ca/common.js
deleted file mode 100644
index b9cd065..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ca/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"D'acord","buttonCancel":"Cancel·la","buttonSave":"Desa","itemClose":"Tanca"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ca/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ca/loading.js
deleted file mode 100644
index cd368cc..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ca/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"S'està carregant...","errorState":"Ens sap greu. S'ha produït un error."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/common.js
deleted file mode 100644
index 6573dcd..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/cs/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/cs/common.js
deleted file mode 100644
index 83b3682..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/cs/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"OK","buttonCancel":"Storno","buttonSave":"Uložit","itemClose":"Zavřít"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/cs/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/cs/loading.js
deleted file mode 100644
index c611926..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/cs/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"Probíhá načítání...","errorState":"Omlouváme se, došlo k chybě"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/da/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/da/common.js
deleted file mode 100644
index 8c51ed8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/da/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"OK","buttonCancel":"Annullér","buttonSave":"Gem","itemClose":"Luk"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/da/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/da/loading.js
deleted file mode 100644
index 5088eaf..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/da/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"Indlæser...","errorState":"Der er opstået en fejl"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/de/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/de/common.js
deleted file mode 100644
index cd60c45..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/de/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"OK","buttonCancel":"Abbrechen","buttonSave":"Speichern","itemClose":"Schließen"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/de/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/de/loading.js
deleted file mode 100644
index 4989983..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/de/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"Wird geladen...","errorState":"Es ist ein Fehler aufgetreten."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/el/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/el/common.js
deleted file mode 100644
index 8e7a36a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/el/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"ΟΚ","buttonCancel":"Ακύρωση","buttonSave":"Αποθήκευση","itemClose":"Κλείσιμο"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/el/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/el/loading.js
deleted file mode 100644
index 9567b3c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/el/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"Φόρτωση...","errorState":"Σας ζητούμε συγνώμη, παρουσιάστηκε σφάλμα"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/es/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/es/common.js
deleted file mode 100644
index b4feef9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/es/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"Aceptar","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Cerrar"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/es/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/es/loading.js
deleted file mode 100644
index dc969a3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/es/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"Cargando...","errorState":"Lo siento, se ha producido un error"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/fi/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/fi/common.js
deleted file mode 100644
index 8b2fc26..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/fi/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"OK","buttonCancel":"Peruuta","buttonSave":"Tallenna","itemClose":"Sulje"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/fi/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/fi/loading.js
deleted file mode 100644
index 73e10a1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/fi/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"Lataus on meneillään...","errorState":"On ilmennyt virhe."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/fr/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/fr/common.js
deleted file mode 100644
index 9f6aabe..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/fr/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"OK","buttonCancel":"Annuler","buttonSave":"Sauvegarder","itemClose":"Fermer"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/fr/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/fr/loading.js
deleted file mode 100644
index ec7192b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/fr/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"Chargement...","errorState":"Une erreur est survenue"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/he/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/he/common.js
deleted file mode 100644
index b04d1cc..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/he/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"אישור","buttonCancel":"ביטול","buttonSave":"שמירה","itemClose":"סגירה"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/he/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/he/loading.js
deleted file mode 100644
index 7b1d5f3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/he/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"טעינה...‏","errorState":"אירעה שגיאה"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/hu/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/hu/common.js
deleted file mode 100644
index 21a773f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/hu/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"OK","buttonCancel":"Mégse","buttonSave":"Mentés","itemClose":"Bezárás"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/hu/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/hu/loading.js
deleted file mode 100644
index d61e9a2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/hu/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"Betöltés...","errorState":"Sajnálom, hiba történt"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/it/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/it/common.js
deleted file mode 100644
index 6b3dc74..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/it/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"OK","buttonCancel":"Annulla","buttonSave":"Salva","itemClose":"Chiudi"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/it/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/it/loading.js
deleted file mode 100644
index 60d05e0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/it/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"Caricamento in corso...","errorState":"Si è verificato un errore"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ja/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ja/common.js
deleted file mode 100644
index b0b48c6..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ja/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"OK","buttonCancel":"キャンセル","buttonSave":"保存","itemClose":"閉じる"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ja/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ja/loading.js
deleted file mode 100644
index fa67d67..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ja/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"ロード中...","errorState":"エラーが発生しました。"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ko/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ko/common.js
deleted file mode 100644
index 8e12bbf..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ko/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"확인","buttonCancel":"취소","buttonSave":"저장","itemClose":"닫기"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ko/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ko/loading.js
deleted file mode 100644
index 5d1ca12..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ko/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"로드 중...","errorState":"죄송합니다. 오류가 발생했습니다."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/loading.js
deleted file mode 100644
index 1d6fa9b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"Loading...","errorState":"Sorry, an error occurred"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/nb/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/nb/common.js
deleted file mode 100644
index 73e38c7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/nb/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"OK","buttonCancel":"Avbryt","buttonSave":"Lagre","itemClose":"Lukk"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/nb/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/nb/loading.js
deleted file mode 100644
index dbc314d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/nb/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"Laster inn...","errorState":"Det oppsto en feil"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/nl/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/nl/common.js
deleted file mode 100644
index fa4c66e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/nl/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"OK","buttonCancel":"Annuleren","buttonSave":"Opslaan","itemClose":"Sluiten"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/nl/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/nl/loading.js
deleted file mode 100644
index c9870fd..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/nl/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"Bezig met laden...","errorState":"Er is een fout opgetreden"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/pl/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/pl/common.js
deleted file mode 100644
index c84e539..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/pl/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"OK","buttonCancel":"Anuluj","buttonSave":"Zapisz","itemClose":"Zamknij"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/pl/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/pl/loading.js
deleted file mode 100644
index eed3c3e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/pl/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"Ładowanie...","errorState":"Niestety, wystąpił błąd"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/pt-pt/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/pt-pt/common.js
deleted file mode 100644
index 7992705..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/pt-pt/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Fechar"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/pt-pt/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/pt-pt/loading.js
deleted file mode 100644
index 80257d3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/pt-pt/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"A carregar...","errorState":"Lamentamos, mas ocorreu um erro"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/pt/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/pt/common.js
deleted file mode 100644
index b94e6bc..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/pt/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Salvar","itemClose":"Fechar"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/pt/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/pt/loading.js
deleted file mode 100644
index 88cda7a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/pt/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"Carregando...","errorState":"Desculpe, ocorreu um erro"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ru/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ru/common.js
deleted file mode 100644
index 9a76d09..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ru/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"ОК","buttonCancel":"Отмена","buttonSave":"Сохранить","itemClose":"Закрыть"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ru/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ru/loading.js
deleted file mode 100644
index 55cd03b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/ru/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"Загрузка...","errorState":"Извините, возникла ошибка"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/sk/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/sk/common.js
deleted file mode 100644
index 59a12d1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/sk/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"OK","buttonCancel":"Zrušiť","buttonSave":"Uložiť","itemClose":"Zatvoriť"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/sk/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/sk/loading.js
deleted file mode 100644
index e805bd8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/sk/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"Zavádzanie...","errorState":"Nastala chyba"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/sl/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/sl/common.js
deleted file mode 100644
index 4704cc5..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/sl/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"V redu","buttonCancel":"Prekliči","buttonSave":"Shrani","itemClose":"Zapri"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/sl/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/sl/loading.js
deleted file mode 100644
index 4100866..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/sl/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"Nalaganje...","errorState":"Oprostite, prišlo je do napake."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/sv/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/sv/common.js
deleted file mode 100644
index cd3444f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/sv/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"OK","buttonCancel":"Avbryt","buttonSave":"Spara","itemClose":"Stäng"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/sv/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/sv/loading.js
deleted file mode 100644
index 95b90d2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/sv/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"Läser in...","errorState":"Det uppstod ett fel."})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/th/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/th/common.js
deleted file mode 100644
index be06dd0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/th/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"ตกลง","buttonCancel":"ยกเลิก","buttonSave":"บันทึก","itemClose":"ปิด"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/th/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/th/loading.js
deleted file mode 100644
index bb6b75d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/th/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"กำลังโหลด...","errorState":"ขออภัย เกิดข้อผิดพลาด"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/tr/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/tr/common.js
deleted file mode 100644
index e89e645..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/tr/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"Tamam","buttonCancel":"İptal","buttonSave":"Kaydet","itemClose":"Kapat"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/tr/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/tr/loading.js
deleted file mode 100644
index b0ed738..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/tr/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"Yükleniyor...","errorState":"Üzgünüz, bir hata oluştu"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/zh-tw/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/zh-tw/common.js
deleted file mode 100644
index 5d3fee0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/zh-tw/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"確定","buttonCancel":"取消","buttonSave":"儲存","itemClose":"關閉"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/zh-tw/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/zh-tw/loading.js
deleted file mode 100644
index 0078541..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/zh-tw/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"載入中...","errorState":"抱歉,發生錯誤"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/zh/common.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/zh/common.js
deleted file mode 100644
index 0bb6267..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/zh/common.js
+++ /dev/null
@@ -1 +0,0 @@
-({"buttonOk":"确定","buttonCancel":"取消","buttonSave":"保存","itemClose":"关闭"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/zh/loading.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/zh/loading.js
deleted file mode 100644
index c4b6fd7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/nls/zh/loading.js
+++ /dev/null
@@ -1 +0,0 @@
-({"loadingState":"正在加载...","errorState":"对不起,发生了错误"})
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/resources/_modules.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/resources/_modules.js
deleted file mode 100644
index 1c977a1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/resources/_modules.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-/*=====
-// dijit fallback for key summaries otherwise not covered by the doc parser
-
-dijit.demos = {
-	// summary:
-	//		Home of the official dijit demo code
-};
-
-dijit.form = {
-	// summary:
-	//		Form and input related widgets
-};
-
-dijit.layout = {
-	// summary:
-	//		Layout related widgets
-};
-=====*/
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/robot.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/robot.js
deleted file mode 100644
index 7c3486d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/robot.js
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.robot"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.robot"] = true;
-dojo.provide("dijit.robot");
-dojo.require("dojo.robot");
-dojo.provide("dijit._base.place");
-dojo.require("dijit._base.scroll");
-dojo.require("dijit._base.window");
-
-dojo.mixin(doh.robot,{
-
-	// users who use doh+dojo+dijit get the added convenience of scrollIntoView
-	// automatically firing when they try to move the mouse to an element
-
-	_position: function(/*Node*/ n){
-		// Returns the dojo.position of the passed node wrt the passed window's viewport,
-		// following any parent iframes containing the node and clipping the node to each iframe.
-		// precondition: _scrollIntoView already called
-		var d = dojo, p = null, M = Math.max, m = Math.min;
-		// p: the returned position of the node
-		d.forEach(doh.robot._getWindowChain(n), function(w){
-			d.withGlobal(w, function(){
-				// get the position of the node wrt its parent window
-				// if it is a parent frame, its padding and border extents will get added in
-				var p2 = d.position(n, false), b = d._getPadBorderExtents(n);
-				// if p2 is the position of the original passed node, store the position away as p
-				// otherwise, node is actually an iframe. in this case, add the iframe's position wrt its parent window and also the iframe's padding and border extents
-				if(!p){
-					p = p2;
-				}else{
-					var view;
-					d.withGlobal(n.contentWindow,function(){
-						view=dijit.getViewport();
-					});
-					p2.r = p2.x+view.w;
-					p2.b = p2.y+view.h;
-					p = {x: M(p.x+p2.x,p2.x)+b.l, // clip left edge of node wrt the iframe
-						y: M(p.y+p2.y,p2.y)+b.t,	// top edge
-						r: m(p.x+p2.x+p.w,p2.r)+b.l,	// right edge (to compute width)
-						b: m(p.y+p2.y+p.h,p2.b)+b.t}; // bottom edge (to compute height)
-					// save a few bytes by computing width and height from r and b
-					p.w = p.r-p.x;
-					p.h = p.b-p.y;
-				}
-				// the new node is now the old node's parent iframe
-				n=w.frameElement;
-			});
-		});
-		return p;
-	},
-
-	_scrollIntoView: function(/*Node*/ n){
-		// scrolls the passed node into view, scrolling all ancester frames/windows as well.
-		// Assumes parent iframes can be made fully visible given the current browser window size
-		var d = dojo,
-			dr = doh.robot,
-			p = null;
-		d.forEach(dr._getWindowChain(n), function(w){
-			d.withGlobal(w, function(){
-				// get the position of the node wrt its parent window
-				// if it is a parent frame, its padding and border extents will get added in
-				var p2 = d.position(n, false),
-					b = d._getPadBorderExtents(n),
-					oldp = null;
-				// if p2 is the position of the original passed node, store the position away as p
-				// otherwise, node is actually an iframe. in this case, add the iframe's position wrt its parent window and also the iframe's padding and border extents
-				if(!p){
-					p = p2;
-				}else{
-					oldp = p;
-					p = {x: p.x+p2.x+b.l,
-						y: p.y+p2.y+b.t,
-						w: p.w,
-						h: p.h};
-
-				}
-				// scroll the parent window so that the node translated into the parent window's coordinate space is in view
-				dijit.scrollIntoView(n,p);
-				// adjust position for the new scroll offsets
-				p2 = d.position(n, false);
-				if(!oldp){
-					p = p2;
-				}else{
-					p = {x: oldp.x+p2.x+b.l,
-						y: oldp.y+p2.y+b.t,
-						w: p.w,
-						h: p.h};
-				}
-				// get the parent iframe so it can be scrolled too
-				n = w.frameElement;
-			});
-		});
-	},
-
-	_getWindowChain : function(/*Node*/ n){
-		// Returns an array of windows starting from the passed node's parent window and ending at dojo's window
-		var cW = dijit.getDocumentWindow(n.ownerDocument);
-		var arr=[cW];
-		var f = cW.frameElement;
-		return (cW == dojo.global || f == null)? arr : arr.concat(doh.robot._getWindowChain(f));
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/robotx.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/robotx.js
deleted file mode 100644
index 1031d1a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/robotx.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.robotx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.robotx"] = true;
-dojo.provide("dijit.robotx");
-dojo.require("dijit.robot");
-dojo.require("dojo.robotx");
-dojo.experimental("dijit.robotx");
-(function(){
-var __updateDocument = doh.robot._updateDocument;
-
-dojo.mixin(doh.robot,{
-	_updateDocument: function(){
-		__updateDocument();
-		var win = dojo.global;
-		if(win["dijit"]){
-			dijit.registry = win.dijit.registry;
-		}
-	}
-});
-
-})();
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/a11y/README.txt b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/a11y/README.txt
deleted file mode 100644
index a809354..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/a11y/README.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This folder contains images used by all themes when in "high-contrast" mode.
-
-If you think you need to put something here, please talk to Becky or Bill first.
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/a11y/colors3x4.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/a11y/colors3x4.png
deleted file mode 100644
index e407881..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/a11y/colors3x4.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/a11y/colors7x10.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/a11y/colors7x10.png
deleted file mode 100644
index 77d22ce..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/a11y/colors7x10.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/a11y/indeterminate_progress.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/a11y/indeterminate_progress.gif
deleted file mode 100644
index 66f535c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/a11y/indeterminate_progress.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/dijit.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/dijit.css
deleted file mode 100644
index 284199c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/dijit.css
+++ /dev/null
@@ -1,1866 +0,0 @@
-/*
-	Essential styles that themes can inherit.
-	In other words, works but doesn't look great.
-*/
-
-
-
-/****
-		GENERIC PIECES
- ****/
-
-.dijitReset {
-	/* Use this style to null out padding, margin, border in your template elements
-		so that page specific styles don't break them.
-		- Use in all TABLE, TR and TD tags.
-	*/
-	margin:0;
-	border:0;
-	padding:0;
-	line-height:normal;
-	font: inherit;
-	color: inherit;
-}
-
-.dijitInline {
-	/*  To inline block elements.
-		Similar to InlineBox below, but this has fewer side-effects in Moz.
-		Also, apparently works on a DIV as well as a FIELDSET.
-	*/
-	display:inline-block;			/* webkit and FF3 */
-	#zoom: 1; /* set hasLayout:true to mimic inline-block */
-	#display:inline; /* don't use .dj_ie since that increases the priority */
-	border:0;
-	padding:0;
-	vertical-align:middle;
-	#vertical-align: auto;	/* makes TextBox,Button line up w/native counterparts on IE6 */
-}
-
-.dijitHidden {
-	/* To hide unselected panes in StackContainer etc. */
-	display: none !important;
-}
-
-.dijitVisible {
-	/* To show selected pane in StackContainer etc. */
-	display: block !important;	/* override user's display:none setting via style setting or indirectly via class */
-	position: relative;			/* to support setting width/height, see #2033 */
-}
-
-
-.dj_ie INPUT.dijitTextBox,
-.dj_ie .dijitInputField INPUT {
-	font-size: 100%;
-}
-
-.dj_ie .dijitInputField INPUT { /* try to get rid of IE implicit margin around INPUT */
-	margin: -1px 0 !important;
-}
-
-.dijitInlineTable {
-	/* To inline tables with a given width set (otherwise, use dijitInline above) */
-	display:inline-table;
-	display:inline-block;		/* webkit and FF3 */
-	#zoom: 1; /* set hasLayout:true to mimic inline-block */
-	#display:inline; /* don't use .dj_ie since that increases the priority */
-	box-sizing: content-box; -moz-box-sizing: content-box;
-	border:0;
-	padding:0;
-}
-
-.dijitTeeny {
-	font-size:1px;
-	line-height:1px;
-}
-
-/*
- * Popup items have a wrapper div (dijitPopup)
- * with the real popup inside, and maybe an iframe too
- */
-.dijitPopup {
-	position: absolute;
-	background-color: transparent;
-	margin: 0;
-	border: 0;
-	padding: 0;
-}
-.dijit_a11y .dijitPopup,
-.dijit_ally .dijitPopup div,
-.dijit_a11y .dijitPopup table,
-.dijit_a11y .dijitTooltipContainer {
-	background-color: white !important;
-}
-
-.dijitInputField {
-	overflow:hidden;
-	#zoom:1;
-}
-
-.dijitPositionOnly {
-	/* Null out all position-related properties */
-	padding: 0 !important;
-	border: 0 !important;
-	background-color: transparent !important;
-	background-image: none !important;
-	height: auto !important;
-	width: auto !important;
-}
-
-.dijitNonPositionOnly {
-	/* Null position-related properties */
-	float: none !important;
-	position: static !important;
-	margin: 0 0 0 0 !important;
-	vertical-align: middle !important;
-}
-
-.dijitBackgroundIframe {
-	/* iframe used to prevent problems with PDF or other applets overlaying menus etc */
-	position: absolute;
-	left: 0;
-	top: 0;
-	width: 100%;
-	height: 100%;
-	z-index: -1;
-	border: 0;
-	padding: 0;
-	margin: 0;
-}
-
-.dijitClickableRegion {
-	/* An InlineEditBox in view mode (click this to edit the text) */
-	background-color: #e2ebf2;
-	cursor: text;
-}
-
-
-.dijitDisplayNone {
-	/* hide something.  Use this as a class rather than element.style so another class can override */
-	display:none !important;
-}
-
-.dijitContainer {
-	/* for all layout containers */
-	overflow: hidden;	/* need on IE so something can be reduced in size, and so scrollbars aren't temporarily displayed when resizing */
-}
-
-/****
-		A11Y
- ****/
-.dijit_a11y * {
-	background-image:none !important;
-}
-
-.dijit_a11y .dijitCalendarIncrementControl {
-	display: none;	/* don't display icon */
-}
-.dijit_a11y .dijitA11ySideArrow {
-	display: inline !important; /* display text instead */
-	cursor: pointer;
-}
-
-/*
- * Since we can't use shading in a11y mode, and since the underline indicates today's date,
- * use a border to show the selected date.
- * Avoid screen jitter when switching selected date by compensating for the selected node's
- * border w/padding on other nodes.
- */
-.dijit_a11y .dijitCalendarDateLabel {
-	padding: 1px;
-}
-.dijit_a11y .dijitCalendarSelectedDate .dijitCalendarDateLabel {
-	border: solid 1px black;
-	padding: 0px;
-}
-.dijit_a11y .dijitCalendarDateTemplate {
-	padding-bottom: 0.1em !important;	/* otherwise bottom border doesn't appear on IE */
-}
-
-.dijit_a11y .dijit * {
-	background:white !important;
-	color:black !important;
-}
-.dijit_a11y .dijitButtonNode {
-	border-color: black!important;
-	border-style: outset!important;
-	border-width: medium!important;
-}
-
-.dijit_a11y .dijitComboBoxReadOnly .dijitInputField,
-.dijit_a11y .dijitComboBoxReadOnly .dijitButtonNode,
-.dijit_a11y .dijitSpinnerReadOnly .dijitButtonNode,
-.dijit_a11y .dijitSpinnerReadOnly .dijitInputField,
-.dijit_a11y .dijitButtonDisabled .dijitButtonNode,
-.dijit_a11y .dijitDropDownButtonDisabled .dijitButtonNode,
-.dijit_a11y .dijitComboButtonDisabled .dijitButtonNode,
-.dijit_a11y .dijitComboBoxDisabled .dijitInputField,
-.dijit_a11y .dijitComboBoxDisabled .dijitButtonNode,
-.dijit_a11y .dijitSpinnerDisabled .dijitButtonNode,
-.dijit_a11y .dijitSpinnerDisabled .dijitInputField {
-	border-style: outset!important;
-	border-width: medium!important;
-	border-color: #999 !important;
-	color:#999 !important;
-}
-
-/* button inner contents - labels, icons etc. */
-.dijitButtonNode * {
-	vertical-align: middle;
-}
-.dijit_a11y .dijitArrowButtonInner {
-	width: 1em;
-	display: none !important;
-}
-.dijitButtonNode .dijitArrowButtonInner {
-	background:no-repeat center;
-	width: 16px;
-}
-.dijitComboBox .dijitArrowButtonInner {
-	display: block;
-}
-
-/* In high contrast mode, display the check symbol */
-.dijit_a11y .dijitToggleButtonChecked .dijitToggleButtonIconChar {
-	display: inline !important;
-}
-
-
-/****
-		3-element borders:  ( dijitLeft + dijitStretch + dijitRight )
- ****/
-
-.dijitLeft {
-	/* Left part of a 3-element border */
-	background-position:left top;
-	background-repeat:no-repeat;
-}
-
-.dijitStretch {
-	/* Middle (stretchy) part of a 3-element border */
-	white-space:nowrap;			/* MOW: move somewhere else */
-	background-repeat:repeat-x;
-}
-
-.dijitRight {
-	/* Right part of a 3-element border */
-	#display:inline;				/* IE7 sizes to outer size w/o this */
-	background-position:right top;
-	background-repeat:no-repeat;
-}
-
-.dijitToggleButton,
-.dijitButton,
-.dijitDropDownButton,
-.dijitComboButton {
-	/* outside of button */
-	margin: 0.2em;
-}
-
-.dijitToolbar .dijitToggleButton,
-.dijitToolbar .dijitButton,
-.dijitToolbar .dijitDropDownButton,
-.dijitToolbar .dijitComboButton {
-	margin: 0;
-}
-
-.dj_ie8 .dijitToolbar button,
-.dj_webkit .dijitToolbar button {
-	/* FF and IE<8 adds implicit padding to buttons, so make other browsers follow suit,
-	 * to avoid a bunch of browse specific rules in theme files
-	 */
-	padding: 1px 2px;
-}
-
-.dj_ie .dijitToolbar .dijitComboBox{
-	/* make combobox buttons align porperly with other buttons in a toolbar */
-	vertical-align: middle;
-}
-
-.dj_ie .dijitComboButton {
-	/* hack to get inline-table to vertically align w/other buttons */
-	margin-bottom: -3px;
-}
-
-.dj_webkit .dijitToolbar .dijitDropDownButton {
-	padding-left: 0.3em;
-}
-.dj_gecko .dijitToolbar .dijitButtonNode::-moz-focus-inner {
-	padding:0;
-}
-
-.dijitButtonNode {
-	/* Node that is acting as a button -- may or may not be a BUTTON element */
-	border:1px solid gray;
-	margin:0;
-	line-height:normal;
-	vertical-align: middle;
-	#vertical-align: auto;
-	text-align:center;
-	white-space: nowrap;
-}
-
-.dijitButtonNode, .dijitButtonNode * {
-	cursor: pointer;
-}
-
-/**** Disabled cursor *****/
-.dijitReadOnly *,
-.dijitDisabled *,
-.dijitReadOnly,
-.dijitDisabled,
-.dijitDisabledClickableRegion {	/* a region the user would be able to click on, but it's disabled */
-	cursor: not-allowed !important;
-}
-
-.dj_ie .dijitButtonNode {
-	/* ensure hasLayout */
-	zoom: 1;
-}
-
-.dj_ie .dijitButtonNode button {
-	/*
-		disgusting hack to get rid of spurious padding around button elements
-		on IE. MSIE is truly the web's boat anchor.
-	*/
-	overflow: visible;
-}
-
-.dijitArrowButton {
-	/* Node that is acting as a arrow button -- drop down (spinner has its own treatment).  Also gets dijitButtonNode */
-	/* place AFTER dijitButtonNode so it overrides */
-	padding: 0 .4em;
-}
-DIV.dijitArrowButton {
-	float: right;
-}
-
-.dijitSpinner .dijitInputLayoutContainer .dijitArrowButton {
-	border-style: solid;
-	border-width: 0 0 0 1px !important;
-	padding: 0;
-	position: absolute;
-	right: 0;
-	float: none;
-}
-.dijitSpinner .dijitInputLayoutContainer .dijitArrowButton {
-	position: absolute;
-	height: 50%;
-}
-.dijitSpinner .dijitInputLayoutContainer .dijitDownArrowButton {
-	top: auto;
-	bottom: 0;
-	border-top-width: 1px !important;
-}
-.dijitSpinner .dijitInputLayoutContainer .dijitUpArrowButton {
-	top: 0;
-	bottom: auto;
-}
-
-TABLE.dijitComboButton {
-	/* In ComboButton, borders are on each cell rather than on <table> itself */
-	border-collapse: collapse;
-	border:0;
-	padding:0;
-	margin:0;
-}
-.dijitToolbar .dijitComboButton {
-	/* because Toolbar only draws a border around the hovered thing */
-	border-collapse: separate;
-}
-
-.dj_ie BUTTON.dijitButtonNode {
-	overflow: visible; /* eliminates arbitrary left and right padding on buttons */
-}
-
-table .dijitButton .dijitButtonNode,
-table .dijitComboButton .dijitButtonNode {
-	#overflow:hidden; /* visible messes up if the button is inside a table on IE */
-}
-
-
-
-.dijitButtonNode IMG {
-	/* make text and images line up cleanly */
-	vertical-align:middle;
-	/*margin-bottom:.2em;*/
-}
-
-/******
-	TextBox related.
-	Everything that has an <input>
-*******/
-
-.dijitTextBox,
-.dijitComboBox,
-.dijitSpinner {
-	border: solid black 1px;
-	#overflow: hidden; /* #6027, #6067 */
-	width: 15em;	/* need to set default size on outer node since inner nodes say <input style="width:100%"> and <td width=100%>.  user can override */
-	vertical-align: middle;
-	#vertical-align: auto;
-}
-
-.dijitTimeTextBox {
-	width: 8em;
-}
-
-/* rules for safari to deal with fuzzy blue focus border */
-.dijitTextBox input:focus,
-.dijitComboBox input:focus,
-.dijitSpinner input:focus {
-	outline: none;	/* blue fuzzy line looks wrong on combobox or something w/validation icon showing */
-}
-.dijitTextBoxFocused,
-.dijitComboBoxFocused,
-.dijitSpinnerFocused, .dijitSpinnerUpArrowActive, .dijitSpinnerDownArrowActive,
-.dijitTextAreaFocused {
-	/* should we display focus like we do on other browsers, or use the safari standard focus indicator?? */
-	outline: auto 5px -webkit-focus-ring-color;
-}
-
-.dijitTextBox INPUT,
-.dijitComboBox INPUT,
-.dijitSpinner INPUT {
-	border-left: solid black 1px;	/* TODO: for RTL mode should be border-right */
-	display:inline;
-	position:static !important;
-	border:0 !important;
-	margin:0 !important;
-	vertical-align:top !important;
-	background-color:transparent !important;
-	background-image:none !important;
-	width:100% !important;
-}
-
-/* Display an "X" for invalid input. Themes will override these rules to display an icon instead.
-*/
-.dijitValidationIcon {
-	visibility: hidden;
-	display: block;
-	padding: 0 2px;
-	float: right;
-	height: auto;
-}
-.dijitValidationIconText {
-	visibility: hidden;
-	display: none;
-	float:right;
-	font-family: sans-serif;
-	font-style:italic;
-	font-size: 0.75em;
-	padding-right: 0.15em;
-	line-height: 160%;
-}
-.dijit_a11y .dijitValidationIcon { display: none !important; }
-.dijit_a11y .dijitValidationIconText { display: block !important; }
-
-.dijitError .dijitValidationIcon,
-.dijitError .dijitValidationIconText {
-	visibility: visible;
-}
-
-.dijitTextBox .dijitArrowButton {
-	/* this is for a combo box with no arrow displayed; we set baseClass=TextBox */
-	display:none;
-}
-
-/****
-		dijit.form.CheckBox
- 	 &
-  		dijit.form.RadioButton
- ****/
-
-.dijitCheckBox,
-.dijitRadio,
-.dijitCheckBoxInput {
-	padding: 0;
-	border: 0;
-	width: 16px;
-	height: 16px;
-	background-position:center center;
-	background-repeat:no-repeat;
-	overflow: hidden;
-}
-
-.dijitCheckBox INPUT,
-.dijitRadio INPUT {
-	margin: 0;
-	padding: 0;
-	display: block;
-}
-
-.dijitCheckBoxInput {
-	/* place the actual input on top, but all-but-invisible */
-	opacity: 0.01;
-}
-
-.dj_ie .dijitCheckBoxInput {
-	filter: alpha(opacity=0);
-}
-
-.dijit_a11y .dijitCheckBox,
-.dijit_a11y .dijitRadio {
-	width: auto;
-	height: auto;
-}
-.dijit_a11y .dijitCheckBoxInput {
-	opacity: 1;
-	filter: none;
-	width: auto;
-	height: auto;
-}
-
-
-/****
-		dijit.ProgressBar
- ****/
-
-.dijitProgressBarEmpty{
-	/* outer container and background of the bar that's not finished yet*/
-	position:relative;overflow:hidden;
-	border:1px solid black; 	/* a11y: border necessary for high-contrast mode */
-	z-index:0;			/* establish a stacking context for this progress bar */
-}
-
-.dijitProgressBarFull {
-	/* outer container for background of bar that is finished */
-	position:absolute;
-	overflow:hidden;
-	z-index:-1;
-	top:0;
-	width:100%;
-}
-.dj_ie6 .dijitProgressBarFull {
-	height:1.6em;
-}
-
-.dijitProgressBarTile {
-	/* inner container for finished portion */
-	position:absolute;
-	overflow:hidden;
-	top:0;
-	left:0;
-	bottom:0;
-	right:0;
-	margin:0;
-	padding:0;
-	width:auto;
-	height:auto;
-	background-color:#aaa;
-	background-attachment: fixed;
-}
-
-.dijit_a11y .dijitProgressBarTile{
-	/* a11y:  The border provides visibility in high-contrast mode */
-	border-width:4px;
-	border-style:solid;
-	background-color:transparent !important;
-}
-
-.dj_ie6 .dijitProgressBarTile {
-	/* width:auto works in IE6 with position:static but not position:absolute */
-	position:static;
-	/* height:auto or 100% does not work in IE6 */
-	height:1.6em;
-}
-
-.dijitProgressBarIndeterminate .dijitProgressBarLabel {
-	visibility:hidden;
-}
-
-.dijitProgressBarIndeterminate .dijitProgressBarTile {
-	/* animated gif for 'indeterminate' mode */
-}
-
-.dijitProgressBarIndeterminateHighContrastImage {
-	display:none;
-}
-
-.dijit_a11y .dijitProgressBarIndeterminate .dijitProgressBarIndeterminateHighContrastImage {
-	display:block;
-	position:absolute;
-	top:0;
-	bottom:0;
-	margin:0;
-	padding:0;
-	width:100%;
-	height:auto;
-}
-
-.dijitProgressBarLabel {
-	display:block;
-	position:static;
-	width:100%;
-	text-align:center;
-	background-color:transparent !important;
-}
-
-/****
-		dijit.Tooltip
- ****/
-
-.dijitTooltip {
-	position: absolute;
-	z-index: 2000;
-	display: block;
-	/* make visible but off screen */
-	left: 50%;
-	top: -10000px;
-	overflow: visible;
-}
-
-.dijitTooltipContainer {
-	border: solid black 2px;
-	background: #b8b5b5;
-	color: black;
-	font-size: small;
-}
-
-.dijitTooltipFocusNode {
-	padding: 2px 2px 2px 2px;
-}
-
-.dijitTooltipConnector {
-	position: absolute;
-}
-
-.dijitTooltipData {
-	display:none;
-}
-/* MOW: using actual images at this time ??? close???
-/* draw an arrow with CSS only * /
-.dijitTooltipConnector {
-	/* the border on the triangle * /
-	font-size: 0; line-height: 0%; width: 0;
-	border-top: none;
-	border-bottom: 14px solid black;
-	border-left: 7px solid transparent;
-	border-right: 7px solid transparent;
-	top: -14px;
-	left: 3px;
-	z-index: 2;
-}
-
-.dijitTooltipConnector div {
-	/* the background of the triangle * /
-	font-size: 0; line-height: 0%; width: 0;
-	position: absolute;
-	border-bottom: 10px solid #b8b5b5;
-	border-left: 5px solid transparent;
-	border-right: 5px solid transparent;
-	top: 6px;
-	left: -5px;
-	z-index: 3;
-}
-
-*/
-
-
-
-/* Layout widgets. This is essential CSS to make layout work (it isn't "styling" CSS)
-   make sure that the position:absolute in dijitAlign* overrides other classes */
-
-.dijitLayoutContainer{
-	position: relative;
-	display: block;
-	overflow: hidden;
-}
-
-body .dijitAlignTop,
-body .dijitAlignBottom,
-body .dijitAlignLeft,
-body .dijitAlignRight {
-	position: absolute;
-	overflow: hidden;
-}
-
-body .dijitAlignClient { position: absolute; }
-
-/*
- * BorderContaienr
- *
- * .dijitBorderContainer is a stylized layout where panes have border and margin.
- * .dijitBorderContainerNoGutter is a raw layout.
- */
-.dijitBorderContainer, .dijitBorderContainerNoGutter {
-	position:relative;
-	overflow: hidden;
-}
-
-.dijitBorderContainerPane,
-.dijitBorderContainerNoGutterPane {
-	position: absolute !important;	/* !important to override position:relative in dijitTabContainer etc. */
-	z-index: 2;		/* above the splitters so that off-by-one browser errors don't cover up border of pane */
-}
-
-.dijitBorderContainer > .dijitTextArea {
-	/* On Safari, for SimpleTextArea inside a BorderContainer,
-		don't want to display the grip to resize */
-	resize: none;
-}
-
-.dijitGutter {
-	/* gutter is just a place holder for empty space between panes in BorderContainer */
-	position: absolute;
-	font-size: 1px;		/* needed by IE6 even though div is empty, otherwise goes to 15px */
-}
-
-/* SplitContainer
-
-	'V' == container that splits vertically (up/down)
-	'H' = horizontal (left/right)
-*/
-
-.dijitSplitter {
-	position: absolute;
-	overflow: hidden;
-	z-index: 10;		/* above the panes so that splitter focus is visible on FF, see #7583*/
-	background-color: #fff;
-	border-color: gray;
-	border-style: solid;
-	border-width: 0;
-}
-.dj_ie .dijitSplitter {
-	z-index: 1;	/* behind the panes so that pane borders aren't obscured see test_Gui.html/[14392] */
-}
-
-.dijitSplitterActive {
-	z-index: 11 !important;
-}
-
-.dijitSplitterCover{
-	position:absolute;
-	z-index:-1;
-	top:0;
-	left:0;
-	width:100%;
-	height:100%;
-}
-
-.dijitSplitterCoverActive{
-	z-index:3 !important;
-}
-
-/* #6945: stop mouse events */
-.dj_ie .dijitSplitterCover{
-	background: white;
-	filter: alpha(opacity=0);
-}
-
-.dijitSplitterH {
-	height: 7px;
-	border-top:1px;
-	border-bottom:1px;
-	cursor: ns-resize;
-}
-.dijitSplitterV {
-	width: 7px;
-	border-left:1px;
-	border-right:1px;
-	cursor: ew-resize;
-}
-.dijitSplitContainer{
-	position: relative;
-	overflow: hidden;
-	display: block;
-}
-
-.dijitSplitPane{
-	position: absolute;
-}
-
-.dijitSplitContainerSizerH,
-.dijitSplitContainerSizerV {
-	position:absolute;
-	font-size: 1px;
-	cursor: move;
-	cursor: w-resize;
-	background-color: ThreeDFace;
-	border: 1px solid;
-	border-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;
-	margin: 0;
-}
-
-.dijitSplitContainerSizerH .thumb, .dijitSplitterV .dijitSplitterThumb {
-	overflow:hidden;
-	position:absolute;
-	top:49%;
-}
-
-.dijitSplitContainerSizerV .thumb, .dijitSplitterH .dijitSplitterThumb {
-	position:absolute;
-	left:49%;
-}
-
-.dijitSplitterShadow,
-.dijitSplitContainerVirtualSizerH,
-.dijitSplitContainerVirtualSizerV {
-	font-size: 1px;
-	background-color: ThreeDShadow;
-	-moz-opacity: 0.5;
-	opacity: 0.5;
-	filter: Alpha(Opacity=50);
-	margin: 0;
-}
-
-.dj_ie .dijitSplitterV, .dijitSplitContainerVirtualSizerH {
-	cursor: w-resize;
-}
-.dj_ie .dijitSplitterH, .dijitSplitContainerSizerV, .dijitSplitContainerVirtualSizerV {
-	cursor: n-resize;
-}
-
-.dijit_a11y .dijitSplitterH {
-	border-top:1px solid #d3d3d3 !important;
-	border-bottom:1px solid #d3d3d3 !important;
-}
-.dijit_a11y .dijitSplitterV {
-	border-left:1px solid #d3d3d3 !important;
-	border-right:1px solid #d3d3d3 !important;
-}
-
-/* ContentPane */
-
-.dijitContentPane {
-	display: block;
-	overflow: auto;	/* if we don't have this (or overflow:hidden), then Widget.resizeTo() doesn't make sense for ContentPane */
-}
-
-.dijitContentPaneSingleChild {
-	/*
-	 * if the ContentPane holds a single layout widget child which is being sized to match the content pane,
-	 * then the ContentPane should never get a scrollbar (but it does due to browser bugs, see #9449
-	 */
-	overflow: hidden;
-}
-
-/* TitlePane */
-.dijitTitlePane {
-	display: block;
-	overflow: hidden;
-}
-
-/* Color Palette */
-
-.dijitColorPalette {
-	border:1px solid #999;
-	background:#fff;
-	-moz-border-radius:3pt;
-}
-
-img.dijitColorPaletteUnder {
-	border-style:none;
-	position:absolute;
-	left:0;
-	top:0;
-}
-.dijitColorPaletteInner {
-	position: relative;
-	overflow:hidden;
-	outline:0;
-}
-.dijitPaletteCell {
-	width: 20px;
-	height: 20px;
-	position: absolute;
-	overflow: hidden;
-	z-index: 10;
-	outline-width: 0;
-}
-.dijitPaletteImg {
-	width: 16px; /*This is the width of one color in the provided palettes. */
-	height: 14px; /* Height of one color in the provided palettes. */
-	position: absolute;
-	top: 1px;
-	left: 1px;
-	overflow: hidden;
-	cursor: default;
-	border:1px solid #999;
-	/* -moz-border-radius:2pt; */
-}
-
-.dijitPaletteCellHighlight img {
-	width: 14px; /*This is the width of one color in the provided palettes. */
-	height: 12px; /* Height of one color in the provided palettes. */
-	position: absolute;
-	top: 1px;
-	left: 1px;
-	overflow: hidden;
-	cursor: default;
-	border:2px solid #000;
-	outline:1px solid #dedede;
-	/* -moz-border-radius:0; */
-}
-
-.dijit_a11y .dijitPaletteCell {
-	background-color:transparent !important;
-}
-.dijit_a11y .dijitPaletteImg {
-	background-color:transparent !important;
-}
-
-.dijitAccordionContainer {
-	border:1px solid #b7b7b7;
-	border-top:0 !important;
-}
-/* prevent partial, ugly focus border on FF and Safari */
-.dj_webkit .dijitAccordionContainer  div:focus {
-	outline:none;
-}
-.dj_ff3 .dijitAccordionContainer  div:focus {
-	outline:none;
-}
-.dijitAccordionTitle {
-	cursor: pointer;
-}
-.dijitAccordionFocused  {
-	text-decoration: underline;
-}
-
-/* images off, high-contrast mode styles */
-.dijitAccordionTitle .arrowTextUp,
-.dijitAccordionTitle .arrowTextDown {
-	display: none;
-	font-size: 0.65em;
-	font-weight: normal !important;
-}
-
-.dijit_a11y .dijitAccordionTitle .arrowTextUp,
-.dijit_a11y .dijitAccordionTitle-selected .arrowTextDown {
-	display: inline;
-}
-
-.dijit_a11y .dijitAccordionTitle-selected .arrowTextUp {
-	display: none;
-}
-
-/* Calendar */
-
-.dijitCalendarContainer thead tr th, .dijitCalendarContainer thead tr td, .dijitCalendarContainer tbody tr td, .dijitCalendarContainer tfoot tr td {
-	padding: 0;
-}
-
-.dijitCalendarNextYear {
-	margin:0 0 0 0.55em;
-}
-
-.dijitCalendarPreviousYear {
-	margin:0 0.55em 0 0;
-}
-
-.dijitCalendarIncrementControl {
-	vertical-align: middle;
-}
-
-.dijitCalendarDisabledDate {
-	color:gray !important;
-}
-
-.dijitCalendarPreviousMonthDisabled,
-.dijitCalendarCurrentMonthDisabled,
-.dijitCalendarNextMonthDisabled {
-	cursor:default !important
-}
-
-.dijitCalendarIncrementControl,
-.dijitCalendarBodyContainer tbody tr td,
-.dijitCalendarDateTemplate,
-.dijitCalendarContainer .dijitInline {
-	cursor:pointer;
-}
-
-.dijitSpacer {
-	/* don't display it, but make it affect the width */
-  	position: relative;
-  	height: 1px;
-  	overflow: hidden;
-  	visibility: hidden;
-}
-
-
-/* Menu */
-
-.dijitMenu {
-	border:1px solid black;
-	background-color:white;
-}
-.dijitMenuTable {
-	margin:1px 0;
-	border-collapse:collapse;
-	border-width:0;
-	background-color:white;
-}
-
-/* workaround for webkit bug #8427, remove this when it is fixed upstream */
-.dj_webkit .dijitMenuTable td[colspan="2"]{
-	border-right:hidden;
-}
-
-.dijitMenuItem{
-	text-align: left;
-	white-space: nowrap;
-	padding:.1em .2em;
-	cursor:pointer;
-}
-
-.dijitMenuPassive .dijitMenuItemHover,
-.dijitMenuItemSelected {
-	/*
-	 * dijitMenuItemHover refers to actual mouse over
-	 * dijitMenuItemSelected is used after a menu has been "activated" by
-	 * clicking it, tabbing into it, or being opened from a parent menu,
-	 * and denotes that the menu item has focus or that focus is on a child
-	 * menu
-	 */
-	background-color:black;
-	color:white;
-}
-
-.dijitMenuItemIcon, .dijitMenuExpand {
-	background-repeat: no-repeat;
-}
-
-.dijitMenuItemDisabled * {
-	/* for a disabled menu item, just set it to mostly transparent */
-	opacity:0.3;
-	cursor:default;
-}
-.dj_ie .dijit_a11y .dijitMenuItemDisabled td,
-.dj_ie .dijitMenuItemDisabled *,
-.dj_ie .dijitMenuItemDisabled td {
-	color:gray !important;
-	filter: alpha(opacity=35);
-}
-
-.dijitMenuItemLabel {
-	position: relative;
-	vertical-align: middle;
-}
-
-.dijit_a11y .dijitMenuItemSelected {
-	border: 1px #fff dotted !important;
-}
-.dj_ff3 .dijit_a11y .dijitMenuItem td {
-	padding: none !important;
-	background:none ! important;
-}
-.dijit_a11y .dijitMenuItemSelected .dijitMenuItemLabel {
-	border-width: 1px;
-	border-style: solid;
-}
-.dj_ie8 .dijit_a11y .dijitMenuItemLabel {
-	position:static;
-}
-
-.dijitMenuExpandA11y {
-	display: none;
-}
-.dijit_a11y .dijitMenuExpandA11y {
-	display: inline;
-}
-
-.dijitMenuSeparator td {
-	border: 0;
-	padding: 0;
-}
-
-/* separator can be two pixels -- set border of either one to 0 to have only one */
-.dijitMenuSeparatorTop {
-	height: 50%;
-	margin: 0;
-	margin-top:3px;
-	font-size: 1px;
-}
-
-.dijitMenuSeparatorBottom {
-	height: 50%;
-	margin: 0;
-	margin-bottom:3px;
-	font-size: 1px;
-}
-
-/* the checked menu item */
-.dijitCheckedMenuItemIconChar {
-	vertical-align: middle;
-	visibility:hidden;
-}
-.dijitCheckedMenuItemChecked .dijitCheckedMenuItemIconChar {
-	visibility: visible;
-}
-.dijit_a11y .dijitCheckedMenuItemIconChar {
-	display:inline !important;
-}
-.dijit_a11y .dijitCheckedMenuItemIcon {
-	display: none;
-}
-
-
-/* StackContainer */
-
-.dijitStackController .dijitToggleButtonChecked * {
-	cursor: default;	/* because pressing it has no effect */
-}
-
-/* TabContainer */
-
-.dijitTabContainerNoLayout {
-	width: 100%;	/* otherwise ScrollingTabController goes to 50K pixels wide */
-}
-
-.dijitTabContainerBottom-tabs,
-.dijitTabContainerTop-tabs,
-.dijitTabContainerLeft-tabs,
-.dijitTabContainerRight-tabs {
-	overflow: visible !important;  /* so tabs can cover up border adjacent to container */
-}
-
-.dijitTabContainerBottom-container,
-.dijitTabContainerTop-container,
-.dijitTabContainerLeft-container,
-.dijitTabContainerRight-container {
-	z-index:0;
-	overflow: hidden;
-	border: 1px solid black;
-}
-.dijitTabContainer .nowrapTabStrip {
-	width: 50000px;
-	display: block;
-	position: relative;
-}
-.dijitTabContainer .dijitTabListWrapper {
-	overflow: hidden;
-}
-
-.dijit_a11y .dijitTabContainer .tabStripButton img {
-	/* hide the icons (or rather the empty space where they normally appear) because text will appear instead */
-	display: none;
-}
-
-.dijitTabContainerTop-tabs {
-	border-bottom: 1px solid black;
-}
-.dijitTabContainerTop-container {
-	border-top: 0px;
-}
-
-.dijitTabContainerLeft-tabs {
-	border-right: 1px solid black;
-	float: left;
-}
-.dijitTabContainerLeft-container {
-	border-left: 0px;
-}
-
-.dijitTabContainerBottom-tabs {
-	border-top: 1px solid black;
-}
-.dijitTabContainerBottom-container {
-	border-bottom: 0px;
-}
-
-.dijitTabContainerRight-tabs {
-	border-left: 1px solid black;
-	float: left;
-}
-.dijitTabContainerRight-container {
-	border-right: 0px;
-}
-
-div.dijitTabBtnDisabled, .dj_ie div.dijitTabBtnDisabled {
-	cursor: auto;
-}
-/*
-div.dijitTabBtnDisabled img {
-	opacity: 0.3;
-}
-
-
-.dj_ie div.dijitTabBtnDisabled img {
-	filter: gray() alpha(opacity=30);
-}
-*/
-.dijitTab {
-	position:relative;
-	cursor:pointer;
-	white-space:nowrap;
-	z-index:3;
-}
-.dijitTab * {
-	/* make tab icons and close icon line up w/text */
-	vertical-align: middle;
-}
-.dijitTabChecked {
-	cursor: default;	/* because clicking will have no effect */
-}
-
-.dijitTabButtonIcon {
-	height: 18px;
-}
-
-.dijitTabContainerTop-tabs .dijitTab {
-	top: 1px;	/* to overlap border on .dijitTabContainerTop-tabs */
-}
-.dijitTabContainerBottom-tabs .dijitTab {
-	top: -1px;	/* to overlap border on .dijitTabContainerBottom-tabs */
-}
-.dijitTabContainerLeft-tabs .dijitTab {
-	left: 1px;	/* to overlap border on .dijitTabContainerLeft-tabs */
-}
-.dijitTabContainerRight-tabs .dijitTab {
-	left: -1px;	/* to overlap border on .dijitTabContainerRight-tabs */
-}
-
-
-.dijitTabContainerTop-tabs .dijitTab,
-.dijitTabContainerBottom-tabs .dijitTab {
-	/* Inline-block */
-	display:inline-block;			/* webkit and FF3 */
-	#zoom: 1; /* set hasLayout:true to mimic inline-block */
-	#display:inline; /* don't use .dj_ie since that increases the priority */
-}
-
-.dijitTabInnerDiv {
-	position:relative;
-}
-
-
-.tabStripButton {
-	z-index: 12;
-}
-
-.dijitTabButtonDisabled .tabStripButton {
-	display: none;
-}
-
-
-.dijitTab .closeButton {
-	margin-left: 1em;
-}
-
-/* images off, high-contrast mode styles */
-.dijitTab .closeText {
-	display:none;
-}
-
-.dijit_a11y .closeText {
-	display:inline;
-	margin: 0px 6px;
-}
-
-.dijit_a11y .dijitTab .closeImage {
-	display:none;
-}
-
-.dijit_a11y .closeButton-hover .closeText {
-	border:thin solid;
-}
-.dijit_a11y .dijitTabChecked {
-	border-style:dashed !important;
-}
-
-.dijit_a11y .dijitTabInnerDiv {
-	border-left:none !important;
- }
-
-.dijitTabPane,
-.dijitStackContainer-child,
-.dijitAccordionContainer-child {
-	/* children of TabContainer, StackContainer, and AccordionContainer shouldn't have borders
-	 * b/c a border is already there from the TabContainer/StackContainer/AccordionContainer itself.
-	 */
-    border: none !important;
-}
-
-.dijitInlineEditor {
-	/* span around an inline-editable value when in edit mode */
-	position:relative;
-	vertical-align:bottom;
-}
-.dj_ie .dijitInlineEditor {
-	vertical-align:middle;
-}
-
-.dijitInlineValue {
-	/* span around an inline-editable value when NOT in edit mode */
-}
-
-.dijitInlineEditor .dijitButtonContainer {
-	/* div around the buttons -- makes them float below the field */
-	position:absolute;
-	right:0;
-	overflow:visible;
-}
-
-.dijitInlineEditor .saveButton,
-.dijitInlineEditor .cancelButton {
-}
-
-/* Tree */
-
-.dijitTreeIndent {
-	/* amount to indent each tree node (relative to parent node) */
-	width: 19px;
-}
-
-.dijitTreeRow, .dijitTreeContent {
-	white-space: nowrap;
-}
-
-.dijitTreeRow img {
-	/* make the expando and folder icons line up with the label */
-	vertical-align: middle;
-}
-
-.dijitTreeContent {
-    cursor: default;
-}
-
-.dijitExpandoText {
-	display: none;
-}
-
-.dijit_a11y .dijitExpandoText {
-	display: inline;
-	padding-left: 10px;
-	padding-right: 10px;
-	font-family: monospace;
-	border-style: solid;
-	border-width: thin;
-	cursor: pointer;
-}
-
-.dijitTreeLabel {
-	margin: 0px 4px;
-}
-
-/* Dialog */
-
-.dijitDialog {
-	position: absolute;
-	z-index: 999;
-	padding: 1px;
-	overflow: hidden;       /* override overflow: auto; from ContentPane to make dragging smoother */
-}
-
-.dijitDialogFixed div.dijitDialogTitleBar {
-	cursor:default;
-}
-
-.dijitDialogUnderlayWrapper {
-	position: absolute;
-	left: 0;
-	top: 0;
-	z-index: 998;
-	display: none;
-	background: transparent !important;
-}
-
-.dijitDialogUnderlay {
-	background: #eee;
-	opacity: 0.5;
-}
-
-.dj_ie .dijitDialogUnderlay {
-	filter: alpha(opacity=50);
-}
-
-/* images off, high-contrast mode styles */
-.dijit_a11y .dijitInputLayoutContainer,
-.dijit_a11y .dijitDialog {
-	opacity: 1 !important;
-	background-color: white !important;
-}
-
-.dijitDialog .closeText {
-	display:none;
-	/* for the onhover border in high contrast on IE: */
-	position:absolute;
-}
-
-.dijit_a11y .dijitDialog .closeText {
-	display:inline;
-}
-
-.dijitSliderMoveable {
-	z-index:99;
-	position:absolute !important;
-	display:block;
-	vertical-align:middle;
-}
-
-.dijitSliderMoveableH {
-	right:0;
-}
-
-.dijit_a11y div.dijitSliderImageHandle,
-.dijitSliderImageHandle {
-	margin:0;
-	padding:0;
-	position:absolute !important;
-	border:8px solid gray;
-	width:0;
-	height:0;
-}
-.dijit_a11y .dijitSliderFocused .dijitSliderImageHandle {
-	border:4px solid #000;
-	height:8px;
-	width:8px;
-}
-
-.dijitSliderImageHandleV {
-	top:-8px;
-	left:-6px;
-}
-
-.dijitSliderImageHandleH {
-	left:-8px;
-	top:-5px;
-	vertical-align:top;
-}
-
-.dijitSliderBar {
-	border-style:solid;
-	border-color:black;
-}
-
-.dijitSliderBarContainerV {
-	position:relative;
-	height:100%;
-	z-index:1;
-}
-
-.dijitSliderBarContainerH {
-	position:relative;
-	z-index:1;
-}
-
-.dijitSliderBarH {
-	height:4px;
-	border-width:1px 0;
-}
-
-.dijitSliderBarV {
-	width:4px;
-	border-width:0 1px;
-}
-
-.dijitSliderProgressBar {
-	background-color:red;
-	z-index:1;
-}
-
-.dijitSliderProgressBarV {
-	position:static !important;
-	height:0%;
-	vertical-align:top;
-	text-align:left;
-}
-
-.dijitSliderProgressBarH {
-	position:absolute !important;
-	width:0%;
-	vertical-align:middle;
-	overflow:visible;
-}
-
-.dijitSliderRemainingBar {
-	overflow:hidden;
-	background-color:transparent;
-	z-index:1;
-}
-
-.dijitSliderRemainingBarV {
-	height:100%;
-	text-align:left;
-}
-
-.dijitSliderRemainingBarH {
-	width:100% !important;
-}
-
-/* the slider bumper is the space consumed by the slider handle when it hangs over an edge */
-.dijitSliderBumper {
-	overflow:hidden;
-	z-index:1;
-}
-
-.dijitSliderBumperV {
-	width:4px;
-	height:8px;
-	border-width:0 1px;
-}
-
-.dijitSliderBumperH {
-	width:8px;
-	height:4px;
-	border-width:1px 0;
-}
-
-.dijitSliderBottomBumper,
-.dijitSliderLeftBumper {
-	background-color:red;
-}
-
-.dijitSliderTopBumper,
-.dijitSliderRightBumper {
-	background-color:transparent;
-}
-
-.dijitSliderDecorationH {
-	text-align:center;
-}
-
-.dijitSlider .dijitSliderButton {
-	font-family:monospace;
-	margin:0;
-	padding:0;
-	display:block;
-}
-
-.dijit_a11y .dijitSliderButtonInner {
-	visibility:visible !important;
-}
-
-.dijitSliderButtonContainer {
-	text-align:center;
-	height:0;
-}
-
-.dijitSlider .dijitButtonNode {
-	padding:0;
-	display:block;
-}
-
-.dijitRuleContainer {
-	position:relative;
-	overflow:visible;
-}
-
-.dijitRuleContainerV {
-	height:100%;
-	line-height:0;
-	float:left;
-	text-align:left;
-}
-
-.dj_opera .dijitRuleContainerV {
-	line-height:2%;
-}
-
-.dj_ie .dijitRuleContainerV {
-	line-height:normal;
-}
-
-.dj_gecko .dijitRuleContainerV {
-	margin:0 0 1px 0; /* mozilla bug workaround for float:left,height:100% block elements */
-}
-
-.dijitRuleMark {
-	position:absolute;
-	border:1px solid black;
-	line-height:0;
-	height:100%;
-}
-
-.dijitRuleMarkH {
-	width:0;
-	border-top-width:0 !important;
-	border-bottom-width:0 !important;
-	border-left-width:0 !important;
-}
-
-.dijitRuleLabelContainer {
-	position:absolute;
-}
-
-.dijitRuleLabelContainerH {
-	text-align:center;
-	display:inline-block;
-}
-
-.dijitRuleLabelH {
-	position:relative;
-	left:-50%;
-}
-
-.dijitRuleMarkV {
-	height:0;
-	border-right-width:0 !important;
-	border-bottom-width:0 !important;
-	border-left-width:0 !important;
-	width:100%;
-	left:0;
-}
-
-.dj_ie .dijitRuleLabelContainerV {
-	margin-top:-.55em;
-}
-
-/* Icon-only buttons (often in toolbars) still display the text in high-contrast mode */
-.dijit_a11y .dijitButtonContents .dijitButtonText,
-.dijit_a11y .dijitTab .tabLabel {
-	display: inline !important;
-}
-.dj_ie7 .dijitButtonNode > BUTTON.dijitButtonContents > * {
-	position: relative; /* workaround for IE7 distorted text on scroll */
-}
-
-.dijitTextArea {
-	width:100%;
-	overflow-y: auto;	/* w/out this IE's SimpleTextArea goes to overflow: scroll */
-}
-.dijitTextArea[cols] {
-	width:auto; /* SimpleTextArea cols */
-}
-.dj_ie .dijitTextAreaCols {
-	width:auto;
-}
-.dijitTextArea > DIV {
-	text-decoration:none;
-	overflow:auto;
-	min-height: 1.40em;
-}
-
-.dj_ie .dijitTextArea p {
-	margin-top:0;
-	margin-bottom:0;
-	line-height: normal !important;
-}
-
-.dijitToolbarSeparator {
-	height: 18px;
-	width: 5px;
-	padding: 0 1px;
-	margin: 0;
-}
-
-/* Editor */
-.dijitIEFixedToolbar {
-	position:absolute;
-	/* top:0; */
-	top: expression(eval((document.documentElement||document.body).scrollTop));
-}
-
-.RichTextEditable {
-	display: block;	/* prevents glitch on FF with InlineEditBox, see #8404 */
-}
-
-/* TimePicker */
-
-.dijitTimePickerItemInner {
-	text-align:center;
-	border:0;
-	padding:2px 8px 2px 8px;
-}
-
-.dijitTimePickerTick,
-.dijitTimePickerMarker {
-	border-bottom:1px solid gray;
-}
-
-.dijitTimePicker .dijitDownArrowButton {
-	border-top: none !important;
-}
-
-.dijitTimePickerTick {
-	color:#CCC;
-}
-
-.dijitTimePickerMarker {
-	color:black;
-	background-color:#CCC;
-}
-
-.dijitTimePickerItemSelected {
-	font-weight:bold;
-	color:#333;
-	background-color:#b7cdee;
-}
-
-.dijitTimePickerItemHover {
-	background-color:gray;
-	color:white;
-	cursor:pointer;
-}
-
-.dijit_a11y .dijitTimePickerItem {
-	border-bottom:1px solid #333;
-}
-
-
-/* Disable the high contrast character */
-.dijitToggleButtonIconChar {
-	display:none !important;
-}
-.dijit_a11y .dijitToggleButtonIconChar {
-	display:inline !important;
-}
-
-.dijit_a11y .dijitToggleButtonIconChar {
-	visibility:hidden;
-}
-.dijit_a11y .dijitToggleButtonChecked .dijitToggleButtonIconChar {
-	visibility:visible !important;
-}
-
-.dijitArrowButtonChar {
-	display:none !important;
-}
-.dijit_a11y .dijitArrowButtonChar {
-	display:inline !important;
-}
-.dijitInputLayoutContainer {
-	position: relative;
-	overflow: hidden;
-}
-.dijitSpinnerButtonContainer {
-	float: right;
-	width: 18px;
-	position: relative;
-	overflow: hidden;
-}
-.dijitSpinner .dijitInputLayoutContainer .dijitArrowButton {
-	height: 50%;
-	width: 16px;
-	overflow: hidden;
-}
-.dijitSpinner .dijitInputLayoutContainer .dijitArrowButtonInner {
-	overflow: hidden;
-	line-height: 50%;
-}
-.dijit_a11y .dijitSpinner .dijitInputLayoutContainer .dijitArrowButton {
-	width: 100%;
-}
-.dijit_a11y .dijitSpinner .dijitArrowButton .dijitArrowButtonChar {
-	font-size: 0.4em;
-	vertical-align: top;
-}
-.dijit_a11y .dijitSpinnerButtonContainer {
-	width: 0.5em;
-	margin-left: 2px;
-	overflow: visible;
-}
-.dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
-	border-width: 1px 0px 0px 1px;
-	border-style: solid !important;
-}
-
-/* Select */
-.dijitSelect {
-	margin: 0.2em;
-}
-.dj_ie .dijitSelect,
-.dj_ie7 .dijitSelect,
-.dj_iequirks .dijitSelect {
-	vertical-align: middle; /* Set this back for what we hack in dijit inline */
-}
-.dj_ie8 .dijitSelect .dijitButtonText {
-	vertical-align: top;
-}
-.dijitSelect .dijitButtonNode {
-	text-align: left;
-}
-.dijitRtl .dijitSelect .dijitButtonNode {
-	text-align: right;
-}
-.dijitToolbar .dijitSelect {
-	margin: 0;
-}
-.dj_webkit .dijitToolbar .dijitSelect {
-	padding-left: 0.3em;
-}
-.dijit_a11y .dijitSelectDisabled .dijitButtonNode {
-	border-style: outset!important;
-	border-width: medium!important;
-	border-color: #999 !important;
-	color:#999 !important;
-}
-.dijitSelect .dijitButtonContents {
-	padding: 0px;
-	background: transparent none;
-}
-.dijitSelectFixedWidth .dijitButtonContents {
-	width: 100%;
-}
-.dijitSelect .dijitArrowButton {
-	width: 16px;
-}
-
-.dj_ie6 .dijitSelectMenu .dijitMenuItemLabel,
-.dj_ie7 .dijitSelectMenu .dijitMenuItemLabel {
-	/* Set back to static due to bug in ie6/ie7 - See Bug #9651 */
-	position: static;
-}
-
-/* Fix the baseline of our label (for multi-size font elements) */
-.dijitSelectLabel *
-{
-	vertical-align: baseline;
-}
-
-/* Styling for the currently-selected option (rich text can mess this up) */
-.dijitSelectSelectedOption * {
-	font-weight: bold;
-}
-
-/* Fix the styling of the dropdown menu to be more combobox-like */
-.dijitSelectMenu {
-	border-width: 1px;
-}
-
-/* Style the different areas of the button to look like a "real" dropdown */
-.dijitSelect .dijitButtonContents {
-	white-space: nowrap;
-}
-
-/* Remove margins on the sub-table */
-.dijitSelectMenu .dijitMenuTable {
-	margin: 0px;
-	background-color: transparent;
-}
-
-/* basic readonly/disabled text color rules for form widgets */
-.dijitTextBoxReadOnly,
-.dijitComboBoxReadOnly,
-.dijitSpinnerReadOnly,
-.dijitTextAreaReadOnly,
-.dijitTextBoxDisabled,
-.dijitComboBoxDisabled,
-.dijitSpinnerDisabled,
-.dijitTextAreaDisabled {
-	color: gray;
-}
-.dj_webkit .dijitTextBoxDisabled INPUT,
-.dj_webkit .dijitComboBoxDisabled INPUT,
-.dj_webkit .dijitSpinnerDisabled INPUT {
-	color: #eee;
-}
-.dj_webkit INPUT.dijitTextBoxDisabled,
-.dj_webkit TEXTAREA.dijitTextAreaDisabled {
-	color: #333; /* because WebKit lightens disabled input/textarea no matter what color you specify */
-}
-
-.dijit_a11y .dijitSliderReadOnly,
-.dijit_a11y .dijitSliderDisabled {
-	opacity:0.6;
-}
-.dj_ie .dijit_a11y .dijitSliderReadOnly .dijitSliderBar,
-.dj_ie .dijit_a11y .dijitSliderDisabled .dijitSliderBar {
-	filter: alpha(opacity=40);
-}
-
-/* + and - Slider buttons: undo themed image values */
-.dijit_a11y .dijitSlider .dijitSliderButtonContainer DIV {
-	font-family: monospace; /* hypen is larger and more vertically centered */
-	font-size: 1em;
-	line-height: 1em;
-	height: auto;
-	width: auto;
-	margin: 0px 4px;
-}
-
-
-.dijitForceStatic {
-    position: static !important;
-}
-
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/dijit_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/dijit_rtl.css
deleted file mode 100644
index 9ad5bf4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/dijit_rtl.css
+++ /dev/null
@@ -1,115 +0,0 @@
-.dj_gecko-rtl .dijitInputField {
-	direction: ltr; /* Firefox needs this - probably a bug */
-}
-.dj_gecko-rtl .dijitInputField * {
-	direction: rtl; /* Firefox needs dijitInputField to be ltr, so fix the contained tags */
-}
-
-/* ComboBox */
-.dijitRtl .dijitMenuItem {
-	text-align: right;
-}
-
-/* Tree */
-
-.dijitRtl .dijitComboBox .dijitInputField {
-	border-right-width:1px !important;
-	border-left-width:0 !important;
-}
-
-/* Calendar */
-
-.dijitRtl .dijitCalendarNextYear {
-	margin:0 0.55em 0 0;
-}
-
-.dijitRtl .dijitCalendarPreviousYear {
-	margin:0 0 0 0.55em;
-}
-
-.dijitRtl .dijitProgressBarFull .dijitProgressBarLabel {
-	right:0; /* FF workaround */
-}
-
-/* Slider */
-
-.dijitRtl .dijitSliderImageHandleV {
-	left:auto;
-	right:-6px;
-}
-
-.dj_ie-rtl .dijitSliderImageHandleV {
-	right:-10px;
-}
-
-.dijitRtl .dijitSliderMoveableH {
-	right:auto;
-	left:0;
-}
-
-.dijitRtl .dijitRuleContainerV {
-	float:right;
-}
-
-.dj_gecko-rtl .dijitRuleContainerV {
-	float:left;
-}
-
-.dj_ie-rtl .dijitRuleContainerV {
-	text-align:right;
-}
-
-.dj_ie-rtl .dijitRuleLabelV {
-	text-align:left;
-}
-
-.dj_ie-rtl .dijitRuleLabelH {
-	zoom:1;
-}
-
-.dj_ie-rtl .dijitSliderProgressBarH {
-	right:0;
-	left:auto;
-}
-
-.dj_gecko-rtl .dijitSliderProgressBarH {
-	float:right;
-	right:0;
-	left:auto;
-}
-
-/* Spinner */
-
-.dijitRtl .dijitSpinner .dijitInputLayoutContainer .dijitArrowButton {
-	right: auto;
-	left: 0;
-	border-width: 0 1px 0 0 !important;
-}
-
-.dijitRtl .dijitSpinnerButtonContainer {
-	float: left;
-}
-
-.dijitRtl .dijit_a11y .dijitSpinnerButtonContainer {
-	margin-left: none;
-	margin-right: 2px;
-}
-
-.dijitRtl DIV.dijitArrowButton, .dijitRtl .dijitValidationIcon, .dijitRtl .dijitValidationIconText {
-	float: left;
-}
-
-/* ContentPane*/
-.dijitRtl .dijitContentPaneLoading, .dijitRtl .dijitContentPaneError {
-	background-position:right;
-	padding-right:25px;
-}
-
-/* Tab */
-.dijitRtl .dijitTabContainer .tabStripMenuButton {
-	float: left;
-}
-
-.dj_iequirks-rtl .dijitComboButton BUTTON {
-        float:left;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Calendar.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Calendar.css
deleted file mode 100644
index 9720e6e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Calendar.css
+++ /dev/null
@@ -1,152 +0,0 @@
-/* Calendar*/
-
-.nihilo .dijitCalendarIncrementControl {
-	/* next/prev month buttons */
-	width:15px;
-	height:15px;
-	background-image: url("images/spriteRoundedIconsSmall.png");
-	background-repeat: no-repeat
-}
-.dj_ie6 .nihilo .dijitCalendarIncrementControl {
-	font-size:.1em;
-	background-image: url("images/spriteRoundedIconsSmall.gif");
-}
-
-.nihilo .dijitA11ySideArrow {
-	display: none;
-}
-
-.nihilo .dijitCalendarDecrease {
-	background-position: top left;
-}
-.nihilo .dijitCalendarIncrease {
-	background-position: -30px top;
-}
-
-.nihilo table.dijitCalendarContainer {
-	font-size: 100%;
-	border-spacing: 0;
-	border-collapse: separate;
-	border: 1px solid #ccc;
-	margin: 0;
-}
-
-.nihilo .dijitCalendarMonthContainer th {
-	/* month header cell */
-	background:#d3d3d3 url("images/titleBar.png") repeat-x top;
-	padding-top:.3em;
-	padding-bottom:.2em;
-	text-align:center;
-}
-.dj_ie6 .nihilo .dijitCalendarMonthContainer th {
-	padding-top:.2em;
-	padding-bottom:.1em;
-
-}
-
-.nihilo .dijitCalendarDayLabelTemplate {
-	/* day of week labels */
-	background:#fefefe;
-	font-weight:normal;
-	padding-top:.15em;
-	padding-bottom:.2em;
-	border-bottom: 1px solid #eeeeee;
-	color:#293a4b;
-	text-align:center;
-}
-
-.nihilo .dijitCalendarBodyContainer {
-	border-bottom: 1px solid #eeeeee;
-}
-
-.nihilo .dijitCalendarMonthLabel {
-	color:#293a4b;
-	font-weight: bold;
-}
-
-.nihilo .dijitCalendarDateTemplate {
-	/* style for each day cell */
-	font-size: 0.9em;
-	font-weight: bold;
-	text-align: center;
-	padding: 0.3em 0.3em 0.05em 0.3em;
-	letter-spacing: 1px;
-	background-color: #fdfdfd;
-	border:#fdfdfd solid 1px !important;
-}
-
-.dj_ie .nihilo .dijitCalendarDateTemplate {
-	padding: 0.1em .33em 0.02em .33em;
-}
-
-.nihilo .dijitCalendarPreviousMonth,
-.nihilo .dijitCalendarNextMonth 		{
-	/* days that are part of the previous or next month */
-	color:#999999;
-	background-color:#f5f5f5 !important;
-	border:#f5f5f5 solid 1px !important;
-}
-
-.nihilo .dijitCalendarPreviousMonthDisabled,
-.nihilo .dijitCalendarNextMonthDisabled	{
-	/* days that are part of the previous or next month - disabled*/
-	background-color:#a4a5a6 !important;
-}
-
-.nihilo .dijitCalendarCurrentMonth {
-	/* days that are part of this month */
-}
-
-.nihilo .dijitCalendarCurrentMonthDisabled {
-	/* days that are part of this month - disabled */
-	background-color:#bbbbbc !important;
-}
-
-.nihilo .dijitCalendarDisabledDate {
-	/* one or the other? */
-	/* background: url(images/noX.gif) no-repeat center center !important; */
-	text-decoration:line-through !important;
-	cursor:default !important;
-}
-
-.nihilo .dijitCalendarCurrentDate {
-	/* cell for today's date */
-	text-decoration:underline;
-	font-weight:bold;
-}
-
-.nihilo .dijitCalendarSelectedDate {
-	/* cell for the selected date */
-	background-color:#ffe284 !important;
-	color:black !important;
-	border:#f7c95c solid 1px !important;
-}
-
-
-.nihilo .dijitCalendarYearContainer {
-	/* footer of the table that contains the year display/selector */
-	background:white url("images/titleBar.png") repeat-x top;
-}
-
-.nihilo .dijitCalendarYearLabel {
-	/* container for all of 3 year labels */
-	margin:0;
-	padding:0.4em 0 0.25em 0;
-	text-align:center;
-}
-
-.nihilo .dijitCalendarSelectedYear {
-	/* label for selected year */
-	color:black;
-	padding:0.2em;
-	padding-bottom:0.1em;
-	background-color:#ffe284 !important;
-	border:#f7c95c solid 1px !important;
-}
-
-.nihilo .dijitCalendarNextYear,
-.nihilo .dijitCalendarPreviousYear {
-	/* label for next/prev years */
-	color:black !important;
-	font-weight:normal;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Calendar_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Calendar_rtl.css
deleted file mode 100644
index 7b29bac..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Calendar_rtl.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/* Calendar */
-
-.dijitRtl .nihilo .dijitCalendarDecrease {
-	background-position: -30px top;
-}
-
-.dijitRtl .nihilo .dijitCalendarIncrease {
-	background-position: 0px top;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/ColorPalette.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/ColorPalette.css
deleted file mode 100644
index 59a4689..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/ColorPalette.css
+++ /dev/null
@@ -1,5 +0,0 @@
-.dijitColorPalette {
-	border:1px solid #d3d3d3;
-	background:#fff;
-	-moz-border-radius: 0px !important;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Common.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Common.css
deleted file mode 100644
index 4986990..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Common.css
+++ /dev/null
@@ -1,23 +0,0 @@
-/* DnD avatar-specific settings */
-/* For now it uses a default set of rules. Some other DnD classes can be modified as well. */
-.nihilo .dojoDndItemBefore {
-	border-top: 2px solid #369;
-}
-
-.nihilo .dojoDndItemAfter {
-	border-bottom: 2px solid #369;
-}
-
-.nihilo .dojoDndItemOver {
-	cursor:pointer;
-}
-
-.nihilo table.dojoDndAvatar { -moz-border-radius: 0; border: 1px solid #ccc; border-collapse: collapse; background-color: #fff; font-size: 75%; color: black;}
-.nihilo .dojoDndAvatar td	{ border: none; }
-.nihilo .dojoDndAvatar tr	{ border: none; }
-.nihilo .dojoDndAvatarHeader td	{ height: 20px; padding: 0 0 0 21px; }
-.nihilo .dojoDndAvatarItem td { padding: 2px;}
-.nihilo.dojoDndMove .dojoDndAvatarHeader	{background-color: #f58383; background-image: url(images/dndNoMove.png); background-repeat: no-repeat; background-position: 2px center;}
-.nihilo.dojoDndCopy .dojoDndAvatarHeader	{background-color: #f58383; background-image: url(images/dndNoCopy.png); background-repeat: no-repeat; background-position: 2px center;}
-.nihilo.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{background-color: #97e68d; background-image: url(images/dndMove.png); background-repeat: no-repeat; background-position: 2px center;}
-.nihilo.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{background-color: #97e68d; background-image: url(images/dndCopy.png); background-repeat: no-repeat; background-position: 2px center;}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Dialog.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Dialog.css
deleted file mode 100644
index 0ea8a88..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Dialog.css
+++ /dev/null
@@ -1,160 +0,0 @@
-/* Dialog */
-
-.nihilo .dijitDialog {
-	background: #eee;
-	border: 1px solid #d3d3d3;
-	-webkit-box-shadow: 0px 5px 10px #adadad;
-	padding: 0px;
-}
-
-.nihilo .dijitDialog .dijitDialogTitle {
-	/* typography and styling of the dialog title */
-	font-size: 0.9em;
-	color: #3243C5F;
-	font-weight: bold;
-	padding: 0px 4px;
-}
-
-.nihilo .dijitDialog .dijitDialogPaneContent {
-	background: #ffffff;
-	border:none;
-	border-top: 1px solid #d3d3d3; /* w/out this, an <h1> on the top line causes a gap between the .content and .label */
-	padding:10px;
-
-}
-
-.nihilo .dijitDialogTitleBar {
-	/* outer container for the titlebar of the dialog */
-	background: #fafafa url("images/titleBar.png") repeat-x top left;
-	padding: 5px 6px 3px 6px;
-	cursor: move;
-	outline:0; /* remove this line if keyboard focus on dialog startup is an issue. tab still takes you to first focusable element */
-}
-
-.nihilo .dijitDialogCloseIcon {
-	/* the default close icon for the dialog */
-	background-image: url("images/spriteRoundedIconsSmall.png");
-	background-repeat: no-repeat;
-	background-position: -60px 0px;
-	position: absolute;
-	vertical-align: middle;
-	right: 6px;
-	top: 4px;
-	height: 15px;
-	width: 15px;
-	cursor: pointer;
-}
-.dj_ie6 .nihilo .dijitDialogCloseIcon {
-	background-image: url("images/spriteRoundedIconsSmall.gif");
-}
-.nihilo .dijitDialogCloseIcon-hover {
-	background-position: -60px -15px;
-}
-
-/* Tooltip and TooltipDialog */
-
-.nihilo .dijitTooltip,
-.nihilo .dijitTooltipDialog {
-	/* the outermost dom node, holding the connector and container */
-	background: transparent;	/* make the area on the sides of the arrow transparent */
-}
-
-.dijitTooltipBelow {
-	/* leave room for arrow above content */
-	padding-top: 10px;
-}
-
-.dijitTooltipAbove {
-	/* leave room for arrow below content */
-	padding-bottom: 10px;
-}
-
-.nihilo .dijitTooltipContainer {
-	/*
-		The part with the text.
-
-		NOTE:
-			FF doesn't clip images used as CSS bgs if you specify a border
-			radius. If you use a solid color, it does. Webkit gets it right.
-			Sigh.
-		background: #ffffff url("images/popupMenuBg.gif") repeat-x bottom left;
-	*/
-	background-color: #fff;
-	border:1px solid #d3d3d3;
-	padding:0.45em;
-}
-
-.nihilo .dijitTooltipConnector {
-	/* the arrow piece */
-	border:0px;
-	z-index: 2;
-}
-
-.nihilo .dijitTooltipABRight .dijitTooltipConnector {
-	/* above or below tooltip, but the arrow appears on the right,
-		and the right edges of target and tooltip are aligned rather than the left */
-	left: auto !important;
-	right: 6px;
-}
-
-.nihilo .dijitTooltipBelow .dijitTooltipConnector {
-	/* the arrow piece for tooltips below an element */
-	top: 0px;
-	left: 6px;
-	background:url("images/tooltipConnectorUp.png") no-repeat top left;
-	width:17px;
-	height:11px;
-}
-
-.dj_ie .nihilo .dijitTooltipBelow .dijitTooltipConnector {
-	background-image: url("images/tooltipConnectorUp.gif");
-}
-
-.nihilo .dijitTooltipAbove .dijitTooltipConnector {
-	/* the arrow piece for tooltips above an element */
-	bottom: 0px;
-	left: 6px;
-	background:url("images/tooltipConnectorDown.png") no-repeat top left;
-	width:17px;
-	height:11px;
-}
-.dj_ie .nihilo .dijitTooltipAbove .dijitTooltipConnector {
-	background-image: url("images/tooltipConnectorDown.gif");
-}
-.dj_ie6 .nihilo .dijitTooltipAbove .dijitTooltipConnector {
-	bottom: -5px;
-}
-
-.nihilo .dijitTooltipLeft {
-	padding-right: 10px;
-}
-.dj_ie6 .nihilo .dijitTooltipLeft {
-	padding-left: 11px;
-}
-.nihilo .dijitTooltipLeft .dijitTooltipConnector {
-	/* the arrow piece for tooltips to the left of an element, bottom borders aligned */
-	right: 0px;
-	bottom: 3px;
-	background:url("images/tooltipConnectorRight.png") no-repeat top left;
-	width:11px;
-	height:17px;
-}
-.dj_ie .nihilo .dijitTooltipLeft .dijitTooltipConnector {
-	background-image: url("images/tooltipConnectorRight.gif");
-}
-
-.nihilo .dijitTooltipRight {
-	padding-left: 10px;
-}
-.nihilo .dijitTooltipRight .dijitTooltipConnector {
-	/* the arrow piece for tooltips to the right of an element, bottom borders aligned */
-	left: 0px;
-	bottom: 3px;
-	background:url("images/tooltipConnectorLeft.png") no-repeat top left;
-	width:11px;
-	height:17px;
-}
-.dj_ie .nihilo .dijitTooltipRight .dijitTooltipConnector {
-	background-image: url("images/tooltipConnectorLeft.gif");
-}
-
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Dialog_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Dialog_rtl.css
deleted file mode 100644
index 5e0cffc..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Dialog_rtl.css
+++ /dev/null
@@ -1,6 +0,0 @@
-/* Dialog */
-
-.dijitRtl .nihilo .dijitDialogTitleBar .dijitDialogCloseIcon {
-	right: auto;
-	left: 5px;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Editor.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Editor.css
deleted file mode 100644
index c715910..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Editor.css
+++ /dev/null
@@ -1,71 +0,0 @@
-.dijitIEFixedToolbar {
-	position:absolute;
-	/* top:0; */
-	top: expression(eval((document.documentElement||document.body).scrollTop));
-}
-
-.nihilo .dijitToolbar .dijitToolbarSeparator {
-	background: url('images/editor.gif');
-}
-
-/**** ICONS *****/
-
-.nihilo .dijitEditorIcon {
-	background-image: url('images/editor.gif'); /* editor icons sprite image */
-	background-repeat: no-repeat;
-	width: 18px;
-	height: 18px;
-	text-align: center;
-}
-.nihilo .dijitDisabled .dijitEditorIcon {
-	background-image: url('images/editorDisabled.gif'); /* editor icons sprite image */
-}
-
-.nihilo .dijitEditorIconSep { background-position: 0px; }
-.nihilo .dijitEditorIconBackColor { background-position: -18px; }
-.nihilo .dijitEditorIconBold { background-position: -36px; }
-.nihilo .dijitEditorIconCancel { background-position: -54px; }
-.nihilo .dijitEditorIconCopy { background-position: -72px; }
-.nihilo .dijitEditorIconCreateLink { background-position: -90px; }
-.nihilo .dijitEditorIconCut { background-position: -108px; }
-.nihilo .dijitEditorIconDelete { background-position: -126px; }
-.nihilo .dijitEditorIconForeColor { background-position: -144px; }
-.nihilo .dijitEditorIconHiliteColor { background-position: -162px; }
-.nihilo .dijitEditorIconIndent { background-position: -180px; }
-.nihilo .dijitEditorIconInsertHorizontalRule { background-position: -198px; }
-.nihilo .dijitEditorIconInsertImage { background-position: -216px; }
-.nihilo .dijitEditorIconInsertOrderedList { background-position: -234px; }
-.nihilo .dijitEditorIconInsertTable { background-position: -252px; }
-.nihilo .dijitEditorIconInsertUnorderedList { background-position: -270px; }
-.nihilo .dijitEditorIconItalic { background-position: -288px; }
-.nihilo .dijitEditorIconJustifyCenter { background-position: -306px; }
-.nihilo .dijitEditorIconJustifyFull { background-position: -324px; }
-.nihilo .dijitEditorIconJustifyLeft { background-position: -342px; }
-.nihilo .dijitEditorIconJustifyRight { background-position: -360px; }
-.nihilo .dijitEditorIconLeftToRight { background-position: -378px; }
-.nihilo .dijitEditorIconListBulletIndent { background-position: -396px; }
-.nihilo .dijitEditorIconListBulletOutdent { background-position: -414px; }
-.nihilo .dijitEditorIconListNumIndent { background-position: -432px; }
-.nihilo .dijitEditorIconListNumOutdent { background-position: -450px; }
-.nihilo .dijitEditorIconOutdent { background-position: -468px; }
-.nihilo .dijitEditorIconPaste { background-position: -486px; }
-.nihilo .dijitEditorIconRedo { background-position: -504px; }
-.nihilo .dijitEditorIconRemoveFormat { background-position: -522px; }
-.nihilo .dijitEditorIconRightToLeft { background-position: -540px; }
-.nihilo .dijitEditorIconSave { background-position: -558px; }
-.nihilo .dijitEditorIconSpace { background-position: -576px; }
-.nihilo .dijitEditorIconStrikethrough { background-position: -594px; }
-.nihilo .dijitEditorIconSubscript { background-position: -612px; }
-.nihilo .dijitEditorIconSuperscript { background-position: -630px; }
-.nihilo .dijitEditorIconUnderline { background-position: -648px; }
-.nihilo .dijitEditorIconUndo { background-position: -666px; }
-.nihilo .dijitEditorIconWikiword { background-position: -684px; }
-.nihilo .dijitEditorIconToggleDir { background-position: -540px; /* padding: 0; margin: 0; color:#555555;
-									font-family:verdana,arial,sans-serif; font-weight: 800; font-size: 70%; */}
-.nihilo .dijitEditorIconTabIndent { background-position: -702px; }
-.nihilo .dijitEditorIconSelectAll { background-position: -720px; }
-.nihilo .dijitEditorIconUnlink { background-position: -738px; }
-.nihilo .dijitEditorIconFullScreen { background-position: -756px; }
-.nihilo .dijitEditorIconViewSource { background-position: -774px; }
-.nihilo .dijitEditorIconPrint { background-position: -792px; }
-.nihilo .dijitEditorIconNewPage { background-position: -810px; }
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Editor_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Editor_rtl.css
deleted file mode 100644
index 81da4be..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Editor_rtl.css
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Editor */
-.dijitRtl .nihilo .dijitEditorIcon {
-	background-image: url('images/editor_rtl.gif'); /* editor icons sprite image */
-}
-.dijitRtl .nihilo .dijitDisabled .dijitEditorIcon {
-	background-image: url('images/editorDisabled_rtl.gif'); /* editor icons sprite image */
-}
-
-/* Toolbar */
-
-.dijitRtl .nihilo .dijitToolbar .dijitToolbarSeparator {
-	background-image: url('images/editor_rtl.gif');
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Menu.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Menu.css
deleted file mode 100644
index 6d128ab..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Menu.css
+++ /dev/null
@@ -1,77 +0,0 @@
-
-/* Menu */
-.nihilo .dijitMenu,
-.nihilo .dijitMenuBar {
-	border: 1px solid #d3d3d3;
-	margin: 0px;
-	padding: 0px;
-	background-color: #fff;
-}
-
-.nihilo .dijitBorderContainer .dijitMenuBar {
-	border: 1px #ccc solid;
-}
-
-.nihilo .dijitMenuItem {
-	font-family: sans-serif;
-	margin: 0px;
-	color: #243C5F;
-}
-.nihilo .dijitMenuBar .dijitMenuItem {
-	padding: 4px 5px;
-}
-
-.nihilo .dijitMenuPreviousButton, .nihilo .dijitMenuNextButton {
-	font-style: italic;
-}
-.nihilo .dijitMenuItem TD {
-	padding:1px;
-}
-
-.nihilo .dijitMenuPassive .dijitMenuItemHover,
-.nihilo .dijitMenuItemSelected {
-	background-color: #ffe284; /* #95a0b0; #555555; #aaaaaa; #646464;  #60a1ea; #848484; */
-	color: #243C5F;
-}
-
-.nihilo .dijitMenuItemIcon {
-	width: 15px;
-	height: 15px;
-}
-
-.nihilo .dijitMenuExpand {
-	width:15px;
-	height:15px;
-	background-image: url('images/spriteRoundedIconsSmall.png');
-	background-position: -30px top;
-}
-.dj_ie6 .nihilo .dijitMenuExpand {
-	background-image:url('images/spriteRoundedIconsSmall.gif');
-}
-
-.nihilo .dijitMenuSeparator {
-	height: 1px;
-}
-
-/* separator can be two pixels -- set border of either one to 0px to have only one */
-.nihilo .dijitMenuSeparatorTop {
-	border-bottom: 1px solid #fff; /*97adcb; */
-}
-
-.nihilo .dijitMenuSeparatorBottom {
-	border-top: 1px solid #d3d3d3;
-}
-
-/* the checked menu item */
-.nihilo .dijitCheckedMenuItemIconChar {
-	display: none;
-}
-
-.nihilo .dijitCheckedMenuItemIcon {
-	background-image: url('images/spriteCheckbox.gif');
-	background-position: -80px;
-}
-
-.nihilo .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
-	background-position: -64px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Menu_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Menu_rtl.css
deleted file mode 100644
index f07fbd6..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Menu_rtl.css
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Menu */
-
-.dijitRtl .nihilo .dijitMenuItem .dijitMenuItemIcon {
-	padding-left: 3px;
-	padding-right: 0px;
-}
-
-.dijitRtl .nihilo .dijitMenuItem .dijitMenuExpand {
-	background-position: 0px top;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/ProgressBar.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/ProgressBar.css
deleted file mode 100644
index aaa49ea..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/ProgressBar.css
+++ /dev/null
@@ -1,33 +0,0 @@
-
-/****
-		dijit.ProgressBar
- ****/
-
-.nihilo .dijitProgressBar {
-	margin:2px 0px 2px 0px;
-}
-
-.nihilo .dijitProgressBarEmpty{
-	/* outer container and background of the bar that's not finished yet*/
-	background:#fff url("images/progressBarEmpty.png") repeat-x center center;
-	border-color: #f8d582 #f8d582 #f8d582 #f8d582;
-}
-
-.nihilo .dijitProgressBarTile{
-	/* inner container for finished portion when in 'tile' (image) mode */
-	background:#f0f0f0 url("images/progressBarFull.png") repeat-x center center;
-}
-
-.nihilo .dijitProgressBarFull {
-	border-right:1px solid #f8d582;
-}
-
-.nihilo .dijitProgressBarLabel {
-	/* Set to a color that contrasts with both the "Empty" and "Full" parts. */
-	color:#293a4b;
-}
-
-.nihilo .dijitProgressBarIndeterminate .dijitProgressBarTile {
-	/* use an animated gif for the progress bar in 'indeterminate' mode */
-	background:#cad2de url("images/progressBarAnim.gif") repeat-x center center;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/TimePicker.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/TimePicker.css
deleted file mode 100644
index f40d3d4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/TimePicker.css
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Time Picker */
-.nihilo .dijitTimePickerTick,
-.nihilo .dijitTimePickerMarker {
-	border-color: #eeeeee;
-}
-
-.nihilo .dijitTimePickerTick {
-	color:white;
-}
-
-.nihilo .dijitTimePickerMarker {
-	background:#d3d3d3 url("images/titleBar.png") repeat-x top;
-	color:#293a4b;
-	font-weight: bold;
-}
-
-.nihilo .dijitTimePickerItemSelected {
-	color: black;
-	background: #ffe284 none;
-}
-
-.nihilo .dijitTimePickerItemHover {
-	background: #d6d6dd none;
-	color:black;
-}
-
-.nihilo .dijitTimePickerItemHover,
-.nihilo .dijitTimePickerItemSelected {
-	position: relative;
-	z-index: 10;
-}
-
-.nihilo .dijitTimePickerTick .dijitTimePickerItemInner {
-	font-size:0.4em;
-}
-
-.nihilo .dijitTimePickerItemHover .dijitTimePickerItemInner,
-.nihilo .dijitTimePickerItemSelected .dijitTimePickerItemInner {
-	font-size:1em;
-}
-
-.nihilo .dijitTimePickerMarkerHover {
-	border-top: 1px solid #eeeeee;
-}
-
-.nihilo .dijitTimePickerTickHover,
-.nihilo .dijitTimePickerTickSelected {
-	margin-top:-0.3em;
-	margin-bottom:-0.3em;
-	border-bottom: none;
-}
-
-.dijit_a11y .dijitTimePickerTickHover {
-	background-color: #CCC !important;
-	border-top: 1px solid #333 !important;
-	border-bottom: 1px solid #333 !important;
-}
-
-.dijit_a11y .dijitTimePickerMarkerHover {
-	border-bottom-width: 2px;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/TitlePane.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/TitlePane.css
deleted file mode 100644
index f9891fb..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/TitlePane.css
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * dijit.TitlePane
- *
- */
-
-.nihilo .dijitTitlePaneTitle {
-	background: #cccccc;
-	background:#fff url("images/titleBar.png") repeat-x top left;
-	border:1px solid #bfbfbf;
-	padding:3px 4px;
-	font-size: 0.9em;
-	font-weight: bold;
-	color: #6d6d6d;
-}
-.nihilo .dijitTitlePaneTitle-hover  {
-	background: #f9f9f9 url("images/accordionItemActive.png") top repeat-x;
-	cursor: pointer;
-}
-
-.nihilo .dijitTitlePaneTitle * {
-	vertical-align: middle;
-}
-
-.nihilo .dijitTitlePane .dijitOpen .dijitArrowNode,
-.nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
-	width:15px;
-	height:15px;
-}
-
-.nihilo .dijitTitlePaneFocused .dijitTitlePaneTextNode {
-	color: #243C5F;
-}
-
-.nihilo .dijitOpen .dijitTitlePaneTextNode,
-.nihilo .dijitFixedOpen .dijitTitlePaneTextNode {
-	color: #243C5F;
-}
-
-.nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
-	background: url('images/spriteRoundedIconsSmall.png') no-repeat -30px top;
-}
-.dj_ie6 .nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
-	background:url('images/spriteRoundedIconsSmall.gif') no-repeat -30px top;
-}
-.nihilo .dijitTitlePane .dijitOpen .dijitArrowNode {
-	background:url('images/spriteRoundedIconsSmall.png') no-repeat -15px top;
-}
-.dj_ie6 .nihilo .dijitTitlePane .dijitOpen .dijitArrowNode {
-	background:url('images/spriteRoundedIconsSmall.gif') no-repeat -15px top;
-}
-.nihilo .dijitTitlePane .dijitArrowNodeInner {
-	display:none;
-}
-
-.dijit_a11y .dijitTitlePane .dijitOpen .dijitArrowNodeInner,
-.dijit_a11y .dijitTitlePane .dijitClosed .dijitArrowNodeInner {
-	display:inline !important;
-	font-family:monospace;
-	padding-bottom:.2em;
-}
-
-.dijit_a11y .dijitTitlePane .dijitArrowNode {
-	display:none;
-}
-
-.nihilo .dijitTitlePaneContentOuter {
-	background: #ffffff;
-	border:1px solid #bfbfbf;
-	border-top: 0px solid #3d3d3d;	/* w/out this, an <h1> on the top line causes a gap between the .content and .label */
-}
-.nihilo .dijitTitlePaneContentInner {
-	padding:10px;
-}
-/* force hasLayout to ensure borders etc, show up */
-.dj_ie6 .nihilo .dijitTitlePaneContentOuter,
-.dj_ie6 .nihilo .dijitTitlePane .dijitTitlePaneTitle {
-	zoom: 1;
-}
-
-.nihilo .dijitTitlePaneTextNode {
-	margin-left: 4px;
-	margin-right: 4px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/TitlePane_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/TitlePane_rtl.css
deleted file mode 100644
index 50a5d43..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/TitlePane_rtl.css
+++ /dev/null
@@ -1,6 +0,0 @@
-.dijitRtl .nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
-	background-position: 0px top;
-}
-.dj_ie6-rtl .nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
-	background-position: 0px top;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Toolbar.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Toolbar.css
deleted file mode 100644
index 6f67597..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Toolbar.css
+++ /dev/null
@@ -1,65 +0,0 @@
-.nihilo .dijitToolbar {
-	border-bottom: 1px solid #ccc;
-	background:#eaeaea url("images/titleBar.png") repeat-x top left;
-}
-
-/* setting a min-height on ditor toolbar */
-.dj_ie6 .nihilo .dijitToolbar {
-	height: 10px;
-}
-
-.nihilo .dijitToolbar .dijitButtonNode,
-.nihilo .dijitToolbar .dijitComboButton .dijitButtonContents,
-.nihilo .dijitToolbar .dijitComboButton .dijitDownArrowButton {
-	background: none;
-	margin: 0px;
-	padding: 0px;
-	border: none;
-	font-size: 12px;
-}
-
-.nihilo .dijitToolbar .dijitButton,
-.nihilo .dijitToolbar .dijitToggleButton,
-.nihilo .dijitToolbar .dijitDropDownButton,
-.nihilo .dijitToolbar .dijitComboButton .dijitButtonContents,
-.nihilo .dijitToolbar .dijitComboButton .dijitDownArrowButton {
-	background: none;
-	padding: 1px;	/* on hover etc., margin replaced w/border */
-}
-
-.nihilo .dijitToolbar .dijitButtonChecked,
-.nihilo .dijitToolbar .dijitToggleButtonChecked {
-	background-color:#ffeeb9;
-	border:1px solid #f7c95c;
-	padding: 0;
-}
-
-.nihilo .dijitToolbar .dijitButtonCheckedHover,
-.nihilo .dijitToolbar .dijitToggleButtonCheckedHover
- {
-	background-color:#ffe284;
-	border:1px solid #f7c95c;
-	padding: 0;
-}
-
-.nihilo .dijitToolbar .dijitButtonHover,
-.nihilo .dijitToolbar .dijitToggleButtonHover,
-.nihilo .dijitToolbar .dijitDropDownButtonHover,
-.nihilo .dijitToolbar .dijitComboButtonHover .dijitButtonContents,
-.nihilo .dijitToolbar .dijitComboButtonDownArrowHover .dijitDownArrowButton {
-	/* TODO: change this from Hover to Selected so that button is still highlighted while drop down is being used */
-	border: 1px solid #f7c95c;
-	padding: 0;
-	background-color:#ffe284;
-}
-
-.nihilo .dijitToolbar label {
-	padding: 3px 3px 0 6px;
-}
-
-.dj_ie .nihilo .dijitToolbar .dijitComboButton .dijitButtonContentsFocused,
-.dj_ie .nihilo .dijitToolbar .dijitComboButton .dijitDownArrowButtonFocused {
-	/* focus border doesn't appear on <td> for IE, so need to add it manually */
-	border: 1px #555 dotted !important;
-	padding: 0px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Tree.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Tree.css
deleted file mode 100644
index 4a565dc..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Tree.css
+++ /dev/null
@@ -1,118 +0,0 @@
-/* Tree */
-
-.nihilo .dijitTreeNode {
-    background : url('images/treeI.gif') no-repeat;
-    background-position : top left;
-    background-repeat : repeat-y;
-    zoom: 1;	/* MOW: what the heck is this doing in here? */
-}
-
-/* left vertical line (grid) for all nodes */
-.nihilo .dijitTreeIsLast {
-    background: url('images/treeI_half.gif') no-repeat;
-}
-
-.nihilo .dijitTreeNodeHover {
-	/* using a transparent png so that we can still see grid lines, which are (unfortunately) behind the dijitRowNode that we are hovering over */
-	background-image: url(images/treeHover.png);
-	background-repeat: repeat;
-	background-color: none !important;
-}
-
-.nihilo .dijitTreeLabel {
-	font-weight: normal;
-	margin-left: 3px;
-}
-
-.nihilo .dijitTreeIsRoot {
-    margin-left: 0;
-    background-image: none;
-}
-
-.nihilo .dijitTreeExpando {
-    width: 18px;
-    height: 18px;
-}
-
-.nihilo .dijitTreeRow {
-	/* so insert line shows up on IE when dropping after a target element */
-	padding-bottom: 2px;
-}
-
-.nihilo .dijitTreeContent {
-    min-height: 18px;
-    min-width: 18px;
-    padding-left:1px;
-}
-
-
-.nihilo .dijitTreeExpand {
-    width: 18px;
-    height: 18px;
-    background-repeat : no-repeat;
-}
-
-/* same style as IE selection */
-.nihilo .dijitTreeNodeEmphasized {
-    background-color: Highlight;
-    color: HighlightText;
-}
-
-/* don't use :focus due to opera and IE's lack of support on div's */
-.nihilo .dijitTreeLabelFocused {
-	outline: 1px invert dotted;
-}
-
-.nihilo .dijitTreeExpandoOpened {
-	background: url('images/spriteTree.gif') no-repeat -18px top;
-}
-
-.nihilo .dijitTreeExpandoClosed {
-	background-image: url('images/spriteTree.gif');
-}
-
-.nihilo .dijitTreeExpandoLeaf {
-	background: url('images/spriteTree.gif') no-repeat -36px top;
-}
-
-.nihilo .dijitTreeExpandoLoading {
-	background-image: url('images/treeExpand_loading.gif');
-}
-
-.nihilo .dijitTreeIcon {
-	width: 16px;
-	height: 16px;
-}
-
-.nihilo .dijitFolderOpened {
-	background: url('images/spriteDivIcons.gif') no-repeat -16px top;
-}
-
-.nihilo .dijitFolderClosed {
-	background: url('images/spriteDivIcons.gif') no-repeat top left;
-}
-
-.nihilo .dijitLeaf {
-	background: url('images/spriteDivIcons.gif') no-repeat -32px top;
-}
-
-/* Drag and Drop on TreeNodes
- * Put insert line on dijitTreeContent node so it's aligned w/
- * (ie, indented equally with) target element, even
- * though dijitTreeRowNode is the actual "drag object"
- */
-.nihilo .dijitTreeNode .dojoDndItemBefore,
-.nihilo .dijitTreeNode .dojoDndItemAfter {
-	border-bottom: none;
-	border-top: none;
-}
-
-.nihilo .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
-	/* copied from Common.css */
-	border-top: 2px solid #369;
-}
-
-.nihilo .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
-	/* copied from Common.css */
-	border-bottom: 2px solid #369;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Tree_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Tree_rtl.css
deleted file mode 100644
index 5be10df..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/Tree_rtl.css
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Tree */
-.dijitRtl .nihilo .dijitTreeContainer .dijitTreeNode {
-    background-image : none;
-}
-
-.dijitRtl .nihilo .dijitTreeContainer .dijitTreeIsRoot {
-}
-
-.dijitRtl .nihilo .dijitTreeContainer .dijitTreeIsLast {
-    background-image: url('images/treeI_half_rtl.gif');
-}
-
-.dijitRtl .nihilo .dijitTreeContainer .dijitTreeContent {
-    padding-left: auto;
-    padding-right: 1px;
-}
-
-.dijitRtl .nihilo .dijitTreeContainer .dijitTreeExpandoOpened {
-	background: url('images/spriteTree_rtl.gif') no-repeat -18px top;
-}
-
-.dijitRtl .nihilo .dijitTreeContainer .dijitTreeExpandoClosed {
-	background-image: url('images/spriteTree_rtl.gif');
-}
-
-.dijitRtl .nihilo .dijitTreeContainer .dijitTreeExpandoLeaf {
-	background: none;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Button.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Button.css
deleted file mode 100644
index 0d318a9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Button.css
+++ /dev/null
@@ -1,113 +0,0 @@
-
-/*****
-		dijit.form.Button
-		dijit.form.DropDownButton
-		dijit.form.ComboButton
-		dijit.form.ComboBox (partial)
- *****/
-
-.nihilo .dijitButtonNode {
-	/* enabled state - inner */
-	/* border:1px outset #a0a0a0; */
-	border:1px solid #dedede;
-	border-bottom:1px solid #dedede;
-	padding: 0.1em 0.2em 0.2em 0.2em;
-	background: #fff url("../images/buttonEnabled.png") repeat-x top left;
-}
-.nihilo .dijitSelect .dijitButtonContents {
-	border-right: none;
-}
-
-.nihilo .dijitButtonNode button {
-	border: 0px;
-	background-color: transparent;
-}
-
-.nihilo .dijitButtonText {
-	text-align: center;
-	padding: 0 0.3em;
-}
-
-.nihilo .dijitComboBox .dijitButtonNode {
-	border-width: 0px 0px 0px 1px;
-}
-
-.nihilo .dijitArrowButton {
-	color: #111;
-}
-
-.nihilo .dijitComboButton .dijitDownArrowButton {
-	padding-right:4px;
-}
-
-.nihilo .dijitComboBoxReadOnly,
-.nihilo .dijitSpinnerReadOnly,
-.nihilo .dijitSpinnerReadOnly .dijitButtonNode,
-.nihilo .dijitButtonDisabled .dijitButtonNode,
-.nihilo .dijitToggleButtonDisabled .dijitButtonNode,
-.nihilo .dijitDropDownButtonDisabled .dijitButtonNode,
-.nihilo .dijitComboButtonDisabled .dijitButtonNode,
-.nihilo .dijitComboBoxDisabled,
-.nihilo .dijitSpinnerDisabled,
-.nihilo .dijitSpinnerDisabled .dijitButtonNode {
-	/* disabled state - inner */
-	border-color: #dedede;
-	background:#fafafa url("../images/buttonDisabled.png") top repeat-x;
-	opacity: 0.60;
-}
-.dj_ie6 .nihilo .dijitComboButtonDisabled .dijitButtonText {
-	/* opacity doesn't work on table node in IE, work around here */
-	color: #aaa;
-}
-
-
-.nihilo .dijitButtonHover .dijitButtonNode,
-.nihilo .dijitButtonNodeHover,
-.nihilo .dijitToggleButtonHover .dijitButtonNode,
-.nihilo .dijitDropDownButtonHover .dijitButtonNode,
-.nihilo .dijitComboButtonHover .dijitButtonContents,
-.nihilo .dijitComboButtonDownArrowHover .dijitDownArrowButton,
-.nihilo .dijitComboBoxHover .dijitDownArrowButton,
-.nihilo .dijitSpinnerUpArrowHover .dijitUpArrowButton,
-.nihilo .dijitSpinnerDownArrowHover .dijitDownArrowButton {
-	/* hover state - inner */
-	/* TODO: change from Hover to Selected so that button is still highlighted while drop down is being used */
-	color:#243C5F;
-	background:#fcfcfc url("../images/buttonHover.png") repeat-x top left;
-}
-
-.nihilo .dijitSpinnerUpArrowActive .dijitUpArrowButton,
-.nihilo .dijitSpinnerDownArrowActive .dijitDownArrowButton,
-.nihilo .dijitButtonActive .dijitButtonNode,
-.nihilo .dijitToggleButtonActive .dijitButtonNode,
-.nihilo .dijitDropDownButtonActive .dijitButtonNode,
-.nihilo .dijitComboButtonActive .dijitButtonContents,
-.nihilo .dijitDownArrowActive .dijitDownArrowButton,
-.nihilo .dijitComboBoxActive .dijitDownArrowButton,
-.nihilo .dijitStackController .dijitToggleButtonChecked .dijitButtonNode {
-	/* active state - inner (for when you are pressing a normal button, or
-	 * when a radio-type button is in a depressed state
-	 */
-	border-color:#dedede;
-	background: #f5f5f5 url("../images/buttonActive.png") top left repeat-x;
-}
-
-
-.nihilo .dijitArrowButtonInner {
-	background-image: url("../images/spriteArrows.png");
-	background-repeat: no-repeat;
-	background-position: 0px top;
-	width: 11px;
-}
-.nihilo .dijitLeftArrowButton .dijitArrowButtonInner {
-	background-position: -11px top;
-}
-.nihilo .dijitUpArrowButton .dijitArrowButtonInner {
-	background-position: -22px top;
-}
-.nihilo .dijitRightArrowButton .dijitArrowButtonInner {
-	background-position: -33px top;
-}
-.dj_ie6 .nihilo .dijitArrowButtonInner {
-	background-image: url("../images/spriteArrows.gif");
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Button_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Button_rtl.css
deleted file mode 100644
index f856feb..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Button_rtl.css
+++ /dev/null
@@ -1,8 +0,0 @@
-.dijitRtl .nihilo .dijitComboBox .dijitButtonNode {
-	border-width: 0px 0px 0px 1px;
-}
-.dijitRtl .nihilo .dijitSelect .dijitButtonContents {
-	border-left: none;
-	border-right-width: 1px;
-}
-
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Checkbox.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Checkbox.css
deleted file mode 100644
index b35ebf3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Checkbox.css
+++ /dev/null
@@ -1,67 +0,0 @@
-
-/*
- *  CheckBox and Radio Widgets,
- *	and the CSS to embed a checkbox or radio icon inside a ToggleButton.
- *
- *	Order of images in the default sprite (from L to R, checkbox and radio in same image):
- *		checkbox	normal 	 - checked
- *							 - unchecked
- *					disabled - checked
- *							 - unchecked
- *					hover 	 - checked
- *							 - unchecked
- *
- *		radio		normal 	 - checked
- *							 - unchecked
- *					disabled - checked
- *							 - unchecked
- *					hover 	 - checked
- *							 - unchecked
-*/
-
-.nihilo .dijitToggleButton .dijitCheckBox,
-.nihilo .dijitToggleButton .dijitCheckBoxIcon {
-	background-image: url('../images/spriteCheckbox.gif');
-}
-
-.nihilo .dijitCheckBox,
-.nihilo .dijitCheckBoxIcon {		/* inside a toggle button */
-	background-image: url('../images/spriteCheckbox.gif'); /* checkbox sprite image */
-	background-repeat: no-repeat;
-	width: 16px;
-	height: 16px;
-	margin: 0;
-	padding: 0;
-}
-
-.nihilo .dijitCheckBox,
-.nihilo .dijitToggleButton .dijitCheckBoxIcon {
-	/* unchecked */
-	background-position: -16px;
-}
-
-.nihilo .dijitCheckBoxChecked,
-.nihilo .dijitToggleButtonChecked .dijitCheckBoxIcon {
-	/* checked */
-	background-position: 0px;
-}
-
-.nihilo .dijitCheckBoxDisabled {
-	/* disabled */
-	background-position: -48px;
-}
-
-.nihilo .dijitCheckBoxCheckedDisabled {
-	/* disabled but checked */
-	background-position: -32px;
-}
-
-.nihilo .dijitCheckBoxHover {
-	/* hovering over an unchecked enabled checkbox */
-	background-position: -80px;
-}
-
-.nihilo .dijitCheckBoxCheckedHover {
-	/* hovering over a checked enabled checkbox */
-	background-position: -64px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/ComboBox.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/ComboBox.css
deleted file mode 100644
index 1e3a4db..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/ComboBox.css
+++ /dev/null
@@ -1,12 +0,0 @@
-.nihilo .dijitComboBox .dijitArrowButton .dijitArrowButtonInner {
-	background:url("../images/spriteArrows.png") no-repeat left center;
-	width: 11px;
-}
-
-.dj_ie6 .nihilo .dijitComboBox .dijitArrowButton .dijitArrowButtonInner {
-	background:url("../images/spriteArrows.gif") no-repeat left center;
-}
-
-.nihilo .dijitComboBoxHover .dijitArrowButtonInner {
-	/* TODO: url("images/arrowDownHover.png") but in IE6 it flickers some? */
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Common.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Common.css
deleted file mode 100644
index 7957113..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Common.css
+++ /dev/null
@@ -1,100 +0,0 @@
-
-/****
-		dijit.form.TextBox
-		dijit.form.ValidationTextBox
-		dijit.form.SerializableTextBox
-		dijit.form.RangeBoundTextBox
-		dijit.form.NumberTextBox
-		dijit.form.CurrencyTextBox
-		dijit.form.NumberSpinner
-		dijit.form.ComboBox (partial)
- ****/
-
-.nihilo .dijitInputField INPUT,
-.nihilo .dijitTextBox,
-.nihilo .dijitComboBox,
-.nihilo .dijitSpinner {
-	margin: 0em 0.1em;
-}
-
-.nihilo .dijitTextBox,
-.nihilo .dijitComboBox,
-.nihilo .dijitSpinner,
-.nihilo .dijitInlineEditor input,
-.nihilo .dijitTextArea {
-	/* 	For all except dijit.form.NumberSpinner:  the actual input element.
-		For TextBox, ComboBox, Spinner: the table that contains the input.
-		Otherwise the actual input element.
-	*/
-	background:#fff url("../images/validationInputBg.png") repeat-x top left;
-	border:1px solid #d3d3d3;
-	line-height: normal;
-}
-
-.dj_ie6 .nihilo .dijitTextBox,
-.dj_ie6 .nihilo .dijitComboBox,
-.dj_ie6 .nihilo .dijitSpinner,
-.dj_ie6 .nihilo .dijitInlineEditor input,
-.dj_ie6 .nihilo .dijitTextArea {
-	background:#fff url('../images/validationInputBg.gif') repeat-x top left;
-}
-
-.nihilo .dijitComboBox .dijitButtonNode {
-	padding: 0 0.2em;
-}
-.nihilo .dijitComboBox .dijitButtonNode,
-.nihilo .dijitSpinner .dijitButtonNode {
-	/* line between the input area and the drop down button */
-	border-color: #d3d3d3;
-	border-left: 1px solid #d3d3d3;
-}
-
-.nihilo .dijitTextBoxFocused,
-.nihilo .dijitComboBoxFocused,
-.nihilo .dijitSpinnerFocused, .nihilo .dijitSpinnerUpArrowActive, .nihilo .dijitSpinnerDownArrowActive,
-.nihilo .dijitTextAreaFocused {
-	/* input field when focused (ie: typing affects it) */
-	border-color:#b3b3b3;
-}
-.nihilo .dijitComboBoxFocused .dijitButtonNode,
-.nihilo .dijitSpinnerFocused .dijitButtonNode,
-.nihilo .dijitSpinnerUpArrowActive .dijitButtonNode,
-.nihilo .dijitSpinnerDownArrowActive .dijitButtonNode {
-	border-left-color:#d3d3d3;
-}
-.nihilo .dijitSpinnerFocused .dijitDownArrowButton,
-.nihilo .dijitSpinnerUpArrowActive .dijitDownArrowButton,
-.nihilo .dijitSpinnerDownArrowActive .dijitDownArrowButton {
-	border-top-color:#d3d3d3;
-}
-
-.nihilo .dijitError {
-	border-color:#b3b3b3;
-	background-color:#f9f7ba;
-	background-image:none;
-}
-.dj_ie6 .nihilo .dijitError INPUT {
-	/* background-color: transparent on an <input> doesn't work on IE6 */
-	background-color:#f9f7ba !important;
-}
-
-.nihilo .dijitErrorFocused {
-	background-color:#ff6;
-	background-image:none;
-}
-.dj_ie6 .nihilo .dijitErrorFocused INPUT {
-	/* background-color: transparent on an <input> doesn't work on IE6 */
-	background-color:#ff6 !important;
-}
-
-/* Validation errors  */
-.nihilo .dijitValidationIcon {
-	/* prevent height change when widget goes from valid to invalid state */
-	width: 16px;
-	background: transparent url('../images/warning.png') no-repeat center center;
-}
-
-/* The highlight is shown in the ComboBox menu. */
-.nihilo .dijitComboBoxHighlightMatch {
-	background-color:#d3d3d3;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Common_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Common_rtl.css
deleted file mode 100644
index f86c9fa..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Common_rtl.css
+++ /dev/null
@@ -1,7 +0,0 @@
-.dijitRtl .nihilo .dijitComboBox .dijitButtonNode,
-.dijitRtl .nihilo .dijitSpinner .dijitButtonNode {
-	/* line between the input area and the drop down button */
-	border-color: #8ba0bd;
-	border-left: 0px solid #8ba0bd;
-	border-right: 1px solid #8ba0bd;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/RadioButton.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/RadioButton.css
deleted file mode 100644
index 258f26d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/RadioButton.css
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- *  CheckBox and Radio Widgets,
- *	and the CSS to embed a checkbox or radio icon inside a ToggleButton.
- *
- *	Order of images in the default sprite (from L to R, checkbox and radio in same image):
- *		checkbox	normal 	 - checked
- *							 - unchecked
- *					disabled - checked
- *							 - unchecked
- *					hover 	 - checked
- *							 - unchecked
- *
- *		radio		normal 	 - checked
- *							 - unchecked
- *					disabled - checked
- *							 - unchecked
- *					hover 	 - checked
- *							 - unchecked
-*/
-
-.nihilo .dijitToggleButton .dijitRadio,
-.nihilo .dijitToggleButton .dijitRadioIcon {
-	background-image: url('../images/spriteRadio.gif');
-}
-
-.nihilo .dijitRadio,
-.nihilo .dijitRadioIcon	{		/* inside a toggle button */
-	background-image: url('../images/spriteRadio.gif'); /* checkbox sprite image */
-	background-repeat: no-repeat;
-	width: 16px;
-	height: 16px;
-	margin: 0;
-	padding: 0;
-}
-
-.nihilo .dijitRadio,
-.nihilo .dijitToggleButton .dijitRadioIcon {
-	/* unselected */
-	background-position: -16px;
-}
-
-.nihilo .dijitRadioChecked,
-.nihilo .dijitToggleButtonChecked .dijitRadioIcon {
-	/* selected */
-	background-position: 0px;
-}
-
-.nihilo .dijitRadioDisabled {
-	/* unselected and disabled */
-	background-position: -48px;
-}
-
-.nihilo .dijitRadioCheckedDisabled {
-	/* selected but disabled */
-	background-position: -32px;
-}
-
-.nihilo .dijitRadioHover {
-	/* hovering over an unselected enabled radio button */
-	background-position: -80px;
-}
-
-.nihilo .dijitRadioCheckedHover {
-	/* hovering over a selected enabled radio button */
-	background-position: -64px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Select.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Select.css
deleted file mode 100644
index 64e634b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Select.css
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Cursor States */
-.nihilo .dijitSelectDisabled * {
-    cursor: not-allowed !important;
-}
-.nihilo .dijitSelectReadOnly * {
-    cursor: default !important;
-}
-.nihilo .dijitSelect .dijitButtonNode {
-	padding: 0px;
-}
-
-/* Make unselected "look" more like a text box and less like a button */
-.nihilo .dijitSelect .dijitButtonContents {
-	padding-top: 1px;
-    background:#fff url("../images/validationInputBg.png") repeat-x top left;
-    #background:#fff url('../images/validationInputBg.gif') repeat-x top left;
-}
-.nihilo .dijitSelectHover .dijitButtonContents,
-.nihilo .dijitSelectActive .dijitButtonContents,
-.nihilo .dijitSelectOpened .dijitButtonContents,
-.nihilo .dijitSelectDisabled .dijitButtonContents,
-.nihilo .dijitSelectReadOnly .dijitButtonContents{
-	background: transparent none;
-}
-.dj_ie .nihilo .dijitSelect .dijitButtonContents {
-	padding-top: 0px;
-}
-
-/* Mirror DropDownButton */
-.nihilo .dijitSelectDisabled .dijitButtonNode {
-    border-color: #dedede;
-    background:#fafafa url("../images/buttonDisabled.png") top repeat-x;
-}
-.dj_ie .nihilo .dijitSelectDisabled  .dijitButtonNode * {
-	filter: gray() alpha(opacity=50);
-}
-
-.nihilo .dijitSelectHover .dijitButtonNode {
-    color:#000;
-    background:#fcfcfc url("../images/buttonHover.png") repeat-x top left;
-}
-
-.nihilo .dijitSelectActive .dijitButtonNode,
-.nihilo .dijitSelectOpened .dijitButtonNode {
-    border-color:#dedede;
-    background: #f5f5f5 url("../images/buttonActive.png") top left repeat-x;
-}
-
-/* Make the menu look more combobox-like */
-.nihilo .dijitSelectMenu td {
-	padding: 0em;
-}
-.nihilo .dijitSelectMenu .dijitMenuItemIcon {
-	margin: 0.1em 0.2em;
-	display: none;
-}
-.nihilo .dijitSelectMenu .dijitMenuItemLabel,
-.nihilo .dijitSelectMenu .dijitMenuArrowCell {
-	padding: 0.1em 0.2em;
-}
-
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Slider.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Slider.css
deleted file mode 100644
index e3fac8e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Slider.css
+++ /dev/null
@@ -1,149 +0,0 @@
-
-/****
- 	SLIDER
-****/
-
-.nihilo .dijitSliderProgressBarH {
-	border-color: #aab0bb;
-	background: #c0c2c5 url("../images/sliderFull.png") repeat-x top left;
-}
-
-.nihilo .dijitSliderProgressBarV {
-	border-color: #aab0bb;
-	background: #c0c2c5 url("../images/sliderFullVertical.png") repeat-y bottom left;
-}
-
-.nihilo .dijitSliderFocused .dijitSliderProgressBarH,
-.nihilo .dijitSliderFocused .dijitSliderLeftBumper {
-	background-image:url("../images/sliderFullFocus.png");
-}
-
-.nihilo .dijitSliderFocused .dijitSliderProgressBarV,
-.nihilo .dijitSliderFocused .dijitSliderBottomBumper {
-	background-image:url("../images/sliderFullVerticalFocus.png");
-}
-
-.nihilo .dijitSliderRemainingBarV {
-	border-color: #b4b4b4;
-	background: #dcdcdc url("../images/sliderEmptyVertical.png") repeat-y bottom left;
-}
-
-.nihilo .dijitSliderRemainingBarH {
-	border-color: #b4b4b4;
-	background: #dcdcdc url("../images/sliderEmpty.png") repeat-x top left;
-}
-
-.nihilo .dijitSliderBar {
-	border-style: solid;
-	outline:1px;
-	/* border-color: #b4b4b4; */
-}
-.nihilo .dijitSliderFocused .dijitSliderBar {
-	border-color:#727272;
-}
-
-.dijit_a11y .dijitSliderProgressBar {
-	background-color:#333 !important;
-}
-
-.nihilo .dijitSliderImageHandleH {
-	border:0px;
-	width:15px;
-	height:18px;
-	background:url("../images/preciseSliderThumb.png") no-repeat center top;
-	#background:url("../images/preciseSliderThumb.gif") no-repeat center top;
-	cursor:pointer;
-}
-.nihilo .dijitSliderFocused .dijitSliderImageHandleH {
-	background-image:url("../images/preciseSliderThumbFocus.png");
-	#background-image:url("../images/preciseSliderThumbFocus.gif");
-}
-
-.nihilo .dijitSliderLeftBumper {
-	border-left-width: 1px;
-	border-color: #aab0bb;
-	background: #c0c2c5 url("../images/sliderFull.png") repeat-x top left;
-}
-
-.nihilo .dijitSliderRightBumper {
-	background: #dcdcdc url("../images/sliderEmpty.png") repeat-x top left;
-	border-color: #b4b4b4;
-	border-right-width: 1px;
-}
-
-.nihilo .dijitSliderImageHandleV {
-	border:0px;
-	width:20px;
-	height:15px;
-	background:url("../images/sliderThumb.png") no-repeat center center;
-	#background:url("../images/sliderThumb.gif") no-repeat center center;
-	cursor:pointer;
-}
-
-.nihilo .dijitSliderFocused .dijitSliderImageHandleV {
-	background-image:url("../images/sliderThumbFocus.png");
-	#background-image:url("../images/sliderThumbFocus.gif");
-}
-
-.nihilo .dijitSliderBottomBumper {
-	border-bottom-width: 1px;
-	border-color: #aab0bb;
-	background: #c0c2c5 url("../images/sliderFullVertical.png") repeat-y bottom left;
-}
-
-.nihilo .dijitSliderTopBumper {
-	background: #dcdcdc url("../images/sliderEmptyVertical.png") repeat-y top left;
-	border-color: #b4b4b4;
-	border-top-width: 1px;
-}
-
-.nihilo .dijitSliderIncrementIconH,
-.nihilo .dijitSliderIncrementIconV {
-	background:url('../images/spriteRoundedIconsSmall.png') no-repeat -45px top;
-	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -45px top;
-	width:15px; height:15px;
-	cursor:pointer;
-}
-.nihilo .dijitSliderIncrementIconH {
-	background:url('../images/spriteRoundedIconsSmall.png') no-repeat -30px top;
-	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -30px top;
-}
-
-.nihilo .dijitSliderDecrementIconH,
-.nihilo .dijitSliderDecrementIconV {
-	width:15px;
-	height:15px;
-	cursor:pointer;
-	background:url('../images/spriteRoundedIconsSmall.png') no-repeat -15px top;
-	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -15px top;
-}
-.nihilo .dijitSliderDecrementIconH {
-	background:url('../images/spriteRoundedIconsSmall.png') no-repeat 0px top;
-	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat 0px top;
-}
-
-.nihilo .dijitSliderButtonInner {
-	visibility:hidden;
-}
-
-.nihilo .dijitSliderReadOnly *,
-.nihilo .dijitSliderDisabled * {
-	border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
-	color: #bdbdbd;
-}
-.nihilo .dijitSliderReadOnly .dijitSliderDecrementIconH,
-.nihilo .dijitSliderDisabled .dijitSliderDecrementIconH {
-	background-position: 0px -15px;
-}
-.nihilo .dijitSliderReadOnly .dijitSliderIncrementIconH,
-.nihilo .dijitSliderDisabled .dijitSliderIncrementIconH {
-	background-position: -30px -15px;
-}
-.nihilo .dijitSliderReadOnly .dijitSliderDecrementIconV,
-.nihilo .dijitSliderDisabled .dijitSliderDecrementIconV {
-	background-position: -15px -15px;
-}
-.nihilo .dijitSliderReadOnly .dijitSliderIncrementIconV,
-.nihilo .dijitSliderDisabled .dijitSliderIncrementIconV {
-	background-position: -45px -15px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Slider_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Slider_rtl.css
deleted file mode 100644
index 8410f36..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/Slider_rtl.css
+++ /dev/null
@@ -1,36 +0,0 @@
-
-/* Slider */
-
-.dijitRtl .nihilo .dijitSliderProgressBarH,
-.dijitRtl .nihilo .dijitSliderRemainingBarH,
-.dijitRtl .nihilo .dijitSliderLeftBumper,
-.dijitRtl .nihilo .dijitSliderRightBumper,
-.dijitRtl .nihilo .dijitSliderTopBumper {
-	background-position: top right;
-}
-
-.dijitRtl .nihilo .dijitSliderProgressBarV,
-.dijitRtl .nihilo .dijitSliderRemainingBarV,
-.dijitRtl .nihilo .dijitSliderBottomBumper {
-	background-position: bottom right;
-}
-
-.dijitRtl .nihilo .dijitSliderLeftBumper {
-	border-left-width: 0px;
-	border-right-width: 1px;
-}
-
-.dijitRtl .nihilo .dijitSliderRightBumper {
-	border-left-width: 1px;
-	border-right-width: 0px;
-}
-
-.dijitRtl .nihilo .dijitSliderIncrementIconH {
-	background:url('../images/spriteRoundedIconsSmall.png') no-repeat left top;
-	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat left top;
-}
-
-.dijitRtl .nihilo .dijitSliderDecrementIconH {
-	background:url('../images/spriteRoundedIconsSmall.png') no-repeat -30px top;
-	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -30px top;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/TimeTextBox.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/TimeTextBox.css
deleted file mode 100644
index bf67b66..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/form/TimeTextBox.css
+++ /dev/null
@@ -1 +0,0 @@
-@CHARSET "UTF-8";
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/accordionItemActive.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/accordionItemActive.png
deleted file mode 100644
index 58f3cf9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/accordionItemActive.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/buttonActive.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/buttonActive.png
deleted file mode 100644
index e2f2fda..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/buttonActive.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/buttonDisabled.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/buttonDisabled.png
deleted file mode 100644
index b76af42..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/buttonDisabled.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/buttonEnabled.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/buttonEnabled.png
deleted file mode 100644
index d4fd306..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/buttonEnabled.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/buttonHover.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/buttonHover.png
deleted file mode 100644
index 1af7e83..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/buttonHover.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/dndCopy.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/dndCopy.png
deleted file mode 100644
index baecd7c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/dndCopy.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/dndMove.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/dndMove.png
deleted file mode 100644
index 07f878c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/dndMove.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/dndNoCopy.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/dndNoCopy.png
deleted file mode 100644
index 9bf9c33..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/dndNoCopy.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/dndNoMove.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/dndNoMove.png
deleted file mode 100644
index cb8bd8b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/dndNoMove.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/editor.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/editor.gif
deleted file mode 100644
index 750c6b9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/editor.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/editorDisabled.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/editorDisabled.gif
deleted file mode 100644
index e40460d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/editorDisabled.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/editorDisabled_rtl.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/editorDisabled_rtl.gif
deleted file mode 100644
index a0f6c10..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/editorDisabled_rtl.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/editor_rtl.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/editor_rtl.gif
deleted file mode 100644
index a9740c2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/editor_rtl.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/no.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/no.gif
deleted file mode 100644
index 9021a14..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/no.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/preciseSliderThumb.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/preciseSliderThumb.gif
deleted file mode 100644
index 53b33e5..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/preciseSliderThumb.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/preciseSliderThumb.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/preciseSliderThumb.png
deleted file mode 100644
index 045bf35..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/preciseSliderThumb.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/preciseSliderThumbFocus.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/preciseSliderThumbFocus.gif
deleted file mode 100644
index 8c6f92e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/preciseSliderThumbFocus.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/preciseSliderThumbFocus.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/preciseSliderThumbFocus.png
deleted file mode 100644
index c235849..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/preciseSliderThumbFocus.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/progressBarAnim.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/progressBarAnim.gif
deleted file mode 100644
index 543d048..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/progressBarAnim.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/progressBarEmpty.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/progressBarEmpty.png
deleted file mode 100644
index c2d3695..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/progressBarEmpty.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/progressBarFull.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/progressBarFull.png
deleted file mode 100644
index a8f3865..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/progressBarFull.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderEmpty.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderEmpty.png
deleted file mode 100644
index 99fbd72..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderEmpty.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderEmptyVertical.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderEmptyVertical.png
deleted file mode 100644
index 2d497e3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderEmptyVertical.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderFull.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderFull.png
deleted file mode 100644
index 9adb254..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderFull.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderFullFocus.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderFullFocus.png
deleted file mode 100644
index 3d75cae..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderFullFocus.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderFullVertical.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderFullVertical.png
deleted file mode 100644
index 27e9752..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderFullVertical.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderFullVerticalFocus.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderFullVerticalFocus.png
deleted file mode 100644
index cca6184..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderFullVerticalFocus.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderThumb.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderThumb.gif
deleted file mode 100644
index 29899a4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderThumb.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderThumb.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderThumb.png
deleted file mode 100644
index b6abbd2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderThumb.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderThumbFocus.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderThumbFocus.gif
deleted file mode 100644
index f8d306f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderThumbFocus.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderThumbFocus.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderThumbFocus.png
deleted file mode 100644
index 73ee705..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/sliderThumbFocus.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/splitContainerSizerH-thumb.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/splitContainerSizerH-thumb.png
deleted file mode 100644
index e7bc204..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/splitContainerSizerH-thumb.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/splitContainerSizerH.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/splitContainerSizerH.png
deleted file mode 100644
index 5f5b0e9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/splitContainerSizerH.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/splitContainerSizerV-thumb.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/splitContainerSizerV-thumb.png
deleted file mode 100644
index 410a0a7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/splitContainerSizerV-thumb.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/splitContainerSizerV.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/splitContainerSizerV.png
deleted file mode 100644
index 064bc18..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/splitContainerSizerV.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteArrows.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteArrows.gif
deleted file mode 100644
index fc81207..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteArrows.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteArrows.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteArrows.png
deleted file mode 100644
index 73aa700..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteArrows.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteCheckbox.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteCheckbox.gif
deleted file mode 100644
index d2c4ebf..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteCheckbox.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteCheckbox.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteCheckbox.png
deleted file mode 100644
index e992330..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteCheckbox.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteDivIcons.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteDivIcons.gif
deleted file mode 100644
index 00ad23a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteDivIcons.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteDivIcons.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteDivIcons.png
deleted file mode 100644
index 413098a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteDivIcons.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteRadio.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteRadio.gif
deleted file mode 100644
index 8dd6e57..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteRadio.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteRadio.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteRadio.png
deleted file mode 100644
index 14c1080..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteRadio.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteRoundedIconsSmall.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteRoundedIconsSmall.gif
deleted file mode 100644
index 251389a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteRoundedIconsSmall.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteRoundedIconsSmall.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteRoundedIconsSmall.png
deleted file mode 100644
index e81ba07..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteRoundedIconsSmall.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteTree.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteTree.gif
deleted file mode 100644
index e546e28..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteTree.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteTree.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteTree.png
deleted file mode 100644
index 33ae07b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteTree.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteTree_rtl.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteTree_rtl.gif
deleted file mode 100644
index bbcc64b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteTree_rtl.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteTree_rtl.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteTree_rtl.png
deleted file mode 100644
index b06afdb..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/spriteTree_rtl.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabBottomActiveC.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabBottomActiveC.gif
deleted file mode 100644
index 84bffde..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabBottomActiveC.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabBottomActiveSpriteLR.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabBottomActiveSpriteLR.gif
deleted file mode 100644
index 6803db4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabBottomActiveSpriteLR.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabBottomEnabledC.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabBottomEnabledC.gif
deleted file mode 100644
index 9ef9ab0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabBottomEnabledC.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabBottomEnabledSpriteLR.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabBottomEnabledSpriteLR.gif
deleted file mode 100644
index b6b08ce..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabBottomEnabledSpriteLR.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabBottomHoverC.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabBottomHoverC.gif
deleted file mode 100644
index 0f533b5..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabBottomHoverC.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabBottomHoverSpriteLR.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabBottomHoverSpriteLR.gif
deleted file mode 100644
index 010b08a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabBottomHoverSpriteLR.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabContainerSprite.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabContainerSprite.gif
deleted file mode 100644
index 92044a7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabContainerSprite.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabLeftChecked.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabLeftChecked.gif
deleted file mode 100644
index d59fd4a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabLeftChecked.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabRightChecked.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabRightChecked.gif
deleted file mode 100644
index d32f44e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabRightChecked.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabStripe.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabStripe.gif
deleted file mode 100644
index a934675..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabStripe.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabStripeBottom.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabStripeBottom.gif
deleted file mode 100644
index 64c3376..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabStripeBottom.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabStripeLeft.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabStripeLeft.gif
deleted file mode 100644
index d607a45..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabStripeLeft.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabStripeRight.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabStripeRight.gif
deleted file mode 100644
index 9778ced..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tabStripeRight.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/titleBar.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/titleBar.png
deleted file mode 100644
index 06ea21c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/titleBar.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/titleBarActive.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/titleBarActive.png
deleted file mode 100644
index fe6c7a4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/titleBarActive.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorDown.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorDown.gif
deleted file mode 100644
index 9c38495..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorDown.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorDown.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorDown.png
deleted file mode 100644
index d75af71..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorDown.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorLeft.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorLeft.gif
deleted file mode 100644
index fc947e0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorLeft.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorLeft.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorLeft.png
deleted file mode 100644
index f3de66a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorLeft.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorRight.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorRight.gif
deleted file mode 100644
index b0e8097..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorRight.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorRight.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorRight.png
deleted file mode 100644
index ed6efc4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorRight.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorUp.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorUp.gif
deleted file mode 100644
index 54bcf65..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorUp.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorUp.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorUp.png
deleted file mode 100644
index 7f7a5d8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/tooltipConnectorUp.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/treeExpand_loading.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/treeExpand_loading.gif
deleted file mode 100644
index db9ddd0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/treeExpand_loading.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/treeHover.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/treeHover.png
deleted file mode 100644
index ca80cd2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/treeHover.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/treeI.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/treeI.gif
deleted file mode 100644
index 6f669e2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/treeI.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/treeI_half.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/treeI_half.gif
deleted file mode 100644
index e5fd015..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/treeI_half.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/treeI_half_rtl.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/treeI_half_rtl.gif
deleted file mode 100644
index 44ad021..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/treeI_half_rtl.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/treeI_rtl.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/treeI_rtl.gif
deleted file mode 100644
index 0d32a2f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/treeI_rtl.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/validationInputBg.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/validationInputBg.gif
deleted file mode 100644
index c28475c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/validationInputBg.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/validationInputBg.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/validationInputBg.png
deleted file mode 100644
index f3039f9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/validationInputBg.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/warning.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/warning.png
deleted file mode 100644
index c52f83d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/images/warning.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/AccordionContainer.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/AccordionContainer.css
deleted file mode 100644
index a4799b2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/AccordionContainer.css
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * dijit.layout.Accordioncontainer
- *
- */
-
-.nihilo .dijitAccordionContainer {
-	border-color: #ccc;
-	background-color: #fff;
-}
-
-/* common */
-
-.nihilo .dijitAccordionTitle {
-	background:#fafafa url("../images/titleBar.png") repeat-x top left;
-	border-top: 1px solid #dedede;
-	padding: 5px 4px 6px 8px;
-	cursor:pointer;
-	font-size: 0.9em;
-	font-weight: bold;
-	color: #6d6d6d;
-}
-
-.nihilo .dijitAccordionTitle-selected  {
-	background: #f9f9f9 url("../images/accordionItemActive.png") top repeat-x;
-	font-weight: bold;
-	border-top: 1px solid #dedede;
-	border-bottom: 1px solid #dedede;
-	padding: 5px 4px 5px 8px;
-	cursor: default;
-	color: #243C5F;
-}
-
-.nihilo .dijitAccordionArrow {
-	background:url("../images/spriteRoundedIconsSmall.gif") no-repeat -30px top;
-	width:15px;
-	height:15px;
-	margin-top:-1px;
-}
-
-.nihilo .dijitAccordionTitle-selected .dijitAccordionArrow {
-	background:url("../images/spriteRoundedIconsSmall.gif") no-repeat -15px top;
-	margin-top:-1px;
-}
-
-.nihilo .dijitAccordionText {
-	margin-left: 4px;
-	margin-right: 4px;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/AccordionContainer_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/AccordionContainer_rtl.css
deleted file mode 100644
index 1fc2a5f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/AccordionContainer_rtl.css
+++ /dev/null
@@ -1,8 +0,0 @@
-.dijitRtl .nihilo .dijitAccordionArrow {
-	background-position: 0px top;
-}
-
-.dijitRtl .nihilo .dijitAccordionTitle-selected .dijitAccordionArrow {
-	/* same rule as LTR mode, just listed to override previous rule in this file */
-	background-position: -15px top;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/BorderContainer.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/BorderContainer.css
deleted file mode 100644
index 1e876f3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/BorderContainer.css
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * dijit.layout.BorderContainer
- *
- */
-
-.nihilo .dijitBorderContainer {
-	background-color: #fcfcfc;
-	padding: 5px;
-}
-
-.nihilo .dijitSplitContainer-child,
-.nihilo .dijitBorderContainer-child {
-	/* By default, put borders on all children of BorderContainer,
-	 *  to give illusion of borders on the splitters themselves.
-	 */
-    border: 1px #ccc solid;
-}
-
-.nihilo .dijitBorderContainer-dijitTabContainerTop,
-.nihilo .dijitBorderContainer-dijitTabContainerBottom,
-.nihilo .dijitBorderContainer-dijitTabContainerLeft,
-.nihilo .dijitBorderContainer-dijitTabContainerRight {
-	/* except that TabContainer defines borders on it's sub-nodes (tablist and dijitTabPaneWrapper),
-	 * so override rule setting border on domNode
-	 */
-	 border: none;
-}
-
-.nihilo .dijitBorderContainer-dijitBorderContainer {
-	/* also, make nested BorderContainers look like a single big widget with lots of splitters */
-	border: none;
-	padding: 0px;
-}
-
-.nihilo .dijitSplitterH,
-.nihilo .dijitGutterH {
-	background:#FCFCFC;
-	border:0;
-	border-left:0px solid #d3d3d3;
-	border-right:0px solid #d3d3d3;
-	height:5px;
-}
-
-.nihilo .dijitSplitterH .dijitSplitterThumb {
-	background:#8BA0BD none;
-	height:1px;
-	top:2px;
-	width:19px;
-}
-
-.nihilo .dijitSplitterV,
-.nihilo .dijitGutterV {
-	background:#FCFCFC;
-	border:0;
-	border-top:0px solid #d3d3d3;
-	border-bottom:0px solid #d3d3d3;
-	width:5px;
-}
-
-.nihilo .dijitSplitterV .dijitSplitterThumb {
-	background:#8BA0BD none;
-	height:19px;
-	left:2px;
-	width:1px;
-}
-
-/* active splitter */
-.nihilo .dijitSplitterActive {
-	font-size: 1px;
-	background-image: none;
-	background-color: #aaa;
-	-moz-opacity: 0.6;
-	opacity: 0.6;
-	filter: Alpha(Opacity=60);
-	margin: 0;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/ContentPane.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/ContentPane.css
deleted file mode 100644
index 37ef084..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/ContentPane.css
+++ /dev/null
@@ -1,21 +0,0 @@
-/* ContentPane */
-
-.nihilo .dijitContentPane {
-    padding: 0px;
-}
-
-/* nested layouts */
-.nihilo .dijitTabContainerTop-dijitContentPane,
-.nihilo .dijitTabContainerLeft-dijitContentPane,
-.nihilo .dijitTabContainerRight-dijitContentPane,
-.nihilo .dijitTabContainerBottom-dijitContentPane,
-.nihilo .dijitAccordionContainer-dijitContentPane {
-    background-color: #fff;
-    padding: 5px;
-}
-
-.nihilo .dijitSplitContainer-dijitContentPane,
-.nihilo .dijitBorderContainer-dijitContentPane {
-    background-color: #fff;		/* override background-color setting on parent .dijitBorderContainer */
-    padding: 5px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/SplitContainer.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/SplitContainer.css
deleted file mode 100644
index e73c0e7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/SplitContainer.css
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * dijit.layout.SplitContainer
- *
- */
-
-.nihilo .dijitSplitContainerSizerH {
-	background:url("../images/splitContainerSizerV.png") repeat-y #fff;
-	border:0;
-	border-left:0px solid #d3d3d3;
-	border-right:0px solid #d3d3d3;
-	width:5px;
-}
-
-.nihilo .dijitSplitContainerSizerH .thumb {
-	background:url("../images/splitContainerSizerV-thumb.png") no-repeat;
-	left:1px;
-	width:2px;
-	height:19px;
-}
-
-.nihilo .dijitSplitContainerSizerV {
-	background:url("../images/splitContainerSizerH.png") repeat-x #fff;
-	border:0;
-	border-top:0px solid #d3d3d3;
-	border-bottom:0px solid #d3d3d3;
-	height:2px;
-}
-
-.nihilo .dijitSplitContainerSizerV .thumb {
-	background:url("../images/splitContainerSizerH-thumb.png") no-repeat;
-	top:1px;
-	width:19px;
-	height:5px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/TabContainer.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/TabContainer.css
deleted file mode 100644
index bc2002a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/TabContainer.css
+++ /dev/null
@@ -1,518 +0,0 @@
-/**
- * dijit.layout.TabContainer
- *
- * To style TabContainer with rounded corners
- * you can use these classes: .dijitTab (left), .dijitTabContent (center), dijitTabInnerDiv (right)
- * For tabs aligned to top you can style a stripe div right underneath the tabs using .dijitTabStripe
- */
-@import url("../Menu.css");
-
-/* Classes for all types of tabs (top/bottom/left/right) */
-
-.nihilo .dijitTabContainer .tabStripRBtn {
-	margin-right: 21px;
-}
-.nihilo .dijitTabContainer .tabStripLBtn {
-	margin-left: 21px;
-}
-
-.nihilo .dijitTabContainerBottom .nowrapTabStrip .dijitTab {
-	top: 0px;
-}
-
-.nihilo .dijitTabContainer .tabStripMenuButton-Hover {
-	cursor: pointer;
-}
-
-/* Tabs, shared classes */
-.nihilo .dijitTabPaneWrapper {
-	background:#fff;
-	border:1px solid #ccc;
-	margin: 0;
-	padding: 0;
-}
-
-.nihilo .dijitTabInnerDiv {
-	padding:0px 3px 0px 0px;
-	margin: 0 0 0 4px;
-	background: url("../images/tabContainerSprite.gif") no-repeat;
-	background-position: right -400px;
-}
-
-.nihilo .dijitTab {
-	line-height:normal;
-	margin:0 2px 0 0;	/* space between one tab and the next in top/bottom mode */
-	padding:0px;
-	background: url("../images/tabContainerSprite.gif") no-repeat 0 -300px;
-	color: #6d6d6d;
-	border-bottom: 1px #ccc solid;
-}
-
-.nihilo .dijitTabInnerDiv .dijitTabContent {
-	padding:3px 3px 3px 4px;
-	background: url("../images/tabContainerSprite.gif") repeat-x 0 -350px;
-	position: relative;
-}
-
-/* hovered tab */
-.nihilo .dijitTabHover {
-	color: #243C5F;
-	background: url("../images/tabContainerSprite.gif") no-repeat 0px -150px;
-}
-
-.nihilo .dijitTabHover .dijitTabInnerDiv {
-	background: url("../images/tabContainerSprite.gif") no-repeat right -250px;
-}
-
-.nihilo .dijitTabHover .dijitTabInnerDiv .dijitTabContent {
-	background: url("../images/tabContainerSprite.gif") repeat-x 0 -200px;
-}
-
-/* checked tab*/
-.nihilo .dijitTabChecked,
-.nihilo .dijitTabCloseButtonChecked
-{
-	/* the selected tab (with or without hover) */
-	background: url("../images/tabContainerSprite.gif") no-repeat 0px -0px;
-}
-
-.nihilo .dijitTabChecked .dijitTabInnerDiv {
-	background: url("../images/tabContainerSprite.gif") no-repeat right -100px;
-}
-
-.nihilo .dijitTabChecked .dijitTabInnerDiv .dijitTabContent {
-	background: url("../images/tabContainerSprite.gif") repeat-x 0 -50px;
-	color: #243C5F !important;
-}
-
-/* Nested Tabs */
-.nihilo .dijitTabContainerNested .dijitTabListWrapper {
-	height: auto;
-}
-
-.nihilo .dijitTabContainerTabListNested {
-	background: #FDFDFD;
-	border: none;
-	margin-bottom: 0px;		/* override margin: -1px; */
-}
-.nihilo .dijitTabContainerTabListNested .dijitTab {
-	background: none;
-	border: none;
-	top: 0px;	/* override top:1px setting of top-level tabs */
-}
-.nihilo .dijitTabContainerTabListNested .dijitTab .dijitTabInnerDiv,
-.nihilo .dijitTabContainerTabListNested .dijitTab .dijitTabContent {
-	background: none;
-}
-.nihilo .dijitTabContainerTabListNested .dijitTabHover .dijitTabContent .tabLabel {
-	text-decoration: underline;
-}
-.nihilo .dijitTabContainerTabListNested .dijitTabChecked .tabLabel {
-	text-decoration: underline;
-	font-weight: bold;
-}
-.nihilo .dijitTabContainerSpacerNested {
-	/* thinner line between tab (labels) and content */
-	height: 0px;
-	border-bottom: 0px;
-}
-.nihilo .dijitTabPaneWrapperNested {
-	border: none;	/* prevent double border */
-}
-
-
-/* Close button */
-.nihilo .dijitTab .closeImage {
-	background: url("../images/spriteRoundedIconsSmall.png") no-repeat -60px top;
-	width: 15px;
-	height: 15px;
-	margin-top: -1px;
-}
-
-.dj_ie6 .nihilo .dijitTab .closeImage {
-	background: url("../images/spriteRoundedIconsSmall.gif") no-repeat -60px top;
-}
-.nihilo .dijitTab .closeButton-hover .closeImage {
-	background: url("../images/spriteRoundedIconsSmall.png") no-repeat -60px -15px;
-}
-.dj_ie6 .nihilo .dijitTab .closeButton-hover .closeImage {
-	background: url("../images/spriteRoundedIconsSmall.gif") no-repeat -60px -15px;
-}
-
-.nihilo .dijitTab .tabLabel {
-	/* make sure tabs w/close button and w/out close button are same height, even w/small (<15px) font */
-	min-height: 15px;
-	display: inline-block;
-}
-.dj_ie6 .nihilo .dijitTabButtonIcon {
-	/* because min-height doesn't work on IE6 */
-	height: 18px;
-	width: 1px;
-}
-
-/* ================================ */
-/* top tabs */
-.nihilo .dijitTabContainerTop-tabs {
-	border-bottom: none;
-	padding-bottom: 1px;
-	background-position: bottom;
-	padding-left: 3px;
-}
-
-.dj_ie6 .nihilo .dijitTabListContainer-top,
-.dj_ie7 .nihilo .dijitTabListContainer-top {
-	z-index: 3;
-}
-
-.dj_ie6 .nihilo .dijitTabContainerTop-tabs,
-.dj_ie7 .nihilo .dijitTabContainerTop-tabs {
-	border-bottom: 1px solid #ccc;
-	padding-bottom: 0px;
-}
-
-.nihilo .dijitTabContainerTopNoStrip {
-	padding-top: 3px;
-}
-
-/* top container */
-.nihilo .dijitTabContainerTop-container {
-	border-top: none;
-}
-
-/* checked tabs */
-.nihilo .dijitTabContainerTop-tabs .dijitTabChecked {
-	border-bottom-color: #f8f8f8;
-}
-
-/* strip */
-.nihilo .dijitTabContainer .dijitTabContainerTopStrip {
-	border-bottom: none;
-	padding-top: 1px;
-	margin-top: 1px;
-	background: #f2f2f2;
-	border-top: 1px solid #CCC;
-	border-right: 1px solid #CCC;
-	border-left: 1px solid #CCC;
-}
-
-
-/* ================================ */
-/* bottom tabs */
-.nihilo .dijitTabContainerBottom-tabs {
-	border-top: none;
-	background-position: top;
-	padding-left: 3px;
-}
-
-.dj_ie6 .nihilo .dijitTabListContainer-bottom,
-.dj_ie7 .nihilo .dijitTabListContainer-bottom {
-	z-index: 3;
-}
-
-.dj_ie6 .nihilo .dijitTabContainerBottom-tabs,
-.dj_ie7 .nihilo .dijitTabContainerBottom-tabs {
-	border-top: 1px solid #ccc;
-	margin-top: -1px;
-}
-
-/* bottom container */
-.nihilo .dijitTabContainerBottom-container {
-	border-bottom: none;
-}
-
-.nihilo .dijitTabContainerBottom-tabs .dijitTab {
-	border-bottom: none;
-	border-top: 1px solid #ccc;
-	background: url("../images/tabBottomEnabledSpriteLR.gif") no-repeat bottom left;
-}
-
-/* checked tabs */
-.nihilo .dijitTabContainerBottom-tabs .dijitTabChecked {
-	border-top-color: #f8f8f8;
-}
-
-.nihilo .dijitTabContainerBottom-tabs .dijitTabInnerDiv .dijitTabContent {
-	padding-top: 3px;
-	padding-bottom: 3px;
-	background: url("../images/tabBottomEnabledC.gif") repeat-x bottom left;
-}
-
-.nihilo .dijitTabContainerBottom-tabs .dijitTabInnerDiv {
-	background: url("../images/tabBottomEnabledSpriteLR.gif") no-repeat bottom right;
-}
-
-.nihilo .dijitTabContainerBottom-tabs .dijitTabHover {
-	color: #243C5F;
-	background: url("../images/tabBottomHoverSpriteLR.gif") no-repeat bottom left;
-}
-
-.nihilo .dijitTabContainerBottom-tabs .dijitTabHover .dijitTabInnerDiv {
-	background: url("../images/tabBottomHoverSpriteLR.gif") no-repeat bottom right;
-}
-
-.nihilo .dijitTabContainerBottom-tabs .dijitTabHover .dijitTabInnerDiv .dijitTabContent {
-	background: url("../images/tabBottomHoverC.gif") repeat-x bottom left;
-}
-
-.nihilo .dijitTabContainerBottom-tabs .dijitTabChecked,
-.nihilo .dijitTabContainerBottom-tabs .dijitTabCloseButtonChecked
-{
-	/* the selected tab (with or without hover) */
-	background: url("../images/tabBottomActiveSpriteLR.gif") no-repeat bottom left;
-}
-
-.nihilo .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv {
-	background: url("../images/tabBottomActiveSpriteLR.gif") no-repeat bottom right;
-}
-
-.nihilo .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv .dijitTabContent {
-	background: url("../images/tabBottomActiveC.gif") repeat-x bottom left;
-}
-
-/* strip */
-.nihilo .dijitTabContainer .dijitTabContainerBottomStrip {
-	border: 1px solid #ccc;
-	background: #f2f2f2;
-	border-top: none;
-	padding-bottom: 2px;
-}
-
-/* top/bottom strip */
-.nihilo .dijitTabContainerBottom-spacer,
-.nihilo .dijitTabContainerTop-spacer {
-	height: 2px;
-	border: 1px solid #ccc;
-	background: #f8f8f8;
-}
-
-.nihilo  .dijitTabContainerTop-spacer {
-	margin-top: -1px;
-}
-.nihilo .dijitTabContainerBottom-spacer {
-	margin-bottom: -1px;
-}
-
-
-/* ================================ */
-/* right tabs */
-.nihilo .dijitTabContainerRight-tabs {
-	border-color: #ccc;
-	padding-top: 3px;
-}
-.nihilo .dijitTabContainerRight .dijitTabListWrapper {
-	padding-right: 3px;
-}
-
-/* right container */
-.nihilo .dijitTabContainerRight-container {
-	border-right: none;
-}
-
-.nihilo .dijitTabContainerRight-tabs .dijitTab {
-	border-bottom: none;
-	border-left: 1px solid #ccc;
-	border-bottom: 1px solid #dedede !important;
-}
-
-
-/* some odd ie bug when borders dissapear when setting a bottom margin, this sortof helps */
-.dj_ie .nihilo .dijitTabContainerRight-tabs .dijitTabInnerDiv {
-	border-bottom: solid #fff 1px;
-}
-
-/* checked tabs */
-.nihilo .dijitTabContainerRight-tabs .dijitTabChecked {
-	border-left-color: #f8f8f8;
-}
-
-.nihilo .dijitTabContainerRight-tabs .dijitTabChecked {
-	background: url("../images/tabRightChecked.gif") no-repeat left top !important;
-}
-
-/* some odd ie bug when borders dissapear when setting a bottom margin, this sortof helps */
-.dj_ie .nihilo .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabInnerDiv,
-.dj_ie .nihilo .dijitTabContainerRight-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
-	border-bottom: solid #efefef 1px;
-}
-
-.nihilo .dijitTabContainerRight-tabs .dijitTab {
-	background: url("../images/tabContainerSprite.gif") no-repeat left -350px;
-}
-.nihilo .dijitTabContainerRight-tabs .dijitTabHover .dijitTab {
-	background: url("../images/tabContainerSprite.gif") no-repeat left -200px;
-}
-
-/* strip */
-.nihilo .dijitTabContainerRightStrip {
-	padding-right: 2px;
-	border: 1px solid #ccc;
-	border-left: none;
-	background: #f2f2f2;
-}
-
-/* ================================ */
-/* left tabs */
-.nihilo .dijitTabContainerLeft-tabs {
-	border-color: #ccc;
-	padding-top: 3px;
-}
-
-/* left conatiner */
-.nihilo .dijitTabContainerLeft-container {
-	border-left: none;
-}
-
-.nihilo .dijitTabContainerLeft-tabs .dijitTab {
-	border-right: 1px solid #ccc;
-	border-bottom: 1px solid #dedede;
-}
-
-/* checked tabs */
-.nihilo .dijitTabContainerLeft-tabs .dijitTabChecked {
-	border-right: 1px solid #f8f8f8;
-}
-
-.nihilo .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
-	background: url("../images/tabContainerSprite.gif") no-repeat right -350px;
-}
-.nihilo .dijitTabContainerLeft-tabs .dijitTabHover .dijitTabInnerDiv {
-	background: url("../images/tabContainerSprite.gif") no-repeat right -200px;
-}
-.nihilo .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
-.nihilo .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
-	background: url("../images/tabLeftChecked.gif") no-repeat right top;
-}
-
-.dj_ie .nihilo .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
-.dj_ie .nihilo .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
-	border-bottom: solid #efefef 1px;
-}
-
-.dj_ie .nihilo .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
-	border-bottom: solid #fff 1px;
-}
-
-/* strip */
-.nihilo .dijitTabContainerLeftStrip {
-	padding-left: 2px;
-	border: 1px solid #ccc;
-	border-right: none;
-}
-
-.nihilo .dijitTabContainerLeftStrip {
-	background: #f2f2f2;
-}
-
-/* ================================ */
-/* left/right tabs */
-.nihilo .dijitTabContainerLeft-tabs .dijitTab,
-.nihilo .dijitTabContainerRight-tabs .dijitTab {
-	margin-right:auto;
-	margin-bottom:2px;	/* space between one tab and the next in left/right mode */
-}
-
-/* left/right tabstrip */
-.nihilo .dijitTabContainerLeft-spacer,
-.nihilo .dijitTabContainerRight-spacer {
-	width: 2px;
-	border: 1px solid #ccc;
-	background: #f8f8f8;
-}
-
-.nihilo .dijitTabContainerRight-spacer {
-	border-right: none;
-}
-
-.nihilo .dijitTabContainerRight-tabs {
-	padding-top: 3px;
-	height: 100%;
-}
-.nihilo .dijitTabContainerLeft-tabs {
-	height: 100%;
-}
-
-.nihilo .dijitTabContainerLeft-spacer {
-	border-left: none;
-}
-
-/* ================================ */
-
-/* this resets the tabcontainer stripe when within a contentpane */
-.nihilo .dijitTabContainerTop-dijitContentPane .dijitTabContainerTop-tabs {
-	border-left: 0px solid #ccc;
-	border-top: 0px solid #ccc;
-	border-right: 0px solid #ccc;
-	padding-top: 0px;
-	padding-left: 0px;
-}
-
-/* ================================ */
-
-/* Menu and slider control styles */
-.nihilo .dijitTabContainer .tabStripButton {
-	margin-right: 0px;
-}
-
-.nihilo .tabStripButton .dijitTabInnerDiv .dijitTabContent {
-	padding: 5px 0 6px;
-}
-
-.dj_ie6 .nihilo .tabStripButton .dijitTabInnerDiv .dijitTabContent,
-.dj_ie7 .nihilo .tabStripButton .dijitTabInnerDiv .dijitTabContent,
-.dj_opera .nihilo .tabStripButton .dijitTabInnerDiv .dijitTabContent {
-	padding-bottom: 7px;
-}
-
-.nihilo .tabStrip-disabled .tabStripButton .dijitTabInnerDiv .dijitTabContent {
-	padding: 3px 0 5px;
-}
-
-.dj_ie6 .nihilo .tabStrip-disabled .tabStripButton .dijitTabInnerDiv .dijitTabContent,
-.dj_ie7 .nihilo .tabStrip-disabled .tabStripButton .dijitTabInnerDiv .dijitTabContent,
-.dj_opera .nihilo .tabStrip-disabled .tabStripButton .dijitTabInnerDiv .dijitTabContent {
-	padding-top: 4px;
-}
-
-.nihilo .dijitTabContainer .tabStripButton {
-	/* float need width set */
-	width: 21px;
-}
-
-.nihilo .dijitTabContainer .tabStripButton img {
-	height: 14px;
-	background: url(../images/spriteRoundedIconsSmall.png) no-repeat left top ;
-}
-
-.dj_ie6 .nihilo .dijitTabContainer .tabStripButton img {
-	background-image: url(../images/spriteRoundedIconsSmall.gif);
-}
-
-.nihilo .dijitTabContainer .tabStripSlideButtonRight img {
-	background-position: -30px top;
-}
-
-.nihilo .dijitTabContainer .tabStripMenuButton img {
-	background-position: -15px top;
-}
-
-.nihilo .dijitTabContainerTopNone {
-	padding-top: 0px;
-}
-
-.nihilo .dijitTabContainer .tabStripButton-top {
-	margin-top: 1px;
-}
-
-.nihilo .dijitTabContainer .tabStripButton-bottom {
-	background: transparent url(../images/tabBottomEnabledSpriteLR.gif) no-repeat scroll left bottom;
-	border-bottom: medium none;
-	border-top: 1px solid #CCCCCC;
-}
-
-.nihilo .dijitTabContainer .tabStripButton-bottom .dijitTabInnerDiv {
-	background: transparent url(../images/tabBottomEnabledSpriteLR.gif) no-repeat scroll right bottom;
-}
-
-.nihilo .dijitTabContainer .tabStripButton-bottom .dijitTabContent {
-	background: transparent;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/TabContainer_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/TabContainer_rtl.css
deleted file mode 100644
index 7421e2e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/layout/TabContainer_rtl.css
+++ /dev/null
@@ -1,43 +0,0 @@
-.dijitRtl .nihilo .dijitTab {
-	margin-right:0;
-	margin-left:2px;		/* space between one tab and the next in top/bottom mode */
-}
-
-/* tab strips */
-.dijitRtl .nihilo .dijitTabContainer .tabStripButton {
-	margin-left: 0;
-}
-
-.dijitRtl .nihilo .dijitTabContainerTopStrip,
-.dijitRtl .nihilo .dijitTabContainerBottomStrip,
-.dijitRtl .nihilo .dijitTabContainerTop-tabs,
-.dijitRtl .nihilo .dijitTabContainerBottom-tabs {
-	padding-left: 0;
-	padding-right: 3px;
-}
-
-.dijitRtl .nihilo .dijitTabInnerDiv {
-	padding-left: 3px;
-	padding-right: 4px;
-}
-
-.dijitRtl .nihilo .dijitTabPaneWrapper {
-	#zoom: 1;
-}
-
-.dj_ie-rtl .nihilo .dijitTabContainerLeft-tabs {
-	margin-left: 0px !important;
-}
-
-.dj_ie-rtl .nihilo .dijitTabContainerRight-tabs {
-	margin-right: 0px !important;
-}
-
-.dijitRtl .nihilo .dijitTabContainerLeft-tabs .dijitTab,
-.dijitRtl .nihilo .dijitTabContainerRight-tabs .dijitTab {
-	margin-left:0px;
-}
-
-.dj_ie-rtl .nihilo .dijitTab .dijitTabInnerDiv{
-	width : 1%;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/nihilo.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/nihilo.css
deleted file mode 100644
index dfef7a8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/nihilo.css
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-	Adds cosmetic styling to Dijit.  Users may swap with a custom theme CSS file.
-
-	NOTES:
-	---
-	Dialog.css contains css classes for both Dialog and Tooltip!
-	This because currently a dijit.TooltipDialog exist. Until this is resolved
-	you need to include Dialog.css for both dijits
-	---
-	Toolbar.css contains classes also used in Editor. Until this is resolved
-	you need to include Toolbar.css for both Toolbar and Editor
-	---
-	Button.css contains classes for combobox,
-
-*/
-
-@import url("../dijit.css");
-@import url("Common.css");
-
-@import url("layout/ContentPane.css");
-@import url("layout/TabContainer.css");
-@import url("layout/AccordionContainer.css");
-@import url("layout/SplitContainer.css");
-@import url("layout/BorderContainer.css");
-@import url("form/Common.css");
-@import url("form/Button.css");
-@import url("form/ComboBox.css");
-@import url("form/Checkbox.css");
-@import url("form/RadioButton.css");
-@import url("form/Slider.css");
-@import url("form/Select.css");
-@import url("Tree.css");
-@import url("ProgressBar.css");
-@import url("TitlePane.css");
-@import url("Calendar.css");
-@import url("TimePicker.css");
-@import url("Toolbar.css");
-@import url("Dialog.css");
-@import url("Menu.css");
-@import url("Editor.css");
-@import url("ColorPalette.css");
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/nihilo_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/nihilo_rtl.css
deleted file mode 100644
index 1edd055..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/nihilo/nihilo_rtl.css
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-	Adds cosmetic styling to Dijit.  Users may swap with a custom theme CSS file.
-
-	NOTES:
-	---
-	Dialog.css contains css classes for both Dialog and Tooltip!
-	This because currently a dijit.TooltipDialog exist. Until this is resolved
-	you need to include Dialog.css for both dijits
-	---
-	Toolbar.css contains classes also used in Editor. Until this is resolved
-	you need to include Toolbar.css for both Toolbar and Editor
-	---
-	Button.css contains classes for combobox,
-
-*/
-
-@import url("../dijit_rtl.css");
-@import url("layout/TabContainer_rtl.css");
-@import url("layout/AccordionContainer_rtl.css");
-@import url("form/Slider_rtl.css");
-@import url("form/Button_rtl.css");
-@import url("form/Common_rtl.css");
-@import url("Tree_rtl.css");
-@import url("TitlePane_rtl.css");
-@import url("Calendar_rtl.css");
-@import url("Dialog_rtl.css");
-@import url("Menu_rtl.css");
-@import url("Editor_rtl.css");
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Calendar.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Calendar.css
deleted file mode 100644
index f0a8311..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Calendar.css
+++ /dev/null
@@ -1,151 +0,0 @@
-/* Calendar*/
-
-.soria .dijitCalendarIncrementControl {
-	/* next/prev month buttons */
-	width:15px;
-	height:15px;
-	background-image: url("images/spriteRoundedIconsSmall.png");
-	background-repeat: no-repeat;
-}
-.dj_ie6 .soria .dijitCalendarIncrementControl {
-	font-size:.1em;
-	background-image: url("images/spriteRoundedIconsSmall.gif");
-}
-
-.soria .dijitA11ySideArrow {
-	display: none;
-}
-
-.soria .dijitCalendarDecrease {
-	background-position: top left;
-}
-.soria .dijitCalendarIncrease {
-	background-position: -30px top;
-}
-
-.soria table.dijitCalendarContainer {
-	font-size: 100%;
-	border-spacing: 0;
-	border-collapse: separate;
-	border: 1px solid #b1badf;
-	margin: 0;
-}
-
-.soria .dijitCalendarMonthContainer th {
-	/* month header cell */
-	background:#bed7f0 url("images/titleBar.png") repeat-x top;
-	padding-top:.3em;
-	padding-bottom:.2em;
-	text-align:center;
-}
-.dj_ie6 .soria .dijitCalendarMonthContainer th {
-	padding-top:.2em;
-	padding-bottom:.1em;
-}
-
-.soria .dijitCalendarDayLabelTemplate {
-	/* day of week labels */
-	background:#bed7f0;
-	font-weight:normal;
-	padding-top:.15em;
-	padding-bottom:.2em;
-	border-bottom: 1px solid #b1badf;
-	color:#293a4b;
-	text-align:center;
-}
-
-.soria .dijitCalendarBodyContainer {
-	border-bottom: 1px solid #eeeeee;
-}
-
-.soria .dijitCalendarMonthLabel {
-	color:#293a4b;
-	font-weight: bold;
-}
-
-.soria .dijitCalendarDateTemplate {
-	/* style for each day cell */
-	font-size: 0.9em;
-	font-weight: bold;
-	text-align: center;
-	padding: 0.3em 0.3em 0.05em 0.3em;
-	letter-spacing: 1px;
-	background-color: #fff;
-	border:#fff solid 1px !important;
-}
-
-.dj_ie .soria .dijitCalendarDateTemplate {
-	padding: 0.1em .33em 0.02em .33em;
-}
-
-.soria .dijitCalendarPreviousMonth,
-.soria .dijitCalendarNextMonth 		{
-	/* days that are part of the previous or next month */
-	color:#999999;
-	background-color:#fdfdfd !important;
-	border:#fdfdfd solid 1px !important;
-}
-
-.soria .dijitCalendarPreviousMonthDisabled,
-.soria .dijitCalendarNextMonthDisabled	{
-	/* days that are part of the previous or next month - disabled*/
-	background-color:#a4a5a6 !important;
-}
-
-.soria .dijitCalendarCurrentMonth {
-	/* days that are part of this month */
-}
-
-.soria .dijitCalendarCurrentMonthDisabled {
-	/* days that are part of this month - disabled */
-	background-color:#bbbbbc !important;
-}
-
-.soria .dijitCalendarDisabledDate {
-	/* one or the other? */
-	/* background: url(images/noX.gif) no-repeat center center !important; */
-	text-decoration:line-through !important;
-	cursor:default !important;
-}
-
-.soria .dijitCalendarCurrentDate {
-	/* cell for today's date */
-	text-decoration:underline;
-	font-weight:bold;
-}
-
-.soria .dijitCalendarSelectedDate {
-	/* cell for the selected date */
-	background-color:#b9cbf1 !important;
-	color:black !important;
-	border:#4b5aaa solid 1px !important;
-}
-
-
-.soria .dijitCalendarYearContainer {
-	/* footer of the table that contains the year display/selector */
-	background:white url("images/titleBar.png") repeat-x top;
-}
-
-.soria .dijitCalendarYearLabel {
-	/* container for all of 3 year labels */
-	margin:0;
-	padding:0.4em 0 0.25em 0;
-	text-align:center;
-}
-
-.soria .dijitCalendarSelectedYear {
-	/* label for selected year */
-	color:black;
-	padding:0.2em;
-	padding-bottom:0.1em;
-	background-color:#b9cbf1 !important;
-	border:#4b5aaa solid 1px !important;
-}
-
-.soria .dijitCalendarNextYear,
-.soria .dijitCalendarPreviousYear {
-	/* label for next/prev years */
-	color:black !important;
-	font-weight:normal;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Calendar_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Calendar_rtl.css
deleted file mode 100644
index 70efe52..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Calendar_rtl.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/* Calendar */
-
-.dijitRtl .soria .dijitCalendarDecrease {
-	background-position: -30px top;
-}
-
-.dijitRtl .soria .dijitCalendarIncrease {
-	background-position: 0px top;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/ColorPalette.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/ColorPalette.css
deleted file mode 100644
index ed922ac..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/ColorPalette.css
+++ /dev/null
@@ -1,5 +0,0 @@
-.dijitColorPalette {
-	border:1px solid #cbcbcb;
-	background:#fff;
-	-moz-border-radius: 0px !important;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Common.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Common.css
deleted file mode 100644
index d5a7c9d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Common.css
+++ /dev/null
@@ -1,23 +0,0 @@
-/* DnD avatar-specific settings */
-/* For now it uses a default set of rules. Some other DnD classes can be modified as well. */
-.soria .dojoDndItemBefore {
-	border-top: 2px solid #369;
-}
-
-.soria .dojoDndItemAfter {
-	border-bottom: 2px solid #369;
-}
-
-.soria .dojoDndItemOver {
-	cursor:pointer;
-}
-
-.soria table.dojoDndAvatar { -moz-border-radius: 0; border: 1px solid #ccc; border-collapse: collapse; background-color: #fff; font-size: 75%; color: black;}
-.soria .dojoDndAvatar td	{ border: none; }
-.soria .dojoDndAvatar tr	{ border: none; }
-.soria .dojoDndAvatarHeader td	{ height: 20px; padding: 0 0 0 21px; }
-.soria .dojoDndAvatarItem td { padding: 2px;}
-.soria.dojoDndMove .dojoDndAvatarHeader	{background-color: #f58383; background-image: url(images/dndNoMove.png); background-repeat: no-repeat; background-position: 2px center;}
-.soria.dojoDndCopy .dojoDndAvatarHeader	{background-color: #f58383; background-image: url(images/dndNoCopy.png); background-repeat: no-repeat; background-position: 2px center;}
-.soria.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{background-color: #97e68d; background-image: url(images/dndMove.png); background-repeat: no-repeat; background-position: 2px center;}
-.soria.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{background-color: #97e68d; background-image: url(images/dndCopy.png); background-repeat: no-repeat; background-position: 2px center;}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Dialog.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Dialog.css
deleted file mode 100644
index ec3d1b1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Dialog.css
+++ /dev/null
@@ -1,163 +0,0 @@
-/* Dialog */
-
-.soria .dijitDialog {
-	background: #eee;
-	border: 1px solid #cbcbcb;
-	-webkit-box-shadow: 0px 5px 10px #adadad;
-	padding: 0px;
-}
-
-.soria .dijitDialog .dijitDialogTitle {
-	/* typography and styling of the dialog title */
-	font-weight: bold;
-	padding: 0px 4px;
-	font-size: 0.9em;
-	color: #3243C5F;
-}
-
-.soria .dijitDialog .dijitDialogPaneContent {
-	background: #ffffff;
-	border:none;
-	border-top: 1px solid #b1badf; /* w/out this, an <h1> on the top line causes a gap between the .content and .label */
-	padding:10px;
-
-}
-
-.soria .dijitDialogTitleBar {
-	/* outer container for the titlebar of the dialog */
-	background: #fafafa url("images/titleBar.png") repeat-x top left;
-	padding: 5px 6px 3px 6px;
-	cursor: move;
-	outline:0; /* remove this line if keyboard focus on dialog startup is an issue. tab still takes you to first focusable element */
-}
-
-.soria .dijitDialogCloseIcon {
-	/* the default close icon for the dialog */
-	background-image: url("images/spriteRoundedIconsSmallBl.png");
-	background-repeat: no-repeat;
-	background-position: -60px 0px;
-	position: absolute;
-	vertical-align: middle;
-	right: 6px;
-	top: 4px;
-	height: 15px;
-	width: 15px;
-	cursor: pointer;
-}
-.dj_ie6 .soria .dijitDialogCloseIcon {
-	background-image: url("images/spriteRoundedIconsSmallBl.gif");
-}
-.soria .dijitDialogCloseIcon-hover {
-	background-position: -60px -15px;
-}
-
-/* Tooltip and TooltipDialog */
-
-.soria .dijitTooltip,
-.soria .dijitTooltipDialog {
-	/* the outermost dom node, holding the connector and container */
-	background: transparent;	/* make the area on the sides of the arrow transparent */
-}
-
-.dijitTooltipBelow {
-	/* leave room for arrow above content */
-	padding-top: 10px;
-}
-
-.dijitTooltipAbove {
-	/* leave room for arrow below content */
-	padding-bottom: 10px;
-}
-
-.soria .dijitTooltipContainer {
-	/*
-		The part with the text.
-
-		NOTE:
-			FF doesn't clip images used as CSS bgs if you specify a border
-			radius. If you use a solid color, it does. Webkit gets it right.
-			Sigh.
-		background: #ffffff url("images/popupMenuBg.gif") repeat-x bottom left;
-	*/
-	background-color: #fff;
-	border:1px solid #cbcbcb;
-	padding:0.45em;
-}
-
-.soria .dijitTooltipConnector {
-	/* the arrow piece */
-	border:0px;
-	z-index: 2;
-}
-
-.soria .dijitTooltipABRight .dijitTooltipConnector {
-	/* above or below tooltip, but the arrow appears on the right,
-		and the right edges of target and tooltip are aligned rather than the left */
-	left: auto !important;
-	right: 6px;
-}
-
-.soria .dijitTooltipBelow .dijitTooltipConnector {
-	/* the arrow piece for tooltips below an element */
-	top: 0px;
-	left: 6px;
-	background:url("images/tooltipConnectorUp.png") no-repeat top left;
-	width:17px;
-	height:11px;
-}
-
-.dj_ie .soria .dijitTooltipBelow .dijitTooltipConnector {
-	background-image: url("images/tooltipConnectorUp.gif");
-}
-
-.soria .dijitTooltipAbove .dijitTooltipConnector {
-	/* the arrow piece for tooltips above an element */
-	bottom: 0px;
-	left: 6px;
-	background:url("images/tooltipConnectorDown.png") no-repeat top left;
-	width:17px;
-	height:11px;
-}
-.dj_ie .soria .dijitTooltipAbove .dijitTooltipConnector {
-	background-image: url("images/tooltipConnectorDown.gif");
-}
-.dj_ie .soria .dijitTooltipAbove .dijitTooltipConnector {
-	background-image: url("images/tooltipConnectorDown.gif");
-}
-.dj_ie6 .soria .dijitTooltipAbove .dijitTooltipConnector {
-	bottom: -5px;
-}
-
-.soria .dijitTooltipLeft {
-	padding-right: 10px;
-}
-.dj_ie6 .soria .dijitTooltipLeft {
-	padding-left: 11px;
-}
-.soria .dijitTooltipLeft .dijitTooltipConnector {
-	/* the arrow piece for tooltips to the left of an element, bottom borders aligned */
-	right: 0px;
-	bottom: 3px;
-	background:url("images/tooltipConnectorRight.png") no-repeat top left;
-	width:11px;
-	height:17px;
-}
-.dj_ie .soria .dijitTooltipLeft .dijitTooltipConnector {
-	background-image: url("images/tooltipConnectorRight.gif");
-}
-
-.soria .dijitTooltipRight {
-	padding-left: 10px;
-}
-.soria .dijitTooltipRight .dijitTooltipConnector {
-	/* the arrow piece for tooltips to the right of an element, bottom borders aligned */
-	left: 0px;
-	bottom: 3px;
-	background:url("images/tooltipConnectorLeft.png") no-repeat top left;
-	width:11px;
-	height:17px;
-}
-.dj_ie .soria .dijitTooltipRight .dijitTooltipConnector {
-	background-image: url("images/tooltipConnectorLeft.gif");
-}
-
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Dialog_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Dialog_rtl.css
deleted file mode 100644
index 838700a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Dialog_rtl.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Dialog */
-.dijitRtl .soria .dijitDialogTitleBar .dijitDialogCloseIcon {
-	right: auto;
-	left: 5px;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Editor.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Editor.css
deleted file mode 100644
index 73123b6..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Editor.css
+++ /dev/null
@@ -1,71 +0,0 @@
-.dijitIEFixedToolbar {
-	position:absolute;
-	/* top:0; */
-	top: expression(eval((document.documentElement||document.body).scrollTop));
-}
-
-.soria .dijitToolbar .dijitToolbarSeparator {
-	background: url('images/editor.gif');
-}
-
-/**** ICONS *****/
-
-.soria .dijitEditorIcon {
-	background-image: url('images/editor.gif'); /* editor icons sprite image */
-	background-repeat: no-repeat;
-	width: 18px;
-	height: 18px;
-	text-align: center;
-}
-.soria .dijitDisabled .dijitEditorIcon {
-	background-image: url('images/editorDisabled.gif'); /* editor icons sprite image */
-}
-
-.soria .dijitEditorIconSep { background-position: 0px; }
-.soria .dijitEditorIconBackColor { background-position: -18px; }
-.soria .dijitEditorIconBold { background-position: -36px; }
-.soria .dijitEditorIconCancel { background-position: -54px; }
-.soria .dijitEditorIconCopy { background-position: -72px; }
-.soria .dijitEditorIconCreateLink { background-position: -90px; }
-.soria .dijitEditorIconCut { background-position: -108px; }
-.soria .dijitEditorIconDelete { background-position: -126px; }
-.soria .dijitEditorIconForeColor { background-position: -144px; }
-.soria .dijitEditorIconHiliteColor { background-position: -162px; }
-.soria .dijitEditorIconIndent { background-position: -180px; }
-.soria .dijitEditorIconInsertHorizontalRule { background-position: -198px; }
-.soria .dijitEditorIconInsertImage { background-position: -216px; }
-.soria .dijitEditorIconInsertOrderedList { background-position: -234px; }
-.soria .dijitEditorIconInsertTable { background-position: -252px; }
-.soria .dijitEditorIconInsertUnorderedList { background-position: -270px; }
-.soria .dijitEditorIconItalic { background-position: -288px; }
-.soria .dijitEditorIconJustifyCenter { background-position: -306px; }
-.soria .dijitEditorIconJustifyFull { background-position: -324px; }
-.soria .dijitEditorIconJustifyLeft { background-position: -342px; }
-.soria .dijitEditorIconJustifyRight { background-position: -360px; }
-.soria .dijitEditorIconLeftToRight { background-position: -378px; }
-.soria .dijitEditorIconListBulletIndent { background-position: -396px; }
-.soria .dijitEditorIconListBulletOutdent { background-position: -414px; }
-.soria .dijitEditorIconListNumIndent { background-position: -432px; }
-.soria .dijitEditorIconListNumOutdent { background-position: -450px; }
-.soria .dijitEditorIconOutdent { background-position: -468px; }
-.soria .dijitEditorIconPaste { background-position: -486px; }
-.soria .dijitEditorIconRedo { background-position: -504px; }
-.soria .dijitEditorIconRemoveFormat { background-position: -522px; }
-.soria .dijitEditorIconRightToLeft { background-position: -540px; }
-.soria .dijitEditorIconSave { background-position: -558px; }
-.soria .dijitEditorIconSpace { background-position: -576px; }
-.soria .dijitEditorIconStrikethrough { background-position: -594px; }
-.soria .dijitEditorIconSubscript { background-position: -612px; }
-.soria .dijitEditorIconSuperscript { background-position: -630px; }
-.soria .dijitEditorIconUnderline { background-position: -648px; }
-.soria .dijitEditorIconUndo { background-position: -666px; }
-.soria .dijitEditorIconWikiword { background-position: -684px; }
-.soria .dijitEditorIconToggleDir { background-position: -540px; /* padding: 0; margin: 0; color:#555555;
-									font-family:verdana,arial,sans-serif; font-weight: 800; font-size: 70%; */}
-.soria .dijitEditorIconTabIndent { background-position: -702px; }
-.soria .dijitEditorIconSelectAll { background-position: -720px; }
-.soria .dijitEditorIconUnlink { background-position: -738px; }
-.soria .dijitEditorIconFullScreen { background-position: -756px; }
-.soria .dijitEditorIconViewSource { background-position: -774px; }
-.soria .dijitEditorIconPrint { background-position: -792px; }
-.soria .dijitEditorIconNewPage { background-position: -810px; }
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Editor_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Editor_rtl.css
deleted file mode 100644
index 985fef9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Editor_rtl.css
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Editor */
-.dijitRtl .soria .dijitEditorIcon {
-	background-image: url('images/editor_rtl.gif'); /* editor icons sprite image */
-}
-.dijitRtl .soria .dijitDisabled .dijitEditorIcon {
-	background-image: url('images/editorDisabled_rtl.gif'); /* editor icons sprite image */
-}
-
-/* Toolbar */
-.dijitRtl .soria .dijitToolbar .dijitToolbarSeparator {
-	background-image: url('images/editor_rtl.gif');
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Menu.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Menu.css
deleted file mode 100644
index 6a93f5f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Menu.css
+++ /dev/null
@@ -1,77 +0,0 @@
-
-/* Menu */
-.soria .dijitMenu,
-.soria .dijitMenuBar {
-	border: 1px solid #cbcbcb;
-	margin: 0px;
-	padding: 0px;
-	background-color: #fff;
-}
-
-.soria .dijitBorderContainer .dijitMenuBar {
-	border:1px solid #B1BADF;
-}
-
-.soria .dijitMenuItem {
-	font-family: sans-serif;
-	margin: 0px;
-	color: #243C5F;
-}
-.soria .dijitMenuBar .dijitMenuItem {
-	padding: 4px 5px;
-}
-
-.soria .dijitMenuPreviousButton, .soria .dijitMenuNextButton {
-	font-style: italic;
-}
-.soria .dijitMenuItem TD {
-	padding:1px;
-}
-
-.soria .dijitMenuPassive .dijitMenuItemHover,
-.soria .dijitMenuItemSelected {
-	background-color: #d9e6f9; /* #95a0b0; #555555; #aaaaaa; #646464;  #60a1ea; #848484; */
-	color: #243C5F;
-}
-
-.soria .dijitMenuItemIcon {
-	width: 15px;
-	height: 15px;
-}
-
-.soria .dijitMenuExpand {
-	width:15px;
-	height:15px;
-	background-image: url('images/spriteRoundedIconsSmall.png');
-	background-position: -30px top;
-}
-.dj_ie6 .soria .dijitMenuExpand {
-	background-image: url('images/spriteRoundedIconsSmall.gif');
-}
-
-.soria .dijitMenuSeparator {
-	height: 1px;
-}
-
-/* separator can be two pixels -- set border of either one to 0px to have only one */
-.soria .dijitMenuSeparatorTop {
-	border-bottom: 1px solid #fff; /*97adcb; */
-}
-
-.soria .dijitMenuSeparatorBottom {
-	border-top: 1px solid #8ba0bd;
-}
-
-/* the checked menu item */
-.soria .dijitCheckedMenuItemIconChar {
-	display: none;
-}
-
-.soria .dijitCheckedMenuItemIcon {
-	background-image: url('images/spriteCheckbox.gif');
-	background-position: -80px;
-}
-
-.soria .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
-	background-position: -64px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Menu_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Menu_rtl.css
deleted file mode 100644
index fd521af..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Menu_rtl.css
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Menu */
-
-.dijitRtl .soria .dijitMenuItem .dijitMenuItemIcon {
-	padding-left: 3px;
-	padding-right: 0px;
-}
-
-.dijitRtl .soria .dijitMenuItem .dijitMenuExpand {
-	background-position: left top;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/ProgressBar.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/ProgressBar.css
deleted file mode 100644
index 7919cf3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/ProgressBar.css
+++ /dev/null
@@ -1,33 +0,0 @@
-
-/****
-		dijit.ProgressBar
- ****/
-
-.soria .dijitProgressBar {
-	margin:2px 0px 2px 0px;
-}
-
-.soria .dijitProgressBarEmpty{
-	/* outer container and background of the bar that's not finished yet*/
-	background:#fff url("images/progressBarEmpty.png") repeat-x center center;
-	border-color: #8ba0bd;
-}
-
-.soria .dijitProgressBarTile{
-	/* inner container for finished portion when in 'tile' (image) mode */
-	background:#f0f0f0 url("images/progressBarFull.png") repeat-x center center;
-}
-
-.soria .dijitProgressBarFull {
-	border-right:1px solid #8ba0bd;
-}
-
-.soria .dijitProgressBarLabel {
-	/* Set to a color that contrasts with both the "Empty" and "Full" parts. */
-	color:#293a4b;
-}
-
-.soria .dijitProgressBarIndeterminate .dijitProgressBarTile {
-	/* use an animated gif for the progress bar in 'indeterminate' mode */
-	background:#cad2de url("images/progressBarAnim.gif") repeat-x center center;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/TimePicker.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/TimePicker.css
deleted file mode 100644
index 5f985e9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/TimePicker.css
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Time Picker */
-.soria .dijitTimePickerTick,
-.soria .dijitTimePickerMarker {
-	border-color: #b1badf;
-}
-
-.soria .dijitTimePickerTick {
-	color:white;
-}
-
-.soria .dijitTimePickerMarker {
-	background:#bed7f0 url("images/titleBar.png") repeat-x top;
-	color:#293a4b;
-	font-weight: bold;
-}
-
-.soria .dijitTimePickerItemSelected {
-	color: black;
-	background: #b9cbf1 none;
-}
-
-.soria .dijitTimePickerItemHover {
-	background: #60a1ea none;
-	color:white;
-}
-
-.soria .dijitTimePickerItemHover,
-.soria .dijitTimePickerItemSelected {
-	position: relative;
-	z-index: 10;
-}
-
-.soria .dijitTimePickerTick .dijitTimePickerItemInner {
-	font-size:0.4em;
-}
-
-.soria .dijitTimePickerItemHover .dijitTimePickerItemInner,
-.soria .dijitTimePickerItemSelected .dijitTimePickerItemInner {
-	font-size:1em;
-}
-
-.soria .dijitTimePickerMarkerHover {
-	border-top: 1px solid #94b9ef;
-}
-
-.soria .dijitTimePickerTickHover,
-.soria .dijitTimePickerTickSelected {
-	margin-top:-0.3em;
-	margin-bottom:-0.3em;
-	border-bottom: none;
-}
-
-.dijit_a11y .dijitTimePickerTickHover {
-	background-color: #CCC !important;
-	border-top: 1px solid #333 !important;
-	border-bottom: 1px solid #333 !important;
-}
-
-.dijit_a11y .dijitTimePickerMarkerHover {
-	border-bottom-width: 2px;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/TitlePane.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/TitlePane.css
deleted file mode 100644
index 0144b8d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/TitlePane.css
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * dijit.TitlePane
- *
- */
-
-.soria .dijitTitlePaneTitle {
-	background: #cccccc;
-	background:#fff url("images/titleBar.png") repeat-x top left;
-	border:1px solid #bfbfbf;
-	padding:3px 4px;
-	font-size: 0.9em;
-	font-weight: bold;
-	color: #6d6d6d;
-}
-.soria .dijitTitlePaneTitle-hover {
-	background: #f9f9f9 url("images/accordionItemActive.png") top repeat-x;
-	cursor: pointer;
-}
-
-.soria .dijitTitlePaneTitle * {
-	vertical-align: middle;
-}
-
-.soria .dijitTitlePane .dijitOpen .dijitArrowNode,
-.soria .dijitTitlePane .dijitClosed .dijitArrowNode {
-	width:15px;
-	height:15px;
-}
-
-.soria .dijitTitlePaneFocused .dijitTitlePaneTextNode {
-	color: #243C5F;
-}
-
-
-.soria .dijitOpen .dijitTitlePaneTextNode,
-.soria .dijitFixedOpen .dijitTitlePaneTextNode {
-	color: #243C5F;
-}
-
-.soria .dijitTitlePane .dijitClosed .dijitArrowNode {
-	background: url('images/spriteRoundedIconsSmall.png') no-repeat -30px top;
-}
-.dj_ie6 .soria .dijitTitlePane .dijitClosed .dijitArrowNode {
-	background:url('images/spriteRoundedIconsSmall.gif') no-repeat -30px top;
-}
-.soria .dijitTitlePane .dijitOpen .dijitArrowNode {
-	background:url('images/spriteRoundedIconsSmall.png') no-repeat -15px top;
-}
-.dj_ie6 .soria .dijitTitlePane .dijitOpen .dijitArrowNode {
-	background:url('images/spriteRoundedIconsSmall.gif') no-repeat -15px top;
-}
-.soria .dijitTitlePane .dijitArrowNodeInner {
-	display:none;
-}
-
-.dijit_a11y .dijitTitlePane .dijitOpen .dijitArrowNodeInner,
-.dijit_a11y .dijitTitlePane .dijitClosed .dijitArrowNodeInner {
-	display:inline !important;
-	font-family:monospace;
-	padding-bottom:.2em;
-}
-
-.dijit_a11y .dijitTitlePane .dijitArrowNode {
-	display:none;
-}
-
-.soria .dijitTitlePaneContentOuter {
-	background: #ffffff;
-	border:1px solid #bfbfbf;
-	border-top: 0px solid #3d3d3d;	/* w/out this, an <h1> on the top line causes a gap between the .content and .label */
-}
-.soria .dijitTitlePaneContentInner {
-	padding:10px;
-}
-/* force hasLayout to ensure borders etc, show up */
-.dj_ie6 .soria .dijitTitlePaneContentOuter,
-.dj_ie6 .soria .dijitTitlePane .dijitTitlePaneTitle {
-	zoom: 1;
-}
-
-.soria .dijitTitlePaneTextNode {
-	margin-left: 4px;
-	margin-right: 4px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/TitlePane_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/TitlePane_rtl.css
deleted file mode 100644
index 82174fa..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/TitlePane_rtl.css
+++ /dev/null
@@ -1,6 +0,0 @@
-.dijitRtl .soria .dijitTitlePane .dijitClosed .dijitArrowNode {
-	background-position: 0px top;
-}
-.dj_ie6-rtl .soria .dijitTitlePane .dijitClosed .dijitArrowNode {
-	background-position: 0px top;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Toolbar.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Toolbar.css
deleted file mode 100644
index b1d5a39..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Toolbar.css
+++ /dev/null
@@ -1,65 +0,0 @@
-.soria .dijitToolbar {
-	border-bottom: 1px solid #ccc;
-	background:#eaeaea url("images/titleBar.png") repeat-x top left;
-}
-
-/* setting a min-height on ditor toolbar */
-.dj_ie6 .soria .dijitToolbar {
-	height: 10px;
-}
-
-.soria .dijitToolbar .dijitButtonNode,
-.soria .dijitToolbar .dijitComboButton .dijitButtonContents,
-.soria .dijitToolbar .dijitComboButton .dijitDownArrowButton {
-	background: none;
-	margin: 0px;
-	padding: 0px;
-	border: none;
-	font-size: 12px;
-}
-
-.soria .dijitToolbar .dijitButton,
-.soria .dijitToolbar .dijitToggleButton,
-.soria .dijitToolbar .dijitDropDownButton,
-.soria .dijitToolbar .dijitComboButton .dijitButtonContents,
-.soria .dijitToolbar .dijitComboButton .dijitDownArrowButton {
-	background: none;
-	padding: 1px;	/* on hover etc., margin replaced w/border */
-}
-
-.soria .dijitToolbar .dijitButtonChecked,
-.soria .dijitToolbar .dijitToggleButtonChecked {
-	background-color:#d8e5f8;
-	border:1px solid #316ac5;
-	padding: 0px;
-}
-
-.soria .dijitToolbar .dijitButtonCheckedHover,
-.soria .dijitToolbar .dijitToggleButtonCheckedHover
- {
-	background-color:#9abbea;
-	border:1px solid #316ac5;
-	padding: 0px;
-}
-
-.soria .dijitToolbar .dijitButtonHover,
-.soria .dijitToolbar .dijitToggleButtonHover,
-.soria .dijitToolbar .dijitDropDownButtonHover,
-.soria .dijitToolbar .dijitComboButtonHover .dijitButtonContents,
-.soria .dijitToolbar .dijitComboButtonDownArrowHover .dijitDownArrowButton {
-	/* TODO: change this from Hover to Selected so that button is still highlighted while drop down is being used */
-	border: 1px solid #316ac5;
-	padding: 0px;
-	background-color:#9abbea;
-}
-
-.soria .dijitToolbar label {
-	padding: 3px 3px 0 6px;
-}
-
-.dj_ie .soria .dijitToolbar .dijitComboButton .dijitButtonContentsFocused,
-.dj_ie .soria .dijitToolbar .dijitComboButton .dijitDownArrowButtonFocused {
-	/* focus border doesn't appear on <td> for IE, so need to add it manually */
-	border: 1px #777 dotted !important;
-	padding: 0px;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Tree.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Tree.css
deleted file mode 100644
index a66fdc1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Tree.css
+++ /dev/null
@@ -1,122 +0,0 @@
-/* Tree */
-
-.soria .dijitTreeNode {
-    background : url('images/treeI.gif') no-repeat;
-    background-position : top left;
-    background-repeat : repeat-y;
-    zoom: 1;	/* MOW: what the heck is this doing in here? */
-}
-
-.soria .dijitTreeNodeHover {
-	/* using a transparent png so that we can still see grid lines, which are (unfortunately) behind the dijitRowNode that we are hovering over */
-	background-image: url(images/treeHover.png);
-	background-repeat: repeat;
-	background-color: none !important;
-}
-
-
-/* left vertical line (grid) for all nodes */
-.soria .dijitTreeIsLast {
-    background: url('images/treeI_half.gif') no-repeat;
-}
-
-.soria .dijitTreeLabel {
-	font-weight: normal;
-	margin-left: 3px;
-}
-
-.soria .dijitTreeIsRoot {
-    margin-left: 0;
-    background-image: none;
-}
-
-.soria .dijitTreeExpando {
-    width: 18px;
-    height: 18px;
-}
-
-.soria .dijitTreeRow {
-	/* so insert line shows up on IE when dropping after a target element */
-	padding-bottom: 2px;
-}
-
-.soria .dijitTreeContent {
-    min-height: 18px;
-    min-width: 18px;
-    padding-left:1px;
-}
-
-
-.soria .dijitTreeExpand {
-    width: 18px;
-    height: 18px;
-    background-repeat : no-repeat;
-}
-
-/* same style as IE selection */
-.soria .dijitTreeNodeEmphasized {
-    background-color: Highlight;
-    color: HighlightText;
-}
-
-/* don't use :focus due to opera and IE's lack of support on div's */
-.soria .dijitTreeLabelFocused {
-	outline: 1px invert dotted;
-}
-.soria .dijitTreeNodeSelected .dijitTreeLabel{
-	background:#b8cbec;
-}
-
-.soria .dijitTreeExpandoOpened {
-	background: url('images/spriteTree.gif') no-repeat -18px top;
-}
-
-.soria .dijitTreeExpandoClosed {
-	background-image: url('images/spriteTree.gif');
-}
-
-.soria .dijitTreeExpandoLeaf {
-	background: url('images/spriteTree.gif') no-repeat -36px top;
-}
-
-.soria .dijitTreeExpandoLoading {
-	background-image: url('images/treeExpand_loading.gif');
-}
-
-.soria .dijitTreeIcon {
-	width: 16px;
-	height: 16px;
-}
-
-.soria .dijitFolderOpened {
-	background: url('images/spriteDivIcons.gif') no-repeat -16px top;
-}
-
-.soria .dijitFolderClosed {
-	background: url('images/spriteDivIcons.gif') no-repeat top left;
-}
-
-.soria .dijitLeaf {
-	background: url('images/spriteDivIcons.gif') no-repeat -32px top;
-}
-
-/* Drag and Drop on TreeNodes
- * Put insert line on dijitTreeContent node so it's aligned w/
- * (ie, indented equally with) target element, even
- * though dijitTreeRowNode is the actual "drag object"
- */
-.soria .dijitTreeNode .dojoDndItemBefore,
-.soria .dijitTreeNode .dojoDndItemAfter {
-	border-bottom: none;
-	border-top: none;
-}
-
-.soria .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
-	/* copied from Common.css */
-	border-top: 2px solid #369;
-}
-
-.soria .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
-	/* copied from Common.css */
-	border-bottom: 2px solid #369;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Tree_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Tree_rtl.css
deleted file mode 100644
index ff83272..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/Tree_rtl.css
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-/* Tree */
-.dijitRtl .soria .dijitTreeContainer .dijitTreeNode {
-    background-image : none;
-}
-
-.dijitRtl .soria .dijitTreeContainer .dijitTreeContent {
-    padding-left: auto;
-    padding-right: 1px;
-}
-
-.dijitRtl .soria .dijitTreeContainer .dijitTreeExpandoOpened {
-	background: url('images/spriteTree_rtl.gif') no-repeat -18px top;
-}
-
-.dijitRtl .soria .dijitTreeContainer .dijitTreeExpandoClosed {
-	background-image: url('images/spriteTree_rtl.gif');
-}
-
-.dijitRtl .soria .dijitTreeContainer .dijitTreeExpandoLeaf {
-	background: none;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Button.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Button.css
deleted file mode 100644
index 1e25f90..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Button.css
+++ /dev/null
@@ -1,113 +0,0 @@
-
-/*****
-		dijit.form.Button
-		dijit.form.DropDownButton
-		dijit.form.ComboButton
-		dijit.form.ComboBox (partial)
- *****/
-
-.soria .dijitButtonNode {
-	/* enabled state - inner */
-	/* border:1px outset #a0a0a0; */
-	border: 1px solid #8ba0bd;
-	border-bottom:1px solid #657c9c;
-	padding: 0.1em 0.2em 0.2em 0.2em;
-	background: #bcd5f0 url("../images/buttonEnabled.png") repeat-x top left;
-}
-.soria .dijitSelect .dijitButtonContents {
-	border-right: none;
-}
-
-.soria .dijitButtonNode button {
-	border: 0px;
-	background-color: transparent;
-}
-
-.soria .dijitButtonText {
-	text-align: center;
-	padding: 0 0.3em;
-}
-
-.soria .dijitComboBox .dijitButtonNode {
-	border-width: 0px 0px 0px 1px;
-}
-
-.soria .dijitArrowButton {
-	color: #111;
-}
-
-.soria .dijitComboButton .dijitDownArrowButton {
-	padding-right:4px;
-}
-
-.soria .dijitComboBoxReadOnly,
-.soria .dijitSpinnerReadOnly,
-.soria .dijitSpinnerReadOnly .dijitButtonNode,
-.soria .dijitButtonDisabled .dijitButtonNode,
-.soria .dijitToggleButtonDisabled .dijitButtonNode,
-.soria .dijitDropDownButtonDisabled .dijitButtonNode,
-.soria .dijitComboButtonDisabled .dijitButtonNode,
-.soria .dijitComboBoxDisabled,
-.soria .dijitSpinnerDisabled,
-.soria .dijitSpinnerDisabled .dijitButtonNode {
-	/* disabled state - inner */
-	border-color: #b9bbdd #b9bbdd #b9bbdd #b9bbdd;
-	background:#c3d3e5 url("../images/buttonDisabled.png") top repeat-x;
-	opacity: 0.60;
-}
-.dj_ie6 .soria .dijitComboButtonDisabled .dijitButtonText {
-	/* opacity doesn't work on table node in IE, work around here */
-	color: #aaa;
-}
-.soria .dijitButtonHover .dijitButtonNode,
-.soria .dijitButtonNodeHover,
-.soria .dijitToggleButtonHover .dijitButtonNode,
-.soria .dijitDropDownButtonHover .dijitButtonNode,
-.soria .dijitComboButtonHover .dijitButtonContents,
-.soria .dijitComboButtonDownArrowHover .dijitDownArrowButton,
-.soria .dijitComboBoxHover .dijitDownArrowButton,
-.soria .dijitSpinnerUpArrowHover .dijitUpArrowButton,
-.soria .dijitSpinnerDownArrowHover .dijitDownArrowButton {
-	/* hover state - inner */
-	/* TODO: change from Hover to Selected so that button is still highlighted while drop down is being used */
-	color:#243C5F;
-	background:#acc5e2 url("../images/buttonHover.png") repeat-x top left;
-}
-
-.soria .dijitButtonActive .dijitButtonNode,
-.soria .dijitToggleButtonActive .dijitButtonNode,
-.soria .dijitDropDownButtonActive .dijitButtonNode,
-.soria .dijitComboButtonActive .dijitButtonContents,
-.soria .dijitStackController .dijitToggleButtonChecked .dijitButtonNode {
-	/* active state - inner (for when you are pressing a normal button, or
-	 * when a radio-type button is in a depressed state
-	 */
-	border-color:#657c9c;
-	background: #91b4e5 url("../images/buttonActive.png") top left repeat-x;
-}
-.soria .dijitSpinnerUpArrowActive .dijitUpArrowButton,
-.soria .dijitSpinnerDownArrowActive .dijitDownArrowButton,
-.soria .dijitComboBoxActive .dijitDownArrowButton {
-	/* same as above except don't adjust border color (it's controlled by the containing Spinner/ComboBox) */
-	background: #91b4e5 url("../images/buttonActive.png") top left repeat-x;
-}
-
-
-.soria .dijitArrowButtonInner {
-	background-image: url("../images/spriteArrows.png");
-	background-repeat: no-repeat;
-	background-position: 0px top;
-	width: 11px;
-}
-.soria .dijitLeftArrowButton .dijitArrowButtonInner {
-	background-position: -11px top;
-}
-.soria .dijitUpArrowButton .dijitArrowButtonInner {
-	background-position: -22px top;
-}
-.soria .dijitRightArrowButton .dijitArrowButtonInner {
-	background-position: -33px top;
-}
-.dj_ie6 .soria .dijitArrowButtonInner {
-	background-image: url("../images/spriteArrows.gif");
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Button_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Button_rtl.css
deleted file mode 100644
index 50a5c5e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Button_rtl.css
+++ /dev/null
@@ -1,7 +0,0 @@
-.dijitRtl .soria .dijitComboBox .dijitButtonNode {
-	border-width: 0px 0px 0px 1px;
-}
-.dijitRtl .soria .dijitSelect .dijitButtonContents {
-	border-left: none;
-	border-right-width: 1px;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Checkbox.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Checkbox.css
deleted file mode 100644
index 7ad1411..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Checkbox.css
+++ /dev/null
@@ -1,67 +0,0 @@
-
-/*
- *  CheckBox and Radio Widgets,
- *	and the CSS to embed a checkbox or radio icon inside a ToggleButton.
- *
- *	Order of images in the default sprite (from L to R, checkbox and radio in same image):
- *		checkbox	normal 	 - checked
- *							 - unchecked
- *					disabled - checked
- *							 - unchecked
- *					hover 	 - checked
- *							 - unchecked
- *
- *		radio		normal 	 - checked
- *							 - unchecked
- *					disabled - checked
- *							 - unchecked
- *					hover 	 - checked
- *							 - unchecked
-*/
-
-.soria .dijitToggleButton .dijitCheckBox,
-.soria .dijitToggleButton .dijitCheckBoxIcon {
-	background-image: url('../images/spriteCheckbox.gif');
-}
-
-.soria .dijitCheckBox,
-.soria .dijitCheckBoxIcon {		/* inside a toggle button */
-	background-image: url('../images/spriteCheckbox.gif'); /* checkbox sprite image */
-	background-repeat: no-repeat;
-	width: 16px;
-	height: 16px;
-	margin: 0;
-	padding: 0;
-}
-
-.soria .dijitCheckBox,
-.soria .dijitToggleButton .dijitCheckBoxIcon {
-	/* unchecked */
-	background-position: -16px;
-}
-
-.soria .dijitCheckBoxChecked,
-.soria .dijitToggleButtonChecked .dijitCheckBoxIcon {
-	/* checked */
-	background-position: 0px;
-}
-
-.soria .dijitCheckBoxDisabled {
-	/* disabled */
-	background-position: -48px;
-}
-
-.soria .dijitCheckBoxCheckedDisabled {
-	/* disabled but checked */
-	background-position: -32px;
-}
-
-.soria .dijitCheckBoxHover {
-	/* hovering over an unchecked enabled checkbox */
-	background-position: -80px;
-}
-
-.soria .dijitCheckBoxCheckedHover {
-	/* hovering over a checked enabled checkbox */
-	background-position: -64px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/ComboBox.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/ComboBox.css
deleted file mode 100644
index a602c90..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/ComboBox.css
+++ /dev/null
@@ -1,12 +0,0 @@
-.soria .dijitComboBox .dijitArrowButton .dijitArrowButtonInner {
-	background:url("../images/spriteArrows.png") no-repeat left center;
-	width: 11px;
-}
-
-.dj_ie6 .soria .dijitComboBox .dijitArrowButton .dijitArrowButtonInner {
-	background:url("../images/spriteArrows.gif") no-repeat left center;
-}
-
-.soria .dijitComboBoxHover .dijitArrowButtonInner {
-	/* TODO: url("images/arrowDownHover.png") but in IE6 it flickers some? */
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Common.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Common.css
deleted file mode 100644
index 2f6fddc..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Common.css
+++ /dev/null
@@ -1,100 +0,0 @@
-
-/****
-		dijit.form.TextBox
-		dijit.form.ValidationTextBox
-		dijit.form.SerializableTextBox
-		dijit.form.RangeBoundTextBox
-		dijit.form.NumberTextBox
-		dijit.form.CurrencyTextBox
-		dijit.form.NumberSpinner
-		dijit.form.ComboBox (partial)
- ****/
-
-.soria .dijitInputField INPUT,
-.soria .dijitTextBox,
-.soria .dijitComboBox,
-.soria .dijitSpinner {
-	margin: 0em 0.1em;
-}
-
-.soria .dijitTextBox,
-.soria .dijitComboBox,
-.soria .dijitSpinner,
-.soria .dijitInlineEditor input,
-.soria .dijitTextArea {
-	/* 	For all except dijit.form.NumberSpinner:  the actual input element.
-		For TextBox, ComboBox, Spinner: the table that contains the input.
-		Otherwise the actual input element.
-	*/
-	background:#fff url("../images/validationInputBg.png") repeat-x top left;
-	border:1px solid #8ba0bd;
-	line-height: normal;
-}
-
-.dj_ie6 .soria .dijitTextBox,
-.dj_ie6 .soria .dijitComboBox,
-.dj_ie6 .soria .dijitSpinner,
-.dj_ie6 .soria .dijitInlineEditor input,
-.dj_ie6 .soria .dijitTextArea {
-	background:#fff url('../images/validationInputBg.gif') repeat-x top left;
-}
-
-.soria .dijitComboBox .dijitButtonNode {
-	padding: 0 0.2em;
-}
-.soria .dijitComboBox .dijitButtonNode,
-.soria .dijitSpinner .dijitButtonNode {
-	/* line between the input area and the drop down button */
-	border-color: #8ba0bd;
-	border-left: 1px solid #8ba0bd;
-}
-
-.soria .dijitTextBoxFocused,
-.soria .dijitComboBoxFocused,
-.soria .dijitSpinnerFocused, .soria .dijitSpinnerUpArrowActive, .soria .dijitSpinnerDownArrowActive,
-.soria .dijitTextAreaFocused {
-	/* input field when focused (ie: typing affects it) */
-	border-color:#406b9b;
-}
-.soria .dijitComboBoxFocused .dijitButtonNode,
-.soria .dijitSpinnerFocused .dijitButtonNode,
-.soria .dijitSpinnerUpArrowActive .dijitButtonNode,
-.soria .dijitSpinnerDownArrowActive .dijitButtonNode {
-	border-left-color:#8ba0bd;
-}
-.soria .dijitSpinnerFocused .dijitDownArrowButton,
-.soria .dijitSpinnerUpArrowActive .dijitDownArrowButton,
-.soria .dijitSpinnerDownArrowActive .dijitDownArrowButton {
-	border-top-color:#8ba0bd;
-}
-
-.soria .dijitError {
-	border-color:#f3d118;
-	background-color:#f9f7ba;
-	background-image:none;
-}
-.dj_ie6 .soria .dijitError INPUT {
-	/* background-color: transparent on an <input> doesn't work on IE6 */
-	background-color:#f9f7ba !important;
-}
-
-.soria .dijitErrorFocused {
-	background-color:#ff6;
-	background-image:none;
-}
-.dj_ie6 .soria .dijitErrorFocused INPUT {
-	/* background-color: transparent on an <input> doesn't work on IE6 */
-	background-color:#ff6 !important;
-}
-
-/* Validation errors  */
-.soria .dijitValidationIcon {
-	/* prevent height change when widget goes from valid to invalid state */
-	width: 16px;
-	background: transparent url('../images/warning.png') no-repeat center center;
-}
-
-/* The highlight is shown in the ComboBox menu. */
-.soria .dijitComboBoxHighlightMatch {
-	background-color:#f9f7ba;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Common_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Common_rtl.css
deleted file mode 100644
index 6d51812..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Common_rtl.css
+++ /dev/null
@@ -1,7 +0,0 @@
-.dijitRtl .soria .dijitComboBox .dijitButtonNode,
-.dijitRtl .soria .dijitSpinner .dijitButtonNode {
-	/* line between the input area and the drop down button */
-	border-color: #8ba0bd;
-	border-left: 0px solid #8ba0bd;
-	border-right: 1px solid #8ba0bd;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/RadioButton.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/RadioButton.css
deleted file mode 100644
index 7b875db..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/RadioButton.css
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- *  CheckBox and Radio Widgets,
- *	and the CSS to embed a checkbox or radio icon inside a ToggleButton.
- *
- *	Order of images in the default sprite (from L to R, checkbox and radio in same image):
- *		checkbox	normal 	 - checked
- *							 - unchecked
- *					disabled - checked
- *							 - unchecked
- *					hover 	 - checked
- *							 - unchecked
- *
- *		radio		normal 	 - checked
- *							 - unchecked
- *					disabled - checked
- *							 - unchecked
- *					hover 	 - checked
- *							 - unchecked
-*/
-
-.soria .dijitToggleButton .dijitRadio,
-.soria .dijitToggleButton .dijitRadioIcon {
-	background-image: url('../images/spriteRadio.gif');
-}
-
-.soria .dijitRadio,
-.soria .dijitRadioIcon	{		/* inside a toggle button */
-	background-image: url('../images/spriteRadio.gif'); /* checkbox sprite image */
-	background-repeat: no-repeat;
-	width: 16px;
-	height: 16px;
-	margin: 0;
-	padding: 0;
-}
-
-.soria .dijitRadio,
-.soria .dijitToggleButton .dijitRadioIcon {
-	/* unselected */
-	background-position: -16px;
-}
-
-.soria .dijitRadioChecked,
-.soria .dijitToggleButtonChecked .dijitRadioIcon {
-	/* selected */
-	background-position: 0px;
-}
-
-.soria .dijitRadioDisabled {
-	/* unselected and disabled */
-	background-position: -48px;
-}
-
-.soria .dijitRadioCheckedDisabled {
-	/* selected but disabled */
-	background-position: -32px;
-}
-
-.soria .dijitRadioHover {
-	/* hovering over an unselected enabled radio button */
-	background-position: -80px;
-}
-
-.soria .dijitRadioCheckedHover {
-	/* hovering over a selected enabled radio button */
-	background-position: -64px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Select.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Select.css
deleted file mode 100644
index 80c7f98..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Select.css
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Cursor States */
-.soria .dijitSelectDisabled * {
-    cursor: not-allowed !important;
-}
-.soria .dijitSelectReadOnly * {
-    cursor: default !important;
-}
-.soria .dijitSelect .dijitButtonNode {
-	padding: 0px;
-}
-
-/* Make unselected "look" more like a text box and less like a button */
-.soria .dijitSelect .dijitButtonContents {
-	padding-top: 1px;
-    background:#fff url("../images/validationInputBg.png") repeat-x top left;
-    #background:#fff url('../images/validationInputBg.gif') repeat-x top left;
-}
-.soria .dijitSelectHover .dijitButtonContents,
-.soria .dijitSelectActive .dijitButtonContents,
-.soria .dijitSelectOpened .dijitButtonContents,
-.soria .dijitSelectDisabled .dijitButtonContents,
-.soria .dijitSelectReadOnly .dijitButtonContents{
-	background: transparent none;
-}
-.dj_ie .soria .dijitSelect .dijitButtonContents {
-	padding-top: 0px;
-}
-
-/* Mirror DropDownButton */
-.soria .dijitSelectDisabled .dijitButtonNode {
-    border-color: #b9bbdd #b9bbdd #b9bbdd #b9bbdd;
-    background:#c3d3e5 url("../images/buttonDisabled.png") top repeat-x;
-}
-.dj_ie .soria .dijitSelectDisabled  .dijitButtonNode * {
-	filter: gray() alpha(opacity=50);
-}
-
-.soria .dijitSelectHover .dijitButtonNode {
-    color:#000;
-    background:#acc5e2 url("../images/buttonHover.png") repeat-x top left;
-}
-
-.soria .dijitSelectActive .dijitButtonNode,
-.soria .dijitSelectOpened .dijitButtonNode {
-    border-color:#657c9c;
-    background: #91b4e5 url("../images/buttonActive.png") top left repeat-x;
-}
-
-/* Make the menu look more combobox-like */
-.soria .dijitSelectMenu td {
-	padding: 0em;
-}
-.soria .dijitSelectMenu .dijitMenuItemIcon {
-	margin: 0.1em 0.2em;
-	display: none;
-}
-.soria .dijitSelectMenu .dijitMenuItemLabel,
-.soria .dijitSelectMenu .dijitMenuArrowCell {
-	padding: 0.1em 0.2em;
-}
-
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Slider.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Slider.css
deleted file mode 100644
index 23374fe..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Slider.css
+++ /dev/null
@@ -1,152 +0,0 @@
-
-/****
- 	SLIDER
-****/
-
-.soria .dijitSliderProgressBarH {
-	border-color: #b1badf;
-	background: #c0c2c5 url("../images/sliderFull.png") repeat-x top left;
-}
-
-.soria .dijitSliderProgressBarV {
-	border-color: #b1badf;
-	background: #c0c2c5 url("../images/sliderFullVertical.png") repeat-y bottom left;
-}
-
-.soria .dijitSliderFocused .dijitSliderProgressBarH,
-.soria .dijitSliderFocused .dijitSliderLeftBumper {
-	background-image:url("../images/sliderFullFocus.png");
-}
-
-.soria .dijitSliderFocused .dijitSliderProgressBarV,
-.soria .dijitSliderFocused .dijitSliderBottomBumper {
-	background-image:url("../images/sliderFullVerticalFocus.png");
-}
-
-.soria .dijitSliderRemainingBarV {
-	border-color: #b4b4b4;
-	background: #dcdcdc url("../images/sliderEmptyVertical.png") repeat-y bottom left;
-}
-
-.soria .dijitSliderRemainingBarH {
-	border-color: #b4b4b4;
-	background: #dcdcdc url("../images/sliderEmpty.png") repeat-x top left;
-}
-
-.soria .dijitSliderBar {
-	border-style: solid;
-	outline:1px;
-	/* border-color: #b4b4b4; */
-}
-.soria .dijitSliderFocused .dijitSliderBar {
-	border-color:#8ba0bd;
-}
-
-.dijit_a11y .dijitSliderProgressBar {
-	background-color:#333 !important;
-}
-
-.soria .dijitSliderImageHandleH {
-	border:0px;
-	width:15px;
-	height:18px;
-	background:url("../images/preciseSliderThumb.png") no-repeat center top;
-	cursor:pointer;
-}
-.soria .dijitSliderFocused .dijitSliderImageHandleH {
-	background-image:url("../images/preciseSliderThumbFocus.png");
-	#background-image:url("../images/preciseSliderThumbFocus.gif");
-}
-
-.dj_ie6 .soria .dijitSliderImageHandleH {
-	background-image:url("../images/preciseSliderThumb.gif");
-}
-
-.soria .dijitSliderLeftBumper {
-	border-left-width: 1px;
-	border-color: #aab0bb;
-	background: #c0c2c5 url("../images/sliderFull.png") repeat-x top left;
-}
-
-.soria .dijitSliderRightBumper {
-	background: #dcdcdc url("../images/sliderEmpty.png") repeat-x top left;
-	border-color: #b4b4b4;
-	border-right-width: 1px;
-}
-
-.soria .dijitSliderImageHandleV {
-	border:0px;
-	width:20px;
-	height:15px;
-	background:url("../images/sliderThumb.png") no-repeat center center;
-	#background:url("../images/sliderThumb.gif") no-repeat center center;
-	cursor:pointer;
-}
-
-.soria .dijitSliderFocused .dijitSliderImageHandleV {
-	background-image:url("../images/sliderThumbFocus.png");
-	#background-image:url("../images/sliderThumbFocus.gif");
-}
-
-.soria .dijitSliderBottomBumper {
-	border-bottom-width: 1px;
-	border-color: #aab0bb;
-	background: #c0c2c5 url("../images/sliderFullVertical.png") repeat-y bottom left;
-}
-
-.soria .dijitSliderTopBumper {
-	background: #dcdcdc url("../images/sliderEmptyVertical.png") repeat-y top left;
-	border-color: #b4b4b4;
-	border-top-width: 1px;
-}
-
-.soria .dijitSliderIncrementIconH,
-.soria .dijitSliderIncrementIconV {
-	background:url('../images/spriteRoundedIconsSmall.png') no-repeat -45px top;
-	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -45px top;
-	width:15px; height:15px;
-	cursor:pointer;
-}
-.soria .dijitSliderIncrementIconH {
-	background:url('../images/spriteRoundedIconsSmall.png') no-repeat -30px top;
-	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -30px top;
-}
-
-.soria .dijitSliderDecrementIconH,
-.soria .dijitSliderDecrementIconV {
-	width:15px;
-	height:15px;
-	cursor:pointer;
-	background:url('../images/spriteRoundedIconsSmall.png') no-repeat -15px top;
-	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -15px top;
-}
-.soria .dijitSliderDecrementIconH {
-	background:url('../images/spriteRoundedIconsSmall.png') no-repeat 0px top;
-	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat 0px top;
-}
-
-.soria .dijitSliderButtonInner {
-	visibility:hidden;
-}
-
-.soria .dijitSliderReadOnly *,
-.soria .dijitSliderDisabled * {
-	border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
-	color: #bdbdbd;
-}
-.soria .dijitSliderReadOnly .dijitSliderDecrementIconH,
-.soria .dijitSliderDisabled .dijitSliderDecrementIconH {
-	background-position: 0px -15px;
-}
-.soria .dijitSliderReadOnly .dijitSliderIncrementIconH,
-.soria .dijitSliderDisabled .dijitSliderIncrementIconH {
-	background-position: -30px -15px;
-}
-.soria .dijitSliderReadOnly .dijitSliderDecrementIconV,
-.soria .dijitSliderDisabled .dijitSliderDecrementIconV {
-	background-position: -15px -15px;
-}
-.soria .dijitSliderReadOnly .dijitSliderIncrementIconV,
-.soria .dijitSliderDisabled .dijitSliderIncrementIconV {
-	background-position: -45px -15px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Slider_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Slider_rtl.css
deleted file mode 100644
index 2f7a08a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/Slider_rtl.css
+++ /dev/null
@@ -1,36 +0,0 @@
-
-/* Slider */
-
-.dijitRtl .soria .dijitSliderProgressBarH,
-.dijitRtl .soria .dijitSliderRemainingBarH,
-.dijitRtl .soria .dijitSliderLeftBumper,
-.dijitRtl .soria .dijitSliderRightBumper,
-.dijitRtl .soria .dijitSliderTopBumper {
-	background-position: top right;
-}
-
-.dijitRtl .soria .dijitSliderProgressBarV,
-.dijitRtl .soria .dijitSliderRemainingBarV,
-.dijitRtl .soria .dijitSliderBottomBumper {
-	background-position: bottom right;
-}
-
-.dijitRtl .soria .dijitSliderLeftBumper {
-	border-left-width: 0px;
-	border-right-width: 1px;
-}
-
-.dijitRtl .soria .dijitSliderRightBumper {
-	border-left-width: 1px;
-	border-right-width: 0px;
-}
-
-.dijitRtl .soria .dijitSliderIncrementIconH {
-	background:url('../images/spriteRoundedIconsSmall.png') no-repeat left top;
-	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat left top;
-}
-
-.dijitRtl .soria .dijitSliderDecrementIconH {
-	background:url('../images/spriteRoundedIconsSmall.png') no-repeat -30px top;
-	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -30px top;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/TimeTextBox.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/TimeTextBox.css
deleted file mode 100644
index bf67b66..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/form/TimeTextBox.css
+++ /dev/null
@@ -1 +0,0 @@
-@CHARSET "UTF-8";
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/accordionItemActive.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/accordionItemActive.gif
deleted file mode 100644
index 249a153..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/accordionItemActive.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/accordionItemActive.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/accordionItemActive.png
deleted file mode 100644
index 92c7431..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/accordionItemActive.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/buttonActive.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/buttonActive.png
deleted file mode 100644
index f815983..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/buttonActive.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/buttonDisabled.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/buttonDisabled.png
deleted file mode 100644
index f76e4ab..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/buttonDisabled.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/buttonEnabled.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/buttonEnabled.png
deleted file mode 100644
index 3c55c83..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/buttonEnabled.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/buttonHover.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/buttonHover.png
deleted file mode 100644
index a22ebda..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/buttonHover.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/dndCopy.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/dndCopy.png
deleted file mode 100644
index baecd7c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/dndCopy.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/dndMove.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/dndMove.png
deleted file mode 100644
index 07f878c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/dndMove.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/dndNoCopy.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/dndNoCopy.png
deleted file mode 100644
index 9bf9c33..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/dndNoCopy.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/dndNoMove.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/dndNoMove.png
deleted file mode 100644
index cb8bd8b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/dndNoMove.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/editor.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/editor.gif
deleted file mode 100644
index 750c6b9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/editor.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/editorDisabled.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/editorDisabled.gif
deleted file mode 100644
index e40460d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/editorDisabled.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/editorDisabled_rtl.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/editorDisabled_rtl.gif
deleted file mode 100644
index a0f6c10..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/editorDisabled_rtl.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/editor_rtl.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/editor_rtl.gif
deleted file mode 100644
index a9740c2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/editor_rtl.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/preciseSliderThumb.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/preciseSliderThumb.gif
deleted file mode 100644
index 53b33e5..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/preciseSliderThumb.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/preciseSliderThumb.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/preciseSliderThumb.png
deleted file mode 100644
index 045bf35..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/preciseSliderThumb.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/preciseSliderThumbFocus.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/preciseSliderThumbFocus.gif
deleted file mode 100644
index 8c6f92e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/preciseSliderThumbFocus.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/preciseSliderThumbFocus.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/preciseSliderThumbFocus.png
deleted file mode 100644
index c235849..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/preciseSliderThumbFocus.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/progressBarAnim.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/progressBarAnim.gif
deleted file mode 100644
index 73e25e1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/progressBarAnim.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/progressBarEmpty.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/progressBarEmpty.png
deleted file mode 100644
index 04d81df..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/progressBarEmpty.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/progressBarFull.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/progressBarFull.png
deleted file mode 100644
index bed17b3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/progressBarFull.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderEmpty.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderEmpty.png
deleted file mode 100644
index 99fbd72..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderEmpty.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderEmptyVertical.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderEmptyVertical.png
deleted file mode 100644
index 2d497e3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderEmptyVertical.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderFull.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderFull.png
deleted file mode 100644
index 171eb54..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderFull.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderFullFocus.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderFullFocus.png
deleted file mode 100644
index 0956a72..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderFullFocus.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderFullVertical.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderFullVertical.png
deleted file mode 100644
index 35845da..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderFullVertical.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderFullVerticalFocus.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderFullVerticalFocus.png
deleted file mode 100644
index 9b158bb..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderFullVerticalFocus.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderThumb.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderThumb.gif
deleted file mode 100644
index 29899a4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderThumb.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderThumb.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderThumb.png
deleted file mode 100644
index b6abbd2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderThumb.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderThumbFocus.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderThumbFocus.gif
deleted file mode 100644
index f8d306f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderThumbFocus.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderThumbFocus.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderThumbFocus.png
deleted file mode 100644
index 73ee705..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/sliderThumbFocus.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/splitContainerSizerH-thumb.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/splitContainerSizerH-thumb.png
deleted file mode 100644
index 0e8f397..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/splitContainerSizerH-thumb.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/splitContainerSizerH.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/splitContainerSizerH.png
deleted file mode 100644
index 7cdf79a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/splitContainerSizerH.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/splitContainerSizerV-thumb.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/splitContainerSizerV-thumb.png
deleted file mode 100644
index 7f12fed..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/splitContainerSizerV-thumb.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/splitContainerSizerV.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/splitContainerSizerV.png
deleted file mode 100644
index 9ff14d6..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/splitContainerSizerV.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteArrows.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteArrows.gif
deleted file mode 100644
index fc81207..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteArrows.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteArrows.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteArrows.png
deleted file mode 100644
index 73aa700..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteArrows.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteCheckbox.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteCheckbox.gif
deleted file mode 100644
index d2c4ebf..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteCheckbox.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteCheckbox.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteCheckbox.png
deleted file mode 100644
index e992330..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteCheckbox.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteDivIcons.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteDivIcons.gif
deleted file mode 100644
index f5c58e4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteDivIcons.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteDivIcons.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteDivIcons.png
deleted file mode 100644
index d76325f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteDivIcons.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteRadio.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteRadio.gif
deleted file mode 100644
index 8dd6e57..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteRadio.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteRadio.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteRadio.png
deleted file mode 100644
index 14c1080..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteRadio.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteRoundedIconsSmall.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteRoundedIconsSmall.gif
deleted file mode 100644
index 795ea84..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteRoundedIconsSmall.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteRoundedIconsSmall.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteRoundedIconsSmall.png
deleted file mode 100644
index 10c0d13..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteRoundedIconsSmall.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteRoundedIconsSmallBl.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteRoundedIconsSmallBl.gif
deleted file mode 100644
index 6758181..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteRoundedIconsSmallBl.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteRoundedIconsSmallBl.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteRoundedIconsSmallBl.png
deleted file mode 100644
index 2c9f51a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteRoundedIconsSmallBl.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteTree.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteTree.gif
deleted file mode 100644
index e546e28..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteTree.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteTree.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteTree.png
deleted file mode 100644
index 33ae07b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteTree.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteTree_rtl.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteTree_rtl.gif
deleted file mode 100644
index bbcc64b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteTree_rtl.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteTree_rtl.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteTree_rtl.png
deleted file mode 100644
index b06afdb..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/spriteTree_rtl.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabBottomActiveC.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabBottomActiveC.gif
deleted file mode 100644
index fb61df9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabBottomActiveC.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabBottomActiveSpriteLR.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabBottomActiveSpriteLR.gif
deleted file mode 100644
index 7c2ed86..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabBottomActiveSpriteLR.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabBottomEnabledC.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabBottomEnabledC.gif
deleted file mode 100644
index 0a5f0f8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabBottomEnabledC.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabBottomEnabledSpriteLR.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabBottomEnabledSpriteLR.gif
deleted file mode 100644
index a77da39..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabBottomEnabledSpriteLR.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabBottomHoverC.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabBottomHoverC.gif
deleted file mode 100644
index 47b9da2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabBottomHoverC.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabBottomHoverSpriteLR.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabBottomHoverSpriteLR.gif
deleted file mode 100644
index 59f3edd..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabBottomHoverSpriteLR.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabContainerSprite.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabContainerSprite.gif
deleted file mode 100644
index f0b3842..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabContainerSprite.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabLeftChecked.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabLeftChecked.gif
deleted file mode 100644
index 3e7475a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabLeftChecked.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabRightChecked.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabRightChecked.gif
deleted file mode 100644
index ec4b659..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabRightChecked.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabStripe.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabStripe.gif
deleted file mode 100644
index 51a2d40..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabStripe.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabStripeBottom.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabStripeBottom.gif
deleted file mode 100644
index 41b1ac0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabStripeBottom.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabStripeLeft.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabStripeLeft.gif
deleted file mode 100644
index b2214fa..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabStripeLeft.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabStripeRight.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabStripeRight.gif
deleted file mode 100644
index bff3115..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tabStripeRight.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/titleBar.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/titleBar.png
deleted file mode 100644
index 93c4146..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/titleBar.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/titleBarActive.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/titleBarActive.png
deleted file mode 100644
index fb8a2e6..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/titleBarActive.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorDown.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorDown.gif
deleted file mode 100644
index 9c38495..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorDown.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorDown.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorDown.png
deleted file mode 100644
index d75af71..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorDown.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorLeft.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorLeft.gif
deleted file mode 100644
index fc947e0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorLeft.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorLeft.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorLeft.png
deleted file mode 100644
index f3de66a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorLeft.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorRight.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorRight.gif
deleted file mode 100644
index b0e8097..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorRight.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorRight.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorRight.png
deleted file mode 100644
index 64190ee..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorRight.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorUp.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorUp.gif
deleted file mode 100644
index 54bcf65..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorUp.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorUp.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorUp.png
deleted file mode 100644
index 7f7a5d8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/tooltipConnectorUp.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/treeExpand_loading.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/treeExpand_loading.gif
deleted file mode 100644
index db9ddd0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/treeExpand_loading.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/treeHover.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/treeHover.png
deleted file mode 100644
index cd6d28b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/treeHover.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/treeI.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/treeI.gif
deleted file mode 100644
index 6f669e2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/treeI.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/treeI_half.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/treeI_half.gif
deleted file mode 100644
index e5fd015..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/treeI_half.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/treeI_half_rtl.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/treeI_half_rtl.gif
deleted file mode 100644
index 44ad021..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/treeI_half_rtl.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/treeI_rtl.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/treeI_rtl.gif
deleted file mode 100644
index 0d32a2f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/treeI_rtl.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/validationInputBg.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/validationInputBg.gif
deleted file mode 100644
index c28475c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/validationInputBg.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/validationInputBg.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/validationInputBg.png
deleted file mode 100644
index f3039f9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/validationInputBg.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/warning.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/warning.png
deleted file mode 100644
index c52f83d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/images/warning.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/AccordionContainer.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/AccordionContainer.css
deleted file mode 100644
index 1347e51..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/AccordionContainer.css
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * dijit.layout.Accordioncontainer
- *
- */
-
-.soria .dijitAccordionContainer {
-	border-color: #b1badf;
-	background-color: #fff;
-}
-
-/* common */
-
-.soria .dijitAccordionTitle {
-	background:#fafafa url("../images/titleBar.png") repeat-x top left;
-	border-top: 1px solid #b9bbdd;
-	padding: 5px 4px 6px 8px;
-	cursor:pointer;
-	font-size: 0.9em;
-	font-weight: bold;
-	color: #373941;
-}
-
-.soria .dijitAccordionTitle-selected  {
-	background: #f9f9f9 url("../images/accordionItemActive.png") top repeat-x;
-	font-weight: bold;
-	border-top: 1px solid #b9bbdd;
-	border-bottom: 1px solid #b9bbdd;
-	padding: 5px 4px 5px 8px;
-	cursor: default;
-	color: #243C5F;
-}
-
-.soria .dijitAccordionArrow {
-	background:url("../images/spriteRoundedIconsSmallBl.gif") no-repeat -30px top;
-	width:15px;
-	height:15px;
-	margin-top:-1px;
-}
-
-.soria .dijitAccordionTitle-selected .dijitAccordionArrow {
-	background:url("../images/spriteRoundedIconsSmallBl.gif") no-repeat -15px top;
-	margin-top:-1px;
-}
-
-.soria .dijitAccordionText {
-	margin-left: 4px;
-	margin-right: 4px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/AccordionContainer_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/AccordionContainer_rtl.css
deleted file mode 100644
index f357460..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/AccordionContainer_rtl.css
+++ /dev/null
@@ -1,8 +0,0 @@
-.dijitRtl .soria .dijitAccordionArrow {
-	background-position: 0px top;
-}
-
-.dijitRtl .soria .dijitAccordionTitle-selected .dijitAccordionArrow {
-	/* same rule as LTR mode, just listed to override previous rule in this file */
-	background-position: -15px top;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/BorderContainer.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/BorderContainer.css
deleted file mode 100644
index a170e83..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/BorderContainer.css
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * dijit.layout.BorderContainer
- *
- */
-
-.soria .dijitBorderContainer {
-	background-color: #e1ebfb;
-	padding: 5px;
-}
-
-.soria .dijitSplitContainer-child,
-.soria .dijitBorderContainer-child {
-	/* By default put borders on all children of BorderContainer,
-	 *  to give illusion of borders on the splitters themselves.
-	 */
-	border: 1px #b1badf solid;
-}
-
-.soria .dijitBorderContainer-dijitTabContainerTop,
-.soria .dijitBorderContainer-dijitTabContainerBottom,
-.soria .dijitBorderContainer-dijitTabContainerLeft,
-.soria .dijitBorderContainer-dijitTabContainerRight {
-	/* except that TabContainer defines borders on it's sub-nodes (tablist and dijitTabPaneWrapper),
-	 * so no border on domNode
-	 */
-	 border: none;
-}
-
-.soria .dijitBorderContainer-dijitBorderContainer {
-	/* also, make nested BorderContainers look like a single big widget with lots of splitters */
-	border: none;
-	padding: 0px;
-}
-
-
-.soria .dijitSplitterH,
-.soria .dijitGutterH {
-	background: #E1EBFB;
-	border:0;
-	border-left:0px solid #d3d3d3;
-	border-right:0px solid #d3d3d3;
-	height:5px;
-}
-
-.soria .dijitSplitterH .dijitSplitterThumb {
-	background:#B0B0B0 none;
-	height:1px;
-	top:2px;
-	width:19px;
-}
-
-.soria .dijitSplitterV,
-.soria .dijitGutterV {
-	background: #E1EBFB;
-	border:0;
-	border-top:0px solid #d3d3d3;
-	border-bottom:0px solid #d3d3d3;
-	width:5px;
-}
-
-.soria .dijitSplitterV .dijitSplitterThumb {
-	background:#B0B0B0 none;
-	height:19px;
-	left:2px;
-	width:1px;
-}
-
-/* active splitter */
-.soria .dijitSplitterActive {
-	font-size: 1px;
-	background-image: none;
-	background-color: #aaa;
-	-moz-opacity: 0.6;
-	opacity: 0.6;
-	filter: Alpha(Opacity=60);
-	margin: 0;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/ContentPane.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/ContentPane.css
deleted file mode 100644
index d1492d5..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/ContentPane.css
+++ /dev/null
@@ -1,21 +0,0 @@
-/* ContentPane */
-
-.soria .dijitContentPane {
-    padding: 0px;
-}
-
-/* nested layouts */
-.soria .dijitTabContainerTop-dijitContentPane,
-.soria .dijitTabContainerLeft-dijitContentPane,
-.soria .dijitTabContainerBottom-dijitContentPane,
-.soria .dijitTabContainerRight-dijitContentPane,
-.soria .dijitAccordionContainer-dijitContentPane {
-    background-color: #fff;
-    padding: 5px;
-}
-
-.soria .dijitSplitContainer-dijitContentPane,
-.soria .dijitBorderContainer-dijitContentPane {
-    background-color: #fff;		/* override background-color setting on parent .dijitBorderContainer */
-    padding: 5px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/SplitContainer.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/SplitContainer.css
deleted file mode 100644
index e066a3c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/SplitContainer.css
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * dijit.layout.SplitContainer
- *
- */
-
-.soria .dijitSplitContainerSizerH {
-	background:url("../images/splitContainerSizerV.png") repeat-y #cddef4;
-	border:0;
-	border-left:0px solid #436496;
-	border-right:0px solid #436496;
-	width:5px;
-}
-
-.soria .dijitSplitContainerSizerH .thumb {
-	background:url("../images/splitContainerSizerV-thumb.png") no-repeat #ccc;
-	left:1px;
-	width:2px;
-	height:19px;
-}
-
-.soria .dijitSplitContainerSizerV {
-	background:url("../images/splitContainerSizerH.png") repeat-x #cddef4;
-	border:0;
-	border-top:0px solid #436496;
-	border-bottom:0px solid #436496;
-	height:2px;
-}
-
-.soria .dijitSplitContainerSizerV .thumb {
-	background:url("../images/splitContainerSizerH-thumb.png") no-repeat #ccc;
-	top:1px;
-	width:19px;
-	height:5px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/TabContainer.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/TabContainer.css
deleted file mode 100644
index 53c05b0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/TabContainer.css
+++ /dev/null
@@ -1,520 +0,0 @@
-/**
- * dijit.layout.TabContainer
- *
- * To style TabContainer with rounded corners
- * you can use these classes: .dijitTab (left), .dijitTabContent (center), dijitTabInnerDiv (right)
- * For tabs aligned to top you can style a stripe div right underneath the tabs using .dijitTabStripe
- */
-
-/* Classes for all types of tabs (top/bottom/left/right) */
-
- .soria .dijitTabContainer .tabStripRBtn {
-	margin-right: 21px;
-}
- .soria .dijitTabContainer .tabStripLBtn {
-	margin-left: 21px;
-}
-
- .soria .nowrapTabStrip .dijitTab {
-	top: 2px;
-}
-
- .soria .dijitTabContainerBottom-tabs .dijitTab {
-	top: -1px;
-	bottom: 2px;
-}
-
- .soria .dijitTabContainer .tabStripMenuButton-Hover {
-	cursor: pointer;
-}
-
-/* Tabs, shared classes */
-.soria .dijitTabPaneWrapper {
-	background:#fff;
-	border:1px solid #B1BADF;
-	margin: 0;
-	padding-left: 0px;
-}
-
-.soria .dijitTabInnerDiv {
-	padding:0px 3px 0px 0px;
-	margin: 0 0 0 4px;
-	background: url("../images/tabContainerSprite.gif") no-repeat;
-	background-position: right -400px;
-}
-
-.soria .dijitTab {
-	line-height:normal;
-	margin:0 2px 0 0;	/* space between one tab and the next in top/bottom mode */
-	padding:0px;
-	background: url("../images/tabContainerSprite.gif") no-repeat 0 -300px;
-	color: #243C5F;
-	border-bottom: 1px #B1BADF solid;
-}
-
-.soria .dijitTabInnerDiv .dijitTabContent {
-	padding:4px 3px 2px 4px;
-	background: url("../images/tabContainerSprite.gif") repeat-x 0 -350px;
-	position: relative;
-}
-
-
-
-.soria .dijitTabListWrapper {
-	z-index: 10;
-}
-
-/* hovered tab */
-.soria .dijitTabHover {
-	color: #243C5F;
-	background: url("../images/tabContainerSprite.gif") no-repeat 0px -150px;
-}
-
-.soria .dijitTabHover .dijitTabInnerDiv {
-	background: url("../images/tabContainerSprite.gif") no-repeat right -250px;
-}
-
-.soria .dijitTabHover .dijitTabInnerDiv .dijitTabContent {
-	background: url("../images/tabContainerSprite.gif") repeat-x 0 -200px;
-}
-
-/* checked tab*/
-.soria .dijitTabChecked,
-.soria .dijitTabCloseButtonChecked
-{
-	/* the selected tab (with or without hover) */
-	background: url("../images/tabContainerSprite.gif") no-repeat 0px -0px;
-}
-
-.soria .dijitTabChecked .dijitTabInnerDiv {
-	background: url("../images/tabContainerSprite.gif") no-repeat right -100px;
-}
-
-.soria .dijitTabChecked .dijitTabInnerDiv .dijitTabContent {
-	background: url("../images/tabContainerSprite.gif") repeat-x 0 -50px;
-	color: #243C5F !important;
-}
-
-/* Nested Tabs */
-
-.soria .dijitTabContainerTabListNested {
-	background: #F0F4FC;
-	background: #D9E9F9;
-	border: none;
-}
-.soria .dijitTabContainerTabListNested .dijitTab {
-	background: none;
-	border: none;
-	top: 0px;	/* override top:1px setting of top-level tabs */
-}
-.soria .dijitTabContainerTabListNested .dijitTab .dijitTabInnerDiv,
-.soria .dijitTabContainerTabListNested .dijitTab .dijitTabContent {
-	background: none;
-}
-.soria .dijitTabContainerTabListNested .dijitTabHover .dijitTabContent .tabLabel {
-	text-decoration: underline;
-}
-.soria .dijitTabContainerTabListNested .dijitTabChecked .tabLabel {
-	text-decoration: underline;
-	font-weight: bold;
-}
-.soria .dijitTabContainerSpacerNested .dijitTabSpacer {
-	/* thinner line between tab (labels) and content */
-	height: 0px;
-}
-.soria .dijitTabPaneWrapperNested {
-	border: none;	/* prevent double border */
-}
-
-
-/* Close Button */
-.soria .dijitTab .closeImage {
-	width: 15px;
-	height: 15px;
-	background: url("../images/spriteRoundedIconsSmall.png") no-repeat -60px top;
-	margin-top: -1px;
-}
-.dj_ie6 .soria .dijitTab .dijitClosable .closeImage {
-	background: url("../images/spriteRoundedIconsSmall.gif") no-repeat -60px top;
-}
-
-.soria .dijitTab .closeButton-hover .closeImage {
-	background: url("../images/spriteRoundedIconsSmall.png") no-repeat -60px -15px;
-}
-.dj_ie6 .soria .dijitTab .closeButton-hover .closeImage {
-	background: url("../images/spriteRoundedIconsSmall.gif") no-repeat -60px -15px;
-}
-
-.soria .dijitTab .tabLabel {
-	/* make sure tabs w/close button and w/out close button are same height, even w/small (<15px) font */
-	min-height: 15px;
-	display: inline-block;
-}
-.dj_ie6 .soria .dijitTabButtonIcon {
-	/* because min-height doesn't work on IE6 */
-	height: 18px;
-	width: 1px;
-}
-
-/* ================================ */
-/* top tabs */
-.soria .dijitTabContainerTop-tabs {
-	border-color: #B1BADF;
-	padding-left: 3px;
-}
-
-.soria .dijitTabContainerTopNoStrip {
-	padding-top: 3px;
-}
-
-/* top container */
-.soria .dijitTabContainerTop-container {
-	border-top: none;
-}
-
-.soria .dijitTabContainerTop .dijitTabListWrapper {
-	border-bottom: none;
-}
-
-/*non-checked tabs */
-.soria .dijitTabContainerTop-tabs .dijitTab {
-	top: 1px;
-}
-
-/* checked tabs */
-.soria .dijitTabContainerTop-tabs .dijitTabChecked {
-	border-bottom-color: #94b4e6;
-}
-
-/* strip */
-.soria .dijitTabContainerTopStrip {
-	border: 1px solid #B1BADF;
-	margin-top: 1px;
-	padding-top: 1px;
-	background: #F0F4FC;
-}
-
-.soria .dijitTabContainerTopStrip .dijitTabContainerTop-tabs {
-	padding-left: 3px;
-}
-
-
-.soria .dijitTabContainerNested .dijitTabListWrapper {
-	height: auto;
-}
-
-/* ================================ */
-/* bottom tabs */
-.soria .dijitTabContainerBottom-tabs {
-	margin-top: -1px;
-	padding-left: 3px;
-	border-top: 1px solid #B1BADF;
-}
-
-.soria .dijitTabContainerBottom .dijitTabListWrapper {
-	border-top: none;
-	padding-top: 1px;
-	padding-bottom: 1px;
-	float: left;
-}
-
-/* bottom container */
-.soria .dijitTabContainerBottom-container {
-	border-bottom: none;
-}
-
-.soria .dijitTabContainerBottom-tabs .dijitTab {
-	border-bottom: none;
-	border-top: 1px solid #B1BADF;
-	background: url("../images/tabBottomEnabledSpriteLR.gif") no-repeat bottom left;
-}
-
-/* checked tabs */
-.soria .dijitTabContainerBottom-tabs .dijitTabChecked {
-	border-top-color:#94b4e6;
-}
-
-
-.soria .dijitTabContainerBottom-tabs .dijitTabInnerDiv .dijitTabContent {
-	padding-top: 3px;
-	padding-bottom: 3px;
-	background: url("../images/tabBottomEnabledC.gif") repeat-x bottom left;
-}
-
-.soria .dijitTabContainerBottom-tabs .dijitTabInnerDiv {
-	background: url("../images/tabBottomEnabledSpriteLR.gif") no-repeat bottom right;
-}
-
-.soria .dijitTabContainerBottom-tabs .dijitTabHover {
-	color: #243C5F;
-	background: url("../images/tabBottomHoverSpriteLR.gif") no-repeat bottom left;
-}
-
-.soria .dijitTabContainerBottom-tabs .dijitTabHover .dijitTabInnerDiv {
-	background: url("../images/tabBottomHoverSpriteLR.gif") no-repeat bottom right;
-}
-
-.soria .dijitTabContainerBottom-tabs .dijitTabHover .dijitTabInnerDiv .dijitTabContent {
-	background: url("../images/tabBottomHoverC.gif") repeat-x bottom left;
-}
-
-.soria .dijitTabContainerBottom-tabs .dijitTabChecked,
-.soria .dijitTabContainerBottom-tabs .dijitTabCloseButtonChecked
-{
-	/* the selected tab (with or without hover) */
-	background: url("../images/tabBottomActiveSpriteLR.gif") no-repeat bottom left;
-}
-
-.soria .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv {
-	background: url("../images/tabBottomActiveSpriteLR.gif") no-repeat bottom right;
-}
-
-.soria .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv .dijitTabContent {
-	background: url("../images/tabBottomActiveC.gif") repeat-x bottom left;
-}
-
-/* strip */
-.soria .dijitTabContainerBottomStrip {
-	padding-bottom: 2px;
-	border: 1px solid #B1BADF;
-}
-
-.soria .dijitTabContainerBottomStrip {
-	background: #F0F4FC;
-}
-
-/* top/bottom strip */
-.soria .dijitTabContainerBottom-spacer,
-.soria .dijitTabContainerTop-spacer {
-	height: 2px;
-	border: 1px solid #8ba0bd;
-	background: #94b4e6;
-}
-
-.soria .dijitTabContainerTop-spacer {
-	border-top: none;
-}
-
-.soria .dijitTabContainerBottom-spacer {
-	border-bottom: none;
-}
-
-/* ================================ */
-/* right tabs */
-.soria .dijitTabContainerRight-tabs {
-	height: 100%;
-	border-color: #ccc;
-	padding-top: 3px;
-}
-
-/* right container */
-.soria .dijitTabContainerRight-container {
-	border-right: none;
-}
-
-.soria .dijitTabContainerRight-tabs .dijitTab {
-	border-bottom: none;
-	border-left: 1px solid #B1BADF;
-	border-bottom: 1px solid #B1BADF !important;
-}
-
-
-/* some odd ie bug when borders dissapear when setting a bottom margin, this sortof helps */
-.dj_ie6 .soria .dijitTabContainerRight-tabs .dijitTabInnerDiv,
-.dj_ie7 .soria .dijitTabContainerRight-tabs .dijitTabInnerDiv {
-	border-bottom: solid #B1BADF 1px;
-	margin-bottom: -1px;
-}
-
-/* checked tabs */
-.soria .dijitTabContainerRight-tabs .dijitTabChecked {
-	border-left-color: #94b4e6;
-}
-
-.soria .dijitTabContainerRight-tabs .dijitTabChecked {
-	background: url("../images/tabRightChecked.gif") no-repeat left top !important;
-}
-
-/* some odd ie bug when borders dissapear when setting a bottom margin, this sortof helps */
-.dj_ie6 .soria .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabInnerDiv,
-.dj_ie7 .soria .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabInnerDiv,
-.dj_ie6 .soria .dijitTabContainerRight-tabs .dijitTabCheckedHover .dijitTabInnerDiv,
-.dj_ie7 .soria .dijitTabContainerRight-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
-	border-bottom: solid #94b4e6 1px;
-	margin-bottom: -1px;
-}
-
-.soria .dijitTabContainerRight-tabs .dijitTab {
-	background: url("../images/tabContainerSprite.gif") no-repeat left -350px;
-}
-.soria .dijitTabContainerRight-tabs .dijitTabHover .dijitTab {
-	background: url("../images/tabContainerSprite.gif") no-repeat left -200px;
-}
-
-/* strip */
-.soria .dijitTabContainerRightStrip {
-	padding-right: 2px;
-	border: 1px solid #B1BADF;
-	background: #F0F4FC;
-	border-left: none;
-}
-
-/* ================================ */
-/* left tabs */
-.soria .dijitTabContainerLeft-tabs {
-	border-color: #ccc;
-	padding-top: 3px;
-	height: 100%;
-}
-
-/* left conatiner */
-.soria .dijitTabContainerLeft-container {
-	border-left: none;
-}
-
-.soria .dijitTabContainerLeft-tabs .dijitTab {
-	border-right: 1px solid #B1BADF;
-	border-bottom: 1px solid #B1BADF;
-}
-
-/* checked tabs */
-.soria .dijitTabContainerLeft-tabs .dijitTabChecked {
-	border-right: 1px solid #94b4e6;
-}
-
-.soria .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
-	background: url("../images/tabContainerSprite.gif") no-repeat right -350px;
-}
-.soria .dijitTabContainerLeft-tabs .dijitTabHover .dijitTabInnerDiv {
-	background: url("../images/tabContainerSprite.gif") no-repeat right -200px;
-}
-.soria .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
-.soria .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
-	background: url("../images/tabLeftChecked.gif") no-repeat right top;
-}
-
-.dj_ie6 .soria .dijitTabContainerLeft-tabs .dijitTabInnerDiv,
-.dj_ie7 .soria .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
-	border-bottom: solid #B1BADF 1px;
-	margin-bottom: -1px;
-}
-
-.dj_ie6 .soria .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
-.dj_ie7 .soria .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
-.dj_ie6 .soria .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv,
-.dj_ie7 .soria .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
-	border-bottom: solid #94b4e6 1px;
-	margin-bottom: -1px;
-}
-
-/* strip */
-.soria .dijitTabContainerLeftStrip {
-	padding-left: 2px;
-	border: 1px solid #B1BADF;
-	background: #F0F4FC;
-	border-right: none;
-}
-
-/* ================================ */
-/* left/right tabs */
-.soria .dijitTabContainerLeft-tabs .dijitTab,
-.soria .dijitTabContainerRight-tabs .dijitTab {
-	margin-right:auto;
-	margin-bottom:2px;	/* space between one tab and the next in left/right mode */
-}
-
-/* left/right tabstrip */
-.soria .dijitTabContainerLeft-spacer,
-.soria .dijitTabContainerRight-spacer {
-	width: 2px;
-	border: 1px solid #8ba0bd;
-	background: #94b4e6;
-}
-
-.soria .dijitTabContainerLeft-spacer {
-	border-left: none;
-}
-.soria .dijitTabContainerRight-spacer {
-	border-right: none;
-}
-/* ================================ */
-
-/* this resets the tabcontainer stripe when within a contentpane */
-.soria .dijitTabContainerTop-dijitContentPane .dijitTabContainerTop-tabs {
-	border-left: 0px solid #ccc;
-	border-top: 0px solid #ccc;
-	border-right: 0px solid #ccc;
-	padding-top: 0px;
-	padding-left: 0px;
-}
-
-
-/* ================================ */
-
-/* Menu and slider control styles */
-.soria .dijitTabContainer .tabStripButton {
-	margin-right: 0;
-}
-.soria .dijitTabContainer .tabStripButton-top {
-	margin-top: 1px;
-}
-
-.soria .tabStripButton .dijitTabContent{
-	padding: 6px 0 5px 0;
-}
-
-.dj_ie6 .soria .tabStripButton .dijitTabContent,
-.dj_ie7 .soria .tabStripButton .dijitTabContent {
-	padding-top: 7px;
-}
-
-.soria .tabStrip-disabled .tabStripButton .dijitTabContent {
-	padding: 5px 0 3px 0;
-}
-
-.dj_ie6 .soria .tabStrip-disabled .tabStripButton .dijitTabContent,
-.dj_ie7 .soria .tabStrip-disabled .tabStripButton .dijitTabContent {
-	padding-top: 6px;
-}
-
-.soria .dijitTabContainer .tabStripButton-bottom {
-	background: transparent url(../images/tabBottomEnabledSpriteLR.gif) no-repeat scroll left bottom;
-	border-bottom: medium none;
-	border-top: 1px solid #B1BADF;
-}
-
-.soria .dijitTabContainer .tabStripButton-bottom .dijitTabInnerDiv {
-	background: transparent url(../images/tabBottomEnabledSpriteLR.gif) no-repeat scroll right bottom;
-}
-
-.soria .dijitTabContainer .tabStripButton-bottom .dijitTabContent {
-	background: transparent;
-}
-
-.soria .dijitTabContainer .tabStripButton {
-	/* float need width set */
-	width: 21px;
-}
-
-.soria .dijitTabContainer .tabStripButton img {
-	height: 14px;
-	background: url(../images/spriteRoundedIconsSmall.png) no-repeat;
-}
-.dj_ie6 .soria .dijitTabContainer .tabStripButton img {
-	background-image: url(../images/spriteRoundedIconsSmall.gif);
-}
-.soria .dijitTabContainer .tabStripMenuButton img {
-	background-position: -15px top;
-}
-.soria .dijitTabContainer .tabStripSlideButtonLeft img {
-	background-position: 0px top;
-}
-.soria .dijitTabContainer .tabStripSlideButtonRight img {
-	background-position: -30px top;
-}
-/*
-.soria .dijitTabContent .dijitTabIcon {
-	height: 13px;
-	width: 14px;
-}
-*/
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/TabContainer_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/TabContainer_rtl.css
deleted file mode 100644
index e9e1fbf..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/layout/TabContainer_rtl.css
+++ /dev/null
@@ -1,43 +0,0 @@
-.dijitRtl .soria .dijitTab {
-	margin-right:0;
-	margin-left:2px;		/* space between one tab and the next in top/bottom mode */
-}
-
-/* tab strips */
-.dijitRtl .soria .dijitTabContainer .tabStripButton {
-	margin-left: 0;
-}
-
-.dijitRtl .soria .dijitTabContainerTopStrip,
-.dijitRtl .soria .dijitTabContainerBottomStrip,
-.dijitRtl .soria .dijitTabContainerTop-tabs,
-.dijitRtl .soria .dijitTabContainerBottom-tabs {
-	padding-left: 0;
-	padding-right: 3px;
-}
-
-.dijitRtl .soria .dijitTabInnerDiv {
-	padding-left: 3px;
-	padding-right: 4px;
-}
-
-.dijitRtl .soria .dijitTabPaneWrapper {
-	#zoom: 1;
-}
-
-.dj_ie-rtl .soria .dijitTabContainerLeft-tabs {
-	margin-left: 0px !important;
-}
-
-.dj_ie-rtl .soria .dijitTabContainerRight-tabs {
-	margin-right: 0px !important;
-}
-
-.dijitRtl .soria .dijitTabContainerLeft-tabs .dijitTab,
-.dijitRtl .soria .dijitTabContainerRight-tabs .dijitTab {
-	margin-left:0px;
-}
-
-.dj_ie-rtl .soria .dijitTab .dijitTabInnerDiv{
-	width : 1%;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/soria.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/soria.css
deleted file mode 100644
index dfef7a8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/soria.css
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-	Adds cosmetic styling to Dijit.  Users may swap with a custom theme CSS file.
-
-	NOTES:
-	---
-	Dialog.css contains css classes for both Dialog and Tooltip!
-	This because currently a dijit.TooltipDialog exist. Until this is resolved
-	you need to include Dialog.css for both dijits
-	---
-	Toolbar.css contains classes also used in Editor. Until this is resolved
-	you need to include Toolbar.css for both Toolbar and Editor
-	---
-	Button.css contains classes for combobox,
-
-*/
-
-@import url("../dijit.css");
-@import url("Common.css");
-
-@import url("layout/ContentPane.css");
-@import url("layout/TabContainer.css");
-@import url("layout/AccordionContainer.css");
-@import url("layout/SplitContainer.css");
-@import url("layout/BorderContainer.css");
-@import url("form/Common.css");
-@import url("form/Button.css");
-@import url("form/ComboBox.css");
-@import url("form/Checkbox.css");
-@import url("form/RadioButton.css");
-@import url("form/Slider.css");
-@import url("form/Select.css");
-@import url("Tree.css");
-@import url("ProgressBar.css");
-@import url("TitlePane.css");
-@import url("Calendar.css");
-@import url("TimePicker.css");
-@import url("Toolbar.css");
-@import url("Dialog.css");
-@import url("Menu.css");
-@import url("Editor.css");
-@import url("ColorPalette.css");
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/soria_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/soria_rtl.css
deleted file mode 100644
index 1edd055..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/soria/soria_rtl.css
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-	Adds cosmetic styling to Dijit.  Users may swap with a custom theme CSS file.
-
-	NOTES:
-	---
-	Dialog.css contains css classes for both Dialog and Tooltip!
-	This because currently a dijit.TooltipDialog exist. Until this is resolved
-	you need to include Dialog.css for both dijits
-	---
-	Toolbar.css contains classes also used in Editor. Until this is resolved
-	you need to include Toolbar.css for both Toolbar and Editor
-	---
-	Button.css contains classes for combobox,
-
-*/
-
-@import url("../dijit_rtl.css");
-@import url("layout/TabContainer_rtl.css");
-@import url("layout/AccordionContainer_rtl.css");
-@import url("form/Slider_rtl.css");
-@import url("form/Button_rtl.css");
-@import url("form/Common_rtl.css");
-@import url("Tree_rtl.css");
-@import url("TitlePane_rtl.css");
-@import url("Calendar_rtl.css");
-@import url("Dialog_rtl.css");
-@import url("Menu_rtl.css");
-@import url("Editor_rtl.css");
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Calendar.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Calendar.css
deleted file mode 100644
index e2deaa0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Calendar.css
+++ /dev/null
@@ -1,148 +0,0 @@
-/* Calendar*/
-
-.tundra .dijitCalendarIncrementControl {
-	/* next/prev month buttons */
-	width:15px;
-	height:15px;
-	background-image: url("images/spriteRoundedIconsSmall.png");
-	background-repeat: no-repeat
-}
-.dj_ie6 .tundra .dijitCalendarIncrementControl {
-	font-size:.1em;
-	background-image: url("images/spriteRoundedIconsSmall.gif");
-}
-
-.tundra .dijitA11ySideArrow {
-	display: none;
-}
-
-.tundra .dijitCalendarDecrease {
-	background-position: top left;
-}
-.tundra .dijitCalendarIncrease {
-	background-position: -30px top;
-}
-
-.tundra table.dijitCalendarContainer {
-	font-size: 100%;
-	border-spacing: 0;
-	border-collapse: separate;
-	border: 1px solid #ccc;
-	margin: 0;
-}
-
-.tundra .dijitCalendarMonthContainer th {
-	/* month header cell */
-	background:#d3d3d3 url("images/titleBar.png") repeat-x top;
-	padding-top:.3em;
-	padding-bottom:.2em;
-	text-align:center;
-}
-.dj_ie6 .tundra .dijitCalendarMonthContainer th {
-	padding-top:.2em;
-	padding-bottom:.1em;
-}
-
-.tundra .dijitCalendarDayLabelTemplate {
-	/* day of week labels */
-	background:white url("images/calendarDayLabel.png") repeat-x bottom;
-	font-weight:normal;
-	padding-top:.15em;
-	padding-bottom:0em;
-	border-top: 1px solid #eeeeee;
-	color:#293a4b;
-	text-align:center;
-}
-
-.tundra .dijitCalendarBodyContainer {
-	border-bottom: 1px solid #eeeeee;
-}
-
-.tundra .dijitCalendarMonthLabel {
-	color:#293a4b;
-	font-weight: bold;
-}
-
-.tundra .dijitCalendarDateTemplate {
-	/* style for each day cell */
-	font-size: 0.9em;
-	font-weight: bold;
-	text-align: center;
-	padding: 0.3em 0.3em 0.05em 0.3em;
-	letter-spacing: 1px;
-}
-
-.dj_ie .tundra .dijitCalendarDateTemplate {
-	padding: 0.1em .33em 0.02em .33em;
-}
-
-.tundra .dijitCalendarPreviousMonth,
-.tundra .dijitCalendarNextMonth 		{
-	/* days that are part of the previous or next month */
-	color:#999999;
-	background-color:#f8f8f8 !important;
-}
-
-.tundra .dijitCalendarPreviousMonthDisabled,
-.tundra .dijitCalendarNextMonthDisabled	{
-	/* days that are part of the previous or next month - disabled*/
-	background-color:#a4a5a6 !important;
-}
-
-.tundra .dijitCalendarCurrentMonth {
-	/* days that are part of this month */
-	background-color:white !important;
-}
-
-.tundra .dijitCalendarCurrentMonthDisabled {
-	/* days that are part of this month - disabled */
-	background-color:#bbbbbc !important;
-}
-
-.tundra .dijitCalendarDisabledDate {
-	cursor:default !important;
-	text-decoration:line-through !important;
-}
-
-.tundra .dijitCalendarCurrentDate {
-	/* cell for today's date */
-	text-decoration:underline;
-	font-weight:bold;
-}
-
-.tundra .dijitCalendarHoveredDate {
-	background-color: #e2ebf2 !important;
-}
-
-.tundra .dijitCalendarSelectedDate {
-	/* cell for the selected date */
-	background-color:#bbc4d0 !important;
-	color:black !important;
-}
-.tundra .dijitCalendarYearContainer {
-	/* footer of the table that contains the year display/selector */
-	background:white url("images/calendarYearLabel.png") repeat-x bottom;
-	border-top:1px solid #ccc;
-}
-
-.tundra .dijitCalendarYearLabel {
-	/* container for all of 3 year labels */
-	margin:0;
-	padding:0.4em 0 0.25em 0;
-	text-align:center;
-}
-
-.tundra .dijitCalendarSelectedYear {
-	/* label for selected year */
-	color:black;
-	padding:0.2em;
-	padding-bottom:0.1em;
-	background-color:#bbc4d0 !important;
-}
-
-.tundra .dijitCalendarNextYear,
-.tundra .dijitCalendarPreviousYear {
-	/* label for next/prev years */
-	color:black !important;
-	font-weight:normal;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Calendar_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Calendar_rtl.css
deleted file mode 100644
index 3a50cb8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Calendar_rtl.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/* Calendar */
-
-.dijitRtl .tundra .dijitCalendarDecrease {
-	background-position: -30px top;
-}
-
-.dijitRtl .tundra .dijitCalendarIncrease {
-	background-position: 0px top;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/ColorPalette.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/ColorPalette.css
deleted file mode 100644
index 9d3c4cc..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/ColorPalette.css
+++ /dev/null
@@ -1,5 +0,0 @@
-.dijitColorPalette {
-	border:1px solid #7eabcd;
-	background:#fff;
-	-moz-border-radius: 0px !important;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Common.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Common.css
deleted file mode 100644
index c339263..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Common.css
+++ /dev/null
@@ -1,33 +0,0 @@
-/* DnD avatar-specific settings */
-/* For now it uses a default set of rules. Some other DnD classes can be modified as well. */
-.tundra .dojoDndItemBefore {
-	border-top: 2px solid #369;
-}
-
-.tundra .dojoDndItemAfter {
-	border-bottom: 2px solid #369;
-}
-
-.tundra .dojoDndItemOver {
-	cursor:pointer;
-}
-
-.tundra table.dojoDndAvatar { -moz-border-radius: 0; border: 1px solid #ccc; border-collapse: collapse; background-color: #fff; font-size: 75%; color: black;}
-.tundra .dojoDndAvatar td	{ border: none; }
-.tundra .dojoDndAvatar tr	{ border: none; }
-.tundra .dojoDndAvatarHeader td	{ height: 20px; padding: 0 0 0 21px; }
-.tundra .dojoDndAvatarItem td { padding: 2px;}
-.tundra.dojoDndMove .dojoDndAvatarHeader	{background-color: #f58383; background-image: url(images/dndNoMove.png); background-repeat: no-repeat; background-position: 2px center;}
-.tundra.dojoDndCopy .dojoDndAvatarHeader	{background-color: #f58383; background-image: url(images/dndNoCopy.png); background-repeat: no-repeat; background-position: 2px center;}
-.tundra.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{background-color: #97e68d; background-image: url(images/dndMove.png); background-repeat: no-repeat; background-position: 2px center;}
-.tundra.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{background-color: #97e68d; background-image: url(images/dndCopy.png); background-repeat: no-repeat; background-position: 2px center;}
-
-.tundra .dijitContentPaneLoading {
-	background:url('images/loading.gif') no-repeat left center;
-	padding-left:25px;
-}
-
-.tundra .dijitContentPaneError {
-	background:url('images/warning.png') no-repeat left center;
-	padding-left:25px;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Dialog.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Dialog.css
deleted file mode 100644
index 871df61..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Dialog.css
+++ /dev/null
@@ -1,176 +0,0 @@
-/* Dialog */
-
-.tundra .dijitDialog {
-	background: #fff;
-	border: 1px solid #7eabcd;
-	/*
-	filter: progid:DXImageTransform.Microsoft.DropShadow(OffX=5, OffY=5, Color='#adadad', Positive='true');
-	filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius=3, ShadowOpacity=.30), progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
-	filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius='5', MakeShadow='true', ShadowOpacity='0.50');
-	filter: progid:DXImageTransform.Microsoft.Shadow(color='#666666', ShadowOpacity=.30, Direction=135, Strength=3);
-	*/
-	padding: 0px;
-	-webkit-box-shadow: 0px 5px 10px #adadad;
-}
-
-.tundra .dijitDialog .dijitDialogPaneContent {
-	background: #fff;
-	border:none;
-	border-top: 1px solid #d3d3d3; /* w/out this, an <h1> on the top line causes a gap between the .content and .label */
-	padding:10px;
-
-}
-
-.tundra .dijitDialogTitleBar {
-	/* outer container for the titlebar of the dialog */
-	background: #fafafa url("images/titleBar.png") repeat-x top left;
-	padding: 5px 6px 3px 6px;
-	cursor: move;
-	outline:0; /* remove this line if keyboard focus on dialog startup is an issue. tab still takes you to first focusable element */
-}
-
-.tundra .dijitDialogTitle {
-	/* typography and styling of the dialog title */
-	font-weight: bold;
-	padding: 0px 4px;
-}
-
-.tundra .dijitDialogCloseIcon {
-	/* the default close icon for the dialog */
-	/* background : url("images/spriteRoundedIconsSmall.png") no-repeat right top; */
-	background: url("images/tabClose.png") no-repeat right top;
-	position: absolute;
-	vertical-align: middle;
-	right: 6px;
-	top: 4px;
-	height: 15px;
-	width: 15px;
-	cursor: pointer;
-}
-.dj_ie6 .tundra .dijitDialogCloseIcon {
-	background : url("images/tabClose.gif") no-repeat right top;
-}
-
-.tundra .dijitDialogCloseIcon-hover {
-	background: url("images/tabCloseHover.png") no-repeat right top;
-}
-.dj_ie6 .tundra .dijitDialogCloseIcon-hover {
-	background : url("images/tabCloseHover.gif") no-repeat right top;
-}
-
-/* Tooltip and TooltipDialog */
-
-.tundra .dijitTooltip,
-.tundra .dijitTooltipDialog {
-	/* the outermost dom node, holding the connector and container */
-	background: transparent;	/* make the area on the sides of the arrow transparent */
-}
-
-.dijitTooltipBelow {
-	/* leave room for arrow above content */
-	padding-top: 13px;
-}
-
-.dijitTooltipAbove {
-	/* leave room for arrow below content */
-	padding-bottom: 13px;
-}
-
-.tundra .dijitTooltipContainer {
-	/*
-		The part with the text.
-	*/
-	background: #ffffff url("images/popupMenuBg.gif") repeat-x bottom left;
-	border: 1px solid #7eabcd;
-	padding: 0.45em;
-	-webkit-border-radius: 3px;
-	-moz-border-radius: 3px;
-}
-
-.tundra .dijitTooltipConnector {
-	/* the arrow piece */
-	border:0px;
-	z-index: 2;
-}
-.tundra .dijitTooltipABRight .dijitTooltipConnector {
-	/* above or below tooltip, but the arrow appears on the right,
-		and the right edges of target and tooltip are aligned rather than the left */
-	left: auto !important;
-	right: 3px;
-}
-
-.tundra .dijitTooltipBelow .dijitTooltipConnector {
-	/* the arrow piece for tooltips below an element */
-	top: 0px;
-	left: 3px;
-	background:url("images/tooltipConnectorUp.png") no-repeat top left;
-	width:16px;
-	height:14px;
-}
-
-.dj_ie .tundra .dijitTooltipBelow .dijitTooltipConnector {
-	/* use gif for IE7 too, due to png rendering problems on fade-in (see http://trac.dojotoolkit.org/ticket/6555) */
-	background-image: url("images/tooltipConnectorUp.gif");
-}
-
-.tundra .dijitTooltipAbove .dijitTooltipConnector {
-	/* the arrow piece for tooltips above an element */
-	bottom: 0px;
-	left: 3px;
-	background:url("images/tooltipConnectorDown.png") no-repeat top left;
-	width:16px;
-	height:14px;
-}
-.dj_ie .tundra .dijitTooltipAbove .dijitTooltipConnector {
-	background-image: url("images/tooltipConnectorDown.gif");
-}
-.dj_ie6 .tundra .dijitTooltipAbove .dijitTooltipConnector {
-	bottom: -3px;
-}
-
-.tundra .dijitTooltipLeft {
-	padding-right: 14px;
-}
-.dj_ie6 .tundra .dijitTooltipLeft {
-	padding-left: 15px;
-}
-.tundra .dijitTooltipLeft .dijitTooltipConnector {
-	/* the arrow piece for tooltips to the left of an element, bottom borders aligned */
-	right: 0px;
-	bottom: 3px;
-	background:url("images/tooltipConnectorRight.png") no-repeat top left;
-	width:16px;
-	height:14px;
-}
-.dj_ie .tundra .dijitTooltipLeft .dijitTooltipConnector {
-	background-image: url("images/tooltipConnectorRight.gif");
-}
-
-.tundra .dijitTooltipRight {
-	padding-left: 14px;
-}
-.tundra .dijitTooltipRight .dijitTooltipConnector {
-	/* the arrow piece for tooltips to the right of an element, bottom borders aligned */
-	left: 0px;
-	bottom: 3px;
-	background:url("images/tooltipConnectorLeft.png") no-repeat top left;
-	width:16px;
-	height:14px;
-}
-.dj_ie .tundra .dijitTooltipRight .dijitTooltipConnector {
-	background-image: url("images/tooltipConnectorLeft.gif");
-}
-
-.dj_webkit .tundra .dijitPopup .dijitTooltipContainer,
-.dj_webkit .tundra .dijitPopup .dijitMenu {
-	/* -webkit-border-radius: 5px; */
-	-webkit-box-shadow: 0px 5px 10px #adadad;
-}
-
-/*
-.dj_ie6 .tundra .dijitPopup .dijitTooltipContainer,
-.dj_ie6 .tundra .dijitPopup .dijitMenu {
-	filter: progid:DXImageTransform.Microsoft.Shadow(color='#666666', Direction=135, Strength=3);
-}
-*/
-
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Dialog_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Dialog_rtl.css
deleted file mode 100644
index e396b57..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Dialog_rtl.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Dialog */
-.dijitRtl .tundra .dijitDialogTitleBar .dijitDialogCloseIcon {
-	right: auto;
-	left: 5px;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Editor.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Editor.css
deleted file mode 100644
index 74fc40c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Editor.css
+++ /dev/null
@@ -1,69 +0,0 @@
-.dijitIEFixedToolbar {
-	position:absolute;
-	/* top:0; */
-	top: expression(eval((document.documentElement||document.body).scrollTop));
-}
-
-.tundra .dijitToolbar .dijitToolbarSeparator {
-	background: url('images/editor.gif');
-}
-
-.tundra .dijitEditorIcon {
-	background-image: url('images/editor.gif'); /* editor icons sprite image */
-	background-repeat: no-repeat;
-	width: 18px;
-	height: 18px;
-	text-align: center;
-}
-.tundra .dijitDisabled .dijitEditorIcon {
-	background-image: url('images/editorDisabled.gif'); /* editor icons sprite image */
-}
-
-.tundra .dijitEditorIconSep { background-position: 0px; }
-.tundra .dijitEditorIconBackColor { background-position: -18px; }
-.tundra .dijitEditorIconBold { background-position: -36px; }
-.tundra .dijitEditorIconCancel { background-position: -54px; }
-.tundra .dijitEditorIconCopy { background-position: -72px; }
-.tundra .dijitEditorIconCreateLink { background-position: -90px; }
-.tundra .dijitEditorIconCut { background-position: -108px; }
-.tundra .dijitEditorIconDelete { background-position: -126px; }
-.tundra .dijitEditorIconForeColor { background-position: -144px; }
-.tundra .dijitEditorIconHiliteColor { background-position: -162px; }
-.tundra .dijitEditorIconIndent { background-position: -180px; }
-.tundra .dijitEditorIconInsertHorizontalRule { background-position: -198px; }
-.tundra .dijitEditorIconInsertImage { background-position: -216px; }
-.tundra .dijitEditorIconInsertOrderedList { background-position: -234px; }
-.tundra .dijitEditorIconInsertTable { background-position: -252px; }
-.tundra .dijitEditorIconInsertUnorderedList { background-position: -270px; }
-.tundra .dijitEditorIconItalic { background-position: -288px; }
-.tundra .dijitEditorIconJustifyCenter { background-position: -306px; }
-.tundra .dijitEditorIconJustifyFull { background-position: -324px; }
-.tundra .dijitEditorIconJustifyLeft { background-position: -342px; }
-.tundra .dijitEditorIconJustifyRight { background-position: -360px; }
-.tundra .dijitEditorIconLeftToRight { background-position: -378px; }
-.tundra .dijitEditorIconListBulletIndent { background-position: -396px; }
-.tundra .dijitEditorIconListBulletOutdent { background-position: -414px; }
-.tundra .dijitEditorIconListNumIndent { background-position: -432px; }
-.tundra .dijitEditorIconListNumOutdent { background-position: -450px; }
-.tundra .dijitEditorIconOutdent { background-position: -468px; }
-.tundra .dijitEditorIconPaste { background-position: -486px; }
-.tundra .dijitEditorIconRedo { background-position: -504px; }
-.tundra .dijitEditorIconRemoveFormat { background-position: -522px; }
-.tundra .dijitEditorIconRightToLeft { background-position: -540px; }
-.tundra .dijitEditorIconSave { background-position: -558px; }
-.tundra .dijitEditorIconSpace { background-position: -576px; }
-.tundra .dijitEditorIconStrikethrough { background-position: -594px; }
-.tundra .dijitEditorIconSubscript { background-position: -612px; }
-.tundra .dijitEditorIconSuperscript { background-position: -630px; }
-.tundra .dijitEditorIconUnderline { background-position: -648px; }
-.tundra .dijitEditorIconUndo { background-position: -666px; }
-.tundra .dijitEditorIconWikiword { background-position: -684px; }
-.tundra .dijitEditorIconToggleDir { background-position: -540px; /* padding: 0; margin: 0; color:#555555;
-									font-family:verdana,arial,sans-serif; font-weight: 800; font-size: 70%; */}
-.tundra .dijitEditorIconTabIndent { background-position: -702px; }
-.tundra .dijitEditorIconSelectAll { background-position: -720px; }
-.tundra .dijitEditorIconUnlink { background-position: -738px; }
-.tundra .dijitEditorIconFullScreen { background-position: -756px; }
-.tundra .dijitEditorIconViewSource { background-position: -774px; }
-.tundra .dijitEditorIconPrint { background-position: -792px; }
-.tundra .dijitEditorIconNewPage { background-position: -810px; }
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Editor_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Editor_rtl.css
deleted file mode 100644
index c914930..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Editor_rtl.css
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Editor */
-.dijitRtl .tundra .dijitEditorIcon {
-	background-image: url('images/editor_rtl.gif'); /* editor icons sprite image */
-}
-.dijitRtl .tundra .dijitDisabled .dijitEditorIcon {
-	background-image: url('images/editorDisabled_rtl.gif'); /* editor icons sprite image */
-}
-
-/* Toolbar */
-.dijitRtl .tundra .dijitToolbar .dijitToolbarSeparator {
-	background-image: url('images/editor_rtl.gif');
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Menu.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Menu.css
deleted file mode 100644
index b91d869..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Menu.css
+++ /dev/null
@@ -1,76 +0,0 @@
-.tundra .dijitMenu,
-.tundra .dijitMenuBar {
-	border: 1px solid #7eabcd;
-	margin: 0px;
-	padding: 0px;
-	background-color: #f7f7f7;
-	/* background:#eaeaea url("images/titleBar.png") repeat-x top left; */
-}
-
-.tundra .dijitBorderContainer .dijitMenuBar {
-	border:1px solid #ccc;
-}
-
-.tundra .dijitMenuItem {
-	font-family: sans-serif;
-	margin: 0;
-}
-
-.tundra .dijitMenuBar .dijitMenuItem {
-	padding: 4px 5px;
-}
-
-.tundra .dijitMenuPreviousButton, .tundra .dijitMenuNextButton {
-	font-style: italic;
-}
-.tundra .dijitMenuItem td {
-	padding: 2px;
-}
-
-.tundra .dijitMenuPassive .dijitMenuItemHover,
-.tundra .dijitMenuItemSelected {
-	background-color: #3559ac;
-	color:#fff;
-}
-
-.tundra .dijitMenuItemIcon {
-	width: 16px;
-	height: 16px;
-}
-
-.tundra .dijitMenuExpand {
-	width: 7px;
-	height: 7px;
-	background-image: url('images/spriteArrows.png');
-	background-position: -14px 0px;
-}
-.dj_ie6 .tundra .dijitMenuExpand {
-	background-image: url('images/spriteArrows.gif');
-}
-
-/* separator can be two pixels -- set border of either one to 0px to have only one */
-.tundra .dijitMenuSeparatorTop {
-	border-bottom: 1px solid #9b9b9b;
-}
-
-.tundra .dijitMenuSeparatorBottom {
-	border-top: 1px solid #e8e8e8;
-}
-
-/* the checked menu item */
-.tundra .dijitCheckedMenuItemIconChar {
-	display: none;
-}
-
-.tundra .dijitCheckedMenuItemIcon {
-	background-image: url('images/checkmark.png');
-	background-position: -80px;
-}
-
-.dj_ie6 .tundra .dijitCheckedMenuItemIcon {
-	background-image: url('images/checkmark.gif');
-}
-
-.tundra .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
-	background-position: -64px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Menu_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Menu_rtl.css
deleted file mode 100644
index 917676b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Menu_rtl.css
+++ /dev/null
@@ -1,8 +0,0 @@
-.dijitRtl .tundra .dijitMenuItem .dijitMenuItemIcon {
-	padding-left: 3px;
-	padding-right: 0px;
-}
-
-.dijitRtl .tundra .dijitMenuItem .dijitMenuExpand {
-	background-position: -7px 0px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/ProgressBar.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/ProgressBar.css
deleted file mode 100644
index 5b8a118..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/ProgressBar.css
+++ /dev/null
@@ -1,28 +0,0 @@
-.tundra .dijitProgressBar {
-	margin:2px 0px 2px 0px;
-}
-
-.tundra .dijitProgressBarEmpty {
-	/* outer container and background of the bar that's not finished yet*/
-	background:#fff url("images/progressBarEmpty.png") repeat-x center center;
-	border-color: #a2a2a2 #b8b8b8 #b8b8b8 #a2a2a2;
-}
-
-.tundra .dijitProgressBarTile {
-	/* inner container for finished portion when in 'tile' (image) mode */
-	background:#f0f0f0 url("images/progressBarFull.png") repeat-x center center;
-}
-
-.tundra .dijitProgressBarFull {
-	border-right:1px solid #b8b8b8;
-}
-
-.tundra .dijitProgressBarLabel {
-	/* Set to a color that contrasts with both the "Empty" and "Full" parts. */
-	color:#293a4b;
-}
-
-.tundra .dijitProgressBarIndeterminate .dijitProgressBarTile {
-	/* use an animated gif for the progress bar in 'indeterminate' mode */
-	background:#cad2de url("images/progressBarAnim.gif") repeat-x center center;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/TimePicker.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/TimePicker.css
deleted file mode 100644
index 307d45e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/TimePicker.css
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Time Picker */
-.tundra .dijitTimePickerTick,
-.tundra .dijitTimePickerMarker {
-	border-color: #ccc;
-}
-
-.tundra .dijitTimePickerTick {
-	color:white;
-}
-
-.tundra .dijitTimePickerMarker {
-	background:#d3d3d3 url("images/titleBar.png") repeat-x top;
-	color:#293a4b;
-	font-weight: bold;
-}
-
-.tundra .dijitTimePickerItemSelected {
-	color: black;
-	background: #bbc4d0 none;
-}
-
-.tundra .dijitTimePickerItemHover {
-	background: #60a1ea none;
-	color:white;
-}
-
-.tundra .dijitTimePickerItemHover,
-.tundra .dijitTimePickerItemSelected {
-	position: relative;
-	z-index: 10;
-}
-
-.tundra .dijitTimePickerTick .dijitTimePickerItemInner {
-	font-size:0.4em;
-}
-
-.tundra .dijitTimePickerItemHover .dijitTimePickerItemInner,
-.tundra .dijitTimePickerItemSelected .dijitTimePickerItemInner {
-	font-size:1em;
-}
-
-.tundra .dijitTimePickerMarkerHover {
-	border-top: 1px solid #ccc;
-}
-
-.tundra .dijitTimePickerTickHover,
-.tundra .dijitTimePickerTickSelected {
-	margin-top:-0.3em;
-	margin-bottom:-0.3em;
-	border-bottom: none;
-}
-
-.dijit_a11y .dijitTimePickerTickHover {
-	background-color: #CCC !important;
-	border-top: 1px solid #333 !important;
-	border-bottom: 1px solid #333 !important;
-}
-
-.dijit_a11y .dijitTimePickerMarkerHover {
-	border-bottom-width: 2px;
-}
-
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/TitlePane.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/TitlePane.css
deleted file mode 100644
index 58c6bcd..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/TitlePane.css
+++ /dev/null
@@ -1,72 +0,0 @@
-.tundra .dijitTitlePaneTitle {
-	background: #cccccc;
-	background:#fff url("images/titleBar.png") repeat-x bottom left;
-	border:1px solid #bfbfbf;
-	padding:3px 4px;
-}
-.tundra .dijitTitlePaneTitle-hover  {
-	background: #f8fafd url("images/accordionItemHover.gif") bottom repeat-x;
-	cursor: pointer;
-}
-
-.tundra .dijitTitlePaneTitle * {
-	vertical-align: middle;
-}
-
-.tundra .dijitTitlePane .dijitOpen .dijitArrowNode,
-.tundra .dijitTitlePane .dijitClosed .dijitArrowNode {
-	background-image: url('images/spriteArrows.png');
-	background-repeat: no-repeat;
-	height: 7px;
-	width: 7px;
-}
-.dj_ie6 .tundra .dijitTitlePane .dijitArrowNode {
-	background-image: url('images/spriteArrows.gif');
-}
-
-.tundra .dijitTitlePane .dijitOpen .dijitArrowNode {
-	background-position: 0px 0px;
-}
-.tundra .dijitTitlePane .dijitClosed .dijitArrowNode {
-	background-position: -14px 0px;
-}
-
-.tundra .dijitTitlePaneFocused .dijitTitlePaneTextNode {
-	text-decoration:underline;
-}
-
-.tundra .dijitTitlePane .dijitArrowNodeInner {
-	/* hide A11Y text in favor of icon */
-	display:none;
-}
-
-.dijit_a11y .dijitTitlePane .dijitOpen .dijitArrowNodeInner,
-.dijit_a11y .dijitTitlePane .dijitClosed .dijitArrowNodeInner {
-	display:inline !important;
-	font-family:monospace;
-	padding-bottom:.2em;
-}
-
-.dijit_a11y .dijitTitlePane .dijitArrowNode {
-	/* except in a11y mode, then hide icon in favor of text */
-	display:none;
-}
-
-.tundra .dijitTitlePaneContentOuter {
-	background: #ffffff;
-	border:1px solid #bfbfbf;
-	border-top: 1px solid #ccc;	/* w/out this, an <h1> on the top line causes a gap between the .content and .label */
-}
-.tundra .dijitTitlePaneContentInner {
-	padding:10px;
-}
-/* force hasLayout to ensure borders etc, show up */
-.dj_ie6 .tundra .dijitTitlePaneContentOuter,
-.dj_ie6 .tundra .dijitTitlePane .dijitTitlePaneTitle {
-	zoom: 1;
-}
-
-.tundra .dijitTitlePaneTextNode {
-	margin-left: 4px;
-	margin-right: 4px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/TitlePane_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/TitlePane_rtl.css
deleted file mode 100644
index 1279d6c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/TitlePane_rtl.css
+++ /dev/null
@@ -1,3 +0,0 @@
-.dijitRtl .tundra .dijitTitlePane .dijitClosed .dijitArrowNode {
-	background-position: -7px 0px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Toolbar.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Toolbar.css
deleted file mode 100644
index 007b8f3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Toolbar.css
+++ /dev/null
@@ -1,65 +0,0 @@
-.tundra .dijitToolbar {
-	border-bottom: 1px solid #ccc;
-	background:#eaeaea url("images/titleBar.png") repeat-x top left;
-}
-
-/* setting a min-height on ditor toolbar */
-.dj_ie6 .tundra .dijitToolbar {
-	height: 10px;
-}
-
-.tundra .dijitToolbar .dijitButtonNode,
-.tundra .dijitToolbar .dijitComboButton .dijitButtonContents,
-.tundra .dijitToolbar .dijitComboButton .dijitDownArrowButton {
-	background: none;
-	margin: 0px;
-	padding: 0px;
-	border: none;
-	font-size: 12px;
-}
-
-.tundra .dijitToolbar .dijitButton,
-.tundra .dijitToolbar .dijitToggleButton,
-.tundra .dijitToolbar .dijitDropDownButton,
-.tundra .dijitToolbar .dijitComboButton .dijitButtonContents,
-.tundra .dijitToolbar .dijitComboButton .dijitDownArrowButton  {
-	background: none;
-	padding: 1px;
-}
-
-.tundra .dijitToolbar .dijitButtonChecked,
-.tundra .dijitToolbar .dijitToggleButtonChecked {
-	background-color:#d4dff2;
-	border:1px solid #316ac5;
-	padding: 0px;	/* reduce padding to compensate for space taken by border */
-}
-
-.tundra .dijitToolbar .dijitButtonCheckedHover,
-.tundra .dijitToolbar .dijitToggleButtonCheckedHover
- {
-	background-color:#abc1e5;
-	border:1px solid #316ac5;
-	padding: 0px;	/* reduce padding to compensate for space taken by border */
-}
-
-.tundra .dijitToolbar .dijitButtonHover,
-.tundra .dijitToolbar .dijitToggleButtonHover,
-.tundra .dijitToolbar .dijitDropDownButtonHover,
-.tundra .dijitToolbar .dijitComboButtonHover .dijitButtonContents,
-.tundra .dijitToolbar .dijitComboButtonDownArrowHover .dijitDownArrowButton {
-	/* TODO: change this from Hover to Selected so that button is still highlighted while drop down is being used */
-	border: 1px solid #869cbf;
-	padding: 0px;	/* reduce padding to compensate for space taken by border */
-	background-color:#e1e5f0;
-}
-
-.tundra .dijitToolbar label {
-	padding: 3px 3px 0 6px;
-}
-
-.dj_ie .tundra .dijitToolbar .dijitComboButton .dijitButtonContentsFocused,
-.dj_ie .tundra .dijitToolbar .dijitComboButton .dijitDownArrowButtonFocused {
-	/* focus border doesn't appear on <td> for IE, so need to add it manually */
-	border: 1px #555 dotted !important;
-	padding: 0px;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Tree.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Tree.css
deleted file mode 100644
index 08426d7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Tree.css
+++ /dev/null
@@ -1,115 +0,0 @@
-
-/* Tree */
-
-.tundra .dijitTreeNode {
-    background-image : url('images/i.gif');
-    background-repeat : repeat-y;
-    zoom: 1;	/* force layout on IE (TODO: may not be needed anymore) */
-}
-
-/* left vertical line (grid) for all nodes */
-.tundra .dijitTreeIsLast {
-    background: url('images/i_half.gif') no-repeat;
-}
-
-.tundra .dijitTreeIsRoot {
-    margin-left: 0;
-    background-image: none;
-}
-
-.tundra .dijitTreeExpando {
-    width: 18px;
-    height: 18px;
-}
-
-.tundra .dijitTreeRow {
-	/* so insert line shows up on IE when dropping after a target element */
-	padding-bottom: 2px;
-}
-
-.tundra .dijitTreeContent {
-    min-height: 18px;
-    min-width: 18px;
- }
-
-.tundra .dijitTreeExpand {
-    width: 18px;
-    height: 18px;
-    background-repeat : no-repeat;
-}
-
-/* same style as IE selection */
-.tundra .dijitTreeNodeEmphasized {
-    background-color: Highlight;
-    color: HighlightText;
-}
-
-/* don't use :focus due to opera and IE's lack of support on div's */
-.tundra .dijitTreeLabelFocused {
-	outline: 1px invert dotted;
-}
-.tundra .dijitTreeNodeSelected .dijitTreeLabel {
-	background:#e2ebfe;
-}
-.tundra .dijitTreeNodeHover {
-	/*background-color: #f6f9fa !important;*/
-	/* using a transparent png so that we can still see grid lines, which are (unfortunately) behind the dijitRowNode that we are hovering over */
-	background-image: url(images/treeHover.png);
-	background-repeat: repeat;
-	background-color: none !important;
-}
-
-
-.tundra .dijitTreeExpandoOpened {
-	background-image: url('images/treeExpand_minus.gif');
-}
-
-.tundra .dijitTreeExpandoClosed {
-	background-image: url('images/treeExpand_plus.gif');
-}
-
-.tundra .dijitTreeExpandoLeaf {
-	background-image: url('images/treeExpand_leaf.gif');
-}
-
-.tundra .dijitTreeExpandoLoading {
-	background-image: url('images/treeExpand_loading.gif');
-}
-
-.tundra .dijitTreeIcon {
-	width: 16px;
-	height: 16px;
-}
-
-.tundra .dijitFolderOpened {
-	background: url('images/folderOpened.gif') no-repeat;
-}
-
-.tundra .dijitFolderClosed {
-	background: url('images/folderClosed.gif') no-repeat;
-}
-
-.tundra .dijitLeaf {
-	background: url('images/leaf.gif') no-repeat;
-}
-
-/* Drag and Drop on TreeNodes
- * Put insert line on dijitTreeContent node so it's aligned w/
- * (ie, indented equally with) target element, even
- * though dijitTreeRowNode is the actual "drag object"
- */
-.tundra .dijitTreeNode .dojoDndItemBefore,
-.tundra .dijitTreeNode .dojoDndItemAfter {
-	border-bottom: none;
-	border-top: none;
-}
-
-.tundra .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
-	/* copied from Common.css */
-	border-top: 2px solid #369;
-}
-
-.tundra .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
-	/* copied from Common.css */
-	border-bottom: 2px solid #369;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Tree_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Tree_rtl.css
deleted file mode 100644
index f5c1013..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/Tree_rtl.css
+++ /dev/null
@@ -1,17 +0,0 @@
-
-/* Tree */
-.dijitRtl .tundra .dijitTreeContainer .dijitTreeNode {
-    background-image : none;
-}
-
-.dijitRtl .tundra .dijitTreeContainer .dijitTreeExpandoOpened {
-	background-image: url('images/treeExpand_minus_rtl.gif');
-}
-
-.dijitRtl .tundra .dijitTreeContainer .dijitTreeExpandoClosed {
-	background-image: url('images/treeExpand_plus_rtl.gif');
-}
-
-.dijitRtl .tundra .dijitTreeContainer .dijitTreeExpandoLeaf {
-	background-image: none;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Button.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Button.css
deleted file mode 100644
index b0c806c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Button.css
+++ /dev/null
@@ -1,160 +0,0 @@
-
-/*****
-		dijit.form.Button
-		dijit.form.DropDownButton
-		dijit.form.ComboButton
-		dijit.form.ComboBox (partial)
- *****/
-
-.tundra .dijitButtonNode {
-	/* enabled state - inner */
-	border: 1px solid #c0c0c0;
-	border-bottom: 1px solid #9b9b9b;
-	padding: 0.1em 0.2em 0.2em 0.2em;
-	background: #fff url("../images/buttonEnabled.png") repeat-x bottom left;
-}
-
-.tundra .dijitSelect .dijitButtonContents {
-	border-right: none;
-}
-.dijitRtl .tundra .dijitSelect .dijitButtonContents {
-	border-left: none;
-	border-right-width: 1px;
-}
-
-.tundra .dijitButtonNode button {
-	border: 0px;
-	background-color: transparent;
-}
-
-.tundra .dijitButtonText {
-	text-align: center;
-	padding: 0 0.3em;
-}
-
-.tundra .dijitDisabled .dijitButtonText {
-	color: #7F7F7F;
-}
-
-/*
-.tundra .dijitComboBox .dijitButtonNode {
-	border: 0px;
-}
-*/
-
-.tundra .dijitArrowButton {
-	color: #111;
-}
-
-.tundra .dijitComboButton .dijitDownArrowButton {
-	padding-right:4px;
-}
-
-.tundra .dijitComboBoxReadOnly,
-.tundra .dijitSpinnerReadOnly,
-.tundra .dijitSpinnerReadOnly .dijitButtonNode,
-.tundra .dijitButtonDisabled .dijitButtonNode,
-.tundra .dijitToggleButtonDisabled .dijitButtonNode,
-.tundra .dijitDropDownButtonDisabled .dijitButtonNode,
-.tundra .dijitComboButtonDisabled .dijitButtonNode,
-.tundra .dijitComboBoxDisabled,
-.tundra .dijitSpinnerDisabled,
-.tundra .dijitSpinnerDisabled .dijitButtonNode {
-	/* disabled state - inner */
-	/* border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5; */
-	border-color: #d5d5d5 #d5d5d5 #bdbdbd #d5d5d5;
-	background:#e4e4e4 url("../images/buttonDisabled.png") top repeat-x;
-}
-
-.tundra .dijitButtonHover .dijitButtonNode,
-.tundra .dijitButtonNodeHover,
-.tundra .dijitToggleButtonHover .dijitButtonNode,
-.tundra .dijitDropDownButtonHover .dijitButtonNode,
-.tundra .dijitComboButtonHover .dijitButtonContents,
-.tundra .dijitComboButtonDownArrowHover .dijitArrowButton {
-	/* hover state - inner */
-	/* TODO: change from Hover to Selected so that button is still highlighted while drop down is being used */
-	border-color: #a5beda;
-	border-bottom-color:#5c7590;
-	color:#243C5F;
-	background:#fcfdff url("../images/buttonHover.png") repeat-x bottom;
-}
-.tundra .dijitComboBoxHover .dijitDownArrowButton,
-.tundra .dijitSpinnerUpArrowHover .dijitUpArrowButton,
-.tundra .dijitSpinnerDownArrowHover .dijitDownArrowButton {
-	/* same as above except don't adjust border color (it's controlled by the containing Spinner/ComboBox) */
-	color:#243C5F;
-	background:#fcfdff url("../images/buttonHover.png") repeat-x bottom;
-}
-
-.tundra .dijitSpinnerUpArrowActive .dijitUpArrowButton,
-.tundra .dijitSpinnerDownArrowActive .dijitDownArrowButton,
-.tundra .dijitButtonActive .dijitButtonNode,
-.tundra .dijitToggleButtonActive .dijitButtonNode,
-.tundra .dijitDropDownButtonActive .dijitButtonNode,
-.tundra .dijitComboButtonActive .dijitButtonContents,
-.tundra .dijitDownArrowActive .dijitDownArrowButton,
-.tundra .dijitComboBoxActive .dijitDownArrowButton,
-.tundra .dijitStackController .dijitToggleButtonChecked .dijitButtonNode {
-	/* active state - inner (for when you are pressing a normal button, or
-	 * when a radio-type button is in a depressed state
-	 */
-	border-color:#366dba;
-	background: #ededed url("../images/buttonActive.png") bottom repeat-x;
-}
-
-.tundra .dijitArrowButtonInner {
-	background:url("../images/spriteArrows.png") no-repeat scroll 0px center;
-	width: 7px;
-	height: 7px;
-	font-size: 1px;
-	margin: 0px 4px 0px 5px;
-}
-.dj_ie6 .tundra .dijitArrowButtonInner {
-	background-image:url("../images/spriteArrows.gif");
-}
-
-.tundra .dijitLeftArrowButton .dijitArrowButtonInner {
-	background-position: -7px center;
-}
-.tundra .dijitRightArrowButton .dijitArrowButtonInner {
-	background-position: -14px center;
-}
-.tundra .dijitUpArrowButton .dijitArrowButtonInner {
-	background-position: -21px center;
-}
-
-.tundra .dijitDisabled .dijitArrowButtonInner {
-	background-position: -28px center;
-}
-.tundra .dijitDisabled .dijitLeftArrowButton .dijitArrowButtonInner {
-	background-position: -35px center;
-}
-.tundra .dijitDisabled .dijitRightArrowButton .dijitArrowButtonInner {
-	background-position: -42px center;
-}
-.tundra .dijitDisabled .dijitUpArrowButton .dijitArrowButtonInner {
-	background-position: -49px center;
-}
-
-
-/* Since ComboBox doesn't have it's own file... */
-.tundra .dijitComboBox .dijitArrowButton .dijitArrowButtonInner {
-	height: auto;
-	font-size: 100%;
-	font-size: inherit;
-}
-.tundra .dijitComboBoxHover .dijitArrowButtonInner {
-	/* TODO: url("../images/arrowDownHover.png") but in IE6 it flickers some? */
-}
-
-/* Since Spinner doesn't have it's own file */
-.tundra .dijitSpinner .dijitArrowButtonInner {
-	display: block;  /* inline just isnt going to work for us here IMO */
-	position:absolute;
-	top: 50%;
-	margin-top: -4px; /* half its height */
-	left: 50%;
-	margin-left: -4px; /* half its width */
-	line-height: 2px;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Checkbox.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Checkbox.css
deleted file mode 100644
index 5a93037..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Checkbox.css
+++ /dev/null
@@ -1,54 +0,0 @@
-.tundra .dijitToggleButton .dijitCheckBoxIcon {
-	background-image: url('../images/checkmarkNoBorder.png');
-}
-
-.dj_ie6 .tundra .dijitToggleButton .dijitCheckBoxIcon {
-	background-image: url('../images/checkmarkNoBorder.gif');
-}
-
-.tundra .dijitCheckBox,
-.tundra .dijitCheckBoxIcon		/* inside a toggle button */	{
-	background-image: url('../images/checkmark.png'); /* checkbox sprite image */
-	background-repeat: no-repeat;
-	width: 16px;
-	height: 16px;
-	margin: 0 2px 0 0;
-	padding: 0;
-}
-
-.dj_ie6 .tundra .dijitCheckBox,
-.dj_ie6 .tundra .dijitCheckBoxIcon		/* inside a toggle button */	{
-	background-image: url('../images/checkmark.gif'); /* checkbox sprite image */
-}
-
-.tundra .dijitCheckBox,
-.tundra .dijitToggleButton .dijitCheckBoxIcon {
-	/* unchecked */
-	background-position: -16px;
-}
-
-.tundra .dijitCheckBoxChecked,
-.tundra .dijitToggleButtonChecked .dijitCheckBoxIcon {
-	/* checked */
-	background-position: 0px;
-}
-
-.tundra .dijitCheckBoxDisabled {
-	/* disabled */
-	background-position: -48px;
-}
-
-.tundra .dijitCheckBoxCheckedDisabled {
-	/* disabled but checked */
-	background-position: -32px;
-}
-
-.tundra .dijitCheckBoxHover {
-	/* hovering over an unchecked enabled checkbox */
-	background-position: -80px;
-}
-
-.tundra .dijitCheckBoxCheckedHover {
-	/* hovering over a checked enabled checkbox */
-	background-position: -64px;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Common.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Common.css
deleted file mode 100644
index 7d5d1de..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Common.css
+++ /dev/null
@@ -1,148 +0,0 @@
-
-/****
-		dijit.form.TextBox
-		dijit.form.ValidationTextBox
-		dijit.form.SerializableTextBox
-		dijit.form.RangeBoundTextBox
-		dijit.form.NumberTextBox
-		dijit.form.CurrencyTextBox
-		dijit.form.NumberSpinner
-		dijit.form.ComboBox (partial)
- ****/
-
-.tundra .dijitInputField INPUT,
-.tundra .dijitTextBox,
-.tundra .dijitComboBox,
-.tundra .dijitSpinner {
-	margin: 0em 0.1em;
-}
-
-.tundra .dijitTextBox,
-.tundra .dijitComboBox,
-.tundra .dijitSpinner,
-.tundra .dijitTextArea {
-	font-family: sans-serif;
-	font-size: 100%;
-}
-
-.tundra .dijitTextArea {
-	padding: 3px;
-}
-
-.tundra .dijitTextBox,
-.tundra .dijitComboBox,
-.tundra .dijitSpinner,
-.tundra .dijitTextArea,
-.tundra .dijitInlineEditor input {
-	/* 	For all except dijit.form.NumberSpinner:  the actual input element.
-		For TextBox, ComboBox, Spinner: the div that contains the input.
-		Otherwise the actual input element.
-	*/
-	background:#fff url("../images/validationInputBg.png") repeat-x top left;
-	#background:#fff url('../images/validationInputBg.gif') repeat-x top left;
-	border:1px solid #b3b3b3;
-	line-height: normal;
-}
-
-/* ComboBox specifix rules*/
-.tundra .dijitComboBox .dijitInputField {
-	padding: 1px 0;
-}
-
-.tundra .dijitComboBox .dijitButtonNode {
-	padding: 1px 0.2em;
-}
-.tundra .dijitComboBox .dijitButtonNode,
-.tundra .dijitSpinner .dijitButtonNode {
-	/* line between the input area and the drop down button */
-	border-color: #9b9b9b;
-	border-width: 0px 0px 0px 1px;
-	border-style: solid;
-}
-
-.tundra .dijitTextBoxFocused,
-.tundra .dijitComboBoxFocused,
-.tundra .dijitSpinnerFocused, .tundra .dijitSpinnerUpArrowActive, .tundra .dijitSpinnerDownArrowActive,
-.tundra .dijitTextAreaFocused {
-	/* input field when focused (ie: typing affects it) */
-	border-color:#406b9b;
-}
-.tundra .dijitComboBoxFocused .dijitButtonNode,
-.tundra .dijitSpinnerFocused .dijitButtonNode,
-.tundra .dijitSpinnerUpArrowActive .dijitButtonNode,
-.tundra .dijitSpinnerDownArrowActive .dijitButtonNode {
-	border-left-color:#366dba;
-}
-.tundra .dijitSpinnerFocused .dijitDownArrowButton,
-.tundra .dijitSpinnerUpArrowActive .dijitDownArrowButton,
-.tundra .dijitSpinnerDownArrowActive .dijitDownArrowButton {
-	border-top-color:#366dba;
-}
-
-.tundra .dijitError {
-	background-color:#f9f7ba;
-	background-image:none;
-}
-.dj_ie6 .tundra .dijitError INPUT {
-	/* background-color: transparent on an <input> doesn't work on IE6 */
-	background-color:#f9f7ba !important;
-}
-
-.tundra .dijitErrorFocused {
-	background-color:#f9f999;
-	background-image:none;
-}
-.dj_ie6 .tundra .dijitErrorFocused INPUT {
-	/* background-color: transparent on an <input> doesn't work on IE6 */
-	background-color:#f9f999 !important;
-}
-
-/* Validation errors  */
-.tundra .dijitValidationIcon {
-	/* prevent height change when widget goes from valid to invalid state */
-	width: 16px;
-	background: transparent url('../images/warning.png') no-repeat center center;
-}
-
-
-
-/* inline edit boxen */
-.tundra .dijitInlineValue {
-	/* span around an inline-editable value when NOT in edit mode */
-	padding:3px;
-	margin:4px;
-}
-
-
-.tundra .dijitInlineEditor {
-	/* fieldset surrounding an inlineEditor in edit mode */
-	display: inline-block;
-	#display:inline;
-}
-
-.dijitInlineEditor .saveButton,
-.dijitInlineEditor .cancelButton {
-	margin:3px 3px 3px 0px;
-}
-
-.RichTextEditable {
-	border:1px solid #bfbfbf;
-	border-top:0;
-}
-
-/*
- * IE6: can't display PNG images with gradient transparency.
- * Want to use filter property for those images, but then need to specify a path relative
- * to the main page, rather than relative to this file... using gifs for now
- */
-
-/* The highlight is shown in the ComboBox menu. */
-.tundra .dijitComboBoxHighlightMatch {
-	background-color:#a5beda;
-}
-
-
-.tundra .dijitFocusedLabel {
-	/* for checkboxes or radio buttons, hatch border around the corresponding label, to indicate focus */
-	outline: 1px dotted #666666;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Common_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Common_rtl.css
deleted file mode 100644
index 3438a0a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Common_rtl.css
+++ /dev/null
@@ -1,6 +0,0 @@
-.dijitRtl .tundra .dijitComboBox .dijitButtonNode,
-.dijitRtl .tundra .dijitSpinner .dijitButtonNode {
-	/* line between the input area and the drop down button */
-	border-left-width: 0px;
-	border-right-width: 1px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/RadioButton.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/RadioButton.css
deleted file mode 100644
index e87dc85..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/RadioButton.css
+++ /dev/null
@@ -1,54 +0,0 @@
-.tundra .dijitToggleButton .dijitRadio,
-.tundra .dijitToggleButton .dijitRadioIcon {
-	background-image: url('../images/checkmarkNoBorder.png');
-}
-
-.dj_ie6 .tundra .dijitToggleButton .dijitRadio,
-.dj_ie6 .tundra .dijitToggleButton .dijitRadioIcon {
-	background-image: url('../images/checkmarkNoBorder.gif');
-}
-
-.tundra .dijitRadio,
-.tundra .dijitRadioIcon	{		/* inside a toggle button */
-	background-image: url('../images/checkmark.png'); /* checkbox sprite image */
-	background-repeat: no-repeat;
-	width: 16px;
-	height: 16px;
-	margin: 0;
-	padding: 0;
-}
-
-.dj_ie6 .tundra .dijitRadio,
-.dj_ie6 .tundra .dijitRadioIcon	{		/* inside a toggle button */
-	background-image: url('../images/checkmark.gif'); /* checkbox sprite image */
-}
-
-.tundra .dijitRadio,
-.tundra .dijitToggleButton .dijitRadioIcon {
-	/* unselected */
-	background-position: -112px;
-}
-
-.tundra .dijitRadioDisabled {
-	/* unselected and disabled */
-	background-position: -144px;
-}
-
-.tundra .dijitRadioHover {
-	/* hovering over an unselected enabled radio button */
-	background-position: -176px;
-}
-
-.tundra .dijitRadioChecked,
-.tundra .dijitRadioCheckedHover,
-.tundra .dijitToggleButtonChecked .dijitRadioIcon {
-	/* selected.  Since clicking a selected radio button doesn't change anything, there's
-	 * no hover effect on selected radio buttons.
-	 */
-	background-position: -96px;
-}
-
-.tundra .dijitRadioCheckedDisabled {
-	/* selected but disabled */
-	background-position: -128px;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Select.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Select.css
deleted file mode 100644
index 1701ef8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Select.css
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Cursor States */
-.tundra .dijitSelectDisabled * {
-    cursor: not-allowed !important;
-}
-.tundra .dijitSelectReadOnly * {
-    cursor: default !important;
-}
-.tundra .dijitSelect .dijitButtonNode {
-	padding: 0px;
-}
-
-/* Make unselected content portion "look" more like a text box and less like a button */
-.tundra .dijitSelect .dijitButtonContents {
-	padding-top: 1px;
-    background:#fff url("../images/validationInputBg.png") repeat-x top left;
-    #background:#fff url('../images/validationInputBg.gif') repeat-x top left;
-}
-.tundra .dijitSelectHover .dijitButtonContents,
-.tundra .dijitSelectActive .dijitButtonContents,
-.tundra .dijitSelectOpened .dijitButtonContents,
-.tundra .dijitSelectDisabled .dijitButtonContents,
-.tundra .dijitSelectReadOnly .dijitButtonContents{
-	background: transparent none;
-}
-.dj_ie .tundra .dijitSelect .dijitButtonContents {
-	padding-top: 0px;
-}
-
-/* Mirror DropDownButton */
-.tundra .dijitSelectDisabled .dijitButtonNode {
-    border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
-    background:#e4e4e4 url("../images/buttonDisabled.png") top repeat-x;
-}
-.dj_ie .tundra .dijitSelectDisabled  .dijitButtonNode * {
-	filter: gray() alpha(opacity=50);
-}
-
-.tundra .dijitSelectHover .dijitButtonNode {
-    border-color:#a5beda;
-    border-bottom-color:#5c7590;
-    border-right-color:#5c7590;
-    color:#243C5F;
-    background:#fcfdff url("../images/buttonHover.png") repeat-x bottom;
-}
-
-.tundra .dijitSelectActive .dijitButtonNode,
-.tundra .dijitSelectOpened .dijitButtonNode {
-    border-color:#366dba;
-    background: #ededed url("../images/buttonActive.png") bottom repeat-x;
-}
-
-/* Make the menu look more combobox-like */
-.tundra .dijitSelectMenu td {
-	padding: 0em;
-}
-.tundra .dijitSelectMenu .dijitMenuItemIcon {
-	margin: 0.1em 0.2em;
-	display: none;
-}
-.tundra .dijitSelectMenu .dijitMenuItemLabel,
-.tundra .dijitSelectMenu .dijitMenuArrowCell {
-	padding: 0.1em 0.2em;
-}
-
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Slider.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Slider.css
deleted file mode 100644
index f07b3ff..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Slider.css
+++ /dev/null
@@ -1,154 +0,0 @@
-.tundra .dijitSliderProgressBarH {
-	border-color: #aab0bb;
-	background: #c0c2c5 url("../images/sliderFull.png") repeat-x top left;
-}
-
-.tundra .dijitSliderProgressBarV {
-	border-color: #aab0bb;
-	background: #c0c2c5 url("../images/sliderFullVertical.png") repeat-y bottom left;
-}
-
-.tundra .dijitSliderFocused .dijitSliderProgressBarH,
-.tundra .dijitSliderFocused .dijitSliderLeftBumper {
-	background-image:url("../images/sliderFullFocus.png");
-}
-
-.tundra .dijitSliderFocused .dijitSliderProgressBarV,
-.tundra .dijitSliderFocused .dijitSliderBottomBumper {
-	background-image:url("../images/sliderFullVerticalFocus.png");
-}
-
-.tundra .dijitSliderRemainingBarV {
-	border-color: #b4b4b4;
-	background: #dcdcdc url("../images/sliderEmptyVertical.png") repeat-y bottom left;
-}
-
-.tundra .dijitSliderRemainingBarH {
-	border-color: #b4b4b4;
-	background: #dcdcdc url("../images/sliderEmpty.png") repeat-x top left;
-}
-
-.tundra .dijitSliderBar {
-	border-style: solid;
-	outline:1px;
-}
-.tundra .dijitSliderFocused .dijitSliderBar {
-	border-color:#888;
-}
-
-.dijit_a11y .dijitSliderProgressBar {
-	background-color:#888 !important;
-}
-
-.tundra .dijitSliderImageHandleH {
-	border:0px;
-	width:16px;
-	height:16px;
-	background:url("../images/preciseSliderThumb.png") no-repeat center top;
-	cursor:pointer;
-}
-.tundra .dijitSliderFocused .dijitSliderImageHandleH {
-	background-image:url("../images/preciseSliderThumbFocus.png");
-	#background-image:url("../images/preciseSliderThumbFocus.gif");
-}
-
-.dj_ie6 .tundra .dijitSliderImageHandleH {
-	background-image:url("../images/preciseSliderThumb.gif");
-}
-
-.tundra .dijitSliderLeftBumper {
-	border-left-width: 1px;
-	border-color: #aab0bb;
-	background: #c0c2c5 url("../images/sliderFull.png") repeat-x top left;
-}
-
-.tundra .dijitSliderRightBumper {
-	background: #dcdcdc url("../images/sliderEmpty.png") repeat-x top left;
-	border-color: #b4b4b4;
-	border-right-width: 1px;
-}
-
-.tundra .dijitSliderImageHandleV {
-	border:0px;
-	width:16px;
-	height:16px;
-	background:url("../images/sliderThumb.png") no-repeat center center;
-	cursor:pointer;
-}
-
-.tundra .dijitSliderFocused .dijitSliderImageHandleV {
-	background-image:url("../images/sliderThumbFocus.png");
-}
-.dj_ie6 .tundra .dijitSliderFocused .dijitSliderImageHandleV {
-	background-image:url("../images/sliderThumbFocus.gif");
-}
-
-.tundra .dijitSliderBottomBumper {
-	border-bottom-width: 1px;
-	border-color: #aab0bb;
-	background: #c0c2c5 url("../images/sliderFullVertical.png") repeat-y bottom left;
-}
-
-.tundra .dijitSliderTopBumper {
-	background: #dcdcdc url("../images/sliderEmptyVertical.png") repeat-y top left;
-	border-color: #b4b4b4;
-	border-top-width: 1px;
-}
-
-.tundra .dijitSliderDecrementIconH,
-.tundra .dijitSliderDecrementIconV,
-.tundra .dijitSliderIncrementIconH,
-.tundra .dijitSliderIncrementIconV {
-	cursor: pointer;
-	background-image: url('../images/spriteArrows.png');
-	background-repeat: no-repeat;
-	margin: 5px;
-	height: 7px;
-	width: 7px;
-	font-size: 1px;
-}
-.dj_ie6 .tundra .dijitSliderDecrementIconH,
-.dj_ie6 .tundra .dijitSliderDecrementIconV,
-.dj_ie6 .tundra .dijitSliderIncrementIconH,
-.dj_ie6 .tundra .dijitSliderIncrementIconV {
-	background-image: url('../images/spriteArrows.gif');
-}
-
-.tundra .dijitSliderDecrementIconH {
-	background-position: -7px 0px;
-}
-.tundra .dijitSliderIncrementIconH {
-	background-position: -14px 0px;
-}
-.tundra .dijitSliderDecrementIconV {
-	background-position: 0px 0px;
-}
-.tundra .dijitSliderIncrementIconV {
-	background-position: -21px 0px;
-}
-
-.tundra .dijitSliderButtonInner {
-	visibility:hidden;
-}
-
-.tundra .dijitSliderReadOnly *,
-.tundra .dijitSliderDisabled * {
-	border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
-	color: #bdbdbd;
-}
-.tundra .dijitSliderReadOnly .dijitSliderDecrementIconH,
-.tundra .dijitSliderDisabled .dijitSliderDecrementIconH {
-	background-position: -35px 0px;
-}
-.tundra .dijitSliderReadOnly .dijitSliderIncrementIconH,
-.tundra .dijitSliderDisabled .dijitSliderIncrementIconH {
-	background-position: -42px 0px;
-}
-.tundra .dijitSliderReadOnly .dijitSliderDecrementIconV,
-.tundra .dijitSliderDisabled .dijitSliderDecrementIconV {
-	background-position: -28px 0px;
-}
-.tundra .dijitSliderReadOnly .dijitSliderIncrementIconV,
-.tundra .dijitSliderDisabled .dijitSliderIncrementIconV {
-	background-position: -49px 0px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Slider_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Slider_rtl.css
deleted file mode 100644
index 64bf95f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/form/Slider_rtl.css
+++ /dev/null
@@ -1,31 +0,0 @@
-.dijitRtl .tundra .dijitSliderProgressBarH,
-.dijitRtl .tundra .dijitSliderRemainingBarH,
-.dijitRtl .tundra .dijitSliderLeftBumper,
-.dijitRtl .tundra .dijitSliderRightBumper,
-.dijitRtl .tundra .dijitSliderTopBumper {
-	background-position: top right;
-}
-
-.dijitRtl .tundra .dijitSliderProgressBarV,
-.dijitRtl .tundra .dijitSliderRemainingBarV,
-.dijitRtl .tundra .dijitSliderBottomBumper {
-	background-position: bottom right;
-}
-
-.dijitRtl .tundra .dijitSliderLeftBumper {
-	border-left-width: 0px;
-	border-right-width: 1px;
-}
-
-.dijitRtl .tundra .dijitSliderRightBumper {
-	border-left-width: 1px;
-	border-right-width: 0px;
-}
-
-.dijitRtl .tundra .dijitSliderIncrementIconH {
-	background-position: -7px 0px;
-}
-
-.dijitRtl .tundra .dijitSliderDecrementIconH {
-	background-position: -14px 0px;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/accordionItemActive.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/accordionItemActive.gif
deleted file mode 100644
index ccff383..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/accordionItemActive.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/accordionItemHover.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/accordionItemHover.gif
deleted file mode 100644
index 96bd3a4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/accordionItemHover.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/buttonActive.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/buttonActive.png
deleted file mode 100644
index 09417b1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/buttonActive.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/buttonDisabled.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/buttonDisabled.png
deleted file mode 100644
index 70766f4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/buttonDisabled.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/buttonEnabled.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/buttonEnabled.png
deleted file mode 100644
index cf0eb20..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/buttonEnabled.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/buttonHover.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/buttonHover.png
deleted file mode 100644
index b074e4e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/buttonHover.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/calendarDayLabel.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/calendarDayLabel.png
deleted file mode 100644
index c1a1553..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/calendarDayLabel.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/calendarMonthLabel.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/calendarMonthLabel.png
deleted file mode 100644
index fd2cf0a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/calendarMonthLabel.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/calendarYearLabel.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/calendarYearLabel.png
deleted file mode 100644
index dd344f5..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/calendarYearLabel.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/checkmark.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/checkmark.gif
deleted file mode 100644
index ae6faa9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/checkmark.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/checkmark.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/checkmark.png
deleted file mode 100644
index 0307109..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/checkmark.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/checkmarkNoBorder.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/checkmarkNoBorder.gif
deleted file mode 100644
index 324bfb3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/checkmarkNoBorder.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/checkmarkNoBorder.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/checkmarkNoBorder.png
deleted file mode 100644
index 9cec0c0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/checkmarkNoBorder.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/circleIcon.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/circleIcon.gif
deleted file mode 100644
index d582290..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/circleIcon.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/circleIcon.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/circleIcon.png
deleted file mode 100644
index 6f059e6..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/circleIcon.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/comboArrowDown.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/comboArrowDown.gif
deleted file mode 100644
index e00a87b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/comboArrowDown.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dijitProgressBarAnim.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dijitProgressBarAnim.gif
deleted file mode 100644
index 167a3e0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dijitProgressBarAnim.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dijitProgressBarAnim.psd b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dijitProgressBarAnim.psd
deleted file mode 100644
index 0a7bf23..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dijitProgressBarAnim.psd
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dndCopy.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dndCopy.png
deleted file mode 100644
index baecd7c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dndCopy.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dndMove.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dndMove.png
deleted file mode 100644
index 07f878c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dndMove.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dndNoCopy.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dndNoCopy.png
deleted file mode 100644
index 9bf9c33..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dndNoCopy.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dndNoMove.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dndNoMove.png
deleted file mode 100644
index cb8bd8b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dndNoMove.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dojoTundraGradientBg.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dojoTundraGradientBg.gif
deleted file mode 100644
index 0da1239..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dojoTundraGradientBg.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dojoTundraGradientBg.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dojoTundraGradientBg.png
deleted file mode 100644
index ac118dd..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/dojoTundraGradientBg.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/doubleArrowDown.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/doubleArrowDown.png
deleted file mode 100644
index 92678d2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/doubleArrowDown.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/doubleArrowUp.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/doubleArrowUp.png
deleted file mode 100644
index bba30fe..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/doubleArrowUp.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/editor.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/editor.gif
deleted file mode 100644
index 750c6b9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/editor.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/editorDisabled.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/editorDisabled.gif
deleted file mode 100644
index e40460d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/editorDisabled.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/editorDisabled_rtl.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/editorDisabled_rtl.gif
deleted file mode 100644
index a0f6c10..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/editorDisabled_rtl.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/editorMaster.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/editorMaster.png
deleted file mode 100644
index 2e6772f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/editorMaster.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/editor_rtl.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/editor_rtl.gif
deleted file mode 100644
index a9740c2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/editor_rtl.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/folderClosed.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/folderClosed.gif
deleted file mode 100644
index 9d5fcbc..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/folderClosed.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/folderOpened.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/folderOpened.gif
deleted file mode 100644
index a514c7b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/folderOpened.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/i.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/i.gif
deleted file mode 100644
index ebd95a7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/i.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/i_half.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/i_half.gif
deleted file mode 100644
index 2947c4f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/i_half.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/i_half_rtl.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/i_half_rtl.gif
deleted file mode 100644
index 4f60ec4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/i_half_rtl.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/i_rtl.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/i_rtl.gif
deleted file mode 100644
index 7dafaad..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/i_rtl.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/leaf.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/leaf.gif
deleted file mode 100644
index 85b0178..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/leaf.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/loading.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/loading.gif
deleted file mode 100644
index 6e7c8e5..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/loading.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/menu.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/menu.png
deleted file mode 100644
index f5b93d1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/menu.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/minusButton.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/minusButton.gif
deleted file mode 100644
index 48d5172..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/minusButton.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/no.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/no.gif
deleted file mode 100644
index 9021a14..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/no.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/noX.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/noX.gif
deleted file mode 100644
index 4a16dc7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/noX.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/plusButton.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/plusButton.gif
deleted file mode 100644
index 103c021..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/plusButton.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/popupMenuBg.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/popupMenuBg.gif
deleted file mode 100644
index 15f4f1b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/popupMenuBg.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/preciseSliderThumb.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/preciseSliderThumb.gif
deleted file mode 100644
index 15d4879..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/preciseSliderThumb.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/preciseSliderThumb.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/preciseSliderThumb.png
deleted file mode 100644
index f2fc338..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/preciseSliderThumb.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/preciseSliderThumbFocus.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/preciseSliderThumbFocus.gif
deleted file mode 100644
index b44611c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/preciseSliderThumbFocus.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/preciseSliderThumbFocus.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/preciseSliderThumbFocus.png
deleted file mode 100644
index fb06323..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/preciseSliderThumbFocus.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-1.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-1.png
deleted file mode 100644
index cfc3fd2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-1.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-2.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-2.png
deleted file mode 100644
index d27981d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-2.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-3.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-3.png
deleted file mode 100644
index 3b92a7d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-3.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-4.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-4.png
deleted file mode 100644
index 61e4276..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-4.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-5.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-5.png
deleted file mode 100644
index 48b189a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-5.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-6.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-6.png
deleted file mode 100644
index af50c4d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-6.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-7.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-7.png
deleted file mode 100644
index a4fffa3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-7.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-8.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-8.png
deleted file mode 100644
index b4c92f3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-8.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-9.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-9.png
deleted file mode 100644
index d8bff13..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim-9.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim.gif
deleted file mode 100644
index d3df139..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim.psd b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim.psd
deleted file mode 100644
index 0a7bf23..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarAnim.psd
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarEmpty.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarEmpty.png
deleted file mode 100644
index 07f4c91..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarEmpty.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarFull.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarFull.png
deleted file mode 100644
index 0ce60f5..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/progressBarFull.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/radioButtonActive.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/radioButtonActive.png
deleted file mode 100644
index 60840c7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/radioButtonActive.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/radioButtonActiveDisabled.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/radioButtonActiveDisabled.png
deleted file mode 100644
index b49724e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/radioButtonActiveDisabled.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/radioButtonActiveHover.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/radioButtonActiveHover.png
deleted file mode 100644
index f21d4e5..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/radioButtonActiveHover.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/radioButtonDisabled.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/radioButtonDisabled.png
deleted file mode 100644
index 8da7e78..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/radioButtonDisabled.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/radioButtonEnabled.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/radioButtonEnabled.png
deleted file mode 100644
index 4342fea..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/radioButtonEnabled.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/radioButtonHover.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/radioButtonHover.png
deleted file mode 100644
index fcb697f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/radioButtonHover.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderEmpty.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderEmpty.png
deleted file mode 100644
index 070c12f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderEmpty.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderEmptyVertical.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderEmptyVertical.png
deleted file mode 100644
index 45aceb7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderEmptyVertical.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderFull.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderFull.png
deleted file mode 100644
index 4b3fcbb..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderFull.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderFullFocus.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderFullFocus.png
deleted file mode 100644
index ee19356..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderFullFocus.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderFullVertical.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderFullVertical.png
deleted file mode 100644
index e7618e8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderFullVertical.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderFullVerticalFocus.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderFullVerticalFocus.png
deleted file mode 100644
index 3ab37e6..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderFullVerticalFocus.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderThumb.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderThumb.png
deleted file mode 100644
index fe33583..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderThumb.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderThumbFocus.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderThumbFocus.gif
deleted file mode 100644
index 15dd3d9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderThumbFocus.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderThumbFocus.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderThumbFocus.png
deleted file mode 100644
index fe9763a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/sliderThumbFocus.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/smallArrowDown.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/smallArrowDown.png
deleted file mode 100644
index cabd01c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/smallArrowDown.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/smallArrowUp.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/smallArrowUp.png
deleted file mode 100644
index a4dd670..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/smallArrowUp.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/splitContainerSizerH-thumb.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/splitContainerSizerH-thumb.png
deleted file mode 100644
index e7bc204..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/splitContainerSizerH-thumb.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/splitContainerSizerH.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/splitContainerSizerH.png
deleted file mode 100644
index 0e5e471..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/splitContainerSizerH.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/splitContainerSizerV-thumb.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/splitContainerSizerV-thumb.png
deleted file mode 100644
index 410a0a7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/splitContainerSizerV-thumb.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/splitContainerSizerV.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/splitContainerSizerV.png
deleted file mode 100644
index 6781f0e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/splitContainerSizerV.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/spriteArrows.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/spriteArrows.gif
deleted file mode 100644
index 56a37f4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/spriteArrows.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/spriteArrows.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/spriteArrows.png
deleted file mode 100644
index e0229c9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/spriteArrows.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/spriteRoundedIconsSmall.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/spriteRoundedIconsSmall.gif
deleted file mode 100644
index 251389a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/spriteRoundedIconsSmall.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/spriteRoundedIconsSmall.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/spriteRoundedIconsSmall.png
deleted file mode 100644
index e81ba07..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/spriteRoundedIconsSmall.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabActive.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabActive.png
deleted file mode 100644
index eaf1ed4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabActive.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabClose.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabClose.gif
deleted file mode 100644
index 2cb0ee1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabClose.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabClose.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabClose.png
deleted file mode 100644
index 136cd22..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabClose.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabCloseHover.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabCloseHover.gif
deleted file mode 100644
index f59471e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabCloseHover.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabCloseHover.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabCloseHover.png
deleted file mode 100644
index 290e77f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabCloseHover.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabDisabled.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabDisabled.png
deleted file mode 100644
index ea0f617..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabDisabled.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabEnabled.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabEnabled.png
deleted file mode 100644
index d40cf45..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabEnabled.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabHover.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabHover.gif
deleted file mode 100644
index 471e0ee..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabHover.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabHover.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabHover.png
deleted file mode 100644
index 16487f1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tabHover.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/titleBar.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/titleBar.png
deleted file mode 100644
index b2609f3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/titleBar.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/titleBarBg.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/titleBarBg.gif
deleted file mode 100644
index 1cd57cf..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/titleBarBg.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorDown.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorDown.gif
deleted file mode 100644
index 18b2795..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorDown.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorDown.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorDown.png
deleted file mode 100644
index 1aff5a3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorDown.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorLeft.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorLeft.gif
deleted file mode 100644
index 3d9cbc5..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorLeft.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorLeft.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorLeft.png
deleted file mode 100644
index e68fec3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorLeft.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorRight.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorRight.gif
deleted file mode 100644
index 2b887f7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorRight.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorRight.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorRight.png
deleted file mode 100644
index dc2434a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorRight.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorUp.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorUp.gif
deleted file mode 100644
index d0cad8a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorUp.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorUp.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorUp.png
deleted file mode 100644
index 55a378b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/tooltipConnectorUp.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_leaf.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_leaf.gif
deleted file mode 100644
index 4b1c6c1..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_leaf.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_leaf_rtl.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_leaf_rtl.gif
deleted file mode 100644
index b563d7c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_leaf_rtl.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_loading.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_loading.gif
deleted file mode 100644
index 424d376..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_loading.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_minus.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_minus.gif
deleted file mode 100644
index 5977782..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_minus.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_minus_rtl.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_minus_rtl.gif
deleted file mode 100644
index cf50054..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_minus_rtl.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_mius.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_mius.gif
deleted file mode 100644
index 5977782..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_mius.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_plus.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_plus.gif
deleted file mode 100644
index 2b96a55..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_plus.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_plus_rtl.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_plus_rtl.gif
deleted file mode 100644
index 11f9916..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeExpand_plus_rtl.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeHover.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeHover.png
deleted file mode 100644
index cd6d28b..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/treeHover.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/validationInputBg.gif b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/validationInputBg.gif
deleted file mode 100644
index 5a9916a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/validationInputBg.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/validationInputBg.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/validationInputBg.png
deleted file mode 100644
index d222fb4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/validationInputBg.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/warning.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/warning.png
deleted file mode 100644
index c52f83d..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/images/warning.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/layout/AccordionContainer.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/layout/AccordionContainer.css
deleted file mode 100644
index 0d65c0c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/layout/AccordionContainer.css
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Accordion */
-
-.tundra .dijitAccordionContainer {
-	border-color: #ccc;
-	background-color: #fff;
-}
-
-/* common */
-
-.tundra .dijitAccordionTitle {
-	background:#fafafa url("../images/titleBar.png") repeat-x bottom left;
-	border-top: 1px solid #bfbfbf;
-	padding: 4px 4px 4px 8px;
-	cursor:pointer;
-}
-
-.tundra .dijitAccordionTitle-hover  {
-	background: #f8fafd url("../images/accordionItemHover.gif") bottom repeat-x;
-}
-
-.tundra .dijitAccordionTitle-selected  {
-	background: #f9f9f9 url("../images/accordionItemActive.gif") bottom repeat-x;
-	font-weight: bold;
-	border-top: 1px solid #aaaaaa;
-	border-bottom: 1px solid #bfbfbf;
-	padding: 4px 4px 4px 8px;
-	cursor: default;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/layout/BorderContainer.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/layout/BorderContainer.css
deleted file mode 100644
index 0057fcb..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/layout/BorderContainer.css
+++ /dev/null
@@ -1,69 +0,0 @@
-/* BorderContainer */
-
-.tundra .dijitBorderContainer {
-	background-color: #fcfcfc;
-	padding: 5px;
-}
-
-.tundra .dijitSplitContainer-child,
-.tundra .dijitBorderContainer-child {
-	/* By default put borders on all children of BorderContainer,
-	 *  to give illusion of borders on the splitters themselves.
-	 */
-	border: 1px #ccc solid;
-}
-
-.tundra .dijitBorderContainer-dijitTabContainerTop,
-.tundra .dijitBorderContainer-dijitTabContainerBottom,
-.tundra .dijitBorderContainer-dijitTabContainerLeft,
-.tundra .dijitBorderContainer-dijitTabContainerRight {
-	/* except that TabContainer defines borders on it's sub-nodes (tablist and dijitTabPaneWrapper),
-	 * so override rule setting border on domNode
-	 */
-	 border: none;
-}
-
-.tundra .dijitBorderContainer-dijitBorderContainer {
-	/* also, make nested BorderContainers look like a single big widget with lots of splitters */
-	border: none;
-	padding: 0px;
-}
-
-.tundra .dijitSplitterH,
-.tundra .dijitGutterH {
-	background:#fcfcfc;
-	border:0;
-	height:5px;
-}
-
-.tundra .dijitSplitterH .dijitSplitterThumb {
-	background:#B0B0B0 none;
-	height:1px;
-	top:2px;
-	width:19px;
-}
-
-.tundra .dijitSplitterV,
-.tundra .dijitGutterV {
-	background:#fcfcfc;
-	border:0;
-	width:5px;
-}
-
-.tundra .dijitSplitterV .dijitSplitterThumb {
-	background:#B0B0B0 none;
-	height:19px;
-	left:2px;
-	width:1px;
-}
-
-/* active splitter */
-.tundra .dijitSplitterActive {
-	font-size: 1px;
-	background-image: none;
-	background-color: #aaa;
-	-moz-opacity: 0.6;
-	opacity: 0.6;
-	filter: Alpha(Opacity=60);
-	margin: 0;
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/layout/ContentPane.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/layout/ContentPane.css
deleted file mode 100644
index 27d8fb9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/layout/ContentPane.css
+++ /dev/null
@@ -1,21 +0,0 @@
-/* ContentPane */
-
-.tundra .dijitContentPane {
-	padding: 0px;
-}
-
-/* nested layouts */
-.tundra .dijitTabContainerTop-dijitContentPane,
-.tundra .dijitTabContainerLeft-dijitContentPane,
-.tundra .dijitTabContainerBottom-dijitContentPane,
-.tundra .dijitTabContainerRight-dijitContentPane,
-.tundra .dijitAccordionContainer-dijitContentPane {
-	background-color: #fff;
-	padding: 5px;
-}
-
-.tundra .dijitSplitContainer-dijitContentPane,
-.tundra .dijitBorderContainer-dijitContentPane {
-	background-color: #fff;		/* override background-color setting on parent .dijitBorderContainer */
-	padding: 5px;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/layout/SplitContainer.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/layout/SplitContainer.css
deleted file mode 100644
index a1e8723..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/layout/SplitContainer.css
+++ /dev/null
@@ -1,35 +0,0 @@
-.tundra .dijitSplitContainerSizerH {
-	background:url("../images/splitContainerSizerV.png") repeat-y #fff;
-	border:0;
-	border-left:1px solid #bfbfbf;
-	border-right:1px solid #bfbfbf;
-	width:7px;
-}
-
-.tundra .dijitSplitContainerSizerH .thumb {
-	background:url("../images/splitContainerSizerV-thumb.png") no-repeat #ccc;
-	left:1px;
-	width:3px;
-	height:19px;
-	overflow: hidden;
-}
-
-.tundra .dijitSplitContainerSizerV {
-	background:url("../images/splitContainerSizerH.png") repeat-x #fff;
-	border:0;
-	border-top:1px solid #bfbfbf;
-	border-bottom:1px solid #bfbfbf;
-	height:7px;
-}
-
-.tundra .dijitSplitContainerSizerV .thumb {
-	background:url("../images/splitContainerSizerH-thumb.png") no-repeat #ccc;
-	top:1px;
-	width:19px;
-	height:3px;
-	overflow: hidden;
-}
-
-.tundra .dijitSplitter {
-	border-color: #bfbfbf;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/layout/TabContainer.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/layout/TabContainer.css
deleted file mode 100644
index 187add8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/layout/TabContainer.css
+++ /dev/null
@@ -1,360 +0,0 @@
-/* Tabs, shared classes */
-.tundra .dijitTabPaneWrapper {
-	background:#fff;
-	border:1px solid #ccc;
-	margin: 0;
-	padding: 0;
-}
-
-.tundra .dijitTab {
-	line-height:normal;
-	margin-right:4px;	/* space between one tab and the next in top/bottom mode */
-	padding:0px;
-	border:1px solid #ccc;
-	background:#e2e2e2 url("../images/tabEnabled.png") repeat-x;
-}
-
-.tundra .dijitTabInnerDiv {
-	padding:2px 8px 2px 9px;
-}
-
-.tundra .dijitTabSpacer {
-	display: none;
-}
-
-.tundra .dijitTabContainer .tabStripRBtn {
-	margin-right: 20px;
-}
-.tundra .dijitTabContainer .tabStripLBtn {
-	margin-left: 20px;
-}
-
-.tundra .nowrapTabStrip .dijitTab {
-	top: 2px;
-}
-.tundra .dijitTabContainerBottom .nowrapTabStrip .dijitTab {
-	top: 0px;
-	bottom: 2px;
-}
-
-.tundra .dijitTabContainer .tabStripMenuButton-Hover {
-	cursor: pointer;
-}
-
-/* checked tab*/
-.tundra .dijitTabChecked {
-	/* the selected tab (with or without hover) */
-	background-color:#fff;
-	border-color: #ccc;
-	background-image:none;
-}
-
-/* hovered tab */
-.tundra .dijitTabHover {
-	color: #243C5F;
-	border-top-color:#92a0b3;
-	border-left-color:#92a0b3;
-	border-right-color:#92a0b3;
-	border-bottom-color:#92a0b3;
-	background:#e2e2e2 url("../images/tabHover.gif") repeat-x;
-}
-
-.tundra .dijitTabContainerTop .dijitTabHover {
-	border-bottom-color:#ccc;
-}
-
-.tundra .dijitTabContainerBottom .dijitTabHover {
-	border-top-color:#ccc;
-}
-
-.tundra .dijitTabContainerLeft .dijitTabHover {
-	border-right-color:#ccc;
-}
-
-.tundra .dijitTabContainerRight .dijitTabHover {
-	border-left-color:#ccc;
-}
-
-.tundra .dijitTabContainer .dijitTabCheckedHover {
-	color: inherit;
-	border:1px solid #ccc;
-	background:#fff;
-}
-
-.tundra .dijitTab .dijitClosable .closeImage {
-	background: url("../images/tabClose.png") no-repeat right top;
-	width: 12px;
-	height: 12px;
-}
-
-.tundra .dijitTab .tabLabel {
-	/* make sure tabs w/close button and w/out close button are same height, even w/small (<12px) font */
-	min-height: 12px;
-	display: inline-block;
-}
-
-/* Nested Tabs */
-
-.tundra .dijitTabContainerNested .dijitTabListWrapper {
-	height: auto;
-}
-
-.tundra .dijitTabContainerNested .dijitTabContainerTop-tabs {
-	border-bottom: 1px solid #CCC;
-}
-
-.tundra .dijitTabContainerTabListNested .dijitTab {
-	background: none;
-	border: none;
-	top: 0px;		/* to override top: 1px/-1px for normal tabs */
-}
-.tundra .dijitTabContainerTabListNested .dijitTab .dijitTabContent {
-}
-.tundra .dijitTabContainerTabListNested .dijitTabHover .dijitTabContent .tabLabel {
-	text-decoration: underline;
-}
-.tundra .dijitTabContainerTabListNested .dijitTabChecked .dijitTabContent .tabLabel {
-	text-decoration: underline;
-	font-weight: bold;
-	/*background:#f3f3f3;*/
-}
-.tundra .dijitTabContainer .dijitTabPaneWrapperNested {
-	border: none;	/* prevent double border */
-}
-
-/* Close button */
-
-.tundra .dijitTab .closeImage {
-	background-image : url("../images/tabClose.png");
-}
-.dj_ie6 .tundra .dijitTab .closeImage {
-	background-image : url("../images/tabClose.gif");
-}
-
-.tundra .dijitTab .closeButton-hover .closeImage {
-	background-image : url("../images/tabCloseHover.png");
-}
-.dj_ie6 .tundra .dijitTab .closeButton-hover .closeImage {
-	background-image : url("../images/tabCloseHover.gif");
-}
-
-/* ================================ */
-/* top tabs */
-
-.tundra .dijitTabContainerTop-tabs {
-	margin-bottom: 0px;
-	border-color: #cccccc;
-	padding-left: 3px;
-	background-position: bottom;
-}
-.tundra .dijitTabContainerTop-tabs .dijitTab {
-	top: 0px;
-	margin-bottom: -1px;
-}
-
-/* top container */
-.tundra .dijitTabContainerTop-container {
-	border-top: none;
-}
-
-/* checked tabs */
-.tundra .dijitTabContainerTop-tabs .dijitTabChecked {
-	border-bottom-color:white;
-}
-
-.tundra .dijitTabContainerTop-tabs,
-.tundra .dijitTabContainerBottom-tabs {
-	padding-left: 3px;
-	padding-right: 3px;
-}
-
-/* strip */
-.tundra .dijitTabContainerTopStrip {
-	border-top: 1px solid #CCC;
-	border-right: 1px solid #CCC;
-	border-left: 1px solid #CCC;
-	padding-top: 2px;
-	background: #f2f2f2;
-}
-
-.tundra .dijitTabContainerTopNone {
-	padding-top: 0px;
-}
-/*
-.dj_ie6 .tundra .dijitTabContainerTopNone,
-.dj_ie7 .tundra .dijitTabContainerTopNone {
-	padding-top: -1px;
-}
-*/
-
-/* ================================ */
-/* bottom tabs */
-.tundra .dijitTabContainerBottom-tabs {
-	margin-top: 0px;
-	border-color: #cccccc;
-	background-position: top;
-	padding-left: 3px;
-}
-.tundra .dijitTabContainerBottom-tabs .dijitTab {
-	bottom: 0px;
-	margin-top: -1px;
-}
-
-/* bottom container */
-.tundra .dijitTabContainerBottom-container {
-	border-bottom: none;
-}
-
-/* checked tabs */
-.tundra .dijitTabContainerBottom-tabs .dijitTabChecked {
-	border-top-color:white;
-}
-
-/* strip */
-.tundra .dijitTabContainerBottomStrip {
-	padding-bottom: 2px;
-	border: 1px solid #ccc;
-	background: #f2f2f2;
-	border-top: none;
-}
-
-/* ================================ */
-/* right tabs */
-.tundra .dijitTabContainerRight-tabs {
-	border-color: #ccc;
-	height: 100%;
-	padding-top: 3px;
-}
-
-.tundra .dijitTabContainerRightStrip {
-	margin-left: -1px;
-}
-
-/* right container */
-.tundra .dijitTabContainerRight-container {
-	border-right: none;
-}
-
-/* checked tabs */
-.tundra .dijitTabContainerRight-tabs .dijitTabChecked {
-	border-left-color:white;
-}
-
-/* strip */
-.tundra .dijitTabContainerRightStrip {
-	padding-right: 2px;
-	border: 1px solid #ccc;
-}
-
-.tundra .dijitTabContainerRightStrip {
-	background: #f2f2f2;
-}
-
-/* ================================ */
-/* left tabs */
-.tundra .dijitTabContainerLeft-tabs {
-	border-color: #ccc;
-	padding-top: 3px;
-	height: 100%;
-}
-
-.tundra .dijitTabContainerLeft .dijitTabListWrapper {
-/*	margin-right: -1px;*/
-}
-
-/* left conatiner */
-.tundra .dijitTabContainerLeft-container {
-	border-left: none;
-}
-
-/* checked tabs */
-.tundra .dijitTabContainerLeft-tabs .dijitTabChecked {
-	border-right-color:white;
-}
-
-/* strip */
-.tundra .dijitTabContainerLeftStrip {
-	padding-left: 2px;
-	border: 1px solid #ccc;
-	background: #f2f2f2;
-	border-right: none;
-}
-
-/* ================================ */
-/* left/right tabs */
-.tundra .dijitTabContainerLeft-tabs .dijitTab,
-.tundra .dijitTabContainerRight-tabs .dijitTab {
-	margin-right:0px;
-	margin-bottom:4px;	/* space between one tab and the next in left/right mode */
-}
-
-/* ================================ */
-
-/* this resets the tabcontainer stripe when within a contentpane */
-.tundra .dijitTabContainerTop-dijitContentPane .dijitTabContainerTop-tabs {
-	border-left: 0px solid #ccc;
-	border-top: 0px solid #ccc;
-	border-right: 0px solid #ccc;
-	padding-top: 0px;
-	padding-left: 0px;
-}
-
-/* ================================ */
-
-/* Menu and slider control styles */
-.tundra .dijitTabContainer .tabStripButton {
-	margin-right: 0;
-	padding-top: 2px;
-	z-index: 12;
-}
-
-.tundra .dijitTabContainerBottom .tabStripButton {
-	padding-top: 2px;
-}
-
-.tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv {
-	padding-bottom: 3px;
-	padding-top: 1px;
-}
-
-.tundra .tabStripButton .dijitTabInnerDiv {
-	padding: 3px 2px 4px 2px;
-}
-
-.dj_ie6 .tundra .tabStripButton .dijitTabInnerDiv,
-.dj_ie7 .tundra .tabStripButton .dijitTabInnerDiv,
-.dj_opera .tundra .tabStripButton .dijitTabInnerDiv {
-	padding-bottom: 5px;
-}
-.dj_ie6 .tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv,
-.dj_ie7 .tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv,
-.dj_opera .tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv {
-	padding-bottom: 4px;
-}
-
-.tundra .dijitTabContainer .tabStripButton {
-	/* TODO: instead of hardcoded value set to inline display and let layoutChildren() measure? */
-	width: 21px;
-}
-
-.tundra .dijitTabContainer .tabStripButton img {
-	height: 14px;
-	background: url(../images/spriteRoundedIconsSmall.png) no-repeat;
-}
-.dj_ie6 .tundra .dijitTabContainer .tabStripButton img {
-	background-image: url(../images/spriteRoundedIconsSmall.gif);
-}
-
-.tundra .dijitTabContainer .tabStripMenuButton img {
-	background-position: -15px top;
-}
-.tundra .dijitTabContainer .tabStripSlideButtonLeft img {
-	background-position: 0px top;
-}
-.tundra .dijitTabContainer .tabStripSlideButtonRight img {
-	background-position: -30px top;
-}
-/*
-.tundra .dijitTabContainerTopStrip .dijitTabContainerBottom .tabStripButton .dijitTabInnerDiv {
-	padding-top: 4px;
-}*/
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/layout/TabContainer_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/layout/TabContainer_rtl.css
deleted file mode 100644
index 37f5e29..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/layout/TabContainer_rtl.css
+++ /dev/null
@@ -1,39 +0,0 @@
-.dijitRtl .tundra .dijitTab {
-	-moz-box-orient:horizontal;
-	text-align: right;
-}
-
-.dijitRtl .tundra .dijitTabInnerDiv {
-	padding:2px 9px 2px 8px;
-}
-
-.dijitRtl .tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv {
-	padding-bottom: 3px;
-	padding-top: 1px;
-}
-
-.dijitRtl .tundra .tabStripButton .dijitTabInnerDiv {
-	padding: 3px 2px 4px 2px;
-}
-
-.dijitRtl .tundra .dijitTabPaneWrapper {
-	#zoom: 1;
-}
-
-.dj_ie-rtl .tundra .dijitTabContainerLeft-tabs {
-	margin-left: 1px !important;
-}
-
-.dj_ie-rtl .tundra .dijitTabContainerRight-tabs {
-	margin-right: 1px !important;
-}
-
-.dijitRtl .tundra .dijitTabContainerLeft-tabs .dijitTab,
-.dijitRtl .tundra .dijitTabContainerRight-tabs .dijitTab {
-	margin-left:0px;
-}
-
-.dj_ie-rtl .tundra .dijitTab .dijitTabInnerDiv {
-	/* without this the tab label and icon become invisible, as though they were set to visibility:hidden */
-	width : 0.1% !important;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/tundra.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/tundra.css
deleted file mode 100644
index bae0439..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/tundra.css
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-	Adds cosmetic styling to Dijit.  Users may swap with a custom theme CSS file.
-
-	NOTES:
-	---
-	Dialog.css contains css classes for both Dialog and Tooltip!
-	This because currently a dijit.TooltipDialog exist. Until this is resolved
-	you need to include Dialog.css for both dijits
-	---
-	Toolbar.css contains classes also used in Editor. Until this is resolved
-	you need to include Toolbar.css for both Toolbar and Editor
-	---
-	Button.css contains classes for combobox,
-
-*/
-@import url("../dijit.css");
-@import url("Common.css");
-
-@import url("layout/ContentPane.css");
-@import url("layout/TabContainer.css");
-@import url("layout/AccordionContainer.css");
-@import url("layout/SplitContainer.css");
-@import url("layout/BorderContainer.css");
-@import url("form/Common.css");
-@import url("form/Button.css");
-@import url("form/Checkbox.css");
-@import url("form/RadioButton.css");
-@import url("form/Slider.css");
-@import url("form/Select.css");
-@import url("Tree.css");
-@import url("ProgressBar.css");
-@import url("TitlePane.css");
-@import url("Calendar.css");
-@import url("TimePicker.css");
-@import url("Toolbar.css");
-@import url("Dialog.css");
-@import url("Menu.css");
-@import url("Editor.css");
-@import url("ColorPalette.css");
-@import url("tundra_rtl.css");
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/tundra_rtl.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/tundra_rtl.css
deleted file mode 100644
index fe9160c..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/themes/tundra/tundra_rtl.css
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-	Adds cosmetic styling to Dijit.  Users may swap with a custom theme CSS file.
-
-	NOTES:
-	---
-	Dialog.css contains css classes for both Dialog and Tooltip!
-	This because currently a dijit.TooltipDialog exist. Until this is resolved
-	you need to include Dialog.css for both dijits
-	---
-	Toolbar.css contains classes also used in Editor. Until this is resolved
-	you need to include Toolbar.css for both Toolbar and Editor
-	---
-	Button.css contains classes for combobox,
-
-*/
-/* RTL files */
-@import url("../dijit_rtl.css");
-@import url("Calendar_rtl.css");
-@import url("Dialog_rtl.css");
-@import url("Editor_rtl.css");
-@import url("Menu_rtl.css");
-@import url("Tree_rtl.css");
-@import url("TitlePane_rtl.css");
-@import url("layout/TabContainer_rtl.css");
-@import url("form/Slider_rtl.css");
-@import url("form/Common_rtl.css");
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/tree/ForestStoreModel.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/tree/ForestStoreModel.js
deleted file mode 100644
index eb8a777..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/tree/ForestStoreModel.js
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.tree.ForestStoreModel"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.tree.ForestStoreModel"] = true;
-dojo.provide("dijit.tree.ForestStoreModel");
-
-dojo.require("dijit.tree.TreeStoreModel");
-
-dojo.declare("dijit.tree.ForestStoreModel", dijit.tree.TreeStoreModel, {
-	// summary:
-	//		Interface between Tree and a dojo.store that doesn't have a root item,
-	//		i.e. has multiple "top level" items.
-	//
-	// description
-	//		Use this class to wrap a dojo.store, making all the items matching the specified query
-	//		appear as children of a fabricated "root item".  If no query is specified then all the
-	//		items returned by fetch() on the underlying store become children of the root item.
-	//		It allows dijit.Tree to assume a single root item, even if the store doesn't have one.
-
-	// Parameters to constructor
-
-	// rootId: String
-	//		ID of fabricated root item
-	rootId: "$root$",
-
-	// rootLabel: String
-	//		Label of fabricated root item
-	rootLabel: "ROOT",
-
-	// query: String
-	//		Specifies the set of children of the root item.
-	// example:
-	//	|	{type:'continent'}
-	query: null,
-
-	// End of parameters to constructor
-
-	constructor: function(params){
-		// summary:
-		//		Sets up variables, etc.
-		// tags:
-		//		private
-
-		// Make dummy root item
-		this.root = {
-			store: this,
-			root: true,
-			id: params.rootId,
-			label: params.rootLabel,
-			children: params.rootChildren	// optional param
-		};
-	},
-
-	// =======================================================================
-	// Methods for traversing hierarchy
-
-	mayHaveChildren: function(/*dojo.data.Item*/ item){
-		// summary:
-		//		Tells if an item has or may have children.  Implementing logic here
-		//		avoids showing +/- expando icon for nodes that we know don't have children.
-		//		(For efficiency reasons we may not want to check if an element actually
-		//		has children until user clicks the expando node)
-		// tags:
-		//		extension
-		return item === this.root || this.inherited(arguments);
-	},
-
-	getChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ callback, /*function*/ onError){
-		// summary:
-		// 		Calls onComplete() with array of child items of given parent item, all loaded.
-		if(parentItem === this.root){
-			if(this.root.children){
-				// already loaded, just return
-				callback(this.root.children);
-			}else{
-				this.store.fetch({
-					query: this.query,
-					onComplete: dojo.hitch(this, function(items){
-						this.root.children = items;
-						callback(items);
-					}),
-					onError: onError
-				});
-			}
-		}else{
-			this.inherited(arguments);
-		}
-	},
-
-	// =======================================================================
-	// Inspecting items
-
-	isItem: function(/* anything */ something){
-		return (something === this.root) ? true : this.inherited(arguments);
-	},
-
-	fetchItemByIdentity: function(/* object */ keywordArgs){
-		if(keywordArgs.identity == this.root.id){
-			var scope = keywordArgs.scope?keywordArgs.scope:dojo.global;
-			if(keywordArgs.onItem){
-				keywordArgs.onItem.call(scope, this.root);
-			}
-		}else{
-			this.inherited(arguments);
-		}
-	},
-
-	getIdentity: function(/* item */ item){
-		return (item === this.root) ? this.root.id : this.inherited(arguments);
-	},
-
-	getLabel: function(/* item */ item){
-		return	(item === this.root) ? this.root.label : this.inherited(arguments);
-	},
-
-	// =======================================================================
-	// Write interface
-
-	newItem: function(/* dojo.dnd.Item */ args, /*Item*/ parent, /*int?*/ insertIndex){
-		// summary:
-		//		Creates a new item.   See dojo.data.api.Write for details on args.
-		//		Used in drag & drop when item from external source dropped onto tree.
-		if(parent === this.root){
-			this.onNewRootItem(args);
-			return this.store.newItem(args);
-		}else{
-			return this.inherited(arguments);
-		}
-	},
-
-	onNewRootItem: function(args){
-		// summary:
-		//		User can override this method to modify a new element that's being
-		//		added to the root of the tree, for example to add a flag like root=true
-	},
-
-	pasteItem: function(/*Item*/ childItem, /*Item*/ oldParentItem, /*Item*/ newParentItem, /*Boolean*/ bCopy, /*int?*/ insertIndex){
-		// summary:
-		//		Move or copy an item from one parent item to another.
-		//		Used in drag & drop
-		if(oldParentItem === this.root){
-			if(!bCopy){
-				// It's onLeaveRoot()'s responsibility to modify the item so it no longer matches
-				// this.query... thus triggering an onChildrenChange() event to notify the Tree
-				// that this element is no longer a child of the root node
-				this.onLeaveRoot(childItem);
-			}
-		}
-		dijit.tree.TreeStoreModel.prototype.pasteItem.call(this, childItem,
-			oldParentItem === this.root ? null : oldParentItem,
-			newParentItem === this.root ? null : newParentItem,
-			bCopy,
-			insertIndex
-		);
-		if(newParentItem === this.root){
-			// It's onAddToRoot()'s responsibility to modify the item so it matches
-			// this.query... thus triggering an onChildrenChange() event to notify the Tree
-			// that this element is now a child of the root node
-			this.onAddToRoot(childItem);
-		}
-	},
-
-	// =======================================================================
-	// Handling for top level children
-
-	onAddToRoot: function(/* item */ item){
-		// summary:
-		//		Called when item added to root of tree; user must override this method
-		//		to modify the item so that it matches the query for top level items
-		// example:
-		//	|	store.setValue(item, "root", true);
-		// tags:
-		//		extension
-		console.log(this, ": item ", item, " added to root");
-	},
-
-	onLeaveRoot: function(/* item */ item){
-		// summary:
-		//		Called when item removed from root of tree; user must override this method
-		//		to modify the item so it doesn't match the query for top level items
-		// example:
-		// 	|	store.unsetAttribute(item, "root");
-		// tags:
-		//		extension
-		console.log(this, ": item ", item, " removed from root");
-	},
-
-	// =======================================================================
-	// Events from data store
-
-	_requeryTop: function(){
-		// reruns the query for the children of the root node,
-		// sending out an onSet notification if those children have changed
-		var oldChildren = this.root.children || [];
-		this.store.fetch({
-			query: this.query,
-			onComplete: dojo.hitch(this, function(newChildren){
-				this.root.children = newChildren;
-
-				// If the list of children or the order of children has changed...
-				if(oldChildren.length != newChildren.length ||
-					dojo.some(oldChildren, function(item, idx){ return newChildren[idx] != item;})){
-					this.onChildrenChange(this.root, newChildren);
-				}
-			})
-		});
-	},
-
-	onNewItem: function(/* dojo.data.Item */ item, /* Object */ parentInfo){
-		// summary:
-		//		Handler for when new items appear in the store.  Developers should override this
-		//		method to be more efficient based on their app/data.
-		// description:
-		//		Note that the default implementation requeries the top level items every time
-		//		a new item is created, since any new item could be a top level item (even in
-		//		addition to being a child of another item, since items can have multiple parents).
-		//
-		//		Developers can override this function to do something more efficient if they can
-		//		detect which items are possible top level items (based on the item and the
-		//		parentInfo parameters).  Often all top level items have parentInfo==null, but
-		//		that will depend on which store you use and what your data is like.
-		// tags:
-		//		extension
-		this._requeryTop();
-
-		this.inherited(arguments);
-	},
-
-	onDeleteItem: function(/*Object*/ item){
-		// summary:
-		//		Handler for delete notifications from underlying store
-
-		// check if this was a child of root, and if so send notification that root's children
-		// have changed
-		if(dojo.indexOf(this.root.children, item) != -1){
-			this._requeryTop();
-		}
-
-		this.inherited(arguments);
-	}
-});
-
-
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/tree/TreeStoreModel.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/tree/TreeStoreModel.js
deleted file mode 100644
index 3995ba4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/tree/TreeStoreModel.js
+++ /dev/null
@@ -1,373 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.tree.TreeStoreModel"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.tree.TreeStoreModel"] = true;
-dojo.provide("dijit.tree.TreeStoreModel");
-
-dojo.declare(
-		"dijit.tree.TreeStoreModel",
-		null,
-	{
-		// summary:
-		//		Implements dijit.Tree.model connecting to a store with a single
-		//		root item.  Any methods passed into the constructor will override
-		//		the ones defined here.
-
-		// store: dojo.data.Store
-		//		Underlying store
-		store: null,
-
-		// childrenAttrs: String[]
-		//		One or more attribute names (attributes in the dojo.data item) that specify that item's children
-		childrenAttrs: ["children"],
-
-		// newItemIdAttr: String
-		//		Name of attribute in the Object passed to newItem() that specifies the id.
-		//
-		//		If newItemIdAttr is set then it's used when newItem() is called to see if an
-		//		item with the same id already exists, and if so just links to the old item
-		//		(so that the old item ends up with two parents).
-		//
-		//		Setting this to null or "" will make every drop create a new item.
-		newItemIdAttr: "id",
-
-		// labelAttr: String
-		//		If specified, get label for tree node from this attribute, rather
-		//		than by calling store.getLabel()
-		labelAttr: "",
-
-	 	// root: [readonly] dojo.data.Item
-		//		Pointer to the root item (read only, not a parameter)
-		root: null,
-
-		// query: anything
-		//		Specifies datastore query to return the root item for the tree.
-		//		Must only return a single item.   Alternately can just pass in pointer
-		//		to root item.
-		// example:
-		//	|	{id:'ROOT'}
-		query: null,
-
-		// deferItemLoadingUntilExpand: Boolean
-		//		Setting this to true will cause the TreeStoreModel to defer calling loadItem on nodes
-		// 		until they are expanded. This allows for lazying loading where only one
-		//		loadItem (and generally one network call, consequently) per expansion
-		// 		(rather than one for each child).
-		// 		This relies on partial loading of the children items; each children item of a
-		// 		fully loaded item should contain the label and info about having children.
-		deferItemLoadingUntilExpand: false,
-
-		constructor: function(/* Object */ args){
-			// summary:
-			//		Passed the arguments listed above (store, etc)
-			// tags:
-			//		private
-
-			dojo.mixin(this, args);
-
-			this.connects = [];
-
-			var store = this.store;
-			if(!store.getFeatures()['dojo.data.api.Identity']){
-				throw new Error("dijit.Tree: store must support dojo.data.Identity");
-			}
-
-			// if the store supports Notification, subscribe to the notification events
-			if(store.getFeatures()['dojo.data.api.Notification']){
-				this.connects = this.connects.concat([
-					dojo.connect(store, "onNew", this, "onNewItem"),
-					dojo.connect(store, "onDelete", this, "onDeleteItem"),
-					dojo.connect(store, "onSet", this, "onSetItem")
-				]);
-			}
-		},
-
-		destroy: function(){
-			dojo.forEach(this.connects, dojo.disconnect);
-			// TODO: should cancel any in-progress processing of getRoot(), getChildren()
-		},
-
-		// =======================================================================
-		// Methods for traversing hierarchy
-
-		getRoot: function(onItem, onError){
-			// summary:
-			//		Calls onItem with the root item for the tree, possibly a fabricated item.
-			//		Calls onError on error.
-			if(this.root){
-				onItem(this.root);
-			}else{
-				this.store.fetch({
-					query: this.query,
-					onComplete: dojo.hitch(this, function(items){
-						if(items.length != 1){
-							throw new Error(this.declaredClass + ": query " + dojo.toJson(this.query) + " returned " + items.length +
-							 	" items, but must return exactly one item");
-						}
-						this.root = items[0];
-						onItem(this.root);
-					}),
-					onError: onError
-				});
-			}
-		},
-
-		mayHaveChildren: function(/*dojo.data.Item*/ item){
-			// summary:
-			//		Tells if an item has or may have children.  Implementing logic here
-			//		avoids showing +/- expando icon for nodes that we know don't have children.
-			//		(For efficiency reasons we may not want to check if an element actually
-			//		has children until user clicks the expando node)
-			return dojo.some(this.childrenAttrs, function(attr){
-				return this.store.hasAttribute(item, attr);
-			}, this);
-		},
-
-		getChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ onComplete, /*function*/ onError){
-			// summary:
-			// 		Calls onComplete() with array of child items of given parent item, all loaded.
-
-			var store = this.store;
-			if(!store.isItemLoaded(parentItem)){
-				// The parent is not loaded yet, we must be in deferItemLoadingUntilExpand
-				// mode, so we will load it and just return the children (without loading each
-				// child item)
-				var getChildren = dojo.hitch(this, arguments.callee);
-				store.loadItem({
-					item: parentItem,
-					onItem: function(parentItem){
-						getChildren(parentItem, onComplete, onError);
-					},
-					onError: onError
-				});
-				return;
-			}
-			// get children of specified item
-			var childItems = [];
-			for(var i=0; i<this.childrenAttrs.length; i++){
-				var vals = store.getValues(parentItem, this.childrenAttrs[i]);
-				childItems = childItems.concat(vals);
-			}
-
-			// count how many items need to be loaded
-			var _waitCount = 0;
-			if(!this.deferItemLoadingUntilExpand){
-				dojo.forEach(childItems, function(item){ if(!store.isItemLoaded(item)){ _waitCount++; } });
-			}
-
-			if(_waitCount == 0){
-				// all items are already loaded (or we aren't loading them).  proceed...
-				onComplete(childItems);
-			}else{
-				// still waiting for some or all of the items to load
-				var onItem = function onItem(item){
-					if(--_waitCount == 0){
-						// all nodes have been loaded, send them to the tree
-						onComplete(childItems);
-					}
-				}
-				dojo.forEach(childItems, function(item){
-					if(!store.isItemLoaded(item)){
-						store.loadItem({
-							item: item,
-							onItem: onItem,
-							onError: onError
-						});
-					}
-				});
-			}
-		},
-
-		// =======================================================================
-		// Inspecting items
-
-		isItem: function(/* anything */ something){
-			return this.store.isItem(something);	// Boolean
-		},
-
-		fetchItemByIdentity: function(/* object */ keywordArgs){
-			this.store.fetchItemByIdentity(keywordArgs);
-		},
-
-		getIdentity: function(/* item */ item){
-			return this.store.getIdentity(item);	// Object
-		},
-
-		getLabel: function(/*dojo.data.Item*/ item){
-			// summary:
-			//		Get the label for an item
-			if(this.labelAttr){
-				return this.store.getValue(item,this.labelAttr);	// String
-			}else{
-				return this.store.getLabel(item);	// String
-			}
-		},
-
-		// =======================================================================
-		// Write interface
-
-		newItem: function(/* dojo.dnd.Item */ args, /*Item*/ parent, /*int?*/ insertIndex){
-			// summary:
-			//		Creates a new item.   See `dojo.data.api.Write` for details on args.
-			//		Used in drag & drop when item from external source dropped onto tree.
-			// description:
-			//		Developers will need to override this method if new items get added
-			//		to parents with multiple children attributes, in order to define which
-			//		children attribute points to the new item.
-
-			var pInfo = {parent: parent, attribute: this.childrenAttrs[0], insertIndex: insertIndex};
-
-			if(this.newItemIdAttr && args[this.newItemIdAttr]){
-				// Maybe there's already a corresponding item in the store; if so, reuse it.
-				this.fetchItemByIdentity({identity: args[this.newItemIdAttr], scope: this, onItem: function(item){
-					if(item){
-						// There's already a matching item in store, use it
-						this.pasteItem(item, null, parent, true, insertIndex);
-					}else{
-						// Create new item in the tree, based on the drag source.
-						this.store.newItem(args, pInfo);
-					}
-				}});
-			}else{
-				// [as far as we know] there is no id so we must assume this is a new item
-				this.store.newItem(args, pInfo);
-			}
-		},
-
-		pasteItem: function(/*Item*/ childItem, /*Item*/ oldParentItem, /*Item*/ newParentItem, /*Boolean*/ bCopy, /*int?*/ insertIndex){
-			// summary:
-			//		Move or copy an item from one parent item to another.
-			//		Used in drag & drop
-			var store = this.store,
-				parentAttr = this.childrenAttrs[0];	// name of "children" attr in parent item
-
-			// remove child from source item, and record the attribute that child occurred in
-			if(oldParentItem){
-				dojo.forEach(this.childrenAttrs, function(attr){
-					if(store.containsValue(oldParentItem, attr, childItem)){
-						if(!bCopy){
-							var values = dojo.filter(store.getValues(oldParentItem, attr), function(x){
-								return x != childItem;
-							});
-							store.setValues(oldParentItem, attr, values);
-						}
-						parentAttr = attr;
-					}
-				});
-			}
-
-			// modify target item's children attribute to include this item
-			if(newParentItem){
-				if(typeof insertIndex == "number"){
-					var childItems = store.getValues(newParentItem, parentAttr);
-					childItems.splice(insertIndex, 0, childItem);
-					store.setValues(newParentItem, parentAttr, childItems);
-				}else{
-				store.setValues(newParentItem, parentAttr,
-					store.getValues(newParentItem, parentAttr).concat(childItem));
-			}
-			}
-		},
-
-		// =======================================================================
-		// Callbacks
-
-		onChange: function(/*dojo.data.Item*/ item){
-			// summary:
-			//		Callback whenever an item has changed, so that Tree
-			//		can update the label, icon, etc.   Note that changes
-			//		to an item's children or parent(s) will trigger an
-			//		onChildrenChange() so you can ignore those changes here.
-			// tags:
-			//		callback
-		},
-
-		onChildrenChange: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){
-			// summary:
-			//		Callback to do notifications about new, updated, or deleted items.
-			// tags:
-			//		callback
-		},
-
-		onDelete: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){
-			// summary:
-			//		Callback when an item has been deleted.
-			// description:
-			//		Note that there will also be an onChildrenChange() callback for the parent
-			//		of this item.
-			// tags:
-			//		callback
-		},
-
-		// =======================================================================
-		// Events from data store
-
-		onNewItem: function(/* dojo.data.Item */ item, /* Object */ parentInfo){
-			// summary:
-			//		Handler for when new items appear in the store, either from a drop operation
-			//		or some other way.   Updates the tree view (if necessary).
-			// description:
-			//		If the new item is a child of an existing item,
-			//		calls onChildrenChange() with the new list of children
-			//		for that existing item.
-			//
-			// tags:
-			//		extension
-
-			// We only care about the new item if it has a parent that corresponds to a TreeNode
-			// we are currently displaying
-			if(!parentInfo){
-				return;
-			}
-
-			// Call onChildrenChange() on parent (ie, existing) item with new list of children
-			// In the common case, the new list of children is simply parentInfo.newValue or
-			// [ parentInfo.newValue ], although if items in the store has multiple
-			// child attributes (see `childrenAttr`), then it's a superset of parentInfo.newValue,
-			// so call getChildren() to be sure to get right answer.
-			this.getChildren(parentInfo.item, dojo.hitch(this, function(children){
-				this.onChildrenChange(parentInfo.item, children);
-			}));
-		},
-
-		onDeleteItem: function(/*Object*/ item){
-			// summary:
-			//		Handler for delete notifications from underlying store
-			this.onDelete(item);
-		},
-
-		onSetItem: function(/* item */ item,
-						/* attribute-name-string */ attribute,
-						/* object | array */ oldValue,
-						/* object | array */ newValue){
-			// summary:
-			//		Updates the tree view according to changes in the data store.
-			// description:
-			//		Handles updates to an item's children by calling onChildrenChange(), and
-			//		other updates to an item by calling onChange().
-			//
-			//		See `onNewItem` for more details on handling updates to an item's children.
-			// tags:
-			//		extension
-
-			if(dojo.indexOf(this.childrenAttrs, attribute) != -1){
-				// item's children list changed
-				this.getChildren(item, dojo.hitch(this, function(children){
-					// See comments in onNewItem() about calling getChildren()
-					this.onChildrenChange(item, children);
-				}));
-			}else{
-				// item's label/icon/etc. changed.
-				this.onChange(item);
-			}
-		}
-	});
-
-
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/tree/_dndContainer.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/tree/_dndContainer.js
deleted file mode 100644
index d0f3437..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/tree/_dndContainer.js
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.tree._dndContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.tree._dndContainer"] = true;
-dojo.provide("dijit.tree._dndContainer");
-dojo.require("dojo.dnd.common");
-dojo.require("dojo.dnd.Container");
-
-dojo.declare("dijit.tree._dndContainer",
-	null,
-	{
-
-		// summary:
-		//		This is a base class for `dijit.tree._dndSelector`, and isn't meant to be used directly.
-		//		It's modeled after `dojo.dnd.Container`.
-		// tags:
-		//		protected
-
-		/*=====
-		// current: DomNode
-		//		The currently hovered TreeNode.rowNode (which is the DOM node
-		//		associated w/a given node in the tree, excluding it's descendants)
-		current: null,
-		=====*/
-
-		constructor: function(tree, params){
-			// summary:
-			//		A constructor of the Container
-			// tree: Node
-			//		Node or node's id to build the container on
-			// params: dijit.tree.__SourceArgs
-			//		A dict of parameters, which gets mixed into the object
-			// tags:
-			//		private
-			this.tree = tree;
-			this.node = tree.domNode;	// TODO: rename; it's not a TreeNode but the whole Tree
-			dojo.mixin(this, params);
-
-			// class-specific variables
-			this.map = {};
-			this.current = null;	// current TreeNode's DOM node
-
-			// states
-			this.containerState = "";
-			dojo.addClass(this.node, "dojoDndContainer");
-
-			// set up events
-			this.events = [
-				// container level events
-				dojo.connect(this.node, "onmouseenter", this, "onOverEvent"),
-				dojo.connect(this.node, "onmouseleave",	this, "onOutEvent"),
-
-				// switching between TreeNodes
-				dojo.connect(this.tree, "_onNodeMouseEnter", this, "onMouseOver"),
-				dojo.connect(this.tree, "_onNodeMouseLeave", this, "onMouseOut"),
-
-				// cancel text selection and text dragging
-				dojo.connect(this.node, "ondragstart", dojo, "stopEvent"),
-				dojo.connect(this.node, "onselectstart", dojo, "stopEvent")
-			];
-		},
-
-		getItem: function(/*String*/ key){
-			// summary:
-			//		Returns the dojo.dnd.Item (representing a dragged node) by it's key (id).
-			//		Called by dojo.dnd.Source.checkAcceptance().
-			// tags:
-			//		protected
-
-			var node = this.selection[key],
-				ret = {
-					data: dijit.getEnclosingWidget(node),
-					type: ["treeNode"]
-				};
-
-			return ret;	// dojo.dnd.Item
-		},
-
-		destroy: function(){
-			// summary:
-			//		Prepares this object to be garbage-collected
-
-			dojo.forEach(this.events, dojo.disconnect);
-			// this.clearItems();
-			this.node = this.parent = null;
-		},
-
-		// mouse events
-		onMouseOver: function(/*TreeNode*/ widget, /*Event*/ evt){
-			// summary:
-			//		Called when mouse is moved over a TreeNode
-			// tags:
-			//		protected
-			this.current = widget.rowNode;
-			this.currentWidget = widget;
-		},
-
-		onMouseOut: function(/*TreeNode*/ widget, /*Event*/ evt){
-			// summary:
-			//		Called when mouse is moved away from a TreeNode
-			// tags:
-			//		protected
-			this.current = null;
-			this.currentWidget = null;
-		},
-
-		_changeState: function(type, newState){
-			// summary:
-			//		Changes a named state to new state value
-			// type: String
-			//		A name of the state to change
-			// newState: String
-			//		new state
-			var prefix = "dojoDnd" + type;
-			var state = type.toLowerCase() + "State";
-			//dojo.replaceClass(this.node, prefix + newState, prefix + this[state]);
-			dojo.removeClass(this.node, prefix + this[state]);
-			dojo.addClass(this.node, prefix + newState);
-			this[state] = newState;
-		},
-
-		_addItemClass: function(node, type){
-			// summary:
-			//		Adds a class with prefix "dojoDndItem"
-			// node: Node
-			//		A node
-			// type: String
-			//		A variable suffix for a class name
-			dojo.addClass(node, "dojoDndItem" + type);
-		},
-
-		_removeItemClass: function(node, type){
-			// summary:
-			//		Removes a class with prefix "dojoDndItem"
-			// node: Node
-			//		A node
-			// type: String
-			//		A variable suffix for a class name
-			dojo.removeClass(node, "dojoDndItem" + type);
-		},
-
-		onOverEvent: function(){
-			// summary:
-			//		This function is called once, when mouse is over our container
-			// tags:
-			//		protected
-			this._changeState("Container", "Over");
-		},
-
-		onOutEvent: function(){
-			// summary:
-			//		This function is called once, when mouse is out of our container
-			// tags:
-			//		protected
-			this._changeState("Container", "");
-		}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/tree/_dndSelector.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/tree/_dndSelector.js
deleted file mode 100644
index 13d1842..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/tree/_dndSelector.js
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.tree._dndSelector"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.tree._dndSelector"] = true;
-dojo.provide("dijit.tree._dndSelector");
-dojo.require("dojo.dnd.common");
-dojo.require("dijit.tree._dndContainer");
-
-dojo.declare("dijit.tree._dndSelector",
-	dijit.tree._dndContainer,
-	{
-		// summary:
-		//		This is a base class for `dijit.tree.dndSource` , and isn't meant to be used directly.
-		//		It's based on `dojo.dnd.Selector`.
-		// tags:
-		//		protected
-
-		/*=====
-		// selection: Hash<String, DomNode>
-		//		(id, DomNode) map for every TreeNode that's currently selected.
-		//		The DOMNode is the TreeNode.rowNode.
-		selection: {},
-		=====*/
-
-		constructor: function(tree, params){
-			// summary:
-			//		Initialization
-			// tags:
-			//		private
-
-			this.selection={};
-			this.anchor = null;
-			this.simpleSelection=false;
-
-			this.events.push(
-				dojo.connect(this.tree.domNode, "onmousedown", this,"onMouseDown"),
-				dojo.connect(this.tree.domNode, "onmouseup", this,"onMouseUp"),
-				dojo.connect(this.tree.domNode, "onmousemove", this,"onMouseMove")
-			);
-		},
-
-		//	singular: Boolean
-		//		Allows selection of only one element, if true.
-		//		Tree hasn't been tested in singular=true mode, unclear if it works.
-		singular: false,
-
-		// methods
-
-		getSelectedNodes: function(){
-			// summary:
-			//		Returns the set of selected nodes.
-			//		Used by dndSource on the start of a drag.
-			// tags:
-			//		protected
-			return this.selection;
-		},
-
-		selectNone: function(){
-			// summary:
-			//		Unselects all items
-			// tags:
-			//		private
-
-			return this._removeSelection()._removeAnchor();	// self
-		},
-
-		destroy: function(){
-			// summary:
-			//		Prepares the object to be garbage-collected
-			this.inherited(arguments);
-			this.selection = this.anchor = null;
-		},
-
-		// mouse events
-		onMouseDown: function(e){
-			// summary:
-			//		Event processor for onmousedown
-			// e: Event
-			//		mouse event
-			// tags:
-			//		protected
-
-			if(!this.current){ return; }
-
-			if(e.button == dojo.mouseButtons.RIGHT){ return; }	// ignore right-click
-
-			var treeNode = dijit.getEnclosingWidget(this.current),
-				id = treeNode.id + "-dnd"	// so id doesn't conflict w/widget
-
-			if(!dojo.hasAttr(this.current, "id")){
-				dojo.attr(this.current, "id", id);
-			}
-
-			if(!this.singular && !dojo.isCopyKey(e) && !e.shiftKey && (this.current.id in this.selection)){
-				this.simpleSelection = true;
-				dojo.stopEvent(e);
-				return;
-			}
-			if(this.singular){
-				if(this.anchor == this.current){
-					if(dojo.isCopyKey(e)){
-						this.selectNone();
-					}
-				}else{
-					this.selectNone();
-					this.anchor = this.current;
-					this._addItemClass(this.anchor, "Anchor");
-
-					this.selection[this.current.id] = this.current;
-				}
-			}else{
-				if(!this.singular && e.shiftKey){
-					if(dojo.isCopyKey(e)){
-						//TODO add range to selection
-					}else{
-						//TODO select new range from anchor
-					}
-				}else{
-					if(dojo.isCopyKey(e)){
-						if(this.anchor == this.current){
-							delete this.selection[this.anchor.id];
-							this._removeAnchor();
-						}else{
-							if(this.current.id in this.selection){
-								this._removeItemClass(this.current, "Selected");
-								delete this.selection[this.current.id];
-							}else{
-								if(this.anchor){
-									this._removeItemClass(this.anchor, "Anchor");
-									this._addItemClass(this.anchor, "Selected");
-								}
-								this.anchor = this.current;
-								this._addItemClass(this.current, "Anchor");
-								this.selection[this.current.id] = this.current;
-							}
-						}
-					}else{
-						if(!(id in this.selection)){
-							this.selectNone();
-							this.anchor = this.current;
-							this._addItemClass(this.current, "Anchor");
-							this.selection[id] = this.current;
-						}
-					}
-				}
-			}
-
-			dojo.stopEvent(e);
-		},
-
-		onMouseUp: function(e){
-			// summary:
-			//		Event processor for onmouseup
-			// e: Event
-			//		mouse event
-			// tags:
-			//		protected
-
-			// TODO: this code is apparently for handling an edge case when the user is selecting
-			// multiple nodes and then mousedowns on a node by accident... it lets the user keep the
-			// current selection by moving the mouse away (or something like that).   It doesn't seem
-			// to work though and requires a lot of plumbing (including this code, the onmousemove
-			// handler, and the this.simpleSelection attribute.   Consider getting rid of all of it.
-
-			if(!this.simpleSelection){ return; }
-			this.simpleSelection = false;
-			this.selectNone();
-			if(this.current){
-				this.anchor = this.current;
-				this._addItemClass(this.anchor, "Anchor");
-				this.selection[this.current.id] = this.current;
-			}
-		},
-		onMouseMove: function(e){
-			// summary
-			//		event processor for onmousemove
-			// e: Event
-			//		mouse event
-			this.simpleSelection = false;
-		},
-
-		_removeSelection: function(){
-			// summary:
-			//		Unselects all items
-			// tags:
-			//		private
-			var e = dojo.dnd._empty;
-			for(var i in this.selection){
-				if(i in e){ continue; }
-				var node = dojo.byId(i);
-				if(node){ this._removeItemClass(node, "Selected"); }
-			}
-			this.selection = {};
-			return this;	// self
-		},
-
-		_removeAnchor: function(){
-			// summary:
-			//		Removes the Anchor CSS class from a node.
-			//		According to `dojo.dnd.Selector`, anchor means that
-			//		"an item is selected, and is an anchor for a 'shift' selection".
-			//		It's not relevant for Tree at this point, since we don't support multiple selection.
-			// tags:
-			//		private
-			if(this.anchor){
-				this._removeItemClass(this.anchor, "Anchor");
-				this.anchor = null;
-			}
-			return this;	// self
-		},
-
-		forInSelectedItems: function(/*Function*/ f, /*Object?*/ o){
-			// summary:
-			//		Iterates over selected items;
-			//		see `dojo.dnd.Container.forInItems()` for details
-			o = o || dojo.global;
-			for(var id in this.selection){
-				console.log("selected item id: " + id);
-				f.call(o, this.getItem(id), id, this);
-			}
-		}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/tree/dndSource.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/tree/dndSource.js
deleted file mode 100644
index 2032bb6..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/tree/dndSource.js
+++ /dev/null
@@ -1,537 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit.tree.dndSource"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.tree.dndSource"] = true;
-dojo.provide("dijit.tree.dndSource");
-
-dojo.require("dijit.tree._dndSelector");
-dojo.require("dojo.dnd.Manager");
-
-/*=====
-dijit.tree.__SourceArgs = function(){
-	// summary:
-	//		A dict of parameters for Tree source configuration.
-	// isSource: Boolean?
-	//		Can be used as a DnD source. Defaults to true.
-	// accept: String[]
-	//		List of accepted types (text strings) for a target; defaults to
-	//		["text", "treeNode"]
-	// copyOnly: Boolean?
-	//		Copy items, if true, use a state of Ctrl key otherwise,
-	// dragThreshold: Number
-	//		The move delay in pixels before detecting a drag; 0 by default
-	// betweenThreshold: Integer
-	//		Distance from upper/lower edge of node to allow drop to reorder nodes
-	this.isSource = isSource;
-	this.accept = accept;
-	this.autoSync = autoSync;
-	this.copyOnly = copyOnly;
-	this.dragThreshold = dragThreshold;
-	this.betweenThreshold = betweenThreshold;
-}
-=====*/
-
-dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, {
-	// summary:
-	//		Handles drag and drop operations (as a source or a target) for `dijit.Tree`
-
-	// isSource: [private] Boolean
-	//		Can be used as a DnD source.
-	isSource: true,
-
-	// accept: String[]
-	//		List of accepted types (text strings) for the Tree; defaults to
-	//		["text"]
-	accept: ["text", "treeNode"],
-
-	// copyOnly: [private] Boolean
-	//		Copy items, if true, use a state of Ctrl key otherwise
-	copyOnly: false,
-
-	// dragThreshold: Number
-	//		The move delay in pixels before detecting a drag; 5 by default
-	dragThreshold: 5,
-
-	// betweenThreshold: Integer
-	//		Distance from upper/lower edge of node to allow drop to reorder nodes
-	betweenThreshold: 0,
-
-	constructor: function(/*dijit.Tree*/ tree, /*dijit.tree.__SourceArgs*/ params){
-		// summary:
-		//		a constructor of the Tree DnD Source
-		// tags:
-		//		private
-		if(!params){ params = {}; }
-		dojo.mixin(this, params);
-		this.isSource = typeof params.isSource == "undefined" ? true : params.isSource;
-		var type = params.accept instanceof Array ? params.accept : ["text", "treeNode"];
-		this.accept = null;
-		if(type.length){
-			this.accept = {};
-			for(var i = 0; i < type.length; ++i){
-				this.accept[type[i]] = 1;
-			}
-		}
-
-		// class-specific variables
-		this.isDragging = false;
-		this.mouseDown = false;
-		this.targetAnchor = null;	// DOMNode corresponding to the currently moused over TreeNode
-		this.targetBox = null;	// coordinates of this.targetAnchor
-		this.dropPosition = "";	// whether mouse is over/after/before this.targetAnchor
-		this._lastX = 0;
-		this._lastY = 0;
-
-		// states
-		this.sourceState = "";
-		if(this.isSource){
-			dojo.addClass(this.node, "dojoDndSource");
-		}
-		this.targetState = "";
-		if(this.accept){
-			dojo.addClass(this.node, "dojoDndTarget");
-		}
-
-		// set up events
-		this.topics = [
-			dojo.subscribe("/dnd/source/over", this, "onDndSourceOver"),
-			dojo.subscribe("/dnd/start", this, "onDndStart"),
-			dojo.subscribe("/dnd/drop", this, "onDndDrop"),
-			dojo.subscribe("/dnd/cancel", this, "onDndCancel")
-		];
-	},
-
-	// methods
-	checkAcceptance: function(source, nodes){
-		// summary:
-		//		Checks if the target can accept nodes from this source
-		// source: dijit.tree.dndSource
-		//		The source which provides items
-		// nodes: DOMNode[]
-		//		Array of DOM nodes corresponding to nodes being dropped, dijitTreeRow nodes if
-		//		source is a dijit.Tree.
-		// tags:
-		//		extension
-		return true;	// Boolean
-	},
-
-	copyState: function(keyPressed){
-		// summary:
-		//		Returns true, if we need to copy items, false to move.
-		//		It is separated to be overwritten dynamically, if needed.
-		// keyPressed: Boolean
-		//		The "copy" control key was pressed
-		// tags:
-		//		protected
-		return this.copyOnly || keyPressed;	// Boolean
-	},
-	destroy: function(){
-		// summary:
-		//		Prepares the object to be garbage-collected.
-		this.inherited("destroy",arguments);
-		dojo.forEach(this.topics, dojo.unsubscribe);
-		this.targetAnchor = null;
-	},
-
-	_onDragMouse: function(e){
-		// summary:
-		//		Helper method for processing onmousemove/onmouseover events while drag is in progress.
-		//		Keeps track of current drop target.
-
-		var m = dojo.dnd.manager(),
-			oldTarget = this.targetAnchor,			// the DOMNode corresponding to TreeNode mouse was previously over
-			newTarget = this.current,				// DOMNode corresponding to TreeNode mouse is currently over
-			newTargetWidget = this.currentWidget,	// the TreeNode itself
-			oldDropPosition = this.dropPosition;	// the previous drop position (over/before/after)
-
-		// calculate if user is indicating to drop the dragged node before, after, or over
-		// (i.e., to become a child of) the target node
-		var newDropPosition = "Over";
-		if(newTarget && this.betweenThreshold > 0){
-			// If mouse is over a new TreeNode, then get new TreeNode's position and size
-			if(!this.targetBox || oldTarget != newTarget){
-				this.targetBox = dojo.position(newTarget, true);
-			}
-			if((e.pageY - this.targetBox.y) <= this.betweenThreshold){
-				newDropPosition = "Before";
-			}else if((e.pageY - this.targetBox.y) >= (this.targetBox.h - this.betweenThreshold)){
-				newDropPosition = "After";
-			}
-		}
-
-		if(newTarget != oldTarget || newDropPosition != oldDropPosition){
-			if(oldTarget){
-				this._removeItemClass(oldTarget, oldDropPosition);
-			}
-			if(newTarget){
-				this._addItemClass(newTarget, newDropPosition);
-			}
-
-			// Check if it's ok to drop the dragged node on/before/after the target node.
-			if(!newTarget){
-				m.canDrop(false);
-			}else if(newTargetWidget == this.tree.rootNode && newDropPosition != "Over"){
-				// Can't drop before or after tree's root node; the dropped node would just disappear (at least visually)
-				m.canDrop(false);
-			}else if(m.source == this && (newTarget.id in this.selection)){
-				// Guard against dropping onto yourself (TODO: guard against dropping onto your descendant, #7140)
-				m.canDrop(false);
-			}else if(this.checkItemAcceptance(newTarget, m.source, newDropPosition.toLowerCase())
-					&& !this._isParentChildDrop(m.source, newTarget)){
-				m.canDrop(true);
-			}else{
-				m.canDrop(false);
-			}
-
-			this.targetAnchor = newTarget;
-			this.dropPosition = newDropPosition;
-		}
-	},
-
-	onMouseMove: function(e){
-		// summary:
-		//		Called for any onmousemove events over the Tree
-		// e: Event
-		//		onmousemouse event
-		// tags:
-		//		private
-		if(this.isDragging && this.targetState == "Disabled"){ return; }
-		this.inherited(arguments);
-		var m = dojo.dnd.manager();
-		if(this.isDragging){
-			this._onDragMouse(e);
-		}else{
-			if(this.mouseDown && this.isSource &&
-				 (Math.abs(e.pageX-this._lastX)>=this.dragThreshold || Math.abs(e.pageY-this._lastY)>=this.dragThreshold)){
-				var n = this.getSelectedNodes();
-				var nodes=[];
-				for(var i in n){
-					nodes.push(n[i]);
-				}
-				if(nodes.length){
-					m.startDrag(this, nodes, this.copyState(dojo.isCopyKey(e)));
-				}
-			}
-		}
-	},
-
-	onMouseDown: function(e){
-		// summary:
-		//		Event processor for onmousedown
-		// e: Event
-		//		onmousedown event
-		// tags:
-		//		private
-		this.mouseDown = true;
-		this.mouseButton = e.button;
-		this._lastX = e.pageX;
-		this._lastY = e.pageY;
-		this.inherited("onMouseDown",arguments);
-	},
-
-	onMouseUp: function(e){
-		// summary:
-		//		Event processor for onmouseup
-		// e: Event
-		//		onmouseup event
-		// tags:
-		//		private
-		if(this.mouseDown){
-			this.mouseDown = false;
-			this.inherited("onMouseUp",arguments);
-		}
-	},
-
-	onMouseOut: function(){
-		// summary:
-		//		Event processor for when mouse is moved away from a TreeNode
-		// tags:
-		//		private
-		this.inherited(arguments);
-		this._unmarkTargetAnchor();
-	},
-
-	checkItemAcceptance: function(target, source, position){
-		// summary:
-		//		Stub function to be overridden if one wants to check for the ability to drop at the node/item level
-		// description:
-		//		In the base case, this is called to check if target can become a child of source.
-		//		When betweenThreshold is set, position="before" or "after" means that we
-		//		are asking if the source node can be dropped before/after the target node.
-		// target: DOMNode
-		//		The dijitTreeRoot DOM node inside of the TreeNode that we are dropping on to
-		//		Use dijit.getEnclosingWidget(target) to get the TreeNode.
-		// source: dijit.tree.dndSource
-		//		The (set of) nodes we are dropping
-		// position: String
-		//		"over", "before", or "after"
-		// tags:
-		//		extension
-		return true;
-	},
-
-	// topic event processors
-	onDndSourceOver: function(source){
-		// summary:
-		//		Topic event processor for /dnd/source/over, called when detected a current source.
-		// source: Object
-		//		The dijit.tree.dndSource / dojo.dnd.Source which has the mouse over it
-		// tags:
-		//		private
-		if(this != source){
-			this.mouseDown = false;
-			this._unmarkTargetAnchor();
-		}else if(this.isDragging){
-			var m = dojo.dnd.manager();
-			m.canDrop(false);
-		}
-	},
-	onDndStart: function(source, nodes, copy){
-		// summary:
-		//		Topic event processor for /dnd/start, called to initiate the DnD operation
-		// source: Object
-		//		The dijit.tree.dndSource / dojo.dnd.Source which is providing the items
-		// nodes: DomNode[]
-		//		The list of transferred items, dndTreeNode nodes if dragging from a Tree
-		// copy: Boolean
-		//		Copy items, if true, move items otherwise
-		// tags:
-		//		private
-
-		if(this.isSource){
-			this._changeState("Source", this == source ? (copy ? "Copied" : "Moved") : "");
-		}
-		var accepted = this.checkAcceptance(source, nodes);
-
-		this._changeState("Target", accepted ? "" : "Disabled");
-
-		if(this == source){
-			dojo.dnd.manager().overSource(this);
-		}
-
-		this.isDragging = true;
-	},
-
-	itemCreator: function(/*DomNode[]*/ nodes, target, /*dojo.dnd.Source*/ source){
-		// summary:
-		//		Returns objects passed to `Tree.model.newItem()` based on DnD nodes
-		//		dropped onto the tree.   Developer must override this method to enable
-		// 		dropping from external sources onto this Tree, unless the Tree.model's items
-		//		happen to look like {id: 123, name: "Apple" } with no other attributes.
-		// description:
-		//		For each node in nodes[], which came from source, create a hash of name/value
-		//		pairs to be passed to Tree.model.newItem().  Returns array of those hashes.
-		// returns: Object[]
-		//		Array of name/value hashes for each new item to be added to the Tree, like:
-		// |	[
-		// |		{ id: 123, label: "apple", foo: "bar" },
-		// |		{ id: 456, label: "pear", zaz: "bam" }
-		// |	]
-		// tags:
-		//		extension
-
-		// TODO: for 2.0 refactor so itemCreator() is called once per drag node, and
-		// make signature itemCreator(sourceItem, node, target) (or similar).
-
-		return dojo.map(nodes, function(node){
-			return {
-				"id": node.id,
-				"name": node.textContent || node.innerText || ""
-			};
-		}); // Object[]
-	},
-
-	onDndDrop: function(source, nodes, copy){
-		// summary:
-		//		Topic event processor for /dnd/drop, called to finish the DnD operation.
-		// description:
-		//		Updates data store items according to where node was dragged from and dropped
-		//		to.   The tree will then respond to those data store updates and redraw itself.
-		// source: Object
-		//		The dijit.tree.dndSource / dojo.dnd.Source which is providing the items
-		// nodes: DomNode[]
-		//		The list of transferred items, dndTreeNode nodes if dragging from a Tree
-		// copy: Boolean
-		//		Copy items, if true, move items otherwise
-		// tags:
-		//		protected
-		if(this.containerState == "Over"){
-			var tree = this.tree,
-				model = tree.model,
-				target = this.targetAnchor,
-				requeryRoot = false;	// set to true iff top level items change
-
-			this.isDragging = false;
-
-			// Compute the new parent item
-			var targetWidget = dijit.getEnclosingWidget(target);
-			var newParentItem;
-			var insertIndex;
-			newParentItem = (targetWidget && targetWidget.item) || tree.item;
-			if(this.dropPosition == "Before" || this.dropPosition == "After"){
-				// TODO: if there is no parent item then disallow the drop.
-				// Actually this should be checked during onMouseMove too, to make the drag icon red.
-				newParentItem = (targetWidget.getParent() && targetWidget.getParent().item) || tree.item;
-				// Compute the insert index for reordering
-				insertIndex = targetWidget.getIndexInParent();
-				if(this.dropPosition == "After"){
-					insertIndex = targetWidget.getIndexInParent() + 1;
-				}
-			}else{
-				newParentItem = (targetWidget && targetWidget.item) || tree.item;
-			}
-
-			// If necessary, use this variable to hold array of hashes to pass to model.newItem()
-			// (one entry in the array for each dragged node).
-			var newItemsParams;
-
-			dojo.forEach(nodes, function(node, idx){
-				// dojo.dnd.Item representing the thing being dropped.
-				// Don't confuse the use of item here (meaning a DnD item) with the
-				// uses below where item means dojo.data item.
-				var sourceItem = source.getItem(node.id);
-
-				// Information that's available if the source is another Tree
-				// (possibly but not necessarily this tree, possibly but not
-				// necessarily the same model as this Tree)
-				if(dojo.indexOf(sourceItem.type, "treeNode") != -1){
-					var childTreeNode = sourceItem.data,
-						childItem = childTreeNode.item,
-						oldParentItem = childTreeNode.getParent().item;
-				}
-
-				if(source == this){
-					// This is a node from my own tree, and we are moving it, not copying.
-					// Remove item from old parent's children attribute.
-					// TODO: dijit.tree.dndSelector should implement deleteSelectedNodes()
-					// and this code should go there.
-
-					if(typeof insertIndex == "number"){
-						if(newParentItem == oldParentItem && childTreeNode.getIndexInParent() < insertIndex){
-							insertIndex -= 1;
-						}
-					}
-					model.pasteItem(childItem, oldParentItem, newParentItem, copy, insertIndex);
-				}else if(model.isItem(childItem)){
-					// Item from same model
-					// (maybe we should only do this branch if the source is a tree?)
-					model.pasteItem(childItem, oldParentItem, newParentItem, copy, insertIndex);
-				}else{
-					// Get the hash to pass to model.newItem().  A single call to
-					// itemCreator() returns an array of hashes, one for each drag source node.
-					if(!newItemsParams){
-						newItemsParams = this.itemCreator(nodes, target, source);
-					}
-
-					// Create new item in the tree, based on the drag source.
-					model.newItem(newItemsParams[idx], newParentItem, insertIndex);
-				}
-			}, this);
-
-			// Expand the target node (if it's currently collapsed) so the user can see
-			// where their node was dropped.   In particular since that node is still selected.
-			this.tree._expandNode(targetWidget);
-		}
-		this.onDndCancel();
-	},
-
-	onDndCancel: function(){
-		// summary:
-		//		Topic event processor for /dnd/cancel, called to cancel the DnD operation
-		// tags:
-		//		private
-		this._unmarkTargetAnchor();
-		this.isDragging = false;
-		this.mouseDown = false;
-		delete this.mouseButton;
-		this._changeState("Source", "");
-		this._changeState("Target", "");
-	},
-
-	// When focus moves in/out of the entire Tree
-	onOverEvent: function(){
-		// summary:
-		//		This method is called when mouse is moved over our container (like onmouseenter)
-		// tags:
-		//		private
-		this.inherited(arguments);
-		dojo.dnd.manager().overSource(this);
-	},
-	onOutEvent: function(){
-		// summary:
-		//		This method is called when mouse is moved out of our container (like onmouseleave)
-		// tags:
-		//		private
-		this._unmarkTargetAnchor();
-		var m = dojo.dnd.manager();
-		if(this.isDragging){
-			m.canDrop(false);
-		}
-		m.outSource(this);
-
-		this.inherited(arguments);
-	},
-
-	_isParentChildDrop: function(source, targetRow){
-		// summary:
-		//		Checks whether the dragged items are parent rows in the tree which are being
-		//		dragged into their own children.
-		//
-		// source:
-		//		The DragSource object.
-		//
-		// targetRow:
-		//		The tree row onto which the dragged nodes are being dropped.
-		//
-		// tags:
-		//		private
-
-		// If the dragged object is not coming from the tree this widget belongs to,
-		// it cannot be invalid.
-		if(!source.tree || source.tree != this.tree){
-			return false;
-		}
-
-
-		var root = source.tree.domNode;
-		var ids = {};
-		for(var x in source.selection){
-			ids[source.selection[x].parentNode.id] = true;
-		}
-
-		var node = targetRow.parentNode;
-
-		// Iterate up the DOM hierarchy from the target drop row,
-		// checking of any of the dragged nodes have the same ID.
-		while(node != root && (!node.id || !ids[node.id])){
-			node = node.parentNode;
-		}
-
-		return node.id && ids[node.id];
-	},
-
-	_unmarkTargetAnchor: function(){
-		// summary:
-		//		Removes hover class of the current target anchor
-		// tags:
-		//		private
-		if(!this.targetAnchor){ return; }
-		this._removeItemClass(this.targetAnchor, this.dropPosition);
-		this.targetAnchor = null;
-		this.targetBox = null;
-		this.dropPosition = null;
-	},
-
-	_markDndStatus: function(copy){
-		// summary:
-		//		Changes source's state based on "copy" status
-		this._changeState("Source", copy ? "Copied" : "Moved");
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/tree/model.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/tree/model.js
deleted file mode 100644
index 8aedc20..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dijit/tree/model.js
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-
-dojo.declare(
-	"dijit.tree.model",
-	null,
-{
-	// summary:
-	//		Contract for any data provider object for the tree.
-	// description:
-	//		Tree passes in values to the constructor to specify the callbacks.
-	//		"item" is typically a dojo.data.Item but it's just a black box so
-	//		it could be anything.
-	//
-	//		This (like `dojo.data.api.Read`) is just documentation, and not meant to be used.
-
-	destroy: function(){
-		// summary:
-		//		Destroys this object, releasing connections to the store
-		// tags:
-		//		extension
-	},
-
-	// =======================================================================
-	// Methods for traversing hierarchy
-
-	getRoot: function(onItem){
-		// summary:
-		//		Calls onItem with the root item for the tree, possibly a fabricated item.
-		//		Throws exception on error.
-		// tags:
-		//		extension
-	},
-
-	mayHaveChildren: function(/*dojo.data.Item*/ item){
-		// summary:
-		//		Tells if an item has or may have children.  Implementing logic here
-		//		avoids showing +/- expando icon for nodes that we know don't have children.
-		//		(For efficiency reasons we may not want to check if an element actually
-		//		has children until user clicks the expando node)
-		// tags:
-		//		extension
-	},
-
-	getChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ onComplete){
-		// summary:
-		// 		Calls onComplete() with array of child items of given parent item, all loaded.
-		//		Throws exception on error.
-		// tags:
-		//		extension
-	},
-
-	// =======================================================================
-	// Inspecting items
-
-	isItem: function(/* anything */ something){
-		// summary:
-		//		Returns true if *something* is an item and came from this model instance.
-		//		Returns false if *something* is a literal, an item from another model instance,
-		//		or is any object other than an item.
-		// tags:
-		//		extension
-	},
-
-	fetchItemByIdentity: function(/* object */ keywordArgs){
-		// summary:
-		//		Given the identity of an item, this method returns the item that has
-		//		that identity through the onItem callback.  Conforming implementations
-		//		should return null if there is no item with the given identity.
-		//		Implementations of fetchItemByIdentity() may sometimes return an item
-		//		from a local cache and may sometimes fetch an item from a remote server.
-		// tags:
-		//		extension
-	},
-
-	getIdentity: function(/* item */ item){
-		// summary:
-		//		Returns identity for an item
-		// tags:
-		//		extension
-	},
-
-	getLabel: function(/*dojo.data.Item*/ item){
-		// summary:
-		//		Get the label for an item
-		// tags:
-		//		extension
-	},
-
-	// =======================================================================
-	// Write interface
-
-	newItem: function(/* dojo.dnd.Item */ args, /*Item*/ parent, /*int?*/ insertIndex){
-		// summary:
-		//		Creates a new item.   See `dojo.data.api.Write` for details on args.
-		// tags:
-		//		extension
-	},
-
-	pasteItem: function(/*Item*/ childItem, /*Item*/ oldParentItem, /*Item*/ newParentItem, /*Boolean*/ bCopy){
-		// summary:
-		//		Move or copy an item from one parent item to another.
-		//		Used in drag & drop.
-		//		If oldParentItem is specified and bCopy is false, childItem is removed from oldParentItem.
-		//		If newParentItem is specified, childItem is attached to newParentItem.
-		// tags:
-		//		extension
-	},
-
-	// =======================================================================
-	// Callbacks
-
-	onChange: function(/*dojo.data.Item*/ item){
-		// summary:
-		//		Callback whenever an item has changed, so that Tree
-		//		can update the label, icon, etc.   Note that changes
-		//		to an item's children or parent(s) will trigger an
-		//		onChildrenChange() so you can ignore those changes here.
-		// tags:
-		//		callback
-	},
-
-	onChildrenChange: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){
-		// summary:
-		//		Callback to do notifications about new, updated, or deleted items.
-		// tags:
-		//		callback
-	}
-});
-
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/AdapterRegistry.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/AdapterRegistry.js
deleted file mode 100644
index 1db7e52..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/AdapterRegistry.js
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo.AdapterRegistry"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.AdapterRegistry"] = true;
-dojo.provide("dojo.AdapterRegistry");
-
-dojo.AdapterRegistry = function(/*Boolean?*/ returnWrappers){
-	//	summary:
-	//		A registry to make contextual calling/searching easier.
-	//	description:
-	//		Objects of this class keep list of arrays in the form [name, check,
-	//		wrap, directReturn] that are used to determine what the contextual
-	//		result of a set of checked arguments is. All check/wrap functions
-	//		in this registry should be of the same arity.
-	//	example:
-	//	|	// create a new registry
-	//	|	var reg = new dojo.AdapterRegistry();
-	//	|	reg.register("handleString",
-	//	|		dojo.isString,
-	//	|		function(str){
-	//	|			// do something with the string here
-	//	|		}
-	//	|	);
-	//	|	reg.register("handleArr",
-	//	|		dojo.isArray,
-	//	|		function(arr){
-	//	|			// do something with the array here
-	//	|		}
-	//	|	);
-	//	|
-	//	|	// now we can pass reg.match() *either* an array or a string and
-	//	|	// the value we pass will get handled by the right function
-	//	|	reg.match("someValue"); // will call the first function
-	//	|	reg.match(["someValue"]); // will call the second
-
-	this.pairs = [];
-	this.returnWrappers = returnWrappers || false; // Boolean
-}
-
-dojo.extend(dojo.AdapterRegistry, {
-	register: function(/*String*/ name, /*Function*/ check, /*Function*/ wrap, /*Boolean?*/ directReturn, /*Boolean?*/ override){
-		//	summary: 
-		//		register a check function to determine if the wrap function or
-		//		object gets selected
-		//	name:
-		//		a way to identify this matcher.
-		//	check:
-		//		a function that arguments are passed to from the adapter's
-		//		match() function.  The check function should return true if the
-		//		given arguments are appropriate for the wrap function.
-		//	directReturn:
-		//		If directReturn is true, the value passed in for wrap will be
-		//		returned instead of being called. Alternately, the
-		//		AdapterRegistry can be set globally to "return not call" using
-		//		the returnWrappers property. Either way, this behavior allows
-		//		the registry to act as a "search" function instead of a
-		//		function interception library.
-		//	override:
-		//		If override is given and true, the check function will be given
-		//		highest priority. Otherwise, it will be the lowest priority
-		//		adapter.
-		this.pairs[((override) ? "unshift" : "push")]([name, check, wrap, directReturn]);
-	},
-
-	match: function(/* ... */){
-		// summary:
-		//		Find an adapter for the given arguments. If no suitable adapter
-		//		is found, throws an exception. match() accepts any number of
-		//		arguments, all of which are passed to all matching functions
-		//		from the registered pairs.
-		for(var i = 0; i < this.pairs.length; i++){
-			var pair = this.pairs[i];
-			if(pair[1].apply(this, arguments)){
-				if((pair[3])||(this.returnWrappers)){
-					return pair[2];
-				}else{
-					return pair[2].apply(this, arguments);
-				}
-			}
-		}
-		throw new Error("No match found");
-	},
-
-	unregister: function(name){
-		// summary: Remove a named adapter from the registry
-
-		// FIXME: this is kind of a dumb way to handle this. On a large
-		// registry this will be slow-ish and we can use the name as a lookup
-		// should we choose to trade memory for speed.
-		for(var i = 0; i < this.pairs.length; i++){
-			var pair = this.pairs[i];
-			if(pair[0] == name){
-				this.pairs.splice(i, 1);
-				return true;
-			}
-		}
-		return false;
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/DeferredList.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/DeferredList.js
deleted file mode 100644
index 6bf873f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/DeferredList.js
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo.DeferredList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.DeferredList"] = true;
-dojo.provide("dojo.DeferredList");
-dojo.declare("dojo.DeferredList", dojo.Deferred, {
-	constructor: function(/*Array*/ list, /*Boolean?*/ fireOnOneCallback, /*Boolean?*/ fireOnOneErrback, /*Boolean?*/ consumeErrors, /*Function?*/ canceller){
-		// summary:
-		//		Provides event handling for a group of Deferred objects.
-		// description:
-		//		DeferredList takes an array of existing deferreds and returns a new deferred of its own
-		//		this new deferred will typically have its callback fired when all of the deferreds in
-		//		the given list have fired their own deferreds.  The parameters `fireOnOneCallback` and
-		//		fireOnOneErrback, will fire before all the deferreds as appropriate
-		//
-		//	list:
-		//		The list of deferreds to be synchronizied with this DeferredList
-		//	fireOnOneCallback:
-		//		Will cause the DeferredLists callback to be fired as soon as any
-		//		of the deferreds in its list have been fired instead of waiting until
-		//		the entire list has finished
-		//	fireonOneErrback:
-		//		Will cause the errback to fire upon any of the deferreds errback
-		//	canceller:
-		//		A deferred canceller function, see dojo.Deferred
-		this.list = list;
-		this.resultList = new Array(this.list.length);
-
-		// Deferred init
-		this.chain = [];
-		this.id = this._nextId();
-		this.fired = -1;
-		this.paused = 0;
-		this.results = [null, null];
-		this.canceller = canceller;
-		this.silentlyCancelled = false;
-
-		if(this.list.length === 0 && !fireOnOneCallback){
-			this.callback(this.resultList);
-		}
-
-		this.finishedCount = 0;
-		this.fireOnOneCallback = fireOnOneCallback;
-		this.fireOnOneErrback = fireOnOneErrback;
-		this.consumeErrors = consumeErrors;
-
-		dojo.forEach(this.list, function(d, index){
-			d.addCallback(this, function(r){ this._cbDeferred(index, true, r); return r; });
-			d.addErrback(this, function(r){ this._cbDeferred(index, false, r); return r; });
-		}, this);
-	},
-
-	_cbDeferred: function(index, succeeded, result){
-		// summary:
-		//	The DeferredLists' callback handler
-
-		this.resultList[index] = [succeeded, result]; this.finishedCount += 1;
-		if(this.fired !== 0){
-			if(succeeded && this.fireOnOneCallback){
-				this.callback([index, result]);
-			}else if(!succeeded && this.fireOnOneErrback){
-				this.errback(result);
-			}else if(this.finishedCount == this.list.length){
-				this.callback(this.resultList);
-			}
-		}
-		if(!succeeded && this.consumeErrors){
-			result = null;
-		}
-		return result;
-	},
-
-	gatherResults: function(deferredList){
-		// summary:	
-		//	Gathers the results of the deferreds for packaging
-		//	as the parameters to the Deferred Lists' callback
-
-		var d = new dojo.DeferredList(deferredList, false, true, false);
-		d.addCallback(function(results){
-			var ret = [];
-			dojo.forEach(results, function(result){
-				ret.push(result[1]);
-			});
-			return ret;
-		});
-		return d;
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/LICENSE b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/LICENSE
deleted file mode 100644
index ad1676a..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/LICENSE
+++ /dev/null
@@ -1,195 +0,0 @@
-Dojo is available under *either* the terms of the modified BSD license *or* the
-Academic Free License version 2.1. As a recipient of Dojo, you may choose which
-license to receive this code under (except as noted in per-module LICENSE
-files). Some modules may not be the copyright of the Dojo Foundation. These
-modules contain explicit declarations of copyright in both the LICENSE files in
-the directories in which they reside and in the code itself. No external
-contributions are allowed under licenses which are fundamentally incompatible
-with the AFL or BSD licenses that Dojo is distributed under.
-
-The text of the AFL and BSD licenses is reproduced below. 
-
--------------------------------------------------------------------------------
-The "New" BSD License:
-**********************
-
-Copyright (c) 2005-2009, The Dojo Foundation
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-  * Redistributions of source code must retain the above copyright notice, this
-    list of conditions and the following disclaimer.
-  * Redistributions in binary form must reproduce the above copyright notice,
-    this list of conditions and the following disclaimer in the documentation
-    and/or other materials provided with the distribution.
-  * Neither the name of the Dojo Foundation nor the names of its contributors
-    may be used to endorse or promote products derived from this software
-    without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
--------------------------------------------------------------------------------
-The Academic Free License, v. 2.1:
-**********************************
-
-This Academic Free License (the "License") applies to any original work of
-authorship (the "Original Work") whose owner (the "Licensor") has placed the
-following notice immediately following the copyright notice for the Original
-Work:
-
-Licensed under the Academic Free License version 2.1
-
-1) Grant of Copyright License. Licensor hereby grants You a world-wide,
-royalty-free, non-exclusive, perpetual, sublicenseable license to do the
-following:
-
-a) to reproduce the Original Work in copies;
-
-b) to prepare derivative works ("Derivative Works") based upon the Original
-Work;
-
-c) to distribute copies of the Original Work and Derivative Works to the
-public;
-
-d) to perform the Original Work publicly; and
-
-e) to display the Original Work publicly.
-
-2) Grant of Patent License. Licensor hereby grants You a world-wide,
-royalty-free, non-exclusive, perpetual, sublicenseable license, under patent
-claims owned or controlled by the Licensor that are embodied in the Original
-Work as furnished by the Licensor, to make, use, sell and offer for sale the
-Original Work and Derivative Works.
-
-3) Grant of Source Code License. The term "Source Code" means the preferred
-form of the Original Work for making modifications to it and all available
-documentation describing how to modify the Original Work. Licensor hereby
-agrees to provide a machine-readable copy of the Source Code of the Original
-Work along with each copy of the Original Work that Licensor distributes.
-Licensor reserves the right to satisfy this obligation by placing a
-machine-readable copy of the Source Code in an information repository
-reasonably calculated to permit inexpensive and convenient access by You for as
-long as Licensor continues to distribute the Original Work, and by publishing
-the address of that information repository in a notice immediately following
-the copyright notice that applies to the Original Work.
-
-4) Exclusions From License Grant. Neither the names of Licensor, nor the names
-of any contributors to the Original Work, nor any of their trademarks or
-service marks, may be used to endorse or promote products derived from this
-Original Work without express prior written permission of the Licensor. Nothing
-in this License shall be deemed to grant any rights to trademarks, copyrights,
-patents, trade secrets or any other intellectual property of Licensor except as
-expressly stated herein. No patent license is granted to make, use, sell or
-offer to sell embodiments of any patent claims other than the licensed claims
-defined in Section 2. No right is granted to the trademarks of Licensor even if
-such marks are included in the Original Work. Nothing in this License shall be
-interpreted to prohibit Licensor from licensing under different terms from this
-License any Original Work that Licensor otherwise would have a right to
-license.
-
-5) This section intentionally omitted.
-
-6) Attribution Rights. You must retain, in the Source Code of any Derivative
-Works that You create, all copyright, patent or trademark notices from the
-Source Code of the Original Work, as well as any notices of licensing and any
-descriptive text identified therein as an "Attribution Notice." You must cause
-the Source Code for any Derivative Works that You create to carry a prominent
-Attribution Notice reasonably calculated to inform recipients that You have
-modified the Original Work.
-
-7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that
-the copyright in and to the Original Work and the patent rights granted herein
-by Licensor are owned by the Licensor or are sublicensed to You under the terms
-of this License with the permission of the contributor(s) of those copyrights
-and patent rights. Except as expressly stated in the immediately proceeding
-sentence, the Original Work is provided under this License on an "AS IS" BASIS
-and WITHOUT WARRANTY, either express or implied, including, without limitation,
-the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU.
-This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No
-license to Original Work is granted hereunder except under this disclaimer.
-
-8) Limitation of Liability. Under no circumstances and under no legal theory,
-whether in tort (including negligence), contract, or otherwise, shall the
-Licensor be liable to any person for any direct, indirect, special, incidental,
-or consequential damages of any character arising as a result of this License
-or the use of the Original Work including, without limitation, damages for loss
-of goodwill, work stoppage, computer failure or malfunction, or any and all
-other commercial damages or losses. This limitation of liability shall not
-apply to liability for death or personal injury resulting from Licensor's
-negligence to the extent applicable law prohibits such limitation. Some
-jurisdictions do not allow the exclusion or limitation of incidental or
-consequential damages, so this exclusion and limitation may not apply to You.
-
-9) Acceptance and Termination. If You distribute copies of the Original Work or
-a Derivative Work, You must make a reasonable effort under the circumstances to
-obtain the express assent of recipients to the terms of this License. Nothing
-else but this License (or another written agreement between Licensor and You)
-grants You permission to create Derivative Works based upon the Original Work
-or to exercise any of the rights granted in Section 1 herein, and any attempt
-to do so except under the terms of this License (or another written agreement
-between Licensor and You) is expressly prohibited by U.S. copyright law, the
-equivalent laws of other countries, and by international treaty. Therefore, by
-exercising any of the rights granted to You in Section 1 herein, You indicate
-Your acceptance of this License and all of its terms and conditions.
-
-10) Termination for Patent Action. This License shall terminate automatically
-and You may no longer exercise any of the rights granted to You by this License
-as of the date You commence an action, including a cross-claim or counterclaim,
-against Licensor or any licensee alleging that the Original Work infringes a
-patent. This termination provision shall not apply for an action alleging
-patent infringement by combinations of the Original Work with other software or
-hardware.
-
-11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this
-License may be brought only in the courts of a jurisdiction wherein the
-Licensor resides or in which Licensor conducts its primary business, and under
-the laws of that jurisdiction excluding its conflict-of-law provisions. The
-application of the United Nations Convention on Contracts for the International
-Sale of Goods is expressly excluded. Any use of the Original Work outside the
-scope of this License or after its termination shall be subject to the
-requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et
-seq., the equivalent laws of other countries, and international treaty. This
-section shall survive the termination of this License.
-
-12) Attorneys Fees. In any action to enforce the terms of this License or
-seeking damages relating thereto, the prevailing party shall be entitled to
-recover its costs and expenses, including, without limitation, reasonable
-attorneys' fees and costs incurred in connection with such action, including
-any appeal of such action. This section shall survive the termination of this
-License.
-
-13) Miscellaneous. This License represents the complete agreement concerning
-the subject matter hereof. If any provision of this License is held to be
-unenforceable, such provision shall be reformed only to the extent necessary to
-make it enforceable.
-
-14) Definition of "You" in This License. "You" throughout this License, whether
-in upper or lower case, means an individual or a legal entity exercising rights
-under, and complying with all of the terms of, this License. For legal
-entities, "You" includes any entity that controls, is controlled by, or is
-under common control with you. For purposes of this definition, "control" means
-(i) the power, direct or indirect, to cause the direction or management of such
-entity, whether by contract or otherwise, or (ii) ownership of fifty percent
-(50%) or more of the outstanding shares, or (iii) beneficial ownership of such
-entity.
-
-15) Right to Use. You may use the Original Work in all ways not otherwise
-restricted or conditioned by this License or by law, and Licensor promises not
-to interfere with or be responsible for such uses by You.
-
-This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved.
-Permission is hereby granted to copy and distribute this license without
-modification. This license may not be modified without the express written
-permission of its copyright owner.
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/NodeList-fx.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/NodeList-fx.js
deleted file mode 100644
index cbc0ac3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/NodeList-fx.js
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo.NodeList-fx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.NodeList-fx"] = true;
-dojo.provide("dojo.NodeList-fx");
-dojo.require("dojo.fx");
-
-/*=====
-dojo["NodeList-fx"] = {
-	// summary: Adds dojo.fx animation support to dojo.query()
-};
-=====*/
-
-dojo.extend(dojo.NodeList, {
-	_anim: function(obj, method, args){
-		args = args||{};
-		return dojo.fx.combine(
-			this.map(function(item){
-				var tmpArgs = { node: item };
-				dojo.mixin(tmpArgs, args);
-				return obj[method](tmpArgs);
-			})
-		); // dojo.Animation
-	},
-
-	wipeIn: function(args){
-		//	summary:
-		//		wipe in all elements of this NodeList. Returns an instance of dojo.Animation
-		//	example:
-		//		Fade in all tables with class "blah":
-		//		|	dojo.query("table.blah").wipeIn().play();
-		return this._anim(dojo.fx, "wipeIn", args); // dojo.Animation
-	},
-
-	wipeOut: function(args){
-		//	summary:
-		//		wipe out all elements of this NodeList. Returns an instance of dojo.Animation
-		//	example:
-		//		Wipe out all tables with class "blah":
-		//		|	dojo.query("table.blah").wipeOut().play();
-		return this._anim(dojo.fx, "wipeOut", args); // dojo.Animation
-	},
-
-	slideTo: function(args){
-		//	summary:
-		//		slide all elements of the node list to the specified place.
-		//		Returns an instance of dojo.Animation
-		//	example:
-		//		|	Move all tables with class "blah" to 300/300:
-		//		|	dojo.query("table.blah").slideTo({
-		//		|		left: 40,
-		//		|		top: 50
-		//		|	}).play();
-		return this._anim(dojo.fx, "slideTo", args); // dojo.Animation
-	},
-
-
-	fadeIn: function(args){
-		//	summary:
-		//		fade in all elements of this NodeList. Returns an instance of dojo.Animation
-		//	example:
-		//		Fade in all tables with class "blah":
-		//		|	dojo.query("table.blah").fadeIn().play();
-		return this._anim(dojo, "fadeIn", args); // dojo.Animation
-	},
-
-	fadeOut: function(args){
-		//	summary:
-		//		fade out all elements of this NodeList. Returns an instance of dojo.Animation
-		//	example:
-		//		Fade out all elements with class "zork":
-		//		|	dojo.query(".zork").fadeOut().play();
-		//	example:
-		//		Fade them on a delay and do something at the end:
-		//		|	var fo = dojo.query(".zork").fadeOut();
-		//		|	dojo.connect(fo, "onEnd", function(){ /*...*/ });
-		//		|	fo.play();
-		return this._anim(dojo, "fadeOut", args); // dojo.Animation
-	},
-
-	animateProperty: function(args){
-		//	summary:
-		//		see dojo.animateProperty(). Animate all elements of this
-		//		NodeList across the properties specified.
-		//	example:
-		//	|	dojo.query(".zork").animateProperty({
-		//	|		duration: 500,
-		//	|		properties: { 
-		//	|			color:		{ start: "black", end: "white" },
-		//	|			left:		{ end: 300 } 
-		//	|		} 
-		//	|	}).play();
-		return this._anim(dojo, "animateProperty", args); // dojo.Animation
-	},
-
-	anim: function(	/*Object*/ 			properties, 
-					/*Integer?*/		duration, 
-					/*Function?*/		easing, 
-					/*Function?*/		onEnd,
-					/*Integer?*/		delay){
-		//	summary:
-		//		Animate one or more CSS properties for all nodes in this list.
-		//		The returned animation object will already be playing when it
-		//		is returned. See the docs for `dojo.anim` for full details.
-		//	properties: Object
-		//		the properties to animate
-		//	duration: Integer?
-		//		Optional. The time to run the animations for
-		//	easing: Function?
-		//		Optional. The easing function to use.
-		//	onEnd: Function?
-		//		A function to be called when the animation ends
-		//	delay:
-		//		how long to delay playing the returned animation
-		//	example:
-		//		Another way to fade out:
-		//	|	dojo.query(".thinger").anim({ opacity: 0 });
-		//	example:
-		//		animate all elements with the "thigner" class to a width of 500
-		//		pixels over half a second
-		//	|	dojo.query(".thinger").anim({ width: 500 }, 700);
-		var canim = dojo.fx.combine(
-			this.map(function(item){
-				return dojo.animateProperty({
-					node: item,
-					properties: properties,
-					duration: duration||350,
-					easing: easing
-				});
-			})
-		); 
-		if(onEnd){
-			dojo.connect(canim, "onEnd", onEnd);
-		}
-		return canim.play(delay||0); // dojo.Animation
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/NodeList-html.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/NodeList-html.js
deleted file mode 100644
index 66499c8..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/NodeList-html.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo.NodeList-html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.NodeList-html"] = true;
-dojo.provide("dojo.NodeList-html");
-dojo.require("dojo.html");
-
-/*=====
-dojo["NodeList-html"] = {
-	// summary: Adds a chainable html method to dojo.query() / Nodelist instances for setting/replacing node content
-};
-=====*/
-
-dojo.extend(dojo.NodeList, {
-	html: function(content, /* Object? */params){
-		//	summary:
-		//		see `dojo.html.set()`. Set the content of all elements of this NodeList
-		//
-		// description: 
-		//		Based around `dojo.html.set()`, set the content of the Elements in a 
-		//		NodeList to the given content (string/node/nodelist), with optional arguments
-		//		to further tune the set content behavior.
-		//
-		//	example:
-		//	| dojo.query(".thingList").html("<li dojoType='dojo.dnd.Moveable'>1</li><li dojoType='dojo.dnd.Moveable'>2</li><li dojoType='dojo.dnd.Moveable'>3</li>",
-		//	| { 
-		//	| 	parseContent: true, 
-		//	| 	onBegin: function(){
-		//	| 		this.content = this.content.replace(/([0-9])/g, this.id + ": $1");
-		//	| 		this.inherited("onBegin", arguments);
-		//	| 	}
-		//	| }).removeClass("notdone").addClass("done");
-
-		var dhs = new dojo.html._ContentSetter(params || {});
-		this.forEach(function(elm){
-			dhs.node = elm; 
-			dhs.set(content);
-			dhs.tearDown();
-		});
-		return this; // dojo.NodeList
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/NodeList-manipulate.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/NodeList-manipulate.js
deleted file mode 100644
index f60b3e3..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/NodeList-manipulate.js
+++ /dev/null
@@ -1,731 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo.NodeList-manipulate"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.NodeList-manipulate"] = true;
-dojo.provide("dojo.NodeList-manipulate");
-
-/*=====
-dojo["NodeList-manipulate"] = {
-	// summary: Adds a chainable methods to dojo.query() / Nodelist instances for manipulating HTML
-	// and DOM nodes and their properties.
-};
-=====*/
-
-//TODO: add a way to parse for widgets in the injected markup?
-
-(function(){
-	function getText(/*DOMNode*/node){
-		// summary:
-		// 		recursion method for text() to use. Gets text value for a node.
-		// description:
-		// 		Juse uses nodedValue so things like <br/> tags do not end up in
-		// 		the text as any sort of line return.
-		var text = "", ch = node.childNodes;
-		for(var i = 0, n; n = ch[i]; i++){
-			//Skip comments.
-			if(n.nodeType != 8){
-				if(n.nodeType == 1){
-					text += getText(n);
-				}else{
-					text += n.nodeValue;
-				}
-			}
-		}
-		return text;
-	}
-
-	function getWrapInsertion(/*DOMNode*/node){
-		// summary:
-		// 		finds the innermost element to use for wrap insertion.
-
-		//Make it easy, assume single nesting, no siblings.
-		while(node.childNodes[0] && node.childNodes[0].nodeType == 1){
-			node = node.childNodes[0];
-		}
-		return node; //DOMNode
-	}
-
-	function makeWrapNode(/*DOMNode||String*/html, /*DOMNode*/refNode){
-		// summary: 
-		// 		convert HTML into nodes if it is not already a node.
-		if(typeof html == "string"){
-			html = dojo._toDom(html, (refNode && refNode.ownerDocument));
-			if(html.nodeType == 11){
-				//DocumentFragment cannot handle cloneNode, so choose first child.
-				html = html.childNodes[0];
-			}
-		}else if(html.nodeType == 1 && html.parentNode){
-			//This element is already in the DOM clone it, but not its children.
-			html = html.cloneNode(false);
-		}
-		return html; /*DOMNode*/
-	}
-
-	dojo.extend(dojo.NodeList, {
-		_placeMultiple: function(/*String||Node||NodeList*/query, /*String*/position){
-			// summary:
-			// 		private method for inserting queried nodes into all nodes in this NodeList
-			// 		at different positions. Differs from NodeList.place because it will clone
-			// 		the nodes in this NodeList if the query matches more than one element.
-			var nl2 = typeof query == "string" || query.nodeType ? dojo.query(query) : query;
-			var toAdd = [];
-			for(var i = 0; i < nl2.length; i++){
-				//Go backwards in DOM to make dom insertions easier via insertBefore
-				var refNode = nl2[i];
-				var length = this.length;
-				for(var j = length - 1, item; item = this[j]; j--){
-					if(i > 0){
-						//Need to clone the item. This also means
-						//it needs to be added to the current NodeList
-						//so it can also be the target of other chaining operations.
-						item = this._cloneNode(item);
-						toAdd.unshift(item);
-					}
-					if(j == length - 1){
-						dojo.place(item, refNode, position);
-					}else{
-						refNode.parentNode.insertBefore(item, refNode);
-					}
-					refNode = item;
-				}
-			}
-
-			if(toAdd.length){
-				//Add the toAdd items to the current NodeList. Build up list of args
-				//to pass to splice.
-				toAdd.unshift(0);
-				toAdd.unshift(this.length - 1);
-				Array.prototype.splice.apply(this, toAdd);
-			}
-
-			return this; //dojo.NodeList
-		},
-
-		innerHTML: function(/*String?||DOMNode?|NodeList?*/value){
-			// summary:
-			// 		allows setting the innerHTML of each node in the NodeList,
-			// 		if there is a value passed in, otherwise, reads the innerHTML value of the first node.
-			// description:
-			// 		This method is simpler than the dojo.NodeList.html() method provided by
-			// 		`dojo.NodeList-html`. This method just does proper innerHTML insertion of HTML fragments,
-			// 		and it allows for the innerHTML to be read for the first node in the node list.
-			// 		Since dojo.NodeList-html already took the "html" name, this method is called
-			// 		"innerHTML". However, if dojo.NodeList-html has not been loaded yet, this
-			// 		module will define an "html" method that can be used instead. Be careful if you
-			// 		are working in an environment where it is possible that dojo.NodeList-html could
-			// 		have been loaded, since its definition of "html" will take precedence.
-			// 		The nodes represented by the value argument will be cloned if more than one
-			// 		node is in this NodeList. The nodes in this NodeList are returned in the "set"
-			// 		usage of this method, not the HTML that was inserted.
-			//	returns:
-			//		if no value is passed, the result is String, the innerHTML of the first node.
-			//		If a value is passed, the return is this dojo.NodeList
-			//	example:
-			//		assume a DOM created by this markup:
-			//	|	<div id="foo"></div>
-			//	|	<div id="bar"></div>
-			//		This code inserts <p>Hello World</p> into both divs:
-			//	|	dojo.query("div").innerHTML("<p>Hello World</p>");
-			//	example:
-			//		assume a DOM created by this markup:
-			//	|	<div id="foo"><p>Hello Mars</p></div>
-			//	|	<div id="bar"><p>Hello World</p></div>
-			//		This code returns "<p>Hello Mars</p>":
-			//	|	var message = dojo.query("div").innerHTML();
-			if(arguments.length){
-				return this.addContent(value, "only"); //dojo.NodeList
-			}else{
-				return this[0].innerHTML; //String
-			}
-		},
-
-		/*=====
-		html: function(value){
-			// summary:
-			//		see the information for "innerHTML". "html" is an alias for "innerHTML", but is
-			// 		only defined if dojo.NodeList-html has not been loaded.
-			// description:
-			// 		An alias for the "innerHTML" method, but only defined if there is not an existing
-			// 		"html" method on dojo.NodeList. Be careful if you are working in an environment
-			// 		where it is possible that dojo.NodeList-html could have been loaded, since its
-			// 		definition of "html" will take precedence. If you are not sure if dojo.NodeList-html
-			// 		could be loaded, use the "innerHTML" method.
-			//	value: String?||DOMNode?||NodeList?
-			//		optional. The HTML fragment to use as innerHTML. If value is not passed, then the innerHTML
-			// 		of the first element in this NodeList is returned.
-			//	returns:
-			//		if no value is passed, the result is String, the innerHTML of the first node.
-			//		If a value is passed, the return is this dojo.NodeList
-			return; // dojo.NodeList
-			return; // String
-		},
-		=====*/
-
-		text: function(/*String*/value){
-			// summary:
-			// 		allows setting the text value of each node in the NodeList,
-			// 		if there is a value passed in, otherwise, returns the text value for all the
-			// 		nodes in the NodeList in one string.
-			//	example:
-			//		assume a DOM created by this markup:
-			//	|	<div id="foo"></div>
-			//	|	<div id="bar"></div>
-			//		This code inserts "Hello World" into both divs:
-			//	|	dojo.query("div").text("Hello World");
-			//	example:
-			//		assume a DOM created by this markup:
-			//	|	<div id="foo"><p>Hello Mars <span>today</span></p></div>
-			//	|	<div id="bar"><p>Hello World</p></div>
-			//		This code returns "Hello Mars today":
-			//	|	var message = dojo.query("div").text();
-			//	returns:
-			//		if no value is passed, the result is String, the text value of the first node.
-			//		If a value is passed, the return is this dojo.NodeList
-			if(arguments.length){
-				for(var i = 0, node; node = this[i]; i++){
-					if(node.nodeType == 1){
-						dojo.empty(node);
-						node.appendChild(node.ownerDocument.createTextNode(value));
-					}
-				}
-				return this; //dojo.NodeList
-			}else{
-				var result = "";
-				for(i = 0; node = this[i]; i++){
-					result += getText(node);
-				}
-				return result; //String
-			}
-		},
-
-		val: function(/*String||Array*/value){
-			// summary:
-			// 		If a value is passed, allows seting the value property of form elements in this
-			// 		NodeList, or properly selecting/checking the right value for radio/checkbox/select
-			// 		elements. If no value is passed, the value of the first node in this NodeList
-			// 		is returned.
-			//	returns:
-			//		if no value is passed, the result is String or an Array, for the value of the
-			//		first node.
-			//		If a value is passed, the return is this dojo.NodeList
-			//	example:
-			//		assume a DOM created by this markup:
-			//	|	<input type="text" value="foo">
-			//	|	<select multiple>
-			//	|		<option value="red" selected>Red</option>
-			//	|		<option value="blue">Blue</option>
-			//	|		<option value="yellow" selected>Yellow</option>
-			//	|	</select>
-			//		This code gets and sets the values for the form fields above:
-			//	|	dojo.query('[type="text"]').val(); //gets value foo
-			//	|	dojo.query('[type="text"]').val("bar"); //sets the input's value to "bar"
-			// 	|	dojo.query("select").val() //gets array value ["red", "yellow"]
-			// 	|	dojo.query("select").val(["blue", "yellow"]) //Sets the blue and yellow options to selected.
-
-			//Special work for input elements.
-			if(arguments.length){
-				var isArray = dojo.isArray(value);
-				for(var index = 0, node; node = this[index]; index++){
-					var name = node.nodeName.toUpperCase();
-					var type = node.type;
-					var newValue = isArray ? value[index] : value;
-	
-					if(name == "SELECT"){
-						var opts = node.options;
-						for(var i = 0; i < opts.length; i++){
-							var opt = opts[i];
-							if(node.multiple){
-								opt.selected = (dojo.indexOf(value, opt.value) != -1);
-							}else{
-								opt.selected = (opt.value == newValue);
-							}
-						}
-					}else if(type == "checkbox" || type == "radio"){
-						node.checked = (node.value == newValue);
-					}else{
-						node.value = newValue;
-					}
-				}
-				return this; //dojo.NodeList
-			}else{
-				//node already declared above.
-				node = this[0];
-				if(!node || node.nodeType != 1){
-					return undefined;
-				}
-				value = node.value || "";
-				if(node.nodeName.toUpperCase() == "SELECT" && node.multiple){
-					//A multivalued selectbox. Do the pain.
-					value = [];
-					//opts declared above in if block.
-					opts = node.options;
-					//i declared above in if block;
-					for(i = 0; i < opts.length; i++){
-						//opt declared above in if block
-						opt = opts[i];
-						if(opt.selected){
-							value.push(opt.value);
-						}
-					}
-					if(!value.length){
-						value = null;
-					}
-				}
-				return value; //String||Array
-			}
-		},
-
-		append: function(/*String||DOMNode||NodeList*/content){
-			// summary:
-			// 		appends the content to every node in the NodeList.
-			// description:
-			// 		The content will be cloned if the length of NodeList
-			// 		is greater than 1. Only the DOM nodes are cloned, not
-			// 		any attached event handlers.
-			// returns:
-			//		dojo.NodeList, the nodes currently in this NodeList will be returned,
-			//		not the appended content.
-			//	example:
-			//		assume a DOM created by this markup:
-			//	|	<div id="foo"><p>Hello Mars</p></div>
-			//	|	<div id="bar"><p>Hello World</p></div>
-			//		Running this code:
-			//	|	dojo.query("div").append("<span>append</span>");
-			//		Results in this DOM structure:
-			//	|	<div id="foo"><p>Hello Mars</p><span>append</span></div>
-			//	|	<div id="bar"><p>Hello World</p><span>append</span></div>
-			return this.addContent(content, "last"); //dojo.NodeList
-		},
-
-		appendTo: function(/*String*/query){
-			// summary:
-			// 		appends nodes in this NodeList to the nodes matched by
-			// 		the query passed to appendTo.
-			// description:
-			// 		The nodes in this NodeList will be cloned if the query
-			// 		matches more than one element. Only the DOM nodes are cloned, not
-			// 		any attached event handlers.
-			// returns:
-			//		dojo.NodeList, the nodes currently in this NodeList will be returned,
-			//		not the matched nodes from the query.
-			//	example:
-			//		assume a DOM created by this markup:
-			//	|	<span>append</span>
-			//	|	<p>Hello Mars</p>
-			//	|	<p>Hello World</p>
-			//		Running this code:
-			//	|	dojo.query("span").appendTo("p");
-			//		Results in this DOM structure:
-			//	|	<p>Hello Mars<span>append</span></p>
-			//	|	<p>Hello World<span>append</span></p>
-			return this._placeMultiple(query, "last"); //dojo.NodeList
-		},
-
-		prepend: function(/*String||DOMNode||NodeList*/content){
-			// summary:
-			// 		prepends the content to every node in the NodeList.
-			// description:
-			// 		The content will be cloned if the length of NodeList
-			// 		is greater than 1. Only the DOM nodes are cloned, not
-			// 		any attached event handlers.
-			// returns:
-			//		dojo.NodeList, the nodes currently in this NodeList will be returned,
-			//		not the appended content.
-			//		assume a DOM created by this markup:
-			//	|	<div id="foo"><p>Hello Mars</p></div>
-			//	|	<div id="bar"><p>Hello World</p></div>
-			//		Running this code:
-			//	|	dojo.query("div").prepend("<span>prepend</span>");
-			//		Results in this DOM structure:
-			//	|	<div id="foo"><span>prepend</span><p>Hello Mars</p></div>
-			//	|	<div id="bar"><span>prepend</span><p>Hello World</p></div>
-			return this.addContent(content, "first"); //dojo.NodeList
-		},
-
-		prependTo: function(/*String*/query){
-			// summary:
-			// 		prepends nodes in this NodeList to the nodes matched by
-			// 		the query passed to prependTo.
-			// description:
-			// 		The nodes in this NodeList will be cloned if the query
-			// 		matches more than one element. Only the DOM nodes are cloned, not
-			// 		any attached event handlers.
-			// returns:
-			//		dojo.NodeList, the nodes currently in this NodeList will be returned,
-			//		not the matched nodes from the query.
-			//	example:
-			//		assume a DOM created by this markup:
-			//	|	<span>prepend</span>
-			//	|	<p>Hello Mars</p>
-			//	|	<p>Hello World</p>
-			//		Running this code:
-			//	|	dojo.query("span").prependTo("p");
-			//		Results in this DOM structure:
-			//	|	<p><span>prepend</span>Hello Mars</p>
-			//	|	<p><span>prepend</span>Hello World</p>
-			return this._placeMultiple(query, "first"); //dojo.NodeList
-		},
-
-		after: function(/*String||Element||NodeList*/content){
-			// summary:
-			// 		Places the content after every node in the NodeList.
-			// description:
-			// 		The content will be cloned if the length of NodeList
-			// 		is greater than 1. Only the DOM nodes are cloned, not
-			// 		any attached event handlers.
-			// returns:
-			//		dojo.NodeList, the nodes currently in this NodeList will be returned,
-			//		not the appended content.
-			//	example:
-			//		assume a DOM created by this markup:
-			//	|	<div id="foo"><p>Hello Mars</p></div>
-			//	|	<div id="bar"><p>Hello World</p></div>
-			//		Running this code:
-			//	|	dojo.query("div").after("<span>after</span>");
-			//		Results in this DOM structure:
-			//	|	<div id="foo"><p>Hello Mars</p></div><span>after</span>
-			//	|	<div id="bar"><p>Hello World</p></div><span>after</span>
-			return this.addContent(content, "after"); //dojo.NodeList
-		},
-
-		insertAfter: function(/*String*/query){
-			// summary:
-			// 		The nodes in this NodeList will be placed after the nodes
-			// 		matched by the query passed to insertAfter.
-			// description:
-			// 		The nodes in this NodeList will be cloned if the query
-			// 		matches more than one element. Only the DOM nodes are cloned, not
-			// 		any attached event handlers.
-			// returns:
-			//		dojo.NodeList, the nodes currently in this NodeList will be returned,
-			//		not the matched nodes from the query.
-			//	example:
-			//		assume a DOM created by this markup:
-			//	|	<span>after</span>
-			//	|	<p>Hello Mars</p>
-			//	|	<p>Hello World</p>
-			//		Running this code:
-			//	|	dojo.query("span").insertAfter("p");
-			//		Results in this DOM structure:
-			//	|	<p>Hello Mars</p><span>after</span>
-			//	|	<p>Hello World</p><span>after</span>
-			return this._placeMultiple(query, "after"); //dojo.NodeList
-		},
-
-		before: function(/*String||DOMNode||NodeList*/content){
-			// summary:
-			// 		Places the content before every node in the NodeList.
-			// description:
-			// 		The content will be cloned if the length of NodeList
-			// 		is greater than 1. Only the DOM nodes are cloned, not
-			// 		any attached event handlers.
-			// returns:
-			//		dojo.NodeList, the nodes currently in this NodeList will be returned,
-			//		not the appended content.
-			//	example:
-			//		assume a DOM created by this markup:
-			//	|	<div id="foo"><p>Hello Mars</p></div>
-			//	|	<div id="bar"><p>Hello World</p></div>
-			//		Running this code:
-			//	|	dojo.query("div").before("<span>before</span>");
-			//		Results in this DOM structure:
-			//	|	<span>before</span><div id="foo"><p>Hello Mars</p></div>
-			//	|	<span>before</span><div id="bar"><p>Hello World</p></div>
-			return this.addContent(content, "before"); //dojo.NodeList
-		},
-
-		insertBefore: function(/*String*/query){
-			// summary:
-			// 		The nodes in this NodeList will be placed after the nodes
-			// 		matched by the query passed to insertAfter.
-			// description:
-			// 		The nodes in this NodeList will be cloned if the query
-			// 		matches more than one element. Only the DOM nodes are cloned, not
-			// 		any attached event handlers.
-			// returns:
-			//		dojo.NodeList, the nodes currently in this NodeList will be returned,
-			//		not the matched nodes from the query.
-			//	example:
-			//		assume a DOM created by this markup:
-			//	|	<span>before</span>
-			//	|	<p>Hello Mars</p>
-			//	|	<p>Hello World</p>
-			//		Running this code:
-			//	|	dojo.query("span").insertBefore("p");
-			//		Results in this DOM structure:
-			//	|	<span>before</span><p>Hello Mars</p>
-			//	|	<span>before</span><p>Hello World</p>
-			return this._placeMultiple(query, "before"); //dojo.NodeList
-		},
-
-		/*=====
-		remove: function(simpleFilter){
-			//	summary:
-			//		alias for dojo.NodeList's orphan method. Removes elements
-			// 		in this list that match the simple filter from their parents
-			// 		and returns them as a new NodeList.
-			//	simpleFilter: String
-			//		single-expression CSS rule. For example, ".thinger" or
-			//		"#someId[attrName='value']" but not "div > span". In short,
-			//		anything which does not invoke a descent to evaluate but
-			//		can instead be used to test a single node is acceptable.
-			//	returns:
-			//		dojo.NodeList
-			return; // dojo.NodeList
-		},
-		=====*/
-		remove: dojo.NodeList.prototype.orphan,
-
-		wrap: function(/*String||DOMNode*/html){
-			// summary:
-			// 		Wrap each node in the NodeList with html passed to wrap.
-			// description:
-			// 		html will be cloned if the NodeList has more than one
-			// 		element. Only DOM nodes are cloned, not any attached
-			// 		event handlers.
-			// returns:
-			//		dojo.NodeList, the nodes in the current NodeList will be returned,
-			//		not the nodes from html argument.
-			//	example:
-			//		assume a DOM created by this markup:
-			//	|	<b>one</b>
-			//	|	<b>two</b>
-			//		Running this code:
-			//	|	dojo.query("b").wrap("<div><span></span></div>");
-			//		Results in this DOM structure:
-			//	|	<div><span><b>one</b></span></div>
-			//	|	<div><span><b>two</b></span></div>
-			if(this[0]){
-				html = makeWrapNode(html, this[0]);
-
-				//Now cycle through the elements and do the insertion.
-				for(var i = 0, node; node = this[i]; i++){
-					//Always clone because if html is used to hold one of
-					//the "this" nodes, then on the clone of html it will contain
-					//that "this" node, and that would be bad.
-					var clone = this._cloneNode(html);
-					if(node.parentNode){
-						node.parentNode.replaceChild(clone, node);
-					}
-					//Find deepest element and insert old node in it.
-					var insertion = getWrapInsertion(clone);
-					insertion.appendChild(node);
-				}
-			}
-			return this; //dojo.NodeList
-		},
-
-		wrapAll: function(/*String||DOMNode*/html){
-			// summary:
-			// 		Insert html where the first node in this NodeList lives, then place all
-			// 		nodes in this NodeList as the child of the html.
-			// returns:
-			//		dojo.NodeList, the nodes in the current NodeList will be returned,
-			//		not the nodes from html argument.
-			//	example:
-			//		assume a DOM created by this markup:
-			//	|	<div class="container">
-			// 	|		<div class="red">Red One</div>
-			// 	|		<div class="blue">Blue One</div>
-			// 	|		<div class="red">Red Two</div>
-			// 	|		<div class="blue">Blue Two</div>
-			//	|	</div>
-			//		Running this code:
-			//	|	dojo.query(".red").wrapAll('<div class="allRed"></div>');
-			//		Results in this DOM structure:
-			//	|	<div class="container">
-			// 	|		<div class="allRed">
-			// 	|			<div class="red">Red One</div>
-			// 	|			<div class="red">Red Two</div>
-			// 	|		</div>
-			// 	|		<div class="blue">Blue One</div>
-			// 	|		<div class="blue">Blue Two</div>
-			//	|	</div>
-			if(this[0]){
-				html = makeWrapNode(html, this[0]);
-
-				//Place the wrap HTML in place of the first node.
-				this[0].parentNode.replaceChild(html, this[0]);
-
-				//Now cycle through the elements and move them inside
-				//the wrap.
-				var insertion = getWrapInsertion(html);
-				for(var i = 0, node; node = this[i]; i++){
-					insertion.appendChild(node);
-				}
-			}
-			return this; //dojo.NodeList
-		},
-
-		wrapInner: function(/*String||DOMNode*/html){
-			// summary:
-			// 		For each node in the NodeList, wrap all its children with the passed in html.
-			// description:
-			// 		html will be cloned if the NodeList has more than one
-			// 		element. Only DOM nodes are cloned, not any attached
-			// 		event handlers.
-			// returns:
-			//		dojo.NodeList, the nodes in the current NodeList will be returned,
-			//		not the nodes from html argument.
-			//	example:
-			//		assume a DOM created by this markup:
-			//	|	<div class="container">
-			// 	|		<div class="red">Red One</div>
-			// 	|		<div class="blue">Blue One</div>
-			// 	|		<div class="red">Red Two</div>
-			// 	|		<div class="blue">Blue Two</div>
-			//	|	</div>
-			//		Running this code:
-			//	|	dojo.query(".red").wrapInner('<span class="special"></span>');
-			//		Results in this DOM structure:
-			//	|	<div class="container">
-			// 	|		<div class="red"><span class="special">Red One</span></div>
-			// 	|		<div class="blue">Blue One</div>
-			// 	|		<div class="red"><span class="special">Red Two</span></div>
-			// 	|		<div class="blue">Blue Two</div>
-			//	|	</div>
-			if(this[0]){
-				html = makeWrapNode(html, this[0]);
-				for(var i = 0; i < this.length; i++){
-					//Always clone because if html is used to hold one of
-					//the "this" nodes, then on the clone of html it will contain
-					//that "this" node, and that would be bad.
-					var clone = this._cloneNode(html);
-					
-					//Need to convert the childNodes to an array since wrapAll modifies the
-					//DOM and can change the live childNodes NodeList.
-					this._wrap(dojo._toArray(this[i].childNodes), null, this._NodeListCtor).wrapAll(clone);
-				}
-			}
-			return this; //dojo.NodeList
-		},
-
-		replaceWith: function(/*String||DOMNode||NodeList*/content){
-			// summary:
-			// 		Replaces each node in ths NodeList with the content passed to replaceWith.
-			// description:
-			// 		The content will be cloned if the length of NodeList
-			// 		is greater than 1. Only the DOM nodes are cloned, not
-			// 		any attached event handlers.
-			// returns:
-			//		The nodes currently in this NodeList will be returned, not the replacing content.
-			//		Note that the returned nodes have been removed from the DOM.
-			//	example:
-			//		assume a DOM created by this markup:
-			//	|	<div class="container">
-			// 	|		<div class="red">Red One</div>
-			// 	|		<div class="blue">Blue One</div>
-			// 	|		<div class="red">Red Two</div>
-			// 	|		<div class="blue">Blue Two</div>
-			//	|	</div>
-			//		Running this code:
-			//	|	dojo.query(".red").replaceWith('<div class="green">Green</div>');
-			//		Results in this DOM structure:
-			//	|	<div class="container">
-			// 	|		<div class="green">Green</div>
-			// 	|		<div class="blue">Blue One</div>
-			// 	|		<div class="green">Green</div>
-			// 	|		<div class="blue">Blue Two</div>
-			//	|	</div>
-			content = this._normalize(content, this[0]);
-			for(var i = 0, node; node = this[i]; i++){
-				this._place(content, node, "before", i > 0);
-				node.parentNode.removeChild(node);
-			}
-			return this; //dojo.NodeList
-		},
-
-		replaceAll: function(/*String*/query){
-			// summary:
-			// 		replaces nodes matched by the query passed to replaceAll with the nodes
-			// 		in this NodeList.
-			// description:
-			// 		The nodes in this NodeList will be cloned if the query
-			// 		matches more than one element. Only the DOM nodes are cloned, not
-			// 		any attached event handlers.
-			// returns:
-			//		The nodes currently in this NodeList will be returned, not the matched nodes
-			//		from the query. The nodes currently in this NodeLIst could have
-			//		been cloned, so the returned NodeList will include the cloned nodes.
-			//	example:
-			//		assume a DOM created by this markup:
-			//	|	<div class="container">
-			// 	|		<div class="spacer">___</div>			
-			// 	|		<div class="red">Red One</div>
-			// 	|		<div class="spacer">___</div>			
-			// 	|		<div class="blue">Blue One</div>
-			// 	|		<div class="spacer">___</div>			
-			// 	|		<div class="red">Red Two</div>
-			// 	|		<div class="spacer">___</div>			
-			// 	|		<div class="blue">Blue Two</div>
-			//	|	</div>
-			//		Running this code:
-			//	|	dojo.query(".red").replaceAll(".blue");
-			//		Results in this DOM structure:
-			//	|	<div class="container">
-			// 	|		<div class="spacer">___</div>			
-			// 	|		<div class="spacer">___</div>			
-			// 	|		<div class="red">Red One</div>
-			// 	|		<div class="red">Red Two</div>
-			// 	|		<div class="spacer">___</div>			
-			// 	|		<div class="spacer">___</div>			
-			// 	|		<div class="red">Red One</div>
-			// 	|		<div class="red">Red Two</div>
-			//	|	</div>
-			var nl = dojo.query(query);
-			var content = this._normalize(this, this[0]);
-			for(var i = 0, node; node = nl[i]; i++){
-				this._place(content, node, "before", i > 0);
-				node.parentNode.removeChild(node);
-			}
-			return this; //dojo.NodeList
-		},
-
-		clone: function(){
-			// summary:
-			// 		Clones all the nodes in this NodeList and returns them as a new NodeList.
-			// description:
-			// 		Only the DOM nodes are cloned, not any attached event handlers.
-			// returns:
-			//		dojo.NodeList, a cloned set of the original nodes.
-			//	example:
-			//		assume a DOM created by this markup:
-			//	|	<div class="container">
-			// 	|		<div class="red">Red One</div>
-			// 	|		<div class="blue">Blue One</div>
-			// 	|		<div class="red">Red Two</div>
-			// 	|		<div class="blue">Blue Two</div>
-			//	|	</div>
-			//		Running this code:
-			//	|	dojo.query(".red").clone().appendTo(".container");
-			//		Results in this DOM structure:
-			//	|	<div class="container">
-			// 	|		<div class="red">Red One</div>
-			// 	|		<div class="blue">Blue One</div>
-			// 	|		<div class="red">Red Two</div>
-			// 	|		<div class="blue">Blue Two</div>
-			// 	|		<div class="red">Red One</div>
-			// 	|		<div class="red">Red Two</div>
-			//	|	</div>
-
-			//TODO: need option to clone events?
-			var ary = [];
-			for(var i = 0; i < this.length; i++){
-				ary.push(this._cloneNode(this[i]));
-			}
-			return this._wrap(ary, this, this._NodeListCtor); //dojo.NodeList
-		}
-	});
-
-	//set up html method if one does not exist
-	if(!dojo.NodeList.prototype.html){
-		dojo.NodeList.prototype.html = dojo.NodeList.prototype.innerHTML;
-	}
-})();
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/NodeList-traverse.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/NodeList-traverse.js
deleted file mode 100644
index 5b144cb..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/NodeList-traverse.js
+++ /dev/null
@@ -1,517 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo.NodeList-traverse"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.NodeList-traverse"] = true;
-dojo.provide("dojo.NodeList-traverse");
-
-/*=====
-dojo["NodeList-traverse"] = {
-	// summary: Adds a chainable methods to dojo.query() / Nodelist instances for traversing the DOM
-};
-=====*/
-
-dojo.extend(dojo.NodeList, {
-	_buildArrayFromCallback: function(/*Function*/callback){
-		// summary:
-		// 		builds a new array of possibly differing size based on the input list.
-		// 		Since the returned array is likely of different size than the input array,
-		// 		the array's map function cannot be used.
-		var ary = [];
-		for(var i = 0; i < this.length; i++){
-			var items = callback.call(this[i], this[i], ary);
-			if(items){
-				ary = ary.concat(items);
-			}
-		}
-		return ary;	
-	},
-
-	_filterQueryResult: function(nodeList, query){
-		// summmary: 
-		// 		Replacement for dojo._filterQueryResult that does a full
-		// 		query. Slower, but allows for more types of queries.
-		var filter = dojo.filter(nodeList, function(node){
-			return dojo.query(query, node.parentNode).indexOf(node) != -1;
-		});
-		var result = this._wrap(filter);
-		return result;
-	},
-
-	_getUniqueAsNodeList: function(nodes){
-		// summary:
-		// 		given a list of nodes, make sure only unique
-		// 		elements are returned as our NodeList object.
-		// 		Does not call _stash().
-		var ary = [];
-		//Using for loop for better speed.
-		for(var i = 0, node; node = nodes[i]; i++){
-			//Should be a faster way to do this. dojo.query has a private
-			//_zip function that may be inspirational, but there are pathways
-			//in query that force nozip?
-			if(node.nodeType == 1 && dojo.indexOf(ary, node) == -1){
-				ary.push(node);
-			}
-		}
-		return this._wrap(ary, null, this._NodeListCtor);	 //dojo.NodeList
-	},
-
-	_getUniqueNodeListWithParent: function(nodes, query){
-		// summary:
-		// 		gets unique element nodes, filters them further
-		// 		with an optional query and then calls _stash to track parent NodeList.
-		var ary = this._getUniqueAsNodeList(nodes);
-		ary = (query ? this._filterQueryResult(ary, query) : ary);
-		return ary._stash(this);  //dojo.NodeList
-	},
-
-	_getRelatedUniqueNodes: function(/*String?*/query, /*Function*/callback){
-		// summary:
-		// 		cycles over all the nodes and calls a callback
-		// 		to collect nodes for a possible inclusion in a result.
-		// 		The callback will get two args: callback(node, ary), 
-		// 		where ary is the array being used to collect the nodes.
-		return this._getUniqueNodeListWithParent(this._buildArrayFromCallback(callback), query);  //dojo.NodeList
-	},
-
-	children: function(/*String?*/query){
-		// summary:
-		// 		Returns all immediate child elements for nodes in this dojo.NodeList.
-		// 		Optionally takes a query to filter the child elements.
-		// description:
-		// 		.end() can be used on the returned dojo.NodeList to get back to the
-		// 		original dojo.NodeList.
-		// query:
-		//		a CSS selector.
-		// returns:
-		//		dojo.NodeList, all immediate child elements for the nodes in this dojo.NodeList.
-		//	example:
-		//		assume a DOM created by this markup:
-		//	|	<div class="container">
-		// 	|		<div class="red">Red One</div>
-		// 	|		Some Text
-		// 	|		<div class="blue">Blue One</div>
-		// 	|		<div class="red">Red Two</div>
-		// 	|		<div class="blue">Blue Two</div>
-		//	|	</div>
-		//		Running this code:
-		//	|	dojo.query(".container").children();
-		//		returns the four divs that are children of the container div.
-		//		Running this code:
-		//	|	dojo.query(".container").children(".red");
-		//		returns the two divs that have the class "red".
-		return this._getRelatedUniqueNodes(query, function(node, ary){
-			return dojo._toArray(node.childNodes);
-		}); //dojo.NodeList
-	},
-
-	closest: function(/*String*/query){
-		// summary:
-		// 		Returns closest parent that matches query, including current node in this
-		// 		dojo.NodeList if it matches the query.
-		// description:
-		// 		.end() can be used on the returned dojo.NodeList to get back to the
-		// 		original dojo.NodeList.
-		//	query:
-		//		a CSS selector.
-		// returns:
-		//		dojo.NodeList, the closest parent that matches the query, including the current
-		//		node in this dojo.NodeList if it matches the query.
-		//	example:
-		//		assume a DOM created by this markup:
-		//	|	<div class="container">
-		// 	|		<div class="red">Red One</div>
-		// 	|		Some Text
-		// 	|		<div class="blue">Blue One</div>
-		// 	|		<div class="red">Red Two</div>
-		// 	|		<div class="blue">Blue Two</div>
-		//	|	</div>
-		//		Running this code:
-		//	|	dojo.query(".red").closest(".container");
-		//		returns the div with class "container".
-		var self = this;
-		return this._getRelatedUniqueNodes(query, function(node, ary){
-			do{
-				if(self._filterQueryResult([node], query).length){
-					return node;
-				}
-			}while((node = node.parentNode) && node.nodeType == 1);
-			return null; //To make rhino strict checking happy.
-		}); //dojo.NodeList
-	},
-
-	parent: function(/*String?*/query){
-		// summary:
-		// 		Returns immediate parent elements for nodes in this dojo.NodeList.
-		// 		Optionally takes a query to filter the parent elements.
-		// description:
-		// 		.end() can be used on the returned dojo.NodeList to get back to the
-		// 		original dojo.NodeList.
-		//	query:
-		//		a CSS selector.
-		// returns:
-		//		dojo.NodeList, immediate parent elements for nodes in this dojo.NodeList.
-		//	example:
-		//		assume a DOM created by this markup:
-		//	|	<div class="container">
-		// 	|		<div class="red">Red One</div>
-		// 	|		<div class="blue first"><span class="text">Blue One</span></div>
-		// 	|		<div class="red">Red Two</div>
-		// 	|		<div class="blue"><span class="text">Blue Two</span></div>
-		//	|	</div>
-		//		Running this code:
-		//	|	dojo.query(".text").parent();
-		//		returns the two divs with class "blue".
-		//		Running this code:
-		//	|	dojo.query(".text").parent(".first");
-		//		returns the one div with class "blue" and "first".
-		return this._getRelatedUniqueNodes(query, function(node, ary){
-			return node.parentNode;
-		}); //dojo.NodeList
-	},
-
-	parents: function(/*String?*/query){
-		// summary:
-		// 		Returns all parent elements for nodes in this dojo.NodeList.
-		// 		Optionally takes a query to filter the child elements.
-		// description:
-		// 		.end() can be used on the returned dojo.NodeList to get back to the
-		// 		original dojo.NodeList.
-		//	query:
-		//		a CSS selector.
-		// returns:
-		//		dojo.NodeList, all parent elements for nodes in this dojo.NodeList.
-		//	example:
-		//		assume a DOM created by this markup:
-		//	|	<div class="container">
-		// 	|		<div class="red">Red One</div>
-		// 	|		<div class="blue first"><span class="text">Blue One</span></div>
-		// 	|		<div class="red">Red Two</div>
-		// 	|		<div class="blue"><span class="text">Blue Two</span></div>
-		//	|	</div>
-		//		Running this code:
-		//	|	dojo.query(".text").parents();
-		//		returns the two divs with class "blue", the div with class "container",
-		// 	|	the body element and the html element.
-		//		Running this code:
-		//	|	dojo.query(".text").parents(".container");
-		//		returns the one div with class "container".
-		return this._getRelatedUniqueNodes(query, function(node, ary){
-			var pary = []
-			while(node.parentNode){
-				node = node.parentNode;
-				pary.push(node);
-			}
-			return pary;
-		}); //dojo.NodeList
-	},
-
-	siblings: function(/*String?*/query){
-		// summary:
-		// 		Returns all sibling elements for nodes in this dojo.NodeList.
-		// 		Optionally takes a query to filter the sibling elements.
-		// description:
-		// 		.end() can be used on the returned dojo.NodeList to get back to the
-		// 		original dojo.NodeList.
-		//	query:
-		//		a CSS selector.
-		// returns:
-		//		dojo.NodeList, all sibling elements for nodes in this dojo.NodeList.
-		//	example:
-		//		assume a DOM created by this markup:
-		//	|	<div class="container">
-		// 	|		<div class="red">Red One</div>
-		// 	|		Some Text
-		// 	|		<div class="blue first">Blue One</div>
-		// 	|		<div class="red">Red Two</div>
-		// 	|		<div class="blue">Blue Two</div>
-		//	|	</div>
-		//		Running this code:
-		//	|	dojo.query(".first").siblings();
-		//		returns the two divs with class "red" and the other div
-		// 	|	with class "blue" that does not have "first".
-		//		Running this code:
-		//	|	dojo.query(".first").siblings(".red");
-		//		returns the two div with class "red".
-		return this._getRelatedUniqueNodes(query, function(node, ary){
-			var pary = []
-			var nodes = (node.parentNode && node.parentNode.childNodes);
-			for(var i = 0; i < nodes.length; i++){
-				if(nodes[i] != node){
-					pary.push(nodes[i]);
-				}
-			}
-			return pary;
-		}); //dojo.NodeList
-	},
-
-	next: function(/*String?*/query){
-		// summary:
-		// 		Returns the next element for nodes in this dojo.NodeList.
-		// 		Optionally takes a query to filter the next elements.
-		// description:
-		// 		.end() can be used on the returned dojo.NodeList to get back to the
-		// 		original dojo.NodeList.
-		//	query:
-		//		a CSS selector.
-		// returns:
-		//		dojo.NodeList, the next element for nodes in this dojo.NodeList.
-		//	example:
-		//		assume a DOM created by this markup:
-		//	|	<div class="container">
-		// 	|		<div class="red">Red One</div>
-		// 	|		Some Text
-		// 	|		<div class="blue first">Blue One</div>
-		// 	|		<div class="red">Red Two</div>
-		// 	|		<div class="blue last">Blue Two</div>
-		//	|	</div>
-		//		Running this code:
-		//	|	dojo.query(".first").next();
-		//		returns the div with class "red" and has innerHTML of "Red Two".
-		//		Running this code:
-		//	|	dojo.query(".last").next(".red");
-		//		does not return any elements.
-		return this._getRelatedUniqueNodes(query, function(node, ary){
-			var next = node.nextSibling;
-			while(next && next.nodeType != 1){
-				next = next.nextSibling;
-			}
-			return next;
-		}); //dojo.NodeList
-	},
-
-	nextAll: function(/*String?*/query){
-		// summary:
-		// 		Returns all sibling elements that come after the nodes in this dojo.NodeList.
-		// 		Optionally takes a query to filter the sibling elements.
-		// description:
-		// 		.end() can be used on the returned dojo.NodeList to get back to the
-		// 		original dojo.NodeList.
-		//	query:
-		//		a CSS selector.
-		// returns:
-		//		dojo.NodeList, all sibling elements that come after the nodes in this dojo.NodeList.
-		//	example:
-		//		assume a DOM created by this markup:
-		//	|	<div class="container">
-		// 	|		<div class="red">Red One</div>
-		// 	|		Some Text
-		// 	|		<div class="blue first">Blue One</div>
-		// 	|		<div class="red next">Red Two</div>
-		// 	|		<div class="blue next">Blue Two</div>
-		//	|	</div>
-		//		Running this code:
-		//	|	dojo.query(".first").nextAll();
-		//		returns the two divs with class of "next".
-		//		Running this code:
-		//	|	dojo.query(".first").nextAll(".red");
-		//		returns the one div with class "red" and innerHTML "Red Two".
-		return this._getRelatedUniqueNodes(query, function(node, ary){
-			var pary = []
-			var next = node;
-			while((next = next.nextSibling)){
-				if(next.nodeType == 1){
-					pary.push(next);
-				}
-			}
-			return pary;
-		}); //dojo.NodeList
-	},
-
-	prev: function(/*String?*/query){
-		// summary:
-		// 		Returns the previous element for nodes in this dojo.NodeList.
-		// 		Optionally takes a query to filter the previous elements.
-		// description:
-		// 		.end() can be used on the returned dojo.NodeList to get back to the
-		// 		original dojo.NodeList.
-		//	query:
-		//		a CSS selector.
-		// returns:
-		//		dojo.NodeList, the previous element for nodes in this dojo.NodeList.
-		//	example:
-		//		assume a DOM created by this markup:
-		//	|	<div class="container">
-		// 	|		<div class="red">Red One</div>
-		// 	|		Some Text
-		// 	|		<div class="blue first">Blue One</div>
-		// 	|		<div class="red">Red Two</div>
-		// 	|		<div class="blue">Blue Two</div>
-		//	|	</div>
-		//		Running this code:
-		//	|	dojo.query(".first").prev();
-		//		returns the div with class "red" and has innerHTML of "Red One".
-		//		Running this code:
-		//	|	dojo.query(".first").prev(".blue");
-		//		does not return any elements.
-		return this._getRelatedUniqueNodes(query, function(node, ary){
-			var prev = node.previousSibling;
-			while(prev && prev.nodeType != 1){
-				prev = prev.previousSibling;
-			}
-			return prev;
-		}); //dojo.NodeList
-	},
-
-	prevAll: function(/*String?*/query){
-		// summary:
-		// 		Returns all sibling elements that come before the nodes in this dojo.NodeList.
-		// 		Optionally takes a query to filter the sibling elements.
-		// description:
-		// 		The returned nodes will be in reverse DOM order -- the first node in the list will
-		// 		be the node closest to the original node/NodeList.
-		// 		.end() can be used on the returned dojo.NodeList to get back to the
-		// 		original dojo.NodeList.
-		//	query:
-		//		a CSS selector.
-		// returns:
-		//		dojo.NodeList, all sibling elements that come before the nodes in this dojo.NodeList.
-		//	example:
-		//		assume a DOM created by this markup:
-		//	|	<div class="container">
-		// 	|		<div class="red prev">Red One</div>
-		// 	|		Some Text
-		// 	|		<div class="blue prev">Blue One</div>
-		// 	|		<div class="red second">Red Two</div>
-		// 	|		<div class="blue">Blue Two</div>
-		//	|	</div>
-		//		Running this code:
-		//	|	dojo.query(".second").prevAll();
-		//		returns the two divs with class of "prev".
-		//		Running this code:
-		//	|	dojo.query(".first").prevAll(".red");
-		//		returns the one div with class "red prev" and innerHTML "Red One".
-		return this._getRelatedUniqueNodes(query, function(node, ary){
-			var pary = []
-			var prev = node;
-			while((prev = prev.previousSibling)){
-				if(prev.nodeType == 1){
-					pary.push(prev);
-				}
-			}
-			return pary;
-		}); //dojo.NodeList
-	},
-
-	andSelf: function(){
-		// summary:
-		// 		Adds the nodes from the previous dojo.NodeList to the current dojo.NodeList.
-		// description:
-		// 		.end() can be used on the returned dojo.NodeList to get back to the
-		// 		original dojo.NodeList.
-		// returns:
-		//		dojo.NodeList
-		//	example:
-		//		assume a DOM created by this markup:
-		//	|	<div class="container">
-		// 	|		<div class="red prev">Red One</div>
-		// 	|		Some Text
-		// 	|		<div class="blue prev">Blue One</div>
-		// 	|		<div class="red second">Red Two</div>
-		// 	|		<div class="blue">Blue Two</div>
-		//	|	</div>
-		//		Running this code:
-		//	|	dojo.query(".second").prevAll().andSelf();
-		//		returns the two divs with class of "prev", as well as the div with class "second".
-		return this.concat(this._parent);
-	},
-
-	//Alternate methods for the :first/:last/:even/:odd pseudos.
-	first: function(){
-		// summary:
-		// 		Returns the first node in this dojo.NodeList as a dojo.NodeList.
-		// description:
-		// 		.end() can be used on the returned dojo.NodeList to get back to the
-		// 		original dojo.NodeList.
-		// returns:
-		//		dojo.NodeList, with the first node in this dojo.NodeList
-		//	example:
-		//		assume a DOM created by this markup:
-		//	|	<div class="container">
-		// 	|		<div class="red">Red One</div>
-		// 	|		<div class="blue first">Blue One</div>
-		// 	|		<div class="red">Red Two</div>
-		// 	|		<div class="blue last">Blue Two</div>
-		//	|	</div>
-		//		Running this code:
-		//	|	dojo.query(".blue").first();
-		//		returns the div with class "blue" and "first".
-		return this._wrap(((this[0] && [this[0]]) || []), this); //dojo.NodeList
-	},
-
-	last: function(){
-		// summary:
-		// 		Returns the last node in this dojo.NodeList as a dojo.NodeList.
-		// description:
-		// 		.end() can be used on the returned dojo.NodeList to get back to the
-		// 		original dojo.NodeList.
-		// returns:
-		//		dojo.NodeList, with the last node in this dojo.NodeList
-		//	example:
-		//		assume a DOM created by this markup:
-		//	|	<div class="container">
-		// 	|		<div class="red">Red One</div>
-		// 	|		<div class="blue first">Blue One</div>
-		// 	|		<div class="red">Red Two</div>
-		// 	|		<div class="blue last">Blue Two</div>
-		//	|	</div>
-		//		Running this code:
-		//	|	dojo.query(".blue").last();
-		//		returns the last div with class "blue", 
-		return this._wrap((this.length ? [this[this.length - 1]] : []), this); //dojo.NodeList
-	},
-
-	even: function(){
-		// summary:
-		// 		Returns the even nodes in this dojo.NodeList as a dojo.NodeList.
-		// description:
-		// 		.end() can be used on the returned dojo.NodeList to get back to the
-		// 		original dojo.NodeList.
-		// returns:
-		//		dojo.NodeList, with the even nodes in this dojo.NodeList
-		//	example:
-		//		assume a DOM created by this markup:
-		//	|	<div class="container">
-		// 	|		<div class="interior red">Red One</div>
-		// 	|		<div class="interior blue">Blue One</div>
-		// 	|		<div class="interior red">Red Two</div>
-		// 	|		<div class="interior blue">Blue Two</div>
-		//	|	</div>
-		//		Running this code:
-		//	|	dojo.query(".interior").even();
-		//		returns the two divs with class "blue"
-		return this.filter(function(item, i){
-			return i % 2 != 0;
-		}); //dojo.NodeList
-	},
-
-	odd: function(){
-		// summary:
-		// 		Returns the odd nodes in this dojo.NodeList as a dojo.NodeList.
-		// description:
-		// 		.end() can be used on the returned dojo.NodeList to get back to the
-		// 		original dojo.NodeList.
-		// returns:
-		//		dojo.NodeList, with the odd nodes in this dojo.NodeList
-		//	example:
-		//		assume a DOM created by this markup:
-		//	|	<div class="container">
-		// 	|		<div class="interior red">Red One</div>
-		// 	|		<div class="interior blue">Blue One</div>
-		// 	|		<div class="interior red">Red Two</div>
-		// 	|		<div class="interior blue">Blue Two</div>
-		//	|	</div>
-		//		Running this code:
-		//	|	dojo.query(".interior").odd();
-		//		returns the two divs with class "red"
-		return this.filter(function(item, i){
-			return i % 2 == 0;
-		}); //dojo.NodeList
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/OpenAjax.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/OpenAjax.js
deleted file mode 100644
index dd4a23f..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/OpenAjax.js
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-/*******************************************************************************
- * OpenAjax.js
- *
- * Reference implementation of the OpenAjax Hub, as specified by OpenAjax Alliance.
- * Specification is under development at: 
- *
- *   http://www.openajax.org/member/wiki/OpenAjax_Hub_Specification
- *
- * Copyright 2006-2007 OpenAjax Alliance
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not 
- * use this file except in compliance with the License. You may obtain a copy 
- * of the License at http://www.apache.org/licenses/LICENSE-2.0 . Unless 
- * required by applicable law or agreed to in writing, software distributed 
- * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 
- * CONDITIONS OF ANY KIND, either express or implied. See the License for the 
- * specific language governing permissions and limitations under the License.
- *
- ******************************************************************************/
-
-// prevent re-definition of the OpenAjax object
-if(!window["OpenAjax"]){
-	OpenAjax = new function(){
-		// summary: the OpenAjax hub
-		// description: see http://www.openajax.org/member/wiki/OpenAjax_Hub_Specification
-
-		var t = true;
-		var f = false;
-		var g = window;
-		var libs;
-		var ooh = "org.openajax.hub.";
-
-		var h = {};
-		this.hub = h;
-		h.implementer = "http://openajax.org";
-		h.implVersion = "0.6";
-		h.specVersion = "0.6";
-		h.implExtraData = {};
-		var libs = {};
-		h.libraries = libs;
-
-		h.registerLibrary = function(prefix, nsURL, version, extra){
-			libs[prefix] = {
-				prefix: prefix,
-				namespaceURI: nsURL,
-				version: version,
-				extraData: extra 
-			};
-			this.publish(ooh+"registerLibrary", libs[prefix]);
-		}
-		h.unregisterLibrary = function(prefix){
-			this.publish(ooh+"unregisterLibrary", libs[prefix]);
-			delete libs[prefix];
-		}
-
-		h._subscriptions = { c:{}, s:[] };
-		h._cleanup = [];
-		h._subIndex = 0;
-		h._pubDepth = 0;
-
-		h.subscribe = function(name, callback, scope, subscriberData, filter){
-			if(!scope){
-				scope = window;
-			}
-			var handle = name + "." + this._subIndex;
-			var sub = { scope: scope, cb: callback, fcb: filter, data: subscriberData, sid: this._subIndex++, hdl: handle };
-			var path = name.split(".");
-	 		this._subscribe(this._subscriptions, path, 0, sub);
-			return handle;
-		}
-
-		h.publish = function(name, message){
-			var path = name.split(".");
-			this._pubDepth++;
-			this._publish(this._subscriptions, path, 0, name, message);
-			this._pubDepth--;
-			if((this._cleanup.length > 0) && (this._pubDepth == 0)){
-				for(var i = 0; i < this._cleanup.length; i++){ 
-					this.unsubscribe(this._cleanup[i].hdl);
-				}
-				delete(this._cleanup);
-				this._cleanup = [];
-			}
-		}
-
-		h.unsubscribe = function(sub){
-			var path = sub.split(".");
-			var sid = path.pop();
-			this._unsubscribe(this._subscriptions, path, 0, sid);
-		}
-		
-		h._subscribe = function(tree, path, index, sub){
-			var token = path[index];
-			if(index == path.length){
-				tree.s.push(sub);
-			}else{ 
-				if(typeof tree.c == "undefined"){
-					 tree.c = {};
-				}
-				if(typeof tree.c[token] == "undefined"){
-					tree.c[token] = { c: {}, s: [] }; 
-					this._subscribe(tree.c[token], path, index + 1, sub);
-				}else{
-					this._subscribe( tree.c[token], path, index + 1, sub);
-				}
-			}
-		}
-
-		h._publish = function(tree, path, index, name, msg){
-			if(typeof tree != "undefined"){
-				var node;
-				if(index == path.length) {
-					node = tree;
-				}else{
-					this._publish(tree.c[path[index]], path, index + 1, name, msg);
-					this._publish(tree.c["*"], path, index + 1, name, msg);			
-					node = tree.c["**"];
-				}
-				if(typeof node != "undefined"){
-					var callbacks = node.s;
-					var max = callbacks.length;
-					for(var i = 0; i < max; i++){
-						if(callbacks[i].cb){
-							var sc = callbacks[i].scope;
-							var cb = callbacks[i].cb;
-							var fcb = callbacks[i].fcb;
-							var d = callbacks[i].data;
-							if(typeof cb == "string"){
-								// get a function object
-								cb = sc[cb];
-							}
-							if(typeof fcb == "string"){
-								// get a function object
-								fcb = sc[fcb];
-							}
-							if((!fcb) || 
-							   (fcb.call(sc, name, msg, d))) {
-								cb.call(sc, name, msg, d);
-							}
-						}
-					}
-				}
-			}
-		}
-			
-		h._unsubscribe = function(tree, path, index, sid) {
-			if(typeof tree != "undefined") {
-				if(index < path.length) {
-					var childNode = tree.c[path[index]];
-					this._unsubscribe(childNode, path, index + 1, sid);
-					if(childNode.s.length == 0) {
-						for(var x in childNode.c) 
-					 		return;		
-						delete tree.c[path[index]];	
-					}
-					return;
-				}
-				else {
-					var callbacks = tree.s;
-					var max = callbacks.length;
-					for(var i = 0; i < max; i++) 
-						if(sid == callbacks[i].sid) {
-							if(this._pubDepth > 0) {
-								callbacks[i].cb = null;	
-								this._cleanup.push(callbacks[i]);						
-							}
-							else
-								callbacks.splice(i, 1);
-							return; 	
-						}
-				}
-			}
-		}
-		// The following function is provided for automatic testing purposes.
-		// It is not expected to be deployed in run-time OpenAjax Hub implementations.
-		h.reinit = function()
-		{
-			for (var lib in OpenAjax.hub.libraries) {
-				delete OpenAjax.hub.libraries[lib];
-			}
-			OpenAjax.hub.registerLibrary("OpenAjax", "http://openajax.org/hub", "0.6", {});
-
-			delete OpenAjax._subscriptions;
-			OpenAjax._subscriptions = {c:{},s:[]};
-			delete OpenAjax._cleanup;
-			OpenAjax._cleanup = [];
-			OpenAjax._subIndex = 0;
-			OpenAjax._pubDepth = 0;
-		}
-	};
-	// Register the OpenAjax Hub itself as a library.
-	OpenAjax.hub.registerLibrary("OpenAjax", "http://openajax.org/hub", "0.6", {});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base.js
deleted file mode 100644
index 6a45ee4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._base"] = true;
-dojo.provide("dojo._base");
-dojo.require("dojo._base.lang");
-dojo.require("dojo._base.declare");
-dojo.require("dojo._base.connect");
-dojo.require("dojo._base.Deferred");
-dojo.require("dojo._base.json");
-dojo.require("dojo._base.array");
-dojo.require("dojo._base.Color");
-dojo.requireIf(dojo.isBrowser, "dojo._base.browser");
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/Color.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/Color.js
deleted file mode 100644
index 7b72bf0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/Color.js
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo._base.Color"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._base.Color"] = true;
-dojo.provide("dojo._base.Color");
-dojo.require("dojo._base.array");
-dojo.require("dojo._base.lang");
-
-(function(){
-
-	var d = dojo;
-
-	dojo.Color = function(/*Array|String|Object*/ color){
-		// summary:
-		//	 	Takes a named string, hex string, array of rgb or rgba values,
-		//	 	an object with r, g, b, and a properties, or another `dojo.Color` object
-		//	 	and creates a new Color instance to work from.
-		//
-		// example:
-		//		Work with a Color instance:
-		//	 | var c = new dojo.Color();
-		//	 | c.setColor([0,0,0]); // black
-		//	 | var hex = c.toHex(); // #000000
-		//
-		// example:
-		//		Work with a node's color:
-		//	 | var color = dojo.style("someNode", "backgroundColor");
-		//	 | var n = new dojo.Color(color);
-		//	 | // adjust the color some
-		//	 | n.r *= .5;
-		//	 | console.log(n.toString()); // rgb(128, 255, 255);
-		if(color){ this.setColor(color); }
-	};
-
-	// FIXME:
-	// 	there's got to be a more space-efficient way to encode or discover
-	// 	these!!  Use hex?
-	dojo.Color.named = {
-		black:      [0,0,0],
-		silver:     [192,192,192],
-		gray:       [128,128,128],
-		white:      [255,255,255],
-		maroon:		[128,0,0],
-		red:        [255,0,0],
-		purple:		[128,0,128],
-		fuchsia:	[255,0,255],
-		green:	    [0,128,0],
-		lime:	    [0,255,0],
-		olive:		[128,128,0],
-		yellow:		[255,255,0],
-		navy:       [0,0,128],
-		blue:       [0,0,255],
-		teal:		[0,128,128],
-		aqua:		[0,255,255],
-		transparent: d.config.transparentColor || [255,255,255]
-	};
-
-	dojo.extend(dojo.Color, {
-		r: 255, g: 255, b: 255, a: 1,
-		_set: function(r, g, b, a){
-			var t = this; t.r = r; t.g = g; t.b = b; t.a = a;
-		},
-		setColor: function(/*Array|String|Object*/ color){
-			// summary:
-			//		Takes a named string, hex string, array of rgb or rgba values,
-			//		an object with r, g, b, and a properties, or another `dojo.Color` object
-			//		and sets this color instance to that value.
-			//
-			// example:
-			//	|	var c = new dojo.Color(); // no color
-			//	|	c.setColor("#ededed"); // greyish
-			if(d.isString(color)){
-				d.colorFromString(color, this);
-			}else if(d.isArray(color)){
-				d.colorFromArray(color, this);
-			}else{
-				this._set(color.r, color.g, color.b, color.a);
-				if(!(color instanceof d.Color)){ this.sanitize(); }
-			}
-			return this;	// dojo.Color
-		},
-		sanitize: function(){
-			// summary:
-			//		Ensures the object has correct attributes
-			// description:
-			//		the default implementation does nothing, include dojo.colors to
-			//		augment it with real checks
-			return this;	// dojo.Color
-		},
-		toRgb: function(){
-			// summary:
-			//		Returns 3 component array of rgb values
-			// example:
-			//	|	var c = new dojo.Color("#000000");
-			//	| 	console.log(c.toRgb()); // [0,0,0]
-			var t = this;
-			return [t.r, t.g, t.b];	// Array
-		},
-		toRgba: function(){
-			// summary:
-			//		Returns a 4 component array of rgba values from the color
-			//		represented by this object.
-			var t = this;
-			return [t.r, t.g, t.b, t.a];	// Array
-		},
-		toHex: function(){
-			// summary:
-			//		Returns a CSS color string in hexadecimal representation
-			// example:
-			//	| 	console.log(new dojo.Color([0,0,0]).toHex()); // #000000
-			var arr = d.map(["r", "g", "b"], function(x){
-				var s = this[x].toString(16);
-				return s.length < 2 ? "0" + s : s;
-			}, this);
-			return "#" + arr.join("");	// String
-		},
-		toCss: function(/*Boolean?*/ includeAlpha){
-			// summary:
-			//		Returns a css color string in rgb(a) representation
-			// example:
-			//	|	var c = new dojo.Color("#FFF").toCss();
-			//	|	console.log(c); // rgb('255','255','255')
-			var t = this, rgb = t.r + ", " + t.g + ", " + t.b;
-			return (includeAlpha ? "rgba(" + rgb + ", " + t.a : "rgb(" + rgb) + ")";	// String
-		},
-		toString: function(){
-			// summary:
-			//		Returns a visual representation of the color
-			return this.toCss(true); // String
-		}
-	});
-
-	dojo.blendColors = function(
-		/*dojo.Color*/ start,
-		/*dojo.Color*/ end,
-		/*Number*/ weight,
-		/*dojo.Color?*/ obj
-	){
-		// summary:
-		//		Blend colors end and start with weight from 0 to 1, 0.5 being a 50/50 blend,
-		//		can reuse a previously allocated dojo.Color object for the result
-		var t = obj || new d.Color();
-		d.forEach(["r", "g", "b", "a"], function(x){
-			t[x] = start[x] + (end[x] - start[x]) * weight;
-			if(x != "a"){ t[x] = Math.round(t[x]); }
-		});
-		return t.sanitize();	// dojo.Color
-	};
-
-	dojo.colorFromRgb = function(/*String*/ color, /*dojo.Color?*/ obj){
-		// summary:
-		//		Returns a `dojo.Color` instance from a string of the form
-		//		"rgb(...)" or "rgba(...)". Optionally accepts a `dojo.Color`
-		//		object to update with the parsed value and return instead of
-		//		creating a new object.
-		// returns:
-		//		A dojo.Color object. If obj is passed, it will be the return value.
-		var m = color.toLowerCase().match(/^rgba?\(([\s\.,0-9]+)\)/);
-		return m && dojo.colorFromArray(m[1].split(/\s*,\s*/), obj);	// dojo.Color
-	};
-
-	dojo.colorFromHex = function(/*String*/ color, /*dojo.Color?*/ obj){
-		// summary:
-		//		Converts a hex string with a '#' prefix to a color object.
-		//		Supports 12-bit #rgb shorthand. Optionally accepts a
-		//		`dojo.Color` object to update with the parsed value.
-		//
-		// returns:
-		//		A dojo.Color object. If obj is passed, it will be the return value.
-		//
-		// example:
-		//	 | var thing = dojo.colorFromHex("#ededed"); // grey, longhand
-		//
-		// example:
-		//	| var thing = dojo.colorFromHex("#000"); // black, shorthand
-		var t = obj || new d.Color(),
-			bits = (color.length == 4) ? 4 : 8,
-			mask = (1 << bits) - 1;
-		color = Number("0x" + color.substr(1));
-		if(isNaN(color)){
-			return null; // dojo.Color
-		}
-		d.forEach(["b", "g", "r"], function(x){
-			var c = color & mask;
-			color >>= bits;
-			t[x] = bits == 4 ? 17 * c : c;
-		});
-		t.a = 1;
-		return t;	// dojo.Color
-	};
-
-	dojo.colorFromArray = function(/*Array*/ a, /*dojo.Color?*/ obj){
-		// summary:
-		//		Builds a `dojo.Color` from a 3 or 4 element array, mapping each
-		//		element in sequence to the rgb(a) values of the color.
-		// example:
-		//		| var myColor = dojo.colorFromArray([237,237,237,0.5]); // grey, 50% alpha 
-		// returns:
-		//		A dojo.Color object. If obj is passed, it will be the return value.
-		var t = obj || new d.Color();
-		t._set(Number(a[0]), Number(a[1]), Number(a[2]), Number(a[3]));
-		if(isNaN(t.a)){ t.a = 1; }
-		return t.sanitize();	// dojo.Color
-	};
-
-	dojo.colorFromString = function(/*String*/ str, /*dojo.Color?*/ obj){
-		// summary:
-		//		Parses `str` for a color value. Accepts hex, rgb, and rgba
-		//		style color values.
-		// description:
-		//		Acceptable input values for str may include arrays of any form
-		//		accepted by dojo.colorFromArray, hex strings such as "#aaaaaa", or
-		//		rgb or rgba strings such as "rgb(133, 200, 16)" or "rgba(10, 10,
-		//		10, 50)"
-		// returns:
-		//		A dojo.Color object. If obj is passed, it will be the return value.
-		var a = d.Color.named[str];
-		return a && d.colorFromArray(a, obj) || d.colorFromRgb(str, obj) || d.colorFromHex(str, obj);
-	};
-})();
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/Deferred.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/Deferred.js
deleted file mode 100644
index 38697c9..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/Deferred.js
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo._base.Deferred"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._base.Deferred"] = true;
-dojo.provide("dojo._base.Deferred");
-dojo.require("dojo._base.lang");
-
-dojo.Deferred = function(/*Function?*/ canceller){
-	// summary:
-	//		Encapsulates a sequence of callbacks in response to a value that
-	//		may not yet be available.  This is modeled after the Deferred class
-	//		from Twisted <http://twistedmatrix.com>.
-	// description:
-	//		JavaScript has no threads, and even if it did, threads are hard.
-	//		Deferreds are a way of abstracting non-blocking events, such as the
-	//		final response to an XMLHttpRequest. Deferreds create a promise to
-	//		return a response a some point in the future and an easy way to
-	//		register your interest in receiving that response.
-	//
-	//		The most important methods for Deffered users are:
-	//
-	//			* addCallback(handler)
-	//			* addErrback(handler)
-	//			* callback(result)
-	//			* errback(result)
-	//
-	//		In general, when a function returns a Deferred, users then "fill
-	//		in" the second half of the contract by registering callbacks and
-	//		error handlers. You may register as many callback and errback
-	//		handlers as you like and they will be executed in the order
-	//		registered when a result is provided. Usually this result is
-	//		provided as the result of an asynchronous operation. The code
-	//		"managing" the Deferred (the code that made the promise to provide
-	//		an answer later) will use the callback() and errback() methods to
-	//		communicate with registered listeners about the result of the
-	//		operation. At this time, all registered result handlers are called
-	//		*with the most recent result value*.
-	//
-	//		Deferred callback handlers are treated as a chain, and each item in
-	//		the chain is required to return a value that will be fed into
-	//		successive handlers. The most minimal callback may be registered
-	//		like this:
-	//
-	//		|	var d = new dojo.Deferred();
-	//		|	d.addCallback(function(result){ return result; });
-	//
-	//		Perhaps the most common mistake when first using Deferreds is to
-	//		forget to return a value (in most cases, the value you were
-	//		passed).
-	//
-	//		The sequence of callbacks is internally represented as a list of
-	//		2-tuples containing the callback/errback pair.  For example, the
-	//		following call sequence:
-	//		
-	//		|	var d = new dojo.Deferred();
-	//		|	d.addCallback(myCallback);
-	//		|	d.addErrback(myErrback);
-	//		|	d.addBoth(myBoth);
-	//		|	d.addCallbacks(myCallback, myErrback);
-	//
-	//		is translated into a Deferred with the following internal
-	//		representation:
-	//
-	//		|	[
-	//		|		[myCallback, null],
-	//		|		[null, myErrback],
-	//		|		[myBoth, myBoth],
-	//		|		[myCallback, myErrback]
-	//		|	]
-	//
-	//		The Deferred also keeps track of its current status (fired).  Its
-	//		status may be one of three things:
-	//
-	//			* -1: no value yet (initial condition)
-	//			* 0: success
-	//			* 1: error
-	//	
-	//		A Deferred will be in the error state if one of the following three
-	//		conditions are met:
-	//
-	//			1. The result given to callback or errback is "instanceof" Error
-	//			2. The previous callback or errback raised an exception while
-	//			   executing
-	//			3. The previous callback or errback returned a value
-	//			   "instanceof" Error
-	//
-	//		Otherwise, the Deferred will be in the success state. The state of
-	//		the Deferred determines the next element in the callback sequence
-	//		to run.
-	//
-	//		When a callback or errback occurs with the example deferred chain,
-	//		something equivalent to the following will happen (imagine
-	//		that exceptions are caught and returned):
-	//
-	//		|	// d.callback(result) or d.errback(result)
-	//		|	if(!(result instanceof Error)){
-	//		|		result = myCallback(result);
-	//		|	}
-	//		|	if(result instanceof Error){
-	//		|		result = myErrback(result);
-	//		|	}
-	//		|	result = myBoth(result);
-	//		|	if(result instanceof Error){
-	//		|		result = myErrback(result);
-	//		|	}else{
-	//		|		result = myCallback(result);
-	//		|	}
-	//
-	//		The result is then stored away in case another step is added to the
-	//		callback sequence.	Since the Deferred already has a value
-	//		available, any new callbacks added will be called immediately.
-	//
-	//		There are two other "advanced" details about this implementation
-	//		that are useful:
-	//
-	//		Callbacks are allowed to return Deferred instances themselves, so
-	//		you can build complicated sequences of events with ease.
-	//
-	//		The creator of the Deferred may specify a canceller.  The canceller
-	//		is a function that will be called if Deferred.cancel is called
-	//		before the Deferred fires. You can use this to implement clean
-	//		aborting of an XMLHttpRequest, etc. Note that cancel will fire the
-	//		deferred with a CancelledError (unless your canceller returns
-	//		another kind of error), so the errbacks should be prepared to
-	//		handle that error for cancellable Deferreds.
-	// example:
-	//	|	var deferred = new dojo.Deferred();
-	//	|	setTimeout(function(){ deferred.callback({success: true}); }, 1000);
-	//	|	return deferred;
-	// example:
-	//		Deferred objects are often used when making code asynchronous. It
-	//		may be easiest to write functions in a synchronous manner and then
-	//		split code using a deferred to trigger a response to a long-lived
-	//		operation. For example, instead of register a callback function to
-	//		denote when a rendering operation completes, the function can
-	//		simply return a deferred:
-	//
-	//		|	// callback style:
-	//		|	function renderLotsOfData(data, callback){
-	//		|		var success = false
-	//		|		try{
-	//		|			for(var x in data){
-	//		|				renderDataitem(data[x]);
-	//		|			}
-	//		|			success = true;
-	//		|		}catch(e){ }
-	//		|		if(callback){
-	//		|			callback(success);
-	//		|		}
-	//		|	}
-	//
-	//		|	// using callback style
-	//		|	renderLotsOfData(someDataObj, function(success){
-	//		|		// handles success or failure
-	//		|		if(!success){
-	//		|			promptUserToRecover();
-	//		|		}
-	//		|	});
-	//		|	// NOTE: no way to add another callback here!!
-	// example:
-	//		Using a Deferred doesn't simplify the sending code any, but it
-	//		provides a standard interface for callers and senders alike,
-	//		providing both with a simple way to service multiple callbacks for
-	//		an operation and freeing both sides from worrying about details
-	//		such as "did this get called already?". With Deferreds, new
-	//		callbacks can be added at any time.
-	//
-	//		|	// Deferred style:
-	//		|	function renderLotsOfData(data){
-	//		|		var d = new dojo.Deferred();
-	//		|		try{
-	//		|			for(var x in data){
-	//		|				renderDataitem(data[x]);
-	//		|			}
-	//		|			d.callback(true);
-	//		|		}catch(e){ 
-	//		|			d.errback(new Error("rendering failed"));
-	//		|		}
-	//		|		return d;
-	//		|	}
-	//
-	//		|	// using Deferred style
-	//		|	renderLotsOfData(someDataObj).addErrback(function(){
-	//		|		promptUserToRecover();
-	//		|	});
-	//		|	// NOTE: addErrback and addCallback both return the Deferred
-	//		|	// again, so we could chain adding callbacks or save the
-	//		|	// deferred for later should we need to be notified again.
-	// example:
-	//		In this example, renderLotsOfData is syncrhonous and so both
-	//		versions are pretty artificial. Putting the data display on a
-	//		timeout helps show why Deferreds rock:
-	//
-	//		|	// Deferred style and async func
-	//		|	function renderLotsOfData(data){
-	//		|		var d = new dojo.Deferred();
-	//		|		setTimeout(function(){
-	//		|			try{
-	//		|				for(var x in data){
-	//		|					renderDataitem(data[x]);
-	//		|				}
-	//		|				d.callback(true);
-	//		|			}catch(e){ 
-	//		|				d.errback(new Error("rendering failed"));
-	//		|			}
-	//		|		}, 100);
-	//		|		return d;
-	//		|	}
-	//
-	//		|	// using Deferred style
-	//		|	renderLotsOfData(someDataObj).addErrback(function(){
-	//		|		promptUserToRecover();
-	//		|	});
-	//
-	//		Note that the caller doesn't have to change his code at all to
-	//		handle the asynchronous case.
-
-	this.chain = [];
-	this.id = this._nextId();
-	this.fired = -1;
-	this.paused = 0;
-	this.results = [null, null];
-	this.canceller = canceller;
-	this.silentlyCancelled = false;
-	this.isFiring = false;
-};
-
-dojo.extend(dojo.Deferred, {
-	/*
-	makeCalled: function(){
-		// summary:
-		//		returns a new, empty deferred, which is already in the called
-		//		state. Calling callback() or errback() on this deferred will
-		//		yeild an error and adding new handlers to it will result in
-		//		them being called immediately.
-		var deferred = new dojo.Deferred();
-		deferred.callback();
-		return deferred;
-	},
-
-	toString: function(){
-		var state;
-		if(this.fired == -1){
-			state = 'unfired';
-		}else{
-			state = this.fired ? 'success' : 'error';
-		}
-		return 'Deferred(' + this.id + ', ' + state + ')';
-	},
-	*/
-
-	_nextId: (function(){
-		var n = 1;
-		return function(){ return n++; };
-	})(),
-
-	cancel: function(){
-		// summary:	
-		//		Cancels a Deferred that has not yet received a value, or is
-		//		waiting on another Deferred as its value.
-		// description:
-		//		If a canceller is defined, the canceller is called. If the
-		//		canceller did not return an error, or there was no canceller,
-		//		then the errback chain is started.
-		var err;
-		if(this.fired == -1){
-			if(this.canceller){
-				err = this.canceller(this);
-			}else{
-				this.silentlyCancelled = true;
-			}
-			if(this.fired == -1){
-				if(!(err instanceof Error)){
-					var res = err;
-					var msg = "Deferred Cancelled";
-					if(err && err.toString){
-						msg += ": " + err.toString();
-					}
-					err = new Error(msg);
-					err.dojoType = "cancel";
-					err.cancelResult = res;
-				}
-				this.errback(err);
-			}
-		}else if(	(this.fired == 0) &&
-					(this.results[0] instanceof dojo.Deferred)
-		){
-			this.results[0].cancel();
-		}
-	},
-			
-
-	_resback: function(res){
-		// summary:
-		//		The private primitive that means either callback or errback
-		this.fired = ((res instanceof Error) ? 1 : 0);
-		this.results[this.fired] = res;
-		this._fire();
-	},
-
-	_check: function(){
-		if(this.fired != -1){
-			if(!this.silentlyCancelled){
-				throw new Error("already called!");
-			}
-			this.silentlyCancelled = false;
-			return;
-		}
-	},
-
-	callback: function(res){
-		//	summary:	
-		//		Begin the callback sequence with a non-error value.
-		
-		/*
-		callback or errback should only be called once on a given
-		Deferred.
-		*/
-		this._check();
-		this._resback(res);
-	},
-
-	errback: function(/*Error*/res){
-		//	summary: 
-		//		Begin the callback sequence with an error result.
-		this._check();
-		if(!(res instanceof Error)){
-			res = new Error(res);
-		}
-		this._resback(res);
-	},
-
-	addBoth: function(/*Function|Object*/cb, /*String?*/cbfn){
-		//	summary:
-		//		Add the same function as both a callback and an errback as the
-		//		next element on the callback sequence.This is useful for code
-		//		that you want to guarantee to run, e.g. a finalizer.
-		var enclosed = dojo.hitch.apply(dojo, arguments);
-		return this.addCallbacks(enclosed, enclosed); // dojo.Deferred
-	},
-
-	addCallback: function(/*Function|Object*/cb, /*String?*/cbfn /*...*/){
-		//	summary: 
-		//		Add a single callback to the end of the callback sequence.
-		return this.addCallbacks(dojo.hitch.apply(dojo, arguments)); // dojo.Deferred
-	},
-
-	addErrback: function(cb, cbfn){
-		//	summary: 
-		//		Add a single callback to the end of the callback sequence.
-		return this.addCallbacks(null, dojo.hitch.apply(dojo, arguments)); // dojo.Deferred
-	},
-
-	addCallbacks: function(cb, eb){
-		// summary: 
-		//		Add separate callback and errback to the end of the callback
-		//		sequence.
-		this.chain.push([cb, eb])
-		if(this.fired >= 0 && !this.isFiring){
-			this._fire();
-		}
-		return this; // dojo.Deferred
-	},
-
-	_fire: function(){
-		// summary: 
-		//		Used internally to exhaust the callback sequence when a result
-		//		is available.
-		this.isFiring = true;
-		var chain = this.chain;
-		var fired = this.fired;
-		var res = this.results[fired];
-		var self = this;
-		var cb = null;
-		while(
-			(chain.length > 0) &&
-			(this.paused == 0)
-		){
-			// Array
-			var f = chain.shift()[fired];
-			if(!f){ continue; }
-			var func = function(){
-				var ret = f(res);
-				//If no response, then use previous response.
-				if(typeof ret != "undefined"){
-					res = ret;
-				}
-				fired = ((res instanceof Error) ? 1 : 0);
-				if(res instanceof dojo.Deferred){
-					cb = function(res){
-						self._resback(res);
-						// inlined from _pause()
-						self.paused--;
-						if(
-							(self.paused == 0) && 
-							(self.fired >= 0)
-						){
-							self._fire();
-						}
-					}
-					// inlined from _unpause
-					this.paused++;
-				}
-			};
-			if(dojo.config.debugAtAllCosts){
-				func.call(this);
-			}else{
-				try{
-					func.call(this);
-				}catch(err){
-					fired = 1;
-					res = err;
-				}
-			}
-		}
-		this.fired = fired;
-		this.results[fired] = res;
-		this.isFiring = false;
-		if((cb)&&(this.paused)){
-			// this is for "tail recursion" in case the dependent
-			// deferred is already fired
-			res.addBoth(cb);
-		}
-	}
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/NodeList.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/NodeList.js
deleted file mode 100644
index 80a6ef2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/NodeList.js
+++ /dev/null
@@ -1,993 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo._base.NodeList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._base.NodeList"] = true;
-dojo.provide("dojo._base.NodeList");
-dojo.require("dojo._base.lang");
-dojo.require("dojo._base.array");
-
-(function(){
-
-	var d = dojo;
-
-	var ap = Array.prototype, aps = ap.slice, apc = ap.concat;
-
-	var tnl = function(/*Array*/ a, /*dojo.NodeList?*/ parent, /*Function?*/ NodeListCtor){
-		// summary:
-		// 		decorate an array to make it look like a `dojo.NodeList`.
-		// a:
-		// 		Array of nodes to decorate.
-		// parent:
-		// 		An optional parent NodeList that generated the current
-		// 		list of nodes. Used to call _stash() so the parent NodeList
-		// 		can be accessed via end() later.
-		// NodeListCtor:
-		// 		An optional constructor function to use for any
-		// 		new NodeList calls. This allows a certain chain of
-		// 		NodeList calls to use a different object than dojo.NodeList.
-		if(!a.sort){
-			// make sure it's a real array before we pass it on to be wrapped
-			a = aps.call(a, 0);
-		}
-		var ctor = NodeListCtor || this._NodeListCtor || d._NodeListCtor;
-		a.constructor = ctor;
-		dojo._mixin(a, ctor.prototype);
-		a._NodeListCtor = ctor;
-		return parent ? a._stash(parent) : a;
-	};
-
-	var loopBody = function(f, a, o){
-		a = [0].concat(aps.call(a, 0));
-		o = o || d.global;
-		return function(node){
-			a[0] = node;
-			return f.apply(o, a);
-		};
-	};
-
-	// adapters
-
-	var adaptAsForEach = function(f, o){
-		//	summary:
-		//		adapts a single node function to be used in the forEach-type
-		//		actions. The initial object is returned from the specialized
-		//		function.
-		//	f: Function
-		//		a function to adapt
-		//	o: Object?
-		//		an optional context for f
-		return function(){
-			this.forEach(loopBody(f, arguments, o));
-			return this;	// Object
-		};
-	};
-
-	var adaptAsMap = function(f, o){
-		//	summary:
-		//		adapts a single node function to be used in the map-type
-		//		actions. The return is a new array of values, as via `dojo.map`
-		//	f: Function
-		//		a function to adapt
-		//	o: Object?
-		//		an optional context for f
-		return function(){
-			return this.map(loopBody(f, arguments, o));
-		};
-	};
-
-	var adaptAsFilter = function(f, o){
-		//	summary:
-		//		adapts a single node function to be used in the filter-type actions
-		//	f: Function
-		//		a function to adapt
-		//	o: Object?
-		//		an optional context for f
-		return function(){
-			return this.filter(loopBody(f, arguments, o));
-		};
-	};
-
-	var adaptWithCondition = function(f, g, o){
-		//	summary:
-		//		adapts a single node function to be used in the map-type
-		//		actions, behaves like forEach() or map() depending on arguments
-		//	f: Function
-		//		a function to adapt
-		//	g: Function
-		//		a condition function, if true runs as map(), otherwise runs as forEach()
-		//	o: Object?
-		//		an optional context for f and g
-		return function(){
-			var a = arguments, body = loopBody(f, a, o);
-			if(g.call(o || d.global, a)){
-				return this.map(body);	// self
-			}
-			this.forEach(body);
-			return this;	// self
-		};
-	};
-
-	var magicGuard = function(a){
-		//	summary:
-		//		the guard function for dojo.attr() and dojo.style()
-		return a.length == 1 && (typeof a[0] == "string"); // inline'd type check
-	};
-
-	var orphan = function(node){
-		//	summary:
-		//		function to orphan nodes
-		var p = node.parentNode;
-		if(p){
-			p.removeChild(node);
-		}
-	};
-	// FIXME: should we move orphan() to dojo.html?
-
-	dojo.NodeList = function(){
-		//	summary:
-		//		dojo.NodeList is an of Array subclass which adds syntactic
-		//		sugar for chaining, common iteration operations, animation, and
-		//		node manipulation. NodeLists are most often returned as the
-		//		result of dojo.query() calls.
-		//	description:
-		//		dojo.NodeList instances provide many utilities that reflect
-		//		core Dojo APIs for Array iteration and manipulation, DOM
-		//		manipulation, and event handling. Instead of needing to dig up
-		//		functions in the dojo.* namespace, NodeLists generally make the
-		//		full power of Dojo available for DOM manipulation tasks in a
-		//		simple, chainable way.
-		//	example:
-		//		create a node list from a node
-		//		|	new dojo.NodeList(dojo.byId("foo"));
-		//	example:
-		//		get a NodeList from a CSS query and iterate on it
-		//		|	var l = dojo.query(".thinger");
-		//		|	l.forEach(function(node, index, nodeList){
-		//		|		console.log(index, node.innerHTML);
-		//		|	});
-		//	example:
-		//		use native and Dojo-provided array methods to manipulate a
-		//		NodeList without needing to use dojo.* functions explicitly:
-		//		|	var l = dojo.query(".thinger");
-		//		|	// since NodeLists are real arrays, they have a length
-		//		|	// property that is both readable and writable and
-		//		|	// push/pop/shift/unshift methods
-		//		|	console.log(l.length);
-		//		|	l.push(dojo.create("span"));
-		//		|
-		//		|	// dojo's normalized array methods work too:
-		//		|	console.log( l.indexOf(dojo.byId("foo")) );
-		//		|	// ...including the special "function as string" shorthand
-		//		|	console.log( l.every("item.nodeType == 1") );
-		//		|
-		//		|	// NodeLists can be [..] indexed, or you can use the at()
-		//		|	// function to get specific items wrapped in a new NodeList:
-		//		|	var node = l[3]; // the 4th element
-		//		|	var newList = l.at(1, 3); // the 2nd and 4th elements
-		//	example:
-		//		the style functions you expect are all there too:
-		//		|	// style() as a getter...
-		//		|	var borders = dojo.query(".thinger").style("border");
-		//		|	// ...and as a setter:
-		//		|	dojo.query(".thinger").style("border", "1px solid black");
-		//		|	// class manipulation
-		//		|	dojo.query("li:nth-child(even)").addClass("even");
-		//		|	// even getting the coordinates of all the items
-		//		|	var coords = dojo.query(".thinger").coords();
-		//	example:
-		//		DOM manipulation functions from the dojo.* namespace area also
-		//		available:
-		//		|	// remove all of the elements in the list from their
-		//		|	// parents (akin to "deleting" them from the document)
-		//		|	dojo.query(".thinger").orphan();
-		//		|	// place all elements in the list at the front of #foo
-		//		|	dojo.query(".thinger").place("foo", "first");
-		//	example:
-		//		Event handling couldn't be easier. `dojo.connect` is mapped in,
-		//		and shortcut handlers are provided for most DOM events:
-		//		|	// like dojo.connect(), but with implicit scope
-		//		|	dojo.query("li").connect("onclick", console, "log");
-		//		|
-		//		|	// many common event handlers are already available directly:
-		//		|	dojo.query("li").onclick(console, "log");
-		//		|	var toggleHovered = dojo.hitch(dojo, "toggleClass", "hovered");
-		//		|	dojo.query("p")
-		//		|		.onmouseenter(toggleHovered)
-		//		|		.onmouseleave(toggleHovered);
-		//	example:
-		//		chainability is a key advantage of NodeLists:
-		//		|	dojo.query(".thinger")
-		//		|		.onclick(function(e){ /* ... */ })
-		//		|		.at(1, 3, 8) // get a subset
-		//		|			.style("padding", "5px")
-		//		|			.forEach(console.log);
-
-		return tnl(Array.apply(null, arguments));
-	};
-
-	//Allow things that new up a NodeList to use a delegated or alternate NodeList implementation.
-	d._NodeListCtor = d.NodeList;
-
-	var nl = d.NodeList, nlp = nl.prototype;
-
-	// expose adapters and the wrapper as private functions
-
-	nl._wrap = nlp._wrap = tnl;
-	nl._adaptAsMap = adaptAsMap;
-	nl._adaptAsForEach = adaptAsForEach;
-	nl._adaptAsFilter  = adaptAsFilter;
-	nl._adaptWithCondition = adaptWithCondition;
-
-	// mass assignment
-
-	// add array redirectors
-	d.forEach(["slice", "splice"], function(name){
-		var f = ap[name];
-		//Use a copy of the this array via this.slice() to allow .end() to work right in the splice case.
-		// CANNOT apply ._stash()/end() to splice since it currently modifies
-		// the existing this array -- it would break backward compatibility if we copy the array before
-		// the splice so that we can use .end(). So only doing the stash option to this._wrap for slice.
-		nlp[name] = function(){ return this._wrap(f.apply(this, arguments), name == "slice" ? this : null); };
-	});
-	// concat should be here but some browsers with native NodeList have problems with it
-
-	// add array.js redirectors
-	d.forEach(["indexOf", "lastIndexOf", "every", "some"], function(name){
-		var f = d[name];
-		nlp[name] = function(){ return f.apply(d, [this].concat(aps.call(arguments, 0))); };
-	});
-
-	// add conditional methods
-	d.forEach(["attr", "style"], function(name){
-		nlp[name] = adaptWithCondition(d[name], magicGuard);
-	});
-
-	// add forEach actions
-	d.forEach(["connect", "addClass", "removeClass", "toggleClass", "empty", "removeAttr"], function(name){
-		nlp[name] = adaptAsForEach(d[name]);
-	});
-
-	dojo.extend(dojo.NodeList, {
-		_normalize: function(/*String||Element||Object||NodeList*/content, /*DOMNode?*/refNode){
-			// summary:
-			// 		normalizes data to an array of items to insert.
-			// description:
-			// 		If content is an object, it can have special properties "template" and
-			// 		"parse". If "template" is defined, then the template value is run through
-			// 		dojo.string.substitute (if dojo.string.substitute has been dojo.required elsewhere),
-			// 		or if templateFunc is a function on the content, that function will be used to
-			// 		transform the template into a final string to be used for for passing to dojo._toDom.
-			// 		If content.parse is true, then it is remembered for later, for when the content
-			// 		nodes are inserted into the DOM. At that point, the nodes will be parsed for widgets
-			// 		(if dojo.parser has been dojo.required elsewhere).
-
-			//Wanted to just use a DocumentFragment, but for the array/NodeList
-			//case that meant  using cloneNode, but we may not want that.
-			//Cloning should only happen if the node operations span
-			//multiple refNodes. Also, need a real array, not a NodeList from the
-			//DOM since the node movements could change those NodeLists.
-
-			var parse = content.parse === true ? true : false;
-
-			//Do we have an object that needs to be run through a template?
-			if(typeof content.template == "string"){
-				var templateFunc = content.templateFunc || (dojo.string && dojo.string.substitute);
-				content = templateFunc ? templateFunc(content.template, content) : content;
-			}
-
-			var type = (typeof content);
-			if(type == "string" || type == "number"){
-				content = dojo._toDom(content, (refNode && refNode.ownerDocument));
-				if(content.nodeType == 11){
-					//DocumentFragment. It cannot handle cloneNode calls, so pull out the children.
-					content = dojo._toArray(content.childNodes);
-				}else{
-					content = [content];
-				}
-			}else if(!dojo.isArrayLike(content)){
-				content = [content];
-			}else if(!dojo.isArray(content)){
-				//To get to this point, content is array-like, but
-				//not an array, which likely means a DOM NodeList. Convert it now.
-				content = dojo._toArray(content);
-			}
-
-			//Pass around the parse info
-			if(parse){
-				content._runParse = true;
-			}
-			return content; //Array
-		},
-
-		_cloneNode: function(/*DOMNode*/ node){
-			// summary:
-			// 		private utiltity to clone a node. Not very interesting in the vanilla
-			// 		dojo.NodeList case, but delegates could do interesting things like
-			// 		clone event handlers if that is derivable from the node.
-			return node.cloneNode(true);
-		},
-
-		_place: function(/*Array*/ary, /*DOMNode*/refNode, /*String*/position, /*Boolean*/useClone){
-			// summary:
-			// 		private utility to handle placing an array of nodes relative to another node.
-			// description:
-			// 		Allows for cloning the nodes in the array, and for
-			// 		optionally parsing widgets, if ary._runParse is true.
-
-			//Avoid a disallowed operation if trying to do an innerHTML on a non-element node.
-			if(refNode.nodeType != 1 && position == "only"){
-				return;
-			}
-			var rNode = refNode, tempNode;
-
-			//Always cycle backwards in case the array is really a
-			//DOM NodeList and the DOM operations take it out of the live collection.
-			var length = ary.length;
-			for(var i = length - 1; i >= 0; i--){
-				var node = (useClone ? this._cloneNode(ary[i]) : ary[i]);
-
-				//If need widget parsing, use a temp node, instead of waiting after inserting into
-				//real DOM because we need to start widget parsing at one node up from current node,
-				//which could cause some already parsed widgets to be parsed again.
-				if(ary._runParse && dojo.parser && dojo.parser.parse){
-					if(!tempNode){
-						tempNode = rNode.ownerDocument.createElement("div");
-					}
-					tempNode.appendChild(node);
-					dojo.parser.parse(tempNode);
-					node = tempNode.firstChild;
-					while(tempNode.firstChild){
-						tempNode.removeChild(tempNode.firstChild);
-					}
-				}
-
-				if(i == length - 1){
-					dojo.place(node, rNode, position);
-				}else{
-					rNode.parentNode.insertBefore(node, rNode);
-				}
-				rNode = node;
-			}
-		},
-
-		_stash: function(parent){
-			// summary:
-			// 		private function to hold to a parent NodeList. end() to return the parent NodeList.
-			//
-			// example:
-			// How to make a `dojo.NodeList` method that only returns the third node in
-			// the dojo.NodeList but allows access to the original NodeList by using this._stash:
-			//	|	dojo.extend(dojo.NodeList, {
-			//	|		third: function(){
-			//  |			var newNodeList = dojo.NodeList(this[2]);
-			//	|			return newNodeList._stash(this);
-			//	|		}
-			//	|	});
-			//	|	// then see how _stash applies a sub-list, to be .end()'ed out of
-			//	|	dojo.query(".foo")
-			//	|		.third()
-			//	|			.addClass("thirdFoo")
-			//	|		.end()
-			//	|		// access to the orig .foo list
-			//	|		.removeClass("foo")
-			//	|
-			//
-			this._parent = parent;
-			return this; //dojo.NodeList
-		},
-
-		end: function(){
-			// summary:
-			// 		Ends use of the current `dojo.NodeList` by returning the previous dojo.NodeList
-			// 		that generated the current dojo.NodeList.
-			// description:
-			// 		Returns the `dojo.NodeList` that generated the current `dojo.NodeList`. If there
-			// 		is no parent dojo.NodeList, an empty dojo.NodeList is returned.
-			// example:
-			//	|	dojo.query("a")
-			//	|		.filter(".disabled")
-			//	|			// operate on the anchors that only have a disabled class
-			//	|			.style("color", "grey")
-			//	|		.end()
-			//	|		// jump back to the list of anchors
-			//	|		.style(...)
-			//
-			if(this._parent){
-				return this._parent;
-			}else{
-				//Just return empy list.
-				return new this._NodeListCtor();
-			}
-		},
-
-		// http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array#Methods
-
-		// FIXME: handle return values for #3244
-		//		http://trac.dojotoolkit.org/ticket/3244
-
-		// FIXME:
-		//		need to wrap or implement:
-		//			join (perhaps w/ innerHTML/outerHTML overload for toString() of items?)
-		//			reduce
-		//			reduceRight
-
-		/*=====
-		slice: function(begin, end){
-			// summary:
-			//		Returns a new NodeList, maintaining this one in place
-			// description:
-			//		This method behaves exactly like the Array.slice method
-			//		with the caveat that it returns a dojo.NodeList and not a
-			//		raw Array. For more details, see Mozilla's (slice
-			//		documentation)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:slice]
-			// begin: Integer
-			//		Can be a positive or negative integer, with positive
-			//		integers noting the offset to begin at, and negative
-			//		integers denoting an offset from the end (i.e., to the left
-			//		of the end)
-			// end: Integer?
-			//		Optional parameter to describe what position relative to
-			//		the NodeList's zero index to end the slice at. Like begin,
-			//		can be positive or negative.
-			return this._wrap(a.slice.apply(this, arguments));
-		},
-
-		splice: function(index, howmany, item){
-			// summary:
-			//		Returns a new NodeList, manipulating this NodeList based on
-			//		the arguments passed, potentially splicing in new elements
-			//		at an offset, optionally deleting elements
-			// description:
-			//		This method behaves exactly like the Array.splice method
-			//		with the caveat that it returns a dojo.NodeList and not a
-			//		raw Array. For more details, see Mozilla's (splice
-			//		documentation)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:splice]
-			// 		For backwards compatibility, calling .end() on the spliced NodeList
-			// 		does not return the original NodeList -- splice alters the NodeList in place.
-			// index: Integer
-			//		begin can be a positive or negative integer, with positive
-			//		integers noting the offset to begin at, and negative
-			//		integers denoting an offset from the end (i.e., to the left
-			//		of the end)
-			// howmany: Integer?
-			//		Optional parameter to describe what position relative to
-			//		the NodeList's zero index to end the slice at. Like begin,
-			//		can be positive or negative.
-			// item: Object...?
-			//		Any number of optional parameters may be passed in to be
-			//		spliced into the NodeList
-			// returns:
-			//		dojo.NodeList
-			return this._wrap(a.splice.apply(this, arguments));
-		},
-
-		indexOf: function(value, fromIndex){
-			//	summary:
-			//		see dojo.indexOf(). The primary difference is that the acted-on 
-			//		array is implicitly this NodeList
-			// value: Object:
-			//		The value to search for.
-			// fromIndex: Integer?:
-			//		The loction to start searching from. Optional. Defaults to 0.
-			//	description:
-			//		For more details on the behavior of indexOf, see Mozilla's
-			//		(indexOf
-			//		docs)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:indexOf]
-			//	returns:
-			//		Positive Integer or 0 for a match, -1 of not found.
-			return d.indexOf(this, value, fromIndex); // Integer
-		},
-
-		lastIndexOf: function(value, fromIndex){
-			// summary:
-			//		see dojo.lastIndexOf(). The primary difference is that the
-			//		acted-on array is implicitly this NodeList
-			//	description:
-			//		For more details on the behavior of lastIndexOf, see
-			//		Mozilla's (lastIndexOf
-			//		docs)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:lastIndexOf]
-			// value: Object
-			//		The value to search for.
-			// fromIndex: Integer?
-			//		The loction to start searching from. Optional. Defaults to 0.
-			// returns:
-			//		Positive Integer or 0 for a match, -1 of not found.
-			return d.lastIndexOf(this, value, fromIndex); // Integer
-		},
-
-		every: function(callback, thisObject){
-			//	summary:
-			//		see `dojo.every()` and the (Array.every
-			//		docs)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:every].
-			//		Takes the same structure of arguments and returns as
-			//		dojo.every() with the caveat that the passed array is
-			//		implicitly this NodeList
-			// callback: Function: the callback
-			// thisObject: Object?: the context
-			return d.every(this, callback, thisObject); // Boolean
-		},
-
-		some: function(callback, thisObject){
-			//	summary:
-			//		Takes the same structure of arguments and returns as
-			//		`dojo.some()` with the caveat that the passed array is
-			//		implicitly this NodeList.  See `dojo.some()` and Mozilla's
-			//		(Array.some
-			//		documentation)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:some].
-			// callback: Function: the callback
-			// thisObject: Object?: the context
-			return d.some(this, callback, thisObject); // Boolean
-		},
-		=====*/
-
-		concat: function(item){
-			// summary:
-			//		Returns a new NodeList comprised of items in this NodeList
-			//		as well as items passed in as parameters
-			// description:
-			//		This method behaves exactly like the Array.concat method
-			//		with the caveat that it returns a `dojo.NodeList` and not a
-			//		raw Array. For more details, see the (Array.concat
-			//		docs)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:concat]
-			// item: Object?
-			//		Any number of optional parameters may be passed in to be
-			//		spliced into the NodeList
-			// returns:
-			//		dojo.NodeList
-
-			//return this._wrap(apc.apply(this, arguments));
-			// the line above won't work for the native NodeList :-(
-
-			// implementation notes:
-			// 1) Native NodeList is not an array, and cannot be used directly
-			// in concat() --- the latter doesn't recognize it as an array, and
-			// does not inline it, but append as a single entity.
-			// 2) On some browsers (e.g., Safari) the "constructor" property is
-			// read-only and cannot be changed. So we have to test for both
-			// native NodeList and dojo.NodeList in this property to recognize
-			// the node list.
-
-			var t = d.isArray(this) ? this : aps.call(this, 0),
-				m = d.map(arguments, function(a){
-					return a && !d.isArray(a) &&
-						(typeof NodeList != "undefined" && a.constructor === NodeList || a.constructor === this._NodeListCtor) ?
-							aps.call(a, 0) : a;
-				});
-			return this._wrap(apc.apply(t, m), this);	// dojo.NodeList
-		},
-
-		map: function(/*Function*/ func, /*Function?*/ obj){
-			//	summary:
-			//		see dojo.map(). The primary difference is that the acted-on
-			//		array is implicitly this NodeList and the return is a
-			//		dojo.NodeList (a subclass of Array)
-			///return d.map(this, func, obj, d.NodeList); // dojo.NodeList
-			return this._wrap(d.map(this, func, obj), this); // dojo.NodeList
-		},
-
-		forEach: function(callback, thisObj){
-			//	summary:
-			//		see `dojo.forEach()`. The primary difference is that the acted-on 
-			//		array is implicitly this NodeList. If you want the option to break out
-			//		of the forEach loop, use every() or some() instead.
-			d.forEach(this, callback, thisObj);
-			// non-standard return to allow easier chaining
-			return this; // dojo.NodeList 
-		},
-
-		/*=====
-		coords: function(){
-			//	summary:
-			//		Returns the box objects of all elements in a node list as
-			//		an Array (*not* a NodeList). Acts like `dojo.coords`, though assumes
-			//		the node passed is each node in this list.
-
-			return d.map(this, d.coords); // Array
-		},
-
-		position: function(){
-			//	summary:
-			//		Returns border-box objects (x/y/w/h) of all elements in a node list
-			//		as an Array (*not* a NodeList). Acts like `dojo.position`, though
-			//		assumes the node passed is each node in this list. 
-
-			return d.map(this, d.position); // Array
-		},
-
-		attr: function(property, value){
-			//	summary:
-			//		gets or sets the DOM attribute for every element in the
-			//		NodeList. See also `dojo.attr`
-			//	property: String
-			//		the attribute to get/set
-			//	value: String?
-			//		optional. The value to set the property to
-			//	returns:
-			//		if no value is passed, the result is an array of attribute values
-			//		If a value is passed, the return is this NodeList
-			//	example:
-			//		Make all nodes with a particular class focusabl:
-			//	|	dojo.query(".focusable").attr("tabIndex", -1);
-			//	example:
-			//		Disable a group of buttons:
-			//	|	dojo.query("button.group").attr("disalbed", true);
-			//	example:
-			//		innerHTML can be assigned or retreived as well:
-			//	|	// get the innerHTML (as an array) for each list item
-			//	|	var ih = dojo.query("li.replaceable").attr("innerHTML");
-			return; // dojo.NodeList
-			return; // Array
-		},
-
-		style: function(property, value){
-			//	summary:
-			//		gets or sets the CSS property for every element in the NodeList
-			//	property: String
-			//		the CSS property to get/set, in JavaScript notation
-			//		("lineHieght" instead of "line-height")
-			//	value: String?
-			//		optional. The value to set the property to
-			//	returns:
-			//		if no value is passed, the result is an array of strings.
-			//		If a value is passed, the return is this NodeList
-			return; // dojo.NodeList
-			return; // Array
-		},
-
-		addClass: function(className){
-			//	summary:
-			//		adds the specified class to every node in the list
-			//	className: String|Array
-			//		A String class name to add, or several space-separated class names,
-			//		or an array of class names.
-			return; // dojo.NodeList
-		},
-
-		removeClass: function(className){
-			//	summary:
-			//		removes the specified class from every node in the list
-			//	className: String|Array?
-			//		An optional String class name to remove, or several space-separated
-			//		class names, or an array of class names. If omitted, all class names
-			//		will be deleted.
-			//	returns:
-			//		dojo.NodeList, this list
-			return; // dojo.NodeList
-		},
-
-		toggleClass: function(className, condition){
-			//	summary:
-			//		Adds a class to node if not present, or removes if present.
-			//		Pass a boolean condition if you want to explicitly add or remove.
-			//	condition: Boolean?
-			//		If passed, true means to add the class, false means to remove.
-			//	className: String
-			//		the CSS class to add
-			return; // dojo.NodeList
-		},
-
-		connect: function(methodName, objOrFunc, funcName){
-			//	summary:
-			//		attach event handlers to every item of the NodeList. Uses dojo.connect()
-			//		so event properties are normalized
-			//	methodName: String
-			//		the name of the method to attach to. For DOM events, this should be
-			//		the lower-case name of the event
-			//	objOrFunc: Object|Function|String
-			//		if 2 arguments are passed (methodName, objOrFunc), objOrFunc should
-			//		reference a function or be the name of the function in the global
-			//		namespace to attach. If 3 arguments are provided
-			//		(methodName, objOrFunc, funcName), objOrFunc must be the scope to 
-			//		locate the bound function in
-			//	funcName: String?
-			//		optional. A string naming the function in objOrFunc to bind to the
-			//		event. May also be a function reference.
-			//	example:
-			//		add an onclick handler to every button on the page
-			//		|	dojo.query("div:nth-child(odd)").connect("onclick", function(e){
-			//		|		console.log("clicked!");
-			//		|	});
-			// example:
-			//		attach foo.bar() to every odd div's onmouseover
-			//		|	dojo.query("div:nth-child(odd)").connect("onmouseover", foo, "bar");
-		},
-
-		empty: function(){
-			//	summary:
-			//		clears all content from each node in the list. Effectively
-			//		equivalent to removing all child nodes from every item in
-			//		the list.
-			return this.forEach("item.innerHTML='';"); // dojo.NodeList
-			// FIXME: should we be checking for and/or disposing of widgets below these nodes?
-		},
-		=====*/
-
-		// useful html methods
-		coords:	adaptAsMap(d.coords),
-		position: adaptAsMap(d.position),
-
-		// FIXME: connectPublisher()? connectRunOnce()?
-
-		/*
-		destroy: function(){
-			//	summary:
-			//		destroys every item in 	the list.
-			this.forEach(d.destroy);
-			// FIXME: should we be checking for and/or disposing of widgets below these nodes?
-		},
-		*/
-
-		place: function(/*String||Node*/ queryOrNode, /*String*/ position){
-			//	summary:
-			//		places elements of this node list relative to the first element matched
-			//		by queryOrNode. Returns the original NodeList. See: `dojo.place`
-			//	queryOrNode:
-			//		may be a string representing any valid CSS3 selector or a DOM node.
-			//		In the selector case, only the first matching element will be used 
-			//		for relative positioning.
-			//	position:
-			//		can be one of:
-			//		|	"last" (default)
-			//		|	"first"
-			//		|	"before"
-			//		|	"after"
-			//		|	"only"
-			//		|	"replace"
-			// 		or an offset in the childNodes property
-			var item = d.query(queryOrNode)[0];
-			return this.forEach(function(node){ d.place(node, item, position); }); // dojo.NodeList
-		},
-
-		orphan: function(/*String?*/ simpleFilter){
-			//	summary:
-			//		removes elements in this list that match the simple filter
-			//		from their parents and returns them as a new NodeList.
-			//	simpleFilter:
-			//		single-expression CSS rule. For example, ".thinger" or
-			//		"#someId[attrName='value']" but not "div > span". In short,
-			//		anything which does not invoke a descent to evaluate but
-			//		can instead be used to test a single node is acceptable.
-			//	returns:
-			//		`dojo.NodeList` containing the orpahned elements 
-			return (simpleFilter ? d._filterQueryResult(this, simpleFilter) : this).forEach(orphan); // dojo.NodeList
-		},
-
-		adopt: function(/*String||Array||DomNode*/ queryOrListOrNode, /*String?*/ position){
-			//	summary:
-			//		places any/all elements in queryOrListOrNode at a
-			//		position relative to the first element in this list.
-			//		Returns a dojo.NodeList of the adopted elements.
-			//	queryOrListOrNode:
-			//		a DOM node or a query string or a query result.
-			//		Represents the nodes to be adopted relative to the
-			//		first element of this NodeList.
-			//	position:
-			//		can be one of:
-			//		|	"last" (default)
-			//		|	"first"
-			//		|	"before"
-			//		|	"after"
-			//		|	"only"
-			//		|	"replace"
-			// 		or an offset in the childNodes property
-			return d.query(queryOrListOrNode).place(this[0], position)._stash(this);	// dojo.NodeList
-		},
-
-		// FIXME: do we need this?
-		query: function(/*String*/ queryStr){
-			//	summary:
-			//		Returns a new list whose memebers match the passed query,
-			//		assuming elements of the current NodeList as the root for
-			//		each search.
-			//	example:
-			//		assume a DOM created by this markup:
-			//	|	<div id="foo">
-			//	|		<p>
-			//	|			bacon is tasty, <span>dontcha think?</span>
-			//	|		</p>
-			//	|	</div>
-			//	|	<div id="bar">
-			//	|		<p>great commedians may not be funny <span>in person</span></p>
-			//	|	</div>
-			//		If we are presented with the following defintion for a NodeList:
-			//	|	var l = new dojo.NodeList(dojo.byId("foo"), dojo.byId("bar"));
-			//		it's possible to find all span elements under paragraphs
-			//		contained by these elements with this sub-query:
-			//	| 	var spans = l.query("p span");
-
-			// FIXME: probably slow
-			if(!queryStr){ return this; }
-			var ret = this.map(function(node){
-				// FIXME: why would we ever get undefined here?
-				return d.query(queryStr, node).filter(function(subNode){ return subNode !== undefined; });
-			});
-			return this._wrap(apc.apply([], ret), this);	// dojo.NodeList
-		},
-
-		filter: function(/*String|Function*/ simpleFilter){
-			//	summary:
-			// 		"masks" the built-in javascript filter() method (supported
-			// 		in Dojo via `dojo.filter`) to support passing a simple
-			// 		string filter in addition to supporting filtering function
-			// 		objects.
-			//	simpleFilter:
-			//		If a string, a single-expression CSS rule. For example,
-			//		".thinger" or "#someId[attrName='value']" but not "div >
-			//		span". In short, anything which does not invoke a descent
-			//		to evaluate but can instead be used to test a single node
-			//		is acceptable.
-			//	example:
-			//		"regular" JS filter syntax as exposed in dojo.filter:
-			//		|	dojo.query("*").filter(function(item){
-			//		|		// highlight every paragraph
-			//		|		return (item.nodeName == "p");
-			//		|	}).style("backgroundColor", "yellow");
-			// example:
-			//		the same filtering using a CSS selector
-			//		|	dojo.query("*").filter("p").styles("backgroundColor", "yellow");
-
-			var a = arguments, items = this, start = 0;
-			if(typeof simpleFilter == "string"){ // inline'd type check
-				items = d._filterQueryResult(this, a[0]);
-				if(a.length == 1){
-					// if we only got a string query, pass back the filtered results
-					return items._stash(this); // dojo.NodeList
-				}
-				// if we got a callback, run it over the filtered items
-				start = 1;
-			}
-			return this._wrap(d.filter(items, a[start], a[start + 1]), this);	// dojo.NodeList
-		},
-
-		/*
-		// FIXME: should this be "copyTo" and include parenting info?
-		clone: function(){
-			// summary:
-			//		creates node clones of each element of this list
-			//		and returns a new list containing the clones
-		},
-		*/
-
-		addContent: function(/*String||DomNode||Object||dojo.NodeList*/ content, /*String||Integer?*/ position){
-			//	summary:
-			//		add a node, NodeList or some HTML as a string to every item in the
-			//		list.  Returns the original list.
-			//	description:
-			//		a copy of the HTML content is added to each item in the
-			//		list, with an optional position argument. If no position
-			//		argument is provided, the content is appended to the end of
-			//		each item.
-			//	content:
-			//		DOM node, HTML in string format, a NodeList or an Object. If a DOM node or
-			// 		NodeList, the content will be cloned if the current NodeList has more than one
-			// 		element. Only the DOM nodes are cloned, no event handlers. If it is an Object,
-			// 		it should be an object with at "template" String property that has the HTML string
-			// 		to insert. If dojo.string has already been dojo.required, then dojo.string.substitute
-			// 		will be used on the "template" to generate the final HTML string. Other allowed
-			// 		properties on the object are: "parse" if the HTML
-			// 		string should be parsed for widgets (dojo.require("dojo.parser") to get that
-			// 		option to work), and "templateFunc" if a template function besides dojo.string.substitute
-			// 		should be used to transform the "template".
-			//	position:
-			//		can be one of:
-			//		|	"last"||"end" (default)
-			//		|	"first||"start"
-			//		|	"before"
-			//		|	"after"
-			//		|	"replace" (replaces nodes in this NodeList with new content)
-			//		|	"only" (removes other children of the nodes so new content is hte only child)
-			// 		or an offset in the childNodes property
-			//	example:
-			//		appends content to the end if the position is ommitted
-			//	|	dojo.query("h3 > p").addContent("hey there!");
-			//	example:
-			//		add something to the front of each element that has a
-			//		"thinger" property:
-			//	|	dojo.query("[thinger]").addContent("...", "first");
-			//	example:
-			//		adds a header before each element of the list
-			//	|	dojo.query(".note").addContent("<h4>NOTE:</h4>", "before");
-			//	example:
-			//		add a clone of a DOM node to the end of every element in
-			//		the list, removing it from its existing parent.
-			//	|	dojo.query(".note").addContent(dojo.byId("foo"));
-			//  example:
-			//  	Append nodes from a templatized string.
-			// 		dojo.require("dojo.string");
-			// 		dojo.query(".note").addContent({
-			//  		template: '<b>${id}: </b><span>${name}</span>',
-			// 			id: "user332",
-			//  		name: "Mr. Anderson"
-			//  	});
-			//  example:
-			//  	Append nodes from a templatized string that also has widgets parsed.
-			//  	dojo.require("dojo.string");
-			//  	dojo.require("dojo.parser");
-			//  	var notes = dojo.query(".note").addContent({
-			//  		template: '<button dojoType="dijit.form.Button">${text}</button>',
-			//  		parse: true,
-			//  		text: "Send"
-			//  	});
-			content = this._normalize(content, this[0]);
-			for(var i = 0, node; node = this[i]; i++){
-				this._place(content, node, position, i > 0);
-			}
-			return this; //dojo.NodeList
-		},
-
-		instantiate: function(/*String|Object*/ declaredClass, /*Object?*/ properties){
-			//	summary:
-			//		Create a new instance of a specified class, using the
-			//		specified properties and each node in the nodeList as a
-			//		srcNodeRef.
-			//	example:
-			//		Grabs all buttons in the page and converts them to diji.form.Buttons.
-			//	|	var buttons = dojo.query("button").instantiate("dijit.form.Button", {showLabel: true});
-			var c = d.isFunction(declaredClass) ? declaredClass : d.getObject(declaredClass);
-			properties = properties || {};
-			return this.forEach(function(node){
-				new c(properties, node);
-			});	// dojo.NodeList
-		},
-
-		at: function(/*===== index =====*/){
-			//	summary:
-			//		Returns a new NodeList comprised of items in this NodeList
-			//		at the given index or indices.
-			//	index: Integer...
-			//		One or more 0-based indices of items in the current
-			//		NodeList.
-			//	returns:
-			//		dojo.NodeList
-			var t = new this._NodeListCtor();
-			d.forEach(arguments, function(i){ if(this[i]){ t.push(this[i]); }}, this);
-			return t._stash(this); // dojo.NodeList
-		}
-
-	});
-
-	nl.events = [
-		// summary: list of all DOM events used in NodeList
-		"blur", "focus", "change", "click", "error", "keydown", "keypress",
-		"keyup", "load", "mousedown", "mouseenter", "mouseleave", "mousemove",
-		"mouseout", "mouseover", "mouseup", "submit"
-	];
-
-	// syntactic sugar for DOM events
-	d.forEach(nl.events, function(evt){
-			var _oe = "on"+evt;
-			nlp[_oe] = function(a, b){
-				return this.connect(_oe, a, b);
-			}
-				// FIXME: should these events trigger publishes?
-				/*
-				return (a ? this.connect(_oe, a, b) :
-							this.forEach(function(n){
-								// FIXME:
-								//		listeners get buried by
-								//		addEventListener and can't be dug back
-								//		out to be triggered externally.
-								// see:
-								//		http://developer.mozilla.org/en/docs/DOM:element
-
-								console.log(n, evt, _oe);
-
-								// FIXME: need synthetic event support!
-								var _e = { target: n, faux: true, type: evt };
-								// dojo._event_listener._synthesizeEvent({}, { target: n, faux: true, type: evt });
-								try{ n[evt](_e); }catch(e){ console.log(e); }
-								try{ n[_oe](_e); }catch(e){ console.log(e); }
-							})
-				);
-				*/
-		}
-	);
-
-})();
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/bootstrap.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/bootstrap.js
deleted file mode 100644
index 23f09ad..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/bootstrap.js
+++ /dev/null
@@ -1,515 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-/*=====
-// note:
-//		'djConfig' does not exist under 'dojo.*' so that it can be set before the
-//		'dojo' variable exists.
-// note:
-//		Setting any of these variables *after* the library has loaded does
-//		nothing at all.
-
-djConfig = {
-	// summary:
-	//		Application code can set the global 'djConfig' prior to loading
-	//		the library to override certain global settings for how dojo works.
-	//
-	// isDebug: Boolean
-	//		Defaults to `false`. If set to `true`, ensures that Dojo provides
-	//		extended debugging feedback via Firebug. If Firebug is not available
-	//		on your platform, setting `isDebug` to `true` will force Dojo to
-	//		pull in (and display) the version of Firebug Lite which is
-	//		integrated into the Dojo distribution, thereby always providing a
-	//		debugging/logging console when `isDebug` is enabled. Note that
-	//		Firebug's `console.*` methods are ALWAYS defined by Dojo. If
-	//		`isDebug` is false and you are on a platform without Firebug, these
-	//		methods will be defined as no-ops.
-	isDebug: false,
-	// debugAtAllCosts: Boolean
-	//		Defaults to `false`. If set to `true`, this triggers an alternate
-	//		mode of the package system in which dependencies are detected and
-	//		only then are resources evaluated in dependency order via
-	//		`<script>` tag inclusion. This may double-request resources and
-	//		cause problems with scripts which expect `dojo.require()` to
-	//		preform synchronously. `debugAtAllCosts` can be an invaluable
-	//		debugging aid, but when using it, ensure that all code which
-	//		depends on Dojo modules is wrapped in `dojo.addOnLoad()` handlers.
-	//		Due to the somewhat unpredictable side-effects of using
-	//		`debugAtAllCosts`, it is strongly recommended that you enable this
-	//		flag as a last resort. `debugAtAllCosts` has no effect when loading
-	//		resources across domains. For usage information, see the
-	//		[Dojo Book](http://dojotoolkit.org/book/book-dojo/part-4-meta-dojo-making-your-dojo-code-run-faster-and-better/debugging-facilities/deb)
-	debugAtAllCosts: false,
-	// locale: String
-	//		The locale to assume for loading localized resources in this page,
-	//		specified according to [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt).
-	//		Must be specified entirely in lowercase, e.g. `en-us` and `zh-cn`.
-	//		See the documentation for `dojo.i18n` and `dojo.requireLocalization`
-	//		for details on loading localized resources. If no locale is specified,
-	//		Dojo assumes the locale of the user agent, according to `navigator.userLanguage`
-	//		or `navigator.language` properties.
-	locale: undefined,
-	// extraLocale: Array
-	//		No default value. Specifies additional locales whose
-	//		resources should also be loaded alongside the default locale when
-	//		calls to `dojo.requireLocalization()` are processed.
-	extraLocale: undefined,
-	// baseUrl: String
-	//		The directory in which `dojo.js` is located. Under normal
-	//		conditions, Dojo auto-detects the correct location from which it
-	//		was loaded. You may need to manually configure `baseUrl` in cases
-	//		where you have renamed `dojo.js` or in which `<base>` tags confuse
-	//		some browsers (e.g. IE 6). The variable `dojo.baseUrl` is assigned
-	//		either the value of `djConfig.baseUrl` if one is provided or the
-	//		auto-detected root if not. Other modules are located relative to
-	//		this path. The path should end in a slash.
-	baseUrl: undefined,
-	// modulePaths: Object
-	//		A map of module names to paths relative to `dojo.baseUrl`. The
-	//		key/value pairs correspond directly to the arguments which
-	//		`dojo.registerModulePath` accepts. Specifiying
-	//		`djConfig.modulePaths = { "foo": "../../bar" }` is the equivalent
-	//		of calling `dojo.registerModulePath("foo", "../../bar");`. Multiple
-	//		modules may be configured via `djConfig.modulePaths`.
-	modulePaths: {},
-	// afterOnLoad: Boolean 
-	//		Indicates Dojo was added to the page after the page load. In this case
-	//		Dojo will not wait for the page DOMContentLoad/load events and fire
-	//		its dojo.addOnLoad callbacks after making sure all outstanding
-	//		dojo.required modules have loaded. Only works with a built dojo.js,
-	//		it does not work the dojo.js directly from source control.
-	afterOnLoad: false,
-	// addOnLoad: Function or Array
-	//		Adds a callback via dojo.addOnLoad. Useful when Dojo is added after
-	//		the page loads and djConfig.afterOnLoad is true. Supports the same
-	//		arguments as dojo.addOnLoad. When using a function reference, use
-	//		`djConfig.addOnLoad = function(){};`. For object with function name use
-	//		`djConfig.addOnLoad = [myObject, "functionName"];` and for object with
-	//		function reference use
-	//		`djConfig.addOnLoad = [myObject, function(){}];`
-	addOnLoad: null,
-	// require: Array
-	//		An array of module names to be loaded immediately after dojo.js has been included
-	//		in a page.
-	require: [],
-	// defaultDuration: Array
-	//		Default duration, in milliseconds, for wipe and fade animations within dijits.
-	//		Assigned to dijit.defaultDuration.
-	defaultDuration: 200,
-	// dojoBlankHtmlUrl: String
-	//		Used by some modules to configure an empty iframe. Used by dojo.io.iframe and
-	//		dojo.back, and dijit popup support in IE where an iframe is needed to make sure native
-	//		controls do not bleed through the popups. Normally this configuration variable 
-	//		does not need to be set, except when using cross-domain/CDN Dojo builds.
-	//		Save dojo/resources/blank.html to your domain and set `djConfig.dojoBlankHtmlUrl`
-	//		to the path on your domain your copy of blank.html.
-	dojoBlankHtmlUrl: undefined,
-	//	ioPublish: Boolean?
-	//		Set this to true to enable publishing of topics for the different phases of
-	// 		IO operations. Publishing is done via dojo.publish. See dojo.__IoPublish for a list
-	// 		of topics that are published.
-	ioPublish: false,
-	//  useCustomLogger: Anything?
-	//		If set to a value that evaluates to true such as a string or array and
-	//		isDebug is true and Firebug is not available or running, then it bypasses
-	//		the creation of Firebug Lite allowing you to define your own console object.
-	useCustomLogger: undefined,
-	// transparentColor: Array
-	//		Array containing the r, g, b components used as transparent color in dojo.Color;
-	//		if undefined, [255,255,255] (white) will be used.
-	transparentColor: undefined,
-	// skipIeDomLoaded: Boolean
-	//		For IE only, skip the DOMContentLoaded hack used. Sometimes it can cause an Operation
-	//		Aborted error if the rest of the page triggers script defers before the DOM is ready.
-	//		If this is config value is set to true, then dojo.addOnLoad callbacks will not be
-	//		triggered until the page load event, which is after images and iframes load. If you
-	//		want to trigger the callbacks sooner, you can put a script block in the bottom of
-	//		your HTML that calls dojo._loadInit();. If you are using multiversion support, change
-	//		"dojo." to the appropriate scope name for dojo.
-	skipIeDomLoaded: false
-}
-=====*/
-
-(function(){
-	// firebug stubs
-
-	if(typeof this["loadFirebugConsole"] == "function"){
-		// for Firebug 1.2
-		this["loadFirebugConsole"]();
-	}else{
-		this.console = this.console || {};
-
-		//	Be careful to leave 'log' always at the end
-		var cn = [
-			"assert", "count", "debug", "dir", "dirxml", "error", "group",
-			"groupEnd", "info", "profile", "profileEnd", "time", "timeEnd",
-			"trace", "warn", "log"
-		];
-		var i=0, tn;
-		while((tn=cn[i++])){
-			if(!console[tn]){
-				(function(){
-					var tcn = tn+"";
-					console[tcn] = ('log' in console) ? function(){
-						var a = Array.apply({}, arguments);
-						a.unshift(tcn+":");
-						console["log"](a.join(" "));
-					} : function(){}
-					console[tcn]._fake = true;
-				})();
-			}
-		}
-	}
-
-	//TODOC:  HOW TO DOC THIS?
-	// dojo is the root variable of (almost all) our public symbols -- make sure it is defined.
-	if(typeof dojo == "undefined"){
-		dojo = {
-			_scopeName: "dojo",
-			_scopePrefix: "",
-			_scopePrefixArgs: "",
-			_scopeSuffix: "",
-			_scopeMap: {},
-			_scopeMapRev: {}
-		};
-	}
-
-	var d = dojo;
-
-	//Need placeholders for dijit and dojox for scoping code.
-	if(typeof dijit == "undefined"){
-		dijit = {_scopeName: "dijit"};
-	}
-	if(typeof dojox == "undefined"){
-		dojox = {_scopeName: "dojox"};
-	}
-
-	if(!d._scopeArgs){
-		d._scopeArgs = [dojo, dijit, dojox];
-	}
-
-/*=====
-dojo.global = {
-	//	summary:
-	//		Alias for the global scope
-	//		(e.g. the window object in a browser).
-	//	description:
-	//		Refer to 'dojo.global' rather than referring to window to ensure your
-	//		code runs correctly in contexts other than web browsers (e.g. Rhino on a server).
-}
-=====*/
-	d.global = this;
-
-	d.config =/*===== djConfig = =====*/{
-		isDebug: false,
-		debugAtAllCosts: false
-	};
-
-	if(typeof djConfig != "undefined"){
-		for(var opt in djConfig){
-			d.config[opt] = djConfig[opt];
-		}
-	}
-
-/*=====
-	// Override locale setting, if specified
-	dojo.locale = {
-		// summary: the locale as defined by Dojo (read-only)
-	};
-=====*/
-	dojo.locale = d.config.locale;
-
-	var rev = "$Rev: 21516 $".match(/\d+/);
-
-/*=====
-	dojo.version = function(){
-		// summary:
-		//		Version number of the Dojo Toolkit
-		// major: Integer
-		//		Major version. If total version is "1.2.0beta1", will be 1
-		// minor: Integer
-		//		Minor version. If total version is "1.2.0beta1", will be 2
-		// patch: Integer
-		//		Patch version. If total version is "1.2.0beta1", will be 0
-		// flag: String
-		//		Descriptor flag. If total version is "1.2.0beta1", will be "beta1"
-		// revision: Number
-		//		The SVN rev from which dojo was pulled
-		this.major = 0;
-		this.minor = 0;
-		this.patch = 0;
-		this.flag = "";
-		this.revision = 0;
-	}
-=====*/
-	dojo.version = {
-		major: 1, minor: 4, patch: 2, flag: "",
-		revision: rev ? +rev[0] : NaN,
-		toString: function(){
-			with(d.version){
-				return major + "." + minor + "." + patch + flag + " (" + revision + ")";	// String
-			}
-		}
-	}
-
-		// Register with the OpenAjax hub
-	if(typeof OpenAjax != "undefined"){
-		OpenAjax.hub.registerLibrary(dojo._scopeName, "http://dojotoolkit.org", d.version.toString());
-	}
-	
-	var extraNames, extraLen, empty = {};
-	for(var i in {toString: 1}){ extraNames = []; break; }
-	dojo._extraNames = extraNames = extraNames || ["hasOwnProperty", "valueOf", "isPrototypeOf",
-		"propertyIsEnumerable", "toLocaleString", "toString", "constructor"];
-	extraLen = extraNames.length;
-
-	dojo._mixin = function(/*Object*/ target, /*Object*/ source){
-		// summary:
-		//		Adds all properties and methods of source to target. This addition
-		//		is "prototype extension safe", so that instances of objects
-		//		will not pass along prototype defaults.
-		var name, s, i;
-		for(name in source){
-			// the "tobj" condition avoid copying properties in "source"
-			// inherited from Object.prototype.  For example, if target has a custom
-			// toString() method, don't overwrite it with the toString() method
-			// that source inherited from Object.prototype
-			s = source[name];
-			if(!(name in target) || (target[name] !== s && (!(name in empty) || empty[name] !== s))){
-				target[name] = s;
-			}
-		}
-				// IE doesn't recognize some custom functions in for..in
-		if(extraLen && source){
-			for(i = 0; i < extraLen; ++i){
-				name = extraNames[i];
-				s = source[name];
-				if(!(name in target) || (target[name] !== s && (!(name in empty) || empty[name] !== s))){
-					target[name] = s;
-				}
-			}
-		}
-				return target; // Object
-	}
-
-	dojo.mixin = function(/*Object*/obj, /*Object...*/props){
-		// summary:
-		//		Adds all properties and methods of props to obj and returns the
-		//		(now modified) obj.
-		//	description:
-		//		`dojo.mixin` can mix multiple source objects into a
-		//		destination object which is then returned. Unlike regular
-		//		`for...in` iteration, `dojo.mixin` is also smart about avoiding
-		//		extensions which other toolkits may unwisely add to the root
-		//		object prototype
-		//	obj:
-		//		The object to mix properties into. Also the return value.
-		//	props:
-		//		One or more objects whose values are successively copied into
-		//		obj. If more than one of these objects contain the same value,
-		//		the one specified last in the function call will "win".
-		//	example:
-		//		make a shallow copy of an object
-		//	|	var copy = dojo.mixin({}, source);
-		//	example:
-		//		many class constructors often take an object which specifies
-		//		values to be configured on the object. In this case, it is
-		//		often simplest to call `dojo.mixin` on the `this` object:
-		//	|	dojo.declare("acme.Base", null, {
-		//	|		constructor: function(properties){
-		//	|			// property configuration:
-		//	|			dojo.mixin(this, properties);
-		//	|	
-		//	|			console.log(this.quip);
-		//	|			//  ...
-		//	|		},
-		//	|		quip: "I wasn't born yesterday, you know - I've seen movies.",
-		//	|		// ...
-		//	|	});
-		//	|
-		//	|	// create an instance of the class and configure it
-		//	|	var b = new acme.Base({quip: "That's what it does!" });
-		//	example:
-		//		copy in properties from multiple objects
-		//	|	var flattened = dojo.mixin(
-		//	|		{
-		//	|			name: "Frylock",
-		//	|			braces: true
-		//	|		},
-		//	|		{
-		//	|			name: "Carl Brutanananadilewski"
-		//	|		}
-		//	|	);
-		//	|	
-		//	|	// will print "Carl Brutanananadilewski"
-		//	|	console.log(flattened.name);
-		//	|	// will print "true"
-		//	|	console.log(flattened.braces);
-		if(!obj){ obj = {}; }
-		for(var i=1, l=arguments.length; i<l; i++){
-			d._mixin(obj, arguments[i]);
-		}
-		return obj; // Object
-	}
-
-	dojo._getProp = function(/*Array*/parts, /*Boolean*/create, /*Object*/context){
-		var obj=context || d.global;
-		for(var i=0, p; obj && (p=parts[i]); i++){
-			if(i == 0 && d._scopeMap[p]){
-				p = d._scopeMap[p];
-			}
-			obj = (p in obj ? obj[p] : (create ? obj[p]={} : undefined));
-		}
-		return obj; // mixed
-	}
-
-	dojo.setObject = function(/*String*/name, /*Object*/value, /*Object?*/context){
-		// summary:
-		//		Set a property from a dot-separated string, such as "A.B.C"
-		//	description:
-		//		Useful for longer api chains where you have to test each object in
-		//		the chain, or when you have an object reference in string format.
-		//		Objects are created as needed along `path`. Returns the passed
-		//		value if setting is successful or `undefined` if not.
-		//	name:
-		//		Path to a property, in the form "A.B.C".
-		//	context:
-		//		Optional. Object to use as root of path. Defaults to
-		//		`dojo.global`.
-		//	example:
-		//		set the value of `foo.bar.baz`, regardless of whether
-		//		intermediate objects already exist:
-		//	|	dojo.setObject("foo.bar.baz", value);
-		//	example:
-		//		without `dojo.setObject`, we often see code like this:
-		//	|	// ensure that intermediate objects are available
-		//	|	if(!obj["parent"]){ obj.parent = {}; }
-		//	|	if(!obj.parent["child"]){ obj.parent.child= {}; }
-		//	|	// now we can safely set the property
-		//	|	obj.parent.child.prop = "some value";
-		//		wheras with `dojo.setObject`, we can shorten that to:
-		//	|	dojo.setObject("parent.child.prop", "some value", obj);
-		var parts=name.split("."), p=parts.pop(), obj=d._getProp(parts, true, context);
-		return obj && p ? (obj[p]=value) : undefined; // Object
-	}
-
-	dojo.getObject = function(/*String*/name, /*Boolean?*/create, /*Object?*/context){
-		// summary:
-		//		Get a property from a dot-separated string, such as "A.B.C"
-		//	description:
-		//		Useful for longer api chains where you have to test each object in
-		//		the chain, or when you have an object reference in string format.
-		//	name:
-		//		Path to an property, in the form "A.B.C".
-		//	create:
-		//		Optional. Defaults to `false`. If `true`, Objects will be
-		//		created at any point along the 'path' that is undefined.
-		//	context:
-		//		Optional. Object to use as root of path. Defaults to
-		//		'dojo.global'. Null may be passed.
-		return d._getProp(name.split("."), create, context); // Object
-	}
-
-	dojo.exists = function(/*String*/name, /*Object?*/obj){
-		//	summary:
-		//		determine if an object supports a given method
-		//	description:
-		//		useful for longer api chains where you have to test each object in
-		//		the chain. Useful only for object and method detection.
-		//		Not useful for testing generic properties on an object.
-		//		In particular, dojo.exists("foo.bar") when foo.bar = ""
-		//		will return false. Use ("bar" in foo) to test for those cases.
-		//	name:
-		//		Path to an object, in the form "A.B.C".
-		//	obj:
-		//		Object to use as root of path. Defaults to
-		//		'dojo.global'. Null may be passed.
-		//	example:
-		//	|	// define an object
-		//	|	var foo = {
-		//	|		bar: { }
-		//	|	};
-		//	|
-		//	|	// search the global scope
-		//	|	dojo.exists("foo.bar"); // true
-		//	|	dojo.exists("foo.bar.baz"); // false
-		//	|
-		//	|	// search from a particular scope
-		//	|	dojo.exists("bar", foo); // true
-		//	|	dojo.exists("bar.baz", foo); // false
-		return !!d.getObject(name, false, obj); // Boolean
-	}
-
-
-	dojo["eval"] = function(/*String*/ scriptFragment){
-		//	summary:
-		//		Perform an evaluation in the global scope. Use this rather than
-		//		calling 'eval()' directly.
-		//	description:
-		//		Placed in a separate function to minimize size of trapped
-		//		exceptions. Calling eval() directly from some other scope may
-		//		complicate tracebacks on some platforms.
-		//	returns:
-		//		The result of the evaluation. Often `undefined`
-
-
-		// note:
-		//	 - JSC eval() takes an optional second argument which can be 'unsafe'.
-		//	 - Mozilla/SpiderMonkey eval() takes an optional second argument which is the
-		//  	 scope object for new symbols.
-
-		// FIXME: investigate Joseph Smarr's technique for IE:
-		//		http://josephsmarr.com/2007/01/31/fixing-eval-to-use-global-scope-in-ie/
-		//	see also:
-		// 		http://trac.dojotoolkit.org/ticket/744
-		return d.global.eval ? d.global.eval(scriptFragment) : eval(scriptFragment); 	// Object
-	}
-
-	/*=====
-		dojo.deprecated = function(behaviour, extra, removal){
-			//	summary:
-			//		Log a debug message to indicate that a behavior has been
-			//		deprecated.
-			//	behaviour: String
-			//		The API or behavior being deprecated. Usually in the form
-			//		of "myApp.someFunction()".
-			//	extra: String?
-			//		Text to append to the message. Often provides advice on a
-			//		new function or facility to achieve the same goal during
-			//		the deprecation period.
-			//	removal: String?
-			//		Text to indicate when in the future the behavior will be
-			//		removed. Usually a version number.
-			//	example:
-			//	|	dojo.deprecated("myApp.getTemp()", "use myApp.getLocaleTemp() instead", "1.0");
-		}
-
-		dojo.experimental = function(moduleName, extra){
-			//	summary: Marks code as experimental.
-			//	description:
-			//	 	This can be used to mark a function, file, or module as
-			//	 	experimental.  Experimental code is not ready to be used, and the
-			//	 	APIs are subject to change without notice.  Experimental code may be
-			//	 	completed deleted without going through the normal deprecation
-			//	 	process.
-			//	moduleName: String
-			//	 	The name of a module, or the name of a module file or a specific
-			//	 	function
-			//	extra: String?
-			//	 	some additional message for the user
-			//	example:
-			//	|	dojo.experimental("dojo.data.Result");
-			//	example:
-			//	|	dojo.experimental("dojo.weather.toKelvin()", "PENDING approval from NOAA");
-		}
-	=====*/
-
-	//Real functions declared in dojo._firebug.firebug.
-	d.deprecated = d.experimental = function(){};
-
-})();
-// vim:ai:ts=4:noet
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/hostenv_browser.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/hostenv_browser.js
deleted file mode 100644
index 0348ab0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/hostenv_browser.js
+++ /dev/null
@@ -1,456 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-/*=====
-dojo.isBrowser = {
-	//	example:
-	//	|	if(dojo.isBrowser){ ... }
-};
-
-dojo.isFF = {
-	//	example:
-	//	|	if(dojo.isFF > 1){ ... }
-};
-
-dojo.isIE = {
-	// example:
-	//	|	if(dojo.isIE > 6){
-	//	|		// we are IE7
-	// 	|	}
-};
-
-dojo.isSafari = {
-	//	example:
-	//	|	if(dojo.isSafari){ ... }
-	//	example: 
-	//		Detect iPhone:
-	//	|	if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){ 
-	//	|		// we are iPhone. Note, iPod touch reports "iPod" above and fails this test.
-	//	|	}
-};
-
-dojo = {
-	// isBrowser: Boolean
-	//		True if the client is a web-browser
-	isBrowser: true,
-	//	isFF: Number | undefined
-	//		Version as a Number if client is FireFox. undefined otherwise. Corresponds to
-	//		major detected FireFox version (1.5, 2, 3, etc.)
-	isFF: 2,
-	//	isIE: Number | undefined
-	//		Version as a Number if client is MSIE(PC). undefined otherwise. Corresponds to
-	//		major detected IE version (6, 7, 8, etc.)
-	isIE: 6,
-	//	isKhtml: Number | undefined
-	//		Version as a Number if client is a KHTML browser. undefined otherwise. Corresponds to major
-	//		detected version.
-	isKhtml: 0,
-	//	isWebKit: Number | undefined
-	//		Version as a Number if client is a WebKit-derived browser (Konqueror,
-	//		Safari, Chrome, etc.). undefined otherwise.
-	isWebKit: 0,
-	//	isMozilla: Number | undefined
-	//		Version as a Number if client is a Mozilla-based browser (Firefox,
-	//		SeaMonkey). undefined otherwise. Corresponds to major detected version.
-	isMozilla: 0,
-	//	isOpera: Number | undefined
-	//		Version as a Number if client is Opera. undefined otherwise. Corresponds to
-	//		major detected version.
-	isOpera: 0,
-	//	isSafari: Number | undefined
-	//		Version as a Number if client is Safari or iPhone. undefined otherwise.
-	isSafari: 0,
-	//	isChrome: Number | undefined
-	//		Version as a Number if client is Chrome browser. undefined otherwise.
-	isChrome: 0
-	//	isMac: Boolean
-	//		True if the client runs on Mac
-}
-=====*/
-
-if(typeof window != 'undefined'){
-	dojo.isBrowser = true;
-	dojo._name = "browser";
-
-
-	// attempt to figure out the path to dojo if it isn't set in the config
-	(function(){
-		var d = dojo;
-
-		// this is a scope protection closure. We set browser versions and grab
-		// the URL we were loaded from here.
-
-		// grab the node we were loaded from
-		if(document && document.getElementsByTagName){
-			var scripts = document.getElementsByTagName("script");
-			var rePkg = /dojo(\.xd)?\.js(\W|$)/i;
-			for(var i = 0; i < scripts.length; i++){
-				var src = scripts[i].getAttribute("src");
-				if(!src){ continue; }
-				var m = src.match(rePkg);
-				if(m){
-					// find out where we came from
-					if(!d.config.baseUrl){
-						d.config.baseUrl = src.substring(0, m.index);
-					}
-					// and find out if we need to modify our behavior
-					var cfg = scripts[i].getAttribute("djConfig");
-					if(cfg){
-						var cfgo = eval("({ "+cfg+" })");
-						for(var x in cfgo){
-							dojo.config[x] = cfgo[x];
-						}
-					}
-					break; // "first Dojo wins"
-				}
-			}
-		}
-		d.baseUrl = d.config.baseUrl;
-
-		// fill in the rendering support information in dojo.render.*
-		var n = navigator;
-		var dua = n.userAgent,
-			dav = n.appVersion,
-			tv = parseFloat(dav);
-
-		if(dua.indexOf("Opera") >= 0){ d.isOpera = tv; }
-		if(dua.indexOf("AdobeAIR") >= 0){ d.isAIR = 1; }
-		d.isKhtml = (dav.indexOf("Konqueror") >= 0) ? tv : 0;
-		d.isWebKit = parseFloat(dua.split("WebKit/")[1]) || undefined;
-		d.isChrome = parseFloat(dua.split("Chrome/")[1]) || undefined;
-		d.isMac = dav.indexOf("Macintosh") >= 0;
-
-		// safari detection derived from:
-		//		http://developer.apple.com/internet/safari/faq.html#anchor2
-		//		http://developer.apple.com/internet/safari/uamatrix.html
-		var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);
-		if(index && !dojo.isChrome){
-			// try to grab the explicit Safari version first. If we don't get
-			// one, look for less than 419.3 as the indication that we're on something
-			// "Safari 2-ish".
-			d.isSafari = parseFloat(dav.split("Version/")[1]);
-			if(!d.isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){
-				d.isSafari = 2;
-			}
-		}
-
-				if(dua.indexOf("Gecko") >= 0 && !d.isKhtml && !d.isWebKit){ d.isMozilla = d.isMoz = tv; }
-		if(d.isMoz){
-			//We really need to get away from this. Consider a sane isGecko approach for the future.
-			d.isFF = parseFloat(dua.split("Firefox/")[1] || dua.split("Minefield/")[1]) || undefined;
-		}
-		if(document.all && !d.isOpera){
-			d.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined;
-			//In cases where the page has an HTTP header or META tag with
-			//X-UA-Compatible, then it is in emulation mode.
-			//Make sure isIE reflects the desired version.
-			//document.documentMode of 5 means quirks mode.
-			//Only switch the value if documentMode's major version
-			//is different from isIE's major version.
-			var mode = document.documentMode;
-			if(mode && mode != 5 && Math.floor(d.isIE) != mode){
-				d.isIE = mode;
-			}
-		}
-
-		//Workaround to get local file loads of dojo to work on IE 7
-		//by forcing to not use native xhr.
-		if(dojo.isIE && window.location.protocol === "file:"){
-			dojo.config.ieForceActiveXXhr=true;
-		}
-		
-		d.isQuirks = document.compatMode == "BackCompat";
-
-		// TODO: is the HTML LANG attribute relevant?
-		d.locale = dojo.config.locale || (d.isIE ? n.userLanguage : n.language).toLowerCase();
-
-		// These are in order of decreasing likelihood; this will change in time.
-				d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
-		
-		d._xhrObj = function(){
-			// summary: 
-			//		does the work of portably generating a new XMLHTTPRequest object.
-			var http, last_e;
-						if(!dojo.isIE || !dojo.config.ieForceActiveXXhr){
-							try{ http = new XMLHttpRequest(); }catch(e){}
-						}
-			if(!http){
-				for(var i=0; i<3; ++i){
-					var progid = d._XMLHTTP_PROGIDS[i];
-					try{
-						http = new ActiveXObject(progid);
-					}catch(e){
-						last_e = e;
-					}
-
-					if(http){
-						d._XMLHTTP_PROGIDS = [progid];  // so faster next time
-						break;
-					}
-				}
-			}
-			
-			if(!http){
-				throw new Error("XMLHTTP not available: "+last_e);
-			}
-
-			return http; // XMLHTTPRequest instance
-		}
-
-		d._isDocumentOk = function(http){
-			var stat = http.status || 0,
-				lp = location.protocol;
-			return (stat >= 200 && stat < 300) || 	// Boolean
-				stat == 304 || 						// allow any 2XX response code
-				stat == 1223 || 						// get it out of the cache
-				(!stat && (lp == "file:" || lp == "chrome:" || lp == "app:") ); // Internet Explorer mangled the status code OR we're Titanium requesting a local file
-		}
-
-		//See if base tag is in use.
-		//This is to fix http://trac.dojotoolkit.org/ticket/3973,
-		//but really, we need to find out how to get rid of the dojo._Url reference
-		//below and still have DOH work with the dojo.i18n test following some other
-		//test that uses the test frame to load a document (trac #2757).
-		//Opera still has problems, but perhaps a larger issue of base tag support
-		//with XHR requests (hasBase is true, but the request is still made to document
-		//path, not base path).
-		var owloc = window.location+"";
-		var base = document.getElementsByTagName("base");
-		var hasBase = (base && base.length > 0);
-
-		d._getText = function(/*URI*/ uri, /*Boolean*/ fail_ok){
-			// summary: Read the contents of the specified uri and return those contents.
-			// uri:
-			//		A relative or absolute uri. If absolute, it still must be in
-			//		the same "domain" as we are.
-			// fail_ok:
-			//		Default false. If fail_ok and loading fails, return null
-			//		instead of throwing.
-			// returns: The response text. null is returned when there is a
-			//		failure and failure is okay (an exception otherwise)
-
-			// NOTE: must be declared before scope switches ie. this._xhrObj()
-			var http = d._xhrObj();
-
-			if(!hasBase && dojo._Url){
-				uri = (new dojo._Url(owloc, uri)).toString();
-			}
-
-			if(d.config.cacheBust){
-				//Make sure we have a string before string methods are used on uri
-				uri += "";
-				uri += (uri.indexOf("?") == -1 ? "?" : "&") + String(d.config.cacheBust).replace(/\W+/g,"");
-			}
-
-			http.open('GET', uri, false);
-			try{
-				http.send(null);
-				if(!d._isDocumentOk(http)){
-					var err = Error("Unable to load "+uri+" status:"+ http.status);
-					err.status = http.status;
-					err.responseText = http.responseText;
-					throw err;
-				}
-			}catch(e){
-				if(fail_ok){ return null; } // null
-				// rethrow the exception
-				throw e;
-			}
-			return http.responseText; // String
-		}
-		
-
-		var _w = window;
-		var _handleNodeEvent = function(/*String*/evtName, /*Function*/fp){
-			// summary:
-			//		non-destructively adds the specified function to the node's
-			//		evtName handler.
-			// evtName: should be in the form "onclick" for "onclick" handlers.
-			// Make sure you pass in the "on" part.
-			var _a = _w.attachEvent || _w.addEventListener;
-			evtName = _w.attachEvent ? evtName : evtName.substring(2);
-			_a(evtName, function(){
-				fp.apply(_w, arguments);
-			}, false);
-		};
-
-
-		d._windowUnloaders = [];
-		
-		d.windowUnloaded = function(){
-			// summary:
-			//		signal fired by impending window destruction. You may use
-			//		dojo.addOnWindowUnload() to register a listener for this
-			//		event. NOTE: if you wish to dojo.connect() to this method
-			//		to perform page/application cleanup, be aware that this
-			//		event WILL NOT fire if no handler has been registered with
-			//		dojo.addOnWindowUnload. This behavior started in Dojo 1.3.
-			//		Previous versions always triggered dojo.windowUnloaded. See
-			//		dojo.addOnWindowUnload for more info.
-			var mll = d._windowUnloaders;
-			while(mll.length){
-				(mll.pop())();
-			}
-		};
-
-		var _onWindowUnloadAttached = 0;
-		d.addOnWindowUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){
-			// summary:
-			//		registers a function to be triggered when window.onunload
-			//		fires. 
-			//	description:
-			//		The first time that addOnWindowUnload is called Dojo
-			//		will register a page listener to trigger your unload
-			//		handler with. Note that registering these handlers may
-			//		destory "fastback" page caching in browsers that support
-			//		it. Be careful trying to modify the DOM or access
-			//		JavaScript properties during this phase of page unloading:
-			//		they may not always be available. Consider
-			//		dojo.addOnUnload() if you need to modify the DOM or do
-			//		heavy JavaScript work since it fires at the eqivalent of
-			//		the page's "onbeforeunload" event.
-			// example:
-			//	|	dojo.addOnWindowUnload(functionPointer)
-			//	|	dojo.addOnWindowUnload(object, "functionName");
-			//	|	dojo.addOnWindowUnload(object, function(){ /* ... */});
-
-			d._onto(d._windowUnloaders, obj, functionName);
-			if(!_onWindowUnloadAttached){
-				_onWindowUnloadAttached = 1;
-				_handleNodeEvent("onunload", d.windowUnloaded);
-			}
-		};
-
-		var _onUnloadAttached = 0;
-		d.addOnUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){
-			// summary:
-			//		registers a function to be triggered when the page unloads.
-			//	description:
-			//		The first time that addOnUnload is called Dojo will
-			//		register a page listener to trigger your unload handler
-			//		with. 
-			//
-			//		In a browser enviroment, the functions will be triggered
-			//		during the window.onbeforeunload event. Be careful of doing
-			//		too much work in an unload handler. onbeforeunload can be
-			//		triggered if a link to download a file is clicked, or if
-			//		the link is a javascript: link. In these cases, the
-			//		onbeforeunload event fires, but the document is not
-			//		actually destroyed. So be careful about doing destructive
-			//		operations in a dojo.addOnUnload callback.
-			//
-			//		Further note that calling dojo.addOnUnload will prevent
-			//		browsers from using a "fast back" cache to make page
-			//		loading via back button instantaneous. 
-			// example:
-			//	|	dojo.addOnUnload(functionPointer)
-			//	|	dojo.addOnUnload(object, "functionName")
-			//	|	dojo.addOnUnload(object, function(){ /* ... */});
-
-			d._onto(d._unloaders, obj, functionName);
-			if(!_onUnloadAttached){
-				_onUnloadAttached = 1;
-				_handleNodeEvent("onbeforeunload", dojo.unloaded);
-			}
-		};
-
-	})();
-
-	//START DOMContentLoaded
-	dojo._initFired = false;
-	dojo._loadInit = function(e){
-		if(!dojo._initFired){
-			dojo._initFired = true;
-
-			//Help out IE to avoid memory leak.
-			if(!dojo.config.afterOnLoad && window.detachEvent){
-				window.detachEvent("onload", dojo._loadInit);
-			}
-
-			if(dojo._inFlightCount == 0){
-				dojo._modulesLoaded();
-			}
-		}
-	}
-
-	if(!dojo.config.afterOnLoad){
-		if(document.addEventListener){
-			//Standards. Hooray! Assumption here that if standards based,
-			//it knows about DOMContentLoaded. It is OK if it does not, the fall through
-			//to window onload should be good enough.
-			document.addEventListener("DOMContentLoaded", dojo._loadInit, false);
-			window.addEventListener("load", dojo._loadInit, false);
-		}else if(window.attachEvent){
-			window.attachEvent("onload", dojo._loadInit);
-		}
-	}
-
-		if(dojo.isIE){
-		// 	for Internet Explorer. readyState will not be achieved on init
-		// 	call, but dojo doesn't need it however, we'll include it
-		// 	because we don't know if there are other functions added that
-		// 	might.  Note that this has changed because the build process
-		// 	strips all comments -- including conditional ones.
-		if(!dojo.config.afterOnLoad && !dojo.config.skipIeDomLoaded){
-			document.write('<scr'+'ipt defer src="//:" '
-				+ 'onreadystatechange="if(this.readyState==\'complete\'){' + dojo._scopeName + '._loadInit();}">'
-				+ '</scr'+'ipt>'
-			);
-		}
-
-		try{
-			document.namespaces.add("v","urn:schemas-microsoft-com:vml");
-			var vmlElems = ["*", "group", "roundrect", "oval", "shape", "rect", "imagedata"],
-				i = 0, l = 1, s = document.createStyleSheet();
-			if(dojo.isIE >= 8){
-				i = 1;
-				l = vmlElems.length;
-			}
-			for(; i < l; ++i){
-				s.addRule("v\\:" + vmlElems[i], "behavior:url(#default#VML); display:inline-block");
-			}
-		}catch(e){}
-	}
-		//END DOMContentLoaded
-
-
-	/*
-	OpenAjax.subscribe("OpenAjax", "onload", function(){
-		if(dojo._inFlightCount == 0){
-			dojo._modulesLoaded();
-		}
-	});
-
-	OpenAjax.subscribe("OpenAjax", "onunload", function(){
-		dojo.unloaded();
-	});
-	*/
-} //if (typeof window != 'undefined')
-
-//Register any module paths set up in djConfig. Need to do this
-//in the hostenvs since hostenv_browser can read djConfig from a
-//script tag's attribute.
-(function(){
-	var mp = dojo.config["modulePaths"];
-	if(mp){
-		for(var param in mp){
-			dojo.registerModulePath(param, mp[param]);
-		}
-	}
-})();
-
-//Load debug code if necessary.
-if(dojo.config.isDebug){
-	dojo.require("dojo._firebug.firebug");
-}
-
-if(dojo.config.debugAtAllCosts){
-	dojo.config.useXDomain = true;
-	dojo.require("dojo._base._loader.loader_xd");
-	dojo.require("dojo._base._loader.loader_debug");
-	dojo.require("dojo.i18n");
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/hostenv_ff_ext.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/hostenv_ff_ext.js
deleted file mode 100644
index 7297524..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/hostenv_ff_ext.js
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-// a host environment specifically built for Mozilla extensions, but derived
-// from the browser host environment
-if(typeof window != 'undefined'){
-	dojo.isBrowser = true;
-	dojo._name = "browser";
-
-
-	// FIXME: PORTME
-	//	http://developer.mozilla.org/en/mozIJSSubScriptLoader
-
-
-	// attempt to figure out the path to dojo if it isn't set in the config
-	(function(){
-		var d = dojo;
-		// this is a scope protection closure. We set browser versions and grab
-		// the URL we were loaded from here.
-
-		// FIXME: need to probably use a different reference to "document" to get the hosting XUL environment
-
-		d.baseUrl = d.config.baseUrl;
-
-		// fill in the rendering support information in dojo.render.*
-		var n = navigator;
-		var dua = n.userAgent;
-		var dav = n.appVersion;
-		var tv = parseFloat(dav);
-
-		d.isMozilla = d.isMoz = tv;
-		if(d.isMoz){
-			d.isFF = parseFloat(dua.split("Firefox/")[1]) || undefined;
-		}
-
-		// FIXME
-		d.isQuirks = document.compatMode == "BackCompat";
-
-		// FIXME
-		// TODO: is the HTML LANG attribute relevant?
-		d.locale = dojo.config.locale || n.language.toLowerCase();
-
-		d._xhrObj = function(){
-			return new XMLHttpRequest();
-		}
-
-		// monkey-patch _loadUri to handle file://, chrome://, and resource:// url's
-		var oldLoadUri = d._loadUri;
-		d._loadUri = function(uri, cb){
-			var handleLocal = ["file:", "chrome:", "resource:"].some(function(prefix){
-				return String(uri).indexOf(prefix) == 0;
-			});
-			if(handleLocal){
-				// see:
-				//		http://developer.mozilla.org/en/mozIJSSubScriptLoader
-				var l = Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
-					.getService(Components.interfaces.mozIJSSubScriptLoader);
-				var value = l.loadSubScript(uri, d.global)
-				if(cb){ cb(value); }
-				return true;
-			}else{
-				// otherwise, call the pre-existing version
-				return oldLoadUri.apply(d, arguments);
-			}
-		}
-
-		// FIXME: PORTME
-		d._isDocumentOk = function(http){
-			var stat = http.status || 0;
-			return (stat >= 200 && stat < 300) || 	// Boolean
-				stat == 304 || 						// allow any 2XX response code
-				stat == 1223 || 						// get it out of the cache
-				(!stat && (location.protocol=="file:" || location.protocol=="chrome:") );
-		}
-
-		// FIXME: PORTME
-		// var owloc = window.location+"";
-		// var base = document.getElementsByTagName("base");
-		// var hasBase = (base && base.length > 0);
-		var hasBase = false;
-
-		d._getText = function(/*URI*/ uri, /*Boolean*/ fail_ok){
-			// summary: Read the contents of the specified uri and return those contents.
-			// uri:
-			//		A relative or absolute uri. If absolute, it still must be in
-			//		the same "domain" as we are.
-			// fail_ok:
-			//		Default false. If fail_ok and loading fails, return null
-			//		instead of throwing.
-			// returns: The response text. null is returned when there is a
-			//		failure and failure is okay (an exception otherwise)
-
-			// alert("_getText: " + uri);
-
-			// NOTE: must be declared before scope switches ie. this._xhrObj()
-			var http = d._xhrObj();
-
-			if(!hasBase && dojo._Url){
-				uri = (new dojo._Url(uri)).toString();
-			}
-			if(d.config.cacheBust){
-				//Make sure we have a string before string methods are used on uri
-				uri += "";
-				uri += (uri.indexOf("?") == -1 ? "?" : "&") + String(d.config.cacheBust).replace(/\W+/g,"");
-			}
-			var handleLocal = ["file:", "chrome:", "resource:"].some(function(prefix){
-				return String(uri).indexOf(prefix) == 0;
-			});
-			if(handleLocal){
-				// see:
-				//		http://forums.mozillazine.org/viewtopic.php?p=921150#921150
-				var ioService = Components.classes["@mozilla.org/network/io-service;1"]
-					.getService(Components.interfaces.nsIIOService);
-				var scriptableStream=Components
-					.classes["@mozilla.org/scriptableinputstream;1"]
-					.getService(Components.interfaces.nsIScriptableInputStream);
-
-				var channel = ioService.newChannel(uri, null, null);
-				var input = channel.open();
-				scriptableStream.init(input);
-				var str = scriptableStream.read(input.available());
-				scriptableStream.close();
-				input.close();
-				return str;
-			}else{
-				http.open('GET', uri, false);
-				try{
-					http.send(null);
-					// alert(http);
-					if(!d._isDocumentOk(http)){
-						var err = Error("Unable to load "+uri+" status:"+ http.status);
-						err.status = http.status;
-						err.responseText = http.responseText;
-						throw err;
-					}
-				}catch(e){
-					if(fail_ok){ return null; } // null
-					// rethrow the exception
-					throw e;
-				}
-				return http.responseText; // String
-			}
-		}
-		
-		d._windowUnloaders = [];
-		
-		// FIXME: PORTME
-		d.windowUnloaded = function(){
-			// summary:
-			//		signal fired by impending window destruction. You may use
-			//		dojo.addOnWIndowUnload() or dojo.connect() to this method to perform
-			//		page/application cleanup methods. See dojo.addOnWindowUnload for more info.
-			var mll = d._windowUnloaders;
-			while(mll.length){
-				(mll.pop())();
-			}
-		}
-
-		// FIXME: PORTME
-		d.addOnWindowUnload = function(/*Object?*/obj, /*String|Function?*/functionName){
-			// summary:
-			//		registers a function to be triggered when window.onunload fires.
-			//		Be careful trying to modify the DOM or access JavaScript properties
-			//		during this phase of page unloading: they may not always be available.
-			//		Consider dojo.addOnUnload() if you need to modify the DOM or do heavy
-			//		JavaScript work.
-			// example:
-			//	|	dojo.addOnWindowUnload(functionPointer)
-			//	|	dojo.addOnWindowUnload(object, "functionName")
-			//	|	dojo.addOnWindowUnload(object, function(){ /* ... */});
-	
-			d._onto(d._windowUnloaders, obj, functionName);
-		}
-
-		// XUL specific APIs
-		var contexts = [];
-		var current = null;
-		dojo._defaultContext = [ window, document ];
-
-		dojo.pushContext = function(/*Object|String?*/g, /*MDocumentElement?*/d){
-			//	summary:
-			//		causes subsequent calls to Dojo methods to assume the
-			//		passed object and, optionally, document as the default
-			//		scopes to use. A 2-element array of the previous global and
-			//		document are returned.
-			//	description:
-			//		dojo.pushContext treats contexts as a stack. The
-			//		auto-detected contexts which are initially provided using
-			//		dojo.setContext() require authors to keep state in order to
-			//		"return" to a previous context, whereas the
-			//		dojo.pushContext and dojo.popContext methods provide a more
-			//		natural way to augment blocks of code to ensure that they
-			//		execute in a different window or frame without issue. If
-			//		called without any arguments, the default context (the
-			//		context when Dojo is first loaded) is instead pushed into
-			//		the stack. If only a single string is passed, a node in the
-			//		intitial context's document is looked up and its
-			//		contextWindow and contextDocument properties are used as
-			//		the context to push. This means that iframes can be given
-			//		an ID and code can be executed in the scope of the iframe's
-			//		document in subsequent calls easily.
-			//	g:
-			//		The global context. If a string, the id of the frame to
-			//		search for a context and document.
-			//	d:
-			//		The document element to execute subsequent code with.
-			var old = [dojo.global, dojo.doc];
-			contexts.push(old);
-			var n;
-			if(!g && !d){
-				n = dojo._defaultContext;
-			}else{
-				n = [ g, d ];
-				if(!d && dojo.isString(g)){
-					var t = document.getElementById(g);
-					if(t.contentDocument){
-						n = [t.contentWindow, t.contentDocument];
-					}
-				}
-			}
-			current = n;
-			dojo.setContext.apply(dojo, n);
-			return old; // Array
-		};
-
-		dojo.popContext = function(){
-			//	summary:
-			//		If the context stack contains elements, ensure that
-			//		subsequent code executes in the *previous* context to the
-			//		current context. The current context set ([global,
-			//		document]) is returned.
-			var oc = current;
-			if(!contexts.length){
-				return oc;
-			}
-			dojo.setContext.apply(dojo, contexts.pop());
-			return oc;
-		};
-
-		// FIXME: 
-		//		don't really like the current arguments and order to
-		//		_inContext, so don't make it public until it's right!
-		dojo._inContext = function(g, d, f){
-			var a = dojo._toArray(arguments);
-			f = a.pop();
-			if(a.length == 1){
-				d = null;
-			}
-			dojo.pushContext(g, d);
-			var r = f();
-			dojo.popContext();
-			return r;
-		};
-
-	})();
-
-	dojo._initFired = false;
-	//	BEGIN DOMContentLoaded, from Dean Edwards (http://dean.edwards.name/weblog/2006/06/again/)
-	dojo._loadInit = function(e){
-		dojo._initFired = true;
-		// allow multiple calls, only first one will take effect
-		// A bug in khtml calls events callbacks for document for event which isnt supported
-		// for example a created contextmenu event calls DOMContentLoaded, workaround
-		var type = (e && e.type) ? e.type.toLowerCase() : "load";
-		if(arguments.callee.initialized || (type != "domcontentloaded" && type != "load")){ return; }
-		arguments.callee.initialized = true;
-		if(dojo._inFlightCount == 0){
-			dojo._modulesLoaded();
-		}
-	}
-
-	/*
-	(function(){
-		var _w = window;
-		var _handleNodeEvent = function(evtName, fp){
-			// summary:
-			//		non-destructively adds the specified function to the node's
-			//		evtName handler.
-			// evtName: should be in the form "onclick" for "onclick" handlers.
-			// Make sure you pass in the "on" part.
-			var oldHandler = _w[evtName] || function(){};
-			_w[evtName] = function(){
-				fp.apply(_w, arguments);
-				oldHandler.apply(_w, arguments);
-			};
-		};
-		// FIXME: PORT
-		// FIXME: dojo.unloaded requires dojo scope, so using anon function wrapper.
-		_handleNodeEvent("onbeforeunload", function() { dojo.unloaded(); });
-		_handleNodeEvent("onunload", function() { dojo.windowUnloaded(); });
-	})();
-	*/
-	
-
-	//	FIXME: PORTME
-	// 		this event fires a lot, namely for all plugin XUL overlays and for
-	// 		all iframes (in addition to window navigations). We only want
-	// 		Dojo's to fire once..but we might care if pages navigate. We'll
-	// 		probably need an extension-specific API
-	if(!dojo.config.afterOnLoad){
-		window.addEventListener("DOMContentLoaded",function(e){ 
-			dojo._loadInit(e);
-			// console.log("DOM content loaded", e);
-		}, false);
-	}
-
-} //if (typeof window != 'undefined')
-
-//Register any module paths set up in djConfig. Need to do this
-//in the hostenvs since hostenv_browser can read djConfig from a
-//script tag's attribute.
-(function(){
-	var mp = dojo.config["modulePaths"];
-	if(mp){
-		for(var param in mp){
-			dojo.registerModulePath(param, mp[param]);
-		}
-	}
-})();
-
-//Load debug code if necessary.
-if(dojo.config.isDebug){
-	// logging stub for extension logging
-	console.log = function(m){
-		var s = Components.classes["@mozilla.org/consoleservice;1"].getService(
-			Components.interfaces.nsIConsoleService
-		);
-		s.logStringMessage(m);
-	}
-	console.debug = function(){
-		console.log(dojo._toArray(arguments).join(" "));
-	}
-	// FIXME: what about the rest of the console.* methods? And is there any way to reach into firebug and log into it directly?
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/hostenv_rhino.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/hostenv_rhino.js
deleted file mode 100644
index be7ddba..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/hostenv_rhino.js
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-/*
-* Rhino host environment
-*/
-
-if(dojo.config["baseUrl"]){
-	dojo.baseUrl = dojo.config["baseUrl"];
-}else{
-	dojo.baseUrl = "./";
-}
-
-dojo.locale = dojo.locale || String(java.util.Locale.getDefault().toString().replace('_','-').toLowerCase());
-dojo._name = 'rhino';
-dojo.isRhino = true;
-
-if(typeof print == "function"){
-	console.debug = print;
-}
-
-if(!("byId" in dojo)){
-	dojo.byId = function(id, doc){
-		if(id && (typeof id == "string" || id instanceof String)){
-			if(!doc){ doc = document; }
-			return doc.getElementById(id);
-		}
-		return id; // assume it's a node
-	}
-}
-
-dojo._isLocalUrl = function(/*String*/ uri) {
-	// summary:
-	// 		determines if URI is local or not.
-
-	var local = (new java.io.File(uri)).exists();
-	if(!local){
-		var stream;
-		//Try remote URL. Allow this method to throw,
-		//but still do cleanup.
-		try{
-			// try it as a file first, URL second
-			stream = (new java.net.URL(uri)).openStream();
-			// close the stream so we don't leak resources
-			stream.close();
-		}finally{
-			if(stream && stream.close){
-				stream.close();
-			}
-		}
-	}
-	return local;
-}
-
-// see comments in spidermonkey loadUri
-dojo._loadUri = function(uri, cb){
-	try{
-		var local;
-		try{
-			local = dojo._isLocalUrl(uri);
-		}catch(e){
-			// no debug output; this failure just means the uri was not found.
-			return false;
-		}
-
-		//FIXME: Use Rhino 1.6 native readFile/readUrl if available?
-		if(cb){
-			var contents = (local ? readText : readUri)(uri, "UTF-8");
-
-			// patch up the input to eval until https://bugzilla.mozilla.org/show_bug.cgi?id=471005 is fixed.
-			if(!eval("'\u200f'").length){
-				contents = String(contents).replace(/[\u200E\u200F\u202A-\u202E]/g, function(match){ 
-					return "\\u" + match.charCodeAt(0).toString(16); 
-				})
-			}
-
-			cb(eval('('+contents+')'));
-		}else{
-			load(uri);
-		}
-		return true;
-	}catch(e){
-		console.debug("rhino load('" + uri + "') failed. Exception: " + e);
-		return false;
-	}
-}
-
-dojo.exit = function(exitcode){ 
-	quit(exitcode);
-}
-
-// reading a file from disk in Java is a humiliating experience by any measure.
-// Lets avoid that and just get the freaking text
-function readText(path, encoding){
-	encoding = encoding || "utf-8";
-	// NOTE: we intentionally avoid handling exceptions, since the caller will
-	// want to know
-	var jf = new java.io.File(path);
-	var is = new java.io.FileInputStream(jf);
-	return dj_readInputStream(is, encoding);
-}
-
-function readUri(uri, encoding){
-	var conn = (new java.net.URL(uri)).openConnection();
-	encoding = encoding || conn.getContentEncoding() || "utf-8";
-	var is = conn.getInputStream();
-	return dj_readInputStream(is, encoding);
-}
-
-function dj_readInputStream(is, encoding){
-	var input = new java.io.BufferedReader(new java.io.InputStreamReader(is, encoding));
-	try {
-		var sb = new java.lang.StringBuffer();
-		var line = "";
-		while((line = input.readLine()) !== null){
-			sb.append(line);
-			sb.append(java.lang.System.getProperty("line.separator"));
-		}
-		return sb.toString();
-	} finally {
-		input.close();
-	}
-}
-
-dojo._getText = function(/*URI*/ uri, /*Boolean*/ fail_ok){
-	// summary: Read the contents of the specified uri and return those contents.
-	// uri:
-	//		A relative or absolute uri.
-	// fail_ok:
-	//		Default false. If fail_ok and loading fails, return null
-	//		instead of throwing.
-	// returns: The response text. null is returned when there is a
-	//		failure and failure is okay (an exception otherwise)
-	try{
-		var local = dojo._isLocalUrl(uri);
-		var text = (local ? readText : readUri)(uri, "UTF-8");
-		if(text !== null){
-			//Force JavaScript string.
-			text += "";
-		}
-		return text;
-	}catch(e){
-		if(fail_ok){
-			return null;
-		}else{
-			throw e;
-		}
-	}
-}
-
-// summary:
-//		return the document object associated with the dojo.global
-dojo.doc = typeof document != "undefined" ? document : null;
-
-dojo.body = function(){
-	return document.body;	
-}
-
-// Supply setTimeout/clearTimeout implementations if they aren't already there
-// Note: this assumes that we define both if one is not provided... there might
-// be a better way to do this if there is a use case where one is defined but
-// not the other
-if(typeof setTimeout == "undefined" || typeof clearTimeout == "undefined"){
-	dojo._timeouts = [];
-	clearTimeout = function(idx){
-		if(!dojo._timeouts[idx]){ return; }
-		dojo._timeouts[idx].stop();
-	}
-
-	setTimeout = function(func, delay){
-		// summary: provides timed callbacks using Java threads
-
-		var def={
-			sleepTime:delay,
-			hasSlept:false,
-		
-			run:function(){
-				if(!this.hasSlept){
-					this.hasSlept=true;
-					java.lang.Thread.currentThread().sleep(this.sleepTime);
-				}
-				try{
-					func();
-				}catch(e){
-					console.debug("Error running setTimeout thread:" + e);
-				}
-			}
-		};
-	
-		var runnable = new java.lang.Runnable(def);
-		var thread = new java.lang.Thread(runnable);
-		thread.start();
-		return dojo._timeouts.push(thread)-1;
-	}
-}
-
-//Register any module paths set up in djConfig. Need to do this
-//in the hostenvs since hostenv_browser can read djConfig from a
-//script tag's attribute.
-if(dojo.config["modulePaths"]){
-	for(var param in dojo.config["modulePaths"]){
-		dojo.registerModulePath(param, dojo.config["modulePaths"][param]);
-	}
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/hostenv_spidermonkey.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/hostenv_spidermonkey.js
deleted file mode 100644
index 84cd2b2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/hostenv_spidermonkey.js
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-/*
- * SpiderMonkey host environment
- */
-
-if(dojo.config["baseUrl"]){
-	dojo.baseUrl = dojo.config["baseUrl"];
-}else{
-	dojo.baseUrl = "./";
-}
-
-dojo._name = 'spidermonkey';
-
-/*=====
-dojo.isSpidermonkey = {
-	// summary: Detect spidermonkey 
-};
-=====*/
-
-dojo.isSpidermonkey = true;
-dojo.exit = function(exitcode){ 
-	quit(exitcode); 
-}
-
-if(typeof print == "function"){
-	console.debug = print;
-}
-
-if(typeof line2pc == 'undefined'){
-	throw new Error("attempt to use SpiderMonkey host environment when no 'line2pc' global");
-}
-
-dojo._spidermonkeyCurrentFile = function(depth){
-	//	
-	//	This is a hack that determines the current script file by parsing a
-	//	generated stack trace (relying on the non-standard "stack" member variable
-	//	of the SpiderMonkey Error object).
-	//	
-	//	If param depth is passed in, it'll return the script file which is that far down
-	//	the stack, but that does require that you know how deep your stack is when you are
-	//	calling.
-	//	
-    var s = '';
-    try{
-		throw Error("whatever");
-	}catch(e){
-		s = e.stack;
-	}
-    // lines are like: bu_getCurrentScriptURI_spidermonkey("ScriptLoader.js")@burst/Runtime.js:101
-    var matches = s.match(/[^@]*\.js/gi);
-    if(!matches){ 
-		throw Error("could not parse stack string: '" + s + "'");
-	}
-    var fname = (typeof depth != 'undefined' && depth) ? matches[depth + 1] : matches[matches.length - 1];
-    if(!fname){ 
-		throw Error("could not find file name in stack string '" + s + "'");
-	}
-    //print("SpiderMonkeyRuntime got fname '" + fname + "' from stack string '" + s + "'");
-    return fname;
-}
-
-// print(dojo._spidermonkeyCurrentFile(0)); 
-
-dojo._loadUri = function(uri){
-	// spidermonkey load() evaluates the contents into the global scope (which
-	// is what we want).
-	// TODO: sigh, load() does not return a useful value. 
-	// Perhaps it is returning the value of the last thing evaluated?
-	var ok = load(uri);
-	// console.log("spidermonkey load(", uri, ") returned ", ok);
-	return 1;
-}
-
-//Register any module paths set up in djConfig. Need to do this
-//in the hostenvs since hostenv_browser can read djConfig from a
-//script tag's attribute.
-if(dojo.config["modulePaths"]){
-	for(var param in dojo.config["modulePaths"]){
-		dojo.registerModulePath(param, dojo.config["modulePaths"][param]);
-	}
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/loader.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/loader.js
deleted file mode 100644
index 1ace662..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/loader.js
+++ /dev/null
@@ -1,804 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo.foo"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.foo"] = true;
-/*
- * loader.js - A bootstrap module.  Runs before the hostenv_*.js file. Contains
- * all of the package loading methods.
- */
-
-(function(){
-	var d = dojo;
-
-	d.mixin(d, {
-		_loadedModules: {},
-		_inFlightCount: 0,
-		_hasResource: {},
-
-		_modulePrefixes: {
-			dojo: 	{	name: "dojo", value: "." },
-			// dojox: 	{	name: "dojox", value: "../dojox" },
-			// dijit: 	{	name: "dijit", value: "../dijit" },
-			doh: 	{	name: "doh", value: "../util/doh" },
-			tests: 	{	name: "tests", value: "tests" }
-		},
-
-		_moduleHasPrefix: function(/*String*/module){
-			// summary: checks to see if module has been established
-			var mp = d._modulePrefixes;
-			return !!(mp[module] && mp[module].value); // Boolean
-		},
-
-		_getModulePrefix: function(/*String*/module){
-			// summary: gets the prefix associated with module
-			var mp = d._modulePrefixes;
-			if(d._moduleHasPrefix(module)){
-				return mp[module].value; // String
-			}
-			return module; // String
-		},
-
-		_loadedUrls: [],
-
-		//WARNING: 
-		//		This variable is referenced by packages outside of bootstrap:
-		//		FloatingPane.js and undo/browser.js
-		_postLoad: false,
-		
-		//Egad! Lots of test files push on this directly instead of using dojo.addOnLoad.
-		_loaders: [],
-		_unloaders: [],
-		_loadNotifying: false
-	});
-
-
-		dojo._loadPath = function(/*String*/relpath, /*String?*/module, /*Function?*/cb){
-		// 	summary:
-		//		Load a Javascript module given a relative path
-		//
-		//	description:
-		//		Loads and interprets the script located at relpath, which is
-		//		relative to the script root directory.  If the script is found but
-		//		its interpretation causes a runtime exception, that exception is
-		//		not caught by us, so the caller will see it.  We return a true
-		//		value if and only if the script is found.
-		//
-		// relpath: 
-		//		A relative path to a script (no leading '/', and typically ending
-		//		in '.js').
-		// module: 
-		//		A module whose existance to check for after loading a path.  Can be
-		//		used to determine success or failure of the load.
-		// cb: 
-		//		a callback function to pass the result of evaluating the script
-
-		var uri = ((relpath.charAt(0) == '/' || relpath.match(/^\w+:/)) ? "" : d.baseUrl) + relpath;
-		try{
-			return !module ? d._loadUri(uri, cb) : d._loadUriAndCheck(uri, module, cb); // Boolean
-		}catch(e){
-			console.error(e);
-			return false; // Boolean
-		}
-	}
-
-	dojo._loadUri = function(/*String*/uri, /*Function?*/cb){
-		//	summary:
-		//		Loads JavaScript from a URI
-		//	description:
-		//		Reads the contents of the URI, and evaluates the contents.  This is
-		//		used to load modules as well as resource bundles. Returns true if
-		//		it succeeded. Returns false if the URI reading failed.  Throws if
-		//		the evaluation throws.
-		//	uri: a uri which points at the script to be loaded
-		//	cb: 
-		//		a callback function to process the result of evaluating the script
-		//		as an expression, typically used by the resource bundle loader to
-		//		load JSON-style resources
-
-		if(d._loadedUrls[uri]){
-			return true; // Boolean
-		}
-		d._inFlightCount++; // block addOnLoad calls that arrive while we're busy downloading
-		var contents = d._getText(uri, true);
-		if(contents){ // not 404, et al
-			d._loadedUrls[uri] = true;
-			d._loadedUrls.push(uri);
-			if(cb){
-				contents = '('+contents+')';
-			}else{
-				//Only do the scoping if no callback. If a callback is specified,
-				//it is most likely the i18n bundle stuff.
-				contents = d._scopePrefix + contents + d._scopeSuffix;
-			}
-			if(!d.isIE){ contents += "\r\n//@ sourceURL=" + uri; } // debugging assist for Firebug
-			var value = d["eval"](contents);
-			if(cb){ cb(value); }
-		}
-		// Check to see if we need to call _callLoaded() due to an addOnLoad() that arrived while we were busy downloading
-		if(--d._inFlightCount == 0 && d._postLoad && d._loaders.length){
-			// We shouldn't be allowed to get here but Firefox allows an event 
-			// (mouse, keybd, async xhrGet) to interrupt a synchronous xhrGet. 
-			// If the current script block contains multiple require() statements, then after each
-			// require() returns, inFlightCount == 0, but we want to hold the _callLoaded() until
-			// all require()s are done since the out-of-sequence addOnLoad() presumably needs them all.
-			// setTimeout allows the next require() to start (if needed), and then we check this again.
-			setTimeout(function(){ 
-				// If inFlightCount > 0, then multiple require()s are running sequentially and 
-				// the next require() started after setTimeout() was executed but before we got here.
-				if(d._inFlightCount == 0){ 
-					d._callLoaded();
-				}
-			}, 0);
-		}
-		return !!contents; // Boolean: contents? true : false
-	}
-	
-	// FIXME: probably need to add logging to this method
-	dojo._loadUriAndCheck = function(/*String*/uri, /*String*/moduleName, /*Function?*/cb){
-		// summary: calls loadUri then findModule and returns true if both succeed
-		var ok = false;
-		try{
-			ok = d._loadUri(uri, cb);
-		}catch(e){
-			console.error("failed loading " + uri + " with error: " + e);
-		}
-		return !!(ok && d._loadedModules[moduleName]); // Boolean
-	}
-
-	dojo.loaded = function(){
-		// summary:
-		//		signal fired when initial environment and package loading is
-		//		complete. You should use dojo.addOnLoad() instead of doing a 
-		//		direct dojo.connect() to this method in order to handle
-		//		initialization tasks that require the environment to be
-		//		initialized. In a browser host,	declarative widgets will 
-		//		be constructed when this function finishes runing.
-		d._loadNotifying = true;
-		d._postLoad = true;
-		var mll = d._loaders;
-
-		//Clear listeners so new ones can be added
-		//For other xdomain package loads after the initial load.
-		d._loaders = [];
-
-		for(var x = 0; x < mll.length; x++){
-			mll[x]();
-		}
-
-		d._loadNotifying = false;
-		
-		//Make sure nothing else got added to the onload queue
-		//after this first run. If something did, and we are not waiting for any
-		//more inflight resources, run again.
-		if(d._postLoad && d._inFlightCount == 0 && mll.length){
-			d._callLoaded();
-		}
-	}
-
-	dojo.unloaded = function(){
-		// summary:
-		//		signal fired by impending environment destruction. You should use
-		//		dojo.addOnUnload() instead of doing a direct dojo.connect() to this 
-		//		method to perform page/application cleanup methods. See 
-		//		dojo.addOnUnload for more info.
-		var mll = d._unloaders;
-		while(mll.length){
-			(mll.pop())();
-		}
-	}
-
-	d._onto = function(arr, obj, fn){
-		if(!fn){
-			arr.push(obj);
-		}else if(fn){
-			var func = (typeof fn == "string") ? obj[fn] : fn;
-			arr.push(function(){ func.call(obj); });
-		}
-	}
-
-	dojo.ready = dojo.addOnLoad = function(/*Object*/obj, /*String|Function?*/functionName){
-		// summary:
-		//		Registers a function to be triggered after the DOM and dojo.require() calls 
-		//		have finished loading.
-		//
-		// description:
-		//		Registers a function to be triggered after the DOM has finished
-		//		loading and `dojo.require` modules have loaded. Widgets declared in markup 
-		//		have been instantiated if `djConfig.parseOnLoad` is true when this fires. 
-		//
-		//		Images and CSS files may or may not have finished downloading when
-		//		the specified function is called.  (Note that widgets' CSS and HTML
-		//		code is guaranteed to be downloaded before said widgets are
-		//		instantiated, though including css resouces BEFORE any script elements
-		//		is highly recommended).
-		//
-		// example:
-		//	Register an anonymous function to run when everything is ready
-		//	|	dojo.addOnLoad(function(){ doStuff(); });
-		//
-		// example:
-		//	Register a function to run when everything is ready by pointer:
-		//	|	var init = function(){ doStuff(); }
-		//	|	dojo.addOnLoad(init);
-		//
-		// example:
-		//	Register a function to run scoped to `object`, either by name or anonymously:
-		//	|	dojo.addOnLoad(object, "functionName");
-		//	|	dojo.addOnLoad(object, function(){ doStuff(); });
-
-		d._onto(d._loaders, obj, functionName);
-
-		//Added for xdomain loading. dojo.addOnLoad is used to
-		//indicate callbacks after doing some dojo.require() statements.
-		//In the xdomain case, if all the requires are loaded (after initial
-		//page load), then immediately call any listeners.
-		if(d._postLoad && d._inFlightCount == 0 && !d._loadNotifying){
-			d._callLoaded();
-		}
-	}
-
-	//Support calling dojo.addOnLoad via djConfig.addOnLoad. Support all the
-	//call permutations of dojo.addOnLoad. Mainly useful when dojo is added
-	//to the page after the page has loaded.
-	var dca = d.config.addOnLoad;
-	if(dca){
-		d.addOnLoad[(dca instanceof Array ? "apply" : "call")](d, dca);
-	}
-
-	dojo._modulesLoaded = function(){
-		if(d._postLoad){ return; }
-		if(d._inFlightCount > 0){ 
-			console.warn("files still in flight!");
-			return;
-		}
-		d._callLoaded();
-	}
-
-	dojo._callLoaded = function(){
-
-		// The "object" check is for IE, and the other opera check fixes an
-		// issue in Opera where it could not find the body element in some
-		// widget test cases.  For 0.9, maybe route all browsers through the
-		// setTimeout (need protection still for non-browser environments
-		// though). This might also help the issue with FF 2.0 and freezing
-		// issues where we try to do sync xhr while background css images are
-		// being loaded (trac #2572)? Consider for 0.9.
-		if(typeof setTimeout == "object" || (d.config.useXDomain && d.isOpera)){
-			setTimeout(
-				d.isAIR ? function(){ d.loaded(); } : d._scopeName + ".loaded();",
-				0);
-		}else{
-			d.loaded();
-		}
-	}
-
-	dojo._getModuleSymbols = function(/*String*/modulename){
-		// summary:
-		//		Converts a module name in dotted JS notation to an array
-		//		representing the path in the source tree
-		var syms = modulename.split(".");
-		for(var i = syms.length; i>0; i--){
-			var parentModule = syms.slice(0, i).join(".");
-			if(i == 1 && !d._moduleHasPrefix(parentModule)){		
-				// Support default module directory (sibling of dojo) for top-level modules 
-				syms[0] = "../" + syms[0];
-			}else{
-				var parentModulePath = d._getModulePrefix(parentModule);
-				if(parentModulePath != parentModule){
-					syms.splice(0, i, parentModulePath);
-					break;
-				}
-			}
-		}
-		return syms; // Array
-	}
-
-	dojo._global_omit_module_check = false;
-
-	dojo.loadInit = function(/*Function*/init){
-		//	summary:
-		//		Executes a function that needs to be executed for the loader's dojo.requireIf
-		//		resolutions to work. This is needed mostly for the xdomain loader case where
-		//		a function needs to be executed to set up the possible values for a dojo.requireIf
-		//		call.
-		//	init:
-		//		a function reference. Executed immediately.
-		//	description: This function is mainly a marker for the xdomain loader to know parts of
-		//		code that needs be executed outside the function wrappper that is placed around modules.
-		//		The init function could be executed more than once, and it should make no assumptions
-		//		on what is loaded, or what modules are available. Only the functionality in Dojo Base
-		//		is allowed to be used. Avoid using this method. For a valid use case,
-		//		see the source for dojox.gfx.
-		init();
-	}
-
-	dojo._loadModule = dojo.require = function(/*String*/moduleName, /*Boolean?*/omitModuleCheck){
-		//	summary:
-		//		loads a Javascript module from the appropriate URI
-		//	moduleName:
-		//		module name to load, using periods for separators,
-		//		 e.g. "dojo.date.locale".  Module paths are de-referenced by dojo's
-		//		internal mapping of locations to names and are disambiguated by
-		//		longest prefix. See `dojo.registerModulePath()` for details on
-		//		registering new modules.
-		//	omitModuleCheck:
-		//		if `true`, omitModuleCheck skips the step of ensuring that the
-		//		loaded file actually defines the symbol it is referenced by.
-		//		For example if it called as `dojo.require("a.b.c")` and the
-		//		file located at `a/b/c.js` does not define an object `a.b.c`,
-		//		and exception will be throws whereas no exception is raised
-		//		when called as `dojo.require("a.b.c", true)`
-		//	description:
-		// 		Modules are loaded via dojo.require by using one of two loaders: the normal loader
-		// 		and the xdomain loader. The xdomain loader is used when dojo was built with a
-		// 		custom build that specified loader=xdomain and the module lives on a modulePath
-		// 		that is a whole URL, with protocol and a domain. The versions of Dojo that are on
-		// 		the Google and AOL CDNs use the xdomain loader.
-		// 
-		// 		If the module is loaded via the xdomain loader, it is an asynchronous load, since
-		// 		the module is added via a dynamically created script tag. This
-		// 		means that dojo.require() can return before the module has loaded. However, this 
-		// 		should only happen in the case where you do dojo.require calls in the top-level
-		// 		HTML page, or if you purposely avoid the loader checking for dojo.require
-		// 		dependencies in your module by using a syntax like dojo["require"] to load the module.
-		// 
-		// 		Sometimes it is useful to not have the loader detect the dojo.require calls in the
-		// 		module so that you can dynamically load the modules as a result of an action on the
-		// 		page, instead of right at module load time.
-		// 
-		// 		Also, for script blocks in an HTML page, the loader does not pre-process them, so
-		// 		it does not know to download the modules before the dojo.require calls occur.
-		// 
-		// 		So, in those two cases, when you want on-the-fly module loading or for script blocks
-		// 		in the HTML page, special care must be taken if the dojo.required code is loaded
-		// 		asynchronously. To make sure you can execute code that depends on the dojo.required
-		// 		modules, be sure to add the code that depends on the modules in a dojo.addOnLoad()
-		// 		callback. dojo.addOnLoad waits for all outstanding modules to finish loading before
-		// 		executing. Example:
-		// 
-		//	   	|	<script type="text/javascript">
-		//		|	dojo.require("foo");
-		//		|	dojo.require("bar");
-		//	   	|	dojo.addOnLoad(function(){
-		//	   	|		//you can now safely do something with foo and bar
-		//	   	|	});
-		//	   	|	</script>
-		// 
-		// 		This type of syntax works with both xdomain and normal loaders, so it is good
-		// 		practice to always use this idiom for on-the-fly code loading and in HTML script
-		// 		blocks. If at some point you change loaders and where the code is loaded from,
-		// 		it will all still work.
-		// 
-		// 		More on how dojo.require
-		//		`dojo.require("A.B")` first checks to see if symbol A.B is
-		//		defined. If it is, it is simply returned (nothing to do).
-		//	
-		//		If it is not defined, it will look for `A/B.js` in the script root
-		//		directory.
-		//	
-		//		`dojo.require` throws an excpetion if it cannot find a file
-		//		to load, or if the symbol `A.B` is not defined after loading.
-		//	
-		//		It returns the object `A.B`, but note the caveats above about on-the-fly loading and
-		// 		HTML script blocks when the xdomain loader is loading a module.
-		//	
-		//		`dojo.require()` does nothing about importing symbols into
-		//		the current namespace.  It is presumed that the caller will
-		//		take care of that. For example, to import all symbols into a
-		//		local block, you might write:
-		//	
-		//		|	with (dojo.require("A.B")) {
-		//		|		...
-		//		|	}
-		//	
-		//		And to import just the leaf symbol to a local variable:
-		//	
-		//		|	var B = dojo.require("A.B");
-		//	   	|	...
-		//	returns: the required namespace object
-		omitModuleCheck = d._global_omit_module_check || omitModuleCheck;
-
-		//Check if it is already loaded.
-		var module = d._loadedModules[moduleName];
-		if(module){
-			return module;
-		}
-
-		// convert periods to slashes
-		var relpath = d._getModuleSymbols(moduleName).join("/") + '.js';
-
-		var modArg = !omitModuleCheck ? moduleName : null;
-		var ok = d._loadPath(relpath, modArg);
-
-		if(!ok && !omitModuleCheck){
-			throw new Error("Could not load '" + moduleName + "'; last tried '" + relpath + "'");
-		}
-
-		// check that the symbol was defined
-		// Don't bother if we're doing xdomain (asynchronous) loading.
-		if(!omitModuleCheck && !d._isXDomain){
-			// pass in false so we can give better error
-			module = d._loadedModules[moduleName];
-			if(!module){
-				throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); 
-			}
-		}
-
-		return module;
-	}
-
-	dojo.provide = function(/*String*/ resourceName){
-		//	summary:
-		//		Register a resource with the package system. Works in conjunction with `dojo.require`
-		//
-		//	description:
-		//		Each javascript source file is called a resource.  When a
-		//		resource is loaded by the browser, `dojo.provide()` registers
-		//		that it has been loaded.
-		//
-		//		Each javascript source file must have at least one
-		//		`dojo.provide()` call at the top of the file, corresponding to
-		//		the file name.  For example, `js/dojo/foo.js` must have
-		//		`dojo.provide("dojo.foo");` before any calls to
-		//		`dojo.require()` are made.
-		//	
-		//		For backwards compatibility reasons, in addition to registering
-		//		the resource, `dojo.provide()` also ensures that the javascript
-		//		object for the module exists.  For example,
-		//		`dojo.provide("dojox.data.FlickrStore")`, in addition to
-		//		registering that `FlickrStore.js` is a resource for the
-		//		`dojox.data` module, will ensure that the `dojox.data`
-		//		javascript object exists, so that calls like 
-		//		`dojo.data.foo = function(){ ... }` don't fail.
-		//
-		//		In the case of a build where multiple javascript source files
-		//		are combined into one bigger file (similar to a .lib or .jar
-		//		file), that file may contain multiple dojo.provide() calls, to
-		//		note that it includes multiple resources.
-		//
-		// resourceName: String
-		//		A dot-sperated string identifying a resource. 
-		//
-		// example:
-		//	Safely create a `my` object, and make dojo.require("my.CustomModule") work
-		//	|	dojo.provide("my.CustomModule"); 
-
-		//Make sure we have a string.
-		resourceName = resourceName + "";
-		return (d._loadedModules[resourceName] = d.getObject(resourceName, true)); // Object
-	}
-
-	//Start of old bootstrap2:
-
-	dojo.platformRequire = function(/*Object*/modMap){
-		//	summary:
-		//		require one or more modules based on which host environment
-		//		Dojo is currently operating in
-		//	description:
-		//		This method takes a "map" of arrays which one can use to
-		//		optionally load dojo modules. The map is indexed by the
-		//		possible dojo.name_ values, with two additional values:
-		//		"default" and "common". The items in the "default" array will
-		//		be loaded if none of the other items have been choosen based on
-		//		dojo.name_, set by your host environment. The items in the
-		//		"common" array will *always* be loaded, regardless of which
-		//		list is chosen.
-		//	example:
-		//		|	dojo.platformRequire({
-		//		|		browser: [
-		//		|			"foo.sample", // simple module
-		//		|			"foo.test",
-		//		|			["foo.bar.baz", true] // skip object check in _loadModule (dojo.require)
-		//		|		],
-		//		|		default: [ "foo.sample._base" ],
-		//		|		common: [ "important.module.common" ]
-		//		|	});
-
-		var common = modMap.common || [];
-		var result = common.concat(modMap[d._name] || modMap["default"] || []);
-
-		for(var x=0; x<result.length; x++){
-			var curr = result[x];
-			if(curr.constructor == Array){
-				d._loadModule.apply(d, curr);
-			}else{
-				d._loadModule(curr);
-			}
-		}
-	}
-
-	dojo.requireIf = function(/*Boolean*/ condition, /*String*/ resourceName){
-		// summary:
-		//		If the condition is true then call `dojo.require()` for the specified
-		//		resource
-		//
-		// example:
-		//	|	dojo.requireIf(dojo.isBrowser, "my.special.Module");
-		
-		if(condition === true){
-			// FIXME: why do we support chained require()'s here? does the build system?
-			var args = [];
-			for(var i = 1; i < arguments.length; i++){ 
-				args.push(arguments[i]);
-			}
-			d.require.apply(d, args);
-		}
-	}
-
-	dojo.requireAfterIf = d.requireIf;
-
-	dojo.registerModulePath = function(/*String*/module, /*String*/prefix){
-		//	summary: 
-		//		Maps a module name to a path
-		//	description: 
-		//		An unregistered module is given the default path of ../[module],
-		//		relative to Dojo root. For example, module acme is mapped to
-		//		../acme.  If you want to use a different module name, use
-		//		dojo.registerModulePath. 
-		//	example:
-		//		If your dojo.js is located at this location in the web root:
-		//	|	/myapp/js/dojo/dojo/dojo.js
-		//		and your modules are located at:
-		//	|	/myapp/js/foo/bar.js
-		//	|	/myapp/js/foo/baz.js
-		//	|	/myapp/js/foo/thud/xyzzy.js
-		//		Your application can tell Dojo to locate the "foo" namespace by calling:
-		//	|	dojo.registerModulePath("foo", "../../foo");
-		//		At which point you can then use dojo.require() to load the
-		//		modules (assuming they provide() the same things which are
-		//		required). The full code might be:
-		//	|	<script type="text/javascript" 
-		//	|		src="/myapp/js/dojo/dojo/dojo.js"></script>
-		//	|	<script type="text/javascript">
-		//	|		dojo.registerModulePath("foo", "../../foo");
-		//	|		dojo.require("foo.bar");
-		//	|		dojo.require("foo.baz");
-		//	|		dojo.require("foo.thud.xyzzy");
-		//	|	</script>
-		d._modulePrefixes[module] = { name: module, value: prefix };
-	}
-
-	dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){
-		// summary:
-		//		Declares translated resources and loads them if necessary, in the
-		//		same style as dojo.require.  Contents of the resource bundle are
-		//		typically strings, but may be any name/value pair, represented in
-		//		JSON format.  See also `dojo.i18n.getLocalization`.
-		//
-		// description:
-		//		Load translated resource bundles provided underneath the "nls"
-		//		directory within a package.  Translated resources may be located in
-		//		different packages throughout the source tree.  
-		//
-		//		Each directory is named for a locale as specified by RFC 3066,
-		//		(http://www.ietf.org/rfc/rfc3066.txt), normalized in lowercase.
-		//		Note that the two bundles in the example do not define all the
-		//		same variants.  For a given locale, bundles will be loaded for
-		//		that locale and all more general locales above it, including a
-		//		fallback at the root directory.  For example, a declaration for
-		//		the "de-at" locale will first load `nls/de-at/bundleone.js`,
-		//		then `nls/de/bundleone.js` and finally `nls/bundleone.js`.  The
-		//		data will be flattened into a single Object so that lookups
-		//		will follow this cascading pattern.  An optional build step can
-		//		preload the bundles to avoid data redundancy and the multiple
-		//		network hits normally required to load these resources.
-		//
-		// moduleName: 
-		//		name of the package containing the "nls" directory in which the
-		//		bundle is found
-		//
-		// bundleName: 
-		//		bundle name, i.e. the filename without the '.js' suffix. Using "nls" as a
-		//		a bundle name is not supported, since "nls" is the name of the folder
-		//		that holds bundles. Using "nls" as the bundle name will cause problems
-		//		with the custom build.
-		//
-		// locale: 
-		//		the locale to load (optional)  By default, the browser's user
-		//		locale as defined by dojo.locale
-		//
-		// availableFlatLocales: 
-		//		A comma-separated list of the available, flattened locales for this
-		//		bundle. This argument should only be set by the build process.
-		//
-		//	example:
-		//		A particular widget may define one or more resource bundles,
-		//		structured in a program as follows, where moduleName is
-		//		mycode.mywidget and bundleNames available include bundleone and
-		//		bundletwo:
-		//	|		...
-		//	|	mycode/
-		//	|		mywidget/
-		//	|			nls/
-		//	|				bundleone.js (the fallback translation, English in this example)
-		//	|				bundletwo.js (also a fallback translation)
-		//	|				de/
-		//	|					bundleone.js
-		//	|					bundletwo.js
-		//	|				de-at/
-		//	|					bundleone.js
-		//	|				en/
-		//	|					(empty; use the fallback translation)
-		//	|				en-us/
-		//	|					bundleone.js
-		//	|				en-gb/
-		//	|					bundleone.js
-		//	|				es/
-		//	|					bundleone.js
-		//	|					bundletwo.js
-		//	|				  ...etc
-		//	|				...
-		//
-
-		d.require("dojo.i18n");
-		d.i18n._requireLocalization.apply(d.hostenv, arguments);
-	};
-
-
-	var ore = new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"),
-		ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$");
-
-	dojo._Url = function(/*dojo._Url|String...*/){
-		// summary: 
-		//		Constructor to create an object representing a URL.
-		//		It is marked as private, since we might consider removing
-		//		or simplifying it.
-		// description: 
-		//		Each argument is evaluated in order relative to the next until
-		//		a canonical uri is produced. To get an absolute Uri relative to
-		//		the current document use:
-		//      	new dojo._Url(document.baseURI, url)
-
-		var n = null,
-			_a = arguments,
-			uri = [_a[0]];
-		// resolve uri components relative to each other
-		for(var i = 1; i<_a.length; i++){
-			if(!_a[i]){ continue; }
-
-			// Safari doesn't support this.constructor so we have to be explicit
-			// FIXME: Tracked (and fixed) in Webkit bug 3537.
-			//		http://bugs.webkit.org/show_bug.cgi?id=3537
-			var relobj = new d._Url(_a[i]+""),
-				uriobj = new d._Url(uri[0]+"");
-
-			if(
-				relobj.path == "" &&
-				!relobj.scheme &&
-				!relobj.authority &&
-				!relobj.query
-			){
-				if(relobj.fragment != n){
-					uriobj.fragment = relobj.fragment;
-				}
-				relobj = uriobj;
-			}else if(!relobj.scheme){
-				relobj.scheme = uriobj.scheme;
-
-				if(!relobj.authority){
-					relobj.authority = uriobj.authority;
-
-					if(relobj.path.charAt(0) != "/"){
-						var path = uriobj.path.substring(0,
-							uriobj.path.lastIndexOf("/") + 1) + relobj.path;
-
-						var segs = path.split("/");
-						for(var j = 0; j < segs.length; j++){
-							if(segs[j] == "."){
-								// flatten "./" references
-								if(j == segs.length - 1){
-									segs[j] = "";
-								}else{
-									segs.splice(j, 1);
-									j--;
-								}
-							}else if(j > 0 && !(j == 1 && segs[0] == "") &&
-								segs[j] == ".." && segs[j-1] != ".."){
-								// flatten "../" references
-								if(j == (segs.length - 1)){
-									segs.splice(j, 1);
-									segs[j - 1] = "";
-								}else{
-									segs.splice(j - 1, 2);
-									j -= 2;
-								}
-							}
-						}
-						relobj.path = segs.join("/");
-					}
-				}
-			}
-
-			uri = [];
-			if(relobj.scheme){ 
-				uri.push(relobj.scheme, ":");
-			}
-			if(relobj.authority){
-				uri.push("//", relobj.authority);
-			}
-			uri.push(relobj.path);
-			if(relobj.query){
-				uri.push("?", relobj.query);
-			}
-			if(relobj.fragment){
-				uri.push("#", relobj.fragment);
-			}
-		}
-
-		this.uri = uri.join("");
-
-		// break the uri into its main components
-		var r = this.uri.match(ore);
-
-		this.scheme = r[2] || (r[1] ? "" : n);
-		this.authority = r[4] || (r[3] ? "" : n);
-		this.path = r[5]; // can never be undefined
-		this.query = r[7] || (r[6] ? "" : n);
-		this.fragment  = r[9] || (r[8] ? "" : n);
-
-		if(this.authority != n){
-			// server based naming authority
-			r = this.authority.match(ire);
-
-			this.user = r[3] || n;
-			this.password = r[4] || n;
-			this.host = r[6] || r[7]; // ipv6 || ipv4
-			this.port = r[9] || n;
-		}
-	}
-
-	dojo._Url.prototype.toString = function(){ return this.uri; };
-
-	dojo.moduleUrl = function(/*String*/module, /*dojo._Url||String*/url){
-		//	summary: 
-		//		Returns a `dojo._Url` object relative to a module.
-		//	example:
-		//	|	var pngPath = dojo.moduleUrl("acme","images/small.png");
-		//	|	console.dir(pngPath); // list the object properties
-		//	|	// create an image and set it's source to pngPath's value:
-		//	|	var img = document.createElement("img");
-		// 	|	// NOTE: we assign the string representation of the url object
-		//	|	img.src = pngPath.toString(); 
-		//	|	// add our image to the document
-		//	|	dojo.body().appendChild(img);
-		//	example: 
-		//		you may de-reference as far as you like down the package
-		//		hierarchy.  This is sometimes handy to avoid lenghty relative
-		//		urls or for building portable sub-packages. In this example,
-		//		the `acme.widget` and `acme.util` directories may be located
-		//		under different roots (see `dojo.registerModulePath`) but the
-		//		the modules which reference them can be unaware of their
-		//		relative locations on the filesystem:
-		//	|	// somewhere in a configuration block
-		//	|	dojo.registerModulePath("acme.widget", "../../acme/widget");
-		//	|	dojo.registerModulePath("acme.util", "../../util");
-		//	|	
-		//	|	// ...
-		//	|	
-		//	|	// code in a module using acme resources
-		//	|	var tmpltPath = dojo.moduleUrl("acme.widget","templates/template.html");
-		//	|	var dataPath = dojo.moduleUrl("acme.util","resources/data.json");
-
-		var loc = d._getModuleSymbols(module).join('/');
-		if(!loc){ return null; }
-		if(loc.lastIndexOf("/") != loc.length-1){
-			loc += "/";
-		}
-		
-		//If the path is an absolute path (starts with a / or is on another
-		//domain/xdomain) then don't add the baseUrl.
-		var colonIndex = loc.indexOf(":");
-		if(loc.charAt(0) != "/" && (colonIndex == -1 || colonIndex > loc.indexOf("/"))){
-			loc = d.baseUrl + loc;
-		}
-
-		return new d._Url(loc, url); // dojo._Url
-	}
-})();
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/loader_debug.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/loader_debug.js
deleted file mode 100644
index 10decbe..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/loader_debug.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo._base._loader.loader_debug"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._base._loader.loader_debug"] = true;
-dojo.provide("dojo._base._loader.loader_debug");
-
-//Override dojo.provide, so we can trigger the next
-//script tag for the next local module. We can only add one
-//at a time because there are browsers that execute script tags
-//in the order that the code is received, and not in the DOM order.
-dojo.nonDebugProvide = dojo.provide;
-
-dojo.provide = function(resourceName){
-	var dbgQueue = dojo["_xdDebugQueue"];
-	if(dbgQueue && dbgQueue.length > 0 && resourceName == dbgQueue["currentResourceName"]){
-		//Set a timeout so the module can be executed into existence. Normally the
-		//dojo.provide call in a module is the first line. Don't want to risk attaching
-		//another script tag until the current one finishes executing.
-		if(dojo.isAIR){
-			window.setTimeout(function(){dojo._xdDebugFileLoaded(resourceName);}, 1);
-		}else{
-			window.setTimeout(dojo._scopeName + "._xdDebugFileLoaded('" + resourceName + "')", 1);
-		}
-	}
-
-	return dojo.nonDebugProvide.apply(dojo, arguments);
-}
-
-dojo._xdDebugFileLoaded = function(resourceName){
-
-	if(!dojo._xdDebugScopeChecked){
-		//If using a scoped dojo, we need to expose dojo as a real global
-		//for the debugAtAllCosts stuff to work.
-		if(dojo._scopeName != "dojo"){
-			window.dojo = window[dojo.config.scopeMap[0][1]];
-			window.dijit = window[dojo.config.scopeMap[1][1]];
-			window.dojox = window[dojo.config.scopeMap[2][1]];
-		}
-
-		dojo._xdDebugScopeChecked = true;
-	}
-	
-	var dbgQueue = dojo._xdDebugQueue;
-	
-	if(resourceName && resourceName == dbgQueue.currentResourceName){
-		dbgQueue.shift();
-	}
-
-	if(dbgQueue.length == 0){
-		//Check for more modules that need debug loading.
-		//dojo._xdWatchInFlight will add more things to the debug
-		//queue if they just recently loaded but it was not detected
-		//between the dojo._xdWatchInFlight intervals.
-		dojo._xdWatchInFlight();
-	}
-
-	if(dbgQueue.length == 0){
-		dbgQueue.currentResourceName = null;
-
-		//Make sure nothing else is in flight.
-		//If something is still in flight, then it still
-		//needs to be added to debug queue after it loads.
-		for(var param in dojo._xdInFlight){
-			if(dojo._xdInFlight[param] === true){
-				return;
-			}
-		}
-
-		dojo._xdNotifyLoaded();
-	}else{
-		if(resourceName == dbgQueue.currentResourceName){
-			dbgQueue.currentResourceName = dbgQueue[0].resourceName;
-			var element = document.createElement("script");
-			element.type = "text/javascript";
-			element.src = dbgQueue[0].resourcePath;
-			document.getElementsByTagName("head")[0].appendChild(element);
-		}
-	}
-}
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/loader_xd.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/loader_xd.js
deleted file mode 100644
index 6fabe80..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/_loader/loader_xd.js
+++ /dev/null
@@ -1,723 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo._base._loader.loader_xd"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._base._loader.loader_xd"] = true;
-//Cross-domain resource loader.
-dojo.provide("dojo._base._loader.loader_xd");
-
-dojo._xdReset = function(){
-	//summary: Internal xd loader function. Resets the xd state.
-
-	//This flag indicates where or not we have crossed into xdomain territory. Once any resource says
-	//it is cross domain, then the rest of the resources have to be treated as xdomain because we need
-	//to evaluate resources in order. If there is a xdomain resource followed by a xhr resource, we can't load
-	//the xhr resource until the one before it finishes loading. The text of the xhr resource will be converted
-	//to match the format for a xd resource and put in the xd load queue.
-	dojo._isXDomain = dojo.config.useXDomain || false;
-
-	dojo._xdClearInterval();
-	dojo._xdInFlight = {};
-	dojo._xdOrderedReqs = [];
-	dojo._xdDepMap = {};
-	dojo._xdContents = [];
-	dojo._xdDefList = [];
-}
-
-dojo._xdClearInterval = function(){
-	//summary: Internal xd loader function.
-	//Clears the interval timer used to check on the
-	//status of in-flight xd module resource requests.
-	if(dojo._xdTimer){
-		clearInterval(dojo._xdTimer);
-		dojo._xdTimer = 0;
-	}
-}
-
-
-//Call reset immediately to set the state.
-dojo._xdReset();
-
-dojo._xdCreateResource = function(/*String*/contents, /*String*/resourceName, /*String*/resourcePath){
-	//summary: Internal xd loader function. Creates an xd module source given an
-	//non-xd module contents.
-
-	//Remove comments. Not perfect, but good enough for dependency resolution.
-	var depContents = contents.replace(/(\/\*([\s\S]*?)\*\/|\/\/(.*)$)/mg , "");
-
-	//Find dependencies.
-	var deps = [];
-    var depRegExp = /dojo.(require|requireIf|provide|requireAfterIf|platformRequire|requireLocalization)\s*\(([\w\W]*?)\)/mg;
-    var match;
-	while((match = depRegExp.exec(depContents)) != null){
-		if(match[1] == "requireLocalization"){
-			//Need to load the local bundles asap, since they are not
-			//part of the list of modules watched for loading.
-			eval(match[0]);
-		}else{
-			deps.push('"' + match[1] + '", ' + match[2]);
-		}
-	}
-
-	//Create resource object and the call to _xdResourceLoaded.
-	var output = [];
-	output.push(dojo._scopeName + "._xdResourceLoaded(function(" + dojo._scopePrefixArgs + "){\n");
-
-	//See if there are any dojo.loadInit calls
-	var loadInitCalls = dojo._xdExtractLoadInits(contents);
-	if(loadInitCalls){
-		//Adjust fileContents since extractLoadInits removed something.
-		contents = loadInitCalls[0];
-		
-		//Add any loadInit calls to the top of the xd file.
-		for(var i = 1; i < loadInitCalls.length; i++){
-			output.push(loadInitCalls[i] + ";\n");
-		}
-	}
-
-	output.push("return {");
-
-	//Add dependencies
-	if(deps.length > 0){
-		output.push("depends: [");
-		for(i = 0; i < deps.length; i++){
-			if(i > 0){
-				output.push(",\n");
-			}
-			output.push("[" + deps[i] + "]");
-		}
-		output.push("],");
-	}
-
-	//Add the contents of the file inside a function.
-	//Pass in scope arguments so we can support multiple versions of the
-	//same module on a page.
-	output.push("\ndefineResource: function(" + dojo._scopePrefixArgs + "){");
-
-	//Don't put in the contents in the debugAtAllCosts case
-	//since the contents may have syntax errors. Let those
-	//get pushed up when the script tags are added to the page
-	//in the debugAtAllCosts case.
-	if(!dojo.config["debugAtAllCosts"] || resourceName == "dojo._base._loader.loader_debug"){
-		output.push(contents);
-	}
-	//Add isLocal property so we know if we have to do something different
-	//in debugAtAllCosts situations.
-	output.push("\n}, resourceName: '" + resourceName + "', resourcePath: '" + resourcePath + "'};});");
-	
-	return output.join(""); //String
-}
-
-dojo._xdExtractLoadInits = function(/*String*/fileContents){
-	//Extracts
-	var regexp = /dojo.loadInit\s*\(/g;
-	regexp.lastIndex = 0;
-
-	var parenRe = /[\(\)]/g;
-	parenRe.lastIndex = 0;
-
-	var results = [];
-	var matches;
-	while((matches = regexp.exec(fileContents))){
-		//Find end of the call by finding the matching end paren
-		parenRe.lastIndex = regexp.lastIndex;
-		var matchCount = 1;
-		var parenMatch;
-		while((parenMatch = parenRe.exec(fileContents))){
-			if(parenMatch[0] == ")"){
-				matchCount -= 1;
-			}else{
-				matchCount += 1;
-			}
-			if(matchCount == 0){
-				break;
-			}
-		}
-		
-		if(matchCount != 0){
-			throw "unmatched paren around character " + parenRe.lastIndex + " in: " + fileContents;
-		}
-
-		//Put the master matching string in the results.
-		var startIndex = regexp.lastIndex - matches[0].length;
-		results.push(fileContents.substring(startIndex, parenRe.lastIndex));
-
-		//Remove the matching section.
-		var remLength = parenRe.lastIndex - startIndex;
-		fileContents = fileContents.substring(0, startIndex) + fileContents.substring(parenRe.lastIndex, fileContents.length);
-
-		//Move the master regexp past the last matching paren point.
-		regexp.lastIndex = parenRe.lastIndex - remLength;
-
-		regexp.lastIndex = parenRe.lastIndex;
-	}
-
-	if(results.length > 0){
-		results.unshift(fileContents);
-	}
-
-	return (results.length ? results : null);
-}
-
-dojo._xdIsXDomainPath = function(/*string*/relpath) {
-    //summary: Figure out whether the path is local or x-domain
-	//If there is a colon before the first / then, we have a URL with a protocol.
-    
-	var colonIndex = relpath.indexOf(":");
-	var slashIndex = relpath.indexOf("/");
-
-	if(colonIndex > 0 && colonIndex < slashIndex){
-		return true;
-	}else{
-		//Is the base script URI-based URL a cross domain URL?
-		//If so, then the relpath will be evaluated relative to
-		//baseUrl, and therefore qualify as xdomain.
-		//Only treat it as xdomain if the page does not have a
-		//host (file:// url) or if the baseUrl does not match the
-		//current window's domain.
-		var url = dojo.baseUrl;
-		colonIndex = url.indexOf(":");
-		slashIndex = url.indexOf("/");
-		if(colonIndex > 0 && colonIndex < slashIndex && (!location.host || url.indexOf("http://" + location.host) != 0)){
-			return true;
-		}
-	}
-    return false;     
-}
-
-dojo._loadPath = function(/*String*/relpath, /*String?*/module, /*Function?*/cb){
-	//summary: Internal xd loader function. Overrides loadPath() from loader.js.
-	//xd loading requires slightly different behavior from loadPath().
-
-	var currentIsXDomain = dojo._xdIsXDomainPath(relpath);
-    dojo._isXDomain |= currentIsXDomain;
-
-	var uri = ((relpath.charAt(0) == '/' || relpath.match(/^\w+:/)) ? "" : dojo.baseUrl) + relpath;
-
-	try{
-		return ((!module || dojo._isXDomain) ? dojo._loadUri(uri, cb, currentIsXDomain, module) : dojo._loadUriAndCheck(uri, module, cb)); //Boolean
-	}catch(e){
-		console.error(e);
-		return false; //Boolean
-	}
-}
-
-dojo._xdCharSet = "utf-8";
-
-dojo._loadUri = function(/*String*/uri, /*Function?*/cb, /*boolean*/currentIsXDomain, /*String?*/module){
-	//summary: Internal xd loader function. Overrides loadUri() from loader.js.
-	//		xd loading requires slightly different behavior from loadPath().
-	//description: Wanted to override getText(), but it is used by
-	//		the widget code in too many, synchronous ways right now.
-	if(dojo._loadedUrls[uri]){
-		return 1; //Boolean
-	}
-
-	//Add the module (resource) to the list of modules.
-	//Only do this work if we have a modlue name. Otherwise, 
-	//it is a non-xd i18n bundle, which can load immediately and does not 
-	//need to be tracked. Also, don't track dojo.i18n, since it is a prerequisite
-	//and will be loaded correctly if we load it right away: it has no dependencies.
-	if(dojo._isXDomain && module && module != "dojo.i18n"){
-		dojo._xdOrderedReqs.push(module);
-
-		//Add to waiting resources if it is an xdomain resource.
-		//Don't add non-xdomain i18n bundles, those get evaled immediately.
-		if(currentIsXDomain || uri.indexOf("/nls/") == -1){
-			dojo._xdInFlight[module] = true;
-
-			//Increment inFlightCount
-			//This will stop the modulesLoaded from firing all the way.
-			dojo._inFlightCount++;
-		}
-
-		//Start timer
-		if(!dojo._xdTimer){
-			if(dojo.isAIR){
-				dojo._xdTimer = setInterval(function(){dojo._xdWatchInFlight();}, 100);
-			}else{
-				dojo._xdTimer = setInterval(dojo._scopeName + "._xdWatchInFlight();", 100);
-			}
-		}
-		dojo._xdStartTime = (new Date()).getTime();
-	}
-
-	if (currentIsXDomain){
-		//Fix name to be a .xd.fileextension name.
-		var lastIndex = uri.lastIndexOf('.');
-		if(lastIndex <= 0){
-			lastIndex = uri.length - 1;
-		}
-
-		var xdUri = uri.substring(0, lastIndex) + ".xd";
-		if(lastIndex != uri.length - 1){
-			xdUri += uri.substring(lastIndex, uri.length);
-		}
-
-		if (dojo.isAIR){
-			xdUri = xdUri.replace("app:/", "/");
-		}
-
-		//Add to script src
-		var element = document.createElement("script");
-		element.type = "text/javascript";
-		if(dojo._xdCharSet){
-			element.charset = dojo._xdCharSet;
-		}
-		element.src = xdUri;
-		if(!dojo.headElement){
-			dojo._headElement = document.getElementsByTagName("head")[0];
-
-			//Head element may not exist, particularly in html
-			//html 4 or tag soup cases where the page does not
-			//have a head tag in it. Use html element, since that will exist.
-			//Seems to be an issue mostly with Opera 9 and to lesser extent Safari 2
-			if(!dojo._headElement){
-				dojo._headElement = document.getElementsByTagName("html")[0];
-			}
-		}
-		dojo._headElement.appendChild(element);
-	}else{
-		var contents = dojo._getText(uri, null, true);
-		if(contents == null){ return 0; /*boolean*/}
-		
-		//If this is not xdomain, or if loading a i18n resource bundle, then send it down
-		//the normal eval/callback path.
-		if(dojo._isXDomain
-			&& uri.indexOf("/nls/") == -1
-			&& module != "dojo.i18n"){
-			var res = dojo._xdCreateResource(contents, module, uri);
-			dojo.eval(res);
-		}else{
-			if(cb){
-				contents = '('+contents+')';
-			}else{
-				//Only do the scoping if no callback. If a callback is specified,
-				//it is most likely the i18n bundle stuff.
-				contents = dojo._scopePrefix + contents + dojo._scopeSuffix;
-			}
-			var value = dojo["eval"](contents+"\r\n//@ sourceURL="+uri);
-			if(cb){
-				cb(value);
-			}
-		}
-	}
-
-	//These steps are done in the non-xd loader version of this function.
-	//Maintain these steps to fit in with the existing system.
-	dojo._loadedUrls[uri] = true;
-	dojo._loadedUrls.push(uri);
-	return true; //Boolean
-}
-
-dojo._xdResourceLoaded = function(/*Object*/res){
-	//summary: Internal xd loader function. Called by an xd module resource when
-	//it has been loaded via a script tag.
-	
-	//Evaluate the function with scopeArgs for multiversion support.
-	res = res.apply(dojo.global, dojo._scopeArgs);
-
-	//Work through dependencies.
-	var deps = res.depends;
-	var requireList = null;
-	var requireAfterList = null;
-	var provideList = [];
-	if(deps && deps.length > 0){
-		var dep = null;
-		var insertHint = 0;
-		var attachedResource = false;
-		for(var i = 0; i < deps.length; i++){
-			dep = deps[i];
-
-			//Look for specific dependency indicators.
-			if (dep[0] == "provide"){
-				provideList.push(dep[1]);
-			}else{
-				if(!requireList){
-					requireList = [];
-				}
-				if(!requireAfterList){
-					requireAfterList = [];
-				}
-
-				var unpackedDeps = dojo._xdUnpackDependency(dep);
-				if(unpackedDeps.requires){
-					requireList = requireList.concat(unpackedDeps.requires);
-				}
-				if(unpackedDeps.requiresAfter){
-					requireAfterList = requireAfterList.concat(unpackedDeps.requiresAfter);
-				}
-			}
-
-			//Call the dependency indicator to allow for the normal dojo setup.
-			//Only allow for one dot reference, for the i18n._preloadLocalizations calls
-			//(and maybe future, one-dot things).
-			var depType = dep[0];
-			var objPath = depType.split(".");
-			if(objPath.length == 2){
-				dojo[objPath[0]][objPath[1]].apply(dojo[objPath[0]], dep.slice(1));
-			}else{
-				dojo[depType].apply(dojo, dep.slice(1));
-			}
-		}
-
-
-		//If loading the debugAtAllCosts module, eval it right away since we need
-		//its functions to properly load the other modules.
-		if(provideList.length == 1 && provideList[0] == "dojo._base._loader.loader_debug"){
-			res.defineResource(dojo);
-		}else{
-			//Save off the resource contents for definition later.
-			var contentIndex = dojo._xdContents.push({
-					content: res.defineResource,
-					resourceName: res["resourceName"],
-					resourcePath: res["resourcePath"],
-					isDefined: false
-				}) - 1;
-	
-			//Add provide/requires to dependency map.
-			for(i = 0; i < provideList.length; i++){
-				dojo._xdDepMap[provideList[i]] = { requires: requireList, requiresAfter: requireAfterList, contentIndex: contentIndex };
-			}
-		}
-
-		//Now update the inflight status for any provided resources in this loaded resource.
-		//Do this at the very end (in a *separate* for loop) to avoid shutting down the 
-		//inflight timer check too soon.
-		for(i = 0; i < provideList.length; i++){
-			dojo._xdInFlight[provideList[i]] = false;
-		}
-	}
-}
-
-dojo._xdLoadFlattenedBundle = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*Object*/bundleData){
-	//summary: Internal xd loader function. Used when loading
-	//a flattened localized bundle via a script tag.
-	locale = locale || "root";
-	var jsLoc = dojo.i18n.normalizeLocale(locale).replace('-', '_');
- 	var bundleResource = [moduleName, "nls", bundleName].join(".");
-	var bundle = dojo["provide"](bundleResource);
-	bundle[jsLoc] = bundleData;
-	
-	//Assign the bundle for the original locale(s) we wanted.
-	var mapName = [moduleName, jsLoc, bundleName].join(".");
-	var bundleMap = dojo._xdBundleMap[mapName];
-	if(bundleMap){
-		for(var param in bundleMap){
-			bundle[param] = bundleData;
-		}
-	}
-};
-
-
-dojo._xdInitExtraLocales = function(){
-	// Simulate the extra locale work that dojo.requireLocalization does.
-
-	var extra = dojo.config.extraLocale;
-	if(extra){
-		if(!extra instanceof Array){
-			extra = [extra];
-		}
-
-		dojo._xdReqLoc = dojo.xdRequireLocalization;
-		dojo.xdRequireLocalization = function(m, b, locale, fLocales){
-			dojo._xdReqLoc(m,b,locale, fLocales);
-			if(locale){return;}
-			for(var i=0; i<extra.length; i++){
-				dojo._xdReqLoc(m,b,extra[i], fLocales);
-			}
-		};
-	}
-}
-
-dojo._xdBundleMap = {};
-
-dojo.xdRequireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String*/availableFlatLocales){
-	//summary: Internal xd loader function. The xd version of dojo.requireLocalization.
-	
-
-	//Account for allowing multiple extra locales. Do this here inside the function
-	//since dojo._xdInitExtraLocales() depends on djConfig being set up, but that only
-	//happens after hostenv_browser runs. loader_xd has to come before hostenv_browser
-	//though since hostenv_browser can do a dojo.require for the debug module.
-	if(dojo._xdInitExtraLocales){
-		dojo._xdInitExtraLocales();
-		dojo._xdInitExtraLocales = null;
-		dojo.xdRequireLocalization.apply(dojo, arguments);
-		return;
-	}
-
-	var locales = availableFlatLocales.split(",");
-	
-	//Find the best-match locale to load.
-	//Assumes dojo.i18n has already been loaded. This is true for xdomain builds,
-	//since it is included in dojo.xd.js.
-	var jsLoc = dojo.i18n.normalizeLocale(locale);
-
-	var bestLocale = "";
-	for(var i = 0; i < locales.length; i++){
-		//Locale must match from start of string.
-		if(jsLoc.indexOf(locales[i]) == 0){
-			if(locales[i].length > bestLocale.length){
-				bestLocale = locales[i];
-			}
-		}
-	}
-
-	var fixedBestLocale = bestLocale.replace('-', '_');
-	//See if the bundle we are going to use is already loaded.
- 	var bundleResource = dojo.getObject([moduleName, "nls", bundleName].join("."));
-	if(!bundleResource || !bundleResource[fixedBestLocale]){
-		//Need to remember what locale we wanted and which one we actually use.
-		//Then when we load the one we are actually using, use that bundle for the one
-		//we originally wanted.
-		var mapName = [moduleName, (fixedBestLocale||"root"), bundleName].join(".");
-		var bundleMap = dojo._xdBundleMap[mapName];
-		if(!bundleMap){
-			bundleMap = dojo._xdBundleMap[mapName] = {};
-		}
-		bundleMap[jsLoc.replace('-', '_')] = true;
-		
-		//Do just a normal dojo.require so the resource tracking stuff works as usual.
-		dojo.require(moduleName + ".nls" + (bestLocale ? "." + bestLocale : "") + "." + bundleName);
-	}
-}
-
-// Replace dojo.requireLocalization with a wrapper
-dojo._xdRealRequireLocalization = dojo.requireLocalization;
-dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String*/availableFlatLocales){
-    // summary: loads a bundle intelligently based on whether the module is 
-    // local or xd. Overrides the local-case implementation.
-    
-    var modulePath = dojo.moduleUrl(moduleName).toString();
-    if (dojo._xdIsXDomainPath(modulePath)) {
-        // call cross-domain loader
-        return dojo.xdRequireLocalization.apply(dojo, arguments);
-    } else {
-        // call local-loader
-        return dojo._xdRealRequireLocalization.apply(dojo, arguments);
-    }
-}
-
-//This is a bit brittle: it has to know about the dojo methods that deal with dependencies
-//It would be ideal to intercept the actual methods and do something fancy at that point,
-//but I have concern about knowing which provide to match to the dependency in that case,
-//since scripts can load whenever they want, and trigger new calls to dojo._xdResourceLoaded().
-dojo._xdUnpackDependency = function(/*Array*/dep){
-	//summary: Internal xd loader function. Determines what to do with a dependency
-	//that was listed in an xd version of a module contents.
-
-	//Extract the dependency(ies).
-	var newDeps = null;
-	var newAfterDeps = null;
-	switch(dep[0]){
-		case "requireIf":
-		case "requireAfterIf":
-			//First arg (dep[1]) is the test. Depedency is dep[2].
-			if(dep[1] === true){
-				newDeps = [{name: dep[2], content: null}];
-			}
-			break;
-		case "platformRequire":
-			var modMap = dep[1];
-			var common = modMap["common"]||[];
-			newDeps = (modMap[dojo.hostenv.name_]) ? common.concat(modMap[dojo.hostenv.name_]||[]) : common.concat(modMap["default"]||[]);	
-			//Flatten the array of arrays into a one-level deep array.
-			//Each result could be an array of 3 elements  (the 3 arguments to dojo.require).
-			//We only need the first one.
-			if(newDeps){
-				for(var i = 0; i < newDeps.length; i++){
-					if(newDeps[i] instanceof Array){
-						newDeps[i] = {name: newDeps[i][0], content: null};
-					}else{
-						newDeps[i] = {name: newDeps[i], content: null};
-					}
-				}
-			}
-			break;
-		case "require":
-			//Just worry about dep[1]
-			newDeps = [{name: dep[1], content: null}];
-			break;
-		case "i18n._preloadLocalizations":
-			//We can eval these immediately, since they load i18n bundles.
-			//Since i18n bundles have no dependencies, whenever they are loaded
-			//in a script tag, they are evaluated immediately, so we do not have to
-			//treat them has an explicit dependency for the dependency mapping.
-			//We can call it immediately since dojo.i18n is part of dojo.xd.js.
-			dojo.i18n._preloadLocalizations.apply(dojo.i18n._preloadLocalizations, dep.slice(1));
-			break;
-	}
-
-	//The requireIf and requireAfterIf needs to be evaluated after the current resource is evaluated.
-	if(dep[0] == "requireAfterIf" || dep[0] == "requireIf"){
-		newAfterDeps = newDeps;
-		newDeps = null;
-	}
-	return {requires: newDeps, requiresAfter: newAfterDeps}; //Object
-}
-
-dojo._xdWalkReqs = function(){
-	//summary: Internal xd loader function. 
-	//Walks the requires and evaluates module resource contents in
-	//the right order.
-	var reqChain = null;
-	var req;
-	for(var i = 0; i < dojo._xdOrderedReqs.length; i++){
-		req = dojo._xdOrderedReqs[i];
-		if(dojo._xdDepMap[req]){
-			reqChain = [req];
-			reqChain[req] = true; //Allow for fast lookup of the req in the array
-			dojo._xdEvalReqs(reqChain);
-		}
-	}
-}
-
-dojo._xdEvalReqs = function(/*Array*/reqChain){
-	//summary: Internal xd loader function. 
-	//Does a depth first, breadth second search and eval of required modules.
-	while(reqChain.length > 0){
-		var req = reqChain[reqChain.length - 1];
-		var res = dojo._xdDepMap[req];
-		var i, reqs, nextReq;
-		if(res){
-			//Trace down any requires for this resource.
-			//START dojo._xdTraceReqs() inlining for small Safari 2.0 call stack
-			reqs = res.requires;
-			if(reqs && reqs.length > 0){
-				for(i = 0; i < reqs.length; i++){
-					nextReq = reqs[i].name;
-					if(nextReq && !reqChain[nextReq]){
-						//New req depedency. Follow it down.
-						reqChain.push(nextReq);
-						reqChain[nextReq] = true;
-						dojo._xdEvalReqs(reqChain);
-					}
-				}
-			}
-			//END dojo._xdTraceReqs() inlining for small Safari 2.0 call stack
-
-			//Evaluate the resource.
-			var contents = dojo._xdContents[res.contentIndex];
-			if(!contents.isDefined){
-				var content = contents.content;
-				content["resourceName"] = contents["resourceName"];
-				content["resourcePath"] = contents["resourcePath"];
-				dojo._xdDefList.push(content);
-				contents.isDefined = true;
-			}
-			dojo._xdDepMap[req] = null;
-
-			//Trace down any requireAfters for this resource.
-			//START dojo._xdTraceReqs() inlining for small Safari 2.0 call stack
-			reqs = res.requiresAfter;
-			if(reqs && reqs.length > 0){
-				for(i = 0; i < reqs.length; i++){
-					nextReq = reqs[i].name;
-					if(nextReq && !reqChain[nextReq]){
-						//New req depedency. Follow it down.
-						reqChain.push(nextReq);
-						reqChain[nextReq] = true;
-						dojo._xdEvalReqs(reqChain);
-					}
-				}
-			}
-			//END dojo._xdTraceReqs() inlining for small Safari 2.0 call stack
-		}
-
-		//Done with that require. Remove it and go to the next one.
-		reqChain.pop();
-	}
-}
-
-dojo._xdWatchInFlight = function(){
-	//summary: Internal xd loader function.
-	//Monitors in-flight requests for xd module resources.
-
-	var noLoads = "";
-	var waitInterval = (dojo.config.xdWaitSeconds || 15) * 1000;
-	var expired = (dojo._xdStartTime + waitInterval) < (new Date()).getTime();
-
-	//If any xdInFlight are true, then still waiting for something to load.
-	//Come back later. If we timed out, report the things that did not load.
-	for(var param in dojo._xdInFlight){
-		if(dojo._xdInFlight[param] === true){
-			if(expired){
-				noLoads += param + " ";
-			}else{
-				return;
-			}
-		}
-	}
-
-	//All done. Clean up and notify.
-	dojo._xdClearInterval();
-
-	if(expired){
-		throw "Could not load cross-domain resources: " + noLoads;
-	}
-
-	dojo._xdWalkReqs();
-	
-	var defLength = dojo._xdDefList.length;
-	for(var i= 0; i < defLength; i++){
-		var content = dojo._xdDefList[i];
-		if(dojo.config["debugAtAllCosts"] && content["resourceName"]){
-			if(!dojo["_xdDebugQueue"]){
-				dojo._xdDebugQueue = [];
-			}
-			dojo._xdDebugQueue.push({resourceName: content.resourceName, resourcePath: content.resourcePath});
-		}else{
-			//Evaluate the resource to bring it into being.
-			//Pass in scope args to allow multiple versions of modules in a page.	
-			content.apply(dojo.global, dojo._scopeArgs);
-		}
-	}
-
-	//Evaluate any resources that were not evaled before.
-	//This normally shouldn't happen with proper dojo.provide and dojo.require
-	//usage, but providing it just in case. Note that these may not be executed
-	//in the original order that the developer intended.
-	for(i = 0; i < dojo._xdContents.length; i++){
-		var current = dojo._xdContents[i];
-		if(current.content && !current.isDefined){
-			//Pass in scope args to allow multiple versions of modules in a page.	
-			current.content.apply(dojo.global, dojo._scopeArgs);
-		}
-	}
-
-	//Clean up for the next round of xd loading.
-	dojo._xdReset();
-
-	if(dojo["_xdDebugQueue"] && dojo._xdDebugQueue.length > 0){
-		dojo._xdDebugFileLoaded();
-	}else{
-		dojo._xdNotifyLoaded();
-	}
-}
-
-dojo._xdNotifyLoaded = function(){
-	//Clear inflight count so we will finally do finish work.
-
-	//Just having a legitimate status (true or false) for an inflight item
-	//means that it is still being processed. Do the typeof test
-	//to avoid bad JavaScript that might tinker with Object.prototype.
-	for(var prop in dojo._xdInFlight){
-		if(typeof dojo._xdInFlight[prop] == "boolean"){
-			return;
-		}
-	}
-
-	dojo._inFlightCount = 0; 
-
-	//Only trigger call loaded if dj_load_init has run. 
-	if(dojo._initFired && !dojo._loadNotifying){ 
-		dojo._callLoaded();
-	}
-}
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/array.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/array.js
deleted file mode 100644
index a2a1846..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/array.js
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo._base.array"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._base.array"] = true;
-dojo.require("dojo._base.lang");
-dojo.provide("dojo._base.array");
-
-(function(){
-	var _getParts = function(arr, obj, cb){
-		return [ 
-			(typeof arr == "string") ? arr.split("") : arr, 
-			obj || dojo.global,
-			// FIXME: cache the anonymous functions we create here?
-			(typeof cb == "string") ? new Function("item", "index", "array", cb) : cb
-		];
-	};
-
-	var everyOrSome = function(/*Boolean*/every, /*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){
-		var _p = _getParts(arr, thisObject, callback); arr = _p[0];
-		for(var i=0,l=arr.length; i<l; ++i){
-			var result = !!_p[2].call(_p[1], arr[i], i, arr);
-			if(every ^ result){
-				return result; // Boolean
-			}
-		}
-		return every; // Boolean
-	};
-
-	dojo.mixin(dojo, {
-		indexOf: function(	/*Array*/		array, 
-							/*Object*/		value,
-							/*Integer?*/	fromIndex,
-							/*Boolean?*/	findLast){
-			// summary:
-			//		locates the first index of the provided value in the
-			//		passed array. If the value is not found, -1 is returned.
-			// description:
-			//		This method corresponds to the JavaScript 1.6 Array.indexOf method, with one difference: when
-			//		run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript 
-			//		1.6's indexOf skips the holes in the sparse array.
-			//		For details on this method, see:
-			//			https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/indexOf
-
-			var step = 1, end = array.length || 0, i = 0;
-			if(findLast){
-				i = end - 1;
-				step = end = -1;
-			}
-			if(fromIndex != undefined){ i = fromIndex; }
-			if((findLast && i > end) || i < end){
-				for(; i != end; i += step){
-					if(array[i] == value){ return i; }
-				}
-			}
-			return -1;	// Number
-		},
-
-		lastIndexOf: function(/*Array*/array, /*Object*/value, /*Integer?*/fromIndex){
-			// summary:
-			//		locates the last index of the provided value in the passed
-			//		array. If the value is not found, -1 is returned.
-			// description:
-			//		This method corresponds to the JavaScript 1.6 Array.lastIndexOf method, with one difference: when
-			//		run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript 
-			//		1.6's lastIndexOf skips the holes in the sparse array.
-			//		For details on this method, see:
-			// 			https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/lastIndexOf
-			return dojo.indexOf(array, value, fromIndex, true); // Number
-		},
-
-		forEach: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){
-			//	summary:
-			//		for every item in arr, callback is invoked. Return values are ignored.
-			//		If you want to break out of the loop, consider using dojo.every() or dojo.some().
-			//		forEach does not allow breaking out of the loop over the items in arr.
-			//	arr:
-			//		the array to iterate over. If a string, operates on individual characters.
-			//	callback:
-			//		a function is invoked with three arguments: item, index, and array
-			//	thisObject:
-			//		may be used to scope the call to callback
-			//	description:
-			//		This function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when 
-			//		run over sparse arrays, this implemenation passes the "holes" in the sparse array to
-			//		the callback function with a value of undefined. JavaScript 1.6's forEach skips the holes in the sparse array.
-			//		For more details, see:
-			//			https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/forEach
-			//	example:
-			//	|	// log out all members of the array:
-			//	|	dojo.forEach(
-			//	|		[ "thinger", "blah", "howdy", 10 ],
-			//	|		function(item){
-			//	|			console.log(item);
-			//	|		}
-			//	|	);
-			//	example:
-			//	|	// log out the members and their indexes
-			//	|	dojo.forEach(
-			//	|		[ "thinger", "blah", "howdy", 10 ],
-			//	|		function(item, idx, arr){
-			//	|			console.log(item, "at index:", idx);
-			//	|		}
-			//	|	);
-			//	example:
-			//	|	// use a scoped object member as the callback
-			//	|	
-			//	|	var obj = {
-			//	|		prefix: "logged via obj.callback:", 
-			//	|		callback: function(item){
-			//	|			console.log(this.prefix, item);
-			//	|		}
-			//	|	};
-			//	|	
-			//	|	// specifying the scope function executes the callback in that scope
-			//	|	dojo.forEach(
-			//	|		[ "thinger", "blah", "howdy", 10 ],
-			//	|		obj.callback,
-			//	|		obj
-			//	|	);
-			//	|	
-			//	|	// alternately, we can accomplish the same thing with dojo.hitch()
-			//	|	dojo.forEach(
-			//	|		[ "thinger", "blah", "howdy", 10 ],
-			//	|		dojo.hitch(obj, "callback")
-			//	|	);
-
-			// match the behavior of the built-in forEach WRT empty arrs
-			if(!arr || !arr.length){ return; }
-
-			// FIXME: there are several ways of handilng thisObject. Is
-			// dojo.global always the default context?
-			var _p = _getParts(arr, thisObject, callback); arr = _p[0];
-			for(var i=0,l=arr.length; i<l; ++i){ 
-				_p[2].call(_p[1], arr[i], i, arr);
-			}
-		},
-
-		every: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){
-			// summary:
-			//		Determines whether or not every item in arr satisfies the
-			//		condition implemented by callback.
-			// arr:
-			//		the array to iterate on. If a string, operates on individual characters.
-			// callback:
-			//		a function is invoked with three arguments: item, index,
-			//		and array and returns true if the condition is met.
-			// thisObject:
-			//		may be used to scope the call to callback
-			// description:
-			//		This function corresponds to the JavaScript 1.6 Array.every() method, with one difference: when 
-			//		run over sparse arrays, this implemenation passes the "holes" in the sparse array to
-			//		the callback function with a value of undefined. JavaScript 1.6's every skips the holes in the sparse array.
-			//		For more details, see:
-			//			https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/every
-			// example:
-			//	|	// returns false
-			//	|	dojo.every([1, 2, 3, 4], function(item){ return item>1; });
-			// example:
-			//	|	// returns true 
-			//	|	dojo.every([1, 2, 3, 4], function(item){ return item>0; });
-			return everyOrSome(true, arr, callback, thisObject); // Boolean
-		},
-
-		some: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){
-			// summary:
-			//		Determines whether or not any item in arr satisfies the
-			//		condition implemented by callback.
-			// arr:
-			//		the array to iterate over. If a string, operates on individual characters.
-			// callback:
-			//		a function is invoked with three arguments: item, index,
-			//		and array and returns true if the condition is met.
-			// thisObject:
-			//		may be used to scope the call to callback
-			// description:
-			//		This function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when 
-			//		run over sparse arrays, this implemenation passes the "holes" in the sparse array to
-			//		the callback function with a value of undefined. JavaScript 1.6's some skips the holes in the sparse array.
-			//		For more details, see:
-			//			https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/some
-			// example:
-			//	|	// is true
-			//	|	dojo.some([1, 2, 3, 4], function(item){ return item>1; });
-			// example:
-			//	|	// is false
-			//	|	dojo.some([1, 2, 3, 4], function(item){ return item<1; });
-			return everyOrSome(false, arr, callback, thisObject); // Boolean
-		},
-
-		map: function(/*Array|String*/arr, /*Function|String*/callback, /*Function?*/thisObject){
-			// summary:
-			//		applies callback to each element of arr and returns
-			//		an Array with the results
-			// arr:
-			//		the array to iterate on. If a string, operates on
-			//		individual characters.
-			// callback:
-			//		a function is invoked with three arguments, (item, index,
-			//		array),  and returns a value
-			// thisObject:
-			//		may be used to scope the call to callback
-			// description:
-			//		This function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when 
-			//		run over sparse arrays, this implemenation passes the "holes" in the sparse array to
-			//		the callback function with a value of undefined. JavaScript 1.6's map skips the holes in the sparse array.
-			//		For more details, see:
-			//			https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map
-			// example:
-			//	|	// returns [2, 3, 4, 5]
-			//	|	dojo.map([1, 2, 3, 4], function(item){ return item+1 });
-
-			var _p = _getParts(arr, thisObject, callback); arr = _p[0];
-			var outArr = (arguments[3] ? (new arguments[3]()) : []);
-			for(var i=0,l=arr.length; i<l; ++i){
-				outArr.push(_p[2].call(_p[1], arr[i], i, arr));
-			}
-			return outArr; // Array
-		},
-
-		filter: function(/*Array*/arr, /*Function|String*/callback, /*Object?*/thisObject){
-			// summary:
-			//		Returns a new Array with those items from arr that match the
-			//		condition implemented by callback.
-			// arr:
-			//		the array to iterate over.
-			// callback:
-			//		a function that is invoked with three arguments (item,
-			//		index, array). The return of this function is expected to
-			//		be a boolean which determines whether the passed-in item
-			//		will be included in the returned array.
-			// thisObject:
-			//		may be used to scope the call to callback
-			// description:
-			//		This function corresponds to the JavaScript 1.6 Array.filter() method, with one difference: when 
-			//		run over sparse arrays, this implemenation passes the "holes" in the sparse array to
-			//		the callback function with a value of undefined. JavaScript 1.6's filter skips the holes in the sparse array. 
-			//		For more details, see:
-			//			https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter
-			// example:
-			//	|	// returns [2, 3, 4]
-			//	|	dojo.filter([1, 2, 3, 4], function(item){ return item>1; });
-
-			var _p = _getParts(arr, thisObject, callback); arr = _p[0];
-			var outArr = [];
-			for(var i=0,l=arr.length; i<l; ++i){
-				if(_p[2].call(_p[1], arr[i], i, arr)){
-					outArr.push(arr[i]);
-				}
-			}
-			return outArr; // Array
-		}
-	});
-})();
-/*
-*/
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/browser.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/browser.js
deleted file mode 100644
index 52e5f81..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/browser.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo._base.browser"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._base.browser"] = true;
-dojo.provide("dojo._base.browser");
-
-dojo.require("dojo._base.window");
-dojo.require("dojo._base.connect");
-dojo.require("dojo._base.event");
-dojo.require("dojo._base.html");
-dojo.require("dojo._base.NodeList");
-dojo.require("dojo._base.query");
-dojo.require("dojo._base.xhr");
-dojo.require("dojo._base.fx");
-
-//Need this to be the last code segment in base, so do not place any
-//dojo.requireIf calls in this file. Otherwise, due to how the build system
-//puts all requireIf dependencies after the current file, the require calls
-//could be called before all of base is defined.
-dojo.forEach(dojo.config.require, function(i){
-	dojo["require"](i);
-});
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/connect.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/connect.js
deleted file mode 100644
index 358410e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/connect.js
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo._base.connect"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._base.connect"] = true;
-dojo.provide("dojo._base.connect");
-dojo.require("dojo._base.lang");
-
-// this file courtesy of the TurboAjax Group, licensed under a Dojo CLA
-
-// low-level delegation machinery
-dojo._listener = {
-	// create a dispatcher function
-	getDispatcher: function(){
-		// following comments pulled out-of-line to prevent cloning them 
-		// in the returned function.
-		// - indices (i) that are really in the array of listeners (ls) will 
-		//   not be in Array.prototype. This is the 'sparse array' trick
-		//   that keeps us safe from libs that take liberties with built-in 
-		//   objects
-		// - listener is invoked with current scope (this)
-		return function(){
-			var ap=Array.prototype, c=arguments.callee, ls=c._listeners, t=c.target;
-			// return value comes from original target function
-			var r = t && t.apply(this, arguments);
-			// make local copy of listener array so it is immutable during processing
-			var lls;
-											lls = [].concat(ls);
-							
-			// invoke listeners after target function
-			for(var i in lls){
-				if(!(i in ap)){
-					lls[i].apply(this, arguments);
-				}
-			}
-			// return value comes from original target function
-			return r;
-		}
-	},
-	// add a listener to an object
-	add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){
-		// Whenever 'method' is invoked, 'listener' will have the same scope.
-		// Trying to supporting a context object for the listener led to 
-		// complexity. 
-		// Non trivial to provide 'once' functionality here
-		// because listener could be the result of a dojo.hitch call,
-		// in which case two references to the same hitch target would not
-		// be equivalent. 
-		source = source || dojo.global;
-		// The source method is either null, a dispatcher, or some other function
-		var f = source[method];
-		// Ensure a dispatcher
-		if(!f||!f._listeners){
-			var d = dojo._listener.getDispatcher();
-			// original target function is special
-			d.target = f;
-			// dispatcher holds a list of listeners
-			d._listeners = []; 
-			// redirect source to dispatcher
-			f = source[method] = d;
-		}
-		// The contract is that a handle is returned that can 
-		// identify this listener for disconnect. 
-		//
-		// The type of the handle is private. Here is it implemented as Integer. 
-		// DOM event code has this same contract but handle is Function 
-		// in non-IE browsers.
-		//
-		// We could have separate lists of before and after listeners.
-		return f._listeners.push(listener) ; /*Handle*/
-	},
-	// remove a listener from an object
-	remove: function(/*Object*/ source, /*String*/ method, /*Handle*/ handle){
-		var f = (source||dojo.global)[method];
-		// remember that handle is the index+1 (0 is not a valid handle)
-		if(f && f._listeners && handle--){
-			delete f._listeners[handle];
-		}
-	}
-};
-
-// Multiple delegation for arbitrary methods.
-
-// This unit knows nothing about DOM, but we include DOM aware documentation
-// and dontFix argument here to help the autodocs. Actual DOM aware code is in
-// event.js.
-
-dojo.connect = function(/*Object|null*/ obj, 
-						/*String*/ event, 
-						/*Object|null*/ context, 
-						/*String|Function*/ method,
-						/*Boolean?*/ dontFix){
-	// summary:
-	//		`dojo.connect` is the core event handling and delegation method in
-	//		Dojo. It allows one function to "listen in" on the execution of
-	//		any other, triggering the second whenever the first is called. Many
-	//		listeners may be attached to a function, and source functions may
-	//		be either regular function calls or DOM events.
-	//
-	// description:
-	//		Connects listeners to actions, so that after event fires, a
-	//		listener is called with the same arguments passed to the orginal
-	//		function.
-	//
-	//		Since `dojo.connect` allows the source of events to be either a
-	//		"regular" JavaScript function or a DOM event, it provides a uniform
-	//		interface for listening to all the types of events that an
-	//		application is likely to deal with though a single, unified
-	//		interface. DOM programmers may want to think of it as
-	//		"addEventListener for everything and anything".
-	//
-	//		When setting up a connection, the `event` parameter must be a
-	//		string that is the name of the method/event to be listened for. If
-	//		`obj` is null, `dojo.global` is assumed, meaning that connections
-	//		to global methods are supported but also that you may inadvertantly
-	//		connect to a global by passing an incorrect object name or invalid
-	//		reference.
-	//
-	//		`dojo.connect` generally is forgiving. If you pass the name of a
-	//		function or method that does not yet exist on `obj`, connect will
-	//		not fail, but will instead set up a stub method. Similarly, null
-	//		arguments may simply be omitted such that fewer than 4 arguments
-	//		may be required to set up a connection See the examples for deails.
-	//
-	//		The return value is a handle that is needed to 
-	//		remove this connection with `dojo.disconnect`.
-	//
-	// obj: 
-	//		The source object for the event function. 
-	//		Defaults to `dojo.global` if null.
-	//		If obj is a DOM node, the connection is delegated 
-	//		to the DOM event manager (unless dontFix is true).
-	//
-	// event:
-	//		String name of the event function in obj. 
-	//		I.e. identifies a property `obj[event]`.
-	//
-	// context: 
-	//		The object that method will receive as "this".
-	//
-	//		If context is null and method is a function, then method
-	//		inherits the context of event.
-	//	
-	//		If method is a string then context must be the source 
-	//		object object for method (context[method]). If context is null,
-	//		dojo.global is used.
-	//
-	// method:
-	//		A function reference, or name of a function in context. 
-	//		The function identified by method fires after event does. 
-	//		method receives the same arguments as the event.
-	//		See context argument comments for information on method's scope.
-	//
-	// dontFix:
-	//		If obj is a DOM node, set dontFix to true to prevent delegation 
-	//		of this connection to the DOM event manager.
-	//
-	// example:
-	//		When obj.onchange(), do ui.update():
-	//	|	dojo.connect(obj, "onchange", ui, "update");
-	//	|	dojo.connect(obj, "onchange", ui, ui.update); // same
-	//
-	// example:
-	//		Using return value for disconnect:
-	//	|	var link = dojo.connect(obj, "onchange", ui, "update");
-	//	|	...
-	//	|	dojo.disconnect(link);
-	//
-	// example:
-	//		When onglobalevent executes, watcher.handler is invoked:
-	//	|	dojo.connect(null, "onglobalevent", watcher, "handler");
-	//
-	// example:
-	//		When ob.onCustomEvent executes, customEventHandler is invoked:
-	//	|	dojo.connect(ob, "onCustomEvent", null, "customEventHandler");
-	//	|	dojo.connect(ob, "onCustomEvent", "customEventHandler"); // same
-	//
-	// example:
-	//		When ob.onCustomEvent executes, customEventHandler is invoked
-	//		with the same scope (this):
-	//	|	dojo.connect(ob, "onCustomEvent", null, customEventHandler);
-	//	|	dojo.connect(ob, "onCustomEvent", customEventHandler); // same
-	//
-	// example:
-	//		When globalEvent executes, globalHandler is invoked
-	//		with the same scope (this):
-	//	|	dojo.connect(null, "globalEvent", null, globalHandler);
-	//	|	dojo.connect("globalEvent", globalHandler); // same
-
-	// normalize arguments
-	var a=arguments, args=[], i=0;
-	// if a[0] is a String, obj was ommited
-	args.push(dojo.isString(a[0]) ? null : a[i++], a[i++]);
-	// if the arg-after-next is a String or Function, context was NOT omitted
-	var a1 = a[i+1];
-	args.push(dojo.isString(a1)||dojo.isFunction(a1) ? a[i++] : null, a[i++]);
-	// absorb any additional arguments
-	for(var l=a.length; i<l; i++){	args.push(a[i]); }
-	// do the actual work
-	return dojo._connect.apply(this, args); /*Handle*/
-}
-
-// used by non-browser hostenvs. always overriden by event.js
-dojo._connect = function(obj, event, context, method){
-	var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method)); 
-	return [obj, event, h, l]; // Handle
-}
-
-dojo.disconnect = function(/*Handle*/ handle){
-	// summary:
-	//		Remove a link created by dojo.connect.
-	// description:
-	//		Removes the connection between event and the method referenced by handle.
-	// handle:
-	//		the return value of the dojo.connect call that created the connection.
-	if(handle && handle[0] !== undefined){
-		dojo._disconnect.apply(this, handle);
-		// let's not keep this reference
-		delete handle[0];
-	}
-}
-
-dojo._disconnect = function(obj, event, handle, listener){
-	listener.remove(obj, event, handle);
-}
-
-// topic publish/subscribe
-
-dojo._topics = {};
-
-dojo.subscribe = function(/*String*/ topic, /*Object|null*/ context, /*String|Function*/ method){
-	//	summary:
-	//		Attach a listener to a named topic. The listener function is invoked whenever the
-	//		named topic is published (see: dojo.publish).
-	//		Returns a handle which is needed to unsubscribe this listener.
-	//	context:
-	//		Scope in which method will be invoked, or null for default scope.
-	//	method:
-	//		The name of a function in context, or a function reference. This is the function that
-	//		is invoked when topic is published.
-	//	example:
-	//	|	dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); });
-	//	|	dojo.publish("alerts", [ "read this", "hello world" ]);																	
-
-	// support for 2 argument invocation (omitting context) depends on hitch
-	return [topic, dojo._listener.add(dojo._topics, topic, dojo.hitch(context, method))]; /*Handle*/
-}
-
-dojo.unsubscribe = function(/*Handle*/ handle){
-	//	summary:
-	//	 	Remove a topic listener. 
-	//	handle:
-	//	 	The handle returned from a call to subscribe.
-	//	example:
-	//	|	var alerter = dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); };
-	//	|	...
-	//	|	dojo.unsubscribe(alerter);
-	if(handle){
-		dojo._listener.remove(dojo._topics, handle[0], handle[1]);
-	}
-}
-
-dojo.publish = function(/*String*/ topic, /*Array*/ args){
-	//	summary:
-	//	 	Invoke all listener method subscribed to topic.
-	//	topic:
-	//	 	The name of the topic to publish.
-	//	args:
-	//	 	An array of arguments. The arguments will be applied 
-	//	 	to each topic subscriber (as first class parameters, via apply).
-	//	example:
-	//	|	dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); };
-	//	|	dojo.publish("alerts", [ "read this", "hello world" ]);	
-
-	// Note that args is an array, which is more efficient vs variable length
-	// argument list.  Ideally, var args would be implemented via Array
-	// throughout the APIs.
-	var f = dojo._topics[topic];
-	if(f){
-		f.apply(this, args||[]);
-	}
-}
-
-dojo.connectPublisher = function(	/*String*/ topic, 
-									/*Object|null*/ obj, 
-									/*String*/ event){
-	//	summary:
-	//	 	Ensure that everytime obj.event() is called, a message is published
-	//	 	on the topic. Returns a handle which can be passed to
-	//	 	dojo.disconnect() to disable subsequent automatic publication on
-	//	 	the topic.
-	//	topic:
-	//	 	The name of the topic to publish.
-	//	obj: 
-	//	 	The source object for the event function. Defaults to dojo.global
-	//	 	if null.
-	//	event:
-	//	 	The name of the event function in obj. 
-	//	 	I.e. identifies a property obj[event].
-	//	example:
-	//	|	dojo.connectPublisher("/ajax/start", dojo, "xhrGet");
-	var pf = function(){ dojo.publish(topic, arguments); }
-	return (event) ? dojo.connect(obj, event, pf) : dojo.connect(obj, pf); //Handle
-};
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/declare.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/declare.js
deleted file mode 100644
index dbaa5fd..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/declare.js
+++ /dev/null
@@ -1,984 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo._base.declare"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._base.declare"] = true;
-dojo.provide("dojo._base.declare");
-
-dojo.require("dojo._base.lang");
-dojo.require("dojo._base.array");
-
-(function(){
-	var d = dojo, mix = d._mixin, op = Object.prototype, opts = op.toString,
-		xtor = new Function, counter = 0, cname = "constructor";
-
-	function err(msg){ throw new Error("declare: " + msg); }
-
-	// C3 Method Resolution Order (see http://www.python.org/download/releases/2.3/mro/)
-	function c3mro(bases){
-		var result = [], roots = [{cls: 0, refs: []}], nameMap = {}, clsCount = 1,
-			l = bases.length, i = 0, j, lin, base, top, proto, rec, name, refs;
-
-		// build a list of bases naming them if needed
-		for(; i < l; ++i){
-			base = bases[i];
-			if(!base){
-				err("mixin #" + i + " is null");
-			}
-			lin = base._meta ? base._meta.bases : [base];
-			top = 0;
-			// add bases to the name map
-			for(j = lin.length - 1; j >= 0; --j){
-				proto = lin[j].prototype;
-				if(!proto.hasOwnProperty("declaredClass")){
-					proto.declaredClass = "uniqName_" + (counter++);
-				}
-				name = proto.declaredClass;
-				if(!nameMap.hasOwnProperty(name)){
-					nameMap[name] = {count: 0, refs: [], cls: lin[j]};
-					++clsCount;
-				}
-				rec = nameMap[name];
-				if(top && top !== rec){
-					rec.refs.push(top);
-					++top.count;
-				}
-				top = rec;
-			}
-			++top.count;
-			roots[0].refs.push(top);
-		}
-
-		// remove classes without external references recursively
-		while(roots.length){
-			top = roots.pop();
-			result.push(top.cls);
-			--clsCount;
-			// optimization: follow a single-linked chain
-			while(refs = top.refs, refs.length == 1){
-				top = refs[0];
-				if(!top || --top.count){
-					// branch or end of chain => do not end to roots
-					top = 0;
-					break;
-				}
-				result.push(top.cls);
-				--clsCount;
-			}
-			if(top){
-				// branch
-				for(i = 0, l = refs.length; i < l; ++i){
-					top = refs[i];
-					if(!--top.count){
-						roots.push(top);
-					}
-				}
-			}
-		}
-		if(clsCount){
-			err("can't build consistent linearization");
-		}
-
-		// calculate the superclass offset
-		base = bases[0];
-		result[0] = base ?
-			base._meta && base === result[result.length - base._meta.bases.length] ?
-				base._meta.bases.length : 1 : 0;
-
-		return result;
-	}
-
-	function inherited(args, a, f){
-		var name, chains, bases, caller, meta, base, proto, opf, pos,
-			cache = this._inherited = this._inherited || {};
-
-		// crack arguments
-		if(typeof args == "string"){
-			name = args;
-			args = a;
-			a = f;
-		}
-		f = 0;
-
-		caller = args.callee;
-		name = name || caller.nom;
-		if(!name){
-			err("can't deduce a name to call inherited()");
-		}
-
-		meta = this.constructor._meta;
-		bases = meta.bases;
-
-		pos = cache.p;
-		if(name != cname){
-			// method
-			if(cache.c !== caller){
-				// cache bust
-				pos = 0;
-				base = bases[0];
-				meta = base._meta;
-				if(meta.hidden[name] !== caller){
-					// error detection
-					chains = meta.chains;
-					if(chains && typeof chains[name] == "string"){
-						err("calling chained method with inherited: " + name);
-					}
-					// find caller
-					do{
-						meta = base._meta;
-						proto = base.prototype;
-						if(meta && (proto[name] === caller && proto.hasOwnProperty(name) || meta.hidden[name] === caller)){
-							break;
-						}
-					}while(base = bases[++pos]); // intentional assignment
-					pos = base ? pos : -1;
-				}
-			}
-			// find next
-			base = bases[++pos];
-			if(base){
-				proto = base.prototype;
-				if(base._meta && proto.hasOwnProperty(name)){
-					f = proto[name];
-				}else{
-					opf = op[name];
-					do{
-						proto = base.prototype;
-						f = proto[name];
-						if(f && (base._meta ? proto.hasOwnProperty(name) : f !== opf)){
-							break;
-						}
-					}while(base = bases[++pos]); // intentional assignment
-				}
-			}
-			f = base && f || op[name];
-		}else{
-			// constructor
-			if(cache.c !== caller){
-				// cache bust
-				pos = 0;
-				meta = bases[0]._meta;
-				if(meta && meta.ctor !== caller){
-					// error detection
-					chains = meta.chains;
-					if(!chains || chains.constructor !== "manual"){
-						err("calling chained constructor with inherited");
-					}
-					// find caller
-					while(base = bases[++pos]){ // intentional assignment
-						meta = base._meta;
-						if(meta && meta.ctor === caller){
-							break;
-						}
-					};
-					pos = base ? pos : -1;
-				}
-			}
-			// find next
-			while(base = bases[++pos]){	// intentional assignment
-				meta = base._meta;
-				f = meta ? meta.ctor : base;
-				if(f){
-					break;
-				}
-			}
-			f = base && f;
-		}
-
-		// cache the found super method
-		cache.c = f;
-		cache.p = pos;
-
-		// now we have the result
-		if(f){
-			return a === true ? f : f.apply(this, a || args);
-		}
-		// intentionally if a super method was not found
-	}
-
-	function getInherited(name, args){
-		if(typeof name == "string"){
-			return this.inherited(name, args, true);
-		}
-		return this.inherited(name, true);
-	}
-
-	// emulation of "instanceof"
-	function isInstanceOf(cls){
-		var bases = this.constructor._meta.bases;
-		for(var i = 0, l = bases.length; i < l; ++i){
-			if(bases[i] === cls){
-				return true;
-			}
-		}
-		return this instanceof cls;
-	}
-
-	// imlementation of safe mixin function
-	function safeMixin(target, source){
-		var name, t, i = 0, l = d._extraNames.length;
-		// add props adding metadata for incoming functions skipping a constructor
-		for(name in source){
-			t = source[name];
-			if((t !== op[name] || !(name in op)) && name != cname){
-				if(opts.call(t) == "[object Function]"){
-					// non-trivial function method => attach its name
-					t.nom = name;
-				}
-				target[name] = t;
-			}
-		}
-		// process unenumerable methods on IE
-		for(; i < l; ++i){
-			name = d._extraNames[i];
-			t = source[name];
-			if((t !== op[name] || !(name in op)) && name != cname){
-				if(opts.call(t) == "[object Function]"){
-					// non-trivial function method => attach its name
-					t.nom = name;
-				}
-				target[name] = t;
-			}
-		}
-		return target;
-	}
-
-	function extend(source){
-		safeMixin(this.prototype, source);
-		return this;
-	}
-
-	// chained constructor compatible with the legacy dojo.declare()
-	function chainedConstructor(bases, ctorSpecial){
-		return function(){
-			var a = arguments, args = a, a0 = a[0], f, i, m,
-				l = bases.length, preArgs;
-			//this._inherited = {};
-			// perform the shaman's rituals of the original dojo.declare()
-			// 1) call two types of the preamble
-			if(ctorSpecial && (a0 && a0.preamble || this.preamble)){
-				// full blown ritual
-				preArgs = new Array(bases.length);
-				// prepare parameters
-				preArgs[0] = a;
-				for(i = 0;;){
-					// process the preamble of the 1st argument
-					a0 = a[0];
-					if(a0){
-						f = a0.preamble;
-						if(f){
-							a = f.apply(this, a) || a;
-						}
-					}
-					// process the preamble of this class
-					f = bases[i].prototype;
-					f = f.hasOwnProperty("preamble") && f.preamble;
-					if(f){
-						a = f.apply(this, a) || a;
-					}
-					// one pecularity of the preamble:
-					// it is called if it is not needed,
-					// e.g., there is no constructor to call
-					// let's watch for the last constructor
-					// (see ticket #9795)
-					if(++i == l){
-						break;
-					}
-					preArgs[i] = a;
-				}
-			}
-			// 2) call all non-trivial constructors using prepared arguments
-			for(i = l - 1; i >= 0; --i){
-				f = bases[i];
-				m = f._meta;
-				f = m ? m.ctor : f;
-				if(f){
-					f.apply(this, preArgs ? preArgs[i] : a);
-				}
-			}
-			// 3) continue the original ritual: call the postscript
-			f = this.postscript;
-			if(f){
-				f.apply(this, args);
-			}
-		};
-	}
-
-
-	// chained constructor compatible with the legacy dojo.declare()
-	function singleConstructor(ctor, ctorSpecial){
-		return function(){
-			var a = arguments, t = a, a0 = a[0], f;
-			//this._inherited = {};
-			// perform the shaman's rituals of the original dojo.declare()
-			// 1) call two types of the preamble
-			if(ctorSpecial){
-				// full blown ritual
-				if(a0){
-					// process the preamble of the 1st argument
-					f = a0.preamble;
-					if(f){
-						t = f.apply(this, t) || t;
-					}
-				}
-				f = this.preamble;
-				if(f){
-					// process the preamble of this class
-					f.apply(this, t);
-					// one pecularity of the preamble:
-					// it is called even if it is not needed,
-					// e.g., there is no constructor to call
-					// let's watch for the last constructor
-					// (see ticket #9795)
-				}
-			}
-			// 2) call a constructor
-			if(ctor){
-				ctor.apply(this, a);
-			}
-			// 3) continue the original ritual: call the postscript
-			f = this.postscript;
-			if(f){
-				f.apply(this, a);
-			}
-		};
-	}
-
-	// plain vanilla constructor (can use inherited() to call its base constructor)
-	function simpleConstructor(bases){
-		return function(){
-			var a = arguments, i = 0, f;
-			//this._inherited = {};
-			// perform the shaman's rituals of the original dojo.declare()
-			// 1) do not call the preamble
-			// 2) call the top constructor (it can use this.inherited())
-			for(; f = bases[i]; ++i){ // intentional assignment
-				m = f._meta;
-				f = m ? m.ctor : f;
-				if(f){
-					f.apply(this, a);
-					break;
-				}
-			}
-			// 3) call the postscript
-			f = this.postscript;
-			if(f){
-				f.apply(this, a);
-			}
-		};
-	}
-
-	function chain(name, bases, reversed){
-		return function(){
-			var b, m, f, i = 0, step = 1;
-			if(reversed){
-				i = bases.length - 1;
-				step = -1;
-			}
-			for(; b = bases[i]; i += step){ // intentional assignment
-				m = b._meta;
-				f = (m ? m.hidden : b.prototype)[name];
-				if(f){
-					f.apply(this, arguments);
-				}
-			}
-		};
-	}
-
-	d.declare = function(className, superclass, props){
-		var proto, i, t, ctor, name, bases, chains, mixins = 1, parents = superclass;
-
-		// crack parameters
-		if(typeof className != "string"){
-			props = superclass;
-			superclass = className;
-			className = "";
-		}
-		props = props || {};
-
-		// build a prototype
-		if(opts.call(superclass) == "[object Array]"){
-			// C3 MRO
-			bases = c3mro(superclass);
-			t = bases[0];
-			mixins = bases.length - t;
-			superclass = bases[mixins];
-		}else{
-			bases = [0];
-			if(superclass){
-				t = superclass._meta;
-				bases = bases.concat(t ? t.bases : superclass);
-			}
-		}
-		if(superclass){
-			for(i = mixins - 1;; --i){
-				// delegation
-				xtor.prototype = superclass.prototype;
-				proto = new xtor;
-				if(!i){
-					// stop if nothing to add (the last base)
-					break;
-				}
-				// mix in properties
-				t = bases[i];
-				mix(proto, t._meta ? t._meta.hidden : t.prototype);
-				// chain in new constructor
-				ctor = new Function;
-				ctor.superclass = superclass;
-				ctor.prototype = proto;
-				superclass = proto.constructor = ctor;
-			}
-		}else{
-			proto = {};
-		}
-		// add all properties
-		safeMixin(proto, props);
-		// add constructor
-		t = props.constructor;
-		if(t !== op.constructor){
-			t.nom = cname;
-			proto.constructor = t;
-		}
-		xtor.prototype = 0;	// cleanup
-
-		// collect chains and flags
-		for(i = mixins - 1; i; --i){ // intentional assignment
-			t = bases[i]._meta;
-			if(t && t.chains){
-				chains = mix(chains || {}, t.chains);
-			}
-		}
-		if(proto["-chains-"]){
-			chains = mix(chains || {}, proto["-chains-"]);
-		}
-
-		// build ctor
-		t = !chains || !chains.hasOwnProperty(cname);
-		bases[0] = ctor = (chains && chains.constructor === "manual") ? simpleConstructor(bases) :
-			(bases.length == 1 ? singleConstructor(props.constructor, t) : chainedConstructor(bases, t));
-
-		// add meta information to the constructor
-		ctor._meta  = {bases: bases, hidden: props, chains: chains,
-			parents: parents, ctor: props.constructor};
-		ctor.superclass = superclass && superclass.prototype;
-		ctor.extend = extend;
-		ctor.prototype = proto;
-		proto.constructor = ctor;
-
-		// add "standard" methods to the ptototype
-		proto.getInherited = getInherited;
-		proto.inherited = inherited;
-		proto.isInstanceOf = isInstanceOf;
-
-		// add name if specified
-		if(className){
-			proto.declaredClass = className;
-			d.setObject(className, ctor);
-		}
-
-		// build chains and add them to the prototype
-		if(chains){
-			for(name in chains){
-				if(proto[name] && typeof chains[name] == "string" && name != cname){
-					t = proto[name] = chain(name, bases, chains[name] === "after");
-					t.nom = name;
-				}
-			}
-		}
-		// chained methods do not return values
-		// no need to chain "invisible" functions
-
-		return ctor;	// Function
-	};
-
-	d.safeMixin = safeMixin;
-
-	/*=====
-	dojo.declare = function(className, superclass, props){
-		//	summary:
-		//		Create a feature-rich constructor from compact notation.
-		//	className: String?:
-		//		The optional name of the constructor (loosely, a "class")
-		//		stored in the "declaredClass" property in the created prototype.
-		//		It will be used as a global name for a created constructor.
-		//	superclass: Function|Function[]:
-		//		May be null, a Function, or an Array of Functions. This argument
-		//		specifies a list of bases (the left-most one is the most deepest
-		//		base).
-		//	props: Object:
-		//		An object whose properties are copied to the created prototype.
-		//		Add an instance-initialization function by making it a property
-		//		named "constructor".
-		//	returns:
-		//		New constructor function.
-		//	description:
-		//		Create a constructor using a compact notation for inheritance and
-		//		prototype extension.
-		//
-		//		Mixin ancestors provide a type of multiple inheritance.
-		//		Prototypes of mixin ancestors are copied to the new class:
-		//		changes to mixin prototypes will not affect classes to which
-		//		they have been mixed in.
-		//
-		//		Ancestors can be compound classes created by this version of
-		//		dojo.declare. In complex cases all base classes are going to be
-		//		linearized according to C3 MRO algorithm
-		//		(see http://www.python.org/download/releases/2.3/mro/ for more
-		//		details).
-		//
-		//		"className" is cached in "declaredClass" property of the new class,
-		//		if it was supplied. The immediate super class will be cached in
-		//		"superclass" property of the new class.
-		//
-		//		Methods in "props" will be copied and modified: "nom" property
-		//		(the declared name of the method) will be added to all copied
-		//		functions to help identify them for the internal machinery. Be
-		//		very careful, while reusing methods: if you use the same
-		//		function under different names, it can produce errors in some
-		//		cases.
-		//
-		//		It is possible to use constructors created "manually" (without
-		//		dojo.declare) as bases. They will be called as usual during the
-		//		creation of an instance, their methods will be chained, and even
-		//		called by "this.inherited()".
-		//
-		//		Special property "-chains-" governs how to chain methods. It is
-		//		a dictionary, which uses method names as keys, and hint strings
-		//		as values. If a hint string is "after", this method will be
-		//		called after methods of its base classes. If a hint string is
-		//		"before", this method will be called before methods of its base
-		//		classes.
-		//
-		//		If "constructor" is not mentioned in "-chains-" property, it will
-		//		be chained using the legacy mode: using "after" chaining,
-		//		calling preamble() method before each constructor, if available,
-		//		and calling postscript() after all constructors were executed.
-		//		If the hint is "after", it is chained as a regular method, but
-		//		postscript() will be called after the chain of constructors.
-		//		"constructor" cannot be chained "before", but it allows
-		//		a special hint string: "manual", which means that constructors
-		//		are not going to be chained in any way, and programmer will call
-		//		them manually using this.inherited(). In the latter case
-		//		postscript() will be called after the construction.
-		//
-		//		All chaining hints are "inherited" from base classes and
-		//		potentially can be overridden. Be very careful when overriding
-		//		hints! Make sure that all chained methods can work in a proposed
-		//		manner of chaining.
-		//
-		//		Once a method was chained, it is impossible to unchain it. The
-		//		only exception is "constructor". You don't need to define a
-		//		method in order to supply a chaining hint.
-		//
-		//		If a method is chained, it cannot use this.inherited() because
-		//		all other methods in the hierarchy will be called automatically.
-		//
-		//		Usually constructors and initializers of any kind are chained
-		//		using "after" and destructors of any kind are chained as
-		//		"before". Note that chaining assumes that chained methods do not
-		//		return any value: any returned value will be discarded.
-		//
-		//	example:
-		//	|	dojo.declare("my.classes.bar", my.classes.foo, {
-		//	|		// properties to be added to the class prototype
-		//	|		someValue: 2,
-		//	|		// initialization function
-		//	|		constructor: function(){
-		//	|			this.myComplicatedObject = new ReallyComplicatedObject();
-		//	|		},
-		//	|		// other functions
-		//	|		someMethod: function(){
-		//	|			doStuff();
-		//	|		}
-		//	|	});
-		//
-		//	example:
-		//	|	var MyBase = dojo.declare(null, {
-		//	|		// constructor, properties, and methods go here
-		//	|		// ...
-		//	|	});
-		//	|	var MyClass1 = dojo.declare(MyBase, {
-		//	|		// constructor, properties, and methods go here
-		//	|		// ...
-		//	|	});
-		//	|	var MyClass2 = dojo.declare(MyBase, {
-		//	|		// constructor, properties, and methods go here
-		//	|		// ...
-		//	|	});
-		//	|	var MyDiamond = dojo.declare([MyClass1, MyClass2], {
-		//	|		// constructor, properties, and methods go here
-		//	|		// ...
-		//	|	});
-		//
-		//	example:
-		//	|	var F = function(){ console.log("raw constructor"); };
-		//	|	F.prototype.method = function(){
-		//	|		console.log("raw method");
-		//	|	};
-		//	|	var A = dojo.declare(F, {
-		//	|		constructor: function(){
-		//	|			console.log("A.constructor");
-		//	|		},
-		//	|		method: function(){
-		//	|			console.log("before calling F.method...");
-		//	|			this.inherited(arguments);
-		//	|			console.log("...back in A");
-		//	|		}
-		//	|	});
-		//	|	new A().method();
-		//	|	// will print:
-		//	|	// raw constructor
-		//	|	// A.constructor
-		//	|	// before calling F.method...
-		//	|	// raw method
-		//	|	// ...back in A
-		//
-		//	example:
-		//	|	var A = dojo.declare(null, {
-		//	|		"-chains-": {
-		//	|			destroy: "before"
-		//	|		}
-		//	|	});
-		//	|	var B = dojo.declare(A, {
-		//	|		constructor: function(){
-		//	|			console.log("B.constructor");
-		//	|		},
-		//	|		destroy: function(){
-		//	|			console.log("B.destroy");
-		//	|		}
-		//	|	});
-		//	|	var C = dojo.declare(B, {
-		//	|		constructor: function(){
-		//	|			console.log("C.constructor");
-		//	|		},
-		//	|		destroy: function(){
-		//	|			console.log("C.destroy");
-		//	|		}
-		//	|	});
-		//	|	new C().destroy();
-		//	|	// prints:
-		//	|	// B.constructor
-		//	|	// C.constructor
-		//	|	// C.destroy
-		//	|	// B.destroy
-		//
-		//	example:
-		//	|	var A = dojo.declare(null, {
-		//	|		"-chains-": {
-		//	|			constructor: "manual"
-		//	|		}
-		//	|	});
-		//	|	var B = dojo.declare(A, {
-		//	|		constructor: function(){
-		//	|			// ...
-		//	|			// call the base constructor with new parameters
-		//	|			this.inherited(arguments, [1, 2, 3]);
-		//	|			// ...
-		//	|		}
-		//	|	});
-		//
-		//	example:
-		//	|	var A = dojo.declare(null, {
-		//	|		"-chains-": {
-		//	|			m1: "before"
-		//	|		},
-		//	|		m1: function(){
-		//	|			console.log("A.m1");
-		//	|		},
-		//	|		m2: function(){
-		//	|			console.log("A.m2");
-		//	|		}
-		//	|	});
-		//	|	var B = dojo.declare(A, {
-		//	|		"-chains-": {
-		//	|			m2: "after"
-		//	|		},
-		//	|		m1: function(){
-		//	|			console.log("B.m1");
-		//	|		},
-		//	|		m2: function(){
-		//	|			console.log("B.m2");
-		//	|		}
-		//	|	});
-		//	|	var x = new B();
-		//	|	x.m1();
-		//	|	// prints:
-		//	|	// B.m1
-		//	|	// A.m1
-		//	|	x.m2();
-		//	|	// prints:
-		//	|	// A.m2
-		//	|	// B.m2
-		return new Function(); // Function
-	};
-	=====*/
-
-	/*=====
-	dojo.safeMixin = function(target, source){
-		//	summary:
-		//		Mix in properties skipping a constructor and decorating functions
-		//		like it is done by dojo.declare.
-		//	target: Object
-		//		Target object to accept new properties.
-		//	source: Object
-		//		Source object for new properties.
-		//	description:
-		//		This function is used to mix in properties like dojo._mixin does,
-		//		but it skips a constructor property and decorates functions like
-		//		dojo.declare does.
-		//
-		//		It is meant to be used with classes and objects produced with
-		//		dojo.declare. Functions mixed in with dojo.safeMixin can use
-		//		this.inherited() like normal methods.
-		//
-		//		This function is used to implement extend() method of a constructor
-		//		produced with dojo.declare().
-		//
-		//	example:
-		//	|	var A = dojo.declare(null, {
-		//	|		m1: function(){
-		//	|			console.log("A.m1");
-		//	|		},
-		//	|		m2: function(){
-		//	|			console.log("A.m2");
-		//	|		}
-		//	|	});
-		//	|	var B = dojo.declare(A, {
-		//	|		m1: function(){
-		//	|			this.inherited(arguments);
-		//	|			console.log("B.m1");
-		//	|		}
-		//	|	});
-		//	|	B.extend({
-		//	|		m2: function(){
-		//	|			this.inherited(arguments);
-		//	|			console.log("B.m2");
-		//	|		}
-		//	|	});
-		//	|	var x = new B();
-		//	|	dojo.safeMixin(x, {
-		//	|		m1: function(){
-		//	|			this.inherited(arguments);
-		//	|			console.log("X.m1");
-		//	|		},
-		//	|		m2: function(){
-		//	|			this.inherited(arguments);
-		//	|			console.log("X.m2");
-		//	|		}
-		//	|	});
-		//	|	x.m2();
-		//	|	// prints:
-		//	|	// A.m1
-		//	|	// B.m1
-		//	|	// X.m1
-	};
-	=====*/
-
-	/*=====
-	Object.inherited = function(name, args, newArgs){
-		//	summary:
-		//		Calls a super method.
-		//	name: String?
-		//		The optional method name. Should be the same as the caller's
-		//		name. Usually "name" is specified in complex dynamic cases, when
-		//		the calling method was dynamically added, undecorated by
-		//		dojo.declare, and it cannot be determined.
-		//	args: Arguments
-		//		The caller supply this argument, which should be the original
-		//		"arguments".
-		//	newArgs: Object?
-		//		If "true", the found function will be returned without
-		//		executing it.
-		//		If Array, it will be used to call a super method. Otherwise
-		//		"args" will be used.
-		//	returns:
-		//		Whatever is returned by a super method, or a super method itself,
-		//		if "true" was specified as newArgs.
-		//	description:
-		//		This method is used inside method of classes produced with
-		//		dojo.declare to call a super method (next in the chain). It is
-		//		used for manually controlled chaining. Consider using the regular
-		//		chaining, because it is faster. Use "this.inherited()" only in
-		//		complex cases.
-		//
-		//		This method cannot me called from automatically chained
-		//		constructors including the case of a special (legacy)
-		//		constructor chaining. It cannot be called from chained methods.
-		//
-		//		If "this.inherited()" cannot find the next-in-chain method, it
-		//		does nothing and returns "undefined". The last method in chain
-		//		can be a default method implemented in Object, which will be
-		//		called last.
-		//
-		//		If "name" is specified, it is assumed that the method that
-		//		received "args" is the parent method for this call. It is looked
-		//		up in the chain list and if it is found the next-in-chain method
-		//		is called. If it is not found, the first-in-chain method is
-		//		called.
-		//
-		//		If "name" is not specified, it will be derived from the calling
-		//		method (using a methoid property "nom").
-		//
-		//	example:
-		//	|	var B = dojo.declare(A, {
-		//	|		method1: function(a, b, c){
-		//	|			this.inherited(arguments);
-		//	|		},
-		//	|		method2: function(a, b){
-		//	|			return this.inherited(arguments, [a + b]);
-		//	|		}
-		//	|	});
-		//	|	// next method is not in the chain list because it is added
-		//	|	// manually after the class was created.
-		//	|	B.prototype.method3 = function(){
-		//	|		console.log("This is a dynamically-added method.");
-		//	|		this.inherited("method3", arguments);
-		//	|	};
-		//	example:
-		//	|	var B = dojo.declare(A, {
-		//	|		method: function(a, b){
-		//	|			var super = this.inherited(arguments, true);
-		//	|			// ...
-		//	|			if(!super){
-		//	|				console.log("there is no super method");
-		//	|				return 0;
-		//	|			}
-		//	|			return super.apply(this, arguments);
-		//	|		}
-		//	|	});
-		return	{};	// Object
-	}
-	=====*/
-
-	/*=====
-	Object.getInherited = function(name, args){
-		//	summary:
-		//		Returns a super method.
-		//	name: String?
-		//		The optional method name. Should be the same as the caller's
-		//		name. Usually "name" is specified in complex dynamic cases, when
-		//		the calling method was dynamically added, undecorated by
-		//		dojo.declare, and it cannot be determined.
-		//	args: Arguments
-		//		The caller supply this argument, which should be the original
-		//		"arguments".
-		//	returns:
-		//		Returns a super method (Function) or "undefined".
-		//	description:
-		//		This method is a convenience method for "this.inherited()".
-		//		It uses the same algorithm but instead of executing a super
-		//		method, it returns it, or "undefined" if not found.
-		//
-		//	example:
-		//	|	var B = dojo.declare(A, {
-		//	|		method: function(a, b){
-		//	|			var super = this.getInherited(arguments);
-		//	|			// ...
-		//	|			if(!super){
-		//	|				console.log("there is no super method");
-		//	|				return 0;
-		//	|			}
-		//	|			return super.apply(this, arguments);
-		//	|		}
-		//	|	});
-		return	{};	// Object
-	}
-	=====*/
-
-	/*=====
-	Object.isInstanceOf = function(cls){
-		//	summary:
-		//		Checks the inheritance cahin to see if it is inherited from this
-		//		class.
-		//	cls: Function
-		//		Class constructor.
-		//	returns:
-		//		"true", if this object is inherited from this class, "false"
-		//		otherwise.
-		//	description:
-		//		This method is used with instances of classes produced with
-		//		dojo.declare to determine of they support a certain interface or
-		//		not. It models "instanceof" operator.
-		//
-		//	example:
-		//	|	var A = dojo.declare(null, {
-		//	|		// constructor, properties, and methods go here
-		//	|		// ...
-		//	|	});
-		//	|	var B = dojo.declare(null, {
-		//	|		// constructor, properties, and methods go here
-		//	|		// ...
-		//	|	});
-		//	|	var C = dojo.declare([A, B], {
-		//	|		// constructor, properties, and methods go here
-		//	|		// ...
-		//	|	});
-		//	|	var D = dojo.declare(A, {
-		//	|		// constructor, properties, and methods go here
-		//	|		// ...
-		//	|	});
-		//	|
-		//	|	var a = new A(), b = new B(), c = new C(), d = new D();
-		//	|
-		//	|	console.log(a.isInstanceOf(A)); // true
-		//	|	console.log(b.isInstanceOf(A)); // false
-		//	|	console.log(c.isInstanceOf(A)); // true
-		//	|	console.log(d.isInstanceOf(A)); // true
-		//	|
-		//	|	console.log(a.isInstanceOf(B)); // false
-		//	|	console.log(b.isInstanceOf(B)); // true
-		//	|	console.log(c.isInstanceOf(B)); // true
-		//	|	console.log(d.isInstanceOf(B)); // false
-		//	|
-		//	|	console.log(a.isInstanceOf(C)); // false
-		//	|	console.log(b.isInstanceOf(C)); // false
-		//	|	console.log(c.isInstanceOf(C)); // true
-		//	|	console.log(d.isInstanceOf(C)); // false
-		//	|
-		//	|	console.log(a.isInstanceOf(D)); // false
-		//	|	console.log(b.isInstanceOf(D)); // false
-		//	|	console.log(c.isInstanceOf(D)); // false
-		//	|	console.log(d.isInstanceOf(D)); // true
-		return	{};	// Object
-	}
-	=====*/
-
-	/*=====
-	Object.extend = function(source){
-		//	summary:
-		//		Adds all properties and methods of source to constructor's
-		//		prototype, making them available to all instances created with
-		//		constructor. This method is specific to constructors created with
-		//		dojo.declare.
-		//	source: Object
-		//		Source object which properties are going to be copied to the
-		//		constructor's prototype.
-		//	description:
-		//		Adds source properties to the constructor's prototype. It can
-		//		override existing properties.
-		//
-		//		This method is similar to dojo.extend function, but it is specific
-		//		to constructors produced by dojo.declare. It is implemented
-		//		using dojo.safeMixin, and it skips a constructor property,
-		//		and properly decorates copied functions.
-		//
-		//	example:
-		//	|	var A = dojo.declare(null, {
-		//	|		m1: function(){},
-		//	|		s1: "Popokatepetl"
-		//	|	});
-		//	|	A.extend({
-		//	|		m1: function(){},
-		//	|		m2: function(){},
-		//	|		f1: true,
-		//	|		d1: 42
-		//	|	});
-	};
-	=====*/
-})();
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/event.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/event.js
deleted file mode 100644
index 0f452f4..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/event.js
+++ /dev/null
@@ -1,645 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo._base.event"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._base.event"] = true;
-dojo.provide("dojo._base.event");
-dojo.require("dojo._base.connect");
-
-// this file courtesy of the TurboAjax Group, licensed under a Dojo CLA
-
-(function(){
-	// DOM event listener machinery
-	var del = (dojo._event_listener = {
-		add: function(/*DOMNode*/ node, /*String*/ name, /*Function*/ fp){
-			if(!node){return;} 
-			name = del._normalizeEventName(name);
-			fp = del._fixCallback(name, fp);
-			var oname = name;
-			if(
-								!dojo.isIE && 
-								(name == "mouseenter" || name == "mouseleave")
-			){
-				var ofp = fp;
-				//oname = name;
-				name = (name == "mouseenter") ? "mouseover" : "mouseout";
-				fp = function(e){
-					if(!dojo.isDescendant(e.relatedTarget, node)){
-						// e.type = oname; // FIXME: doesn't take? SJM: event.type is generally immutable.
-						return ofp.call(this, e); 
-					}
-				}
-			}
-			node.addEventListener(name, fp, false);
-			return fp; /*Handle*/
-		},
-		remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){
-			// summary:
-			//		clobbers the listener from the node
-			// node:
-			//		DOM node to attach the event to
-			// event:
-			//		the name of the handler to remove the function from
-			// handle:
-			//		the handle returned from add
-			if(node){
-				event = del._normalizeEventName(event);
-				if(!dojo.isIE && (event == "mouseenter" || event == "mouseleave")){
-					event = (event == "mouseenter") ? "mouseover" : "mouseout";
-				}
-
-				node.removeEventListener(event, handle, false);
-			}
-		},
-		_normalizeEventName: function(/*String*/ name){
-			// Generally, name should be lower case, unless it is special
-			// somehow (e.g. a Mozilla DOM event).
-			// Remove 'on'.
-			return name.slice(0,2) =="on" ? name.slice(2) : name;
-		},
-		_fixCallback: function(/*String*/ name, fp){
-			// By default, we only invoke _fixEvent for 'keypress'
-			// If code is added to _fixEvent for other events, we have
-			// to revisit this optimization.
-			// This also applies to _fixEvent overrides for Safari and Opera
-			// below.
-			return name != "keypress" ? fp : function(e){ return fp.call(this, del._fixEvent(e, this)); };
-		},
-		_fixEvent: function(evt, sender){
-			// _fixCallback only attaches us to keypress.
-			// Switch on evt.type anyway because we might 
-			// be called directly from dojo.fixEvent.
-			switch(evt.type){
-				case "keypress":
-					del._setKeyChar(evt);
-					break;
-			}
-			return evt;
-		},
-		_setKeyChar: function(evt){
-			evt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : '';
-			evt.charOrCode = evt.keyChar || evt.keyCode;
-		},
-		// For IE and Safari: some ctrl-key combinations (mostly w/punctuation) do not emit a char code in IE
-		// we map those virtual key codes to ascii here
-		// not valid for all (non-US) keyboards, so maybe we shouldn't bother
-		_punctMap: { 
-			106:42, 
-			111:47, 
-			186:59, 
-			187:43, 
-			188:44, 
-			189:45, 
-			190:46, 
-			191:47, 
-			192:96, 
-			219:91, 
-			220:92, 
-			221:93, 
-			222:39 
-		}
-	});
-
-	// DOM events
-	
-	dojo.fixEvent = function(/*Event*/ evt, /*DOMNode*/ sender){
-		// summary:
-		//		normalizes properties on the event object including event
-		//		bubbling methods, keystroke normalization, and x/y positions
-		// evt: Event
-		//		native event object
-		// sender: DOMNode
-		//		node to treat as "currentTarget"
-		return del._fixEvent(evt, sender);
-	}
-
-	dojo.stopEvent = function(/*Event*/ evt){
-		// summary:
-		//		prevents propagation and clobbers the default action of the
-		//		passed event
-		// evt: Event
-		//		The event object. If omitted, window.event is used on IE.
-		evt.preventDefault();
-		evt.stopPropagation();
-		// NOTE: below, this method is overridden for IE
-	}
-
-	// the default listener to use on dontFix nodes, overriden for IE
-	var node_listener = dojo._listener;
-	
-	// Unify connect and event listeners
-	dojo._connect = function(obj, event, context, method, dontFix){
-		// FIXME: need a more strict test
-		var isNode = obj && (obj.nodeType||obj.attachEvent||obj.addEventListener);
-		// choose one of three listener options: raw (connect.js), DOM event on a Node, custom event on a Node
-		// we need the third option to provide leak prevention on broken browsers (IE)
-		var lid = isNode ? (dontFix ? 2 : 1) : 0, l = [dojo._listener, del, node_listener][lid];
-		// create a listener
-		var h = l.add(obj, event, dojo.hitch(context, method));
-		// formerly, the disconnect package contained "l" directly, but if client code
-		// leaks the disconnect package (by connecting it to a node), referencing "l" 
-		// compounds the problem.
-		// instead we return a listener id, which requires custom _disconnect below.
-		// return disconnect package
-		return [ obj, event, h, lid ];
-	}
-
-	dojo._disconnect = function(obj, event, handle, listener){
-		([dojo._listener, del, node_listener][listener]).remove(obj, event, handle);
-	}
-
-	// Constants
-
-	// Public: client code should test
-	// keyCode against these named constants, as the
-	// actual codes can vary by browser.
-	dojo.keys = {
-		// summary:
-		//		Definitions for common key values
-		BACKSPACE: 8,
-		TAB: 9,
-		CLEAR: 12,
-		ENTER: 13,
-		SHIFT: 16,
-		CTRL: 17,
-		ALT: 18,
-		META: dojo.isSafari ? 91 : 224,		// the apple key on macs
-		PAUSE: 19,
-		CAPS_LOCK: 20,
-		ESCAPE: 27,
-		SPACE: 32,
-		PAGE_UP: 33,
-		PAGE_DOWN: 34,
-		END: 35,
-		HOME: 36,
-		LEFT_ARROW: 37,
-		UP_ARROW: 38,
-		RIGHT_ARROW: 39,
-		DOWN_ARROW: 40,
-		INSERT: 45,
-		DELETE: 46,
-		HELP: 47,
-		LEFT_WINDOW: 91,
-		RIGHT_WINDOW: 92,
-		SELECT: 93,
-		NUMPAD_0: 96,
-		NUMPAD_1: 97,
-		NUMPAD_2: 98,
-		NUMPAD_3: 99,
-		NUMPAD_4: 100,
-		NUMPAD_5: 101,
-		NUMPAD_6: 102,
-		NUMPAD_7: 103,
-		NUMPAD_8: 104,
-		NUMPAD_9: 105,
-		NUMPAD_MULTIPLY: 106,
-		NUMPAD_PLUS: 107,
-		NUMPAD_ENTER: 108,
-		NUMPAD_MINUS: 109,
-		NUMPAD_PERIOD: 110,
-		NUMPAD_DIVIDE: 111,
-		F1: 112,
-		F2: 113,
-		F3: 114,
-		F4: 115,
-		F5: 116,
-		F6: 117,
-		F7: 118,
-		F8: 119,
-		F9: 120,
-		F10: 121,
-		F11: 122,
-		F12: 123,
-		F13: 124,
-		F14: 125,
-		F15: 126,
-		NUM_LOCK: 144,
-		SCROLL_LOCK: 145,
-		// virtual key mapping
-		copyKey: dojo.isMac && !dojo.isAIR ? (dojo.isSafari ? 91 : 224 ) : 17
-	};
-	
-	var evtCopyKey = dojo.isMac ? "metaKey" : "ctrlKey";
-	
-	dojo.isCopyKey = function(e){
-		// summary:
-		//		Checks an event for the copy key (meta on Mac, and ctrl anywhere else)
-		// e: Event
-		//		Event object to examine
-		return e[evtCopyKey];	// Boolean
-	};
-
-	// Public: decoding mouse buttons from events
-
-/*=====
-	dojo.mouseButtons = {
-		// LEFT: Number
-		//		Numeric value of the left mouse button for the platform.
-		LEFT:   0,
-		// MIDDLE: Number
-		//		Numeric value of the middle mouse button for the platform.
-		MIDDLE: 1,
-		// RIGHT: Number
-		//		Numeric value of the right mouse button for the platform.
-		RIGHT:  2,
-	
-		isButton: function(e, button){
-			// summary:
-			//		Checks an event object for a pressed button
-			// e: Event
-			//		Event object to examine
-			// button: Number
-			//		The button value (example: dojo.mouseButton.LEFT)
-			return e.button == button; // Boolean
-		},
-		isLeft: function(e){
-			// summary:
-			//		Checks an event object for the pressed left button
-			// e: Event
-			//		Event object to examine
-			return e.button == 0; // Boolean
-		},
-		isMiddle: function(e){
-			// summary:
-			//		Checks an event object for the pressed middle button
-			// e: Event
-			//		Event object to examine
-			return e.button == 1; // Boolean
-		},
-		isRight: function(e){
-			// summary:
-			//		Checks an event object for the pressed right button
-			// e: Event
-			//		Event object to examine
-			return e.button == 2; // Boolean
-		}
-	};
-=====*/
-
-		if(dojo.isIE){
-		dojo.mouseButtons = {
-			LEFT:   1,
-			MIDDLE: 4,
-			RIGHT:  2,
-			// helper functions
-			isButton: function(e, button){ return e.button & button; },
-			isLeft:   function(e){ return e.button & 1; },
-			isMiddle: function(e){ return e.button & 4; },
-			isRight:  function(e){ return e.button & 2; }
-		};
-	}else{
-			dojo.mouseButtons = {
-			LEFT:   0,
-			MIDDLE: 1,
-			RIGHT:  2,
-			// helper functions
-			isButton: function(e, button){ return e.button == button; },
-			isLeft:   function(e){ return e.button == 0; },
-			isMiddle: function(e){ return e.button == 1; },
-			isRight:  function(e){ return e.button == 2; }
-		};
-		}
-	
-		// IE event normalization
-	if(dojo.isIE){ 
-		var _trySetKeyCode = function(e, code){
-			try{
-				// squelch errors when keyCode is read-only
-				// (e.g. if keyCode is ctrl or shift)
-				return (e.keyCode = code);
-			}catch(e){
-				return 0;
-			}
-		}
-
-		// by default, use the standard listener
-		var iel = dojo._listener;
-		var listenersName = (dojo._ieListenersName = "_" + dojo._scopeName + "_listeners");
-		// dispatcher tracking property
-		if(!dojo.config._allow_leaks){
-			// custom listener that handles leak protection for DOM events
-			node_listener = iel = dojo._ie_listener = {
-				// support handler indirection: event handler functions are 
-				// referenced here. Event dispatchers hold only indices.
-				handlers: [],
-				// add a listener to an object
-				add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){
-					source = source || dojo.global;
-					var f = source[method];
-					if(!f||!f[listenersName]){
-						var d = dojo._getIeDispatcher();
-						// original target function is special
-						d.target = f && (ieh.push(f) - 1);
-						// dispatcher holds a list of indices into handlers table
-						d[listenersName] = [];
-						// redirect source to dispatcher
-						f = source[method] = d;
-					}
-					return f[listenersName].push(ieh.push(listener) - 1) ; /*Handle*/
-				},
-				// remove a listener from an object
-				remove: function(/*Object*/ source, /*String*/ method, /*Handle*/ handle){
-					var f = (source||dojo.global)[method], l = f && f[listenersName];
-					if(f && l && handle--){
-						delete ieh[l[handle]];
-						delete l[handle];
-					}
-				}
-			};
-			// alias used above
-			var ieh = iel.handlers;
-		}
-
-		dojo.mixin(del, {
-			add: function(/*DOMNode*/ node, /*String*/ event, /*Function*/ fp){
-				if(!node){return;} // undefined
-				event = del._normalizeEventName(event);
-				if(event=="onkeypress"){
-					// we need to listen to onkeydown to synthesize
-					// keypress events that otherwise won't fire
-					// on IE
-					var kd = node.onkeydown;
-					if(!kd || !kd[listenersName] || !kd._stealthKeydownHandle){
-						var h = del.add(node, "onkeydown", del._stealthKeyDown);
-						kd = node.onkeydown;
-						kd._stealthKeydownHandle = h;
-						kd._stealthKeydownRefs = 1;
-					}else{
-						kd._stealthKeydownRefs++;
-					}
-				}
-				return iel.add(node, event, del._fixCallback(fp));
-			},
-			remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){
-				event = del._normalizeEventName(event);
-				iel.remove(node, event, handle); 
-				if(event=="onkeypress"){
-					var kd = node.onkeydown;
-					if(--kd._stealthKeydownRefs <= 0){
-						iel.remove(node, "onkeydown", kd._stealthKeydownHandle);
-						delete kd._stealthKeydownHandle;
-					}
-				}
-			},
-			_normalizeEventName: function(/*String*/ eventName){
-				// Generally, eventName should be lower case, unless it is
-				// special somehow (e.g. a Mozilla event)
-				// ensure 'on'
-				return eventName.slice(0,2) != "on" ? "on" + eventName : eventName;
-			},
-			_nop: function(){},
-			_fixEvent: function(/*Event*/ evt, /*DOMNode*/ sender){
-				// summary:
-				//		normalizes properties on the event object including event
-				//		bubbling methods, keystroke normalization, and x/y positions
-				// evt:
-				//		native event object
-				// sender:
-				//		node to treat as "currentTarget"
-				if(!evt){
-					var w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window;
-					evt = w.event; 
-				}
-				if(!evt){return(evt);}
-				evt.target = evt.srcElement; 
-				evt.currentTarget = (sender || evt.srcElement); 
-				evt.layerX = evt.offsetX;
-				evt.layerY = evt.offsetY;
-				// FIXME: scroll position query is duped from dojo.html to
-				// avoid dependency on that entire module. Now that HTML is in
-				// Base, we should convert back to something similar there.
-				var se = evt.srcElement, doc = (se && se.ownerDocument) || document;
-				// DO NOT replace the following to use dojo.body(), in IE, document.documentElement should be used
-				// here rather than document.body
-				var docBody = ((dojo.isIE < 6) || (doc["compatMode"] == "BackCompat")) ? doc.body : doc.documentElement;
-				var offset = dojo._getIeDocumentElementOffset();
-				evt.pageX = evt.clientX + dojo._fixIeBiDiScrollLeft(docBody.scrollLeft || 0) - offset.x;
-				evt.pageY = evt.clientY + (docBody.scrollTop || 0) - offset.y;
-				if(evt.type == "mouseover"){ 
-					evt.relatedTarget = evt.fromElement;
-				}
-				if(evt.type == "mouseout"){ 
-					evt.relatedTarget = evt.toElement;
-				}
-				evt.stopPropagation = del._stopPropagation;
-				evt.preventDefault = del._preventDefault;
-				return del._fixKeys(evt);
-			},
-			_fixKeys: function(evt){
-				switch(evt.type){
-					case "keypress":
-						var c = ("charCode" in evt ? evt.charCode : evt.keyCode);
-						if (c==10){
-							// CTRL-ENTER is CTRL-ASCII(10) on IE, but CTRL-ENTER on Mozilla
-							c=0;
-							evt.keyCode = 13;
-						}else if(c==13||c==27){
-							c=0; // Mozilla considers ENTER and ESC non-printable
-						}else if(c==3){
-							c=99; // Mozilla maps CTRL-BREAK to CTRL-c
-						}
-						// Mozilla sets keyCode to 0 when there is a charCode
-						// but that stops the event on IE.
-						evt.charCode = c;
-						del._setKeyChar(evt);
-						break;
-				}
-				return evt;
-			},
-			_stealthKeyDown: function(evt){
-				// IE doesn't fire keypress for most non-printable characters.
-				// other browsers do, we simulate it here.
-				var kp = evt.currentTarget.onkeypress;
-				// only works if kp exists and is a dispatcher
-				if(!kp || !kp[listenersName]){ return; }
-				// munge key/charCode
-				var k=evt.keyCode;
-				// These are Windows Virtual Key Codes
-				// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp
-				var unprintable = k!=13 && k!=32 && k!=27 && (k<48||k>90) && (k<96||k>111) && (k<186||k>192) && (k<219||k>222);
-				// synthesize keypress for most unprintables and CTRL-keys
-				if(unprintable||evt.ctrlKey){
-					var c = unprintable ? 0 : k;
-					if(evt.ctrlKey){
-						if(k==3 || k==13){
-							return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively 
-						}else if(c>95 && c<106){ 
-							c -= 48; // map CTRL-[numpad 0-9] to ASCII
-						}else if((!evt.shiftKey)&&(c>=65&&c<=90)){ 
-							c += 32; // map CTRL-[A-Z] to lowercase
-						}else{ 
-							c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII
-						}
-					}
-					// simulate a keypress event
-					var faux = del._synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c});
-					kp.call(evt.currentTarget, faux);
-					evt.cancelBubble = faux.cancelBubble;
-					evt.returnValue = faux.returnValue;
-					_trySetKeyCode(evt, faux.keyCode);
-				}
-			},
-			// Called in Event scope
-			_stopPropagation: function(){
-				this.cancelBubble = true; 
-			},
-			_preventDefault: function(){
-				// Setting keyCode to 0 is the only way to prevent certain keypresses (namely
-				// ctrl-combinations that correspond to menu accelerator keys).
-				// Otoh, it prevents upstream listeners from getting this information
-				// Try to split the difference here by clobbering keyCode only for ctrl 
-				// combinations. If you still need to access the key upstream, bubbledKeyCode is
-				// provided as a workaround.
-				this.bubbledKeyCode = this.keyCode;
-				if(this.ctrlKey){_trySetKeyCode(this, 0);}
-				this.returnValue = false;
-			}
-		});
-				
-		// override stopEvent for IE
-		dojo.stopEvent = function(evt){
-			evt = evt || window.event;
-			del._stopPropagation.call(evt);
-			del._preventDefault.call(evt);
-		}
-	}
-	
-	del._synthesizeEvent = function(evt, props){
-			var faux = dojo.mixin({}, evt, props);
-			del._setKeyChar(faux);
-			// FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); 
-			// but it throws an error when preventDefault is invoked on Safari
-			// does Event.preventDefault not support "apply" on Safari?
-			faux.preventDefault = function(){ evt.preventDefault(); }; 
-			faux.stopPropagation = function(){ evt.stopPropagation(); }; 
-			return faux;
-	}
-	
-		// Opera event normalization
-	if(dojo.isOpera){
-		dojo.mixin(del, {
-			_fixEvent: function(evt, sender){
-				switch(evt.type){
-					case "keypress":
-						var c = evt.which;
-						if(c==3){
-							c=99; // Mozilla maps CTRL-BREAK to CTRL-c
-						}
-						// can't trap some keys at all, like INSERT and DELETE
-						// there is no differentiating info between DELETE and ".", or INSERT and "-"
-						c = c<41 && !evt.shiftKey ? 0 : c;
-						if(evt.ctrlKey && !evt.shiftKey && c>=65 && c<=90){
-							// lowercase CTRL-[A-Z] keys
-							c += 32;
-						}
-						return del._synthesizeEvent(evt, { charCode: c });
-				}
-				return evt;
-			}
-		});
-	}
-	
-		// Webkit event normalization
-	if(dojo.isWebKit){
-				del._add = del.add;
-		del._remove = del.remove;
-
-		dojo.mixin(del, {
-			add: function(/*DOMNode*/ node, /*String*/ event, /*Function*/ fp){
-				if(!node){return;} // undefined
-				var handle = del._add(node, event, fp);
-				if(del._normalizeEventName(event) == "keypress"){
-					// we need to listen to onkeydown to synthesize
-					// keypress events that otherwise won't fire
-					// in Safari 3.1+: https://lists.webkit.org/pipermail/webkit-dev/2007-December/002992.html
-					handle._stealthKeyDownHandle = del._add(node, "keydown", function(evt){
-						//A variation on the IE _stealthKeydown function
-						//Synthesize an onkeypress event, but only for unprintable characters.
-						var k=evt.keyCode;
-						// These are Windows Virtual Key Codes
-						// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp
-						var unprintable = k!=13 && k!=32 && (k<48 || k>90) && (k<96 || k>111) && (k<186 || k>192) && (k<219 || k>222);
-						// synthesize keypress for most unprintables and CTRL-keys
-						if(unprintable || evt.ctrlKey){
-							var c = unprintable ? 0 : k;
-							if(evt.ctrlKey){
-								if(k==3 || k==13){
-									return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively 
-								}else if(c>95 && c<106){ 
-									c -= 48; // map CTRL-[numpad 0-9] to ASCII
-								}else if(!evt.shiftKey && c>=65 && c<=90){ 
-									c += 32; // map CTRL-[A-Z] to lowercase
-								}else{ 
-									c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII
-								}
-							}
-							// simulate a keypress event
-							var faux = del._synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c});
-							fp.call(evt.currentTarget, faux);
-						}
-					});
-				}
-				return handle; /*Handle*/
-			},
-
-			remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){
-				if(node){
-					if(handle._stealthKeyDownHandle){
-						del._remove(node, "keydown", handle._stealthKeyDownHandle);
-					}
-					del._remove(node, event, handle);
-				}
-			},
-			_fixEvent: function(evt, sender){
-				switch(evt.type){
-					case "keypress":
-						if(evt.faux){ return evt; }
-						var c = evt.charCode;
-						c = c>=32 ? c : 0;
-						return del._synthesizeEvent(evt, {charCode: c, faux: true});
-				}
-				return evt;
-			}
-		});
-		}
-	})();
-
-if(dojo.isIE){
-	// keep this out of the closure
-	// closing over 'iel' or 'ieh' b0rks leak prevention
-	// ls[i] is an index into the master handler array
-	dojo._ieDispatcher = function(args, sender){
-		var ap = Array.prototype,
-			h = dojo._ie_listener.handlers,
-			c = args.callee,
-			ls = c[dojo._ieListenersName],
-			t = h[c.target];
-		// return value comes from original target function
-		var r = t && t.apply(sender, args);
-		// make local copy of listener array so it's immutable during processing
-		var lls = [].concat(ls);
-		// invoke listeners after target function
-		for(var i in lls){
-			var f = h[lls[i]];
-			if(!(i in ap) && f){
-				f.apply(sender, args);
-			}
-		}
-		return r;
-	}
-	dojo._getIeDispatcher = function(){
-		// ensure the returned function closes over nothing ("new Function" apparently doesn't close)
-		return new Function(dojo._scopeName + "._ieDispatcher(arguments, this)"); // function
-	}
-	// keep this out of the closure to reduce RAM allocation
-	dojo._event_listener._fixCallback = function(fp){
-		var f = dojo._event_listener._fixEvent;
-		return function(e){ return fp.call(this, f(e, this)); };
-	}
-}
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/fx.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/fx.js
deleted file mode 100644
index 9b87b95..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/fx.js
+++ /dev/null
@@ -1,671 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo._base.fx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._base.fx"] = true;
-dojo.provide("dojo._base.fx");
-dojo.require("dojo._base.Color");
-dojo.require("dojo._base.connect");
-dojo.require("dojo._base.lang");
-dojo.require("dojo._base.html");
-
-/*
-	Animation loosely package based on Dan Pupius' work, contributed under CLA: 
-		http://pupius.co.uk/js/Toolkit.Drawing.js
-*/
-(function(){ 
-	var d = dojo;
-	var _mixin = d._mixin;
-	
-	dojo._Line = function(/*int*/ start, /*int*/ end){
-		//	summary:
-		//		dojo._Line is the object used to generate values from a start value
-		//		to an end value
-		//	start: int
-		//		Beginning value for range
-		//	end: int
-		//		Ending value for range
-		this.start = start;
-		this.end = end;
-	};
-	
-	dojo._Line.prototype.getValue = function(/*float*/ n){
-		//	summary: Returns the point on the line
-		//	n: a floating point number greater than 0 and less than 1
-		return ((this.end - this.start) * n) + this.start; // Decimal
-	};
-	
-	dojo.Animation = function(args){
-		//	summary:
-		//		A generic animation class that fires callbacks into its handlers
-		//		object at various states. 
-		//	description:
-		//		A generic animation class that fires callbacks into its handlers
-		//		object at various states. Nearly all dojo animation functions
-		//		return an instance of this method, usually without calling the
-		//		.play() method beforehand. Therefore, you will likely need to
-		//		call .play() on instances of `dojo.Animation` when one is
-		//		returned.
-		// args: Object
-		//		The 'magic argument', mixing all the properties into this
-		//		animation instance. 
-		
-		_mixin(this, args);
-		if(d.isArray(this.curve)){
-			this.curve = new d._Line(this.curve[0], this.curve[1]);
-		}
-		
-	};
-	
-	// Alias to drop come 2.0:
-	d._Animation = d.Animation;
-	
-	d.extend(dojo.Animation, {
-		// duration: Integer
-		//		The time in milliseonds the animation will take to run
-		duration: 350,
-	
-	/*=====
-		// curve: dojo._Line|Array
-		//		A two element array of start and end values, or a `dojo._Line` instance to be
-		//		used in the Animation. 
-		curve: null,
-	
-		// easing: Function?
-		//		A Function to adjust the acceleration (or deceleration) of the progress 
-		//		across a dojo._Line
-		easing: null,
-	=====*/
-	
-		// repeat: Integer?
-		//		The number of times to loop the animation
-		repeat: 0,
-	
-		// rate: Integer?
-		//		the time in milliseconds to wait before advancing to next frame 
-		//		(used as a fps timer: 1000/rate = fps)
-		rate: 20 /* 50 fps */,
-	
-	/*===== 
-		// delay: Integer?
-		//		The time in milliseconds to wait before starting animation after it 
-		//		has been .play()'ed
-		delay: null,
-	
-		// beforeBegin: Event?
-		//		Synthetic event fired before a dojo.Animation begins playing (synchronous)
-		beforeBegin: null,
-	
-		// onBegin: Event?
-		//		Synthetic event fired as a dojo.Animation begins playing (useful?)
-		onBegin: null,
-	
-		// onAnimate: Event?
-		//		Synthetic event fired at each interval of a `dojo.Animation`
-		onAnimate: null,
-	
-		// onEnd: Event?
-		//		Synthetic event fired after the final frame of a `dojo.Animation`
-		onEnd: null,
-	
-		// onPlay: Event?
-		//		Synthetic event fired any time a `dojo.Animation` is play()'ed
-		onPlay: null,
-	
-		// onPause: Event?
-		//		Synthetic event fired when a `dojo.Animation` is paused
-		onPause: null,
-	
-		// onStop: Event
-		//		Synthetic event fires when a `dojo.Animation` is stopped
-		onStop: null,
-	
-	=====*/
-	
-		_percent: 0,
-		_startRepeatCount: 0,
-
-		_getStep: function(){
-			var _p = this._percent,
-				_e = this.easing
-			;
-			return _e ? _e(_p) : _p;
-		},
-		_fire: function(/*Event*/ evt, /*Array?*/ args){
-			//	summary:
-			//		Convenience function.  Fire event "evt" and pass it the
-			//		arguments specified in "args".
-			//	description:
-			//		Convenience function.  Fire event "evt" and pass it the
-			//		arguments specified in "args".
-			//		Fires the callback in the scope of the `dojo.Animation` 
-			//		instance.
-			//	evt:
-			//		The event to fire.
-			//	args:
-			//		The arguments to pass to the event.
-			var a = args||[];
-			if(this[evt]){
-				if(d.config.debugAtAllCosts){
-					this[evt].apply(this, a);
-				}else{
-					try{
-						this[evt].apply(this, a);
-					}catch(e){
-						// squelch and log because we shouldn't allow exceptions in
-						// synthetic event handlers to cause the internal timer to run
-						// amuck, potentially pegging the CPU. I'm not a fan of this
-						// squelch, but hopefully logging will make it clear what's
-						// going on
-						console.error("exception in animation handler for:", evt);
-						console.error(e);
-					}
-				}
-			}
-			return this; // dojo.Animation
-		},
-
-		play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){
-			// summary:
-			//		Start the animation.
-			// delay:
-			//		How many milliseconds to delay before starting.
-			// gotoStart:
-			//		If true, starts the animation from the beginning; otherwise,
-			//		starts it from its current position.
-			// returns: dojo.Animation
-			//		The instance to allow chaining.
-
-			var _t = this;
-			if(_t._delayTimer){ _t._clearTimer(); }
-			if(gotoStart){
-				_t._stopTimer();
-				_t._active = _t._paused = false;
-				_t._percent = 0;
-			}else if(_t._active && !_t._paused){
-				return _t;
-			}
-	
-			_t._fire("beforeBegin", [_t.node]);
-	
-			var de = delay || _t.delay,
-				_p = dojo.hitch(_t, "_play", gotoStart);
-				
-			if(de > 0){
-				_t._delayTimer = setTimeout(_p, de);
-				return _t;
-			}
-			_p();
-			return _t;
-		},
-	
-		_play: function(gotoStart){
-			var _t = this;
-			if(_t._delayTimer){ _t._clearTimer(); }
-			_t._startTime = new Date().valueOf();
-			if(_t._paused){
-				_t._startTime -= _t.duration * _t._percent;
-			}
-			_t._endTime = _t._startTime + _t.duration;
-	
-			_t._active = true;
-			_t._paused = false;
-			var value = _t.curve.getValue(_t._getStep());
-			if(!_t._percent){
-				if(!_t._startRepeatCount){
-					_t._startRepeatCount = _t.repeat;
-				}
-				_t._fire("onBegin", [value]);
-			}
-	
-			_t._fire("onPlay", [value]);
-	
-			_t._cycle();
-			return _t; // dojo.Animation
-		},
-	
-		pause: function(){
-			// summary: Pauses a running animation.
-			var _t = this;
-			if(_t._delayTimer){ _t._clearTimer(); }
-			_t._stopTimer();
-			if(!_t._active){ return _t; /*dojo.Animation*/ }
-			_t._paused = true;
-			_t._fire("onPause", [_t.curve.getValue(_t._getStep())]);
-			return _t; // dojo.Animation
-		},
-	
-		gotoPercent: function(/*Decimal*/ percent, /*Boolean?*/ andPlay){
-			//	summary:
-			//		Sets the progress of the animation.
-			//	percent:
-			//		A percentage in decimal notation (between and including 0.0 and 1.0).
-			//	andPlay:
-			//		If true, play the animation after setting the progress.
-			var _t = this;
-			_t._stopTimer();
-			_t._active = _t._paused = true;
-			_t._percent = percent;
-			if(andPlay){ _t.play(); }
-			return _t; // dojo.Animation
-		},
-	
-		stop: function(/*boolean?*/ gotoEnd){
-			// summary: Stops a running animation.
-			// gotoEnd: If true, the animation will end.
-			var _t = this;
-			if(_t._delayTimer){ _t._clearTimer(); }
-			if(!_t._timer){ return _t; /* dojo.Animation */ }
-			_t._stopTimer();
-			if(gotoEnd){
-				_t._percent = 1;
-			}
-			_t._fire("onStop", [_t.curve.getValue(_t._getStep())]);
-			_t._active = _t._paused = false;
-			return _t; // dojo.Animation
-		},
-	
-		status: function(){
-			// summary: 
-			//		Returns a string token representation of the status of
-			//		the animation, one of: "paused", "playing", "stopped"
-			if(this._active){
-				return this._paused ? "paused" : "playing"; // String
-			}
-			return "stopped"; // String
-		},
-	
-		_cycle: function(){
-			var _t = this;
-			if(_t._active){
-				var curr = new Date().valueOf();
-				var step = (curr - _t._startTime) / (_t._endTime - _t._startTime);
-	
-				if(step >= 1){
-					step = 1;
-				}
-				_t._percent = step;
-	
-				// Perform easing
-				if(_t.easing){
-					step = _t.easing(step);
-				}
-	
-				_t._fire("onAnimate", [_t.curve.getValue(step)]);
-	
-				if(_t._percent < 1){
-					_t._startTimer();
-				}else{
-					_t._active = false;
-	
-					if(_t.repeat > 0){
-						_t.repeat--;
-						_t.play(null, true);
-					}else if(_t.repeat == -1){
-						_t.play(null, true);
-					}else{
-						if(_t._startRepeatCount){
-							_t.repeat = _t._startRepeatCount;
-							_t._startRepeatCount = 0;
-						}
-					}
-					_t._percent = 0;
-					_t._fire("onEnd", [_t.node]);
-					!_t.repeat && _t._stopTimer();
-				}
-			}
-			return _t; // dojo.Animation
-		},
-		
-		_clearTimer: function(){
-			// summary: Clear the play delay timer
-			clearTimeout(this._delayTimer);
-			delete this._delayTimer;
-		}
-		
-	});
-
-	// the local timer, stubbed into all Animation instances
-	var ctr = 0,
-		_globalTimerList = [],
-		timer = null,
-		runner = {
-			run: function(){}
-		};
-
-	d.extend(d.Animation, {
-
-		_startTimer: function(){
-			if(!this._timer){
-				this._timer = d.connect(runner, "run", this, "_cycle");
-				ctr++;
-			}
-			if(!timer){
-				timer = setInterval(d.hitch(runner, "run"), this.rate);
-			}
-		},
-
-		_stopTimer: function(){
-			if(this._timer){
-				d.disconnect(this._timer);
-				this._timer = null;
-				ctr--;
-			}
-			if(ctr <= 0){
-				clearInterval(timer);
-				timer = null;
-				ctr = 0;
-			}
-		}
-
-	});
-
-	var _makeFadeable = 
-				d.isIE ? function(node){
-			// only set the zoom if the "tickle" value would be the same as the
-			// default
-			var ns = node.style;
-			// don't set the width to auto if it didn't already cascade that way.
-			// We don't want to f anyones designs
-			if(!ns.width.length && d.style(node, "width") == "auto"){
-				ns.width = "auto";
-			}
-		} : 
-				function(){};
-
-	dojo._fade = function(/*Object*/ args){
-		//	summary: 
-		//		Returns an animation that will fade the node defined by
-		//		args.node from the start to end values passed (args.start
-		//		args.end) (end is mandatory, start is optional)
-
-		args.node = d.byId(args.node);
-		var fArgs = _mixin({ properties: {} }, args),
-		 	props = (fArgs.properties.opacity = {});
-		
-		props.start = !("start" in fArgs) ?
-			function(){ 
-				return +d.style(fArgs.node, "opacity")||0; 
-			} : fArgs.start;
-		props.end = fArgs.end;
-
-		var anim = d.animateProperty(fArgs);
-		d.connect(anim, "beforeBegin", d.partial(_makeFadeable, fArgs.node));
-
-		return anim; // dojo.Animation
-	};
-
-	/*=====
-	dojo.__FadeArgs = function(node, duration, easing){
-		// 	node: DOMNode|String
-		//		The node referenced in the animation
-		//	duration: Integer?
-		//		Duration of the animation in milliseconds.
-		//	easing: Function?
-		//		An easing function.
-		this.node = node;
-		this.duration = duration;
-		this.easing = easing;
-	}
-	=====*/
-
-	dojo.fadeIn = function(/*dojo.__FadeArgs*/ args){
-		// summary: 
-		//		Returns an animation that will fade node defined in 'args' from
-		//		its current opacity to fully opaque.
-		return d._fade(_mixin({ end: 1 }, args)); // dojo.Animation
-	};
-
-	dojo.fadeOut = function(/*dojo.__FadeArgs*/  args){
-		// summary: 
-		//		Returns an animation that will fade node defined in 'args'
-		//		from its current opacity to fully transparent.
-		return d._fade(_mixin({ end: 0 }, args)); // dojo.Animation
-	};
-
-	dojo._defaultEasing = function(/*Decimal?*/ n){
-		// summary: The default easing function for dojo.Animation(s)
-		return 0.5 + ((Math.sin((n + 1.5) * Math.PI)) / 2);
-	};
-
-	var PropLine = function(properties){
-		// PropLine is an internal class which is used to model the values of
-		// an a group of CSS properties across an animation lifecycle. In
-		// particular, the "getValue" function handles getting interpolated
-		// values between start and end for a particular CSS value.
-		this._properties = properties;
-		for(var p in properties){
-			var prop = properties[p];
-			if(prop.start instanceof d.Color){
-				// create a reusable temp color object to keep intermediate results
-				prop.tempColor = new d.Color();
-			}
-		}
-	};
-
-	PropLine.prototype.getValue = function(r){
-		var ret = {};
-		for(var p in this._properties){
-			var prop = this._properties[p],
-				start = prop.start;
-			if(start instanceof d.Color){
-				ret[p] = d.blendColors(start, prop.end, r, prop.tempColor).toCss();
-			}else if(!d.isArray(start)){
-				ret[p] = ((prop.end - start) * r) + start + (p != "opacity" ? prop.units || "px" : 0);
-			}
-		}
-		return ret;
-	};
-
-	/*=====
-	dojo.declare("dojo.__AnimArgs", [dojo.__FadeArgs], {
-		// Properties: Object?
-		//	A hash map of style properties to Objects describing the transition,
-		//	such as the properties of dojo._Line with an additional 'units' property
-		properties: {}
-		
-		//TODOC: add event callbacks
-	});
-	=====*/
-
-	dojo.animateProperty = function(/*dojo.__AnimArgs*/ args){
-		// summary: 
-		//		Returns an animation that will transition the properties of
-		//		node defined in `args` depending how they are defined in
-		//		`args.properties`
-		//
-		// description:
-		//		`dojo.animateProperty` is the foundation of most `dojo.fx`
-		//		animations. It takes an object of "properties" corresponding to
-		//		style properties, and animates them in parallel over a set
-		//		duration.
-		//	
-		// example:
-		//		A simple animation that changes the width of the specified node.
-		//	|	dojo.animateProperty({ 
-		//	|		node: "nodeId",
-		//	|		properties: { width: 400 },
-		//	|	}).play();
-		//		Dojo figures out the start value for the width and converts the
-		//		integer specified for the width to the more expressive but
-		//		verbose form `{ width: { end: '400', units: 'px' } }` which you
-		//		can also specify directly. Defaults to 'px' if ommitted.
-		//
-		// example:
-		//		Animate width, height, and padding over 2 seconds... the
-		//		pedantic way:
-		//	|	dojo.animateProperty({ node: node, duration:2000,
-		//	|		properties: {
-		//	|			width: { start: '200', end: '400', units:"px" },
-		//	|			height: { start:'200', end: '400', units:"px" },
-		//	|			paddingTop: { start:'5', end:'50', units:"px" } 
-		//	|		}
-		//	|	}).play();
-		//		Note 'paddingTop' is used over 'padding-top'. Multi-name CSS properties
-		//		are written using "mixed case", as the hyphen is illegal as an object key.
-		//		
-		// example:
-		//		Plug in a different easing function and register a callback for
-		//		when the animation ends. Easing functions accept values between
-		//		zero and one and return a value on that basis. In this case, an
-		//		exponential-in curve.
-		//	|	dojo.animateProperty({ 
-		//	|		node: "nodeId",
-		//	|		// dojo figures out the start value
-		//	|		properties: { width: { end: 400 } },
-		//	|		easing: function(n){
-		//	|			return (n==0) ? 0 : Math.pow(2, 10 * (n - 1));
-		//	|		},
-		//	|		onEnd: function(node){
-		//	|			// called when the animation finishes. The animation
-		//	|			// target is passed to this function
-		//	|		}
-		//	|	}).play(500); // delay playing half a second
-		//
-		// example:
-		//		Like all `dojo.Animation`s, animateProperty returns a handle to the
-		//		Animation instance, which fires the events common to Dojo FX. Use `dojo.connect`
-		//		to access these events outside of the Animation definiton:
-		//	|	var anim = dojo.animateProperty({
-		//	|		node:"someId",
-		//	|		properties:{
-		//	|			width:400, height:500
-		//	|		}
-		//	|	});
-		//	|	dojo.connect(anim,"onEnd", function(){
-		//	|		console.log("animation ended");
-		//	|	});
-		//	|	// play the animation now:
-		//	|	anim.play();
-		//
-		// example:
-		//		Each property can be a function whose return value is substituted along.
-		//		Additionally, each measurement (eg: start, end) can be a function. The node
-		//		reference is passed direcly to callbacks.
-		//	|	dojo.animateProperty({
-		//	|		node:"mine",
-		//	|		properties:{
-		//	|			height:function(node){
-		//	|				// shrink this node by 50%
-		//	|				return dojo.position(node).h / 2
-		//	|			},
-		//	|			width:{
-		//	|				start:function(node){ return 100; },
-		//	|				end:function(node){ return 200; }	
-		//	|			}
-		//	|		}
-		//	|	}).play();
-		//
-
-		var n = args.node = d.byId(args.node);
-		if(!args.easing){ args.easing = d._defaultEasing; }
-
-		var anim = new d.Animation(args);
-		d.connect(anim, "beforeBegin", anim, function(){
-			var pm = {};
-			for(var p in this.properties){
-				// Make shallow copy of properties into pm because we overwrite
-				// some values below. In particular if start/end are functions
-				// we don't want to overwrite them or the functions won't be
-				// called if the animation is reused.
-				if(p == "width" || p == "height"){
-					this.node.display = "block";
-				}
-				var prop = this.properties[p];
-				if(d.isFunction(prop)){
-					prop = prop(n);
-				}
-				prop = pm[p] = _mixin({}, (d.isObject(prop) ? prop: { end: prop }));
-
-				if(d.isFunction(prop.start)){
-					prop.start = prop.start(n);
-				}
-				if(d.isFunction(prop.end)){
-					prop.end = prop.end(n);
-				}
-				var isColor = (p.toLowerCase().indexOf("color") >= 0);
-				function getStyle(node, p){
-					// dojo.style(node, "height") can return "auto" or "" on IE; this is more reliable:
-					var v = { height: node.offsetHeight, width: node.offsetWidth }[p];
-					if(v !== undefined){ return v; }
-					v = d.style(node, p);
-					return (p == "opacity") ? +v : (isColor ? v : parseFloat(v));
-				}
-				if(!("end" in prop)){
-					prop.end = getStyle(n, p);
-				}else if(!("start" in prop)){
-					prop.start = getStyle(n, p);
-				}
-
-				if(isColor){
-					prop.start = new d.Color(prop.start);
-					prop.end = new d.Color(prop.end);
-				}else{
-					prop.start = (p == "opacity") ? +prop.start : parseFloat(prop.start);
-				}
-			}
-			this.curve = new PropLine(pm);
-		});
-		d.connect(anim, "onAnimate", d.hitch(d, "style", anim.node));
-		return anim; // dojo.Animation
-	};
-
-	dojo.anim = function(	/*DOMNode|String*/ 	node, 
-							/*Object*/ 			properties, 
-							/*Integer?*/		duration, 
-							/*Function?*/		easing, 
-							/*Function?*/		onEnd,
-							/*Integer?*/		delay){
-		//	summary:
-		//		A simpler interface to `dojo.animateProperty()`, also returns
-		//		an instance of `dojo.Animation` but begins the animation
-		//		immediately, unlike nearly every other Dojo animation API.
-		//	description:
-		//		`dojo.anim` is a simpler (but somewhat less powerful) version
-		//		of `dojo.animateProperty`.  It uses defaults for many basic properties
-		//		and allows for positional parameters to be used in place of the
-		//		packed "property bag" which is used for other Dojo animation
-		//		methods.
-		//
-		//		The `dojo.Animation` object returned from `dojo.anim` will be
-		//		already playing when it is returned from this function, so
-		//		calling play() on it again is (usually) a no-op.
-		//	node:
-		//		a DOM node or the id of a node to animate CSS properties on
-		//	duration:
-		//		The number of milliseconds over which the animation
-		//		should run. Defaults to the global animation default duration
-		//		(350ms).
-		//	easing:
-		//		An easing function over which to calculate acceleration
-		//		and deceleration of the animation through its duration.
-		//		A default easing algorithm is provided, but you may
-		//		plug in any you wish. A large selection of easing algorithms
-		//		are available in `dojo.fx.easing`.
-		//	onEnd:
-		//		A function to be called when the animation finishes
-		//		running.
-		//	delay:
-		//		The number of milliseconds to delay beginning the
-		//		animation by. The default is 0.
-		//	example:
-		//		Fade out a node
-		//	|	dojo.anim("id", { opacity: 0 });
-		//	example:
-		//		Fade out a node over a full second
-		//	|	dojo.anim("id", { opacity: 0 }, 1000);
-		return d.animateProperty({ // dojo.Animation
-			node: node,
-			duration: duration || d.Animation.prototype.duration,
-			properties: properties,
-			easing: easing,
-			onEnd: onEnd 
-		}).play(delay || 0);
-	};
-})();
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/html.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/html.js
deleted file mode 100644
index 168c4a2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/html.js
+++ /dev/null
@@ -1,1824 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo._base.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._base.html"] = true;
-dojo.require("dojo._base.lang");
-dojo.provide("dojo._base.html");
-
-// FIXME: need to add unit tests for all the semi-public methods
-
-try{
-	document.execCommand("BackgroundImageCache", false, true);
-}catch(e){
-	// sane browsers don't have cache "issues"
-}
-
-// =============================
-// DOM Functions
-// =============================
-
-/*=====
-dojo.byId = function(id, doc){
-	//	summary:
-	//		Returns DOM node with matching `id` attribute or `null`
-	//		if not found. If `id` is a DomNode, this function is a no-op.
-	//
-	//	id: String|DOMNode
-	//	 	A string to match an HTML id attribute or a reference to a DOM Node
-	//
-	//	doc: Document?
-	//		Document to work in. Defaults to the current value of
-	//		dojo.doc.  Can be used to retrieve
-	//		node references from other documents.
-	//
-	//	example:
-	//	Look up a node by ID:
-	//	|	var n = dojo.byId("foo");
-	//
-	//	example:
-	//	Check if a node exists, and use it.
-	//	|	var n = dojo.byId("bar");
-	//	|	if(n){ doStuff() ... }
-	//
-	//	example:
-	//	Allow string or DomNode references to be passed to a custom function:
-	//	|	var foo = function(nodeOrId){
-	//	|		nodeOrId = dojo.byId(nodeOrId);
-	//	|		// ... more stuff
-	//	|	}
-=====*/
-
-if(dojo.isIE || dojo.isOpera){
-	dojo.byId = function(id, doc){
-		if(typeof id != "string"){
-			return id;
-		}
-		var _d = doc || dojo.doc, te = _d.getElementById(id);
-		// attributes.id.value is better than just id in case the 
-		// user has a name=id inside a form
-		if(te && (te.attributes.id.value == id || te.id == id)){
-			return te;
-		}else{
-			var eles = _d.all[id];
-			if(!eles || eles.nodeName){
-				eles = [eles];
-			}
-			// if more than 1, choose first with the correct id
-			var i=0;
-			while((te=eles[i++])){
-				if((te.attributes && te.attributes.id && te.attributes.id.value == id)
-					|| te.id == id){
-					return te;
-				}
-			}
-		}
-	};
-}else{
-	dojo.byId = function(id, doc){
-		// inline'd type check
-		return (typeof id == "string") ? (doc || dojo.doc).getElementById(id) : id; // DomNode
-	};
-}
-/*=====
-};
-=====*/
-
-(function(){
-	var d = dojo;
-	var byId = d.byId;
-
-	var _destroyContainer = null,
-		_destroyDoc;
-		d.addOnWindowUnload(function(){
-		_destroyContainer = null; //prevent IE leak
-	});
-	
-/*=====
-	dojo._destroyElement = function(node){
-		// summary:
-		// 		Existing alias for `dojo.destroy`. Deprecated, will be removed
-		// 		in 2.0
-	}
-=====*/
-	dojo._destroyElement = dojo.destroy = function(/*String|DomNode*/node){
-		//	summary:
-		//		Removes a node from its parent, clobbering it and all of its
-		//		children.
-		//
-		//	description:
-		//		Removes a node from its parent, clobbering it and all of its
-		//		children. Function only works with DomNodes, and returns nothing.
-		//
-		//	node:
-		//		A String ID or DomNode reference of the element to be destroyed
-		//
-		//	example:
-		//	Destroy a node byId:
-		//	|	dojo.destroy("someId");
-		//
-		//	example:
-		//	Destroy all nodes in a list by reference:
-		//	|	dojo.query(".someNode").forEach(dojo.destroy);
-
-		node = byId(node);
-		try{
-			var doc = node.ownerDocument;
-			// cannot use _destroyContainer.ownerDocument since this can throw an exception on IE
-			if(!_destroyContainer || _destroyDoc != doc){
-				_destroyContainer = doc.createElement("div");
-				_destroyDoc = doc;
-			}
-			_destroyContainer.appendChild(node.parentNode ? node.parentNode.removeChild(node) : node);
-			// NOTE: see http://trac.dojotoolkit.org/ticket/2931. This may be a bug and not a feature
-			_destroyContainer.innerHTML = "";
-		}catch(e){
-			/* squelch */
-		}
-	};
-
-	dojo.isDescendant = function(/*DomNode|String*/node, /*DomNode|String*/ancestor){
-		//	summary:
-		//		Returns true if node is a descendant of ancestor
-		//	node: string id or node reference to test
-		//	ancestor: string id or node reference of potential parent to test against
-		//
-		// example:
-		//	Test is node id="bar" is a descendant of node id="foo"
-		//	|	if(dojo.isDescendant("bar", "foo")){ ... }
-		try{
-			node = byId(node);
-			ancestor = byId(ancestor);
-			while(node){
-				if(node == ancestor){
-					return true; // Boolean
-				}
-				node = node.parentNode;
-			}
-		}catch(e){ /* squelch, return false */ }
-		return false; // Boolean
-	};
-
-	dojo.setSelectable = function(/*DomNode|String*/node, /*Boolean*/selectable){
-		//	summary: 
-		//		Enable or disable selection on a node
-		//	node:
-		//		id or reference to node
-		//	selectable:
-		//		state to put the node in. false indicates unselectable, true 
-		//		allows selection.
-		//	example:
-		//	Make the node id="bar" unselectable
-		//	|	dojo.setSelectable("bar"); 
-		//	example:
-		//	Make the node id="bar" selectable
-		//	|	dojo.setSelectable("bar", true);
-		node = byId(node);
-				if(d.isMozilla){
-			node.style.MozUserSelect = selectable ? "" : "none";
-		}else if(d.isKhtml || d.isWebKit){
-					node.style.KhtmlUserSelect = selectable ? "auto" : "none";
-				}else if(d.isIE){
-			var v = (node.unselectable = selectable ? "" : "on");
-			d.query("*", node).forEach("item.unselectable = '"+v+"'");
-		}
-				//FIXME: else?  Opera?
-	};
-
-	var _insertBefore = function(/*DomNode*/node, /*DomNode*/ref){
-		var parent = ref.parentNode;
-		if(parent){
-			parent.insertBefore(node, ref);
-		}
-	};
-
-	var _insertAfter = function(/*DomNode*/node, /*DomNode*/ref){
-		//	summary:
-		//		Try to insert node after ref
-		var parent = ref.parentNode;
-		if(parent){
-			if(parent.lastChild == ref){
-				parent.appendChild(node);
-			}else{
-				parent.insertBefore(node, ref.nextSibling);
-			}
-		}
-	};
-
-	dojo.place = function(node, refNode, position){
-		//	summary:
-		//		Attempt to insert node into the DOM, choosing from various positioning options.
-		//		Returns the first argument resolved to a DOM node.
-		//
-		//	node: String|DomNode
-		//		id or node reference, or HTML fragment starting with "<" to place relative to refNode
-		//
-		//	refNode: String|DomNode
-		//		id or node reference to use as basis for placement
-		//
-		//	position: String|Number?
-		//		string noting the position of node relative to refNode or a
-		//		number indicating the location in the childNodes collection of refNode.
-		//		Accepted string values are:
-		//	|	* before
-		//	|	* after
-		//	|	* replace
-		//	|	* only
-		//	|	* first
-		//	|	* last
-		//		"first" and "last" indicate positions as children of refNode, "replace" replaces refNode,
-		//		"only" replaces all children.  position defaults to "last" if not specified
-		//
-		//	returns: DomNode
-		//		Returned values is the first argument resolved to a DOM node.
-		//
-		//		.place() is also a method of `dojo.NodeList`, allowing `dojo.query` node lookups.
-		//
-		// example:
-		//		Place a node by string id as the last child of another node by string id:
-		//	|	dojo.place("someNode", "anotherNode");
-		//
-		// example:
-		//		Place a node by string id before another node by string id
-		//	|	dojo.place("someNode", "anotherNode", "before");
-		//
-		// example:
-		//		Create a Node, and place it in the body element (last child):
-		//	|	dojo.place("<div></div>", dojo.body());
-		//
-		// example:
-		//		Put a new LI as the first child of a list by id:
-		//	|	dojo.place("<li></li>", "someUl", "first");
-
-		refNode = byId(refNode);
-		if(typeof node == "string"){ // inline'd type check
-			node = node.charAt(0) == "<" ? d._toDom(node, refNode.ownerDocument) : byId(node);
-		}
-		if(typeof position == "number"){ // inline'd type check
-			var cn = refNode.childNodes;
-			if(!cn.length || cn.length <= position){
-				refNode.appendChild(node);
-			}else{
-				_insertBefore(node, cn[position < 0 ? 0 : position]);
-			}
-		}else{
-			switch(position){
-				case "before":
-					_insertBefore(node, refNode);
-					break;
-				case "after":
-					_insertAfter(node, refNode);
-					break;
-				case "replace":
-					refNode.parentNode.replaceChild(node, refNode);
-					break;
-				case "only":
-					d.empty(refNode);
-					refNode.appendChild(node);
-					break;
-				case "first":
-					if(refNode.firstChild){
-						_insertBefore(node, refNode.firstChild);
-						break;
-					}
-					// else fallthrough...
-				default: // aka: last
-					refNode.appendChild(node);
-			}
-		}
-		return node; // DomNode
-	}
-
-	// Box functions will assume this model.
-	// On IE/Opera, BORDER_BOX will be set if the primary document is in quirks mode.
-	// Can be set to change behavior of box setters.
-
-	// can be either:
-	//	"border-box"
-	//	"content-box" (default)
-	dojo.boxModel = "content-box";
-
-	// We punt per-node box mode testing completely.
-	// If anybody cares, we can provide an additional (optional) unit 
-	// that overrides existing code to include per-node box sensitivity.
-
-	// Opera documentation claims that Opera 9 uses border-box in BackCompat mode.
-	// but experiments (Opera 9.10.8679 on Windows Vista) indicate that it actually continues to use content-box.
-	// IIRC, earlier versions of Opera did in fact use border-box.
-	// Opera guys, this is really confusing. Opera being broken in quirks mode is not our fault.
-
-		if(d.isIE /*|| dojo.isOpera*/){
-		// client code may have to adjust if compatMode varies across iframes
-		d.boxModel = document.compatMode == "BackCompat" ? "border-box" : "content-box";
-	}
-	
-	// =============================
-	// Style Functions
-	// =============================
-
-	// getComputedStyle drives most of the style code.
-	// Wherever possible, reuse the returned object.
-	//
-	// API functions below that need to access computed styles accept an 
-	// optional computedStyle parameter.
-	// If this parameter is omitted, the functions will call getComputedStyle themselves.
-	// This way, calling code can access computedStyle once, and then pass the reference to 
-	// multiple API functions.
-
-/*=====
-	dojo.getComputedStyle = function(node){
-		//	summary:
-		//		Returns a "computed style" object.
-		//
-		//	description:
-		//		Gets a "computed style" object which can be used to gather
-		//		information about the current state of the rendered node.
-		//
-		//		Note that this may behave differently on different browsers.
-		//		Values may have different formats and value encodings across
-		//		browsers.
-		//
-		//		Note also that this method is expensive.  Wherever possible,
-		//		reuse the returned object.
-		//
-		//		Use the dojo.style() method for more consistent (pixelized)
-		//		return values.
-		//
-		//	node: DOMNode
-		//		A reference to a DOM node. Does NOT support taking an
-		//		ID string for speed reasons.
-		//	example:
-		//	|	dojo.getComputedStyle(dojo.byId('foo')).borderWidth;
-		//
-		//	example:
-		//	Reusing the returned object, avoiding multiple lookups:
-		//	|	var cs = dojo.getComputedStyle(dojo.byId("someNode"));
-		//	|	var w = cs.width, h = cs.height;
-		return; // CSS2Properties
-	}
-=====*/
-
-	// Although we normally eschew argument validation at this
-	// level, here we test argument 'node' for (duck)type,
-	// by testing nodeType, ecause 'document' is the 'parentNode' of 'body'
-	// it is frequently sent to this function even 
-	// though it is not Element.
-	var gcs;
-		if(d.isWebKit){
-			gcs = function(/*DomNode*/node){
-			var s;
-			if(node.nodeType == 1){
-				var dv = node.ownerDocument.defaultView;
-				s = dv.getComputedStyle(node, null);
-				if(!s && node.style){
-					node.style.display = "";
-					s = dv.getComputedStyle(node, null);
-				}
-			}
-			return s || {};
-		};
-		}else if(d.isIE){
-		gcs = function(node){
-			// IE (as of 7) doesn't expose Element like sane browsers
-			return node.nodeType == 1 /* ELEMENT_NODE*/ ? node.currentStyle : {};
-		};
-	}else{
-		gcs = function(node){
-			return node.nodeType == 1 ?
-				node.ownerDocument.defaultView.getComputedStyle(node, null) : {};
-		};
-	}
-		dojo.getComputedStyle = gcs;
-
-		if(!d.isIE){
-			d._toPixelValue = function(element, value){
-			// style values can be floats, client code may want
-			// to round for integer pixels.
-			return parseFloat(value) || 0;
-		};
-		}else{
-		d._toPixelValue = function(element, avalue){
-			if(!avalue){ return 0; }
-			// on IE7, medium is usually 4 pixels
-			if(avalue == "medium"){ return 4; }
-			// style values can be floats, client code may
-			// want to round this value for integer pixels.
-			if(avalue.slice && avalue.slice(-2) == 'px'){ return parseFloat(avalue); }
-			with(element){
-				var sLeft = style.left;
-				var rsLeft = runtimeStyle.left;
-				runtimeStyle.left = currentStyle.left;
-				try{
-					// 'avalue' may be incompatible with style.left, which can cause IE to throw
-					// this has been observed for border widths using "thin", "medium", "thick" constants
-					// those particular constants could be trapped by a lookup
-					// but perhaps there are more
-					style.left = avalue;
-					avalue = style.pixelLeft;
-				}catch(e){
-					avalue = 0;
-				}
-				style.left = sLeft;
-				runtimeStyle.left = rsLeft;
-			}
-			return avalue;
-		}
-	}
-		var px = d._toPixelValue;
-
-	// FIXME: there opacity quirks on FF that we haven't ported over. Hrm.
-	/*=====
-	dojo._getOpacity = function(node){
-			//	summary:
-			//		Returns the current opacity of the passed node as a
-			//		floating-point value between 0 and 1.
-			//	node: DomNode
-			//		a reference to a DOM node. Does NOT support taking an
-			//		ID string for speed reasons.
-			//	returns: Number between 0 and 1
-			return; // Number
-	}
-	=====*/
-
-		var astr = "DXImageTransform.Microsoft.Alpha";
-	var af = function(n, f){
-		try{
-			return n.filters.item(astr);
-		}catch(e){
-			return f ? {} : null;
-		}
-	};
-
-		dojo._getOpacity =
-			d.isIE ? function(node){
-			try{
-				return af(node).Opacity / 100; // Number
-			}catch(e){
-				return 1; // Number
-			}
-		} :
-			function(node){
-			return gcs(node).opacity;
-		};
-
-	/*=====
-	dojo._setOpacity = function(node, opacity){
-			//	summary:
-			//		set the opacity of the passed node portably. Returns the
-			//		new opacity of the node.
-			//	node: DOMNode
-			//		a reference to a DOM node. Does NOT support taking an
-			//		ID string for performance reasons.
-			//	opacity: Number
-			//		A Number between 0 and 1. 0 specifies transparent.
-			//	returns: Number between 0 and 1
-			return; // Number
-	}
-	=====*/
-
-	dojo._setOpacity =
-				d.isIE ? function(/*DomNode*/node, /*Number*/opacity){
-			var ov = opacity * 100;
-			node.style.zoom = 1.0;
-
-			// on IE7 Alpha(Filter opacity=100) makes text look fuzzy so disable it altogether (bug #2661),
-			//but still update the opacity value so we can get a correct reading if it is read later.
-			af(node, 1).Enabled = !(opacity == 1);
-
-			if(!af(node)){
-				node.style.filter += " progid:" + astr + "(Opacity=" + ov + ")";
-			}else{
-				af(node, 1).Opacity = ov;
-			}
-
-			if(node.nodeName.toLowerCase() == "tr"){
-				d.query("> td", node).forEach(function(i){
-					d._setOpacity(i, opacity);
-				});
-			}
-			return opacity;
-		} :
-				function(node, opacity){
-			return node.style.opacity = opacity;
-		};
-
-	var _pixelNamesCache = {
-		left: true, top: true
-	};
-	var _pixelRegExp = /margin|padding|width|height|max|min|offset/;  // |border
-	var _toStyleValue = function(node, type, value){
-		type = type.toLowerCase(); // FIXME: should we really be doing string case conversion here? Should we cache it? Need to profile!
-				if(d.isIE){
-			if(value == "auto"){
-				if(type == "height"){ return node.offsetHeight; }
-				if(type == "width"){ return node.offsetWidth; }
-			}
-			if(type == "fontweight"){
-				switch(value){
-					case 700: return "bold";
-					case 400:
-					default: return "normal";
-				}
-			}
-		}
-				if(!(type in _pixelNamesCache)){
-			_pixelNamesCache[type] = _pixelRegExp.test(type);
-		}
-		return _pixelNamesCache[type] ? px(node, value) : value;
-	};
-
-	var _floatStyle = d.isIE ? "styleFloat" : "cssFloat",
-		_floatAliases = { "cssFloat": _floatStyle, "styleFloat": _floatStyle, "float": _floatStyle }
-	;
-
-	// public API
-
-	dojo.style = function(	/*DomNode|String*/ node,
-							/*String?|Object?*/ style,
-							/*String?*/ value){
-		//	summary:
-		//		Accesses styles on a node. If 2 arguments are
-		//		passed, acts as a getter. If 3 arguments are passed, acts
-		//		as a setter.
-		//	description:
-		//		Getting the style value uses the computed style for the node, so the value
-		//		will be a calculated value, not just the immediate node.style value.
-		//		Also when getting values, use specific style names,
-		//		like "borderBottomWidth" instead of "border" since compound values like
-		//		"border" are not necessarily reflected as expected.
-		//		If you want to get node dimensions, use `dojo.marginBox()`, 
-		//		`dojo.contentBox()` or `dojo.position()`.
-		//	node:
-		//		id or reference to node to get/set style for
-		//	style:
-		//		the style property to set in DOM-accessor format
-		//		("borderWidth", not "border-width") or an object with key/value
-		//		pairs suitable for setting each property.
-		//	value:
-		//		If passed, sets value on the node for style, handling
-		//		cross-browser concerns.  When setting a pixel value,
-		//		be sure to include "px" in the value. For instance, top: "200px".
-		//		Otherwise, in some cases, some browsers will not apply the style.
-		//	example:
-		//		Passing only an ID or node returns the computed style object of
-		//		the node:
-		//	|	dojo.style("thinger");
-		//	example:
-		//		Passing a node and a style property returns the current
-		//		normalized, computed value for that property:
-		//	|	dojo.style("thinger", "opacity"); // 1 by default
-		//
-		//	example:
-		//		Passing a node, a style property, and a value changes the
-		//		current display of the node and returns the new computed value
-		//	|	dojo.style("thinger", "opacity", 0.5); // == 0.5
-		//
-		//	example:
-		//		Passing a node, an object-style style property sets each of the values in turn and returns the computed style object of the node:
-		//	|	dojo.style("thinger", {
-		//	|		"opacity": 0.5,
-		//	|		"border": "3px solid black",
-		//	|		"height": "300px"
-		//	|	});
-		//
-		// 	example:
-		//		When the CSS style property is hyphenated, the JavaScript property is camelCased.
-		//		font-size becomes fontSize, and so on.
-		//	|	dojo.style("thinger",{
-		//	|		fontSize:"14pt",
-		//	|		letterSpacing:"1.2em"
-		//	|	});
-		//
-		//	example:
-		//		dojo.NodeList implements .style() using the same syntax, omitting the "node" parameter, calling
-		//		dojo.style() on every element of the list. See: `dojo.query()` and `dojo.NodeList()`
-		//	|	dojo.query(".someClassName").style("visibility","hidden");
-		//	|	// or
-		//	|	dojo.query("#baz > div").style({
-		//	|		opacity:0.75,
-		//	|		fontSize:"13pt"
-		//	|	});
-
-		var n = byId(node), args = arguments.length, op = (style == "opacity");
-		style = _floatAliases[style] || style;
-		if(args == 3){
-			return op ? d._setOpacity(n, value) : n.style[style] = value; /*Number*/
-		}
-		if(args == 2 && op){
-			return d._getOpacity(n);
-		}
-		var s = gcs(n);
-		if(args == 2 && typeof style != "string"){ // inline'd type check
-			for(var x in style){
-				d.style(node, x, style[x]);
-			}
-			return s;
-		}
-		return (args == 1) ? s : _toStyleValue(n, style, s[style] || n.style[style]); /* CSS2Properties||String||Number */
-	}
-
-	// =============================
-	// Box Functions
-	// =============================
-
-	dojo._getPadExtents = function(/*DomNode*/n, /*Object*/computedStyle){
-		//	summary:
-		// 		Returns object with special values specifically useful for node
-		// 		fitting.
-		//	description:
-		//		Returns an object with `w`, `h`, `l`, `t` properties:
-		//	|		l/t = left/top padding (respectively)
-		//	|		w = the total of the left and right padding 
-		//	|		h = the total of the top and bottom padding
-		//		If 'node' has position, l/t forms the origin for child nodes.
-		//		The w/h are used for calculating boxes.
-		//		Normally application code will not need to invoke this
-		//		directly, and will use the ...box... functions instead.
-		var 
-			s = computedStyle||gcs(n),
-			l = px(n, s.paddingLeft),
-			t = px(n, s.paddingTop);
-		return {
-			l: l,
-			t: t,
-			w: l+px(n, s.paddingRight),
-			h: t+px(n, s.paddingBottom)
-		};
-	}
-
-	dojo._getBorderExtents = function(/*DomNode*/n, /*Object*/computedStyle){
-		//	summary:
-		//		returns an object with properties useful for noting the border
-		//		dimensions.
-		//	description:
-		// 		* l/t = the sum of left/top border (respectively)
-		//		* w = the sum of the left and right border
-		//		* h = the sum of the top and bottom border
-		//
-		//		The w/h are used for calculating boxes.
-		//		Normally application code will not need to invoke this
-		//		directly, and will use the ...box... functions instead.
-		var 
-			ne = "none",
-			s = computedStyle||gcs(n),
-			bl = (s.borderLeftStyle != ne ? px(n, s.borderLeftWidth) : 0),
-			bt = (s.borderTopStyle != ne ? px(n, s.borderTopWidth) : 0);
-		return {
-			l: bl,
-			t: bt,
-			w: bl + (s.borderRightStyle!=ne ? px(n, s.borderRightWidth) : 0),
-			h: bt + (s.borderBottomStyle!=ne ? px(n, s.borderBottomWidth) : 0)
-		};
-	}
-
-	dojo._getPadBorderExtents = function(/*DomNode*/n, /*Object*/computedStyle){
-		//	summary:
-		//		Returns object with properties useful for box fitting with
-		//		regards to padding.
-		// description:
-		//		* l/t = the sum of left/top padding and left/top border (respectively)
-		//		* w = the sum of the left and right padding and border
-		//		* h = the sum of the top and bottom padding and border
-		//
-		//		The w/h are used for calculating boxes.
-		//		Normally application code will not need to invoke this
-		//		directly, and will use the ...box... functions instead.
-		var 
-			s = computedStyle||gcs(n),
-			p = d._getPadExtents(n, s),
-			b = d._getBorderExtents(n, s);
-		return {
-			l: p.l + b.l,
-			t: p.t + b.t,
-			w: p.w + b.w,
-			h: p.h + b.h
-		};
-	}
-
-	dojo._getMarginExtents = function(n, computedStyle){
-		//	summary:
-		//		returns object with properties useful for box fitting with
-		//		regards to box margins (i.e., the outer-box).
-		//
-		//		* l/t = marginLeft, marginTop, respectively
-		//		* w = total width, margin inclusive
-		//		* h = total height, margin inclusive
-		//
-		//		The w/h are used for calculating boxes.
-		//		Normally application code will not need to invoke this
-		//		directly, and will use the ...box... functions instead.
-		var 
-			s = computedStyle||gcs(n),
-			l = px(n, s.marginLeft),
-			t = px(n, s.marginTop),
-			r = px(n, s.marginRight),
-			b = px(n, s.marginBottom);
-		if(d.isWebKit && (s.position != "absolute")){
-			// FIXME: Safari's version of the computed right margin
-			// is the space between our right edge and the right edge 
-			// of our offsetParent.
-			// What we are looking for is the actual margin value as 
-			// determined by CSS.
-			// Hack solution is to assume left/right margins are the same.
-			r = l;
-		}
-		return {
-			l: l,
-			t: t,
-			w: l+r,
-			h: t+b
-		};
-	}
-
-	// Box getters work in any box context because offsetWidth/clientWidth
-	// are invariant wrt box context
-	//
-	// They do *not* work for display: inline objects that have padding styles
-	// because the user agent ignores padding (it's bogus styling in any case)
-	//
-	// Be careful with IMGs because they are inline or block depending on 
-	// browser and browser mode.
-
-	// Although it would be easier to read, there are not separate versions of 
-	// _getMarginBox for each browser because:
-	// 1. the branching is not expensive
-	// 2. factoring the shared code wastes cycles (function call overhead)
-	// 3. duplicating the shared code wastes bytes
-
-	dojo._getMarginBox = function(/*DomNode*/node, /*Object*/computedStyle){
-		// summary:
-		//		returns an object that encodes the width, height, left and top
-		//		positions of the node's margin box.
-		var s = computedStyle || gcs(node), me = d._getMarginExtents(node, s);
-		var l = node.offsetLeft - me.l, t = node.offsetTop - me.t, p = node.parentNode;
-				if(d.isMoz){
-			// Mozilla:
-			// If offsetParent has a computed overflow != visible, the offsetLeft is decreased
-			// by the parent's border.
-			// We don't want to compute the parent's style, so instead we examine node's
-			// computed left/top which is more stable.
-			var sl = parseFloat(s.left), st = parseFloat(s.top);
-			if(!isNaN(sl) && !isNaN(st)){
-				l = sl, t = st;
-			}else{
-				// If child's computed left/top are not parseable as a number (e.g. "auto"), we
-				// have no choice but to examine the parent's computed style.
-				if(p && p.style){
-					var pcs = gcs(p);
-					if(pcs.overflow != "visible"){
-						var be = d._getBorderExtents(p, pcs);
-						l += be.l, t += be.t;
-					}
-				}
-			}
-		}else if(d.isOpera || (d.isIE > 7 && !d.isQuirks)){
-			// On Opera and IE 8, offsetLeft/Top includes the parent's border
-			if(p){
-				be = d._getBorderExtents(p);
-				l -= be.l;
-				t -= be.t;
-			}
-		}
-				return {
-			l: l,
-			t: t,
-			w: node.offsetWidth + me.w,
-			h: node.offsetHeight + me.h 
-		};
-	}
-
-	dojo._getContentBox = function(node, computedStyle){
-		// summary:
-		//		Returns an object that encodes the width, height, left and top
-		//		positions of the node's content box, irrespective of the
-		//		current box model.
-
-		// clientWidth/Height are important since the automatically account for scrollbars
-		// fallback to offsetWidth/Height for special cases (see #3378)
-		var s = computedStyle || gcs(node),
-			pe = d._getPadExtents(node, s),
-			be = d._getBorderExtents(node, s),
-			w = node.clientWidth,
-			h
-		;
-		if(!w){
-			w = node.offsetWidth, h = node.offsetHeight;
-		}else{
-			h = node.clientHeight, be.w = be.h = 0;
-		}
-		// On Opera, offsetLeft includes the parent's border
-				if(d.isOpera){ pe.l += be.l; pe.t += be.t; };
-				return {
-			l: pe.l,
-			t: pe.t,
-			w: w - pe.w - be.w,
-			h: h - pe.h - be.h
-		};
-	}
-
-	dojo._getBorderBox = function(node, computedStyle){
-		var s = computedStyle || gcs(node),
-			pe = d._getPadExtents(node, s),
-			cb = d._getContentBox(node, s)
-		;
-		return {
-			l: cb.l - pe.l,
-			t: cb.t - pe.t,
-			w: cb.w + pe.w,
-			h: cb.h + pe.h
-		};
-	}
-
-	// Box setters depend on box context because interpretation of width/height styles
-	// vary wrt box context.
-	//
-	// The value of dojo.boxModel is used to determine box context.
-	// dojo.boxModel can be set directly to change behavior.
-	//
-	// Beware of display: inline objects that have padding styles
-	// because the user agent ignores padding (it's a bogus setup anyway)
-	//
-	// Be careful with IMGs because they are inline or block depending on 
-	// browser and browser mode.
-	//
-	// Elements other than DIV may have special quirks, like built-in
-	// margins or padding, or values not detectable via computedStyle.
-	// In particular, margins on TABLE do not seems to appear 
-	// at all in computedStyle on Mozilla.
-
-	dojo._setBox = function(/*DomNode*/node, /*Number?*/l, /*Number?*/t, /*Number?*/w, /*Number?*/h, /*String?*/u){
-		//	summary:
-		//		sets width/height/left/top in the current (native) box-model
-		//		dimentions. Uses the unit passed in u.
-		//	node:
-		//		DOM Node reference. Id string not supported for performance
-		//		reasons.
-		//	l:
-		//		left offset from parent.
-		//	t:
-		//		top offset from parent.
-		//	w:
-		//		width in current box model.
-		//	h:
-		//		width in current box model.
-		//	u:
-		//		unit measure to use for other measures. Defaults to "px".
-		u = u || "px";
-		var s = node.style;
-		if(!isNaN(l)){ s.left = l + u; }
-		if(!isNaN(t)){ s.top = t + u; }
-		if(w >= 0){ s.width = w + u; }
-		if(h >= 0){ s.height = h + u; }
-	}
-
-	dojo._isButtonTag = function(/*DomNode*/node) {
-		// summary:
-		//		True if the node is BUTTON or INPUT.type="button".
-		return node.tagName == "BUTTON"
-			|| node.tagName=="INPUT" && (node.getAttribute("type")||'').toUpperCase() == "BUTTON"; // boolean
-	}
-
-	dojo._usesBorderBox = function(/*DomNode*/node){
-		//	summary:
-		//		True if the node uses border-box layout.
-
-		// We could test the computed style of node to see if a particular box
-		// has been specified, but there are details and we choose not to bother.
-
-		// TABLE and BUTTON (and INPUT type=button) are always border-box by default.
-		// If you have assigned a different box to either one via CSS then
-		// box functions will break.
-
-		var n = node.tagName;
-		return d.boxModel=="border-box" || n=="TABLE" || d._isButtonTag(node); // boolean
-	}
-
-	dojo._setContentSize = function(/*DomNode*/node, /*Number*/widthPx, /*Number*/heightPx, /*Object*/computedStyle){
-		//	summary:
-		//		Sets the size of the node's contents, irrespective of margins,
-		//		padding, or borders.
-		if(d._usesBorderBox(node)){
-			var pb = d._getPadBorderExtents(node, computedStyle);
-			if(widthPx >= 0){ widthPx += pb.w; }
-			if(heightPx >= 0){ heightPx += pb.h; }
-		}
-		d._setBox(node, NaN, NaN, widthPx, heightPx);
-	}
-
-	dojo._setMarginBox = function(/*DomNode*/node, 	/*Number?*/leftPx, /*Number?*/topPx,
-													/*Number?*/widthPx, /*Number?*/heightPx,
-													/*Object*/computedStyle){
-		//	summary:
-		//		sets the size of the node's margin box and placement
-		//		(left/top), irrespective of box model. Think of it as a
-		//		passthrough to dojo._setBox that handles box-model vagaries for
-		//		you.
-
-		var s = computedStyle || gcs(node),
-		// Some elements have special padding, margin, and box-model settings.
-		// To use box functions you may need to set padding, margin explicitly.
-		// Controlling box-model is harder, in a pinch you might set dojo.boxModel.
-			bb = d._usesBorderBox(node),
-			pb = bb ? _nilExtents : d._getPadBorderExtents(node, s)
-		;
-		if(d.isWebKit){
-			// on Safari (3.1.2), button nodes with no explicit size have a default margin
-			// setting an explicit size eliminates the margin.
-			// We have to swizzle the width to get correct margin reading.
-			if(d._isButtonTag(node)){
-				var ns = node.style;
-				if(widthPx >= 0 && !ns.width) { ns.width = "4px"; }
-				if(heightPx >= 0 && !ns.height) { ns.height = "4px"; }
-			}
-		}
-		var mb = d._getMarginExtents(node, s);
-		if(widthPx >= 0){ widthPx = Math.max(widthPx - pb.w - mb.w, 0); }
-		if(heightPx >= 0){ heightPx = Math.max(heightPx - pb.h - mb.h, 0); }
-		d._setBox(node, leftPx, topPx, widthPx, heightPx);
-	}
-
-	var _nilExtents = { l:0, t:0, w:0, h:0 };
-
-	// public API
-
-	dojo.marginBox = function(/*DomNode|String*/node, /*Object?*/box){
-		//	summary:
-		//		Getter/setter for the margin-box of node.
-		//	description:
-		//		Getter/setter for the margin-box of node.
-		//		Returns an object in the expected format of box (regardless
-		//		if box is passed). The object might look like:
-		//			`{ l: 50, t: 200, w: 300: h: 150 }`
-		//		for a node offset from its parent 50px to the left, 200px from
-		//		the top with a margin width of 300px and a margin-height of
-		//		150px.
-		//	node:
-		//		id or reference to DOM Node to get/set box for
-		//	box:
-		//		If passed, denotes that dojo.marginBox() should
-		//		update/set the margin box for node. Box is an object in the
-		//		above format. All properties are optional if passed.
-		//	example:
-		//	Retrieve the marginbox of a passed node
-		//	|	var box = dojo.marginBox("someNodeId");
-		//	|	console.dir(box);
-		//
-		//	example:
-		//	Set a node's marginbox to the size of another node
-		//	|	var box = dojo.marginBox("someNodeId");
-		//	|	dojo.marginBox("someOtherNode", box);
-		
-		var n = byId(node), s = gcs(n), b = box;
-		return !b ? d._getMarginBox(n, s) : d._setMarginBox(n, b.l, b.t, b.w, b.h, s); // Object
-	}
-
-	dojo.contentBox = function(/*DomNode|String*/node, /*Object?*/box){
-		//	summary:
-		//		Getter/setter for the content-box of node.
-		//	description:
-		//		Returns an object in the expected format of box (regardless if box is passed).
-		//		The object might look like:
-		//			`{ l: 50, t: 200, w: 300: h: 150 }`
-		//		for a node offset from its parent 50px to the left, 200px from
-		//		the top with a content width of 300px and a content-height of
-		//		150px. Note that the content box may have a much larger border
-		//		or margin box, depending on the box model currently in use and
-		//		CSS values set/inherited for node.
-		//	node:
-		//		id or reference to DOM Node to get/set box for
-		//	box:
-		//		If passed, denotes that dojo.contentBox() should
-		//		update/set the content box for node. Box is an object in the
-		//		above format. All properties are optional if passed.
-		var n = byId(node), s = gcs(n), b = box;
-		return !b ? d._getContentBox(n, s) : d._setContentSize(n, b.w, b.h, s); // Object
-	}
-
-	// =============================
-	// Positioning 
-	// =============================
-
-	var _sumAncestorProperties = function(node, prop){
-		if(!(node = (node||0).parentNode)){return 0}
-		var val, retVal = 0, _b = d.body();
-		while(node && node.style){
-			if(gcs(node).position == "fixed"){
-				return 0;
-			}
-			val = node[prop];
-			if(val){
-				retVal += val - 0;
-				// opera and khtml #body & #html has the same values, we only
-				// need one value
-				if(node == _b){ break; }
-			}
-			node = node.parentNode;
-		}
-		return retVal;	//	integer
-	}
-
-	dojo._docScroll = function(){
-		var n = d.global;
-		return "pageXOffset" in n? { x:n.pageXOffset, y:n.pageYOffset } :
-			(n=d.doc.documentElement, n.clientHeight? { x:d._fixIeBiDiScrollLeft(n.scrollLeft), y:n.scrollTop } :
-			(n=d.body(), { x:n.scrollLeft||0, y:n.scrollTop||0 }));
-	};
-
-	dojo._isBodyLtr = function(){
-		return "_bodyLtr" in d? d._bodyLtr :
-			d._bodyLtr = (d.body().dir || d.doc.documentElement.dir || "ltr").toLowerCase() == "ltr"; // Boolean 
-	}
-
-		dojo._getIeDocumentElementOffset = function(){
-		//	summary:
-		//		returns the offset in x and y from the document body to the
-		//		visual edge of the page
-		//	description:
-		// The following values in IE contain an offset:
-		//	|		event.clientX
-		//	|		event.clientY
-		//	|		node.getBoundingClientRect().left
-		//	|		node.getBoundingClientRect().top
-		//	 	But other position related values do not contain this offset,
-		//	 	such as node.offsetLeft, node.offsetTop, node.style.left and
-		//	 	node.style.top. The offset is always (2, 2) in LTR direction.
-		//	 	When the body is in RTL direction, the offset counts the width
-		//	 	of left scroll bar's width.  This function computes the actual
-		//	 	offset.
-
-		//NOTE: assumes we're being called in an IE browser
-
-		var de = d.doc.documentElement; // only deal with HTML element here, _abs handles body/quirks 
-
-		if(d.isIE < 8){
-			var r = de.getBoundingClientRect(); // works well for IE6+
-			//console.debug('rect left,top = ' + r.left+','+r.top + ', html client left/top = ' + de.clientLeft+','+de.clientTop + ', rtl = ' + (!d._isBodyLtr()) + ', quirks = ' + d.isQuirks);
-			var l = r.left,
-			    t = r.top;
-			if(d.isIE < 7){
-				l += de.clientLeft;	// scrollbar size in strict/RTL, or,
-				t += de.clientTop;	// HTML border size in strict
-			}
-			return {
-				x: l < 0? 0 : l, // FRAME element border size can lead to inaccurate negative values
-				y: t < 0? 0 : t
-			};
-		}else{
-			return {
-				x: 0,
-				y: 0
-			};
-		}
-
-	};
-	
-	dojo._fixIeBiDiScrollLeft = function(/*Integer*/ scrollLeft){
-		// In RTL direction, scrollLeft should be a negative value, but IE < 8
-		// returns a positive one. All codes using documentElement.scrollLeft
-		// must call this function to fix this error, otherwise the position
-		// will offset to right when there is a horizontal scrollbar.
-
-				var dd = d.doc;
-		if(d.isIE < 8 && !d._isBodyLtr()){
-			var de = d.isQuirks ? dd.body : dd.documentElement;
-			return scrollLeft + de.clientWidth - de.scrollWidth; // Integer
-		}
-				return scrollLeft; // Integer
-	}
-
-	// FIXME: need a setter for coords or a moveTo!!
-	dojo._abs = dojo.position = function(/*DomNode*/node, /*Boolean?*/includeScroll){
-		//	summary:
-		//		Gets the position and size of the passed element relative to
-		//		the viewport (if includeScroll==false), or relative to the
-		//		document root (if includeScroll==true).
-		//
-		//	description:
-		//		Returns an object of the form:
-		//			{ x: 100, y: 300, w: 20, h: 15 }
-		//		If includeScroll==true, the x and y values will include any
-		//		document offsets that may affect the position relative to the
-		//		viewport.
-		//		Uses the border-box model (inclusive of border and padding but
-		//		not margin).  Does not act as a setter.
-
-		var db = d.body(), dh = db.parentNode, ret;
-		node = byId(node);
-		if(node["getBoundingClientRect"]){
-			// IE6+, FF3+, super-modern WebKit, and Opera 9.6+ all take this branch
-			ret = node.getBoundingClientRect();
-			ret = { x: ret.left, y: ret.top, w: ret.right - ret.left, h: ret.bottom - ret.top };
-					if(d.isIE){
-				// On IE there's a 2px offset that we need to adjust for, see _getIeDocumentElementOffset()
-				var offset = d._getIeDocumentElementOffset();
-
-				// fixes the position in IE, quirks mode
-				ret.x -= offset.x + (d.isQuirks ? db.clientLeft+db.offsetLeft : 0);
-				ret.y -= offset.y + (d.isQuirks ? db.clientTop+db.offsetTop : 0);
-			}else if(d.isFF == 3){
-				// In FF3 you have to subtract the document element margins.
-				// Fixed in FF3.5 though.
-				var cs = gcs(dh);
-				ret.x -= px(dh, cs.marginLeft) + px(dh, cs.borderLeftWidth);
-				ret.y -= px(dh, cs.marginTop) + px(dh, cs.borderTopWidth);
-			}
-				}else{
-			// FF2 and older WebKit
-			ret = {
-				x: 0,
-				y: 0,
-				w: node.offsetWidth,
-				h: node.offsetHeight
-			};
-			if(node["offsetParent"]){
-				ret.x -= _sumAncestorProperties(node, "scrollLeft");
-				ret.y -= _sumAncestorProperties(node, "scrollTop");
-
-				var curnode = node;
-				do{
-					var n = curnode.offsetLeft,
-						t = curnode.offsetTop;
-					ret.x += isNaN(n) ? 0 : n;
-					ret.y += isNaN(t) ? 0 : t;
-
-					cs = gcs(curnode);
-					if(curnode != node){
-								if(d.isMoz){
-							// tried left+right with differently sized left/right borders
-							// it really is 2xleft border in FF, not left+right, even in RTL!
-							ret.x += 2 * px(curnode,cs.borderLeftWidth);
-							ret.y += 2 * px(curnode,cs.borderTopWidth);
-						}else{
-									ret.x += px(curnode, cs.borderLeftWidth);
-							ret.y += px(curnode, cs.borderTopWidth);
-								}
-							}
-					// static children in a static div in FF2 are affected by the div's border as well
-					// but offsetParent will skip this div!
-							if(d.isMoz && cs.position=="static"){
-						var parent=curnode.parentNode;
-						while(parent!=curnode.offsetParent){
-							var pcs=gcs(parent);
-							if(pcs.position=="static"){
-								ret.x += px(curnode,pcs.borderLeftWidth);
-								ret.y += px(curnode,pcs.borderTopWidth);
-							}
-							parent=parent.parentNode;
-						}
-					}
-							curnode = curnode.offsetParent;
-				}while((curnode != dh) && curnode);
-			}else if(node.x && node.y){
-				ret.x += isNaN(node.x) ? 0 : node.x;
-				ret.y += isNaN(node.y) ? 0 : node.y;
-			}
-		}
-		// account for document scrolling
-		// if offsetParent is used, ret value already includes scroll position
-		// so we may have to actually remove that value if !includeScroll
-		if(includeScroll){
-			var scroll = d._docScroll();
-			ret.x += scroll.x;
-			ret.y += scroll.y;
-		}
-
-		return ret; // Object
-	}
-
-	dojo.coords = function(/*DomNode|String*/node, /*Boolean?*/includeScroll){
-		//	summary:
-		//		Deprecated: Use position() for border-box x/y/w/h
-		//		or marginBox() for margin-box w/h/l/t.
-		//		Returns an object representing a node's size and position.
-		//
-		//	description:
-		//		Returns an object that measures margin-box (w)idth/(h)eight
-		//		and absolute position x/y of the border-box. Also returned
-		//		is computed (l)eft and (t)op values in pixels from the
-		//		node's offsetParent as returned from marginBox().
-		//		Return value will be in the form:
-		//|			{ l: 50, t: 200, w: 300: h: 150, x: 100, y: 300 }
-		//		Does not act as a setter. If includeScroll is passed, the x and
-		//		y params are affected as one would expect in dojo.position().
-		var n = byId(node), s = gcs(n), mb = d._getMarginBox(n, s);
-		var abs = d.position(n, includeScroll);
-		mb.x = abs.x;
-		mb.y = abs.y;
-		return mb;
-	}
-
-	// =============================
-	// Element attribute Functions
-	// =============================
-
-	// dojo.attr() should conform to http://www.w3.org/TR/DOM-Level-2-Core/
-
-	var _propNames = {
-			// properties renamed to avoid clashes with reserved words
-			"class":   "className",
-			"for":     "htmlFor",
-			// properties written as camelCase
-			tabindex:  "tabIndex",
-			readonly:  "readOnly",
-			colspan:   "colSpan",
-			frameborder: "frameBorder",
-			rowspan:   "rowSpan",
-			valuetype: "valueType"
-		},
-		_attrNames = {
-			// original attribute names
-			classname: "class",
-			htmlfor:   "for",
-			// for IE
-			tabindex:  "tabIndex",
-			readonly:  "readOnly"
-		},
-		_forcePropNames = {
-			innerHTML: 1,
-			className: 1,
-			htmlFor:   d.isIE,
-			value:     1
-		};
-
-	var _fixAttrName = function(/*String*/ name){
-		return _attrNames[name.toLowerCase()] || name;
-	};
-
-	var _hasAttr = function(node, name){
-		var attr = node.getAttributeNode && node.getAttributeNode(name);
-		return attr && attr.specified; // Boolean
-	};
-
-	// There is a difference in the presence of certain properties and their default values
-	// between browsers. For example, on IE "disabled" is present on all elements,
-	// but it is value is "false"; "tabIndex" of <div> returns 0 by default on IE, yet other browsers
-	// can return -1.
-
-	dojo.hasAttr = function(/*DomNode|String*/node, /*String*/name){
-		//	summary:
-		//		Returns true if the requested attribute is specified on the
-		//		given element, and false otherwise.
-		//	node:
-		//		id or reference to the element to check
-		//	name:
-		//		the name of the attribute
-		//	returns:
-		//		true if the requested attribute is specified on the
-		//		given element, and false otherwise
-		var lc = name.toLowerCase();
-		return _forcePropNames[_propNames[lc] || name] || _hasAttr(byId(node), _attrNames[lc] || name);	// Boolean
-	}
-
-	var _evtHdlrMap = {}, _ctr = 0,
-		_attrId = dojo._scopeName + "attrid",
-		// the next dictionary lists elements with read-only innerHTML on IE
-		_roInnerHtml = {col: 1, colgroup: 1,
-			// frameset: 1, head: 1, html: 1, style: 1,
-			table: 1, tbody: 1, tfoot: 1, thead: 1, tr: 1, title: 1};
-
-	dojo.attr = function(/*DomNode|String*/node, /*String|Object*/name, /*String?*/value){
-		//	summary:
-		//		Gets or sets an attribute on an HTML element.
-		//	description:
-		//		Handles normalized getting and setting of attributes on DOM
-		//		Nodes. If 2 arguments are passed, and a the second argumnt is a
-		//		string, acts as a getter.
-		//
-		//		If a third argument is passed, or if the second argument is a
-		//		map of attributes, acts as a setter.
-		//
-		//		When passing functions as values, note that they will not be
-		//		directly assigned to slots on the node, but rather the default
-		//		behavior will be removed and the new behavior will be added
-		//		using `dojo.connect()`, meaning that event handler properties
-		//		will be normalized and that some caveats with regards to
-		//		non-standard behaviors for onsubmit apply. Namely that you
-		//		should cancel form submission using `dojo.stopEvent()` on the
-		//		passed event object instead of returning a boolean value from
-		//		the handler itself.
-		//	node:
-		//		id or reference to the element to get or set the attribute on
-		//	name:
-		//		the name of the attribute to get or set.
-		//	value:
-		//		The value to set for the attribute
-		//	returns:
-		//		when used as a getter, the value of the requested attribute
-		//		or null if that attribute does not have a specified or
-		//		default value;
-		//
-		//		when used as a setter, the DOM node
-		//
-		//	example:
-		//	|	// get the current value of the "foo" attribute on a node
-		//	|	dojo.attr(dojo.byId("nodeId"), "foo");
-		//	|	// or we can just pass the id:
-		//	|	dojo.attr("nodeId", "foo");
-		//
-		//	example:
-		//	|	// use attr() to set the tab index
-		//	|	dojo.attr("nodeId", "tabIndex", 3);
-		//	|
-		//
-		//	example:
-		//	Set multiple values at once, including event handlers:
-		//	|	dojo.attr("formId", {
-		//	|		"foo": "bar",
-		//	|		"tabIndex": -1,
-		//	|		"method": "POST",
-		//	|		"onsubmit": function(e){
-		//	|			// stop submitting the form. Note that the IE behavior
-		//	|			// of returning true or false will have no effect here
-		//	|			// since our handler is connect()ed to the built-in
-		//	|			// onsubmit behavior and so we need to use
-		//	|			// dojo.stopEvent() to ensure that the submission
-		//	|			// doesn't proceed.
-		//	|			dojo.stopEvent(e);
-		//	|
-		//	|			// submit the form with Ajax
-		//	|			dojo.xhrPost({ form: "formId" });
-		//	|		}
-		//	|	});
-		//
-		//	example:
-		//	Style is s special case: Only set with an object hash of styles
-		//	|	dojo.attr("someNode",{
-		//	|		id:"bar",
-		//	|		style:{
-		//	|			width:"200px", height:"100px", color:"#000"
-		//	|		}
-		//	|	});
-		//
-		//	example:
-		//	Again, only set style as an object hash of styles:
-		//	|	var obj = { color:"#fff", backgroundColor:"#000" };
-		//	|	dojo.attr("someNode", "style", obj);
-		//	|
-		//	|	// though shorter to use `dojo.style()` in this case:
-		//	|	dojo.style("someNode", obj);
-
-		node = byId(node);
-		var args = arguments.length, prop;
-		if(args == 2 && typeof name != "string"){ // inline'd type check
-			// the object form of setter: the 2nd argument is a dictionary
-			for(var x in name){
-				d.attr(node, x, name[x]);
-			}
-			return node; // DomNode
-		}
-		var lc = name.toLowerCase(),
-			propName = _propNames[lc] || name,
-			forceProp = _forcePropNames[propName],
-			attrName = _attrNames[lc] || name;
-		if(args == 3){
-			// setter
-			do{
-				if(propName == "style" && typeof value != "string"){ // inline'd type check
-					// special case: setting a style
-					d.style(node, value);
-					break;
-				}
-				if(propName == "innerHTML"){
-					// special case: assigning HTML
-										if(d.isIE && node.tagName.toLowerCase() in _roInnerHtml){
-						d.empty(node);
-						node.appendChild(d._toDom(value, node.ownerDocument));
-					}else{
-											node[propName] = value;
-										}
-										break;
-				}
-				if(d.isFunction(value)){
-					// special case: assigning an event handler
-					// clobber if we can
-					var attrId = d.attr(node, _attrId);
-					if(!attrId){
-						attrId = _ctr++;
-						d.attr(node, _attrId, attrId);
-					}
-					if(!_evtHdlrMap[attrId]){
-						_evtHdlrMap[attrId] = {};
-					}
-					var h = _evtHdlrMap[attrId][propName];
-					if(h){
-						d.disconnect(h);
-					}else{
-						try{
-							delete node[propName];
-						}catch(e){}
-					}
-					// ensure that event objects are normalized, etc.
-					_evtHdlrMap[attrId][propName] = d.connect(node, propName, value);
-					break;
-				}
-				if(forceProp || typeof value == "boolean"){
-					// special case: forcing assignment to the property
-					// special case: setting boolean to a property instead of attribute
-					node[propName] = value;
-					break;
-				}
-				// node's attribute
-				node.setAttribute(attrName, value);
-			}while(false);
-			return node; // DomNode
-		}
-		// getter
-		// should we access this attribute via a property or
-		// via getAttribute()?
-		value = node[propName];
-		if(forceProp && typeof value != "undefined"){
-			// node's property
-			return value;	// Anything
-		}
-		if(propName != "href" && (typeof value == "boolean" || d.isFunction(value))){
-			// node's property
-			return value;	// Anything
-		}
-		// node's attribute
-		// we need _hasAttr() here to guard against IE returning a default value
-		return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything
-	}
-
-	dojo.removeAttr = function(/*DomNode|String*/ node, /*String*/ name){
-		//	summary:
-		//		Removes an attribute from an HTML element.
-		//	node:
-		//		id or reference to the element to remove the attribute from
-		//	name:
-		//		the name of the attribute to remove
-		byId(node).removeAttribute(_fixAttrName(name));
-	}
-
-	dojo.getNodeProp = function(/*DomNode|String*/ node, /*String*/ name){
-		//	summary:
-		//		Returns an effective value of a property or an attribute.
-		//	node:
-		//		id or reference to the element to remove the attribute from
-		//	name:
-		//		the name of the attribute
-		node = byId(node);
-		var lc = name.toLowerCase(),
-			propName = _propNames[lc] || name;
-		if((propName in node) && propName != "href"){
-			// node's property
-			return node[propName];	// Anything
-		}
-		// node's attribute
-		var attrName = _attrNames[lc] || name;
-		return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything
-	}
-
-	dojo.create = function(tag, attrs, refNode, pos){
-		//	summary:
-		//		Create an element, allowing for optional attribute decoration
-		//		and placement.
-		//
-		// description:
-		//		A DOM Element creation function. A shorthand method for creating a node or
-		//		a fragment, and allowing for a convenient optional attribute setting step,
-		//		as well as an optional DOM placement reference.
-		//|
-		//		Attributes are set by passing the optional object through `dojo.attr`.
-		//		See `dojo.attr` for noted caveats and nuances, and API if applicable.
-		//|
-		//		Placement is done via `dojo.place`, assuming the new node to be the action 
-		//		node, passing along the optional reference node and position.
-		//
-		// tag: String|DomNode
-		//		A string of the element to create (eg: "div", "a", "p", "li", "script", "br"),
-		//		or an existing DOM node to process.
-		//
-		// attrs: Object
-		//		An object-hash of attributes to set on the newly created node.
-		//		Can be null, if you don't want to set any attributes/styles.
-		//		See: `dojo.attr` for a description of available attributes.
-		//
-		// refNode: String?|DomNode?
-		//		Optional reference node. Used by `dojo.place` to place the newly created
-		//		node somewhere in the dom relative to refNode. Can be a DomNode reference
-		//		or String ID of a node.
-		//
-		// pos: String?
-		//		Optional positional reference. Defaults to "last" by way of `dojo.place`,
-		//		though can be set to "first","after","before","last", "replace" or "only"
-		//		to further control the placement of the new node relative to the refNode.
-		//		'refNode' is required if a 'pos' is specified.
-		//
-		// returns: DomNode
-		//
-		// example:
-		//	Create a DIV:
-		//	|	var n = dojo.create("div");
-		//
-		// example:
-		//	Create a DIV with content:
-		//	|	var n = dojo.create("div", { innerHTML:"<p>hi</p>" });
-		//
-		// example:
-		//	Place a new DIV in the BODY, with no attributes set
-		//	|	var n = dojo.create("div", null, dojo.body());
-		//
-		// example:
-		//	Create an UL, and populate it with LI's. Place the list as the first-child of a 
-		//	node with id="someId":
-		//	|	var ul = dojo.create("ul", null, "someId", "first");
-		//	|	var items = ["one", "two", "three", "four"];
-		//	|	dojo.forEach(items, function(data){
-		//	|		dojo.create("li", { innerHTML: data }, ul);
-		//	|	});
-		//
-		// example:
-		//	Create an anchor, with an href. Place in BODY:
-		//	|	dojo.create("a", { href:"foo.html", title:"Goto FOO!" }, dojo.body());
-		//
-		// example:
-		//	Create a `dojo.NodeList()` from a new element (for syntatic sugar):
-		//	|	dojo.query(dojo.create('div'))
-		//	|		.addClass("newDiv")
-		//	|		.onclick(function(e){ console.log('clicked', e.target) })
-		//	|		.place("#someNode"); // redundant, but cleaner.
-
-		var doc = d.doc;
-		if(refNode){
-			refNode = byId(refNode);
-			doc = refNode.ownerDocument;
-		}
-		if(typeof tag == "string"){ // inline'd type check
-			tag = doc.createElement(tag);
-		}
-		if(attrs){ d.attr(tag, attrs); }
-		if(refNode){ d.place(tag, refNode, pos); }
-		return tag; // DomNode
-	}
-
-	/*=====
-	dojo.empty = function(node){
-			//	summary:
-			//		safely removes all children of the node.
-			//	node: DOMNode|String
-			//		a reference to a DOM node or an id.
-			//	example:
-			//	Destroy node's children byId:
-			//	|	dojo.empty("someId");
-			//
-			//	example:
-			//	Destroy all nodes' children in a list by reference:
-			//	|	dojo.query(".someNode").forEach(dojo.empty);
-	}
-	=====*/
-
-	d.empty =
-				d.isIE ?  function(node){
-			node = byId(node);
-			for(var c; c = node.lastChild;){ // intentional assignment
-				d.destroy(c);
-			}
-		} :
-				function(node){
-			byId(node).innerHTML = "";
-		};
-
-	/*=====
-	dojo._toDom = function(frag, doc){
-			//	summary:
-			//		instantiates an HTML fragment returning the corresponding DOM.
-			//	frag: String
-			//		the HTML fragment
-			//	doc: DocumentNode?
-			//		optional document to use when creating DOM nodes, defaults to
-			//		dojo.doc if not specified.
-			//	returns: DocumentFragment
-			//
-			//	example:
-			//	Create a table row:
-			//	|	var tr = dojo._toDom("<tr><td>First!</td></tr>");
-	}
-	=====*/
-
-	// support stuff for dojo._toDom
-	var tagWrap = {
-			option: ["select"],
-			tbody: ["table"],
-			thead: ["table"],
-			tfoot: ["table"],
-			tr: ["table", "tbody"],
-			td: ["table", "tbody", "tr"],
-			th: ["table", "thead", "tr"],
-			legend: ["fieldset"],
-			caption: ["table"],
-			colgroup: ["table"],
-			col: ["table", "colgroup"],
-			li: ["ul"]
-		},
-		reTag = /<\s*([\w\:]+)/,
-		masterNode = {}, masterNum = 0,
-		masterName = "__" + d._scopeName + "ToDomId";
-
-	// generate start/end tag strings to use
-	// for the injection for each special tag wrap case.
-	for(var param in tagWrap){
-		var tw = tagWrap[param];
-		tw.pre  = param == "option" ? '<select multiple="multiple">' : "<" + tw.join("><") + ">";
-		tw.post = "</" + tw.reverse().join("></") + ">";
-		// the last line is destructive: it reverses the array,
-		// but we don't care at this point
-	}
-
-	d._toDom = function(frag, doc){
-		//	summary:
-		// 		converts HTML string into DOM nodes.
-
-		doc = doc || d.doc;
-		var masterId = doc[masterName];
-		if(!masterId){
-			doc[masterName] = masterId = ++masterNum + "";
-			masterNode[masterId] = doc.createElement("div");
-		}
-
-		// make sure the frag is a string.
-		frag += "";
-
-		// find the starting tag, and get node wrapper
-		var match = frag.match(reTag),
-			tag = match ? match[1].toLowerCase() : "",
-			master = masterNode[masterId],
-			wrap, i, fc, df;
-		if(match && tagWrap[tag]){
-			wrap = tagWrap[tag];
-			master.innerHTML = wrap.pre + frag + wrap.post;
-			for(i = wrap.length; i; --i){
-				master = master.firstChild;
-			}
-		}else{
-			master.innerHTML = frag;
-		}
-
-		// one node shortcut => return the node itself
-		if(master.childNodes.length == 1){
-			return master.removeChild(master.firstChild); // DOMNode
-		}
-
-		// return multiple nodes as a document fragment
-		df = doc.createDocumentFragment();
-		while(fc = master.firstChild){ // intentional assignment
-			df.appendChild(fc);
-		}
-		return df; // DOMNode
-	}
-
-	// =============================
-	// (CSS) Class Functions
-	// =============================
-	var _className = "className";
-
-	dojo.hasClass = function(/*DomNode|String*/node, /*String*/classStr){
-		//	summary:
-		//		Returns whether or not the specified classes are a portion of the
-		//		class list currently applied to the node.
-		//
-		//	node:
-		//		String ID or DomNode reference to check the class for.
-		//
-		//	classStr:
-		//		A string class name to look for.
-		//
-		//	example:
-		//	Do something if a node with id="someNode" has class="aSillyClassName" present
-		//	|	if(dojo.hasClass("someNode","aSillyClassName")){ ... }
-
-		return ((" "+ byId(node)[_className] +" ").indexOf(" " + classStr + " ") >= 0);  // Boolean
-	};
-
-	var spaces = /\s+/, a1 = [""],
-		str2array = function(s){
-			if(typeof s == "string" || s instanceof String){
-				if(s.indexOf(" ") < 0){
-					a1[0] = s;
-					return a1;
-				}else{
-					return s.split(spaces);
-				}
-			}
-			// assumed to be an array
-			return s;
-		};
-
-	dojo.addClass = function(/*DomNode|String*/node, /*String|Array*/classStr){
-		//	summary:
-		//		Adds the specified classes to the end of the class list on the
-		//		passed node. Will not re-apply duplicate classes.
-		//
-		//	node:
-		//		String ID or DomNode reference to add a class string too
-		//
-		//	classStr:
-		//		A String class name to add, or several space-separated class names,
-		//		or an array of class names.
-		//
-		// example:
-		//	Add a class to some node:
-		//	|	dojo.addClass("someNode", "anewClass");
-		//
-		// example:
-		//	Add two classes at once:
-		//	|	dojo.addClass("someNode", "firstClass secondClass");
-		//
-		// example:
-		//	Add two classes at once (using array):
-		//	|	dojo.addClass("someNode", ["firstClass", "secondClass"]);
-		//
-		// example:
-		//	Available in `dojo.NodeList` for multiple additions
-		//	|	dojo.query("ul > li").addClass("firstLevel");
-
-		node = byId(node);
-		classStr = str2array(classStr);
-		var cls = " " + node[_className] + " ";
-		for(var i = 0, len = classStr.length, c; i < len; ++i){
-			c = classStr[i];
-			if(c && cls.indexOf(" " + c + " ") < 0){
-				cls += c + " ";
-			}
-		}
-		node[_className] = d.trim(cls);
-	};
-
-	dojo.removeClass = function(/*DomNode|String*/node, /*String|Array?*/classStr){
-		// summary:
-		//		Removes the specified classes from node. No `dojo.hasClass`
-		//		check is required.
-		//
-		// node:
-		// 		String ID or DomNode reference to remove the class from.
-		//
-		// classStr:
-		//		An optional String class name to remove, or several space-separated
-		//		class names, or an array of class names. If omitted, all class names
-		//		will be deleted.
-		//
-		// example:
-		//	Remove a class from some node:
-		//	|	dojo.removeClass("someNode", "firstClass");
-		//
-		// example:
-		//	Remove two classes from some node:
-		//	|	dojo.removeClass("someNode", "firstClass secondClass");
-		//
-		// example:
-		//	Remove two classes from some node (using array):
-		//	|	dojo.removeClass("someNode", ["firstClass", "secondClass"]);
-		//
-		// example:
-		//	Remove all classes from some node:
-		//	|	dojo.removeClass("someNode");
-		//
-		// example:
-		//	Available in `dojo.NodeList()` for multiple removal
-		//	|	dojo.query(".foo").removeClass("foo");
-
-		node = byId(node);
-		var cls;
-		if(classStr !== undefined){
-			classStr = str2array(classStr);
-			cls = " " + node[_className] + " ";
-			for(var i = 0, len = classStr.length; i < len; ++i){
-				cls = cls.replace(" " + classStr[i] + " ", " ");
-			}
-			cls = d.trim(cls);
-		}else{
-			cls = "";
-		}
-		if(node[_className] != cls){ node[_className] = cls; }
-	};
-
-	dojo.toggleClass = function(/*DomNode|String*/node, /*String|Array*/classStr, /*Boolean?*/condition){
-		//	summary:
-		//		Adds a class to node if not present, or removes if present.
-		//		Pass a boolean condition if you want to explicitly add or remove.
-		//	condition:
-		//		If passed, true means to add the class, false means to remove.
-		//
-		// example:
-		//	|	dojo.toggleClass("someNode", "hovered");
-		//
-		// example:
-		//	Forcefully add a class
-		//	|	dojo.toggleClass("someNode", "hovered", true);
-		//
-		// example:
-		//	Available in `dojo.NodeList()` for multiple toggles
-		//	|	dojo.query(".toggleMe").toggleClass("toggleMe");
-
-		if(condition === undefined){
-			condition = !d.hasClass(node, classStr);
-		}
-		d[condition ? "addClass" : "removeClass"](node, classStr);
-	};
-
-})();
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/json.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/json.js
deleted file mode 100644
index 691c704..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/json.js
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo._base.json"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._base.json"] = true;
-dojo.provide("dojo._base.json");
-
-dojo.fromJson = function(/*String*/ json){
-	// summary:
-	// 		Parses a [JSON](http://json.org) string to return a JavaScript object.
-	// description:
-	// 		Throws for invalid JSON strings, but it does not use a strict JSON parser. It
-	// 		delegates to eval().
-	// json: 
-	//		a string literal of a JSON item, for instance:
-	//			`'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'`
-
-	return eval("(" + json + ")"); // Object
-}
-
-dojo._escapeString = function(/*String*/str){
-	//summary:
-	//		Adds escape sequences for non-visual characters, double quote and
-	//		backslash and surrounds with double quotes to form a valid string
-	//		literal.
-	return ('"' + str.replace(/(["\\])/g, '\\$1') + '"').
-		replace(/[\f]/g, "\\f").replace(/[\b]/g, "\\b").replace(/[\n]/g, "\\n").
-		replace(/[\t]/g, "\\t").replace(/[\r]/g, "\\r"); // string
-}
-
-dojo.toJsonIndentStr = "\t";
-dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _indentStr){
-	//	summary:
-	//		Returns a [JSON](http://json.org) serialization of an object.
-	//	description:
-	//		Returns a [JSON](http://json.org) serialization of an object.
-	//		Note that this doesn't check for infinite recursion, so don't do that!
-	//	it:
-	//		an object to be serialized. Objects may define their own
-	//		serialization via a special "__json__" or "json" function
-	//		property. If a specialized serializer has been defined, it will
-	//		be used as a fallback.
-	//	prettyPrint:
-	//		if true, we indent objects and arrays to make the output prettier.
-	//		The variable `dojo.toJsonIndentStr` is used as the indent string --
-	//		to use something other than the default (tab), change that variable
-	//		before calling dojo.toJson().
-	//	_indentStr:
-	//		private variable for recursive calls when pretty printing, do not use.
-	//	example:
-	//		simple serialization of a trivial object
-	//		|	var jsonStr = dojo.toJson({ howdy: "stranger!", isStrange: true });
-	//		|	doh.is('{"howdy":"stranger!","isStrange":true}', jsonStr);
-	//	example:
-	//		a custom serializer for an objects of a particular class:
-	//		|	dojo.declare("Furby", null, {
-	//		|		furbies: "are strange",
-	//		|		furbyCount: 10,
-	//		|		__json__: function(){
-	//		|		},
-	//		|	});
-
-	if(it === undefined){
-		return "undefined";
-	}
-	var objtype = typeof it;
-	if(objtype == "number" || objtype == "boolean"){
-		return it + "";
-	}
-	if(it === null){
-		return "null";
-	}
-	if(dojo.isString(it)){ 
-		return dojo._escapeString(it); 
-	}
-	// recurse
-	var recurse = arguments.callee;
-	// short-circuit for objects that support "json" serialization
-	// if they return "self" then just pass-through...
-	var newObj;
-	_indentStr = _indentStr || "";
-	var nextIndent = prettyPrint ? _indentStr + dojo.toJsonIndentStr : "";
-	var tf = it.__json__||it.json;
-	if(dojo.isFunction(tf)){
-		newObj = tf.call(it);
-		if(it !== newObj){
-			return recurse(newObj, prettyPrint, nextIndent);
-		}
-	}
-	if(it.nodeType && it.cloneNode){ // isNode
-		// we can't seriailize DOM nodes as regular objects because they have cycles
-		// DOM nodes could be serialized with something like outerHTML, but
-		// that can be provided by users in the form of .json or .__json__ function.
-		throw new Error("Can't serialize DOM nodes");
-	}
-
-	var sep = prettyPrint ? " " : "";
-	var newLine = prettyPrint ? "\n" : "";
-
-	// array
-	if(dojo.isArray(it)){
-		var res = dojo.map(it, function(obj){
-			var val = recurse(obj, prettyPrint, nextIndent);
-			if(typeof val != "string"){
-				val = "undefined";
-			}
-			return newLine + nextIndent + val;
-		});
-		return "[" + res.join("," + sep) + newLine + _indentStr + "]";
-	}
-	/*
-	// look in the registry
-	try {
-		window.o = it;
-		newObj = dojo.json.jsonRegistry.match(it);
-		return recurse(newObj, prettyPrint, nextIndent);
-	}catch(e){
-		// console.log(e);
-	}
-	// it's a function with no adapter, skip it
-	*/
-	if(objtype == "function"){
-		return null; // null
-	}
-	// generic object code path
-	var output = [], key;
-	for(key in it){
-		var keyStr, val;
-		if(typeof key == "number"){
-			keyStr = '"' + key + '"';
-		}else if(typeof key == "string"){
-			keyStr = dojo._escapeString(key);
-		}else{
-			// skip non-string or number keys
-			continue;
-		}
-		val = recurse(it[key], prettyPrint, nextIndent);
-		if(typeof val != "string"){
-			// skip non-serializable values
-			continue;
-		}
-		// FIXME: use += on Moz!!
-		//	 MOW NOTE: using += is a pain because you have to account for the dangling comma...
-		output.push(newLine + nextIndent + keyStr + ":" + sep + val);
-	}
-	return "{" + output.join("," + sep) + newLine + _indentStr + "}"; // String
-}
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/lang.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/lang.js
deleted file mode 100644
index e377b75..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/lang.js
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo._base.lang"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._base.lang"] = true;
-dojo.provide("dojo._base.lang");
-
-(function(){
-	var d = dojo, opts = Object.prototype.toString;
-
-	// Crockford (ish) functions
-
-	dojo.isString = function(/*anything*/ it){
-		//	summary:
-		//		Return true if it is a String
-		return (typeof it == "string" || it instanceof String); // Boolean
-	}
-
-	dojo.isArray = function(/*anything*/ it){
-		//	summary:
-		//		Return true if it is an Array.
-		//		Does not work on Arrays created in other windows.
-		return it && (it instanceof Array || typeof it == "array"); // Boolean
-	}
-
-	dojo.isFunction = function(/*anything*/ it){
-		// summary:
-		//		Return true if it is a Function
-		return opts.call(it) === "[object Function]";
-	};
-
-	dojo.isObject = function(/*anything*/ it){
-		// summary:
-		//		Returns true if it is a JavaScript object (or an Array, a Function
-		//		or null)
-		return it !== undefined &&
-			(it === null || typeof it == "object" || d.isArray(it) || d.isFunction(it)); // Boolean
-	}
-
-	dojo.isArrayLike = function(/*anything*/ it){
-		//	summary:
-		//		similar to dojo.isArray() but more permissive
-		//	description:
-		//		Doesn't strongly test for "arrayness".  Instead, settles for "isn't
-		//		a string or number and has a length property". Arguments objects
-		//		and DOM collections will return true when passed to
-		//		dojo.isArrayLike(), but will return false when passed to
-		//		dojo.isArray().
-		//	returns:
-		//		If it walks like a duck and quacks like a duck, return `true`
-		return it && it !== undefined && // Boolean
-			// keep out built-in constructors (Number, String, ...) which have length
-			// properties
-			!d.isString(it) && !d.isFunction(it) &&
-			!(it.tagName && it.tagName.toLowerCase() == 'form') &&
-			(d.isArray(it) || isFinite(it.length));
-	}
-
-	dojo.isAlien = function(/*anything*/ it){
-		// summary:
-		//		Returns true if it is a built-in function or some other kind of
-		//		oddball that *should* report as a function but doesn't
-		return it && !d.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean
-	}
-
-	dojo.extend = function(/*Object*/ constructor, /*Object...*/ props){
-		// summary:
-		//		Adds all properties and methods of props to constructor's
-		//		prototype, making them available to all instances created with
-		//		constructor.
-		for(var i=1, l=arguments.length; i<l; i++){
-			d._mixin(constructor.prototype, arguments[i]);
-		}
-		return constructor; // Object
-	}
-
-	dojo._hitchArgs = function(scope, method /*,...*/){
-		var pre = d._toArray(arguments, 2);
-		var named = d.isString(method);
-		return function(){
-			// arrayify arguments
-			var args = d._toArray(arguments);
-			// locate our method
-			var f = named ? (scope||d.global)[method] : method;
-			// invoke with collected args
-			return f && f.apply(scope || this, pre.concat(args)); // mixed
-		} // Function
-	}
-
-	dojo.hitch = function(/*Object*/scope, /*Function|String*/method /*,...*/){
-		//	summary:
-		//		Returns a function that will only ever execute in the a given scope.
-		//		This allows for easy use of object member functions
-		//		in callbacks and other places in which the "this" keyword may
-		//		otherwise not reference the expected scope.
-		//		Any number of default positional arguments may be passed as parameters 
-		//		beyond "method".
-		//		Each of these values will be used to "placehold" (similar to curry)
-		//		for the hitched function.
-		//	scope:
-		//		The scope to use when method executes. If method is a string,
-		//		scope is also the object containing method.
-		//	method:
-		//		A function to be hitched to scope, or the name of the method in
-		//		scope to be hitched.
-		//	example:
-		//	|	dojo.hitch(foo, "bar")();
-		//		runs foo.bar() in the scope of foo
-		//	example:
-		//	|	dojo.hitch(foo, myFunction);
-		//		returns a function that runs myFunction in the scope of foo
-		//	example:
-		//		Expansion on the default positional arguments passed along from
-		//		hitch. Passed args are mixed first, additional args after.
-		//	|	var foo = { bar: function(a, b, c){ console.log(a, b, c); } };
-		//	|	var fn = dojo.hitch(foo, "bar", 1, 2);
-		//	|	fn(3); // logs "1, 2, 3"
-		//	example:
-		//	|	var foo = { bar: 2 };
-		//	|	dojo.hitch(foo, function(){ this.bar = 10; })();
-		//		execute an anonymous function in scope of foo
-		
-		if(arguments.length > 2){
-			return d._hitchArgs.apply(d, arguments); // Function
-		}
-		if(!method){
-			method = scope;
-			scope = null;
-		}
-		if(d.isString(method)){
-			scope = scope || d.global;
-			if(!scope[method]){ throw(['dojo.hitch: scope["', method, '"] is null (scope="', scope, '")'].join('')); }
-			return function(){ return scope[method].apply(scope, arguments || []); }; // Function
-		}
-		return !scope ? method : function(){ return method.apply(scope, arguments || []); }; // Function
-	}
-
-	/*=====
-	dojo.delegate = function(obj, props){
-		//	summary:
-		//		Returns a new object which "looks" to obj for properties which it
-		//		does not have a value for. Optionally takes a bag of properties to
-		//		seed the returned object with initially.
-		//	description:
-		//		This is a small implementaton of the Boodman/Crockford delegation
-		//		pattern in JavaScript. An intermediate object constructor mediates
-		//		the prototype chain for the returned object, using it to delegate
-		//		down to obj for property lookup when object-local lookup fails.
-		//		This can be thought of similarly to ES4's "wrap", save that it does
-		//		not act on types but rather on pure objects.
-		//	obj:
-		//		The object to delegate to for properties not found directly on the
-		//		return object or in props.
-		//	props:
-		//		an object containing properties to assign to the returned object
-		//	returns:
-		//		an Object of anonymous type
-		//	example:
-		//	|	var foo = { bar: "baz" };
-		//	|	var thinger = dojo.delegate(foo, { thud: "xyzzy"});
-		//	|	thinger.bar == "baz"; // delegated to foo
-		//	|	foo.thud == undefined; // by definition
-		//	|	thinger.thud == "xyzzy"; // mixed in from props
-		//	|	foo.bar = "thonk";
-		//	|	thinger.bar == "thonk"; // still delegated to foo's bar
-	}
-	=====*/
-
-	dojo.delegate = dojo._delegate = (function(){
-		// boodman/crockford delegation w/ cornford optimization
-		function TMP(){}
-		return function(obj, props){
-			TMP.prototype = obj;
-			var tmp = new TMP();
-			TMP.prototype = null;
-			if(props){
-				d._mixin(tmp, props);
-			}
-			return tmp; // Object
-		}
-	})();
-
-	/*=====
-	dojo._toArray = function(obj, offset, startWith){
-		//	summary:
-		//		Converts an array-like object (i.e. arguments, DOMCollection) to an
-		//		array. Returns a new Array with the elements of obj.
-		//	obj: Object
-		//		the object to "arrayify". We expect the object to have, at a
-		//		minimum, a length property which corresponds to integer-indexed
-		//		properties.
-		//	offset: Number?
-		//		the location in obj to start iterating from. Defaults to 0.
-		//		Optional.
-		//	startWith: Array?
-		//		An array to pack with the properties of obj. If provided,
-		//		properties in obj are appended at the end of startWith and
-		//		startWith is the returned array.
-	}
-	=====*/
-
-	var efficient = function(obj, offset, startWith){
-		return (startWith||[]).concat(Array.prototype.slice.call(obj, offset||0));
-	};
-
-		var slow = function(obj, offset, startWith){
-		var arr = startWith||[];
-		for(var x = offset || 0; x < obj.length; x++){
-			arr.push(obj[x]);
-		}
-		return arr;
-	};
-	
-	dojo._toArray =
-				d.isIE ?  function(obj){
-			return ((obj.item) ? slow : efficient).apply(this, arguments);
-		} :
-				efficient;
-
-	dojo.partial = function(/*Function|String*/method /*, ...*/){
-		//	summary:
-		//		similar to hitch() except that the scope object is left to be
-		//		whatever the execution context eventually becomes.
-		//	description:
-		//		Calling dojo.partial is the functional equivalent of calling:
-		//		|	dojo.hitch(null, funcName, ...);
-		var arr = [ null ];
-		return d.hitch.apply(d, arr.concat(d._toArray(arguments))); // Function
-	}
-
-	var extraNames = d._extraNames, extraLen = extraNames.length, empty = {};
-
-	dojo.clone = function(/*anything*/ o){
-		// summary:
-		//		Clones objects (including DOM nodes) and all children.
-		//		Warning: do not clone cyclic structures.
-		if(!o || typeof o != "object" || d.isFunction(o)){
-			// null, undefined, any non-object, or function
-			return o;	// anything
-		}
-		if(o.nodeType && "cloneNode" in o){
-			// DOM Node
-			return o.cloneNode(true); // Node
-		}
-		if(o instanceof Date){
-			// Date
-			return new Date(o.getTime());	// Date
-		}
-		var r, i, l, s, name;
-		if(d.isArray(o)){
-			// array
-			r = [];
-			for(i = 0, l = o.length; i < l; ++i){
-				if(i in o){
-					r.push(d.clone(o[i]));
-				}
-			}
-// we don't clone functions for performance reasons
-//		}else if(d.isFunction(o)){
-//			// function
-//			r = function(){ return o.apply(this, arguments); };
-		}else{
-			// generic objects
-			r = o.constructor ? new o.constructor() : {};
-		}
-		for(name in o){
-			// the "tobj" condition avoid copying properties in "source"
-			// inherited from Object.prototype.  For example, if target has a custom
-			// toString() method, don't overwrite it with the toString() method
-			// that source inherited from Object.prototype
-			s = o[name];
-			if(!(name in r) || (r[name] !== s && (!(name in empty) || empty[name] !== s))){
-				r[name] = d.clone(s);
-			}
-		}
-				// IE doesn't recognize some custom functions in for..in
-		if(extraLen){
-			for(i = 0; i < extraLen; ++i){
-				name = extraNames[i];
-				s = o[name];
-				if(!(name in r) || (r[name] !== s && (!(name in empty) || empty[name] !== s))){
-					r[name] = s; // functions only, we don't clone them
-				}
-			}
-		}
-				return r; // Object
-	}
-
-	/*=====
-	dojo.trim = function(str){
-		//	summary:
-		//		Trims whitespace from both sides of the string
-		//	str: String
-		//		String to be trimmed
-		//	returns: String
-		//		Returns the trimmed string
-		//	description:
-		//		This version of trim() was selected for inclusion into the base due
-		//		to its compact size and relatively good performance
-		//		(see [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript)
-		//		Uses String.prototype.trim instead, if available.
-		//		The fastest but longest version of this function is located at
-		//		dojo.string.trim()
-		return "";	// String
-	}
-	=====*/
-
-	dojo.trim = String.prototype.trim ?
-		function(str){ return str.trim(); } :
-		function(str){ return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); };
-
-	/*=====
-	dojo.replace = function(tmpl, map, pattern){
-		//	summary:
-		//		Performs parameterized substitutions on a string. Throws an
-		//		exception if any parameter is unmatched. 
-		//	tmpl: String
-		//		String to be used as a template.
-		//	map: Object|Function
-		//		If an object, it is used as a dictionary to look up substitutions.
-		//		If a function, it is called for every substitution with following
-		//		parameters: a whole match, a name, an offset, and the whole template
-		//		string (see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace
-		//		for more details).
-		//	pattern: RegEx?
-		//		Optional regular expression objects that overrides the default pattern.
-		//		Must be global and match one item. The default is: /\{([^\}]+)\}/g,
-		//		which matches patterns like that: "{xxx}", where "xxx" is any sequence
-		//		of characters, which doesn't include "}".
-		//	returns: String
-		//		Returns the substituted string.
-		//	example:
-		//	|	// uses a dictionary for substitutions:
-		//	|	dojo.replace("Hello, {name.first} {name.last} AKA {nick}!",
-		//	|	  {
-		//	|	    nick: "Bob",
-		//	|	    name: {
-		//	|	      first:  "Robert",
-		//	|	      middle: "X",
-		//	|	      last:   "Cringely"
-		//	|	    }
-		//	|	  });
-		//	|	// returns: Hello, Robert Cringely AKA Bob!
-		//	example:
-		//	|	// uses an array for substitutions:
-		//	|	dojo.replace("Hello, {0} {2}!",
-		//	|	  ["Robert", "X", "Cringely"]);
-		//	|	// returns: Hello, Robert Cringely!
-		//	example:
-		//	|	// uses a function for substitutions:
-		//	|	function sum(a){
-		//	|	  var t = 0;
-		//	|	  dojo.forEach(a, function(x){ t += x; });
-		//	|	  return t;
-		//	|	}
-		//	|	dojo.replace(
-		//	|	  "{count} payments averaging {avg} USD per payment.",
-		//	|	  dojo.hitch(
-		//	|	    { payments: [11, 16, 12] },
-		//	|	    function(_, key){
-		//	|	      switch(key){
-		//	|	        case "count": return this.payments.length;
-		//	|	        case "min":   return Math.min.apply(Math, this.payments);
-		//	|	        case "max":   return Math.max.apply(Math, this.payments);
-		//	|	        case "sum":   return sum(this.payments);
-		//	|	        case "avg":   return sum(this.payments) / this.payments.length;
-		//	|	      }
-		//	|	    }
-		//	|	  )
-		//	|	);
-		//	|	// prints: 3 payments averaging 13 USD per payment.
-		//	example:
-		//	|	// uses an alternative PHP-like pattern for substitutions:
-		//	|	dojo.replace("Hello, ${0} ${2}!",
-		//	|	  ["Robert", "X", "Cringely"], /\$\{([^\}]+)\}/g);
-		//	|	// returns: Hello, Robert Cringely!
-		return "";	// String
-	}
-	=====*/
-
-	var _pattern = /\{([^\}]+)\}/g;
-	dojo.replace = function(tmpl, map, pattern){
-		return tmpl.replace(pattern || _pattern, d.isFunction(map) ?
-			map : function(_, k){ return d.getObject(k, false, map); });
-	};
-})();
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/query-sizzle.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/query-sizzle.js
deleted file mode 100644
index caf6090..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/query-sizzle.js
+++ /dev/null
@@ -1,869 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo._base.query"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._base.query"] = true;
-/*!
- * Sizzle CSS Selector Engine - v0.9
- *  Copyright 2009, John Resig
- *  Redistributed with the Dojo Toolkit under the terms of the New BSD license.
- *  More information: http://sizzlejs.com/
- *
- *  This version from github, dated 1/23/2009, commit: e374a73bbffc12ec3b5f252e7f76e593c508dfa5
- *  Modified for dojo loader, and to fit into dojo namespace. This was done by passing
- *  dojo object to anonymous function, then assigning Sizzle to dojo.Sizzle instead of window.Sizzle.
- *  Then an alias for dojo.query and dojo._filterQueryResult(). dojo.psuedos is not mapped.
- *  Finally, dojo.provide/require added.
- */
-
-//This file gets copied to dojo/_base/query.js, so set the provide accordingly.
-if(typeof dojo != "undefined"){
-	dojo.provide("dojo._base.query");
-	dojo.require("dojo._base.NodeList");
-
-	//Start Dojo mappings.
-	dojo.query = function(/*String*/ query, /*String|DOMNode?*/ root, /*Function?*/listCtor){
-		listCtor = listCtor || dojo.NodeList;
-
-		if(!query){
-			return new listCtor();
-		}
-
-		if(query.constructor == listCtor){
-			return query;
-		}
-		if(!dojo.isString(query)){
-			return new listCtor(query); // dojo.NodeList
-		}
-		if(dojo.isString(root)){
-			root = dojo.byId(root);
-			if(!root){ return new listCtor(); }
-		}
-
-		return dojo.Sizzle(query, root, new listCtor());
-	}
-
-	dojo._filterQueryResult = function(nodeList, simpleFilter){
-		return dojo.Sizzle.filter(simpleFilter, nodeList);
-	}
-}
-
-//Main Sizzle code follows...
-//ns argument, added for dojo, used at the end of the file.
-;(function(ns){
-
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|[^[\]]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g,
-	done = 0,
-	toString = Object.prototype.toString;
-
-var Sizzle = function(selector, context, results, seed) {
-	results = results || [];
-	context = context || document;
-
-	if ( context.nodeType !== 1 && context.nodeType !== 9 )
-		return [];
-	
-	if ( !selector || typeof selector !== "string" ) {
-		return results;
-	}
-
-	var parts = [], m, set, checkSet, check, mode, extra, prune = true;
-	
-	// Reset the position of the chunker regexp (start from head)
-	chunker.lastIndex = 0;
-	
-	while ( (m = chunker.exec(selector)) !== null ) {
-		parts.push( m[1] );
-		
-		if ( m[2] ) {
-			extra = RegExp.rightContext;
-			break;
-		}
-	}
-
-	if ( parts.length > 1 && Expr.match.POS.exec( selector ) ) {
-		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
-			var later = "", match;
-
-			// Position selectors must be done after the filter
-			while ( (match = Expr.match.POS.exec( selector )) ) {
-				later += match[0];
-				selector = selector.replace( Expr.match.POS, "" );
-			}
-
-			set = Sizzle.filter( later, Sizzle( selector, context ) );
-		} else {
-			set = Expr.relative[ parts[0] ] ?
-				[ context ] :
-				Sizzle( parts.shift(), context );
-
-			while ( parts.length ) {
-				var tmpSet = [];
-
-				selector = parts.shift();
-				if ( Expr.relative[ selector ] )
-					selector += parts.shift();
-
-				for ( var i = 0, l = set.length; i < l; i++ ) {
-					Sizzle( selector, set[i], tmpSet );
-				}
-
-				set = tmpSet;
-			}
-		}
-	} else {
-		var ret = seed ?
-			{ expr: parts.pop(), set: makeArray(seed) } :
-			Sizzle.find( parts.pop(), parts.length === 1 && context.parentNode ? context.parentNode : context );
-		set = Sizzle.filter( ret.expr, ret.set );
-
-		if ( parts.length > 0 ) {
-			checkSet = makeArray(set);
-		} else {
-			prune = false;
-		}
-
-		while ( parts.length ) {
-			var cur = parts.pop(), pop = cur;
-
-			if ( !Expr.relative[ cur ] ) {
-				cur = "";
-			} else {
-				pop = parts.pop();
-			}
-
-			if ( pop == null ) {
-				pop = context;
-			}
-
-			Expr.relative[ cur ]( checkSet, pop );
-		}
-	}
-
-	if ( !checkSet ) {
-		checkSet = set;
-	}
-
-	if ( !checkSet ) {
-		throw "Syntax error, unrecognized expression: " + (cur || selector);
-	}
-
-	if ( toString.call(checkSet) === "[object Array]" ) {
-		if ( !prune ) {
-			results.push.apply( results, checkSet );
-		} else if ( context.nodeType === 1 ) {
-			for ( var i = 0; checkSet[i] != null; i++ ) {
-				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
-					results.push( set[i] );
-				}
-			}
-		} else {
-			for ( var i = 0; checkSet[i] != null; i++ ) {
-				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
-					results.push( set[i] );
-				}
-			}
-		}
-	} else {
-		makeArray( checkSet, results );
-	}
-
-	if ( extra ) {
-		Sizzle( extra, context, results, seed );
-	}
-
-	return results;
-};
-
-Sizzle.matches = function(expr, set){
-	return Sizzle(expr, null, null, set);
-};
-
-Sizzle.find = function(expr, context){
-	var set, match;
-
-	if ( !expr ) {
-		return [];
-	}
-
-	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
-		var type = Expr.order[i], match;
-		
-		if ( (match = Expr.match[ type ].exec( expr )) ) {
-			var left = RegExp.leftContext;
-
-			if ( left.substr( left.length - 1 ) !== "\\" ) {
-				match[1] = (match[1] || "").replace(/\\/g, "");
-				set = Expr.find[ type ]( match, context );
-				if ( set != null ) {
-					expr = expr.replace( Expr.match[ type ], "" );
-					break;
-				}
-			}
-		}
-	}
-
-	if ( !set ) {
-		set = context.getElementsByTagName("*");
-	}
-
-	return {set: set, expr: expr};
-};
-
-Sizzle.filter = function(expr, set, inplace, not){
-	var old = expr, result = [], curLoop = set, match, anyFound;
-
-	while ( expr && set.length ) {
-		for ( var type in Expr.filter ) {
-			if ( (match = Expr.match[ type ].exec( expr )) != null ) {
-				var filter = Expr.filter[ type ], goodArray = null, goodPos = 0, found, item;
-				anyFound = false;
-
-				if ( curLoop == result ) {
-					result = [];
-				}
-
-				if ( Expr.preFilter[ type ] ) {
-					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not );
-
-					if ( !match ) {
-						anyFound = found = true;
-					} else if ( match[0] === true ) {
-						goodArray = [];
-						var last = null, elem;
-						for ( var i = 0; (elem = curLoop[i]) !== undefined; i++ ) {
-							if ( elem && last !== elem ) {
-								goodArray.push( elem );
-								last = elem;
-							}
-						}
-					}
-				}
-
-				if ( match ) {
-					for ( var i = 0; (item = curLoop[i]) !== undefined; i++ ) {
-						if ( item ) {
-							if ( goodArray && item != goodArray[goodPos] ) {
-								goodPos++;
-							}
-	
-							found = filter( item, match, goodPos, goodArray );
-							var pass = not ^ !!found;
-
-							if ( inplace && found != null ) {
-								if ( pass ) {
-									anyFound = true;
-								} else {
-									curLoop[i] = false;
-								}
-							} else if ( pass ) {
-								result.push( item );
-								anyFound = true;
-							}
-						}
-					}
-				}
-
-				if ( found !== undefined ) {
-					if ( !inplace ) {
-						curLoop = result;
-					}
-
-					expr = expr.replace( Expr.match[ type ], "" );
-
-					if ( !anyFound ) {
-						return [];
-					}
-
-					break;
-				}
-			}
-		}
-
-		expr = expr.replace(/\s*,\s*/, "");
-
-		// Improper expression
-		if ( expr == old ) {
-			if ( anyFound == null ) {
-				throw "Syntax error, unrecognized expression: " + expr;
-			} else {
-				break;
-			}
-		}
-
-		old = expr;
-	}
-
-	return curLoop;
-};
-
-var Expr = Sizzle.selectors = {
-	order: [ "ID", "NAME", "TAG" ],
-	match: {
-		ID: /#((?:[\w\u0128-\uFFFF_-]|\\.)+)/,
-		CLASS: /\.((?:[\w\u0128-\uFFFF_-]|\\.)+)/,
-		NAME: /\[name=['"]*((?:[\w\u0128-\uFFFF_-]|\\.)+)['"]*\]/,
-		ATTR: /\[((?:[\w\u0128-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\]/,
-		TAG: /^((?:[\w\u0128-\uFFFF\*_-]|\\.)+)/,
-		CHILD: /:(only|nth|last|first)-child\(?(even|odd|[\dn+-]*)\)?/,
-		POS: /:(nth|eq|gt|lt|first|last|even|odd)\(?(\d*)\)?(?:[^-]|$)/,
-		PSEUDO: /:((?:[\w\u0128-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
-	},
-	attrMap: {
-		"class": "className",
-		"for": "htmlFor"
-	},
-	relative: {
-		"+": function(checkSet, part){
-			for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-				var elem = checkSet[i];
-				if ( elem ) {
-					var cur = elem.previousSibling;
-					while ( cur && cur.nodeType !== 1 ) {
-						cur = cur.previousSibling;
-					}
-					checkSet[i] = typeof part === "string" ?
-						cur || false :
-						cur === part;
-				}
-			}
-
-			if ( typeof part === "string" ) {
-				Sizzle.filter( part, checkSet, true );
-			}
-		},
-		">": function(checkSet, part){
-			if ( typeof part === "string" && !/\W/.test(part) ) {
-				part = part.toUpperCase();
-
-				for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-					var elem = checkSet[i];
-					if ( elem ) {
-						var parent = elem.parentNode;
-						checkSet[i] = parent.nodeName === part ? parent : false;
-					}
-				}
-			} else {
-				for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-					var elem = checkSet[i];
-					if ( elem ) {
-						checkSet[i] = typeof part === "string" ?
-							elem.parentNode :
-							elem.parentNode === part;
-					}
-				}
-
-				if ( typeof part === "string" ) {
-					Sizzle.filter( part, checkSet, true );
-				}
-			}
-		},
-		"": function(checkSet, part){
-			var doneName = "done" + (done++), checkFn = dirCheck;
-
-			if ( !part.match(/\W/) ) {
-				var nodeCheck = part = part.toUpperCase();
-				checkFn = dirNodeCheck;
-			}
-
-			checkFn("parentNode", part, doneName, checkSet, nodeCheck);
-		},
-		"~": function(checkSet, part){
-			var doneName = "done" + (done++), checkFn = dirCheck;
-
-			if ( typeof part === "string" && !part.match(/\W/) ) {
-				var nodeCheck = part = part.toUpperCase();
-				checkFn = dirNodeCheck;
-			}
-
-			checkFn("previousSibling", part, doneName, checkSet, nodeCheck);
-		}
-	},
-	find: {
-		ID: function(match, context){
-			if ( context.getElementById ) {
-				var m = context.getElementById(match[1]);
-				return m ? [m] : [];
-			}
-		},
-		NAME: function(match, context){
-			return context.getElementsByName ? context.getElementsByName(match[1]) : null;
-		},
-		TAG: function(match, context){
-			return context.getElementsByTagName(match[1]);
-		}
-	},
-	preFilter: {
-		CLASS: function(match, curLoop, inplace, result, not){
-			match = " " + match[1].replace(/\\/g, "") + " ";
-
-			for ( var i = 0; curLoop[i]; i++ ) {
-				if ( not ^ (" " + curLoop[i].className + " ").indexOf(match) >= 0 ) {
-					if ( !inplace )
-						result.push( curLoop[i] );
-				} else if ( inplace ) {
-					curLoop[i] = false;
-				}
-			}
-
-			return false;
-		},
-		ID: function(match){
-			return match[1];
-		},
-		TAG: function(match){
-			return match[1].toUpperCase();
-		},
-		CHILD: function(match){
-			if ( match[1] == "nth" ) {
-				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
-				var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
-					match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" ||
-					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
-				// calculate the numbers (first)n+(last) including if they are negative
-				match[2] = (test[1] + (test[2] || 1)) - 0;
-				match[3] = test[3] - 0;
-			}
-
-			// TODO: Move to normal caching system
-			match[0] = "done" + (done++);
-
-			return match;
-		},
-		ATTR: function(match){
-			var name = match[1];
-			
-			if ( Expr.attrMap[name] ) {
-				match[1] = Expr.attrMap[name];
-			}
-
-			if ( match[2] === "~=" ) {
-				match[4] = " " + match[4] + " ";
-			}
-
-			return match;
-		},
-		PSEUDO: function(match, curLoop, inplace, result, not){
-			if ( match[1] === "not" ) {
-				// If we're dealing with a complex expression, or a simple one
-				if ( match[3].match(chunker).length > 1 ) {
-					match[3] = Sizzle(match[3], null, null, curLoop);
-				} else {
-					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
-					if ( !inplace ) {
-						result.push.apply( result, ret );
-					}
-					return false;
-				}
-			}
-			
-			return match;
-		},
-		POS: function(match){
-			match.unshift( true );
-			return match;
-		}
-	},
-	filters: {
-		enabled: function(elem){
-			return elem.disabled === false && elem.type !== "hidden";
-		},
-		disabled: function(elem){
-			return elem.disabled === true;
-		},
-		checked: function(elem){
-			return elem.checked === true;
-		},
-		selected: function(elem){
-			// Accessing this property makes selected-by-default
-			// options in Safari work properly
-			elem.parentNode.selectedIndex;
-			return elem.selected === true;
-		},
-		parent: function(elem){
-			return !!elem.firstChild;
-		},
-		empty: function(elem){
-			return !elem.firstChild;
-		},
-		has: function(elem, i, match){
-			return !!Sizzle( match[3], elem ).length;
-		},
-		header: function(elem){
-			return /h\d/i.test( elem.nodeName );
-		},
-		text: function(elem){
-			return "text" === elem.type;
-		},
-		radio: function(elem){
-			return "radio" === elem.type;
-		},
-		checkbox: function(elem){
-			return "checkbox" === elem.type;
-		},
-		file: function(elem){
-			return "file" === elem.type;
-		},
-		password: function(elem){
-			return "password" === elem.type;
-		},
-		submit: function(elem){
-			return "submit" === elem.type;
-		},
-		image: function(elem){
-			return "image" === elem.type;
-		},
-		reset: function(elem){
-			return "reset" === elem.type;
-		},
-		button: function(elem){
-			return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON";
-		},
-		input: function(elem){
-			return /input|select|textarea|button/i.test(elem.nodeName);
-		}
-	},
-	setFilters: {
-		first: function(elem, i){
-			return i === 0;
-		},
-		last: function(elem, i, match, array){
-			return i === array.length - 1;
-		},
-		even: function(elem, i){
-			return i % 2 === 0;
-		},
-		odd: function(elem, i){
-			return i % 2 === 1;
-		},
-		lt: function(elem, i, match){
-			return i < match[3] - 0;
-		},
-		gt: function(elem, i, match){
-			return i > match[3] - 0;
-		},
-		nth: function(elem, i, match){
-			return match[3] - 0 == i;
-		},
-		eq: function(elem, i, match){
-			return match[3] - 0 == i;
-		}
-	},
-	filter: {
-		CHILD: function(elem, match){
-			var type = match[1], parent = elem.parentNode;
-
-			var doneName = match[0];
-			
-			if ( parent && !parent[ doneName ] ) {
-				var count = 1;
-
-				for ( var node = parent.firstChild; node; node = node.nextSibling ) {
-					if ( node.nodeType == 1 ) {
-						node.nodeIndex = count++;
-					}
-				}
-
-				parent[ doneName ] = count - 1;
-			}
-
-			if ( type == "first" ) {
-				return elem.nodeIndex == 1;
-			} else if ( type == "last" ) {
-				return elem.nodeIndex == parent[ doneName ];
-			} else if ( type == "only" ) {
-				return parent[ doneName ] == 1;
-			} else if ( type == "nth" ) {
-				var add = false, first = match[2], last = match[3];
-
-				if ( first == 1 && last == 0 ) {
-					return true;
-				}
-
-				if ( first == 0 ) {
-					if ( elem.nodeIndex == last ) {
-						add = true;
-					}
-				} else if ( (elem.nodeIndex - last) % first == 0 && (elem.nodeIndex - last) / first >= 0 ) {
-					add = true;
-				}
-
-				return add;
-			}
-		},
-		PSEUDO: function(elem, match, i, array){
-			var name = match[1], filter = Expr.filters[ name ];
-
-			if ( filter ) {
-				return filter( elem, i, match, array );
-			} else if ( name === "contains" ) {
-				return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0;
-			} else if ( name === "not" ) {
-				var not = match[3];
-
-				for ( var i = 0, l = not.length; i < l; i++ ) {
-					if ( not[i] === elem ) {
-						return false;
-					}
-				}
-
-				return true;
-			}
-		},
-		ID: function(elem, match){
-			return elem.nodeType === 1 && elem.getAttribute("id") === match;
-		},
-		TAG: function(elem, match){
-			return (match === "*" && elem.nodeType === 1) || elem.nodeName === match;
-		},
-		CLASS: function(elem, match){
-			return match.test( elem.className );
-		},
-		ATTR: function(elem, match){
-			var result = elem[ match[1] ] || elem.getAttribute( match[1] ), value = result + "", type = match[2], check = match[4];
-			return result == null ?
-				false :
-				type === "=" ?
-				value === check :
-				type === "*=" ?
-				value.indexOf(check) >= 0 :
-				type === "~=" ?
-				(" " + value + " ").indexOf(check) >= 0 :
-				!match[4] ?
-				result :
-				type === "!=" ?
-				value != check :
-				type === "^=" ?
-				value.indexOf(check) === 0 :
-				type === "$=" ?
-				value.substr(value.length - check.length) === check :
-				type === "|=" ?
-				value === check || value.substr(0, check.length + 1) === check + "-" :
-				false;
-		},
-		POS: function(elem, match, i, array){
-			var name = match[2], filter = Expr.setFilters[ name ];
-
-			if ( filter ) {
-				return filter( elem, i, match, array );
-			}
-		}
-	}
-};
-
-for ( var type in Expr.match ) {
-	Expr.match[ type ] = RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
-}
-
-var makeArray = function(array, results) {
-	array = Array.prototype.slice.call( array );
-
-	if ( results ) {
-		results.push.apply( results, array );
-		return results;
-	}
-	
-	return array;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-try {
-	Array.prototype.slice.call( document.documentElement.childNodes );
-
-// Provide a fallback method if it does not work
-} catch(e){
-	makeArray = function(array, results) {
-		var ret = results || [];
-
-		if ( toString.call(array) === "[object Array]" ) {
-			Array.prototype.push.apply( ret, array );
-		} else {
-			if ( typeof array.length === "number" ) {
-				for ( var i = 0, l = array.length; i < l; i++ ) {
-					ret.push( array[i] );
-				}
-			} else {
-				for ( var i = 0; array[i]; i++ ) {
-					ret.push( array[i] );
-				}
-			}
-		}
-
-		return ret;
-	};
-}
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
-	// We're going to inject a fake input element with a specified name
-	var form = document.createElement("form"),
-		id = "script" + (new Date).getTime();
-	form.innerHTML = "<input name='" + id + "'/>";
-
-	// Inject it into the root element, check its status, and remove it quickly
-	var root = document.documentElement;
-	root.insertBefore( form, root.firstChild );
-
-	// The workaround has to do additional checks after a getElementById
-	// Which slows things down for other browsers (hence the branching)
-	if ( !!document.getElementById( id ) ) {
-		Expr.find.ID = function(match, context){
-			if ( context.getElementById ) {
-				var m = context.getElementById(match[1]);
-				return m ? m.id === match[1] || m.getAttributeNode && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
-			}
-		};
-
-		Expr.filter.ID = function(elem, match){
-			var node = elem.getAttributeNode && elem.getAttributeNode("id");
-			return elem.nodeType === 1 && node && node.nodeValue === match;
-		};
-	}
-
-	root.removeChild( form );
-})();
-
-// Check to see if the browser returns only elements
-// when doing getElementsByTagName("*")
-(function(){
-	// Create a fake element
-	var div = document.createElement("div");
-	div.appendChild( document.createComment("") );
-
-	// Make sure no comments are found
-	if ( div.getElementsByTagName("*").length > 0 ) {
-		Expr.find.TAG = function(match, context){
-			var results = context.getElementsByTagName(match[1]);
-
-			// Filter out possible comments
-			if ( match[1] === "*" ) {
-				var tmp = [];
-
-				for ( var i = 0; results[i]; i++ ) {
-					if ( results[i].nodeType === 1 ) {
-						tmp.push( results[i] );
-					}
-				}
-
-				results = tmp;
-			}
-
-			return results;
-		};
-	}
-})();
-
-if ( document.querySelectorAll ) (function(){
-	var oldSizzle = Sizzle;
-	
-	Sizzle = function(query, context, extra, seed){
-		context = context || document;
-
-		if ( !seed && context.nodeType === 9 ) {
-			try {
-				return makeArray( context.querySelectorAll(query), extra );
-			} catch(e){}
-		}
-		
-		return oldSizzle(query, context, extra, seed);
-	};
-
-	Sizzle.find = oldSizzle.find;
-	Sizzle.filter = oldSizzle.filter;
-	Sizzle.selectors = oldSizzle.selectors;
-	Sizzle.matches = oldSizzle.matches;
-})();
-
-if ( document.documentElement.getElementsByClassName ) {
-	Expr.order.splice(1, 0, "CLASS");
-	Expr.find.CLASS = function(match, context) {
-		return context.getElementsByClassName(match[1]);
-	};
-}
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck ) {
-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-		var elem = checkSet[i];
-		if ( elem ) {
-			elem = elem[dir];
-			var match = false;
-
-			while ( elem && elem.nodeType ) {
-				var done = elem[doneName];
-				if ( done ) {
-					match = checkSet[ done ];
-					break;
-				}
-
-				if ( elem.nodeType === 1 )
-					elem[doneName] = i;
-
-				if ( elem.nodeName === cur ) {
-					match = elem;
-					break;
-				}
-
-				elem = elem[dir];
-			}
-
-			checkSet[i] = match;
-		}
-	}
-}
-
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck ) {
-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-		var elem = checkSet[i];
-		if ( elem ) {
-			elem = elem[dir];
-			var match = false;
-
-			while ( elem && elem.nodeType ) {
-				if ( elem[doneName] ) {
-					match = checkSet[ elem[doneName] ];
-					break;
-				}
-
-				if ( elem.nodeType === 1 ) {
-					elem[doneName] = i;
-
-					if ( typeof cur !== "string" ) {
-						if ( elem === cur ) {
-							match = true;
-							break;
-						}
-
-					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
-						match = elem;
-						break;
-					}
-				}
-
-				elem = elem[dir];
-			}
-
-			checkSet[i] = match;
-		}
-	}
-}
-
-var contains = document.compareDocumentPosition ?  function(a, b){
-	return a.compareDocumentPosition(b) & 16;
-} : function(a, b){
-	return a !== b && (a.contains ? a.contains(b) : true);
-};
-
-// EXPOSE
-
-(ns || window).Sizzle = Sizzle;
-
-})(typeof dojo == "undefined" ? null : dojo);
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/query.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/query.js
deleted file mode 100644
index 54a9b64..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/query.js
+++ /dev/null
@@ -1,1524 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo._base.query"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._base.query"] = true;
-if(typeof dojo != "undefined"){
-	dojo.provide("dojo._base.query");
-	dojo.require("dojo._base.NodeList");
-	dojo.require("dojo._base.lang");
-
-}
-
-/*
-	dojo.query() architectural overview:
-
-		dojo.query is a relatively full-featured CSS3 query library. It is
-		designed to take any valid CSS3 selector and return the nodes matching
-		the selector. To do this quickly, it processes queries in several
-		steps, applying caching where profitable.
-		
-		The steps (roughly in reverse order of the way they appear in the code):
-			1.) check to see if we already have a "query dispatcher"
-				- if so, use that with the given parameterization. Skip to step 4.
-			2.) attempt to determine which branch to dispatch the query to:
-				- JS (optimized DOM iteration)
-				- native (FF3.1+, Safari 3.1+, IE 8+)
-			3.) tokenize and convert to executable "query dispatcher"
-				- this is where the lion's share of the complexity in the
-				  system lies. In the DOM version, the query dispatcher is
-				  assembled as a chain of "yes/no" test functions pertaining to
-				  a section of a simple query statement (".blah:nth-child(odd)"
-				  but not "div div", which is 2 simple statements). Individual
-				  statement dispatchers are cached (to prevent re-definition)
-				  as are entire dispatch chains (to make re-execution of the
-				  same query fast)
-			4.) the resulting query dispatcher is called in the passed scope
-			    (by default the top-level document)
-				- for DOM queries, this results in a recursive, top-down
-				  evaluation of nodes based on each simple query section
-				- for native implementations, this may mean working around spec
-				  bugs. So be it.
-			5.) matched nodes are pruned to ensure they are unique (if necessary)
-*/
-
-;(function(d){
-	// define everything in a closure for compressability reasons. "d" is an
-	// alias to "dojo" (or the toolkit alias object, e.g., "acme").
-
-	////////////////////////////////////////////////////////////////////////
-	// Toolkit aliases
-	////////////////////////////////////////////////////////////////////////
-
-	// if you are extracing dojo.query for use in your own system, you will
-	// need to provide these methods and properties. No other porting should be
-	// necessary, save for configuring the system to use a class other than
-	// dojo.NodeList as the return instance instantiator
-	var trim = 			d.trim;
-	var each = 			d.forEach;
-	// 					d.isIE; // float
-	// 					d.isSafari; // float
-	// 					d.isOpera; // float
-	// 					d.isWebKit; // float
-	// 					d.doc ; // document element
-	var qlc = d._NodeListCtor = 		d.NodeList;
-
-	var getDoc = function(){ return d.doc; };
-	// NOTE(alex): the spec is idiotic. CSS queries should ALWAYS be case-sensitive, but nooooooo
-	var cssCaseBug = ((d.isWebKit||d.isMozilla) && ((getDoc().compatMode) == "BackCompat"));
-
-	////////////////////////////////////////////////////////////////////////
-	// Global utilities
-	////////////////////////////////////////////////////////////////////////
-
-
-	// on browsers that support the "children" collection we can avoid a lot of
-	// iteration on chaff (non-element) nodes.
-	// why.
-	var childNodesName = !!getDoc().firstChild["children"] ? "children" : "childNodes";
-
-	var specials = ">~+";
-
-	// global thunk to determine whether we should treat the current query as
-	// case sensitive or not. This switch is flipped by the query evaluator
-	// based on the document passed as the context to search.
-	var caseSensitive = false;
-
-	// how high?
-	var yesman = function(){ return true; };
-
-	////////////////////////////////////////////////////////////////////////
-	// Tokenizer
-	////////////////////////////////////////////////////////////////////////
-
-	var getQueryParts = function(query){
-		//	summary: 
-		//		state machine for query tokenization
-		//	description:
-		//		instead of using a brittle and slow regex-based CSS parser,
-		//		dojo.query implements an AST-style query representation. This
-		//		representation is only generated once per query. For example,
-		//		the same query run multiple times or under different root nodes
-		//		does not re-parse the selector expression but instead uses the
-		//		cached data structure. The state machine implemented here
-		//		terminates on the last " " (space) charachter and returns an
-		//		ordered array of query component structures (or "parts"). Each
-		//		part represents an operator or a simple CSS filtering
-		//		expression. The structure for parts is documented in the code
-		//		below.
-
-
-		// NOTE: 
-		//		this code is designed to run fast and compress well. Sacrifices
-		//		to readibility and maintainability have been made.  Your best
-		//		bet when hacking the tokenizer is to put The Donnas on *really*
-		//		loud (may we recommend their "Spend The Night" release?) and
-		//		just assume you're gonna make mistakes. Keep the unit tests
-		//		open and run them frequently. Knowing is half the battle ;-)
-		if(specials.indexOf(query.slice(-1)) >= 0){
-			// if we end with a ">", "+", or "~", that means we're implicitly
-			// searching all children, so make it explicit
-			query += " * "
-		}else{
-			// if you have not provided a terminator, one will be provided for
-			// you...
-			query += " ";
-		}
-
-		var ts = function(/*Integer*/ s, /*Integer*/ e){
-			// trim and slice. 
-
-			// take an index to start a string slice from and an end position
-			// and return a trimmed copy of that sub-string
-			return trim(query.slice(s, e));
-		}
-
-		// the overall data graph of the full query, as represented by queryPart objects
-		var queryParts = []; 
-
-
-		// state keeping vars
-		var inBrackets = -1, inParens = -1, inMatchFor = -1, 
-			inPseudo = -1, inClass = -1, inId = -1, inTag = -1, 
-			lc = "", cc = "", pStart;
-
-		// iteration vars
-		var x = 0, // index in the query
-			ql = query.length,
-			currentPart = null, // data structure representing the entire clause
-			_cp = null; // the current pseudo or attr matcher
-
-		// several temporary variables are assigned to this structure durring a
-		// potential sub-expression match:
-		//		attr:
-		//			a string representing the current full attribute match in a
-		//			bracket expression
-		//		type:
-		//			if there's an operator in a bracket expression, this is
-		//			used to keep track of it
-		//		value:
-		//			the internals of parenthetical expression for a pseudo. for
-		//			:nth-child(2n+1), value might be "2n+1"
-
-		var endTag = function(){
-			// called when the tokenizer hits the end of a particular tag name.
-			// Re-sets state variables for tag matching and sets up the matcher
-			// to handle the next type of token (tag or operator).
-			if(inTag >= 0){
-				var tv = (inTag == x) ? null : ts(inTag, x); // .toLowerCase();
-				currentPart[ (specials.indexOf(tv) < 0) ? "tag" : "oper" ] = tv;
-				inTag = -1;
-			}
-		}
-
-		var endId = function(){
-			// called when the tokenizer might be at the end of an ID portion of a match
-			if(inId >= 0){
-				currentPart.id = ts(inId, x).replace(/\\/g, "");
-				inId = -1;
-			}
-		}
-
-		var endClass = function(){
-			// called when the tokenizer might be at the end of a class name
-			// match. CSS allows for multiple classes, so we augment the
-			// current item with another class in its list
-			if(inClass >= 0){
-				currentPart.classes.push(ts(inClass+1, x).replace(/\\/g, ""));
-				inClass = -1;
-			}
-		}
-
-		var endAll = function(){
-			// at the end of a simple fragment, so wall off the matches
-			endId(); endTag(); endClass();
-		}
-
-		var endPart = function(){
-			endAll();
-			if(inPseudo >= 0){
-				currentPart.pseudos.push({ name: ts(inPseudo+1, x) });
-			}
-			// hint to the selector engine to tell it whether or not it
-			// needs to do any iteration. Many simple selectors don't, and
-			// we can avoid significant construction-time work by advising
-			// the system to skip them
-			currentPart.loops = (	
-					currentPart.pseudos.length || 
-					currentPart.attrs.length || 
-					currentPart.classes.length	);
-
-			currentPart.oquery = currentPart.query = ts(pStart, x); // save the full expression as a string
-
-
-			// otag/tag are hints to suggest to the system whether or not
-			// it's an operator or a tag. We save a copy of otag since the
-			// tag name is cast to upper-case in regular HTML matches. The
-			// system has a global switch to figure out if the current
-			// expression needs to be case sensitive or not and it will use
-			// otag or tag accordingly
-			currentPart.otag = currentPart.tag = (currentPart["oper"]) ? null : (currentPart.tag || "*");
-
-			if(currentPart.tag){
-				// if we're in a case-insensitive HTML doc, we likely want
-				// the toUpperCase when matching on element.tagName. If we
-				// do it here, we can skip the string op per node
-				// comparison
-				currentPart.tag = currentPart.tag.toUpperCase();
-			}
-
-			// add the part to the list
-			if(queryParts.length && (queryParts[queryParts.length-1].oper)){
-				// operators are always infix, so we remove them from the
-				// list and attach them to the next match. The evaluator is
-				// responsible for sorting out how to handle them.
-				currentPart.infixOper = queryParts.pop();
-				currentPart.query = currentPart.infixOper.query + " " + currentPart.query;
-				/*
-				console.debug(	"swapping out the infix", 
-								currentPart.infixOper, 
-								"and attaching it to", 
-								currentPart);
-				*/
-			}
-			queryParts.push(currentPart);
-
-			currentPart = null;
-		}
-
-		// iterate over the query, charachter by charachter, building up a 
-		// list of query part objects
-		for(; lc=cc, cc=query.charAt(x), x < ql; x++){
-			//		cc: the current character in the match
-			//		lc: the last charachter (if any)
-
-			// someone is trying to escape something, so don't try to match any
-			// fragments. We assume we're inside a literal.
-			if(lc == "\\"){ continue; } 
-			if(!currentPart){ // a part was just ended or none has yet been created
-				// NOTE: I hate all this alloc, but it's shorter than writing tons of if's
-				pStart = x;
-				//	rules describe full CSS sub-expressions, like:
-				//		#someId
-				//		.className:first-child
-				//	but not:
-				//		thinger > div.howdy[type=thinger]
-				//	the indidual components of the previous query would be
-				//	split into 3 parts that would be represented a structure
-				//	like:
-				//		[
-				//			{
-				//				query: "thinger",
-				//				tag: "thinger",
-				//			},
-				//			{
-				//				query: "div.howdy[type=thinger]",
-				//				classes: ["howdy"],
-				//				infixOper: {
-				//					query: ">",
-				//					oper: ">",
-				//				}
-				//			},
-				//		]
-				currentPart = {
-					query: null, // the full text of the part's rule
-					pseudos: [], // CSS supports multiple pseud-class matches in a single rule
-					attrs: [], 	// CSS supports multi-attribute match, so we need an array
-					classes: [], // class matches may be additive, e.g.: .thinger.blah.howdy
-					tag: null, 	// only one tag...
-					oper: null, // ...or operator per component. Note that these wind up being exclusive.
-					id: null, 	// the id component of a rule
-					getTag: function(){
-						return (caseSensitive) ? this.otag : this.tag;
-					}
-				};
-
-				// if we don't have a part, we assume we're going to start at
-				// the beginning of a match, which should be a tag name. This
-				// might fault a little later on, but we detect that and this
-				// iteration will still be fine.
-				inTag = x; 
-			}
-
-			if(inBrackets >= 0){
-				// look for a the close first
-				if(cc == "]"){ // if we're in a [...] clause and we end, do assignment
-					if(!_cp.attr){
-						// no attribute match was previously begun, so we
-						// assume this is an attribute existance match in the
-						// form of [someAttributeName]
-						_cp.attr = ts(inBrackets+1, x);
-					}else{
-						// we had an attribute already, so we know that we're
-						// matching some sort of value, as in [attrName=howdy]
-						_cp.matchFor = ts((inMatchFor||inBrackets+1), x);
-					}
-					var cmf = _cp.matchFor;
-					if(cmf){
-						// try to strip quotes from the matchFor value. We want
-						// [attrName=howdy] to match the same 
-						//	as [attrName = 'howdy' ]
-						if(	(cmf.charAt(0) == '"') || (cmf.charAt(0)  == "'") ){
-							_cp.matchFor = cmf.slice(1, -1);
-						}
-					}
-					// end the attribute by adding it to the list of attributes. 
-					currentPart.attrs.push(_cp);
-					_cp = null; // necessary?
-					inBrackets = inMatchFor = -1;
-				}else if(cc == "="){
-					// if the last char was an operator prefix, make sure we
-					// record it along with the "=" operator. 
-					var addToCc = ("|~^$*".indexOf(lc) >=0 ) ? lc : "";
-					_cp.type = addToCc+cc;
-					_cp.attr = ts(inBrackets+1, x-addToCc.length);
-					inMatchFor = x+1;
-				}
-				// now look for other clause parts
-			}else if(inParens >= 0){
-				// if we're in a parenthetical expression, we need to figure
-				// out if it's attached to a pseduo-selector rule like
-				// :nth-child(1)
-				if(cc == ")"){
-					if(inPseudo >= 0){
-						_cp.value = ts(inParens+1, x);
-					}
-					inPseudo = inParens = -1;
-				}
-			}else if(cc == "#"){
-				// start of an ID match
-				endAll();
-				inId = x+1;
-			}else if(cc == "."){
-				// start of a class match
-				endAll();
-				inClass = x;
-			}else if(cc == ":"){
-				// start of a pseudo-selector match
-				endAll();
-				inPseudo = x;
-			}else if(cc == "["){
-				// start of an attribute match. 
-				endAll();
-				inBrackets = x;
-				// provide a new structure for the attribute match to fill-in
-				_cp = {
-					/*=====
-					attr: null, type: null, matchFor: null
-					=====*/
-				};
-			}else if(cc == "("){
-				// we really only care if we've entered a parenthetical
-				// expression if we're already inside a pseudo-selector match
-				if(inPseudo >= 0){
-					// provide a new structure for the pseudo match to fill-in
-					_cp = { 
-						name: ts(inPseudo+1, x), 
-						value: null
-					}
-					currentPart.pseudos.push(_cp);
-				}
-				inParens = x;
-			}else if(
-				(cc == " ") && 
-				// if it's a space char and the last char is too, consume the
-				// current one without doing more work
-				(lc != cc)
-			){
-				endPart();
-			}
-		}
-		return queryParts;
-	};
-	
-
-	////////////////////////////////////////////////////////////////////////
-	// DOM query infrastructure
-	////////////////////////////////////////////////////////////////////////
-
-	var agree = function(first, second){
-		// the basic building block of the yes/no chaining system. agree(f1,
-		// f2) generates a new function which returns the boolean results of
-		// both of the passed functions to a single logical-anded result. If
-		// either are not possed, the other is used exclusively.
-		if(!first){ return second; }
-		if(!second){ return first; }
-
-		return function(){
-			return first.apply(window, arguments) && second.apply(window, arguments);
-		}
-	};
-
-	var getArr = function(i, arr){
-		// helps us avoid array alloc when we don't need it
-		var r = arr||[]; // FIXME: should this be 'new d._NodeListCtor()' ?
-		if(i){ r.push(i); }
-		return r;
-	};
-
-	var _isElement = function(n){ return (1 == n.nodeType); };
-
-	// FIXME: need to coalesce _getAttr with defaultGetter
-	var blank = "";
-	var _getAttr = function(elem, attr){
-		if(!elem){ return blank; }
-		if(attr == "class"){
-			return elem.className || blank;
-		}
-		if(attr == "for"){
-			return elem.htmlFor || blank;
-		}
-		if(attr == "style"){
-			return elem.style.cssText || blank;
-		}
-		return (caseSensitive ? elem.getAttribute(attr) : elem.getAttribute(attr, 2)) || blank;
-	};
-
-	var attrs = {
-		"*=": function(attr, value){
-			return function(elem){
-				// E[foo*="bar"]
-				//		an E element whose "foo" attribute value contains
-				//		the substring "bar"
-				return (_getAttr(elem, attr).indexOf(value)>=0);
-			}
-		},
-		"^=": function(attr, value){
-			// E[foo^="bar"]
-			//		an E element whose "foo" attribute value begins exactly
-			//		with the string "bar"
-			return function(elem){
-				return (_getAttr(elem, attr).indexOf(value)==0);
-			}
-		},
-		"$=": function(attr, value){
-			// E[foo$="bar"]	
-			//		an E element whose "foo" attribute value ends exactly
-			//		with the string "bar"
-			var tval = " "+value;
-			return function(elem){
-				var ea = " "+_getAttr(elem, attr);
-				return (ea.lastIndexOf(value)==(ea.length-value.length));
-			}
-		},
-		"~=": function(attr, value){
-			// E[foo~="bar"]	
-			//		an E element whose "foo" attribute value is a list of
-			//		space-separated values, one of which is exactly equal
-			//		to "bar"
-
-			// return "[contains(concat(' ',@"+attr+",' '), ' "+ value +" ')]";
-			var tval = " "+value+" ";
-			return function(elem){
-				var ea = " "+_getAttr(elem, attr)+" ";
-				return (ea.indexOf(tval)>=0);
-			}
-		},
-		"|=": function(attr, value){
-			// E[hreflang|="en"]
-			//		an E element whose "hreflang" attribute has a
-			//		hyphen-separated list of values beginning (from the
-			//		left) with "en"
-			var valueDash = " "+value+"-";
-			return function(elem){
-				var ea = " "+_getAttr(elem, attr);
-				return (
-					(ea == value) ||
-					(ea.indexOf(valueDash)==0)
-				);
-			}
-		},
-		"=": function(attr, value){
-			return function(elem){
-				return (_getAttr(elem, attr) == value);
-			}
-		}
-	};
-
-	// avoid testing for node type if we can. Defining this in the negative
-	// here to avoid negation in the fast path.
-	var _noNES = (typeof getDoc().firstChild.nextElementSibling == "undefined");
-	var _ns = !_noNES ? "nextElementSibling" : "nextSibling";
-	var _ps = !_noNES ? "previousElementSibling" : "previousSibling";
-	var _simpleNodeTest = (_noNES ? _isElement : yesman);
-
-	var _lookLeft = function(node){
-		// look left
-		while(node = node[_ps]){
-			if(_simpleNodeTest(node)){ return false; }
-		}
-		return true;
-	};
-
-	var _lookRight = function(node){
-		// look right
-		while(node = node[_ns]){
-			if(_simpleNodeTest(node)){ return false; }
-		}
-		return true;
-	};
-
-	var getNodeIndex = function(node){
-		var root = node.parentNode;
-		var i = 0,
-			tret = root[childNodesName],
-			ci = (node["_i"]||-1),
-			cl = (root["_l"]||-1);
-
-		if(!tret){ return -1; }
-		var l = tret.length;
-
-		// we calcuate the parent length as a cheap way to invalidate the
-		// cache. It's not 100% accurate, but it's much more honest than what
-		// other libraries do
-		if( cl == l && ci >= 0 && cl >= 0 ){
-			// if it's legit, tag and release
-			return ci;
-		}
-
-		// else re-key things
-		root["_l"] = l;
-		ci = -1;
-		for(var te = root["firstElementChild"]||root["firstChild"]; te; te = te[_ns]){
-			if(_simpleNodeTest(te)){ 
-				te["_i"] = ++i;
-				if(node === te){ 
-					// NOTE:
-					// 	shortcuting the return at this step in indexing works
-					// 	very well for benchmarking but we avoid it here since
-					// 	it leads to potential O(n^2) behavior in sequential
-					// 	getNodexIndex operations on a previously un-indexed
-					// 	parent. We may revisit this at a later time, but for
-					// 	now we just want to get the right answer more often
-					// 	than not.
-					ci = i;
-				}
-			}
-		}
-		return ci;
-	};
-
-	var isEven = function(elem){
-		return !((getNodeIndex(elem)) % 2);
-	};
-
-	var isOdd = function(elem){
-		return ((getNodeIndex(elem)) % 2);
-	};
-
-	var pseudos = {
-		"checked": function(name, condition){
-			return function(elem){
-				return !!("checked" in elem ? elem.checked : elem.selected);
-			}
-		},
-		"first-child": function(){ return _lookLeft; },
-		"last-child": function(){ return _lookRight; },
-		"only-child": function(name, condition){
-			return function(node){ 
-				if(!_lookLeft(node)){ return false; }
-				if(!_lookRight(node)){ return false; }
-				return true;
-			};
-		},
-		"empty": function(name, condition){
-			return function(elem){
-				// DomQuery and jQuery get this wrong, oddly enough.
-				// The CSS 3 selectors spec is pretty explicit about it, too.
-				var cn = elem.childNodes;
-				var cnl = elem.childNodes.length;
-				// if(!cnl){ return true; }
-				for(var x=cnl-1; x >= 0; x--){
-					var nt = cn[x].nodeType;
-					if((nt === 1)||(nt == 3)){ return false; }
-				}
-				return true;
-			}
-		},
-		"contains": function(name, condition){
-			var cz = condition.charAt(0);
-			if( cz == '"' || cz == "'" ){ //remove quote
-				condition = condition.slice(1, -1);
-			}
-			return function(elem){
-				return (elem.innerHTML.indexOf(condition) >= 0);
-			}
-		},
-		"not": function(name, condition){
-			var p = getQueryParts(condition)[0];
-			var ignores = { el: 1 }; 
-			if(p.tag != "*"){
-				ignores.tag = 1;
-			}
-			if(!p.classes.length){
-				ignores.classes = 1;
-			}
-			var ntf = getSimpleFilterFunc(p, ignores);
-			return function(elem){
-				return (!ntf(elem));
-			}
-		},
-		"nth-child": function(name, condition){
-			var pi = parseInt;
-			// avoid re-defining function objects if we can
-			if(condition == "odd"){
-				return isOdd;
-			}else if(condition == "even"){
-				return isEven;
-			}
-			// FIXME: can we shorten this?
-			if(condition.indexOf("n") != -1){
-				var tparts = condition.split("n", 2);
-				var pred = tparts[0] ? ((tparts[0] == '-') ? -1 : pi(tparts[0])) : 1;
-				var idx = tparts[1] ? pi(tparts[1]) : 0;
-				var lb = 0, ub = -1;
-				if(pred > 0){
-					if(idx < 0){
-						idx = (idx % pred) && (pred + (idx % pred));
-					}else if(idx>0){
-						if(idx >= pred){
-							lb = idx - idx % pred;
-						}
-						idx = idx % pred;
-					}
-				}else if(pred<0){
-					pred *= -1;
-					// idx has to be greater than 0 when pred is negative;
-					// shall we throw an error here?
-					if(idx > 0){
-						ub = idx;
-						idx = idx % pred;
-					}
-				}
-				if(pred > 0){
-					return function(elem){
-						var i = getNodeIndex(elem);
-						return (i>=lb) && (ub<0 || i<=ub) && ((i % pred) == idx);
-					}
-				}else{
-					condition = idx;
-				}
-			}
-			var ncount = pi(condition);
-			return function(elem){
-				return (getNodeIndex(elem) == ncount);
-			}
-		}
-	};
-
-	var defaultGetter = (d.isIE) ? function(cond){
-		var clc = cond.toLowerCase();
-		if(clc == "class"){ cond = "className"; }
-		return function(elem){
-			return (caseSensitive ? elem.getAttribute(cond) : elem[cond]||elem[clc]);
-		}
-	} : function(cond){
-		return function(elem){
-			return (elem && elem.getAttribute && elem.hasAttribute(cond));
-		}
-	};
-
-	var getSimpleFilterFunc = function(query, ignores){
-		// generates a node tester function based on the passed query part. The
-		// query part is one of the structures generatd by the query parser
-		// when it creates the query AST. The "ignores" object specifies which
-		// (if any) tests to skip, allowing the system to avoid duplicating
-		// work where it may have already been taken into account by other
-		// factors such as how the nodes to test were fetched in the first
-		// place
-		if(!query){ return yesman; }
-		ignores = ignores||{};
-
-		var ff = null;
-
-		if(!("el" in ignores)){
-			ff = agree(ff, _isElement);
-		}
-
-		if(!("tag" in ignores)){
-			if(query.tag != "*"){
-				ff = agree(ff, function(elem){
-					return (elem && (elem.tagName == query.getTag()));
-				});
-			}
-		}
-
-		if(!("classes" in ignores)){
-			each(query.classes, function(cname, idx, arr){
-				// get the class name
-				/*
-				var isWildcard = cname.charAt(cname.length-1) == "*";
-				if(isWildcard){
-					cname = cname.substr(0, cname.length-1);
-				}
-				// I dislike the regex thing, even if memozied in a cache, but it's VERY short
-				var re = new RegExp("(?:^|\\s)" + cname + (isWildcard ? ".*" : "") + "(?:\\s|$)");
-				*/
-				var re = new RegExp("(?:^|\\s)" + cname + "(?:\\s|$)");
-				ff = agree(ff, function(elem){
-					return re.test(elem.className);
-				});
-				ff.count = idx;
-			});
-		}
-
-		if(!("pseudos" in ignores)){
-			each(query.pseudos, function(pseudo){
-				var pn = pseudo.name;
-				if(pseudos[pn]){
-					ff = agree(ff, pseudos[pn](pn, pseudo.value));
-				}
-			});
-		}
-
-		if(!("attrs" in ignores)){
-			each(query.attrs, function(attr){
-				var matcher;
-				var a = attr.attr;
-				// type, attr, matchFor
-				if(attr.type && attrs[attr.type]){
-					matcher = attrs[attr.type](a, attr.matchFor);
-				}else if(a.length){
-					matcher = defaultGetter(a);
-				}
-				if(matcher){
-					ff = agree(ff, matcher);
-				}
-			});
-		}
-
-		if(!("id" in ignores)){
-			if(query.id){
-				ff = agree(ff, function(elem){ 
-					return (!!elem && (elem.id == query.id));
-				});
-			}
-		}
-
-		if(!ff){
-			if(!("default" in ignores)){
-				ff = yesman; 
-			}
-		}
-		return ff;
-	};
-
-	var _nextSibling = function(filterFunc){
-		return function(node, ret, bag){
-			while(node = node[_ns]){
-				if(_noNES && (!_isElement(node))){ continue; }
-				if(
-					(!bag || _isUnique(node, bag)) &&
-					filterFunc(node)
-				){
-					ret.push(node);
-				}
-				break;
-			}
-			return ret;
-		}
-	};
-
-	var _nextSiblings = function(filterFunc){
-		return function(root, ret, bag){
-			var te = root[_ns];
-			while(te){
-				if(_simpleNodeTest(te)){
-					if(bag && !_isUnique(te, bag)){
-						break;
-					}
-					if(filterFunc(te)){
-						ret.push(te);
-					}
-				}
-				te = te[_ns];
-			}
-			return ret;
-		}
-	};
-
-	// get an array of child *elements*, skipping text and comment nodes
-	var _childElements = function(filterFunc){
-		filterFunc = filterFunc||yesman;
-		return function(root, ret, bag){
-			// get an array of child elements, skipping text and comment nodes
-			var te, x = 0, tret = root[childNodesName];
-			while(te = tret[x++]){
-				if(
-					_simpleNodeTest(te) &&
-					(!bag || _isUnique(te, bag)) &&
-					(filterFunc(te, x))
-				){ 
-					ret.push(te);
-				}
-			}
-			return ret;
-		};
-	};
-	
-	/*
-	// thanks, Dean!
-	var itemIsAfterRoot = d.isIE ? function(item, root){
-		return (item.sourceIndex > root.sourceIndex);
-	} : function(item, root){
-		return (item.compareDocumentPosition(root) == 2);
-	};
-	*/
-
-	// test to see if node is below root
-	var _isDescendant = function(node, root){
-		var pn = node.parentNode;
-		while(pn){
-			if(pn == root){
-				break;
-			}
-			pn = pn.parentNode;
-		}
-		return !!pn;
-	};
-
-	var _getElementsFuncCache = {};
-
-	var getElementsFunc = function(query){
-		var retFunc = _getElementsFuncCache[query.query];
-		// if we've got a cached dispatcher, just use that
-		if(retFunc){ return retFunc; }
-		// else, generate a new on
-
-		// NOTE:
-		//		this function returns a function that searches for nodes and
-		//		filters them.  The search may be specialized by infix operators
-		//		(">", "~", or "+") else it will default to searching all
-		//		descendants (the " " selector). Once a group of children is
-		//		founde, a test function is applied to weed out the ones we
-		//		don't want. Many common cases can be fast-pathed. We spend a
-		//		lot of cycles to create a dispatcher that doesn't do more work
-		//		than necessary at any point since, unlike this function, the
-		//		dispatchers will be called every time. The logic of generating
-		//		efficient dispatchers looks like this in pseudo code:
-		//
-		//		# if it's a purely descendant query (no ">", "+", or "~" modifiers)
-		//		if infixOperator == " ":
-		//			if only(id):
-		//				return def(root):
-		//					return d.byId(id, root);
-		//
-		//			elif id:
-		//				return def(root):
-		//					return filter(d.byId(id, root));
-		//
-		//			elif cssClass && getElementsByClassName:
-		//				return def(root):
-		//					return filter(root.getElementsByClassName(cssClass));
-		//
-		//			elif only(tag):
-		//				return def(root):
-		//					return root.getElementsByTagName(tagName);
-		//
-		//			else:
-		//				# search by tag name, then filter
-		//				return def(root):
-		//					return filter(root.getElementsByTagName(tagName||"*"));
-		//
-		//		elif infixOperator == ">":
-		//			# search direct children
-		//			return def(root):
-		//				return filter(root.children);
-		//
-		//		elif infixOperator == "+":
-		//			# search next sibling
-		//			return def(root):
-		//				return filter(root.nextElementSibling);
-		//
-		//		elif infixOperator == "~":
-		//			# search rightward siblings
-		//			return def(root):
-		//				return filter(nextSiblings(root));
-
-		var io = query.infixOper;
-		var oper = (io ? io.oper : "");
-		// the default filter func which tests for all conditions in the query
-		// part. This is potentially inefficient, so some optimized paths may
-		// re-define it to test fewer things.
-		var filterFunc = getSimpleFilterFunc(query, { el: 1 });
-		var qt = query.tag;
-		var wildcardTag = ("*" == qt);
-		var ecs = getDoc()["getElementsByClassName"]; 
-
-		if(!oper){
-			// if there's no infix operator, then it's a descendant query. ID
-			// and "elements by class name" variants can be accelerated so we
-			// call them out explicitly:
-			if(query.id){
-				// testing shows that the overhead of yesman() is acceptable
-				// and can save us some bytes vs. re-defining the function
-				// everywhere.
-				filterFunc = (!query.loops && wildcardTag) ? 
-					yesman : 
-					getSimpleFilterFunc(query, { el: 1, id: 1 });
-
-				retFunc = function(root, arr){
-					var te = d.byId(query.id, (root.ownerDocument||root));
-					if(!te || !filterFunc(te)){ return; }
-					if(9 == root.nodeType){ // if root's a doc, we just return directly
-						return getArr(te, arr);
-					}else{ // otherwise check ancestry
-						if(_isDescendant(te, root)){
-							return getArr(te, arr);
-						}
-					}
-				}
-			}else if(
-				ecs && 
-				// isAlien check. Workaround for Prototype.js being totally evil/dumb.
-				/\{\s*\[native code\]\s*\}/.test(String(ecs)) && 
-				query.classes.length &&
-				!cssCaseBug
-			){
-				// it's a class-based query and we've got a fast way to run it.
-
-				// ignore class and ID filters since we will have handled both
-				filterFunc = getSimpleFilterFunc(query, { el: 1, classes: 1, id: 1 });
-				var classesString = query.classes.join(" ");
-				retFunc = function(root, arr, bag){
-					var ret = getArr(0, arr), te, x=0;
-					var tret = root.getElementsByClassName(classesString);
-					while((te = tret[x++])){
-						if(filterFunc(te, root) && _isUnique(te, bag)){
-							ret.push(te);
-						}
-					}
-					return ret;
-				};
-
-			}else if(!wildcardTag && !query.loops){
-				// it's tag only. Fast-path it.
-				retFunc = function(root, arr, bag){
-					var ret = getArr(0, arr), te, x=0;
-					var tret = root.getElementsByTagName(query.getTag());
-					while((te = tret[x++])){
-						if(_isUnique(te, bag)){
-							ret.push(te);
-						}
-					}
-					return ret;
-				};
-			}else{
-				// the common case:
-				//		a descendant selector without a fast path. By now it's got
-				//		to have a tag selector, even if it's just "*" so we query
-				//		by that and filter
-				filterFunc = getSimpleFilterFunc(query, { el: 1, tag: 1, id: 1 });
-				retFunc = function(root, arr, bag){
-					var ret = getArr(0, arr), te, x=0;
-					// we use getTag() to avoid case sensitivity issues
-					var tret = root.getElementsByTagName(query.getTag());
-					while((te = tret[x++])){
-						if(filterFunc(te, root) && _isUnique(te, bag)){
-							ret.push(te);
-						}
-					}
-					return ret;
-				};
-			}
-		}else{
-			// the query is scoped in some way. Instead of querying by tag we
-			// use some other collection to find candidate nodes
-			var skipFilters = { el: 1 };
-			if(wildcardTag){
-				skipFilters.tag = 1;
-			}
-			filterFunc = getSimpleFilterFunc(query, skipFilters);
-			if("+" == oper){
-				retFunc = _nextSibling(filterFunc);
-			}else if("~" == oper){
-				retFunc = _nextSiblings(filterFunc);
-			}else if(">" == oper){
-				retFunc = _childElements(filterFunc);
-			}
-		}
-		// cache it and return
-		return _getElementsFuncCache[query.query] = retFunc;
-	};
-
-	var filterDown = function(root, queryParts){
-		// NOTE:
-		//		this is the guts of the DOM query system. It takes a list of
-		//		parsed query parts and a root and finds children which match
-		//		the selector represented by the parts
-		var candidates = getArr(root), qp, x, te, qpl = queryParts.length, bag, ret;
-
-		for(var i = 0; i < qpl; i++){
-			ret = [];
-			qp = queryParts[i];
-			x = candidates.length - 1;
-			if(x > 0){
-				// if we have more than one root at this level, provide a new
-				// hash to use for checking group membership but tell the
-				// system not to post-filter us since we will already have been
-				// gauranteed to be unique
-				bag = {};
-				ret.nozip = true;
-			}
-			var gef = getElementsFunc(qp);
-			for(var j = 0; (te = candidates[j]); j++){
-				// for every root, get the elements that match the descendant
-				// selector, adding them to the "ret" array and filtering them
-				// via membership in this level's bag. If there are more query
-				// parts, then this level's return will be used as the next
-				// level's candidates
-				gef(te, ret, bag);
-			}
-			if(!ret.length){ break; }
-			candidates = ret;
-		}
-		return ret;
-	};
-
-	////////////////////////////////////////////////////////////////////////
-	// the query runner
-	////////////////////////////////////////////////////////////////////////
-
-	// these are the primary caches for full-query results. The query
-	// dispatcher functions are generated then stored here for hash lookup in
-	// the future
-	var _queryFuncCacheDOM = {},
-		_queryFuncCacheQSA = {};
-
-	// this is the second level of spliting, from full-length queries (e.g.,
-	// "div.foo .bar") into simple query expressions (e.g., ["div.foo",
-	// ".bar"])
-	var getStepQueryFunc = function(query){
-		var qparts = getQueryParts(trim(query));
-
-		// if it's trivial, avoid iteration and zipping costs
-		if(qparts.length == 1){
-			// we optimize this case here to prevent dispatch further down the
-			// chain, potentially slowing things down. We could more elegantly
-			// handle this in filterDown(), but it's slower for simple things
-			// that need to be fast (e.g., "#someId").
-			var tef = getElementsFunc(qparts[0]);
-			return function(root){
-				var r = tef(root, new qlc());
-				if(r){ r.nozip = true; }
-				return r;
-			}
-		}
-
-		// otherwise, break it up and return a runner that iterates over the parts recursively
-		return function(root){
-			return filterDown(root, qparts);
-		}
-	};
-
-	// NOTES:
-	//	* we can't trust QSA for anything but document-rooted queries, so
-	//	  caching is split into DOM query evaluators and QSA query evaluators
-	//	* caching query results is dirty and leak-prone (or, at a minimum,
-	//	  prone to unbounded growth). Other toolkits may go this route, but
-	//	  they totally destroy their own ability to manage their memory
-	//	  footprint. If we implement it, it should only ever be with a fixed
-	//	  total element reference # limit and an LRU-style algorithm since JS
-	//	  has no weakref support. Caching compiled query evaluators is also
-	//	  potentially problematic, but even on large documents the size of the
-	//	  query evaluators is often < 100 function objects per evaluator (and
-	//	  LRU can be applied if it's ever shown to be an issue).
-	//	* since IE's QSA support is currently only for HTML documents and even
-	//	  then only in IE 8's "standards mode", we have to detect our dispatch
-	//	  route at query time and keep 2 separate caches. Ugg.
-
-	// we need to determine if we think we can run a given query via
-	// querySelectorAll or if we'll need to fall back on DOM queries to get
-	// there. We need a lot of information about the environment and the query
-	// to make the determiniation (e.g. does it support QSA, does the query in
-	// question work in the native QSA impl, etc.).
-	var nua = navigator.userAgent;
-	// some versions of Safari provided QSA, but it was buggy and crash-prone.
-	// We need te detect the right "internal" webkit version to make this work.
-	var wk = "WebKit/";
-	var is525 = (
-		d.isWebKit && 
-		(nua.indexOf(wk) > 0) && 
-		(parseFloat(nua.split(wk)[1]) > 528)
-	);
-
-	// IE QSA queries may incorrectly include comment nodes, so we throw the
-	// zipping function into "remove" comments mode instead of the normal "skip
-	// it" which every other QSA-clued browser enjoys
-	var noZip = d.isIE ? "commentStrip" : "nozip";
-
-	var qsa = "querySelectorAll";
-	var qsaAvail = (
-		!!getDoc()[qsa] && 
-		// see #5832
-		(!d.isSafari || (d.isSafari > 3.1) || is525 )
-	);
-
-	//Don't bother with n+3 type of matches, IE complains if we modify those.
-	var infixSpaceRe = /n\+\d|([^ ])?([>~+])([^ =])?/g;
-	var infixSpaceFunc = function(match, pre, ch, post) {
-		return ch ? (pre ? pre + " " : "") + ch + (post ? " " + post : "") : /*n+3*/ match;
-	};
-
-	var getQueryFunc = function(query, forceDOM){
-		//Normalize query. The CSS3 selectors spec allows for omitting spaces around
-		//infix operators, >, ~ and +
-		//Do the work here since detection for spaces is used as a simple "not use QSA"
-		//test below.
-		query = query.replace(infixSpaceRe, infixSpaceFunc);
-
-		if(qsaAvail){
-			// if we've got a cached variant and we think we can do it, run it!
-			var qsaCached = _queryFuncCacheQSA[query];
-			if(qsaCached && !forceDOM){ return qsaCached; }
-		}
-
-		// else if we've got a DOM cached variant, assume that we already know
-		// all we need to and use it
-		var domCached = _queryFuncCacheDOM[query];
-		if(domCached){ return domCached; }
-
-		// TODO: 
-		//		today we're caching DOM and QSA branches separately so we
-		//		recalc useQSA every time. If we had a way to tag root+query
-		//		efficiently, we'd be in good shape to do a global cache.
-
-		var qcz = query.charAt(0);
-		var nospace = (-1 == query.indexOf(" "));
-
-		// byId searches are wicked fast compared to QSA, even when filtering
-		// is required
-		if( (query.indexOf("#") >= 0) && (nospace) ){
-			forceDOM = true;
-		}
-
-		var useQSA = ( 
-			qsaAvail && (!forceDOM) &&
-			// as per CSS 3, we can't currently start w/ combinator:
-			//		http://www.w3.org/TR/css3-selectors/#w3cselgrammar
-			(specials.indexOf(qcz) == -1) && 
-			// IE's QSA impl sucks on pseudos
-			(!d.isIE || (query.indexOf(":") == -1)) &&
-
-			(!(cssCaseBug && (query.indexOf(".") >= 0))) &&
-
-			// FIXME:
-			//		need to tighten up browser rules on ":contains" and "|=" to
-			//		figure out which aren't good
-			//		Latest webkit (around 531.21.8) does not seem to do well with :checked on option
-			//		elements, even though according to spec, selected options should
-			//		match :checked. So go nonQSA for it:
-			//		http://bugs.dojotoolkit.org/ticket/5179
-			(query.indexOf(":contains") == -1) && (query.indexOf(":checked") == -1) && 
-			(query.indexOf("|=") == -1) // some browsers don't grok it
-		);
-
-		// TODO: 
-		//		if we've got a descendant query (e.g., "> .thinger" instead of
-		//		just ".thinger") in a QSA-able doc, but are passed a child as a
-		//		root, it should be possible to give the item a synthetic ID and
-		//		trivially rewrite the query to the form "#synid > .thinger" to
-		//		use the QSA branch
-
-
-		if(useQSA){
-			var tq = (specials.indexOf(query.charAt(query.length-1)) >= 0) ? 
-						(query + " *") : query;
-			return _queryFuncCacheQSA[query] = function(root){
-				try{
-					// the QSA system contains an egregious spec bug which
-					// limits us, effectively, to only running QSA queries over
-					// entire documents.  See:
-					//		http://ejohn.org/blog/thoughts-on-queryselectorall/
-					//	despite this, we can also handle QSA runs on simple
-					//	selectors, but we don't want detection to be expensive
-					//	so we're just checking for the presence of a space char
-					//	right now. Not elegant, but it's cheaper than running
-					//	the query parser when we might not need to
-					if(!((9 == root.nodeType) || nospace)){ throw ""; }
-					var r = root[qsa](tq);
-					// skip expensive duplication checks and just wrap in a NodeList
-					r[noZip] = true;
-					return r;
-				}catch(e){
-					// else run the DOM branch on this query, ensuring that we
-					// default that way in the future
-					return getQueryFunc(query, true)(root);
-				}
-			}
-		}else{
-			// DOM branch
-			var parts = query.split(/\s*,\s*/);
-			return _queryFuncCacheDOM[query] = ((parts.length < 2) ? 
-				// if not a compound query (e.g., ".foo, .bar"), cache and return a dispatcher
-				getStepQueryFunc(query) : 
-				// if it *is* a complex query, break it up into its
-				// constituent parts and return a dispatcher that will
-				// merge the parts when run
-				function(root){
-					var pindex = 0, // avoid array alloc for every invocation
-						ret = [],
-						tp;
-					while((tp = parts[pindex++])){
-						ret = ret.concat(getStepQueryFunc(tp)(root));
-					}
-					return ret;
-				}
-			);
-		}
-	};
-
-	var _zipIdx = 0;
-
-	// NOTE:
-	//		this function is Moo inspired, but our own impl to deal correctly
-	//		with XML in IE
-	var _nodeUID = d.isIE ? function(node){
-		if(caseSensitive){
-			// XML docs don't have uniqueID on their nodes
-			return (node.getAttribute("_uid") || node.setAttribute("_uid", ++_zipIdx) || _zipIdx);
-
-		}else{
-			return node.uniqueID;
-		}
-	} : 
-	function(node){
-		return (node._uid || (node._uid = ++_zipIdx));
-	};
-
-	// determine if a node in is unique in a "bag". In this case we don't want
-	// to flatten a list of unique items, but rather just tell if the item in
-	// question is already in the bag. Normally we'd just use hash lookup to do
-	// this for us but IE's DOM is busted so we can't really count on that. On
-	// the upside, it gives us a built in unique ID function. 
-	var _isUnique = function(node, bag){
-		if(!bag){ return 1; }
-		var id = _nodeUID(node);
-		if(!bag[id]){ return bag[id] = 1; }
-		return 0;
-	};
-
-	// attempt to efficiently determine if an item in a list is a dupe,
-	// returning a list of "uniques", hopefully in doucment order
-	var _zipIdxName = "_zipIdx";
-	var _zip = function(arr){
-		if(arr && arr.nozip){ 
-			return (qlc._wrap) ? qlc._wrap(arr) : arr;
-		}
-		// var ret = new d._NodeListCtor();
-		var ret = new qlc();
-		if(!arr || !arr.length){ return ret; }
-		if(arr[0]){
-			ret.push(arr[0]);
-		}
-		if(arr.length < 2){ return ret; }
-
-		_zipIdx++;
-		
-		// we have to fork here for IE and XML docs because we can't set
-		// expandos on their nodes (apparently). *sigh*
-		if(d.isIE && caseSensitive){
-			var szidx = _zipIdx+"";
-			arr[0].setAttribute(_zipIdxName, szidx);
-			for(var x = 1, te; te = arr[x]; x++){
-				if(arr[x].getAttribute(_zipIdxName) != szidx){ 
-					ret.push(te);
-				}
-				te.setAttribute(_zipIdxName, szidx);
-			}
-		}else if(d.isIE && arr.commentStrip){
-			try{
-				for(var x = 1, te; te = arr[x]; x++){
-					if(_isElement(te)){ 
-						ret.push(te);
-					}
-				}
-			}catch(e){ /* squelch */ }
-		}else{
-			if(arr[0]){ arr[0][_zipIdxName] = _zipIdx; }
-			for(var x = 1, te; te = arr[x]; x++){
-				if(arr[x][_zipIdxName] != _zipIdx){ 
-					ret.push(te);
-				}
-				te[_zipIdxName] = _zipIdx;
-			}
-		}
-		return ret;
-	};
-
-	// the main executor
-	d.query = function(/*String*/ query, /*String|DOMNode?*/ root){
-		//	summary:
-		//		Returns nodes which match the given CSS3 selector, searching the
-		//		entire document by default but optionally taking a node to scope
-		//		the search by. Returns an instance of dojo.NodeList.
-		//	description:
-		//		dojo.query() is the swiss army knife of DOM node manipulation in
-		//		Dojo. Much like Prototype's "$$" (bling-bling) function or JQuery's
-		//		"$" function, dojo.query provides robust, high-performance
-		//		CSS-based node selector support with the option of scoping searches
-		//		to a particular sub-tree of a document.
-		//
-		//		Supported Selectors:
-		//		--------------------
-		//
-		//		dojo.query() supports a rich set of CSS3 selectors, including:
-		//
-		//			* class selectors (e.g., `.foo`)
-		//			* node type selectors like `span`
-		//			* ` ` descendant selectors
-		//			* `>` child element selectors 
-		//			* `#foo` style ID selectors
-		//			* `*` universal selector
-		//			* `~`, the immediately preceeded-by sibling selector
-		//			* `+`, the preceeded-by sibling selector
-		//			* attribute queries:
-		//			|	* `[foo]` attribute presence selector
-		//			|	* `[foo='bar']` attribute value exact match
-		//			|	* `[foo~='bar']` attribute value list item match
-		//			|	* `[foo^='bar']` attribute start match
-		//			|	* `[foo$='bar']` attribute end match
-		//			|	* `[foo*='bar']` attribute substring match
-		//			* `:first-child`, `:last-child`, and `:only-child` positional selectors
-		//			* `:empty` content emtpy selector
-		//			* `:checked` pseudo selector
-		//			* `:nth-child(n)`, `:nth-child(2n+1)` style positional calculations
-		//			* `:nth-child(even)`, `:nth-child(odd)` positional selectors
-		//			* `:not(...)` negation pseudo selectors
-		//
-		//		Any legal combination of these selectors will work with
-		//		`dojo.query()`, including compound selectors ("," delimited).
-		//		Very complex and useful searches can be constructed with this
-		//		palette of selectors and when combined with functions for
-		//		manipulation presented by dojo.NodeList, many types of DOM
-		//		manipulation operations become very straightforward.
-		//		
-		//		Unsupported Selectors:
-		//		----------------------
-		//
-		//		While dojo.query handles many CSS3 selectors, some fall outside of
-		//		what's resaonable for a programmatic node querying engine to
-		//		handle. Currently unsupported selectors include:
-		//		
-		//			* namespace-differentiated selectors of any form
-		//			* all `::` pseduo-element selectors
-		//			* certain pseduo-selectors which don't get a lot of day-to-day use:
-		//			|	* `:root`, `:lang()`, `:target`, `:focus`
-		//			* all visual and state selectors:
-		//			|	* `:root`, `:active`, `:hover`, `:visisted`, `:link`,
-		//				  `:enabled`, `:disabled`
-		//			* `:*-of-type` pseudo selectors
-		//		
-		//		dojo.query and XML Documents:
-		//		-----------------------------
-		//		
-		//		`dojo.query` (as of dojo 1.2) supports searching XML documents
-		//		in a case-sensitive manner. If an HTML document is served with
-		//		a doctype that forces case-sensitivity (e.g., XHTML 1.1
-		//		Strict), dojo.query() will detect this and "do the right
-		//		thing". Case sensitivity is dependent upon the document being
-		//		searched and not the query used. It is therefore possible to
-		//		use case-sensitive queries on strict sub-documents (iframes,
-		//		etc.) or XML documents while still assuming case-insensitivity
-		//		for a host/root document.
-		//
-		//		Non-selector Queries:
-		//		---------------------
-		//
-		//		If something other than a String is passed for the query,
-		//		`dojo.query` will return a new `dojo.NodeList` instance
-		//		constructed from that parameter alone and all further
-		//		processing will stop. This means that if you have a reference
-		//		to a node or NodeList, you can quickly construct a new NodeList
-		//		from the original by calling `dojo.query(node)` or
-		//		`dojo.query(list)`.
-		//
-		//	query:
-		//		The CSS3 expression to match against. For details on the syntax of
-		//		CSS3 selectors, see <http://www.w3.org/TR/css3-selectors/#selectors>
-		//	root:
-		//		A DOMNode (or node id) to scope the search from. Optional.
-		//	returns: dojo.NodeList
-		//		An instance of `dojo.NodeList`. Many methods are available on
-		//		NodeLists for searching, iterating, manipulating, and handling
-		//		events on the matched nodes in the returned list.
-		//	example:
-		//		search the entire document for elements with the class "foo":
-		//	|	dojo.query(".foo");
-		//		these elements will match:
-		//	|	<span class="foo"></span>
-		//	|	<span class="foo bar"></span>
-		//	|	<p class="thud foo"></p>
-		//	example:
-		//		search the entire document for elements with the classes "foo" *and* "bar":
-		//	|	dojo.query(".foo.bar");
-		//		these elements will match:
-		//	|	<span class="foo bar"></span>
-		//		while these will not:
-		//	|	<span class="foo"></span>
-		//	|	<p class="thud foo"></p>
-		//	example:
-		//		find `<span>` elements which are descendants of paragraphs and
-		//		which have a "highlighted" class:
-		//	|	dojo.query("p span.highlighted");
-		//		the innermost span in this fragment matches:
-		//	|	<p class="foo">
-		//	|		<span>...
-		//	|			<span class="highlighted foo bar">...</span>
-		//	|		</span>
-		//	|	</p>
-		//	example:
-		//		set an "odd" class on all odd table rows inside of the table
-		//		`#tabular_data`, using the `>` (direct child) selector to avoid
-		//		affecting any nested tables:
-		//	|	dojo.query("#tabular_data > tbody > tr:nth-child(odd)").addClass("odd");
-		//	example:
-		//		remove all elements with the class "error" from the document
-		//		and store them in a list:
-		//	|	var errors = dojo.query(".error").orphan();
-		//	example:
-		//		add an onclick handler to every submit button in the document
-		//		which causes the form to be sent via Ajax instead:
-		//	|	dojo.query("input[type='submit']").onclick(function(e){
-		//	|		dojo.stopEvent(e); // prevent sending the form
-		//	|		var btn = e.target;
-		//	|		dojo.xhrPost({
-		//	|			form: btn.form,
-		//	|			load: function(data){
-		//	|				// replace the form with the response
-		//	|				var div = dojo.doc.createElement("div");
-		//	|				dojo.place(div, btn.form, "after");
-		//	|				div.innerHTML = data;
-		//	|				dojo.style(btn.form, "display", "none");
-		//	|			}
-		//	|		});
-		//	|	});
-
-		//Set list constructor to desired value. This can change
-		//between calls, so always re-assign here.
-		qlc = d._NodeListCtor;
-
-		if(!query){
-			return new qlc();
-		}
-
-		if(query.constructor == qlc){
-			return query;
-		}
-		if(typeof query != "string"){ // inline'd type check
-			return new qlc(query); // dojo.NodeList
-		}
-		if(typeof root == "string"){ // inline'd type check
-			root = d.byId(root);
-			if(!root){ return new qlc(); }
-		}
-
-		root = root||getDoc();
-		var od = root.ownerDocument||root.documentElement;
-
-		// throw the big case sensitivity switch
-
-		// NOTE:
-		// 		Opera in XHTML mode doesn't detect case-sensitivity correctly
-		// 		and it's not clear that there's any way to test for it
-		caseSensitive = (root.contentType && root.contentType=="application/xml") || 
-						(d.isOpera && (root.doctype || od.toString() == "[object XMLDocument]")) ||
-						(!!od) && 
-						(d.isIE ? od.xml : (root.xmlVersion||od.xmlVersion));
-
-		// NOTE: 
-		//		adding "true" as the 2nd argument to getQueryFunc is useful for
-		//		testing the DOM branch without worrying about the
-		//		behavior/performance of the QSA branch.
-		var r = getQueryFunc(query)(root);
-
-		// FIXME:
-		//		need to investigate this branch WRT #8074 and #8075
-		if(r && r.nozip && !qlc._wrap){
-			return r;
-		}
-		return _zip(r); // dojo.NodeList
-	}
-
-	// FIXME: need to add infrastructure for post-filtering pseudos, ala :last
-	d.query.pseudos = pseudos;
-
-	// one-off function for filtering a NodeList based on a simple selector
-	d._filterQueryResult = function(nodeList, simpleFilter){
-		var tmpNodeList = new d._NodeListCtor();
-		var filterFunc = getSimpleFilterFunc(getQueryParts(simpleFilter)[0]);
-		for(var x = 0, te; te = nodeList[x]; x++){
-			if(filterFunc(te)){ tmpNodeList.push(te); }
-		}
-		return tmpNodeList;
-	}
-})(this["queryPortability"]||this["acme"]||dojo);
-
-/*
-*/
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/window.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/window.js
deleted file mode 100644
index d9cc283..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/window.js
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo._base.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._base.window"] = true;
-dojo.provide("dojo._base.window");
-
-/*=====
-dojo.doc = {
-	// summary:
-	//		Alias for the current document. 'dojo.doc' can be modified
-	//		for temporary context shifting. Also see dojo.withDoc().
-	// description:
-	//    Refer to dojo.doc rather
-	//    than referring to 'window.document' to ensure your code runs
-	//    correctly in managed contexts.
-	// example:
-	// 	|	n.appendChild(dojo.doc.createElement('div'));
-}
-=====*/
-dojo.doc = window["document"] || null;
-
-dojo.body = function(){
-	// summary:
-	//		Return the body element of the document
-	//		return the body object associated with dojo.doc
-	// example:
-	// 	|	dojo.body().appendChild(dojo.doc.createElement('div'));
-
-	// Note: document.body is not defined for a strict xhtml document
-	// Would like to memoize this, but dojo.doc can change vi dojo.withDoc().
-	return dojo.doc.body || dojo.doc.getElementsByTagName("body")[0]; // Node
-}
-
-dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocument){
-	// summary:
-	//		changes the behavior of many core Dojo functions that deal with
-	//		namespace and DOM lookup, changing them to work in a new global
-	//		context (e.g., an iframe). The varibles dojo.global and dojo.doc
-	//		are modified as a result of calling this function and the result of
-	//		`dojo.body()` likewise differs.
-	dojo.global = globalObject;
-	dojo.doc = globalDocument;
-};
-
-dojo.withGlobal = function(	/*Object*/globalObject, 
-							/*Function*/callback, 
-							/*Object?*/thisObject, 
-							/*Array?*/cbArguments){
-	// summary:
-	//		Invoke callback with globalObject as dojo.global and
-	//		globalObject.document as dojo.doc.
-	// description:
-	//		Invoke callback with globalObject as dojo.global and
-	//		globalObject.document as dojo.doc. If provided, globalObject
-	//		will be executed in the context of object thisObject
-	//		When callback() returns or throws an error, the dojo.global
-	//		and dojo.doc will be restored to its previous state.
-
-	var oldGlob = dojo.global;
-	try{
-		dojo.global = globalObject;
-		return dojo.withDoc.call(null, globalObject.document, callback, thisObject, cbArguments);
-	}finally{
-		dojo.global = oldGlob;
-	}
-}
-
-dojo.withDoc = function(	/*DocumentElement*/documentObject, 
-							/*Function*/callback, 
-							/*Object?*/thisObject, 
-							/*Array?*/cbArguments){
-	// summary:
-	//		Invoke callback with documentObject as dojo.doc.
-	// description:
-	//		Invoke callback with documentObject as dojo.doc. If provided,
-	//		callback will be executed in the context of object thisObject
-	//		When callback() returns or throws an error, the dojo.doc will
-	//		be restored to its previous state.
-
-	var oldDoc = dojo.doc,
-		oldLtr = dojo._bodyLtr,
-		oldQ = dojo.isQuirks;
-
-	try{
-		dojo.doc = documentObject;
-		delete dojo._bodyLtr; // uncache
-		dojo.isQuirks = dojo.doc.compatMode == "BackCompat"; // no need to check for QuirksMode which was Opera 7 only
-
-		if(thisObject && typeof callback == "string"){
-			callback = thisObject[callback];
-		}
-
-		return callback.apply(thisObject, cbArguments || []);
-	}finally{
-		dojo.doc = oldDoc;
-		delete dojo._bodyLtr; // in case it was undefined originally, and set to true/false by the alternate document
-		if(oldLtr !== undefined){ dojo._bodyLtr = oldLtr; }
-		dojo.isQuirks = oldQ;
-	}
-};
-	
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/xhr.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/xhr.js
deleted file mode 100644
index d95d767..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_base/xhr.js
+++ /dev/null
@@ -1,941 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo._base.xhr"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._base.xhr"] = true;
-dojo.provide("dojo._base.xhr");
-dojo.require("dojo._base.Deferred");
-dojo.require("dojo._base.json");
-dojo.require("dojo._base.lang");
-dojo.require("dojo._base.query");
-
-(function(){
-	var _d = dojo, cfg = _d.config;
-
-	function setValue(/*Object*/obj, /*String*/name, /*String*/value){
-		//summary:
-		//		For the named property in object, set the value. If a value
-		//		already exists and it is a string, convert the value to be an
-		//		array of values.
-
-		//Skip it if there is no value
-		if(value === null){
-			return;
-		}
-
-		var val = obj[name];
-		if(typeof val == "string"){ // inline'd type check
-			obj[name] = [val, value];
-		}else if(_d.isArray(val)){
-			val.push(value);
-		}else{
-			obj[name] = value;
-		}
-	}
-	
-	dojo.fieldToObject = function(/*DOMNode||String*/ inputNode){
-		// summary:
-		//		Serialize a form field to a JavaScript object.
-		//
-		// description:
-		//		Returns the value encoded in a form field as
-		//		as a string or an array of strings. Disabled form elements
-		//		and unchecked radio and checkboxes are skipped.	Multi-select
-		//		elements are returned as an array of string values.
-		var ret = null;
-		var item = _d.byId(inputNode);
-		if(item){
-			var _in = item.name;
-			var type = (item.type||"").toLowerCase();
-			if(_in && type && !item.disabled){
-				if(type == "radio" || type == "checkbox"){
-					if(item.checked){ ret = item.value }
-				}else if(item.multiple){
-					ret = [];
-					_d.query("option", item).forEach(function(opt){
-						if(opt.selected){
-							ret.push(opt.value);
-						}
-					});
-				}else{
-					ret = item.value;
-				}
-			}
-		}
-		return ret; // Object
-	}
-
-	dojo.formToObject = function(/*DOMNode||String*/ formNode){
-		// summary:
-		//		Serialize a form node to a JavaScript object.
-		// description:
-		//		Returns the values encoded in an HTML form as
-		//		string properties in an object which it then returns. Disabled form
-		//		elements, buttons, and other non-value form elements are skipped.
-		//		Multi-select elements are returned as an array of string values.
-		//
-		// example:
-		//		This form:
-		//		|	<form id="test_form">
-		//		|		<input type="text" name="blah" value="blah">
-		//		|		<input type="text" name="no_value" value="blah" disabled>
-		//		|		<input type="button" name="no_value2" value="blah">
-		//		|		<select type="select" multiple name="multi" size="5">
-		//		|			<option value="blah">blah</option>
-		//		|			<option value="thud" selected>thud</option>
-		//		|			<option value="thonk" selected>thonk</option>
-		//		|		</select>
-		//		|	</form>
-		//
-		//		yields this object structure as the result of a call to
-		//		formToObject():
-		//
-		//		|	{ 
-		//		|		blah: "blah",
-		//		|		multi: [
-		//		|			"thud",
-		//		|			"thonk"
-		//		|		]
-		//		|	};
-
-		var ret = {};
-		var exclude = "file|submit|image|reset|button|";
-		_d.forEach(dojo.byId(formNode).elements, function(item){
-			var _in = item.name;
-			var type = (item.type||"").toLowerCase();
-			if(_in && type && exclude.indexOf(type) == -1 && !item.disabled){
-				setValue(ret, _in, _d.fieldToObject(item));
-				if(type == "image"){
-					ret[_in+".x"] = ret[_in+".y"] = ret[_in].x = ret[_in].y = 0;
-				}
-			}
-		});
-		return ret; // Object
-	}
-
-	dojo.objectToQuery = function(/*Object*/ map){
-		//	summary:
-		//		takes a name/value mapping object and returns a string representing
-		//		a URL-encoded version of that object.
-		//	example:
-		//		this object:
-		//
-		//		|	{ 
-		//		|		blah: "blah",
-		//		|		multi: [
-		//		|			"thud",
-		//		|			"thonk"
-		//		|		]
-		//		|	};
-		//
-		//	yields the following query string:
-		//	
-		//	|	"blah=blah&multi=thud&multi=thonk"
-
-		// FIXME: need to implement encodeAscii!!
-		var enc = encodeURIComponent;
-		var pairs = [];
-		var backstop = {};
-		for(var name in map){
-			var value = map[name];
-			if(value != backstop[name]){
-				var assign = enc(name) + "=";
-				if(_d.isArray(value)){
-					for(var i=0; i < value.length; i++){
-						pairs.push(assign + enc(value[i]));
-					}
-				}else{
-					pairs.push(assign + enc(value));
-				}
-			}
-		}
-		return pairs.join("&"); // String
-	}
-
-	dojo.formToQuery = function(/*DOMNode||String*/ formNode){
-		// summary:
-		//		Returns a URL-encoded string representing the form passed as either a
-		//		node or string ID identifying the form to serialize
-		return _d.objectToQuery(_d.formToObject(formNode)); // String
-	}
-
-	dojo.formToJson = function(/*DOMNode||String*/ formNode, /*Boolean?*/prettyPrint){
-		// summary:
-		//		Create a serialized JSON string from a form node or string
-		//		ID identifying the form to serialize
-		return _d.toJson(_d.formToObject(formNode), prettyPrint); // String
-	}
-
-	dojo.queryToObject = function(/*String*/ str){
-		// summary:
-		//		Create an object representing a de-serialized query section of a
-		//		URL. Query keys with multiple values are returned in an array.
-		//
-		// example:
-		//		This string:
-		//
-		//	|		"foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&"
-		//		
-		//		results in this object structure:
-		//
-		//	|		{
-		//	|			foo: [ "bar", "baz" ],
-		//	|			thinger: " spaces =blah",
-		//	|			zonk: "blarg"
-		//	|		}
-		//	
-		//		Note that spaces and other urlencoded entities are correctly
-		//		handled.
-
-		// FIXME: should we grab the URL string if we're not passed one?
-		var ret = {};
-		var qp = str.split("&");
-		var dec = decodeURIComponent;
-		_d.forEach(qp, function(item){
-			if(item.length){
-				var parts = item.split("=");
-				var name = dec(parts.shift());
-				var val = dec(parts.join("="));
-				if(typeof ret[name] == "string"){ // inline'd type check
-					ret[name] = [ret[name]];
-				}
-
-				if(_d.isArray(ret[name])){
-					ret[name].push(val);
-				}else{
-					ret[name] = val;
-				}
-			}
-		});
-		return ret; // Object
-	}
-
-	// need to block async callbacks from snatching this thread as the result
-	// of an async callback might call another sync XHR, this hangs khtml forever
-	// must checked by watchInFlight()
-
-	dojo._blockAsync = false;
-
-	// MOW: remove dojo._contentHandlers alias in 2.0
-	var handlers = _d._contentHandlers = dojo.contentHandlers = {
-		// summary: 
-		//		A map of availble XHR transport handle types. Name matches the
-		//		`handleAs` attribute passed to XHR calls.
-		//
-		// description:
-		//		A map of availble XHR transport handle types. Name matches the
-		//		`handleAs` attribute passed to XHR calls. Each contentHandler is
-		//		called, passing the xhr object for manipulation. The return value
-		//		from the contentHandler will be passed to the `load` or `handle` 
-		//		functions defined in the original xhr call. 
-		//		
-		// example:
-		//		Creating a custom content-handler:
-		//	|	dojo.contentHandlers.makeCaps = function(xhr){
-		//	|		return xhr.responseText.toUpperCase();
-		//	|	}
-		//	|	// and later:
-		//	|	dojo.xhrGet({ 
-		//	|		url:"foo.txt",
-		//	|		handleAs:"makeCaps",
-		//	|		load: function(data){ /* data is a toUpper version of foo.txt */ }
-		//	|	});
-
-		text: function(xhr){ 
-			// summary: A contentHandler which simply returns the plaintext response data
-			return xhr.responseText; 
-		},
-		json: function(xhr){
-			// summary: A contentHandler which returns a JavaScript object created from the response data
-			return _d.fromJson(xhr.responseText || null);
-		},
-		"json-comment-filtered": function(xhr){ 
-			// summary: A contentHandler which expects comment-filtered JSON. 
-			// description: 
-			//		A contentHandler which expects comment-filtered JSON. 
-			//		the json-comment-filtered option was implemented to prevent
-			//		"JavaScript Hijacking", but it is less secure than standard JSON. Use
-			//		standard JSON instead. JSON prefixing can be used to subvert hijacking.
-			//		
-			//		Will throw a notice suggesting to use application/json mimetype, as
-			//		json-commenting can introduce security issues. To decrease the chances of hijacking,
-			//		use the standard `json` contentHandler, and prefix your "JSON" with: {}&& 
-			//		
-			//		use djConfig.useCommentedJson = true to turn off the notice
-			if(!dojo.config.useCommentedJson){
-				console.warn("Consider using the standard mimetype:application/json."
-					+ " json-commenting can introduce security issues. To"
-					+ " decrease the chances of hijacking, use the standard the 'json' handler and"
-					+ " prefix your json with: {}&&\n"
-					+ "Use djConfig.useCommentedJson=true to turn off this message.");
-			}
-
-			var value = xhr.responseText;
-			var cStartIdx = value.indexOf("\/*");
-			var cEndIdx = value.lastIndexOf("*\/");
-			if(cStartIdx == -1 || cEndIdx == -1){
-				throw new Error("JSON was not comment filtered");
-			}
-			return _d.fromJson(value.substring(cStartIdx+2, cEndIdx));
-		},
-		javascript: function(xhr){ 
-			// summary: A contentHandler which evaluates the response data, expecting it to be valid JavaScript
-
-			// FIXME: try Moz and IE specific eval variants?
-			return _d.eval(xhr.responseText);
-		},
-		xml: function(xhr){
-			// summary: A contentHandler returning an XML Document parsed from the response data
-			var result = xhr.responseXML;
-						if(_d.isIE && (!result || !result.documentElement)){
-				//WARNING: this branch used by the xml handling in dojo.io.iframe,
-				//so be sure to test dojo.io.iframe if making changes below.
-				var ms = function(n){ return "MSXML" + n + ".DOMDocument"; }
-				var dp = ["Microsoft.XMLDOM", ms(6), ms(4), ms(3), ms(2)];
-				_d.some(dp, function(p){
-					try{
-						var dom = new ActiveXObject(p);
-						dom.async = false;
-						dom.loadXML(xhr.responseText);
-						result = dom;
-					}catch(e){ return false; }
-					return true;
-				});
-			}
-						return result; // DOMDocument
-		},
-		"json-comment-optional": function(xhr){
-			// summary: A contentHandler which checks the presence of comment-filtered JSON and 
-			//		alternates between the `json` and `json-comment-filtered` contentHandlers.
-			if(xhr.responseText && /^[^{\[]*\/\*/.test(xhr.responseText)){
-				return handlers["json-comment-filtered"](xhr);
-			}else{
-				return handlers["json"](xhr);
-			}
-		}
-	};
-
-	/*=====
-	dojo.__IoArgs = function(){
-		//	url: String
-		//		URL to server endpoint.
-		//	content: Object?
-		//		Contains properties with string values. These
-		//		properties will be serialized as name1=value2 and
-		//		passed in the request.
-		//	timeout: Integer?
-		//		Milliseconds to wait for the response. If this time
-		//		passes, the then error callbacks are called.
-		//	form: DOMNode?
-		//		DOM node for a form. Used to extract the form values
-		//		and send to the server.
-		//	preventCache: Boolean?
-		//		Default is false. If true, then a
-		//		"dojo.preventCache" parameter is sent in the request
-		//		with a value that changes with each request
-		//		(timestamp). Useful only with GET-type requests.
-		//	handleAs: String?
-		//		Acceptable values depend on the type of IO
-		//		transport (see specific IO calls for more information).
-		// 	rawBody: String?
-		// 		Sets the raw body for an HTTP request. If this is used, then the content
-		// 		property is ignored. This is mostly useful for HTTP methods that have
-		// 		a body to their requests, like PUT or POST. This property can be used instead
-		// 		of postData and putData for dojo.rawXhrPost and dojo.rawXhrPut respectively.
-		//	ioPublish: Boolean?
-		//		Set this explicitly to false to prevent publishing of topics related to
-		// 		IO operations. Otherwise, if djConfig.ioPublish is set to true, topics
-		// 		will be published via dojo.publish for different phases of an IO operation.
-		// 		See dojo.__IoPublish for a list of topics that are published.
-		//	load: Function?
-		//		This function will be
-		//		called on a successful HTTP response code.
-		//	error: Function?
-		//		This function will
-		//		be called when the request fails due to a network or server error, the url
-		//		is invalid, etc. It will also be called if the load or handle callback throws an
-		//		exception, unless djConfig.debugAtAllCosts is true.  This allows deployed applications
-		//		to continue to run even when a logic error happens in the callback, while making
-		//		it easier to troubleshoot while in debug mode.
-		//	handle: Function?
-		//		This function will
-		//		be called at the end of every request, whether or not an error occurs.
-		this.url = url;
-		this.content = content;
-		this.timeout = timeout;
-		this.form = form;
-		this.preventCache = preventCache;
-		this.handleAs = handleAs;
-		this.ioPublish = ioPublish;
-		this.load = function(response, ioArgs){
-			// ioArgs: dojo.__IoCallbackArgs
-			//		Provides additional information about the request.
-			// response: Object
-			//		The response in the format as defined with handleAs.
-		}
-		this.error = function(response, ioArgs){
-			// ioArgs: dojo.__IoCallbackArgs
-			//		Provides additional information about the request.
-			// response: Object
-			//		The response in the format as defined with handleAs.
-		}
-		this.handle = function(loadOrError, response, ioArgs){
-			// loadOrError: String
-			//		Provides a string that tells you whether this function
-			//		was called because of success (load) or failure (error).
-			// response: Object
-			//		The response in the format as defined with handleAs.
-			// ioArgs: dojo.__IoCallbackArgs
-			//		Provides additional information about the request.
-		}
-	}
-	=====*/
-
-	/*=====
-	dojo.__IoCallbackArgs = function(args, xhr, url, query, handleAs, id, canDelete, json){
-		//	args: Object
-		//		the original object argument to the IO call.
-		//	xhr: XMLHttpRequest
-		//		For XMLHttpRequest calls only, the
-		//		XMLHttpRequest object that was used for the
-		//		request.
-		//	url: String
-		//		The final URL used for the call. Many times it
-		//		will be different than the original args.url
-		//		value.
-		//	query: String
-		//		For non-GET requests, the
-		//		name1=value1&name2=value2 parameters sent up in
-		//		the request.
-		//	handleAs: String
-		//		The final indicator on how the response will be
-		//		handled.
-		//	id: String
-		//		For dojo.io.script calls only, the internal
-		//		script ID used for the request.
-		//	canDelete: Boolean
-		//		For dojo.io.script calls only, indicates
-		//		whether the script tag that represents the
-		//		request can be deleted after callbacks have
-		//		been called. Used internally to know when
-		//		cleanup can happen on JSONP-type requests.
-		//	json: Object
-		//		For dojo.io.script calls only: holds the JSON
-		//		response for JSONP-type requests. Used
-		//		internally to hold on to the JSON responses.
-		//		You should not need to access it directly --
-		//		the same object should be passed to the success
-		//		callbacks directly.
-		this.args = args;
-		this.xhr = xhr;
-		this.url = url;
-		this.query = query;
-		this.handleAs = handleAs;
-		this.id = id;
-		this.canDelete = canDelete;
-		this.json = json;
-	}
-	=====*/
-
-
-	/*=====
-	dojo.__IoPublish = function(){
-		// 	summary:
-		// 		This is a list of IO topics that can be published
-		// 		if djConfig.ioPublish is set to true. IO topics can be
-		// 		published for any Input/Output, network operation. So,
-		// 		dojo.xhr, dojo.io.script and dojo.io.iframe can all
-		// 		trigger these topics to be published.
-		//	start: String
-		//		"/dojo/io/start" is sent when there are no outstanding IO
-		// 		requests, and a new IO request is started. No arguments
-		// 		are passed with this topic.
-		//	send: String
-		//		"/dojo/io/send" is sent whenever a new IO request is started.
-		// 		It passes the dojo.Deferred for the request with the topic.
-		//	load: String
-		//		"/dojo/io/load" is sent whenever an IO request has loaded
-		// 		successfully. It passes the response and the dojo.Deferred
-		// 		for the request with the topic.
-		//	error: String
-		//		"/dojo/io/error" is sent whenever an IO request has errored.
-		// 		It passes the error and the dojo.Deferred
-		// 		for the request with the topic.
-		//	done: String
-		//		"/dojo/io/done" is sent whenever an IO request has completed,
-		// 		either by loading or by erroring. It passes the error and
-		// 		the dojo.Deferred for the request with the topic.
-		//	stop: String
-		//		"/dojo/io/stop" is sent when all outstanding IO requests have
-		// 		finished. No arguments are passed with this topic.
-		this.start = "/dojo/io/start";
-		this.send = "/dojo/io/send";
-		this.load = "/dojo/io/load";
-		this.error = "/dojo/io/error";
-		this.done = "/dojo/io/done";
-		this.stop = "/dojo/io/stop";
-	}
-	=====*/
-
-
-	dojo._ioSetArgs = function(/*dojo.__IoArgs*/args,
-			/*Function*/canceller,
-			/*Function*/okHandler,
-			/*Function*/errHandler){
-		//	summary: 
-		//		sets up the Deferred and ioArgs property on the Deferred so it
-		//		can be used in an io call.
-		//	args:
-		//		The args object passed into the public io call. Recognized properties on
-		//		the args object are:
-		//	canceller:
-		//		The canceller function used for the Deferred object. The function
-		//		will receive one argument, the Deferred object that is related to the
-		//		canceller.
-		//	okHandler:
-		//		The first OK callback to be registered with Deferred. It has the opportunity
-		//		to transform the OK response. It will receive one argument -- the Deferred
-		//		object returned from this function.
-		//	errHandler:
-		//		The first error callback to be registered with Deferred. It has the opportunity
-		//		to do cleanup on an error. It will receive two arguments: error (the 
-		//		Error object) and dfd, the Deferred object returned from this function.
-
-		var ioArgs = {args: args, url: args.url};
-
-		//Get values from form if requestd.
-		var formObject = null;
-		if(args.form){ 
-			var form = _d.byId(args.form);
-			//IE requires going through getAttributeNode instead of just getAttribute in some form cases, 
-			//so use it for all.  See #2844
-			var actnNode = form.getAttributeNode("action");
-			ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); 
-			formObject = _d.formToObject(form);
-		}
-
-		// set up the query params
-		var miArgs = [{}];
-	
-		if(formObject){
-			// potentially over-ride url-provided params w/ form values
-			miArgs.push(formObject);
-		}
-		if(args.content){
-			// stuff in content over-rides what's set by form
-			miArgs.push(args.content);
-		}
-		if(args.preventCache){
-			miArgs.push({"dojo.preventCache": new Date().valueOf()});
-		}
-		ioArgs.query = _d.objectToQuery(_d.mixin.apply(null, miArgs));
-	
-		// .. and the real work of getting the deferred in order, etc.
-		ioArgs.handleAs = args.handleAs || "text";
-		var d = new _d.Deferred(canceller);
-		d.addCallbacks(okHandler, function(error){
-			return errHandler(error, d);
-		});
-
-		//Support specifying load, error and handle callback functions from the args.
-		//For those callbacks, the "this" object will be the args object.
-		//The callbacks will get the deferred result value as the
-		//first argument and the ioArgs object as the second argument.
-		var ld = args.load;
-		if(ld && _d.isFunction(ld)){
-			d.addCallback(function(value){
-				return ld.call(args, value, ioArgs);
-			});
-		}
-		var err = args.error;
-		if(err && _d.isFunction(err)){
-			d.addErrback(function(value){
-				return err.call(args, value, ioArgs);
-			});
-		}
-		var handle = args.handle;
-		if(handle && _d.isFunction(handle)){
-			d.addBoth(function(value){
-				return handle.call(args, value, ioArgs);
-			});
-		}
-
-		//Plug in topic publishing, if dojo.publish is loaded.
-		if(cfg.ioPublish && _d.publish && ioArgs.args.ioPublish !== false){
-			d.addCallbacks(
-				function(res){
-					_d.publish("/dojo/io/load", [d, res]);
-					return res;
-				},
-				function(res){
-					_d.publish("/dojo/io/error", [d, res]);
-					return res;
-				}
-			);
-			d.addBoth(function(res){
-				_d.publish("/dojo/io/done", [d, res]);
-				return res;
-			});
-		}
-
-		d.ioArgs = ioArgs;
-	
-		// FIXME: need to wire up the xhr object's abort method to something
-		// analagous in the Deferred
-		return d;
-	}
-
-	var _deferredCancel = function(/*Deferred*/dfd){
-		// summary: canceller function for dojo._ioSetArgs call.
-		
-		dfd.canceled = true;
-		var xhr = dfd.ioArgs.xhr;
-		var _at = typeof xhr.abort;
-		if(_at == "function" || _at == "object" || _at == "unknown"){
-			xhr.abort();
-		}
-		var err = dfd.ioArgs.error;
-		if(!err){
-			err = new Error("xhr cancelled");
-			err.dojoType="cancel";
-		}
-		return err;
-	}
-	var _deferredOk = function(/*Deferred*/dfd){
-		// summary: okHandler function for dojo._ioSetArgs call.
-
-		var ret = handlers[dfd.ioArgs.handleAs](dfd.ioArgs.xhr);
-		return ret === undefined ? null : ret;
-	}
-	var _deferError = function(/*Error*/error, /*Deferred*/dfd){
-		// summary: errHandler function for dojo._ioSetArgs call.
-
-		if(!dfd.ioArgs.args.failOk){
-			console.error(error);
-		}
-		return error;
-	}
-
-	// avoid setting a timer per request. It degrades performance on IE
-	// something fierece if we don't use unified loops.
-	var _inFlightIntvl = null;
-	var _inFlight = [];
-	
-	
-	//Use a separate count for knowing if we are starting/stopping io calls.
-	//Cannot use _inFlight.length since it can change at a different time than
-	//when we want to do this kind of test. We only want to decrement the count
-	//after a callback/errback has finished, since the callback/errback should be
-	//considered as part of finishing a request.
-	var _pubCount = 0;
-	var _checkPubCount = function(dfd){
-		if(_pubCount <= 0){
-			_pubCount = 0;
-			if(cfg.ioPublish && _d.publish && (!dfd || dfd && dfd.ioArgs.args.ioPublish !== false)){
-				_d.publish("/dojo/io/stop");
-			}
-		}
-	};
-
-	var _watchInFlight = function(){
-		//summary: 
-		//		internal method that checks each inflight XMLHttpRequest to see
-		//		if it has completed or if the timeout situation applies.
-		
-		var now = (new Date()).getTime();
-		// make sure sync calls stay thread safe, if this callback is called
-		// during a sync call and this results in another sync call before the
-		// first sync call ends the browser hangs
-		if(!_d._blockAsync){
-			// we need manual loop because we often modify _inFlight (and therefore 'i') while iterating
-			// note: the second clause is an assigment on purpose, lint may complain
-			for(var i = 0, tif; i < _inFlight.length && (tif = _inFlight[i]); i++){
-				var dfd = tif.dfd;
-				var func = function(){
-					if(!dfd || dfd.canceled || !tif.validCheck(dfd)){
-						_inFlight.splice(i--, 1); 
-						_pubCount -= 1;
-					}else if(tif.ioCheck(dfd)){
-						_inFlight.splice(i--, 1);
-						tif.resHandle(dfd);
-						_pubCount -= 1;
-					}else if(dfd.startTime){
-						//did we timeout?
-						if(dfd.startTime + (dfd.ioArgs.args.timeout || 0) < now){
-							_inFlight.splice(i--, 1);
-							var err = new Error("timeout exceeded");
-							err.dojoType = "timeout";
-							dfd.errback(err);
-							//Cancel the request so the io module can do appropriate cleanup.
-							dfd.cancel();
-							_pubCount -= 1;
-						}
-					}
-				};
-				if(dojo.config.debugAtAllCosts){
-					func.call(this);
-				}else{
-					try{
-						func.call(this);
-					}catch(e){
-						dfd.errback(e);
-					}
-				}
-			}
-		}
-
-		_checkPubCount(dfd);
-
-		if(!_inFlight.length){
-			clearInterval(_inFlightIntvl);
-			_inFlightIntvl = null;
-			return;
-		}
-	}
-
-	dojo._ioCancelAll = function(){
-		//summary: Cancels all pending IO requests, regardless of IO type
-		//(xhr, script, iframe).
-		try{
-			_d.forEach(_inFlight, function(i){
-				try{
-					i.dfd.cancel();
-				}catch(e){/*squelch*/}
-			});
-		}catch(e){/*squelch*/}
-	}
-
-	//Automatically call cancel all io calls on unload
-	//in IE for trac issue #2357.
-		if(_d.isIE){
-		_d.addOnWindowUnload(_d._ioCancelAll);
-	}
-	
-	_d._ioNotifyStart = function(/*Deferred*/dfd){
-		// summary:
-		// 		If dojo.publish is available, publish topics
-		// 		about the start of a request queue and/or the
-		// 		the beginning of request.
-		// description:
-		// 		Used by IO transports. An IO transport should
-		// 		call this method before making the network connection.
-		if(cfg.ioPublish && _d.publish && dfd.ioArgs.args.ioPublish !== false){
-			if(!_pubCount){
-				_d.publish("/dojo/io/start");
-			}
-			_pubCount += 1;
-			_d.publish("/dojo/io/send", [dfd]);
-		}
-	}
-
-	_d._ioWatch = function(dfd, validCheck, ioCheck, resHandle){
-		// summary: 
-		//		Watches the io request represented by dfd to see if it completes.
-		// dfd: Deferred
-		//		The Deferred object to watch.
-		// validCheck: Function
-		//		Function used to check if the IO request is still valid. Gets the dfd
-		//		object as its only argument.
-		// ioCheck: Function
-		//		Function used to check if basic IO call worked. Gets the dfd
-		//		object as its only argument.
-		// resHandle: Function
-		//		Function used to process response. Gets the dfd
-		//		object as its only argument.
-		var args = dfd.ioArgs.args;
-		if(args.timeout){
-			dfd.startTime = (new Date()).getTime();
-		}
-		
-		_inFlight.push({dfd: dfd, validCheck: validCheck, ioCheck: ioCheck, resHandle: resHandle});
-		if(!_inFlightIntvl){
-			_inFlightIntvl = setInterval(_watchInFlight, 50);
-		}
-		// handle sync requests
-		//A weakness: async calls in flight
-		//could have their handlers called as part of the
-		//_watchInFlight call, before the sync's callbacks
-		// are called.
-		if(args.sync){
-			_watchInFlight();
-		}
-	}
-
-	var _defaultContentType = "application/x-www-form-urlencoded";
-
-	var _validCheck = function(/*Deferred*/dfd){
-		return dfd.ioArgs.xhr.readyState; //boolean
-	}
-	var _ioCheck = function(/*Deferred*/dfd){
-		return 4 == dfd.ioArgs.xhr.readyState; //boolean
-	}
-	var _resHandle = function(/*Deferred*/dfd){
-		var xhr = dfd.ioArgs.xhr;
-		if(_d._isDocumentOk(xhr)){
-			dfd.callback(dfd);
-		}else{
-			var err = new Error("Unable to load " + dfd.ioArgs.url + " status:" + xhr.status);
-			err.status = xhr.status;
-			err.responseText = xhr.responseText;
-			dfd.errback(err);
-		}
-	}
-
-	dojo._ioAddQueryToUrl = function(/*dojo.__IoCallbackArgs*/ioArgs){
-		//summary: Adds query params discovered by the io deferred construction to the URL.
-		//Only use this for operations which are fundamentally GET-type operations.
-		if(ioArgs.query.length){
-			ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query;
-			ioArgs.query = null;
-		}		
-	}
-
-	/*=====
-	dojo.declare("dojo.__XhrArgs", dojo.__IoArgs, {
-		constructor: function(){
-			//	summary:
-			//		In addition to the properties listed for the dojo._IoArgs type,
-			//		the following properties are allowed for dojo.xhr* methods.
-			//	handleAs: String?
-			//		Acceptable values are: text (default), json, json-comment-optional,
-			//		json-comment-filtered, javascript, xml. See `dojo.contentHandlers`
-			//	sync: Boolean?
-			//		false is default. Indicates whether the request should
-			//		be a synchronous (blocking) request.
-			//	headers: Object?
-			//		Additional HTTP headers to send in the request.
-			//	failOk: Boolean?
-			//		false is default. Indicates whether a request should be
-			//		allowed to fail (and therefore no console error message in
-			//		the event of a failure)
-			this.handleAs = handleAs;
-			this.sync = sync;
-			this.headers = headers;
-			this.failOk = failOk;
-		}
-	});
-	=====*/
-
-	dojo.xhr = function(/*String*/ method, /*dojo.__XhrArgs*/ args, /*Boolean?*/ hasBody){
-		//	summary:
-		//		Sends an HTTP request with the given method.
-		//	description:
-		//		Sends an HTTP request with the given method.
-		//		See also dojo.xhrGet(), xhrPost(), xhrPut() and dojo.xhrDelete() for shortcuts
-		//		for those HTTP methods. There are also methods for "raw" PUT and POST methods
-		//		via dojo.rawXhrPut() and dojo.rawXhrPost() respectively.
-		//	method:
-		//		HTTP method to be used, such as GET, POST, PUT, DELETE.  Should be uppercase.
-		//	hasBody:
-		//		If the request has an HTTP body, then pass true for hasBody.
-
-		//Make the Deferred object for this xhr request.
-		var dfd = _d._ioSetArgs(args, _deferredCancel, _deferredOk, _deferError);
-		var ioArgs = dfd.ioArgs;
-
-		//Pass the args to _xhrObj, to allow alternate XHR calls based specific calls, like
-		//the one used for iframe proxies.
-		var xhr = ioArgs.xhr = _d._xhrObj(ioArgs.args);
-		//If XHR factory fails, cancel the deferred.
-		if(!xhr){
-			dfd.cancel();
-			return dfd;
-		}
-
-		//Allow for specifying the HTTP body completely.
-		if("postData" in args){
-			ioArgs.query = args.postData;
-		}else if("putData" in args){
-			ioArgs.query = args.putData;
-		}else if("rawBody" in args){
-			ioArgs.query = args.rawBody;
-		}else if((arguments.length > 2 && !hasBody) || "POST|PUT".indexOf(method.toUpperCase()) == -1){
-			//Check for hasBody being passed. If no hasBody,
-			//then only append query string if not a POST or PUT request.
-			_d._ioAddQueryToUrl(ioArgs);
-		}
-
-		// IE 6 is a steaming pile. It won't let you call apply() on the native function (xhr.open).
-		// workaround for IE6's apply() "issues"
-		xhr.open(method, ioArgs.url, args.sync !== true, args.user || undefined, args.password || undefined);
-		if(args.headers){
-			for(var hdr in args.headers){
-				if(hdr.toLowerCase() === "content-type" && !args.contentType){
-					args.contentType = args.headers[hdr];
-				}else if(args.headers[hdr]){
-					//Only add header if it has a value. This allows for instnace, skipping
-					//insertion of X-Requested-With by specifying empty value.
-					xhr.setRequestHeader(hdr, args.headers[hdr]);
-				}
-			}
-		}
-		// FIXME: is this appropriate for all content types?
-		xhr.setRequestHeader("Content-Type", args.contentType || _defaultContentType);
-		if(!args.headers || !("X-Requested-With" in args.headers)){
-			xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
-		}
-		// FIXME: set other headers here!
-		_d._ioNotifyStart(dfd);
-		if(dojo.config.debugAtAllCosts){
-			xhr.send(ioArgs.query);
-		}else{
-			try{
-				xhr.send(ioArgs.query);
-			}catch(e){
-				ioArgs.error = e;
-				dfd.cancel();
-			}
-		}
-		_d._ioWatch(dfd, _validCheck, _ioCheck, _resHandle);
-		xhr = null;
-		return dfd; // dojo.Deferred
-	}
-
-	dojo.xhrGet = function(/*dojo.__XhrArgs*/ args){
-		//	summary: 
-		//		Sends an HTTP GET request to the server.
-		return _d.xhr("GET", args); // dojo.Deferred
-	}
-
-	dojo.rawXhrPost = dojo.xhrPost = function(/*dojo.__XhrArgs*/ args){
-		//	summary:
-		//		Sends an HTTP POST request to the server. In addtion to the properties
-		//		listed for the dojo.__XhrArgs type, the following property is allowed:
-		//	postData:
-		//		String. Send raw data in the body of the POST request.
-		return _d.xhr("POST", args, true); // dojo.Deferred
-	}
-
-	dojo.rawXhrPut = dojo.xhrPut = function(/*dojo.__XhrArgs*/ args){
-		//	summary:
-		//		Sends an HTTP PUT request to the server. In addtion to the properties
-		//		listed for the dojo.__XhrArgs type, the following property is allowed:
-		//	putData:
-		//		String. Send raw data in the body of the PUT request.
-		return _d.xhr("PUT", args, true); // dojo.Deferred
-	}
-
-	dojo.xhrDelete = function(/*dojo.__XhrArgs*/ args){
-		//	summary:
-		//		Sends an HTTP DELETE request to the server.
-		return _d.xhr("DELETE", args); //dojo.Deferred
-	}
-
-	/*
-	dojo.wrapForm = function(formNode){
-		//summary:
-		//		A replacement for FormBind, but not implemented yet.
-
-		// FIXME: need to think harder about what extensions to this we might
-		// want. What should we allow folks to do w/ this? What events to
-		// set/send?
-		throw new Error("dojo.wrapForm not yet implemented");
-	}
-	*/
-})();
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/LICENSE b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/LICENSE
deleted file mode 100644
index 8c777a2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/LICENSE
+++ /dev/null
@@ -1,37 +0,0 @@
-License Disclaimer:
-
-All contents of this directory are Copyright (c) the Dojo Foundation, with the
-following exceptions:
--------------------------------------------------------------------------------
-
-firebug.html, firebug.js, errIcon.png, infoIcon.png, warningIcon.png:
-	* Copyright (c) 2006-2007, Joe Hewitt, All rights reserved.
-	  Distributed under the terms of the BSD License (see below)
-
--------------------------------------------------------------------------------
-
-Copyright (c) 2006-2007, Joe Hewitt
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-  * Redistributions of source code must retain the above copyright notice, this
-	list of conditions and the following disclaimer.
-  * Redistributions in binary form must reproduce the above copyright notice,
-	this list of conditions and the following disclaimer in the documentation
-	and/or other materials provided with the distribution.
-  * Neither the name of the Dojo Foundation nor the names of its contributors
-	may be used to endorse or promote products derived from this software
-	without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/errorIcon.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/errorIcon.png
deleted file mode 100644
index 2d75261..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/errorIcon.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/firebug.css b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/firebug.css
deleted file mode 100644
index 27657ef..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/firebug.css
+++ /dev/null
@@ -1,211 +0,0 @@
-.firebug {
-	margin: 0;
-	background:#fff;
-	font-family: Lucida Grande, Tahoma, sans-serif;
-	font-size: 11px;
-	overflow: hidden;
-	border: 1px solid black;
-	position: relative;
-}
-.firebug a {
-	text-decoration: none;
-}
-.firebug a:hover {
-	text-decoration: underline;
-}
-.firebug a:visited{
-	color:#0000FF;
-}
-.firebug #firebugToolbar {
-	height: 18px;
-	line-height:18px;
-	border-top: 1px solid ThreeDHighlight;
-	border-bottom: 1px solid ThreeDShadow;
-	padding: 2px 6px;
-	
-	background:#f0f0f0;
-}
-
-.firebug #firebugLog, .firebug #objectLog {
-	overflow: auto;
-	position: absolute;
-	left: 0;
-	width: 100%;
-}
-#objectLog{
-	overflow:scroll;
-	height:258px;
-}
-.firebug #firebugCommandLine {
-	position: absolute;
-	bottom: 0;
-	left: 0;
-	width: 100%;
-	height: 18px;
-	border: none;
-	border-top: 1px solid ThreeDShadow;
-}
-.firebug .logRow {
-	position: relative;
-	border-bottom: 1px solid #D7D7D7;
-	padding: 2px 4px 1px 6px;
-	background-color: #FFFFFF;
-}
-.firebug .logRow-command {
-	font-family: Monaco, monospace;
-	color: blue;
-}
-.firebug .objectBox-null {
-	padding: 0 2px;
-	border: 1px solid #666666;
-	background-color: #888888;
-	color: #FFFFFF;
-}
-.firebug .objectBox-string {
-	font-family: Monaco, monospace;
-	color: red;
-	white-space: pre;
-}
-.firebug .objectBox-number {
-	color: #000088;
-}
-.firebug .objectBox-function {
-	font-family: Monaco, monospace;
-	color: DarkGreen;
-}
-.firebug .objectBox-object {
-	color: DarkGreen;
-	font-weight: bold;
-}
-.firebug .logRow-info,
-.firebug .logRow-error,
-.firebug .logRow-warning
- {
-	background: #00FFFF no-repeat 2px 2px;
-	padding-left: 20px;
-	padding-bottom: 3px;
-}
-.firebug .logRow-info {
-	background: #FFF url(infoIcon.png) no-repeat 2px 2px;
-	padding-left: 20px;
-	padding-bottom: 3px;
-}
-.firebug .logRow-warning {
-	
-	background: #00FFFF url(warningIcon.png) no-repeat 2px 2px;
-	padding-left: 20px;
-	padding-bottom: 3px;
-}
-.firebug .logRow-error {
-	background: LightYellow url(errorIcon.png) no-repeat 2px 2px;
-	padding-left: 20px;
-	padding-bottom: 3px;
-}
-.firebug .errorMessage {
-	vertical-align: top;
-	color: #FF0000;
-}
-.firebug .objectBox-sourceLink {
-	position: absolute;
-	right: 4px;
-	top: 2px;
-	padding-left: 8px;
-	font-family: Lucida Grande, sans-serif;
-	font-weight: bold;
-	color: #0000FF;
-}
-.firebug .logRow-group {
-	background: #EEEEEE;
-	border-bottom: none;
-}
-.firebug .logGroup {
-	background: #EEEEEE;
-}
-.firebug .logGroupBox {
-	margin-left: 24px;
-	border-top: 1px solid #D7D7D7;
-	border-left: 1px solid #D7D7D7;
-}
-.firebug .selectorTag,
-.firebug .selectorId,
-.firebug .selectorClass {
-	font-family: Monaco, monospace;
-	font-weight: normal;
-}
-.firebug .selectorTag {
-	color: #0000FF;
-}
-.firebug .selectorId {
-	color: DarkBlue;
-}
-.firebug .selectorClass {
-	color: red;
-}
-.firebug .objectBox-element {
-	font-family: Monaco, monospace;
-	color: #000088;
-}
-.firebug .nodeChildren {
-	margin-left: 16px;
-}
-.firebug .nodeTag {
-	color: blue;
-}
-.firebug .nodeValue {
-	color: #FF0000;
-	font-weight: normal;
-}
-.firebug .nodeText,
-.firebug .nodeComment {
-	margin: 0 2px;
-	vertical-align: top;
-}
-.firebug .nodeText {
-	color: #333333;
-}
-.firebug .nodeComment {
-	color: DarkGreen;
-}
-.firebug .propertyNameCell {
-	vertical-align: top;
-}
-.firebug .propertyName {
-	font-weight: bold;
-}
-
-/*   tabs   */
-#firebugToolbar ul.tabs{
-	margin:0 !important;
-	padding:0;
-}
-#firebugToolbar ul.tabs li{
-	list-style:none;
-	background:transparent url(tab_lft_norm.png) no-repeat left;
-	line-height:18px;
-	float:left;
-	margin-left:5px;
-}
-#firebugToolbar ul.tabs li.right{
-	float:right;
-	margin-right:5px;
-	margin-left:0;
-}
-#firebugToolbar ul.tabs li.gap{
-	margin-left:20px;
-}
-#firebugToolbar .tabs a{
-	text-decoration:none;
-	background:transparent url(tab_rgt_norm.png) no-repeat right;
-	line-height:18px;
-	padding:3px 9px 4px 0px;
-	margin-left:9px;
-	color:#333333;
-}
-#firebugToolbar .tabs li:hover{
-	background:transparent url(tab_lft_over.png) no-repeat left;
-}
-#firebugToolbar .tabs a:hover{
-	text-decoration:none;
-	background:transparent url(tab_rgt_over.png) no-repeat right;
-	color:#FFFFFF;
-}
\ No newline at end of file
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/firebug.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/firebug.js
deleted file mode 100644
index 04a455e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/firebug.js
+++ /dev/null
@@ -1,1226 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo._firebug.firebug"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._firebug.firebug"] = true;
-dojo.provide("dojo._firebug.firebug");
-	
-dojo.deprecated = function(/*String*/ behaviour, /*String?*/ extra, /*String?*/ removal){
-	// summary: 
-	//		Log a debug message to indicate that a behavior has been
-	//		deprecated.
-	// extra: Text to append to the message.
-	// removal: 
-	//		Text to indicate when in the future the behavior will be removed.
-	var message = "DEPRECATED: " + behaviour;
-	if(extra){ message += " " + extra; }
-	if(removal){ message += " -- will be removed in version: " + removal; }
-	console.warn(message);
-};
-
-dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
-	// summary: Marks code as experimental.
-	// description: 
-	//		This can be used to mark a function, file, or module as
-	//		experimental.  Experimental code is not ready to be used, and the
-	//		APIs are subject to change without notice.  Experimental code may be
-	//		completed deleted without going through the normal deprecation
-	//		process.
-	// moduleName: 
-	//		The name of a module, or the name of a module file or a specific
-	//		function
-	// extra: 
-	//		some additional message for the user
-	// example:
-	//	|	dojo.experimental("dojo.data.Result");
-	// example:
-	//	|	dojo.experimental("dojo.weather.toKelvin()", "PENDING approval from NOAA");
-	var message = "EXPERIMENTAL: " + moduleName + " -- APIs subject to change without notice.";
-	if(extra){ message += " " + extra; }
-	console.warn(message);
-};
-
-// FIREBUG LITE
-	// summary: Firebug Lite, the baby brother to Joe Hewitt's Firebug for Mozilla Firefox
-	// description:
-	//		Opens a console for logging, debugging, and error messages.
-	//		Contains partial functionality to Firebug. See function list below.
-	//	NOTE: 
-	//			Firebug is a Firefox extension created by Joe Hewitt (see license). You do not need Dojo to run Firebug.
-	//			Firebug Lite is included in Dojo by permission from Joe Hewitt
-	//			If you are new to Firebug, or used to the Dojo 0.4 dojo.debug, you can learn Firebug 
-	//				functionality by reading the function comments below or visiting http://www.getfirebug.com/docs.html
-	//	NOTE:
-	//		To test Firebug Lite in Firefox:
-	//			FF2: set "console = null" before loading dojo and set djConfig.isDebug=true
-	//			FF3: disable Firebug and set djConfig.isDebug=true
-	//
-	// example:
-	//		Supports inline objects in object inspector window (only simple trace of dom nodes, however)
-	//		|	console.log("my object", {foo:"bar"})
-	// example:
-	//		Option for console to open in popup window
-	//		|	var djConfig = {isDebug: true, popup:true };
-	// example:
-	//		Option for console height (ignored for popup)
-	//		|	var djConfig = {isDebug: true, debugHeight:100 }
-
-
-
-(function(){
-
-	var isNewIE = (/Trident/.test(window.navigator.userAgent));
-	if(isNewIE){
-		// Fixing IE's console
-		// IE doesn't insert space between arguments. How annoying.
-		var calls = ["log", "info", "debug", "warn", "error"];
-		for(var i=0;i<calls.length;i++){
-			var m = calls[i];
-			var n = "_"+calls[i]
-			console[n] = console[m];
-			console[m] = (function(){
-				var type = n;
-				return function(){
-					console[type](Array.prototype.slice.call(arguments).join(" "));
-				}
-			})();
-		}
-		// clear the console on load. This is more than a convenience - too many logs crashes it.
-		// If closed it throws an error
-		try{ console.clear(); }catch(e){}
-	}
-	
-	if(
-		!dojo.isFF &&								// Firefox has Firebug
-		(!dojo.isChrome || dojo.isChrome < 3) &&
-		(!dojo.isSafari || dojo.isSafari < 4) &&	// Safari 4 has a console
-		!isNewIE &&									// Has the new IE console
-		!window.firebug &&							// Testing for mozilla firebug lite
-		(typeof console != "undefined" && !console.firebug) && //A console that is not firebug's
-		!dojo.config.useCustomLogger &&				// Allow custom loggers
-		!dojo.isAIR									// isDebug triggers AIRInsector, not Firebug
-	){
-	
-	
-	// don't build firebug in iframes
-	try{
-		if(window != window.parent){ 
-			// but if we've got a parent logger, connect to it
-			if(window.parent["console"]){
-				window.console = window.parent.console;
-			}
-			return; 
-		}
-	}catch(e){/*squelch*/}
-
-	// ***************************************************************************
-	// Placing these variables before the functions that use them to avoid a 
-	// shrinksafe bug where variable renaming does not happen correctly otherwise.
-	
-	// most of the objects in this script are run anonomously
-	var _firebugDoc = document;
-	var _firebugWin = window;
-	var __consoleAnchorId__ = 0;
-	
-	var consoleFrame = null;
-	var consoleBody = null;
-	var consoleObjectInspector = null;
-	var fireBugTabs = null;
-	var commandLine = null;
-	var consoleToolbar = null;
-	
-	var frameVisible = false;
-	var messageQueue = [];
-	var groupStack = [];
-	var timeMap = {};
-	var countMap = {};
-	
-	var consoleDomInspector = null;
-	var _inspectionMoveConnection;
-	var _inspectionClickConnection;
-	var _inspectionEnabled = false;
-	var _inspectionTimer = null;
-	var _inspectTempNode = document.createElement("div");
-			
-			
-	var _inspectCurrentNode;
-	var _restoreBorderStyle;
-
-	// ***************************************************************************
-
-	window.console = {
-		_connects: [],
-		log: function(){
-			// summary: 
-			//		Sends arguments to console.
-			logFormatted(arguments, "");
-		},
-		
-		debug: function(){
-			// summary: 
-			//		Sends arguments to console. Missing finctionality to show script line of trace.
-			logFormatted(arguments, "debug");
-		},
-		
-		info: function(){
-			// summary: 
-			//		Sends arguments to console, highlighted with (I) icon.
-			logFormatted(arguments, "info");
-		},
-		
-		warn: function(){
-			// summary: 
-			//		Sends warning arguments to console, highlighted with (!) icon and blue style.
-			logFormatted(arguments, "warning");
-		},
-		
-		error: function(){
-			// summary: 
-			//		Sends error arguments (object) to console, highlighted with (X) icon and yellow style
-			//			NEW: error object now displays in object inspector
-			logFormatted(arguments, "error");
-		},
-		
-		assert: function(truth, message){
-			// summary: 
-			//		Tests for true. Throws exception if false.
-			if(!truth){
-				var args = [];
-				for(var i = 1; i < arguments.length; ++i){
-					args.push(arguments[i]);
-				}
-				
-				logFormatted(args.length ? args : ["Assertion Failure"], "error");
-				throw message ? message : "Assertion Failure";
-			}
-		},
-		
-		dir: function(obj){
-			var str = printObject( obj );
-			str = str.replace(/\n/g, "<br />");
-			str = str.replace(/\t/g, "&nbsp;&nbsp;&nbsp;&nbsp;");
-			logRow([str], "dir");
-		},
-		
-		dirxml: function(node){
-			// summary: 
-			//
-			var html = [];
-			appendNode(node, html);
-			logRow(html, "dirxml");
-		},
-		
-		group: function(){
-			// summary: 
-			//		collects log messages into a group, starting with this call and ending with 
-			//			groupEnd(). Missing collapse functionality
-			logRow(arguments, "group", pushGroup);
-		},
-		
-		groupEnd: function(){
-			// summary: 
-			//		Closes group. See above
-			logRow(arguments, "", popGroup);
-		},
-		
-		time: function(name){
-			// summary: 
-			//		Starts timers assigned to name given in argument. Timer stops and displays on timeEnd(title);
-			//	example:
-			//	|	console.time("load");
-			//	|	console.time("myFunction");
-			//	|	console.timeEnd("load");
-			//	|	console.timeEnd("myFunction");
-			timeMap[name] = new Date().getTime();
-		},
-		
-		timeEnd: function(name){
-			// summary: 
-			//		See above.
-			if(name in timeMap){
-				var delta = (new Date()).getTime() - timeMap[name];
-				logFormatted([name+ ":", delta+"ms"]);
-				delete timeMap[name];
-			}
-		},
-		
-		count: function(name){
-			// summary: 
-			//		Not supported
-			if(!countMap[name]) countMap[name] = 0;
-			countMap[name]++;
-			logFormatted([name+": "+countMap[name]]);
-		},
-		
-		trace: function(_value){
-			var stackAmt = _value || 3;
-			var f = console.trace.caller; //function that called trace
-			console.log(">>> console.trace(stack)");
-			for(var i=0;i<stackAmt;i++){
-				var func = f.toString();
-				var args=[];
-				for (var a = 0; a < f.arguments.length; a++) {
-					args.push(f.arguments[a])
-				}
-				if(f.arguments.length){
-					console.dir({"function":func, "arguments":args});	
-				}else{
-					console.dir({"function":func});
-				}
-				
-				f = f.caller;
-			}	
-		},
-		
-		profile: function(){
-			// summary: 
-			//		Not supported
-			this.warn(["profile() not supported."]);
-		},
-		
-		profileEnd: function(){ },
-
-		clear: function(){
-			// summary: 
-			//		Clears message console. Do not call this directly
-			if(consoleBody){
-				while(consoleBody.childNodes.length){
-					dojo.destroy(consoleBody.firstChild);	
-				}
-			}
-			dojo.forEach(this._connects,dojo.disconnect);
-		},
-
-		open: function(){ 
-			// summary: 
-			//		Opens message console. Do not call this directly
-			toggleConsole(true); 
-		},
-		
-		close: function(){
-			// summary: 
-			//		Closes message console. Do not call this directly
-			if(frameVisible){
-				toggleConsole();
-			}
-		},
-		_restoreBorder: function(){
-			if(_inspectCurrentNode){
-				_inspectCurrentNode.style.border = _restoreBorderStyle;
-			}
-		},
-		openDomInspector: function(){
-			_inspectionEnabled = true;
-			consoleBody.style.display = "none";
-			consoleDomInspector.style.display = "block";
-			consoleObjectInspector.style.display = "none";
-			document.body.style.cursor = "pointer";
-			_inspectionMoveConnection = dojo.connect(document, "mousemove", function(evt){
-				if(!_inspectionEnabled){ return; }
-				if(!_inspectionTimer){
-					_inspectionTimer = setTimeout(function(){ _inspectionTimer = null; }, 50);
-				}else{
-					return;
-				}
-				var node = evt.target;
-				if(node && (_inspectCurrentNode !== node)){
-					var parent = true;
-					
-					console._restoreBorder();
-					var html = [];
-					appendNode(node, html);
-					consoleDomInspector.innerHTML = html.join("");
-						
-					_inspectCurrentNode = node;
-					_restoreBorderStyle = _inspectCurrentNode.style.border;
-					_inspectCurrentNode.style.border = "#0000FF 1px solid";
-				}
-			});
-			setTimeout(function(){
-				_inspectionClickConnection = dojo.connect(document, "click", function(evt){
-					document.body.style.cursor = "";
-					_inspectionEnabled = !_inspectionEnabled;																  
-					dojo.disconnect(_inspectionClickConnection);
-					// console._restoreBorder();
-				});
-			}, 30);
-		},
-		_closeDomInspector: function(){
-			document.body.style.cursor = "";
-			dojo.disconnect(_inspectionMoveConnection);
-			dojo.disconnect(_inspectionClickConnection);
-			_inspectionEnabled = false;
-			console._restoreBorder();
-		},
-		openConsole:function(){
-			// summary: 
-			//		Closes object inspector and opens message console. Do not call this directly
-			consoleBody.style.display = "block";
-			consoleDomInspector.style.display = "none";
-			consoleObjectInspector.style.display = "none";
-			console._closeDomInspector();
-		},
-		openObjectInspector:function(){
-			consoleBody.style.display = "none";
-			consoleDomInspector.style.display = "none";
-			consoleObjectInspector.style.display = "block";
-			console._closeDomInspector();
-		},
-		recss: function(){
-			// http://turtle.dojotoolkit.org/~david/recss.html
-			// this is placed in dojo since the console is most likely
-			// in another window and dojo is easilly accessible
-			var i,a,s;a=document.getElementsByTagName('link');
-			for(i=0;i<a.length;i++){
-				s=a[i];
-				if(s.rel.toLowerCase().indexOf('stylesheet')>=0&&s.href) {
-					var h=s.href.replace(/(&|%5C?)forceReload=\d+/,'');
-					s.href=h+(h.indexOf('?')>=0?'&':'?')+'forceReload='+new Date().valueOf();
-				}
-			}
-		}
-	}
-
-	// ***************************************************************************
-
-	function toggleConsole(forceOpen){
-		frameVisible = forceOpen || !frameVisible;
-		if(consoleFrame){
-			consoleFrame.style.display = frameVisible ? "block" : "none";
-		}
-	}
-
-	function focusCommandLine(){
-		toggleConsole(true);
-		if(commandLine){
-			commandLine.focus();
-		}
-	}
-	
-	function openWin(x,y,w,h){
-		var win = window.open("","_firebug","status=0,menubar=0,resizable=1,top="+y+",left="+x+",width="+w+",height="+h+",scrollbars=1,addressbar=0");
-		if(!win){
-			var msg = "Firebug Lite could not open a pop-up window, most likely because of a blocker.\n" +
-				"Either enable pop-ups for this domain, or change the djConfig to popup=false.";
-			alert(msg);
-		}
-		createResizeHandler(win);
-		var newDoc=win.document;
-		//Safari needs an HTML height
-		var HTMLstring=	'<html style="height:100%;"><head><title>Firebug Lite</title></head>\n' +
-					'<body bgColor="#ccc" style="height:97%;" onresize="opener.onFirebugResize()">\n' +
-					'<div id="fb"></div>' +
-					'</body></html>';
-	
-		newDoc.write(HTMLstring);
-		newDoc.close();
-		return win;
-	}
-
-	function createResizeHandler(wn){
-		// summary
-		//		Creates handle for onresize window. Called from script in popup's body tag (so that it will work with IE).
-		//
-		
-		var d = new Date();
-			d.setTime(d.getTime()+(60*24*60*60*1000)); // 60 days
-			d = d.toUTCString();
-			
-			var dc = wn.document,
-				getViewport;
-				
-			if (wn.innerWidth){
-				getViewport = function(){
-					return{w:wn.innerWidth, h:wn.innerHeight};
-				};
-			}else if (dc.documentElement && dc.documentElement.clientWidth){
-				getViewport = function(){
-					return{w:dc.documentElement.clientWidth, h:dc.documentElement.clientHeight};
-				};
-			}else if (dc.body){
-				getViewport = function(){
-					return{w:dc.body.clientWidth, h:dc.body.clientHeight};
-				};
-			}
-			
-
-		window.onFirebugResize = function(){ 
-			
-			//resize the height of the console log body
-			layout(getViewport().h);
-			
-			clearInterval(wn._firebugWin_resize);
-			wn._firebugWin_resize = setTimeout(function(){
-				var x = wn.screenLeft,
-					y = wn.screenTop,
-					w = wn.outerWidth  || wn.document.body.offsetWidth,
-					h = wn.outerHeight || wn.document.body.offsetHeight;
-				
-				document.cookie = "_firebugPosition=" + [x,y,w,h].join(",") + "; expires="+d+"; path=/";
-					 
-			 }, 5000); //can't capture window.onMove - long timeout gives better chance of capturing a resize, then the move
-		
-		};
-	}
-	
-	
-	/*****************************************************************************/
-	
-	
-	function createFrame(){
-		if(consoleFrame){
-			return;
-		}
-		
-		if(dojo.config.popup){
-			var containerHeight = "100%";
-			var cookieMatch = document.cookie.match(/(?:^|; )_firebugPosition=([^;]*)/);
-			var p = cookieMatch ? cookieMatch[1].split(",") : [2,2,320,480];
-
-			_firebugWin = openWin(p[0],p[1],p[2],p[3]);	// global
-			_firebugDoc = _firebugWin.document;			// global
-
-			dojo.config.debugContainerId = 'fb';
-		
-			// connecting popup
-			_firebugWin.console = window.console;
-			_firebugWin.dojo = window.dojo;
-		}else{
-			_firebugDoc = document;
-			containerHeight = (dojo.config.debugHeight || 300) + "px";
-		}
-		
-		var styleElement = _firebugDoc.createElement("link");
-		styleElement.href = dojo.moduleUrl("dojo._firebug", "firebug.css");
-		styleElement.rel = "stylesheet";
-		styleElement.type = "text/css";
-		var styleParent = _firebugDoc.getElementsByTagName("head");
-		if(styleParent){
-			styleParent = styleParent[0];
-		}
-		if(!styleParent){
-			styleParent = _firebugDoc.getElementsByTagName("html")[0];
-		}
-		if(dojo.isIE){
-			window.setTimeout(function(){ styleParent.appendChild(styleElement); }, 0);
-		}else{
-			styleParent.appendChild(styleElement);
-		}
-		
-		if(dojo.config.debugContainerId){
-			consoleFrame = _firebugDoc.getElementById(dojo.config.debugContainerId);
-		}
-		if(!consoleFrame){
-			consoleFrame = _firebugDoc.createElement("div");
-			_firebugDoc.body.appendChild(consoleFrame);
-		}
-		consoleFrame.className += " firebug";
-		consoleFrame.style.height = containerHeight;
-		consoleFrame.style.display = (frameVisible ? "block" : "none");	  
-		
-		var buildLink = function(label, title, method, _class){
-			return '<li class="'+_class+'"><a href="javascript:void(0);" onclick="console.'+ method +'(); return false;" title="'+title+'">'+label+'</a></li>';
-		};
-		consoleFrame.innerHTML = 
-			  '<div id="firebugToolbar">'
-			+ '  <ul id="fireBugTabs" class="tabs">'
-			
-			+ buildLink("Clear", "Remove All Console Logs", "clear", "")
-			+ buildLink("ReCSS", "Refresh CSS without reloading page", "recss", "")
-			
-			+ buildLink("Console", "Show Console Logs", "openConsole", "gap")
-			+ buildLink("DOM", "Show DOM Inspector", "openDomInspector", "")
-			+ buildLink("Object", "Show Object Inspector", "openObjectInspector", "")
-			+ ((dojo.config.popup) ? "" : buildLink("Close", "Close the console", "close", "gap"))
-			
-			+ '	</ul>'
-			+ '</div>'
-			+ '<input type="text" id="firebugCommandLine" />'
-			+ '<div id="firebugLog"></div>'
-			+ '<div id="objectLog" style="display:none;">Click on an object in the Log display</div>'
-			+ '<div id="domInspect" style="display:none;">Hover over HTML elements in the main page. Click to hold selection.</div>';
-
-
-		consoleToolbar = _firebugDoc.getElementById("firebugToolbar");
-
-		commandLine = _firebugDoc.getElementById("firebugCommandLine");
-		addEvent(commandLine, "keydown", onCommandLineKeyDown);
-
-		addEvent(_firebugDoc, dojo.isIE || dojo.isSafari ? "keydown" : "keypress", onKeyDown);
-		
-		consoleBody = _firebugDoc.getElementById("firebugLog");
-		consoleObjectInspector = _firebugDoc.getElementById("objectLog");
-		consoleDomInspector = _firebugDoc.getElementById("domInspect");
-		fireBugTabs = _firebugDoc.getElementById("fireBugTabs");
-		layout();
-		flush();
-	}
-
-	dojo.addOnLoad(createFrame);
-
-	function clearFrame(){
-		_firebugDoc = null;
-		
-		if(_firebugWin.console){
-			_firebugWin.console.clear();
-		}
-		_firebugWin = null;
-		consoleFrame = null;
-		consoleBody = null;
-		consoleObjectInspector = null;
-		consoleDomInspector = null;
-		commandLine = null;
-		messageQueue = [];
-		groupStack = [];
-		timeMap = {};
-	}
-	
-
-	function evalCommandLine(){
-		var text = commandLine.value;
-		commandLine.value = "";
-
-		logRow([">  ", text], "command");
-		
-		var value;
-		try{
-			value = eval(text);
-		}catch(e){
-			console.debug(e); // put exception on the console
-		}
-
-		console.log(value);
-	}
-	
-	function layout(h){
-		var tHeight = 25; //consoleToolbar.offsetHeight; // tab style not ready on load - throws off layout
-		var height = h ? 
-			h  - (tHeight + commandLine.offsetHeight +25 + (h*.01)) + "px" : 
-			(consoleFrame.offsetHeight - tHeight - commandLine.offsetHeight) + "px";
-		
-		consoleBody.style.top = tHeight + "px";
-		consoleBody.style.height = height;
-		consoleObjectInspector.style.height = height;
-		consoleObjectInspector.style.top = tHeight + "px";
-		consoleDomInspector.style.height = height;
-		consoleDomInspector.style.top = tHeight + "px";
-		commandLine.style.bottom = 0;
-		
-		dojo.addOnWindowUnload(clearFrame)
-	}
-	
-	function logRow(message, className, handler){
-		if(consoleBody){
-			writeMessage(message, className, handler);
-		}else{
-			messageQueue.push([message, className, handler]);
-		}
-	}
-	
-	function flush(){
-		var queue = messageQueue;
-		messageQueue = [];
-		
-		for(var i = 0; i < queue.length; ++i){
-			writeMessage(queue[i][0], queue[i][1], queue[i][2]);
-		}
-	}
-
-	function writeMessage(message, className, handler){
-		var isScrolledToBottom =
-			consoleBody.scrollTop + consoleBody.offsetHeight >= consoleBody.scrollHeight;
-
-		handler = handler||writeRow;
-		
-		handler(message, className);
-		
-		if(isScrolledToBottom){
-			consoleBody.scrollTop = consoleBody.scrollHeight - consoleBody.offsetHeight;
-		}
-	}
-	
-	function appendRow(row){
-		var container = groupStack.length ? groupStack[groupStack.length-1] : consoleBody;
-		container.appendChild(row);
-	}
-
-	function writeRow(message, className){
-		var row = consoleBody.ownerDocument.createElement("div");
-		row.className = "logRow" + (className ? " logRow-"+className : "");
-		row.innerHTML = message.join("");
-		appendRow(row);
-	}
-
-	function pushGroup(message, className){
-		logFormatted(message, className);
-
-		//var groupRow = consoleBody.ownerDocument.createElement("div");
-		//groupRow.className = "logGroup";
-		var groupRowBox = consoleBody.ownerDocument.createElement("div");
-		groupRowBox.className = "logGroupBox";
-		//groupRow.appendChild(groupRowBox);
-		appendRow(groupRowBox);
-		groupStack.push(groupRowBox);
-	}
-
-	function popGroup(){
-		groupStack.pop();
-	}
-	
-	// ***************************************************************************
-
-	function logFormatted(objects, className){
-		var html = [];
-		
-		var format = objects[0];
-		var objIndex = 0;
-
-		if(typeof(format) != "string"){
-			format = "";
-			objIndex = -1;
-		}
-
-		var parts = parseFormat(format);
-		
-		for(var i = 0; i < parts.length; ++i){
-			var part = parts[i];
-			if(part && typeof part == "object"){
-				part.appender(objects[++objIndex], html);
-			}else{
-				appendText(part, html);
-			}
-		}
-		
-		
-		var ids = [];
-		var obs = [];
-		for(i = objIndex+1; i < objects.length; ++i){
-			appendText(" ", html);
-			
-			var object = objects[i];
-			if(object === undefined || object === null ){
-				appendNull(object, html);
-
-			}else if(typeof(object) == "string"){
-				appendText(object, html);
-			
-			}else if(object instanceof Date){
-				appendText(object.toString(), html);
-				
-			}else if(object.nodeType == 9){
-				appendText("[ XmlDoc ]", html);
-
-			}else{
-				// Create link for object inspector
-				// need to create an ID for this link, since it is currently text
-				var id = "_a" + __consoleAnchorId__++;
-				ids.push(id);
-				// need to save the object, so the arrays line up
-				obs.push(object);
-				var str = '<a id="'+id+'" href="javascript:void(0);">'+getObjectAbbr(object)+'</a>';
-				
-				appendLink( str , html);
-			}
-		}
-		
-		logRow(html, className);
-		
-		// Now that the row is inserted in the DOM, loop through all of the links that were just created
-		for(i=0; i<ids.length; i++){
-			var btn = _firebugDoc.getElementById(ids[i]);
-			if(!btn){ continue; }
-	
-			// store the object in the dom btn for reference later
-			// avoid parsing these objects unless necessary
-			btn.obj = obs[i];
-	
-			_firebugWin.console._connects.push(dojo.connect(btn, "onclick", function(){
-				
-				console.openObjectInspector();
-				
-				try{
-					printObject(this.obj);
-				}catch(e){
-					this.obj = e;
-				}
-				consoleObjectInspector.innerHTML = "<pre>" + printObject( this.obj ) + "</pre>";
-			}));
-		}
-	}
-
-	function parseFormat(format){
-		var parts = [];
-
-		var reg = /((^%|[^\\]%)(\d+)?(\.)([a-zA-Z]))|((^%|[^\\]%)([a-zA-Z]))/;	  
-		var appenderMap = {s: appendText, d: appendInteger, i: appendInteger, f: appendFloat};
-
-		for(var m = reg.exec(format); m; m = reg.exec(format)){
-			var type = m[8] ? m[8] : m[5];
-			var appender = type in appenderMap ? appenderMap[type] : appendObject;
-			var precision = m[3] ? parseInt(m[3]) : (m[4] == "." ? -1 : 0);
-
-			parts.push(format.substr(0, m[0][0] == "%" ? m.index : m.index+1));
-			parts.push({appender: appender, precision: precision});
-
-			format = format.substr(m.index+m[0].length);
-		}
-
-		parts.push(format);
-
-		return parts;
-	}
-
-	function escapeHTML(value){
-		function replaceChars(ch){
-			switch(ch){
-				case "<":
-					return "&lt;";
-				case ">":
-					return "&gt;";
-				case "&":
-					return "&amp;";
-				case "'":
-					return "&#39;";
-				case '"':
-					return "&quot;";
-			}
-			return "?";
-		}
-		return String(value).replace(/[<>&"']/g, replaceChars);
-	}
-
-	function objectToString(object){
-		try{
-			return object+"";
-		}catch(e){
-			return null;
-		}
-	}
-
-	// ***************************************************************************
-	function appendLink(object, html){
-		// needed for object links - no HTML escaping
-		html.push( objectToString(object) );
-	}
-	
-	function appendText(object, html){
-		html.push(escapeHTML(objectToString(object)));
-	}
-
-	function appendNull(object, html){
-		html.push('<span class="objectBox-null">', escapeHTML(objectToString(object)), '</span>');
-	}
-
-	function appendString(object, html){
-		html.push('<span class="objectBox-string">&quot;', escapeHTML(objectToString(object)),
-			'&quot;</span>');
-	}
-
-	function appendInteger(object, html){
-		html.push('<span class="objectBox-number">', escapeHTML(objectToString(object)), '</span>');
-	}
-
-	function appendFloat(object, html){
-		html.push('<span class="objectBox-number">', escapeHTML(objectToString(object)), '</span>');
-	}
-
-	function appendFunction(object, html){
-		html.push('<span class="objectBox-function">', getObjectAbbr(object), '</span>');
-	}
-	
-	function appendObject(object, html){
-		try{
-			if(object === undefined){
-				appendNull("undefined", html);
-			}else if(object === null){
-				appendNull("null", html);
-			}else if(typeof object == "string"){
-				appendString(object, html);
-			}else if(typeof object == "number"){
-				appendInteger(object, html);
-			}else if(typeof object == "function"){
-				appendFunction(object, html);
-			}else if(object.nodeType == 1){
-				appendSelector(object, html);
-			}else if(typeof object == "object"){
-				appendObjectFormatted(object, html);
-			}else{
-				appendText(object, html);
-			}
-		}catch(e){
-			/* squelch */
-		}
-	}
-		
-	function appendObjectFormatted(object, html){
-		var text = objectToString(object);
-		var reObject = /\[object (.*?)\]/;
-
-		var m = reObject.exec(text);
-		html.push('<span class="objectBox-object">', m ? m[1] : text, '</span>');
-	}
-	
-	function appendSelector(object, html){
-		html.push('<span class="objectBox-selector">');
-
-		html.push('<span class="selectorTag">', escapeHTML(object.nodeName.toLowerCase()), '</span>');
-		if(object.id){
-			html.push('<span class="selectorId">#', escapeHTML(object.id), '</span>');
-		}
-		if(object.className){
-			html.push('<span class="selectorClass">.', escapeHTML(object.className), '</span>');
-		}
-
-		html.push('</span>');
-	}
-
-	function appendNode(node, html){
-		if(node.nodeType == 1){
-			html.push(
-				'<div class="objectBox-element">',
-					'&lt;<span class="nodeTag">', node.nodeName.toLowerCase(), '</span>');
-
-			for(var i = 0; i < node.attributes.length; ++i){
-				var attr = node.attributes[i];
-				if(!attr.specified){ continue; }
-				
-				html.push('&nbsp;<span class="nodeName">', attr.nodeName.toLowerCase(),
-					'</span>=&quot;<span class="nodeValue">', escapeHTML(attr.nodeValue),
-					'</span>&quot;');
-			}
-
-			if(node.firstChild){
-				html.push('&gt;</div><div class="nodeChildren">');
-
-				for(var child = node.firstChild; child; child = child.nextSibling){
-					appendNode(child, html);
-				}
-					
-				html.push('</div><div class="objectBox-element">&lt;/<span class="nodeTag">', 
-					node.nodeName.toLowerCase(), '&gt;</span></div>');
-			}else{
-				html.push('/&gt;</div>');
-			}
-		}else if (node.nodeType == 3){
-			html.push('<div class="nodeText">', escapeHTML(node.nodeValue),
-				'</div>');
-		}
-	}
-
-	// ***************************************************************************
-	
-	function addEvent(object, name, handler){
-		if(document.all){
-			object.attachEvent("on"+name, handler);
-		}else{
-			object.addEventListener(name, handler, false);
-		}
-	}
-	
-	function removeEvent(object, name, handler){
-		if(document.all){
-			object.detachEvent("on"+name, handler);
-		}else{
-			object.removeEventListener(name, handler, false);
-		}
-	}
-	
-	function cancelEvent(event){
-		if(document.all){
-			event.cancelBubble = true;
-		}else{
-			event.stopPropagation();		
-		}
-	}
-
-	function onError(msg, href, lineNo){
-		var lastSlash = href.lastIndexOf("/");
-		var fileName = lastSlash == -1 ? href : href.substr(lastSlash+1);
-
-		var html = [
-			'<span class="errorMessage">', msg, '</span>', 
-			'<div class="objectBox-sourceLink">', fileName, ' (line ', lineNo, ')</div>'
-		];
-
-		logRow(html, "error");
-	}
-
-
-	//After converting to div instead of iframe, now getting two keydowns right away in IE 6.
-	//Make sure there is a little bit of delay.
-	var onKeyDownTime = new Date().getTime();
-
-	function onKeyDown(event){
-		var timestamp = (new Date()).getTime();
-		if(timestamp > onKeyDownTime + 200){
-			event = dojo.fixEvent(event);
-			var keys = dojo.keys;
-			var ekc = event.keyCode;
-			onKeyDownTime = timestamp;
-			if(ekc == keys.F12){
-				toggleConsole();
-			}else if(
-				(ekc == keys.NUMPAD_ENTER || ekc == 76) &&
-				event.shiftKey && 
-				(event.metaKey || event.ctrlKey)
-			){
-				focusCommandLine();
-			}else{
-				return;
-			}
-			cancelEvent(event);
-		}
-	}
-
-	function onCommandLineKeyDown(e){
-		var dk = dojo.keys;
-		if(e.keyCode == 13 && commandLine.value){
-			addToHistory(commandLine.value);
-			evalCommandLine();
-		}else if(e.keyCode == 27){
-			commandLine.value = "";
-		}else if(e.keyCode == dk.UP_ARROW || e.charCode == dk.UP_ARROW){
-			navigateHistory("older");
-		}else if(e.keyCode == dk.DOWN_ARROW || e.charCode == dk.DOWN_ARROW){
-			navigateHistory("newer");
-		}else if(e.keyCode == dk.HOME || e.charCode == dk.HOME){
-			historyPosition = 1;
-			navigateHistory("older");
-		}else if(e.keyCode == dk.END || e.charCode == dk.END){
-			historyPosition = 999999;
-			navigateHistory("newer");
-		}
-	}
-
-	var historyPosition = -1;
-	var historyCommandLine = null;
-
-	function addToHistory(value){
-		var history = cookie("firebug_history");
-		history = (history) ? dojo.fromJson(history) : [];
-		var pos = dojo.indexOf(history, value);
-		if (pos != -1){
-			history.splice(pos, 1);
-		}
-		history.push(value);
-		cookie("firebug_history", dojo.toJson(history), 30);
-		while(history.length && !cookie("firebug_history")){
-			history.shift();
-			cookie("firebug_history", dojo.toJson(history), 30);
-		}
-		historyCommandLine = null;
-		historyPosition = -1;
-	}
-
-	function navigateHistory(direction){
-		var history = cookie("firebug_history");
-		history = (history) ? dojo.fromJson(history) : [];
-		if(!history.length){
-			return;
-		}
-
-		if(historyCommandLine === null){
-			historyCommandLine = commandLine.value;
-		}
-
-		if(historyPosition == -1){
-			historyPosition = history.length;
-		}
-
-		if(direction == "older"){
-			--historyPosition;
-			if(historyPosition < 0){
-				historyPosition = 0;
-			}
-		}else if(direction == "newer"){
-			++historyPosition;
-			if(historyPosition > history.length){
-				historyPosition = history.length;
-			}
-		}
-
-		if(historyPosition == history.length){
-			commandLine.value = historyCommandLine;
-			historyCommandLine = null;
-		}else{
-			commandLine.value = history[historyPosition];
-		}
-	}
-
-	function cookie(name, value){
-		var c = document.cookie;
-		if(arguments.length == 1){
-			var matches = c.match(new RegExp("(?:^|; )" + name + "=([^;]*)"));
-			return matches ? decodeURIComponent(matches[1]) : undefined; // String or undefined
-		}else{
-			var d = new Date();
-			d.setMonth(d.getMonth()+1);
-			document.cookie = name + "=" + encodeURIComponent(value) + ((d.toUtcString) ? "; expires=" + d.toUTCString() : "");
-		}
-	};
-
-	function isArray(it){
-		return it && it instanceof Array || typeof it == "array";
-	}
-
-	//***************************************************************************************************
-	// Print Object Helpers
-	function objectLength(o){
-		var cnt = 0;
-		for(var nm in o){
-			cnt++	
-		}
-		return cnt;
-	}
-	
-	function printObject(o, i, txt, used){
-		// Recursively trace object, indenting to represent depth for display in object inspector
-		var ind = " \t";
-		txt = txt || "";
-		i = i || ind;
-		used = used || [];
-		var opnCls;
-		
-		if(o && o.nodeType == 1){
-			var html = [];
-			appendNode(o, html);
-			return html.join("");
-		}
-		
-		var br=",\n", cnt = 0, length = objectLength(o);
-		
-		if(o instanceof Date){
-			return i + o.toString() + br;
-		}
-		looking:
-		for(var nm in o){
-			cnt++;
-			if(cnt==length){br = "\n";}
-			if(o[nm] === window || o[nm] === document){
-				continue;
-			}else if(o[nm] === null){
-				txt += i+nm + " : NULL" + br;
-			}else if(o[nm] && o[nm].nodeType){
-				if(o[nm].nodeType == 1){
-					//txt += i+nm + " : < "+o[nm].tagName+" id=\""+ o[nm].id+"\" />" + br;
-				}else if(o[nm].nodeType == 3){
-					txt += i+nm + " : [ TextNode "+o[nm].data + " ]" + br;
-				}
-			
-			}else if(typeof o[nm] == "object" && (o[nm] instanceof String || o[nm] instanceof Number || o[nm] instanceof Boolean)){
-				txt += i+nm + " : " + o[nm] + "," + br;
-			
-			}else if(o[nm] instanceof Date){
-				txt += i+nm + " : " + o[nm].toString() + br;
-				
-			}else if(typeof(o[nm]) == "object" && o[nm]){
-				for(var j = 0, seen; seen = used[j]; j++){
-					if(o[nm] === seen){
-						txt += i+nm + " : RECURSION" + br;
-						continue looking;
-					}
-				}
-				used.push(o[nm]);
-				
-				opnCls = (isArray(o[nm]))?["[","]"]:["{","}"];
-				txt += i+nm +" : " + opnCls[0] + "\n";//non-standard break, (no comma)
-				txt += printObject(o[nm], i+ind, "", used);
-				txt += i + opnCls[1] + br;
-			
-			}else if(typeof o[nm] == "undefined"){
-				txt += i+nm + " : undefined" + br;
-			}else if(nm == "toString" && typeof o[nm] == "function"){
-				var toString = o[nm]();
-				if(typeof toString == "string" && toString.match(/function ?(.*?)\(/)){
-					toString = escapeHTML(getObjectAbbr(o[nm]));
-				}
-				txt += i+nm +" : " + toString + br;
-			}else{
-				txt += i+nm +" : "+ escapeHTML(getObjectAbbr(o[nm])) + br;
-			}
-		}
-		return txt;
-	}
-
-	function getObjectAbbr(obj){
-		// Gets an abbreviation of an object for display in log
-		// X items in object, including id
-		// X items in an array
-		// TODO: Firebug Sr. actually goes by char count
-		var isError = (obj instanceof Error);
-		if(obj.nodeType == 1){
-			return escapeHTML('< '+obj.tagName.toLowerCase()+' id=\"'+ obj.id+ '\" />');
-		}
-		if(obj.nodeType == 3){
-			return escapeHTML('[TextNode: "'+obj.nodeValue+'"]');
-		}
-		var nm = (obj && (obj.id || obj.name || obj.ObjectID || obj.widgetId));
-		if(!isError && nm){ return "{"+nm+"}";	}
-
-		var obCnt = 2;
-		var arCnt = 4;
-		var cnt = 0;
-
-		if(isError){
-			nm = "[ Error: "+(obj.message || obj.description || obj)+" ]";
-		}else if(isArray(obj)){
-			nm = "[" + obj.slice(0,arCnt).join(",");
-			if(obj.length > arCnt){
-				nm += " ... ("+obj.length+" items)";
-			}
-			nm += "]";
-		}else if(typeof obj == "function"){
-			nm = obj + "";
-			var reg = /function\s*([^\(]*)(\([^\)]*\))[^\{]*\{/;
-			var m = reg.exec(nm);
-			if(m){
-				if(!m[1]){
-					m[1] = "function";
-				}
-				nm = m[1] + m[2];
-			}else{
-				nm = "function()";
-			}
-		}else if(typeof obj != "object" || typeof obj == "string"){
-			nm = obj + "";
-		}else{
-			nm = "{";
-			for(var i in obj){
-				cnt++;
-				if(cnt > obCnt){ break; }
-				nm += i+":"+escapeHTML(obj[i])+"  ";
-			}
-			nm+="}";
-		}
-		
-		return nm;
-	}
-		
-	//*************************************************************************************
-	
-	//window.onerror = onError;
-	
-	addEvent(document, dojo.isIE || dojo.isSafari ? "keydown" : "keypress", onKeyDown);
-	
-	if(	(document.documentElement.getAttribute("debug") == "true")||
-		(dojo.config.isDebug)
-	){
-		toggleConsole(true);
-	}
-
-	dojo.addOnWindowUnload(function(){
-		// Erase the globals and event handlers I created, to prevent spurious leak warnings
-		removeEvent(document, dojo.isIE || dojo.isSafari ? "keydown" : "keypress", onKeyDown);
-		window.onFirebugResize = null;
-		window.console = null;
-	});
-}
-
-})();
-
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/infoIcon.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/infoIcon.png
deleted file mode 100644
index da1e533..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/infoIcon.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/tab_lft_norm.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/tab_lft_norm.png
deleted file mode 100644
index f0479a2..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/tab_lft_norm.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/tab_lft_over.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/tab_lft_over.png
deleted file mode 100644
index 2f36cca..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/tab_lft_over.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/tab_rgt_norm.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/tab_rgt_norm.png
deleted file mode 100644
index 464af3e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/tab_rgt_norm.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/tab_rgt_over.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/tab_rgt_over.png
deleted file mode 100644
index 2bc2cd0..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/tab_rgt_over.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/warningIcon.png b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/warningIcon.png
deleted file mode 100644
index de51084..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/_firebug/warningIcon.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/back.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/back.js
deleted file mode 100644
index 9f3d1a7..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/back.js
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dojo.back"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.back"] = true;
-dojo.provide("dojo.back");
-
-/*=====
-dojo.back = {
-	// summary: Browser history management resources
-}
-=====*/
-
-
-(function(){ 
-	var back = dojo.back;
-
-	// everyone deals with encoding the hash slightly differently
-
-	function getHash(){ 
-		var h = window.location.hash;
-		if(h.charAt(0) == "#"){ h = h.substring(1); }
-		return dojo.isMozilla ? h : decodeURIComponent(h); 
-	}
-	
-	function setHash(h){
-		if(!h){ h = ""; }
-		window.location.hash = encodeURIComponent(h);
-		historyCounter = history.length;
-	}
-	
-	// if we're in the test for these methods, expose them on dojo.back. ok'd with alex.
-	if(dojo.exists("tests.back-hash")){
-		back.getHash = getHash;
-		back.setHash = setHash;		
-	}
-	
-	var initialHref = (typeof(window) !== "undefined") ? window.location.href : "";
-	var initialHash = (typeof(window) !== "undefined") ? getHash() : "";
-	var initialState = null;
-
-	var locationTimer = null;
-	var bookmarkAnchor = null;
-	var historyIframe = null;
-	var forwardStack = [];
-	var historyStack = [];
-	var moveForward = false;
-	var changingUrl = false;
-	var historyCounter;
-
-	function handleBackButton(){
-		//summary: private method. Do not call this directly.
-
-		//The "current" page is always at the top of the history stack.
-		var current = historyStack.pop();
-		if(!current){ return; }
-		var last = historyStack[historyStack.length-1];
-		if(!last && historyStack.length == 0){
-			last = initialState;
-		}
-		if(last){
-			if(last.kwArgs["back"]){
-				last.kwArgs["back"]();
-			}else if(last.kwArgs["backButton"]){
-				last.kwArgs["backButton"]();
-			}else if(last.kwArgs["handle"]){
-				last.kwArgs.handle("back");
-			}
-		}
-		forwardStack.push(current);
-	}
-
-	back.goBack = handleBackButton;
-
-	function handleForwardButton(){
-		//summary: private method. Do not call this directly.
-		var last = forwardStack.pop();
-		if(!last){ return; }
-		if(last.kwArgs["forward"]){
-			last.kwArgs.forward();
-		}else if(last.kwArgs["forwardButton"]){
-			last.kwArgs.forwardButton();
-		}else if(last.kwArgs["handle"]){
-			last.kwArgs.handle("forward");
-		}
-		historyStack.push(last);
-	}
-
-	back.goForward = handleForwardButton;
-
-	function createState(url, args, hash){
-		//summary: private method. Do not call this directly.
-		return {"url": url, "kwArgs": args, "urlHash": hash};	//Object
-	}
-
-	function getUrlQuery(url){
-		//summary: private method. Do not call this directly.
-		var segments = url.split("?");
-		if(segments.length < 2){
-			return null; //null
-		}
-		else{
-			return segments[1]; //String
-		}
-	}
-	
-	function loadIframeHistory(){
-		//summary: private method. Do not call this directly.
-		var url = (dojo.config["dojoIframeHistoryUrl"] || dojo.moduleUrl("dojo", "resources/iframe_history.html")) + "?" + (new Date()).getTime();
-		moveForward = true;
-        if(historyIframe){
-		    dojo.isWebKit ? historyIframe.location = url : window.frames[historyIframe.name].location = url;
-        }else{
-            //console.warn("dojo.back: Not initialised. You need to call dojo.back.init() from a <script> block that lives inside the <body> tag.");
-        }
-		return url; //String
-	}
-
-	function checkLocation(){
-		if(!changingUrl){
-			var hsl = historyStack.length;
-			
-			var hash = getHash();
-
-			if((hash === initialHash||window.location.href == initialHref)&&(hsl == 1)){
-				// FIXME: could this ever be a forward button?
-				// we can't clear it because we still need to check for forwards. Ugg.
-				// clearInterval(this.locationTimer);
-				handleBackButton();
-				return;
-			}
-			
-			// first check to see if we could have gone forward. We always halt on
-			// a no-hash item.
-			if(forwardStack.length > 0){
-				if(forwardStack[forwardStack.length-1].urlHash === hash){
-					handleForwardButton();
-					return;
-				}
-			}
-	
-			// ok, that didn't work, try someplace back in the history stack
-			if((hsl >= 2)&&(historyStack[hsl-2])){
-				if(historyStack[hsl-2].urlHash === hash){
-					handleBackButton();
-					return;
-				}
-			}
-			
-			if(dojo.isSafari && dojo.isSafari < 3){
-				var hisLen = history.length;
-				if(hisLen > historyCounter) handleForwardButton();
-				else if(hisLen < historyCounter) handleBackButton();
-			  historyCounter = hisLen;
-			}
-		}
-	};
-	
-	back.init = function(){
-		//summary: Initializes the undo stack. This must be called from a <script> 
-		//         block that lives inside the <body> tag to prevent bugs on IE.
-		// description:
-		// 		Only call this method before the page's DOM is finished loading. Otherwise
-		// 		it will not work. Be careful with xdomain loading or djConfig.debugAtAllCosts scenarios,
-		// 		in order for this method to work, dojo.back will need to be part of a build layer.
-		if(dojo.byId("dj_history")){ return; } // prevent reinit
-		var src = dojo.config["dojoIframeHistoryUrl"] || dojo.moduleUrl("dojo", "resources/iframe_history.html");
-		if (dojo._postLoad) {
-			console.error("dojo.back.init() must be called before the DOM has loaded. "
-			            + "If using xdomain loading or djConfig.debugAtAllCosts, include dojo.back "
-			            + "in a build layer.");
-		} else {
-			document.write('<iframe style="border:0;width:1px;height:1px;position:absolute;visibility:hidden;bottom:0;right:0;" name="dj_history" id="dj_history" src="' + src + '"></iframe>');
-		}
-	};
-
-	back.setInitialState = function(/*Object*/args){
-		//summary: 
-		//		Sets the state object and back callback for the very first page
-		//		that is loaded.
-		//description:
-		//		It is recommended that you call this method as part of an event
-		//		listener that is registered via dojo.addOnLoad().
-		//args: Object
-		//		See the addToHistory() function for the list of valid args properties.
-		initialState = createState(initialHref, args, initialHash);
-	};
-
-	//FIXME: Make these doc comments not be awful. At least they're not wrong.
-	//FIXME: Would like to support arbitrary back/forward jumps. Have to rework iframeLoaded among other things.
-	//FIXME: is there a slight race condition in moz using change URL with the timer check and when
-	//       the hash gets set? I think I have seen a back/forward call in quick succession, but not consistent.
-
-	
-	/*=====
-	dojo.__backArgs = function(kwArgs){
-		// back: Function?
-		//		A function to be called when this state is reached via the user
-		//		clicking the back button.
-		//	forward: Function?
-		//		Upon return to this state from the "back, forward" combination
-		//		of navigation steps, this function will be called. Somewhat
-		//		analgous to the semantic of an "onRedo" event handler.
-		//	changeUrl: Boolean?|String?
-		//		Boolean indicating whether or not to create a unique hash for
-		//		this state. If a string is passed instead, it is used as the
-		//		hash.
-	}
-	=====*/
-
-	back.addToHistory = function(/*dojo.__backArgs*/ args){
-		//	summary: 
-		//		adds a state object (args) to the history list. 
-		//	description:
-		//		To support getting back button notifications, the object
-		//		argument should implement a function called either "back",
-		//		"backButton", or "handle". The string "back" will be passed as
-		//		the first and only argument to this callback.
-		//	
-		//		To support getting forward button notifications, the object
-		//		argument should implement a function called either "forward",
-		//		"forwardButton", or "handle". The string "forward" will be
-		//		passed as the first and only argument to this callback.
-		//
-		//		If you want the browser location string to change, define "changeUrl" on the object. If the
-		//		value of "changeUrl" is true, then a unique number will be appended to the URL as a fragment
-		//		identifier (http://some.domain.com/path#uniquenumber). If it is any other value that does
-		//		not evaluate to false, that value will be used as the fragment identifier. For example,
-		//		if changeUrl: 'page1', then the URL will look like: http://some.domain.com/path#page1
-		//
-	 	//	example:
-		//		|	dojo.back.addToHistory({
-		//		|		back: function(){ console.log('back pressed'); },
-		//		|		forward: function(){ console.log('forward pressed'); },
-		//		|		changeUrl: true
-		//		|	});
-
-		//	BROWSER NOTES:
-		//  Safari 1.2: 
-		//	back button "works" fine, however it's not possible to actually
-		//	DETECT that you've moved backwards by inspecting window.location.
-		//	Unless there is some other means of locating.
-		//	FIXME: perhaps we can poll on history.length?
-		//	Safari 2.0.3+ (and probably 1.3.2+):
-		//	works fine, except when changeUrl is used. When changeUrl is used,
-		//	Safari jumps all the way back to whatever page was shown before
-		//	the page that uses dojo.undo.browser support.
-		//	IE 5.5 SP2:
-		//	back button behavior is macro. It does not move back to the
-		//	previous hash value, but to the last full page load. This suggests
-		//	that the iframe is the correct way to capture the back button in
-		//	these cases.
-		//	Don't test this page using local disk for MSIE. MSIE will not create 
-		//	a history list for iframe_history.html if served from a file: URL. 
-		//	The XML served back from the XHR tests will also not be properly 
-		//	created if served from local disk. Serve the test pages from a web 
-		//	server to test in that browser.
-		//	IE 6.0:
-		//	same behavior as IE 5.5 SP2
-		//	Firefox 1.0+:
-		//	the back button will return us to the previous hash on the same
-		//	page, thereby not requiring an iframe hack, although we do then
-		//	need to run a timer to detect inter-page movement.
-
-		//If addToHistory is called, then that means we prune the
-		//forward stack -- the user went back, then wanted to
-		//start a new forward path.
-		forwardStack = []; 
-
-		var hash = null;
-		var url = null;
-		if(!historyIframe){
-			if(dojo.config["useXDomain"] && !dojo.config["dojoIframeHistoryUrl"]){
-				console.warn("dojo.back: When using cross-domain Dojo builds,"
-					+ " please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"
-					+ " to the path on your domain to iframe_history.html");
-			}
-			historyIframe = window.frames["dj_history"];
-		}
-		if(!bookmarkAnchor){
-			bookmarkAnchor = dojo.create("a", {style: {display: "none"}}, dojo.body());
-		}
-		if(args["changeUrl"]){
-			hash = ""+ ((args["changeUrl"]!==true) ? args["changeUrl"] : (new Date()).getTime());
-			
-			//If the current hash matches the new one, just replace the history object with
-			//this new one. It doesn't make sense to track different state objects for the same
-			//logical URL. This matches the browser behavior of only putting in one history
-			//item no matter how many times you click on the same #hash link, at least in Firefox
-			//and Safari, and there is no reliable way in those browsers to know if a #hash link
-			//has been clicked on multiple times. So making this the standard behavior in all browsers
-			//so that dojo.back's behavior is the same in all browsers.
-			if(historyStack.length == 0 && initialState.urlHash == hash){
-				initialState = createState(url, args, hash);
-				return;
-			}else if(historyStack.length > 0 && historyStack[historyStack.length - 1].urlHash == hash){
-				historyStack[historyStack.length - 1] = createState(url, args, hash);
-				return;
-			}
-
-			changingUrl = true;
-			setTimeout(function() { 
-					setHash(hash); 
-					changingUrl = false; 					
-				}, 1);
-			bookmarkAnchor.href = hash;
-			
-			if(dojo.isIE){
-				url = loadIframeHistory();
-
-				var oldCB = args["back"]||args["backButton"]||args["handle"];
-
-				//The function takes handleName as a parameter, in case the
-				//callback we are overriding was "handle". In that case,
-				//we will need to pass the handle name to handle.
-				var tcb = function(handleName){
-					if(getHash() != ""){
-						setTimeout(function() { setHash(hash); }, 1);
-					}
-					//Use apply to set "this" to args, and to try to avoid memory leaks.
-					oldCB.apply(this, [handleName]);
-				};
-		
-				//Set interceptor function in the right place.
-				if(args["back"]){
-					args.back = tcb;
-				}else if(args["backButton"]){
-					args.backButton = tcb;
-				}else if(args["handle"]){
-					args.handle = tcb;
-				}
-		
-				var oldFW = args["forward"]||args["forwardButton"]||args["handle"];
-		
-				//The function takes handleName as a parameter, in case the
-				//callback we are overriding was "handle". In that case,
-				//we will need to pass the handle name to handle.
-				var tfw = function(handleName){
-					if(getHash() != ""){
-						setHash(hash);
-					}
-					if(oldFW){ // we might not actually have one
-						//Use apply to set "this" to args, and to try to avoid memory leaks.
-						oldFW.apply(this, [handleName]);
-					}
-				};
-
-				//Set interceptor function in the right place.
-				if(args["forward"]){
-					args.forward = tfw;
-				}else if(args["forwardButton"]){
-					args.forwardButton = tfw;
-				}else if(args["handle"]){
-					args.handle = tfw;
-				}
-
-			}else if(!dojo.isIE){
-				// start the timer
-				if(!locationTimer){
-					locationTimer = setInterval(checkLocation, 200);
-				}
-				
-			}
-		}else{
-			url = loadIframeHistory();
-		}
-
-		historyStack.push(createState(url, args, hash));
-	};
-
-	back._iframeLoaded = function(evt, ifrLoc){
-		//summary: 
-		//		private method. Do not call this directly.
-		var query = getUrlQuery(ifrLoc.href);
-		if(query == null){ 
-			// alert("iframeLoaded");
-			// we hit the end of the history, so we should go back
-			if(historyStack.length == 1){
-				handleBackButton();
-			}
-			return;
-		}
-		if(moveForward){
-			// we were expecting it, so it's not either a forward or backward movement
-			moveForward = false;
-			return;
-		}
-	
-		//Check the back stack first, since it is more likely.
-		//Note that only one step back or forward is supported.
-		if(historyStack.length >= 2 && query == getUrlQuery(historyStack[historyStack.length-2].url)){
-			handleBackButton();
-		}else if(forwardStack.length > 0 && query == getUrlQuery(forwardStack[forwardStack.length-1].url)){
-			handleForwardButton();
-		}
-	};
- })();
-
-}
diff --git a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/behavior.js b/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/behavior.js
deleted file mode 100644
index 1278d8e..0000000
--- a/org.eclipse.virgo.apps.admin.web/src/main/webapp/js/dojo/behavior.js
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The D