Reflect rwt and related version change
diff --git a/bundles/org.eclipse.rap.draw2d.compatibility/META-INF/MANIFEST.MF b/bundles/org.eclipse.rap.draw2d.compatibility/META-INF/MANIFEST.MF
index 4ac3aad..6500f08 100644
--- a/bundles/org.eclipse.rap.draw2d.compatibility/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.rap.draw2d.compatibility/META-INF/MANIFEST.MF
@@ -13,5 +13,5 @@
  org.eclipse.swt.printing,
  org.eclipse.swt.widgets,
  org.eclipse.ui.presentations
-Require-Bundle: org.eclipse.rap.rwt;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.rap.jface;bundle-version="[2.0.0,3.0.0)"
+Require-Bundle: org.eclipse.rap.rwt;bundle-version="[2.0.0,4.0.0)",
+ org.eclipse.rap.jface;bundle-version="[2.0.0,4.0.0)"
diff --git a/bundles/org.eclipse.rap.draw2d/META-INF/MANIFEST.MF b/bundles/org.eclipse.rap.draw2d/META-INF/MANIFEST.MF
index 2b9b481..a212bdd 100644
--- a/bundles/org.eclipse.rap.draw2d/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.rap.draw2d/META-INF/MANIFEST.MF
@@ -16,8 +16,8 @@
  org.eclipse.draw2d.widgets
 Require-Bundle: org.eclipse.core.jobs;bundle-version="3.5.100",
  org.eclipse.core.runtime;bundle-version="3.6.100",
- org.eclipse.rap.rwt;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.rap.ui;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.rap.rwt;bundle-version="[2.0.0,4.0.0)",
+ org.eclipse.rap.ui;bundle-version="[2.0.0,4.0.0)",
  org.eclipse.rap.draw2d.compatibility;bundle-version="0.1.0"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/bundles/org.eclipse.rap.gef.demo/META-INF/MANIFEST.MF b/bundles/org.eclipse.rap.gef.demo/META-INF/MANIFEST.MF
index dc604a1..0b984ae 100644
--- a/bundles/org.eclipse.rap.gef.demo/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.rap.gef.demo/META-INF/MANIFEST.MF
@@ -3,11 +3,11 @@
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.rap.gef.demo;singleton:=true
 Bundle-Version: 0.1.0.qualifier
-Require-Bundle: org.eclipse.rap.ui;bundle-version="[2.0.0,3.0.0)",
+Require-Bundle: org.eclipse.rap.ui;bundle-version="[2.0.0,4.0.0)",
  org.eclipse.rap.draw2d;bundle-version="0.1.0",
  org.eclipse.rap.draw2d.compatibility;bundle-version="0.1.0",
  org.eclipse.rap.gef;bundle-version="0.1.0",
- org.eclipse.rap.ui.views;bundle-version="[2.1.0,3.0.0)"
+ org.eclipse.rap.ui.views;bundle-version="[2.1.0,4.0.0)"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Import-Package: javax.servlet;version="2.4.0",
  javax.servlet.http;version="2.4.0"
diff --git a/bundles/org.eclipse.rap.gef.demo/RAP GEF Demo.launch b/bundles/org.eclipse.rap.gef.demo/RAP GEF Demo.launch
index b8d305f..6e8498b 100644
--- a/bundles/org.eclipse.rap.gef.demo/RAP GEF Demo.launch
+++ b/bundles/org.eclipse.rap.gef.demo/RAP GEF Demo.launch
@@ -18,7 +18,7 @@
 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -console -consolelog"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true -Dosgi.noShutdown=true"/>
-<stringAttribute key="org.eclipse.rap.launch.browserMode" value="INTERNAL"/>
+<stringAttribute key="org.eclipse.rap.launch.browserMode" value="EXTERNAL"/>
 <stringAttribute key="org.eclipse.rap.launch.contextpath" value="/"/>
 <stringAttribute key="org.eclipse.rap.launch.dataLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.rap.tools.launch/RAPGEFDemo"/>
 <booleanAttribute key="org.eclipse.rap.launch.developmentMode" value="true"/>
diff --git a/bundles/org.eclipse.rap.gef.demo/src/org/eclipse/rap/gef/demo/EditorView.java b/bundles/org.eclipse.rap.gef.demo/src/org/eclipse/rap/gef/demo/EditorView.java
index 3a0f363..7c01d8d 100644
--- a/bundles/org.eclipse.rap.gef.demo/src/org/eclipse/rap/gef/demo/EditorView.java
+++ b/bundles/org.eclipse.rap.gef.demo/src/org/eclipse/rap/gef/demo/EditorView.java
@@ -22,7 +22,7 @@
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.rap.rwt.lifecycle.UICallBack;
+import org.eclipse.rap.rwt.service.ServerPushSession;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IActionBars;
@@ -61,6 +61,7 @@
 public class EditorView extends ViewPart {
 
   protected EditorPart editor;
+  private ServerPushSession serverPushSession;
   
   /**
    * returns the editor wrapped by this view
@@ -78,7 +79,8 @@
   }
   
   public void createPartControl(Composite parent) {
-    UICallBack.activate(getSite().getId()+getViewSite().getSecondaryId());
+    serverPushSession = new ServerPushSession();
+    serverPushSession.start();
     if (editor != null) 
       editor.createPartControl(parent); 
   }
@@ -92,7 +94,9 @@
   
   public void dispose() {
     if (editor != null) deactivateOutlineHooks();
-    UICallBack.deactivate(getSite().getId()+getViewSite().getSecondaryId());
+    if(serverPushSession!=null){
+      serverPushSession.stop();
+    }
     super.dispose();
   }
   
diff --git a/bundles/org.eclipse.rap.gef/META-INF/MANIFEST.MF b/bundles/org.eclipse.rap.gef/META-INF/MANIFEST.MF
index cbb806b..e826ca1 100644
--- a/bundles/org.eclipse.rap.gef/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.rap.gef/META-INF/MANIFEST.MF
@@ -39,9 +39,9 @@
 Require-Bundle: org.eclipse.rap.draw2d;bundle-version="0.1.0",
  org.eclipse.rap.draw2d.compatibility;bundle-version="0.1.0",
  org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.rap.jface;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.rap.ui.workbench;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.rap.ui.views;bundle-version="[2.1.0,3.0.0)"
+ org.eclipse.rap.jface;bundle-version="[2.0.0,4.0.0)",
+ org.eclipse.rap.ui.workbench;bundle-version="[2.0.0,4.0.0)",
+ org.eclipse.rap.ui.views;bundle-version="[2.1.0,4.0.0)"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 
diff --git a/bundles/org.eclipse.rap.zest.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.rap.zest.core/META-INF/MANIFEST.MF
index 21c573b..fb035c4 100644
--- a/bundles/org.eclipse.rap.zest.core/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.rap.zest.core/META-INF/MANIFEST.MF
@@ -6,7 +6,7 @@
 Bundle-Localization: plugin
 Bundle-Version: 0.1.0.qualifier
 Require-Bundle: org.eclipse.rap.zest.layouts;bundle-version="0.1.0",
- org.eclipse.rap.ui;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.rap.ui;bundle-version="[2.0.0,4.0.0)",
  org.eclipse.rap.draw2d;bundle-version="0.1.0";visibility:=reexport,
  org.eclipse.rap.draw2d.compatibility;bundle-version="0.1.0"
 Eclipse-LazyStart: false
diff --git a/bundles/org.eclipse.rap.zest.layouts/META-INF/MANIFEST.MF b/bundles/org.eclipse.rap.zest.layouts/META-INF/MANIFEST.MF
index c52120d..a26509d 100644
--- a/bundles/org.eclipse.rap.zest.layouts/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.rap.zest.layouts/META-INF/MANIFEST.MF
@@ -13,8 +13,8 @@
  org.eclipse.zest.layouts.exampleStructures,
  org.eclipse.zest.layouts.exampleUses,
  org.eclipse.zest.layouts.progress
-Require-Bundle: org.eclipse.rap.rwt;bundle-version="[2.0.0,3.0.0)",
+Require-Bundle: org.eclipse.rap.rwt;bundle-version="[2.0.0,4.0.0)",
  org.eclipse.core.runtime,
- org.eclipse.rap.jface;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.rap.jface;bundle-version="[2.0.0,4.0.0)",
  org.eclipse.rap.draw2d;bundle-version="0.1.0"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/tests/org.eclipse.draw2d.test/META-INF/MANIFEST.MF b/tests/org.eclipse.draw2d.test/META-INF/MANIFEST.MF
index e57f8c6..3690f58 100644
--- a/tests/org.eclipse.draw2d.test/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.draw2d.test/META-INF/MANIFEST.MF
@@ -8,9 +8,9 @@
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",

  org.junit,

  org.eclipse.rap.draw2d;bundle-version="0.1.0",

- org.eclipse.rap.rwt;bundle-version="[2.1.0,3.0.0)",

+ org.eclipse.rap.rwt;bundle-version="[2.1.0,4.0.0)",

  org.eclipse.rap.draw2d.compatibility;bundle-version="0.1.0",

- org.eclipse.rap.jface;bundle-version="[2.1.0,3.0.0)",

- org.eclipse.rap.rwt.testfixture;bundle-version="[2.1.0,3.0.0)"

+ org.eclipse.rap.jface;bundle-version="[2.1.0,4.0.0)",

+ org.eclipse.rap.rwt.testfixture;bundle-version="[2.1.0,4.0.0)"

 Bundle-RequiredExecutionEnvironment: J2SE-1.4

 

diff --git a/tests/org.eclipse.draw2d.test/src/org/eclipse/draw2d/test/ImageUtilitiesTest.java b/tests/org.eclipse.draw2d.test/src/org/eclipse/draw2d/test/ImageUtilitiesTest.java
index 8884557..12ea427 100644
--- a/tests/org.eclipse.draw2d.test/src/org/eclipse/draw2d/test/ImageUtilitiesTest.java
+++ b/tests/org.eclipse.draw2d.test/src/org/eclipse/draw2d/test/ImageUtilitiesTest.java
@@ -12,7 +12,6 @@
 
 import org.eclipse.draw2d.ImageUtilities;
 import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.rap.rwt.internal.application.ApplicationContextHelper;
 import org.eclipse.swt.graphics.Image;
 
 /**
@@ -53,11 +52,6 @@
 		}
 	}
 
-	protected void setUp() throws Exception {
-		super.setUp();
-		ApplicationContextHelper.fakeResourceManager(null);
-	}
-
 	public void testRotatingImagesWithDifferentDepths() {
 		Image result1 = null, result2 = null, result3 = null, result4 = null;
 		Image img1 = ImageDescriptor.createFromFile(getClass(),
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.log b/tests/org.eclipse.draw2d.test/workspace/.metadata/.log
deleted file mode 100644
index 9587288..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.log
+++ /dev/null
@@ -1,1193 +0,0 @@
-!SESSION 2013-11-29 20:55:41.120 -----------------------------------------------
-eclipse.buildId=unknown
-java.version=1.7.0_25
-java.vendor=Oracle Corporation
-BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US
-Framework arguments:  -version 3 -port 43730 -testLoaderClass org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader -loaderpluginname org.eclipse.rap.junit.runtime -testNameFile /tmp/testNames8627090809047336625.txt -testpluginname org.eclipse.rap.draw2d.test
-Command-line arguments:  -dev file:/home/amergey/workspace_rapgef/.metadata/.plugins/org.eclipse.pde.core/pde-junit/dev.properties -os linux -ws gtk -arch x86_64 -consoleLog -console -version 3 -port 43730 -testLoaderClass org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader -loaderpluginname org.eclipse.rap.junit.runtime -testNameFile /tmp/testNames8627090809047336625.txt -testpluginname org.eclipse.rap.draw2d.test
-
-!ENTRY org.eclipse.zest.layouts 4 0 2013-11-29 20:55:43.877
-!MESSAGE FrameworkEvent ERROR
-!STACK 0
-org.osgi.framework.BundleException: The bundle "org.eclipse.zest.layouts_1.1.0.qualifier [51]" could not be resolved. Reason: Missing Constraint: Require-Bundle: org.eclipse.swt; bundle-version="0.0.0"
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolverError(AbstractBundle.java:1332)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolutionFailureException(AbstractBundle.java:1316)
-	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:323)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
-	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
-
-!ENTRY org.eclipse.rap.rwt.osgi 4 0 2013-11-29 20:55:45.634
-!MESSAGE Unable to start RWT application.
-!STACK 0
-java.lang.RuntimeException: org.osgi.service.http.NamespaceException: The alias '/rwt-resources' is already in use.
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.registerResourceDirectory(ApplicationReferenceImpl.java:194)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.startRWTApplication(ApplicationReferenceImpl.java:79)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.start(ApplicationReferenceImpl.java:63)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.doLaunch(ApplicationLauncherImpl.java:105)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launch(ApplicationLauncherImpl.java:87)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launch(ApplicationLauncherImpl.java:164)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launchAtHttpService(ApplicationLauncherImpl.java:141)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.addHttpService(ApplicationLauncherImpl.java:49)
-	at org.eclipse.rap.rwt.osgi.internal.HttpTracker.addingService(HttpTracker.java:30)
-	at org.eclipse.rap.rwt.osgi.internal.HttpTracker.addingService(HttpTracker.java:1)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:932)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
-	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
-	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:894)
-	at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:107)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
-	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819)
-	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771)
-	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130)
-	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433)
-	at org.eclipse.equinox.http.servlet.internal.Activator.registerHttpService(Activator.java:81)
-	at org.eclipse.equinox.http.servlet.internal.Activator.addProxyServlet(Activator.java:60)
-	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.init(ProxyServlet.java:40)
-	at org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet.init(HttpServerManager.java:363)
-	at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:519)
-	at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:331)
-	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
-	at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:742)
-	at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265)
-	at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:710)
-	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
-	at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)
-	at org.eclipse.jetty.server.Server.doStart(Server.java:280)
-	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
-	at org.eclipse.equinox.http.jetty.internal.HttpServerManager.updated(HttpServerManager.java:113)
-	at org.eclipse.equinox.http.jetty.internal.Activator.start(Activator.java:62)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
-	at java.security.AccessController.doPrivileged(Native Method)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
-	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
-	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
-Caused by: org.osgi.service.http.NamespaceException: The alias '/rwt-resources' is already in use.
-	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerServlet(ProxyServlet.java:169)
-	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerResources(ProxyServlet.java:199)
-	at org.eclipse.equinox.http.servlet.internal.HttpServiceImpl.registerResources(HttpServiceImpl.java:78)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.registerResourceDirectory(ApplicationReferenceImpl.java:190)
-	... 54 more
-
-!ENTRY org.eclipse.rap.rwt.osgi 4 0 2013-11-29 20:55:46.363
-!MESSAGE Unable to start RWT application.
-!STACK 0
-java.lang.RuntimeException: org.osgi.service.http.NamespaceException: The alias '/rwt-resources' is already in use.
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.registerResourceDirectory(ApplicationReferenceImpl.java:194)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.startRWTApplication(ApplicationReferenceImpl.java:79)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.start(ApplicationReferenceImpl.java:63)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.doLaunch(ApplicationLauncherImpl.java:105)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launch(ApplicationLauncherImpl.java:87)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launch(ApplicationLauncherImpl.java:164)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launchWithConfiguration(ApplicationLauncherImpl.java:151)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.addConfiguration(ApplicationLauncherImpl.java:66)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationConfigurationTracker.addingService(ApplicationConfigurationTracker.java:35)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationConfigurationTracker.addingService(ApplicationConfigurationTracker.java:1)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:932)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
-	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
-	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:894)
-	at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:107)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
-	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819)
-	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771)
-	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130)
-	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433)
-	at org.eclipse.equinox.internal.ds.InstanceProcess.registerService(InstanceProcess.java:536)
-	at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:260)
-	at org.eclipse.equinox.internal.ds.Resolver.buildNewlySatisfied(Resolver.java:473)
-	at org.eclipse.equinox.internal.ds.Resolver.enableComponents(Resolver.java:217)
-	at org.eclipse.equinox.internal.ds.SCRManager.performWork(SCRManager.java:816)
-	at org.eclipse.equinox.internal.ds.SCRManager$QueuedJob.dispatch(SCRManager.java:783)
-	at org.eclipse.equinox.internal.ds.WorkThread.run(WorkThread.java:89)
-	at org.eclipse.equinox.internal.util.impl.tpt.threadpool.Executor.run(Executor.java:70)
-Caused by: org.osgi.service.http.NamespaceException: The alias '/rwt-resources' is already in use.
-	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerServlet(ProxyServlet.java:169)
-	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerResources(ProxyServlet.java:199)
-	at org.eclipse.equinox.http.servlet.internal.HttpServiceImpl.registerResources(HttpServiceImpl.java:78)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.registerResourceDirectory(ApplicationReferenceImpl.java:190)
-	... 31 more
-
-!ENTRY org.eclipse.zest.tests 4 0 2013-11-29 20:55:46.396
-!MESSAGE FrameworkEvent ERROR
-!STACK 0
-org.osgi.framework.BundleException: The bundle "org.eclipse.zest.tests_1.1.0.qualifier [109]" could not be resolved. Reason: Missing Constraint: Require-Bundle: org.eclipse.ui; bundle-version="0.0.0"
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolverError(AbstractBundle.java:1332)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolutionFailureException(AbstractBundle.java:1316)
-	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:323)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
-	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
-
-!ENTRY org.eclipse.gef.test 4 0 2013-11-29 20:55:46.401
-!MESSAGE FrameworkEvent ERROR
-!STACK 0
-org.osgi.framework.BundleException: The bundle "org.eclipse.gef.test_3.8.1.qualifier [111]" could not be resolved. Reason: Missing Constraint: Require-Bundle: org.eclipse.jface; bundle-version="[3.2.0,4.0.0)"
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolverError(AbstractBundle.java:1332)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolutionFailureException(AbstractBundle.java:1316)
-	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:323)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
-	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
-
-!ENTRY org.eclipse.zest.core 4 0 2013-11-29 20:55:46.406
-!MESSAGE FrameworkEvent ERROR
-!STACK 0
-org.osgi.framework.BundleException: The bundle "org.eclipse.zest.core_1.5.0.qualifier [119]" could not be resolved. Reason: Missing Constraint: Require-Bundle: org.eclipse.zest.layouts; bundle-version="0.0.0"
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolverError(AbstractBundle.java:1332)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolutionFailureException(AbstractBundle.java:1316)
-	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:323)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
-	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
-
-!ENTRY org.eclipse.osgi 4 0 2013-11-29 20:55:46.436
-!MESSAGE Bundle initial@reference:file:../../../../../git/org.eclipse.gef/org.eclipse.zest.layouts/ was not resolved.
-
-!ENTRY org.eclipse.osgi 4 0 2013-11-29 20:55:46.437
-!MESSAGE Bundle initial@reference:file:../../../../../git/org.eclipse.gef/org.eclipse.zest.tests/ was not resolved.
-
-!ENTRY org.eclipse.osgi 4 0 2013-11-29 20:55:46.438
-!MESSAGE Bundle initial@reference:file:../../../../../git/org.eclipse.gef/org.eclipse.gef.test/ was not resolved.
-
-!ENTRY org.eclipse.osgi 4 0 2013-11-29 20:55:46.439
-!MESSAGE Bundle initial@reference:file:../../../../../git/org.eclipse.gef/org.eclipse.zest.core/ was not resolved.
-
-!ENTRY org.eclipse.osgi 2 0 2013-11-29 20:55:46.513
-!MESSAGE One or more bundles are not resolved because the following root constraints are not resolved:
-!SUBENTRY 1 org.eclipse.osgi 2 0 2013-11-29 20:55:46.514
-!MESSAGE Bundle initial@reference:file:../../../../../git/org.eclipse.gef/org.eclipse.zest.layouts/ was not resolved.
-!SUBENTRY 2 org.eclipse.zest.layouts 2 0 2013-11-29 20:55:46.515
-!MESSAGE Missing required bundle org.eclipse.swt_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.layouts 2 0 2013-11-29 20:55:46.516
-!MESSAGE Missing required bundle org.eclipse.draw2d_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.layouts 2 0 2013-11-29 20:55:46.516
-!MESSAGE Missing required bundle org.eclipse.jface_0.0.0.
-!SUBENTRY 1 org.eclipse.osgi 2 0 2013-11-29 20:55:46.517
-!MESSAGE Bundle initial@reference:file:../../../../../git/org.eclipse.gef/org.eclipse.gef.test/ was not resolved.
-!SUBENTRY 2 org.eclipse.gef.test 2 0 2013-11-29 20:55:46.517
-!MESSAGE Missing required bundle org.eclipse.draw2d_[3.8.0,4.0.0).
-!SUBENTRY 2 org.eclipse.gef.test 2 0 2013-11-29 20:55:46.517
-!MESSAGE Missing required bundle org.eclipse.jface_[3.2.0,4.0.0).
-!SUBENTRY 2 org.eclipse.gef.test 2 0 2013-11-29 20:55:46.517
-!MESSAGE Missing required bundle org.eclipse.gef_[3.8.0,4.0.0).
-!SUBENTRY 2 org.eclipse.gef.test 2 0 2013-11-29 20:55:46.518
-!MESSAGE Missing required bundle org.eclipse.ui_[3.2.0,4.0.0).
-!SUBENTRY 2 org.eclipse.gef.test 2 0 2013-11-29 20:55:46.518
-!MESSAGE Missing required bundle org.eclipse.core.resources_[3.2.0,4.0.0).
-!SUBENTRY 1 org.eclipse.osgi 2 0 2013-11-29 20:55:46.518
-!MESSAGE Bundle initial@reference:file:../../../../../git/org.eclipse.gef/org.eclipse.zest.core/ was not resolved.
-!SUBENTRY 2 org.eclipse.zest.core 2 0 2013-11-29 20:55:46.518
-!MESSAGE Missing required bundle org.eclipse.ui_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.core 2 0 2013-11-29 20:55:46.518
-!MESSAGE Missing required bundle org.eclipse.draw2d_0.0.0.
-!SUBENTRY 1 org.eclipse.osgi 2 0 2013-11-29 20:55:46.519
-!MESSAGE Bundle initial@reference:file:../../../../../git/org.eclipse.gef/org.eclipse.zest.tests/ was not resolved.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 20:55:46.519
-!MESSAGE Missing required bundle org.eclipse.ui_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 20:55:46.519
-!MESSAGE Missing required bundle org.eclipse.jdt.ui_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 20:55:46.520
-!MESSAGE Missing required bundle org.eclipse.jdt_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 20:55:46.520
-!MESSAGE Missing required bundle org.eclipse.pde.ui_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 20:55:46.520
-!MESSAGE Missing required bundle org.eclipse.jdt.core_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 20:55:46.520
-!MESSAGE Missing required bundle org.eclipse.core.resources_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 20:55:46.521
-!MESSAGE Missing required bundle org.eclipse.pde_0.0.0.
-
-!ENTRY org.eclipse.osgi 2 0 2013-11-29 20:55:46.527
-!MESSAGE The following is a complete list of bundles which are not resolved, see the prior log entry for the root cause if it exists:
-!SUBENTRY 1 org.eclipse.osgi 2 0 2013-11-29 20:55:46.528
-!MESSAGE Bundle org.eclipse.zest.layouts_1.1.0.qualifier [51] was not resolved.
-!SUBENTRY 2 org.eclipse.zest.layouts 2 0 2013-11-29 20:55:46.528
-!MESSAGE Missing required bundle org.eclipse.swt_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.layouts 2 0 2013-11-29 20:55:46.528
-!MESSAGE Missing required bundle org.eclipse.jface_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.layouts 2 0 2013-11-29 20:55:46.528
-!MESSAGE Missing required bundle org.eclipse.draw2d_0.0.0.
-!SUBENTRY 1 org.eclipse.osgi 2 0 2013-11-29 20:55:46.529
-!MESSAGE Bundle org.eclipse.zest.tests_1.1.0.qualifier [109] was not resolved.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 20:55:46.529
-!MESSAGE Missing required bundle org.eclipse.ui_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 20:55:46.529
-!MESSAGE Missing required bundle org.eclipse.pde_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 20:55:46.529
-!MESSAGE Missing required bundle org.eclipse.pde.ui_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 20:55:46.530
-!MESSAGE Missing required bundle org.eclipse.jdt_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 20:55:46.530
-!MESSAGE Missing required bundle org.eclipse.jdt.ui_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 20:55:46.530
-!MESSAGE Missing required bundle org.eclipse.core.resources_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 20:55:46.530
-!MESSAGE Missing required bundle org.eclipse.jdt.core_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 20:55:46.531
-!MESSAGE Missing required bundle org.eclipse.zest.core_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 20:55:46.531
-!MESSAGE Missing required bundle org.eclipse.zest.layouts_0.0.0.
-!SUBENTRY 1 org.eclipse.osgi 2 0 2013-11-29 20:55:46.531
-!MESSAGE Bundle org.eclipse.gef.test_3.8.1.qualifier [111] was not resolved.
-!SUBENTRY 2 org.eclipse.gef.test 2 0 2013-11-29 20:55:46.531
-!MESSAGE Missing required bundle org.eclipse.jface_[3.2.0,4.0.0).
-!SUBENTRY 2 org.eclipse.gef.test 2 0 2013-11-29 20:55:46.531
-!MESSAGE Missing required bundle org.eclipse.core.resources_[3.2.0,4.0.0).
-!SUBENTRY 2 org.eclipse.gef.test 2 0 2013-11-29 20:55:46.532
-!MESSAGE Missing required bundle org.eclipse.ui_[3.2.0,4.0.0).
-!SUBENTRY 2 org.eclipse.gef.test 2 0 2013-11-29 20:55:46.532
-!MESSAGE Missing required bundle org.eclipse.draw2d_[3.8.0,4.0.0).
-!SUBENTRY 2 org.eclipse.gef.test 2 0 2013-11-29 20:55:46.532
-!MESSAGE Missing required bundle org.eclipse.gef_[3.8.0,4.0.0).
-!SUBENTRY 1 org.eclipse.osgi 2 0 2013-11-29 20:55:46.532
-!MESSAGE Bundle org.eclipse.zest.core_1.5.0.qualifier [119] was not resolved.
-!SUBENTRY 2 org.eclipse.zest.core 2 0 2013-11-29 20:55:46.533
-!MESSAGE Missing required bundle org.eclipse.zest.layouts_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.core 2 0 2013-11-29 20:55:46.533
-!MESSAGE Missing required bundle org.eclipse.ui_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.core 2 0 2013-11-29 20:55:46.533
-!MESSAGE Missing required bundle org.eclipse.draw2d_0.0.0.
-
-!ENTRY org.eclipse.rap.ui 4 0 2013-11-29 20:55:50.032
-!MESSAGE Unhandled event loop exception
-!STACK 0
-org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.RuntimeException: The class: class org.eclipse.draw2d.SWTGraphics has not implemented this new graphics function)
-	at org.eclipse.swt.SWT.error(SWT.java:3582)
-	at org.eclipse.swt.SWT.error(SWT.java:3505)
-	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:186)
-	at org.eclipse.swt.widgets.Display.runPendingMessages(Display.java:1189)
-	at org.eclipse.swt.widgets.Display.safeReadAndDispatch(Display.java:1169)
-	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1161)
-	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2733)
-	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2694)
-	at org.eclipse.ui.internal.Workbench.access$5(Workbench.java:2530)
-	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:701)
-	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
-	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:684)
-	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:157)
-	at org.eclipse.rap.internal.junit.runtime.Application.createAndRunEmptyWorkbench(Application.java:67)
-	at org.eclipse.rap.internal.junit.runtime.Application.createAndRunWorkbench(Application.java:54)
-	at org.eclipse.rap.internal.junit.runtime.Application.createUI(Application.java:44)
-	at org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle.createUI(RWTLifeCycle.java:186)
-	at org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle$UIThreadController.run(RWTLifeCycle.java:298)
-	at java.lang.Thread.run(Thread.java:724)
-	at org.eclipse.rap.rwt.internal.lifecycle.UIThread.run(UIThread.java:104)
-Caused by: java.lang.RuntimeException: The class: class org.eclipse.draw2d.SWTGraphics has not implemented this new graphics function
-	at org.eclipse.draw2d.Graphics.throwNotImplemented(Graphics.java:1228)
-	at org.eclipse.draw2d.Graphics.setLineAttributes(Graphics.java:1087)
-	at org.eclipse.draw2d.Shape.paintOutline(Shape.java:159)
-	at org.eclipse.draw2d.Shape.paintFigure(Shape.java:148)
-	at org.eclipse.draw2d.Figure.paint(Figure.java:1115)
-	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1167)
-	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1202)
-	at org.eclipse.draw2d.Figure.paint(Figure.java:1117)
-	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1167)
-	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1202)
-	at org.eclipse.draw2d.Viewport.paintClientArea(Viewport.java:160)
-	at org.eclipse.draw2d.Figure.paint(Figure.java:1117)
-	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1167)
-	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1202)
-	at org.eclipse.draw2d.Figure.paint(Figure.java:1117)
-	at org.eclipse.draw2d.DeferredUpdateManager.paint(DeferredUpdateManager.java:165)
-	at org.eclipse.draw2d.LightweightSystem.paint(LightweightSystem.java:204)
-	at org.eclipse.draw2d.LightweightSystem$2.handleEvent(LightweightSystem.java:111)
-	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:85)
-	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:700)
-	at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:602)
-	at org.eclipse.swt.widgets.Canvas.repaint(Canvas.java:191)
-	at org.eclipse.swt.widgets.Canvas.internalSetRedraw(Canvas.java:178)
-	at org.eclipse.swt.widgets.Control.redraw(Control.java:2045)
-	at org.eclipse.draw2d.NativeGraphicsSource.getGraphics(NativeGraphicsSource.java:47)
-	at org.eclipse.draw2d.DeferredUpdateManager.getGraphics(DeferredUpdateManager.java:147)
-	at org.eclipse.draw2d.DeferredUpdateManager.repairDamage(DeferredUpdateManager.java:310)
-	at org.eclipse.draw2d.DeferredUpdateManager.performUpdate(DeferredUpdateManager.java:192)
-	at org.eclipse.draw2d.DeferredUpdateManager$UpdateRequest.run(DeferredUpdateManager.java:44)
-	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:38)
-	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:180)
-	... 17 more
-
-!ENTRY org.eclipse.rap.ui 4 0 2013-11-29 20:55:50.034
-!MESSAGE Unhandled event loop exception
-!STACK 0
-org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.RuntimeException: The class: class org.eclipse.draw2d.SWTGraphics has not implemented this new graphics function)
-	at org.eclipse.swt.SWT.error(SWT.java:3582)
-	at org.eclipse.swt.SWT.error(SWT.java:3505)
-	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:186)
-	at org.eclipse.swt.widgets.Display.runPendingMessages(Display.java:1189)
-	at org.eclipse.swt.widgets.Display.safeReadAndDispatch(Display.java:1169)
-	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1161)
-	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2733)
-	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2694)
-	at org.eclipse.ui.internal.Workbench.access$5(Workbench.java:2530)
-	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:701)
-	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
-	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:684)
-	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:157)
-	at org.eclipse.rap.internal.junit.runtime.Application.createAndRunEmptyWorkbench(Application.java:67)
-	at org.eclipse.rap.internal.junit.runtime.Application.createAndRunWorkbench(Application.java:54)
-	at org.eclipse.rap.internal.junit.runtime.Application.createUI(Application.java:44)
-	at org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle.createUI(RWTLifeCycle.java:186)
-	at org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle$UIThreadController.run(RWTLifeCycle.java:298)
-	at java.lang.Thread.run(Thread.java:724)
-	at org.eclipse.rap.rwt.internal.lifecycle.UIThread.run(UIThread.java:104)
-Caused by: java.lang.RuntimeException: The class: class org.eclipse.draw2d.SWTGraphics has not implemented this new graphics function
-	at org.eclipse.draw2d.Graphics.throwNotImplemented(Graphics.java:1228)
-	at org.eclipse.draw2d.Graphics.setLineAttributes(Graphics.java:1087)
-	at org.eclipse.draw2d.Shape.paintOutline(Shape.java:159)
-	at org.eclipse.draw2d.Shape.paintFigure(Shape.java:148)
-	at org.eclipse.draw2d.Figure.paint(Figure.java:1115)
-	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1167)
-	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1202)
-	at org.eclipse.draw2d.Figure.paint(Figure.java:1117)
-	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1167)
-	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1202)
-	at org.eclipse.draw2d.Viewport.paintClientArea(Viewport.java:160)
-	at org.eclipse.draw2d.Figure.paint(Figure.java:1117)
-	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1167)
-	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1202)
-	at org.eclipse.draw2d.Figure.paint(Figure.java:1117)
-	at org.eclipse.draw2d.DeferredUpdateManager.paint(DeferredUpdateManager.java:165)
-	at org.eclipse.draw2d.LightweightSystem.paint(LightweightSystem.java:204)
-	at org.eclipse.draw2d.LightweightSystem$2.handleEvent(LightweightSystem.java:111)
-	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:85)
-	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:700)
-	at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:602)
-	at org.eclipse.swt.widgets.Canvas.repaint(Canvas.java:191)
-	at org.eclipse.swt.widgets.Canvas.internalSetRedraw(Canvas.java:178)
-	at org.eclipse.swt.widgets.Control.redraw(Control.java:2045)
-	at org.eclipse.draw2d.NativeGraphicsSource.getGraphics(NativeGraphicsSource.java:47)
-	at org.eclipse.draw2d.DeferredUpdateManager.getGraphics(DeferredUpdateManager.java:147)
-	at org.eclipse.draw2d.DeferredUpdateManager.repairDamage(DeferredUpdateManager.java:310)
-	at org.eclipse.draw2d.DeferredUpdateManager.performUpdate(DeferredUpdateManager.java:192)
-	at org.eclipse.draw2d.DeferredUpdateManager$UpdateRequest.run(DeferredUpdateManager.java:44)
-	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:38)
-	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:180)
-	... 17 more
-
-!ENTRY org.eclipse.rap.ui 4 0 2013-11-29 20:55:50.036
-!MESSAGE Unhandled event loop exception
-!STACK 0
-org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.RuntimeException: The class: class org.eclipse.draw2d.SWTGraphics has not implemented this new graphics function)
-	at org.eclipse.swt.SWT.error(SWT.java:3582)
-	at org.eclipse.swt.SWT.error(SWT.java:3505)
-	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:186)
-	at org.eclipse.swt.widgets.Display.runPendingMessages(Display.java:1189)
-	at org.eclipse.swt.widgets.Display.safeReadAndDispatch(Display.java:1169)
-	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1161)
-	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2733)
-	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2694)
-	at org.eclipse.ui.internal.Workbench.access$5(Workbench.java:2530)
-	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:701)
-	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
-	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:684)
-	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:157)
-	at org.eclipse.rap.internal.junit.runtime.Application.createAndRunEmptyWorkbench(Application.java:67)
-	at org.eclipse.rap.internal.junit.runtime.Application.createAndRunWorkbench(Application.java:54)
-	at org.eclipse.rap.internal.junit.runtime.Application.createUI(Application.java:44)
-	at org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle.createUI(RWTLifeCycle.java:186)
-	at org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle$UIThreadController.run(RWTLifeCycle.java:298)
-	at java.lang.Thread.run(Thread.java:724)
-	at org.eclipse.rap.rwt.internal.lifecycle.UIThread.run(UIThread.java:104)
-Caused by: java.lang.RuntimeException: The class: class org.eclipse.draw2d.SWTGraphics has not implemented this new graphics function
-	at org.eclipse.draw2d.Graphics.throwNotImplemented(Graphics.java:1228)
-	at org.eclipse.draw2d.Graphics.setLineAttributes(Graphics.java:1087)
-	at org.eclipse.draw2d.ScaledGraphics.setLineAttributes(ScaledGraphics.java:842)
-	at org.eclipse.draw2d.Shape.paintOutline(Shape.java:159)
-	at org.eclipse.draw2d.Shape.paintFigure(Shape.java:148)
-	at org.eclipse.draw2d.Figure.paint(Figure.java:1115)
-	at org.eclipse.draw2d.parts.Thumbnail$ThumbnailUpdater.run(Thumbnail.java:165)
-	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:38)
-	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:180)
-	... 17 more
-
-!ENTRY org.eclipse.rap.ui 4 0 2013-11-29 20:55:50.037
-!MESSAGE Unhandled event loop exception
-!STACK 0
-org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.RuntimeException: The class: class org.eclipse.draw2d.SWTGraphics has not implemented this new graphics function)
-	at org.eclipse.swt.SWT.error(SWT.java:3582)
-	at org.eclipse.swt.SWT.error(SWT.java:3505)
-	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:186)
-	at org.eclipse.swt.widgets.Display.runPendingMessages(Display.java:1189)
-	at org.eclipse.swt.widgets.Display.safeReadAndDispatch(Display.java:1169)
-	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1161)
-	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2733)
-	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2694)
-	at org.eclipse.ui.internal.Workbench.access$5(Workbench.java:2530)
-	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:701)
-	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
-	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:684)
-	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:157)
-	at org.eclipse.rap.internal.junit.runtime.Application.createAndRunEmptyWorkbench(Application.java:67)
-	at org.eclipse.rap.internal.junit.runtime.Application.createAndRunWorkbench(Application.java:54)
-	at org.eclipse.rap.internal.junit.runtime.Application.createUI(Application.java:44)
-	at org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle.createUI(RWTLifeCycle.java:186)
-	at org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle$UIThreadController.run(RWTLifeCycle.java:298)
-	at java.lang.Thread.run(Thread.java:724)
-	at org.eclipse.rap.rwt.internal.lifecycle.UIThread.run(UIThread.java:104)
-Caused by: java.lang.RuntimeException: The class: class org.eclipse.draw2d.SWTGraphics has not implemented this new graphics function
-	at org.eclipse.draw2d.Graphics.throwNotImplemented(Graphics.java:1228)
-	at org.eclipse.draw2d.Graphics.setLineAttributes(Graphics.java:1087)
-	at org.eclipse.draw2d.Shape.paintOutline(Shape.java:159)
-	at org.eclipse.draw2d.Shape.paintFigure(Shape.java:148)
-	at org.eclipse.draw2d.Figure.paint(Figure.java:1115)
-	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1167)
-	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1202)
-	at org.eclipse.draw2d.Figure.paint(Figure.java:1117)
-	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1167)
-	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1202)
-	at org.eclipse.draw2d.Viewport.paintClientArea(Viewport.java:160)
-	at org.eclipse.draw2d.Figure.paint(Figure.java:1117)
-	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1167)
-	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1202)
-	at org.eclipse.draw2d.Figure.paint(Figure.java:1117)
-	at org.eclipse.draw2d.DeferredUpdateManager.paint(DeferredUpdateManager.java:165)
-	at org.eclipse.draw2d.LightweightSystem.paint(LightweightSystem.java:204)
-	at org.eclipse.draw2d.LightweightSystem$2.handleEvent(LightweightSystem.java:111)
-	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:85)
-	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:700)
-	at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:602)
-	at org.eclipse.swt.widgets.Canvas.repaint(Canvas.java:191)
-	at org.eclipse.swt.widgets.Canvas.internalSetRedraw(Canvas.java:178)
-	at org.eclipse.swt.widgets.Control.redraw(Control.java:2045)
-	at org.eclipse.draw2d.NativeGraphicsSource.getGraphics(NativeGraphicsSource.java:47)
-	at org.eclipse.draw2d.DeferredUpdateManager.getGraphics(DeferredUpdateManager.java:147)
-	at org.eclipse.draw2d.DeferredUpdateManager.repairDamage(DeferredUpdateManager.java:310)
-	at org.eclipse.draw2d.DeferredUpdateManager.performUpdate(DeferredUpdateManager.java:192)
-	at org.eclipse.draw2d.DeferredUpdateManager$UpdateRequest.run(DeferredUpdateManager.java:44)
-	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:38)
-	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:180)
-	... 17 more
-
-!ENTRY org.eclipse.rap.ui 4 0 2013-11-29 20:55:50.039
-!MESSAGE Unhandled event loop exception
-!STACK 0
-org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.RuntimeException: The class: class org.eclipse.draw2d.SWTGraphics has not implemented this new graphics function)
-	at org.eclipse.swt.SWT.error(SWT.java:3582)
-	at org.eclipse.swt.SWT.error(SWT.java:3505)
-	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:186)
-	at org.eclipse.swt.widgets.Display.runPendingMessages(Display.java:1189)
-	at org.eclipse.swt.widgets.Display.safeReadAndDispatch(Display.java:1169)
-	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1161)
-	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2733)
-	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2694)
-	at org.eclipse.ui.internal.Workbench.access$5(Workbench.java:2530)
-	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:701)
-	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
-	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:684)
-	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:157)
-	at org.eclipse.rap.internal.junit.runtime.Application.createAndRunEmptyWorkbench(Application.java:67)
-	at org.eclipse.rap.internal.junit.runtime.Application.createAndRunWorkbench(Application.java:54)
-	at org.eclipse.rap.internal.junit.runtime.Application.createUI(Application.java:44)
-	at org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle.createUI(RWTLifeCycle.java:186)
-	at org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle$UIThreadController.run(RWTLifeCycle.java:298)
-	at java.lang.Thread.run(Thread.java:724)
-	at org.eclipse.rap.rwt.internal.lifecycle.UIThread.run(UIThread.java:104)
-Caused by: java.lang.RuntimeException: The class: class org.eclipse.draw2d.SWTGraphics has not implemented this new graphics function
-	at org.eclipse.draw2d.Graphics.throwNotImplemented(Graphics.java:1228)
-	at org.eclipse.draw2d.Graphics.setLineAttributes(Graphics.java:1087)
-	at org.eclipse.draw2d.Shape.paintOutline(Shape.java:159)
-	at org.eclipse.draw2d.Shape.paintFigure(Shape.java:148)
-	at org.eclipse.draw2d.Figure.paint(Figure.java:1115)
-	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1167)
-	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1202)
-	at org.eclipse.draw2d.Figure.paint(Figure.java:1117)
-	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1167)
-	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1202)
-	at org.eclipse.draw2d.Viewport.paintClientArea(Viewport.java:160)
-	at org.eclipse.draw2d.Figure.paint(Figure.java:1117)
-	at org.eclipse.draw2d.Figure.paintChildren(Figure.java:1167)
-	at org.eclipse.draw2d.Figure.paintClientArea(Figure.java:1202)
-	at org.eclipse.draw2d.Figure.paint(Figure.java:1117)
-	at org.eclipse.draw2d.DeferredUpdateManager.paint(DeferredUpdateManager.java:165)
-	at org.eclipse.draw2d.LightweightSystem.paint(LightweightSystem.java:204)
-	at org.eclipse.draw2d.LightweightSystem$2.handleEvent(LightweightSystem.java:111)
-	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:85)
-	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:700)
-	at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:602)
-	at org.eclipse.swt.widgets.Canvas.repaint(Canvas.java:191)
-	at org.eclipse.swt.widgets.Canvas.internalSetRedraw(Canvas.java:178)
-	at org.eclipse.swt.widgets.Control.redraw(Control.java:2045)
-	at org.eclipse.draw2d.NativeGraphicsSource.getGraphics(NativeGraphicsSource.java:47)
-	at org.eclipse.draw2d.DeferredUpdateManager.getGraphics(DeferredUpdateManager.java:147)
-	at org.eclipse.draw2d.DeferredUpdateManager.repairDamage(DeferredUpdateManager.java:310)
-	at org.eclipse.draw2d.DeferredUpdateManager.performUpdate(DeferredUpdateManager.java:192)
-	at org.eclipse.draw2d.DeferredUpdateManager$UpdateRequest.run(DeferredUpdateManager.java:44)
-	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:38)
-	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:180)
-	... 17 more
-
-!ENTRY org.eclipse.rap.ui 4 0 2013-11-29 20:55:50.040
-!MESSAGE Unhandled event loop exception
-!STACK 0
-org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.RuntimeException: The class: class org.eclipse.draw2d.SWTGraphics has not implemented this new graphics function)
-	at org.eclipse.swt.SWT.error(SWT.java:3582)
-	at org.eclipse.swt.SWT.error(SWT.java:3505)
-	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:186)
-	at org.eclipse.swt.widgets.Display.runPendingMessages(Display.java:1189)
-	at org.eclipse.swt.widgets.Display.safeReadAndDispatch(Display.java:1169)
-	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1161)
-	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2733)
-	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2694)
-	at org.eclipse.ui.internal.Workbench.access$5(Workbench.java:2530)
-	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:701)
-	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
-	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:684)
-	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:157)
-	at org.eclipse.rap.internal.junit.runtime.Application.createAndRunEmptyWorkbench(Application.java:67)
-	at org.eclipse.rap.internal.junit.runtime.Application.createAndRunWorkbench(Application.java:54)
-	at org.eclipse.rap.internal.junit.runtime.Application.createUI(Application.java:44)
-	at org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle.createUI(RWTLifeCycle.java:186)
-	at org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle$UIThreadController.run(RWTLifeCycle.java:298)
-	at java.lang.Thread.run(Thread.java:724)
-	at org.eclipse.rap.rwt.internal.lifecycle.UIThread.run(UIThread.java:104)
-Caused by: java.lang.RuntimeException: The class: class org.eclipse.draw2d.SWTGraphics has not implemented this new graphics function
-	at org.eclipse.draw2d.Graphics.throwNotImplemented(Graphics.java:1228)
-	at org.eclipse.draw2d.Graphics.setLineAttributes(Graphics.java:1087)
-	at org.eclipse.draw2d.ScaledGraphics.setLineAttributes(ScaledGraphics.java:842)
-	at org.eclipse.draw2d.Shape.paintOutline(Shape.java:159)
-	at org.eclipse.draw2d.Shape.paintFigure(Shape.java:148)
-	at org.eclipse.draw2d.Figure.paint(Figure.java:1115)
-	at org.eclipse.draw2d.parts.Thumbnail$ThumbnailUpdater.run(Thumbnail.java:165)
-	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:38)
-	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:180)
-	... 17 more
-!SESSION 2013-11-29 21:08:50.967 -----------------------------------------------
-eclipse.buildId=unknown
-java.version=1.7.0_25
-java.vendor=Oracle Corporation
-BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US
-Framework arguments:  -version 3 -port 41156 -testLoaderClass org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader -loaderpluginname org.eclipse.rap.junit.runtime -classNames org.eclipse.draw2d.test.ColorConstantTest -testpluginname org.eclipse.rap.draw2d.test
-Command-line arguments:  -dev file:/home/amergey/workspace_rapgef/.metadata/.plugins/org.eclipse.pde.core/pde-junit/dev.properties -os linux -ws gtk -arch x86_64 -consoleLog -console -version 3 -port 41156 -testLoaderClass org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader -loaderpluginname org.eclipse.rap.junit.runtime -classNames org.eclipse.draw2d.test.ColorConstantTest -testpluginname org.eclipse.rap.draw2d.test
-
-!ENTRY org.eclipse.zest.layouts 4 0 2013-11-29 21:08:52.633
-!MESSAGE FrameworkEvent ERROR
-!STACK 0
-org.osgi.framework.BundleException: The bundle "org.eclipse.zest.layouts_1.1.0.qualifier [48]" could not be resolved. Reason: Missing Constraint: Require-Bundle: org.eclipse.swt; bundle-version="0.0.0"
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolverError(AbstractBundle.java:1332)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolutionFailureException(AbstractBundle.java:1316)
-	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:323)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
-	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
-
-!ENTRY org.eclipse.rap.rwt.osgi 4 0 2013-11-29 21:08:54.036
-!MESSAGE Unable to start RWT application.
-!STACK 0
-java.lang.RuntimeException: org.osgi.service.http.NamespaceException: The alias '/rwt-resources' is already in use.
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.registerResourceDirectory(ApplicationReferenceImpl.java:194)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.startRWTApplication(ApplicationReferenceImpl.java:79)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.start(ApplicationReferenceImpl.java:63)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.doLaunch(ApplicationLauncherImpl.java:105)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launch(ApplicationLauncherImpl.java:87)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launch(ApplicationLauncherImpl.java:164)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launchAtHttpService(ApplicationLauncherImpl.java:141)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.addHttpService(ApplicationLauncherImpl.java:49)
-	at org.eclipse.rap.rwt.osgi.internal.HttpTracker.addingService(HttpTracker.java:30)
-	at org.eclipse.rap.rwt.osgi.internal.HttpTracker.addingService(HttpTracker.java:1)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:932)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
-	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
-	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:894)
-	at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:107)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
-	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819)
-	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771)
-	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130)
-	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433)
-	at org.eclipse.equinox.http.servlet.internal.Activator.registerHttpService(Activator.java:81)
-	at org.eclipse.equinox.http.servlet.internal.Activator.addProxyServlet(Activator.java:60)
-	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.init(ProxyServlet.java:40)
-	at org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet.init(HttpServerManager.java:363)
-	at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:519)
-	at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:331)
-	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
-	at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:742)
-	at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265)
-	at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:710)
-	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
-	at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)
-	at org.eclipse.jetty.server.Server.doStart(Server.java:280)
-	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
-	at org.eclipse.equinox.http.jetty.internal.HttpServerManager.updated(HttpServerManager.java:113)
-	at org.eclipse.equinox.http.jetty.internal.Activator.start(Activator.java:62)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
-	at java.security.AccessController.doPrivileged(Native Method)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
-	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
-	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
-Caused by: org.osgi.service.http.NamespaceException: The alias '/rwt-resources' is already in use.
-	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerServlet(ProxyServlet.java:169)
-	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerResources(ProxyServlet.java:199)
-	at org.eclipse.equinox.http.servlet.internal.HttpServiceImpl.registerResources(HttpServiceImpl.java:78)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.registerResourceDirectory(ApplicationReferenceImpl.java:190)
-	... 54 more
-
-!ENTRY org.eclipse.gef.test 4 0 2013-11-29 21:08:54.120
-!MESSAGE FrameworkEvent ERROR
-!STACK 0
-org.osgi.framework.BundleException: The bundle "org.eclipse.gef.test_3.8.1.qualifier [86]" could not be resolved. Reason: Missing Constraint: Require-Bundle: org.eclipse.jface; bundle-version="[3.2.0,4.0.0)"
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolverError(AbstractBundle.java:1332)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolutionFailureException(AbstractBundle.java:1316)
-	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:323)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
-	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
-
-!ENTRY org.eclipse.zest.core 4 0 2013-11-29 21:08:54.133
-!MESSAGE FrameworkEvent ERROR
-!STACK 0
-org.osgi.framework.BundleException: The bundle "org.eclipse.zest.core_1.5.0.qualifier [109]" could not be resolved. Reason: Missing Constraint: Require-Bundle: org.eclipse.zest.layouts; bundle-version="0.0.0"
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolverError(AbstractBundle.java:1332)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolutionFailureException(AbstractBundle.java:1316)
-	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:323)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
-	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
-
-!ENTRY org.eclipse.osgi 4 0 2013-11-29 21:08:55.147
-!MESSAGE An unexpected runtime error has occurred.
-!STACK 0
-java.lang.RuntimeException: org.osgi.service.http.NamespaceException: The alias '/rwt-resources' is already in use.
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.registerResourceDirectory(ApplicationReferenceImpl.java:194)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.startRWTApplication(ApplicationReferenceImpl.java:79)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.start(ApplicationReferenceImpl.java:63)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.doLaunch(ApplicationLauncherImpl.java:105)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launch(ApplicationLauncherImpl.java:87)
-	at org.eclipse.rap.ui.internal.servlet.HttpServiceTracker.startApplication(HttpServiceTracker.java:75)
-	at org.eclipse.rap.ui.internal.servlet.HttpServiceTracker.addingService(HttpServiceTracker.java:46)
-	at org.eclipse.rap.ui.internal.servlet.HttpServiceTracker.addingService(HttpServiceTracker.java:1)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:932)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
-	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
-	at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
-	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:317)
-	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)
-	at org.eclipse.rap.ui.internal.servlet.HttpServiceTracker.access$6(HttpServiceTracker.java:1)
-	at org.eclipse.rap.ui.internal.servlet.HttpServiceTracker$ApplicationLauncherTracker.addingService(HttpServiceTracker.java:125)
-	at org.eclipse.rap.ui.internal.servlet.HttpServiceTracker$ApplicationLauncherTracker.addingService(HttpServiceTracker.java:1)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:932)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
-	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
-	at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
-	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:317)
-	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)
-	at org.eclipse.rap.ui.internal.servlet.HttpServiceTracker$HttpContextTracker.addingService(HttpServiceTracker.java:99)
-	at org.eclipse.rap.ui.internal.servlet.HttpServiceTracker$HttpContextTracker.addingService(HttpServiceTracker.java:1)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:932)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
-	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
-	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:894)
-	at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:107)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
-	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819)
-	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771)
-	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130)
-	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:451)
-	at org.eclipse.equinox.http.registry.internal.HttpServiceTracker.open(HttpServiceTracker.java:43)
-	at org.eclipse.equinox.http.registry.internal.Activator.addingService(Activator.java:59)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:932)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
-	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
-	at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
-	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:317)
-	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)
-	at org.eclipse.equinox.http.registry.internal.Activator.start(Activator.java:37)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
-	at java.security.AccessController.doPrivileged(Native Method)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
-	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
-	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
-Caused by: org.osgi.service.http.NamespaceException: The alias '/rwt-resources' is already in use.
-	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerServlet(ProxyServlet.java:169)
-	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerResources(ProxyServlet.java:199)
-	at org.eclipse.equinox.http.servlet.internal.HttpServiceImpl.registerResources(HttpServiceImpl.java:78)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.registerResourceDirectory(ApplicationReferenceImpl.java:190)
-	... 63 more
-
-!ENTRY org.eclipse.rap.ui.workbench 4 0 2013-11-29 21:08:55.150
-!MESSAGE FrameworkEvent ERROR
-!STACK 0
-java.lang.RuntimeException: org.osgi.service.http.NamespaceException: The alias '/rwt-resources' is already in use.
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.registerResourceDirectory(ApplicationReferenceImpl.java:194)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.startRWTApplication(ApplicationReferenceImpl.java:79)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.start(ApplicationReferenceImpl.java:63)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.doLaunch(ApplicationLauncherImpl.java:105)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launch(ApplicationLauncherImpl.java:87)
-	at org.eclipse.rap.ui.internal.servlet.HttpServiceTracker.startApplication(HttpServiceTracker.java:75)
-	at org.eclipse.rap.ui.internal.servlet.HttpServiceTracker.addingService(HttpServiceTracker.java:46)
-	at org.eclipse.rap.ui.internal.servlet.HttpServiceTracker.addingService(HttpServiceTracker.java:1)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:932)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
-	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
-	at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
-	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:317)
-	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)
-	at org.eclipse.rap.ui.internal.servlet.HttpServiceTracker.access$6(HttpServiceTracker.java:1)
-	at org.eclipse.rap.ui.internal.servlet.HttpServiceTracker$ApplicationLauncherTracker.addingService(HttpServiceTracker.java:125)
-	at org.eclipse.rap.ui.internal.servlet.HttpServiceTracker$ApplicationLauncherTracker.addingService(HttpServiceTracker.java:1)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:932)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
-	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
-	at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
-	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:317)
-	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)
-	at org.eclipse.rap.ui.internal.servlet.HttpServiceTracker$HttpContextTracker.addingService(HttpServiceTracker.java:99)
-	at org.eclipse.rap.ui.internal.servlet.HttpServiceTracker$HttpContextTracker.addingService(HttpServiceTracker.java:1)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:932)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
-	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
-	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:894)
-	at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:107)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
-	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819)
-	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771)
-	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130)
-	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:451)
-	at org.eclipse.equinox.http.registry.internal.HttpServiceTracker.open(HttpServiceTracker.java:43)
-	at org.eclipse.equinox.http.registry.internal.Activator.addingService(Activator.java:59)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:932)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
-	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
-	at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
-	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:317)
-	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)
-	at org.eclipse.equinox.http.registry.internal.Activator.start(Activator.java:37)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
-	at java.security.AccessController.doPrivileged(Native Method)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
-	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
-	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
-Caused by: org.osgi.service.http.NamespaceException: The alias '/rwt-resources' is already in use.
-	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerServlet(ProxyServlet.java:169)
-	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerResources(ProxyServlet.java:199)
-	at org.eclipse.equinox.http.servlet.internal.HttpServiceImpl.registerResources(HttpServiceImpl.java:78)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.registerResourceDirectory(ApplicationReferenceImpl.java:190)
-	... 63 more
-
-!ENTRY org.eclipse.zest.tests 4 0 2013-11-29 21:08:55.155
-!MESSAGE FrameworkEvent ERROR
-!STACK 0
-org.osgi.framework.BundleException: The bundle "org.eclipse.zest.tests_1.1.0.qualifier [115]" could not be resolved. Reason: Missing Constraint: Require-Bundle: org.eclipse.ui; bundle-version="0.0.0"
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolverError(AbstractBundle.java:1332)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolutionFailureException(AbstractBundle.java:1316)
-	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:323)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
-	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
-
-!ENTRY org.eclipse.osgi 4 0 2013-11-29 21:08:55.164
-!MESSAGE Bundle initial@reference:file:../../../../../git/org.eclipse.gef/org.eclipse.zest.layouts/ was not resolved.
-
-!ENTRY org.eclipse.osgi 4 0 2013-11-29 21:08:55.165
-!MESSAGE Bundle initial@reference:file:../../../../../git/org.eclipse.gef/org.eclipse.gef.test/ was not resolved.
-
-!ENTRY org.eclipse.osgi 4 0 2013-11-29 21:08:55.165
-!MESSAGE Bundle initial@reference:file:../../../../../git/org.eclipse.gef/org.eclipse.zest.core/ was not resolved.
-
-!ENTRY org.eclipse.osgi 4 0 2013-11-29 21:08:55.166
-!MESSAGE Bundle initial@reference:file:../../../../../git/org.eclipse.gef/org.eclipse.zest.tests/ was not resolved.
-
-!ENTRY org.eclipse.osgi 2 0 2013-11-29 21:08:55.197
-!MESSAGE One or more bundles are not resolved because the following root constraints are not resolved:
-!SUBENTRY 1 org.eclipse.osgi 2 0 2013-11-29 21:08:55.198
-!MESSAGE Bundle initial@reference:file:../../../../../git/org.eclipse.gef/org.eclipse.zest.tests/ was not resolved.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 21:08:55.199
-!MESSAGE Missing required bundle org.eclipse.pde.ui_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 21:08:55.200
-!MESSAGE Missing required bundle org.eclipse.ui_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 21:08:55.201
-!MESSAGE Missing required bundle org.eclipse.jdt.ui_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 21:08:55.202
-!MESSAGE Missing required bundle org.eclipse.pde_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 21:08:55.203
-!MESSAGE Missing required bundle org.eclipse.core.resources_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 21:08:55.203
-!MESSAGE Missing required bundle org.eclipse.jdt.core_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 21:08:55.204
-!MESSAGE Missing required bundle org.eclipse.jdt_0.0.0.
-!SUBENTRY 1 org.eclipse.osgi 2 0 2013-11-29 21:08:55.205
-!MESSAGE Bundle initial@reference:file:../../../../../git/org.eclipse.gef/org.eclipse.zest.core/ was not resolved.
-!SUBENTRY 2 org.eclipse.zest.core 2 0 2013-11-29 21:08:55.206
-!MESSAGE Missing required bundle org.eclipse.ui_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.core 2 0 2013-11-29 21:08:55.207
-!MESSAGE Missing required bundle org.eclipse.draw2d_0.0.0.
-!SUBENTRY 1 org.eclipse.osgi 2 0 2013-11-29 21:08:55.208
-!MESSAGE Bundle initial@reference:file:../../../../../git/org.eclipse.gef/org.eclipse.gef.test/ was not resolved.
-!SUBENTRY 2 org.eclipse.gef.test 2 0 2013-11-29 21:08:55.208
-!MESSAGE Missing required bundle org.eclipse.jface_[3.2.0,4.0.0).
-!SUBENTRY 2 org.eclipse.gef.test 2 0 2013-11-29 21:08:55.209
-!MESSAGE Missing required bundle org.eclipse.gef_[3.8.0,4.0.0).
-!SUBENTRY 2 org.eclipse.gef.test 2 0 2013-11-29 21:08:55.210
-!MESSAGE Missing required bundle org.eclipse.core.resources_[3.2.0,4.0.0).
-!SUBENTRY 2 org.eclipse.gef.test 2 0 2013-11-29 21:08:55.211
-!MESSAGE Missing required bundle org.eclipse.draw2d_[3.8.0,4.0.0).
-!SUBENTRY 2 org.eclipse.gef.test 2 0 2013-11-29 21:08:55.212
-!MESSAGE Missing required bundle org.eclipse.ui_[3.2.0,4.0.0).
-!SUBENTRY 1 org.eclipse.osgi 2 0 2013-11-29 21:08:55.213
-!MESSAGE Bundle initial@reference:file:../../../../../git/org.eclipse.gef/org.eclipse.zest.layouts/ was not resolved.
-!SUBENTRY 2 org.eclipse.zest.layouts 2 0 2013-11-29 21:08:55.213
-!MESSAGE Missing required bundle org.eclipse.draw2d_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.layouts 2 0 2013-11-29 21:08:55.214
-!MESSAGE Missing required bundle org.eclipse.jface_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.layouts 2 0 2013-11-29 21:08:55.215
-!MESSAGE Missing required bundle org.eclipse.swt_0.0.0.
-
-!ENTRY org.eclipse.osgi 2 0 2013-11-29 21:08:55.222
-!MESSAGE The following is a complete list of bundles which are not resolved, see the prior log entry for the root cause if it exists:
-!SUBENTRY 1 org.eclipse.osgi 2 0 2013-11-29 21:08:55.223
-!MESSAGE Bundle org.eclipse.zest.layouts_1.1.0.qualifier [48] was not resolved.
-!SUBENTRY 2 org.eclipse.zest.layouts 2 0 2013-11-29 21:08:55.224
-!MESSAGE Missing required bundle org.eclipse.swt_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.layouts 2 0 2013-11-29 21:08:55.225
-!MESSAGE Missing required bundle org.eclipse.jface_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.layouts 2 0 2013-11-29 21:08:55.226
-!MESSAGE Missing required bundle org.eclipse.draw2d_0.0.0.
-!SUBENTRY 1 org.eclipse.osgi 2 0 2013-11-29 21:08:55.227
-!MESSAGE Bundle org.eclipse.gef.test_3.8.1.qualifier [86] was not resolved.
-!SUBENTRY 2 org.eclipse.gef.test 2 0 2013-11-29 21:08:55.228
-!MESSAGE Missing required bundle org.eclipse.jface_[3.2.0,4.0.0).
-!SUBENTRY 2 org.eclipse.gef.test 2 0 2013-11-29 21:08:55.228
-!MESSAGE Missing required bundle org.eclipse.core.resources_[3.2.0,4.0.0).
-!SUBENTRY 2 org.eclipse.gef.test 2 0 2013-11-29 21:08:55.229
-!MESSAGE Missing required bundle org.eclipse.ui_[3.2.0,4.0.0).
-!SUBENTRY 2 org.eclipse.gef.test 2 0 2013-11-29 21:08:55.230
-!MESSAGE Missing required bundle org.eclipse.draw2d_[3.8.0,4.0.0).
-!SUBENTRY 2 org.eclipse.gef.test 2 0 2013-11-29 21:08:55.230
-!MESSAGE Missing required bundle org.eclipse.gef_[3.8.0,4.0.0).
-!SUBENTRY 1 org.eclipse.osgi 2 0 2013-11-29 21:08:55.230
-!MESSAGE Bundle org.eclipse.zest.core_1.5.0.qualifier [109] was not resolved.
-!SUBENTRY 2 org.eclipse.zest.core 2 0 2013-11-29 21:08:55.230
-!MESSAGE Missing required bundle org.eclipse.zest.layouts_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.core 2 0 2013-11-29 21:08:55.231
-!MESSAGE Missing required bundle org.eclipse.ui_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.core 2 0 2013-11-29 21:08:55.231
-!MESSAGE Missing required bundle org.eclipse.draw2d_0.0.0.
-!SUBENTRY 1 org.eclipse.osgi 2 0 2013-11-29 21:08:55.231
-!MESSAGE Bundle org.eclipse.zest.tests_1.1.0.qualifier [115] was not resolved.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 21:08:55.231
-!MESSAGE Missing required bundle org.eclipse.ui_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 21:08:55.231
-!MESSAGE Missing required bundle org.eclipse.pde_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 21:08:55.232
-!MESSAGE Missing required bundle org.eclipse.pde.ui_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 21:08:55.232
-!MESSAGE Missing required bundle org.eclipse.jdt_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 21:08:55.232
-!MESSAGE Missing required bundle org.eclipse.jdt.ui_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 21:08:55.232
-!MESSAGE Missing required bundle org.eclipse.core.resources_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 21:08:55.232
-!MESSAGE Missing required bundle org.eclipse.jdt.core_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 21:08:55.233
-!MESSAGE Missing required bundle org.eclipse.zest.core_0.0.0.
-!SUBENTRY 2 org.eclipse.zest.tests 2 0 2013-11-29 21:08:55.233
-!MESSAGE Missing required bundle org.eclipse.zest.layouts_0.0.0.
-!SESSION 2013-12-02 12:39:17.732 -----------------------------------------------
-eclipse.buildId=unknown
-java.version=1.7.0_25
-java.vendor=Oracle Corporation
-BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US
-Framework arguments:  -version 3 -port 19687 -testLoaderClass org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader -loaderpluginname org.eclipse.rap.junit.runtime -testNameFile /tmp/testNames8637851957776914820.txt -testpluginname org.eclipse.rap.draw2d.test
-Command-line arguments:  -dev file:/home/amergey/workspace_rapgef/.metadata/.plugins/org.eclipse.pde.core/pde-junit/dev.properties -os linux -ws gtk -arch x86_64 -consoleLog -console -version 3 -port 19687 -testLoaderClass org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader -loaderpluginname org.eclipse.rap.junit.runtime -testNameFile /tmp/testNames8637851957776914820.txt -testpluginname org.eclipse.rap.draw2d.test
-
-!ENTRY org.eclipse.rap.rwt.osgi 4 0 2013-12-02 12:39:24.243
-!MESSAGE Unable to start RWT application.
-!STACK 0
-java.lang.RuntimeException: org.osgi.service.http.NamespaceException: The alias '/rwt-resources' is already in use.
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.registerResourceDirectory(ApplicationReferenceImpl.java:194)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.startRWTApplication(ApplicationReferenceImpl.java:79)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.start(ApplicationReferenceImpl.java:63)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.doLaunch(ApplicationLauncherImpl.java:105)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launch(ApplicationLauncherImpl.java:87)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launch(ApplicationLauncherImpl.java:164)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launchWithConfiguration(ApplicationLauncherImpl.java:151)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.addConfiguration(ApplicationLauncherImpl.java:66)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationConfigurationTracker.addingService(ApplicationConfigurationTracker.java:35)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationConfigurationTracker.addingService(ApplicationConfigurationTracker.java:1)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:932)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
-	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
-	at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
-	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:317)
-	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)
-	at org.eclipse.rap.rwt.osgi.internal.Activator.openConfiguratorTracker(Activator.java:55)
-	at org.eclipse.rap.rwt.osgi.internal.Activator.start(Activator.java:28)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
-	at java.security.AccessController.doPrivileged(Native Method)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
-	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
-	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
-Caused by: org.osgi.service.http.NamespaceException: The alias '/rwt-resources' is already in use.
-	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerServlet(ProxyServlet.java:169)
-	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerResources(ProxyServlet.java:199)
-	at org.eclipse.equinox.http.servlet.internal.HttpServiceImpl.registerResources(HttpServiceImpl.java:78)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.registerResourceDirectory(ApplicationReferenceImpl.java:190)
-	... 32 more
-
-!ENTRY org.eclipse.rap.rwt.osgi 4 0 2013-12-02 12:39:24.713
-!MESSAGE Unable to start RWT application.
-!STACK 0
-java.lang.RuntimeException: org.osgi.service.http.NamespaceException: The alias '/rwt-resources' is already in use.
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.registerResourceDirectory(ApplicationReferenceImpl.java:194)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.startRWTApplication(ApplicationReferenceImpl.java:79)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.start(ApplicationReferenceImpl.java:63)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.doLaunch(ApplicationLauncherImpl.java:105)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launch(ApplicationLauncherImpl.java:87)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launch(ApplicationLauncherImpl.java:164)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launchWithConfiguration(ApplicationLauncherImpl.java:151)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.addConfiguration(ApplicationLauncherImpl.java:66)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationConfigurationTracker.addingService(ApplicationConfigurationTracker.java:35)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationConfigurationTracker.addingService(ApplicationConfigurationTracker.java:1)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:932)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
-	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
-	at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
-	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:317)
-	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)
-	at org.eclipse.rap.rwt.osgi.internal.Activator.openConfiguratorTracker(Activator.java:55)
-	at org.eclipse.rap.rwt.osgi.internal.Activator.start(Activator.java:28)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
-	at java.security.AccessController.doPrivileged(Native Method)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
-	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
-	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
-Caused by: org.osgi.service.http.NamespaceException: The alias '/rwt-resources' is already in use.
-	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerServlet(ProxyServlet.java:169)
-	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerResources(ProxyServlet.java:199)
-	at org.eclipse.equinox.http.servlet.internal.HttpServiceImpl.registerResources(HttpServiceImpl.java:78)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.registerResourceDirectory(ApplicationReferenceImpl.java:190)
-	... 32 more
-!SESSION 2013-12-02 12:48:42.982 -----------------------------------------------
-eclipse.buildId=unknown
-java.version=1.7.0_25
-java.vendor=Oracle Corporation
-BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US
-Framework arguments:  -version 3 -port 46962 -testLoaderClass org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader -loaderpluginname org.eclipse.rap.junit.runtime -testNameFile /tmp/testNames1489849326515011265.txt -testpluginname org.eclipse.rap.draw2d.test
-Command-line arguments:  -dev file:/home/amergey/workspace_rapgef/.metadata/.plugins/org.eclipse.pde.core/pde-junit/dev.properties -os linux -ws gtk -arch x86_64 -consoleLog -console -version 3 -port 46962 -testLoaderClass org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader -loaderpluginname org.eclipse.rap.junit.runtime -testNameFile /tmp/testNames1489849326515011265.txt -testpluginname org.eclipse.rap.draw2d.test
-
-!ENTRY org.eclipse.rap.rwt.osgi 4 0 2013-12-02 12:48:46.848
-!MESSAGE Unable to start RWT application.
-!STACK 0
-java.lang.RuntimeException: org.osgi.service.http.NamespaceException: The alias '/rwt-resources' is already in use.
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.registerResourceDirectory(ApplicationReferenceImpl.java:194)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.startRWTApplication(ApplicationReferenceImpl.java:79)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.start(ApplicationReferenceImpl.java:63)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.doLaunch(ApplicationLauncherImpl.java:105)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launch(ApplicationLauncherImpl.java:87)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launch(ApplicationLauncherImpl.java:164)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launchWithConfiguration(ApplicationLauncherImpl.java:151)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.addConfiguration(ApplicationLauncherImpl.java:66)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationConfigurationTracker.addingService(ApplicationConfigurationTracker.java:35)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationConfigurationTracker.addingService(ApplicationConfigurationTracker.java:1)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:932)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
-	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
-	at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
-	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:317)
-	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)
-	at org.eclipse.rap.rwt.osgi.internal.Activator.openConfiguratorTracker(Activator.java:55)
-	at org.eclipse.rap.rwt.osgi.internal.Activator.start(Activator.java:28)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
-	at java.security.AccessController.doPrivileged(Native Method)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
-	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
-	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
-Caused by: org.osgi.service.http.NamespaceException: The alias '/rwt-resources' is already in use.
-	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerServlet(ProxyServlet.java:169)
-	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerResources(ProxyServlet.java:199)
-	at org.eclipse.equinox.http.servlet.internal.HttpServiceImpl.registerResources(HttpServiceImpl.java:78)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.registerResourceDirectory(ApplicationReferenceImpl.java:190)
-	... 32 more
-
-!ENTRY org.eclipse.rap.rwt.osgi 4 0 2013-12-02 12:48:47.333
-!MESSAGE Unable to start RWT application.
-!STACK 0
-java.lang.RuntimeException: org.osgi.service.http.NamespaceException: The alias '/rwt-resources' is already in use.
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.registerResourceDirectory(ApplicationReferenceImpl.java:194)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.startRWTApplication(ApplicationReferenceImpl.java:79)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.start(ApplicationReferenceImpl.java:63)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.doLaunch(ApplicationLauncherImpl.java:105)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launch(ApplicationLauncherImpl.java:87)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launch(ApplicationLauncherImpl.java:164)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.launchWithConfiguration(ApplicationLauncherImpl.java:151)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationLauncherImpl.addConfiguration(ApplicationLauncherImpl.java:66)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationConfigurationTracker.addingService(ApplicationConfigurationTracker.java:35)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationConfigurationTracker.addingService(ApplicationConfigurationTracker.java:1)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:932)
-	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
-	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
-	at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
-	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:317)
-	at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)
-	at org.eclipse.rap.rwt.osgi.internal.Activator.openConfiguratorTracker(Activator.java:55)
-	at org.eclipse.rap.rwt.osgi.internal.Activator.start(Activator.java:28)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
-	at java.security.AccessController.doPrivileged(Native Method)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
-	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
-	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
-	at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
-	at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
-	at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
-	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
-	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
-Caused by: org.osgi.service.http.NamespaceException: The alias '/rwt-resources' is already in use.
-	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerServlet(ProxyServlet.java:169)
-	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerResources(ProxyServlet.java:199)
-	at org.eclipse.equinox.http.servlet.internal.HttpServiceImpl.registerResources(HttpServiceImpl.java:78)
-	at org.eclipse.rap.rwt.osgi.internal.ApplicationReferenceImpl.registerResourceDirectory(ApplicationReferenceImpl.java:190)
-	... 32 more
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/33f171dc.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/33f171dc.png
deleted file mode 100644
index da0099f..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/33f171dc.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/523a2988.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/523a2988.png
deleted file mode 100644
index e279e9a..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/523a2988.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/5d76e4ff.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/5d76e4ff.png
deleted file mode 100644
index ce9529d..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/5d76e4ff.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/90970f9f.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/90970f9f.gif
deleted file mode 100644
index 8990637..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/90970f9f.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/95fb343e.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/95fb343e.png
deleted file mode 100644
index ce31f84..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/95fb343e.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/a07b7efb.bmp b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/a07b7efb.bmp
deleted file mode 100644
index c7f16ff..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/a07b7efb.bmp
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/cb52ad0b.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/cb52ad0b.gif
deleted file mode 100644
index dc47edf..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/cb52ad0b.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/d5b62d8.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/d5b62d8.gif
deleted file mode 100644
index 84443be..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/d5b62d8.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/da1a81d5.bmp b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/da1a81d5.bmp
deleted file mode 100644
index f586513..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/da1a81d5.bmp
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/da7aed0d.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/da7aed0d.png
deleted file mode 100644
index 4d23bd9..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/da7aed0d.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/e2454b8f.jpg b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/e2454b8f.jpg
deleted file mode 100644
index 2db27a6..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/e2454b8f.jpg
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/ed95f37d.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/ed95f37d.png
deleted file mode 100644
index b2043a0..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/ed95f37d.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/f89a8c53.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/f89a8c53.gif
deleted file mode 100644
index b484d9b..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/generated/f89a8c53.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/icons/favicon2.ico b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/icons/favicon2.ico
deleted file mode 100644
index e30e75f..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/icons/favicon2.ico
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/img/business/favicon.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/img/business/favicon.png
deleted file mode 100644
index 3edf78e..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/img/business/favicon.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/img/fancy/favicon.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/img/fancy/favicon.png
deleted file mode 100644
index 8e74c4d..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/img/fancy/favicon.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/org/eclipse/rap/demo/resources/eclipse.svg b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/org/eclipse/rap/demo/resources/eclipse.svg
deleted file mode 100644
index 56316be..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/org/eclipse/rap/demo/resources/eclipse.svg
+++ /dev/null
@@ -1,1623 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://web.resource.org/cc/"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   id="svg2254"
-   sodipodi:version="0.32"
-   inkscape:version="0.45.1"
-   width="48"
-   height="48"
-   version="1.0"
-   sodipodi:docbase="/home/matt/eclipse33"
-   sodipodi:docname="eclipse-icon-clean.svg"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape"
-   inkscape:export-filename="/home/matt/eclipse33/eclipse-icon-ubuntu.png"
-   inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90">
-  <metadata
-     id="metadata2259">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <defs
-     id="defs2257">
-    <linearGradient
-       id="linearGradient4373">
-      <stop
-         style="stop-color:#8ea6d6;stop-opacity:0.73762375;"
-         offset="0"
-         id="stop4375" />
-      <stop
-         style="stop-color:#bbc9e6;stop-opacity:1;"
-         offset="1"
-         id="stop4377" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient4035">
-      <stop
-         style="stop-color:#7474bb;stop-opacity:1;"
-         offset="0"
-         id="stop4037" />
-      <stop
-         style="stop-color:#070553;stop-opacity:1;"
-         offset="1"
-         id="stop4039" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient4003">
-      <stop
-         style="stop-color:#494991;stop-opacity:1;"
-         offset="0"
-         id="stop4005" />
-      <stop
-         style="stop-color:#695ae8;stop-opacity:1;"
-         offset="1"
-         id="stop4007" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient3987">
-      <stop
-         style="stop-color:#414083;stop-opacity:1;"
-         offset="0"
-         id="stop3989" />
-      <stop
-         style="stop-color:#5649b9;stop-opacity:1;"
-         offset="1"
-         id="stop3991" />
-    </linearGradient>
-    <linearGradient
-       id="XMLID_8_"
-       gradientUnits="userSpaceOnUse"
-       x1="36.2495"
-       y1="18.1187"
-       x2="92.7495"
-       y2="18.1187"
-       gradientTransform="translate(-142.55625,-33.100248)">
-      <stop
-         offset="0"
-         style="stop-color:#FEE8BD"
-         id="stop264" />
-      <stop
-         offset="0.0483"
-         style="stop-color:#FEEBC6"
-         id="stop266" />
-      <stop
-         offset="0.2334"
-         style="stop-color:#FFF6E5"
-         id="stop268" />
-      <stop
-         offset="0.3905"
-         style="stop-color:#FFFDF8"
-         id="stop270" />
-      <stop
-         offset="0.5"
-         style="stop-color:#FFFFFF"
-         id="stop272" />
-      <stop
-         offset="0.6094"
-         style="stop-color:#FFFDF9"
-         id="stop274" />
-      <stop
-         offset="0.7588"
-         style="stop-color:#FFF7E7"
-         id="stop276" />
-      <stop
-         offset="0.9306"
-         style="stop-color:#FEEDCB"
-         id="stop278" />
-      <stop
-         offset="1"
-         style="stop-color:#FEE8BD"
-         id="stop280" />
-    </linearGradient>
-    <linearGradient
-       id="XMLID_7_"
-       gradientUnits="userSpaceOnUse"
-       x1="45.416"
-       y1="107.0176"
-       x2="83.3354"
-       y2="107.0176"
-       gradientTransform="translate(-142.55625,-33.100248)">
-      <stop
-         offset="0"
-         style="stop-color:#A86E45"
-         id="stop205" />
-      <stop
-         offset="0.1124"
-         style="stop-color:#E8A06C"
-         id="stop207" />
-      <stop
-         offset="0.1609"
-         style="stop-color:#E59E6B"
-         id="stop209" />
-      <stop
-         offset="0.2012"
-         style="stop-color:#DA9969"
-         id="stop211" />
-      <stop
-         offset="0.2387"
-         style="stop-color:#C99066"
-         id="stop213" />
-      <stop
-         offset="0.2743"
-         style="stop-color:#B18461"
-         id="stop215" />
-      <stop
-         offset="0.3084"
-         style="stop-color:#92745A"
-         id="stop217" />
-      <stop
-         offset="0.3315"
-         style="stop-color:#786755"
-         id="stop219" />
-      <stop
-         offset="0.4068"
-         style="stop-color:#B5ACA2"
-         id="stop221" />
-      <stop
-         offset="0.478"
-         style="stop-color:#EAE8E5"
-         id="stop223" />
-      <stop
-         offset="0.5112"
-         style="stop-color:#FFFFFF"
-         id="stop225" />
-      <stop
-         offset="0.5376"
-         style="stop-color:#FDFCFC"
-         id="stop227" />
-      <stop
-         offset="0.5589"
-         style="stop-color:#F5F3F2"
-         id="stop229" />
-      <stop
-         offset="0.5783"
-         style="stop-color:#E8E4E1"
-         id="stop231" />
-      <stop
-         offset="0.5966"
-         style="stop-color:#D6CEC9"
-         id="stop233" />
-      <stop
-         offset="0.6142"
-         style="stop-color:#BFB3AA"
-         id="stop235" />
-      <stop
-         offset="0.6312"
-         style="stop-color:#A39185"
-         id="stop237" />
-      <stop
-         offset="0.6475"
-         style="stop-color:#816959"
-         id="stop239" />
-      <stop
-         offset="0.6517"
-         style="stop-color:#785E4C"
-         id="stop241" />
-      <stop
-         offset="0.671"
-         style="stop-color:#83654F"
-         id="stop243" />
-      <stop
-         offset="0.7414"
-         style="stop-color:#A87958"
-         id="stop245" />
-      <stop
-         offset="0.807"
-         style="stop-color:#C3895F"
-         id="stop247" />
-      <stop
-         offset="0.8652"
-         style="stop-color:#D39263"
-         id="stop249" />
-      <stop
-         offset="0.9101"
-         style="stop-color:#D99564"
-         id="stop251" />
-      <stop
-         offset="0.9278"
-         style="stop-color:#C48557"
-         id="stop253" />
-      <stop
-         offset="0.9557"
-         style="stop-color:#AA7045"
-         id="stop255" />
-      <stop
-         offset="0.9807"
-         style="stop-color:#9A633B"
-         id="stop257" />
-      <stop
-         offset="1"
-         style="stop-color:#945F37"
-         id="stop259" />
-    </linearGradient>
-    <linearGradient
-       id="XMLID_6_"
-       gradientUnits="userSpaceOnUse"
-       x1="-34.5078"
-       y1="-100.6235"
-       x2="-20.9253"
-       y2="-100.6235"
-       gradientTransform="matrix(2.7917,-0.3987,0,2.7907,-0.8029473,335.99965)">
-      <stop
-         offset="0"
-         style="stop-color:#A86E45"
-         id="stop146" />
-      <stop
-         offset="0.1124"
-         style="stop-color:#E8A06C"
-         id="stop148" />
-      <stop
-         offset="0.1609"
-         style="stop-color:#E59E6B"
-         id="stop150" />
-      <stop
-         offset="0.2012"
-         style="stop-color:#DA9969"
-         id="stop152" />
-      <stop
-         offset="0.2387"
-         style="stop-color:#C99066"
-         id="stop154" />
-      <stop
-         offset="0.2743"
-         style="stop-color:#B18461"
-         id="stop156" />
-      <stop
-         offset="0.3084"
-         style="stop-color:#92745A"
-         id="stop158" />
-      <stop
-         offset="0.3315"
-         style="stop-color:#786755"
-         id="stop160" />
-      <stop
-         offset="0.4068"
-         style="stop-color:#B5ACA2"
-         id="stop162" />
-      <stop
-         offset="0.478"
-         style="stop-color:#EAE8E5"
-         id="stop164" />
-      <stop
-         offset="0.5112"
-         style="stop-color:#FFFFFF"
-         id="stop166" />
-      <stop
-         offset="0.5376"
-         style="stop-color:#FDFCFC"
-         id="stop168" />
-      <stop
-         offset="0.5589"
-         style="stop-color:#F5F3F2"
-         id="stop170" />
-      <stop
-         offset="0.5783"
-         style="stop-color:#E8E4E1"
-         id="stop172" />
-      <stop
-         offset="0.5966"
-         style="stop-color:#D6CEC9"
-         id="stop174" />
-      <stop
-         offset="0.6142"
-         style="stop-color:#BFB3AA"
-         id="stop176" />
-      <stop
-         offset="0.6312"
-         style="stop-color:#A39185"
-         id="stop178" />
-      <stop
-         offset="0.6475"
-         style="stop-color:#816959"
-         id="stop180" />
-      <stop
-         offset="0.6517"
-         style="stop-color:#785E4C"
-         id="stop182" />
-      <stop
-         offset="0.671"
-         style="stop-color:#83654F"
-         id="stop184" />
-      <stop
-         offset="0.7414"
-         style="stop-color:#A87958"
-         id="stop186" />
-      <stop
-         offset="0.807"
-         style="stop-color:#C3895F"
-         id="stop188" />
-      <stop
-         offset="0.8652"
-         style="stop-color:#D39263"
-         id="stop190" />
-      <stop
-         offset="0.9101"
-         style="stop-color:#D99564"
-         id="stop192" />
-      <stop
-         offset="0.9278"
-         style="stop-color:#C48557"
-         id="stop194" />
-      <stop
-         offset="0.9557"
-         style="stop-color:#AA7045"
-         id="stop196" />
-      <stop
-         offset="0.9807"
-         style="stop-color:#9A633B"
-         id="stop198" />
-      <stop
-         offset="1"
-         style="stop-color:#945F37"
-         id="stop200" />
-    </linearGradient>
-    <linearGradient
-       id="XMLID_5_"
-       gradientUnits="userSpaceOnUse"
-       x1="44.7505"
-       y1="94.7715"
-       x2="83.3739"
-       y2="89.1356"
-       gradientTransform="translate(-142.55625,-33.100248)">
-      <stop
-         offset="0"
-         style="stop-color:#A86E45"
-         id="stop87" />
-      <stop
-         offset="0.1124"
-         style="stop-color:#E8A06C"
-         id="stop89" />
-      <stop
-         offset="0.1609"
-         style="stop-color:#E59E6B"
-         id="stop91" />
-      <stop
-         offset="0.2012"
-         style="stop-color:#DA9969"
-         id="stop93" />
-      <stop
-         offset="0.2387"
-         style="stop-color:#C99066"
-         id="stop95" />
-      <stop
-         offset="0.2743"
-         style="stop-color:#B18461"
-         id="stop97" />
-      <stop
-         offset="0.3084"
-         style="stop-color:#92745A"
-         id="stop99" />
-      <stop
-         offset="0.3315"
-         style="stop-color:#786755"
-         id="stop101" />
-      <stop
-         offset="0.4068"
-         style="stop-color:#B5ACA2"
-         id="stop103" />
-      <stop
-         offset="0.478"
-         style="stop-color:#EAE8E5"
-         id="stop105" />
-      <stop
-         offset="0.5112"
-         style="stop-color:#FFFFFF"
-         id="stop107" />
-      <stop
-         offset="0.5376"
-         style="stop-color:#FDFCFC"
-         id="stop109" />
-      <stop
-         offset="0.5589"
-         style="stop-color:#F5F3F2"
-         id="stop111" />
-      <stop
-         offset="0.5783"
-         style="stop-color:#E8E4E1"
-         id="stop113" />
-      <stop
-         offset="0.5966"
-         style="stop-color:#D6CEC9"
-         id="stop115" />
-      <stop
-         offset="0.6142"
-         style="stop-color:#BFB3AA"
-         id="stop117" />
-      <stop
-         offset="0.6312"
-         style="stop-color:#A39185"
-         id="stop119" />
-      <stop
-         offset="0.6475"
-         style="stop-color:#816959"
-         id="stop121" />
-      <stop
-         offset="0.6517"
-         style="stop-color:#785E4C"
-         id="stop123" />
-      <stop
-         offset="0.671"
-         style="stop-color:#83654F"
-         id="stop125" />
-      <stop
-         offset="0.7414"
-         style="stop-color:#A87958"
-         id="stop127" />
-      <stop
-         offset="0.807"
-         style="stop-color:#C3895F"
-         id="stop129" />
-      <stop
-         offset="0.8652"
-         style="stop-color:#D39263"
-         id="stop131" />
-      <stop
-         offset="0.9101"
-         style="stop-color:#D99564"
-         id="stop133" />
-      <stop
-         offset="0.9278"
-         style="stop-color:#C48557"
-         id="stop135" />
-      <stop
-         offset="0.9557"
-         style="stop-color:#AA7045"
-         id="stop137" />
-      <stop
-         offset="0.9807"
-         style="stop-color:#9A633B"
-         id="stop139" />
-      <stop
-         offset="1"
-         style="stop-color:#945F37"
-         id="stop141" />
-    </linearGradient>
-    <linearGradient
-       id="XMLID_2_"
-       gradientUnits="userSpaceOnUse"
-       x1="44.8901"
-       y1="95.7324"
-       x2="83.5847"
-       y2="90.0861"
-       gradientTransform="translate(-142.55625,-33.100248)">
-      <stop
-         offset="0"
-         style="stop-color:#A86E45"
-         id="stop60" />
-      <stop
-         offset="0.5787"
-         style="stop-color:#785E4C"
-         id="stop62" />
-      <stop
-         offset="1"
-         style="stop-color:#945F37"
-         id="stop64" />
-    </linearGradient>
-    <linearGradient
-       id="XMLID_1_"
-       gradientUnits="userSpaceOnUse"
-       x1="47.9995"
-       y1="100.5"
-       x2="81.9995"
-       y2="100.5"
-       gradientTransform="translate(-142.55625,-33.100248)">
-      <stop
-         offset="0.0056"
-         style="stop-color:#9C6137"
-         id="stop47" />
-      <stop
-         offset="0.1685"
-         style="stop-color:#C98452"
-         id="stop49" />
-      <stop
-         offset="0.5337"
-         style="stop-color:#CD8D5F"
-         id="stop51" />
-      <stop
-         offset="0.809"
-         style="stop-color:#C47D4A"
-         id="stop53" />
-      <stop
-         offset="1"
-         style="stop-color:#9C6137"
-         id="stop55" />
-    </linearGradient>
-    <radialGradient
-       id="light_1_"
-       cx="-27.6724"
-       cy="-109.9067"
-       r="9"
-       gradientTransform="matrix(2.7917,0,0,2.7907,141.7533,350.9971)"
-       gradientUnits="userSpaceOnUse">
-      <stop
-         offset="0.264"
-         style="stop-color:#FFFFFF;"
-         id="stop37" />
-      <stop
-         offset="2.5"
-         style="stop-color:#FFF18F;stop-opacity:0"
-         id="stop39" />
-    </radialGradient>
-    <radialGradient
-       id="XMLID_10_"
-       cx="-27.6128"
-       cy="-86.5356"
-       r="6.2114"
-       gradientTransform="matrix(2.7917,0,0,2.7907,-0.8029473,317.89685)"
-       gradientUnits="userSpaceOnUse">
-      <stop
-         offset="0.3427"
-         style="stop-color:#FFFFFF"
-         id="stop8" />
-      <stop
-         offset="0.3754"
-         style="stop-color:#ECECEC"
-         id="stop10" />
-      <stop
-         offset="0.4665"
-         style="stop-color:#BCBCBC"
-         id="stop12" />
-      <stop
-         offset="0.5531"
-         style="stop-color:#979797"
-         id="stop14" />
-      <stop
-         offset="0.6331"
-         style="stop-color:#7C7C7C"
-         id="stop16" />
-      <stop
-         offset="0.704"
-         style="stop-color:#6C6C6C"
-         id="stop18" />
-      <stop
-         offset="0.7584"
-         style="stop-color:#666666"
-         id="stop20" />
-    </radialGradient>
-    <linearGradient
-       id="XMLID_4_"
-       gradientUnits="userSpaceOnUse"
-       x1="37.6743"
-       y1="25.6035"
-       x2="37.6743"
-       y2="47.5006"
-       gradientTransform="translate(-2.6725931e-2,-44.465488)">
-      <stop
-         offset="0"
-         style="stop-color:#FCB462"
-         id="stop40" />
-      <stop
-         offset="1"
-         style="stop-color:#FCAF55"
-         id="stop42" />
-    </linearGradient>
-    <linearGradient
-       id="XMLID_3_"
-       gradientUnits="userSpaceOnUse"
-       x1="75.5039"
-       y1="11.96"
-       x2="85.5969"
-       y2="36.3307"
-       gradientTransform="translate(-2.6725931e-2,-44.465488)">
-      <stop
-         offset="0"
-         style="stop-color:#F99D77"
-         id="stop33" />
-      <stop
-         offset="1"
-         style="stop-color:#F7804E"
-         id="stop35" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4035"
-       id="linearGradient4041"
-       x1="-43.03101"
-       y1="8.6383018"
-       x2="-15.677965"
-       y2="37.492428"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4035"
-       id="linearGradient4189"
-       gradientUnits="userSpaceOnUse"
-       x1="-43.03101"
-       y1="8.6383018"
-       x2="-15.677965"
-       y2="37.492428" />
-    <mask
-       maskUnits="userSpaceOnUse"
-       id="mask4181">
-      <g
-         id="g4183"
-         transform="matrix(0.7925926,0,0,0.8907563,4.6132029,-3.2693226)">
-        <path
-           transform="translate(-15.844752,8.8397036)"
-           d="M -10.007212 23.982693 A 20.014421 20.014421 0 1 1  -50.036055,23.982693 A 20.014421 20.014421 0 1 1  -10.007212 23.982693 z"
-           sodipodi:ry="20.014421"
-           sodipodi:rx="20.014421"
-           sodipodi:cy="23.982693"
-           sodipodi:cx="-30.021633"
-           id="path4185"
-           style="opacity:1;fill:#c88cbb;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-           sodipodi:type="arc" />
-        <path
-           transform="translate(-13.843309,8.8397036)"
-           d="M -10.007212 23.982693 A 20.014421 20.014421 0 1 1  -50.036055,23.982693 A 20.014421 20.014421 0 1 1  -10.007212 23.982693 z"
-           sodipodi:ry="20.014421"
-           sodipodi:rx="20.014421"
-           sodipodi:cy="23.982693"
-           sodipodi:cx="-30.021633"
-           id="path4187"
-           style="opacity:1;fill:url(#linearGradient4189);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-           sodipodi:type="arc" />
-      </g>
-    </mask>
-    <filter
-       inkscape:collect="always"
-       x="-0.42083731"
-       width="1.8416746"
-       y="-0.42480746"
-       height="1.8496149"
-       id="filter4267">
-      <feGaussianBlur
-         inkscape:collect="always"
-         stdDeviation="3.12931"
-         id="feGaussianBlur4269" />
-    </filter>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4035"
-       id="linearGradient4301"
-       gradientUnits="userSpaceOnUse"
-       x1="-43.03101"
-       y1="8.6383018"
-       x2="-15.677965"
-       y2="37.492428" />
-    <mask
-       maskUnits="userSpaceOnUse"
-       id="mask4297">
-      <path
-         sodipodi:type="arc"
-         style="opacity:1;fill:url(#linearGradient4301);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-         id="path4299"
-         sodipodi:cx="-30.021633"
-         sodipodi:cy="23.982693"
-         sodipodi:rx="20.014421"
-         sodipodi:ry="20.014421"
-         d="M -10.007212 23.982693 A 20.014421 20.014421 0 1 1  -50.036055,23.982693 A 20.014421 20.014421 0 1 1  -10.007212 23.982693 z"
-         transform="translate(3.5679857,1.3974438)" />
-    </mask>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4003"
-       id="linearGradient4368"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.9683099,0,0,0.9683099,47.162254,-1.0174889)"
-       x1="-47.534256"
-       y1="2.9675496"
-       x2="-0.16679382"
-       y2="49.50108" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4003"
-       id="linearGradient4371"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.0105249,0,0,1.0105249,3.4549308e-2,-50.022066)"
-       x1="-47.534256"
-       y1="2.9675496"
-       x2="-0.16679382"
-       y2="49.50108" />
-    <clipPath
-       clipPathUnits="userSpaceOnUse"
-       id="clipPath4423">
-      <path
-         transform="translate(4.9557997,-4.7430601e-2)"
-         d="M -10.007212 23.982693 A 20.014421 20.014421 0 1 1  -50.036055,23.982693 A 20.014421 20.014421 0 1 1  -10.007212 23.982693 z"
-         sodipodi:ry="20.014421"
-         sodipodi:rx="20.014421"
-         sodipodi:cy="23.982693"
-         sodipodi:cx="-30.021633"
-         id="path4425"
-         style="opacity:1;fill:url(#linearGradient4427);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-         sodipodi:type="arc" />
-    </clipPath>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4035"
-       id="linearGradient4427"
-       gradientUnits="userSpaceOnUse"
-       x1="-43.03101"
-       y1="8.6383018"
-       x2="-15.677965"
-       y2="37.492428" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4373"
-       id="linearGradient4429"
-       gradientUnits="userSpaceOnUse"
-       x1="-46.468069"
-       y1="19.312662"
-       x2="-6.439226"
-       y2="19.312662" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4373"
-       id="linearGradient4431"
-       gradientUnits="userSpaceOnUse"
-       x1="-46.468067"
-       y1="22.481251"
-       x2="-6.4392262"
-       y2="22.481251" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4373"
-       id="linearGradient4433"
-       gradientUnits="userSpaceOnUse"
-       x1="-46.468067"
-       y1="25.482334"
-       x2="-6.4392262"
-       y2="25.482334" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4373"
-       id="linearGradient4435"
-       gradientUnits="userSpaceOnUse"
-       x1="-46.468067"
-       y1="28.481611"
-       x2="-6.4392262"
-       y2="28.481611" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_10_"
-       id="radialGradient4753"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2.7917,0,0,2.7907,-0.8029473,317.89685)"
-       cx="-27.6128"
-       cy="-86.5356"
-       r="6.2114" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#light_1_"
-       id="radialGradient4755"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2.7917,0,0,2.7907,141.7533,350.9971)"
-       cx="-27.6724"
-       cy="-109.9067"
-       r="9" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_1_"
-       id="linearGradient4757"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-142.55625,-33.100248)"
-       x1="47.9995"
-       y1="100.5"
-       x2="81.9995"
-       y2="100.5" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_2_"
-       id="linearGradient4759"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-142.55625,-33.100248)"
-       x1="44.8901"
-       y1="95.7324"
-       x2="83.5847"
-       y2="90.0861" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_3_"
-       id="linearGradient4761"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-2.6725931e-2,-44.465488)"
-       x1="75.5039"
-       y1="11.96"
-       x2="85.5969"
-       y2="36.3307" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_4_"
-       id="linearGradient4763"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-2.6725931e-2,-44.465488)"
-       x1="37.6743"
-       y1="25.6035"
-       x2="37.6743"
-       y2="47.5006" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_5_"
-       id="linearGradient4765"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-142.55625,-33.100248)"
-       x1="44.7505"
-       y1="94.7715"
-       x2="83.3739"
-       y2="89.1356" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_6_"
-       id="linearGradient4767"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2.7917,-0.3987,0,2.7907,-0.8029473,335.99965)"
-       x1="-34.5078"
-       y1="-100.6235"
-       x2="-20.9253"
-       y2="-100.6235" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_7_"
-       id="linearGradient4769"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-142.55625,-33.100248)"
-       x1="45.416"
-       y1="107.0176"
-       x2="83.3354"
-       y2="107.0176" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_8_"
-       id="linearGradient4771"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-142.55625,-33.100248)"
-       x1="36.2495"
-       y1="18.1187"
-       x2="92.7495"
-       y2="18.1187" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_10_"
-       id="radialGradient4817"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2.7917,0,0,2.7907,-0.8029473,317.89685)"
-       cx="-27.6128"
-       cy="-86.5356"
-       r="6.2114" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#light_1_"
-       id="radialGradient4819"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2.7917,0,0,2.7907,141.7533,350.9971)"
-       cx="-27.6724"
-       cy="-109.9067"
-       r="9" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_1_"
-       id="linearGradient4821"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-142.55625,-33.100248)"
-       x1="47.9995"
-       y1="100.5"
-       x2="81.9995"
-       y2="100.5" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_2_"
-       id="linearGradient4823"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-142.55625,-33.100248)"
-       x1="44.8901"
-       y1="95.7324"
-       x2="83.5847"
-       y2="90.0861" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_3_"
-       id="linearGradient4825"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-2.6725931e-2,-44.465488)"
-       x1="75.5039"
-       y1="11.96"
-       x2="85.5969"
-       y2="36.3307" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_4_"
-       id="linearGradient4827"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-2.6725931e-2,-44.465488)"
-       x1="37.6743"
-       y1="25.6035"
-       x2="37.6743"
-       y2="47.5006" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_5_"
-       id="linearGradient4829"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-142.55625,-33.100248)"
-       x1="44.7505"
-       y1="94.7715"
-       x2="83.3739"
-       y2="89.1356" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_6_"
-       id="linearGradient4831"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2.7917,-0.3987,0,2.7907,-0.8029473,335.99965)"
-       x1="-34.5078"
-       y1="-100.6235"
-       x2="-20.9253"
-       y2="-100.6235" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_7_"
-       id="linearGradient4833"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-142.55625,-33.100248)"
-       x1="45.416"
-       y1="107.0176"
-       x2="83.3354"
-       y2="107.0176" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_8_"
-       id="linearGradient4835"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-142.55625,-33.100248)"
-       x1="36.2495"
-       y1="18.1187"
-       x2="92.7495"
-       y2="18.1187" />
-    <clipPath
-       clipPathUnits="userSpaceOnUse"
-       id="clipPath7503">
-      <g
-         id="g7505"
-         transform="matrix(7.4511206,0,0,7.4511206,305.77432,266.76067)">
-        <path
-           id="path7507"
-           d="M -29.775161,-22.982238 C -29.796903,-23.107991 -29.878636,-23.210123 -29.986136,-23.268906 L -29.986136,-23.560406 C -29.836092,-23.636636 -29.745233,-23.799162 -29.775161,-23.971619 C -29.797037,-24.097641 -29.879038,-24.200041 -29.986942,-24.25869 C -29.991505,-24.402695 -30.109876,-24.519188 -30.254687,-24.519188 L -34.370443,-24.519188 C -34.518072,-24.519188 -34.638859,-24.398401 -34.638859,-24.250772 L -34.638859,-23.677033 L -34.648925,-23.675691 C -34.872381,-23.643481 -35.024305,-23.439619 -34.986727,-23.22247 C -34.956396,-23.047329 -34.811048,-22.917013 -34.638994,-22.889232 L -34.638994,-22.687786 L -34.649059,-22.686175 C -34.872516,-22.654234 -35.024439,-22.450237 -34.986861,-22.233223 C -34.95653,-22.058082 -34.811182,-21.927632 -34.639128,-21.89985 L -34.639128,-21.69827 L -34.649193,-21.696928 C -34.87265,-21.664718 -35.024573,-21.460856 -34.986995,-21.243708 C -34.954785,-21.057829 -34.793199,-20.921072 -34.607186,-20.905503 C -34.562092,-20.820281 -34.473381,-20.761364 -34.370846,-20.761364 L -34.129003,-20.761364 C -33.83294,-20.026441 -33.162303,-19.419284 -32.381347,-19.419284 C -31.600256,-19.419284 -30.929753,-20.026441 -30.63369,-20.761364 L -30.255089,-20.761364 C -30.10746,-20.761364 -29.986673,-20.882151 -29.986673,-21.02978 L -29.986673,-21.581509 C -29.836629,-21.657739 -29.74577,-21.820265 -29.775698,-21.992722 C -29.79744,-22.118475 -29.879173,-22.220608 -29.986673,-22.279391 L -29.986673,-22.570756 C -29.836226,-22.647121 -29.745367,-22.809781 -29.775161,-22.982238 z "
-           style="opacity:0.2;fill:#141414" />
-        <path
-           id="path7509"
-           d="M -29.775161,-22.84803 C -29.796903,-22.973783 -29.878636,-23.075915 -29.986136,-23.134698 L -29.986136,-23.426198 C -29.836092,-23.502428 -29.745233,-23.664954 -29.775161,-23.837411 C -29.797037,-23.963433 -29.879038,-24.065833 -29.986942,-24.124482 C -29.991505,-24.268487 -30.109876,-24.38498 -30.254687,-24.38498 L -34.370443,-24.38498 C -34.518072,-24.38498 -34.638859,-24.264193 -34.638859,-24.116564 L -34.638859,-23.542825 L -34.648925,-23.541483 C -34.872381,-23.509273 -35.024305,-23.305411 -34.986727,-23.088262 C -34.956396,-22.913121 -34.811048,-22.782805 -34.638994,-22.755024 L -34.638994,-22.553578 L -34.649059,-22.551967 C -34.872516,-22.520026 -35.024439,-22.316029 -34.986861,-22.099015 C -34.95653,-21.923874 -34.811182,-21.793424 -34.639128,-21.765642 L -34.639128,-21.564062 L -34.649193,-21.56272 C -34.87265,-21.53051 -35.024573,-21.326648 -34.986995,-21.1095 C -34.954785,-20.923621 -34.793199,-20.786864 -34.607186,-20.771295 C -34.562092,-20.686073 -34.473381,-20.627156 -34.370846,-20.627156 L -34.129003,-20.627156 C -33.83294,-19.892233 -33.162303,-19.285076 -32.381347,-19.285076 C -31.600256,-19.285076 -30.929753,-19.892233 -30.63369,-20.627156 L -30.255089,-20.627156 C -30.10746,-20.627156 -29.986673,-20.747943 -29.986673,-20.895572 L -29.986673,-21.447301 C -29.836629,-21.523531 -29.74577,-21.686057 -29.775698,-21.858514 C -29.79744,-21.984267 -29.879173,-22.0864 -29.986673,-22.145183 L -29.986673,-22.436548 C -29.836226,-22.512913 -29.745367,-22.675573 -29.775161,-22.84803 z "
-           style="opacity:0.2;fill:#141414" />
-        <path
-           id="path7511"
-           d="M -30.507669,-21.694512 C -30.507669,-20.66044 -31.346469,-19.553492 -32.381078,-19.553492 C -33.415553,-19.553492 -34.254353,-20.66044 -34.254353,-21.694512 C -34.254353,-22.728719 -33.415553,-23.298835 -32.381078,-23.298835 C -31.346469,-23.298835 -30.507669,-22.728719 -30.507669,-21.694512 z "
-           style="fill:url(#radialGradient7547)" />
-        <path
-           id="path7513"
-           d="M -32.380944,-35.12162 C -29.897962,-35.12162 -27.884976,-33.031465 -27.884976,-30.452926 C -27.884976,-27.874388 -30.519882,-25.378656 -30.519882,-24.634607 L -34.242141,-24.634607 C -34.242141,-25.557018 -36.876912,-27.874388 -36.876912,-30.452926 C -36.876912,-33.031465 -34.86406,-35.12162 -32.380944,-35.12162 z "
-           style="opacity:0.4;fill:#ffbf61" />
-        <path
-           id="path7515"
-           d="M -32.380944,-35.926868 C -35.304128,-35.926868 -37.68216,-33.482538 -37.68216,-30.477889 C -37.68216,-28.627429 -36.56045,-26.960163 -35.741378,-25.742494 C -35.544227,-25.449384 -35.083893,-24.765325 -35.046315,-24.59515 C -35.036652,-24.159511 -34.680061,-23.807751 -34.242006,-23.807751 L -30.519882,-23.807751 C -30.10075,-23.807751 -29.759459,-24.130656 -29.722015,-24.540124 C -29.679203,-24.679969 -29.267184,-25.29585 -29.111906,-25.527761 C -28.301826,-26.738451 -27.079728,-28.56462 -27.079728,-30.477889 C -27.079728,-33.482538 -29.457894,-35.926868 -32.380944,-35.926868 z M -29.722015,-24.541198 C -29.721747,-24.54254 -29.721612,-24.544016 -29.721478,-24.545493 C -29.72121,-24.546566 -29.720405,-24.547372 -29.72027,-24.548445 C -29.72027,-24.54858 -29.721478,-24.543077 -29.722015,-24.541198 z M -30.519882,-24.612999 L -34.242141,-24.612999 C -34.242141,-25.530579 -36.877046,-27.91304 -36.877046,-30.477889 C -36.877046,-33.042738 -34.86406,-35.12162 -32.380944,-35.12162 C -29.897962,-35.12162 -27.884976,-33.042604 -27.884976,-30.477889 C -27.884976,-27.913174 -30.519882,-25.353022 -30.519882,-24.612999 z "
-           style="opacity:0.2;fill:#ff8b17" />
-        <path
-           id="path7517"
-           d="M -32.380944,-35.658452 C -35.156097,-35.658452 -37.413744,-33.334506 -37.413744,-30.477889 C -37.413744,-28.709296 -36.318338,-27.08095 -35.518459,-25.892136 C -35.223872,-25.454215 -34.778838,-24.792972 -34.778838,-24.613134 C -34.778838,-24.317205 -34.538069,-24.076302 -34.242006,-24.076302 L -30.519882,-24.076302 C -30.223953,-24.076302 -29.98305,-24.317205 -29.98305,-24.613134 L -29.984123,-24.597834 C -29.955805,-24.749489 -29.566334,-25.331683 -29.333483,-25.67955 C -28.542864,-26.860983 -27.348144,-28.646218 -27.348144,-30.477889 C -27.348144,-33.334506 -29.605925,-35.658452 -32.380944,-35.658452 z M -30.519882,-24.612999 L -34.242141,-24.612999 C -34.242141,-25.530579 -36.877046,-27.91304 -36.877046,-30.477889 C -36.877046,-33.042738 -34.86406,-35.12162 -32.380944,-35.12162 C -29.897962,-35.12162 -27.884976,-33.042604 -27.884976,-30.477889 C -27.884976,-27.913174 -30.519882,-25.353022 -30.519882,-24.612999 z "
-           style="opacity:0.2;fill:#ff8b17" />
-        <path
-           id="path7519"
-           d="M -32.380944,-35.390036 C -35.008066,-35.390036 -37.145328,-33.186475 -37.145328,-30.477889 C -37.145328,-28.791163 -36.076227,-27.202006 -35.295673,-26.041912 C -34.891841,-25.4416 -34.510422,-24.874705 -34.510422,-24.613134 C -34.510422,-24.464968 -34.390172,-24.344718 -34.242006,-24.344718 L -30.519882,-24.344718 C -30.371716,-24.344718 -30.251466,-24.464968 -30.251466,-24.613134 C -30.251466,-24.790288 -29.882125,-25.342151 -29.556402,-25.828924 C -28.784035,-26.983113 -27.61656,-28.727817 -27.61656,-30.477889 C -27.61656,-33.186475 -29.753957,-35.390036 -32.380944,-35.390036 z M -30.519882,-24.612999 L -34.242141,-24.612999 C -34.242141,-25.530579 -36.877046,-27.91304 -36.877046,-30.477889 C -36.877046,-33.042738 -34.86406,-35.12162 -32.380944,-35.12162 C -29.897962,-35.12162 -27.884976,-33.042604 -27.884976,-30.477889 C -27.884976,-27.913174 -30.519882,-25.353022 -30.519882,-24.612999 z "
-           style="opacity:0.4;fill:#ff8b17" />
-        <path
-           id="path7521"
-           d="M -30.519882,-24.612999 L -34.242141,-24.612999 C -34.242141,-25.530579 -36.877046,-27.91304 -36.877046,-30.477889 C -36.877046,-33.042738 -34.86406,-35.12162 -32.380944,-35.12162 C -29.897962,-35.12162 -27.884976,-33.042604 -27.884976,-30.477889 C -27.884976,-27.913174 -30.519882,-25.353022 -30.519882,-24.612999 z "
-           style="opacity:0.2;fill:#ffbf61" />
-        <path
-           id="path7523"
-           d="M -31.631661,-29.235257 L -31.631661,-27.362519 C -31.631661,-27.156778 -31.800494,-26.988078 -32.006369,-26.988078 L -32.755653,-26.988078 C -32.961662,-26.988078 -33.130361,-27.156778 -33.130361,-27.362519 L -33.130361,-29.235257 L -33.50507,-29.235257 L -33.50507,-27.362519 C -33.50507,-26.950634 -33.16794,-26.613504 -32.621579,-26.613504 L -32.621579,-24.366191 L -32.140712,-24.366191 L -32.140712,-26.61337 C -31.594351,-26.61337 -31.25722,-26.9505 -31.25722,-27.362384 L -31.25722,-29.235257 L -31.631661,-29.235257 z "
-           style="fill:#cba572" />
-        <path
-           id="path7525"
-           d="M -32.380944,-35.255828 C -34.934117,-35.255828 -37.01112,-33.112392 -37.01112,-30.477889 C -37.01112,-28.831694 -35.955037,-27.278102 -35.184012,-26.14391 C -34.750655,-25.506154 -34.376214,-24.928657 -34.376214,-24.626554 L -34.24308,-24.626554 C -34.267506,-25.553261 -36.876912,-27.924984 -36.876912,-30.477889 C -36.876912,-33.042604 -34.86406,-35.12162 -32.380944,-35.12162 C -29.897962,-35.12162 -27.884976,-33.042604 -27.884976,-30.477889 C -27.884976,-27.927534 -30.489282,-25.382682 -30.518674,-24.626554 L -30.385808,-24.626554 C -30.385808,-24.843971 -30.053375,-25.362551 -29.668466,-25.931996 C -28.859058,-27.128863 -27.750768,-28.768213 -27.750768,-30.477889 C -27.750768,-33.112392 -29.827905,-35.255828 -32.380944,-35.255828 z "
-           style="fill:#9e8c68" />
-        <path
-           id="path7527"
-           d="M -30.032304,-21.163988 C -30.032304,-21.016359 -30.153091,-20.895572 -30.30072,-20.895572 L -34.32696,-20.895572 C -34.474589,-20.895572 -34.595376,-21.016359 -34.595376,-21.163988 L -34.595376,-24.38498 C -34.595376,-24.532609 -34.474589,-24.653396 -34.32696,-24.653396 L -30.30072,-24.653396 C -30.153091,-24.653396 -30.032304,-24.532609 -30.032304,-24.38498 L -30.032304,-21.163988 z "
-           style="fill:#966746" />
-        <path
-           id="path7529"
-           d="M -30.032304,-21.298196 C -30.032304,-21.076753 -30.213485,-20.895572 -30.434928,-20.895572 L -34.192752,-20.895572 C -34.414195,-20.895572 -34.595376,-21.076753 -34.595376,-21.298196 L -34.595376,-24.116564 C -34.595376,-24.338007 -34.414195,-24.519188 -34.192752,-24.519188 L -30.434928,-24.519188 C -30.213485,-24.519188 -30.032304,-24.338007 -30.032304,-24.116564 L -30.032304,-21.298196 z "
-           style="fill:url(#linearGradient7549)" />
-        <path
-           id="path7531"
-           d="M -29.825355,-24.105827 C -29.788582,-23.888813 -29.937553,-23.684817 -30.156581,-23.652741 L -34.470965,-23.020353 C -34.689993,-22.988412 -34.899491,-23.139664 -34.936399,-23.356678 C -34.973306,-23.573827 -34.824201,-23.777689 -34.605173,-23.809899 L -30.290789,-24.442153 C -30.071761,-24.474094 -29.862262,-24.322842 -29.825355,-24.105827 z "
-           style="fill:url(#linearGradient7551)" />
-        <path
-           id="path7533"
-           d="M -29.825355,-23.116446 C -29.788582,-22.899297 -29.937553,-22.695435 -30.156581,-22.66336 L -34.470965,-22.031106 C -34.689993,-21.998896 -34.899491,-22.150283 -34.936399,-22.367431 C -34.973306,-22.584445 -34.824201,-22.788442 -34.605173,-22.820383 L -30.290789,-23.452637 C -30.071761,-23.484847 -29.862262,-23.33346 -29.825355,-23.116446 z "
-           style="fill:url(#linearGradient7553)" />
-        <path
-           id="path7535"
-           d="M -29.825355,-22.127065 C -29.788582,-21.91005 -29.937553,-21.706054 -30.156581,-21.673978 L -34.470965,-21.04159 C -34.689993,-21.009649 -34.899491,-21.160901 -34.936399,-21.377916 C -34.973306,-21.595064 -34.824201,-21.798926 -34.605173,-21.831136 L -30.290789,-22.46339 C -30.071761,-22.495331 -29.862262,-22.344079 -29.825355,-22.127065 z "
-           style="fill:url(#linearGradient7555)" />
-        <path
-           id="path7537"
-           d="M -34.887815,-23.22341 L -34.936533,-23.356678 C -34.97344,-23.573827 -34.824335,-23.777689 -34.605307,-23.809899 L -30.290923,-24.442153 C -30.071895,-24.474094 -29.882528,-24.396656 -29.845755,-24.179642 L -34.887815,-23.22341 z "
-           style="fill:url(#linearGradient7557)" />
-        <path
-           id="path7539"
-           d="M -34.880031,-22.220339 L -29.853136,-23.208244 C -29.889909,-23.425259 -30.071761,-23.484847 -30.290789,-23.452503 L -34.605173,-22.820249 C -34.824201,-22.788307 -34.973306,-22.584311 -34.936399,-22.367297 L -34.880031,-22.220339 z "
-           style="fill:url(#linearGradient7559)" />
-        <path
-           id="path7541"
-           d="M -34.853592,-21.194185 L -29.853002,-22.218594 C -29.889909,-22.435609 -30.071761,-22.495466 -30.290789,-22.46339 L -34.605173,-21.831136 C -34.824201,-21.798926 -34.973306,-21.595064 -34.936399,-21.377916 L -34.853592,-21.194185 z "
-           style="fill:url(#linearGradient7561)" />
-        <path
-           id="path7543"
-           d="M -28.589568,-32.601596 C -29.364217,-34.00152 -30.787895,-34.925676 -32.380944,-34.925676 C -33.973993,-34.925676 -35.397671,-34.00152 -36.17232,-32.601596 C -35.153681,-33.183656 -33.826767,-33.537429 -32.380944,-33.537429 C -30.935121,-33.537295 -29.608207,-33.183656 -28.589568,-32.601596 z "
-           style="fill:url(#linearGradient7563)" />
-        <path
-           id="path7545"
-           d="M -34.042707,-20.761364 L -30.719449,-20.761364 C -30.706297,-20.805384 -30.69462,-20.85021 -30.684823,-20.895572 L -34.077199,-20.895572 C -34.067402,-20.85021 -34.055726,-20.805384 -34.042707,-20.761364 z "
-           style="fill:#3f3f3f" />
-      </g>
-    </clipPath>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_10_"
-       id="radialGradient7547"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.3746685,0,0,0.3745343,-41.145122,6.4690164)"
-       cx="-27.6128"
-       cy="-86.5356"
-       r="6.2114" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_1_"
-       id="linearGradient7549"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.134208,0,0,0.134208,-60.169549,-40.637602)"
-       x1="47.9995"
-       y1="100.5"
-       x2="81.9995"
-       y2="100.5" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_2_"
-       id="linearGradient7551"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.134208,0,0,0.134208,-60.169549,-40.637602)"
-       x1="44.8901"
-       y1="95.7324"
-       x2="83.5847"
-       y2="90.0861" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_3_"
-       id="linearGradient7553"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.134208,0,0,0.134208,-41.040947,-42.162908)"
-       x1="75.5039"
-       y1="11.96"
-       x2="85.5969"
-       y2="36.3307" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_4_"
-       id="linearGradient7555"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.134208,0,0,0.134208,-41.040947,-42.162908)"
-       x1="37.6743"
-       y1="25.6035"
-       x2="37.6743"
-       y2="47.5006" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_5_"
-       id="linearGradient7557"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.134208,0,0,0.134208,-60.169549,-40.637602)"
-       x1="44.7505"
-       y1="94.7715"
-       x2="83.3739"
-       y2="89.1356" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_6_"
-       id="linearGradient7559"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.3746685,-5.350873e-2,0,0.3745343,-41.145122,8.898557)"
-       x1="-34.5078"
-       y1="-100.6235"
-       x2="-20.9253"
-       y2="-100.6235" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_7_"
-       id="linearGradient7561"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.134208,0,0,0.134208,-60.169549,-40.637602)"
-       x1="45.416"
-       y1="107.0176"
-       x2="83.3354"
-       y2="107.0176" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_8_"
-       id="linearGradient7563"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.134208,0,0,0.134208,-60.169549,-40.637602)"
-       x1="36.2495"
-       y1="18.1187"
-       x2="92.7495"
-       y2="18.1187" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#light_1_"
-       id="radialGradient7653"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2.7917,0,0,2.7907,141.7533,350.9971)"
-       cx="-27.6724"
-       cy="-109.9067"
-       r="9" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_10_"
-       id="radialGradient8092"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.3746685,0,0,0.3745343,-41.145122,6.4690164)"
-       cx="-27.6128"
-       cy="-86.5356"
-       r="6.2114" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_1_"
-       id="linearGradient8094"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.134208,0,0,0.134208,-60.169549,-40.637602)"
-       x1="47.9995"
-       y1="100.5"
-       x2="81.9995"
-       y2="100.5" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_2_"
-       id="linearGradient8096"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.134208,0,0,0.134208,-60.169549,-40.637602)"
-       x1="44.8901"
-       y1="95.7324"
-       x2="83.5847"
-       y2="90.0861" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_3_"
-       id="linearGradient8098"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.134208,0,0,0.134208,-41.040947,-42.162908)"
-       x1="75.5039"
-       y1="11.96"
-       x2="85.5969"
-       y2="36.3307" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_4_"
-       id="linearGradient8100"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.134208,0,0,0.134208,-41.040947,-42.162908)"
-       x1="37.6743"
-       y1="25.6035"
-       x2="37.6743"
-       y2="47.5006" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_5_"
-       id="linearGradient8102"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.134208,0,0,0.134208,-60.169549,-40.637602)"
-       x1="44.7505"
-       y1="94.7715"
-       x2="83.3739"
-       y2="89.1356" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_6_"
-       id="linearGradient8104"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.3746685,-5.350873e-2,0,0.3745343,-41.145122,8.898557)"
-       x1="-34.5078"
-       y1="-100.6235"
-       x2="-20.9253"
-       y2="-100.6235" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_7_"
-       id="linearGradient8106"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.134208,0,0,0.134208,-60.169549,-40.637602)"
-       x1="45.416"
-       y1="107.0176"
-       x2="83.3354"
-       y2="107.0176" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_8_"
-       id="linearGradient8108"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.134208,0,0,0.134208,-60.169549,-40.637602)"
-       x1="36.2495"
-       y1="18.1187"
-       x2="92.7495"
-       y2="18.1187" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#light_1_"
-       id="radialGradient8110"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2.7917,0,0,2.7907,141.7533,350.9971)"
-       cx="-27.6724"
-       cy="-109.9067"
-       r="9" />
-    <mask
-       maskUnits="userSpaceOnUse"
-       id="mask8044">
-      <g
-         id="g8046"
-         transform="translate(8.8639968,22.032387)">
-        <g
-           id="g8048">
-          <path
-             style="opacity:0.2;fill:#141414"
-             d="M -29.775161,-22.982238 C -29.796903,-23.107991 -29.878636,-23.210123 -29.986136,-23.268906 L -29.986136,-23.560406 C -29.836092,-23.636636 -29.745233,-23.799162 -29.775161,-23.971619 C -29.797037,-24.097641 -29.879038,-24.200041 -29.986942,-24.25869 C -29.991505,-24.402695 -30.109876,-24.519188 -30.254687,-24.519188 L -34.370443,-24.519188 C -34.518072,-24.519188 -34.638859,-24.398401 -34.638859,-24.250772 L -34.638859,-23.677033 L -34.648925,-23.675691 C -34.872381,-23.643481 -35.024305,-23.439619 -34.986727,-23.22247 C -34.956396,-23.047329 -34.811048,-22.917013 -34.638994,-22.889232 L -34.638994,-22.687786 L -34.649059,-22.686175 C -34.872516,-22.654234 -35.024439,-22.450237 -34.986861,-22.233223 C -34.95653,-22.058082 -34.811182,-21.927632 -34.639128,-21.89985 L -34.639128,-21.69827 L -34.649193,-21.696928 C -34.87265,-21.664718 -35.024573,-21.460856 -34.986995,-21.243708 C -34.954785,-21.057829 -34.793199,-20.921072 -34.607186,-20.905503 C -34.562092,-20.820281 -34.473381,-20.761364 -34.370846,-20.761364 L -34.129003,-20.761364 C -33.83294,-20.026441 -33.162303,-19.419284 -32.381347,-19.419284 C -31.600256,-19.419284 -30.929753,-20.026441 -30.63369,-20.761364 L -30.255089,-20.761364 C -30.10746,-20.761364 -29.986673,-20.882151 -29.986673,-21.02978 L -29.986673,-21.581509 C -29.836629,-21.657739 -29.74577,-21.820265 -29.775698,-21.992722 C -29.79744,-22.118475 -29.879173,-22.220608 -29.986673,-22.279391 L -29.986673,-22.570756 C -29.836226,-22.647121 -29.745367,-22.809781 -29.775161,-22.982238 z "
-             id="path8050" />
-          <path
-             style="opacity:0.2;fill:#141414"
-             d="M -29.775161,-22.84803 C -29.796903,-22.973783 -29.878636,-23.075915 -29.986136,-23.134698 L -29.986136,-23.426198 C -29.836092,-23.502428 -29.745233,-23.664954 -29.775161,-23.837411 C -29.797037,-23.963433 -29.879038,-24.065833 -29.986942,-24.124482 C -29.991505,-24.268487 -30.109876,-24.38498 -30.254687,-24.38498 L -34.370443,-24.38498 C -34.518072,-24.38498 -34.638859,-24.264193 -34.638859,-24.116564 L -34.638859,-23.542825 L -34.648925,-23.541483 C -34.872381,-23.509273 -35.024305,-23.305411 -34.986727,-23.088262 C -34.956396,-22.913121 -34.811048,-22.782805 -34.638994,-22.755024 L -34.638994,-22.553578 L -34.649059,-22.551967 C -34.872516,-22.520026 -35.024439,-22.316029 -34.986861,-22.099015 C -34.95653,-21.923874 -34.811182,-21.793424 -34.639128,-21.765642 L -34.639128,-21.564062 L -34.649193,-21.56272 C -34.87265,-21.53051 -35.024573,-21.326648 -34.986995,-21.1095 C -34.954785,-20.923621 -34.793199,-20.786864 -34.607186,-20.771295 C -34.562092,-20.686073 -34.473381,-20.627156 -34.370846,-20.627156 L -34.129003,-20.627156 C -33.83294,-19.892233 -33.162303,-19.285076 -32.381347,-19.285076 C -31.600256,-19.285076 -30.929753,-19.892233 -30.63369,-20.627156 L -30.255089,-20.627156 C -30.10746,-20.627156 -29.986673,-20.747943 -29.986673,-20.895572 L -29.986673,-21.447301 C -29.836629,-21.523531 -29.74577,-21.686057 -29.775698,-21.858514 C -29.79744,-21.984267 -29.879173,-22.0864 -29.986673,-22.145183 L -29.986673,-22.436548 C -29.836226,-22.512913 -29.745367,-22.675573 -29.775161,-22.84803 z "
-             id="path8052" />
-          <path
-             style="fill:url(#radialGradient8092)"
-             d="M -30.507669,-21.694512 C -30.507669,-20.66044 -31.346469,-19.553492 -32.381078,-19.553492 C -33.415553,-19.553492 -34.254353,-20.66044 -34.254353,-21.694512 C -34.254353,-22.728719 -33.415553,-23.298835 -32.381078,-23.298835 C -31.346469,-23.298835 -30.507669,-22.728719 -30.507669,-21.694512 z "
-             id="path8054" />
-          <path
-             style="opacity:0.4;fill:#ffbf61"
-             d="M -32.380944,-35.12162 C -29.897962,-35.12162 -27.884976,-33.031465 -27.884976,-30.452926 C -27.884976,-27.874388 -30.519882,-25.378656 -30.519882,-24.634607 L -34.242141,-24.634607 C -34.242141,-25.557018 -36.876912,-27.874388 -36.876912,-30.452926 C -36.876912,-33.031465 -34.86406,-35.12162 -32.380944,-35.12162 z "
-             id="path8056" />
-          <path
-             style="opacity:0.2;fill:#ff8b17"
-             d="M -32.380944,-35.926868 C -35.304128,-35.926868 -37.68216,-33.482538 -37.68216,-30.477889 C -37.68216,-28.627429 -36.56045,-26.960163 -35.741378,-25.742494 C -35.544227,-25.449384 -35.083893,-24.765325 -35.046315,-24.59515 C -35.036652,-24.159511 -34.680061,-23.807751 -34.242006,-23.807751 L -30.519882,-23.807751 C -30.10075,-23.807751 -29.759459,-24.130656 -29.722015,-24.540124 C -29.679203,-24.679969 -29.267184,-25.29585 -29.111906,-25.527761 C -28.301826,-26.738451 -27.079728,-28.56462 -27.079728,-30.477889 C -27.079728,-33.482538 -29.457894,-35.926868 -32.380944,-35.926868 z M -29.722015,-24.541198 C -29.721747,-24.54254 -29.721612,-24.544016 -29.721478,-24.545493 C -29.72121,-24.546566 -29.720405,-24.547372 -29.72027,-24.548445 C -29.72027,-24.54858 -29.721478,-24.543077 -29.722015,-24.541198 z M -30.519882,-24.612999 L -34.242141,-24.612999 C -34.242141,-25.530579 -36.877046,-27.91304 -36.877046,-30.477889 C -36.877046,-33.042738 -34.86406,-35.12162 -32.380944,-35.12162 C -29.897962,-35.12162 -27.884976,-33.042604 -27.884976,-30.477889 C -27.884976,-27.913174 -30.519882,-25.353022 -30.519882,-24.612999 z "
-             id="path8058" />
-          <path
-             style="opacity:0.2;fill:#ff8b17"
-             d="M -32.380944,-35.658452 C -35.156097,-35.658452 -37.413744,-33.334506 -37.413744,-30.477889 C -37.413744,-28.709296 -36.318338,-27.08095 -35.518459,-25.892136 C -35.223872,-25.454215 -34.778838,-24.792972 -34.778838,-24.613134 C -34.778838,-24.317205 -34.538069,-24.076302 -34.242006,-24.076302 L -30.519882,-24.076302 C -30.223953,-24.076302 -29.98305,-24.317205 -29.98305,-24.613134 L -29.984123,-24.597834 C -29.955805,-24.749489 -29.566334,-25.331683 -29.333483,-25.67955 C -28.542864,-26.860983 -27.348144,-28.646218 -27.348144,-30.477889 C -27.348144,-33.334506 -29.605925,-35.658452 -32.380944,-35.658452 z M -30.519882,-24.612999 L -34.242141,-24.612999 C -34.242141,-25.530579 -36.877046,-27.91304 -36.877046,-30.477889 C -36.877046,-33.042738 -34.86406,-35.12162 -32.380944,-35.12162 C -29.897962,-35.12162 -27.884976,-33.042604 -27.884976,-30.477889 C -27.884976,-27.913174 -30.519882,-25.353022 -30.519882,-24.612999 z "
-             id="path8060" />
-          <path
-             style="opacity:0.4;fill:#ff8b17"
-             d="M -32.380944,-35.390036 C -35.008066,-35.390036 -37.145328,-33.186475 -37.145328,-30.477889 C -37.145328,-28.791163 -36.076227,-27.202006 -35.295673,-26.041912 C -34.891841,-25.4416 -34.510422,-24.874705 -34.510422,-24.613134 C -34.510422,-24.464968 -34.390172,-24.344718 -34.242006,-24.344718 L -30.519882,-24.344718 C -30.371716,-24.344718 -30.251466,-24.464968 -30.251466,-24.613134 C -30.251466,-24.790288 -29.882125,-25.342151 -29.556402,-25.828924 C -28.784035,-26.983113 -27.61656,-28.727817 -27.61656,-30.477889 C -27.61656,-33.186475 -29.753957,-35.390036 -32.380944,-35.390036 z M -30.519882,-24.612999 L -34.242141,-24.612999 C -34.242141,-25.530579 -36.877046,-27.91304 -36.877046,-30.477889 C -36.877046,-33.042738 -34.86406,-35.12162 -32.380944,-35.12162 C -29.897962,-35.12162 -27.884976,-33.042604 -27.884976,-30.477889 C -27.884976,-27.913174 -30.519882,-25.353022 -30.519882,-24.612999 z "
-             id="path8062" />
-          <path
-             style="opacity:0.2;fill:#ffbf61"
-             d="M -30.519882,-24.612999 L -34.242141,-24.612999 C -34.242141,-25.530579 -36.877046,-27.91304 -36.877046,-30.477889 C -36.877046,-33.042738 -34.86406,-35.12162 -32.380944,-35.12162 C -29.897962,-35.12162 -27.884976,-33.042604 -27.884976,-30.477889 C -27.884976,-27.913174 -30.519882,-25.353022 -30.519882,-24.612999 z "
-             id="path8064" />
-          <path
-             style="fill:#cba572"
-             d="M -31.631661,-29.235257 L -31.631661,-27.362519 C -31.631661,-27.156778 -31.800494,-26.988078 -32.006369,-26.988078 L -32.755653,-26.988078 C -32.961662,-26.988078 -33.130361,-27.156778 -33.130361,-27.362519 L -33.130361,-29.235257 L -33.50507,-29.235257 L -33.50507,-27.362519 C -33.50507,-26.950634 -33.16794,-26.613504 -32.621579,-26.613504 L -32.621579,-24.366191 L -32.140712,-24.366191 L -32.140712,-26.61337 C -31.594351,-26.61337 -31.25722,-26.9505 -31.25722,-27.362384 L -31.25722,-29.235257 L -31.631661,-29.235257 z "
-             id="path8066" />
-          <path
-             style="fill:#9e8c68"
-             d="M -32.380944,-35.255828 C -34.934117,-35.255828 -37.01112,-33.112392 -37.01112,-30.477889 C -37.01112,-28.831694 -35.955037,-27.278102 -35.184012,-26.14391 C -34.750655,-25.506154 -34.376214,-24.928657 -34.376214,-24.626554 L -34.24308,-24.626554 C -34.267506,-25.553261 -36.876912,-27.924984 -36.876912,-30.477889 C -36.876912,-33.042604 -34.86406,-35.12162 -32.380944,-35.12162 C -29.897962,-35.12162 -27.884976,-33.042604 -27.884976,-30.477889 C -27.884976,-27.927534 -30.489282,-25.382682 -30.518674,-24.626554 L -30.385808,-24.626554 C -30.385808,-24.843971 -30.053375,-25.362551 -29.668466,-25.931996 C -28.859058,-27.128863 -27.750768,-28.768213 -27.750768,-30.477889 C -27.750768,-33.112392 -29.827905,-35.255828 -32.380944,-35.255828 z "
-             id="path8068" />
-          <path
-             style="fill:#966746"
-             d="M -30.032304,-21.163988 C -30.032304,-21.016359 -30.153091,-20.895572 -30.30072,-20.895572 L -34.32696,-20.895572 C -34.474589,-20.895572 -34.595376,-21.016359 -34.595376,-21.163988 L -34.595376,-24.38498 C -34.595376,-24.532609 -34.474589,-24.653396 -34.32696,-24.653396 L -30.30072,-24.653396 C -30.153091,-24.653396 -30.032304,-24.532609 -30.032304,-24.38498 L -30.032304,-21.163988 z "
-             id="path8070" />
-          <path
-             style="fill:url(#linearGradient8094)"
-             d="M -30.032304,-21.298196 C -30.032304,-21.076753 -30.213485,-20.895572 -30.434928,-20.895572 L -34.192752,-20.895572 C -34.414195,-20.895572 -34.595376,-21.076753 -34.595376,-21.298196 L -34.595376,-24.116564 C -34.595376,-24.338007 -34.414195,-24.519188 -34.192752,-24.519188 L -30.434928,-24.519188 C -30.213485,-24.519188 -30.032304,-24.338007 -30.032304,-24.116564 L -30.032304,-21.298196 z "
-             id="path8072" />
-          <path
-             style="fill:url(#linearGradient8096)"
-             d="M -29.825355,-24.105827 C -29.788582,-23.888813 -29.937553,-23.684817 -30.156581,-23.652741 L -34.470965,-23.020353 C -34.689993,-22.988412 -34.899491,-23.139664 -34.936399,-23.356678 C -34.973306,-23.573827 -34.824201,-23.777689 -34.605173,-23.809899 L -30.290789,-24.442153 C -30.071761,-24.474094 -29.862262,-24.322842 -29.825355,-24.105827 z "
-             id="path8074" />
-          <path
-             style="fill:url(#linearGradient8098)"
-             d="M -29.825355,-23.116446 C -29.788582,-22.899297 -29.937553,-22.695435 -30.156581,-22.66336 L -34.470965,-22.031106 C -34.689993,-21.998896 -34.899491,-22.150283 -34.936399,-22.367431 C -34.973306,-22.584445 -34.824201,-22.788442 -34.605173,-22.820383 L -30.290789,-23.452637 C -30.071761,-23.484847 -29.862262,-23.33346 -29.825355,-23.116446 z "
-             id="path8076" />
-          <path
-             style="fill:url(#linearGradient8100)"
-             d="M -29.825355,-22.127065 C -29.788582,-21.91005 -29.937553,-21.706054 -30.156581,-21.673978 L -34.470965,-21.04159 C -34.689993,-21.009649 -34.899491,-21.160901 -34.936399,-21.377916 C -34.973306,-21.595064 -34.824201,-21.798926 -34.605173,-21.831136 L -30.290789,-22.46339 C -30.071761,-22.495331 -29.862262,-22.344079 -29.825355,-22.127065 z "
-             id="path8078" />
-          <path
-             style="fill:url(#linearGradient8102)"
-             d="M -34.887815,-23.22341 L -34.936533,-23.356678 C -34.97344,-23.573827 -34.824335,-23.777689 -34.605307,-23.809899 L -30.290923,-24.442153 C -30.071895,-24.474094 -29.882528,-24.396656 -29.845755,-24.179642 L -34.887815,-23.22341 z "
-             id="path8080" />
-          <path
-             style="fill:url(#linearGradient8104)"
-             d="M -34.880031,-22.220339 L -29.853136,-23.208244 C -29.889909,-23.425259 -30.071761,-23.484847 -30.290789,-23.452503 L -34.605173,-22.820249 C -34.824201,-22.788307 -34.973306,-22.584311 -34.936399,-22.367297 L -34.880031,-22.220339 z "
-             id="path8082" />
-          <path
-             style="fill:url(#linearGradient8106)"
-             d="M -34.853592,-21.194185 L -29.853002,-22.218594 C -29.889909,-22.435609 -30.071761,-22.495466 -30.290789,-22.46339 L -34.605173,-21.831136 C -34.824201,-21.798926 -34.973306,-21.595064 -34.936399,-21.377916 L -34.853592,-21.194185 z "
-             id="path8084" />
-          <path
-             style="fill:url(#linearGradient8108)"
-             d="M -28.589568,-32.601596 C -29.364217,-34.00152 -30.787895,-34.925676 -32.380944,-34.925676 C -33.973993,-34.925676 -35.397671,-34.00152 -36.17232,-32.601596 C -35.153681,-33.183656 -33.826767,-33.537429 -32.380944,-33.537429 C -30.935121,-33.537295 -29.608207,-33.183656 -28.589568,-32.601596 z "
-             id="path8086" />
-          <path
-             style="fill:#3f3f3f"
-             d="M -34.042707,-20.761364 L -30.719449,-20.761364 C -30.706297,-20.805384 -30.69462,-20.85021 -30.684823,-20.895572 L -34.077199,-20.895572 C -34.067402,-20.85021 -34.055726,-20.805384 -34.042707,-20.761364 z "
-             id="path8088" />
-        </g>
-        <ellipse
-           clip-path="url(#clipPath7503)"
-           transform="matrix(0.134208,0,0,0.134208,-41.03736,-36.195284)"
-           ry="60.116001"
-           rx="60.125"
-           cy="44.278999"
-           cx="64.5"
-           id="ellipse8090"
-           style="fill:url(#radialGradient8110)"
-           sodipodi:cx="64.5"
-           sodipodi:cy="44.278999"
-           sodipodi:rx="60.125"
-           sodipodi:ry="60.116001" />
-      </g>
-    </mask>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_3_"
-       id="linearGradient8386"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-2.6725931e-2,-44.465488)"
-       x1="75.5039"
-       y1="11.96"
-       x2="85.5969"
-       y2="36.3307" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_4_"
-       id="linearGradient8388"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-2.6725931e-2,-44.465488)"
-       x1="37.6743"
-       y1="25.6035"
-       x2="37.6743"
-       y2="47.5006" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_3_"
-       id="linearGradient8470"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-2.6725931e-2,-44.465488)"
-       x1="75.5039"
-       y1="11.96"
-       x2="85.5969"
-       y2="36.3307" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#XMLID_4_"
-       id="linearGradient8472"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-2.6725931e-2,-44.465488)"
-       x1="37.6743"
-       y1="25.6035"
-       x2="37.6743"
-       y2="47.5006" />
-    <mask
-       maskUnits="userSpaceOnUse"
-       id="mask8432">
-      <g
-         style="overflow:visible"
-         id="g8434"
-         transform="matrix(0.1570828,0,0,0.1570828,-28.616402,11.0008)">
-        <path
-           id="path8436"
-           d="M 51.868,84.936 C 45.459,79.297 41.784,71.221 41.784,62.78 C 41.784,54.276 45.498,46.164 51.974,40.523 C 52.339,40.204 52.419,39.667 52.16,39.256 L 42.036,23.192 C 41.888,22.958 41.648,22.796 41.375,22.748 C 41.102,22.7 40.819,22.769 40.602,22.937 C 32.334,29.305 26.119,38.265 23.1,48.167 C 22.982,48.554 23.112,48.974 23.431,49.226 C 27.586,52.517 30.066,57.583 30.066,62.779 C 30.066,67.975 27.585,73.043 23.429,76.334 C 23.112,76.585 22.98,77.004 23.098,77.392 C 26.093,87.211 32.238,96.12 40.404,102.474 C 40.623,102.645 40.903,102.715 41.177,102.667 C 41.45,102.62 41.691,102.459 41.84,102.226 L 52.049,86.204 C 52.309,85.794 52.232,85.256 51.868,84.936 z M 12.803,50.223 C 5.732,50.223 0,55.951 0,63.016 C 0,70.081 5.732,75.81 12.803,75.81 C 19.874,75.81 25.606,70.081 25.606,63.016 C 25.606,55.951 19.874,50.223 12.803,50.223 z M 58.779,35.162 C 59.036,35.57 59.551,35.732 59.996,35.545 C 63.75,33.958 67.65,33.153 71.586,33.153 C 86.064,33.153 98.693,43.887 100.963,58.122 C 101.039,58.6 101.451,58.951 101.934,58.951 L 121.014,58.98 C 121.292,58.98 121.557,58.863 121.744,58.657 C 121.931,58.451 122.021,58.178 121.995,57.9 C 120.967,47.338 116.471,37.15 109.336,29.215 C 109.014,28.855 108.477,28.783 108.07,29.046 C 105.193,30.904 101.925,31.888 98.623,31.888 C 88.99,31.888 81.154,24.098 81.153,14.524 C 81.154,14.519 81.172,14.158 81.172,14.142 C 81.172,13.665 80.829,13.254 80.356,13.172 C 77.344,12.65 74.394,12.284 71.586,12.284 C 63.875,12.284 56.084,14.221 49.054,17.695 C 48.804,17.819 48.618,18.043 48.543,18.311 C 48.467,18.579 48.509,18.866 48.657,19.102 L 58.779,35.162 z M 98,27.5 C 104.908,27.5 110.51,21.902 110.51,15 C 110.51,8.096 104.908,2.5 98,2.5 C 91.092,2.5 85.49,8.096 85.49,15 C 85.49,21.902 91.092,27.5 98,27.5 z M 120.994,66.733 L 101.916,66.795 C 101.435,66.796 101.024,67.147 100.947,67.621 C 98.646,81.75 86.024,92.405 71.586,92.405 C 67.604,92.405 63.66,91.581 59.864,89.955 C 59.42,89.766 58.906,89.925 58.645,90.33 L 48.442,106.345 C 48.293,106.58 48.25,106.867 48.324,107.136 C 48.398,107.404 48.583,107.629 48.832,107.753 C 55.917,111.3 63.786,113.174 71.586,113.174 C 74.479,113.174 77.492,112.901 80.541,112.36 C 80.969,112.285 81.297,111.936 81.348,111.505 C 82.364,102.73 89.791,96.112 98.623,96.112 C 101.361,96.112 104.147,96.81 106.679,98.13 C 107.064,98.331 107.533,98.257 107.838,97.946 C 115.823,89.803 120.846,79.104 121.978,67.817 C 122.006,67.54 121.915,67.264 121.727,67.057 C 121.539,66.85 121.272,66.732 120.994,66.733 z M 98.486,100.545 C 91.415,100.545 85.682,106.242 85.682,113.273 C 85.682,120.302 91.414,126.001 98.486,126.001 C 105.556,126.001 111.289,120.303 111.289,113.273 C 111.289,106.242 105.557,100.545 98.486,100.545 z "
-           style="opacity:0.2;fill:#141414;fill-rule:evenodd" />
-        <path
-           id="path8438"
-           d="M 51.868,85.936 C 45.459,80.297 41.784,72.221 41.784,63.78 C 41.784,55.276 45.498,47.164 51.974,41.523 C 52.339,41.204 52.419,40.667 52.16,40.256 L 42.036,24.192 C 41.888,23.958 41.648,23.796 41.375,23.748 C 41.102,23.7 40.819,23.769 40.602,23.937 C 32.334,30.305 26.119,39.265 23.1,49.167 C 22.982,49.554 23.112,49.974 23.431,50.226 C 27.586,53.517 30.066,58.583 30.066,63.779 C 30.066,68.975 27.585,74.043 23.429,77.334 C 23.112,77.585 22.98,78.004 23.098,78.392 C 26.093,88.211 32.238,97.12 40.404,103.474 C 40.623,103.645 40.903,103.715 41.177,103.667 C 41.45,103.62 41.691,103.459 41.84,103.226 L 52.049,87.204 C 52.309,86.794 52.232,86.256 51.868,85.936 z M 12.803,51.223 C 5.732,51.223 0,56.951 0,64.016 C 0,71.081 5.732,76.81 12.803,76.81 C 19.874,76.81 25.606,71.081 25.606,64.016 C 25.606,56.951 19.874,51.223 12.803,51.223 z M 58.779,36.162 C 59.036,36.57 59.551,36.732 59.996,36.545 C 63.75,34.958 67.65,34.153 71.586,34.153 C 86.064,34.153 98.693,44.887 100.963,59.122 C 101.039,59.6 101.451,59.951 101.934,59.951 L 121.014,59.98 C 121.292,59.98 121.557,59.863 121.744,59.657 C 121.931,59.451 122.021,59.178 121.995,58.9 C 120.967,48.338 116.471,38.15 109.336,30.215 C 109.014,29.855 108.477,29.783 108.07,30.046 C 105.193,31.904 101.925,32.888 98.623,32.888 C 88.99,32.888 81.154,25.098 81.153,15.524 C 81.154,15.519 81.172,15.158 81.172,15.142 C 81.172,14.665 80.829,14.254 80.356,14.172 C 77.344,13.65 74.394,13.284 71.586,13.284 C 63.875,13.284 56.084,15.221 49.054,18.695 C 48.804,18.819 48.618,19.043 48.543,19.311 C 48.467,19.579 48.509,19.866 48.657,20.102 L 58.779,36.162 z M 98,28.5 C 104.908,28.5 110.51,22.902 110.51,16 C 110.51,9.096 104.908,3.5 98,3.5 C 91.092,3.5 85.49,9.096 85.49,16 C 85.49,22.902 91.092,28.5 98,28.5 z M 120.994,67.733 L 101.916,67.795 C 101.435,67.796 101.024,68.147 100.947,68.621 C 98.646,82.75 86.024,93.405 71.586,93.405 C 67.604,93.405 63.66,92.581 59.864,90.955 C 59.42,90.766 58.906,90.925 58.645,91.33 L 48.442,107.345 C 48.293,107.58 48.25,107.867 48.324,108.136 C 48.398,108.404 48.583,108.629 48.832,108.753 C 55.917,112.3 63.786,114.174 71.586,114.174 C 74.479,114.174 77.492,113.901 80.541,113.36 C 80.969,113.285 81.297,112.936 81.348,112.505 C 82.364,103.73 89.791,97.112 98.623,97.112 C 101.361,97.112 104.147,97.81 106.679,99.13 C 107.064,99.331 107.533,99.257 107.838,98.946 C 115.823,90.803 120.846,80.104 121.978,68.817 C 122.006,68.54 121.915,68.264 121.727,68.057 C 121.539,67.85 121.272,67.732 120.994,67.733 z M 98.486,101.545 C 91.415,101.545 85.682,107.242 85.682,114.273 C 85.682,121.302 91.414,127.001 98.486,127.001 C 105.556,127.001 111.289,121.303 111.289,114.273 C 111.289,107.242 105.557,101.545 98.486,101.545 z "
-           style="opacity:0.2;fill:#141414;fill-rule:evenodd" />
-        <path
-           id="path8440"
-           d="M 51.868,86.936 C 45.459,81.297 41.784,73.221 41.784,64.78 C 41.784,56.276 45.498,48.164 51.974,42.523 C 52.339,42.204 52.419,41.667 52.16,41.256 L 42.036,25.192 C 41.888,24.958 41.648,24.796 41.375,24.748 C 41.102,24.7 40.819,24.769 40.602,24.937 C 32.334,31.305 26.119,40.265 23.1,50.167 C 22.982,50.554 23.112,50.974 23.431,51.226 C 27.586,54.517 30.066,59.583 30.066,64.779 C 30.066,69.975 27.585,75.043 23.429,78.334 C 23.112,78.585 22.98,79.004 23.098,79.392 C 26.093,89.211 32.238,98.12 40.404,104.474 C 40.623,104.645 40.903,104.715 41.177,104.667 C 41.45,104.62 41.691,104.459 41.84,104.226 L 52.049,88.204 C 52.309,87.794 52.232,87.256 51.868,86.936 z M 12.803,52.223 C 5.732,52.223 0,57.951 0,65.016 C 0,72.081 5.732,77.81 12.803,77.81 C 19.874,77.81 25.606,72.081 25.606,65.016 C 25.606,57.951 19.874,52.223 12.803,52.223 z M 58.779,37.162 C 59.036,37.57 59.551,37.732 59.996,37.545 C 63.75,35.958 67.65,35.153 71.586,35.153 C 86.064,35.153 98.693,45.887 100.963,60.122 C 101.039,60.6 101.451,60.951 101.934,60.951 L 121.014,60.98 C 121.292,60.98 121.557,60.863 121.744,60.657 C 121.931,60.451 122.021,60.178 121.995,59.9 C 120.967,49.338 116.471,39.15 109.336,31.215 C 109.014,30.855 108.477,30.783 108.07,31.046 C 105.193,32.904 101.925,33.888 98.623,33.888 C 88.99,33.888 81.154,26.098 81.153,16.524 C 81.154,16.519 81.172,16.158 81.172,16.142 C 81.172,15.665 80.829,15.254 80.356,15.172 C 77.344,14.65 74.394,14.284 71.586,14.284 C 63.875,14.284 56.084,16.221 49.054,19.695 C 48.804,19.819 48.618,20.043 48.543,20.311 C 48.467,20.579 48.509,20.866 48.657,21.102 L 58.779,37.162 z M 98,29.5 C 104.908,29.5 110.51,23.902 110.51,17 C 110.51,10.096 104.908,4.5 98,4.5 C 91.092,4.5 85.49,10.096 85.49,17 C 85.49,23.902 91.092,29.5 98,29.5 z M 120.994,68.733 L 101.916,68.795 C 101.435,68.796 101.024,69.147 100.947,69.621 C 98.646,83.75 86.024,94.405 71.586,94.405 C 67.604,94.405 63.66,93.581 59.864,91.955 C 59.42,91.766 58.906,91.925 58.645,92.33 L 48.442,108.345 C 48.293,108.58 48.25,108.867 48.324,109.136 C 48.398,109.404 48.583,109.629 48.832,109.753 C 55.917,113.3 63.786,115.174 71.586,115.174 C 74.479,115.174 77.492,114.901 80.541,114.36 C 80.969,114.285 81.297,113.936 81.348,113.505 C 82.364,104.73 89.791,98.112 98.623,98.112 C 101.361,98.112 104.147,98.81 106.679,100.13 C 107.064,100.331 107.533,100.257 107.838,99.946 C 115.823,91.803 120.846,81.104 121.978,69.817 C 122.006,69.54 121.915,69.264 121.727,69.057 C 121.539,68.85 121.272,68.732 120.994,68.733 z M 98.486,102.545 C 91.415,102.545 85.682,108.242 85.682,115.273 C 85.682,122.302 91.414,128.001 98.486,128.001 C 105.556,128.001 111.289,122.303 111.289,115.273 C 111.289,108.242 105.557,102.545 98.486,102.545 z "
-           style="opacity:0.2;fill:#141414;fill-rule:evenodd" />
-        <path
-           id="path8442"
-           d="M 40.602,21.938 C 32.334,28.306 26.119,37.266 23.1,47.168 C 22.982,47.555 23.112,47.975 23.431,48.227 C 27.586,51.518 30.066,56.584 30.066,61.78 C 30.066,66.976 27.585,72.044 23.429,75.335 C 23.112,75.586 22.98,76.005 23.098,76.393 C 26.093,86.212 32.238,95.121 40.404,101.475 C 40.623,101.646 40.903,101.716 41.177,101.668 C 41.45,101.621 41.691,101.46 41.84,101.227 L 52.049,85.205 C 52.31,84.796 52.234,84.258 51.869,83.937 C 45.46,78.298 41.785,70.222 41.785,61.781 C 41.785,53.277 45.499,45.165 51.975,39.524 C 52.34,39.205 52.42,38.668 52.161,38.257 L 42.036,22.192 C 41.888,21.958 41.648,21.796 41.375,21.748 C 41.102,21.7 40.819,21.769 40.602,21.938 z "
-           style="fill:#f97a00" />
-        <path
-           id="path8444"
-           d="M 24.042,47.455 C 28.431,50.932 31.051,56.219 31.051,61.779 C 31.051,67.339 28.43,72.628 24.04,76.104 C 26.991,85.785 32.981,94.45 41.008,100.697 C 42.028,99.097 50.449,85.879 51.217,84.674 C 44.602,78.854 40.799,70.574 40.799,61.779 C 40.799,52.92 44.642,44.603 51.327,38.78 C 50.565,37.572 42.215,24.322 41.203,22.717 C 33.076,28.978 27.018,37.694 24.042,47.455 z "
-           style="fill:#fb8b00" />
-        <ellipse
-           id="ellipse8446"
-           ry="12.794"
-           rx="12.803"
-           cy="62.015999"
-           cx="12.803"
-           style="fill:#f83011;fill-rule:evenodd"
-           sodipodi:cx="12.803"
-           sodipodi:cy="62.015999"
-           sodipodi:rx="12.803"
-           sodipodi:ry="12.794" />
-        <path
-           id="path8448"
-           d="M 0.984,62.016 C 0.984,68.528 6.286,73.827 12.802,73.827 C 19.318,73.827 24.62,68.528 24.62,62.016 C 24.62,55.504 19.318,50.206 12.802,50.206 C 6.286,50.206 0.984,55.504 0.984,62.016 z "
-           style="fill:#f83011;fill-rule:evenodd" />
-        <path
-           id="path8450"
-           d="M 49.054,16.696 C 48.804,16.82 48.618,17.044 48.543,17.312 C 48.467,17.58 48.509,17.867 48.657,18.103 L 58.779,34.162 C 59.036,34.57 59.551,34.732 59.996,34.545 C 63.75,32.958 67.65,32.153 71.586,32.153 C 86.064,32.153 98.693,42.887 100.963,57.122 C 101.039,57.6 101.451,57.951 101.934,57.951 L 121.014,57.98 C 121.292,57.98 121.557,57.863 121.744,57.657 C 121.931,57.451 122.021,57.178 121.995,56.9 C 120.967,46.338 116.471,36.15 109.336,28.215 C 109.014,27.855 108.477,27.783 108.07,28.046 C 105.193,29.904 101.925,30.888 98.623,30.888 C 88.99,30.888 81.154,23.098 81.153,13.524 C 81.154,13.519 81.172,13.158 81.172,13.142 C 81.172,12.665 80.829,12.254 80.356,12.172 C 77.344,11.65 74.394,11.284 71.586,11.284 C 63.875,11.285 56.084,13.222 49.054,16.696 z "
-           style="fill:#f13b00" />
-        <path
-           id="path8452"
-           d="M 49.491,17.578 C 50.527,19.223 58.856,32.437 59.613,33.639 C 63.439,32.022 67.458,31.17 71.587,31.17 C 86.704,31.17 99.583,42.205 101.937,56.968 C 103.373,56.97 119.109,56.993 121.017,56.996 C 120.004,46.605 115.636,36.693 108.606,28.873 C 105.609,30.81 102.191,31.872 98.625,31.872 C 88.449,31.872 80.17,23.641 80.17,13.523 C 80.17,13.523 80.18,13.313 80.189,13.142 C 77.356,12.65 74.471,12.268 71.588,12.268 C 63.928,12.269 56.327,14.199 49.491,17.578 z "
-           style="fill:#f13b00" />
-        <ellipse
-           id="ellipse8454"
-           ry="12.5"
-           rx="12.51"
-           cy="14"
-           cx="98"
-           style="fill:#e00916;fill-rule:evenodd"
-           sodipodi:cx="98"
-           sodipodi:cy="14"
-           sodipodi:rx="12.51"
-           sodipodi:ry="12.5" />
-        <path
-           id="path8456"
-           d="M 86.992,14 C 86.992,20.065 91.93,25 98,25 C 104.07,25 109.008,20.065 109.008,14 C 109.008,7.935 104.07,3 98,3 C 91.93,3 86.992,7.935 86.992,14 z "
-           style="fill:#e56363;fill-rule:evenodd" />
-        <path
-           id="path8458"
-           d="M 120.994,65.733 L 101.916,65.795 C 101.435,65.796 101.024,66.147 100.947,66.621 C 98.646,80.75 86.024,91.405 71.586,91.405 C 67.604,91.405 63.66,90.581 59.864,88.955 C 59.42,88.766 58.906,88.925 58.645,89.33 L 48.442,105.345 C 48.293,105.58 48.25,105.867 48.324,106.136 C 48.398,106.404 48.583,106.629 48.832,106.753 C 55.917,110.3 63.786,112.174 71.586,112.174 C 74.479,112.174 77.492,111.901 80.541,111.36 C 80.969,111.285 81.297,110.936 81.348,110.505 C 82.364,101.73 89.791,95.112 98.623,95.112 C 101.361,95.112 104.147,95.81 106.679,97.13 C 107.064,97.331 107.533,97.257 107.838,96.946 C 115.823,88.803 120.846,78.104 121.978,66.817 C 122.006,66.54 121.915,66.264 121.727,66.057 C 121.539,65.85 121.272,65.732 120.994,65.733 z "
-           style="fill:#d40000" />
-        <ellipse
-           id="ellipse8460"
-           ry="12.728"
-           rx="12.803"
-           cy="112.272"
-           cx="98.486"
-           style="fill:#ff7516;fill-rule:evenodd"
-           sodipodi:cx="98.486"
-           sodipodi:cy="112.272"
-           sodipodi:rx="12.803"
-           sodipodi:ry="12.728" />
-        <path
-           id="path8462"
-           d="M 86.844,112.272 C 86.844,118.651 92.067,123.841 98.487,123.841 C 104.907,123.841 110.13,118.651 110.13,112.272 C 110.13,105.893 104.907,100.703 98.487,100.703 C 92.067,100.703 86.844,105.894 86.844,112.272 z "
-           style="fill:#fb9200;fill-rule:evenodd" />
-        <path
-           id="path8464"
-           d="M 49.785,17.67 C 50.008,18.024 59.527,33.127 59.695,33.395 C 63.548,31.791 67.547,30.969 71.586,30.969 C 78.265,30.969 84.635,33.086 90.02,37.08 C 90.155,37.07 103.667,36.099 103.667,36.099 C 103.667,36.099 112.654,35.447 113.294,35.4 C 111.865,33.167 110.392,31.264 108.67,29.337 C 105.639,31.256 102.097,32.173 98.623,32.173 C 88.337,32.173 79.969,23.752 79.969,13.525 C 79.969,13.519 79.973,13.418 79.979,13.318 C 77.094,12.827 74.27,12.47 71.586,12.47 C 64.13,12.469 56.6,14.34 49.785,17.67 z "
-           style="fill:url(#linearGradient8470);fill-rule:evenodd" />
-        <path
-           id="path8466"
-           d="M 24.274,47.396 C 26.599,49.268 28.451,51.682 29.658,54.398 C 34.14,51.488 38.459,49.95 43.889,47.772 C 45.598,44.761 48.481,41.04 51.074,38.755 C 50.915,38.503 41.39,23.39 41.155,23.017 C 33.202,29.201 27.214,37.844 24.274,47.396 z "
-           style="fill:url(#linearGradient8472);fill-rule:evenodd" />
-        <path
-           id="path8468"
-           d="M 23.732,58.691 C 22.313,53.996 17.948,50.566 12.794,50.566 C 6.493,50.566 1.367,55.689 1.367,61.985 C 1.367,66.015 3.469,69.565 6.633,71.597 C 11.926,67.035 17.919,62.755 23.732,58.691 z "
-           style="fill:#f88657;fill-rule:evenodd" />
-      </g>
-    </mask>
-  </defs>
-  <sodipodi:namedview
-     inkscape:window-height="627"
-     inkscape:window-width="910"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0.0"
-     guidetolerance="10.0"
-     gridtolerance="10.0"
-     objecttolerance="10.0"
-     borderopacity="1.0"
-     bordercolor="#666666"
-     pagecolor="#ffffff"
-     id="base"
-     inkscape:zoom="7.2055766"
-     inkscape:cx="35.602016"
-     inkscape:cy="22.962506"
-     inkscape:window-x="238"
-     inkscape:window-y="96"
-     inkscape:current-layer="svg2254"
-     showguides="true"
-     inkscape:guide-bbox="true">
-    <sodipodi:guide
-       orientation="horizontal"
-       position="0"
-       id="guide4273" />
-    <sodipodi:guide
-       orientation="horizontal"
-       position="48"
-       id="guide4275" />
-    <sodipodi:guide
-       orientation="vertical"
-       position="0"
-       id="guide4437" />
-    <sodipodi:guide
-       orientation="vertical"
-       position="48"
-       id="guide4439" />
-  </sodipodi:namedview>
-  <rect
-     style="fill:url(#linearGradient4371);fill-opacity:1;stroke:none;stroke-width:0.99999994;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-     id="rect4011"
-     width="47.866001"
-     height="47.866001"
-     x="-48"
-     y="-47.866001"
-     transform="scale(-1,-1)"
-     inkscape:export-filename="/home/matt/eclipse33/eclipse-icon-bulb.png"
-     inkscape:export-xdpi="90"
-     inkscape:export-ydpi="90" />
-  <rect
-     style="fill:url(#linearGradient4368);fill-opacity:1;stroke:none;stroke-width:0.99999994;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-     id="rect3016"
-     width="45.866379"
-     height="45.866383"
-     x="1.1343775"
-     y="1.048512" />
-  <path
-     sodipodi:type="arc"
-     style="opacity:1;fill:#c88cbb;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-     id="path4033"
-     sodipodi:cx="-30.021633"
-     sodipodi:cy="23.982693"
-     sodipodi:rx="20.014421"
-     sodipodi:ry="20.014421"
-     d="M -10.007212 23.982693 A 20.014421 20.014421 0 1 1  -50.036055,23.982693 A 20.014421 20.014421 0 1 1  -10.007212 23.982693 z"
-     transform="translate(53.070541,-2.5560054e-2)" />
-  <path
-     sodipodi:type="arc"
-     style="opacity:1;fill:url(#linearGradient4041);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-     id="path4031"
-     sodipodi:cx="-30.021633"
-     sodipodi:cy="23.982693"
-     sodipodi:rx="20.014421"
-     sodipodi:ry="20.014421"
-     d="M -10.007212 23.982693 A 20.014421 20.014421 0 1 1  -50.036055,23.982693 A 20.014421 20.014421 0 1 1  -10.007212 23.982693 z"
-     transform="translate(55.071984,-2.5560054e-2)" />
-  <path
-     sodipodi:type="arc"
-     style="opacity:1;fill:#fffffa;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4267)"
-     id="path4043"
-     sodipodi:cx="-38.944729"
-     sodipodi:cy="15.643351"
-     sodipodi:rx="8.9230967"
-     sodipodi:ry="8.8397036"
-     d="M -30.021632 15.643351 A 8.9230967 8.8397036 0 1 1  -47.867826,15.643351 A 8.9230967 8.8397036 0 1 1  -30.021632 15.643351 z"
-     transform="matrix(1.2616822,0,0,1.1226415,62.529072,-5.2595765)"
-     mask="url(#mask4181)" />
-  <g
-     id="g4417"
-     clip-path="url(#clipPath4423)"
-     transform="translate(50.116184,2.1870546e-2)">
-    <path
-       transform="translate(1.387814,-0.4734046)"
-       clip-path="none"
-       id="path4279"
-       d="M -47.32329,19.312662 L -6.0456207,19.312662"
-       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4429);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-    <path
-       transform="translate(1.387814,-0.4734046)"
-       clip-path="none"
-       id="path4281"
-       d="M -47.32329,22.48125 L -6.045621,22.48125"
-       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4431);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-    <path
-       transform="translate(1.387814,-0.4734046)"
-       clip-path="none"
-       id="path4283"
-       d="M -47.32329,25.482334 L -6.0456207,25.482334"
-       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4433);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-    <path
-       transform="translate(1.387814,-0.4734046)"
-       clip-path="none"
-       id="path4285"
-       d="M -47.32329,28.481612 L -6.0456207,28.481612"
-       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4435);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-  </g>
-</svg>
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/rap-client.js b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/rap-client.js
deleted file mode 100644
index 58cddd6..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/rap-client.js
+++ /dev/null
@@ -1,74778 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-/*global qxsettings:true, qxvariants:true*/
-
-if( typeof qxsettings === "undefined" ) {
-  qxsettings = {};
-  qxvariants = {};
-  qxvariants[ "qx.debug" ] = "on";
-}
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/*global rwt:true, namespace:true*/
-
-rwt = {};
-
-rwt.qx = {
-
-  /**
-   * Bootstrap rwt.qx.Class to create myself later
-   * This is needed for the API browser etc. to let them detect me
-   */
-  Class : {
-
-    /**
-     * Create namespace.
-     * Replaced after bootstrapping phase by {@link rwt.qx.Class#createNamespace}.
-     *
-     * @type map
-     * @param name {var} TODOC
-     * @param object {var} TODOC
-     * @return {var} TODOC
-     */
-    createNamespace : function( name, object ) {
-      var splits = name.split( "." );
-      var parent = window;
-      var part = splits[ 0 ];
-
-      for( var i = 0, len = splits.length - 1; i < len; i++, part = splits[ i ] ) {
-        if( !parent[ part ] ) {
-          parent = parent[ part ] = {};
-        } else {
-          parent = parent[ part ];
-        }
-      }
-
-      // store object
-      parent[ part ] = object;
-
-      // return last part name (e.g. classname)
-      return part;
-    },
-
-    /**
-     * Define class.
-     * Replaced after bootstrapping phase by {@link rwt.qx.Class#define}.
-     *
-     * @type map
-     * @param name {var} TODOC
-     * @param config {var} TODOC
-     * @return {void}
-     */
-    define : function (name, config ) {
-      if( !config ) {
-        var config = { statics : {} };
-      }
-
-      this.createNamespace( name, config.statics );
-
-      if( config.defer ) {
-        config.defer( config.statics );
-      }
-
-      // Store class reference in global class registry
-      rwt.runtime.Bootstrap.__registry[ name ] = config.statics;
-    }
-  }
-};
-
-/**
- * Internal class that is responsible for bootstrapping the qooxdoo
- * framework at load time.
- *
- * Automatically loads JavaScript language fixes, core logging possibilities
- * and language addons for arrays, strings, etc.
- */
-rwt.qx.Class.define( "rwt.runtime.Bootstrap", {
-
-  statics : {
-
-    /** Timestamp of qooxdoo based application startup */
-    LOADSTART : new Date(),
-
-    /**
-     * Returns the current timestamp
-     *
-     * @type static
-     * @return {Integer} Current timestamp (milliseconds)
-     */
-    time : function() {
-      return new Date().getTime();
-    },
-
-    /**
-     * Returns the time since initialisation
-     *
-     * @type static
-     * @return {Integer} milliseconds since load
-     */
-    since : function() {
-      return this.time() - this.LOADSTART;
-    },
-
-    /** Stores all defined classes */
-    __registry : {}
-  }
-} );
-
-var namespace = function( value ) {
-  rwt.qx.Class.createNamespace( value, {} );
-};
-
-/*******************************************************************************
- *  Copyright: 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                        and EclipseSource
- *
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-if (!Error.prototype.toString || Error.prototype.toString() == "[object Error]")
-{
-  /**
-   * Some browsers (e.g. Internet Explorer) do not support to stringify
-   * error objects like other browsers usually do. This feature is added to
-   * those browsers.
-   *
-   * @type member
-   * @return {var} TODOC
-   */
-  Error.prototype.toString = function() {
-    return this.message;
-  };
-}
-
-if (!Array.prototype.indexOf)
-{
-  /**
-   * Returns the first index at which a given element can be found in the array,
-   * or <code>-1</code> if it is not present. It compares <code>searchElement</code> to elements of the Array
-   * using strict equality (the same method used by the <code>===</code>, or
-   * triple-equals, operator).
-   *
-   * Natively supported in Gecko since version 1.8.
-   * http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:indexOf
-   *
-   * @type member
-   * @param searchElement {var} Element to locate in the array.
-   * @param fromIndex {Integer} The index at which to begin the search. Defaults to 0, i.e. the whole
-   *         array will be searched. If the index is greater than or equal to the length of the array,
-   *         <code>-1</code> is returned, i.e. the array will not be searched. If negative, it is taken as the
-   *         offset from the end of the array. Note that even when the index is negative, the array is still
-   *         searched from front to back. If the calculated index is less than 0, the whole array will be searched.
-   * @return {var} TODOC
-   */
-  Array.prototype.indexOf = function(searchElement, fromIndex)
-  {
-    if (fromIndex == null) {
-      fromIndex = 0;
-    } else if (fromIndex < 0) {
-      fromIndex = Math.max(0, this.length + fromIndex);
-    }
-
-    for (var i=fromIndex; i<this.length; i++)
-    {
-      if (this[i] === searchElement) {
-        return i;
-      }
-    }
-
-    return -1;
-  };
-}
-
-if( /iPad|iPhone|iPod/.test( navigator.userAgent ) && /Version\/6/.test( navigator.userAgent ) ) {
-
-// From https://gist.github.com/ronkorving/3755461:
-(function (window) {
-
-        // This library re-implements setTimeout, setInterval, clearTimeout, clearInterval for iOS6.
-        // iOS6 suffers from a bug that kills timers that are created while a page is scrolling.
-        // This library fixes that problem by recreating timers after scrolling finishes (with interval correction).
-    // This code is free to use by anyone (MIT, blabla).
-    // Author: rkorving@wizcorp.jp
-
-        var timeouts = {};
-        var intervals = {};
-        var orgSetTimeout = window.setTimeout;
-        var orgSetInterval = window.setInterval;
-        var orgClearTimeout = window.clearTimeout;
-        var orgClearInterval = window.clearInterval;
-
-
-        function createTimer(set, map, args) {
-                var id, cb = args[0], repeat = (set === orgSetInterval);
-
-                function callback() {
-                        if (cb) {
-                                cb.apply(window, arguments);
-
-                                if (!repeat) {
-                                        delete map[id];
-                                        cb = null;
-                                }
-                        }
-                }
-
-                args[0] = callback;
-
-                id = set.apply(window, args);
-
-                map[id] = { args: args, created: Date.now(), cb: cb, id: id };
-
-                return id;
-        }
-
-
-        function resetTimer(set, clear, map, virtualId, correctInterval) {
-                var timer = map[virtualId];
-
-                if (!timer) {
-                        return;
-                }
-
-                var repeat = (set === orgSetInterval);
-
-                // cleanup
-
-                clear(timer.id);
-
-                // reduce the interval (arg 1 in the args array)
-
-                if (!repeat) {
-                        var interval = timer.args[1];
-
-                        var reduction = Date.now() - timer.created;
-                        if (reduction < 0) {
-                                reduction = 0;
-                        }
-
-                        interval -= reduction;
-                        if (interval < 0) {
-                                interval = 0;
-                        }
-
-                        timer.args[1] = interval;
-                }
-
-                // recreate
-
-                function callback() {
-                        if (timer.cb) {
-                                timer.cb.apply(window, arguments);
-                                if (!repeat) {
-                                        delete map[virtualId];
-                                        timer.cb = null;
-                                }
-                        }
-                }
-
-                timer.args[0] = callback;
-                timer.created = Date.now();
-                timer.id = set.apply(window, timer.args);
-        }
-
-
-        window.setTimeout = function () {
-                return createTimer(orgSetTimeout, timeouts, arguments);
-        };
-
-
-        window.setInterval = function () {
-                return createTimer(orgSetInterval, intervals, arguments);
-        };
-
-        window.clearTimeout = function (id) {
-                var timer = timeouts[id];
-
-                if (timer) {
-                        delete timeouts[id];
-                        orgClearTimeout(timer.id);
-                }
-        };
-
-        window.clearInterval = function (id) {
-                var timer = intervals[id];
-
-                if (timer) {
-                        delete intervals[id];
-                        orgClearInterval(timer.id);
-                }
-        };
-
-        window.addEventListener('scroll', function () {
-                // recreate the timers using adjusted intervals
-                // we cannot know how long the scroll-freeze lasted, so we cannot take that into account
-
-                var virtualId;
-
-                for (virtualId in timeouts) {
-                        resetTimer(orgSetTimeout, orgClearTimeout, timeouts, virtualId);
-                }
-
-                for (virtualId in intervals) {
-                        resetTimer(orgSetInterval, orgClearInterval, intervals, virtualId);
-                }
-        });
-
-}(window));
-
-}
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Helper functions for arrays.
- *
- * The native JavaScript Array is not modified by this class. However,
- * there are modifications to the native Array in {@link qx.lang.Core} for
- * browsers that do not support certain JavaScript 1.6 features natively .
- *
- * The string/array generics introduced in JavaScript 1.6 are supported by
- * {@link qx.lang.Generics}.
- */
-rwt.qx.Class.define("rwt.util.Arrays",
-{
-  statics :
-  {
-    /**
-     * Convert an arguments object into an array
-     *
-     * @type static
-     * @param args {arguments} arguments object
-     * @return {Array} a newly created array (copy) with the content of the arguments object.
-     */
-    fromArguments : function(args) {
-      return Array.prototype.slice.call(args, 0);
-    },
-
-    /**
-     * Expand shorthand definition to a four element list.
-     * This is an utility function for padding/margin and all other shorthand handling.
-     *
-     * @type static
-     * @param input {Array} array with one to four elements
-     * @return {Array} an array with four elements
-     */
-    fromShortHand : function( input ) {
-      var len = input.length;
-      if( len === 0 || len > 4 ) {
-        throw new Error( "Invalid number of arguments!" );
-      }
-      var result = rwt.util.Arrays.copy(input);
-      if( len === 1 ) {
-        result[1] = result[2] = result[3] = result[0];
-      } else if( len === 2 ) {
-        result[2] = result[0];
-        result[3] = result[1];
-      } else if( len === 3 ) {
-        result[3] = result[1];
-      }
-      return result;
-    },
-
-
-    /**
-     * Return a copy of the given array
-     *
-     * @type static
-     * @param arr {Array} the array to copy
-     * @return {Array} copy of the array
-     */
-    copy : function(arr) {
-      return arr.concat();
-    },
-
-    /**
-     * Return the last element of an array
-     *
-     * @type static
-     * @param arr {Array} the array
-     * @return {var} the last element of the array
-     */
-    getLast : function(arr) {
-      return arr[arr.length - 1];
-    },
-
-
-    /**
-     * Return the first element of an array
-     *
-     * @type static
-     * @param arr {Array} the array
-     * @return {var|null} the first element of the array
-     */
-    getFirst : function(arr) {
-      return arr[0];
-    },
-
-
-    /**
-     * Insert an element at a given position into the array
-     *
-     * @type static
-     * @param arr {Array} the array
-     * @param obj {var} the element to insert
-     * @param i {Integer} position where to insert the element into the array
-     * @return {Array} the array
-     */
-    insertAt : function(arr, obj, i)
-    {
-      arr.splice(i, 0, obj);
-
-      return arr;
-    },
-
-    /**
-     * Remove an element from the array at the given index
-     *
-     * @type static
-     * @param arr {Array} the array
-     * @param i {Integer} index of the element to be removed
-     * @return {var} The removed element.
-     */
-    removeAt : function(arr, i) {
-      return arr.splice(i, 1)[0];
-    },
-
-
-    /**
-     * Remove an element from the array
-     *
-     * @type static
-     * @param arr {Array} the array
-     * @param obj {var} element to be removed from the array
-     * @return {Array} the removed element
-     */
-    remove : function(arr, obj)
-    {
-      var i = arr.indexOf(obj);
-
-      if (i != -1)
-      {
-        arr.splice(i, 1);
-        return obj;
-      }
-    },
-
-
-    /**
-     * Whether the array contains the given element
-     *
-     * @type static
-     * @param arr {Array} the array
-     * @param obj {var} object to look for
-     * @return {Boolean} whether the array contains the element
-     */
-    contains : function(arr, obj) {
-      return arr.indexOf(obj) != -1;
-    }
-
-
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Manage variants of source code. May it be for different debug options,
- * browsers or other environment flags.
- *
- * Variants enable the selection and removal of code from the build version.
- * A variant consists of a collection of states from which exactly one is active
- * at load time of the framework. The global map <code>qxvariants</code> can be
- * used to select a variant before the Framework is loades.
- *
- * Depending on the selected variant a specific code
- * path can be choosen using the <code>select</code> method. The generator is
- * able to set a variant and remove all code paths which are
- * not selected by the variant.
- *
- * Variants are used to implement browser optimized builds and to remove
- * debugging code from the build version. It is very similar to conditional
- * compilation in C/C++.
- */
-
-/*global qxvariants:false*/
-
-rwt.qx.Class.define("rwt.util.Variant",
-{
-  statics :
-  {
-    /** {Map} stored variants */
-    __variants : {},
-
-
-    /** {Map} cached results */
-    __cache : {},
-
-
-    /**
-     * Pseudo function as replacement for isSet() which will only be handled by the optimizer
-     *
-     * @return {Boolean}
-     */
-    compilerIsSet : function() {
-      return true;
-    },
-
-
-    /**
-     * Define a variant
-     *
-     * @param key {String} An Unique key for the variant. The key must be prefixed with a
-     *   namespace identifier (e.g. <code>"qx.debug"</code>)
-     * @param allowedValues {String[]} An array of all allowed values for this variant.
-     * @param defaultValue {String} Default value for the variant. Must be one of the values
-     *   defined in <code>defaultValues</code>.
-     */
-    define : function(key, allowedValues, defaultValue)
-    {
-      if (rwt.util.Variant.compilerIsSet("qx.debug", "on"))
-      {
-        if (!this.__isValidArray(allowedValues)) {
-          throw new Error('Allowed values of variant "' + key + '" must be defined!');
-        }
-
-        if (defaultValue === undefined) {
-          throw new Error('Default value of variant "' + key + '" must be defined!');
-        }
-      }
-
-      if (!this.__variants[key])
-      {
-        this.__variants[key] = {};
-      }
-      else if (rwt.util.Variant.compilerIsSet("qx.debug", "on"))
-      {
-        if (this.__variants[key].defaultValue !== undefined) {
-          throw new Error('Variant "' + key + '" is already defined!');
-        }
-      }
-
-      this.__variants[key].allowedValues = allowedValues;
-      this.__variants[key].defaultValue = defaultValue;
-    },
-
-
-    /**
-     * Get the current value of a variant.
-     *
-     * @param key {String} name of the variant
-     * @return {String} current value of the variant
-     */
-    get : function(key)
-    {
-      var data = this.__variants[key];
-
-      if (rwt.util.Variant.compilerIsSet("qx.debug", "on"))
-      {
-        if (data === undefined) {
-          throw new Error('Variant "' + key + '" is not defined.');
-        }
-      }
-
-      if (data.value !== undefined) {
-        return data.value;
-      }
-
-      return data.defaultValue;
-    },
-
-
-    /**
-     * Import settings from global qxvariants into current environment
-     *
-     * @return {void}
-     */
-    __init : function()
-    {
-      if (window.qxvariants)
-      {
-        for (var key in qxvariants)
-        {
-          if (rwt.util.Variant.compilerIsSet("qx.debug", "on"))
-          {
-            if ((key.split(".")).length < 2) {
-              throw new Error('Malformed settings key "' + key + '". Must be following the schema "namespace.key".');
-            }
-          }
-
-          if (!this.__variants[key]) {
-            this.__variants[key] = {};
-          }
-
-          this.__variants[key].value = qxvariants[key];
-        }
-
-        window.qxvariants = undefined;
-
-        try {
-          delete window.qxvariants;
-        } catch( ex ) {
-        }
-      }
-    },
-
-    /**
-     * Select a function depending on the value of the variant.
-     *
-     * Example:
-     *
-     * <pre class='javascript'>
-     * var f = qx.Variant.select("qx.client", {
-     *   "gecko": fucntion() { ... },
-     *   "mshtml|opera": function() { ... },
-     *   "default": function() { ... }
-     * });
-     * </pre>
-     *
-     * Depending on the value of the <code>"qx.client"</code> variant whit will select the
-     * corresponding function. The first case is selected if the variant is "gecko", the second
-     * is selected if the variant is "mshtml" or "opera" and the third function is selected if
-     * none of the other keys match the variant. "default" is the default case.
-     *
-     * @param key {String} name of the variant. To enable the generator to optimize
-     *   this selection, the key must be a string literal.
-     * @param variantFunctionMap {Map} map with variant names as keys and functions as values.
-     * @return {Function} The selected function from the map.
-     */
-    select : function(key, variantFunctionMap)
-    {
-      if (rwt.util.Variant.compilerIsSet("qx.debug", "on"))
-      {
-        // WARINING: all changes to this function must be duplicated in the generator!!
-        // modules/variantoptimizer.py (processVariantSelect)
-        if (!this.__isValidObject(this.__variants[key])) {
-          throw new Error("Variant \"" + key + "\" is not defined");
-        }
-
-        if (!this.__isValidObject(variantFunctionMap)) {
-          throw new Error("the second parameter must be a map!");
-        }
-      }
-
-      for (var variant in variantFunctionMap)
-      {
-        if (this.isSet(key, variant)) {
-          return variantFunctionMap[variant];
-        }
-      }
-
-      if (variantFunctionMap["default"] !== undefined) {
-        return variantFunctionMap["default"];
-      }
-
-      if (rwt.util.Variant.compilerIsSet("qx.debug", "on"))
-      {
-        throw new Error('No match for variant "' + key +
-          '" in variants [' + rwt.util.Objects.getKeysAsString(variantFunctionMap) +
-          '] found, and no default ("default") given');
-      }
-    },
-
-
-    /**
-     * Check whether a variant is set to a given value. To enable the generator to optimize
-     * this selection, both parameters must be string literals.
-     *
-     * This method is meant to be used in if statements to select code paths. If the condition of
-     * an if statement is only this method, the generator is able to optimize the if
-     * statement.
-     *
-     * Example:
-     *
-     * <pre class='javascript'>
-     * if (rwt.util.Variant.isSet("qx.client", "mshtml")) {
-     *   // some Internet Explorer specific code
-     * } else if(rwt.util.Variant.isSet("qx.client", "opera")){
-     *   // Opera specific code
-     * } else {
-     *   // common code for all other browsers
-     * }
-     * </pre>
-     *
-     * @param key {String} name of the variant
-     * @param variants {String} value to check for. Several values can be "or"-combined by separating
-     *   them with a "|" character. A value of "mshtml|opera" would for example check if the variant is
-     *   set to "mshtml" or "opera"
-     * @return {Boolean} whether the variant is set to the given value
-     */
-    isSet : function(key, variants)
-    {
-      var access = key + "$" + variants;
-      if (this.__cache[access] !== undefined) {
-        return this.__cache[access];
-      }
-
-      var retval = false;
-
-      // fast path
-      if (variants.indexOf("|") < 0)
-      {
-        retval = this.get(key) === variants;
-      }
-      else
-      {
-        var keyParts = variants.split("|");
-
-        for (var i=0, l=keyParts.length; i<l; i++)
-        {
-          if (this.get(key) === keyParts[i])
-          {
-            retval = true;
-            break;
-          }
-        }
-      }
-
-      this.__cache[access] = retval;
-      return retval;
-    },
-
-
-    /**
-     * Whether a value is a valid array. Valid arrays are:
-     *
-     * * type is object
-     * * instance is Array
-     *
-     * @type static
-     * @name __isValidArray
-     * @param v {var} the value to validate.
-     * @return {Boolean} whether the variable is valid
-     */
-    __isValidArray : function(v) {
-      return typeof v === "object" && v !== null && v instanceof Array;
-    },
-
-
-    /**
-     * Whether a value is a valid object. Valid object are:
-     *
-     * * type is object
-     * * instance != Array
-     *
-     * @type static
-     * @name __isValidObject
-     * @param v {var} the value to validate.
-     * @return {Boolean} whether the variable is valid
-     */
-    __isValidObject : function(v) {
-      return typeof v === "object" && v !== null && !(v instanceof Array);
-    },
-
-
-    /**
-     * Whether the array contains the given element
-     *
-     * @type static
-     * @name __arrayContains
-     * @param arr {Array} the array
-     * @param obj {var} object to look for
-     * @return {Boolean} whether the array contains the element
-     */
-    __arrayContains : function(arr, obj)
-    {
-      for (var i=0, l=arr.length; i<l; i++)
-      {
-        if (arr[i] == obj) {
-          return true;
-        }
-      }
-
-      return false;
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DEFER
-  *****************************************************************************
-  */
-
-  defer : function(statics)
-  {
-    statics.define("qx.debug", [ "on", "off" ], "on");
-    statics.define("qx.compatibility", [ "on", "off" ], "on");
-    statics.define("qx.eventMonitorNoListeners", [ "on", "off" ], "off");
-    statics.define("qx.aspects", [ "on", "off" ], "off");
-    statics.define("qx.deprecationWarnings", [ "on", "off" ], "on");
-
-    statics.__init();
-  }
-});
-
-/*******************************************************************************
- * Copyright: 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                       and EclipseSource
- *
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Basic client detection implementation.
- *
- * Version names follow the wikipedia scheme: major.minor[.revision[.build]] at
- * http://en.wikipedia.org/wiki/Software_version
- */
-rwt.qx.Class.define( "rwt.client.Client", {
-
-  statics : {
-
-    __init : function() {
-      this._engineName = null;
-      this._browserName = null;
-      this._engineVersion = null;
-      this._engineVersionMajor = 0;
-      this._engineVersionMinor = 0;
-      this._engineVersionRevision = 0;
-      this._engineVersionBuild = 0;
-      this._browserPlatform = null;
-      this._runsLocally = window.location.protocol === "file:";
-      this._engineQuirksMode = document.compatMode !== "CSS1Compat";
-      this._defaultLocale = "en";
-      // NOTE: Order is important!
-      this._initOpera();
-      this._initKonqueror();
-      this._initWebkit();
-      this._initGecko();
-      this._initMshtml();
-      this._initBoxSizing();
-      this._initLocale();
-      this._initPlatform();
-    },
-
-    getRunsLocally : function() {
-      return this._runsLocally;
-    },
-
-    getEngine : function() {
-      return this._engineName;
-    },
-
-    getBrowser : function() {
-      return this._browserName;
-    },
-
-    getVersion : function() {
-      return this._engineVersion;
-    },
-
-    getMajor : function() {
-      return this._engineVersionMajor;
-    },
-
-    getMinor : function() {
-      return this._engineVersionMinor;
-    },
-
-    getRevision : function() {
-      return this._engineVersionRevision;
-    },
-
-    getBuild : function() {
-      return this._engineVersionBuild;
-    },
-
-    isMshtml : function() {
-      return this._engineName === "mshtml";
-    },
-
-    isNewMshtml : function() {
-      return this._engineName === "newmshtml";
-    },
-
-    isGecko : function() {
-      return this._engineName === "gecko";
-    },
-
-    isOpera : function() {
-      return this._engineName === "opera";
-    },
-
-    isWebkit : function() {
-      return this._engineName === "webkit";
-    },
-
-    isInQuirksMode : function() {
-      return this._engineQuirksMode;
-    },
-
-    getTimezoneOffset : function() {
-      return ( new Date() ).getTimezoneOffset();
-    },
-
-    getLocale : function() {
-      return this._browserLocale;
-    },
-
-    getLanguage : function() {
-      var locale = this.getLocale();
-      var language;
-      var pos = locale.indexOf( "_" );
-      if( pos == -1 ) {
-        language = locale;
-      } else {
-        language = locale.substring( 0, pos );
-      }
-      return language;
-    },
-
-    getTerritory : function() {
-      return this.getLocale().split( "_" )[ 1 ] || "";
-    },
-
-    getDefaultLocale : function() {
-      return this._defaultLocale;
-    },
-
-    usesDefaultLocale : function() {
-      return this._browserLocale === this._defaultLocale;
-    },
-
-    getEngineBoxSizingAttributes : function() {
-      return this._engineBoxSizingAttributes;
-    },
-
-    getPlatform : function() {
-      return this._browserPlatform;
-    },
-
-    isMobileSafari : function() {
-      return this.getPlatform() === "ios" && this.getBrowser() === "safari";
-    },
-
-    isMobileChrome : function() {
-      return this.getPlatform() === "android" && this.getBrowser() === "chrome";
-    },
-
-    isAndroidBrowser : function() {
-      return this.getPlatform() === "android" && this.getBrowser() === "android";
-    },
-
-    isMobileFirefox : function() {
-      return this.getPlatform() === "android" && this.getBrowser() === "firefox";
-    },
-
-    supportsVml : function() {
-      return ( this.getEngine() === "mshtml" ) && ( this.getVersion() >= 5.5 );
-    },
-
-    supportsTouch : function() {
-      return    this.isMobileSafari()
-             || this.isAndroidBrowser()
-             || this.isMobileChrome()
-             || this.isMobileFirefox();
-    },
-
-    supportsSvg : function() {
-      // NOTE: IE9 supports SVG, but not in quirksmode.
-      var engine = rwt.client.Client.getEngine();
-      var version = rwt.client.Client.getVersion();
-      var result =    engine === "gecko" && version >= 1.8
-                   || engine === "webkit" && version >= 523
-                   || engine === "opera" && version >= 9
-                   || engine === "newmshtml";
-      if( this.isAndroidBrowser() ) {
-        result = version >= 534; // only Android 3+ supports SVG
-      }
-      return result;
-    },
-
-    // NOTE: This returns true if the browser sufficiently implements
-    // border-radius, drop-shadow and linear-gradient. IE9 and opera (currently) ignored.
-    supportsCss3 : function() {
-      var engine = rwt.client.Client.getEngine();
-      var version = rwt.client.Client.getVersion();
-      var result =    engine === "webkit" && version >= 522
-                   || engine === "gecko" && version >= 2 // firefox 4+
-                   || engine === "newmshtml" && version >= 10; // IE10 +
-      return result;
-    },
-
-    // NOTE [tb] : only works in IE right now.
-    // Inspired by https://github.com/yonran/detect-zoom
-    isZoomed : function() {
-      var result = false;
-      if( this._engineName === "mshtml" || this._engineName === "newmshtml" ) {
-        if( this._engineVersionMajor >= 8 ) {
-          result = ( screen.deviceXDPI / screen.logicalXDPI ) !== 1;
-        } else {
-          try {
-            var rect = document.body.getBoundingClientRect();
-            var zoom = ( rect.right - rect.left ) / document.body.offsetWidth;
-            result = zoom !== 1;
-          } catch( ex ) { // only happens in tests due to different bootstrap
-            result = false;
-          }
-        }
-      }
-      return result;
-    },
-
-    //////////
-    // Helper
-
-    _initOpera : function() {
-      if( this._engineName === null ) {
-        var isOpera =    window.opera
-                      && /Opera[\s\/]([0-9\.]*)/.test( navigator.userAgent );
-        if( isOpera ) {
-          this._browserName = "opera";
-          this._engineName = "opera";
-          var version = RegExp.$1;
-          version = version.substring( 0, 3 ) + "." + version.substring( 3 );
-          ( /Version[\s\/]([0-9\.]*)/ ).test( navigator.userAgent );
-          if( RegExp.$1 ) { // Newer Opera note the "real" version after "Version/".
-            version = RegExp.$1;
-          }
-          this._parseVersion( version );
-        }
-      }
-    },
-
-    _initKonqueror : function() {
-      if( this._engineName === null ) {
-        var vendor = navigator.vendor;
-        var isKonqueror =    typeof vendor === "string" && vendor === "KDE"
-                          && /KHTML\/([0-9\-\.]*)/.test( navigator.userAgent );
-        if( isKonqueror ) {
-          this._engineName = "webkit";
-          this._browserName = "konqueror";
-          // Howto translate KDE Version to Webkit Version? Currently emulate Safari 3.0.x for all versions.
-          // this._engineVersion = RegExp.$1;
-          this._parseVersion( "420" );
-        }
-      }
-    },
-
-    _initWebkit : function() {
-      if( this._engineName === null ) {
-        var userAgent = navigator.userAgent;
-        var isWebkit =    userAgent.indexOf( "AppleWebKit" ) != -1
-                       && /AppleWebKit\/([^ ]+)/.test( userAgent );
-        if( isWebkit ) {
-          this._engineName = "webkit";
-          var version = RegExp.$1;
-          var invalidCharacter = /[^\.0-9]/.exec( version );
-          if( invalidCharacter ) {
-            version = version.slice( 0, invalidCharacter.index );
-          }
-          this._parseVersion( version );
-          if( userAgent.indexOf( "Chrome" ) != -1 ) {
-            this._browserName = "chrome";
-          } else if( userAgent.indexOf( "Safari" ) != -1 ) {
-            if( userAgent.indexOf( "Android" ) != -1 ) {
-              this._browserName = "android";
-            } else {
-              this._browserName = "safari";
-            }
-          } else if( userAgent.indexOf( "OmniWeb" ) != -1 ) {
-            this._browserName = "omniweb";
-          } else if( userAgent.indexOf( "Shiira" ) != -1 ) {
-            this._browserName = "shiira";
-          } else if( userAgent.indexOf( "NetNewsWire" ) != -1 ) {
-            this._browserName = "netnewswire";
-          } else if( userAgent.indexOf( "RealPlayer" ) != -1 ) {
-            this._browserName = "realplayer";
-          } else if( userAgent.indexOf( "Mobile" ) != -1 ) {
-            // iPad reports this in fullscreen mode
-            this._browserName = "safari";
-          } else {
-            this._browserName = "other webkit";
-          }
-        }
-      }
-    },
-
-    _initGecko : function() {
-      if( this._engineName === null ) {
-        var product = navigator.product;
-        var userAgent = navigator.userAgent;
-        var isGecko =    window.controllers
-                      && typeof product === "string"
-                      && product === "Gecko"
-                      && /rv\:([^\);]+)(\)|;)/.test( userAgent );
-        if( isGecko ) {
-          // http://www.mozilla.org/docs/dom/domref/dom_window_ref13.html
-          this._engineName = "gecko";
-          this._parseVersion( RegExp.$1 );
-          if( userAgent.indexOf( "Firefox" ) != -1) {
-            this._browserName = "firefox";
-          } else if ( userAgent.indexOf( "Camino" ) != -1) {
-            this._browserName = "camino";
-          } else if ( userAgent.indexOf( "Galeon" ) != -1) {
-            this._browserName = "galeon";
-          } else {
-            this._browserName = "other gecko";
-          }
-        }
-      }
-    },
-
-    _initMshtml : function() {
-      if( this._engineName === null ) {
-        var isMshtml = /MSIE\s+([^\);]+)(\)|;)/.test( navigator.userAgent );
-        if( isMshtml ) {
-          this._parseVersion( RegExp.$1 );
-          if( this._engineVersion >= 9 ) {
-            this._engineName = "newmshtml";
-          } else {
-            this._engineName = "mshtml";
-          }
-          this._browserName = "explorer";
-        }
-      }
-    },
-
-    _parseVersion : function( versionStr ) {
-      if( typeof versionStr === "string" ) {
-        var versionArr = versionStr.split( "." );
-        this._engineVersion = parseFloat( versionStr );
-        this._engineVersionMajor = parseInt( versionArr[ 0 ] || 0, 10 );
-        this._engineVersionMinor = parseFloat( versionArr[ 1 ] || 0 );
-        this._engineVersionRevision = parseFloat( versionArr[ 2 ] || 0 );
-        this._engineVersionBuild = parseInt( versionArr[ 3 ] || 0, 10 );
-      }
-    },
-
-    _initBoxSizing : function() {
-      var vEngineBoxSizingAttr = [];
-      switch( this._engineName ) {
-        case "gecko":
-          vEngineBoxSizingAttr.push( "-moz-box-sizing" );
-        break;
-        case "webkit":
-          vEngineBoxSizingAttr.push( "-khtml-box-sizing" );
-          vEngineBoxSizingAttr.push( "-webkit-box-sizing" );
-        break;
-        default:
-          vEngineBoxSizingAttr.push( "box-sizing" );
-      }
-      this._engineBoxSizingAttributes = vEngineBoxSizingAttr;
-    },
-
-    _initLocale : function() {
-      var language =   ( this._engineName.indexOf( "mshtml" ) !== -1 )
-                     ? navigator.userLanguage
-                     : navigator.language;
-      var browserLocale = language.toLowerCase();
-      var browserLocaleVariantIndex = browserLocale.indexOf( "-" );
-      if( browserLocaleVariantIndex != -1 ) {
-        browserLocale = browserLocale.substr( 0, browserLocaleVariantIndex );
-      }
-      this._browserLocale = browserLocale;
-    },
-
-    _initPlatform : function() {
-      var platformStr = navigator.platform;
-      if(    platformStr.indexOf( "Windows" ) != -1
-          || platformStr.indexOf( "Win32" ) != -1
-          || platformStr.indexOf( "Win64" ) != -1 )
-      {
-        this._browserPlatform = "win";
-      } else if(    platformStr.indexOf( "Macintosh" ) != -1
-                 || platformStr.indexOf( "MacPPC" ) != -1
-                 || platformStr.indexOf( "MacIntel" ) != -1 )
-      {
-        this._browserPlatform = "mac";
-      } else if(   platformStr.indexOf( "X11" ) != -1
-                || platformStr.indexOf( "Linux" ) != -1
-                || platformStr.indexOf( "BSD" ) != -1 )
-      {
-        if( navigator.userAgent.indexOf( "Android" ) != -1 ) {
-          this._browserPlatform = "android";
-        } else {
-          this._browserPlatform = "unix";
-        }
-      } else if(    platformStr.indexOf( "iPhone" ) != -1
-                 || platformStr.indexOf( "iPod" ) != -1
-                 || platformStr.indexOf( "iPad" ) != -1 )
-      {
-        this._browserPlatform = "ios";
-      } else {
-        this._browserPlatform = "other";
-      }
-    }
-
-  },
-
-  defer : function( statics, members, properties ) {
-    statics.__init();
-    rwt.util.Variant.define( "qx.client",
-                            [ "gecko", "mshtml", "opera", "webkit" ],
-                            rwt.client.Client.getEngine() );
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Helper functions to handle Object as a Hash map.
- */
-rwt.qx.Class.define("rwt.util.Objects",
-{
-  statics :
-  {
-    /**
-     * Check if the hash has any keys
-     *
-     * @type static
-     * @param map {Object} the map to check
-     * @return {Boolean} whether the map has any keys
-     */
-    isEmpty : function(map)
-    {
-      for (var key in map) {
-        return false;
-      }
-
-      return true;
-    },
-
-
-    /**
-     * Check whether the number of objects in the maps is at least "length"
-     *
-     * @type static
-     * @param map {Object} the map to check
-     * @param length {Integer} minimum number of objects in the map
-     * @return {Boolean} whether the map contains at least "length" objects.
-     */
-    hasMinLength : function(map, length)
-    {
-      var i = 0;
-
-      for (var key in map)
-      {
-        if ((++i) >= length) {
-          return true;
-        }
-      }
-
-      return false;
-    },
-
-
-    /**
-     * Get the number of objects in the map
-     *
-     * @type static
-     * @param map {Object} the map
-     * @return {Integer} number of objects in the map
-     */
-    getLength : function(map)
-    {
-      var i = 0;
-
-      for (var key in map) {
-        i++;
-      }
-
-      return i;
-    },
-
-
-    _shadowedKeys :
-    [
-      "isPrototypeOf",
-      "hasOwnProperty",
-      "toLocaleString",
-      "toString",
-      "valueOf"
-    ],
-
-
-    /**
-     * Get the keys of a map as array as returned by a "for ... in" statement.
-     *
-     * @type static
-     * @param map {Object} the map
-     * @return {Array} array of the keys of the map
-     * @signature function(map)
-     */
-    getKeys : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function(map)
-      {
-        var arr = [];
-        for (var key in map) {
-          arr.push(key);
-        }
-
-        // IE does not return "shadowed" keys even if they are defined directly
-        // in the object. This is incompatible to the ECMA standard!!
-        // This is why this checks are needed.
-        for (var i=0, a=this._shadowedKeys, l=a.length; i<l; i++)
-        {
-          if (map.hasOwnProperty(a[i])) {
-            arr.push(a[i]);
-          }
-        }
-
-        return arr;
-      },
-
-      "default" : function(map)
-      {
-        var arr = [];
-
-        for (var key in map) {
-          arr.push(key);
-        }
-
-        return arr;
-      }
-    }),
-
-
-    /**
-     * Get the keys of a map as string
-     *
-     * @type static
-     * @param map {Object} the map
-     * @return {String} String of the keys of the map
-     *         The keys are separated by ", "
-     */
-    getKeysAsString : function(map)
-    {
-      var keys = rwt.util.Objects.getKeys(map);
-      if (keys.length === 0) {
-        return "";
-      }
-
-      return '"' + keys.join('\", "') + '"';
-    },
-
-
-    /**
-     * Get the values of a map as array
-     *
-     * TODO: Rename to values() like in prototype and python
-     *
-     * @type static
-     * @param map {Object} the map
-     * @return {Array} array of the values of the map
-     */
-    getValues : function(map)
-    {
-      var arr = [];
-
-      for (var key in map) {
-        arr.push(map[key]);
-      }
-
-      return arr;
-    },
-
-
-    /**
-     * Inserts all keys of the source object into the
-     * target objects. Attention: The target map gets modified.
-     *
-     * @type static
-     * @param target {Object} target object
-     * @param source {Object} object to be merged
-     * @param overwrite {Boolean ? true} If enabled existing keys will be overwritten
-     * @return {Object} Target with merged values from the source object
-     */
-    mergeWith : function(target, source, overwrite)
-    {
-      if (overwrite === undefined) {
-        overwrite = true;
-      }
-
-      for (var key in source)
-      {
-        if (overwrite || target[key] === undefined) {
-          target[key] = source[key];
-        }
-      }
-
-      return target;
-    },
-
-
-    /**
-     * Inserts all keys of the source object into the
-     * target objects.
-     *
-     * @type static
-     * @param target {Object} target object
-     * @param source {Object} object to be merged
-     * @return {Object} target with merged values from source
-     * @deprecated
-     */
-    carefullyMergeWith : function(target, source)
-    {
-      return rwt.util.Objects.mergeWith(target, source, false);
-    },
-
-
-    /**
-     * Merge a number of objects.
-     *
-     * @type static
-     * @param target {Object} target object
-     * @param varargs {Object} variable number of objects to merged with target
-     * @return {Object} target with merged values from the other objects
-     */
-    merge : function(target, varargs)
-    {
-      var len = arguments.length;
-
-      for (var i=1; i<len; i++) {
-        rwt.util.Objects.mergeWith(target, arguments[i]);
-      }
-
-      return target;
-    },
-
-
-    /**
-     * Return a copy of an Object
-     *
-     * TODO: Rename to clone() like in prototype and python
-     *
-     * @type static
-     * @param source {Object} Object to copy
-     * @return {Object} copy of vObject
-     */
-    copy : function(source)
-    {
-      var clone = {};
-
-      for (var key in source) {
-        clone[key] = source[key];
-      }
-
-      return clone;
-    },
-
-
-    /**
-     * Inverts a Map by exchanging the keys with the values.
-     * If the map has the same values for different keys, information will get lost.
-     * The values will be converted to Strings using the toString methos.
-     *
-     * @type static
-     * @param map {Object} Map to invert
-     * @return {Object} inverted Map
-     */
-    invert : function(map)
-    {
-      var result = {};
-
-      for (var key in map) {
-        result[map[key].toString()] = key;
-      }
-
-      return result;
-    },
-
-
-    /**
-     * Get the key of the given value from a map.
-     * If the map has more than one key matching the value the fist match is returned.
-     * If the map does not contain the value <code>null</code> is returned.
-     *
-     * @param obj {Object} Map to search for the key
-     * @param value {var} Value to look for
-     * @return {String|null} Name of the key (null if not found).
-     */
-    getKeyFromValue: function(obj, value)
-    {
-      for (var key in obj)
-      {
-        if (obj[key] === value) {
-          return key;
-        }
-      }
-
-      return null;
-    },
-
-
-    /**
-    * Selects the value with the given key from the map.
-    *
-    * @param key {String} name of the key to get the value from
-    * @param map {Object} map to get the value from
-    * @return {var} value for the given key from the map
-    */
-    select: function(key, map) {
-      return map[key];
-    },
-
-
-    /**
-    * Convert an array into a map.
-    *
-    * All elements of the array become keys of the returned map by
-    * calling "toString" on the array elements. The values of the
-    * map are set to "true"
-    *
-    * @param array {Array} array to convert
-    * @return {Map} the array converted to a map.
-    */
-    fromArray: function(array)
-    {
-      var obj = {};
-
-      for (var i=0, l=array.length; i<l; i++)
-      {
-        obj[array[i].toString()] = true;
-      }
-
-      return obj;
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * This class is one of the most important parts of qooxdoo's
- * object-oriented features.
- *
- * Its {@link #define} method is used to create qooxdoo classes.
- *
- * Each instance of a class defined by {@link #define} has
- * the following keys attached to the constructor and the prototype:
- *
- * <table>
- * <tr><th><code>classname</code></th><td>The fully-qualified name of the class (e.g. <code>"qx.ui.core.Widget"</code>).</td></tr>
- * <tr><th><code>basename</code></th><td>The namespace part of the class name (e.g. <code>"qx.ui.core"</code>).</td></tr>
- * <tr><th><code>constructor</code></th><td>A reference to the constructor of the class.</td></tr>
- * <tr><th><code>superclass</code></th><td>A reference to the constructor of the super class.</td></tr>
- * </table>
- *
- * Each method may access static members of the same class by using
- * <code>this.self(arguments)</code> ({@link rwt.qx.Object#self}):
- * <pre class='javascript'>
- * statics : { FOO : "bar" },
- * members: {
- *   baz: function(x) {
- *     this.self(arguments).FOO;
- *     ...
- *   }
- * }
- * </pre>
- *
- * Each overriding method may call the overridden method by using
- * <code>this.base(arguments [, ...])</code> ({@link rwt.qx.Object#base}). This is also true for calling
- * the constructor of the superclass.
- * <pre class='javascript'>
- * members: {
- *   foo: function(x) {
- *     this.base(arguments, x);
- *     ...
- *   }
- * }
- * </pre>
- */
-
-/*global alert:false */
-
-rwt.qx.Class.define( "rwt.qx.Class", {
-
-  statics : {
-
-    _normalizeConfig : function( config ) {
-      if( !config ) {
-        var config = {};
-      }
-      if( config.include && !( config.include instanceof Array ) ) {
-        config.include = [ config.include ];
-      }
-      if( config.implement && !( config.implement instanceof Array ) ) {
-        config.implement = [ config.implement ];
-      }
-      if( !config.hasOwnProperty( "extend" ) && !config.type ) {
-        config.type = "static";
-      }
-      return config;
-    },
-
-    /**
-     * Define a new class using the qooxdoo class system. This sets up the
-     * namespace for the class and generates the class from the definition map.
-     *
-     * Example:
-     * <pre class='javascript'>
-     * rwt.qx.Class.define("name",
-     * {
-     *   extend : Object, // superclass
-     *   implement : [Interfaces],
-     *   include : [Mixins],
-     *
-     *   statics:
-     *   {
-     *     CONSTANT : 3.141,
-     *
-     *     publicMethod: function() {},
-     *     _protectedMethod: function() {},
-     *     __privateMethod: function() {}
-     *   },
-     *
-     *   properties:
-     *   {
-     *     "tabIndexOld": { type: "number", defaultValue : -1, _legacy : true }
-     *     "tabIndex": { check: "Number", init : -1 }
-     *   },
-     *
-     *   members:
-     *   {
-     *     publicField: "foo",
-     *     publicMethod: function() {},
-     *
-     *     _protectedField: "bar",
-     *     _protectedMethod: function() {},
-     *
-     *     __privateField: "baz",
-     *     __privateMethod: function() {}
-     *   }
-     * });
-     * </pre>
-     *
-     * @type static
-     * @param name {String} Name of the class
-     * @param config {Map ? null} Class definition structure. The configuration map has the following keys:
-     *     <table>
-     *       <tr><th>Name</th><th>Type</th><th>Description</th></tr>
-     *       <tr><th>type</th><td>String</td><td>
-     *           Type of the class. Valid types are "abstract", "static" and "singleton".
-     *           If unset it defaults to a regular non-static class.
-     *       </td></tr>
-     *       <tr><th>extend</th><td>Class</td><td>The super class the current class inherits from.</td></tr>
-     *       <tr><th>implement</th><td>Interface | Interface[]</td><td>Single interface or array of interfaces the class implements.</td></tr>
-     *       <tr><th>include</th><td>Mixin | Mixin[]</td><td>Single mixin or array of mixins, which will be merged into the class.</td></tr>
-     *       <tr><th>construct</th><td>Function</td><td>The constructor of the class.</td></tr>
-     *       <tr><th>statics</th><td>Map</td><td>Map of static members of the class.</td></tr>
-     *       <tr><th>properties</th><td>Map</td><td>Map of property definitions. For a description of the format of a property definition see
-     *           {@link rwt.qx.Property} or the legacy version {@link rwt.qx.LegacyProperty}.</td></tr>
-     *       <tr><th>members</th><td>Map</td><td>Map of instance members of the class.</td></tr>
-     *       <tr><th>settings</th><td>Map</td><td>Map of settings for this class. For a description of the format of a setting see
-     *           {@link rwt.qx.Setting}.</td></tr>
-     *       <tr><th>variants</th><td>Map</td><td>Map of settings for this class. For a description of the format of a setting see
-     *           {@link rwt.util.Variant}</td></tr>
-     *       <tr><th>events</th><td>Map</td><td>
-     *           Map of events the class fires. The keys are the names of the events and the values are the
-     *           corresponding event type class names.
-     *       </td></tr>
-     *       <tr><th>defer</th><td>Function</td><td>Function that is called at the end of processing the class declaration. It allows access to the declared statics, members and properties.</td></tr>
-     *       <tr><th>destruct</th><td>Function</td><td>The destructor of the class.</td></tr>
-     *     </table>
-     * @return {void}
-     * @throws TODOC
-     */
-    define : function( name, config ) {
-      if( this._stopLoading ) {
-        throw new Error( "Stop loading " + name );
-      }
-      try {
-        config = this._normalizeConfig( config );
-        this.__validateConfig( name, config );
-        var clazz;
-        if( !config.extend ) {
-          clazz = config.statics || {};
-        } else {
-          if( !config.construct ) {
-            config.construct = this.__createDefaultConstructor();
-          }
-          clazz = this.__wrapConstructor(config.construct, name, config.type);
-          if( config.statics ) {
-            var key;
-            for( var i = 0, a = rwt.util.Objects.getKeys( config.statics ), l = a.length; i < l; i++ ) {
-              key = a[ i ];
-              clazz[ key ] = config.statics[ key ];
-            }
-          }
-        }
-        var basename = this.createNamespace( name, clazz, false );
-        clazz.name = clazz.classname = name;
-        clazz.basename = basename;
-        this.__registry[ name ] = clazz;
-
-        // Attach toString
-        if( !clazz.hasOwnProperty( "toString" ) ) {
-          clazz.toString = this.genericToString;
-        }
-
-        if( config.extend ) {
-          var superproto = config.extend.prototype;
-          var Helper = this.__createEmptyFunction();
-          Helper.prototype = superproto;
-          var proto = new Helper();
-          clazz.prototype = proto;
-          proto.name = proto.classname = name;
-          proto.basename = basename;
-          config.construct.base = clazz.superclass = config.extend;
-          config.construct.self = clazz.constructor = proto.constructor = clazz;
-          if( config.destruct ) {
-            clazz.$$destructor = config.destruct;
-          }
-          var that = this;
-          clazz.$$initializer = function() {
-            //console.log( "init " + name );
-            if( config.properties ) {
-              that.__addProperties(clazz, config.properties, true);
-            }
-            if( config.members ) {
-              that.__addMembers(clazz, config.members, true, true, false);
-            }
-            if( config.events ) {
-              that.__addEvents(clazz, config.events, true);
-            }
-            if( config.include ) {
-              for (var i=0, l=config.include.length; i<l; i++) {
-                that.__addMixin(clazz, config.include[i], false);
-              }
-            }
-          };
-        }
-        if( config.variants ) {
-          for (var key in config.variants) {
-            rwt.util.Variant.define(key, config.variants[key].allowedValues, config.variants[key].defaultValue);
-          }
-        }
-        if( config.defer ) {
-          this.__initializeClass( clazz );
-          config.defer.self = clazz;
-          config.defer(clazz, clazz.prototype, {
-            add : function( name, config ) {
-              var properties = {};
-              properties[name] = config;
-              rwt.qx.Class.__addProperties(clazz, properties, true);
-            }
-          } );
-        }
-      } catch( ex ) {
-        // Use alert here since ErrorHandler.js might not be parsed yet. In case of a class loader
-        // error, this is the only way to be sure the user sees the message.
-        alert( "Error loading class " + name + ": " + ( ex.message ? ex.message : ex ) );
-        this._stopLoading = true;
-        throw ex;
-      }
-    },
-
-
-    /**
-     * Creates a namespace and assigns the given object to it.
-     *
-     * @type static
-     * @param name {String} The complete namespace to create. Typically, the last part is the class name itself
-     * @param object {Object} The object to attach to the namespace
-     * @return {Object} last part of the namespace (typically the class name)
-     * @throws TODOC
-     */
-    createNamespace : function(name, object)
-    {
-      var splits = name.split(".");
-      var parent = window;
-      var part = splits[0];
-
-      for (var i=0, l=splits.length-1; i<l; i++, part=splits[i])
-      {
-        if (!parent[part]) {
-          parent = parent[part] = {};
-        } else {
-          parent = parent[part];
-        }
-      }
-      if (parent[part] === undefined) {
-        parent[part] = object;
-      }
-      // return last part name (i.e. classname)
-      return part;
-    },
-
-
-    /**
-     * Whether the given class exists
-     *
-     * @type static
-     * @param name {String} class name to check
-     * @return {Boolean} true if class exists
-     */
-    isDefined : function(name) {
-      return this.getByName(name) !== undefined;
-    },
-
-
-    /**
-     * Determine the total number of classes
-     *
-     * @type static
-     * @return {Number} the total number of classes
-     */
-    getTotalNumber : function() {
-      return rwt.util.Objects.getLength(this.__registry);
-    },
-
-
-    /**
-     * Find a class by its name
-     *
-     * @type static
-     * @param name {String} class name to resolve
-     * @return {Class} the class
-     */
-    getByName : function(name) {
-      return this.__registry[name];
-    },
-
-
-    /**
-     * Include all features of the given mixin into the class. The mixin must
-     * not include any methods or properties that are already available in the
-     * class. This would only be possible using the {@link #patch} method.
-     *
-     * @type static
-     * @param clazz {Class} An existing class which should be modified by including the mixin.
-     * @param mixin {Mixin} The mixin to be included.
-     */
-    include : function(clazz, mixin)
-    {
-      rwt.qx.Class.__addMixin(clazz, mixin, false);
-    },
-
-
-    /**
-     * Include all features of the given mixin into the class. The mixin may
-     * include features which are already defined in the target class. Existing
-     * features of equal name will be overwritten.
-     * Please keep in mind that this functionality is not intented for regular
-     * use, but as a formalized way (and a last resort) in order to patch
-     * existing classes.
-     *
-     * <b>WARNING</b>: You may break working classes and features.
-     *
-     * @type static
-     * @param clazz {Class} An existing class which should be modified by including the mixin.
-     * @param mixin {Mixin} The mixin to be included.
-     */
-    patch : function(clazz, mixin)
-    {
-      rwt.qx.Class.__addMixin(clazz, mixin, true);
-    },
-
-
-    /**
-     * Whether a class is a direct or indirect sub class of another class,
-     * or both classes coincide.
-     *
-     * @type static
-     * @param clazz {Class} the class to check.
-     * @param superClass {Class} the potential super class
-     * @return {Boolean} whether clazz is a sub class of superClass.
-     */
-    isSubClassOf : function(clazz, superClass)
-    {
-      if (!clazz) {
-        return false;
-      }
-
-      if (clazz == superClass) {
-        return true;
-      }
-
-      if (clazz.prototype instanceof superClass) {
-        return true;
-      }
-
-      return false;
-    },
-
-
-    /**
-     * Returns the definition of the given property. Returns null
-     * if the property does not exist.
-     *
-     * TODO: Correctly support refined properties?
-     *
-     * @type member
-     * @param clazz {Class} class to check
-     * @param name {String} name of the event to check for
-     * @return {Map|null} whether the object support the given event.
-     */
-    getPropertyDefinition : function(clazz, name)
-    {
-      while (clazz)
-      {
-        if (clazz.$$properties && clazz.$$properties[name]) {
-          return clazz.$$properties[name];
-        }
-
-        clazz = clazz.superclass;
-      }
-
-      return null;
-    },
-
-
-    /**
-     * Returns the class or one of its superclasses which contains the
-     * declaration for the given property in its class definition. Returns null
-     * if the property is not specified anywhere.
-     *
-     * @param clazz {Class} class to look for the property
-     * @param name {String} name of the property
-     * @return {Class | null} The class which includes the property
-     */
-    getByProperty : function(clazz, name)
-    {
-      while (clazz)
-      {
-        if (clazz.$$properties && clazz.$$properties[name]) {
-          return clazz;
-        }
-
-        clazz = clazz.superclass;
-      }
-
-      return null;
-    },
-
-
-    /**
-     * Whether a class has the given property
-     *
-     * @type member
-     * @param clazz {Class} class to check
-     * @param name {String} name of the property to check for
-     * @return {Boolean} whether the class includes the given property.
-     */
-    hasProperty : function(clazz, name) {
-      return !!this.getPropertyDefinition(clazz, name);
-    },
-
-
-    /**
-     * Returns the event type of the given event. Returns null if
-     * the event does not exist.
-     *
-     * @type member
-     * @param clazz {Class} class to check
-     * @param name {String} name of the event
-     * @return {Map|null} Event type of the given event.
-     */
-    getEventType : function(clazz, name)
-    {
-      var clazz = clazz.constructor;
-
-      while (clazz.superclass)
-      {
-        if (clazz.$$events && clazz.$$events[name] !== undefined) {
-          return clazz.$$events[name];
-        }
-
-        clazz = clazz.superclass;
-      }
-
-      return null;
-    },
-
-
-    /**
-     * Whether a class supports the given event type
-     *
-     * @type member
-     * @param clazz {Class} class to check
-     * @param name {String} name of the event to check for
-     * @return {Boolean} whether the class supports the given event.
-     */
-    supportsEvent : function(clazz, name) {
-      return !!this.getEventType(clazz, name);
-    },
-
-
-    /**
-     * Whether a class directly includes a mixin.
-     *
-     * @type static
-     * @param clazz {Class} class to check
-     * @param mixin {Mixin} the mixin to check for
-     * @return {Boolean} whether the class includes the mixin directly.
-     */
-    hasOwnMixin: function(clazz, mixin) {
-      return clazz.$$includes && clazz.$$includes.indexOf(mixin) !== -1;
-    },
-
-
-    /**
-     * Returns the class or one of its superclasses which contains the
-     * declaration for the given mixin. Returns null if the mixin is not
-     * specified anywhere.
-     *
-     * @param clazz {Class} class to look for the mixin
-     * @param mixin {Mixin} mixin to look for
-     * @return {Class | null} The class which directly includes the given mixin
-     */
-    getByMixin : function(clazz, mixin)
-    {
-      var list, i, l;
-
-      while (clazz)
-      {
-        if (clazz.$$includes)
-        {
-          list = clazz.$$flatIncludes;
-
-          for (i=0, l=list.length; i<l; i++)
-          {
-            if (list[i] === mixin) {
-              return clazz;
-            }
-          }
-        }
-
-        clazz = clazz.superclass;
-      }
-
-      return null;
-    },
-
-
-    /**
-     * Returns a list of all mixins available in a given class.
-     *
-     * @param clazz {Class} class which should be inspected
-     * @return {Mixin[]} array of mixins this class uses
-     */
-    getMixins : function(clazz)
-    {
-      var list = [];
-
-      while (clazz)
-      {
-        if (clazz.$$includes) {
-          list.push.apply(list, clazz.$$flatIncludes);
-        }
-
-        clazz = clazz.superclass;
-      }
-
-      return list;
-    },
-
-
-    /**
-     * Whether a given class or any of its superclasses includes a given mixin.
-     *
-     * @type static
-     * @param clazz {Class} class to check
-     * @param mixin {Mixin} the mixin to check for
-     * @return {Boolean} whether the class includes the mixin.
-     */
-    hasMixin: function(clazz, mixin) {
-      return !!this.getByMixin(clazz, mixin);
-    },
-
-
-    /**
-     * Whether a given class directly includes a interface.
-     *
-     * This function will only return "true" if the interface was defined
-     * in the class declaration (@link rwt.qx.Class#define}) using the "implement"
-     * key.
-     *
-     * @type static
-     * @param clazz {Class} class or instance to check
-     * @param iface {Interface} the interface to check for
-     * @return {Boolean} whether the class includes the mixin directly.
-     */
-    hasOwnInterface : function(clazz, iface) {
-      return clazz.$$implements && clazz.$$implements.indexOf(iface) !== -1;
-    },
-
-
-    /**
-     * Returns the class or one of its superclasses which contains the
-     * declaration of the given interface. Returns null if the interface is not
-     * specified anywhere.
-     *
-     * @param clazz {Class} class to look for the interface
-     * @param iface {Interface} interface to look for
-     * @return {Class | null} the class which directly implements the given interface
-     */
-    getByInterface : function(clazz, iface)
-    {
-      var list, i, l;
-
-      while (clazz)
-      {
-        if (clazz.$$implements)
-        {
-          list = clazz.$$flatImplements;
-
-          for (i=0, l=list.length; i<l; i++)
-          {
-            if (list[i] === iface) {
-              return clazz;
-            }
-          }
-        }
-
-        clazz = clazz.superclass;
-      }
-
-      return null;
-    },
-
-
-    /**
-     * Returns a list of all mixins available in a class.
-     *
-     * @param clazz {Class} class which should be inspected
-     * @return {Mixin[]} array of mixins this class uses
-     */
-    getInterfaces : function(clazz)
-    {
-      var list = [];
-
-      while (clazz)
-      {
-        if (clazz.$$implements) {
-          list.push.apply(list, clazz.$$flatImplements);
-        }
-
-        clazz = clazz.superclass;
-      }
-
-      return list;
-    },
-
-
-    /**
-     * Whether a given class or any of its superclasses includes a given interface.
-     *
-     * This function will return "true" if the interface was defined
-     * in the class declaration (@link rwt.qx.Class#define}) of the class
-     * or any of its super classes using the "implement"
-     * key.
-     *
-     * @type static
-     * @param clazz {Class|Object} class or instance to check
-     * @param iface {Interface} the interface to check for
-     * @return {Boolean} whether the class includes the interface.
-     */
-    hasInterface : function(clazz, iface) {
-      return !!this.getByInterface(clazz, iface);
-    },
-
-
-    /**
-     * Whether a given class conforms to an interface.
-     *
-     * Checks whether all methods defined in the interface are
-     * implemented in the class. The class does not need to implement
-     * the interface explicitly.
-     *
-     * @type static
-     * @param clazz {Class} class to check
-     * @param iface {Interface} the interface to check for
-     * @return {Boolean} whether the class conforms to the interface.
-     */
-    implementsInterface : function(clazz, iface)
-    {
-      return false;
-    },
-
-
-    /**
-     * Helper method to handle singletons
-     *
-     * @type static
-     * @internal
-     * @return {var} TODOC
-     */
-    getInstance : function() {
-      if( !this.$$instance ) {
-        this.$$allowconstruct = true;
-        var Constructor = this;
-        this.$$instance = new Constructor();
-        delete this.$$allowconstruct;
-      }
-      return this.$$instance;
-    },
-
-    /**
-     * This method will be attached to all classes to return
-     * a nice identifier for them.
-     *
-     * @internal
-     * @return {String} The class identifier
-     */
-    genericToString : function() {
-      return "[Class " + this.classname + "]";
-    },
-
-
-    /** Stores all defined classes */
-    __registry : rwt.runtime.Bootstrap.__registry,
-
-
-    /** {Map} allowed keys in non-static class definition */
-    __allowedKeys : rwt.util.Variant.select("qx.debug",
-    {
-      "on":
-      {
-        "type"       : "string",    // String
-        "extend"     : "function",  // Function
-        "implement"  : "object",    // Interface[]
-        "include"    : "object",    // Mixin[]
-        "construct"  : "function",  // Function
-        "statics"    : "object",    // Map
-        "properties" : "object",    // Map
-        "members"    : "object",    // Map
-        "settings"   : "object",    // Map
-        "variants"   : "object",    // Map
-        "events"     : "object",    // Map
-        "defer"      : "function",  // Function
-        "destruct"   : "function"   // Function
-      },
-
-      "default" : null
-    }),
-
-
-    /** {Map} allowed keys in static class definition */
-    __staticAllowedKeys : rwt.util.Variant.select("qx.debug",
-    {
-      "on":
-      {
-        "type"       : "string",    // String
-        "statics"    : "object",    // Map
-        "settings"   : "object",    // Map
-        "variants"   : "object",    // Map
-        "defer"      : "function"   // Function
-      },
-
-      "default" : null
-    }),
-
-
-    /**
-     * Validates an incoming configuration and checks for proper keys and values
-     *
-     * @type static
-     * @param name {String} The name of the class
-     * @param config {Map} Configuration map
-     * @return {void}
-     * @throws TODOC
-     */
-    __validateConfig : rwt.util.Variant.select("qx.debug",
-    {
-      "on": function(name, config)
-      {
-        // Validate type
-        if (config.type && !(config.type === "static" || config.type === "abstract" || config.type === "singleton")) {
-          throw new Error('Invalid type "' + config.type + '" definition for class "' + name + '"!');
-        }
-
-        // Validate keys
-        var allowed = config.type === "static" ? this.__staticAllowedKeys : this.__allowedKeys;
-        for (var key in config)
-        {
-          if (!allowed[key]) {
-            throw new Error('The configuration key "' + key + '" in class "' + name + '" is not allowed!');
-          }
-
-          if (config[key] == null) {
-            throw new Error('Invalid key "' + key + '" in class "' + name + '"! The value is undefined/null!');
-          }
-
-          if (typeof config[key] !== allowed[key]) {
-            throw new Error('Invalid type of key "' + key + '" in class "' + name + '"! The type of the key must be "' + allowed[key] + '"!');
-          }
-        }
-
-        // Validate maps
-        var maps = [ "statics", "properties", "members", "settings", "variants", "events" ];
-        for (var i=0, l=maps.length; i<l; i++)
-        {
-          var key = maps[i];
-
-          if (config[key] !== undefined && (config[key] instanceof Array || config[key] instanceof RegExp || config[key] instanceof Date || config[key].classname !== undefined)) {
-            throw new Error('Invalid key "' + key + '" in class "' + name + '"! The value needs to be a map!');
-          }
-        }
-
-        // Validate include definition
-        if (config.include)
-        {
-          if (config.include instanceof Array)
-          {
-            for (var i=0, a=config.include, l=a.length; i<l; i++)
-            {
-              if (a[i] == null || a[i].$$type !== "Mixin") {
-                throw new Error('The include definition in class "' + name + '" contains an invalid mixin at position ' + i + ': ' + a[i]);
-              }
-            }
-          }
-          else
-          {
-            throw new Error('Invalid include definition in class "' + name + '"! Only mixins and arrays of mixins are allowed!');
-          }
-        }
-
-        // Validate implement definition
-        if (config.implement)
-        {
-          if (config.implement instanceof Array)
-          {
-            for (var i=0, a=config.implement, l=a.length; i<l; i++)
-            {
-              if (a[i] == null || a[i].$$type !== "Interface") {
-                throw new Error('The implement definition in class "' + name + '" contains an invalid interface at position ' + i + ': ' + a[i]);
-              }
-            }
-          }
-          else
-          {
-            throw new Error('Invalid implement definition in class "' + name + '"! Only interfaces and arrays of interfaces are allowed!');
-          }
-        }
-
-        // Check mixin compatibility
-        if (config.include)
-        {
-          try {
-            rwt.qx.Mixin.checkCompatibility(config.include);
-          } catch(ex) {
-            throw new Error('Error in include definition of class "' + name + '"! ' + ex.message);
-          }
-        }
-
-        // Validate variants
-        if (config.variants)
-        {
-          for (var key in config.variants)
-          {
-            if (key.substr(0, key.indexOf(".")) != name.substr(0, name.indexOf("."))) {
-              throw new Error('Forbidden variant "' + key + '" found in "' + name + '". It is forbidden to define a variant for an external namespace!');
-            }
-          }
-        }
-      },
-
-      "default" : function() {}
-    }),
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-       PRIVATE ADD HELPERS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Attach events to the class
-     *
-     * @param clazz {Class} class to add the events to
-     * @param events {Map} map of event names the class fires.
-     * @param patch {Boolean ? false} Enable redefinition of event type?
-     */
-    __addEvents : function(clazz, events, patch)
-    {
-
-      if (clazz.$$events)
-      {
-        for (var key in events) {
-          clazz.$$events[key] = events[key];
-        }
-      }
-      else
-      {
-        clazz.$$events = events;
-      }
-    },
-
-
-    /**
-     * Attach properties to classes
-     *
-     * @type static
-     * @param clazz {Class} class to add the properties to
-     * @param properties {Map} map of properties
-     * @param patch {Boolean ? false} Overwrite property with the limitations of a property
-               which means you are able to refine but not to replace (esp. for new properties)
-     */
-    __addProperties : function(clazz, properties, patch)
-    {
-      var config;
-
-      if (patch === undefined) {
-        patch = false;
-      }
-
-      var attach = !!clazz.$$propertiesAttached;
-
-      for (var name in properties)
-      {
-        config = properties[name];
-
-        // Store name into configuration
-        config.name = name;
-
-        // Add config to local registry
-        if (!config.refine)
-        {
-          if (clazz.$$properties === undefined) {
-            clazz.$$properties = {};
-          }
-
-          clazz.$$properties[name] = config;
-        }
-
-        // Store init value to prototype. This makes it possible to
-        // overwrite this value in derived classes.
-        if (config.init !== undefined) {
-          clazz.prototype["__init$" + name] = config.init;
-        }
-
-        // register event name
-        if (config.event !== undefined) {
-          var event = {};
-          event[config.event] = "rwt.event.ChangeEvent";
-          this.__addEvents(clazz, event, patch);
-        }
-
-        // Remember inheritable properties
-        if (config.inheritable) {
-          rwt.qx.Property.$$inheritable[name] = true;
-        }
-
-        // If instances of this class were already created, we
-        // need to attach the new style properties functions, directly.
-        if (attach) {
-          rwt.qx.Property.attachMethods(clazz, name, config);
-        }
-
-        // Create old style properties
-        if (config._fast) {
-          rwt.qx.LegacyProperty.addFastProperty(config, clazz.prototype);
-        } else if (config._cached) {
-          rwt.qx.LegacyProperty.addCachedProperty(config, clazz.prototype);
-        } else if (config._legacy) {
-          rwt.qx.LegacyProperty.addProperty(config, clazz.prototype);
-        }
-      }
-    },
-
-    /**
-     *
-     * @param clazz {Class} class to add property to
-     * @param name {String} name of the property
-     * @param config {Map} configuration map
-     * @param patch {Boolean ? false} enable refine/patch?
-     */
-    __validateProperty : rwt.util.Variant.select("qx.debug",
-    {
-      "on": function(clazz, name, config, patch)
-      {
-        var has = this.hasProperty(clazz, name);
-        var compat = config._legacy || config._fast || config._cached;
-
-        if (has)
-        {
-          var existingProperty = this.getPropertyDefinition(clazz, name);
-          var existingCompat = existingProperty._legacy || existingProperty._fast || existingProperty._cached;
-
-          if (compat != existingCompat) {
-            throw new Error("Could not redefine existing property '" + name + "' of class '" + clazz.classname + "'.");
-          }
-
-          if (config.refine && existingProperty.init === undefined) {
-            throw new Error("Could not refine a init value if there was previously no init value defined. Property '" + name + "' of class '" + clazz.classname + "'.");
-          }
-        }
-
-        if (!has && config.refine) {
-          throw new Error("Could not refine non-existent property: " + name + "!");
-        }
-
-        if (has && !patch) {
-          throw new Error("Class " + clazz.classname + " already has a property: " + name + "!");
-        }
-
-        if (has && patch && !compat)
-        {
-          if (!config.refine) {
-            throw new Error('Could not refine property "' + name + '" without a "refine" flag in the property definition! This class: ' + clazz.classname + ', original class: ' + this.getByProperty(clazz, name).classname + '.');
-          }
-
-          for (var key in config)
-          {
-            if (key !== "init" && key !== "refine") {
-              throw new Error("Class " + clazz.classname + " could not refine property: " + name + "! Key: " + key + " could not be refined!");
-            }
-          }
-        }
-
-        if (compat) {
-          return;
-        }
-
-        // Check 0.7 keys
-        var allowed = config.group ? rwt.qx.Property.$$allowedGroupKeys : rwt.qx.Property.$$allowedKeys;
-        for (var key in config)
-        {
-          if (allowed[key] === undefined) {
-            throw new Error('The configuration key "' + key + '" of property "' + name + '" in class "' + clazz.classname + '" is not allowed!');
-          }
-
-          if (config[key] === undefined) {
-            throw new Error('Invalid key "' + key + '" of property "' + name + '" in class "' + clazz.classname + '"! The value is undefined: ' + config[key]);
-          }
-
-          if (allowed[key] !== null && typeof config[key] !== allowed[key]) {
-            throw new Error('Invalid type of key "' + key + '" of property "' + name + '" in class "' + clazz.classname + '"! The type of the key must be "' + allowed[key] + '"!');
-          }
-        }
-
-        if( config.transform != null ) {
-          if( typeof config.transform !== "string" ) {
-            throw new Error( 'Invalid transform definition of property "' + name + '" in class "' + clazz.classname + '"! Needs to be a String.' );
-          }
-        }
-
-        if (config.check != null)
-        {
-          if (!(typeof config.check == "string" ||config.check instanceof Array || config.check instanceof Function)) {
-            throw new Error('Invalid check definition of property "' + name + '" in class "' + clazz.classname + '"! Needs to be a String, Array or Function.');
-          }
-        }
-
-        if (config.event != null && !this.isSubClassOf(clazz, rwt.qx.Target))
-        {
-          throw new Error("Invalid property '"+name+"' in class '"+clazz.classname+"': Properties defining an event can only be defined in sub classes of 'rwt.qx.Target'!");
-        }
-      },
-
-      "default" : null
-    }),
-
-
-    /**
-     * Attach members to a class
-     *
-     * @param clazz {Class} clazz to add members to
-     * @param members {Map} The map of members to attach
-     * @param patch {Boolean ? false} Enable patching of
-     * @param base (Boolean ? true) Attach base flag to mark function as members
-     *     of this class
-     * @param wrap {Boolean ? false} Whether the member method should be wrapped.
-     *     this is needed to allow base calls in patched mixin members.
-     * @return {void}
-     */
-    __addMembers : function( clazz, members, patch, base, wrap ) {
-      var proto = clazz.prototype;
-      var key, member;
-      for( var i = 0, a = rwt.util.Objects.getKeys( members ), l = a.length; i < l; i++ ) {
-        key = a[ i ];
-        member = members[ key ];
-        // Added helper stuff to functions
-        // Hint: Could not use typeof function because RegExp objects are functions, too
-        if( base !== false && member instanceof Function ) {
-          if( wrap === true ) {
-            // wrap "patched" mixin member
-            member = this.__mixinMemberWrapper( member, proto[ key ] );
-          } else {
-            // Configure extend (named base here)
-            // Hint: proto[key] is not yet overwritten here
-            if( proto[ key ] ) {
-              member.base = proto[ key ];
-            }
-            member.self = clazz;
-          }
-        }
-        // Attach member
-        proto[ key ] = member;
-      }
-    },
-
-
-    /**
-     * Wraps a member function of a mixin, which is included using "patch". This
-     * allows "base" calls in the mixin member function.
-     *
-     * @param member {Function} The mixin method to wrap
-     * @param base {Function} The overwritten method
-     * @return {Function} the wrapped mixin member
-     */
-    __mixinMemberWrapper : function( member, base ) {
-      if( base ) {
-        return function() {
-          var oldBase = member.base;
-          member.base = base;
-          var retval = member.apply(this, arguments);
-          member.base = oldBase;
-          return retval;
-        };
-      } else {
-        return member;
-      }
-    },
-
-
-    /**
-     * Include all features of the mixin into the given class (recursive).
-     *
-     * @param clazz {Class} A class previously defined where the mixin should be attached.
-     * @param mixin {Mixin} Include all features of this mixin
-     * @param patch {Boolean} Overwrite existing fields, functions and properties
-     */
-    __addMixin : function(clazz, mixin, patch)
-    {
-
-      // Attach content
-      var list = rwt.qx.Mixin.flatten([mixin]);
-      var entry;
-
-      for (var i=0, l=list.length; i<l; i++)
-      {
-        entry = list[i];
-
-        // Attach events
-        if (entry.$$events) {
-          this.__addEvents(clazz, entry.$$events, patch);
-        }
-
-        // Attach properties (Properties are already readonly themselve, no patch handling needed)
-        if (entry.$$properties) {
-          this.__addProperties(clazz, entry.$$properties, patch);
-        }
-
-        // Attach members (Respect patch setting, but dont apply base variables)
-        if (entry.$$members) {
-          this.__addMembers(clazz, entry.$$members, patch, patch, patch);
-        }
-      }
-
-      // Store mixin reference
-      if (clazz.$$includes)
-      {
-        clazz.$$includes.push(mixin);
-        clazz.$$flatIncludes.push.apply(clazz.$$flatIncludes, list);
-      }
-      else
-      {
-        clazz.$$includes = [mixin];
-        clazz.$$flatIncludes = list;
-      }
-    },
-
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-       PRIVATE FUNCTION HELPERS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Returns the default constructor.
-     * This constructor just calles the constructor of the base class.
-     *
-     * @type static
-     * @return {Function} The default constructor.
-     */
-    __createDefaultConstructor : function() {
-      function defaultConstructor() {
-        arguments.callee.base.apply( this, arguments );
-      }
-      return defaultConstructor;
-    },
-
-
-    /**
-     * Returns an empty function. This is needed to get an empty function with an empty closure.
-     *
-     * @type static
-     * @return {Function} empty function
-     */
-    __createEmptyFunction : function() {
-      return function() {};
-    },
-
-    __initializeClass : function( clazz ) {
-      if( clazz.$$initializer ) {
-        var inits = [];
-        var target = clazz;
-        while( target.$$initializer ) {
-          inits.push( target );
-          target = target.superclass;
-        }
-        while( inits.length > 0 ) {
-          target = inits.pop();
-          target.$$initializer();
-          delete target.$$initializer;
-        }
-      }
-    },
-
-
-    /**
-     * Generate a wrapper of the original class constructor in order to enable
-     * some of the advanced OO features (e.g. abstract class, singleton, mixins)
-     *
-     * @param construct {Function} the original constructor
-     * @param name {String} name of the class
-     * @param type {String} the user specified class type
-     */
-    __wrapConstructor : function(construct, name, type)
-    {
-      var init = this.__initializeClass;
-      var wrapper = function() {
-
-        // We can access the class/statics using arguments.callee
-        var clazz=arguments.callee.constructor;
-        init( clazz );
-
-        // Attach local properties
-        if( !clazz.$$propertiesAttached ) {
-          rwt.qx.Property.attach( clazz );
-        }
-
-        // Execute default constructor
-        var retval=clazz.$$original.apply(this,arguments);
-
-        // Initialize local mixins
-        if(clazz.$$includes){var mixins=clazz.$$flatIncludes;
-        for(var i=0,l=mixins.length;i<l;i++){
-        if(mixins[i].$$constructor){mixins[i].$$constructor.apply(this,arguments);}}}
-
-        // Mark instance as initialized
-        if( this.classname === ', name, ' . classname ) {
-          this.$$initialized = true;
-        }
-
-        // Return optional return value
-        return retval;
-      };
-
-      // Add singleton getInstance()
-      if( type === "singleton" ) {
-        wrapper.getInstance = this.getInstance;
-      }
-
-      // Store original constructor
-      wrapper.$$original = construct;
-
-      // Store wrapper into constructor (needed for base calls etc.)
-      construct.wrapper = wrapper;
-
-      // Return generated wrapper
-      return wrapper;
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * This class is used to define mixins (similar to mixins in Ruby).
- *
- * Mixins are collections of code and variables, which can be merged into
- * other classes. They are similar to classes but don't support inheritance.
- *
- * See the description of the {@link #define} method how a mixin is defined.
- */
-rwt.qx.Class.define("rwt.qx.Mixin",
-{
-  statics :
-  {
-    /*
-    ---------------------------------------------------------------------------
-       PUBLIC API
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Define a new mixin.
-     *
-     * Example:
-     * <pre class='javascript'>
-     * rwt.qx.Mixin.define("name",
-     * {
-     *   includes: [SuperMixins],
-     *
-     *   properties: {
-     *     tabIndex: {type: "number", init: -1}
-     *   },
-     *
-     *   members:
-     *   {
-     *     prop1: "foo",
-     *     meth1: function() {},
-     *     meth2: function() {}
-     *   }
-     * });
-     * </pre>
-     *
-     * @type static
-     * @param name {String} name of the mixin
-     * @param config {Map ? null} Mixin definition structure. The configuration map has the following keys:
-     *   <table>
-     *     <tr><th>Name</th><th>Type</th><th>Description</th></tr>
-     *     <tr><th>construct</th><td>Function</td><td>An optional mixin constructor. It is called on instantiation each
-     *         class including this mixin. The constructor takes no parameters.</td></tr>
-     *     <tr><th>destruct</th><td>Function</td><td>An optional mixin destructor.</td></tr>
-     *     <tr><th>include</th><td>Mixin[]</td><td>Array of mixins, which will be merged into the mixin.</td></tr>
-     *     <tr><th>statics</th><td>Map</td><td>
-     *         Map of statics of the mixin. The statics will not get copied into the target class. They remain
-     *         acceccible from the mixin. This is the same behaviour as statics in interfaces ({@link qx.Interface#define}).
-     *     </td></tr>
-     *     <tr><th>members</th><td>Map</td><td>Map of members of the mixin.</td></tr>
-     *     <tr><th>properties</th><td>Map</td><td>Map of property definitions. Format of the map: TODOC</td></tr>
-     *     <tr><th>events</th><td>Map</td><td>
-     *         Map of events the mixin fires. The keys are the names of the events and the values are
-     *         corresponding event type classes.
-     *     </td></tr>
-     *   </table>
-     */
-    define : function(name, config)
-    {
-      if (config)
-      {
-        // Normalize include
-        if (config.include && !(config.include instanceof Array)) {
-          config.include = [config.include];
-        }
-
-        // Create Interface from statics
-        var mixin = config.statics ? config.statics : {};
-        for(var key in mixin) {
-          mixin[key].mixin = mixin;
-        }
-
-        // Attach configuration
-        if (config.construct) {
-          mixin.$$constructor = config.construct;
-        }
-
-        if (config.include) {
-          mixin.$$includes = config.include;
-        }
-
-        if (config.properties) {
-          mixin.$$properties = config.properties;
-        }
-
-        if (config.members) {
-          mixin.$$members = config.members;
-        }
-
-        for(var key in mixin.$$members)
-        {
-          if (mixin.$$members[key] instanceof Function) {
-            mixin.$$members[key].mixin = mixin;
-          }
-        }
-
-        if (config.events) {
-          mixin.$$events = config.events;
-        }
-
-        if (config.destruct) {
-          mixin.$$destructor = config.destruct;
-        }
-      }
-      else
-      {
-        var mixin = {};
-      }
-
-      // Add basics
-      mixin.$$type = "Mixin";
-      mixin.name = name;
-
-      // Attach toString
-      mixin.toString = this.genericToString;
-
-      // Assign to namespace
-      mixin.basename = rwt.qx.Class.createNamespace(name, mixin);
-
-      // Store class reference in global mixin registry
-      this.__registry[name] = mixin;
-
-      // Return final mixin
-      return mixin;
-    },
-
-
-    /**
-     * Check compatiblity between mixins (including their includes)
-     *
-     * @param mixins {Mixin[]} an array of mixins
-     * @throws an exception when there is a conflict between the mixins
-     */
-    checkCompatibility : function(mixins)
-    {
-      var list = this.flatten(mixins);
-      var len = list.length;
-
-      if (len < 2) {
-        return true;
-      }
-
-      var properties = {};
-      var members = {};
-      var events = {};
-      var mixin;
-
-      for (var i=0; i<len; i++)
-      {
-        mixin = list[i];
-
-        for (var key in mixin.events)
-        {
-          if(events[key]) {
-            throw new Error('Conflict between mixin "' + mixin.name + '" and "' + events[key] + '" in member "' + key + '"!');
-          }
-
-          events[key] = mixin.name;
-        }
-
-        for (var key in mixin.properties)
-        {
-          if(properties[key]) {
-            throw new Error('Conflict between mixin "' + mixin.name + '" and "' + properties[key] + '" in property "' + key + '"!');
-          }
-
-          properties[key] = mixin.name;
-        }
-
-        for (var key in mixin.members)
-        {
-          if(members[key]) {
-            throw new Error('Conflict between mixin "' + mixin.name + '" and "' + members[key] + '" in member "' + key + '"!');
-          }
-
-          members[key] = mixin.name;
-        }
-      }
-
-      return true;
-    },
-
-
-    /**
-     * Checks if a class is compatible to the given mixin (no conflicts)
-     *
-     * @param mixin {Mixin} mixin to check
-     * @param clazz {Class} class to check
-     * @throws an exception when the given mixin is incompatible to the class
-     * @return {Boolean} true if the mixin is compatible to the given class
-     */
-    isCompatible : function(mixin, clazz)
-    {
-      var list = rwt.qx.Class.getMixins(clazz);
-      list.push(mixin);
-      return rwt.qx.Mixin.checkCompatibility(list);
-    },
-
-
-    /**
-     * Returns a mixin by name
-     *
-     * @type static
-     * @param name {String} class name to resolve
-     * @return {Class} the class
-     */
-    getByName : function(name) {
-      return this.__registry[name];
-    },
-
-
-    /**
-     * Determine if mixin exists
-     *
-     * @type static
-     * @name isDefined
-     * @param name {String} mixin name to check
-     * @return {Boolean} true if mixin exists
-     */
-    isDefined : function(name) {
-      return this.getByName(name) !== undefined;
-    },
-
-
-    /**
-     * Determine the number of mixins which are defined
-     *
-     * @type static
-     * @return {Number} the number of classes
-     */
-    getTotalNumber : function() {
-      return rwt.util.Objects.getLength(this.__registry);
-    },
-
-
-    /**
-     * Generates a list of all mixins given plus all the
-     * mixins these includes plus... (deep)
-     *
-     * @param mixins {Mixin[] ? []} List of mixins
-     * @returns {Array} List of all mixins
-     */
-    flatten : function(mixins)
-    {
-      if (!mixins) {
-        return [];
-      }
-
-      // we need to create a copy and not to modify the existing array
-      var list = mixins.concat();
-
-      for (var i=0, l=mixins.length; i<l; i++)
-      {
-        if (mixins[i].$$includes) {
-          list.push.apply(list, this.flatten(mixins[i].$$includes));
-        }
-      }
-
-      // console.log("Flatten: " + mixins + " => " + list);
-
-      return list;
-    },
-
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-       PRIVATE/INTERNAL API
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * This method will be attached to all mixins to return
-     * a nice identifier for them.
-     *
-     * @internal
-     * @return {String} The mixin identifier
-     */
-    genericToString : function() {
-      return "[Mixin " + this.name + "]";
-    },
-
-
-    /** Registers all defined mixins */
-    __registry : {},
-
-
-    /** {Map} allowed keys in mixin definition */
-    __allowedKeys : rwt.util.Variant.select("qx.debug",
-    {
-      "on":
-      {
-        "include"    : "object",   // Mixin | Mixin[]
-        "statics"    : "object",   // Map
-        "members"    : "object",   // Map
-        "properties" : "object",   // Map
-        "events"     : "object",   // Map
-        "destruct"   : "function", // Function
-        "construct"  : "function"  // Function
-      },
-
-      "default" : null
-    }),
-
-
-    /**
-     * Validates incoming configuration and checks keys and values
-     *
-     * @type static
-     * @param name {String} The name of the class
-     * @param config {Map} Configuration map
-     */
-    __validateConfig : rwt.util.Variant.select("qx.debug",
-    {
-      "on": function(name, config)
-      {
-        // Validate keys
-        var allowed = this.__allowedKeys;
-        for (var key in config)
-        {
-          if (!allowed[key]) {
-            throw new Error('The configuration key "' + key + '" in mixin "' + name + '" is not allowed!');
-          }
-
-          if (config[key] == null) {
-            throw new Error('Invalid key "' + key + '" in mixin "' + name + '"! The value is undefined/null!');
-          }
-
-          if (allowed[key] !== null && typeof config[key] !== allowed[key]) {
-            throw new Error('Invalid type of key "' + key + '" in mixin "' + name + '"! The type of the key must be "' + allowed[key] + '"!');
-          }
-        }
-
-        // Validate maps
-        var maps = [ "statics", "members", "properties", "events" ];
-        for (var i=0, l=maps.length; i<l; i++)
-        {
-          var key = maps[i];
-
-          if (config[key] !== undefined && (config[key] instanceof Array || config[key] instanceof RegExp || config[key] instanceof Date || config[key].classname !== undefined)) {
-            throw new Error('Invalid key "' + key + '" in mixin "' + name + '"! The value needs to be a map!');
-          }
-        }
-
-        // Validate includes
-        if (config.include)
-        {
-          for (var i=0, a=config.include, l=a.length; i<l; i++)
-          {
-            if (a[i] == null) {
-              throw new Error("Includes of mixins must be mixins. The include number '" + (i+1) + "' in mixin '" + name + "'is undefined/null!");
-            }
-
-            if (a[i].$$type !== "Mixin") {
-              throw new Error("Includes of mixins must be mixins. The include number '" + (i+1) + "' in mixin '" + name + "'is not a mixin!");
-            }
-          }
-
-          this.checkCompatibility(config.include);
-        }
-      },
-
-      "default" : function() {}
-    })
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Internal class for handling dynamic properties.
- *
- * WARNING: This is a legacy class to support the old-style dynamic properties
- * in 0.6.x. Its much improved successor is {@link rwt.qx.Property}.
- *
- * @deprecated This class is supposed to be removed in qooxdoo 0.7
- */
-rwt.qx.Class.define("rwt.qx.LegacyProperty",
-{
-  statics :
-  {
-    /**
-     * Converts the property name to the setter name
-     *
-     * @type static
-     * @param name {String} name of a property
-     * @return {String} name of the setter for this property
-     */
-    getSetterName : function(name) {
-      return rwt.qx.Property.$$method.set[name];
-    },
-
-
-    /**
-     * Converts the property name to the getter name
-     *
-     * @type static
-     * @param name {String} name of a property
-     * @return {String} name of the setter for this property
-     */
-    getGetterName : function(name) {
-      return rwt.qx.Property.$$method.get[name];
-    },
-
-
-    /**
-     * Converts the property name to the resetter name
-     *
-     * @type static
-     * @param name {String} name of a property
-     * @return {String} name of the setter for this property
-     */
-    getResetterName : function(name) {
-      return rwt.qx.Property.$$method.reset[name];
-    },
-
-
-    /*
-    ---------------------------------------------------------------------------
-      OBJECT PROPERTY EXTENSION
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Adds a so-named fast property to a prototype.
-     *
-     * @deprecated
-     * @type static
-     * @param config {Map} Configuration structure
-     * @param proto {Object} Prototype where the methods should be attached
-     * @return {void}
-     */
-    addFastProperty : function(config, proto)
-    {
-      var vName = config.name;
-      var vUpName = rwt.util.Strings.toFirstUp(vName);
-
-      var vStorageField = "_value" + vUpName;
-      var vGetterName = "get" + vUpName;
-      var vSetterName = "set" + vUpName;
-      var vComputerName = "_compute" + vUpName;
-
-      proto[vStorageField] = typeof config.defaultValue !== "undefined" ? config.defaultValue : null;
-
-      if (config.noCompute)
-      {
-        proto[vGetterName] = function() {
-          return this[vStorageField];
-        };
-      }
-      else
-      {
-        proto[vGetterName] = function() {
-          return this[vStorageField] == null ? this[vStorageField] = this[vComputerName]() : this[vStorageField];
-        };
-      }
-
-      proto[vGetterName].self = proto.constructor;
-
-      if (config.setOnlyOnce)
-      {
-        proto[vSetterName] = function(vValue)
-        {
-          this[vStorageField] = vValue;
-          this[vSetterName] = null;
-
-          return vValue;
-        };
-      }
-      else
-      {
-        proto[vSetterName] = function(vValue) {
-          return this[vStorageField] = vValue;
-        };
-      }
-
-      proto[vSetterName].self = proto.constructor;
-
-      if (!config.noCompute)
-      {
-        proto[vComputerName] = function() {
-          return null;
-        };
-
-        proto[vComputerName].self = proto.constructor;
-      }
-    },
-
-
-    /**
-     * Adds a so-named cached property to a prototype
-     *
-     * @deprecated
-     * @type static
-     * @param config {Map} Configuration structure
-     * @param proto {Object} Prototype where the methods should be attached
-     * @return {void}
-     */
-    addCachedProperty : function(config, proto)
-    {
-      var vName = config.name;
-      var vUpName = rwt.util.Strings.toFirstUp(vName);
-
-      var vStorageField = "_cached" + vUpName;
-      var vComputerName = "_compute" + vUpName;
-      var vChangeName = "_change" + vUpName;
-
-      if (typeof config.defaultValue !== "undefined") {
-        proto[vStorageField] = config.defaultValue;
-      }
-
-      proto["get" + vUpName] = function()
-      {
-        if (this[vStorageField] == null) {
-          this[vStorageField] = this[vComputerName]();
-        }
-
-        return this[vStorageField];
-      };
-
-      proto["_invalidate" + vUpName] = function()
-      {
-        if (this[vStorageField] != null)
-        {
-          this[vStorageField] = null;
-
-          if (config.addToQueueRuntime) {
-            this.addToQueueRuntime(config.name);
-          }
-        }
-      };
-
-      proto["_recompute" + vUpName] = function()
-      {
-        var vOld = this[vStorageField];
-        var vNew = this[vComputerName]();
-
-        if (vNew != vOld)
-        {
-          this[vStorageField] = vNew;
-          this[vChangeName](vNew, vOld);
-
-          return true;
-        }
-
-        return false;
-      };
-
-      proto[vChangeName] = function(vNew, vOld) {};
-
-      proto[vComputerName] = function() {
-        return null;
-      };
-
-      proto["get" + vUpName].self = proto.constructor;
-      proto["_invalidate" + vUpName].self = proto.constructor;
-      proto["_recompute" + vUpName].self = proto.constructor;
-    },
-
-
-    /**
-     * Adds a property to a prototype
-     *
-     * @deprecated
-     * @type static
-     * @param config {Map} Configuration structure
-     * @param proto {Object} Prototype where the methods should be attached
-     * @return {void}
-     * @throws TODOC
-     */
-    addProperty : function(config, proto)
-    {
-      if (typeof config !== "object") {
-        throw new Error("AddProperty: Param should be an object!");
-      }
-
-      if (typeof config.name !== "string") {
-        throw new Error("AddProperty: Malformed input parameters: name needed!");
-      }
-
-      // Auto-detect dispose properties
-      if (config.dispose === undefined && (config.type == "function" || config.type == "object")) {
-        config.dispose = true;
-      }
-
-      config.method = rwt.util.Strings.toFirstUp(config.name);
-      config.implMethod = config.impl ? rwt.util.Strings.toFirstUp(config.impl) : config.method;
-
-      if (config.defaultValue === undefined) {
-        config.defaultValue = null;
-      }
-
-      config.allowNull = config.allowNull !== false;
-      config.allowMultipleArguments = config.allowMultipleArguments === true;
-
-      if (typeof config.type === "string") {
-        config.hasType = true;
-      } else if (typeof config.type !== "undefined") {
-        throw new Error("AddProperty: Invalid type definition for property " + config.name + ": " + config.type);
-      } else {
-        config.hasType = false;
-      }
-
-      if (typeof config.instance === "string") {
-        config.hasInstance = true;
-      } else if (typeof config.instance !== "undefined") {
-        throw new Error("AddProperty: Invalid instance definition for property " + config.name + ": " + config.instance);
-      } else {
-        config.hasInstance = false;
-      }
-
-      if (typeof config.classname === "string") {
-        config.hasClassName = true;
-      } else if (typeof config.classname !== "undefined") {
-        throw new Error("AddProperty: Invalid classname definition for property " + config.name + ": " + config.classname);
-      } else {
-        config.hasClassName = false;
-      }
-
-      config.hasConvert = config.convert != null;
-      config.hasPossibleValues = config.possibleValues != null;
-
-      config.addToQueue = config.addToQueue || false;
-      config.addToQueueRuntime = config.addToQueueRuntime || false;
-
-      // upper-case name
-      config.up = config.name.toUpperCase();
-
-      // new style keys (compatible to rwt.qx.Property)
-      var valueKey = rwt.qx.Property.$$store.user[config.name] = "__user$" + config.name;
-
-      // old style keys
-      var changeKey = "change" + config.method;
-      var modifyKey = "_modify" + config.implMethod;
-      var checkKey = "_check" + config.implMethod;
-
-      var method = rwt.qx.Property.$$method;
-      if (!method.set[config.name])
-      {
-        method.set[config.name] = "set" + config.method;
-        method.get[config.name] = "get" + config.method;
-        method.reset[config.name] = "reset" + config.method;
-      }
-
-      // apply default value
-      proto[valueKey] = config.defaultValue;
-
-      // building getFoo(): Returns current stored value
-      proto["get" + config.method] = function() {
-        return this[valueKey];
-      };
-
-      // building forceFoo(): Set (override) without do anything else
-      proto["force" + config.method] = function(newValue) {
-        return this[valueKey] = newValue;
-      };
-
-      // building resetFoo(): Reset value to default value
-      proto["reset" + config.method] = function() {
-        return this["set" + config.method](config.defaultValue);
-      };
-
-      // building toggleFoo(): Switching between two boolean values
-      if (config.type === "boolean")
-      {
-        proto["toggle" + config.method] = function(newValue) {
-          return this["set" + config.method](!this[valueKey]);
-        };
-      }
-
-      if (config.allowMultipleArguments || config.hasConvert || config.hasInstance || config.hasClassName || config.hasPossibleValues || config.hasUnitDetection || config.addToQueue || config.addToQueueRuntime || config.addToStateQueue)
-      {
-        // building setFoo(): Setup new value, do type and change detection, converting types, call unit detection, ...
-        proto["set" + config.method] = function(newValue)
-        {
-          // convert multiple arguments to array
-          if (config.allowMultipleArguments && arguments.length > 1) {
-            newValue = rwt.util.Arrays.fromArguments(arguments);
-          }
-
-          // support converter methods
-          if (config.hasConvert)
-          {
-            try {
-              newValue = config.convert.call(this, newValue, config);
-            } catch(ex) {
-              throw new Error("Attention! Could not convert new value for " + config.name + ": " + newValue + ": " + ex);
-            }
-          }
-
-          var oldValue = this[valueKey];
-
-          if (newValue === oldValue) {
-            return newValue;
-          }
-
-          if (!(config.allowNull && newValue == null))
-          {
-            if (config.hasType && typeof newValue !== config.type) {
-              throw new Error("Attention! The value \"" + newValue + "\" is an invalid value for the property \"" + config.name + "\" which must be typeof \"" + config.type + "\" but is typeof \"" + typeof newValue + "\"!");
-            }
-
-            if (rwt.qx.Class.getByName(config.instance))
-            {
-              if (config.hasInstance && !(newValue instanceof rwt.qx.Class.getByName(config.instance))) {
-                throw new Error("Attention! The value \"" + newValue + "\" is an invalid value for the property \"" + config.name + "\" which must be an instance of \"" + config.instance + "\"!");
-              }
-            }
-            else if (rwt.util.Variant.isSet("qx.compatibility", "on"))
-            {
-              if (config.hasInstance && !(newValue instanceof qx.OO.classes[config.instance])) {
-                throw new Error("Attention! The value \"" + newValue + "\" is an invalid value for the property \"" + config.name + "\" which must be an instance of \"" + config.instance + "\"!");
-              }
-            }
-
-            if (config.hasClassName && newValue.classname != config.classname) {
-              throw new Error("Attention! The value \"" + newValue + "\" is an invalid value for the property \"" + config.name + "\" which must be an object with the classname \"" + config.classname + "\"!");
-            }
-
-            if (config.hasPossibleValues && newValue != null && !rwt.util.Arrays.contains(config.possibleValues, newValue)) {
-              throw new Error("Failed to save value for " + config.name + ". '" + newValue + "' is not a possible value!");
-            }
-          }
-
-          // Allow to check and transform the new value before storage
-          if (this[checkKey])
-          {
-            try
-            {
-              newValue = this[checkKey](newValue, config);
-
-              // Don't do anything if new value is indentical to old value
-              if (newValue === oldValue) {
-                return newValue;
-              }
-            }
-            catch(ex)
-            {
-              throw new Error( "Failed to check property " + config.name + " " + ex );
-            }
-          }
-
-          // Store new value
-          this[valueKey] = newValue;
-
-          // Check if there is a modifier implementation
-          if (this[modifyKey])
-          {
-            try
-            {
-              this[modifyKey](newValue, oldValue, config);
-            }
-            catch(ex)
-            {
-              throw new Error( "Modification of property \"" + config.name + "\" failed with exception " + ex );
-            }
-          }
-
-          // Auto queue addition support
-          if (config.addToQueue) {
-            this.addToQueue(config.name);
-          }
-
-          if (config.addToQueueRuntime) {
-            this.addToQueueRuntime(config.name);
-          }
-
-          // Auto state queue addition support
-          if (config.addToStateQueue) {
-            this.addToStateQueue();
-          }
-
-          // Create Event
-          if (this.hasEventListeners && this.hasEventListeners(changeKey))
-          {
-            try {
-              this.createDispatchDataEvent(changeKey, newValue);
-            } catch(ex) {
-              throw new Error("Property " + config.name + " modified: Failed to dispatch change event: " + ex);
-            }
-          }
-
-          return newValue;
-        };
-      }
-      else
-      {
-        // building setFoo(): Setup new value, do type and change detection, converting types, call unit detection, ...
-        proto["set" + config.method] = function(newValue)
-        {
-          var oldValue = this[valueKey];
-
-          if (newValue === oldValue) {
-            return newValue;
-          }
-
-          if (!(config.allowNull && newValue == null))
-          {
-            if (config.hasType && typeof newValue !== config.type) {
-              throw new Error("Attention! The value \"" + newValue + "\" is an invalid value for the property \"" + config.name + "\" which must be typeof \"" + config.type + "\" but is typeof \"" + typeof newValue + "\"!");
-            }
-          }
-
-          // Allow to check and transform the new value before storage
-          if (this[checkKey])
-          {
-            try
-            {
-              newValue = this[checkKey](newValue, config);
-
-              // Don't do anything if new value is indentical to old value
-              if (newValue === oldValue) {
-                return newValue;
-              }
-            }
-            catch(ex)
-            {
-              throw new Error( "Failed to check property " + config.name + " " + ex );
-            }
-          }
-
-          // Store new value
-          this[valueKey] = newValue;
-
-          // Check if there is a modifier implementation
-          if (this[modifyKey])
-          {
-            try
-            {
-              this[modifyKey](newValue, oldValue, config);
-            }
-            catch(ex)
-            {
-              throw new Error( "Setting property \"" + config.name + "\" to \"" + newValue + "\" failed with exception " + ex );
-            }
-          }
-
-          // Create Event
-          if (this.hasEventListeners && this.hasEventListeners(changeKey))
-          {
-            var vEvent = new rwt.event.DataEvent(changeKey, newValue, oldValue, false);
-
-            vEvent.setTarget(this);
-
-            try {
-              this.dispatchEvent(vEvent, true);
-            } catch(ex) {
-              throw new Error("Property " + config.name + " modified: Failed to dispatch change event: " + ex);
-            }
-          }
-
-          return newValue;
-        };
-      }
-
-      // Attach self to handle protected protection
-      proto["set" + config.method].self = proto.constructor;
-
-      // building user configured get alias for property
-      if (typeof config.getAlias === "string") {
-        proto[config.getAlias] = proto["get" + config.method];
-      }
-
-      // building user configured set alias for property
-      if (typeof config.setAlias === "string") {
-        proto[config.setAlias] = proto["set" + config.method];
-      }
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Internal class for handling of dynamic properties. Should only be used
- * through the methods provided by {@link rwt.qx.Class}.
- *
- * For a complete documentation of properties take a
- * look at http://qooxdoo.org/documentation/developer_manual/properties.
- *
- *
- * *Normal properties*
- *
- * The <code>properties</code> key in the class definition map of {@link rwt.qx.Class#define}
- * is used to generate the properties.
- *
- * Valid keys of a property definition are:
- *
- * <table>
- *   <tr><th>Name</th><th>Type</th><th>Description</th></tr>
- *   <tr><th>check</th><td>Array, String, Function</td><td>
- *     The check is used to validate the incoming value of a property. The check can be:
- *     <ul>
- *       <li>a custom check function. The function takes the incoming value as a parameter and must
- *           return a boolean value to indicate whether the values is valid.
- *       </li>
- *       <li>inline check code as a string e.g. <code>"value &gt; 0 && value &lt; 100"</code></li>
- *       <li>a class name e.g. <code>rwt.widgets.base.Button</code></li>
- *       <li>a name of an interface the value must implement, e.g. <code>qx.application.IAplpication</code></li>
- *       <li>an array of all valid values</li>
- *       <li>one of the predefined checks: Boolean, String, Number, Integer, Float, Double,
- *           Object, Array, Map, Class, Mixin, Interface, Theme, Error, RegExp, Function,
- *           Date, Node, Element, Document, Window, Event
- *       </li>
- *     <ul>
- *   </td></tr>
- *   <tr><th>init</th><td>var</td><td>
- *     Sets the default/initial value of the property. If no property value is set or the property
- *     gets reset, the getter will return the <code>init</code> value.
- *   </td></tr>
- *   <tr><th>apply</th><td>String</td><td>
- *     On change of the property value the method of the specified name will be called. The signature of
- *     the method is <code>function(newValue, oldValue)</code>.
- *   </td></tr>
- *   <tr><th>event</th><td>String</td><td>
- *     On change of the property value an event with the given name will be dispached. The event type is
- *     {@link rwt.event.ChangeEvent}.
- *   </td></tr>
- *   <tr><th>themeable</th><td>Boolean</td><td>
- *     Whether this property can be set using themes.
- *   </td></tr>
- *   <tr><th>inheritable</th><td>Boolean</td><td>
- *     Whether the property value should be inheritable. If the property does not have a user defined or an
- *     init value, the property will try to get the value from the parent of the current object.
- *   </td></tr>
- *   <tr><th>nullable</th><td>Boolean</td><td>
- *     Whether <code>null</code> is an allowed value of the property. This is complemental to the check
- *     defined using the <code>check</code> key.
- *   </td></tr>
- *   <tr><th>refine</th><td>Boolean</td><td>
- *     Whether the property definition is a refinemnet of a property in one of the super classes of the class.
- *     Only the <code>init</code> value can be changed using refine.
- *   </td></tr>
- *   <tr><th>transform</th><td>String</td><td>
- *     On setting of the property value the method of the specified name will
- *     be called. The signature of the method is <code>function(value)</code>.
- *     The parameter <code>value</code> is the value passed to the setter.
- *     The function must return the modified or unmodified value.
- *     Transformation occurs before the check function, so both may be
- *     specified if desired.  Alternatively, the transform function may throw
- *     an error if the value passed to it is invalid.
- *   </td></tr>
- * </table>
- *
- * *Property groups*
- *
- * Property groups are defined in a similar way but support a different set of keys:
- *
- * <table>
- *   <tr><th>Name</th><th>Type</th><th>Description</th></tr>
- *   <tr><th>group</th><td>String[]</td><td>
- *     A list of property names which should be set using the propery group.
- *   </td></tr>
- *   <tr><th>mode</th><td>String</td><td>
- *     If mode is set to <code>"shorthand"</code>, the properties can be set using a CSS like shorthand mode.
- *   </td></tr>
- *   <tr><th>themeable</th><td>Boolean</td><td>
- *     Whether this property can be set using themes.
- *   </td></tr>
- * </table>
- *
- * @internal
- */
-rwt.qx.Class.define( "rwt.qx.Property", {
-
-  statics : {
-
-    /**
-     * Built-in checks
-     * The keys could be used in the check of the properties
-     *
-     * @internal
-     */
-    __checks : {
-      "Boolean"   : 'typeof value === "boolean"',
-      "String"    : 'typeof value === "string"',
-      "NonEmptyString" : 'typeof value === "string" && value.length > 0',
-
-      "Number"    : 'typeof value === "number" && isFinite(value)',
-      "Integer"   : 'typeof value === "number" && isFinite(value) && value%1 === 0',
-      "Float"     : 'typeof value === "number" && isFinite(value)',
-      "Double"    : 'typeof value === "number" && isFinite(value)',
-
-      "Error"     : 'value instanceof Error',
-      "RegExp"    : 'value instanceof RegExp',
-
-      "Object"    : 'value !== null && typeof value === "object"',
-      "Array"     : 'value instanceof Array',
-      "Map"       : 'value !== null && typeof value === "object" && !(value instanceof Array) && !(value instanceof rwt.qx.Object)',
-
-      "Function"  : 'value instanceof Function',
-      "Date"      : 'value instanceof Date',
-      "Node"      : 'value !== null && value.nodeType !== undefined',
-      "Element"   : 'value !== null && value.nodeType === 1 && value.attributes',
-      "Document"  : 'value !== null && value.nodeType === 9 && value.documentElement',
-      "Window"    : 'value !== null && window.document',
-      "Event"     : 'value !== null && value.type !== undefined',
-
-      "Class"     : 'value !== null && value.$$type === "Class"',
-      "Mixin"     : 'value !== null && value.$$type === "Mixin"',
-      "Interface" : 'value !== null && value.$$type === "Interface"',
-      "Theme"     : 'value !== null && value.$$type === "Theme"',
-
-      "Color"     : 'typeof value === "string" && rwt.util.Colors.isValid(value)',
-      "Border"    : 'value !== null',
-      "Font"      : 'value !== null',
-      "Label"     : 'value !== null && typeof value === "string"'
-    },
-
-    /**
-     * Contains types from {@link #__checks} list which need to be disposed
-     *
-     * @internal
-     */
-    __dispose : {
-      "Object"    : true,
-      "Array"     : true,
-      "Map"       : true,
-      "Function"  : true,
-      "Date"      : true,
-      "Node"      : true,
-      "Element"   : true,
-      "Document"  : true,
-      "Window"    : true,
-      "Event"     : true,
-      "Class"     : true,
-      "Mixin"     : true,
-      "Interface" : true,
-      "Theme"     : true,
-      "Border"    : true,
-      "Font"      : true
-    },
-
-    /**
-     * Inherit value, used to override defaults etc. to force inheritance
-     * even if property value is not undefined (through multi-values)
-     *
-     * @internal
-     */
-    $$inherit : "inherit",
-
-    /**
-     * Used in build version for storage names
-     */
-    $$idcounter : 0,
-
-    /**
-     * Caching field names for each property created
-     *
-     * @internal
-     */
-    $$store : {
-      user    : {},
-      theme   : {},
-      inherit : {},
-      init    : {},
-      useinit : {}
-    },
-
-    /**
-     * Caching function names for each property created
-     *
-     * @internal
-     */
-    $$method : {
-      get     : {},
-      set     : {},
-      reset   : {},
-      init    : {},
-      refresh : {},
-      style   : {},
-      unstyle : {}
-    },
-
-    /**
-     * Supported keys for property defintions
-     *
-     * @internal
-     */
-    $$allowedKeys : {
-      name         : "string",   // String
-      dispose      : "boolean",  // Boolean
-      inheritable  : "boolean",  // Boolean
-      nullable     : "boolean",  // Boolean
-      themeable    : "boolean",  // Boolean
-      refine       : "boolean",  // Boolean
-      init         : null,       // var
-      apply        : "string",   // String
-      event        : "string",   // String
-      check        : null,       // Array, String, Function
-      transform    : "string",   // String
-      deferredInit : "boolean"   // Boolean
-    },
-
-    $$allowedGroupKeys : {
-      name        : "string",   // String
-      group       : "object",   // Array
-      mode        : "string",   // String
-      themeable   : "boolean"   // Boolean
-    },
-
-    /** Contains names of inheritable properties, filled by {@link rwt.qx.Class.define} */
-    $$inheritable : {},
-
-    /**
-     * Refreshes widget whose parent has changed (including the children)
-     *
-     * @type static
-     * @internal
-     * @param widget {rwt.widgets.base.Widget} the widget
-     * @return {void}
-     */
-    refresh : function( widget ) {
-      var parent = widget.getParent();
-
-      if( parent ) {
-        var clazz = widget.constructor;
-        var inherit = this.$$store.inherit;
-        var refresh = this.$$method.refresh;
-        var properties;
-        while( clazz ) {
-          properties = clazz.$$properties;
-          if( properties ) {
-            for( var name in this.$$inheritable ) {
-              // Whether the property is available in this class
-              // and whether it is inheritable in this class as well
-              if( properties[name] && widget[refresh[name]] ) {
-                widget[refresh[name]]( parent[inherit[name]] );
-              }
-            }
-          }
-          clazz = clazz.superclass;
-        }
-      }
-    },
-
-    /**
-     * Attach properties to class prototype
-     *
-     * @type static
-     * @internal
-     * @param clazz {Class} Class to attach properties to
-     * @return {void}
-     */
-    attach : function( clazz ) {
-      var properties = clazz.$$properties;
-      if( properties ) {
-        for( var name in properties ) {
-          this.attachMethods( clazz, name, properties[name] );
-        }
-      }
-      clazz.$$propertiesAttached = true;
-    },
-
-    /**
-     * Attach one property to class
-     *
-     * @type static
-     * @internal
-     * @param clazz {Class} Class to attach properties to
-     * @param name {String} Name of property
-     * @param config {Map} Configuration map of property
-     * @return {void}
-     */
-    attachMethods : function( clazz, name, config ) {
-      // Filter old properties
-      if( config._legacy || config._fast || config._cached ) {
-        return;
-      }
-
-      // Generate property method prefixes and postfixes
-      var prefix, postfix;
-
-      if( name.charAt(0) === "_" ) {
-        if( name.charAt(1) === "_" ) {
-          prefix = "__";
-          postfix = rwt.util.Strings.toFirstUp(name.substring(2));
-        } else {
-          prefix = "_";
-          postfix = rwt.util.Strings.toFirstUp(name.substring(1));
-        }
-      } else {
-        prefix = "";
-        postfix = rwt.util.Strings.toFirstUp(name);
-      }
-
-      // Attach methods
-      if( config.group ) {
-        this.__attachGroupMethods( clazz, config, prefix, postfix );
-      } else {
-        this.__attachPropertyMethods( clazz, config, prefix, postfix );
-      }
-    },
-
-    /**
-     * Attach group methods
-     *
-     * @type static
-     * @internal
-     * @param clazz {Class} Class to attach properties to
-     * @param config {Map} Property configuration
-     * @param prefix {String} Prefix of property e.g. "__" or "_" for private or protected properties
-     * @param postfix {String} Camelcase name of property e.g. name=width => postfix=Width
-     * @return {void}
-     */
-    __attachGroupMethods : function( clazz, config, prefix, postfix ) {
-      var members = clazz.prototype;
-      var name = config.name;
-      var themeable = config.themeable === true;
-
-      var setter = [];
-      var resetter = [];
-
-      if( themeable ) {
-        var styler = [];
-        var unstyler = [];
-      }
-
-      var argHandler = "var a=arguments[0] instanceof Array?arguments[0]:arguments;";
-
-      setter.push( argHandler );
-
-      if( themeable ) {
-        styler.push( argHandler );
-      }
-
-      if( config.mode == "shorthand" ) {
-        var shorthand = "a=rwt.util.Arrays.fromShortHand(rwt.util.Arrays.fromArguments(a));";
-        setter.push( shorthand );
-
-        if( themeable ) {
-          styler.push( shorthand );
-        }
-      }
-
-      for( var i=0, a=config.group, l=a.length; i<l; i++ ) {
-        if( rwt.util.Variant.isSet( "qx.debug", "on" ) ) {
-          if( !this.$$method.set[a[i]] || !this.$$method.reset[a[i]] ) {
-            throw new Error( "Cannot create property group '" + name + "' including non-existing property '" + a[i] + "'!" );
-          }
-        }
-
-        setter.push( "this.", this.$$method.set[a[i]], "(a[", i, "]);" );
-        resetter.push( "this.", this.$$method.reset[a[i]], "();" );
-
-        if( themeable ) {
-          if( rwt.util.Variant.isSet( "qx.debug", "on" ) ) {
-            if( !this.$$method.style[a[i]] ) {
-              throw new Error( "Cannot add the non themable property '" + a[i] + "' to the themable property group '"+ name +"'" );
-            }
-          }
-          styler.push("this.", this.$$method.style[a[i]], "(a[", i, "]);" );
-          unstyler.push("this.", this.$$method.unstyle[a[i]], "();" );
-        }
-      }
-
-      // Attach setter
-      this.$$method.set[name] = prefix + "set" + postfix;
-      members[this.$$method.set[name]] = new Function( setter.join( "" ) );
-
-      // Attach resetter
-      this.$$method.reset[name] = prefix + "reset" + postfix;
-      members[this.$$method.reset[name]] = new Function( resetter.join( "" ) );
-
-      if( themeable ) {
-        // Attach styler
-        this.$$method.style[name] = prefix + "style" + postfix;
-        members[this.$$method.style[name]] = new Function( styler.join( "" ) );
-
-        // Attach unstyler
-        this.$$method.unstyle[name] = prefix + "unstyle" + postfix;
-        members[this.$$method.unstyle[name]] = new Function( unstyler.join( "" ) );
-      }
-    },
-
-    /**
-     * Attach property methods
-     *
-     * @type static
-     * @internal
-     * @param clazz {Class} Class to attach properties to
-     * @param config {Map} Property configuration
-     * @param prefix {String} Prefix of property e.g. "__" or "_" for private or protected properties
-     * @param postfix {String} Camelcase name of property e.g. name=width => postfix=Width
-     * @return {void}
-     */
-    __attachPropertyMethods : function(clazz, config, prefix, postfix ) {
-      var members = clazz.prototype;
-      var name = config.name;
-
-      // Fill dispose value
-      if( config.dispose === undefined && typeof config.check === "string" ) {
-        config.dispose = this.__dispose[config.check] || rwt.qx.Class.isDefined( config.check );
-      }
-
-      var method = this.$$method;
-      var store = this.$$store;
-
-      store.user[name] = "__user$" + name;
-      store.theme[name] = "__theme$" + name;
-      store.init[name] = "__init$" + name;
-      store.inherit[name] = "__inherit$" + name;
-      store.useinit[name] = "__useinit$" + name;
-
-      method.get[name] = prefix + "get" + postfix;
-      members[method.get[name]] = function() {
-        return rwt.qx.Property.executeOptimizedGetter( this, clazz, name, "get" );
-      };
-
-      method.set[name] = prefix + "set" + postfix;
-      members[method.set[name]] = function( value ) {
-        return rwt.qx.Property.executeOptimizedSetter( this, clazz, name, "set", arguments );
-      };
-
-      method.reset[name] = prefix + "reset" + postfix;
-      members[method.reset[name]] = function() {
-        return rwt.qx.Property.executeOptimizedSetter( this, clazz, name, "reset" );
-      };
-
-      if( config.inheritable || config.apply || config.event || config.deferredInit ) {
-        method.init[name] = prefix + "init" + postfix;
-        members[method.init[name]] = function(value) {
-          return rwt.qx.Property.executeOptimizedSetter( this, clazz, name, "init", arguments );
-        };
-      }
-
-      if( config.inheritable ) {
-        method.refresh[name] = prefix + "refresh" + postfix;
-        members[method.refresh[name]] = function( value ) {
-          return rwt.qx.Property.executeOptimizedSetter( this, clazz, name, "refresh", arguments );
-        };
-      }
-
-      if( config.themeable ) {
-        method.style[name] = prefix + "style" + postfix;
-        members[method.style[name]] = function( value ) {
-          return rwt.qx.Property.executeOptimizedSetter( this, clazz, name, "style", arguments );
-        };
-
-        method.unstyle[name] = prefix + "unstyle" + postfix;
-        members[method.unstyle[name]] = function() {
-          return rwt.qx.Property.executeOptimizedSetter( this, clazz, name, "unstyle" );
-        };
-      }
-
-      if( config.check === "Boolean" ) {
-        members[prefix + "toggle" + postfix] = new Function("return this." + method.set[name] + "(!this." + method.get[name] + "())");
-        members[prefix + "is" + postfix] = new Function("return this." + method.get[name] + "()");
-      }
-    },
-
-    /** {Map} Internal data field for error messages used by {@link #error} */
-    __errors : {
-      0 : 'Could not change or apply init value after constructing phase!',
-      1 : 'Requires exactly one argument!',
-      2 : 'Undefined value is not allowed!',
-      3 : 'Does not allow any arguments!',
-      4 : 'Null value is not allowed!',
-      5 : 'Is invalid!'
-    },
-
-    /**
-     * Error method used by the property system to report errors.
-     *
-     * @type static
-     * @internal
-     * @param obj {rwt.qx.Object} Any qooxdoo object
-     * @param id {Integer} Numeric error identifier
-     * @param property {String} Name of the property
-     * @param variant {String} Name of the method variant e.g. "set", "reset", ...
-     * @param value {var} Incoming value
-     */
-    error : function(obj, id, property, variant, value ) {
-      var classname = obj.constructor.classname;
-      var msg = "Error in property " + property + " of class " + classname + " in method " + this.$$method[variant][property] + " with incoming value '" + value + "': ";
-
-      // Additional object error before throwing exception because gecko
-      // often has issues to throw the error correctly in the debug console otherwise
-
-      throw new Error( msg + ( this.__errors[id] || "Unknown reason: " + id ) );
-    },
-
-    /**
-     * Compiles a string builder object to a function, executes the function and
-     * returns the return value.
-     *
-     * @type static
-     * @internal
-     * @param instance {Object} Instance which have called the original method
-     * @param members {Object} Prototype members map where the new function should be stored
-     * @param name {String} Name of the property
-     * @param variant {String} Function variant e.g. get, set, reset, ...
-     * @param code {Array} Array which contains the code
-     * @param args {arguments} Incoming arguments of wrapper method
-     * @return {var} Return value of the generated function
-     */
-    __unwrapFunctionFromCode : function(instance, members, name, variant, code, args ) {
-      var store = this.$$method[variant][name];
-
-      // Output generate code
-      if( rwt.util.Variant.isSet( "qx.debug", "on" ) ) {
-
-        // Overriding temporary wrapper
-        try{
-          members[store] = new Function( "value", code.join( "" ) );
-          // eval("members[store] = function " + instance.classname.replace(/\./g, "_") + "$" + store + "(value) { " + code.join("") + "}");
-        } catch( ex ) {
-          throw new Error( "Malformed generated code to unwrap method: " + this.$$method[variant][name] + "\n" + code.join( "" ) );
-        }
-      }
-      else {
-        members[store] = new Function("value", code.join(""));
-        // eval("members[store] = function " + instance.classname.replace(/\./g, "_") + "$" + store + "(value) { " + code.join("") + "}");
-      }
-
-      // Executing new function
-      if( args === undefined ) {
-        return instance[store]();
-      } else if( rwt.util.Variant.isSet( "qx.debug", "on" ) ) {
-        return instance[store].apply( instance, args );
-      } else {
-        return instance[store]( args[0] );
-      }
-    },
-
-    /**
-     * Generates the optimized getter
-     * Supported variants: get
-     *
-     * @type static
-     * @internal
-     * @param instance {Object} the instance which calls the method
-     * @param clazz {Class} the class which originally defined the property
-     * @param name {String} name of the property
-     * @param variant {String} Method variant.
-     * @return {var} Execute return value of apply generated function, generally the incoming value
-     */
-    executeOptimizedGetter : function( instance, clazz, name, variant ) {
-      var config = clazz.$$properties[name];
-      var members = clazz.prototype;
-      var code = [];
-
-      if( config.inheritable ) {
-        code.push( 'if(this.', this.$$store.inherit[name], '!==undefined)' );
-        code.push( 'return this.', this.$$store.inherit[name], ';' );
-        code.push( 'else ' );
-      }
-
-      code.push( 'if(this.', this.$$store.user[name], '!==undefined)' );
-      code.push( 'return this.', this.$$store.user[name], ';' );
-
-      if( config.themeable ) {
-        code.push( 'else if(this.', this.$$store.theme[name], '!==undefined)' );
-        code.push( 'return this.', this.$$store.theme[name], ';' );
-      }
-
-      if( config.deferredInit && config.init === undefined ) {
-        code.push( 'else if(this.', this.$$store.init[name], '!==undefined)' );
-        code.push( 'return this.', this.$$store.init[name], ';' );
-      }
-
-      code.push( 'else ' );
-
-      if( config.init !== undefined ) {
-        code.push( 'return this.', this.$$store.init[name], ';' );
-      } else if( config.inheritable || config.nullable ) {
-        code.push( 'return null;' );
-      } else {
-        code.push( 'throw new Error("Property ', name, ' of an instance of ', clazz.classname, ' is not (yet) ready!");' );
-      }
-
-      return this.__unwrapFunctionFromCode( instance, members, name, variant, code );
-    },
-
-    /**
-     * Generates the optimized setter
-     * Supported variants: set, reset, init, refresh, style, unstyle
-     *
-     * @type static
-     * @internal
-     * @param instance {Object} the instance which calls the method
-     * @param clazz {Class} the class which originally defined the property
-     * @param name {String} name of the property
-     * @param variant {String} Method variant.
-     * @param args {arguments} Incoming arguments of wrapper method
-     * @return {var} Execute return value of apply generated function, generally the incoming value
-     */
-    executeOptimizedSetter : function( instance, clazz, name, variant, args ) {
-      var config = clazz.$$properties[name];
-      var members = clazz.prototype;
-      var code = [];
-
-      var incomingValue =    variant === "set"
-                          || variant === "style"
-                          || ( variant === "init" && config.init === undefined );
-      var resetValue = variant === "reset" || variant === "unstyle";
-      var hasCallback = config.apply || config.event || config.inheritable;
-      if( variant === "style" || variant === "unstyle" ) {
-        var store = this.$$store.theme[name];
-      } else if( variant === "init" ) {
-        var store = this.$$store.init[name];
-      } else {
-        var store = this.$$store.user[name];
-      }
-
-      // [1] INTEGRATE ERROR HELPER METHOD
-
-      // [2] PRE CONDITIONS
-
-      if( rwt.util.Variant.isSet( "qx.debug", "on" ) ) {
-        code.push( 'var prop=rwt.qx.Property;' );
-        if( variant === "init" ) {
-          code.push( 'if(this.$$initialized)prop.error(this,0,"' + name + '","' + variant + '",value);' );
-        }
-
-        if( variant === "refresh" ) {
-          // do nothing
-          // refresh() is internal => no arguments test
-          // also note that refresh() supports "undefined" values
-        }
-        else if( incomingValue ) {
-          // Check argument length
-          code.push( 'if(arguments.length!==1)prop.error(this,1,"' + name + '","' + variant + '",value);' );
-
-          // Undefined check
-          code.push( 'if(value===undefined)prop.error(this,2,"' + name + '","' + variant + '",value);' );
-        }
-        else {
-          // Check argument length
-          code.push( 'if(arguments.length!==0)prop.error(this,3,"' + name + '","' + variant + '",value);' );
-        }
-      }
-      else {
-        if( !config.nullable || config.check || config.inheritable ) {
-          code.push( 'var prop=rwt.qx.Property;' );
-        }
-
-        // Undefined check
-        // TODO [rh] unused: changed as in patch to http://bugzilla.qooxdoo.org/show_bug.cgi?id=599
-        if( rwt.util.Variant.isSet( "qx.debug", "on" ) && variant === "set" ) {
-          code.push( 'if(value===undefined)prop.error(this,2,"' + name + '","' + variant + '",value);' );
-        }
-      }
-
-      // [3] PREPROCESSING INCOMING VALUE
-
-      if( incomingValue ) {
-        // Call user-provided transform method, if one is provided.  Transform
-        // method should either throw an error or return the new value.
-        if( config.transform ) {
-          code.push( 'value=this.', config.transform, '(value);' );
-        }
-      }
-
-      // [4] COMPARING (LOCAL) NEW AND OLD VALUE
-
-      // Old/new comparision
-      if( hasCallback ) {
-        if( incomingValue ) {
-          code.push( 'if(this.', store, '===value)return value;' );
-        } else if( resetValue ) {
-          code.push( 'if(this.', store, '===undefined)return;' );
-        }
-      }
-
-      // [5] CHECKING VALUE
-
-      if( config.inheritable ) {
-        code.push( 'var inherit=prop.$$inherit;' );
-      }
-
-      // Generate checks only in debug mode
-
-      // TODO [rh] unused: changed as in patch to http://bugzilla.qooxdoo.org/show_bug.cgi?id=599
-      if( incomingValue && rwt.util.Variant.isSet( "qx.debug", "on" ) ) {
-        // Null check
-        if( !config.nullable ) {
-          code.push( 'if(value===null)prop.error(this,4,"'+name+'","'+variant+'",value);' );
-        }
-
-        // Processing check definition
-        if( config.check !== undefined ) {
-          // Accept "null"
-          if( config.nullable ) {
-            code.push( 'if(value!==null)' );
-          }
-
-          // Inheritable properties always accept "inherit" as value
-          if( config.inheritable ) {
-            code.push( 'if(value!==inherit)' );
-          }
-
-          code.push( 'if(' );
-
-          if( this.__checks[config.check] !== undefined ) {
-            code.push( '!(', this.__checks[config.check], ')' );
-          }
-          else if( rwt.qx.Class.isDefined( config.check ) ) {
-            code.push( '!(value instanceof ', config.check, ')' );
-          }
-          else if( typeof config.check === "function" ) {
-            code.push( '!', clazz.classname, '.$$properties.', name );
-            code.push( '.check.call(this, value)' );
-          }
-          else if( typeof config.check === "string" ) {
-            code.push( '!(', config.check, ')' );
-          }
-          else if( config.check instanceof Array ) {
-            // reconfigure for faster access trough map usage
-            config.checkMap = rwt.util.Objects.fromArray(config.check);
-
-            code.push(clazz.classname, '.$$properties.', name);
-            code.push( '.checkMap[value]===undefined' );
-          }
-          else {
-            throw new Error( "Could not add check to property " + name + " of class " + clazz.classname );
-          }
-
-          code.push( ')prop.error(this,5,"'+name+'","'+variant+'",value);' );
-        }
-      }
-
-      if( !hasCallback ) {
-        if( variant === "set" ) {
-          code.push( 'this.', this.$$store.user[name], '=value;' );
-        }
-        else if( variant === "reset" ) {
-          code.push( 'if(this.', this.$$store.user[name], '!==undefined)' );
-          code.push( 'delete this.', this.$$store.user[name], ';' );
-        }
-        // Store incoming value
-        else if( variant === "style" ) {
-          code.push( 'this.', this.$$store.theme[name], '=value;' );
-        }
-        else if( variant === "unstyle" ) {
-          code.push( 'if(this.', this.$$store.theme[name], '!==undefined)' );
-          code.push( 'delete this.', this.$$store.theme[name], ';' );
-        }
-        else if( variant === "init" && incomingValue ) {
-          code.push( 'this.', this.$$store.init[name], '=value;' );
-        }
-      }
-      else {
-        if( config.inheritable ) {
-          code.push( 'var computed, old=this.', this.$$store.inherit[name], ';' );
-        }
-        else {
-          code.push( 'var computed, old;' );
-        }
-
-        // OLD = USER VALUE
-
-        code.push( 'if(this.', this.$$store.user[name], '!==undefined){' );
-
-        if( variant === "set" ) {
-          if( !config.inheritable ) {
-            // Remember old value
-            code.push( 'old=this.', this.$$store.user[name], ';' );
-          }
-
-          // Replace it with new value
-          code.push( 'computed=this.', this.$$store.user[name], '=value;' );
-        }
-        else if( variant === "reset" ) {
-          if( !config.inheritable ) {
-            // Remember old value
-            code.push( 'old=this.', this.$$store.user[name], ';' );
-          }
-
-          // Delete field
-          code.push( 'delete this.', this.$$store.user[name], ';' );
-
-          // Complex compution of new value
-          code.push( 'if(this.', this.$$store.theme[name], '!==undefined)' );
-          code.push( 'computed=this.', this.$$store.theme[name], ';' );
-          code.push( 'else if(this.', this.$$store.init[name], '!==undefined){' );
-          code.push( 'computed=this.', this.$$store.init[name], ';' );
-          code.push( 'this.', this.$$store.useinit[name], '=true;' );
-          code.push( '}' );
-        }
-        else {
-          if( config.inheritable ) {
-            // Use user value where it has higher priority
-            code.push( 'computed=this.', this.$$store.user[name], ';' );
-          }
-          else {
-            // Use user value where it has higher priority
-            code.push( 'old=computed=this.', this.$$store.user[name], ';' );
-          }
-
-          // Store incoming value
-          if( variant === "style" ) {
-            code.push( 'this.', this.$$store.theme[name], '=value;' );
-          }
-          else if( variant === "unstyle" ) {
-            code.push( 'delete this.', this.$$store.theme[name], ';' );
-          }
-          else if( variant === "init" && incomingValue ) {
-            code.push( 'this.', this.$$store.init[name], '=value;' );
-          }
-        }
-
-        code.push( '}' );
-
-        // OLD = THEMED VALUE
-
-        if( config.themeable ) {
-          code.push( 'else if(this.', this.$$store.theme[name], '!==undefined){' );
-
-          if( !config.inheritable ) {
-            code.push( 'old=this.', this.$$store.theme[name], ';' );
-          }
-
-          if( variant === "set" ) {
-            code.push( 'computed=this.', this.$$store.user[name], '=value;' );
-          }
-
-          // reset() is impossible, because the user has higher priority than
-          // the themed value, so the themed value has no chance to ever get used,
-          // when there is a user value, too.
-
-          else if( variant === "style" ) {
-            code.push( 'computed=this.', this.$$store.theme[name], '=value;' );
-          }
-          else if( variant === "unstyle" ) {
-            // Delete entry
-            code.push( 'delete this.', this.$$store.theme[name], ';' );
-
-            // Fallback to init value
-            code.push( 'if(this.', this.$$store.init[name], '!==undefined){' );
-            code.push( 'computed=this.', this.$$store.init[name], ';' );
-            code.push( 'this.', this.$$store.useinit[name], '=true;' );
-            code.push( '}' );
-          }
-          else if( variant === "init" ) {
-            if( incomingValue ) {
-              code.push( 'this.', this.$$store.init[name], '=value;' );
-            }
-
-            code.push( 'computed=this.', this.$$store.theme[name], ';' );
-          }
-          else if( variant === "refresh" ) {
-            code.push( 'computed=this.', this.$$store.theme[name], ';' );
-          }
-
-          code.push( '}' );
-        }
-
-        // OLD = INIT VALUE
-
-        code.push( 'else if(this.', this.$$store.useinit[name], '){' );
-
-        if( !config.inheritable ) {
-          code.push( 'old=this.', this.$$store.init[name], ';' );
-        }
-
-        if( variant === "init" ) {
-          if( incomingValue ) {
-            code.push( 'computed=this.', this.$$store.init[name], '=value;' );
-          } else {
-            code.push( 'computed=this.', this.$$store.init[name], ';' );
-          }
-
-          // useinit flag is already initialized
-        }
-
-        // reset() and unstyle() are impossible, because the user and themed values have a
-        // higher priority than the init value, so the themed value has no chance to ever get used,
-        // when there is a user or themed value, too.
-
-        else if( variant === "set" || variant === "style" || variant === "refresh" ) {
-          code.push( 'delete this.', this.$$store.useinit[name], ';' );
-
-          if( variant === "set" ) {
-            code.push( 'computed=this.', this.$$store.user[name], '=value;' );
-          } else if( variant === "style" ) {
-            code.push( 'computed=this.', this.$$store.theme[name], '=value;' );
-          } else if( variant === "refresh" ) {
-            code.push( 'computed=this.', this.$$store.init[name], ';' );
-          }
-        }
-
-        code.push( '}' );
-
-        // OLD = NONE
-
-        // reset() and unstyle() are impossible because otherwise there
-        // is already an old value
-
-        if( variant === "set" || variant === "style" || variant === "init" ) {
-          code.push( 'else{' );
-
-          if( variant === "set" ) {
-            code.push( 'computed=this.', this.$$store.user[name], '=value;' );
-          } else if( variant === "style" ) {
-            code.push( 'computed=this.', this.$$store.theme[name], '=value;' );
-          } else if(  variant === "init" ) {
-            if( incomingValue ) {
-              code.push( 'computed=this.', this.$$store.init[name], '=value;' );
-            } else {
-              code.push( 'computed=this.', this.$$store.init[name], ';' );
-            }
-            code.push( 'this.', this.$$store.useinit[name], '=true;' );
-          }
-          // refresh() will work with the undefined value, later
-          code.push( '}' );
-        }
-      }
-
-      if( config.inheritable ) {
-        code.push( 'if(computed===undefined||computed===inherit){' );
-
-          if( variant === "refresh" ) {
-            code.push( 'computed=value;' );
-          } else {
-            code.push( 'var pa=this.getParent();if(pa)computed=pa.', this.$$store.inherit[name], ';' );
-          }
-
-          // Fallback to init value if inheritance was unsuccessful
-          code.push( 'if((computed===undefined||computed===inherit)&&' );
-          code.push( 'this.', this.$$store.init[name], '!==undefined&&' );
-          code.push( 'this.', this.$$store.init[name], '!==inherit){' );
-          code.push( 'computed=this.', this.$$store.init[name], ';' );
-          code.push( 'this.', this.$$store.useinit[name], '=true;' );
-          code.push( '}else{' );
-          code.push( 'delete this.', this.$$store.useinit[name], ';}' );
-
-        code.push( '}' );
-
-        // Compare old/new computed value
-        code.push( 'if(old===computed)return value;' );
-
-        // Note: At this point computed can be "inherit" or "undefined".
-
-        // Normalize "inherit" to undefined and delete inherited value
-        code.push( 'if(computed===inherit){' );
-        code.push( 'computed=undefined;delete this.', this.$$store.inherit[name], ';' );
-        code.push( '}' );
-
-        // Only delete inherited value
-        code.push( 'else if(computed===undefined)' );
-        code.push( 'delete this.', this.$$store.inherit[name], ';' );
-
-        // Store inherited value
-        code.push( 'else this.', this.$$store.inherit[name], '=computed;' );
-
-        // Protect against normalization
-        code.push( 'var backup=computed;' );
-
-        // After storage finally normalize computed and old value
-        code.push( 'if(computed===undefined)computed=null;' );
-        code.push( 'if(old===undefined)old=null;' );
-      }
-      else if( hasCallback ) {
-        // Properties which are not inheritable have no possiblity to get
-        // undefined at this position. (Hint: set() and style() only allow non undefined values)
-        if( variant !== "set" && variant !== "style" ) {
-          code.push( 'if(computed===undefined)computed=null;' );
-        }
-
-        // Compare old/new computed value
-        code.push( 'if(old===computed)return value;' );
-
-        // Normalize old value
-        code.push( 'if(old===undefined)old=null;' );
-      }
-
-      // [12] NOTIFYING DEPENDEND OBJECTS
-
-      if( hasCallback ) {
-        // Execute user configured setter
-        if( config.apply ) {
-          code.push( 'this.', config.apply, '(computed, old);' );
-        }
-
-        // Fire event
-        if( config.event ) {
-          code.push( 'this.createDispatchChangeEvent("', config.event, '", computed, old);' );
-        }
-
-        // Refresh children
-        // Require the parent/children interface
-        if( config.inheritable && members.getChildren ) {
-          code.push( 'var a=this.getChildren();if(a)for(var i=0,l=a.length;i<l;i++){' );
-          code.push( 'if(a[i].', this.$$method.refresh[name], ')a[i].', this.$$method.refresh[name], '(backup);' );
-          code.push( '}' );
-        }
-      }
-
-      // [13] RETURNING WITH ORIGINAL INCOMING VALUE
-
-      // Return value
-      if( incomingValue ) {
-        code.push( 'return value;' );
-      }
-
-      return this.__unwrapFunctionFromCode( instance, members, name, variant, code, args );
-    }
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * String helper functions
- *
- * The native JavaScript String is not modified by this class. However,
- * there are modifications to the native String in {@link qx.lang.Core} for
- * browsers that do not support certain features.
- *
- * The additions implemented here may be added directly to native String by
- * a setting in {@link qx.lang.Prototypes}. This feature is not enabled by
- * default.
- *
- * The string/array generics introduced in JavaScript 1.6 are supported by
- * {@link qx.lang.Generics}.
- */
-rwt.qx.Class.define("rwt.util.Strings",
-{
-  statics :
-  {
-
-    /**
-     * removes white space from the left and the right side of a string
-     *
-     * @type static
-     * @param str {String} the string to trim
-     * @return {String} TODOC
-     */
-    trim : function(str) {
-      return str.replace(/^\s+|\s+$/g, "");
-    },
-
-    /**
-     * Pad a string up to a given length. By default, padding characters are added to the
-     * left of the string.
-     *
-     * @type static
-     * @param str {String} the string to pad
-     * @param length {Integer} the final length of the string
-     * @param ch {String} character used to fill up the string
-     * @param addRight {Boolean} true to add the padding characters to the right of the string
-     * @return {String} paddded string
-     */
-    pad : function(str, length, ch, addRight)
-    {
-      if (typeof ch === "undefined") {
-        ch = "0";
-      }
-
-      var temp = "";
-
-      for (var i=str.length; i<length; i++) {
-        temp += ch;
-      }
-
-      if( addRight === true ){
-        return str + temp;
-      } else {
-        return temp + str;
-      }
-    },
-
-    /**
-     * Convert the first character of the string to upper case.
-     *
-     * @type static
-     * @param str {String} the string
-     * @return {String} the string with a upper case first character
-     */
-    toFirstUp : function(str) {
-      return str.charAt(0).toUpperCase() + str.substr(1);
-    },
-
-    /**
-     * Check whether the string contains a given substring
-     *
-     * @type static
-     * @param str {String} the string
-     * @param substring {String} substring to search for
-     * @return {Boolean} whether the string contains the substring
-     */
-    contains : function(str, substring) {
-      return str.indexOf(substring) != -1;
-    },
-
-
-    /**
-     * Print a list of arguments using a format string
-     * In the format string occurences of %n are replaced by the n'th element of the args list.
-     * Example:
-     * <pre class='javascript'>rwt.util.Strings.format("Hello %1, my name is %2", ["Egon", "Franz"]) == "Hello Egon, my name is Franz"</pre>
-     *
-     * @type static
-     * @param pattern {String} format string
-     * @param args {Array} array of arguments to insert into the format string
-     * @return {String} TODOC
-     */
-    format : function(pattern, args)
-    {
-      var str = pattern;
-
-      for (var i=0; i<args.length; i++) {
-        str = str.replace(new RegExp("%" + (i + 1), "g"), args[i]);
-      }
-
-      return str;
-    }
-
-
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/*global console: false */
-
-/**
- * The qooxdoo root class. All other classes are direct or indirect subclasses of this one.
- *
- * This class contains methods for:
- *
- * * object management (creation and destruction)
- * * generic setter support
- * * user friendly OO interfaces like {@link #self} or {@link #base}
- */
-rwt.qx.Class.define("rwt.qx.Object", {
-  extend : Object,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-
-  construct : function()
-  {
-    this._hashCode = rwt.qx.Object.__availableHashCode++;
-
-    if (this._autoDispose)
-    {
-      // try to get a re-usable key
-      this.__dbKey=rwt.qx.Object.__freeAvailableDbKeys.pop();
-
-      if (!this.__dbKey) {
-        // no re-usable key found ==> append to registry
-        this.__dbKey = rwt.qx.Object.__db.length;
-        rwt.qx.Object.__db.push(this);
-      } else {
-        // re-use key
-        rwt.qx.Object.__db[this.__dbKey] = this;
-      }
-    }
-  },
-
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics :
-  {
-    /** TODOC */
-    __availableHashCode : 0,
-
-    /** TODOC */
-    __freeAvailableDbKeys : [],
-
-
-    /** TODOC */
-    __db : [],
-
-
-    /** TODOC */
-    __disposeAll : false,
-
-
-    /** Internal type */
-    $$type : "Object",
-
-
-    /**
-     * Returns an unique identifier for the given object. If such an identifier
-     * does not yet exist, create it.
-     *
-     * @type static
-     * @param obj {Object} the Object to get the hashcode for
-     * @return {Integer} unique identifier for the given object
-     */
-    toHashCode : function(obj)
-    {
-      if (obj._hashCode != null) {
-        return obj._hashCode;
-      }
-
-      return obj._hashCode = this.__availableHashCode++;
-    },
-
-
-    /**
-     * Returns the database created, but not yet disposed elements.
-     * Please be sure to not modify the given array!
-     *
-     * @type static
-     * @internal
-     * @return {Array} The database
-     */
-    getDb : function() {
-      return this.__db;
-    },
-
-
-    /**
-     * Destructor. This method is called by qooxdoo on object destruction.
-     *
-     * Any class that holds resources like links to DOM nodes must override
-     * this method and free these resources.
-     *
-     * @type static
-     * @param unload {Boolean?false} Whether the dispose is fired through the page unload event
-     * @return {void}
-     */
-    dispose : function(unload)
-    {
-      if (this.__disposed) {
-        return;
-      }
-
-      this.__disposed = true;
-      this.__unload = unload || false;
-
-      // var vStart = (new Date).valueOf();
-      var vObject, vObjectDb = this.__db;
-
-      for (var i=vObjectDb.length - 1; i>=0; i--)
-      {
-        vObject = vObjectDb[i];
-
-        if (vObject && vObject.__disposed === false) {
-          vObject.dispose();
-        }
-      }
-    },
-
-
-    /**
-     * Returns whether a global dispose is currently taking place.
-     *
-     * @type static
-     * @return {Boolean} whether a global dispose is taking place.
-     */
-    inGlobalDispose : function() {
-      return this.__disposed || false;
-    },
-
-
-    /**
-     * Returns whether a global unload (page unload) is currently taking place.
-     *
-     * @type static
-     * @return {Boolean} whether a global unload is taking place.
-     */
-    isPageUnload : function() {
-      return this.__unload || false;
-    }
-  },
-
-
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /** If the object should automatically be disposed on application unload */
-    _autoDispose : true,
-
-    /**
-     * Store user defined data inside the object.
-     *
-     * @type member
-     * @param key {String} the key
-     * @param value {Object} the value of the user data
-     * @return {void}
-     */
-    setUserData : function(key, value)
-    {
-      if (!this.__userData) {
-        this.__userData = {};
-      }
-
-      this.__userData[key] = value;
-    },
-
-
-    /**
-     * Load user defined data from the object
-     *
-     * @type member
-     * @param key {String} the key
-     * @return {Object} the user data
-     */
-    getUserData : function(key)
-    {
-      if (!this.__userData) {
-        return null;
-      }
-      var data = this.__userData[key];
-      return data === undefined ? null : data;
-    },
-
-    /*
-    ---------------------------------------------------------------------------
-      BASICS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Return unique hash code of object
-     *
-     * @type member
-     * @return {Integer} unique hash code of the object
-     */
-    toHashCode : function() {
-      return this._hashCode;
-    },
-
-
-    /**
-     * Returns a string represantation of the qooxdoo object.
-     *
-     * @type member
-     * @return {String} string representation of the object
-     */
-    toString : function()
-    {
-      if (this.classname) {
-        return "[object " + this.classname + "]";
-      }
-
-      return "[object Object]";
-    },
-
-
-    /**
-     * Call the same method of the super class.
-     *
-     * @type member
-     * @param args {arguments} the arguments variable of the calling method
-     * @param varags {var} variable number of arguments passed to the overwritten function
-     * @return {var} the return value of the method of the base class.
-     */
-    base : function(args, varags)
-    {
-      if (arguments.length === 1) {
-        return args.callee.base.call(this);
-      } else {
-        return args.callee.base.apply(this, Array.prototype.slice.call(arguments, 1));
-      }
-    },
-
-
-    /**
-     * Returns the static class (to access static members of this class)
-     *
-     * @type member
-     * @param args {arguments} the arguments variable of the calling method
-     * @return {var} the return value of the method of the base class.
-     */
-    self : function(args) {
-      return args.callee.self;
-    },
-
-
-    /**
-     * Returns the key of the object used in the objects DB
-     * received by {@link #getDb()}.
-     *
-     * @type member
-     * @internal
-     * @return {Integer} The key in the db for the current object.
-     */
-    getDbKey: function() {
-      return this.__dbKey;
-    },
-
-
-    /*
-    ---------------------------------------------------------------------------
-      COMMON SETTER/GETTER/RESETTER SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Sets multiple properties at once by using a property list or
-     * sets one property and its value by the first and second argument.
-     *
-     * @type member
-     * @param data {Map | String} a map of property values. The key is the name of the property.
-     * @param value {var?} the value, only used when <code>data</code> is a string.
-     * @return {Object} this instance.
-     * @throws an Exception if a property defined does not exist
-     */
-    set : function(data, value)
-    {
-      var setter = rwt.qx.Property.$$method.set;
-
-      if (typeof data === "string")
-      {
-        return this[setter[data]](value);
-      }
-      else
-      {
-        for (var prop in data)
-        {
-          this[setter[prop]](data[prop]);
-        }
-
-        return this;
-      }
-    },
-
-
-    /**
-     * Returns the value of the given property.
-     *
-     * @type member
-     * @param prop {String} Name of the property.
-     * @return {var} The value of the value
-     * @throws an Exception if a property defined does not exist
-     */
-    get : function(prop)
-    {
-      var getter = rwt.qx.Property.$$method.get;
-      return this[getter[prop]]();
-    },
-
-
-    /**
-     * Resets the value of the given property.
-     *
-     * @type member
-     * @param prop {String} Name of the property.
-     * @throws an Exception if a property defined does not exist
-     */
-    reset : function(prop)
-    {
-      var resetter = rwt.qx.Property.$$method.reset;
-      this[resetter[prop]]();
-    },
-
-
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      DISPOSER
-    ---------------------------------------------------------------------------
-    */
-
-    /** TODOC */
-    __disposed : false,
-
-
-    /**
-     * Returns true if the object is disposed.
-     *
-     * @type member
-     * @return {Boolean} whether the object has been disposed
-     */
-    getDisposed : function() {
-      return this.__disposed;
-    },
-
-
-    /**
-     * Returns true if the object is disposed.
-     *
-     * @type member
-     * @return {Boolean} whether the object has been disposed
-     */
-    isDisposed : function() {
-      return this.__disposed;
-    },
-
-
-    /**
-     * Dispose this object
-     *
-     * @type member
-     * @return {void}
-     */
-    dispose : function()
-    {
-      // Check first
-      if (this.__disposed) {
-        return;
-      }
-
-      // Mark as disposed (directly, not at end, to omit recursions)
-      this.__disposed = true;
-
-      // Deconstructor support for classes
-      var clazz = this.constructor;
-      var mixins;
-
-      while (clazz.superclass)
-      {
-        // Processing this class...
-        if (clazz.$$destructor) {
-          clazz.$$destructor.call(this);
-        }
-
-        // Destructor support for mixins
-        if (clazz.$$includes)
-        {
-          mixins = clazz.$$flatIncludes;
-
-          for (var i=0, l=mixins.length; i<l; i++)
-          {
-            if (mixins[i].$$destructor) {
-              mixins[i].$$destructor.call(this);
-            }
-          }
-        }
-
-        // Jump up to next super class
-        clazz = clazz.superclass;
-      }
-
-    },
-
-    // Prevent old custom widgets using logging from crashing:
-    debug : rwt.util.Variant.select( "qx.debug", {
-      "on" : function( msg ) {
-        if( window.console && typeof console.log === "function" ) {
-          console.log( msg );
-        }
-      },
-      "default" : function( msg ) {
-      }
-    } ),
-
-    info : function( msg ) {
-      this.debug( "INFO: " + msg );
-    },
-
-    warn : function( msg ) {
-      this.debug( "WARN: " + msg );
-    },
-
-    error : function( msg ) {
-      this.debug( "ERROR: " + msg );
-    },
-
-    printStackTrace : rwt.util.Variant.select( "qx.debug", {
-      "on" : function() {
-        if( console && typeof console.trace === "function" ) {
-          this.debug( "Current stack trace:" );
-          console.trace();
-        }
-      },
-      "default" : function() {
-      }
-    } ),
-
-    /*
-    ---------------------------------------------------------------------------
-      DISPOSER UTILITIES
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Disconnects given fields from instance.
-     *
-     * @type member
-     * @param varargs {arguments} fields to dispose
-     */
-    _disposeFields : function(varargs)
-    {
-      var name;
-
-      for (var i=0, l=arguments.length; i<l; i++)
-      {
-        var name = arguments[i];
-
-        if (this[name] == null) {
-          continue;
-        }
-
-        if (!this.hasOwnProperty(name))
-        {
-          continue;
-        }
-
-        this[name] = null;
-      }
-    },
-
-
-    /**
-     * Disconnects and disposes given objects from instance.
-     * Only works with rwt.qx.Object based objects e.g. Widgets.
-     *
-     * @type member
-     * @param varargs {arguments} fields to dispose
-     */
-    _disposeObjects : function(varargs)
-    {
-      var name;
-
-      for (var i=0, l=arguments.length; i<l; i++)
-      {
-        var name = arguments[i];
-
-        if (this[name] == null) {
-          continue;
-        }
-
-        if (!this.hasOwnProperty(name))
-        {
-          continue;
-        }
-
-        if (!this[name].dispose) {
-          throw new Error(this.classname + "." + name + " is not a qooxdoo object. Use _disposeFields instead of _disposeObjects.");
-        }
-
-        this[name].dispose();
-        this[name] = null;
-      }
-    },
-
-
-    /**
-     * Disconnects and disposes given objects (deeply) from instance.
-     * Works with arrays, maps and qooxdoo objects.
-     *
-     * @type member
-     * @param name {String} field name to dispose
-     * @param deep {Number} how deep to following sub objects. Deep=0 means
-     *   just the object and all its keys. Deep=1 also dispose deletes the
-     *   objects object content.
-     */
-    _disposeObjectDeep : function(name, deep)
-    {
-      var name;
-
-      if (this[name] == null) {
-        return;
-      }
-
-      if (!this.hasOwnProperty(name))
-      {
-        return;
-      }
-
-      this.__disposeObjectsDeepRecurser(this[name], deep || 0);
-      this[name] = null;
-    },
-
-
-    /**
-     * Helper method for _disposeObjectDeep. Do the recursive work.
-     *
-     * @type member
-     * @param obj {Object} object to dispose
-     * @param deep {Number} how deep to following sub objects. Deep=0 means
-     *   just the object and all its keys. Deep=1 also dispose deletes the
-     *   objects object content.
-     */
-    __disposeObjectsDeepRecurser : function(obj, deep)
-    {
-      // qooxdoo
-      if (obj instanceof rwt.qx.Object)
-      {
-        obj.dispose();
-      }
-
-      // Array
-      else if (obj instanceof Array)
-      {
-        for (var i=0, l=obj.length; i<l; i++)
-        {
-          var entry = obj[i];
-
-          if (entry == null) {
-            continue;
-          }
-
-          if (typeof entry == "object")
-          {
-            if (deep > 0)
-            {
-              this.__disposeObjectsDeepRecurser(entry, deep-1);
-            }
-            obj[i] = null;
-          }
-          else if (typeof entry == "function")
-          {
-            obj[i] = null;
-          }
-        }
-      }
-
-      // Map
-      else if (obj instanceof Object)
-      {
-        for (var key in obj)
-        {
-          if (obj[key] == null || !obj.hasOwnProperty(key)) {
-            continue;
-          }
-
-          var entry = obj[key];
-
-          if (typeof entry == "object")
-          {
-            if (deep > 0)
-            {
-              this.__disposeObjectsDeepRecurser(entry, deep-1);
-            }
-            obj[key] = null;
-          }
-          else if (typeof entry == "function")
-          {
-            obj[key] = null;
-          }
-        }
-      }
-    }
-  },
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function()
-  {
-    // Cleanup properties
-    var clazz = this.constructor;
-    var properties;
-    var store = rwt.qx.Property.$$store;
-    var storeUser = store.user;
-    var storeTheme = store.theme;
-    var storeInherit = store.inherit;
-    var storeUseinit = store.useinit;
-    var storeInit = store.init;
-
-    while(clazz)
-    {
-      properties = clazz.$$properties;
-      if (properties)
-      {
-        for (var name in properties)
-        {
-          if (properties[name].dispose) {
-            this[storeUser[name]] = this[storeTheme[name]] = this[storeInherit[name]] = this[storeUseinit[name]] = this[storeInit[name]] = undefined;
-          }
-        }
-      }
-
-      clazz = clazz.superclass;
-    }
-    this._disposeFields("__userData");
-
-    // Delete Entry from Object DB
-    if (this.__dbKey != null)
-    {
-      if (rwt.qx.Object.__disposeAll) {
-        rwt.qx.Object.__db[this.__dbKey] = null;
-      } else {
-        delete rwt.qx.Object.__db[this.__dbKey];
-      }
-      rwt.qx.Object.__freeAvailableDbKeys.push(this.__dbKey);
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Collection of helper methods operating on functions.
- */
-rwt.qx.Class.define("rwt.util.Functions",
-{
-  statics :
-  {
-
-    /**
-     * Simply return true.
-     *
-     * @type static
-     * @return {Boolean} Always returns true.
-     */
-    returnTrue : function() {
-      return true;
-    },
-
-
-    /**
-     * Simply return false.
-     *
-     * @type static
-     * @return {Boolean} Always returns false.
-     */
-    returnFalse : function() {
-      return false;
-    },
-
-
-    /**
-     * Simply return null.
-     *
-     * @type static
-     * @return {var} Always returns null.
-     */
-    returnNull : function() {
-      return null;
-    },
-
-
-    /**
-     * Return "this".
-     *
-     * @type static
-     * @return {Object} Always returns "this".
-     */
-    returnThis : function() {
-      return this;
-    },
-
-
-    /**
-     * Simply return 0.
-     *
-     * @type static
-     * @return {Number} Always returns 0.
-     */
-    returnZero : function() {
-      return 0;
-    },
-
-
-    /**
-     * Simply return a negative index (-1).
-     *
-     * @type static
-     * @return {Number} Always returns -1.
-     */
-    returnNegativeIndex : function() {
-      return -1;
-    },
-
-
-    /**
-     * Bind a function to an object. Each time the bound method is called the
-     * 'this' variable is guaranteed to be 'self'.
-     *
-     * @param fcn {Function} function to bind
-     * @param self {Object} object, which shuold act as the 'this' variable inside the bound function
-     * @param varargs {arguments} multiple arguments which should be static arguments for the given function
-     * @return {Function} the bound function
-     */
-    bind: function( fcn, self, varargs ) {
-      // Create wrapper method
-      if( arguments.length > 2 ) {
-        // Static arguments
-        var args = Array.prototype.slice.call( arguments, 2 );
-        var wrap = function() {
-          fcn.context = self;
-          var ret = fcn.apply(self, args.concat(rwt.util.Arrays.fromArguments(arguments)));
-          fcn.context = null;
-          return ret;
-        };
-      } else {
-        var wrap = function() {
-          fcn.context = self;
-          var ret = fcn.apply(self, arguments);
-          fcn.context = null;
-          return ret;
-        };
-      }
-
-      // Correcting self
-      wrap.self = fcn.self ? fcn.self.constructor : self;
-
-      // Return wrapper method
-      return wrap;
-    },
-
-
-    /**
-     * Bind a function which works as an event listener to an object. Each time
-     * the bound method is called the 'this' variable is guaranteed to be 'self'.
-     *
-     * @param fcn {Function} function to bind
-     * @param self {Object} object, which shuold act as the 'this' variable inside the bound function
-     * @return {Function} the bound function
-     */
-    bindEvent: function( fcn, self ) {
-      // Create wrapper method
-      var wrap = function( event ) {
-        fcn.context = self;
-        var ret = fcn.call( self, event || window.event );
-        fcn.context = null;
-        return ret;
-      };
-
-      // Correcting self
-      wrap.self = fcn.self ? fcn.self.constructor : self;
-
-      // Return wrapper method
-      return wrap;
-    },
-
-
-    /**
-     * Extract the caller of a function from the arguments variable.
-     * This will not work in Opera.
-     *
-     * @param args {arguments} The local arguments variable
-     * @return {Function|undefined} A reference to the calling function or "undefined" if caller is not supported.
-     */
-    getCaller: function(args) {
-      return args.caller ? args.caller.callee : args.callee.caller;
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- *
- * This class contains code based on the following work:
- *
- *  * Yahoo! UI Library, version 2.2.0
- *    http://developer.yahoo.com/yui
- *    Copyright (c) 2007, Yahoo! Inc.
- *    License: BSD, http://developer.yahoo.com/yui/license.txt
- ******************************************************************************/
-
-/**
- * Includes library functions to work with the client's viewport (window).
- */
-rwt.qx.Class.define("rwt.html.Viewport",
-{
-  statics :
-  {
-    /**
-     * Returns the current width of the viewport (excluding a eventually visible scrollbar).
-     *
-     * <code>clientWidth</code> is the inner width of an element in pixels. It includes padding
-     * but not the vertical scrollbar (if present, if rendered), border or margin.
-     *
-     * The property <code>innerWidth</code> is not useable as defined by the standard as it includes the scrollbars
-     * which is not the indented behavior of this method. We can decrement the size by the scrollbar
-     * size but there are easier possibilities to work around this.
-     *
-     * Safari 2 and 3 beta (3.0.2) do not correctly implement <code>clientWidth</code> on documentElement/body,
-     * but <code>innerWidth</code> works there. Interesting is that webkit do not correctly implement
-     * <code>innerWidth</code>, too. It calculates the size excluding the scroll bars and this
-     * differs from the behavior of all other browsers - but this is exactly what we want to have
-     * in this case.
-     *
-     * Opera as of 9.21 only works well using <code>body.clientWidth</code>.
-     *
-     * Verified to correctly work with:
-     *
-     * * Mozilla Firefox 2.0.0.4
-     * * Opera 9.2.1
-     * * Safari 3.0 beta (3.0.2)
-     * * Internet Explorer 7.0
-     *
-     * @type static
-     * @signature function(win)
-     * @param win {Window?window} The window to query
-     * @return {Integer} The width of the viewable area of the page (excludes scrollbars).
-     */
-    getWidth : rwt.util.Variant.select("qx.client",
-    {
-      "opera" : function(win) {
-        return (win||window).document.body.clientWidth;
-      },
-
-      "webkit" : function(win) {
-        return (win||window).innerWidth;
-      },
-
-      "default" : function(win)
-      {
-        var doc = (win||window).document;
-        return doc.compatMode === "CSS1Compat" ? doc.documentElement.clientWidth : doc.body.clientWidth;
-      }
-    }),
-
-
-    /**
-     * Returns the current height of the viewport (excluding a eventually visible scrollbar).
-     *
-     * <code>clientHeight</code> is the inner height of an element in pixels. It includes padding
-     * but not the vertical scrollbar (if present, if rendered), border or margin.
-     *
-     * The property <code>innerHeight</code> is not useable as defined by the standard as it includes the scrollbars
-     * which is not the indented behavior of this method. We can decrement the size by the scrollbar
-     * size but there are easier possibilities to work around this.
-     *
-     * Safari 2 and 3 beta (3.0.2) do not correctly implement <code>clientHeight</code> on documentElement/body,
-     * but <code>innerHeight</code> works there. Interesting is that webkit do not correctly implement
-     * <code>innerHeight</code>, too. It calculates the size excluding the scroll bars and this
-     * differs from the behavior of all other browsers - but this is exactly what we want to have
-     * in this case.
-     *
-     * Opera as of 9.21 only works well using <code>body.clientHeight</code>.
-     *
-     * Verified to correctly work with:
-     *
-     * * Mozilla Firefox 2.0.0.4
-     * * Opera 9.2.1
-     * * Safari 3.0 beta (3.0.2)
-     * * Internet Explorer 7.0
-     *
-     * @type static
-     * @signature function(win)
-     * @param win {Window?window} The window to query
-     * @return {Integer} The Height of the viewable area of the page (excludes scrollbars).
-     */
-    getHeight : rwt.util.Variant.select("qx.client",
-    {
-      "opera" : function(win) {
-        return (win||window).document.body.clientHeight;
-      },
-
-      "webkit" : function(win) {
-        return (win||window).innerHeight;
-      },
-
-      "default" : function(win)
-      {
-        var doc = (win||window).document;
-        return doc.compatMode === "CSS1Compat" ? doc.documentElement.clientHeight : doc.body.clientHeight;
-      }
-    }),
-
-
-    /**
-     * Returns the scroll position of the viewport
-     *
-     * All clients except MSHTML supports the non-standard property <code>pageXOffset</code>.
-     * As this is easier to evaluate we prefer this property over <code>scrollLeft</code>.
-     *
-     * For MSHTML the access method differs between standard and quirks mode;
-     * as this can differ from document to document this test must be made on
-     * each query.
-     *
-     * Verified to correctly work with:
-     *
-     * * Mozilla Firefox 2.0.0.4
-     * * Opera 9.2.1
-     * * Safari 3.0 beta (3.0.2)
-     * * Internet Explorer 7.0
-     *
-     * @type static
-     * @signature function(win)
-     * @param win {Window?window} The window to query
-     * @return {Integer} Scroll position from left edge, always a positive integer
-     */
-    getScrollLeft : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function(win)
-      {
-        var doc = (win||window).document;
-        return doc.documentElement.scrollLeft || doc.body.scrollLeft;
-      },
-
-      "default" : function(win) {
-        return (win||window).pageXOffset;
-      }
-    }),
-
-
-    /**
-     * Returns the scroll position of the viewport
-     *
-     * All clients except MSHTML supports the non-standard property <code>pageYOffset</code>.
-     * As this is easier to evaluate we prefer this property over <code>scrollTop</code>.
-     *
-     * For MSHTML the access method differs between standard and quirks mode;
-     * as this can differ from document to document this test must be made on
-     * each query.
-     *
-     * Verified to correctly work with:
-     *
-     * * Mozilla Firefox 2.0.0.4
-     * * Opera 9.2.1
-     * * Safari 3.0 beta (3.0.2)
-     * * Internet Explorer 7.0
-     *
-     * @type static
-     * @signature function(win)
-     * @param win {Window?window} The window to query
-     * @return {Integer} Scroll position from left edge, always a positive integer
-     */
-    getScrollTop : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function(win)
-      {
-        var doc = (win||window).document;
-        return doc.documentElement.scrollTop || doc.body.scrollTop;
-      },
-
-      "default" : function(win) {
-        return (win||window).pageYOffset;
-      }
-    })
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * This is the main constructor for all objects that need to be connected to rwt.event.Event objects.
- *
- * In objects created with this constructor, you find functions to addEventListener or
- * removeEventListener to or from the created object. Each event to connect to has a type in
- * form of an identification string. This type could be the name of a regular dom event like "click" or
- * something self-defined like "ready".
- */
-rwt.qx.Class.define("rwt.qx.Target",
-{
-  extend : rwt.qx.Object,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function() {
-    this.base(arguments);
-  },
-
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /**
-     * Add event listener to an object.
-     *
-     * @type member
-     * @param type {String} name of the event type
-     * @param func {Function} event callback function
-     * @param obj {Object ? window} reference to the 'this' variable inside the callback
-     * @return {void}
-     * @throws TODOC
-     */
-    addEventListener : function(type, func, obj)
-    {
-      if (this.getDisposed()) {
-        return;
-      }
-
-      // If this is the first event of given type, we need to create a subobject
-      // that contains all the actions that will be assigned to this type
-      if (this.__listeners === undefined) {
-        this.__listeners = {};
-      }
-
-      if (this.__listeners[type] === undefined) {
-        this.__listeners[type] = {};
-      }
-
-      // Create a special key string to allow identification of each bound action
-      var key = "event" + rwt.qx.Object.toHashCode(func) + (obj ? "$" + rwt.qx.Object.toHashCode(obj) : "");
-
-      // Finally set up the listeners object
-      this.__listeners[type][key] =
-      {
-        handler : func,
-        object  : obj
-      };
-    },
-
-
-    /**
-     * Remove event listener from object
-     *
-     * @type member
-     * @param type {String} name of the event type
-     * @param func {Function} event callback function
-     * @param obj {Object ? window} reference to the 'this' variable inside the callback
-     * @return {void}
-     * @throws TODOC
-     */
-    removeEventListener : function(type, func, obj)
-    {
-      if (this.getDisposed()) {
-        return;
-      }
-
-      var listeners = this.__listeners;
-
-      if (!listeners || listeners[type] === undefined) {
-        return;
-      }
-
-      if (typeof func !== "function") {
-        throw new Error("rwt.qx.Target: removeEventListener(" + type + "): '" + func + "' is not a function!");
-      }
-
-      // Create a special key string to allow identification of each bound action
-      var key = "event" + rwt.qx.Object.toHashCode(func) + (obj ? "$" + rwt.qx.Object.toHashCode(obj) : "");
-
-      // Delete object entry for this action
-      delete this.__listeners[type][key];
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      EVENT CONNECTION UTILITIES
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Check if there are one or more listeners for an event type.
-     *
-     * @type member
-     * @param type {String} name of the event type
-     * @return {var} TODOC
-     */
-    hasEventListeners : function(type) {
-      return this.__listeners && this.__listeners[type] !== undefined && !rwt.util.Objects.isEmpty(this.__listeners[type]);
-    },
-
-
-    /**
-     * Checks if the event is registered. If so it creates an event object and dispatches it.
-     *
-     * @type member
-     * @param type {String} name of the event type
-     * @return {void}
-     */
-    createDispatchEvent : function(type)
-    {
-      if (this.hasEventListeners(type)) {
-        this.dispatchEvent(new rwt.event.Event(type), true);
-      }
-    },
-
-
-    /**
-     * Checks if the event is registered. If so it creates an event object and dispatches it.
-     *
-     * @type member
-     * @param type {String} name of the event type
-     * @param data {Object} user defined data attached to the event object
-     * @return {void}
-     */
-    createDispatchDataEvent : function(type, data)
-    {
-      if (this.hasEventListeners(type)) {
-        this.dispatchEvent(new rwt.event.DataEvent(type, data), true);
-      }
-    },
-
-
-    /**
-     * Checks if the event is registered. If so it creates an event object and dispatches it.
-     *
-     * @type member
-     * @param type {String} name of the event type
-     * @param value {Object} property value attached to the event object
-     * @param old {Object} old property value attached to the event object
-     * @return {void}
-     */
-    createDispatchChangeEvent : function(type, value, old)
-    {
-      if (this.hasEventListeners(type)) {
-        this.dispatchEvent(new rwt.event.ChangeEvent(type, value, old), true);
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      EVENT DISPATCH
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Dispatch an event
-     *
-     * @type member
-     * @param evt {rwt.event.Event} event to dispatch
-     * @param dispose {Boolean} whether the event object should be disposed after all event handlers run.
-     * @return {Boolean} whether the event default was prevented or not. Returns true, when the event was NOT prevented.
-     */
-    dispatchEvent : function( evt, dispose ) {
-      // Ignore event if eventTarget is disposed
-      if( this.getDisposed() ) {
-        return;
-      }
-      if( evt.getTarget() == null ) {
-        evt.setTarget(this);
-      }
-      if( evt.getCurrentTarget() == null ) {
-        evt.setCurrentTarget(this);
-      }
-      // Dispatch Event
-      this._dispatchEvent( evt, dispose );
-      // Read default prevented
-      var defaultPrevented = evt.getDefaultPrevented();
-      // enable dispose for event?
-      if( dispose ) {
-        evt.dispose();
-      }
-      return !defaultPrevented;
-    },
-
-
-    dispatchSimpleEvent : function( type, data, bubbles ) {
-      var listeners = this.__listeners;
-      var propagate = bubbles === true;
-      var result = true;
-      if( listeners ) {
-        var typeListeners = listeners[ type ];
-        if( typeListeners ) {
-          var func;
-          var obj;
-          for( var hashCode in typeListeners ) {
-            // Shortcuts for handler and object
-            func = typeListeners[ hashCode ].handler;
-            obj = typeListeners[ hashCode ].object || this;
-            result = func.call( obj, data ) && result !== false;
-            if( result === false ) {
-              propagate = false;
-            }
-          }
-        }
-      }
-      if( propagate && typeof( this.getParent ) === "function" ) {
-        var parent = this.getParent();
-        if( parent && !parent.getDisposed() && parent.getEnabled() ) {
-          parent.dispatchSimpleEvent( type, data, bubbles );
-        }
-      }
-      return result !== false;
-    },
-
-    /**
-     * Internal event dispatch method
-     *
-     * @type member
-     * @param evt {rwt.event.Event} event to dispatch
-     * @return {void}
-     */
-    _dispatchEvent : function(evt)
-    {
-      var listeners = this.__listeners;
-
-      if( listeners && this._allowDispatch( evt ) ) {
-        // Setup current target
-        evt.setCurrentTarget(this);
-
-        // Shortcut for listener data
-        var typeListeners = listeners[evt.getType()];
-
-        if (typeListeners)
-        {
-          var func, obj;
-
-          // Handle all events for the specified type
-          for (var vHashCode in typeListeners)
-          {
-            // Shortcuts for handler and object
-            func = typeListeners[vHashCode].handler;
-            obj = typeListeners[vHashCode].object || this;
-
-            // Call object function
-            func.call(obj, evt);
-          }
-        }
-      }
-
-      // Bubble event to parents
-      // TODO: Move this to Parent or Widget?
-      if (evt.getBubbles() && !evt.getPropagationStopped() && typeof(this.getParent) == "function")
-      {
-        var parent = this.getParent();
-
-        if (parent && !parent.getDisposed() ) {
-          parent._dispatchEvent(evt);
-        }
-      }
-    },
-
-    _allowDispatch : function( event ) {
-      var result = true;
-      if( this.getEnabled && event instanceof rwt.event.DomEvent ) {
-        result = this.getEnabled();
-      }
-      return result;
-    }
-
-  },
-
-
-  /*
-  *****************************************************************************
-     DESTRUCT
-  *****************************************************************************
-  */
-
-  destruct : function()
-  {
-    this._disposeObjectDeep("__listeners", 2);
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * The qooxdoo core event object. Each event object for rwt.qx.Targets should extend this class.
- */
-rwt.qx.Class.define("rwt.event.Event",
-{
-  extend : rwt.qx.Object,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function(vType)
-  {
-    this.base(arguments);
-
-    this.setType(vType);
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    type :
-    {
-      _fast       : true,
-      setOnlyOnce : true
-    },
-
-    originalTarget :
-    {
-      _fast       : true,
-      setOnlyOnce : true
-    },
-
-    target :
-    {
-      _fast       : true,
-      setOnlyOnce : true
-    },
-
-    relatedTarget :
-    {
-      _fast       : true,
-      setOnlyOnce : true
-    },
-
-    currentTarget : { _fast : true },
-
-    bubbles :
-    {
-      _fast        : true,
-      defaultValue : false,
-      noCompute    : true
-    },
-
-    propagationStopped :
-    {
-      _fast        : true,
-      defaultValue : true,
-      noCompute    : true
-    },
-
-    defaultPrevented :
-    {
-      _fast        : true,
-      defaultValue : false,
-      noCompute    : true
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    _autoDispose : false,
-
-
-    /*
-    ---------------------------------------------------------------------------
-      SHORTCUTS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    preventDefault : function() {
-      this.setDefaultPrevented(true);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    stopPropagation : function() {
-      this.setPropagationStopped(true);
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function() {
-    this._disposeFields("_valueOriginalTarget", "_valueTarget", "_valueRelatedTarget", "_valueCurrentTarget");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/** Event object for data transfers. */
-rwt.qx.Class.define("rwt.event.DataEvent",
-{
-  extend : rwt.event.Event,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
- /**
-  * @param vType {String} the type name of the event
-  * @param vData {var} additional data which should be passed to the event listener
-  */
-  construct : function(vType, vData)
-  {
-    this.base(arguments, vType);
-
-    this.setData(vData);
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    propagationStopped :
-    {
-      _fast        : true,
-      defaultValue : false
-    },
-
-    data : { _fast : true }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function() {
-    this._disposeFields("_valueData");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/** Event object for property changes. */
-rwt.qx.Class.define("rwt.event.ChangeEvent",
-{
-  extend : rwt.event.Event,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
- /**
-  * @param type {String} the type name of the event
-  * @param value {var} additional value which should be passed to the event listener
-  * @param old {var} additional old value which should be passed to the event listener
-  */
-  construct : function(type, value, old)
-  {
-    this.base(arguments, type);
-
-    this.setValue(value);
-    this.setOldValue(old);
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    value : { _fast : true },
-    oldValue : { _fast : true }
-  },
-
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /**
-     * Returns the event data
-     *
-     * @deprecated use {@link #getValue} instead
-     */
-    getData : function() {
-      return this.getValue();
-    }
-  },
-
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function() {
-    this._disposeFields("_valueValue", "_valueOldValue");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Global timer support.
- *
- * This class can be used to periodically fire an event. This event can be
- * used to simulate e.g. a background task. The static method
- * {@link #once} is a special case. It will call a function deferred after a
- * given timeout.
- */
-rwt.qx.Class.define("rwt.client.Timer",
-{
-  extend : rwt.qx.Target,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  /**
-   * @param interval {Number} initial interval in milliseconds of the timer.
-   */
-  construct : function(interval)
-  {
-    this.base(arguments);
-
-    this.setEnabled(false);
-
-    if (interval != null) {
-      this.setInterval(interval);
-    }
-
-    this.__oninterval = rwt.util.Functions.bind(this._oninterval, this);
-
-    //Event instance to dispatch when interval fires
-    this.__event = new rwt.event.Event("interval");
-
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     EVENTS
-  *****************************************************************************
-  */
-
-  events :
-  {
-    /** This event if fired each time the interval time has elapsed */
-    "interval" : "rwt.event.Event"
-  },
-
-
-
-
-
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics :
-  {
-    /**
-     * Start a function after a given timeout.
-     *
-     * @type static
-     * @param func {Function} Function to call
-     * @param obj {Object} context (this), the function is called with
-     * @param timeout {Number} Number of milliseconds to wait before the function is called.
-     */
-    once : function(func, obj, timeout)
-    {
-      // Create time instance
-      var timer = new rwt.client.Timer(timeout);
-
-      // Add event listener to interval
-      timer.addEventListener("interval", function(e)
-      {
-        timer.dispose();
-        func.call(obj, e);
-
-        obj = null;
-      },
-      obj);
-
-      // Directly start timer
-      timer.start();
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    /**
-     * With the enabled property the Timer can be started and suspended.
-     * Setting it to "true" is equivalent to {@link #start}, setting it
-     * to "false" is equivalent to {@link #stop}.
-     */
-    enabled :
-    {
-      init : true,
-      check : "Boolean",
-      apply : "_applyEnabled"
-    },
-
-    /**
-     * Time in milliseconds between two callback calls.
-     * This property can be set to modify the interval of
-     * a running timer.
-     */
-    interval :
-    {
-      check : "Integer",
-      init : 1000,
-      apply : "_applyInterval"
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    __intervalHandler : null,
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      APPLY ROUTINES
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Apply the interval of the timer.
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyInterval : function(value, old)
-    {
-      if (this.getEnabled()) {
-        this.restart();
-      }
-    },
-
-
-    /**
-     * Apply the enabled state of the timer.
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyEnabled : function(value, old)
-    {
-      if (old)
-      {
-        window.clearInterval(this.__intervalHandler);
-        this.__intervalHandler = null;
-      }
-      else if (value)
-      {
-        this.__intervalHandler = window.setInterval(this.__oninterval, this.getInterval());
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      USER-ACCESS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Start the timer
-     *
-     * @type member
-     */
-    start : function() {
-      this.setEnabled(true);
-    },
-
-
-    /**
-     * Start the timer with a given interval
-     *
-     * @type member
-     * @param interval {Integer} Time in milliseconds between two callback calls.
-     */
-    startWith : function(interval)
-    {
-      this.setInterval(interval);
-      this.start();
-    },
-
-
-    /**
-     * Stop the timer.
-     *
-     * @type member
-     */
-    stop : function() {
-      this.setEnabled(false);
-    },
-
-
-    /**
-     * Restart the timer.
-     * This makes it possible to change the interval of a running timer.
-     *
-     * @type member
-     */
-    restart : function()
-    {
-      this.stop();
-      this.start();
-    },
-
-
-    /**
-     * Restart the timer. with a given interval.
-     *
-     * @type member
-     * @param interval {Integer} Time in milliseconds between two callback calls.
-     */
-    restartWith : function(interval)
-    {
-      this.stop();
-      this.startWith(interval);
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      EVENT-MAPPER
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * timer callback
-     *
-     * @type member
-     */
-    _oninterval : function() {
-      try {
-        if (this.getEnabled() && this.hasEventListeners("interval")) {
-          this.dispatchEvent(this.__event, false);
-        }
-      } catch( ex ) {
-        rwt.runtime.ErrorHandler.processJavaScriptError( ex );
-      }
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function()
-  {
-    if (this.__intervalHandler) {
-      window.clearInterval(this.__intervalHandler);
-    }
-
-    this._disposeFields("__intervalHandler", "__oninterval", "__event");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * A Collection of utility functions to escape and unescape strings.
- */
-rwt.qx.Class.define( "rwt.html.Entity", {
-
-  statics : {
-
-    /** Mapping of HTML entity names to the corresponding char code */
-    TO_CHARCODE : {
-      "quot"     : 34, // " - double-quote
-      "amp"      : 38, // &
-      "lt"       : 60, // <
-      "gt"       : 62, // >
-
-      // http://www.w3.org/TR/REC-html40/sgml/entities.html
-      // ISO 8859-1 characters
-      "nbsp"     : 160, // no-break space
-      "iexcl"    : 161, // inverted exclamation mark
-      "cent"     : 162, // cent sign
-      "pound"    : 163, // pound sterling sign
-      "curren"   : 164, // general currency sign
-      "yen"      : 165, // yen sign
-      "brvbar"   : 166, // broken (vertical) bar
-      "sect"     : 167, // section sign
-      "uml"      : 168, // umlaut (dieresis)
-      "copy"     : 169, // copyright sign
-      "ordf"     : 170, // ordinal indicator, feminine
-      "laquo"    : 171, // angle quotation mark, left
-      "not"      : 172, // not sign
-      "shy"      : 173, // soft hyphen
-      "reg"      : 174, // registered sign
-      "macr"     : 175, // macron
-      "deg"      : 176, // degree sign
-      "plusmn"   : 177, // plus-or-minus sign
-      "sup2"     : 178, // superscript two
-      "sup3"     : 179, // superscript three
-      "acute"    : 180, // acute accent
-      "micro"    : 181, // micro sign
-      "para"     : 182, // pilcrow (paragraph sign)
-      "middot"   : 183, // middle dot
-      "cedil"    : 184, // cedilla
-      "sup1"     : 185, // superscript one
-      "ordm"     : 186, // ordinal indicator, masculine
-      "raquo"    : 187, // angle quotation mark, right
-      "frac14"   : 188, // fraction one-quarter
-      "frac12"   : 189, // fraction one-half
-      "frac34"   : 190, // fraction three-quarters
-      "iquest"   : 191, // inverted question mark
-      "Agrave"   : 192, // capital A, grave accent
-      "Aacute"   : 193, // capital A, acute accent
-      "Acirc"    : 194, // capital A, circumflex accent
-      "Atilde"   : 195, // capital A, tilde
-      "Auml"     : 196, // capital A, dieresis or umlaut mark
-      "Aring"    : 197, // capital A, ring
-      "AElig"    : 198, // capital AE diphthong (ligature)
-      "Ccedil"   : 199, // capital C, cedilla
-      "Egrave"   : 200, // capital E, grave accent
-      "Eacute"   : 201, // capital E, acute accent
-      "Ecirc"    : 202, // capital E, circumflex accent
-      "Euml"     : 203, // capital E, dieresis or umlaut mark
-      "Igrave"   : 204, // capital I, grave accent
-      "Iacute"   : 205, // capital I, acute accent
-      "Icirc"    : 206, // capital I, circumflex accent
-      "Iuml"     : 207, // capital I, dieresis or umlaut mark
-      "ETH"      : 208, // capital Eth, Icelandic
-      "Ntilde"   : 209, // capital N, tilde
-      "Ograve"   : 210, // capital O, grave accent
-      "Oacute"   : 211, // capital O, acute accent
-      "Ocirc"    : 212, // capital O, circumflex accent
-      "Otilde"   : 213, // capital O, tilde
-      "Ouml"     : 214, // capital O, dieresis or umlaut mark
-      "times"    : 215, // multiply sign
-      "Oslash"   : 216, // capital O, slash
-      "Ugrave"   : 217, // capital U, grave accent
-      "Uacute"   : 218, // capital U, acute accent
-      "Ucirc"    : 219, // capital U, circumflex accent
-      "Uuml"     : 220, // capital U, dieresis or umlaut mark
-      "Yacute"   : 221, // capital Y, acute accent
-      "THORN"    : 222, // capital THORN, Icelandic
-      "szlig"    : 223, // small sharp s, German (sz ligature)
-      "agrave"   : 224, // small a, grave accent
-      "aacute"   : 225, // small a, acute accent
-      "acirc"    : 226, // small a, circumflex accent
-      "atilde"   : 227, // small a, tilde
-      "auml"     : 228, // small a, dieresis or umlaut mark
-      "aring"    : 229, // small a, ring
-      "aelig"    : 230, // small ae diphthong (ligature)
-      "ccedil"   : 231, // small c, cedilla
-      "egrave"   : 232, // small e, grave accent
-      "eacute"   : 233, // small e, acute accent
-      "ecirc"    : 234, // small e, circumflex accent
-      "euml"     : 235, // small e, dieresis or umlaut mark
-      "igrave"   : 236, // small i, grave accent
-      "iacute"   : 237, // small i, acute accent
-      "icirc"    : 238, // small i, circumflex accent
-      "iuml"     : 239, // small i, dieresis or umlaut mark
-      "eth"      : 240, // small eth, Icelandic
-      "ntilde"   : 241, // small n, tilde
-      "ograve"   : 242, // small o, grave accent
-      "oacute"   : 243, // small o, acute accent
-      "ocirc"    : 244, // small o, circumflex accent
-      "otilde"   : 245, // small o, tilde
-      "ouml"     : 246, // small o, dieresis or umlaut mark
-      "divide"   : 247, // divide sign
-      "oslash"   : 248, // small o, slash
-      "ugrave"   : 249, // small u, grave accent
-      "uacute"   : 250, // small u, acute accent
-      "ucirc"    : 251, // small u, circumflex accent
-      "uuml"     : 252, // small u, dieresis or umlaut mark
-      "yacute"   : 253, // small y, acute accent
-      "thorn"    : 254, // small thorn, Icelandic
-      "yuml"     : 255, // small y, dieresis or umlaut mark
-
-      // Latin Extended-B
-      "fnof"     : 402, // latin small f with hook = function= florin, U+0192 ISOtech
-
-      // Greek
-      "Alpha"    : 913, // greek capital letter alpha, U+0391
-      "Beta"     : 914, // greek capital letter beta, U+0392
-      "Gamma"    : 915, // greek capital letter gamma,U+0393 ISOgrk3
-      "Delta"    : 916, // greek capital letter delta,U+0394 ISOgrk3
-      "Epsilon"  : 917, // greek capital letter epsilon, U+0395
-      "Zeta"     : 918, // greek capital letter zeta, U+0396
-      "Eta"      : 919, // greek capital letter eta, U+0397
-      "Theta"    : 920, // greek capital letter theta,U+0398 ISOgrk3
-      "Iota"     : 921, // greek capital letter iota, U+0399
-      "Kappa"    : 922, // greek capital letter kappa, U+039A
-      "Lambda"   : 923, // greek capital letter lambda,U+039B ISOgrk3
-      "Mu"       : 924, // greek capital letter mu, U+039C
-      "Nu"       : 925, // greek capital letter nu, U+039D
-      "Xi"       : 926, // greek capital letter xi, U+039E ISOgrk3
-      "Omicron"  : 927, // greek capital letter omicron, U+039F
-      "Pi"       : 928, // greek capital letter pi, U+03A0 ISOgrk3
-      "Rho"      : 929, // greek capital letter rho, U+03A1
-
-      // there is no Sigmaf, and no U+03A2 character either
-      "Sigma"    : 931, // greek capital letter sigma,U+03A3 ISOgrk3
-      "Tau"      : 932, // greek capital letter tau, U+03A4
-      "Upsilon"  : 933, // greek capital letter upsilon,U+03A5 ISOgrk3
-      "Phi"      : 934, // greek capital letter phi,U+03A6 ISOgrk3
-      "Chi"      : 935, // greek capital letter chi, U+03A7
-      "Psi"      : 936, // greek capital letter psi,U+03A8 ISOgrk3
-      "Omega"    : 937, // greek capital letter omega,U+03A9 ISOgrk3
-      "alpha"    : 945, // greek small letter alpha,U+03B1 ISOgrk3
-      "beta"     : 946, // greek small letter beta, U+03B2 ISOgrk3
-      "gamma"    : 947, // greek small letter gamma,U+03B3 ISOgrk3
-      "delta"    : 948, // greek small letter delta,U+03B4 ISOgrk3
-      "epsilon"  : 949, // greek small letter epsilon,U+03B5 ISOgrk3
-      "zeta"     : 950, // greek small letter zeta, U+03B6 ISOgrk3
-      "eta"      : 951, // greek small letter eta, U+03B7 ISOgrk3
-      "theta"    : 952, // greek small letter theta,U+03B8 ISOgrk3
-      "iota"     : 953, // greek small letter iota, U+03B9 ISOgrk3
-      "kappa"    : 954, // greek small letter kappa,U+03BA ISOgrk3
-      "lambda"   : 955, // greek small letter lambda,U+03BB ISOgrk3
-      "mu"       : 956, // greek small letter mu, U+03BC ISOgrk3
-      "nu"       : 957, // greek small letter nu, U+03BD ISOgrk3
-      "xi"       : 958, // greek small letter xi, U+03BE ISOgrk3
-      "omicron"  : 959, // greek small letter omicron, U+03BF NEW
-      "pi"       : 960, // greek small letter pi, U+03C0 ISOgrk3
-      "rho"      : 961, // greek small letter rho, U+03C1 ISOgrk3
-      "sigmaf"   : 962, // greek small letter final sigma,U+03C2 ISOgrk3
-      "sigma"    : 963, // greek small letter sigma,U+03C3 ISOgrk3
-      "tau"      : 964, // greek small letter tau, U+03C4 ISOgrk3
-      "upsilon"  : 965, // greek small letter upsilon,U+03C5 ISOgrk3
-      "phi"      : 966, // greek small letter phi, U+03C6 ISOgrk3
-      "chi"      : 967, // greek small letter chi, U+03C7 ISOgrk3
-      "psi"      : 968, // greek small letter psi, U+03C8 ISOgrk3
-      "omega"    : 969, // greek small letter omega,U+03C9 ISOgrk3
-      "thetasym" : 977, // greek small letter theta symbol,U+03D1 NEW
-      "upsih"    : 978, // greek upsilon with hook symbol,U+03D2 NEW
-      "piv"      : 982, // greek pi symbol, U+03D6 ISOgrk3
-
-      // General Punctuation
-      "bull"     : 8226, // bullet = black small circle,U+2022 ISOpub
-
-      // bullet is NOT the same as bullet operator, U+2219
-      "hellip"   : 8230, // horizontal ellipsis = three dot leader,U+2026 ISOpub
-      "prime"    : 8242, // prime = minutes = feet, U+2032 ISOtech
-      "Prime"    : 8243, // double prime = seconds = inches,U+2033 ISOtech
-      "oline"    : 8254, // overline = spacing overscore,U+203E NEW
-      "frasl"    : 8260, // fraction slash, U+2044 NEW
-
-      // Letterlike Symbols
-      "weierp"   : 8472, // script capital P = power set= Weierstrass p, U+2118 ISOamso
-      "image"    : 8465, // blackletter capital I = imaginary part,U+2111 ISOamso
-      "real"     : 8476, // blackletter capital R = real part symbol,U+211C ISOamso
-      "trade"    : 8482, // trade mark sign, U+2122 ISOnum
-      "alefsym"  : 8501, // alef symbol = first transfinite cardinal,U+2135 NEW
-
-      // alef symbol is NOT the same as hebrew letter alef,U+05D0 although the same glyph could be used to depict both characters
-      // Arrows
-      "larr"     : 8592, // leftwards arrow, U+2190 ISOnum
-      "uarr"     : 8593, // upwards arrow, U+2191 ISOnum-->
-      "rarr"     : 8594, // rightwards arrow, U+2192 ISOnum
-      "darr"     : 8595, // downwards arrow, U+2193 ISOnum
-      "harr"     : 8596, // left right arrow, U+2194 ISOamsa
-      "crarr"    : 8629, // downwards arrow with corner leftwards= carriage return, U+21B5 NEW
-      "lArr"     : 8656, // leftwards double arrow, U+21D0 ISOtech
-
-      // ISO 10646 does not say that lArr is the same as the 'is implied by' arrowbut also does not have any other character for that function. So ? lArr canbe used for 'is implied by' as ISOtech suggests
-      "uArr"     : 8657, // upwards double arrow, U+21D1 ISOamsa
-      "rArr"     : 8658, // rightwards double arrow,U+21D2 ISOtech
-
-      // ISO 10646 does not say this is the 'implies' character but does not have another character with this function so ?rArr can be used for 'implies' as ISOtech suggests
-      "dArr"     : 8659, // downwards double arrow, U+21D3 ISOamsa
-      "hArr"     : 8660, // left right double arrow,U+21D4 ISOamsa
-
-      // Mathematical Operators
-      "forall"   : 8704, // for all, U+2200 ISOtech
-      "part"     : 8706, // partial differential, U+2202 ISOtech
-      "exist"    : 8707, // there exists, U+2203 ISOtech
-      "empty"    : 8709, // empty set = null set = diameter,U+2205 ISOamso
-      "nabla"    : 8711, // nabla = backward difference,U+2207 ISOtech
-      "isin"     : 8712, // element of, U+2208 ISOtech
-      "notin"    : 8713, // not an element of, U+2209 ISOtech
-      "ni"       : 8715, // contains as member, U+220B ISOtech
-
-      // should there be a more memorable name than 'ni'?
-      "prod"     : 8719, // n-ary product = product sign,U+220F ISOamsb
-
-      // prod is NOT the same character as U+03A0 'greek capital letter pi' though the same glyph might be used for both
-      "sum"      : 8721, // n-ary summation, U+2211 ISOamsb
-
-      // sum is NOT the same character as U+03A3 'greek capital letter sigma' though the same glyph might be used for both
-      "minus"    : 8722, // minus sign, U+2212 ISOtech
-      "lowast"   : 8727, // asterisk operator, U+2217 ISOtech
-      "radic"    : 8730, // square root = radical sign,U+221A ISOtech
-      "prop"     : 8733, // proportional to, U+221D ISOtech
-      "infin"    : 8734, // infinity, U+221E ISOtech
-      "ang"      : 8736, // angle, U+2220 ISOamso
-      "and"      : 8743, // logical and = wedge, U+2227 ISOtech
-      "or"       : 8744, // logical or = vee, U+2228 ISOtech
-      "cap"      : 8745, // intersection = cap, U+2229 ISOtech
-      "cup"      : 8746, // union = cup, U+222A ISOtech
-      "int"      : 8747, // integral, U+222B ISOtech
-      "there4"   : 8756, // therefore, U+2234 ISOtech
-      "sim"      : 8764, // tilde operator = varies with = similar to,U+223C ISOtech
-
-      // tilde operator is NOT the same character as the tilde, U+007E,although the same glyph might be used to represent both
-      "cong"     : 8773, // approximately equal to, U+2245 ISOtech
-      "asymp"    : 8776, // almost equal to = asymptotic to,U+2248 ISOamsr
-      "ne"       : 8800, // not equal to, U+2260 ISOtech
-      "equiv"    : 8801, // identical to, U+2261 ISOtech
-      "le"       : 8804, // less-than or equal to, U+2264 ISOtech
-      "ge"       : 8805, // greater-than or equal to,U+2265 ISOtech
-      "sub"      : 8834, // subset of, U+2282 ISOtech
-      "sup"      : 8835, // superset of, U+2283 ISOtech
-
-      // note that nsup, 'not a superset of, U+2283' is not covered by the Symbol font encoding and is not included. Should it be, for symmetry?It is in ISOamsn  --> <!ENTITY nsub": 8836,  //not a subset of, U+2284 ISOamsn
-      "sube"     : 8838, // subset of or equal to, U+2286 ISOtech
-      "supe"     : 8839, // superset of or equal to,U+2287 ISOtech
-      "oplus"    : 8853, // circled plus = direct sum,U+2295 ISOamsb
-      "otimes"   : 8855, // circled times = vector product,U+2297 ISOamsb
-      "perp"     : 8869, // up tack = orthogonal to = perpendicular,U+22A5 ISOtech
-      "sdot"     : 8901, // dot operator, U+22C5 ISOamsb
-
-      // dot operator is NOT the same character as U+00B7 middle dot
-      // Miscellaneous Technical
-      "lceil"    : 8968, // left ceiling = apl upstile,U+2308 ISOamsc
-      "rceil"    : 8969, // right ceiling, U+2309 ISOamsc
-      "lfloor"   : 8970, // left floor = apl downstile,U+230A ISOamsc
-      "rfloor"   : 8971, // right floor, U+230B ISOamsc
-      "lang"     : 9001, // left-pointing angle bracket = bra,U+2329 ISOtech
-
-      // lang is NOT the same character as U+003C 'less than' or U+2039 'single left-pointing angle quotation mark'
-      "rang"     : 9002, // right-pointing angle bracket = ket,U+232A ISOtech
-
-      // rang is NOT the same character as U+003E 'greater than' or U+203A 'single right-pointing angle quotation mark'
-      // Geometric Shapes
-      "loz"      : 9674, // lozenge, U+25CA ISOpub
-
-      // Miscellaneous Symbols
-      "spades"   : 9824, // black spade suit, U+2660 ISOpub
-
-      // black here seems to mean filled as opposed to hollow
-      "clubs"    : 9827, // black club suit = shamrock,U+2663 ISOpub
-      "hearts"   : 9829, // black heart suit = valentine,U+2665 ISOpub
-      "diams"    : 9830, // black diamond suit, U+2666 ISOpub
-
-      // Latin Extended-A
-      "OElig"    : 338, //  -- latin capital ligature OE,U+0152 ISOlat2
-      "oelig"    : 339, //  -- latin small ligature oe, U+0153 ISOlat2
-
-      // ligature is a misnomer, this is a separate character in some languages
-      "Scaron"   : 352, //  -- latin capital letter S with caron,U+0160 ISOlat2
-      "scaron"   : 353, //  -- latin small letter s with caron,U+0161 ISOlat2
-      "Yuml"     : 376, //  -- latin capital letter Y with diaeresis,U+0178 ISOlat2
-
-      // Spacing Modifier Letters
-      "circ"     : 710, //  -- modifier letter circumflex accent,U+02C6 ISOpub
-      "tilde"    : 732, // small tilde, U+02DC ISOdia
-
-      // General Punctuation
-      "ensp"     : 8194, // en space, U+2002 ISOpub
-      "emsp"     : 8195, // em space, U+2003 ISOpub
-      "thinsp"   : 8201, // thin space, U+2009 ISOpub
-      "zwnj"     : 8204, // zero width non-joiner,U+200C NEW RFC 2070
-      "zwj"      : 8205, // zero width joiner, U+200D NEW RFC 2070
-      "lrm"      : 8206, // left-to-right mark, U+200E NEW RFC 2070
-      "rlm"      : 8207, // right-to-left mark, U+200F NEW RFC 2070
-      "ndash"    : 8211, // en dash, U+2013 ISOpub
-      "mdash"    : 8212, // em dash, U+2014 ISOpub
-      "lsquo"    : 8216, // left single quotation mark,U+2018 ISOnum
-      "rsquo"    : 8217, // right single quotation mark,U+2019 ISOnum
-      "sbquo"    : 8218, // single low-9 quotation mark, U+201A NEW
-      "ldquo"    : 8220, // left double quotation mark,U+201C ISOnum
-      "rdquo"    : 8221, // right double quotation mark,U+201D ISOnum
-      "bdquo"    : 8222, // double low-9 quotation mark, U+201E NEW
-      "dagger"   : 8224, // dagger, U+2020 ISOpub
-      "Dagger"   : 8225, // double dagger, U+2021 ISOpub
-      "permil"   : 8240, // per mille sign, U+2030 ISOtech
-      "lsaquo"   : 8249, // single left-pointing angle quotation mark,U+2039 ISO proposed
-      // lsaquo is proposed but not yet ISO standardized
-      "rsaquo"   : 8250, // single right-pointing angle quotation mark,U+203A ISO proposed
-      // rsaquo is proposed but not yet ISO standardized
-      "euro"     : 8364 //  -- euro sign, U+20AC NEW
-    }
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define("rwt.html.EventRegistration",
-{
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics :
-  {
-    /**
-     * Assign a function to an event.
-     *
-     * @type static
-     * @param vElement {Element} DOM Element
-     * @param vType {String} Name of the event
-     * @param vFunction {Function} The pointer to the function to assign
-     * @return {void}
-     * @signature function(vElement, vType, vFunction)
-     */
-    addEventListener : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function(vElement, vType, vFunction) {
-        vElement.attachEvent("on" + vType, vFunction);
-      },
-
-      "default" : function(vElement, vType, vFunction) {
-        vElement.addEventListener(vType, vFunction, false);
-      }
-    }),
-
-
-    /**
-     * Unassign a function from an event.
-     *
-     * @type static
-     * @param vElement {Element} DOM Element
-     * @param vType {String} Name of the event
-     * @param vFunction {Function} The pointer to the function to assign
-     * @signature function(vElement, vType, vFunction)
-     */
-    removeEventListener : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function(vElement, vType, vFunction) {
-        vElement.detachEvent("on" + vType, vFunction);
-      },
-
-      "default" :  function(vElement, vType, vFunction) {
-        vElement.removeEventListener(vType, vFunction, false);
-      }
-    })
-  }
-});
-
-/*******************************************************************************
- *  Copyright: 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                        and EclipseSource
- *
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.event.EventHandlerUtil", {
-  type : "static",
-
-  statics : {
-    // TODO [tb] : integrate rwt.html.EventRegistration
-    _lastUpDownType : {},
-    _lastKeyCode : null,
-
-    cleanUp : function() {
-      delete this.__onKeyEvent;
-      delete this._lastUpDownType;
-      delete this._lastKeyCode;
-    },
-
-    applyBrowserFixes  : rwt.util.Variant.select( "qx.client", {
-      "gecko" : function() {
-        // Fix for bug 295475:
-        // Prevent url-dropping in FF as a whole (see bug 304651)
-        var doc = rwt.widgets.base.ClientDocument.getInstance();
-        doc.getElement().setAttribute( "ondrop", "event.preventDefault();" );
-        var docElement = document.documentElement;
-        // also see ErrorHandler.js#_enableTextSelection
-        this._ffMouseFixListener = function( event ) {
-          var tagName = null;
-          try{
-            tagName = event.originalTarget.tagName;
-          } catch( e ) {
-            // Firefox bug: On the very first mousedown, access to the events target
-            // is forbidden and causes an error.
-          }
-          // NOTE: See also Bug 321372
-          if( event.button === 0 && tagName != null && tagName != "INPUT" ) {
-            event.preventDefault();
-          }
-        };
-        rwt.html.EventRegistration.addEventListener( docElement,
-                                                    "mousedown",
-                                                    this._ffMouseFixListener );
-      },
-      "default" : function() { }
-    } ),
-
-    /////////////////////////
-    // GENERAL EVENT HANDLING
-
-    getDomEvent : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function( args ) {
-        return args.length > 0 ? args[ 0 ] : window.event;
-      },
-      "default" : function( args ) {
-        return args[ 0 ];
-      }
-    } ),
-
-    getDomTarget : rwt.util.Variant.select("qx.client", {
-      "mshtml" : function( vDomEvent ) {
-        return vDomEvent.target || vDomEvent.srcElement;
-      },
-      "webkit" : function( vDomEvent ) {
-        var vNode = vDomEvent.target || vDomEvent.srcElement;
-        // Safari takes text nodes as targets for events
-        if( vNode && ( vNode.nodeType == rwt.html.Nodes.TEXT ) ) {
-          vNode = vNode.parentNode;
-        }
-        return vNode;
-      },
-      "default" : function( vDomEvent ) {
-        return vDomEvent.target;
-      }
-    } ),
-
-    stopDomEvent : function( vDomEvent ) {
-      vDomEvent._prevented = true;
-      if( vDomEvent.preventDefault ) {
-        vDomEvent.preventDefault();
-      }
-      try {
-        // this allows us to prevent some key press events in IE and Firefox.
-        // See bug #1049
-        vDomEvent.keyCode = 0;
-      } catch( ex ) {
-        // do nothing
-      }
-      vDomEvent.returnValue = false;
-    },
-
-    wasStopped : function( domEvent ) {
-      return domEvent._prevented ? true : false;
-    },
-
-
-    blockUserDomEvents : function( element, value ) {
-      var eventUtil = rwt.html.EventRegistration;
-      if( value ) {
-        for( var i = 0; i < this._userEventTypes.length; i++ ) {
-          eventUtil.addEventListener( element, this._userEventTypes[ i ], this._domEventBlocker );
-        }
-      } else {
-        for( var i = 0; i < this._userEventTypes.length; i++ ) {
-          eventUtil.removeEventListener( element, this._userEventTypes[ i ], this._domEventBlocker );
-        }
-      }
-    },
-
-    _userEventTypes : [
-      "mouseover",
-      "mousemove",
-      "mouseout",
-      "mousedown",
-      "mouseup",
-      "click",
-      "dblclick",
-      "contextmenu",
-      ( rwt.client.Client.isGecko() ? "DOMMouseScroll" : "mousewheel" ),
-      "keydown",
-      "keypress",
-      "keyup"
-    ],
-
-    _domEventBlocker : function( event ) {
-      rwt.event.EventHandlerUtil.stopDomEvent( event );
-      event.cancelBubble = true; // MSIE
-      if( event.stopPropagation ) {
-        event.stopPropagation();
-      }
-    },
-
-    // BUG: http://xscroll.mozdev.org/
-    // If your Mozilla was built with an option `--enable-default-toolkit=gtk2',
-    // it can not return the correct event target for DOMMouseScroll.
-    getOriginalTargetObject : function( vNode ) {
-      // Events on the HTML element, when using absolute locations which
-      // are outside the HTML element. Opera does not seem to fire events
-      // on the HTML element.
-      if( vNode == document.documentElement ) {
-        vNode = document.body;
-      }
-      // Walk up the tree and search for an rwt.widgets.base.Widget
-      try {
-        while( vNode != null && vNode.rwtWidget == null )       {
-          vNode = vNode.parentNode;
-        }
-      } catch( vDomEvent ) {
-        vNode = null;
-      }
-      return vNode ? vNode.rwtWidget : null;
-    },
-
-    getOriginalTargetObjectFromEvent : function( vDomEvent, vWindow ) {
-      var vNode = this.getDomTarget( vDomEvent );
-      // Especially to fix key events.
-      // 'vWindow' is the window reference then
-      if( vWindow ) {
-        var vDocument = vWindow.document;
-        if(    vNode == vWindow
-            || vNode == vDocument
-            || vNode == vDocument.documentElement
-            || vNode == vDocument.body )
-        {
-          return vDocument.body.rwtWidget;
-        }
-      }
-      return this.getOriginalTargetObject( vNode );
-    },
-
-    getRelatedTargetObjectFromEvent : function( vDomEvent ) {
-      var EventHandlerUtil = rwt.event.EventHandlerUtil;
-      var target = vDomEvent.relatedTarget;
-      if( !target ) {
-        if( vDomEvent.type == "mouseover" ) {
-          target = vDomEvent.fromElement;
-        } else {
-          target = vDomEvent.toElement;
-        }
-      }
-      return EventHandlerUtil.getTargetObject( target );
-    },
-
-    getTargetObject : function( vNode, vObject, allowDisabled ) {
-      if( !vObject ) {
-        var vObject = this.getOriginalTargetObject( vNode );
-        if (!vObject) {
-          return null;
-        }
-      }
-      while( vObject ) {
-        if( !allowDisabled && !vObject.getEnabled() ) {
-          return null;
-        }
-        if( !vObject.getAnonymous() ) {
-          break;
-        }
-        vObject = vObject.getParent();
-      }
-      return vObject;
-    },
-
-    ///////////////
-    // KEY HANDLING
-
-    getKeyCode : rwt.util.Variant.select( "qx.client", {
-      "gecko" : function( event ) {
-        return event.keyCode;
-      },
-      "default" : function( event ) {
-        // the value in "keyCode" on "keypress" is actually the charcode:
-        var hasKeyCode = event.type !== "keypress" || event.keyCode === 13 || event.keyCode === 27;
-        return hasKeyCode ? event.keyCode : 0;
-      }
-    } ),
-
-    getCharCode : rwt.util.Variant.select( "qx.client", {
-      "default" : function( event ) {
-        var hasCharCode = event.type === "keypress" && event.keyCode !== 13 && event.keyCode !== 27;
-        return hasCharCode ? event.charCode : 0;
-      },
-      "mshtml|newmshtml|opera" : function( event ) {
-        var hasCharCode = event.type === "keypress" && event.keyCode !== 13 && event.keyCode !== 27;
-        return hasCharCode ? event.keyCode : 0;
-      }
-    } ),
-
-    _isFirstKeyDown : function( keyCode ) {
-      return this._lastUpDownType[ keyCode ] !== "keydown";
-    },
-
-    getEventPseudoTypes : rwt.util.Variant.select( "qx.client", {
-      "default" : function( event, keyCode, charCode ) {
-        var result;
-        if( event.type === "keydown" ) {
-          var printable = !this.isNonPrintableKeyCode( keyCode );
-          if( this._isFirstKeyDown( keyCode ) ) {
-            // add a "keypress" for non-printable keys:
-            result = printable ? [ "keydown" ] : [ "keydown", "keypress" ];
-          } else {
-            // convert non-printable "keydown" to "keypress", suppress other:
-            result = printable ? [] : [ "keypress" ];
-          }
-        } else {
-          result = [ event.type ];
-        }
-        return result;
-      },
-      "gecko" : function( event, keyCode, charCode ) {
-        var result;
-        if( event.type === "keydown" && this.isModifier( keyCode ) ) {
-          if( this._isFirstKeyDown( keyCode ) ) {
-            result = [ "keydown", "keypress" ];
-          } else {
-            result = [ "keypress" ];
-          }
-        } else {
-          if( event.type === "keydown" && !this._isFirstKeyDown( keyCode ) ) {
-            // suppress unwanted "keydown":
-            result = [];
-          } else {
-            result = [ event.type ];
-          }
-        }
-        return result;
-      }
-    } ),
-
-
-    mustRestoreKeyup  : function( keyCode, pseudoTypes  ) {
-      // For these keys it is assumed to be more likely that a keyup event was missed
-      // than the key being hold down while another key is pressed.
-      var result = [];
-      if( pseudoTypes[ 0 ] === "keydown" ) {
-        if( !this._isFirstKeyDown( 93 ) && keyCode !== 93 ) {
-          result.push( 93 );
-        }
-      }
-      return result;
-    },
-
-    mustRestoreKeypress  : rwt.util.Variant.select( "qx.client", {
-      "default" : function( event, pseudoTypes ) {
-        var result = false;
-        if( this.wasStopped( event ) ) {
-          result =    ( pseudoTypes.length === 1 && pseudoTypes[ 0 ] === "keydown" )
-                   || pseudoTypes.length === 0;
-        }
-        return result;
-      },
-      "gecko" : function( event, pseudoTypes ) {
-        return false;
-      }
-    } ),
-
-    saveData : function( event, keyCode, charCode ) {
-      if( event.type !== "keypress" ) {
-        this._lastUpDownType[ keyCode ] = event.type;
-        this._lastKeyCode = keyCode;
-      }
-    },
-
-    clearStuckKey : function( keyCode ) {
-      this._lastUpDownType[ keyCode ] = "keyup";
-    },
-
-    keyCodeToIdentifier : function( keyCode ) {
-      var result = "Unidentified";
-      if( this._numpadToCharCode[ keyCode ] !== undefined ) {
-        result = String.fromCharCode( this._numpadToCharCode[ keyCode ] );
-      } else if( this._keyCodeToIdentifierMap[ keyCode ] !== undefined ) {
-        result = this._keyCodeToIdentifierMap[ keyCode ];
-      } else if( this._specialCharCodeMap[ keyCode ] !== undefined ) {
-        result = this._specialCharCodeMap[ keyCode ];
-      } else if( this.isAlphaNumericKeyCode( keyCode ) ) {
-        result = String.fromCharCode( keyCode );
-      }
-      return result;
-    },
-
-    charCodeToIdentifier : function( charCode ) {
-      var result;
-      if( this._specialCharCodeMap[ charCode ] !== undefined ) {
-        result = this._specialCharCodeMap[ charCode ];
-      } else {
-        result = String.fromCharCode( charCode ).toUpperCase();
-      }
-      return result;
-    },
-
-    isNonPrintableKeyCode  : rwt.util.Variant.select( "qx.client", {
-      "default" : function( keyCode ) {
-        return this._keyCodeToIdentifierMap[ keyCode ] ? true : false;
-      },
-      "webkit" : function( keyCode ) {
-        return ( this._keyCodeToIdentifierMap[ keyCode ] || keyCode === 27 ) ? true : false;
-      }
-    } ),
-
-    isSpecialKeyCode : function( keyCode ) {
-      return this._specialCharCodeMap[ keyCode ] ? true : false;
-    },
-
-    isModifier : function( keyCode ) {
-      return keyCode >= 16 && keyCode <= 20 && keyCode !== 19;
-    },
-
-    isAlphaNumericKeyCode : function( keyCode ) {
-      var result = false;
-      if(    ( keyCode >= this._charCodeA && keyCode <= this._charCodeZ )
-          || ( keyCode >= this._charCode0 && keyCode <= this._charCode9 ) )
-      {
-        result = true;
-      }
-      return result;
-    },
-
-    /**
-     * Determines if this key event should be blocked if key events are disabled
-     */
-    shouldBlock : function( type, keyCode, charCode, event ) {
-      var result = true;
-      var keyIdentifier;
-      if( !isNaN( keyCode ) && keyCode !== 0 ) {
-        keyIdentifier = this.keyCodeToIdentifier( keyCode );
-      } else {
-        keyIdentifier = this.charCodeToIdentifier( charCode );
-      }
-      if( this._nonBlockableKeysMap[ keyIdentifier ] || event.altKey ) {
-        result = false;
-      } else if( event.ctrlKey ) {
-        // block only those combos that are used for text editing:
-        result = this._blockableCtrlKeysMap[ keyIdentifier ] === true;
-      }
-      return result;
-    },
-
-    ///////////////
-    // Helper-maps:
-
-    _specialCharCodeMap : {
-      13  : "Enter",
-      27  : "Escape",
-      32 : "Space"
-    },
-
-    _nonBlockableKeysMap : {
-      "Control" : true,
-      "Alt" : true,
-      "Shift" : true,
-      "Meta" : true,
-      "Win" : true,
-      "F1" : true,
-      "F2" : true,
-      "F3" : true,
-      "F4" : true,
-      "F5" : true,
-      "F6" : true,
-      "F7" : true,
-      "F8" : true,
-      "F9" : true,
-      "F10" : true,
-      "F11" : true,
-      "F12" : true
-    },
-
-    _blockableCtrlKeysMap : {
-      "F" : true,
-      "A" : true,
-      "C" : true,
-      "V" : true,
-      "X" : true,
-      "Z" : true,
-      "Y" : true
-    },
-
-    _keyCodeToIdentifierMap : {
-      8   : "Backspace",
-      9   : "Tab",
-      16  : "Shift",
-      17  : "Control",
-      18  : "Alt",
-      20  : "CapsLock",
-      224 : "Meta",
-      37  : "Left",
-      38  : "Up",
-      39  : "Right",
-      40  : "Down",
-      33  : "PageUp",
-      34  : "PageDown",
-      35  : "End",
-      36  : "Home",
-      45  : "Insert",
-      46  : "Delete",
-      112 : "F1",
-      113 : "F2",
-      114 : "F3",
-      115 : "F4",
-      116 : "F5",
-      117 : "F6",
-      118 : "F7",
-      119 : "F8",
-      120 : "F9",
-      121 : "F10",
-      122 : "F11",
-      123 : "F12",
-      144 : "NumLock",
-      44  : "PrintScreen",
-      145 : "Scroll",
-      19  : "Pause",
-      91  : "Win", // The Windows Logo key
-      93  : "Apps" // The Application key (Windows Context Menu)
-    },
-
-    /** maps the keycodes of the numpad keys to the right charcodes */
-    _numpadToCharCode : {
-      96  : "0".charCodeAt( 0 ),
-      97  : "1".charCodeAt( 0 ),
-      98  : "2".charCodeAt( 0 ),
-      99  : "3".charCodeAt( 0 ),
-      100 : "4".charCodeAt( 0 ),
-      101 : "5".charCodeAt( 0 ),
-      102 : "6".charCodeAt( 0 ),
-      103 : "7".charCodeAt( 0 ),
-      104 : "8".charCodeAt( 0 ),
-      105 : "9".charCodeAt( 0 ),
-      106 : "*".charCodeAt( 0 ),
-      107 : "+".charCodeAt( 0 ),
-      109 : "-".charCodeAt( 0 ),
-      110 : ",".charCodeAt( 0 ),
-      111 : "/".charCodeAt( 0 )
-    },
-
-    _charCodeA : "A".charCodeAt( 0 ),
-    _charCodeZ : "Z".charCodeAt( 0 ),
-    _charCode0 : "0".charCodeAt( 0 ),
-    _charCode9 : "9".charCodeAt( 0 )
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-namespace( "rwt.remote" );
-
-rwt.remote.HandlerRegistry = {
-
-  _registry : {},
-
-  add : function( key, handler ) {
-    this._registry[ key ] = handler;
-  },
-
-  remove : function( key ) {
-    delete this._registry[ key ];
-  },
-
-  getHandler : function( key ) {
-    var result = this._registry[ key ];
-    if( result === undefined ) {
-      throw new Error( "No Handler for type " + key );
-    }
-    return result;
-  },
-
-  hasHandler : function( key ) {
-    return this._registry[ key ] != null;
-  }
-
-};
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-namespace( "rwt.remote" );
-
-rwt.remote.ObjectRegistry = {
-
-  _map : {},
-  _callbacks : {},
-
-  add : function( id, object, handler ) {
-    this._map[ id ] = {
-      "object" : object,
-      "handler" : handler
-    };
-    object._rwtId = id;
-    if( typeof object.applyObjectId === "function" ) {
-      object.applyObjectId( id );
-    }
-    if( this._callbacks[ id ] ) {
-      for( var i = 0; i < this._callbacks[ id ].length; i++ ) {
-        this._callbacks[ id ][ i ]( object );
-      }
-      delete this._callbacks[ id ];
-    }
-  },
-
-  remove : function( id ) {
-    if( id != null ) {
-      delete this._map[ id ];
-    }
-  },
-
-  getId : function( object ) {
-    var result = null;
-    if( object != null && object._rwtId != null ) {
-      result = object._rwtId;
-    }
-    return result;
-  },
-
-  getObject : function( id ) {
-    var entry = this.getEntry( id );
-    return entry ? entry.object : undefined;
-  },
-
-  getEntry : function( id ) {
-    var result = this._map[ id ];
-    if( result == null && rwt.remote.HandlerRegistry.hasHandler( id ) ) {
-      var handler = rwt.remote.HandlerRegistry.getHandler( id );
-      if( handler.service === true ) {
-        this.add( id, handler.factory(), handler );
-        result = this._map[ id ];
-      }
-    }
-    return result;
-  },
-
-  addRegistrationCallback : function( id, fun ) {
-    if( !this._callbacks[ id ] ) {
-      this._callbacks[ id ] = [];
-    }
-    this._callbacks[ id ].push( fun );
-  }
-
-};
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-namespace( "rwt.remote" );
-
-rwt.remote.HandlerUtil = {
-
-  SERVER_DATA : "org.eclipse.swt.widgets.Widget#data",
-
-  _controlDestructor : function( widget ) {
-    rwt.remote.HandlerUtil._widgetDestructor( widget );
-  },
-
-  _childrenFinder : function( widget ) {
-    return rwt.remote.HandlerUtil.getDestroyableChildren( widget );
-  },
-
-  _widgetDestructor : function( widget ) {
-    var parent = widget.getUserData( "protocolParent" );
-    if( parent ) {
-      rwt.remote.HandlerUtil.removeDestroyableChild( parent, widget );
-    }
-    widget.setToolTip( null );
-    widget.setUserData( "toolTipText", null );
-    widget.destroy();
-  },
-
-  _controlProperties : [
-    "children",
-    "tabIndex",
-    "toolTip",
-    "visibility",
-    "enabled",
-    "foreground",
-    "background",
-    "backgroundImage",
-    "cursor",
-    "customVariant",
-    "bounds",
-    "font",
-    "menu",
-    "activeKeys",
-    "cancelKeys",
-    "data"
-  ],
-
-  _controlPropertyHandler : {
-    "data" : function( target, value ) {
-      var map = rwt.remote.HandlerUtil.getServerData( target );
-      rwt.util.Objects.mergeWith( map, value );
-    },
-    "children" : function( widget, value ) {
-      if( value !== null ) {
-        var childrenCount = value.length;
-        var applyZIndex = function( child ) {
-          var index = value.indexOf( rwt.remote.ObjectRegistry.getId( child ) );
-          child.setZIndex( childrenCount - index );
-        };
-        for( var i = 0; i < childrenCount; i++ ) {
-          rwt.remote.HandlerUtil.callWithTarget( value[ i ], applyZIndex );
-        }
-      }
-      widget.setUserData( "rwt_Children", value );
-    },
-    "foreground" : function( widget, value ) {
-      if( value === null ) {
-        widget.resetTextColor();
-      } else {
-        widget.setTextColor( rwt.util.Colors.rgbToRgbString( value ) );
-      }
-    },
-    "background" : function( widget, value ) {
-      if( value === null ) {
-        widget.resetBackgroundColor();
-        if( widget.__user$backgroundGradient == null ) {
-          widget.resetBackgroundGradient();
-        }
-      } else {
-        if( widget.__user$backgroundGradient == null ) {
-          widget.setBackgroundGradient( null );
-        }
-        var color = value[ 3 ] === 0 ? "transparent" : rwt.util.Colors.rgbToRgbString( value );
-        widget.setBackgroundColor( color );
-      }
-    },
-    "backgroundImage" : function( widget, value ) {
-      if( value === null ) {
-        widget.resetBackgroundImage();
-        widget.setUserData( "backgroundImageSize", null );
-      } else {
-        widget.setUserData( "backgroundImageSize", value.slice( 1 ) );
-        widget.setBackgroundImage( value[ 0 ] );
-      }
-    },
-    "cursor" : function( widget, value ) {
-      if( value === null ) {
-        widget.resetCursor();
-      } else {
-        widget.setCursor( value );
-      }
-    },
-    "bounds" : function( widget, value ) {
-      var bounds = value;
-      if( widget.getUserData( "tabFolder" ) !== null ) {
-        bounds[ 0 ] = 0;
-        bounds[ 1 ] = 0;
-      }
-      if( widget.getUserData( "scrolledComposite" ) === null ) {
-        widget.setLeft( bounds[ 0 ] );
-        widget.setTop( bounds[ 1 ] );
-      }
-      widget.setWidth( bounds[ 2 ] );
-      widget.setHeight( bounds[ 3 ] );
-    },
-    "toolTip" : function( widget, value ) {
-      if( value != null && value !== "" ) {
-        var EncodingUtil = rwt.util.Encoding;
-        var text = EncodingUtil.escapeText( value, false );
-        text = EncodingUtil.replaceNewLines( text, "<br/>" );
-        widget.setUserData( "toolTipText", text );
-        var toolTip = rwt.widgets.base.WidgetToolTip.getInstance();
-        widget.setToolTip( toolTip );
-        // make sure "boundToWidget" is initialized:
-        if( toolTip.getParent() != null ) {
-          if( toolTip.getBoundToWidget() == widget ) {
-            toolTip.updateText( widget );
-          }
-        }
-      } else {
-        widget.setToolTip( null );
-        widget.setUserData( "toolTipText", null );
-      }
-    },
-    "font" : function( widget, fontData ) {
-      if( widget.setFont ) { // test if font property is supported - why wouldn't it? [tb]
-        if( fontData === null ) {
-          widget.resetFont();
-        } else {
-          var font = rwt.html.Font.fromArray( fontData );
-          widget.setFont( font );
-        }
-      }
-    },
-    "menu" : function( widget, value ) {
-      rwt.remote.HandlerUtil.callWithTarget( value, function( menu ) {
-        widget.setContextMenu( menu );
-        var detectByKey = rwt.widgets.Menu.menuDetectedByKey;
-        var detectByMouse = rwt.widgets.Menu.menuDetectedByMouse;
-        if( menu == null ) {
-          widget.removeEventListener( "keydown", detectByKey );
-          widget.removeEventListener( "mouseup", detectByMouse );
-        } else {
-          widget.addEventListener( "keydown", detectByKey );
-          widget.addEventListener( "mouseup", detectByMouse );
-        }
-      } );
-    },
-    "activeKeys" : function( widget, value ) {
-      var map = rwt.util.Objects.fromArray( value );
-      widget.setUserData( "activeKeys", map );
-    },
-    "cancelKeys" : function( widget, value ) {
-      var map = rwt.util.Objects.fromArray( value );
-      widget.setUserData( "cancelKeys", map );
-    }
-  },
-
-  _controlListeners : [
-    "FocusIn",
-    "FocusOut",
-    "MouseDown",
-    "MouseUp",
-    "MouseDoubleClick",
-    "KeyDown",
-    "Traverse",
-    "MenuDetect",
-    "Help",
-    "Activate",
-    "Deactivate"
-  ],
-
-  _controlListenerHandler : {
-    "KeyDown" : function( widget, value ) {
-      widget.setUserData( "keyListener", value ? true : null );
-    },
-    "Traverse" : function( widget, value ) {
-      widget.setUserData( "traverseListener", value ? true : null );
-    },
-    "FocusIn" : function( widget, value ) {
-      var context = rwt.remote.EventUtil;
-      var focusGained = rwt.remote.EventUtil.focusGained;
-      if( value ) {
-        widget.addEventListener( "focusin", focusGained, context );
-      } else {
-        widget.removeEventListener( "focusin", focusGained, context );
-      }
-    },
-    "FocusOut" : function( widget, value ) {
-      var context = rwt.remote.EventUtil;
-      var focusLost = rwt.remote.EventUtil.focusLost;
-      if( value ) {
-        widget.addEventListener( "focusout", focusLost, context );
-      } else {
-        widget.removeEventListener( "focusout", focusLost, context );
-      }
-    },
-    "MouseDown" : function( widget, value ) {
-      var context;
-      var mouseDown = rwt.remote.EventUtil.mouseDown;
-      if( value ) {
-        widget.addEventListener( "mousedown", mouseDown, context );
-      } else {
-        widget.removeEventListener( "mousedown", mouseDown, context );
-      }
-    },
-    "MouseUp" : function( widget, value ) {
-      var context;
-      var mouseUp = rwt.remote.EventUtil.mouseUp;
-      if( value ) {
-        widget.addEventListener( "mouseup", mouseUp, context );
-      } else {
-        widget.removeEventListener( "mouseup", mouseUp, context );
-      }
-    },
-    "MouseDoubleClick" : function( widget, value ) {
-      var context;
-      var mouseDoubleClick = rwt.remote.EventUtil.mouseDoubleClick;
-      var mouseUpCounter = rwt.remote.EventUtil.mouseUpCounter;
-      if( value ) {
-        widget.addEventListener( "mousedown", mouseDoubleClick, context );
-        widget.addEventListener( "mouseup", mouseUpCounter, context );
-      } else {
-        widget.removeEventListener( "mousedown", mouseDoubleClick, context );
-        widget.removeEventListener( "mouseup", mouseUpCounter, context );
-      }
-    },
-    "MenuDetect" : function( widget, value ) {
-      var context;
-      var detectByKey = rwt.remote.EventUtil.menuDetectedByKey;
-      var detectByMouse = rwt.remote.EventUtil.menuDetectedByMouse;
-      if( value ) {
-        widget.addEventListener( "keydown", detectByKey, context );
-        widget.addEventListener( "mouseup", detectByMouse, context );
-      } else {
-        widget.removeEventListener( "keydown", detectByKey, context );
-        widget.removeEventListener( "mouseup", detectByMouse, context );
-      }
-    },
-    "Help" : function( widget, value ) {
-      var context;
-      var helpRequested = rwt.remote.EventUtil.helpRequested;
-      if( value ) {
-        widget.addEventListener( "keydown", helpRequested, context );
-      } else {
-        widget.removeEventListener( "keydown", helpRequested, context );
-      }
-    },
-    "Activate" : function( widget, value ) {
-      widget.setUserData( "activateListener", value ? true : null );
-    },
-    "Deactivate" : function( widget, value ) {
-      widget.setUserData( "deactivateListener", value ? true : null );
-    }
-  },
-
-  _specialHandler : {
-    "backgroundGradient" : function( widget, value ) {
-      var gradient = null;
-      if( value ) {
-        var colors = value[ 0 ];
-        var percents = value[ 1 ];
-        var vertical = value[ 2 ];
-        gradient = [];
-        for( var i = 0; i < colors.length; i++ ) {
-          gradient[ i ] = [ percents[ i ] / 100, rwt.util.Colors.rgbToRgbString( colors[ i ] ) ];
-        }
-        gradient.horizontal = !vertical;
-      }
-      widget.setBackgroundGradient( gradient );
-    },
-    "roundedBorder" : function( widget, value ) {
-      if( value ) {
-        var width = value[ 0 ];
-        var color = rwt.util.Colors.rgbToRgbString( value[ 1 ] );
-        var radii = value.slice( -4 );
-        var border = new rwt.html.Border( width, "rounded", color, radii );
-        widget.setBorder( border );
-      } else {
-        widget.resetBorder();
-      }
-    }
-  },
-
-  ////////////////////
-  // lists and handler
-
-  getWidgetDestructor : function() {
-    return this._widgetDestructor;
-  },
-
-  getControlDestructor : function() {
-    return this._controlDestructor;
-  },
-
-  getDestroyableChildrenFinder : function( widget ) {
-    return this._childrenFinder;
-  },
-
-  extendControlProperties : function( list ) {
-    return list.concat( this._controlProperties );
-  },
-
-  extendControlPropertyHandler : function( handler ) {
-    return rwt.util.Objects.mergeWith( handler, this._controlPropertyHandler, false );
-  },
-
-  extendControlListeners : function( list ) {
-    return list.concat( this._controlListeners );
-  },
-
-  extendControlListenerHandler : function( handler ) {
-    return rwt.util.Objects.mergeWith( handler, this._controlListenerHandler, false );
-  },
-
-  getBackgroundGradientHandler : function() {
-    return this._specialHandler.backgroundGradient;
-  },
-
-  getRoundedBorderHandler : function() {
-    return this._specialHandler.roundedBorder;
-  },
-
-  getControlPropertyHandler : function( property ) {
-    return this._controlPropertyHandler[ property ];
-  },
-
-  getControlListenerHandler : function( handler ) {
-    return this._controlListenerHandler[ handler ];
-  },
-
-  /////////////////////
-  // Helper for handler
-
-  addStatesForStyles : function( targetObject, styleArray ) {
-    for( var i = 0; i < styleArray.length; i++ ) {
-      targetObject.addState( "rwt_" + styleArray[ i ] );
-    }
-    targetObject._renderAppearance();
-    delete targetObject._isInGlobalStateQueue;
-  },
-
-  createStyleMap : function( styleArray ) {
-    var result = {};
-    for( var i = 0; i < styleArray.length; i++ ) {
-      result[ styleArray[ i ] ] = true;
-    }
-    return result;
-  },
-
-  setParent : function( widget, parentId ) {
-    var impl = this._setParentImplementation;
-    this.callWithTarget( parentId, function( parent ) {
-      impl( widget, parent );
-    } );
-  },
-
-  _setParentImplementation : function( widget, parent ) {
-    // TODO [rh] there seems to be a difference between add and setParent
-    //      when using add sizes and clipping are treated differently
-    // parent.add( widget );
-    if( parent instanceof rwt.widgets.ScrolledComposite ) {
-      // [if] do nothing, parent is set in ScrolledComposite#setContent which is called from the
-      // server-side - see bug 349161
-      widget.setUserData( "scrolledComposite", parent ); // Needed by "bounds" handler
-    } else if ( parent instanceof rwt.widgets.TabFolder ) {
-      widget.setUserData( "tabFolder", parent ); // Needed by "bounds" handler
-    } else if( parent instanceof rwt.widgets.ExpandBar ) {
-      parent.addWidget( widget );
-    } else {
-      widget.setParent( parent );
-    }
-    rwt.remote.HandlerUtil.addDestroyableChild( parent, widget );
-    widget.setUserData( "protocolParent", parent );
-  },
-
-  callWithTarget : function( id, fun ) {
-    if( id == null ) {
-      fun( null );
-    } else {
-      var target = rwt.remote.ObjectRegistry.getObject( id );
-      if( target ) {
-        fun( target );
-      } else {
-        rwt.remote.ObjectRegistry.addRegistrationCallback( id, fun );
-      }
-    }
-  },
-
-  filterUnregisteredObjects : function( list ) {
-    var ObjectRegistry = rwt.remote.ObjectRegistry;
-    var result = [];
-    for( var i = 0; i < list.length; i++ ) {
-      if( ObjectRegistry.getId( list[ i ] ) ) {
-        result.push( list[ i ] );
-      }
-    }
-    return result;
-  },
-
-  getShell : function( widget ) {
-    var result = widget;
-    while( result && !( result instanceof rwt.widgets.Shell ) ) {
-      result = result.getParent();
-    }
-    return result;
-  },
-
-  // TODO : Can we use "children" property in most cases instead??
-  addDestroyableChild : function( parent, child ) {
-    var list = parent.getUserData( "destroyableChildren" );
-    if( list == null ) {
-      list = {};
-      parent.setUserData( "destroyableChildren", list );
-    }
-    list[ rwt.qx.Object.toHashCode( child ) ] = child;
-  },
-
-  removeDestroyableChild : function( parent, child ) {
-    var list = parent.getUserData( "destroyableChildren" );
-    if( list != null ) {
-      delete list[ rwt.qx.Object.toHashCode( child ) ];
-    }
-  },
-
-  getDestroyableChildren : function( parent ) {
-    var list = parent.getUserData( "destroyableChildren" );
-    if( list == null ) {
-      list = {};
-    }
-    var result = [];
-    for( var key in list ) {
-      result.push( list[ key ] );
-    }
-    return result;
-  },
-
-  getServerData : function( target ) {
-    var result = target.getUserData( rwt.remote.HandlerUtil.SERVER_DATA );
-    if( result == null ) {
-      result = {};
-      target.setUserData( rwt.remote.HandlerUtil.SERVER_DATA, result );
-    }
-    return result;
-  }
-
-};
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-namespace( "rwt.util" );
-
-rwt.util.Encoding = {
-
-  _escapeRegExp : /(&|<|>|\")/g,
-  _escapeRegExpMnemonics : /(&&|&|<|>|")/g,
-  _newlineRegExp : /(\r\n|\n|\r)/g,
-  _outerWhitespaceRegExp : /(^ {1,1}| +$)/g,
-  _outerWhitespaceRegExp2 : /(^ {1,}| +$)/g,
-  _whitespaceRegExp : / {2,}/g,
-
-  _escapeResolver : null,
-  _escapeResolverMnemonics : null,
-  _mnemonicFound : false,
-
-  _escapeMap : {
-    "<" : "&lt;",
-    ">" : "&gt;",
-    "\"" : "&quot;",
-    "&&" : "&amp;",
-    "&" : "&amp;"
-  },
-
-  /**
-   * Replaces all occurrences of the characters <,>,&," with their corresponding HTML entities.
-   * When the parameter mnemonic is set to true, this method handles ampersand characters in the
-   * text as mnemonics in the same manner as SWT does.
-   * Note: In contrast to SWT, the characters following an ampersand are currently not underlined.
-   *
-   * @param text the input text
-   * @param mnemonics if true, the function removes the firest "&"
-   *                  if a numbner, underlines that character (other option will be removed)
-   *
-   * @return the resulting text
-   */
-  // Note [rst]: Single quotes are not escaped as the entity &apos; is not
-  //             defined in HTML 4. They should be handled by this method once
-  //             we produce XHTML output.
-  escapeText : function( text, mnemonics ) {
-    if( text === null ) {
-      throw new Error( "escapeText with parameter null not allowed" );
-    }
-    var result;
-    this._mnemonicFound = false; // first found mnemonic may be resolved
-    if( mnemonics === true ) {
-      result = text.replace( this._escapeRegExpMnemonics, this._getEscapeResolverMnemonics() );
-    } else {
-      if( typeof mnemonics === "number" ) {
-        result = this._escapeWithMnemonic( text, mnemonics );
-      } else {
-        result = text.replace( this._escapeRegExp, this._getEscapeResolver() );
-      }
-    }
-    return this.truncateAtZero( result );
-  },
-
-  truncateAtZero : function( text ) {
-    var result = text;
-    var index = result.indexOf( String.fromCharCode( 0 ) );
-    if( index !== -1 ) {
-      result = result.substring( 0, index );
-    }
-    return result;
-  },
-
-  /**
-   * Replaces all newline characters in the specified input string with the
-   * given replacement string. All common newline characters are replaced (Unix,
-   * Windows, and MacOS).
-   *
-   * @param input the string to process
-   * @param replacement the string to replace line feeds with.
-   * @return a copy of the input string with all newline characters replaced
-   */
-  replaceNewLines : function( text, optionalReplacement ) {
-    var replacement = arguments.length > 1 ? optionalReplacement : "\\n";
-    return text.replace( this._newlineRegExp, replacement );
-  },
-
-  /**
-   * Replaces white spaces in the specified input string with &nbsp;.
-   * For correct word wrapping, the last white space in a sequence of white
-   * spaces is not replaced, if there is a different character following.
-   * A single white space between words is not replaced whereas a single
-   * leading white space is replaced.
-   *
-   * @param input the string to process
-   * @return a copy of the input string with white spaces replaced
-   */
-  replaceWhiteSpaces : function( text ) {
-    var result = text.replace( this._outerWhitespaceRegExp, this._outerWhitespaceResolver );
-    result = result.replace( this._whitespaceRegExp, this._whitespaceResolver );
-    return result;
-  },
-
-  /**
-   * Escapes all leading and trailing spaces in the given input string.
-   *
-   * @param text input the string to process
-   * @return a copy of the input string with all leading and trailing spaces
-   * replaced
-   */
-  escapeLeadingTrailingSpaces : function( text ) {
-    return text.replace( this._outerWhitespaceRegExp2, this._outerWhitespaceResolver );
-  },
-
-
-  /**
-   * Escapes all chars that have a special meaning in regular expressions
-   *
-   * @type static
-   * @param str {String} the string where to escape the chars.
-   * @return {String} the string with the escaped chars.
-   */
-  escapeRegexpChars : function( str ) {
-    return str.replace( /([\\\.\(\)\[\]\{\}\^\$\?\+\*])/g, "\\$1" );
-  },
-
-
-  /**
-   * Unescapes a string containing entity escapes to a string
-   * containing the actual Unicode characters corresponding to the
-   * escapes. Supports HTML 4.0 entities.
-   *
-   * For example, the string "&amp;lt;Fran&amp;ccedil;ais&amp;gt;"
-   * will become "&lt;Fran&ccedil;ais&gt;"
-   *
-   * If an entity is unrecognized, it is left alone, and inserted
-   * verbatim into the result string. e.g. "&amp;gt;&amp;zzzz;x" will
-   * become "&gt;&amp;zzzz;x".
-   *
-   * @type static
-   * @param str {String} the String to unescape, may be null
-   * @return {var} a new unescaped String
-   * @see #escape
-   */
-  unescape : function( str ) {
-    return this._unescapeEntities( str, rwt.html.Entity.TO_CHARCODE );
-  },
-
-
-  /////////
-  // Helper
-
-  _escapeWithMnemonic : function( text, index ) {
-    var split = [
-      text.slice( 0, index ).replace( this._escapeRegExp, this._getEscapeResolver() ),
-      "<span style=\"text-decoration:underline\">",
-      text.charAt( index ).replace( this._escapeRegExp, this._getEscapeResolver() ),
-      "</span>",
-      text.slice( index + 1 ).replace( this._escapeRegExp, this._getEscapeResolver() )
-    ];
-    return split.join( "" );
-  },
-
-  _getEscapeResolverMnemonics : function() {
-    if( this._escapeResolverMnemonics ===  null ) {
-      this._getEscapeResolver(); // implicitly create default resolver
-      var EncodingUtil = this;
-      this._escapeResolverMnemonics = function( match ) {
-        var result;
-        if( match === "&" && !EncodingUtil._mnemonicFound ) {
-          result = "";
-          EncodingUtil._mnemonicFound = true;
-        } else {
-          result = EncodingUtil._escapeResolver( match );
-        }
-        return result;
-      };
-    }
-    return this._escapeResolverMnemonics;
-  },
-
-  _getEscapeResolver : function() {
-    if( this._escapeResolver === null ) {
-      var EncodingUtil = this;
-      this._escapeResolver = function( match ) {
-        return EncodingUtil._escapeMap[ match ];
-      };
-    }
-    return this._escapeResolver;
-  },
-
-  _outerWhitespaceResolver : function( match ) {
-    return match.replace( / /g, "&nbsp;" );
-  },
-
-  _whitespaceResolver : function( match ) {
-    return match.slice( 1 ).replace( / /g, "&nbsp;" ) + " ";
-  },
-
-  _unescapeEntities : function( str, entitiesToCharCode ) {
-    return str.replace( /&[#\w]+;/gi, function( entity ) {
-      var chr = entity;
-      var entity = entity.substring( 1, entity.length - 1 );
-      var code = entitiesToCharCode[ entity ];
-      if( code ) {
-        chr = String.fromCharCode( code );
-      } else {
-        if( entity.charAt( 0 ) === '#' ) {
-          if( entity.charAt(1).toUpperCase() === 'X' ) {
-            code = entity.substring( 2 );
-            // match hex number
-            if( code.match( /^[0-9A-Fa-f]+$/gi ) ) {
-              chr = String.fromCharCode( parseInt( code, 16 ) );
-            }
-          } else {
-            code = entity.substring( 1 );
-            // match integer
-            if( code.match( /^\d+$/gi ) ) {
-              chr = String.fromCharCode( parseInt( code, 10 ) );
-            }
-          }
-        }
-      }
-      return chr;
-    } );
-  }
-
-
-};
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-namespace( "rwt.widgets" );
-
-rwt.widgets.Display = function( properties ) {
-  this._document = rwt.widgets.base.ClientDocument.getInstance();
-  this._server = rwt.remote.Server.getInstance();
-  this._exitConfirmation = null;
-  this._hasResizeListener = false;
-  this._initialized = false;
-  if( rwt.widgets.Display._current !== undefined ) {
-    throw new Error( "Display can not be created twice" );
-  } else {
-    rwt.widgets.Display._current = this;
-  }
-};
-
-rwt.widgets.Display.getCurrent = function() {
-  return rwt.widgets.Display._current;
-};
-
-
-rwt.widgets.Display._onAppearFocus = function( evt ) {
-  var widget = this;
-  widget.focus();
-  widget.removeEventListener( "appear", rwt.widgets.Display._onAppearFocus, widget );
-};
-
-rwt.widgets.Display.prototype = {
-
-  applyObjectId : function() {
-    if( !this._initialized ) {
-      this.init();
-    }
-  },
-
-  init : function() {
-    this._server.getMessageWriter().appendHead( "rwt_initialize", true );
-    this._appendQueryString();
-    this._appendWindowSize();
-    this._appendSystemDPI();
-    this._appendColorDepth();
-    this._appendInitialHistoryEvent();
-    this._appendTimezoneOffset();
-    this._attachListener();
-    this._server.send();
-    this._initialized = true;
-  },
-
-  allowEvent : function() {
-    // NOTE : in the future might need a parameter if there are multiple types of cancelable events
-    rwt.remote.KeyEventSupport.getInstance().allowEvent();
-  },
-
-  cancelEvent : function() {
-    rwt.remote.KeyEventSupport.getInstance().cancelEvent();
-  },
-
-  beep : function() {
-    // do nothing for now, used by native clients
-  },
-
-  /**
-   * An exit confirmation dialog will be displayed if the given message is not
-   * null. If the message is empty, the dialog will be displayed but without a
-   * message.
-   */
-  setExitConfirmation : function( message ) {
-    this._exitConfirmation = message;
-  },
-
-  setFocusControl : function( widgetId ) {
-    var widget = rwt.remote.ObjectRegistry.getObject( widgetId );
-    if( widget.isSeeable() ) {
-      widget.focus();
-    } else {
-      widget.addEventListener( "appear", rwt.widgets.Display._onAppearFocus, widget );
-    }
-  },
-
-  setMnemonicActivator : function( value ) {
-    rwt.widgets.util.MnemonicHandler.getInstance().setActivator( value );
-  },
-
-  setEnableUiTests : function( value ) {
-    rwt.widgets.base.Widget._renderHtmlIds = value;
-  },
-
-  getDPI : function() {
-    var result = [ 0, 0 ];
-    if( typeof screen.systemXDPI == "number" ) {
-      result[ 0 ] = parseInt( screen.systemXDPI, 10 );
-      result[ 1 ] = parseInt( screen.systemYDPI, 10 );
-    } else {
-      var testElement = document.createElement( "div" );
-      testElement.style.width = "1in";
-      testElement.style.height = "1in";
-      testElement.style.padding = 0;
-      document.body.appendChild( testElement );
-      result[ 0 ] = parseInt( testElement.offsetWidth, 10 );
-      result[ 1 ] = parseInt( testElement.offsetHeight, 10 );
-      document.body.removeChild( testElement );
-    }
-    return result;
-  },
-
-  setHasResizeListener : function( value ) {
-    this._hasResizeListener = value;
-  },
-
-  ////////////////////////
-  // Global Event handling
-
-  _attachListener : function() {
-    this._document.addEventListener( "windowresize", this._onResize, this );
-    this._document.addEventListener( "keypress", this._onKeyPress, this );
-    this._server.addEventListener( "send", this._onSend, this );
-    rwt.remote.KeyEventSupport.getInstance(); // adds global KeyListener
-    rwt.runtime.System.getInstance().addEventListener( "beforeunload", this._onBeforeUnload, this );
-    rwt.runtime.System.getInstance().addEventListener( "unload", this._onUnload, this );
-  },
-
-  _onResize : function( evt ) {
-    this._appendWindowSize();
-    if( this._hasResizeListener ) {
-      rwt.remote.Server.getInstance().getRemoteObject( this ).notify( "Resize" );
-    }
-  },
-
-  _onKeyPress : function( evt ) {
-    if( evt.getKeyIdentifier() == "Escape" ) {
-      evt.preventDefault();
-    }
-  },
-
-  _onSend : function( evt ) {
-    // TODO [tb] : This will attach the cursorLocation as the last operation, but should be first
-    var pageX = rwt.event.MouseEvent.getPageX();
-    var pageY = rwt.event.MouseEvent.getPageY();
-    var location = [ Math.round( pageX ), Math.round( pageY ) ];
-    rwt.remote.Server.getInstance().getRemoteObject( this ).set( "cursorLocation", location );
-  },
-
-  _onBeforeUnload : function( event ) {
-    if( this._exitConfirmation !== null && this._exitConfirmation !== "" ) {
-      event.getDomEvent().returnValue = this._exitConfirmation;
-      event.setUserData( "returnValue", this._exitConfirmation );
-    }
-  },
-
-  _onUnload : function() {
-    this._document.removeEventListener( "windowresize", this._onResize, this );
-    this._document.removeEventListener( "keypress", this._onKeyPress, this );
-    this._server.removeEventListener( "send", this._onSend, this );
-    this._sendShutdown();
-  },
-
-  ///////////////////
-  // client to server
-
-  _sendShutdown : function() {
-    var server = rwt.remote.Server.getInstance();
-    server.getMessageWriter().appendHead( "rwt_shutdown", true );
-    server.sendImmediate( false );
-  },
-
-  _appendWindowSize : function() {
-    var width = rwt.html.Window.getInnerWidth( window );
-    var height = rwt.html.Window.getInnerHeight( window );
-    var bounds = [ 0, 0, width, height ];
-    rwt.remote.Server.getInstance().getRemoteObject( this ).set( "bounds", bounds );
-  },
-
-  _appendSystemDPI : function() {
-    var dpi = this.getDPI();
-    rwt.remote.Server.getInstance().getRemoteObject( this ).set( "dpi", dpi );
-  },
-
-  _appendColorDepth : function() {
-    var depth = 16;
-    if( typeof screen.colorDepth == "number" ) {
-      depth = parseInt( screen.colorDepth, 10 );
-    }
-    if( rwt.client.Client.isGecko() ) {
-      // Firefox detects 24bit and 32bit as 24bit, but 32bit is more likely
-      depth = depth == 24 ? 32 : depth;
-    }
-    rwt.remote.Server.getInstance().getRemoteObject( this ).set( "colorDepth", depth );
-  },
-
-  _appendInitialHistoryEvent : function() {
-    var state = window.location.hash;
-    if( state !== "" ) {
-      var type = "rwt.client.BrowserNavigation";
-      var history = rwt.client.BrowserNavigation.getInstance();
-      var handler = rwt.remote.HandlerRegistry.getHandler( type );
-      // TODO: Temporary workaround for 388835
-      rwt.remote.ObjectRegistry.add( type, history, handler );
-      rwt.remote.Server.getInstance().getRemoteObject( history ).notify( "Navigation", {
-        "state" : decodeURIComponent( state.substr( 1 ) )
-      } );
-    }
-  },
-
-  _appendTimezoneOffset : function() {
-    // NOTE : using ObjectRegistry implicitly registers the ClientInfo service
-    var clientObject = rwt.remote.ObjectRegistry.getObject( "rwt.client.ClientInfo" );
-    var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( clientObject );
-    remoteObject.set( "timezoneOffset", clientObject.getTimezoneOffset() );
-  },
-
-  _appendQueryString : function() {
-    var queryString = window.location.search;
-    if( queryString !== "" ) {
-      this._server.getMessageWriter().appendHead( "queryString", queryString.substr( 1 ) );
-    }
-  }
-
-};
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.Display", {
-
-  factory : function( properties ) {
-    return new rwt.widgets.Display( properties );
-  },
-
-  destructor : null, // destroy is currently not called for display
-
-  properties : [
-    "exitConfirmation",
-    "mnemonicActivator",
-    "focusControl",
-    "enableUiTests",
-    "activeKeys",
-    "cancelKeys"
-  ],
-
-  methods : [
-    "allowEvent",
-    "cancelEvent",
-    "beep"
-  ],
-
-  propertyHandler : {
-    "activeKeys" : function( object, value ) {
-      var map = rwt.util.Objects.fromArray( value );
-      rwt.remote.KeyEventSupport.getInstance().setKeyBindings( map );
-    },
-    "cancelKeys" : function( object, value ) {
-      var map = rwt.util.Objects.fromArray( value );
-      rwt.remote.KeyEventSupport.getInstance().setCancelKeys( map );
-    }
-  },
-
-  listeners : [ "KeyDown", "Resize" ]
-
-} );
-
-/*******************************************************************************
- * Copyright: 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                       and EclipseSource
- *
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * This is the main widget, all visible objects in the application extend this.
- *
- * @appearance widget
- * @state selected Set by {@link rwt.widgets.util.SelectionManager#renderItemSelectionState}
- * @state anchor Set by {@link rwt.widgets.util.SelectionManager#renderItemAnchorState}
- * @state lead Set by {@link rwt.widgets.util.SelectionManager#renderItemLeadState}
- *
- * @state disabled Set by {@link rwt.qx.Object#enabled}
- * @state focused Set by {@link #focused}
- */
-rwt.qx.Class.define( "rwt.widgets.base.Widget", {
-  extend : rwt.qx.Target,
-  type : "abstract",
-
-  construct : function() {
-    this.base( arguments );
-    this._layoutChanges = {};
-    this._outerFrame = [ 0, 0 ];
-    this.initHideFocus();
-  },
-
-  events: {
-    "beforeAppear"    : "rwt.event.Event",
-    "appear"          : "rwt.event.Event",
-    "beforeDisappear" : "rwt.event.Event",
-    "disappear"       : "rwt.event.Event",
-    "insertDom"       : "rwt.event.Event",
-    "create"          : "rwt.event.Event",
-    "execute"         : "rwt.event.Event",
-    "flush"           : "rwt.event.DataEvent",
-
-    /** (Fired by {@link rwt.event.EventHandler}) */
-    "mouseover"       : "rwt.event.MouseEvent",
-    "mousemove"       : "rwt.event.MouseEvent",
-    "mouseout"        : "rwt.event.MouseEvent",
-    "mousedown"       : "rwt.event.MouseEvent",
-    "mouseup"         : "rwt.event.MouseEvent",
-    "mousewheel"      : "rwt.event.MouseEvent",
-    "click"           : "rwt.event.MouseEvent",
-    "dblclick"        : "rwt.event.MouseEvent",
-    "contextmenu"     : "rwt.event.MouseEvent",
-    "elementOver"     : "rwt.event.MouseEvent",
-    "elementOut"      : "rwt.event.MouseEvent",
-    "keydown"         : "rwt.event.KeyEvent",
-    "keypress"        : "rwt.event.KeyEvent",
-    "keyup"           : "rwt.event.KeyEvent",
-
-    /** (Fired by {@link rwt.widgets.base.Parent}) */
-    "focusout"        : "rwt.event.FocusEvent",
-    "focusin"         : "rwt.event.FocusEvent",
-    "blur"            : "rwt.event.FocusEvent",
-    "focus"           : "rwt.event.FocusEvent",
-
-    /** (Fired by {@link rwt.event.DragAndDropHandler}) */
-    "dragdrop"        : "rwt.event.DragEvent",
-    "dragout"         : "rwt.event.DragEvent",
-    "dragover"        : "rwt.event.DragEvent",
-    "dragmove"        : "rwt.event.DragEvent",
-    "dragstart"       : "rwt.event.DragEvent",
-    "dragend"         : "rwt.event.DragEvent"
-  },
-
-  statics : {
-
-    //////////////////////
-    // Global Widget Flush
-
-    _globalWidgetQueue : [],
-    _globalElementQueue : [],
-    _globalStateQueue : [],
-    _globalJobQueue : [],
-    _globalLayoutQueue : [],
-    _fastGlobalDisplayQueue : [],
-    _lazyGlobalDisplayQueues : {},
-    _globalDisposeQueue : [],
-
-    _autoFlushTimeout : null,
-    _flushGlobalQueuesPhase : 0,
-    _renderHtmlIds : false,
-
-    _FLUSH_PHASE_IDLE : 0,
-    _FLUSH_PHASE_WIDGET : 1,
-    _FLUSH_PHASE_STATE : 2,
-    _FLUSH_PHASE_ELEMENT : 3,
-    _FLUSH_PHASE_JOB : 4,
-    _FLUSH_PHASE_LAYOUT : 5,
-    _FLUSH_PHASE_DISPLAY : 6,
-    _FLUSH_PHASE_DISPOSE : 7,
-
-    _initAutoFlush : function( phase ) {
-      if( rwt.widgets.base.Widget._autoFlushTimeout == null ) {
-        // RAP: Fix for bug 303162
-        if(    !rwt.widgets.base.Widget._inFlushGlobalQueues
-            || phase < rwt.widgets.base.Widget._flushGlobalQueuesPhase ) {
-          rwt.widgets.base.Widget._autoFlushTimeout
-            = window.setTimeout( rwt.widgets.base.Widget._autoFlushHelper, 0 );
-        }
-      }
-    },
-
-    _removeAutoFlush : function() {
-      if( rwt.widgets.base.Widget._autoFlushTimeout != null ) {
-        window.clearTimeout( rwt.widgets.base.Widget._autoFlushTimeout );
-        rwt.widgets.base.Widget._autoFlushTimeout = null;
-      }
-    },
-
-    _autoFlushHelper : function() {
-      try {
-        rwt.widgets.base.Widget._autoFlushTimeout = null;
-        if( !rwt.qx.Object.inGlobalDispose() ) {
-          rwt.widgets.base.Widget.flushGlobalQueues();
-        }
-      }catch( ex ) {
-        rwt.runtime.ErrorHandler.processJavaScriptError( ex );
-      }
-    },
-
-    flushGlobalQueues : function() {
-      if( rwt.widgets.base.Widget._autoFlushTimeout != null ) {
-        rwt.widgets.base.Widget._removeAutoFlush();
-      }
-      if( rwt.widgets.base.Widget._inFlushGlobalQueues ) {
-        return;
-      }
-      if( !rwt.runtime.System.getInstance().getUiReady() ) {
-        return;
-      }
-      rwt.widgets.base.Widget._inFlushGlobalQueues = true;
-      rwt.widgets.base.Widget.flushGlobalWidgetQueue();
-      rwt.widgets.base.Widget.flushGlobalStateQueue();
-      rwt.widgets.base.Widget.flushGlobalElementQueue();
-      rwt.widgets.base.Widget.flushGlobalJobQueue();
-      rwt.widgets.base.Widget.flushGlobalLayoutQueue();
-      rwt.widgets.base.Widget.flushGlobalDisplayQueue();
-      rwt.widgets.base.Widget.flushGlobalDisposeQueue();
-      rwt.widgets.base.Widget._flushGlobalQueuesPhase = rwt.widgets.base.Widget._FLUSH_PHASE_IDLE;
-      delete rwt.widgets.base.Widget._inFlushGlobalQueues;
-    },
-
-    addToGlobalWidgetQueue : function(vWidget) {
-      if (!vWidget._isInGlobalWidgetQueue && vWidget._isDisplayable) {
-        if (rwt.widgets.base.Widget._autoFlushTimeout == null) {
-          rwt.widgets.base.Widget._initAutoFlush( rwt.widgets.base.Widget._FLUSH_PHASE_WIDGET );
-        }
-        rwt.widgets.base.Widget._globalWidgetQueue.push(vWidget);
-        vWidget._isInGlobalWidgetQueue = true;
-      }
-    },
-
-    removeFromGlobalWidgetQueue : function(vWidget) {
-      if (vWidget._isInGlobalWidgetQueue) {
-        rwt.util.Arrays.remove(rwt.widgets.base.Widget._globalWidgetQueue, vWidget);
-        delete vWidget._isInGlobalWidgetQueue;
-      }
-    },
-
-    flushGlobalWidgetQueue : function() {
-      rwt.widgets.base.Widget._flushGlobalQueuesPhase = rwt.widgets.base.Widget._FLUSH_PHASE_WIDGET;
-      var vQueue = rwt.widgets.base.Widget._globalWidgetQueue, vLength, vWidget;
-      while ((vLength = vQueue.length) > 0) {
-        for (var i=0; i<vLength; i++) {
-          vWidget = vQueue[i];
-          vWidget.flushWidgetQueue();
-          delete vWidget._isInGlobalWidgetQueue;
-        }
-        vQueue.splice(0, vLength);
-      }
-      rwt.widgets.base.Widget._globalWidgetQueue = [];
-    },
-
-    addToGlobalElementQueue : function(vWidget) {
-      if (!vWidget._isInGlobalElementQueue && vWidget._isDisplayable) {
-        if (rwt.widgets.base.Widget._autoFlushTimeout == null) {
-          rwt.widgets.base.Widget._initAutoFlush( rwt.widgets.base.Widget._FLUSH_PHASE_ELEMENT );
-        }
-        rwt.widgets.base.Widget._globalElementQueue.push(vWidget);
-        vWidget._isInGlobalElementQueue = true;
-      }
-    },
-
-    removeFromGlobalElementQueue : function(vWidget) {
-      if (vWidget._isInGlobalElementQueue) {
-        rwt.util.Arrays.remove(rwt.widgets.base.Widget._globalElementQueue, vWidget);
-        delete vWidget._isInGlobalElementQueue;
-      }
-    },
-
-    flushGlobalElementQueue : function() {
-      rwt.widgets.base.Widget._flushGlobalQueuesPhase = rwt.widgets.base.Widget._FLUSH_PHASE_ELEMENT;
-      var vQueue = rwt.widgets.base.Widget._globalElementQueue, vLength, vWidget;
-      while ((vLength = vQueue.length) > 0) {
-        for (var i=0; i<vLength; i++) {
-          vWidget = vQueue[i];
-          vWidget._createElementImpl();
-          delete vWidget._isInGlobalElementQueue;
-        }
-        vQueue.splice(0, vLength);
-      }
-      rwt.widgets.base.Widget._globalElementQueue = [];
-    },
-
-    addToGlobalStateQueue : function(vWidget) {
-      if (!vWidget._isInGlobalStateQueue && vWidget._isDisplayable) {
-        if (rwt.widgets.base.Widget._autoFlushTimeout == null) {
-          rwt.widgets.base.Widget._initAutoFlush( rwt.widgets.base.Widget._FLUSH_PHASE_STATE );
-        }
-        rwt.widgets.base.Widget._globalStateQueue.push(vWidget);
-        vWidget._isInGlobalStateQueue = true;
-      }
-    },
-
-    removeFromGlobalStateQueue : function(vWidget) {
-      if (vWidget._isInGlobalStateQueue) {
-        rwt.util.Arrays.remove(rwt.widgets.base.Widget._globalStateQueue, vWidget);
-        delete vWidget._isInGlobalStateQueue;
-      }
-    },
-
-    flushGlobalStateQueue : function() {
-      rwt.widgets.base.Widget._flushGlobalQueuesPhase = rwt.widgets.base.Widget._FLUSH_PHASE_STATE;
-      var Widget = rwt.widgets.base.Widget;
-      // the queue may change while doing the flush so we work on a copy of
-      // the queue and loop while the queue has any entries.
-      while(Widget._globalStateQueue.length > 0) {
-        var queue = rwt.util.Arrays.copy(Widget._globalStateQueue);
-        Widget._globalStateQueue = [];
-        for (var i=0, l=queue.length; i<l; i++) {
-          var widget = queue[i];
-          if (widget._isInGlobalStateQueue) {
-            widget._renderAppearance();
-            delete widget._isInGlobalStateQueue;
-          }
-        }
-      }
-    },
-
-    addToGlobalJobQueue : function(vWidget) {
-      if (!vWidget._isInGlobalJobQueue && vWidget._isDisplayable) {
-        if (rwt.widgets.base.Widget._autoFlushTimeout == null) {
-          rwt.widgets.base.Widget._initAutoFlush( rwt.widgets.base.Widget._FLUSH_PHASE_JOB );
-        }
-        rwt.widgets.base.Widget._globalJobQueue.push(vWidget);
-        vWidget._isInGlobalJobQueue = true;
-      }
-    },
-
-    removeFromGlobalJobQueue : function(vWidget) {
-      if (vWidget._isInGlobalJobQueue) {
-        rwt.util.Arrays.remove(rwt.widgets.base.Widget._globalJobQueue, vWidget);
-        delete vWidget._isInGlobalJobQueue;
-      }
-    },
-
-    flushGlobalJobQueue : function() {
-      rwt.widgets.base.Widget._flushGlobalQueuesPhase
-        = rwt.widgets.base.Widget._FLUSH_PHASE_JOB;
-      var vQueue = rwt.widgets.base.Widget._globalJobQueue, vLength, vWidget;
-      while ((vLength = vQueue.length) > 0) {
-        for (var i=0; i<vLength; i++) {
-          vWidget = vQueue[i];
-          vWidget._flushJobQueue(vWidget._jobQueue);
-          delete vWidget._isInGlobalJobQueue;
-        }
-        vQueue.splice(0, vLength);
-      }
-      rwt.widgets.base.Widget._globalJobQueue = [];
-    },
-
-    addToGlobalLayoutQueue : function(vParent) {
-      if (!vParent._isInGlobalLayoutQueue && vParent._isDisplayable) {
-        if (rwt.widgets.base.Widget._autoFlushTimeout == null) {
-          rwt.widgets.base.Widget._initAutoFlush( rwt.widgets.base.Widget._FLUSH_PHASE_LAYOUT );
-        }
-        rwt.widgets.base.Widget._globalLayoutQueue.push(vParent);
-        vParent._isInGlobalLayoutQueue = true;
-      }
-    },
-
-    removeFromGlobalLayoutQueue : function(vParent) {
-      if (vParent._isInGlobalLayoutQueue) {
-        rwt.util.Arrays.remove(rwt.widgets.base.Widget._globalLayoutQueue, vParent);
-        delete vParent._isInGlobalLayoutQueue;
-      }
-    },
-
-    flushGlobalLayoutQueue : function() {
-      rwt.widgets.base.Widget._flushGlobalQueuesPhase = rwt.widgets.base.Widget._FLUSH_PHASE_LAYOUT;
-      var vQueue = rwt.widgets.base.Widget._globalLayoutQueue, vLength, vParent;
-      while ((vLength = vQueue.length) > 0) {
-        for (var i=0; i<vLength; i++) {
-          vParent = vQueue[i];
-          vParent._flushChildrenQueue();
-          delete vParent._isInGlobalLayoutQueue;
-        }
-        vQueue.splice(0, vLength);
-      }
-      rwt.widgets.base.Widget._globalLayoutQueue = [];
-    },
-
-    addToGlobalDisplayQueue : function(vWidget) {
-      if (!vWidget._isInGlobalDisplayQueue && vWidget._isDisplayable) {
-        if (rwt.widgets.base.Widget._autoFlushTimeout == null) {
-          rwt.widgets.base.Widget._initAutoFlush( rwt.widgets.base.Widget._FLUSH_PHASE_DISPLAY );
-        }
-        var vParent = vWidget.getParent();
-        if (vParent.isSeeable()) {
-          var vKey = vParent.toHashCode();
-          if (rwt.widgets.base.Widget._lazyGlobalDisplayQueues[vKey]) {
-            rwt.widgets.base.Widget._lazyGlobalDisplayQueues[vKey].push(vWidget);
-          } else {
-            rwt.widgets.base.Widget._lazyGlobalDisplayQueues[vKey] = [ vWidget ];
-          }
-        } else {
-          rwt.widgets.base.Widget._fastGlobalDisplayQueue.push(vWidget);
-        }
-        vWidget._isInGlobalDisplayQueue = true;
-      }
-    },
-
-    removeFromGlobalDisplayQueue : function(vWidget) {},
-
-    flushGlobalDisplayQueue : function() {
-      rwt.widgets.base.Widget._flushGlobalQueuesPhase = rwt.widgets.base.Widget._FLUSH_PHASE_DISPLAY;
-      var vKey, vLazyQueue, vWidget, vFragment;
-      var vFastQueue = rwt.widgets.base.Widget._fastGlobalDisplayQueue;
-      var vLazyQueues = rwt.widgets.base.Widget._lazyGlobalDisplayQueues;
-      // Work on fast queue
-      for (var i=0, l=vFastQueue.length; i<l; i++) {
-        vWidget = vFastQueue[i];
-        vWidget.getParent()._getTargetNode().appendChild(vWidget.getElement());
-      }
-      // Work on lazy queues: Other widgets
-      for (vKey in vLazyQueues) {
-        vLazyQueue = vLazyQueues[vKey];
-        // Speed enhancement: Choose a fairly small arbitrary value for the number
-        // of elements that should be added to the parent individually.  If more
-        // than this number of elements is to be added to the parent, we'll create
-        // a document fragment, add the elements to the document fragment, and
-        // then add the whole fragment to the parent en mass (assuming that
-        // creation of a document fragment is supported by the browser).
-        if (document.createDocumentFragment && vLazyQueue.length >= 3) {
-          // creating new document fragment
-          vFragment = document.createDocumentFragment();
-          // appending all widget elements to fragment
-          for (var i=0, l=vLazyQueue.length; i<l; i++) {
-            vWidget = vLazyQueue[i];
-            vFragment.appendChild(vWidget.getElement());
-          }
-          // append all fragment data at once to
-          // the already visible parent widget element
-          vLazyQueue[0].getParent()._getTargetNode().appendChild(vFragment);
-          for (var i=0, l=vLazyQueue.length; i<l; i++) {
-            vWidget = vLazyQueue[i];
-            vWidget._afterInsertDom();
-          }
-        } else {
-          // appending all widget elements (including previously added children)
-          // to the already visible parent widget element
-          for (var i=0, l=vLazyQueue.length; i<l; i++)
-          {
-            vWidget = vLazyQueue[i];
-            vWidget.getParent()._getTargetNode().appendChild(vWidget.getElement());
-            vWidget._afterInsertDom();
-          }
-        }
-      }
-      // Only need to do this with the lazy queues
-      // because through the recursion from rwt.widgets.base.Parent
-      // all others get also informed.
-      for (vKey in vLazyQueues) { vLazyQueue = vLazyQueues[vKey];
-        for (var i=0, l=vLazyQueue.length; i<l; i++) {
-          vWidget = vLazyQueue[i];
-          if (vWidget.getVisibility()) {
-            vWidget._afterAppear();
-          }
-          // Reset display queue flag
-          delete vWidget._isInGlobalDisplayQueue;
-        }
-        delete vLazyQueues[vKey];
-      }
-      // reset queue if it is empty. This frees some browser memory
-      if (rwt.util.Objects.isEmpty(vLazyQueues)) {
-        rwt.widgets.base.Widget._lazyGlobalDisplayQueues = {};
-      }
-      // Reset display queue flag for widgets in fastQueue
-      for (var i=0, l=vFastQueue.length; i<l; i++) {
-        delete vFastQueue[i]._isInGlobalDisplayQueue;
-      }
-      // Remove fast queue entries
-      rwt.widgets.base.Widget._fastGlobalDisplayQueue = [];
-    },
-
-    addToGlobalDisposeQueue : function(vWidget) {
-      if (!vWidget._isInGlobalDisposeQueue && !vWidget.isDisposed()) {
-        if (rwt.widgets.base.Widget._autoFlushTimeout == null) {
-          rwt.widgets.base.Widget._initAutoFlush( rwt.widgets.base.Widget._FLUSH_PHASE_DISPOSE );
-        }
-        rwt.widgets.base.Widget._globalDisposeQueue.push(vWidget);
-        vWidget._markInDispose();
-      }
-    },
-
-    flushGlobalDisposeQueue : function() {
-      rwt.widgets.base.Widget._flushGlobalQueuesPhase
-        = rwt.widgets.base.Widget._FLUSH_PHASE_DISPOSE;
-      var vQueue = rwt.widgets.base.Widget._globalDisposeQueue, vLength, vWidget;
-      while ((vLength = vQueue.length) > 0) {
-        for (var i=0; i<vLength; i++) {
-          vWidget = vQueue[i];
-          vWidget.dispose();
-          delete vWidget._isInGlobalDisposeQueue;
-        }
-        vQueue.splice(0, vLength);
-      }
-      rwt.widgets.base.Widget._globalDisposeQueue = [];
-    },
-
-    /////////////////
-    // Global Helpers
-
-    getActiveSiblingHelperIgnore : function(vIgnoreClasses, vInstance) {
-      for (var j=0; j<vIgnoreClasses.length; j++) {
-        if (vInstance instanceof vIgnoreClasses[j]) {
-          return true;
-        }
-      }
-      return false;
-    },
-
-    getActiveSiblingHelper : function(vObject, vParent, vCalc, vIgnoreClasses, vMode) {
-      if (!vIgnoreClasses) {
-        vIgnoreClasses = [];
-      }
-      var vChilds = vParent.getChildren();
-      var vPosition = vMode == null ? vChilds.indexOf(vObject) + vCalc : vMode === "first" ? 0 : vChilds.length - 1;
-      var vInstance = vChilds[vPosition];
-      while (vInstance && (!vInstance.getEnabled() || rwt.widgets.base.Widget.getActiveSiblingHelperIgnore(vIgnoreClasses, vInstance))) {
-        vPosition += vCalc;
-        vInstance = vChilds[vPosition];
-        if (!vInstance) {
-          return null;
-        }
-      }
-      return vInstance;
-    },
-
-    ///////////////////////
-    //  APPLY LAYOUT STYLES
-
-    TYPE_NULL : 0,
-    TYPE_PIXEL : 1,
-    TYPE_PERCENT : 2,
-    TYPE_AUTO : 3,
-    TYPE_FLEX : 4,
-
-    __initApplyMethods : function(members) {
-      var applyRuntime = "_renderRuntime";
-      var resetRuntime = "_resetRuntime";
-      var style = "this._style.";
-      var cssValue = "=((v==null)?0:v)+'px'";
-      var parameter = "v";
-      var properties = [
-        "left",
-        "right",
-        "top",
-        "bottom",
-        "width",
-        "height",
-        "minWidth",
-        "maxWidth",
-        "minHeight",
-        "maxHeight"
-      ];
-      var propertiesUpper = [
-        "Left",
-        "Right",
-        "Top",
-        "Bottom",
-        "Width",
-        "Height",
-        "MinWidth",
-        "MaxWidth",
-        "MinHeight",
-        "MaxHeight"
-      ];
-      var applyMargin = applyRuntime + "Margin";
-      var resetMargin = resetRuntime + "Margin";
-      var styleMargin = style + "margin";
-      for (var i=0; i<4; i++) {
-        members[applyMargin + propertiesUpper[i]]
-          = new Function(parameter, styleMargin + propertiesUpper[i] + cssValue);
-        members[resetMargin + propertiesUpper[i]]
-          = new Function(styleMargin + propertiesUpper[i] + "=''");
-      }
-      var applyPadding = applyRuntime + "Padding";
-      var resetPadding = resetRuntime + "Padding";
-      var stylePadding = style + "padding";
-      // need to use setStyleProperty to keep compatibility with enhanced cross browser borders
-      for (var i=0; i<4; i++) {
-        members[applyPadding + propertiesUpper[i]]
-          = new Function(parameter, "this.setStyleProperty('padding" + propertiesUpper[i] + "', ((v==null)?0:v)+'px')");
-        members[resetPadding + propertiesUpper[i]]
-          = new Function("this.removeStyleProperty('padding" + propertiesUpper[i] + "')");
-      }
-
-      /*
-        Use optimized method for internet explorer
-        to omit string concat and directly setup
-        the new layout property.
-         We could not use this to reset the value however.
-        It seems that is just doesn't work this way. And the
-        left/top always get priority. Tried: "", null, "auto".
-        Nothing helps.
-         Now I've switched back to the conventional method
-        to reset the value. This seems to work again.
-      */
-      for (var i=0; i<properties.length; i++) {
-        members[applyRuntime + propertiesUpper[i]]
-          = new Function(parameter, style + properties[i] + cssValue);
-        members[resetRuntime + propertiesUpper[i]] = new Function(style + properties[i] + "=''");
-      }
-    },
-
-    ///////////////////////////////////////
-    //  LAYOUT TYPE AND VALUE KEY PRE-CACHE
-
-    layoutPropertyTypes : {},
-
-    __initLayoutProperties : function(statics) {
-      var a = [
-        "width",
-        "height",
-        "minWidth",
-        "maxWidth",
-        "minHeight",
-        "maxHeight",
-        "left",
-        "right",
-        "top",
-        "bottom"
-      ];
-      for (var i=0, l=a.length, p, b, t; i<l; i++) {
-        p = a[i];
-        b = "_computed" + rwt.util.Strings.toFirstUp(p);
-        t = b + "Type";
-        statics.layoutPropertyTypes[p] = {
-          dataType    : t,
-          dataParsed  : b + "Parsed",
-          dataValue   : b + "Value",
-          typePixel   : t + "Pixel",
-          typePercent : t + "Percent",
-          typeAuto    : t + "Auto",
-          typeFlex    : t + "Flex",
-          typeNull    : t + "Null"
-        };
-      }
-    },
-
-    //////////////////
-    //  SCROLL-BLOCKER
-
-    disableScrolling : function( widget ) {
-      var el = widget._getTargetNode();
-      if( el ) {
-        rwt.html.Scroll.disableScrolling(el);
-      } else {
-        widget.addEventListener( "appear", this._blockScrollingOnAppear, widget );
-      }
-    },
-
-    enableScrolling : function( widget ) {
-      var el = widget._getTargetNode();
-      if( el ) {
-        rwt.html.Scroll.enableScrolling( el );
-      } else {
-        widget.removeEventListener( "appear", this._blockScrollingOnAppear, widget );
-      }
-    },
-
-    _blockScrollingOnAppear : function() {
-      var func = rwt.widgets.base.Widget._blockScrollingOnAppear;
-      this.removeEventListener( "appear", func, this );
-      rwt.widgets.base.Widget.disableScrolling( this );
-    }
-
-  },
-
-  properties : {
-    enabled : {
-      init : "inherit",
-      check : "Boolean",
-      inheritable : true,
-      apply : "_applyEnabled",
-      event : "changeEnabled"
-    },
-
-    /** The parent widget (the real object, no ID or something) */
-    parent : {
-      check : "rwt.widgets.base.Parent",
-      nullable : true,
-      event : "changeParent",
-      apply : "_applyParent"
-    },
-
-    /** The element node (if the widget is created, otherwise null) */
-    element : {
-      check : "Element",
-      nullable : true,
-      apply : "_applyElement",
-      event : "changeElement"
-    },
-
-    /**
-     * Toggle the visibility of a widget.
-     * Setting this property to false will hide the widget but will not remove
-     * it from the layout flow, so other widgets will not be repositioned. This
-     * is similar to the CSS property <code>visibility</code>.
-     **/
-    visibility : {
-      check : "Boolean",
-      init : true,
-      apply : "_applyVisibility",
-      event : "changeVisibility"
-    },
-
-    /**
-     * Whether the widget should be displayed.
-     * Use this property instead of visibility if the change of the visibility
-     * should remove the widget from the layout flow and force a relayout of the
-     * application. This is similar to the CSS property <code>display</code>.
-     */
-    display : {
-      check : "Boolean",
-      init : true,
-      apply : "_applyDisplay",
-      event : "changeDisplay"
-    },
-
-    /**
-     * If you switch this to true, the widget doesn't handle
-     *  events directly. It will redirect them to the parent
-     *  widget.
-     */
-    anonymous : {
-      check : "Boolean",
-      init: false,
-      event : "changeAnonymous"
-    },
-
-    /**
-     * This is used by many layout managers to control the individual horizontal alignment of this widget inside this parent.
-     *
-     *  This should be used with caution since in some cases
-     *  this might give unrespected results.
-     */
-    horizontalAlign : {
-      check : [ "left", "center", "right" ],
-      themeable : true,
-      nullable : true
-    },
-
-    /**
-     * This is used by many layout managers to control the individual vertical alignment of this widget inside this parent.
-     *
-     *  This should be used with caution since in some cases
-     *  this might give unrespected results.
-     */
-    verticalAlign :  {
-      check : [ "top", "middle", "bottom" ],
-      themeable : true,
-      nullable : true
-    },
-
-    /**
-     * Should this widget be stretched on the x-axis if the layout handler will do this?
-     *  Used by some layout handlers (rwt.widgets.base.BoxLayout, ...).
-     */
-    allowStretchX : {
-      check : "Boolean",
-      init : true
-    },
-
-    /**
-     * Should this widget be stretched on the y-axis if the layout handler will do this?
-     *  Used by some layout handlers (rwt.widgets.base.BoxLayout, ...).
-     */
-    allowStretchY : {
-      check : "Boolean",
-      init : true
-    },
-
-    /**
-     * Mapping to native style property z-index.
-     *
-     *  This should be used with caution since in some cases
-     *  this might give unrespected results.
-     */
-    zIndex : {
-      check : "Number",
-      apply : "_applyZIndex",
-      event : "changeZIndex",
-      themeable : true,
-      nullable : true,
-      init : null
-    },
-
-    /**
-     * The backgroundColor style property of the rendered widget.
-     */
-    backgroundColor : {
-      nullable : true,
-      init : null,
-      check : "Color",
-      apply : "_applyBackgroundColor",
-      event : "changeBackgroundColor",
-      themeable : true
-    },
-
-    backgroundGradient : {
-      check : "Array",
-      nullable : true,
-      init : null,
-      apply : "_applyBackgroundGradient",
-      event : "changeBackgroundGradient",
-      themeable : true
-    },
-
-    /**
-     * Syntax for shadow:
-     * [
-     *    inset, //boolean, currently not supported
-     *    offsetX, // positive or negative number
-     *    offsetY, // positive or negative number
-     *    blurRadius, // positive number or zero
-     *    spread, // positive or negative number
-     *    color, // string
-     *    opacity, // number between 0 and 1
-     * ]
-     */
-    shadow : {
-      check : "Array",
-      nullable : true,
-      init : null,
-      apply : "_applyShadow",
-      event : "changeShadow",
-      themeable : true
-    },
-
-    textShadow : {
-      check : "Array",
-      nullable : true,
-      init : null,
-      apply : "_applyTextShadow",
-      event : "changeTextShadow",
-      themeable : true
-   },
-
-    /**
-     * The color (textColor) style property of the rendered widget.
-     */
-    textColor : {
-      nullable : true,
-      init : "inherit",
-      check : "Color",
-      apply : "_applyTextColor",
-      event : "changeTextColor",
-      themeable : true,
-      inheritable : true
-    },
-
-    /**
-     * The border property describes how to paint the border on the widget.
-     */
-    border : {
-      nullable : true,
-      init : null,
-      apply : "_applyBorder",
-      event : "changeBorder",
-      check : "Border",
-      themeable : true
-    },
-
-    /** The font property describes how to paint the font on the widget. */
-    font : {
-      nullable : true,
-      init : "inherit",
-      apply : "_applyFont",
-      check : "Font",
-      event : "changeFont",
-      themeable : true,
-      inheritable : true
-    },
-
-    /**
-     * Mapping to native style property opacity.
-     *
-     *  The uniform opacity setting to be applied across an entire object. Behaves like the new CSS-3 Property.
-     *  Any values outside the range 0.0 (fully transparent) to 1.0 (fully opaque) will be clamped to this range.
-     */
-    opacity : {
-      check : "Number",
-      apply : "_applyOpacity",
-      themeable : true,
-      nullable : true,
-      init : null
-    },
-
-    /**
-     * Mapping to native style property cursor.
-     *
-     * The name of the cursor to show when the mouse pointer is over the widget.
-     * This is any valid CSS2 cursor name defined by W3C.
-     *
-     * The following values are possible crossbrowser:
-     * <ul><li>default</li>
-     * <li>crosshair</li>
-     * <li>pointer</li>
-     * <li>move</li>
-     * <li>n-resize</li>
-     * <li>ne-resize</li>
-     * <li>e-resize</li>
-     * <li>se-resize</li>
-     * <li>s-resize</li>
-     * <li>sw-resize</li>
-     * <li>w-resize</li>
-     * <li>nw-resize</li>
-     * <li>text</li>
-     * <li>wait</li>
-     * <li>help </li>
-     * </ul>
-     */
-    cursor : {
-      check : "String",
-      apply : "_applyCursor",
-      themeable : true,
-      nullable : true,
-      init : null
-    },
-
-    /**
-     * Mapping to native style property background-image.
-     *
-     *  The URI of the image file to use as background image.
-     */
-    backgroundImage : {
-      check : "String",
-      nullable : true,
-      apply : "_applyBackgroundImage",
-      themeable : true
-    },
-
-    /**
-     * Mapping to native style property background-repeat.
-     */
-    backgroundRepeat : {
-      check : [ "repeat", "repeat-x", "repeat-y", "no-repeat" ],
-      nullable : true,
-      apply : "_applyBackgroundRepeat",
-      themeable : true
-    },
-
-    /**
-     * Mapping to native style property background-position.
-     */
-    backgroundPosition : {
-      check : [ "left top", "left center", "left bottom",
-                "right top", "right center", "right bottom",
-                "center top", "center center", "center bottom" ],
-      nullable : true,
-      apply : "_applyBackgroundPosition",
-      themeable : true
-    },
-
-    /**
-     * Describes how to handle content that is too large to fit inside the widget.
-     *
-     * Overflow modes:
-     * <table>
-     * <tr><th>hidden</th><td>The content is clipped</td></tr>
-     * <tr><th>auto</th><td>Scroll bars are shown as needed</td></tr>
-     * <tr><th>scroll</th><td>Scroll bars are always shown. Even if there is enough room for the content inside the widget.</td></tr>
-     * <tr><th>scrollX</th><td>Scroll bars for the X-Axis are always shown. Even if there is enough room for the content inside the widget.</td></tr>
-     * <tr><th>scrollY</th><td>Scroll bars for the Y-Axis are always shown. Even if there is enough room for the content inside the widget.</td></tr>
-     * </table>
-     */
-    overflow : {
-      check : ["hidden", "auto", "scroll" ,"scrollX", "scrollY"],
-      nullable : true,
-      apply : "_applyOverflow",
-      event : "changeOverflow",
-      themeable : true,
-      init : null
-    },
-
-    /**
-     * Enables/disables overflow on the outer element for enhanced borders.
-     */
-    containerOverflow : {
-      check : "Boolean",
-      nullable : false,
-      apply : "_applyContainerOverflow",
-      themeable : true,
-      init : true
-    },
-
-    /** Clipping of the widget (left) */
-    clipLeft : {
-      check : "Integer",
-      apply : "_applyClip",
-      themeable : true,
-      nullable : true
-    },
-
-    /** Clipping of the widget (top) */
-    clipTop : {
-      check : "Integer",
-      apply : "_applyClip",
-      themeable : true,
-      nullable : true
-    },
-
-    /** Clipping of the widget (width) */
-    clipWidth : {
-      check : "Integer",
-      apply : "_applyClip",
-      themeable : true,
-      nullable : true
-    },
-
-    /** Clipping of the widget (height) */
-    clipHeight : {
-      check : "Integer",
-      apply : "_applyClip",
-      themeable : true,
-      nullable : true
-    },
-
-    /**
-     * Set this to a positive value makes the widget able to get the focus.
-     * It even is reachable through the usage of the tab-key.
-     *
-     * Widgets with the same tabIndex are handled through there position
-     * in the document.
-     *
-     * Setting the tabIndex to -1 deactivate focus handling for the widget.
-     */
-    tabIndex : {
-      check : "Integer",
-      nullable : true,
-      init : null,
-      apply : "_applyTabIndex",
-      event : "changeTabIndex"
-    },
-
-    /** If the focus outline should be hidden. */
-    hideFocus : {
-      check : "Boolean",
-      init : true,
-      apply : "_applyHideFocus",
-      themeable : true
-    },
-
-    /** Use DOM focussing (focus() and blur() methods of DOM nodes) */
-    enableElementFocus : {
-      check : "Boolean",
-      init : true
-    },
-
-    /**
-     * Handle focus state of this widget.
-     *
-     *  someWidget.setFocused(true) set the current focus to this widget.
-     *  someWidget.setFocused(false) remove the current focus and leave it blank.
-     *
-     *  Normally you didn't need to set this directly.
-     */
-    focused : {
-      check : "Boolean",
-      init : false,
-      apply : "_applyFocused",
-      event : "changeFocused"
-    },
-
-    /** Toggle the possibility to select the element of this widget. */
-    selectable : {
-      check : "Boolean",
-      init : null,
-      nullable : true,
-      apply : "_applySelectable"
-    },
-
-    /** Contains the tooltip object connected to the widget. */
-    toolTip : {
-      check : "rwt.widgets.base.ToolTip",
-      nullable : true,
-      event: "changeToolTip"
-    },
-
-    /** Contains the context menu object connected to the widget. (Need real implementation) */
-    // RAP : remove check, allow other menu implementation
-    contextMenu : {
-      nullable : true,
-      event: "changeContextMenu"
-    },
-
-    /** Capture all events and map them to this widget */
-    capture : {
-      check : "Boolean",
-      init : false,
-      apply : "_applyCapture",
-      event : "changeCapture"
-    },
-
-    /** Contains the support drop types for drag and drop support */
-    dropDataTypes : {
-      nullable : true,
-      dispose : true
-    },
-
-    /** A command called if the widget should be excecuted (a placeholder for buttons, ...) */
-    command : {
-      check : "qx.client.Command",
-      nullable : true,
-      apply : "_applyCommand"
-    },
-
-    /** Appearance of the widget */
-    appearance : {
-      check : "String",
-      init : "widget",
-      apply : "_applyAppearance",
-      event : "changeAppearance"
-    },
-
-    /*
-     * The method which this.supportsDrop() calls to determine whether the
-     * widget supports a particular drop operation.
-     *
-     * This is a property so that a mixin can modify it.  Otherwise, the mixin
-     * would have to override the supportsDrop() method, requiring the mixin
-     * to be applied with patch() instead of include().  All normal mixins
-     * should be able to be simply include()ed, and not have to be patch()ed.
-     *
-     * If this property is null, then the default supportsDrop() action
-     * defined herein shall be used.
-     */
-    supportsDropMethod : {
-      check : "Function",
-      nullable : true,
-      init : null
-    },
-
-    /** Margin of the widget (top) */
-    marginTop : {
-      check : "Number",
-      apply : "_applyMarginTop",
-      nullable : true,
-      themeable : true
-    },
-
-    /** Margin of the widget (right) */
-    marginRight : {
-      check : "Number",
-      apply : "_applyMarginRight",
-      nullable : true,
-      themeable : true
-    },
-
-    /** Margin of the widget (bottom) */
-    marginBottom : {
-      check : "Number",
-      apply : "_applyMarginBottom",
-      nullable : true,
-      themeable : true
-    },
-
-    /** Margin of the widget (left) */
-    marginLeft : {
-      check : "Number",
-      apply : "_applyMarginLeft",
-      nullable : true,
-      themeable : true
-    },
-
-    /** Padding of the widget (top) */
-    paddingTop : {
-      check : "Number",
-      apply : "_applyPaddingTop",
-      nullable : true,
-      themeable : true
-    },
-
-    /** Padding of the widget (right) */
-    paddingRight : {
-      check : "Number",
-      apply : "_applyPaddingRight",
-      nullable : true,
-      themeable : true
-    },
-
-    /** Padding of the widget (bottom) */
-    paddingBottom : {
-      check : "Number",
-      apply : "_applyPaddingBottom",
-      nullable : true,
-      themeable : true
-    },
-
-    /** Padding of the widget (left) */
-    paddingLeft : {
-      check : "Number",
-      apply : "_applyPaddingLeft",
-      nullable : true,
-      themeable : true
-    },
-
-    /**
-     * The distance from the outer left border to the parent left area edge.
-     *
-     *  You could only set two of the three horizonal dimension properties (boxLeft, boxRight, boxWidth)
-     *  at the same time. This will be omitted during the setup of the new third value. To reset a value
-     *  you didn't want anymore, set it to null.
-     */
-    left : {
-      apply : "_applyLeft",
-      event : "changeLeft",
-      nullable : true,
-      themeable : true,
-      init : null
-    },
-
-    /**
-     * The distance from the outer right border to the parent right area edge.
-     *
-     *  You could only set two of the three horizonal dimension properties (boxLeft, boxRight, boxWidth)
-     *  at the same time. This will be omitted during the setup of the new third value. To reset a value
-     *  you didn't want anymore, set it to null.
-     */
-    right : {
-      apply : "_applyRight",
-      event : "changeRight",
-      nullable : true,
-      themeable : true,
-      init : null
-    },
-
-    /**
-     * The width of the box (including padding and border).
-     *
-     *  You could only set two of the three horizonal dimension properties (boxLeft, boxRight, boxWidth)
-     *  at the same time. This will be omitted during the setup of the new third value. To reset a value
-     *  you didn't want anymore, set it to null.
-     */
-    width : {
-      apply : "_applyWidth",
-      event : "changeWidth",
-      nullable : true,
-      themeable : true,
-      init : null
-    },
-
-    /**
-     * The minimum width of the box (including padding and border).
-     *
-     *  Set this to omit the shrinking of the box width under this value.
-     */
-    minWidth : {
-      apply : "_applyMinWidth",
-      event : "changeMinWidth",
-      nullable : true,
-      themeable : true,
-      init : null
-    },
-
-    /**
-     * The maximum width of the box (including padding and border).
-     *
-     *  Set this to omit the expanding of the box width above this value.
-     */
-    maxWidth : {
-      apply : "_applyMaxWidth",
-      event : "changeMaxWidth",
-      nullable : true,
-      themeable : true,
-      init : null
-    },
-
-    /**
-     * The distance from the outer top border to the parent top area edge.
-     *
-     *  You could only set two of the three vertical dimension properties (boxTop, boxBottom, boxHeight)
-     *  at the same time. This will be omitted during the setup of the new third value. To reset a value
-     *  you didn't want anymore, set it to null.
-     */
-    top : {
-      apply : "_applyTop",
-      event : "changeTop",
-      nullable : true,
-      themeable : true,
-      init : null
-    },
-
-    /**
-     * The distance from the outer bottom border to the parent bottom area edge.
-     *
-     *  You could only set two of the three vertical dimension properties (boxTop, boxBottom, boxHeight)
-     *  at the same time. This will be omitted during the setup of the new third value. To reset a value
-     *  you didn't want anymore, set it to null.
-     */
-    bottom : {
-      apply : "_applyBottom",
-      event : "changeBottom",
-      nullable : true,
-      themeable : true,
-      init : null
-    },
-
-    /**
-     * The height of the box (including padding and border).
-     *
-     *  You could only set two of the three vertical dimension properties (boxTop, boxBottom, boxHeight)
-     *  at the same time. This will be omitted during the setup of the new third value. To reset a value
-     *  you didn't want anymore, set it to null.
-     */
-    height : {
-      apply : "_applyHeight",
-      event : "changeHeight",
-      nullable : true,
-      themeable : true,
-      init : null
-    },
-
-    /**
-     * The minimum height of the box (including padding and border).
-     *
-     *  Set this to omit the shrinking of the box height under this value.
-     */
-    minHeight : {
-      apply : "_applyMinHeight",
-      event : "changeMinHeight",
-      nullable : true,
-      themeable : true,
-      init : null
-    },
-
-    /**
-     * The maximum height of the box (including padding and border).
-     *
-     *  Set this to omit the expanding of the box height above this value.
-     */
-    maxHeight : {
-      apply : "_applyMaxHeight",
-      event : "changeMaxHeight",
-      nullable : true,
-      themeable : true,
-      init : null
-    },
-
-    location : { group : [ "left", "top" ], themeable : true },
-    dimension : { group : [ "width", "height" ], themeable : true },
-    space : { group : [ "left", "width", "top", "height" ], themeable : true },
-
-    edge : {
-      group : [ "top", "right", "bottom", "left" ],
-      themeable : true,
-      mode  : "shorthand"
-    },
-
-    padding : {
-      group : [ "paddingTop", "paddingRight", "paddingBottom", "paddingLeft" ],
-      mode  : "shorthand",
-      themeable : true
-    },
-
-    /**
-     * The 'margin' property is a shorthand property for setting 'marginTop',
-     * 'marginRight', 'marginBottom' and 'marginLeft' at the same time.
-     *
-     * If four length values are specified they apply to top, right, bottom and
-     * left respectively. If there is only one value, it applies to all sides,
-     * if there are two or three, the missing values are taken from the opposite side.
-     */
-    margin : {
-      group : [ "marginTop", "marginRight", "marginBottom", "marginLeft" ],
-      mode  : "shorthand",
-      themeable : true
-    },
-
-    heights : { group : [ "minHeight", "height", "maxHeight" ], themeable : true },
-    widths : { group : [ "minWidth", "width", "maxWidth" ], themeable : true },
-
-    /**
-     * The 'align' property is a shorthand property for setting 'horizontalAlign',
-     * and 'verticalAlign' at the same time.
-     */
-    align : { group : [ "horizontalAlign", "verticalAlign" ], themeable : true },
-    clipLocation : { group : [ "clipLeft", "clipTop" ] },
-    clipDimension : { group : [ "clipWidth", "clipHeight" ] },
-    clip : { group : [ "clipLeft", "clipTop", "clipWidth", "clipHeight" ] },
-
-    innerWidth : {
-      _cached      : true,
-      defaultValue : null
-    },
-
-    innerHeight : {
-      _cached      : true,
-      defaultValue : null
-    },
-
-    boxWidth : {
-      _cached      : true,
-      defaultValue : null
-    },
-
-    boxHeight : {
-      _cached      : true,
-      defaultValue : null
-    },
-
-    outerWidth : {
-      _cached      : true,
-      defaultValue : null
-    },
-
-    outerHeight : {
-      _cached      : true,
-      defaultValue : null
-    },
-
-    frameWidth : {
-      _cached           : true,
-      defaultValue      : null,
-      addToQueueRuntime : true
-    },
-
-    frameHeight : {
-      _cached           : true,
-      defaultValue      : null,
-      addToQueueRuntime : true
-    },
-
-    preferredInnerWidth : {
-      _cached           : true,
-      defaultValue      : null,
-      addToQueueRuntime : true
-    },
-
-    preferredInnerHeight : {
-      _cached           : true,
-      defaultValue      : null,
-      addToQueueRuntime : true
-    },
-
-    preferredBoxWidth : {
-      _cached      : true,
-      defaultValue : null
-    },
-
-    preferredBoxHeight : {
-      _cached      : true,
-      defaultValue : null
-    },
-
-    hasPercentX : {
-      _cached      : true,
-      defaultValue : false
-    },
-
-    hasPercentY : {
-      _cached      : true,
-      defaultValue : false
-    },
-
-    hasAutoX : {
-      _cached      : true,
-      defaultValue : false
-    },
-
-    hasAutoY : {
-      _cached      : true,
-      defaultValue : false
-    },
-
-    hasFlexX : {
-      _cached      : true,
-      defaultValue : false
-    },
-
-    hasFlexY : {
-      _cached      : true,
-      defaultValue : false
-    }
-  },
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members : {
-    _computedLeftValue : null,
-    _computedLeftParsed : null,
-    _computedLeftType : null,
-    _computedLeftTypeNull : true,
-    _computedLeftTypePixel : false,
-    _computedLeftTypePercent : false,
-    _computedLeftTypeAuto : false,
-    _computedLeftTypeFlex : false,
-    _computedRightValue : null,
-    _computedRightParsed : null,
-    _computedRightType : null,
-    _computedRightTypeNull : true,
-    _computedRightTypePixel : false,
-    _computedRightTypePercent : false,
-    _computedRightTypeAuto : false,
-    _computedRightTypeFlex : false,
-    _computedTopValue : null,
-    _computedTopParsed : null,
-    _computedTopType : null,
-    _computedTopTypeNull : true,
-    _computedTopTypePixel : false,
-    _computedTopTypePercent : false,
-    _computedTopTypeAuto : false,
-    _computedTopTypeFlex : false,
-    _computedBottomValue : null,
-    _computedBottomParsed : null,
-    _computedBottomType : null,
-    _computedBottomTypeNull : true,
-    _computedBottomTypePixel : false,
-    _computedBottomTypePercent : false,
-    _computedBottomTypeAuto : false,
-    _computedBottomTypeFlex : false,
-    _computedWidthValue : null,
-    _computedWidthParsed : null,
-    _computedWidthType : null,
-    _computedWidthTypeNull : true,
-    _computedWidthTypePixel : false,
-    _computedWidthTypePercent : false,
-    _computedWidthTypeAuto : false,
-    _computedWidthTypeFlex : false,
-    _computedMinWidthValue : null,
-    _computedMinWidthParsed : null,
-    _computedMinWidthType : null,
-    _computedMinWidthTypeNull : true,
-    _computedMinWidthTypePixel : false,
-    _computedMinWidthTypePercent : false,
-    _computedMinWidthTypeAuto : false,
-    _computedMinWidthTypeFlex : false,
-    _computedMaxWidthValue : null,
-    _computedMaxWidthParsed : null,
-    _computedMaxWidthType : null,
-    _computedMaxWidthTypeNull : true,
-    _computedMaxWidthTypePixel : false,
-    _computedMaxWidthTypePercent : false,
-    _computedMaxWidthTypeAuto : false,
-    _computedMaxWidthTypeFlex : false,
-    _computedHeightValue : null,
-    _computedHeightParsed : null,
-    _computedHeightType : null,
-    _computedHeightTypeNull : true,
-    _computedHeightTypePixel : false,
-    _computedHeightTypePercent : false,
-    _computedHeightTypeAuto : false,
-    _computedHeightTypeFlex : false,
-    _computedMinHeightValue : null,
-    _computedMinHeightParsed : null,
-    _computedMinHeightType : null,
-    _computedMinHeightTypeNull : true,
-    _computedMinHeightTypePixel : false,
-    _computedMinHeightTypePercent : false,
-    _computedMinHeightTypeAuto : false,
-    _computedMinHeightTypeFlex : false,
-    _computedMaxHeightValue : null,
-    _computedMaxHeightParsed : null,
-    _computedMaxHeightType : null,
-    _computedMaxHeightTypeNull : true,
-    _computedMaxHeightTypePixel : false,
-    _computedMaxHeightTypePercent : false,
-    _computedMaxHeightTypeAuto : false,
-    _computedMaxHeightTypeFlex : false,
-    _customVariant : null,
-
-    ///////////////
-    // apply layout
-
-    _applyLeft : function(value, old) {
-      this._unitDetectionPixelPercent("left", value);
-      this.addToQueue("left");
-    },
-
-    _applyRight : function(value, old) {
-      this._unitDetectionPixelPercent("right", value);
-      this.addToQueue("right");
-    },
-
-    _applyTop : function(value, old) {
-      this._unitDetectionPixelPercent("top", value);
-      this.addToQueue("top");
-    },
-
-    _applyBottom : function(value, old) {
-      this._unitDetectionPixelPercent("bottom", value);
-      this.addToQueue("bottom");
-    },
-
-    _applyWidth : function(value, old) {
-      this._unitDetectionPixelPercentAutoFlex("width", value);
-      this.addToQueue("width");
-    },
-
-    _applyMinWidth : function(value, old) {
-      this._unitDetectionPixelPercentAuto("minWidth", value);
-      this.addToQueue("minWidth");
-    },
-
-    _applyMaxWidth : function(value, old) {
-      this._unitDetectionPixelPercentAuto("maxWidth", value);
-      this.addToQueue("maxWidth");
-    },
-
-    _applyHeight : function(value, old) {
-      this._unitDetectionPixelPercentAutoFlex("height", value);
-      this.addToQueue("height");
-    },
-
-    _applyMinHeight : function(value, old) {
-      this._unitDetectionPixelPercentAuto("minHeight", value);
-      this.addToQueue("minHeight");
-    },
-
-    _applyMaxHeight : function(value, old) {
-      this._unitDetectionPixelPercentAuto("maxHeight", value);
-      this.addToQueue("maxHeight");
-    },
-
-    ////////////////////
-    // CHILDREN HANDLING
-
-    // NOTE: Implemented in Parent.js
-    getChildren : rwt.util.Functions.returnNull,
-    getChildrenLength : rwt.util.Functions.returnZero,
-    hasChildren : rwt.util.Functions.returnFalse,
-    isEmpty : rwt.util.Functions.returnTrue,
-    indexOf : rwt.util.Functions.returnNegativeIndex,
-    contains : rwt.util.Functions.returnFalse,
-    getVisibleChildren : rwt.util.Functions.returnNull,
-    getVisibleChildrenLength : rwt.util.Functions.returnZero,
-    hasVisibleChildren : rwt.util.Functions.returnFalse,
-    isVisibleEmpty : rwt.util.Functions.returnTrue,
-
-    /////////////////
-    //  CORE MODIFIER
-
-    _hasParent : false,
-    _isDisplayable : false,
-
-    isDisplayable : function() {
-      return this._isDisplayable;
-    },
-
-    _checkParent : function(value, old) {
-      if (this.contains(value)) {
-        throw new Error("Could not insert myself into a child " + value + "!");
-      }
-
-      return value;
-    },
-
-    _applyParent : function(value, old) {
-      if (old) {
-        var vOldIndex = old.getChildren().indexOf(this);
-        // Reset cached dimension and location values
-        this._computedWidthValue = null;
-        this._computedMinWidthValue = null;
-        this._computedMaxWidthValue = null;
-        this._computedLeftValue = null;
-        this._computedRightValue = null;
-        this._computedHeightValue = null;
-        this._computedMinHeightValue = null;
-        this._computedMaxHeightValue = null;
-        this._computedTopValue = null;
-        this._computedBottomValue = null;
-        this._cachedBoxWidth = null;
-        this._cachedInnerWidth = null;
-        this._cachedOuterWidth = null;
-        this._cachedBoxHeight = null;
-        this._cachedInnerHeight = null;
-        this._cachedOuterHeight = null;
-        // Finally remove from children array
-        rwt.util.Arrays.removeAt(old.getChildren(), vOldIndex);
-        // Invalidate visible children cache
-        old._invalidateVisibleChildren();
-        // Remove child from old parent's children queue
-        old._removeChildFromChildrenQueue(this);
-        // The layouter adds some layout jobs
-        old.getLayoutImpl().updateChildrenOnRemoveChild(this, vOldIndex);
-        // Inform job queue
-        old.addToJobQueue("removeChild");
-        // Invalidate inner preferred dimensions
-        old._invalidatePreferredInnerDimensions();
-        // Store old parent (needed later by _handleDisplayable)
-        this._oldParent = old;
-      }
-      if (value) {
-        this._hasParent = true;
-        if (typeof this._insertIndex == "number") {
-          rwt.util.Arrays.insertAt(value.getChildren(), this, this._insertIndex);
-          delete this._insertIndex;
-        } else {
-          value.getChildren().push(this);
-        }
-      } else {
-        this._hasParent = false;
-      }
-      rwt.qx.Property.refresh(this);
-      return this._handleDisplayable("parent");
-    },
-
-    _applyDisplay : function(value, old) {
-      return this._handleDisplayable("display");
-    },
-
-    //////////////////////
-    // DISPLAYBLE HANDLING
-
-    _handleDisplayable : function( vHint ) {
-      var vDisplayable = this._computeDisplayable();
-      if(    this._isDisplayable == vDisplayable
-          && !( vDisplayable && vHint == "parent" ) )
-      {
-        return true;
-      }
-      this._isDisplayable = vDisplayable;
-      var vParent = this.getParent();
-      if( vParent ) {
-        vParent._invalidateVisibleChildren();
-        vParent._invalidatePreferredInnerDimensions();
-      }
-      // Remove old parent's elements from DOM and delete old parent
-      if( vHint && this._oldParent && this._oldParent._initialLayoutDone ) {
-        var elem = this.getElement();
-        if( elem ) {
-          if( this.getVisibility() ) {
-            this._beforeDisappear();
-          }
-          try {
-            this._oldParent._getTargetNode().removeChild( elem );
-          } catch( ex ) {
-            // ignore exception
-          }
-          this._afterRemoveDom();
-          if ( this.getVisibility() ) {
-            this._afterDisappear();
-          }
-        }
-        delete this._oldParent;
-      } // old parent end
-      if( vDisplayable ) {
-        // The layouter added some layout jobs
-        if( vParent._initialLayoutDone ) {
-          var index = vParent.getChildren().indexOf( this );
-          vParent.getLayoutImpl().updateChildrenOnAddChild( this, index );
-          vParent.addToJobQueue( "addChild" );
-        }
-        // Add to parents children queue
-        // (indirectly with a new layout request)
-        this.addToLayoutChanges( "initial" );
-        // Add to custom queues
-        this.addToCustomQueues( vHint );
-        if( this.getVisibility() ) {
-          this._beforeAppear();
-        }
-        if( !this._isCreated ) {
-          rwt.widgets.base.Widget.addToGlobalElementQueue(this);
-        }
-        rwt.widgets.base.Widget.addToGlobalStateQueue( this );
-        if(!rwt.util.Objects.isEmpty(this._jobQueue ) ) {
-          rwt.widgets.base.Widget.addToGlobalJobQueue( this );
-        }
-        if( !rwt.util.Objects.isEmpty( this._childrenQueue ) ) {
-          rwt.widgets.base.Widget.addToGlobalLayoutQueue( this );
-        }
-        // displayable end
-      } else {
-        rwt.widgets.base.Widget.removeFromGlobalElementQueue( this );
-        rwt.widgets.base.Widget.removeFromGlobalStateQueue( this );
-        rwt.widgets.base.Widget.removeFromGlobalJobQueue( this );
-        rwt.widgets.base.Widget.removeFromGlobalLayoutQueue( this );
-        this.removeFromCustomQueues( vHint );
-        // only remove when itself want to be removed
-        // through a property change - not a parent signal
-        if( vParent && vHint ) {
-          if( this.getVisibility() ) {
-            this._beforeDisappear();
-          }
-          if( vParent._initialLayoutDone && this._initialLayoutDone ) {
-            var index = vParent.getChildren().indexOf( this );
-            vParent.getLayoutImpl().updateChildrenOnRemoveChild( this, index );
-            vParent.addToJobQueue( "removeChild" );
-            var parentNode = rwt.client.Client.isMshtml() ? this.getElement().parentElement : this.getElement().parentNode;
-            if( parentNode ){
-              parentNode.removeChild( this.getElement() );
-              this._afterRemoveDom();
-            }
-          }
-          vParent._removeChildFromChildrenQueue( this );
-          if( this.getVisibility() ) {
-            this._afterDisappear();
-          }
-        }
-      } // not displayable end
-      this._handleDisplayableCustom( vDisplayable, vParent, vHint );
-      return true;
-    },
-
-    addToCustomQueues : rwt.util.Functions.returnTrue,
-    removeFromCustomQueues : rwt.util.Functions.returnTrue,
-    _handleDisplayableCustom : rwt.util.Functions.returnTrue,
-
-    _computeDisplayable : function() {
-      return this.getDisplay() && this.getParent() && this.getParent()._isDisplayable ? true : false;
-    },
-
-    _beforeAppear : function() {
-      this.dispatchSimpleEvent( "beforeAppear" );
-    },
-
-    _afterAppear : function() {
-      this._isSeeable = true;
-      this.dispatchSimpleEvent( "appear" );
-    },
-
-    _ieFixLayoutOnAppear : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function() {
-        var width = this._style.width;
-        var height = this._style.height;
-        this._style.width = "0px";
-        this._style.height = "0px";
-        this._style.width = width;
-        this._style.height = height;
-        if( this._innerStyle ) {
-          width = this._innerStyle.width;
-          height = this._innerStyle.height;
-          this._innerStyle.width = "0px";
-          this._innerStyle.height = "0px";
-          this._innerStyle.width = width;
-          this._innerStyle.height = height;
-        }
-      },
-      "default" : rwt.util.Functions.returnTrue
-    } ),
-
-    _beforeDisappear : function() {
-      // Remove any hover/pressed styles
-      this.removeState("over");
-
-      if (rwt.qx.Class.isDefined("rwt.widgets.base.Button"))
-      {
-        this.removeState("pressed");
-        this.removeState("abandoned");
-      }
-
-      this.dispatchSimpleEvent( "beforeDisappear" );
-    },
-
-    _afterDisappear : function() {
-      this._isSeeable = false;
-      this.dispatchSimpleEvent("disappear");
-    },
-
-    _isSeeable : false,
-    _isInDom : false,
-
-    /**
-     * If the widget is currently seeable which means that it:
-     *
-     * * has a also seeable parent
-     * * visibility is true
-     * * display is true
-     *
-     * @type member
-     * @return {boolean} TODOC
-     */
-    isSeeable : function() {
-      return this._isSeeable;
-    },
-
-    isInDom : function() {
-      return this._isInDom;
-    },
-
-    isAppearRelevant : function() {
-      return this.getVisibility() && this._isDisplayable;
-    },
-
-    _afterInsertDom : function() {
-      this._isInDom = true;
-      this.dispatchSimpleEvent( "insertDom" );
-    },
-
-    _afterRemoveDom : function() {
-      this._isInDom = false;
-    },
-
-    //////////////////////
-    // VISIBILITY HANDLING
-
-    _applyVisibility : function(value, old) {
-      if (value) {
-        if ( this._isDisplayable && ( this._isCreated || this._isInGlobalElementQueue ) ) {
-          this._beforeAppear();
-        }
-        this.removeStyleProperty("display");
-        if ( this._isDisplayable && this._isCreated ) {
-          this._afterAppear();
-          this._ieFixLayoutOnAppear();
-        }
-      } else {
-        if ( this._isDisplayable && this._isCreated ) {
-          this._beforeDisappear();
-        }
-        this.setStyleProperty("display", "none");
-        if ( this._isDisplayable && this._isCreated ) {
-          this._afterDisappear();
-        }
-      }
-    },
-
-    show : function() {
-      this.setVisibility(true);
-      this.setDisplay(true);
-    },
-
-    hide : function() {
-      this.setVisibility(false);
-    },
-
-    destroy : function () {
-      if( this.getParent() === null || !this.getParent()._isInGlobalDisposeQueue ) {
-        if( this.dispatchSimpleEvent( "destroy" ) ) {
-          this.setParent( null );
-          rwt.widgets.base.Widget.addToGlobalDisposeQueue( this );
-        }
-      }
-    },
-
-    _markInDispose : function() {
-      this._isInGlobalDisposeQueue = true;
-    },
-
-    ///////////////////////
-    // DOM ELEMENT HANDLING
-
-    _isCreated : false,
-    _element : null,
-    _targetNode : null,
-    _style : null,
-    _innerStyle : null,
-
-    _getTargetNode : function() {
-      return this._targetNode || this._element;
-    },
-
-    addToDocument : function() {
-      rwt.widgets.base.ClientDocument.getInstance().add(this);
-    },
-
-    /**
-     * Check if the element is already available.
-     */
-    isCreated : function() {
-      return this._isCreated;
-    },
-
-    _createElementImpl : function() {
-      this.setElement(this.getTopLevelWidget().getDocumentElement().createElement("div"));
-    },
-
-    _applyElement : function(value, old) {
-      this._isCreated = value != null;
-      if (old) {
-        // reset reference to widget instance
-        old.rwtWidget = null;
-      }
-      if (value) {
-        // add reference to widget instance
-        value.rwtWidget = this;
-        // make absolute
-        value.style.position = "absolute";
-        // link element and style reference
-        this._element = value;
-        this._style = value.style;
-        if( this._targetNodeEnabled ) {
-          this.prepareEnhancedBorder( true );
-        }
-        this.initBackgroundColor();
-        this._applyStyleProperties(value);
-        this._applyHtmlProperties(value);
-        this._applyHtmlAttributes(value);
-        this._applyElementData(value);
-        // send out create event
-        this.dispatchSimpleEvent( "create" );
-        // add created instances to state queue
-        this.addToStateQueue();
-      } else {
-        this._element = this._style = null;
-      }
-    },
-
-    ////////////
-    // JOB QUEUE
-
-    addToJobQueue : function(p){
-      if (this._hasParent) {
-        rwt.widgets.base.Widget.addToGlobalJobQueue(this);
-      }
-      if (!this._jobQueue) {
-        this._jobQueue = {};
-      }
-      this._jobQueue[p] = true;
-      return true;
-    },
-
-    _flushJobQueue : function(q) {
-      // 1. Pre checks
-      var vQueue = this._jobQueue;
-      var vParent = this.getParent();
-      if (!vParent || rwt.util.Objects.isEmpty(vQueue)) {
-        return;
-      }
-      var vLayoutImpl = this instanceof rwt.widgets.base.Parent ? this.getLayoutImpl() : null;
-      if (vLayoutImpl) {
-        vLayoutImpl.updateSelfOnJobQueueFlush(vQueue);
-      }
-      // 2. Recompute dimensions
-      var vFlushParentJobQueue = false;
-      var vRecomputeOuterWidth = vQueue.marginLeft || vQueue.marginRight;
-      var vRecomputeOuterHeight = vQueue.marginTop || vQueue.marginBottom;
-      var vRecomputeInnerWidth = vQueue.frameWidth;
-      var vRecomputeInnerHeight = vQueue.frameHeight;
-      var vRecomputeParentPreferredInnerWidth
-        = (vQueue.frameWidth || vQueue.preferredInnerWidth) && this._recomputePreferredBoxWidth();
-      var vRecomputeParentPreferredInnerHeight
-        = (vQueue.frameHeight || vQueue.preferredInnerHeight) && this._recomputePreferredBoxHeight();
-      if (vRecomputeParentPreferredInnerWidth) {
-        var vPref = this.getPreferredBoxWidth();
-        if (this._computedWidthTypeAuto) {
-          this._computedWidthValue = vPref;
-          vQueue.width = true;
-        }
-        if (this._computedMinWidthTypeAuto) {
-          this._computedMinWidthValue = vPref;
-          vQueue.minWidth = true;
-        }
-        if (this._computedMaxWidthTypeAuto) {
-          this._computedMaxWidthValue = vPref;
-          vQueue.maxWidth = true;
-        }
-      }
-      if (vRecomputeParentPreferredInnerHeight) {
-        var vPref = this.getPreferredBoxHeight();
-        if (this._computedHeightTypeAuto) {
-          this._computedHeightValue = vPref;
-          vQueue.height = true;
-        }
-        if (this._computedMinHeightTypeAuto) {
-          this._computedMinHeightValue = vPref;
-          vQueue.minHeight = true;
-        }
-        if (this._computedMaxHeightTypeAuto) {
-          this._computedMaxHeightValue = vPref;
-          vQueue.maxHeight = true;
-        }
-      }
-      if ((vQueue.width || vQueue.minWidth || vQueue.maxWidth || vQueue.left || vQueue.right) && this._recomputeBoxWidth()) {
-        vRecomputeOuterWidth = vRecomputeInnerWidth = true;
-      }
-      if ((vQueue.height || vQueue.minHeight || vQueue.maxHeight || vQueue.top || vQueue.bottom) && this._recomputeBoxHeight()) {
-        vRecomputeOuterHeight = vRecomputeInnerHeight = true;
-      }
-      // 3. Signals to parent widgets
-      if ((vRecomputeOuterWidth && this._recomputeOuterWidth()) || vRecomputeParentPreferredInnerWidth) {
-        vParent._invalidatePreferredInnerWidth();
-        vParent.getLayoutImpl().updateSelfOnChildOuterWidthChange(this);
-        vFlushParentJobQueue = true;
-      }
-      if ((vRecomputeOuterHeight && this._recomputeOuterHeight()) || vRecomputeParentPreferredInnerHeight) {
-        vParent._invalidatePreferredInnerHeight();
-        vParent.getLayoutImpl().updateSelfOnChildOuterHeightChange(this);
-        vFlushParentJobQueue = true;
-      }
-      if (vFlushParentJobQueue) {
-        vParent._flushJobQueue();
-      }
-      //  4. Add layout jobs
-      // add to layout queue
-      vParent._addChildToChildrenQueue(this);
-      // convert jobs to layout jobs
-      for (var i in vQueue) {
-        this._layoutChanges[i] = true;
-      }
-      // 5. Signals to children
-      // inform children about padding change
-      if (this instanceof rwt.widgets.base.Parent && (vQueue.paddingLeft || vQueue.paddingRight || vQueue.paddingTop || vQueue.paddingBottom)) {
-        var ch = this.getChildren(), chl = ch.length;
-        if (vQueue.paddingLeft) {
-          for (var i=0; i<chl; i++) {
-            ch[i].addToLayoutChanges("parentPaddingLeft");
-          }
-        }
-        if (vQueue.paddingRight) {
-          for (var i=0; i<chl; i++) {
-            ch[i].addToLayoutChanges("parentPaddingRight");
-          }
-        }
-        if (vQueue.paddingTop) {
-          for (var i=0; i<chl; i++) {
-            ch[i].addToLayoutChanges("parentPaddingTop");
-          }
-        }
-        if (vQueue.paddingBottom) {
-          for (var i=0; i<chl; i++) {
-            ch[i].addToLayoutChanges("parentPaddingBottom");
-          }
-        }
-      }
-      if (vRecomputeInnerWidth) {
-        this._recomputeInnerWidth();
-      }
-      if (vRecomputeInnerHeight) {
-        this._recomputeInnerHeight();
-      }
-      if (this._initialLayoutDone) {
-        if (vLayoutImpl) {
-          vLayoutImpl.updateChildrenOnJobQueueFlush(vQueue);
-        }
-      }
-      // 5. Cleanup
-      delete this._jobQueue;
-    },
-
-    ////////////////////////////////////////////
-    // METHODS TO GIVE THE LAYOUTERS INFORMATION
-
-    _isWidthEssential : rwt.util.Functions.returnTrue,
-    _isHeightEssential : rwt.util.Functions.returnTrue,
-
-    _computeBoxWidthFallback : function() {
-      return 0;
-    },
-
-    _computeBoxHeightFallback : function() {
-      return 0;
-    },
-
-    _computeBoxWidth : function() {
-      var vLayoutImpl = this.getParent().getLayoutImpl();
-      return Math.max(0, rwt.util.Numbers.limit(vLayoutImpl.computeChildBoxWidth(this), this.getMinWidthValue(), this.getMaxWidthValue()));
-    },
-
-    _computeBoxHeight : function() {
-      var vLayoutImpl = this.getParent().getLayoutImpl();
-      return Math.max(0, rwt.util.Numbers.limit(vLayoutImpl.computeChildBoxHeight(this), this.getMinHeightValue(), this.getMaxHeightValue()));
-    },
-
-    _computeOuterWidth : function() {
-      return Math.max(0, (this.getMarginLeft() + this.getBoxWidth() + this.getMarginRight()));
-    },
-
-    _computeOuterHeight : function() {
-      return Math.max(0, (this.getMarginTop() + this.getBoxHeight() + this.getMarginBottom()));
-    },
-
-    _computeInnerWidth : function() {
-      return Math.max(0, this.getBoxWidth() - this.getFrameWidth());
-    },
-
-    _computeInnerHeight : function() {
-      return Math.max(0, this.getBoxHeight() - this.getFrameHeight());
-    },
-
-    getNeededWidth : function() {
-      var vLayoutImpl = this.getParent().getLayoutImpl();
-      return Math.max(0, vLayoutImpl.computeChildNeededWidth(this));
-    },
-
-    getNeededHeight : function() {
-      var vLayoutImpl = this.getParent().getLayoutImpl();
-      return Math.max(0, vLayoutImpl.computeChildNeededHeight(this));
-    },
-
-    /////////////////////////
-    //  RECOMPUTE FLEX VALUES
-
-    _recomputeFlexX : function() {
-      if (!this.getHasFlexX()) {
-        return false;
-      }
-      if (this._computedWidthTypeFlex) {
-        this._computedWidthValue = null;
-        this.addToLayoutChanges("width");
-      }
-      return true;
-    },
-
-    _recomputeFlexY : function() {
-      if (!this.getHasFlexY()) {
-        return false;
-      }
-      if (this._computedHeightTypeFlex) {
-        this._computedHeightValue = null;
-        this.addToLayoutChanges("height");
-      }
-      return true;
-    },
-
-    /////////////////////
-    // RECOMPUTE PERCENTS
-
-    _recomputePercentX : function() {
-      if (!this.getHasPercentX()) {
-        return false;
-      }
-      if (this._computedWidthTypePercent) {
-        this._computedWidthValue = null;
-        this.addToLayoutChanges("width");
-      }
-      if (this._computedMinWidthTypePercent) {
-        this._computedMinWidthValue = null;
-        this.addToLayoutChanges("minWidth");
-      }
-      if (this._computedMaxWidthTypePercent) {
-        this._computedMaxWidthValue = null;
-        this.addToLayoutChanges("maxWidth");
-      }
-      if (this._computedLeftTypePercent) {
-        this._computedLeftValue = null;
-        this.addToLayoutChanges("left");
-      }
-      if (this._computedRightTypePercent) {
-        this._computedRightValue = null;
-        this.addToLayoutChanges("right");
-      }
-      return true;
-    },
-
-    _recomputePercentY : function() {
-      if (!this.getHasPercentY()) {
-        return false;
-      }
-      if (this._computedHeightTypePercent) {
-        this._computedHeightValue = null;
-        this.addToLayoutChanges("height");
-      }
-      if (this._computedMinHeightTypePercent) {
-        this._computedMinHeightValue = null;
-        this.addToLayoutChanges("minHeight");
-      }
-      if (this._computedMaxHeightTypePercent) {
-        this._computedMaxHeightValue = null;
-        this.addToLayoutChanges("maxHeight");
-      }
-      if (this._computedTopTypePercent) {
-        this._computedTopValue = null;
-        this.addToLayoutChanges("top");
-      }
-      if (this._computedBottomTypePercent) {
-        this._computedBottomValue = null;
-        this.addToLayoutChanges("bottom");
-      }
-      return true;
-    },
-
-    ///////////////////
-    // RECOMPUTE RANGES
-
-    _recomputeRangeX : rwt.util.Variant.select("qx.client", {
-      "mshtml|newmshtml|opera|webkit" : function() {
-        if (this._computedLeftTypeNull || this._computedRightTypeNull) {
-          return false;
-        }
-        this.addToLayoutChanges("width");
-        return true;
-      },
-      "default" : function() {
-        return !(this._computedLeftTypeNull || this._computedRightTypeNull);
-      }
-    } ),
-
-    _recomputeRangeY : rwt.util.Variant.select("qx.client", {
-      "mshtml|newmshtml|opera|webkit" : function() {
-        if (this._computedTopTypeNull || this._computedBottomTypeNull) {
-          return false;
-        }
-        this.addToLayoutChanges("height");
-        return true;
-      },
-      "default" : function() {
-        return !(this._computedTopTypeNull || this._computedBottomTypeNull);
-      }
-    } ),
-
-    ///////////////////////
-    // RECOMPUTE STRETCHING
-
-    _recomputeStretchingX : rwt.util.Variant.select("qx.client", {
-      "mshtml|newmshtml|opera|webkit" : function() {
-        if (this.getAllowStretchX() && this._computedWidthTypeNull) {
-          this._computedWidthValue = null;
-          this.addToLayoutChanges("width");
-          return true;
-        }
-        return false;
-      },
-      "default" : function() {
-        if (this.getAllowStretchX() && this._computedWidthTypeNull) {
-          return true;
-        }
-        return false;
-      }
-    } ),
-
-    _recomputeStretchingY : rwt.util.Variant.select("qx.client", {
-      "mshtml|newmshtml|opera|webkit" : function() {
-        if (this.getAllowStretchY() && this._computedHeightTypeNull) {
-          this._computedHeightValue = null;
-          this.addToLayoutChanges("height");
-          return true;
-        }
-        return false;
-      },
-      "default" : function() {
-        if (this.getAllowStretchY() && this._computedHeightTypeNull) {
-          return true;
-        }
-        return false;
-      }
-    } ),
-
-    /////////////////////////////////////////////////
-    //  INTELLIGENT GETTERS FOR STANDALONE DIMENSIONS
-
-    _computeValuePixel : function(v) {
-      return Math.round(v);
-    },
-
-    _computeValuePixelLimit : function(v) {
-      return Math.max(0, this._computeValuePixel(v));
-    },
-
-    _computeValuePercentX : function(v) {
-      return Math.round(this.getParent().getInnerWidthForChild(this) * v * 0.01);
-    },
-
-    _computeValuePercentXLimit : function(v) {
-      return Math.max(0, this._computeValuePercentX(v));
-    },
-
-    _computeValuePercentY : function(v) {
-      return Math.round(this.getParent().getInnerHeightForChild(this) * v * 0.01);
-    },
-
-    _computeValuePercentYLimit : function(v) {
-      return Math.max(0, this._computeValuePercentY(v));
-    },
-
-    getWidthValue : function() {
-      if (this._computedWidthValue != null) {
-        return this._computedWidthValue;
-      }
-      switch(this._computedWidthType) {
-        case rwt.widgets.base.Widget.TYPE_PIXEL:
-          return this._computedWidthValue = this._computeValuePixelLimit(this._computedWidthParsed);
-        case rwt.widgets.base.Widget.TYPE_PERCENT:
-          return this._computedWidthValue = this._computeValuePercentXLimit(this._computedWidthParsed);
-        case rwt.widgets.base.Widget.TYPE_AUTO:
-          return this._computedWidthValue = this.getPreferredBoxWidth();
-        case rwt.widgets.base.Widget.TYPE_FLEX:
-          if (this.getParent().getLayoutImpl().computeChildrenFlexWidth === undefined) {
-            throw new Error("Widget " + this + ": having horizontal flex size (width=" + this.getWidth() + ") but parent layout " + this.getParent() + " does not support it");
-          }
-          this.getParent().getLayoutImpl().computeChildrenFlexWidth();
-          return this._computedWidthValue = this._computedWidthFlexValue;
-      }
-      return null;
-    },
-
-    getMinWidthValue : function() {
-      if (this._computedMinWidthValue != null) {
-        return this._computedMinWidthValue;
-      }
-      switch(this._computedMinWidthType) {
-        case rwt.widgets.base.Widget.TYPE_PIXEL:
-          return this._computedWidthValue = this._computeValuePixelLimit(this._computedMinWidthParsed);
-        case rwt.widgets.base.Widget.TYPE_PERCENT:
-          return this._computedWidthValue = this._computeValuePercentXLimit(this._computedMinWidthParsed);
-        case rwt.widgets.base.Widget.TYPE_AUTO:
-          return this._computedMinWidthValue = this.getPreferredBoxWidth();
-      }
-      return null;
-    },
-
-    getMaxWidthValue : function() {
-      if (this._computedMaxWidthValue != null) {
-        return this._computedMaxWidthValue;
-      }
-      switch(this._computedMaxWidthType) {
-        case rwt.widgets.base.Widget.TYPE_PIXEL:
-          return this._computedWidthValue = this._computeValuePixelLimit(this._computedMaxWidthParsed);
-        case rwt.widgets.base.Widget.TYPE_PERCENT:
-          return this._computedWidthValue = this._computeValuePercentXLimit(this._computedMaxWidthParsed);
-        case rwt.widgets.base.Widget.TYPE_AUTO:
-          return this._computedMaxWidthValue = this.getPreferredBoxWidth();
-      }
-      return null;
-    },
-
-    getLeftValue : function() {
-      if (this._computedLeftValue != null) {
-        return this._computedLeftValue;
-      }
-      switch(this._computedLeftType) {
-        case rwt.widgets.base.Widget.TYPE_PIXEL:
-          return this._computedLeftValue = this._computeValuePixel(this._computedLeftParsed);
-        case rwt.widgets.base.Widget.TYPE_PERCENT:
-          return this._computedLeftValue = this._computeValuePercentX(this._computedLeftParsed);
-      }
-      return null;
-    },
-
-    getRightValue : function() {
-      if (this._computedRightValue != null) {
-        return this._computedRightValue;
-      }
-      switch(this._computedRightType) {
-        case rwt.widgets.base.Widget.TYPE_PIXEL:
-          return this._computedRightValue = this._computeValuePixel(this._computedRightParsed);
-        case rwt.widgets.base.Widget.TYPE_PERCENT:
-          return this._computedRightValue = this._computeValuePercentX(this._computedRightParsed);
-      }
-      return null;
-    },
-
-    getHeightValue : function() {
-      if (this._computedHeightValue != null) {
-        return this._computedHeightValue;
-      }
-      switch(this._computedHeightType) {
-        case rwt.widgets.base.Widget.TYPE_PIXEL:
-          return this._computedHeightValue = this._computeValuePixelLimit(this._computedHeightParsed);
-        case rwt.widgets.base.Widget.TYPE_PERCENT:
-          return this._computedHeightValue = this._computeValuePercentYLimit(this._computedHeightParsed);
-        case rwt.widgets.base.Widget.TYPE_AUTO:
-          return this._computedHeightValue = this.getPreferredBoxHeight();
-        case rwt.widgets.base.Widget.TYPE_FLEX:
-          if (this.getParent().getLayoutImpl().computeChildrenFlexHeight === undefined) {
-            throw new Error("Widget " + this + ": having vertical flex size (height=" + this.getHeight() + ") but parent layout " + this.getParent() + " does not support it");
-          }
-          this.getParent().getLayoutImpl().computeChildrenFlexHeight();
-          return this._computedHeightValue = this._computedHeightFlexValue;
-      }
-      return null;
-    },
-
-    getMinHeightValue : function() {
-      if (this._computedMinHeightValue != null) {
-        return this._computedMinHeightValue;
-      }
-      switch(this._computedMinHeightType) {
-        case rwt.widgets.base.Widget.TYPE_PIXEL:
-          return this._computedMinHeightValue = this._computeValuePixelLimit(this._computedMinHeightParsed);
-        case rwt.widgets.base.Widget.TYPE_PERCENT:
-          return this._computedMinHeightValue = this._computeValuePercentYLimit(this._computedMinHeightParsed);
-        case rwt.widgets.base.Widget.TYPE_AUTO:
-          return this._computedMinHeightValue = this.getPreferredBoxHeight();
-      }
-      return null;
-    },
-
-    getMaxHeightValue : function() {
-      if (this._computedMaxHeightValue != null) {
-        return this._computedMaxHeightValue;
-      }
-      switch(this._computedMaxHeightType) {
-        case rwt.widgets.base.Widget.TYPE_PIXEL:
-          return this._computedMaxHeightValue = this._computeValuePixelLimit(this._computedMaxHeightParsed);
-        case rwt.widgets.base.Widget.TYPE_PERCENT:
-          return this._computedMaxHeightValue = this._computeValuePercentYLimit(this._computedMaxHeightParsed);
-        case rwt.widgets.base.Widget.TYPE_AUTO:
-          return this._computedMaxHeightValue = this.getPreferredBoxHeight();
-      }
-      return null;
-    },
-
-    getTopValue : function() {
-      if (this._computedTopValue != null) {
-        return this._computedTopValue;
-      }
-      switch(this._computedTopType) {
-        case rwt.widgets.base.Widget.TYPE_PIXEL:
-          return this._computedTopValue = this._computeValuePixel(this._computedTopParsed);
-        case rwt.widgets.base.Widget.TYPE_PERCENT:
-          return this._computedTopValue = this._computeValuePercentY(this._computedTopParsed);
-      }
-      return null;
-    },
-
-    getBottomValue : function() {
-      if (this._computedBottomValue != null) {
-        return this._computedBottomValue;
-      }
-      switch(this._computedBottomType) {
-        case rwt.widgets.base.Widget.TYPE_PIXEL:
-          return this._computedBottomValue = this._computeValuePixel(this._computedBottomParsed);
-        case rwt.widgets.base.Widget.TYPE_PERCENT:
-          return this._computedBottomValue = this._computeValuePercentY(this._computedBottomParsed);
-      }
-      return null;
-    },
-
-    _computeFrameWidth : function() {
-      var fw = this._cachedBorderLeft + this.getPaddingLeft() + this.getPaddingRight() + this._cachedBorderRight;
-      return fw;
-    },
-
-    _computeFrameHeight : function() {
-      var fh = this._cachedBorderTop + this.getPaddingTop() + this.getPaddingBottom() + this._cachedBorderBottom;
-      return fh;
-    },
-
-    _invalidateFrameDimensions : function() {
-      this._invalidateFrameWidth();
-      this._invalidateFrameHeight();
-    },
-
-    _invalidatePreferredInnerDimensions : function() {
-      this._invalidatePreferredInnerWidth();
-      this._invalidatePreferredInnerHeight();
-    },
-
-    _computePreferredBoxWidth : function() {
-      return Math.max(0, this.getPreferredInnerWidth() + this.getFrameWidth());
-    },
-
-    _computePreferredBoxHeight : function() {
-      return Math.max(0, this.getPreferredInnerHeight() + this.getFrameHeight());
-    },
-
-    ///////////////
-    // LAYOUT QUEUE
-
-    _initialLayoutDone : false,
-
-    addToLayoutChanges : function(p) {
-      if (this._isDisplayable) {
-        this.getParent()._addChildToChildrenQueue(this);
-      }
-      return this._layoutChanges[p] = true;
-    },
-
-    addToQueue : function(p) {
-      if( this._initialLayoutDone ) {
-        this.addToJobQueue( p );
-      } else {
-        this.addToLayoutChanges( p );
-      }
-    },
-
-    addToQueueRuntime : function(p) {
-      return !this._initialLayoutDone || this.addToJobQueue(p);
-    },
-
-    /////////////////////
-    // LAYOUTER INTERNALS
-
-    _computeHasPercentX : function() {
-      return (this._computedLeftTypePercent || this._computedWidthTypePercent || this._computedMinWidthTypePercent || this._computedMaxWidthTypePercent || this._computedRightTypePercent);
-    },
-
-    _computeHasPercentY : function() {
-      return (this._computedTopTypePercent || this._computedHeightTypePercent || this._computedMinHeightTypePercent || this._computedMaxHeightTypePercent || this._computedBottomTypePercent);
-    },
-
-    _computeHasAutoX : function() {
-      return (this._computedWidthTypeAuto || this._computedMinWidthTypeAuto || this._computedMaxWidthTypeAuto);
-    },
-
-    _computeHasAutoY : function() {
-      return (this._computedHeightTypeAuto || this._computedMinHeightTypeAuto || this._computedMaxHeightTypeAuto);
-    },
-
-    _computeHasFlexX : function() {
-      return this._computedWidthTypeFlex;
-    },
-
-    _computeHasFlexY : function() {
-      return this._computedHeightTypeFlex;
-    },
-
-    _evalUnitsPixelPercentAutoFlex : function(value) {
-      switch(value) {
-        case "auto":
-          return rwt.widgets.base.Widget.TYPE_AUTO;
-        case Infinity:
-        case -Infinity:
-          return rwt.widgets.base.Widget.TYPE_NULL;
-      }
-      switch(typeof value) {
-        case "number":
-          return isNaN(value) ? rwt.widgets.base.Widget.TYPE_NULL : rwt.widgets.base.Widget.TYPE_PIXEL;
-
-        case "string":
-          return value.indexOf("%") != -1 ? rwt.widgets.base.Widget.TYPE_PERCENT : value.indexOf("*") != -1 ? rwt.widgets.base.Widget.TYPE_FLEX : rwt.widgets.base.Widget.TYPE_NULL;
-      }
-      return rwt.widgets.base.Widget.TYPE_NULL;
-    },
-
-    _evalUnitsPixelPercentAuto : function(value) {
-      switch(value) {
-        case "auto":
-          return rwt.widgets.base.Widget.TYPE_AUTO;
-        case Infinity:
-        case -Infinity:
-          return rwt.widgets.base.Widget.TYPE_NULL;
-      }
-      switch(typeof value) {
-        case "number":
-          return isNaN(value) ? rwt.widgets.base.Widget.TYPE_NULL : rwt.widgets.base.Widget.TYPE_PIXEL;
-        case "string":
-          return value.indexOf("%") != -1 ? rwt.widgets.base.Widget.TYPE_PERCENT : rwt.widgets.base.Widget.TYPE_NULL;
-      }
-      return rwt.widgets.base.Widget.TYPE_NULL;
-    },
-
-    _evalUnitsPixelPercent : function(value) {
-      switch(value) {
-        case Infinity:
-        case -Infinity:
-          return rwt.widgets.base.Widget.TYPE_NULL;
-      }
-      switch(typeof value) {
-        case "number":
-          return isNaN(value) ? rwt.widgets.base.Widget.TYPE_NULL : rwt.widgets.base.Widget.TYPE_PIXEL;
-        case "string":
-          return value.indexOf("%") != -1 ? rwt.widgets.base.Widget.TYPE_PERCENT : rwt.widgets.base.Widget.TYPE_NULL;
-      }
-      return rwt.widgets.base.Widget.TYPE_NULL;
-    },
-
-    ///////////////////////////////////
-    // UNIT DETECTION FOR LAYOUT SYSTEM
-
-    _unitDetectionPixelPercentAutoFlex : function(name, value) {
-      var r = rwt.widgets.base.Widget.layoutPropertyTypes[name];
-      var s = r.dataType;
-      var p = r.dataParsed;
-      var v = r.dataValue;
-      var s1 = r.typePixel;
-      var s2 = r.typePercent;
-      var s3 = r.typeAuto;
-      var s4 = r.typeFlex;
-      var s5 = r.typeNull;
-      var wasPercent = this[s2];
-      var wasAuto = this[s3];
-      var wasFlex = this[s4];
-      this[ s ] = this._evalUnitsPixelPercentAutoFlex( value );
-      switch( this[ s ] ) {
-        case rwt.widgets.base.Widget.TYPE_PIXEL:
-          this[s1] = true;
-          this[s2] = this[s3] = this[s4] = this[s5] = false;
-          this[p] = this[v] = Math.round(value);
-        break;
-        case rwt.widgets.base.Widget.TYPE_PERCENT:
-          this[s2] = true;
-          this[s1] = this[s3] = this[s4] = this[s5] = false;
-          this[p] = parseFloat(value);
-          this[v] = null;
-        break;
-        case rwt.widgets.base.Widget.TYPE_AUTO:
-          this[s3] = true;
-          this[s1] = this[s2] = this[s4] = this[s5] = false;
-          this[p] = this[v] = null;
-        break;
-        case rwt.widgets.base.Widget.TYPE_FLEX:
-          this[s4] = true;
-          this[s1] = this[s2] = this[s3] = this[s5] = false;
-          this[p] = parseFloat(value);
-          this[v] = null;
-        break;
-        default:
-          this[s5] = true;
-          this[s1] = this[s2] = this[s3] = this[s4] = false;
-          this[p] = this[v] = null;
-        break;
-      }
-      if (wasPercent != this[s2]) {
-        switch(name) {
-          case "minWidth":
-          case "maxWidth":
-          case "width":
-          case "left":
-          case "right":
-            this._invalidateHasPercentX();
-          break;
-          case "maxHeight":
-          case "minHeight":
-          case "height":
-          case "top":
-          case "bottom":
-            this._invalidateHasPercentY();
-          break;
-        }
-      }
-      // No ELSE because you can also switch from percent to auto
-      if (wasAuto != this[s3]) {
-        switch(name) {
-          case "minWidth":
-          case "maxWidth":
-          case "width":
-            this._invalidateHasAutoX();
-          break;
-          case "minHeight":
-          case "maxHeight":
-          case "height":
-            this._invalidateHasAutoY();
-          break;
-        }
-      }
-      // No ELSE because you can also switch from percent to auto
-      if (wasFlex != this[s4]) {
-        switch(name) {
-          case "width":
-            this._invalidateHasFlexX();
-          break;
-          case "height":
-            this._invalidateHasFlexY();
-          break;
-        }
-      }
-    },
-
-    _unitDetectionPixelPercentAuto : function(name, value) {
-      var r = rwt.widgets.base.Widget.layoutPropertyTypes[name];
-      var s = r.dataType;
-      var p = r.dataParsed;
-      var v = r.dataValue;
-      var s1 = r.typePixel;
-      var s2 = r.typePercent;
-      var s3 = r.typeAuto;
-      var s4 = r.typeNull;
-      var wasPercent = this[s2];
-      var wasAuto = this[s3];
-      this[ s ] = this._evalUnitsPixelPercentAuto( value );
-      switch( this[ s ] ) {
-        case rwt.widgets.base.Widget.TYPE_PIXEL:
-          this[s1] = true;
-          this[s2] = this[s3] = this[s4] = false;
-          this[p] = this[v] = Math.round(value);
-        break;
-        case rwt.widgets.base.Widget.TYPE_PERCENT:
-          this[s2] = true;
-          this[s1] = this[s3] = this[s4] = false;
-          this[p] = parseFloat(value);
-          this[v] = null;
-        break;
-        case rwt.widgets.base.Widget.TYPE_AUTO:
-          this[s3] = true;
-          this[s1] = this[s2] = this[s4] = false;
-          this[p] = this[v] = null;
-        break;
-        default:
-          this[s4] = true;
-          this[s1] = this[s2] = this[s3] = false;
-          this[p] = this[v] = null;
-          break;
-      }
-      if (wasPercent != this[s2]) {
-        switch(name) {
-          case "minWidth":
-          case "maxWidth":
-          case "width":
-          case "left":
-          case "right":
-            this._invalidateHasPercentX();
-          break;
-          case "minHeight":
-          case "maxHeight":
-          case "height":
-          case "top":
-          case "bottom":
-            this._invalidateHasPercentY();
-            break;
-        }
-      }
-      // No ELSE because you can also switch from percent to auto
-      if (wasAuto != this[s3]) {
-        switch(name) {
-          case "minWidth":
-          case "maxWidth":
-          case "width":
-            this._invalidateHasAutoX();
-          break;
-          case "minHeight":
-          case "maxHeight":
-          case "height":
-            this._invalidateHasAutoY();
-          break;
-        }
-      }
-    },
-
-    _unitDetectionPixelPercent : function(name, value) {
-      var r = rwt.widgets.base.Widget.layoutPropertyTypes[name];
-      var s = r.dataType;
-      var p = r.dataParsed;
-      var v = r.dataValue;
-      var s1 = r.typePixel;
-      var s2 = r.typePercent;
-      var s3 = r.typeNull;
-      var wasPercent = this[s2];
-      this[ s ] = this._evalUnitsPixelPercent( value );
-      switch( this[ s ] ) {
-        case rwt.widgets.base.Widget.TYPE_PIXEL:
-          this[s1] = true;
-          this[s2] = this[s3] = false;
-          this[p] = this[v] = Math.round(value);
-        break;
-        case rwt.widgets.base.Widget.TYPE_PERCENT:
-          this[s2] = true;
-          this[s1] = this[s3] = false;
-          this[p] = parseFloat(value);
-          this[v] = null;
-        break;
-        default:
-          this[s3] = true;
-          this[s1] = this[s2] = false;
-          this[p] = this[v] = null;
-        break;
-      }
-      if (wasPercent != this[s2]) {
-        switch(name) {
-          case "minWidth":
-          case "maxWidth":
-          case "width":
-          case "left":
-          case "right":
-            this._invalidateHasPercentX();
-          break;
-          case "minHeight":
-          case "maxHeight":
-          case "height":
-          case "top":
-          case "bottom":
-            this._invalidateHasPercentY();
-          break;
-        }
-      }
-    },
-
-    /////////////////////
-    // CHILDREN MANAGMENT
-
-    /**
-     * The widget which is at the top level,
-     *  which contains all others (normally a
-     *  instance of rwt.widgets.base.ClientDocument).
-     */
-    getTopLevelWidget : function() {
-      return this._hasParent ? this.getParent().getTopLevelWidget() : null;
-    },
-
-    moveSelfToBegin : function() {
-      this.getParent().addAtBegin(this);
-    },
-
-    moveSelfToEnd : function() {
-      this.getParent().addAtEnd(this);
-    },
-
-    getPreviousSibling : function() {
-      var p = this.getParent();
-      if (p == null) {
-        return null;
-      }
-      var cs = p.getChildren();
-      return cs[cs.indexOf(this) - 1];
-    },
-
-    getNextSibling : function() {
-      var p = this.getParent();
-      if (p == null) {
-        return null;
-      }
-      var cs = p.getChildren();
-      return cs[cs.indexOf(this) + 1];
-    },
-
-    getPreviousVisibleSibling : function() {
-      if (!this._hasParent) {
-        return null;
-      }
-      var vChildren = this.getParent().getVisibleChildren();
-      return vChildren[vChildren.indexOf(this) - 1];
-    },
-
-    getNextVisibleSibling : function() {
-      if (!this._hasParent) {
-        return null;
-      }
-      var vChildren = this.getParent().getVisibleChildren();
-      return vChildren[vChildren.indexOf(this) + 1];
-    },
-
-    getPreviousActiveSibling : function(vIgnoreClasses) {
-      var vPrev = rwt.widgets.base.Widget.getActiveSiblingHelper(this, this.getParent(), -1, vIgnoreClasses, null);
-      return vPrev ? vPrev : this.getParent().getLastActiveChild();
-    },
-
-    getNextActiveSibling : function(vIgnoreClasses) {
-      var vNext = rwt.widgets.base.Widget.getActiveSiblingHelper(this, this.getParent(), 1, vIgnoreClasses, null);
-      return vNext ? vNext : this.getParent().getFirstActiveChild();
-    },
-
-    isFirstChild : function() {
-      return this._hasParent && this.getParent().getFirstChild() == this;
-    },
-
-    isLastChild : function() {
-      return this._hasParent && this.getParent().getLastChild() == this;
-    },
-
-    isFirstVisibleChild : function() {
-      return this._hasParent && this.getParent().getFirstVisibleChild() == this;
-    },
-
-    isLastVisibleChild : function() {
-      return this._hasParent && this.getParent().getLastVisibleChild() == this;
-    },
-
-    /////////////////
-    // STATE HANDLING
-
-    setCustomVariant : function( value ) {
-      if( this._customVariant !== null ) {
-        this.removeState( this._customVariant );
-      }
-      this._customVariant = value;
-      if( this._customVariant !== null ) {
-        this.addState( this._customVariant );
-      }
-    },
-
-    hasState : function(vState) {
-      return this.__states && this.__states[vState] ? true : false;
-    },
-
-    addState : function(vState) {
-      if (!this.__states) {
-        this.__states = {};
-      }
-      if (!this.__states[vState]) {
-        this.__states[vState] = true;
-        if (this._hasParent) {
-          rwt.widgets.base.Widget.addToGlobalStateQueue(this);
-        }
-      }
-    },
-
-    removeState : function(vState) {
-      if (this.__states && this.__states[vState]) {
-        delete this.__states[vState];
-        if (this._hasParent) {
-          rwt.widgets.base.Widget.addToGlobalStateQueue(this);
-        }
-      }
-    },
-
-    /////////////////////
-    // APPEARANCE SUPPORT
-
-    /**
-     * Style multiple properties at once by using a property list
-     *
-     * @type member
-     * @param data {Map} a map of property values. The key is the name of the property.
-     * @return {Object} this instance.
-     * @throws an error if the incoming data field is not a map.
-     */
-    _styleFromMap : function( data ) {
-      this._prepareStyleMap( data );
-      var styler = rwt.qx.Property.$$method.style;
-      var unstyler = rwt.qx.Property.$$method.unstyle;
-      var value;
-      for( var prop in data ) {
-        value = data[prop];
-        if( value === "undefined" ) {
-          this[ unstyler[ prop ] ]();
-        } else {
-          this[ styler[ prop ] ]( value );
-        }
-      }
-    },
-
-    _unstyleFromArray : function(data) {
-      var unstyler = rwt.qx.Property.$$method.unstyle;
-      for (var i=0, l=data.length; i<l; i++) {
-        this[unstyler[data[i]]]();
-      }
-    },
-
-    _prepareStyleMap : rwt.util.Variant.select("qx.client", {
-      "mshtml" : function( map ) {
-        if( map.shadow && map.border && map.border.getStyle() !== "rounded" ) {
-          var width = map.border.getWidthTop();
-          var color = map.border.getColorTop();
-          var radii = [ 0, 0, 0, 0 ];
-          map.border = new rwt.html.Border( width, "rounded", color, radii );
-        }
-      },
-      "default" : function( map ) {
-        return map;
-      }
-    } ),
-
-    _renderAppearance : function() {
-      if (!this.__states) {
-        this.__states = {};
-      }
-      // HACK: Is there a cleaner way to implement this?
-      // Maybe not use the appearance for this, but a simple property and event handler combination?
-      this._applyStateStyleFocus(this.__states);
-      var vAppearance = this.getAppearance();
-      if (vAppearance) {
-          var r = rwt.theme.AppearanceManager.getInstance().styleFrom(vAppearance, this.__states);
-          if (r) {
-            this._styleFromMap(r);
-          }
-      }
-    },
-
-    _resetAppearanceThemeWrapper : function(vNewAppearanceTheme, vOldAppearanceTheme) {
-      var vAppearance = this.getAppearance();
-      if (vAppearance) {
-        var vAppearanceManager = rwt.theme.AppearanceManager.getInstance();
-        var vOldAppearanceProperties
-          = vAppearanceManager.styleFromTheme(vOldAppearanceTheme, vAppearance, this.__states);
-        var vNewAppearanceProperties
-          = vAppearanceManager.styleFromTheme(vNewAppearanceTheme, vAppearance, this.__states);
-        var vUnstyleList = [];
-        for (var prop in vOldAppearanceProperties) {
-          if (vNewAppearanceProperties[prop] === undefined) {
-            vUnstyleList.push(prop);
-          }
-        }
-        this._unstyleFromArray(vUnstyleList);
-        this._styleFromMap(vNewAppearanceProperties);
-      }
-    },
-
-    _applyStateStyleFocus : rwt.util.Variant.select("qx.client", {
-      "mshtml" : function(vStates) {},
-      "default" : function(vStates) {
-        if (vStates.focused) {
-          if (!rwt.widgets.util.FocusHandler.mouseFocus && !this.getHideFocus()) {
-            this.setStyleProperty("outline", "1px dotted");
-          }
-        } else {
-          this.setStyleProperty("outline", "none");
-        }
-      }
-    } ),
-
-    addToStateQueue : function() {
-      rwt.widgets.base.Widget.addToGlobalStateQueue(this);
-    },
-
-    recursiveAddToStateQueue : function() {
-      this.addToStateQueue();
-    },
-
-    _applyAppearance : function(value, old) {
-      if (!this.__states) {
-        this.__states = {};
-      }
-      var vAppearanceManager = rwt.theme.AppearanceManager.getInstance();
-      if (value) {
-        var vNewAppearanceProperties = vAppearanceManager.styleFrom(value, this.__states) || {};
-      }
-      if (old) {
-        var vOldAppearanceProperties = vAppearanceManager.styleFrom(old, this.__states) || {};
-        var vUnstyleList = [];
-        for (var prop in vOldAppearanceProperties) {
-          if (!vNewAppearanceProperties || !(prop in vNewAppearanceProperties)) {
-            vUnstyleList.push(prop);
-          }
-        }
-      }
-      if (vUnstyleList) {
-        this._unstyleFromArray(vUnstyleList);
-      }
-      if (vNewAppearanceProperties) {
-        this._styleFromMap(vNewAppearanceProperties);
-      }
-    },
-
-    _recursiveAppearanceThemeUpdate : function(vNewAppearanceTheme, vOldAppearanceTheme) {
-      this._resetAppearanceThemeWrapper(vNewAppearanceTheme, vOldAppearanceTheme);
-    },
-
-    ///////////////
-    // ELEMENT DATA
-
-    _applyElementData : function(elem) {},
-
-    //////////////////
-    // HTML PROPERTIES
-
-    setHtmlProperty : function(propName, value) {
-      if (!this._htmlProperties) {
-        this._htmlProperties = {};
-      }
-      this._htmlProperties[propName] = value;
-      if (this._isCreated && this.getElement()[propName] != value) {
-        this.getElement()[propName] = value;
-      }
-      return true;
-    },
-
-    removeHtmlProperty : rwt.util.Variant.select("qx.client", {
-      "mshtml" : function(propName) {
-        if (!this._htmlProperties) {
-          return;
-        }
-        delete this._htmlProperties[propName];
-        if (this._isCreated) {
-          this.getElement().removeAttribute(propName);
-        }
-        return true;
-      },
-      "default" : function(propName) {
-        if (!this._htmlProperties) {
-          return;
-        }
-        delete this._htmlProperties[propName];
-        if (this._isCreated) {
-          this.getElement().removeAttribute(propName);
-          delete this.getElement()[propName];
-        }
-        return true;
-      }
-    } ),
-
-    getHtmlProperty : function(propName) {
-      if (!this._htmlProperties) {
-        return "";
-      }
-      return this._htmlProperties[propName] || "";
-    },
-
-    _applyHtmlProperties : function(elem) {
-      var vProperties = this._htmlProperties;
-      if (vProperties) {
-        var propName;
-        for (propName in vProperties) {
-          elem[propName] = vProperties[propName];
-        }
-      }
-    },
-
-    //////////////////
-    // HTML ATTRIBUTES
-
-    setHtmlAttribute : function(propName, value) {
-      if (!this._htmlAttributes) {
-        this._htmlAttributes = {};
-      }
-      this._htmlAttributes[propName] = value;
-      if (this._isCreated) {
-        this.getElement().setAttribute(propName, value);
-      }
-      return true;
-    },
-
-    removeHtmlAttribute : function(propName) {
-      if (!this._htmlAttributes) {
-        return;
-      }
-      delete this._htmlAttributes[propName];
-      if (this._isCreated) {
-        this.getElement().removeAttribute(propName);
-      }
-      return true;
-    },
-
-    getHtmlAttribute : function(propName) {
-      if (!this._htmlAttributes) {
-        return "";
-      }
-      return this._htmlAttributes[propName] || "";
-    },
-
-    _applyHtmlAttributes : function(elem) {
-      var vAttributes = this._htmlAttributes;
-      if (vAttributes) {
-        var propName;
-        for (propName in vAttributes) {
-          elem.setAttribute(propName, vAttributes[propName]);
-        }
-      }
-    },
-
-    ///////////////////
-    // STYLE PROPERTIES
-
-    getStyleProperty : function(propName) {
-      if (!this._styleProperties) {
-        return "";
-      }
-      return this._styleProperties[propName] || "";
-    },
-
-    //Some properties should always be applied on the outer element node:
-    __outerElementStyleProperties : {
-      cursor : true,
-      zIndex : true,
-      filter : true,
-      display : true,
-      visibility : true,
-      outline : true,
-      boxShadow : true,
-      opacity : true,
-      MozOpacity : true
-    },
-
-    setStyleProperty : function(propName, value) {
-      if (!this._styleProperties) {
-        this._styleProperties = {};
-      }
-      this._styleProperties[propName] = value;
-      if (this._isCreated) {
-        var elem = this.__outerElementStyleProperties[propName] ? this.getElement() : this._getTargetNode();
-        if (elem) {
-          elem.style[propName] = (value == null) ? "" : value;
-        }
-      }
-    },
-
-    removeStyleProperty : function(propName) {
-      if (!this._styleProperties) {
-        return;
-      }
-      delete this._styleProperties[propName];
-      if (this._isCreated) {
-        var elem = this.__outerElementStyleProperties[propName] ? this.getElement() : this._getTargetNode();
-        if (elem) {
-          elem.style[propName] = "";
-        }
-      }
-    },
-
-    _applyStyleProperties : function(elem) {
-      var vProperties = this._styleProperties;
-      if (!vProperties) {
-        return;
-      }
-      var propName;
-      var vBaseElement = elem;
-      var vTargetElement = this._getTargetNode();
-      var elem;
-      var value;
-      for (propName in vProperties) {
-        elem = this.__outerElementStyleProperties[propName] ? vBaseElement : vTargetElement;
-        value = vProperties[propName];
-        elem.style[propName] = (value == null) ? "" : value;
-      }
-    },
-
-    /////////////////////////
-    // ENABLE/DISABLE SUPPORT
-
-    _applyEnabled : function(value, old) {
-      if (value===false) {
-        this.addState("disabled");
-        // Also reset some states to be sure a pressed/hovered button gets reset
-        this.removeState("over");
-        if (rwt.qx.Class.isDefined("rwt.widgets.base.Button")) {
-          this.removeState("abandoned");
-          this.removeState("pressed");
-        }
-        if( this.getFocused() ) {
-          this.setFocused( false );
-        }
-      } else {
-        this.removeState("disabled");
-      }
-    },
-
-    /////////////////
-    // FOCUS HANDLING
-
-    isFocusable : function() {
-      return this.getEnabled() && this.isSeeable() && this.getTabIndex() != null;
-    },
-
-    isFocusRoot : function() {
-      return false;
-    },
-
-    getFocusRoot : function() {
-      if (this._hasParent) {
-        return this.getParent().getFocusRoot();
-      }
-      return null;
-    },
-
-    getActiveChild : function() {
-      var vRoot = this.getFocusRoot();
-      if (vRoot) {
-        return vRoot.getActiveChild();
-      }
-      return null;
-    },
-
-    _ontabfocus : rwt.util.Functions.returnTrue,
-
-    _applyFocused : function(value, old) {
-      if (!this.isCreated()) {
-        return;
-      }
-      var vFocusRoot = this.getFocusRoot();
-      if (vFocusRoot) {
-        // may be undefined if this widget has been removed
-        if (value) {
-          vFocusRoot.setFocusedChild(this);
-          this._visualizeFocus();
-        } else {
-          if (vFocusRoot.getFocusedChild() == this) {
-            vFocusRoot.setFocusedChild(null);
-          }
-          this._visualizeBlur();
-        }
-      }
-    },
-
-    _applyHideFocus : rwt.util.Variant.select("qx.client", {
-      "mshtml" : function(value, old) {
-        this.setHtmlProperty("hideFocus", value);
-      },
-      // Need no implementation for others then mshtml, because
-      // all these browsers support css outlines and do not
-      // have an attribute "hideFocus" as IE.
-      "default" : rwt.util.Functions.returnTrue
-    } ),
-
-    _visualizeBlur : function() {
-      // Force blur, even if mouseFocus is not active because we
-      // need to be sure that the previous focus rect gets removed.
-      // But this only needs to be done, if there is no new focused element.
-      if (this.getEnableElementFocus() && (!this.getFocusRoot().getFocusedChild() || (this.getFocusRoot().getFocusedChild() && this.getFocusRoot().getFocusedChild().getEnableElementFocus()))) {
-        try {
-          this.getElement().blur();
-        } catch(ex) {}
-      }
-      this.removeState("focused");
-    },
-
-    _visualizeFocus : function() {
-      var FocusHandler = rwt.widgets.util.FocusHandler;
-      if (!FocusHandler.mouseFocus && !FocusHandler.blockFocus && this.getEnableElementFocus()) {
-        try {
-          this.getElement().focus();
-        } catch(ex) {}
-      }
-      this.addState("focused");
-    },
-
-    focus : function() {
-      delete rwt.widgets.util.FocusHandler.mouseFocus;
-      this.setFocused(true);
-    },
-
-    blur : function() {
-      delete rwt.widgets.util.FocusHandler.mouseFocus;
-      this.setFocused(false);
-    },
-
-    ////////////////////
-    // CAPTURING SUPPORT
-
-    _applyCapture : function(value, old) {
-      var vMgr = rwt.event.EventHandler;
-      if (old) {
-        vMgr.setCaptureWidget(null);
-      }
-      if (value) {
-        vMgr.setCaptureWidget(this);
-      }
-    },
-
-    /////////////////
-    // ZINDEX SUPPORT
-
-    _applyZIndex : function(value, old) {
-      if (value == null) {
-        this.removeStyleProperty("zIndex");
-      } else {
-        this.setStyleProperty("zIndex", value);
-      }
-    },
-
-    ////////////////////
-    // TAB INDEX SUPPORT
-
-    _applyTabIndex : rwt.util.Variant.select("qx.client", {
-      "mshtml" : function(value, old) {
-        /*
-        if (value < 0 || !this.getEnabled()) {
-          this.setHtmlProperty("unselectable", "on");
-        } else {
-          this.removeHtmlProperty("unselectable");
-        }
-        */
-        // Legacy tabIndex property
-        this.setHtmlProperty("tabIndex", value < 0 ? -1 : 1);
-      },
-      // [if] Fix for bug:
-      // 288348: The focus stays on the browser location bar after clicking some
-      // of the widgets.
-      // https://bugs.eclipse.org/bugs/show_bug.cgi?id=288348
-      //"gecko" : function(value, old)
-      //{
-      //  // CSS 3 draft userFocus property
-      //  this.setStyleProperty("MozUserFocus", (value < 0 ? "ignore" : "normal"));
-      //},
-      "default" : function(value, old) {
-        // CSS 3 draft userFocus property
-        this.setStyleProperty("userFocus", (value < 0 ? "ignore" : "normal"));
-        // Legacy tabIndex property
-        this.setHtmlProperty("tabIndex", value < 0 ? -1 : 1);
-      }
-    } ),
-
-    /////////////////////
-    // SELECTABLE SUPPORT
-
-    _applySelectable : rwt.util.Variant.select("qx.client", {
-      // "unselectable" works locally and does not affect children
-      // "user-select" is not inherited, but it does affect children
-      // in the same way that display: none does, it limits it.
-      // Normally "unselectable" must be applied recursively because
-      // of this restriction. We use the "selectstart" event instead
-      // and apply a preventDefault() on this event in the EventHandler
-      // class. This event works at least in MSHTML and Webkit.
-      // Opera has no support for any of these options yet. No "selectstart"
-      // event no user-select property.
-      "mshtml" : function(value, old) {
-        // IMPORTANT
-        // to ensure that widgets using the execCommand method work
-        // properly it is necessary to keep these lines. Otherwise
-        // the widget e.g. the HtmlArea will loose its selection of text
-        // and the execCommand would target an empty selection at the
-        // beginning of the editable document.
-
-        // AGAIN: This makes more problems when enabled, because
-        // it interrupts the normal focus flow. We definitely need
-        // to find a solution which works without the unselectable
-        // property. The problem is that other clients than
-        // Firefox or Opera do not allow multiple selections.
-        // Interesting read is the WHATWG text selection suggestion.
-        // We are in an evaluating phase to find better solutions, but
-        // this needs some time - and maybe can only be made available
-        // when the browsers at least support a common subset here.
-        /*
-        if (value) {
-          return this.removeHtmlProperty("unselectable");
-        } else {
-          return this.setHtmlProperty("unselectable", "on");
-        }
-        */
-      },
-      "gecko" : function(value, old) {
-        if (value) {
-          this.removeStyleProperty("MozUserSelect");
-        } else {
-          this.setStyleProperty("MozUserSelect", "none");
-        }
-      },
-      "webkit" : function(value, old) {
-        if (value) {
-          this.removeStyleProperty("WebkitUserSelect");
-          this.removeStyleProperty("KhtmlUserSelect");
-        } else {
-          this.setStyleProperty("WebkitUserSelect", "none");
-          this.setStyleProperty("KhtmlUserSelect", "none");
-        }
-      },
-      // Opera currently has no support to prohibit user selection
-      "default" : function(value, old) {
-        if (value) {
-          return this.removeStyleProperty("userSelect");
-        } else {
-          this.setStyleProperty("userSelect", "none");
-        }
-      }
-    } ),
-
-    //////////////////
-    // OPACITY SUPPORT
-
-    /**
-     * Sets the opacity for the widget. Any child widget inside the widget will also
-     * become (semi-)transparent. The value should be a number between 0 and 1
-     * inclusive, where 1 means totally opaque and 0 invisible.
-     */
-    _applyOpacity : function( value, old ) {
-      rwt.html.Style.setOpacity( this, value );
-    },
-
-    /////////////////
-    // CURSOR SUPPORT
-
-    // TODO: maybe we could use cursor:url() for not suppoted cursors.
-    __cursorMap : rwt.util.Variant.select("qx.client", {
-      "mshtml" : {
-        "default" : "default",
-        "wait" : "wait",
-        "crosshair" : "crosshair",
-        "help" : "help",
-        "move" : "move",
-        "text" : "text",
-        "pointer" : "pointer",
-        "e-resize" : "e-resize",
-        "n-resize" : "n-resize",
-        "w-resize" : "w-resize",
-        "s-resize" : "s-resize",
-        "ne-resize" : "ne-resize",
-        "se-resize" : "se-resize",
-        "nw-resize" : "nw-resize",
-        "sw-resize" : "sw-resize",
-        "col-resize" : "col-resize",
-        "row-resize" : "row-resize",
-        "progress" : "progress",
-        "not-allowed" : "not-allowed",
-        "no-drop" : "no-drop",
-        "cursor" : "hand",
-        "ew-resize" : "e-resize",
-        "ns-resize" : "n-resize",
-        "nesw-resize" : "ne-resize",
-        "nwse-resize" : "nw-resize"
-      },
-      "opera" : {
-        "default" : "default",
-        "wait" : "wait",
-        "crosshair" : "crosshair",
-        "help" : "help",
-        "move" : "move",
-        "text" : "text",
-        "pointer" : "pointer",
-        "e-resize" : "e-resize",
-        "n-resize" : "n-resize",
-        "w-resize" : "w-resize",
-        "s-resize" : "s-resize",
-        "ne-resize" : "ne-resize",
-        "se-resize" : "se-resize",
-        "nw-resize" : "nw-resize",
-        "sw-resize" : "sw-resize",
-        "progress" : "progress",
-        "not-allowed" : "not-allowed",
-        "no-drop" : "no-drop",
-        "col-resize" : "e-resize",
-        "row-resize" : "n-resize",
-        "ew-resize" : "e-resize",
-        "ns-resize" : "n-resize",
-        "nesw-resize" : "ne-resize",
-        "nwse-resize" : "nw-resize"
-      },
-      "default" : {
-        "default" : "default",
-        "wait" : "wait",
-        "crosshair" : "crosshair",
-        "help" : "help",
-        "move" : "move",
-        "text" : "text",
-        "pointer" : "pointer",
-        "e-resize" : "e-resize",
-        "n-resize" : "n-resize",
-        "w-resize" : "w-resize",
-        "s-resize" : "s-resize",
-        "ne-resize" : "ne-resize",
-        "se-resize" : "se-resize",
-        "nw-resize" : "nw-resize",
-        "sw-resize" : "sw-resize",
-        "col-resize" : "col-resize",
-        "row-resize" : "row-resize",
-        "progress" : "progress",
-        "not-allowed" : "not-allowed",
-        "no-drop" : "no-drop"
-      }
-    } ),
-
-    _applyCursor : function(value, old) {
-      if (value) {
-        var url = "url( " + value + " ), default";
-        this.setStyleProperty("cursor", this.__cursorMap[value] || url);
-      } else {
-        this.removeStyleProperty("cursor");
-      }
-    },
-
-    //////////////////
-    // COMMAND SUPPORT
-
-    // TODO [tb] : used only in listitem - remove
-    _applyCommand : function(value, old) {
-      // place holder
-    },
-
-    ///////////////////////////
-    // BACKGROUND IMAGE SUPPORT
-
-    _applyBackgroundImage : function(value, old) {
-      var imageMgr = rwt.html.ImageManager.getInstance();
-      if (old) {
-        imageMgr.hide(old);
-      }
-      if (value) {
-        imageMgr.show(value);
-      }
-      this._styleBackgroundImage( value );
-    },
-
-    _styleBackgroundImage : function( value ) {
-      if( value ) {
-        this.setStyleProperty( "backgroundImage", "url(" + value + ")");
-        this.setStyleProperty( "backgroundRepeat", this.getStyleProperty( "backgroundRepeat" ) );
-        this.setStyleProperty( "backgroundPosition", this.getStyleProperty( "backgroundPosition" ) );
-      } else {
-        this.removeStyleProperty( "backgroundImage" );
-        if( rwt.client.Client.supportsCss3() ) {
-          rwt.html.Style.setBackgroundGradient( this, this.getBackgroundGradient() );
-        }
-      }
-    },
-
-    _applyBackgroundRepeat : function( value, old ) {
-      if( value ) {
-        this.setStyleProperty( "backgroundRepeat", value );
-      } else {
-        this.removeStyleProperty( "backgroundRepeat" );
-      }
-    },
-
-    _applyBackgroundPosition : function( value, old ) {
-      if( value ) {
-        this.setStyleProperty( "backgroundPosition", value );
-      } else {
-        this.removeStyleProperty( "backgroundPosition" );
-      }
-    },
-
-    ///////////////////
-    // CLIPPING SUPPORT
-
-    _applyClip : function(value, old) {
-      return this._compileClipString();
-    },
-
-    _compileClipString : function() {
-      var vLeft = this.getClipLeft();
-      var vTop = this.getClipTop();
-      var vWidth = this.getClipWidth();
-      var vHeight = this.getClipHeight();
-      var vRight, vBottom;
-      if (vLeft == null) {
-        vRight = (vWidth == null ? "auto" : vWidth + "px");
-        vLeft = "auto";
-      } else {
-        vRight = (vWidth == null ? "auto" : vLeft + vWidth + "px");
-        vLeft = vLeft + "px";
-      }
-      if (vTop == null) {
-        vBottom = (vHeight == null ? "auto" : vHeight + "px");
-        vTop = "auto";
-      } else {
-        vBottom = (vHeight == null ? "auto" : vTop + vHeight + "px");
-        vTop = vTop + "px";
-      }
-      return this.setStyleProperty("clip", ("rect(" + vTop + "," + vRight + "," + vBottom + "," + vLeft + ")"));
-    },
-
-    ///////////////////
-    // OVERFLOW SUPPORT
-
-    _applyOverflow : rwt.util.Variant.select("qx.client", {
-      "default" : function(value, old) {
-        // Mshtml and WebKit conform to CSS3 Spec. Eventually there will be multiple
-        // browsers which support these new overflowX overflowY properties.
-        var pv = value;
-        var pn = "overflow";
-        switch(value) {
-          case "scrollX":
-            pn = "overflowX";
-            pv = "scroll";
-          break;
-          case "scrollY":
-            pn = "overflowY";
-            pv = "scroll";
-          break;
-        }
-        // Clear up concurrenting rules
-        var a = [ "overflow", "overflowX", "overflowY" ];
-        for (var i=0; i<a.length; i++) {
-          if (a[i] != pn) {
-            this.removeStyleProperty(a[i]);
-          }
-        }
-        switch(value) {
-          case "scrollX":
-            this.setStyleProperty("overflowY", "hidden");
-          break;
-          case "scrollY":
-            this.setStyleProperty("overflowX", "hidden");
-          break;
-        }
-        this._renderOverflow(pn, pv, value, old);
-        this.addToQueue("overflow");
-      },
-      "gecko" : function(value, old) {
-        var pv = value;
-        var pn = "overflow";
-        switch(pv) {
-          case "hidden":
-            pv = "-moz-scrollbars-none";
-          break;
-          case "scrollX":
-            pv = "-moz-scrollbars-horizontal";
-          break;
-          case "scrollY":
-            pv = "-moz-scrollbars-vertical";
-          break;
-        }
-        this._renderOverflow(pn, pv, value, old);
-        this.addToQueue("overflow");
-      },
-      "opera" : function(value, old) {
-        // Opera/Khtml Mode...
-        // hopefully somewhat of this is supported in the near future.
-        // overflow-x and overflow-y are also not supported by Opera 9.0 Beta1
-        // and also not if we switch to IE emulation mode
-        var pv = value;
-        var pn = "overflow";
-        if( rwt.client.Client.getVersion() < 9.8 ) {
-          switch( pv ) {
-            case "scrollX":
-            case "scrollY":
-              pv = "scroll";
-            break;
-          }
-        } else {
-          switch( pv ) {
-            case "scrollX":
-              pn = "overflowX";
-              pv = "scroll";
-            break;
-            case "scrollY":
-              pn = "overflowY";
-              pv = "scroll";
-            break;
-          }
-          // Clear up concurrenting rules
-          var a = [ "overflow", "overflowX", "overflowY" ];
-          for( var i = 0; i < a.length; i++ ) {
-            if( a[ i ] != pn ) {
-              this.removeStyleProperty( a[ i ] );
-            }
-          }
-          switch( value ) {
-            case "scrollX":
-              this.setStyleProperty( "overflowY", "hidden" );
-            break;
-            case "scrollY":
-              this.setStyleProperty( "overflowX", "hidden" );
-            break;
-          }
-        }
-        this._renderOverflow(pn, pv, value, old);
-        this.addToQueue("overflow");
-      }
-    } ),
-
-    _renderOverflow : function(pn, pv, value, old) {
-      // Apply Style
-      this.setStyleProperty(pn, pv || "");
-      // Invalidate Frame
-      this._invalidateFrameWidth();
-      this._invalidateFrameHeight();
-    },
-
-    getOverflowX : function() {
-      var vOverflow = this.getOverflow();
-      return vOverflow == "scrollY" ? "hidden" : vOverflow;
-    },
-
-    getOverflowY : function() {
-      var vOverflow = this.getOverflow();
-      return vOverflow == "scrollX" ? "hidden" : vOverflow;
-    },
-
-    _applyContainerOverflow : function( value, oldValue ) {
-      if( this._innerStyle ) {
-        this._style.overflow = value ? "" : "hidden";
-      }
-    },
-
-    /////////////////////////
-    // FONT AND COLOR SUPPORT
-
-    _applyBackgroundColor : function( value, old ) {
-      this._styleBackgroundColor( value );
-    },
-
-    _applyBackgroundGradient : function( value, oldValue ) {
-      rwt.html.Style.setBackgroundGradient( this, value );
-      if( value === null ) {
-        this.setStyleProperty( "backgroundImage", this.getStyleProperty( "backgroundImage" ) );
-        this.setStyleProperty( "backgroundRepeat", this.getStyleProperty( "backgroundRepeat" ) );
-        this.setStyleProperty( "backgroundPosition", this.getStyleProperty( "backgroundPosition" ) );
-        this.setStyleProperty( "backgroundColor", this.getStyleProperty( "backgroundColor" ) );
-      }
-    },
-
-    _applyShadow : function( value, oldValue ) {
-      rwt.html.Style.setBoxShadow( this, value );
-    },
-
-    _applyTextShadow : function( value, oldValue ) {
-      rwt.html.Style.setTextShadow( this, value );
-    },
-
-    _styleBackgroundColor : function( value ) {
-      if( value == null || value === "transparent" ) {
-        this._removeBackgroundColor();
-      } else {
-        this.setStyleProperty( "backgroundColor", value );
-      }
-    },
-
-    _removeBackgroundColor : rwt.util.Variant.select( "qx.client", {
-      "default" : function() {
-        this.removeStyleProperty( "backgroundColor" );
-       },
-      "newmshtml" : function() {
-        this.setStyleProperty( "backgroundColor", "rgba( 0, 0, 0, 0 )" );
-      }
-    } ),
-
-    _applyTextColor : function(value, old) {
-      // place holder
-    },
-
-    _applyFont : function(value, old) {
-      // place holder
-    },
-
-    /////////////////
-    // BORDER SUPPORT
-
-    _cachedBorderTop : 0,
-    _cachedBorderRight : 0,
-    _cachedBorderBottom : 0,
-    _cachedBorderLeft : 0,
-    _targetNodeEnabled : false,
-
-    _applyBorder : function( value, old ) {
-      this._queueBorder( value );
-      if( value && value.getStyle() === "rounded" ) {
-        this._prepareGraphicsSupport();
-      }
-    },
-
-    _prepareGraphicsSupport : ( function() {
-      var result;
-      if( rwt.client.Client.supportsCss3() ) {
-        result = rwt.util.Functions.returnTrue;
-      } else {
-        result = function() {
-          if( !this._targetNodeEnabled && !this._isCreated ) {
-            this._targetNodeEnabled = true;
-          }
-        };
-      }
-      return result;
-    }() ),
-
-    _queueBorder : function( value ) {
-      this.addToQueue( "border" );
-      this.__reflowBorderX( value );
-      this.__reflowBorderY( value );
-      this.__borderObject = value;
-    },
-
-    /**
-     * Invalidates the cached frame on y-axis when border changes occour
-     */
-    __reflowBorderX : function( value ) {
-      var oldLeftWidth = this._cachedBorderLeft;
-      var oldRightWidth = this._cachedBorderRight;
-      this._cachedBorderLeft = value ? value.getWidthLeft() : 0;
-      this._cachedBorderRight = value ? value.getWidthRight() : 0;
-      if ((oldLeftWidth + oldRightWidth) != (this._cachedBorderLeft + this._cachedBorderRight)) {
-        this._invalidateFrameWidth();
-      }
-    },
-
-    /**
-     * Invalidates the cached frame on y-axis when border changes occour
-     */
-    __reflowBorderY : function(value) {
-      var oldTopWidth = this._cachedBorderTop;
-      var oldBottomWidth = this._cachedBorderBottom;
-      this._cachedBorderTop = value ? value.getWidthTop() : 0;
-      this._cachedBorderBottom = value ? value.getWidthBottom() : 0;
-      if ((oldTopWidth + oldBottomWidth) != (this._cachedBorderTop + this._cachedBorderBottom)) {
-        this._invalidateFrameHeight();
-      }
-    },
-
-    /**
-     * Renders border object to widget.
-     * Callback from layout queue
-     */
-    renderBorder : function( changes ) {
-      var value = this.__borderObject;
-      if( value ) {
-        value.renderWidget( this );
-      } else {
-        rwt.html.Border.resetWidget( this );
-      }
-      // RAP: Fix for Bug 301709, 380878
-      this._outerFrame = this._computeOuterFrame();
-    },
-
-    _computeOuterFrame : function() {
-      var result = [ 0, 0 ];
-      if( this._innerStyle && this.__borderObject ) {
-        var widths = this.__borderObject.getWidths();
-        if( this.__borderObject.getStyle() === "complex" && widths[ 0 ] === 2 ) {
-          // NOTE: RAP only supports complex borders with identical widths.
-          result = [ 2, 2 ];
-        } else {
-          result = [ widths[ 1 ] + widths[ 3 ], widths[ 0 ] + widths[ 2 ] ];
-        }
-      }
-      return result;
-    },
-
-    prepareEnhancedBorder : function( newElement ) {
-      if( !this._innerStyle ) {
-        this._targetNode = document.createElement( "div" );
-        this._innerStyle = this._targetNode.style;
-        this._targetNodeEnabled = true;
-        if( rwt.client.Client.isMshtml() ) {
-          this.addToQueue( "width" );
-          this.addToQueue( "height" );
-        } else {
-          this._innerStyle.width = "100%";
-          this._innerStyle.height = "100%";
-        }
-        this._innerStyle.position = "absolute";
-        if( !newElement ) {
-          for( var i in this._styleProperties ) {
-            switch( i ) {
-              case "zIndex":
-              case "filter":
-              case "opacity":
-              case "MozOpacity":
-              case "display":
-              case "cursor":
-              case "boxShadow":
-              break;
-              default:
-                this._innerStyle[i] = this._styleProperties[i];
-                this._style[i] = "";
-            }
-          }
-        }
-        // [if] Fix for bug 279800: Some focused widgets look strange in webkit
-        this._style.outline = "none";
-        this._applyContainerOverflow( this.getContainerOverflow() );
-        if( !newElement ) {
-          for( var i in this._htmlProperties ) {
-            switch( i ) {
-              case "unselectable":
-                this._targetNode.unselectable = this._htmlProperties[ i ];
-            }
-          }
-        }
-        while( this._element.firstChild ) {
-          this._targetNode.appendChild( this._element.firstChild );
-        }
-        this._element.appendChild( this._targetNode );
-        if( this.isInDom() ) {
-          // TODO [tb] : check if this works for ProgressBar
-          this._afterRemoveDom();
-          this._afterInsertDom();
-        }
-      }
-    },
-
-    //////////////////
-    // PADDING SUPPORT
-
-    _applyPaddingTop : function(value, old) {
-      this.addToQueue("paddingTop");
-      this._invalidateFrameHeight();
-    },
-
-    _applyPaddingRight : function(value, old) {
-      this.addToQueue("paddingRight");
-      this._invalidateFrameWidth();
-    },
-
-    _applyPaddingBottom : function(value, old) {
-      this.addToQueue("paddingBottom");
-      this._invalidateFrameHeight();
-    },
-
-    _applyPaddingLeft : function(value, old) {
-      this.addToQueue("paddingLeft");
-      this._invalidateFrameWidth();
-    },
-
-    /**
-     * Renders padding to widget
-     * Callback from layout queue
-     */
-    renderPadding : function(changes) {
-      // empty
-    },
-
-    /////////////////
-    // MARGIN SUPPORT
-
-    _applyMarginLeft : function(value, old) {
-      this.addToQueue("marginLeft");
-    },
-
-    _applyMarginRight : function(value, old) {
-      this.addToQueue("marginRight");
-    },
-
-    _applyMarginTop : function(value, old) {
-      this.addToQueue("marginTop");
-    },
-
-    _applyMarginBottom : function(value, old) {
-      this.addToQueue("marginBottom");
-    },
-
-    //////////////////
-    // COMMAND SUPPORT
-
-    execute : function() {
-      var cmd = this.getCommand();
-      if (cmd) {
-        cmd.execute(this);
-      }
-      this.createDispatchEvent( "execute" );
-    },
-
-    ///////////////////////////////
-    // DOM: OFFSET & SCROLL SUPPORT
-
-    _visualPropertyCheck : function() {
-      if (!this.isCreated()) {
-        throw new Error(this.classname + ": Element must be created previously!");
-      }
-    },
-
-    setScrollLeft : function(nScrollLeft) {
-      this._visualPropertyCheck();
-      this._getTargetNode().scrollLeft = nScrollLeft;
-    },
-
-    setScrollTop : function(nScrollTop) {
-      this._visualPropertyCheck();
-      this._getTargetNode().scrollTop = nScrollTop;
-    },
-
-    getOffsetLeft : function() {
-      this._visualPropertyCheck();
-      return rwt.html.Offset.getLeft(this.getElement());
-    },
-
-    getOffsetTop : function() {
-      this._visualPropertyCheck();
-      return rwt.html.Offset.getTop(this.getElement());
-    },
-
-    getScrollLeft : function() {
-      this._visualPropertyCheck();
-      return this._getTargetNode().scrollLeft;
-    },
-
-    getScrollTop : function() {
-      this._visualPropertyCheck();
-      return this._getTargetNode().scrollTop;
-    },
-
-    getClientWidth : function() {
-      this._visualPropertyCheck();
-      return this._getTargetNode().clientWidth;
-    },
-
-    getClientHeight : function() {
-      this._visualPropertyCheck();
-      return this._getTargetNode().clientHeight;
-    },
-
-    getOffsetWidth : function() {
-      this._visualPropertyCheck();
-      return this.getElement().offsetWidth;
-    },
-
-    getOffsetHeight : function() {
-      this._visualPropertyCheck();
-      return this.getElement().offsetHeight;
-    },
-
-    getScrollWidth : function() {
-      this._visualPropertyCheck();
-      return this._getTargetNode().scrollWidth;
-    },
-
-    getScrollHeight : function() {
-      this._visualPropertyCheck();
-      return this._getTargetNode().scrollHeight;
-    },
-
-    ////////////////////////////////
-    // DOM: SCROLL INTO VIEW SUPPORT
-
-    /**
-     * Scroll the widget into the view.
-     *
-     * This function works on DOM level and needs the widget to be already rendered.
-     * This is true for example in the "appear" event handler of a widget.
-     *
-     * @type member
-     * @param alignTopLeft {Boolean} Set the alignment. "True" means top left align, "False" means bottom right.
-     */
-    scrollIntoView : function(alignTopLeft) {
-      this.scrollIntoViewX(alignTopLeft);
-      this.scrollIntoViewY(alignTopLeft);
-    },
-
-    scrollIntoViewX : function(alignLeft) {
-      if (!this._isCreated || !this._isDisplayable) {
-        return false;
-      }
-      return rwt.html.ScrollIntoView.scrollX(this.getElement(), alignLeft);
-    },
-
-    scrollIntoViewY : function(alignTop) {
-      if (!this._isCreated || !this._isDisplayable) {
-        return false;
-      }
-      return rwt.html.ScrollIntoView.scrollY(this.getElement(), alignTop);
-    },
-
-    ////////////////////////
-    // DRAG AND DROP SUPPORT
-
-    supportsDrop : function(dragCache) {
-      // Is there a user-supplied supportsDropMethod?
-      var supportsDropMethod = this.getSupportsDropMethod();
-      if (supportsDropMethod !== null) {
-        // Yup.  Let it determine whether a drop is allowed.
-        return supportsDropMethod.call(this, dragCache);
-      }
-      // Default behavior is to allow drop only if not dropping onto self
-      return (this != dragCache.sourceWidget);
-    },
-
-    //////////////////
-    // Adapter Support
-
-    getAdapter : function( Clazz ) {
-      if( this._adapters === undefined ) {
-        this._adapters = {};
-      }
-      var key = Clazz.classname;
-      var result = this._adapters[ key ];
-      if( result == null ) {
-        new Clazz( this );
-        result = this._adapters[ key ];
-      }
-      return result;
-    },
-
-    applyObjectId : function( id ) {
-      if( rwt.widgets.base.Widget._renderHtmlIds ) {
-        this.setHtmlAttribute( "id", id );
-      }
-    }
-
-  },
-
-  ////////
-  // DEFER
-
-  defer : function(statics, members) {
-    statics.__initApplyMethods(members);
-    // In MSHTML we rewrite these runtime setters to improve the
-    // performance when using enhanced borders (2px complex borders)
-    // The problem are percentage width used by other browsers, too, to
-    // allow these complex borders to be rendered. IE performs worst
-    // when using percent. Because of this we add a lot overhead to
-    // calculate the inner size in IE. This is faster than the old
-    // much simpler solution with applying 100% width and height
-    // See also bug http://bugzilla.qooxdoo.org/show_bug.cgi?id=487
-    // See also: global cursor handling in ClientDocument
-    // Regarding innerStyle:
-    // Enhanced border are always 2px width, we need
-    // to substract the two border pixels assigned to
-    // the outer element from the outer width to get
-    // the inner width
-    if( rwt.client.Client.isMshtml() ) {
-      members._renderRuntimeWidth = function(v) {
-        this._style.pixelWidth = (v==null)?0:v;
-        if( this._targetNodeEnabled ) {
-          var innerValue = ( v != null ) ? Math.max( 0, v - this._outerFrame[ 0 ] ) : v;
-          this._innerStyle.pixelWidth = innerValue == null ? 0 : innerValue;
-        }
-      };
-      members._renderRuntimeHeight = function(v) {
-        this._style.pixelHeight = (v==null)?0:v;
-        if( this._targetNodeEnabled ) {
-          var innerValue = ( v != null ) ? Math.max( 0, v - this._outerFrame[ 1 ] ) : v;
-          this._innerStyle.pixelHeight = innerValue == null ? 0 : innerValue;
-        }
-      };
-      members._resetRuntimeWidth = function() {
-        this._style.width = "";
-        if( this._targetNodeEnabled ) {
-          this._innerStyle.width = "";
-        }
-      };
-      members._resetRuntimeHeight = function() {
-        this._style.height = "";
-        if( this._targetNodeEnabled ) {
-          this._innerStyle.height = "";
-        }
-      };
-    }
-    statics.__initLayoutProperties(statics);
-  },
-
-  /////////////
-  // DESTRUCTOR
-
-  destruct : function() {
-    this.dispatchSimpleEvent( "dispose", { target : this } );
-    var elem = this.getElement();
-    if (elem) {
-      elem.rwtWidget = null;
-      try {
-        if( elem.parentNode ) {
-          elem.parentNode.removeChild( elem );
-        }
-      } catch( ex ) {
-        //ignore exception
-      }
-      try {
-        if( this._targetNode && this._targetNode.parentNode ) {
-          this._targetNode.parentNode.removeChild( this._targetNode );
-        }
-      } catch( ex ) {
-        //ignore exception
-      }
-    }
-    this._disposeObjectDeep( "_adapters", 1 );
-    this._disposeFields(
-      "_isCreated",
-      "_inlineEvents",
-      "_element",
-      "_style",
-      "_targetNode",
-      "_innerStyle",
-      "_oldParent",
-      "_styleProperties",
-      "_htmlProperties",
-      "_htmlAttributes",
-      "__states",
-      "_jobQueue",
-      "_layoutChanges",
-      "__borderObject",
-      "_outerFrame"
-    );
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.util.WidgetRenderAdapter", {
-
-  extend : rwt.qx.Target,
-
-  construct : function( widget ) {
-    // Widget is responsible for the dispose:
-    this._autoDispose = false;
-    this.base( arguments );
-    this._widget = widget;
-    var key = this.classname;
-    if( widget._adapters[ key ] != null ) {
-      throw new Error( "Never create WidgetRenderAdapter directly!" );
-    }
-    widget._adapters[ key ] = this;
-  },
-
-  destruct : function() {
-    // NOTE: disposing the adapter before the widget is not used or tested.
-    this._widget = null;
-  },
-
-  events: {
-    "visibility" : "rwt.event.DataEvent",
-    "height" : "rwt.event.DataEvent",
-    "top" : "rwt.event.DataEvent",
-    "left" : "rwt.event.DataEvent",
-    "opacity" : "rwt.event.DataEvent",
-    "backgroundColor" : "rwt.event.DataEvent",
-    "backgroundGradient" : "rwt.event.DataEvent"
-  },
-
-  members : {
-
-    addRenderListener : function( type, listener, context ) {
-      var rendererName = this._renderFunctionNames[ type ];
-      if( !this.hasEventListeners( type ) ) {
-        var that = this;
-        this._widget[ rendererName ] = function() {
-          var render = that.dispatchSimpleEvent( type, arguments, false );
-          if( render ) {
-            this.constructor.prototype[ rendererName ].apply( this, arguments );
-          }
-        };
-      }
-      this.addEventListener( type, listener, context );
-    },
-
-    removeRenderListener : function( type, listener, context ) {
-      this.removeEventListener( type, listener, context );
-      if( !this.hasEventListeners( type ) ) {
-        var rendererName = this._renderFunctionNames[ type ];
-        delete this._widget[ rendererName ];
-      }
-    },
-
-    forceRender : function( type, value ) {
-      this.getOriginalRenderer( type ).call( this._widget, value );
-    },
-
-    getOriginalRenderer : function( type ) {
-      var rendererName = this._renderFunctionNames[ type ];
-      var proto = this._widget.constructor.prototype;
-      return proto[ rendererName ];
-    },
-
-    // TODO [tb]: AnimationRenderer#getValueFromWidget would also fit here
-
-    _renderFunctionNames :  {
-      "visibility" : "_applyVisibility",
-      "height" : "_renderRuntimeHeight",
-      "top" : "_renderRuntimeTop",
-      "left" : "_renderRuntimeLeft",
-      "opacity" : "_applyOpacity",
-      "backgroundColor" : "_styleBackgroundColor",
-      "backgroundGradient" : "_applyBackgroundGradient"
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2010, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.animation.AnimationRenderer", {
-
-  extend : rwt.qx.Object,
-
-  construct : function( animation ) {
-    // Animation is responsible for the dispose:
-    this._autoDispose = false;
-    this.base( arguments );
-    this._animation = animation;
-    this._animation._addRenderer( this );
-    // Simple use:
-    this._converterFunction = null;
-    this._renderFunction = null;
-    this._context = null;
-    this._startValue = null;
-    this._endValue = null;
-    this._lastValue = null;
-    this._setupFunction = null;
-    this._cloneFrom = null;
-    this._active = true;
-    this._activeOnce = false;
-    // Widget integration:
-    this._invisibilityGetter = rwt.util.Functions.returnZero;
-    this._fullVisibilityValue = null;
-    this._autoStartEnabled = true;
-    this._renderType = null;
-    this._renderAdapter = null;
-    this._animationType = 0;
-    this._autoCheck = true;
-  },
-
-  destruct : function() {
-    this.clearAnimation();
-    this._animation._removeRenderer( this );
-    this._animation = null;
-    this._startValue = null;
-    this._endValue = null;
-    this._invisibilityGetter = null;
-    this._lastValue = null;
-    this._setupFunction = null;
-    this._converterFunction = null;
-    this._renderFunction = null;
-    this._context = null;
-    this._cloneFrom = null;
-  },
-
-  members : {
-
-    //////////////////////////
-    // Public API - simple use
-
-    // Converts transitionValue (usually between 0 and 1) to the render-value.
-    setConverter : function( type ) {
-      if( typeof type == "string" ) {
-        this._converterFunction = rwt.animation.AnimationRenderer.converter[ type ];
-      } else {
-        this._converterFunction = type;
-      }
-    },
-
-    // Sets the function that is called with the value to render.
-    setRenderFunction : function( func, context ) {
-      if( this._renderType == null ) {
-        this._renderFunction = func;
-        this._context = context;
-      }
-    },
-
-    renderValue : function( value ) {
-      this._renderFunction.call( this._context, value );
-      this._lastValue = value;
-    },
-
-    setStartValue : function( value ) {
-      this._startValue = value;
-    },
-
-    setEndValue : function( value ) {
-      this._endValue = value;
-    },
-
-    // The setup-function is called (if set) directly before the first frame of
-    // an Animation is rendered. It is the last chance to set startValue,
-    // endValue, renderFunction and converter before they are used.
-    // The first parameter is the "config" value from Animation.start().
-    // The second paramter will be the animationRenderer.
-    setSetupFunction : function( func ) {
-      this._setupFunction = func;
-    },
-
-    // Use lastValue from this renderer as transition-value.
-    setCloneFrom : function( renderer ) {
-      this._cloneFrom = renderer;
-    },
-
-    getAnimation : function() {
-      return this._animation;
-    },
-
-    getContext : function() {
-      return this._context;
-    },
-
-    getStartValue : function( value ) {
-      return this._startValue;
-    },
-
-    getEndValue : function( value ) {
-      return this._endValue;
-    },
-
-    // Returns the value that was last rendered.
-    getLastValue : function() {
-      return this._lastValue;
-    },
-
-    // Set to false to disable calls to setupFunction and renderFunction.
-    // Also disables widget-integration.
-    setActive : function( value ) {
-      if( this._active !== value ) {
-        if( this._animation.isRunning() ) {
-          throw "AnimationRenderer: Can not change \"active\" while running!";
-        }
-        this._active = value;
-        if( this._renderType !== null ) {
-          this._handleAnimationType();
-        }
-      }
-    },
-
-    isActive : function() {
-      return this._active;
-    },
-
-    // Sets active to false as soon as animation is finished
-    activateOnce : function() {
-      if( !this._activeOnce ) {
-        this.setActive( true );
-        this._activeOnce = true;
-      }
-    },
-
-    cancelActivateOnce : function() {
-      if( this._activeOnce ) {
-        this._activeOnce = false;
-        this.setActive( false );
-      }
-    },
-
-    //////////////////////////////////
-    // internals - called by Animation
-
-    _setup : function( config ) {
-      if( this._active ) {
-        if( this._context instanceof rwt.widgets.base.Widget && this._context._isCreated !== true ) {
-          if( this._context._isInGlobalElementQueue ) {
-            rwt.widgets.base.Widget.flushGlobalQueues();
-          } else {
-            throw new Error( "AnimationRenderer setup failed: Widget not ready." );
-          }
-        }
-        if( this._setupFunction != null ) {
-          this._setupFunction.call( this._context, config, this );
-        }
-        this._startValue = this._prepareValue( this._startValue );
-        this._endValue = this._prepareValue( this._endValue );
-        if( this._renderFunction == null || this._converterFunction == null ) {
-          throw new Error( "renderFunction or converterFunction missing" );
-        }
-      }
-    },
-
-    _render : function( transitionValue ) {
-      if( this._active ) {
-        var convertValue = this._cloneFrom != null
-                           ? this._cloneFrom.getLastValue()
-                           : transitionValue;
-        try {
-          var value = this._converterFunction( convertValue, this._startValue, this._endValue );
-          this.renderValue( value );
-        } catch( e ) {
-          throw "AnimationRenderer failed: " + ( e.message ? e.message : e );
-        }
-      }
-    },
-
-    _finish : function( config ) {
-      if( this._active && config == "disappear" ) {
-        this._updateWidgetVisibility();
-        this._forceWidgetRenderer();
-      }
-      this.cancelActivateOnce();
-    },
-
-    _prepareValue : function( value ) {
-      var result = value;
-      switch( this._renderType ) {
-        case "backgroundColor":
-          if( typeof value == "string" ) {
-            if( value == "transparent" || value === "" || value.slice( 0, 4 ) === "rgba" ) {
-              result = null;
-            } else {
-              result = rwt.util.Colors.cssStringToRgb( value );
-            }
-          }
-        break;
-        case "backgroundGradient":
-          if( value ) {
-            var result = [];
-            for( var i = 0; i < value.length; i++ ) {
-              result[ i ] = [
-                value[ i ][ 0 ],
-                rwt.util.Colors.cssStringToRgb( value[ i ][ 1 ] )
-              ];
-            }
-          }
-        break;
-        case "opacity":
-          result = ( value == null || value > 1 || value < 0 ) ? 1 : value;
-        break;
-        default:
-          result = value != null ? value : 0;
-        break;
-      }
-      return result;
-    },
-
-    ///////////////////////////
-    // API - Widget integration
-
-    // The RenderType can currently be:  "height", "opacity", "backgroundColor",
-    // "backgroundGradient". The AnimationTypes are defined in the statics.
-    animate : function( widget, renderType, animationType ) {
-      if(    this._context != widget
-          || this._renderType != renderType
-          || this._animationType != animationType )
-      {
-        this.clearAnimation();
-        this._context = widget;
-        this._renderAdapter = widget.getAdapter( rwt.widgets.util.WidgetRenderAdapter );
-        this._renderType = renderType;
-        this._animationType = animationType;
-        this._renderFunction = this._renderAdapter.getOriginalRenderer( this._renderType );
-        var map = rwt.animation.AnimationRenderer.converterByRenderType;
-        this.setConverter( map[ this._renderType ] );
-        this._handleAnimationType();
-      }
-    },
-
-    clearAnimation : function() {
-      if( this._renderType !== null ) {
-        this._animationType = 0;
-        this._handleAnimationType();
-        this._renderType = null;
-        this.setRenderFunction( null, null );
-        this._renderAdapter = null;
-      }
-    },
-
-    isAnimated : function( type ) {
-      var result = false;
-      if( this._animationType > 0 && this._active ) {
-        var animated = type & this._animationType;
-        if( typeof type === "undefined" || animated !== 0 ) {
-          result = true;
-        }
-      }
-      return result;
-    },
-
-    setInvisibilityGetter : function( value ) {
-      this._invisibilityGetter = value;
-    },
-
-    // default is true
-    setAutoStart : function( value ) {
-      this._autoStartEnabled = value;
-    },
-
-    // Prevent autoStart if startValue/endValue are invalid. If set to false,
-    // the values can be set before or in the setupFunction is called.
-    // Default is true.
-    setAutoCheck : function( value ) {
-      this._autoCheck = value;
-    },
-
-    // Return the actual, planned or last known value from the widget.
-    getValueFromWidget : function() {
-      var result = null;
-      switch( this._renderType ) {
-        case "opacity":
-          result = this._context.getOpacity();
-        break;
-        case "height":
-          if( this._context.isCreated() && this._context._style.height ) {
-            result = parseInt( this._context._style.height, 10 );
-          } else {
-            result = this._context.getHeightValue();
-            this._context._computedHeightValue = null;
-            this._context._invalidatePreferredInnerHeight();
-            this._context._invalidatePreferredBoxHeight();
-          }
-        break;
-        case "top":
-          if( this._context.isCreated() && this._context._style.top ) {
-            result = parseInt( this._context._style.top, 10 );
-          } else {
-            result = this._context.getTopValue();
-          }
-        break;
-        case "left":
-          if( this._context.isCreated() && this._context._style.left ) {
-            result = parseInt( this._context._style.left, 10 );
-          } else {
-            result = this._context.getLeftValue();
-          }
-        break;
-        case "backgroundColor":
-          var bg = "backgroundColor";
-          var context = this._context;
-          if( context.getGfxProperty && context.getGfxProperty( bg ) ) {
-            result = context.getGfxProperty( bg );
-          } else if( context.getStyleProperty( bg ) ) {
-            result = context.getStyleProperty( bg );
-          } else {
-            result = null;
-          }
-        break;
-        case "backgroundGradient":
-          var context = this._context;
-          // NOTE : this is not necessarily the actually last rendered value, but converting from
-          //        css3-syntax to rwt-gradient would be overkill. It shouldn't matter.
-          result = context.getBackgroundGradient();
-        break;
-        default:
-          throw "getValueFromWidget: " + this._renderType + " not supported!";
-      }
-      return result;
-    },
-
-    // Are current values valid for animation (after using prepareValue)
-    // Assumes that the given values ARE valid as a property of the renderType.
-    checkValues : function() {
-      var result;
-      switch( this._renderType ) {
-        case "backgroundGradient":
-        case "backgroundColor":
-          result = this._startValue != null && this._endValue != null;
-        break;
-        default:
-          result = true;
-        break;
-      }
-      // NOTE: Does not compare objects, i.e. gradients:
-      return result && this._startValue != this._endValue;
-    },
-
-    //////////////////////////////////
-    // Widget integration - internals
-
-    _handleAnimationType : function() {
-      if( this._animation.isRunning() ) {
-        throw "AnimationRenderer: Can not change animation while running!";
-      }
-      // Note: Conventional event-handler would not be able to prevent the
-      // actual rendering, therefore the functions are overwritten instead.
-      if( this.isAnimated() ) {
-        this._attachToApplyVisibility( true );
-        this._attachToWidgetRenderer( true );
-      } else {
-        this._attachToApplyVisibility( false );
-        this._attachToWidgetRenderer( false );
-      }
-    },
-
-    _attachToApplyVisibility : function( value ) {
-      if( value ) {
-        this._renderAdapter.addRenderListener( "visibility", this._onVisibilityChange, this );
-        this._context.addEventListener( "create", this._onCreate, this );
-      } else {
-        this._renderAdapter.removeRenderListener( "visibility", this._onVisibilityChange, this );
-        this._context.removeEventListener( "create", this._onCreate, this );
-      }
-    },
-
-    _attachToWidgetRenderer : function( value ) {
-      if( value ) {
-        this._renderAdapter.addRenderListener( this._renderType, this._onOriginalRenderer, this );
-      } else {
-        this._renderAdapter.removeRenderListener( this._renderType, this._onOriginalRenderer, this );
-      }
-
-    },
-
-    //////////////////////////////////////
-    // Widget integration - event handlers
-
-    _onVisibilityChange : function( originalArgs ) {
-      var value = originalArgs[ 0 ];
-      var allow = false;
-      if( value ) {
-        allow = this._onBeforeAppear();
-      } else {
-        if( !this._context.isCreated() ) {
-          this._animation.cancel(); // scheduled appear animation
-        }
-        if( this._context.isSeeable() ) {
-          allow = this._onBeforeDisappear();
-        } else {
-          allow = true;
-        }
-      }
-      return allow;
-    },
-
-
-    _onCreate : function() {
-      if( this._context.isDisplayable() ) {
-       this._onBeforeAppear();
-      }
-    },
-
-    _onBeforeAppear : function() {
-      if( this._context.isCreated() ) {
-        this._animation.skip();
-      } else {
-        this._animation.cancel();
-      }
-      var typeAppear = rwt.animation.AnimationRenderer.ANIMATION_APPEAR;
-      if( this._context.isCreated() && this.isAnimated( typeAppear ) ) {
-        this.setEndValue( this.getValueFromWidget() );
-        if( this._invisibilityGetter != null ) {
-          this.setStartValue( this._invisibilityGetter( this._context ) );
-          this._render( 0 );
-        }
-        this._autoStart( typeAppear );
-      }
-      return true;
-    },
-
-    _onBeforeDisappear : function() {
-      this._animation.skip();
-      var typeDisappear = rwt.animation.AnimationRenderer.ANIMATION_DISAPPEAR;
-      var result = !this.isAnimated( typeDisappear );
-      if( !result ) {
-        if( this._invisibilityGetter !== null ) {
-          this.setEndValue( this._invisibilityGetter( this._context ) );
-        }
-        this.setStartValue( this.getValueFromWidget() );
-        this._autoStart( typeDisappear );
-      }
-      return result;
-    },
-
-    _onOriginalRenderer : function( originalArgs ) {
-      var value = originalArgs[ 0 ];
-      var oldValue = originalArgs[ 1 ];
-      var result = false;
-      if( this._animation.isStarted() ) {
-        var config = this._animation.getConfig();
-        var endValue = this._endValue;
-        if( config == "change" || config == "appear" ) {
-          this.setEndValue( value );
-        }
-        if( endValue != this._endValue ) {
-          if( this._animation.isRunning() ) {
-            this.setStartValue( this.getLastValue() );
-          }
-          if( !this._animation.restart() ) {
-            result = true;
-            this.cancelActivateOnce();
-          }
-        }
-      } else {
-        var typeChange = rwt.animation.AnimationRenderer.ANIMATION_CHANGE;
-        if( this.isAnimated( typeChange ) && this._context.isSeeable() ) {
-          this.setStartValue(   typeof oldValue !== "undefined"
-                              ? oldValue
-                              : this.getValueFromWidget() );
-          this.setEndValue( value );
-          if( !this._autoStart( typeChange ) && this._autoStartEnabled ) {
-            result = true;
-          }
-        } else {
-          result = true;
-        }
-      }
-      return result;
-    },
-
-    //////////////////////////////
-    // Widget integration - helper
-
-    // Forces the widget to call the renderer, may be asynchronous due to flush.
-    _forceWidgetRenderer : function() {
-      var applyName = rwt.animation.AnimationRenderer.applyFunctionNames[ this._renderType ];
-      this._context[ applyName ]( this._context.get( this._renderType ) );
-    },
-
-    _autoStart : function( type ) {
-      var result = false;
-      if(    this._autoStartEnabled
-          && this.isAnimated( type )
-          && ( this._autoCheck ? this.checkValues() : true ) )
-      {
-        result = this._animation.start( this._typeToConfig( type ) );
-      } else {
-        this.cancelActivateOnce();
-      }
-      return result;
-    },
-
-    _typeToConfig : function( type ) {
-      var result = null;
-      switch( type ) {
-        case rwt.animation.AnimationRenderer.ANIMATION_APPEAR:
-          result = "appear";
-        break;
-        case rwt.animation.AnimationRenderer.ANIMATION_DISAPPEAR:
-          result = "disappear";
-        break;
-        case rwt.animation.AnimationRenderer.ANIMATION_CHANGE:
-          result = "change";
-        break;
-      }
-      return result;
-    },
-
-    // calls the original "_applyVisibility".
-    _updateWidgetVisibility : function() {
-      var value = this._context.getVisibility();
-      this._renderAdapter.forceRender( "visibility", value );
-    }
-
-  },
-
-  statics : {
-
-    ANIMATION_APPEAR : 1,
-    ANIMATION_DISAPPEAR : 2,
-    ANIMATION_CHANGE : 4,
-
-    applyFunctionNames : {
-      "height" : "_applyHeight",
-      "opacity" : "_applyOpacity",
-      "backgroundColor" : "_applyBackgroundColor",
-      "backgroundGradient" : "_applyBackgroundGradient",
-      "top" : "_applyTop",
-      "left" : "_applyLeft"
-    },
-
-    converterByRenderType : {
-      "height" : "numericPositiveRound",
-      "top" : "numericRound",
-      "left" : "numericRound",
-      "opacity" : "factor",
-      "backgroundColor" : "color",
-      "backgroundGradient" : "gradient"
-    },
-
-    converter : {
-
-      // Converter working without startValue/EndValue
-
-      none : function( value ) {
-        return value;
-      },
-
-      round : Math.round,
-
-      positive : function( value ) {
-        return Math.max( 0, value );
-      },
-
-      // Converter needing valid startValue/EndValue
-
-      numeric : function( value, startValue, endValue ) {
-        return startValue + ( endValue - startValue ) * value;
-      },
-
-      numericRound : function( value, startValue, endValue ) {
-        var result = startValue + ( endValue - startValue ) * value;
-        return Math.round( result );
-      },
-
-      numericPositive : function( value, startValue, endValue ) {
-        var diff = endValue - startValue;
-        return Math.max( 0, startValue + diff * value );
-      },
-
-      numericPositiveRound : function( value, startValue, endValue ) {
-        var diff = endValue - startValue;
-        var result = Math.max( 0, startValue + diff * value );
-        return Math.round( result );
-      },
-
-      factor : function( value, startValue, endValue ) {
-        var result = startValue + ( endValue - startValue ) * value;
-        return Math.max( 0, Math.min( result, 1) );
-      },
-
-      color : function( value, startValue, endValue ) {
-        var result = [];
-        var part;
-        var partDiff;
-        for( var i = 0; i < 3; i++ ) {
-          partDiff = endValue[ i ] - startValue[ i ];
-          part = Math.round( startValue[ i ] + partDiff * value );
-          result[ i ] = Math.max( 0, Math.min( part, 255 ) );
-        }
-        return rwt.util.Colors.rgbToRgbString( result );
-      },
-
-      // Assumes that the number of colors are identical
-      gradient : function( value, startValue, endValue ) {
-        var convertColor = rwt.animation.AnimationRenderer.converter.color;
-        var convertFactor = rwt.animation.AnimationRenderer.converter.factor;
-        var result = [];
-        var length = Math.min( endValue.length, startValue.length );
-        for( var i = 0; i < length; i++ ) {
-          result[ i ] = [
-            convertFactor( value, startValue[ i ][ 0 ], endValue[ i ][ 0 ] ),
-            convertColor( value, startValue[ i ][ 1 ], endValue[ i ][ 1 ] )
-          ];
-        }
-        return result;
-      }
-
-    }//converter
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2010, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.animation.Animation", {
-
-  extend : rwt.qx.Target,
-
-  construct : function() {
-    this.base( arguments );
-    this._renderer = [];
-    // properties:
-    this._duration = 1000;
-    this._transitionFunction = rwt.animation.Animation.transitions.linear;
-    // setup:
-    this._startOn = null;
-    this._finishOn = null;
-    this._totalTime = null;
-    this._config = null;
-    this._defaultRenderer = null;
-    // state info:
-    this._isRunning = false;
-    this._inQueue = false;
-    this._exclusive = false;
-  },
-
-  destruct : function() {
-    if( this.isRunning() ) {
-      this.skip();
-    } else {
-      this.cancel();
-    }
-    try {
-      for( var i = 0; i < this._renderer.length; i++ ) {
-        this._renderer[ i ].dispose();
-      }
-    } catch( ex ) {
-      throw "Could not Dispose AnimationRenderer: " + ex;
-    }
-    this._renderer = null;
-  },
-
-  events: {
-    "init" : "rwt.event.DataEvent",
-    "finish" : "rwt.event.DataEvent",
-    "cancel" : "rwt.event.DataEvent"
-  },
-
-  members : {
-
-    /////////////
-    // Public API
-
-    // Time in milliseconds
-    setDuration : function( value ) {
-      this._duration = value;
-    },
-
-    getDuration : function( value ) {
-      return this._duration;
-    },
-
-    setTransition : function( type ) {
-      this._transitionFunction = rwt.animation.Animation.transitions[ type ];
-    },
-
-    setProperties : function( properties ) {
-      this.setDuration( properties[ 0 ] );
-      this.setTransition( properties[ 1 ] );
-    },
-
-    getRenderer : function( number ) {
-      return this._renderer[ number ];
-    },
-
-    getDefaultRenderer : function( active ) {
-      if( this._defaultRenderer == null || this._defaultRenderer.isDisposed() ) {
-        this._defaultRenderer = new rwt.animation.AnimationRenderer( this );
-      }
-      if( typeof active != "undefined" ) {
-        this._defaultRenderer.setActive( active );
-      }
-      return this._defaultRenderer;
-    },
-
-    getRendererLength : function() {
-      return this._renderer.length;
-    },
-
-    getRendererIndex : function( renderer ) {
-      return this._renderer.indexOf( renderer );
-    },
-
-    getConfig : function() {
-      return this._config;
-    },
-
-    setExclusive : function( value ) {
-      this._exclusive = value;
-    },
-
-    getExclusive : function() {
-      return this._exclusive;
-    },
-
-    // config can by any value, but "appear", "disappear" and "change" are
-    // used by AnimationRenderer when autoStart is enabled. When using
-    // the widget-integration of AnimationRenderer, those should be used
-    // in the appropriate scenarios. A config is valid between start and cancel,
-    // then its set to null. Its given in the setup-function and all events.
-    start : function( config ) {
-      if ( !this.isStarted() ) {
-        rwt.animation.Animation._addToQueue( this );
-        this._inQueue = true;
-        this._config = config;
-        this._init();
-      }
-      return this.isStarted();
-    },
-
-    restart : function() {
-      var result = false;
-      if( this.isStarted() ) {
-        var config = this._config;
-        this.cancel();
-        result = this.start( config );
-      }
-      return result;
-    },
-
-    cancel : function() {
-      if( this.isStarted() ) {
-        this._inQueue = false;
-        this._isRunning = false;
-        this.createDispatchDataEvent( "cancel", this._config );
-        this._config = null;
-        rwt.animation.Animation._removeFromLoop( this );
-      }
-    },
-
-    // Unlike "cancel", this properly finishs the animation in any case by
-    // simply skipping over the remaining frames (If there are any).
-    skip : function() {
-      if( this.isStarted() ) {
-        if( !this.isRunning() ) {
-          this._render( 0 );
-        }
-        this._finish();
-      }
-    },
-
-    setRendererActive : function( value ) {
-      for( var i = 0; i < this._renderer.length; i++ ) {
-        this._renderer[ i ].setActive( value );
-      }
-    },
-
-    activateRendererOnce : function() {
-      for( var i = 0; i < this._renderer.length; i++ ) {
-        this._renderer[ i ].activateOnce();
-      }
-    },
-
-    isStarted : function() {
-      return this._inQueue;
-    },
-
-    isRunning : function() {
-      return this._isRunning;
-    },
-
-    ////////////
-    // internals
-
-    _addRenderer : function( renderer ) {
-      this._renderer.push( renderer );
-    },
-
-    _removeRenderer : function( renderer ) {
-      if( this.isStarted() ) {
-        throw "Cannot remove AnimationRenderer: Animation already started!";
-      }
-      rwt.util.Arrays.remove( this._renderer, renderer );
-    },
-
-    _init : function() {
-      this.createDispatchDataEvent( "init", this._config );
-      this._startOn = null;
-      this._numberRenderer = this._renderer.length;
-    },
-
-    _loop : function( time ) {
-      if( this._startOn === null ) {
-        this._startOn = new Date().getTime();
-        this._finishOn = this._startOn + ( this._duration );
-        this._totalTime = this._duration;
-      }
-      if ( time >= this._finishOn ) {
-        this._finish();
-      } else {
-        var position = ( time - this._startOn ) / this._totalTime;
-        this._render( position );
-      }
-    },
-
-    _render : function( position ) {
-      if( !this._isRunning ) {
-        for( var i = 0; i < this._numberRenderer; i++ ) {
-          this._renderer[ i ]._setup( this._config );
-        }
-        this._isRunning = true;
-      }
-      var transitionValue = this._transitionFunction( position );
-      for( var i = 0; i < this._numberRenderer; i++ ) {
-        this._renderer[ i ]._render( transitionValue );
-      }
-    },
-
-    _finish : function() {
-      this._render( 1 );
-      var config = this._config;
-      this.cancel();
-      for( var i = 0; i < this._numberRenderer; i++ ) {
-        this._renderer[ i ]._finish( config );
-      }
-      this.createDispatchDataEvent( "finish", config );
-    }
-
-  },
-
-  statics : {
-
-    ///////////////
-    // Global Queue
-
-    FPS : 60,
-    _queue : [],
-    _interval : null,
-    _exclusive : null,
-
-    _addToQueue : function( animation ) {
-      if( animation.getExclusive() ) {
-        this._exclusive = animation;
-      } else {
-        this._queue.push( animation );
-      }
-      if ( this._interval == null ) {
-        this._startLoop();
-      }
-    },
-
-    _removeFromLoop : function( animation ) {
-      if( animation === this._exclusive ) {
-        this._exclusive = null;
-      } else {
-        rwt.util.Arrays.remove( this._queue, animation );
-      }
-      if( this._exclusive === null && this._queue.length === 0 ) {
-        this._stopLoop();
-      }
-    },
-
-    _startLoop : function() {
-      this._interval = setInterval( this._mainLoop, Math.round( 1000 / this.FPS ) );
-    },
-
-    _stopLoop : function() {
-      window.clearInterval( this._interval );
-      this._interval = null;
-    },
-
-    _mainLoop : function() {
-      try {
-        if( !rwt.remote.EventUtil.getSuspended() ) {
-          var time = new Date().getTime();
-          var Animation = rwt.animation.Animation;
-          try {
-            if( Animation._exclusive !== null ) {
-              Animation._exclusive._loop( time );
-            } else {
-              for( var i=0, len = Animation._queue.length; i < len; i++ ) {
-                if( Animation._queue[ i ] ) {
-                  Animation._queue[ i ]._loop( time );
-                }
-              }
-            }
-          } catch( e ) {
-            // prevent endless error-messages:
-            rwt.animation.Animation._stopLoop();
-            throw "Animation aborted: " + e;
-          }
-        }
-      } catch( ex ) {
-        rwt.runtime.ErrorHandler.processJavaScriptError( ex );
-      }
-    },
-
-    ////////
-    // Util
-
-    blockGlobalFlushs : function( value ) {
-      rwt.widgets.base.Widget._inFlushGlobalQueues = value;
-      if( !value ) {
-        rwt.widgets.base.Widget._initAutoFlush( 0 );
-      }
-    },
-
-    //////////////
-    // Transitions
-
-    transitions : {
-
-      linear : function( position ) {
-        return position;
-      },
-
-      ease : function ( position ) {
-        var easeOut = -Math.pow( position - 1 , 2 ) + 1;
-        return ( -Math.cos( easeOut *  Math.PI ) / 2 ) + 0.5;
-      },
-
-      easeIn : function ( position ) {
-        return Math.pow( position, 2 );
-      },
-
-      easeOut : function ( position ) {
-        return -Math.pow( position - 1 , 2 ) + 1;
-      },
-
-      easeInOut : function( position ) {
-        return ( -Math.cos( position * Math.PI ) / 2 ) + 0.5;
-      }
-
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-(function(){
-
-var AnimationRenderer = rwt.animation.AnimationRenderer;
-var Animation = rwt.animation.Animation;
-
-rwt.animation.AnimationUtil = {
-
-  snapTo : function( widget, time, left, top, hide ) {
-    var animation = this._createAnimation( widget, time, "easeOut" );
-    var rendererX = this._createRenderer( animation, widget, "left" );
-    var rendererY = this._createRenderer( animation, widget, "top" );
-    var startLeft = parseInt( widget.getLeft(), 10 );
-    var startTop = parseInt( widget.getTop(), 10 );
-    rendererX.setStartValue( isNaN( startLeft ) ? 0 : startLeft );
-    rendererY.setStartValue( isNaN( startTop ) ? 0 : startTop );
-    rendererX.setEndValue( left );
-    rendererY.setEndValue( top );
-    animation.addEventListener( "finish", function() {
-      widget.setLeft( left );
-      widget.setTop( top );
-      if( hide ) {
-        widget.setDisplay( false );
-      }
-    } );
-    animation.start();
-  },
-
-  _createAnimation : function( widget, time, transition ) {
-    var result = new Animation();
-    result.setDuration( time );
-    result.setTransition( transition );
-    var abort = function() {
-      result.cancel();
-      result.dispose();
-    };
-    widget.addEventListener( "cancelAnimations", abort );
-    widget.addEventListener( "dispose", abort );
-    result.addEventListener( "cancel", function() {
-      widget.removeEventListener( "dispose", abort );
-      widget.removeEventListener( "cancelAnimations", abort );
-      // animation may still need to dispatch "finish", dispose later
-      rwt.client.Timer.once( result.dispose, result, 0 );
-    } );
-    return result;
-  },
-
-  _createRenderer : function( animation, widget, property ) {
-    var converter = AnimationRenderer.converterByRenderType;
-    var adapter = widget.getAdapter( rwt.widgets.util.WidgetRenderAdapter );
-    var result = new AnimationRenderer( animation );
-    result.setRenderFunction( adapter.getOriginalRenderer( property ), widget );
-    result.setConverter( converter[ property ] );
-    return result;
-  }
-
-};
-
-}());
-
-/*******************************************************************************
- * Copyright (c) 2010, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-( function() {
-
-var Animation = rwt.animation.Animation;
-var AnimationRenderer = rwt.animation.AnimationRenderer;
-var EventHandlerUtil = rwt.event.EventHandlerUtil;
-
-rwt.qx.Mixin.define( "rwt.animation.VisibilityAnimationMixin", {
-
-  properties : {
-
-    animation : {
-      check : "Object",
-      nullable : false,
-      init : null,
-      apply : "_applyAnimation",
-      themeable : true
-    }
-
-  },
-
-  construct : function() {
-    this.hide(); // forces _applyVisibility to be called on show() - not a good practice
-    this.addEventListener( "changeVisibility", this._blockUserEvents, this );
-    this.addEventListener( "destroy", this._onDestroyAnim, this );
-    if( this instanceof rwt.widgets.Composite ) {
-      this.show();
-    }
-  },
-
-  destruct : function() {
-    if( this._appearAnimation != null ) {
-      this._appearAnimation.dispose();
-    }
-    this._appearAnimation = null;
-    if( this._disappearAnimation != null ) {
-      this._disappearAnimation.dispose();
-    }
-    this._disappearAnimation = null;
-  },
-
-  members : {
-    _appearAnimation : null, // Declaration in constructor would be too late (mixin)
-    _disappearAnimation : null,
-    _animateDestroy : false,
-
-    _applyAnimation : function( newValue, oldValue ) {
-      this._configureAppearAnimation( newValue );
-      this._configureDisappearAnimation( newValue );
-    },
-
-    ////////////////////
-    // Appear animations
-
-    _configureAppearAnimation : function( config ) {
-      if( this._appearAnimation !== null ) {
-        this._appearAnimation.getDefaultRenderer().setActive( false );
-      }
-      for( var type in config ) {
-        switch( type ) {
-          case "fadeIn":
-            this._configureFadeIn( config[ type ] );
-          break;
-          case "slideIn":
-            this._configureSlideIn( config[ type ] );
-          break;
-          case "flyInTop":
-          case "flyInLeft":
-          case "flyInRight":
-          case "flyInBottom":
-            this._configureFlyIn( config[ type ], type );
-          break;
-        }
-      }
-    },
-
-    _configureFadeIn : function( props ) {
-      var animation = this._getAppearAnimation();
-      animation.setProperties( props );
-      animation.getDefaultRenderer().animate( this, "opacity", AnimationRenderer.ANIMATION_APPEAR );
-    },
-
-    _configureSlideIn : function( props ) {
-      var animation = this._getAppearAnimation();
-      animation.setProperties( props );
-      var renderer = animation.getDefaultRenderer();
-      var animationType = AnimationRenderer.ANIMATION_APPEAR | AnimationRenderer.ANIMATION_CHANGE;
-      renderer.animate( this, "height", animationType );
-      animation.addEventListener( "init", this._initSlideAnimation, this );
-      animation.addEventListener( "cancel", this._finishSlideAnimation, this );
-    },
-
-    _configureFlyIn : function( props, type ) {
-      var animation = this._getAppearAnimation();
-      animation.setProperties( props );
-      var renderer = animation.getDefaultRenderer();
-      var animationType = AnimationRenderer.ANIMATION_APPEAR;
-      switch( type ) {
-        case "flyInTop":
-          renderer.animate( this, "top", animationType );
-          renderer.setInvisibilityGetter( rwt.animation.VisibilityAnimationMixin.hideTop );
-        break;
-        case "flyInBottom":
-          renderer.animate( this, "top", animationType );
-          renderer.setInvisibilityGetter( rwt.animation.VisibilityAnimationMixin.hideBottom );
-        break;
-        case "flyInLeft":
-          renderer.animate( this, "left", animationType );
-          renderer.setInvisibilityGetter( rwt.animation.VisibilityAnimationMixin.hideLeft );
-        break;
-        case "flyInRight":
-          renderer.animate( this, "left", animationType );
-          renderer.setInvisibilityGetter( rwt.animation.VisibilityAnimationMixin.hideRight );
-        break;
-      }
-    },
-
-    _getAppearAnimation : function() {
-      if( this._appearAnimation === null ) {
-        this._appearAnimation = new Animation();
-        if( rwt.client.Client.isMshtml() && this instanceof rwt.widgets.Shell) {
-          this._appearAnimation.setExclusive( true );
-        }
-      }
-      this._appearAnimation.getDefaultRenderer().setActive( true );
-      return this._appearAnimation;
-    },
-
-    ///////////////////////
-    // Disappear Animations
-
-    _onDestroyAnim : function() {
-      var result = true;
-      if( this._animateDestroy ) {
-        result = false;
-        this._markInDispose();
-        this.hide();
-        this._disappearAnimation.addEventListener( "cancel", this._finishDestroyAnimation, this );
-      }
-      return result;
-    },
-
-    _finishDestroyAnimation : function() {
-      this._animateDestroy = false;
-      delete this._isInGlobalDisposeQueue;
-      this.destroy();
-    },
-
-    _configureDisappearAnimation : function( config ) {
-      if( this._disappearAnimation !== null ) {
-        this._disappearAnimation.getDefaultRenderer().setActive( false );
-        this._animateDestroy = false;
-      }
-      for( var type in config ) {
-        switch( type ) {
-          case "fadeOut":
-            this._configureFadeOut( config[ type ] );
-          break;
-          case "slideOut":
-            this._configureSlideOut( config[ type ] );
-          break;
-          case "flyOutTop":
-          case "flyOutLeft":
-          case "flyOutRight":
-          case "flyOutBottom":
-            this._configureFlyOut( config[ type ], type );
-          break;
-        }
-      }
-    },
-
-    _configureFadeOut : function( props ) {
-      var animation = this._getDisappearAnimation();
-      var renderer = animation.getDefaultRenderer();
-      renderer.animate( this, "opacity", AnimationRenderer.ANIMATION_DISAPPEAR );
-      animation.setProperties( props );
-    },
-
-    _configureSlideOut : function( props ) {
-      var animation = this._getDisappearAnimation();
-      var renderer = animation.getDefaultRenderer();
-      renderer.animate( this, "height", AnimationRenderer.ANIMATION_DISAPPEAR );
-      animation.addEventListener( "init", this._initSlideAnimation, this );
-      animation.addEventListener( "cancel", this._finishSlideAnimation, this );
-      animation.setProperties( props );
-    },
-
-    _configureFlyOut : function( props, type ) {
-      var animation = this._getDisappearAnimation();
-      animation.setProperties( props );
-      var renderer = animation.getDefaultRenderer();
-      var animationType = AnimationRenderer.ANIMATION_DISAPPEAR;
-      switch( type ) {
-        case "flyOutTop":
-          renderer.animate( this, "top", animationType );
-          renderer.setInvisibilityGetter( rwt.animation.VisibilityAnimationMixin.hideTop );
-        break;
-        case "flyOutBottom":
-          renderer.animate( this, "top", animationType );
-          renderer.setInvisibilityGetter( rwt.animation.VisibilityAnimationMixin.hideBottom );
-        break;
-        case "flyOutLeft":
-          renderer.animate( this, "left", animationType );
-          renderer.setInvisibilityGetter( rwt.animation.VisibilityAnimationMixin.hideLeft );
-        break;
-        case "flyOutRight":
-          renderer.animate( this, "left", animationType );
-          renderer.setInvisibilityGetter( rwt.animation.VisibilityAnimationMixin.hideRight );
-        break;
-      }
-    },
-
-    _getDisappearAnimation : function() {
-      if( this._disappearAnimation === null ) {
-        this._disappearAnimation = new Animation();
-        if( this instanceof rwt.widgets.Shell ) {
-          this._disappearAnimation.addEventListener( "init", this._lockActiveState, this );
-          this._disappearAnimation.addEventListener( "cancel", this._unlockActiveState, this );
-          if( rwt.client.Client.isMshtml() ) {
-            this._disappearAnimation.setExclusive( true );
-          }
-        }
-      }
-      this._disappearAnimation.getDefaultRenderer().setActive( true );
-      this._animateDestroy = true;
-      return this._disappearAnimation;
-    },
-
-    /////////
-    // helper
-
-    _initSlideAnimation : function( event ) {
-      this.setContainerOverflow( false );
-    },
-
-    _finishSlideAnimation : function( event ) {
-      // TODO : could container overflow just be generally false, or use _applyHeight instead?
-      this.setContainerOverflow( true );
-    },
-
-    _blockUserEvents : function( changeEvent ) {
-      var element = this.getElement();
-      if( element ) {
-        EventHandlerUtil.blockUserDomEvents( element, !changeEvent.getValue() );
-      }
-    },
-
-    _lockActiveState : function() {
-      //this._setActiveState = rwt.util.Functions.returnNull;
-      this.getWindowManager().blockActiveState = true;
-    },
-
-    _unlockActiveState : function() {
-      var manager = rwt.widgets.base.Window.getDefaultWindowManager();
-      manager.blockActiveState = false;
-      if( !this.isDisposed() && !this._isInGlobalDisposeQueue ) {
-        //delete this._setActiveState;
-        this._setActiveState( this.getActive() );
-      }
-      var active = manager.getActiveWindow();
-      if( active && active !== this ) {
-        active._setActiveState( true );
-      }
-    }
-
- },
-
- statics : {
-
-   hideTop : function( widget ) {
-     return parseInt( widget.getHeightValue(), 10 ) * -1;
-   },
-
-   hideBottom : function( widget ) {
-     return widget.getParent().getInnerHeight();
-   },
-
-   hideLeft : function( widget ) {
-     return parseInt( widget.getWidthValue(), 10 ) * -1;
-   },
-
-   hideRight : function( widget ) {
-     return widget.getParent().getInnerWidth();
-   }
-
- }
-
-} );
-
-}());
-
-/*******************************************************************************
- * Copyright: 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                       and EclipseSource
- *
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- *
- *   This class contains code based on the following work:
- *
- *   * Prototype JS
- *     http://www.prototypejs.org/
- *     Version 1.5
- *
- *     Copyright:
- *       (c) 2006-2007, Prototype Core Team
- *
- *     License:
- *       MIT: http://www.opensource.org/licenses/mit-license.php
- *
- *     Authors:
- *       * Prototype Core Team
- *
- ******************************************************************************/
-
-/**
- * Style querying and modification of HTML elements.
- *
- * Automatically normalizes cross-browser differences. Optimized for
- * performance.
- */
-rwt.qx.Class.define( "rwt.html.Style", {
-
-  statics : {
-
-    /** Internal map of style property convertions */
-    __hints : {
-      // Style property name correction
-      names : {
-        "float" : rwt.client.Client.isMshtml() ? "styleFloat" : "cssFloat",
-        "boxSizing" : rwt.client.Client.isGecko() ? "mozBoxSizing" : "boxSizing"
-      },
-
-      // Mshtml has propertiery pixel* properties for locations and dimensions
-      // which return the pixel value. Used by getComputed() in mshtml variant.
-      mshtmlPixel : {
-        width : "pixelWidth",
-        height : "pixelHeight",
-        left : "pixelLeft",
-        right : "pixelRight",
-        top : "pixelTop",
-        bottom : "pixelBottom"
-      }
-
-    },
-
-    BROWSER_PREFIX : rwt.util.Variant.select( "qx.client", {
-      "gecko" : "-moz-",
-      "webkit" : "-webkit-",
-      "default" : ""
-    } ),
-
-    /*
-    ---------------------------------------------------------------------------
-      STYLE ATTRIBUTE SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    /** {Integer} Computed value of a style property. Compared to the cascaded style,
-     * this one also interprets the values e.g. translates <code>em</code> units to
-     * <code>px</code>.
-     */
-    COMPUTED_MODE : 1,
-
-
-    /** {Integer} Cascaded value of a style property. */
-    CASCADED_MODE : 2,
-
-
-    /** {Integer} Local value of a style property. Ignores inheritance cascade. Does not interpret values. */
-    LOCAL_MODE : 3,
-
-    /**
-     * Gets the value of a style property.
-     *
-     * *Computed*
-     *
-     * Returns the computed value of a style property. Compared to the cascaded style,
-     * this one also interprets the values e.g. translates <code>em</code> units to
-     * <code>px</code>.
-     *
-     * *Cascaded*
-     *
-     * Returns the cascaded value of a style property.
-     *
-     * *Local*
-     *
-     * Ignores inheritance cascade. Does not interpret values.
-     *
-     * @type static
-     * @signature function(element, name, mode, smart)
-     * @param element {Element} The DOM element to modify
-     * @param name {String} Name of the style attribute (js variant e.g. marginTop, wordSpacing)
-     * @param mode {Number} Choose one of the modes {@link #COMPUTED_MODE}, {@link #CASCADED_MODE},
-     *   {@link #LOCAL_MODE}. The computed mode is the default one.
-     * @param smart {Boolean?true} Whether the implementation should automatically use
-     *    special implementations for some properties
-     * @return {var} The value of the property
-     */
-    get : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function(element, name, mode, smart)
-      {
-        var hints = this.__hints;
-
-        // normalize name
-        name = hints.names[name] || name;
-
-        // switch to right mode
-        switch(mode)
-        {
-          case this.LOCAL_MODE:
-            return element.style[name] || "";
-
-          case this.CASCADED_MODE:
-            return element.currentStyle[name];
-
-          default:
-            // Read cascaded style
-            var currentStyle = element.currentStyle[name];
-
-            // Pixel values are always OK
-            if (/^-?[\.\d]+(px)?$/i.test(currentStyle)) {
-              return currentStyle;
-            }
-
-            // Try to convert non-pixel values
-            var pixel = hints.mshtmlPixel[name];
-            if (pixel)
-            {
-              // Backup local and runtime style
-              var localStyle = element.style[name];
-
-              // Overwrite local value with cascaded value
-              // This is needed to have the pixel value setupped
-              element.style[name] = currentStyle || 0;
-
-              // Read pixel value and add "px"
-              var value = element.style[pixel] + "px";
-
-              // Recover old local value
-              element.style[name] = localStyle;
-
-              // Return value
-              return value;
-            }
-
-            // Non-Pixel values may be problematic
-            if (/^-?[\.\d]+(em|pt|%)?$/i.test(currentStyle)) {
-              throw new Error("Untranslated computed property value: " + name + ". Only pixel values work well across different clients.");
-            }
-
-            // Just the current style
-            return currentStyle;
-        }
-      },
-
-      "default" : function(element, name, mode, smart)
-      {
-        var hints = this.__hints;
-
-        // normalize name
-        name = hints.names[name] || name;
-
-        // switch to right mode
-        switch(mode)
-        {
-          case this.LOCAL_MODE:
-            return element.style[name];
-
-          case this.CASCADED_MODE:
-            // Currently only supported by Opera and Internet Explorer
-            if (element.currentStyle) {
-              return element.currentStyle[name];
-            }
-
-            throw new Error("Cascaded styles are not supported in this browser!");
-
-          // Support for the DOM2 getComputedStyle method
-          //
-          // Safari >= 3 & Gecko > 1.4 expose all properties to the returned
-          // CSSStyleDeclaration object. In older browsers the function
-          // "getPropertyValue" is needed to access the values.
-          //
-          // On a computed style object all properties are read-only which is
-          // identical to the behavior of MSHTML's "currentStyle".
-          default:
-            // Opera, Mozilla and Safari 3+ also have a global getComputedStyle which is identical
-            // to the one found under document.defaultView.
-
-            // The problem with this is however that this does not work correctly
-            // when working with frames and access an element of another frame.
-            // Then we must use the <code>getComputedStyle</code> of the document
-            // where the element is defined.
-            var doc = rwt.html.Nodes.getDocument(element);
-            var computed = doc.defaultView.getComputedStyle(element, null);
-
-            // All relevant browsers expose the configured style properties to
-            // the CSSStyleDeclaration objects
-            return computed ? computed[name] : null;
-        }
-      }
-    }),
-
-
-    /**
-     * Get the computed (CSS) style property of a given DOM element
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @param propertyName {String} the name of the style property. e.g. "color", "border", ...
-     * @return {String} the (CSS) style property
-     * @signature function(vElement, propertyName)
-     */
-    getStyleProperty : rwt.util.Objects.select((document.defaultView && document.defaultView.getComputedStyle) ? "hasComputed" : "noComputed",
-    {
-      "hasComputed" : function(el, prop)
-      {
-        try {
-          return el.ownerDocument.defaultView.getComputedStyle(el, "")[prop];
-        } catch(ex) {
-          throw new Error("Could not evaluate computed style: " + el + "[" + prop + "]: " + ex);
-        }
-      },
-
-      "noComputed" : rwt.util.Variant.select("qx.client",
-      {
-        "mshtml" : function(el, prop)
-        {
-          try {
-            return el.currentStyle[prop];
-          } catch(ex) {
-            throw new Error("Could not evaluate computed style: " + el + "[" + prop + "]: " + ex);
-          }
-        },
-
-        "default" : function(el, prop)
-        {
-          try {
-            return el.style[prop];
-          } catch(ex) {
-            throw new Error("Could not evaluate computed style: " + el + "[" + prop + "]");
-          }
-        }
-      })
-    }),
-
-
-    /**
-     * Get a (CSS) style property of a given DOM element and interpret the property as integer value
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @param propertyName {String} the name of the style property. e.g. "paddingTop", "marginLeft", ...
-     * @return {Integer} the (CSS) style property converted to an integer value
-     */
-    getStyleSize : function(vElement, propertyName) {
-      return parseInt( rwt.html.Style.getStyleProperty( vElement, propertyName ), 10 ) || 0;
-    },
-
-
-    /**
-     * Get the element's left margin.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's left margin size
-     */
-    getMarginLeft : function(vElement) {
-      return rwt.html.Style.getStyleSize(vElement, "marginLeft");
-    },
-
-
-    /**
-     * Get the element's top margin.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's top margin size
-     */
-    getMarginTop : function(vElement) {
-      return rwt.html.Style.getStyleSize(vElement, "marginTop");
-    },
-
-
-    /**
-     * Get the element's right margin.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's right margin size
-     */
-    getMarginRight : function(vElement) {
-      return rwt.html.Style.getStyleSize(vElement, "marginRight");
-    },
-
-
-    /**
-     * Get the element's bottom margin.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's bottom margin size
-     */
-    getMarginBottom : function(vElement) {
-      return rwt.html.Style.getStyleSize(vElement, "marginBottom");
-    },
-
-
-    /**
-     * Get the element's left padding.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's left padding size
-     */
-    getPaddingLeft : function(vElement) {
-      return rwt.html.Style.getStyleSize(vElement, "paddingLeft");
-    },
-
-
-    /**
-     * Get the element's top padding.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's top padding size
-     */
-    getPaddingTop : function(vElement) {
-      return rwt.html.Style.getStyleSize(vElement, "paddingTop");
-    },
-
-
-    /**
-     * Get the element's right padding.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's right padding size
-     */
-    getPaddingRight : function(vElement) {
-      return rwt.html.Style.getStyleSize(vElement, "paddingRight");
-    },
-
-
-    /**
-     * Get the element's bottom padding.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's bottom padding size
-     */
-    getPaddingBottom : function(vElement) {
-      return rwt.html.Style.getStyleSize(vElement, "paddingBottom");
-    },
-
-
-    /**
-     * Get the element's left border width.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's left border width
-     */
-    getBorderLeft : function(vElement) {
-      return rwt.html.Style.getStyleProperty(vElement, "borderLeftStyle") == "none" ? 0 : rwt.html.Style.getStyleSize(vElement, "borderLeftWidth");
-    },
-
-
-    /**
-     * Get the element's top border width.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's top border width
-     */
-    getBorderTop : function(vElement) {
-      return rwt.html.Style.getStyleProperty(vElement, "borderTopStyle") == "none" ? 0 : rwt.html.Style.getStyleSize(vElement, "borderTopWidth");
-    },
-
-
-    /**
-     * Get the element's right border width.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's right border width
-     */
-    getBorderRight : function(vElement) {
-      return rwt.html.Style.getStyleProperty(vElement, "borderRightStyle") == "none" ? 0 : rwt.html.Style.getStyleSize(vElement, "borderRightWidth");
-    },
-
-
-    /**
-     * Get the element's bottom border width.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's bottom border width
-     */
-    getBorderBottom : function(vElement) {
-      return rwt.html.Style.getStyleProperty(vElement, "borderBottomStyle") == "none" ? 0 : rwt.html.Style.getStyleSize(vElement, "borderBottomWidth");
-    },
-
-    // TODO [tb] : Without IE6-support the browser-switch and opacity parameter can be removed
-    setBackgroundImage : ( function() {
-      var result;
-      // For IE6 without transparency we need to use CssFilter for PNG opacity to work:
-      if( rwt.client.Client.isMshtml() && rwt.client.Client.getVersion() < 7 ) {
-        result = function( target, value, opacity ) {
-          if( opacity != null && opacity < 1 ) {
-            this.removeCssFilter( target );
-            this._setCssBackgroundImage( target, value );
-            this.setOpacity( target, opacity );
-          } else {
-            this._setCssBackgroundImage( target, null );
-            // NOTE: This overwrites opacity for this node:
-            this._setCssFilterImage( target, value );
-          }
-        };
-      } else {
-        result = function(  target, value, opacity ) {
-          this._setCssBackgroundImage( target, value );
-          if( opacity != null ) {
-            this.setOpacity( target, opacity );
-          }
-        };
-      }
-      return result;
-    }() ),
-
-    setOpacity  : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function( target, value ) {
-        if( value == null || value >= 1 || value < 0 ) {
-          this.removeCssFilter( target );
-        } else {
-          var valueStr = "Alpha(opacity=" + Math.round( value * 100 ) + ")";
-          this.setStyleProperty( target, "filter", valueStr );
-        }
-      },
-      "gecko" : function( target, value ) {
-        if( value == null || value >= 1 ) {
-          this.removeStyleProperty( target, "MozOpacity" );
-          this.removeStyleProperty( target, "opacity" );
-        } else {
-          var targetValue = rwt.util.Numbers.limit( value, 0, 1 );
-          this.setStyleProperty( target, "MozOpacity", targetValue );
-          this.setStyleProperty( target, "opacity", targetValue );
-        }
-      },
-      "default" : function( target, value ) {
-        if( value == null || value >= 1 ) {
-          this.removeStyleProperty( target, "opacity" );
-        } else {
-          var targetValue = rwt.util.Numbers.limit( value, 0, 1 );
-          this.setStyleProperty( target, "opacity", targetValue );
-        }
-      }
-    } ),
-
-    setBackgroundGradient : rwt.util.Variant.select( "qx.client", {
-      // TODO [tb] : Webkit and Gecko now support the default syntax, but will continue to support
-      //             their old syntax if prefexied. RAP should use new syntax if possible to be
-      //             future proof.
-      "webkit" : function( target, gradientObject ) {
-        if( gradientObject ) {
-          var args = [ "linear", "left top" ];
-          if( gradientObject.horizontal === true ) {
-            args.push( "right top" );
-          }  else {
-            args.push( "left bottom" );
-          }
-          for( var i = 0; i < gradientObject.length; i++ ) {
-            var position = gradientObject[ i ][ 0 ];
-            var color = gradientObject[ i ][ 1 ];
-            args.push( "color-stop(" + position + "," + color + ")" );
-          }
-          var string = this.BROWSER_PREFIX + "gradient( " + args.join() + ")";
-          this.setStyleProperty( target, "background", string );
-        } else {
-          this.removeStyleProperty( target, "background" );
-        }
-      },
-      "gecko" : function( target, gradientObject ) {
-        if( gradientObject ) {
-          var args = [ gradientObject.horizontal === true ? "0deg" : "-90deg" ];
-          for( var i = 0; i < gradientObject.length; i++ ) {
-            var position = ( gradientObject[ i ][ 0 ] * 100 ) + "%";
-            var color = gradientObject[ i ][ 1 ];
-            args.push( color + " " + position );
-          }
-          var string = this.BROWSER_PREFIX + "linear-gradient( " + args.join() + ")";
-          this.setStyleProperty( target, "background", string );
-        } else {
-          this.removeStyleProperty( target, "background" );
-        }
-      },
-      "default" : function( target, gradientObject ) {
-        if( gradientObject ) {
-          var args = [ gradientObject.horizontal === true ? "90deg" : "180deg" ];
-          for( var i = 0; i < gradientObject.length; i++ ) {
-            var position = ( gradientObject[ i ][ 0 ] * 100 ) + "%";
-            var color = gradientObject[ i ][ 1 ];
-            args.push( color + " " + position );
-          }
-          var string = "linear-gradient( " + args.join() + ")";
-          this.setStyleProperty( target, "background", string );
-        } else {
-          this.removeStyleProperty( target, "background" );
-        }
-      }
-    } ),
-
-    setBoxShadow: function( target, shadowObject ) {
-      var property;
-      if( rwt.client.Client.isWebkit() && !rwt.client.Client.isMobileChrome() ) {
-        property = this.BROWSER_PREFIX + "box-shadow";
-      } else {
-        property = "boxShadow";
-      }
-      if( shadowObject ) {
-        // NOTE: older webkit dont accept spread, therefor only use parameters 1-3
-        var string = shadowObject[ 0 ] ? "inset " : "";
-        string += shadowObject.slice( 1, 4 ).join( "px " ) + "px";
-        var rgba = rwt.util.Colors.stringToRgb( shadowObject[ 5 ] );
-        rgba.push( shadowObject[ 6 ] );
-        string += " rgba(" + rgba.join() + ")";
-        this.setStyleProperty( target, property, string );
-      } else {
-        this.removeStyleProperty( target, property );
-      }
-    },
-
-    setTextShadow  : rwt.util.Variant.select( "qx.client", {
-      "default" : function( target, shadowObject ) {
-        var property = "textShadow";
-        if( shadowObject ) {
-          var string = shadowObject.slice( 1, 4 ).join( "px " ) + "px";
-          var rgba = rwt.util.Colors.stringToRgb( shadowObject[ 5 ] );
-          rgba.push( shadowObject[ 6 ] );
-          string += " rgba(" + rgba.join() + ")";
-          this.setStyleProperty( target, property, string );
-        } else {
-          this.removeStyleProperty( target, property );
-        }
-      },
-      "mshtml" : function() {}
-    } ),
-
-    setPointerEvents : function( target, value ) {
-      var version = rwt.client.Client.getVersion();
-      var ffSupport = rwt.client.Client.getEngine() === "gecko" && version >= 1.9;
-      // NOTE: chrome does not support pointerEvents, but not on svg-nodes
-      var webKitSupport = rwt.client.Client.getBrowser() === "safari" && version >= 530;
-      if( ffSupport || webKitSupport ) {
-        this.setStyleProperty( target, "pointerEvents", value );
-        target.setAttribute( "pointerEvents", value );
-      } else {
-        this._passEventsThrough( target, value );
-      }
-    },
-
-    setStyleProperty : function( target, property, value ) {
-      if( target instanceof rwt.widgets.base.Widget ) {
-        target.setStyleProperty( property, value );
-      } else {
-        target.style[ property ] = value;
-      }
-    },
-
-    removeStyleProperty : function( target, property ) {
-      if( target instanceof rwt.widgets.base.Widget ) {
-        target.removeStyleProperty( property );
-      } else {
-        target.style[ property ] = "";
-      }
-    },
-
-    removeCssFilter : function( target ) {
-      var element = null;
-      if( target instanceof rwt.widgets.base.Widget ) {
-        if( target.isCreated() ) {
-          element = target.getElement();
-        } else {
-          target.removeStyleProperty( "filter" );
-        }
-      } else {
-        element = target;
-      }
-      if( element !== null ) {
-        var cssText = element.style.cssText;
-        cssText = cssText.replace( /FILTER:[^;]*(;|$)/, "" );
-        element.style.cssText = cssText;
-      }
-    },
-
-    //////////
-    // Private
-
-    _setCssBackgroundImage : function( target, value ) {
-      var cssImageStr = value ? "URL(" + value + ")" : "none";
-      this.setStyleProperty( target, "backgroundImage", cssImageStr );
-      this.setStyleProperty( target, "backgroundRepeat", "no-repeat" );
-      this.setStyleProperty( target, "backgroundPosition", "center" );
-    },
-
-    _setCssFilterImage : function( target, value ) {
-      if( value ) {
-        var cssImageStr =   "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"
-                          + value
-                          + "',sizingMethod='crop')";
-        this.setStyleProperty( target, "filter", cssImageStr );
-      } else {
-        this.removeCssFilter( target );
-      }
-    },
-
-    /////////
-    // Helper
-
-    _passEventsThrough : function( target, value ) {
-      // TODO [tb] : This is a very limited implementation that allowes
-      // to click "through" the elmement, but won't handle hover and cursor.
-      var EventRegistration = rwt.html.EventRegistration;
-      var types = rwt.event.EventHandler._mouseEventTypes;
-      var handler = this._passEventThroughHandler;
-      if( value === "none" ) {
-        this.setStyleProperty( target, "cursor", "default" );
-        for( var i = 0; i < types.length; i++ ) {
-          EventRegistration.addEventListener( target, types[ i ], handler );
-        }
-      } else {
-        // TODO
-      }
-    },
-
-    _passEventThroughHandler : function() {
-      var EventHandlerUtil = rwt.event.EventHandlerUtil;
-      var domEvent = EventHandlerUtil.getDomEvent( arguments );
-      var domTarget = EventHandlerUtil.getDomTarget( domEvent );
-      var type = domEvent.type;
-      domTarget.style.display = "none";
-      var newTarget
-        = document.elementFromPoint( domEvent.clientX, domEvent.clientY );
-      domEvent.cancelBubble = true;
-      EventHandlerUtil.stopDomEvent( domEvent );
-      if(    newTarget
-          && type !== "mousemove"
-          && type !== "mouseover"
-          && type !== "mouseout" )
-      {
-        if( type === "mousedown" ) {
-          rwt.html.Style._refireEvent( newTarget, "mouseover", domEvent );
-        }
-        rwt.html.Style._refireEvent( newTarget, type, domEvent );
-        if( type === "mouseup" ) {
-          rwt.html.Style._refireEvent( newTarget, "mouseout", domEvent );
-        }
-      }
-      domTarget.style.display = "";
-    },
-
-    _refireEvent : rwt.util.Variant.select("qx.client", {
-      "mshtml" : function( target, type, originalEvent ) {
-        var newEvent = document.createEventObject( originalEvent );
-        target.fireEvent( "on" + type , newEvent );
-      },
-      "default" : function( target, type, originalEvent ) {
-        var newEvent = document.createEvent( "MouseEvents" );
-        newEvent.initMouseEvent( type,
-                                 true,  /* can bubble */
-                                 true, /*cancelable */
-                                 originalEvent.view,
-                                 originalEvent.detail,
-                                 originalEvent.screenX,
-                                 originalEvent.screenY,
-                                 originalEvent.clientX,
-                                 originalEvent.clientY,
-                                 originalEvent.ctrlKey,
-                                 originalEvent.altKey,
-                                 originalEvent.shiftKey,
-                                 originalEvent.metaKey,
-                                 originalEvent.button,
-                                 originalEvent.relatedTarget);
-        target.dispatchEvent( newEvent );
-      }
-    } )
-
-
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define("rwt.html.Scroll",
-{
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics :
-  {
-
-    /**
-     * Disables browser-native scrolling
-     *
-     * @type static
-     * @param el {Element} html-element
-     * @return {void}
-     */
-    disableScrolling : function(el)
-    {
-      this.enableScrolling(el);
-      el.scrollLeft = 0;
-      el.scrollTop = 0;
-      rwt.html.EventRegistration.addEventListener(el, "scroll", this._onscroll);
-    },
-
-
-    /**
-     * Re-enables browser-native scrolling
-     *
-     * @type static
-     * @param el {Element} html-element
-     * @return {void}
-     */
-    enableScrolling : function( el ) {
-      rwt.html.EventRegistration.removeEventListener( el, "scroll", this._onscroll );
-    },
-
-
-    /**
-     * Handler for the scroll-event
-     *
-     * @type static
-     * @param ev {event} scroll-event
-     * @return {void}
-     */
-    _onscroll : function(ev)
-    {
-      // RAP [if] Fix for bug 288737: Scroll bars are broken in Opera 10
-      // https://bugs.eclipse.org/bugs/show_bug.cgi?id=288737
-      var el = null;
-      if(ev.target) {
-        el = (ev.target == ev.currentTarget) ? ev.target : null;
-      } else if(ev.srcElement){
-        el = ev.srcElement;
-      }
-      if( el && ( ev.scrollLeft !== 0 || ev.scrollTop !== 0 ) ) {
-        el.scrollLeft = 0;
-        el.scrollTop = 0;
-      }
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define("rwt.html.StyleSheet",
-{
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics :
-  {
-
-    /**
-     * create a new Stylesheet node and append it to the document
-     *
-     * @type static
-     * @param vCssText {String} optional string of css rules
-     * @return {Stylesheet} stylesheet object
-     * @signature function(vCssText)
-     */
-    createElement : rwt.util.Objects.select(document.createStyleSheet ? "ie4+" : "other",
-    {
-      "ie4+" : function(vCssText)
-      {
-        var vSheet = document.createStyleSheet();
-
-        if (vCssText) {
-          vSheet.cssText = vCssText;
-        }
-
-        return vSheet;
-      },
-
-      "other" : function(vCssText)
-      {
-        var vElement = document.createElement("style");
-        vElement.type = "text/css";
-
-        // Safari 2.0 doesn't like empty stylesheets
-        vElement.appendChild(document.createTextNode(vCssText || "body {}"));
-
-        document.getElementsByTagName("head")[0].appendChild(vElement);
-
-        if (vElement.sheet) {
-          return vElement.sheet;
-        }
-        else
-        {
-          // Safari 2.0 doesn't support element.sheet so we neet a workaround
-          var styles = document.styleSheets;
-
-          for (var i=styles.length-1; i>=0; i--)
-          {
-            if (styles[i].ownerNode == vElement) {
-              return styles[i];
-            }
-          }
-        }
-
-        throw "Error: Could not get a reference to the sheet object";
-      }
-    }),
-
-
-    /**
-     * insert a new CSS rule into a given Stylesheet
-     *
-     * @type static
-     * @param vSheet {Object} the target Stylesheet object
-     * @param vSelector {String} the selector
-     * @param vStyle {String} style rule
-     * @return {void}
-     * @signature function(vSheet, vSelector, vStyle)
-     */
-    addRule : rwt.util.Objects.select(document.createStyleSheet ? "ie4+" : "other",
-    {
-      "ie4+" : function(vSheet, vSelector, vStyle) {
-        vSheet.addRule(vSelector, vStyle);
-      },
-      "other" : function(vSheet, vSelector, vStyle) {
-        vSheet.insertRule(vSelector + "{" + vStyle + "}", vSheet.cssRules.length);
-      }
-    } ),
-
-
-    /**
-     * remove a CSS rule from a stylesheet
-     *
-     * @type static
-     * @param vSheet {Object} the Stylesheet
-     * @param vSelector {String} the Selector of the rule to remove
-     * @return {void}
-     * @signature function(vSheet, vSelector)
-     */
-    removeRule : rwt.util.Objects.select(document.createStyleSheet ? "ie4+" : "other",
-    {
-      "ie4+" : function(vSheet, vSelector) {
-        var vRules = vSheet.rules;
-        var vLength = vRules.length;
-        for (var i=vLength-1; i>=0; i--)
-        {
-          if (vRules[i].selectorText == vSelector) {
-            vSheet.removeRule(i);
-          }
-        }
-      },
-      "other" : function(vSheet, vSelector) {
-        var vRules = vSheet.cssRules;
-        var vLength = vRules.length;
-        for (var i=vLength-1; i>=0; i--)
-        {
-          if (vRules[i].selectorText == vSelector) {
-            vSheet.deleteRule(i);
-          }
-        }
-      }
-    } ),
-
-
-    /**
-     * remove all CSS rules from a stylesheet
-     *
-     * @type static
-     * @param vSheet {Object} the stylesheet object
-     * @return {void}
-     * @signature function(vSheet)
-     */
-    removeAllRules : rwt.util.Objects.select(document.createStyleSheet ? "ie4+" : "other",
-    {
-      "ie4+" : function(vSheet) {
-        var vRules = vSheet.rules;
-        var vLength = vRules.length;
-        for (var i=vLength-1; i>=0; i--) {
-          vSheet.removeRule(i);
-        }
-      },
-      "other" : function(vSheet) {
-        var vRules = vSheet.cssRules;
-        var vLength = vRules.length;
-        for (var i=vLength-1; i>=0; i--) {
-          vSheet.deleteRule(i);
-        }
-      }
-    } )
-
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Abstract base class for all widget which have child widgets (e.g. layout manager)
- *
- * Don't instantiate this class directly.
- */
-rwt.qx.Class.define("rwt.widgets.base.Parent",
-{
-  extend : rwt.widgets.base.Widget,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function()
-  {
-    this.base(arguments);
-
-    // Contains all children
-    this._children = [];
-
-    // Create instanceof layout implementation
-    this._layoutImpl = this._createLayoutImpl();
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    /** Individual focus handler for all child elements. */
-    focusHandler :
-    {
-      check : "rwt.widgets.util.FocusHandler",
-      apply : "_applyFocusHandler",
-      nullable : true
-    },
-
-    /** The current active child. */
-    activeChild :
-    {
-      check : "rwt.widgets.base.Widget",
-      event : "changeActiveChild",
-      nullable : true
-    },
-
-    /** The current focused child. */
-    focusedChild :
-    {
-      check : "rwt.widgets.base.Widget",
-      apply : "_applyFocusedChild",
-      event : "changeFocusedChild",
-      nullable : true
-    },
-
-    /** all visible child widgets */
-    visibleChildren :
-    {
-      _cached      : true,
-      defaultValue : null
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      FOCUS HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Wether the widget has its own focus handler or uses one of its parent's
-     * focus handler.
-     *
-     * @type member
-     * @return {Boolean} whether the widget has its own focus handler
-     */
-    isFocusRoot : function() {
-      return this.getFocusHandler() != null;
-    },
-
-
-    /**
-     * Return the responsible focus handler
-     *
-     * @type member
-     * @return {rwt.widgets.util.FocusHandler} TODOC
-     */
-    getFocusRoot : function()
-    {
-      if (this.isFocusRoot()) {
-        return this;
-      }
-
-      if (this._hasParent) {
-        return this.getParent().getFocusRoot();
-      }
-
-      return null;
-    },
-
-
-    /**
-     * Let the widget use its own focus handler
-     *
-     * @type member
-     * @return {void}
-     */
-    activateFocusRoot : function()
-    {
-      if (this._focusHandler) {
-        return;
-      }
-
-      this._focusHandler = new rwt.widgets.util.FocusHandler(this);
-      this.setFocusHandler(this._focusHandler);
-    },
-
-
-    /**
-     * Delegate keyevent to the focus handler
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    _onfocuskeyevent : function(e) {
-      this.getFocusHandler()._onkeyevent(this, e);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyFocusHandler : function(value, old)
-    {
-      if (value)
-      {
-        // Add Key Handler
-        this.addEventListener("keypress", this._onfocuskeyevent);
-
-        // Activate focus handling (but keep already configured tabIndex)
-        if (this.getTabIndex() < 1) {
-          this.setTabIndex(1);
-        }
-
-        // But hide the focus outline
-        this.setHideFocus(true);
-
-        // Make myself the default
-        this.setActiveChild(this);
-      }
-      else
-      {
-        // Remove Key Handler
-        this.removeEventListener("keydown", this._onfocuskeyevent);
-        this.removeEventListener("keypress", this._onfocuskeyevent);
-
-        // Deactivate focus handling
-        this.setTabIndex(null);
-
-        // Don't hide focus outline
-        this.setHideFocus(false);
-      }
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyFocusedChild : function(value, old)
-    {
-      var vFocusValid = value != null;
-      var vBlurValid = old != null;
-
-      if (rwt.qx.Class.isDefined("rwt.widgets.util.PopupManager") && vFocusValid)
-      {
-        var vMgr = rwt.widgets.util.PopupManager.getInstance();
-
-        if (vMgr) {
-          vMgr.update(value);
-        }
-      }
-
-      if (vBlurValid)
-      {
-        // Dispatch FocusOut
-        if (old.hasEventListeners("focusout"))
-        {
-          var vEventObject = new rwt.event.FocusEvent("focusout", old);
-
-          if (vFocusValid) {
-            vEventObject.setRelatedTarget(value);
-          }
-
-          old.dispatchEvent(vEventObject);
-          vEventObject.dispose();
-        }
-      }
-
-      if (vFocusValid)
-      {
-        if (value.hasEventListeners("focusin"))
-        {
-          // Dispatch FocusIn
-          var vEventObject = new rwt.event.FocusEvent("focusin", value);
-
-          if (vBlurValid) {
-            vEventObject.setRelatedTarget(old);
-          }
-
-          value.dispatchEvent(vEventObject);
-          vEventObject.dispose();
-        }
-      }
-
-      if (vBlurValid)
-      {
-        if (this.getActiveChild() == old && !vFocusValid) {
-          this.setActiveChild(null);
-        }
-
-        old.setFocused(false);
-
-        // Dispatch Blur
-        var vEventObject = new rwt.event.FocusEvent("blur", old);
-
-        if (vFocusValid) {
-          vEventObject.setRelatedTarget(value);
-        }
-
-        old.dispatchEvent(vEventObject);
-
-        var vMgr = rwt.widgets.util.ToolTipManager.getInstance();
-
-        if (vMgr) {
-          vMgr.handleBlur(vEventObject);
-        }
-
-        vEventObject.dispose();
-      }
-
-      if (vFocusValid)
-      {
-        this.setActiveChild(value);
-        value.setFocused(true);
-        rwt.event.EventHandler.setFocusRoot(this);
-
-        // Dispatch Focus
-        var vEventObject = new rwt.event.FocusEvent("focus", value);
-
-        if (vBlurValid) {
-          vEventObject.setRelatedTarget(old);
-        }
-
-        value.dispatchEvent(vEventObject);
-
-        var vMgr = rwt.widgets.util.ToolTipManager.getInstance();
-
-        if (vMgr) {
-          vMgr.handleFocus(vEventObject);
-        }
-
-        vEventObject.dispose();
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      LAYOUT IMPLEMENTATION
-    ---------------------------------------------------------------------------
-    */
-
-    _layoutImpl : null,
-
-
-    /**
-     * abstract method. Create layout implementation.
-     *
-     * This method must be overwritten by all subclasses
-     *
-     * return
-     *
-     * @type member
-     * @return {rwt.widgets.base.BoxLayout} TODOC
-     */
-    _createLayoutImpl : function() {
-      return new rwt.widgets.util.CanvasLayoutImpl( this);
-    },
-
-
-    /**
-     * Return the layout implementation.
-     *
-     * return {rwt.widgets.util.LayoutImpl}
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getLayoutImpl : function() {
-      return this._layoutImpl;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      CHILDREN MANAGMENT: MANAGE ALL
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Return the array of all children
-     *
-     * @type member
-     * @return {rwt.widgets.base.Widget[]} all children
-     */
-    getChildren : function() {
-      return this._children;
-    },
-
-
-    /**
-     * Get number of children
-     *
-     * @type member
-     * @return {Integer} number of children
-     */
-    getChildrenLength : function() {
-      return this.getChildren().length;
-    },
-
-
-    /**
-     * Check if the widget has children
-     *
-     * @type member
-     * @return {Boolean} whether the widget has children
-     */
-    hasChildren : function() {
-      return this.getChildrenLength() > 0;
-    },
-
-
-    /**
-     * Check if there are any children inside
-     *
-     * @type member
-     * @return {Boolean} whether the number of children is 0
-     */
-    isEmpty : function() {
-      return this.getChildrenLength() === 0;
-    },
-
-
-    /**
-     * Get the index of a child widget.
-     *
-     * @type member
-     * @param vChild {rwt.widgets.base.Widget} Child widget to get the index for
-     * @return {Integer} index of the child widget
-     */
-    indexOf : function(vChild) {
-      return this.getChildren().indexOf(vChild);
-    },
-
-
-    /**
-     * Check if the given widget is a child
-     *
-     * @type member
-     * @param vWidget {rwt.widgets.base.Widget} The widget which should be checked.
-     * @return {Boolean | var} TODOC
-     */
-    contains : function(vWidget)
-    {
-      switch(vWidget)
-      {
-        case null:
-          return false;
-
-        case this:
-          return true;
-
-        default:
-          // try the next parent of the widget (recursive until found)
-          return this.contains(vWidget.getParent());
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      CHILDREN MANAGMENT: MANAGE VISIBLE ONES
-
-      uses a cached private property
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Return the array of all visible children
-     * (which are configured as visible=true)
-     *
-     * @type member
-     * @return {rwt.widgets.base.Widget[]} all visible children
-     */
-    _computeVisibleChildren : function()
-    {
-      var vVisible = [];
-      var vChildren = this.getChildren();
-
-      if (! vChildren)
-      {
-        return 0;
-      }
-
-      var vLength = vChildren.length;
-
-      for (var i=0; i<vLength; i++)
-      {
-        var vChild = vChildren[i];
-
-        if (vChild._isDisplayable ) {
-          vVisible.push(vChild);
-        }
-      }
-
-      return vVisible;
-    },
-
-
-    /**
-     * Get number of visible children
-     *
-     * @type member
-     * @return {Integer} number of visible children
-     */
-    getVisibleChildrenLength : function() {
-      return this.getVisibleChildren().length;
-    },
-
-
-    /**
-     * Check if the widget has any visible children
-     *
-     * @type member
-     * @return {Boolean} whether the widget has any visible children
-     */
-    hasVisibleChildren : function() {
-      return this.getVisibleChildrenLength() > 0;
-    },
-
-
-    /**
-     * Check whether there are any visible children inside
-     *
-     * @type member
-     * @return {Boolean} whether there are any visible children inside
-     */
-    isVisibleEmpty : function() {
-      return this.getVisibleChildrenLength() === 0;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      CHILDREN MANAGMENT: ADD
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Add/Append another widget. Allows to add multiple at
-     *  one, a parameter could be a widget.
-     *
-     * @type member
-     * @param varargs {rwt.widgets.base.Widget} variable number of widgets to add
-     * @return {Parent} This widget.
-     * @throws TODOC
-     */
-    add : function(varargs)
-    {
-      var vWidget;
-
-      for (var i=0, l=arguments.length; i<l; i++)
-      {
-        vWidget = arguments[i];
-        vWidget.setParent( this );
-      }
-
-      return this;
-    },
-
-
-    /**
-     * Add a child widget at the specified index
-     *
-     * @type member
-     * @param vChild {widget} widget to add
-     * @param vIndex {Integer} Index, at which the widget will be inserted
-     */
-    addAt : function(vChild, vIndex)
-    {
-      if (vIndex == null || vIndex < 0) {
-        throw new Error("Not a valid index for addAt(): " + vIndex);
-      }
-
-      if (vChild.getParent() == this)
-      {
-        var vChildren = this.getChildren();
-        var vOldIndex = vChildren.indexOf(vChild);
-
-        if (vOldIndex != vIndex)
-        {
-          if (vOldIndex != -1) {
-            rwt.util.Arrays.removeAt(vChildren, vOldIndex);
-          }
-
-          rwt.util.Arrays.insertAt(vChildren, vChild, vIndex);
-
-          if (this._initialLayoutDone)
-          {
-            this._invalidateVisibleChildren();
-            this.getLayoutImpl().updateChildrenOnMoveChild(vChild, vIndex, vOldIndex);
-          }
-        }
-      }
-      else
-      {
-        vChild._insertIndex = vIndex;
-        vChild.setParent(this);
-      }
-    },
-
-
-    /**
-     * Add a child widget as the first widget
-     *
-     * @type member
-     * @param vChild {widget} widget to add
-     */
-    addAtBegin : function(vChild) {
-      return this.addAt(vChild, 0);
-    },
-
-
-    /**
-     * Add a child widget as the last widget
-     *
-     * @type member
-     * @param vChild {widget} widget to add
-     */
-    addAtEnd : function(vChild)
-    {
-      // we need to fix here, when the child is already inside myself, but
-      // want to change its position
-      var vLength = this.getChildrenLength();
-      return this.addAt(vChild, vChild.getParent() == this ? vLength - 1 : vLength);
-    },
-
-
-    /**
-     * Add a widget before another already inserted widget
-     *
-     * @type member
-     * @param vChild {var} widget to add
-     * @param vBefore {var} widget before the new widget will be inserted.
-     */
-    addBefore : function(vChild, vBefore)
-    {
-      var vChildren = this.getChildren();
-      var vTargetIndex = vChildren.indexOf(vBefore);
-
-      if (vTargetIndex == -1) {
-        throw new Error("Child to add before: " + vBefore + " is not inside this parent.");
-      }
-
-      var vSourceIndex = vChildren.indexOf(vChild);
-
-      if (vSourceIndex == -1 || vSourceIndex > vTargetIndex) {
-        vTargetIndex++;
-      }
-
-      return this.addAt(vChild, Math.max(0, vTargetIndex - 1));
-    },
-
-
-    /**
-     * Add a widget after another already inserted widget
-     *
-     * @type member
-     * @param vChild {var} widget to add
-     * @param vAfter {var} widgert, after which the new widget will be inserted
-     */
-    addAfter : function(vChild, vAfter)
-    {
-      var vChildren = this.getChildren();
-      var vTargetIndex = vChildren.indexOf(vAfter);
-
-      if (vTargetIndex == -1) {
-        throw new Error("Child to add after: " + vAfter + " is not inside this parent.");
-      }
-
-      var vSourceIndex = vChildren.indexOf(vChild);
-
-      if (vSourceIndex != -1 && vSourceIndex < vTargetIndex) {
-        vTargetIndex--;
-      }
-
-      return this.addAt(vChild, Math.min(vChildren.length, vTargetIndex + 1));
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      CHILDREN MANAGMENT: REMOVE
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Remove one or multiple childrens.
-     *
-     * @type member
-     * @param varargs {rwt.widgets.base.Widget} variable number of widgets to remove
-     */
-    remove : function(varargs)
-    {
-      var vWidget;
-
-      for (var i=0, l=arguments.length; i<l; i++)
-      {
-        vWidget = arguments[i];
-
-        if (!(vWidget instanceof rwt.widgets.base.Parent) && !(vWidget instanceof rwt.widgets.base.Terminator)) {
-          throw new Error("Invalid Widget: " + vWidget);
-        } else if (vWidget.getParent() == this) {
-          vWidget.setParent(null);
-        }
-      }
-    },
-
-
-    /**
-     * Remove the widget at the specified index.
-     *
-     * @type member
-     * @param vIndex {Integer} Index of the widget to remove.
-     */
-    removeAt : function(vIndex)
-    {
-      var vChild = this.getChildren()[vIndex];
-
-      if (vChild)
-      {
-        delete vChild._insertIndex;
-
-        vChild.setParent(null);
-      }
-    },
-
-
-    /**
-     * Remove all children.
-     *
-     * @type member
-     */
-    removeAll : function()
-    {
-      var cs = this.getChildren();
-      var co = cs[0];
-
-      while (co)
-      {
-        this.remove(co);
-        co = cs[0];
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      CHILDREN MANAGMENT: FIRST CHILD
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Get the first child
-     *
-     * @type member
-     * @return {Widget|null} First child widget (null if this widget does not have any children)
-     */
-    getFirstChild : function() {
-      return rwt.util.Arrays.getFirst(this.getChildren()) || null;
-    },
-
-
-    /**
-     * Get the first visible child
-     *
-     * @type member
-     * @return {Widget|null} First visible child widget (null if this widget does
-     *     not have any visible children)
-     */
-    getFirstVisibleChild : function() {
-      return rwt.util.Arrays.getFirst(this.getVisibleChildren()) || null;
-    },
-
-
-    /**
-     * Get the first active child
-     *
-     * @type member
-     * @param vIgnoreClasses {Class[]} array of classes which should be ignored
-     * @return {Widget|null} First active child widget (null if this widget does
-     *     not have any active children)
-     */
-    getFirstActiveChild : function(vIgnoreClasses) {
-      return rwt.widgets.base.Widget.getActiveSiblingHelper(null, this, 1, vIgnoreClasses, "first") || null;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      CHILDREN MANAGMENT: LAST CHILD
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Get the last child
-     *
-     * @type member
-     * @return {Widget|null} Last child widget (null if this widget does
-     *     not have any children)
-     */
-    getLastChild : function() {
-      return rwt.util.Arrays.getLast(this.getChildren()) || null;
-    },
-
-
-    /**
-     * Get the last visible child
-     *
-     * @type member
-     * @return {Widget|null} Last visible child widget (null if this widget does
-     *     not have any visible children)
-     */
-    getLastVisibleChild : function() {
-      return rwt.util.Arrays.getLast(this.getVisibleChildren()) || null;
-    },
-
-
-    /**
-     * Get the last active child
-     *
-     * @type member
-     * @param vIgnoreClasses {Class[]} array of classes which should be ignored
-     * @return {Widget|null} Last active child widget (null if this widget does
-     *     not have any active children)
-     */
-    getLastActiveChild : function(vIgnoreClasses) {
-      return rwt.widgets.base.Widget.getActiveSiblingHelper(null, this, -1, vIgnoreClasses, "last") || null;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      CHILDREN MANAGMENT: LOOP UTILS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Call a callbach function for each child widget. The callback has the following signature:
-     * <code>function(childWidget, widgetIndex)</code>. The first parameter is the child widget
-     * and the second the index of the child widget in its parent.
-     *
-     * @type member
-     * @param vFunc {Function} callback function. Signature: <code>function(childWidget, widgetIndex)</code>
-     */
-    forEachChild : function(vFunc)
-    {
-      var ch = this.getChildren(), chc, i = -1;
-
-      if (! ch) {
-        return;
-      }
-
-      chc = ch[++i];
-      while( chc ) {
-        vFunc.call(chc, i);
-        chc = ch[++i];
-      }
-    },
-
-
-    /**
-     * Call a callbach function for each visible child widget. The callback has the following signature:
-     * <code>function(childWidget, widgetIndex)</code>. The first parameter is the child widget
-     * and the second the index of the child widget in its parent.
-     *
-     * @type member
-     * @param vFunc {Function} callback function. Signature: <code>function(childWidget, widgetIndex)</code>
-     */
-    forEachVisibleChild : function(vFunc)
-    {
-      var ch = this.getVisibleChildren(), chc, i = -1;
-
-      if (! ch) {
-        return;
-      }
-
-      chc = ch[++i];
-      while( chc ) {
-        vFunc.call(chc, i);
-        chc = ch[++i];
-      }
-    },
-
-    _markInDispose : function() {
-      this._isInGlobalDisposeQueue = true;
-      if( this.forEachChild ) {
-        this.forEachChild( arguments.callee );
-      }
-    },
-
-    /*
-    ---------------------------------------------------------------------------
-      APPEAR/DISAPPEAR MESSAGES FOR CHILDREN
-    ---------------------------------------------------------------------------
-    */
-
-    // overridden
-    _beforeAppear : function()
-    {
-      this.base(arguments);
-
-      this.forEachVisibleChild(function()
-      {
-        if (this.isAppearRelevant()) {
-          this._beforeAppear();
-        }
-      });
-    },
-
-
-    // overridden
-    _afterAppear : function()
-    {
-      this.base(arguments);
-
-      this.forEachVisibleChild(function()
-      {
-        if (this.isAppearRelevant()) {
-          this._afterAppear();
-        }
-      });
-    },
-
-    _ieFixLayoutOnAppear : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function() {
-        this.base( arguments );
-        this.forEachVisibleChild( function() {
-          if( this._isCreated ) {
-            this._ieFixLayoutOnAppear();
-          }
-        } );
-      },
-      "default" : rwt.util.Functions.returnTrue
-    } ),
-
-    // overridden
-    _beforeDisappear : function()
-    {
-      this.base(arguments);
-
-      this.forEachVisibleChild(function()
-      {
-        if (this.isAppearRelevant()) {
-          this._beforeDisappear();
-        }
-      });
-    },
-
-
-    // overridden
-    _afterDisappear : function()
-    {
-      this.base(arguments);
-
-      this.forEachVisibleChild(function()
-      {
-        if (this.isAppearRelevant()) {
-          this._afterDisappear();
-        }
-      });
-    },
-
-
-    // overridden
-    _afterInsertDom : function() {
-      this.base( arguments );
-      // NOTE: a "visible" Child is actually every "displayable" child here
-      this.forEachVisibleChild( function() {
-        // Check if the nodes are actually connected - See Bug 359665
-        if( this.getElement().parentNode === this.getParent()._getTargetNode() ) {
-          this._afterInsertDom();
-        }
-      } );
-    },
-
-
-
-    // overridden
-    _afterRemoveDom : function() {
-      this.base( arguments );
-      this.forEachVisibleChild( function() {
-        if( this.isInDom() ) {
-          this._afterRemoveDom();
-        }
-      } );
-    },
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      DISPLAYBLE HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vDisplayable {var} TODOC
-     * @param vParent {var} TODOC
-     * @param vHint {var} TODOC
-     * @return {void}
-     */
-    _handleDisplayableCustom : function(vDisplayable, vParent, vHint)
-    {
-      this.forEachChild(function() {
-        this._handleDisplayable();
-      });
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      STATE QUEUE
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    _addChildrenToStateQueue : function()
-    {
-      this.forEachVisibleChild(function() {
-        this.addToStateQueue();
-      });
-    },
-
-
-    // overridden
-    recursiveAddToStateQueue : function()
-    {
-      this.addToStateQueue();
-
-      this.forEachVisibleChild(function() {
-        this.recursiveAddToStateQueue();
-      });
-    },
-
-
-    // overridden
-    _recursiveAppearanceThemeUpdate : function(vNewAppearanceTheme, vOldAppearanceTheme)
-    {
-      this.base(arguments, vNewAppearanceTheme, vOldAppearanceTheme);
-
-      this.forEachVisibleChild(function() {
-        this._recursiveAppearanceThemeUpdate(vNewAppearanceTheme, vOldAppearanceTheme);
-      });
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      CHILDREN QUEUE
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {void}
-     */
-    _addChildToChildrenQueue : function(vChild)
-    {
-      if (!vChild._isInParentChildrenQueue && vChild._isDisplayable)
-      {
-        rwt.widgets.base.Widget.addToGlobalLayoutQueue(this);
-
-        if (!this._childrenQueue) {
-          this._childrenQueue = {};
-        }
-
-        this._childrenQueue[vChild.toHashCode()] = vChild;
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {void}
-     */
-    _removeChildFromChildrenQueue : function(vChild)
-    {
-      if (this._childrenQueue && vChild._isInParentChildrenQueue)
-      {
-        delete this._childrenQueue[vChild.toHashCode()];
-
-        if (rwt.util.Objects.isEmpty(this._childrenQueue))
-        {
-          this._childrenQueue = {};
-          rwt.widgets.base.Widget.removeFromGlobalLayoutQueue(this);
-        }
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    _flushChildrenQueue : function()
-    {
-      if (!rwt.util.Objects.isEmpty(this._childrenQueue))
-      {
-        this.getLayoutImpl().flushChildrenQueue(this._childrenQueue);
-        delete this._childrenQueue;
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      LAYOUT QUEUE
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param p {var} TODOC
-     * @return {void}
-     */
-    _addChildrenToLayoutQueue : function(p)
-    {
-      this.forEachChild(function() {
-        this.addToLayoutChanges(p);
-      });
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {void}
-     */
-    _layoutChild : function(vChild)
-    {
-      if (!vChild._isDisplayable)
-      {
-        // this.warn("Want to render an invisible child: " + vChild + " -> omitting!");
-        return;
-      }
-
-      // APPLY LAYOUT
-      var vChanges = vChild._layoutChanges;
-
-      if (vChild.renderBorder && vChanges.border ) {
-        vChild.renderBorder( vChanges );
-      }
-
-      if (vChild.renderPadding)
-      {
-        if (vChanges.paddingLeft || vChanges.paddingRight || vChanges.paddingTop || vChanges.paddingBottom) {
-          vChild.renderPadding(vChanges);
-        }
-      }
-
-      // WRAP TO LAYOUT ENGINE
-      this.getLayoutImpl().layoutChild(vChild, vChanges);
-
-      // POST LAYOUT
-      vChild._layoutPost(vChanges);
-
-      // DISPLAY DOM NODE
-      // insert dom node (if initial flag enabled)
-      if (vChanges.initial)
-      {
-        vChild._initialLayoutDone = true;
-        rwt.widgets.base.Widget.addToGlobalDisplayQueue(vChild);
-      }
-
-      // CLEANUP
-      vChild._layoutChanges = {};
-
-      delete vChild._isInParentLayoutQueue;
-      delete this._childrenQueue[vChild.toHashCode()];
-    },
-
-    _layoutPost : function( changes ) {
-      this.createDispatchDataEvent( "flush", changes );
-    },
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      DIMENSION CACHE
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    _computePreferredInnerWidth : function() {
-      return this.getLayoutImpl().computeChildrenNeededWidth();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    _computePreferredInnerHeight : function() {
-      return this.getLayoutImpl().computeChildrenNeededHeight();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vNew {var} TODOC
-     * @param vOld {var} TODOC
-     * @return {void}
-     */
-    _changeInnerWidth : function(vNew, vOld)
-    {
-      var vLayout = this.getLayoutImpl();
-
-      if (vLayout.invalidateChildrenFlexWidth) {
-        vLayout.invalidateChildrenFlexWidth();
-      }
-
-      this.forEachVisibleChild(function()
-      {
-        if (vLayout.updateChildOnInnerWidthChange(this) && this._recomputeBoxWidth())
-        {
-          this._recomputeOuterWidth();
-          this._recomputeInnerWidth();
-        }
-      });
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vNew {var} TODOC
-     * @param vOld {var} TODOC
-     * @return {void}
-     */
-    _changeInnerHeight : function(vNew, vOld)
-    {
-      var vLayout = this.getLayoutImpl();
-
-      if (vLayout.invalidateChildrenFlexHeight) {
-        vLayout.invalidateChildrenFlexHeight();
-      }
-
-      this.forEachVisibleChild(function()
-      {
-        if (vLayout.updateChildOnInnerHeightChange(this) && this._recomputeBoxHeight())
-        {
-          this._recomputeOuterHeight();
-          this._recomputeInnerHeight();
-        }
-      });
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {var} TODOC
-     */
-    getInnerWidthForChild : function(vChild) {
-      return this.getInnerWidth();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {var} TODOC
-     */
-    getInnerHeightForChild : function(vChild) {
-      return this.getInnerHeight();
-    },
-
-
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      REMAPPING
-    ---------------------------------------------------------------------------
-    */
-
-    _remappingChildTable : [ "add", "remove", "addAt", "addAtBegin", "addAtEnd", "removeAt", "addBefore", "addAfter", "removeAll" ],
-
-    _remapStart : "return this._remappingChildTarget.",
-    _remapStop : ".apply(this._remappingChildTarget, arguments)",
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vTarget {var} TODOC
-     * @return {void}
-     */
-    remapChildrenHandlingTo : function(vTarget)
-    {
-      var t = this._remappingChildTable;
-
-      this._remappingChildTarget = vTarget;
-
-      for (var i=0, l=t.length, s; i<l; i++)
-      {
-        s = t[i];
-        this[s] = new Function(rwt.widgets.base.Parent.prototype._remapStart + s + rwt.widgets.base.Parent.prototype._remapStop);
-      }
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DEFER
-  *****************************************************************************
-  */
-
-  defer : function(statics, members, properties)
-  {
-    // TODO There must be a better way than to define this in defer
-
-    // Fix Operas Rendering Bugs
-    if( rwt.client.Client.isOpera() ) {
-      members._layoutChildOrig = members._layoutChild;
-
-      members._layoutChild = function(vChild)
-      {
-        if (!vChild._initialLayoutDone || !vChild._layoutChanges.border) {
-          return this._layoutChildOrig(vChild);
-        }
-
-        var vStyle = vChild.getElement().style;
-
-        var vOldDisplay = vStyle.display;
-        vStyle.display = "none";
-        var vRet = this._layoutChildOrig(vChild);
-        vStyle.display = vOldDisplay;
-
-        return vRet;
-      };
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function()
-  {
-    this._disposeObjectDeep("_children", 1);
-    this._disposeObjects("_layoutImpl", "_focusHandler");
-    this._disposeFields("_childrenQueue", "_childrenQueue", "_remappingChildTable",
-      "_remappingChildTarget", "_cachedVisibleChildren");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * This event handles all focus events.
- *
- *  The four supported types are:
- *  1+2: focus and blur also propagate the target object
- *  3+4: focusout and focusin are bubbling to the parent objects
- */
-rwt.qx.Class.define("rwt.event.FocusEvent",
-{
-  extend : rwt.event.Event,
-
-  construct : function(type, target)
-  {
-    this.base(arguments, type);
-
-    this.setTarget(target);
-
-    switch(type)
-    {
-      case "focusin":
-      case "focusout":
-        this.setBubbles(true);
-        this.setPropagationStopped(false);
-    }
-  }
-});
-
-/*******************************************************************************
- *  Copyright: 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                        and EclipseSource
- *
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.event.EventHandler", {
-  type : "static",
-
-  statics : {
-    _filter : {},
-    _allowContextMenu : rwt.util.Functions.returnFalse,
-    _captureWidget : null,
-    _focusRoot : null,
-    _menuManager : null,
-    // state storage:
-    _focused : false,
-    _lastMouseEventType : null,
-    _lastMouseDown : false,
-    _lastMouseEventDate : 0,
-    _mouseIsDown : false,
-    _blockKeyEvents : false,
-
-    ///////////////////
-    // Public functions
-
-    init : function() {
-      var functionUtil = rwt.util.Functions;
-      this.__onmouseevent = functionUtil.bind( this._onmouseevent, this );
-      this.__ondragevent = functionUtil.bind( this._ondragevent, this );
-      this.__onselectevent = functionUtil.bind( this._onselectevent, this );
-      this.__onwindowblur = functionUtil.bind( this._onwindowblur, this );
-      this.__onwindowfocus = functionUtil.bind( this._onwindowfocus, this );
-      this.__onwindowresize = functionUtil.bind( this._onwindowresize, this );
-      this.__onKeyEvent = rwt.util.Functions.bind( this._onKeyEvent, this );
-      rwt.event.EventHandlerUtil.applyBrowserFixes();
-    },
-
-    cleanUp : function() {
-      delete this.__onmouseevent;
-      delete this.__ondragevent;
-      delete this.__onselectevent;
-      delete this.__onwindowblur;
-      delete this.__onwindowfocus;
-      delete this.__onwindowresize;
-      delete this.__onKeyEvent;
-      delete this._lastMouseEventType;
-      delete this._lastMouseDown;
-      delete this._lastMouseEventDate;
-      delete this._lastMouseDownDomTarget;
-      delete this._lastMouseDownDispatchTarget;
-      rwt.event.EventHandlerUtil.cleanUp();
-    },
-
-    attachEvents : function() {
-      var eventUtil = rwt.html.EventRegistration;
-      this.attachEventTypes( this._mouseEventTypes, this.__onmouseevent );
-      this.attachEventTypes( this._dragEventTypes, this.__ondragevent );
-      this.attachEventTypes( this._keyEventTypes, this.__onKeyEvent );
-      eventUtil.addEventListener( window, "blur", this.__onwindowblur );
-      eventUtil.addEventListener( window, "focus", this.__onwindowfocus );
-      eventUtil.addEventListener( window, "resize", this.__onwindowresize );
-      document.body.onselect = this.__onselectevent;
-      document.onselectstart = this.__onselectevent;
-      document.onselectionchange = this.__onselectevent;
-    },
-
-    detachEvents : function() {
-      var eventUtil = rwt.html.EventRegistration;
-      this.detachEventTypes( this._mouseEventTypes, this.__onmouseevent);
-      this.detachEventTypes( this._dragEventTypes, this.__ondragevent);
-      this.detachEventTypes( this._keyEventTypes, this.__onKeyEvent );
-      eventUtil.removeEventListener( window, "blur", this.__onwindowblur );
-      eventUtil.removeEventListener( window, "focus", this.__onwindowfocus );
-      eventUtil.removeEventListener( window, "resize", this.__onwindowresize );
-      document.body.onselect = null;
-      document.onselectstart = null;
-      document.onselectionchange = null;
-    },
-
-    setCaptureWidget : function( widget ) {
-      if( this._captureWidget !== widget ) {
-        if( this._captureWidget !== null ) {
-          this._captureWidget.setCapture( false );
-        }
-        this._captureWidget = widget;
-        if( widget != null ) {
-          widget.setCapture( true );
-        }
-      }
-    },
-
-    getCaptureWidget : function() {
-      return this._captureWidget;
-    },
-
-    setFocusRoot : function( widget ) {
-      if( widget !== this._focusRoot ) {
-        if( this._focusRoot !== null ) {
-          this._focusRoot.setFocusedChild( null );
-        }
-        this._focusRoot = widget;
-        if( widget !== null && widget.getFocusedChild() === null ) {
-          widget.setFocusedChild( widget );
-        }
-      }
-    },
-
-    getFocusRoot : function() {
-      return this._focusRoot;
-    },
-
-    /**
-     * Sets a callback-function to decide if the native context-
-     * menu is displayed. It will be called on DOM-events of the type
-     * "contextmenu". The target-Widget of the event will be given as
-     * the first argument, the dom-target as the second.
-     * It must return a boolean. Null is not allowed.
-     *
-     */
-    setAllowContextMenu : function( func ) {
-      this._allowContextMenu = func;
-    },
-
-    setBlockKeyEvents : function( value ) {
-      this._blockKeyEvents = value;
-    },
-
-    getBlockKeyEvents : function( value ) {
-      return this._blockKeyEvents;
-    },
-
-    setMenuManager : function( manager ) {
-      this._menuManager = manager;
-    },
-
-    getMenuManager : function( manager ) {
-      return this._menuManager;
-    },
-
-    setMouseEventFilter : function( filter, context ) {
-      this._filter[ "mouseevent" ] = [ filter, context ];
-    },
-
-    setKeyEventFilter : function( filter, context ) {
-      // TODO [tb] : Unify behavior and API for EventFilter, only use event
-      // create API for order of filter
-      this._filter[ "keyevent" ] = [ filter, context ];
-    },
-
-    setKeyDomEventFilter : function( filter, context ) {
-      this._filter[ "domKeyevent" ] = [ filter, context ];
-    },
-
-    //////////////
-    // KEY EVENTS:
-
-    _onKeyEvent : function() {
-      try {
-        var EventHandlerUtil = rwt.event.EventHandlerUtil;
-        var event = EventHandlerUtil.getDomEvent( arguments );
-        var keyCode = EventHandlerUtil.getKeyCode( event );
-        var charCode = EventHandlerUtil.getCharCode( event );
-        if( this._blockKeyEvents ) {
-          if( EventHandlerUtil.shouldBlock( event.type, keyCode, charCode, event ) ) {
-            EventHandlerUtil.stopDomEvent( event );
-          }
-          return;
-        }
-        if( typeof this._filter[ "domKeyevent" ] !== "undefined" ) {
-          var context = this._filter[ "domKeyevent" ][ 1 ];
-          var func = this._filter[ "domKeyevent" ][ 0 ];
-          func.call( context, event.type, keyCode, charCode, event );
-        }
-        var pseudoTypes = EventHandlerUtil.getEventPseudoTypes( event, keyCode, charCode );
-        var keyUpCodes =  EventHandlerUtil.mustRestoreKeyup( keyCode, pseudoTypes );
-        for( var i = 0; i < keyUpCodes.length; i++ ) {
-          this._onkeyevent_post( event, "keyup", keyUpCodes[ i ], 0 );
-          EventHandlerUtil.clearStuckKey( keyUpCodes[ i ] );
-        }
-        for( var i = 0; i < pseudoTypes.length; i++ ) {
-          this._onkeyevent_post( event, pseudoTypes[ i ], keyCode, charCode );
-        }
-        if( EventHandlerUtil.mustRestoreKeypress( event, pseudoTypes ) ) {
-          this._onkeyevent_post( event, "keypress", keyCode, charCode );
-        }
-        EventHandlerUtil.saveData( event, keyCode, charCode );
-      } catch( ex ) {
-        rwt.runtime.ErrorHandler.processJavaScriptError( ex );
-      }
-    },
-
-
-    _onkeyevent_post : function( vDomEvent, vType, vKeyCode, vCharCode ) {
-      var process = true;
-      if( typeof this._filter[ "keyevent" ] !== "undefined" ) {
-        var context = this._filter[ "keyevent" ][ 1 ];
-        var func = this._filter[ "keyevent" ][ 0 ];
-        process = func.call( context, vType, vKeyCode, vCharCode, vDomEvent );
-      }
-      if( process ) {
-        this._processKeyEvent( vDomEvent, vType, vKeyCode, vCharCode );
-      }
-    },
-
-    _processKeyEvent : function( vDomEvent, vType, vKeyCode, vCharCode ) {
-      var EventHandlerUtil = rwt.event.EventHandlerUtil;
-      var keyIdentifier;
-      if( !isNaN( vKeyCode ) && vKeyCode !== 0 ) {
-        keyIdentifier = EventHandlerUtil.keyCodeToIdentifier( vKeyCode );
-      } else {
-        keyIdentifier = EventHandlerUtil.charCodeToIdentifier( vCharCode );
-      }
-      var vDomTarget = EventHandlerUtil.getDomTarget( vDomEvent );
-      var vTarget = this._getKeyEventTarget();
-      var vKeyEventObject = new rwt.event.KeyEvent( vType,
-                                                        vDomEvent,
-                                                        vDomTarget,
-                                                        vTarget,
-                                                        null,
-                                                        vKeyCode,
-                                                        vCharCode,
-                                                        keyIdentifier );
-      if( vTarget != null && vTarget.getEnabled() ) {
-        switch( keyIdentifier ) {
-          case "Escape":
-          case "Tab":
-            if ( this._menuManager != null ) {
-              this._menuManager.update(vTarget, vType);
-            }
-          break;
-        }
-        if( vDomEvent.ctrlKey && keyIdentifier == "A" ) {
-          switch( vDomTarget.tagName.toLowerCase() ) {
-            case "input":
-            case "textarea":
-            case "iframe":
-              // selection allowed
-            break;
-            default:
-             EventHandlerUtil.stopDomEvent(vDomEvent);
-            break;
-          }
-        }
-        vTarget.dispatchEvent( vKeyEventObject );
-        if( rwt.qx.Class.isDefined("rwt.event.DragAndDropHandler") ) {
-          rwt.event.DragAndDropHandler.getInstance().handleKeyEvent( vKeyEventObject );
-        }
-      }
-      vKeyEventObject.dispose();
-    },
-
-    ///////////////
-    // MOUSE EVENTS
-
-    _onmouseevent : function( event ) {
-      try {
-        var process = true;
-        if( typeof this._filter[ "mouseevent" ] !== "undefined" ) {
-          var context = this._filter[ "mouseevent" ][ 1 ];
-          process = this._filter[ "mouseevent" ][ 0 ].call( context, event );
-        }
-        if( process ) {
-          this._processMouseEvent( event );
-        }
-      } catch( ex ) {
-        rwt.runtime.ErrorHandler.processJavaScriptError( ex );
-      }
-    },
-
-    // TODO [tb] : refactor to work like _onKeyEvent
-    _processMouseEvent : rwt.util.Variant.select("qx.client",  {
-      "mshtml" : function() {
-        var EventHandlerUtil = rwt.event.EventHandlerUtil;
-        var vDomEvent = EventHandlerUtil.getDomEvent( arguments );
-        var vDomTarget = EventHandlerUtil.getDomTarget( vDomEvent );
-        var vType = vDomEvent.type;
-        if( vType == "mousemove" ) {
-          if( this._mouseIsDown && vDomEvent.button === 0 ) {
-            this._onmouseevent_post( vDomEvent, "mouseup", vDomTarget );
-            this._mouseIsDown = false;
-          }
-        } else {
-          if( vType == "mousedown" ) {
-            this._mouseIsDown = true;
-          } else if( vType == "mouseup" ) {
-            this._mouseIsDown = false;
-          }
-          if(    vType == "mouseup"
-              && !this._lastMouseDown
-              && ( ( new Date() ).valueOf() - this._lastMouseEventDate ) < 250
-          ) {
-            // Fix MSHTML Mouseup, should be after a normal click
-            // or contextmenu event, like Mozilla does this
-            this._onmouseevent_post( vDomEvent, "mousedown", vDomTarget );
-          } else if (    vType == "dblclick"
-                      && this._lastMouseEventType == "mouseup"
-                      && ( ( new Date() ).valueOf() - this._lastMouseEventDate ) < 250
-          ) {
-            // Fix MSHTML Doubleclick, should be after a normal click event,
-             // like Mozilla does this
-            this._onmouseevent_post(vDomEvent, "click", vDomTarget);
-          }
-          switch( vType ) {
-            case "mousedown":
-            case "mouseup":
-            case "click":
-            case "dblclick":
-            case "contextmenu":
-              this._lastMouseEventType = vType;
-              this._lastMouseEventDate = ( new Date() ).valueOf();
-              this._lastMouseDown = vType == "mousedown";
-            break;
-          }
-        }
-        this._onmouseevent_post(vDomEvent, vType, vDomTarget);
-      },
-
-      "default" : function( vDomEvent ) {
-        var EventHandlerUtil = rwt.event.EventHandlerUtil;
-        var vDomTarget = EventHandlerUtil.getDomTarget( vDomEvent );
-        var vType = vDomEvent.type;
-        switch(vType) {
-          case "DOMMouseScroll":
-            vType = "mousewheel";
-          break;
-          case "click":
-          case "dblclick":
-            // ignore click or dblclick events with other then the left mouse button
-            if( vDomEvent.which !== 1 ) {
-              return;
-            }
-        }
-        this._onmouseevent_post( vDomEvent, vType, vDomTarget );
-      }
-    } ),
-
-    _onmouseevent_post : function( vDomEvent, vType, vDomTarget ) {
-      var eventConsumed = false;
-      var EventHandlerUtil = rwt.event.EventHandlerUtil;
-      var vCaptureTarget = this.getCaptureWidget();
-      var vOriginalTarget = EventHandlerUtil.getOriginalTargetObject( vDomTarget );
-      var vTarget = EventHandlerUtil.getTargetObject( null, vOriginalTarget, true );
-      if( !vTarget ) {
-        return;
-      }
-      var vDispatchTarget = vCaptureTarget ? vCaptureTarget : vTarget;
-      var vFixClick = this._onmouseevent_click_fix( vDomTarget, vType, vDispatchTarget );
-      if( vType == "contextmenu" ) {
-        if( this._allowContextMenu( vOriginalTarget, vDomTarget ) ) {
-          eventConsumed = true;
-        } else {
-          EventHandlerUtil.stopDomEvent( vDomEvent );
-        }
-      }
-      if(    vDispatchTarget.getEnabled()
-          && !( vDispatchTarget instanceof rwt.widgets.base.ClientDocument )
-          && vType == "mousedown" ) {
-        rwt.widgets.util.FocusHandler.mouseFocus = true;
-        var vRoot = vDispatchTarget.getFocusRoot();
-        if( vRoot ) {
-          this.setFocusRoot( vRoot );
-          var vFocusTarget = vDispatchTarget;
-          while( !vFocusTarget.isFocusable() && vFocusTarget != vRoot ) {
-            vFocusTarget = vFocusTarget.getParent();
-          }
-          // We need to focus first and active afterwards.
-          // Otherwise the focus will activate another widget if the
-          // active one is not tabable.
-          vRoot.setFocusedChild( vFocusTarget );
-          vRoot.setActiveChild( vDispatchTarget );
-        }
-      }
-      // handle related target object
-      if( vType == "mouseover" || vType == "mouseout" ) {
-        var vRelatedTarget = EventHandlerUtil.getRelatedTargetObjectFromEvent( vDomEvent );
-        var elementEventType = vType == "mouseover" ? "elementOver" : "elementOut";
-        this._fireElementHoverEvents( elementEventType,
-                                      vDomEvent,
-                                      vDomTarget,
-                                      vTarget,
-                                      vOriginalTarget,
-                                      vRelatedTarget,
-                                      vDispatchTarget );
-        // Ignore events where the related target and
-        // the real target are equal - from our sight
-        if( vRelatedTarget == vTarget ) {
-          return;
-        }
-      }
-      var vEventObject = new rwt.event.MouseEvent( vType,
-                                                       vDomEvent,
-                                                       vDomTarget,
-                                                       vTarget,
-                                                       vOriginalTarget,
-                                                       vRelatedTarget );
-      // Store last Event in MouseEvent Constructor. Needed for Tooltips, ...
-      if( vType !== "contextmenu" ) {
-        rwt.event.MouseEvent.storeEventState( vEventObject );
-      }
-      if( !eventConsumed ) {
-        vDispatchTarget.dispatchEvent( vEventObject );
-        if( vDispatchTarget.getEnabled() ) {
-          this._onmouseevent_special_post( vType,
-                                           vTarget,
-                                           vOriginalTarget,
-                                           vDispatchTarget,
-                                           vEventObject,
-                                           vDomEvent );
-        }
-      } else if( vType == "mouseover" ) {
-        var toolTipManager = rwt.widgets.util.ToolTipManager.getInstance();
-        toolTipManager.handleMouseEvent( vEventObject );
-      }
-      vEventObject.dispose();
-      rwt.widgets.base.Widget.flushGlobalQueues();
-      // Fix Click (Gecko Bug, see above)
-      if( vFixClick ) {
-        this._onmouseevent_post( vDomEvent, "click", this._lastMouseDownDomTarget );
-        this._lastMouseDownDomTarget = null;
-        this._lastMouseDownDispatchTarget = null;
-      }
-    },
-
-    _fireElementHoverEvents : function( type,
-                                        domEvent,
-                                        domTarget,
-                                        target,
-                                        originalTarget,
-                                        relatedTarget,
-                                        dispatchTarget )
-    {
-      if( dispatchTarget.getEnabled() ) {
-        var eventObject = new rwt.event.MouseEvent( type,
-                                                        domEvent,
-                                                        domTarget,
-                                                        target,
-                                                        originalTarget,
-                                                        relatedTarget );
-        dispatchTarget.dispatchEvent( eventObject );
-      }
-    },
-
-    _onmouseevent_special_post : function( vType,
-                                           vTarget,
-                                           vOriginalTarget,
-                                           vDispatchTarget,
-                                           vEventObject,
-                                           vDomEvent )
-    {
-      switch( vType ) {
-        case "mousedown":
-          rwt.widgets.util.PopupManager.getInstance().update( vTarget );
-          if( this._menuManager != null ) {
-            this._menuManager.update( vTarget, vType );
-          }
-          rwt.widgets.util.IframeManager.getInstance().handleMouseDown( vEventObject );
-        break;
-        case "mouseup":
-          // Mouseup event should always hide, independed of target,
-          //  so don't send a target
-          if( this._menuManager != null ) {
-            this._menuManager.update( vTarget, vType );
-          }
-          if( rwt.qx.Class.isDefined("rwt.widgets.util.IframeManager" ) ) {
-            rwt.widgets.util.IframeManager.getInstance().handleMouseUp( vEventObject );
-          }
-        break;
-      }
-      rwt.widgets.util.ToolTipManager.getInstance().handleMouseEvent( vEventObject );
-      this._ignoreWindowBlur = vType === "mousedown";
-      if( rwt.qx.Class.isDefined("rwt.event.DragAndDropHandler" ) && vTarget ) {
-        rwt.event.DragAndDropHandler.getInstance().handleMouseEvent( vEventObject );
-      }
-    },
-
-    _ondragevent : function( vEvent ) {
-      try {
-        var EventHandlerUtil = rwt.event.EventHandlerUtil;
-        if( !vEvent ) {
-          vEvent = window.event;
-        }
-        EventHandlerUtil.stopDomEvent( vEvent );
-      } catch( ex ) {
-        rwt.runtime.ErrorHandler.processJavaScriptError( ex );
-      }
-    },
-
-    ////////////////
-    // SELECT EVENTS
-
-    _onselectevent : function( ) {
-      try {
-        var EventHandlerUtil = rwt.event.EventHandlerUtil;
-        var e = EventHandlerUtil.getDomEvent( arguments );
-        var target = EventHandlerUtil.getOriginalTargetObjectFromEvent( e );
-        while( target ) {
-          if( target.getSelectable() != null ) {
-            if ( !target.getSelectable() ) {
-              EventHandlerUtil.stopDomEvent( e );
-            }
-            break;
-          }
-          target = target.getParent();
-        }
-      } catch( ex ) {
-        rwt.runtime.ErrorHandler.processJavaScriptError( ex );
-      }
-    },
-
-    _onwindowblur : function( e ) {
-      try {
-        if ( !this._focused || this._ignoreWindowBlur || e.originalTarget != window ) {
-          return;
-        }
-        this._focused = false;
-        this.setCaptureWidget( null );
-        if( rwt.qx.Class.isDefined( "rwt.widgets.util.PopupManager" ) ) {
-          rwt.widgets.util.PopupManager.getInstance().update();
-        }
-        if ( this._menuManager ) {
-          this._menuManager.update();
-        }
-        if( rwt.qx.Class.isDefined( "rwt.event.DragAndDropHandler" ) ) {
-          rwt.event.DragAndDropHandler.getInstance().globalCancelDrag();
-        }
-        rwt.widgets.base.ClientDocument.getInstance().createDispatchEvent( "windowblur" );
-      } catch( ex ) {
-        rwt.runtime.ErrorHandler.processJavaScriptError( ex );
-      }
-    },
-
-    _onwindowfocus : function( e ) {
-      try {
-        if( this._focused ) {
-          return;
-        }
-        this._focused = true;
-        rwt.widgets.base.ClientDocument.getInstance().createDispatchEvent( "windowfocus" );
-      } catch( ex ) {
-        rwt.runtime.ErrorHandler.processJavaScriptError( ex );
-      }
-    },
-
-    _onwindowresize : function( e ) {
-      try {
-        var clientDocument = rwt.widgets.base.ClientDocument.getInstance();
-        // Catch redundant resize events, fired for example by iPad:
-        var oldWidth = clientDocument.getInnerWidth();
-        var oldHeight = clientDocument.getInnerHeight();
-        var width = clientDocument._computeInnerWidth();
-        var height = clientDocument._computeInnerHeight();
-        if( width !== oldWidth || height !== oldHeight ) {
-          rwt.widgets.base.ClientDocument.getInstance().createDispatchEvent( "windowresize" );
-        }
-      } catch( ex ) {
-        rwt.runtime.ErrorHandler.processJavaScriptError( ex );
-      }
-    },
-
-    ///////////////
-    // Helper-maps:
-
-    _mouseEventTypes : [
-      "mouseover",
-      "mousemove",
-      "mouseout",
-      "mousedown",
-      "mouseup",
-      "click",
-      "dblclick",
-      "contextmenu",
-      rwt.client.Client.isGecko() ? "DOMMouseScroll" : "mousewheel"
-    ],
-
-    _keyEventTypes : [
-      "keydown",
-      "keypress",
-      "keyup"
-    ],
-
-    _dragEventTypes : rwt.util.Variant.select("qx.client", {
-      "gecko" : [
-        "dragdrop",
-        "dragover",
-        "dragenter",
-        "dragexit",
-        "draggesture"
-       ],
-      "mshtml" : [
-        "dragend",
-        "dragover",
-        "dragstart",
-        "drag",
-        "dragenter",
-        "dragleave"
-      ],
-      "default" : [
-        "dragstart",
-        "dragdrop",
-        "dragover",
-        "drag",
-        "dragleave",
-        "dragenter",
-        "dragexit",
-        "draggesture"
-      ]
-    } ),
-
-    ////////////////////
-    // Helper-functions:
-
-    _getKeyEventTarget : function() {
-      var vFocusRoot = this.getFocusRoot();
-      return this.getCaptureWidget() || ( vFocusRoot == null ? null : vFocusRoot.getActiveChild() );
-    },
-
-    attachEventTypes : function( vEventTypes, vFunctionPointer ) {
-      try {
-        // Gecko is a bit buggy to handle key events on document if
-        // not previously focused. Internet Explorer has problems to use
-        // 'window', so there we use the 'body' element
-        var el = rwt.client.Client.isGecko() ? window : document.body;
-        for( var i=0, l=vEventTypes.length; i<l; i++ ) {
-          rwt.html.EventRegistration.addEventListener( el, vEventTypes[i], vFunctionPointer );
-        }
-      }
-      catch( ex ) {
-        throw new Error( "EventHandler: Failed to attach window event types: " + vEventTypes + ": " + ex );
-      }
-    },
-
-    detachEventTypes : function( vEventTypes, vFunctionPointer ) {
-      try {
-        var el = rwt.client.Client.isGecko() ? window : document.body;
-        for (var i=0, l=vEventTypes.length; i<l; i++) {
-          rwt.html.EventRegistration.removeEventListener( el, vEventTypes[i], vFunctionPointer );
-        }
-      } catch( ex ) {
-        throw new Error( "EventHandler: Failed to detach window event types: " + vEventTypes + ": " + ex );
-      }
-    },
-
-    /**
-     * Fixes browser quirks with 'click' detection
-     *
-     * Firefox: The DOM-targets are different. The click event only fires,
-     * if the target of the mousedown is the same than with the mouseup.
-     * If the content moved away, the click isn't fired.
-     */
-    _onmouseevent_click_fix : rwt.util.Variant.select("qx.client", {
-      "gecko" : function( vDomTarget, vType, vDispatchTarget ) {
-        var vReturn = false;
-        switch( vType ) {
-          case "mousedown":
-            this._lastMouseDownDomTarget = vDomTarget;
-            this._lastMouseDownDispatchTarget = vDispatchTarget;
-          break;
-          case "mouseup":
-            if(    this._lastMouseDownDispatchTarget === vDispatchTarget
-                && vDomTarget !== this._lastMouseDownDomTarget) {
-              vReturn = true;
-            } else {
-              this._lastMouseDownDomTarget = null;
-              this._lastMouseDownDispatchTarget = null;
-            }
-          break;
-        }
-        return vReturn;
-      },
-
-      "default" : function() {
-        return false;
-      }
-    } )
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Basic node creation and type detection
- */
-rwt.qx.Class.define("rwt.html.Nodes",
-{
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      NODE TYPES
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * {Map} Node type:
-     *
-     * * ELEMENT
-     * * ATTRIBUTE
-     * * TEXT
-     * * CDATA_SECTION
-     * * ENTITY_REFERENCE
-     * * ENTITY
-     * * PROCESSING_INSTRUCTION
-     * * COMMENT
-     * * DOCUMENT
-     * * DOCUMENT_TYPE
-     * * DOCUMENT_FRAGMENT
-     * * NOTATION
-     */
-    ELEMENT                : 1,
-    ATTRIBUTE              : 2,
-    TEXT                   : 3,
-    CDATA_SECTION          : 4,
-    ENTITY_REFERENCE       : 5,
-    ENTITY                 : 6,
-    PROCESSING_INSTRUCTION : 7,
-    COMMENT                : 8,
-    DOCUMENT               : 9,
-    DOCUMENT_TYPE          : 10,
-    DOCUMENT_FRAGMENT      : 11,
-    NOTATION               : 12,
-
-
-
-    /**
-     * Whether the given node is a DOM document node
-     *
-     * @type static
-     * @param node {Node} the node which should be tested
-     * @return {Boolean} true when the node is a document
-     */
-    isDocument : function(node) {
-      return !!(node && node.nodeType === rwt.html.Nodes.DOCUMENT);
-    },
-
-
-    /*
-    ---------------------------------------------------------------------------
-      DOCUMENT ACCESS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Returns the owner document of the given node
-     *
-     * @type static
-     * @param node {Node} the node which should be tested
-     * @return {Document | null} The document of the given DOM node
-     */
-    getDocument : function(node)
-    {
-      if (this.isDocument(node)) {
-        return node;
-      }
-
-      return node.ownerDocument || node.document || null;
-    },
-
-
-    /**
-     * Returns the DOM2 <code>defaultView</code> (window).
-     *
-     * @type static
-     * @signature function(node)
-     * @param node {Node} node to inspect
-     * @return {Window} the <code>defaultView</code> of the given node
-     */
-    getWindow : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function(node) {
-        return this.getDocument(node).parentWindow;
-      },
-
-      "default" : function(node) {
-        return this.getDocument(node).defaultView;
-      }
-    })
-
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define("rwt.event.DomEvent",
-{
-  extend : rwt.event.Event,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function(vType, vDomEvent, vDomTarget, vTarget, vOriginalTarget)
-  {
-    this.base(arguments, vType);
-
-    this.setDomEvent(vDomEvent);
-    this.setDomTarget(vDomTarget);
-
-    this.setTarget(vTarget);
-    this.setOriginalTarget(vOriginalTarget);
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics :
-  {
-
-    /** {int} The modifier mask for the shift key. */
-    SHIFT_MASK : 1,
-
-    /** {int} The modifier mask for the control key. */
-    CTRL_MASK  : 2,
-
-    /** {int} The modifier mask for the alt key. */
-    ALT_MASK   : 4,
-
-    /** {int} The modifier mask for the meta key (e.g. apple key on Macs). */
-    META_MASK  : 8
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    bubbles :
-    {
-      _fast        : true,
-      defaultValue : true,
-      noCompute    : true
-    },
-
-    propagationStopped :
-    {
-      _fast        : true,
-      defaultValue : false,
-      noCompute    : true
-    },
-
-    domEvent :
-    {
-      _fast       : true,
-      setOnlyOnce : true,
-      noCompute   : true
-    },
-
-    domTarget :
-    {
-      _fast       : true,
-      setOnlyOnce : true,
-      noCompute   : true
-    },
-
-
-    /**
-     * The modifiers. A mask of the pressed modifier keys. This is an OR-combination of
-     * {@link #SHIFT_MASK}, {@link #CTRL_MASK}, {@link #ALT_MASK} and {@link #META_MASK}.
-     */
-    modifiers :
-    {
-      _cached      : true,
-      defaultValue : null
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /**
-     * property computer
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    _computeModifiers : function() {
-      var mask = 0;
-      var evt = this.getDomEvent();
-      if( evt.shiftKey ) {
-        mask |= rwt.event.DomEvent.SHIFT_MASK;
-      }
-      if( evt.ctrlKey ) {
-        mask |= rwt.event.DomEvent.CTRL_MASK;
-      }
-      if( evt.altKey ) {
-        mask |= rwt.event.DomEvent.ALT_MASK;
-      }
-      if( evt.metaKey ) {
-        mask |= rwt.event.DomEvent.META_MASK;
-      }
-      return mask;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      SPECIAL KEY SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Returns whether the the ctrl key is pressed.
-     *
-     * @type member
-     * @return {Boolean} whether the the ctrl key is pressed.
-     */
-    isCtrlPressed : function() {
-      return this.getDomEvent().ctrlKey;
-    },
-
-
-    /**
-     * Returns whether the the shift key is pressed.
-     *
-     * @type member
-     * @return {Boolean} whether the the shift key is pressed.
-     */
-    isShiftPressed : function() {
-      return this.getDomEvent().shiftKey;
-    },
-
-
-    /**
-     * Returns whether the the alt key is pressed.
-     *
-     * @type member
-     * @return {Boolean} whether the the alt key is pressed.
-     */
-    isAltPressed : function() {
-      return this.getDomEvent().altKey;
-    },
-
-
-    /**
-     * Returns whether the the meta key is pressed.
-     *
-     * @type member
-     * @return {Boolean} whether the the meta key is pressed.
-     */
-    isMetaPressed : function() {
-      return this.getDomEvent().metaKey;
-    },
-
-
-    /**
-     * Returns whether the ctrl key or (on the Mac) the command key is pressed.
-     *
-     * @type member
-     * @return {Boolean} <code>true</code> if the command key is pressed on the Mac
-     *           or the ctrl key is pressed on another system.
-     */
-    isCtrlOrCommandPressed : function()
-    {
-      if( rwt.client.Client.getPlatform() === "mac" ) {
-        return this.getDomEvent().metaKey;
-      } else {
-        return this.getDomEvent().ctrlKey;
-      }
-    },
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      PREVENT DEFAULT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vValue {var} TODOC
-     * @return {var} TODOC
-     * @signature function(vValue)
-     */
-    setDefaultPrevented : function( vValue ) {
-      if( !vValue ) {
-        throw new Error( "It is not possible to set preventDefault to false if it was true before!" );
-      }
-      rwt.event.EventHandlerUtil.stopDomEvent( this.getDomEvent() );
-      this.base(arguments, vValue);
-    }
-
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function() {
-    this._disposeFields("_valueDomEvent", "_valueDomTarget");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * A key event instance contains all data for each occured key event
- */
-rwt.qx.Class.define("rwt.event.KeyEvent",
-{
-  extend : rwt.event.DomEvent,
-
-  /**
-   * @param vType {String} event type (keydown, keypress, keyup)
-   * @param vDomEvent {Element} DOM event object
-   * @param vDomTarget {Element} target element of the DOM event
-   * @param vTarget
-   * @param vOriginalTarget
-   * @param vKeyCode {Integer} emulated key code for compatibility with older qoodoo applications
-   * @param vCharCode {Integer} char code from the "keypress" event
-   * @param vKeyIdentifier {String} the key identifier
-   */
-  construct : function(vType, vDomEvent, vDomTarget, vTarget, vOriginalTarget, vKeyCode, vCharCode, vKeyIdentifier)
-  {
-    this.base(arguments, vType, vDomEvent, vDomTarget, vTarget, vOriginalTarget);
-
-    this._keyCode = vKeyCode;
-    this.setCharCode(vCharCode);
-    this.setKeyIdentifier(vKeyIdentifier);
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics :
-  {
-    /**
-     * Mapping of the old key identifiers to the key codes
-     * @deprecated
-     */
-    keys :
-    {
-      esc             : 27,
-      enter           : 13,
-      tab             : 9,
-      space           : 32,
-      up              : 38,
-      down            : 40,
-      left            : 37,
-      right           : 39,
-      shift           : 16,
-      ctrl            : 17,
-      alt             : 18,
-      f1              : 112,
-      f2              : 113,
-      f3              : 114,
-      f4              : 115,
-      f5              : 116,
-      f6              : 117,
-      f7              : 118,
-      f8              : 119,
-      f9              : 120,
-      f10             : 121,
-      f11             : 122,
-      f12             : 123,
-      print           : 124,
-      del             : 46,
-      backspace       : 8,
-      insert          : 45,
-      home            : 36,
-      end             : 35,
-      pageup          : 33,
-      pagedown        : 34,
-      numlock         : 144,
-      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_divide   : 111,
-      numpad_multiply : 106,
-      numpad_minus    : 109,
-      numpad_plus     : 107
-    },
-
-    /**
-     * Mapping of the key codes to the key identifiers
-     */
-    codes : {}
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-
-    /**
-     * Unicode number of the pressed character.
-     */
-    charCode :
-    {
-      _fast       : true,
-      setOnlyOnce : true,
-      noCompute   : true
-    },
-
-
-    /**
-     * Identifier of the pressed key. This property is modeled after the <em>KeyboardEvent.keyIdentifier</em> property
-     * of the W3C DOM 3 event specification (http://www.w3.org/TR/2003/NOTE-DOM-Level-3-Events-20031107/events.html#Events-KeyboardEvent-keyIdentifier).
-     *
-     * Printable keys are represented by a unicode string, non-printable keys have one of the following
-     * values:
-     * <br>
-     * <table>
-     * <tr><th>Backspace</th><td>The Backspace (Back) key.</td></tr>
-     * <tr><th>Tab</th><td>The Horizontal Tabulation (Tab) key.</td></tr>
-     * <tr><th>Space</th><td>The Space (Spacebar) key.</td></tr>
-     * <tr><th>Enter</th><td>The Enter key. Note: This key identifier is also used for the Return (Macintosh numpad) key.</td></tr>
-     * <tr><th>Shift</th><td>The Shift key.</td></tr>
-     * <tr><th>Control</th><td>The Control (Ctrl) key.</td></tr>
-     * <tr><th>Alt</th><td>The Alt (Menu) key.</td></tr>
-     * <tr><th>CapsLock</th><td>The CapsLock key</td></tr>
-     * <tr><th>Meta</th><td>The Meta key. (Apple Meta and Windows key)</td></tr>
-     * <tr><th>Escape</th><td>The Escape (Esc) key.</td></tr>
-     * <tr><th>Left</th><td>The Left Arrow key.</td></tr>
-     * <tr><th>Up</th><td>The Up Arrow key.</td></tr>
-     * <tr><th>Right</th><td>The Right Arrow key.</td></tr>
-     * <tr><th>Down</th><td>The Down Arrow key.</td></tr>
-     * <tr><th>PageUp</th><td>The Page Up key.</td></tr>
-     * <tr><th>PageDown</th><td>The Page Down (Next) key.</td></tr>
-     * <tr><th>End</th><td>The End key.</td></tr>
-     * <tr><th>Home</th><td>The Home key.</td></tr>
-     * <tr><th>Insert</th><td>The Insert (Ins) key. (Does not fire in Opera/Win)</td></tr>
-     * <tr><th>Delete</th><td>The Delete (Del) Key.</td></tr>
-     * <tr><th>F1</th><td>The F1 key.</td></tr>
-     * <tr><th>F2</th><td>The F2 key.</td></tr>
-     * <tr><th>F3</th><td>The F3 key.</td></tr>
-     * <tr><th>F4</th><td>The F4 key.</td></tr>
-     * <tr><th>F5</th><td>The F5 key.</td></tr>
-     * <tr><th>F6</th><td>The F6 key.</td></tr>
-     * <tr><th>F7</th><td>The F7 key.</td></tr>
-     * <tr><th>F8</th><td>The F8 key.</td></tr>
-     * <tr><th>F9</th><td>The F9 key.</td></tr>
-     * <tr><th>F10</th><td>The F10 key.</td></tr>
-     * <tr><th>F11</th><td>The F11 key.</td></tr>
-     * <tr><th>F12</th><td>The F12 key.</td></tr>
-     * <tr><th>NumLock</th><td>The Num Lock key.</td></tr>
-     * <tr><th>PrintScreen</th><td>The Print Screen (PrintScrn, SnapShot) key.</td></tr>
-     * <tr><th>Scroll</th><td>The scroll lock key</td></tr>
-     * <tr><th>Pause</th><td>The pause/break key</td></tr>
-     * <tr><th>Win</th><td>The Windows Logo key</td></tr>
-     * <tr><th>Apps</th><td>The Application key (Windows Context Menu)</td></tr>
-     * </table>
-     */
-    keyIdentifier :
-    {
-      _fast       : true,
-      setOnlyOnce : true,
-      noCompute   : true
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /**
-     * Legacy keycode
-     * @deprecated Will be removed with qooxdoo 0.7
-     */
-    getKeyCode : function() {
-      return this._keyCode;
-    }
-  },
-
-
-
-  /*
-  *****************************************************************************
-     DEFER
-  *****************************************************************************
-  */
-
-  defer : function(statics)
-  {
-    // create dynamic codes copy
-    for (var i in statics.keys) {
-      statics.codes[statics.keys[i]] = i;
-    }
-  }
-});
-
-/*******************************************************************************
- *  Copyright: 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                        and EclipseSource
- *
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-
-/** A mouse event instance contains all data for each occured mouse event */
-rwt.qx.Class.define("rwt.event.MouseEvent",
-{
-  extend : rwt.event.DomEvent,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function(vType, vDomEvent, vDomTarget, vTarget, vOriginalTarget, vRelatedTarget)
-  {
-    this.base(arguments, vType, vDomEvent, vDomTarget, vTarget, vOriginalTarget);
-
-    if (vRelatedTarget) {
-      this.setRelatedTarget(vRelatedTarget);
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics :
-  {
-    C_BUTTON_LEFT : "left",
-    C_BUTTON_MIDDLE : "middle",
-    C_BUTTON_RIGHT : "right",
-    C_BUTTON_NONE : "none",
-
-    _screenX : 0,
-    _screenY : 0,
-    _clientX : 0,
-    _clientY : 0,
-    _pageX : 0,
-    _pageY : 0,
-    _button : null,
-
-    buttons : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" :
-      {
-        left   : 1,
-        right  : 2,
-        middle : 4
-      },
-
-      "default" :
-      {
-        left   : 0,
-        right  : 2,
-        middle : 1
-      }
-    }),
-
-
-    /**
-     * TODOC
-     *
-     * @type static
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    storeEventState : function(e)
-    {
-      this._screenX = e.getScreenX();
-      this._screenY = e.getScreenY();
-      this._clientX = e.getClientX();
-      this._clientY = e.getClientY();
-      this._pageX = e.getPageX();
-      this._pageY = e.getPageY();
-      this._button = e.getButton();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type static
-     * @return {var} TODOC
-     */
-    getScreenX : function() {
-      return this._screenX;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type static
-     * @return {var} TODOC
-     */
-    getScreenY : function() {
-      return this._screenY;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type static
-     * @return {var} TODOC
-     */
-    getClientX : function() {
-      return this._clientX;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type static
-     * @return {var} TODOC
-     */
-    getClientY : function() {
-      return this._clientY;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type static
-     * @return {var} TODOC
-     */
-    getPageX : function() {
-      return this._pageX;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type static
-     * @return {var} TODOC
-     */
-    getPageY : function() {
-      return this._pageY;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type static
-     * @return {var} TODOC
-     */
-    getButton : function() {
-      return this._button;
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    button :
-    {
-      _fast    : true,
-      readOnly : true
-    },
-
-    wheelDelta :
-    {
-      _fast    : true,
-      readOnly : true
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      PAGE COORDINATES SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     * @signature function()
-     */
-    getPageX : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function() {
-        return Math.round( this.getDomEvent().clientX + rwt.html.Viewport.getScrollLeft( window ) );
-      },
-
-      "default" : function() {
-        return Math.round( this.getDomEvent().pageX );
-      }
-    }),
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     * @signature function()
-     */
-    getPageY : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function() {
-        return Math.round( this.getDomEvent().clientY + rwt.html.Viewport.getScrollTop( window ) );
-      },
-
-      "default" : function() {
-        return Math.round( this.getDomEvent().pageY );
-      }
-    }),
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      CLIENT COORDINATES SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    getClientX : function() {
-      return this.getDomEvent().clientX;
-    },
-
-    getClientY : function() {
-      return this.getDomEvent().clientY;
-    },
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      SCREEN COORDINATES SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getScreenX : function() {
-      return this.getDomEvent().screenX;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getScreenY : function() {
-      return this.getDomEvent().screenY;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      BUTTON SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     * @signature function()
-     */
-    isLeftButtonPressed : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function()
-      {
-        // IE does not set e.button in click events
-        if (this.getType() == "click") {
-          return true;
-        } else {
-          return this.getButton() === rwt.event.MouseEvent.C_BUTTON_LEFT;
-        }
-      },
-
-     "default": function() {
-        return this.getButton() === rwt.event.MouseEvent.C_BUTTON_LEFT;
-      }
-    }),
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    isMiddleButtonPressed : function() {
-      return this.getButton() === rwt.event.MouseEvent.C_BUTTON_MIDDLE;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    isRightButtonPressed : function() {
-      return this.getButton() === rwt.event.MouseEvent.C_BUTTON_RIGHT;
-    },
-
-
-    __buttons : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" :
-      {
-        1 : "left",
-        2 : "right",
-        4 : "middle"
-      },
-
-      "default" :
-      {
-        0 : "left",
-        2 : "right",
-        1 : "middle"
-      }
-    }),
-
-
-    /**
-     * During mouse events caused by the depression or release of a mouse button,
-     * this method can be used to check which mouse button changed state.
-     *
-     * @type member
-     * @return {String} One of "left", "right", "middle" or "none"
-     */
-    _computeButton : function()
-    {
-      switch(this.getDomEvent().type)
-      {
-        case "click":
-        case "dblclick":
-          return "left";
-
-        case "contextmenu":
-          return "right";
-
-        default:
-          return this.__buttons[this.getDomEvent().button] || "none";
-      }
-    },
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      WHEEL SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     * @signature function()
-     */
-    _computeWheelDelta : rwt.util.Variant.select("qx.client",
-    {
-      "default" : function() {
-        return this.getDomEvent().wheelDelta / 120;
-      },
-
-      "gecko" : function() {
-        return -(this.getDomEvent().detail / 3);
-      }
-    })
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/** This class allows basic managment of assigned objects. */
-rwt.qx.Class.define("rwt.util.ObjectManager",
-{
-  extend : rwt.qx.Target,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function()
-  {
-    this.base(arguments);
-
-    this._objects = {};
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      USER API
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vObject {var} TODOC
-     * @return {void | Boolean} TODOC
-     */
-    add : function(vObject)
-    {
-      if (this.getDisposed()) {
-        return;
-      }
-
-      this._objects[vObject.toHashCode()] = vObject;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vObject {var} TODOC
-     * @return {void | Boolean} TODOC
-     */
-    remove : function(vObject)
-    {
-      if (this.getDisposed()) {
-        return false;
-      }
-
-      delete this._objects[vObject.toHashCode()];
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vObject {var} TODOC
-     * @return {var} TODOC
-     */
-    has : function(vObject) {
-      return this._objects[vObject.toHashCode()] != null;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vObject {var} TODOC
-     * @return {var} TODOC
-     */
-    get : function(vObject) {
-      return this._objects[vObject.toHashCode()];
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getAll : function() {
-      return this._objects;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    enableAll : function()
-    {
-      for (var vHashCode in this._objects) {
-        this._objects[vHashCode].setEnabled(true);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    disableAll : function()
-    {
-      for (var vHashCode in this._objects) {
-        this._objects[vHashCode].setEnabled(false);
-      }
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function() {
-    this._disposeObjectDeep("_objects");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * This singleton manages multiple instances of rwt.widgets.base.Iframe.
- * <p>
- * The problem: When dragging over an iframe then all mouse events will be
- * passed to the document of the iframe, not the main document.
- * <p>
- * The solution: In order to be able to track mouse events over iframes, this
- * manager will block all iframes during a drag with a glasspane.
- */
-rwt.qx.Class.define("rwt.widgets.util.IframeManager",
-{
-  type : "singleton",
-  extend : rwt.util.ObjectManager,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function() {
-    this.base(arguments);
-
-    this._blocked = {};
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      METHODS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param evt {Event} TODOC
-     * @return {void}
-     */
-    handleMouseDown : function(evt)
-    {
-      var iframeMap = this._blockData = rwt.util.Objects.copy(this.getAll());
-      // console.debug("Blocking frames: " + rwt.util.Objects.getLength(iframeMap));
-
-      for (var key in iframeMap) {
-        iframeMap[key].block();
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param evt {Event} TODOC
-     * @return {void}
-     */
-    handleMouseUp : function(evt)
-    {
-      var iframeMap = this._blockData;
-      // console.debug("Releasing frames: " + rwt.util.Objects.getLength(iframeMap));
-
-      for (var key in iframeMap) {
-        iframeMap[key].release();
-      }
-    }
-  },
-
-
-  /*
-    ---------------------------------------------------------------------------
-      DESTRUCTOR
-    ---------------------------------------------------------------------------
-  */
-  destruct : function()
-  {
-    this._disposeFields("_blocked", "_blockData");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.CoolBar", {
-  extend : rwt.widgets.base.Parent,
-
-  construct : function() {
-    this.base( arguments );
-    this._locked = false;
-  },
-
-  members : {
-
-    setLocked : function( value ) {
-      this._locked = value;
-      var children = this.getChildren();
-      var CoolItem = rwt.widgets.CoolItem;
-      for( var i = 0; i < children.length; i++ ) {
-        if( children[ i ] instanceof CoolItem ) {
-          children[ i ].setLocked( value );
-        }
-      }
-    },
-
-    getLocked : function() {
-      return this._locked;
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.CoolBar", {
-
-  factory : function( properties ) {
-    var result = new rwt.widgets.CoolBar();
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    result.setOverflow( "hidden" );
-    result.setAppearance( "coolbar" );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [ "locked"] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {} ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Abstact base class of all layout implementations
- *
- * @param vWidget {rwt.widgets.base.Parent} reference to the associated widget
- */
-rwt.qx.Class.define("rwt.widgets.util.LayoutImpl",
-{
-  extend : rwt.qx.Object,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function(vWidget)
-  {
-    this.base(arguments);
-
-    this._widget = vWidget;
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /**
-     * Returns the associated widget
-     *
-     * @type member
-     * @return {rwt.widgets.base.Parent} reference to the associated widget
-     */
-    getWidget : function() {
-      return this._widget;
-    },
-
-    /*
-      Global Structure:
-      [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD
-      [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD
-      [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN
-      [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS
-      [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT
-      [06] UPDATE LAYOUT ON JOB QUEUE FLUSH
-      [07] UPDATE CHILDREN ON JOB QUEUE FLUSH
-      [08] CHILDREN ADD/REMOVE/MOVE HANDLING
-      [09] FLUSH LAYOUT QUEUES OF CHILDREN
-      [10] LAYOUT CHILD
-    */
-
-    /*
-    ---------------------------------------------------------------------------
-      [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Compute and return the box width of the given child
-     *
-     * @type member
-     * @param vChild {rwt.widgets.base.Widget} TODOC
-     * @return {Integer} box width of the given child
-     */
-    computeChildBoxWidth : function(vChild) {
-      return vChild.getWidthValue() || vChild._computeBoxWidthFallback();
-    },
-
-
-    /**
-     * Compute and return the box height of the given child
-     *
-     * @type member
-     * @param vChild {rwt.widgets.base.Widget} TODOC
-     * @return {Integer} box height of the given child
-     */
-    computeChildBoxHeight : function(vChild) {
-      return vChild.getHeightValue() || vChild._computeBoxHeightFallback();
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Compute and return the needed width of the given child
-     *
-     * @type member
-     * @param vChild {rwt.widgets.base.Widget} TODOC
-     * @return {Integer} needed width
-     */
-    computeChildNeededWidth : function(vChild)
-    {
-      // omit ultra long lines, these two variables only needed once
-      // here, but this enhance the readability of the code :)
-      var vMinBox = vChild._computedMinWidthTypePercent ? null : vChild.getMinWidthValue();
-      var vMaxBox = vChild._computedMaxWidthTypePercent ? null : vChild.getMaxWidthValue();
-
-      var vBox = (vChild._computedWidthTypePercent || vChild._computedWidthTypeFlex ? null : vChild.getWidthValue()) || vChild.getPreferredBoxWidth() || 0;
-
-      return rwt.util.Numbers.limit(vBox, vMinBox, vMaxBox) + vChild.getMarginLeft() + vChild.getMarginRight();
-    },
-
-
-    /**
-     * Compute and return the needed height of the given child
-     *
-     * @type member
-     * @param vChild {rwt.widgets.base.Widget} TODOC
-     * @return {Integer} needed height
-     */
-    computeChildNeededHeight : function(vChild)
-    {
-      // omit ultra long lines, these two variables only needed once
-      // here, but this enhance the readability of the code :)
-      var vMinBox = vChild._computedMinHeightTypePercent ? null : vChild.getMinHeightValue();
-      var vMaxBox = vChild._computedMaxHeightTypePercent ? null : vChild.getMaxHeightValue();
-
-      var vBox = (vChild._computedHeightTypePercent || vChild._computedHeightTypeFlex ? null : vChild.getHeightValue()) || vChild.getPreferredBoxHeight() || 0;
-
-      return rwt.util.Numbers.limit(vBox, vMinBox, vMaxBox) + vChild.getMarginTop() + vChild.getMarginBottom();
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Calculate the maximum needed width of all children
-     *
-     * @type member
-     * @return {Integer} maximum needed width of all children
-     */
-    computeChildrenNeededWidth_max : function()
-    {
-      for (var i=0, ch=this.getWidget().getVisibleChildren(), chl=ch.length, maxv=0; i<chl; i++) {
-        maxv = Math.max(maxv, ch[i].getNeededWidth());
-      }
-
-      return maxv;
-    },
-
-
-    /**
-     * Calculate the maximum needed height of all children
-     *
-     * @type member
-     * @return {Integer} maximum needed height of all children
-     */
-    computeChildrenNeededHeight_max : function()
-    {
-      for (var i=0, ch=this.getWidget().getVisibleChildren(), chl=ch.length, maxv=0; i<chl; i++) {
-        maxv = Math.max(maxv, ch[i].getNeededHeight());
-      }
-
-      return maxv;
-    },
-
-
-    /**
-     * Compute and return the width needed by all children of this widget
-     *
-     * @type member
-     * @return {Integer} TODOC
-     */
-    computeChildrenNeededWidth_sum : function()
-    {
-      for (var i=0, ch=this.getWidget().getVisibleChildren(), chl=ch.length, sumv=0; i<chl; i++) {
-        sumv += ch[i].getNeededWidth();
-      }
-
-      return sumv;
-    },
-
-
-    /**
-     * Compute and return the height needed by all children of this widget
-     *
-     * @type member
-     * @return {Integer} height needed by all children of this widget
-     */
-    computeChildrenNeededHeight_sum : function()
-    {
-      for (var i=0, ch=this.getWidget().getVisibleChildren(), chl=ch.length, sumv=0; i<chl; i++) {
-        sumv += ch[i].getNeededHeight();
-      }
-
-      return sumv;
-    },
-
-
-    /**
-     * Compute and return the width needed by all children of this widget
-     *
-     * @return {Integer} width needed by all children of this widget
-     */
-    computeChildrenNeededWidth : null,  // alias set in defer
-
-
-    /**
-     * Compute and return the height needed by all children of this widget
-     *
-     * @return {Integer} height needed by all children of this widget
-     */
-    computeChildrenNeededHeight : null,  // alias set in defer
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Things to do and layout when any of the childs changes its outer width.
-     * Needed by layouts where the children depend on each other, like flow or box layouts.
-     *
-     * Subclasses might implement this method
-     *
-     * @type member
-     * @param vChild {rwt.widgets.base.Widget} changed child widget
-     * @return {void}
-     */
-    updateSelfOnChildOuterWidthChange : function(vChild) {},
-
-
-    /**
-     * Things to do and layout when any of the childs changes its outer height.
-     * Needed by layouts where the children depend on each other, like flow or box layouts.
-     *
-     * Subclasses might implement this method
-     *
-     * @type member
-     * @param vChild {rwt.widgets.base.Widget} changed child widget
-     * @return {void}
-     */
-    updateSelfOnChildOuterHeightChange : function(vChild) {},
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Actions that should be done if the inner width of the layout widget has changed.
-     * Normally this includes updates to percent values and ranges.
-     *
-     * Subclasses might implement this method
-     *
-     * @type member
-     * @param vChild {rwt.widgets.base.Widget} changed child widget
-     * @return {boolean}
-     */
-    updateChildOnInnerWidthChange : function(vChild) {},
-
-
-    /**
-     * Actions that should be done if the inner height of the layout widget has changed.
-     * Normally this includes updates to percent values and ranges.
-     *
-     * Subclasses might implement this method
-     *
-     * @type member
-     * @param vChild {rwt.widgets.base.Widget} changed child widget
-     * @return {void}
-     */
-    updateChildOnInnerHeightChange : function(vChild) {},
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [06] UPDATE LAYOUT ON JOB QUEUE FLUSH
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Invalidate and recompute cached data according to job queue.
-     * This is executed at the beginning of the job queue handling.
-     *
-     * Subclasses might implement this method
-     *
-     * @type member
-     * @param vJobQueue {Object} TODOC
-     * @return {void}
-     */
-    updateSelfOnJobQueueFlush : function(vJobQueue) {},
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [07] UPDATE CHILDREN ON JOB QUEUE FLUSH
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Updates children on job queue flush.
-     * This is executed at the end of the job queue handling.
-     *
-     * Subclasses might implement this method
-     *
-     * @type member
-     * @param vJobQueue {Object} TODOC
-     * @return {boolean}
-     */
-    updateChildrenOnJobQueueFlush : function(vJobQueue) {},
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [08] CHILDREN ADD/REMOVE/MOVE HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Add child to current layout. Rarely needed by some layout implementations.
-     *
-     * Subclasses might implement this method
-     *
-     * @type member
-     * @param vChild {rwt.widgets.base.Widget} newly added child
-     * @param vIndex {Integer} index of the child
-     * @return {void}
-     */
-    updateChildrenOnAddChild : function(vChild, vIndex) {},
-
-
-    /**
-     * Remove child from current layout.
-     *  Needed by layouts where the children depend on each other, like flow or box layouts.
-     *
-     *  Subclasses might implement this method
-     *
-     * @type member
-     * @param vChild {rwt.widgets.base.Widget} newly added child
-     * @param vIndex {Integer} index of the child
-     * @return {void}
-     */
-    updateChildrenOnRemoveChild : function(vChild, vIndex) {},
-
-
-    /**
-     * Move child within its parent to a new position.
-     *  Needed by layouts where the children depend on each other, like flow or box layouts.
-     *
-     * Subclasses might implement this method
-     *
-     * @type member
-     * @param vChild {rwt.widgets.base.Widget} newly added child
-     * @param vIndex {Integer} new index of the child
-     * @param vOldIndex {Integer} old index of the child
-     * @return {void}
-     */
-    updateChildrenOnMoveChild : function(vChild, vIndex, vOldIndex) {},
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [09] FLUSH LAYOUT QUEUES OF CHILDREN
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Has full control of the order in which the registered
-     * (or non-registered) children should be layouted.
-     *
-     * @type member
-     * @param vChildrenQueue {Object} TODOC
-     * @return {void}
-     */
-    flushChildrenQueue : function(vChildrenQueue)
-    {
-      var vWidget = this.getWidget();
-
-      for (var vHashCode in vChildrenQueue) {
-        vWidget._layoutChild(vChildrenQueue[vHashCode]);
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [10] LAYOUT CHILD
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Called from rwt.widgets.base.Parent. Its task is to apply the layout
-     * (excluding border and padding) to the child.
-     *
-     * @type member
-     * @param vChild {rwt.widgets.base.Widget} child to layout
-     * @param vJobs {Set} layout changes to perform
-     * @return {void}
-     */
-    layoutChild : function(vChild, vJobs) {},
-
-
-    /**
-     * Apply min-/max-width to the child. Direct usage of stylesheet properties.
-     * This is only possible in modern capable clients (i.e. excluding all current
-     *  versions of Internet Explorer)
-     *
-     * @type member
-     * @param vChild {rwt.widgets.base.Widget} child to layout
-     * @param vJobs {Set} layout changes to perform
-     * @return {void}
-     * @signature function(vChild, vJobs)
-     */
-    layoutChild_sizeLimitX : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : rwt.util.Functions.returnTrue,
-      "default" : function( vChild, vJobs ) {
-        if( vJobs.minWidth ) {
-          if( vChild._computedMinWidthTypeNull ) {
-            vChild._resetRuntimeMinWidth();
-          } else {
-            vChild._renderRuntimeMinWidth( vChild.getMinWidthValue() );
-          }
-        } else if( vJobs.initial && !vChild._computedMinWidthTypeNull ) {
-          vChild._renderRuntimeMinWidth( vChild.getMinWidthValue() );
-        }
-        if( vJobs.maxWidth ) {
-          if( vChild._computedMaxWidthTypeNull ) {
-            vChild._resetRuntimeMaxWidth();
-          } else {
-            vChild._renderRuntimeMaxWidth( vChild.getMaxWidthValue() );
-          }
-        } else if( vJobs.initial && !vChild._computedMaxWidthTypeNull ) {
-          vChild._renderRuntimeMaxWidth( vChild.getMaxWidthValue() );
-        }
-      }
-    }),
-
-
-    /**
-     * Apply min-/max-height to the child. Direct usage of stylesheet properties.
-     * This is only possible in modern capable clients (i.e. excluding all current
-     *  versions of Internet Explorer)
-     *
-     * @type member
-     * @param vChild {rwt.widgets.base.Widget} child to layout
-     * @param vJobs {Set} layout changes to perform
-     * @return {void}
-     * @signature function(vChild, vJobs)
-     */
-    layoutChild_sizeLimitY :  rwt.util.Variant.select( "qx.client", {
-      "mshtml" : rwt.util.Functions.returnTrue,
-
-      "default" : function( vChild, vJobs ) {
-        if( vJobs.minHeight ) {
-          if( vChild._computedMinHeightTypeNull ) {
-            vChild._resetRuntimeMinHeight();
-          } else {
-            vChild._renderRuntimeMinHeight( vChild.getMinHeightValue() );
-          }
-        } else if( vJobs.initial && !vChild._computedMinHeightTypeNull ) {
-          vChild._renderRuntimeMinHeight( vChild.getMinHeightValue() );
-        }
-        if( vJobs.maxHeight ) {
-          if( vChild._computedMaxHeightTypeNull ) {
-            vChild._resetRuntimeMaxHeight();
-          } else {
-            vChild._renderRuntimeMaxHeight( vChild.getMaxHeightValue() );
-          }
-        } else if( vJobs.initial && !vChild._computedMaxHeightTypeNull ) {
-          vChild._renderRuntimeMaxHeight( vChild.getMaxHeightValue() );
-        }
-      }
-    } ),
-
-
-    /**
-     * Apply the X margin values as pure stylesheet equivalent.
-     *
-     * @type member
-     * @param vChild {rwt.widgets.base.Widget} child to layout
-     * @param vJobs {Set} layout changes to perform
-     * @return {void}
-     */
-    layoutChild_marginX : function( vChild, vJobs ) {
-      if( vJobs.marginLeft || vJobs.initial ) {
-        var vValueLeft = vChild.getMarginLeft();
-        if( vValueLeft != null ) {
-          vChild._renderRuntimeMarginLeft( vValueLeft );
-        } else {
-          vChild._resetRuntimeMarginLeft();
-        }
-      }
-      if( vJobs.marginRight || vJobs.initial ) {
-        var vValueRight = vChild.getMarginRight();
-        if( vValueRight != null ) {
-          vChild._renderRuntimeMarginRight( vValueRight );
-        } else {
-          vChild._resetRuntimeMarginRight();
-        }
-      }
-    },
-
-
-    /**
-     * Apply the Y margin values as pure stylesheet equivalent.
-     *
-     * @type member
-     * @param vChild {rwt.widgets.base.Widget} child to layout
-     * @param vJobs {Set} layout changes to perform
-     * @return {void}
-     */
-    layoutChild_marginY : function( vChild, vJobs ) {
-      if( vJobs.marginTop || vJobs.initial ) {
-        var vValueTop = vChild.getMarginTop();
-        if( vValueTop != null ) {
-          vChild._renderRuntimeMarginTop( vValueTop );
-        } else {
-          vChild._resetRuntimeMarginTop();
-        }
-      }
-      if( vJobs.marginBottom || vJobs.initial ) {
-        var vValueBottom = vChild.getMarginBottom();
-        if( vValueBottom != null ) {
-          vChild._renderRuntimeMarginBottom( vValueBottom );
-        } else {
-          vChild._resetRuntimeMarginBottom();
-        }
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vJobs {var} TODOC
-     * @return {var} TODOC
-     */
-    layoutChild_sizeX_essentialWrapper : function(vChild, vJobs) {
-      return vChild._isWidthEssential() ? this.layoutChild_sizeX(vChild, vJobs) : vChild._resetRuntimeWidth();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vJobs {var} TODOC
-     * @return {var} TODOC
-     */
-    layoutChild_sizeY_essentialWrapper : function(vChild, vJobs) {
-      return vChild._isHeightEssential() ? this.layoutChild_sizeY(vChild, vJobs) : vChild._resetRuntimeHeight();
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DEFER
-  *****************************************************************************
-  */
-
-  defer : function(statics, members)
-  {
-    members.computeChildrenNeededWidth = members.computeChildrenNeededWidth_max;
-    members.computeChildrenNeededHeight = members.computeChildrenNeededHeight_max;
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function() {
-    this._disposeFields("_widget");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Helper functions for numbers.
- *
- * The native JavaScript Number is not modified by this class.
- *
- * The additions implemented here may be added directly to the native Number
- * by a setting in {@link qx.lang.Prototypes}. This feature is not enabled by
- * default.
- */
-rwt.qx.Class.define("rwt.util.Numbers",
-{
-  statics :
-  {
-    /**
-     * Check whether the number is in a given range
-     *
-     * @type static
-     * @param nr {Number} the number to check
-     * @param vmin {Integer} lower bound of the range
-     * @param vmax {Integer} upper bound of the range
-     * @return {Boolean} whether the number is >= vmin and <= vmax
-     */
-    isInRange : function(nr, vmin, vmax) {
-      return nr >= vmin && nr <= vmax;
-    },
-
-
-    /**
-     * Check whether the number is between a given range
-     *
-     * @type static
-     * @param nr {Number} the number to check
-     * @param vmin {Integer} lower bound of the range
-     * @param vmax {Integer} upper bound of the range
-     * @return {Boolean} whether the number is > vmin and < vmax
-     */
-    isBetweenRange : function(nr, vmin, vmax) {
-      return nr > vmin && nr < vmax;
-    },
-
-
-    /**
-     * Limit the nuber to a given range
-     *
-     * * If the number is greater than the upper bound, the upper bound is returned
-     * * If the number is smaller than the lower bound, the lower bound is returned
-     * * If the number is in the range, the number is retuned
-     *
-     * @type static
-     * @param nr {Number} the number to limit
-     * @param vmin {Integer} lower bound of the range
-     * @param vmax {Integer} upper bound of the range
-     * @return {Integer} the limited number
-     */
-    limit : function(nr, vmin, vmax)
-    {
-      if (typeof vmax === "number" && nr > vmax) {
-        return vmax;
-      } else if (typeof vmin === "number" && nr < vmin) {
-        return vmin;
-      } else {
-        return nr;
-      }
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright: 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                       and EclipseSource
- *
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define("rwt.widgets.util.CanvasLayoutImpl",
-{
-  extend : rwt.widgets.util.LayoutImpl,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function(vWidget) {
-    this.base(arguments, vWidget);
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD
-    ---------------------------------------------------------------------------
-    */
-
-    /** Compute and return the box width of the given child */
-    /**
-     * Global Structure:
-     *  [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD
-     *  [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD
-     *  [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN
-     *  [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS
-     *  [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT
-     *  [06] UPDATE LAYOUT ON JOB QUEUE FLUSH
-     *  [07] UPDATE CHILDREN ON JOB QUEUE FLUSH
-     *  [08] CHILDREN ADD/REMOVE/MOVE HANDLING
-     *  [09] FLUSH LAYOUT QUEUES OF CHILDREN
-     *  [10] LAYOUT CHILD
-     *
-     *  Inherits from rwt.widgets.util.LayoutImpl:
-     *  [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN
-     *  [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS
-     *  [06] UPDATE LAYOUT ON JOB QUEUE FLUSH
-     *  [07] UPDATE CHILDREN ON JOB QUEUE FLUSH
-     *  [08] CHILDREN ADD/REMOVE/MOVE HANDLING
-     *  [09] FLUSH LAYOUT QUEUES OF CHILDREN
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {var} TODOC
-     */
-    computeChildBoxWidth : function(vChild)
-    {
-      var vValue = null;
-
-      if (vChild._computedLeftTypeNull || vChild._computedRightTypeNull) {
-        vValue = vChild.getWidthValue();
-      } else if (vChild._hasParent) {
-        vValue = this.getWidget().getInnerWidth() - vChild.getLeftValue() - vChild.getRightValue();
-      }
-
-      return vValue !== null ? vValue : vChild._computeBoxWidthFallback();
-    },
-
-
-    /**
-     * Compute and return the box height of the given child
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {var} TODOC
-     */
-    computeChildBoxHeight : function(vChild)
-    {
-      var vValue = null;
-
-      if (vChild._computedTopTypeNull || vChild._computedBottomTypeNull) {
-        vValue = vChild.getHeightValue();
-      } else if (vChild._hasParent) {
-        vValue = this.getWidget().getInnerHeight() - vChild.getTopValue() - vChild.getBottomValue();
-      }
-
-      return vValue !== null ? vValue : vChild._computeBoxWidthFallback();
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Compute and return the needed width of the given child
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {var} TODOC
-     */
-    computeChildNeededWidth : function(vChild)
-    {
-      var vLeft = vChild._computedLeftTypePercent ? null : vChild.getLeftValue();
-      var vRight = vChild._computedRightTypePercent ? null : vChild.getRightValue();
-      var vMinBox = vChild._computedMinWidthTypePercent ? null : vChild.getMinWidthValue();
-      var vMaxBox = vChild._computedMaxWidthTypePercent ? null : vChild.getMaxWidthValue();
-
-      if (vLeft != null && vRight != null) {
-        var vBox = vChild.getPreferredBoxWidth() || 0;
-      } else {
-        var vBox = (vChild._computedWidthTypePercent ? null : vChild.getWidthValue()) || vChild.getPreferredBoxWidth() || 0;
-      }
-
-      return rwt.util.Numbers.limit(vBox, vMinBox, vMaxBox) + vLeft + vRight + vChild.getMarginLeft() + vChild.getMarginRight();
-    },
-
-
-    /**
-     * Compute and return the needed height of the given child
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {var} TODOC
-     */
-    computeChildNeededHeight : function(vChild)
-    {
-      var vTop = vChild._computedTopTypePercent ? null : vChild.getTopValue();
-      var vBottom = vChild._computedBottomTypePercent ? null : vChild.getBottomValue();
-      var vMinBox = vChild._computedMinHeightTypePercent ? null : vChild.getMinHeightValue();
-      var vMaxBox = vChild._computedMaxHeightTypePercent ? null : vChild.getMaxHeightValue();
-
-      if (vTop != null && vBottom != null) {
-        var vBox = vChild.getPreferredBoxHeight() || 0;
-      } else {
-        var vBox = (vChild._computedHeightTypePercent ? null : vChild.getHeightValue()) || vChild.getPreferredBoxHeight() || 0;
-      }
-
-      return rwt.util.Numbers.limit(vBox, vMinBox, vMaxBox) + vTop + vBottom + vChild.getMarginTop() + vChild.getMarginBottom();
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Actions that should be done if the inner width of the widget was changed.
-     *  Normally this includes update to percent values and ranges.
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {var} TODOC
-     */
-    updateChildOnInnerWidthChange : function(vChild)
-    {
-      // this makes sure that both functions get executed before return
-      var vUpdatePercent = vChild._recomputePercentX();
-      var vUpdateRange = vChild._recomputeRangeX();
-
-      return vUpdatePercent || vUpdateRange;
-    },
-
-
-    /**
-     * Actions that should be done if the inner height of the widget was changed.
-     *  Normally this includes update to percent values and ranges.
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {var} TODOC
-     */
-    updateChildOnInnerHeightChange : function(vChild)
-    {
-      // this makes sure that both functions get executed before return
-      var vUpdatePercent = vChild._recomputePercentY();
-      var vUpdateRange = vChild._recomputeRangeY();
-
-      return vUpdatePercent || vUpdateRange;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [10] LAYOUT CHILD
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * This is called from rwt.widgets.base.Widget and  it's task is to apply the layout
-     *  (excluding border and padding) to the child.
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vJobs {var} TODOC
-     * @return {void}
-     */
-    layoutChild : function(vChild, vJobs)
-    {
-      this.layoutChild_sizeX_essentialWrapper(vChild, vJobs);
-      this.layoutChild_sizeY_essentialWrapper(vChild, vJobs);
-
-      this.layoutChild_sizeLimitX(vChild, vJobs);
-      this.layoutChild_sizeLimitY(vChild, vJobs);
-
-      this.layoutChild_locationX(vChild, vJobs);
-      this.layoutChild_locationY(vChild, vJobs);
-
-      this.layoutChild_marginX(vChild, vJobs);
-      this.layoutChild_marginY(vChild, vJobs);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vJobs {var} TODOC
-     * @return {void}
-     * @signature function(vChild, vJobs)
-     */
-    layoutChild_sizeX : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml|newmshtml|opera|webkit" : function(vChild, vJobs)
-      {
-        if (vJobs.initial || vJobs.width || vJobs.minWidth || vJobs.maxWidth || vJobs.left || vJobs.right)
-        {
-          if (vChild._computedMinWidthTypeNull && vChild._computedWidthTypeNull && vChild._computedMaxWidthTypeNull && !(!vChild._computedLeftTypeNull && !vChild._computedRightTypeNull)) {
-            vChild._resetRuntimeWidth();
-          } else {
-            vChild._renderRuntimeWidth(vChild.getBoxWidth());
-          }
-        }
-      },
-
-      "default" : function( vChild, vJobs ) {
-        if( vJobs.initial || vJobs.width ) {
-          if( vChild._computedWidthTypeNull ) {
-            vChild._resetRuntimeWidth();
-          } else  {
-            vChild._renderRuntimeWidth( vChild.getWidthValue() );
-          }
-        }
-      }
-    }),
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vJobs {var} TODOC
-     * @return {void}
-     * @signature function(vChild, vJobs)
-     */
-    layoutChild_sizeY : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml|newmshtml|opera|webkit" : function(vChild, vJobs)
-      {
-        if (vJobs.initial || vJobs.height || vJobs.minHeight || vJobs.maxHeight || vJobs.top || vJobs.bottom)
-        {
-          if (vChild._computedMinHeightTypeNull && vChild._computedHeightTypeNull && vChild._computedMaxHeightTypeNull && !(!vChild._computedTopTypeNull && !vChild._computedBottomTypeNull)) {
-            vChild._resetRuntimeHeight();
-          } else {
-            vChild._renderRuntimeHeight(vChild.getBoxHeight());
-          }
-        }
-      },
-
-      "default" : function( vChild, vJobs ) {
-        if( vJobs.initial || vJobs.height ) {
-          if( vChild._computedHeightTypeNull ) {
-            vChild._resetRuntimeHeight();
-          } else  {
-            vChild._renderRuntimeHeight( vChild.getHeightValue() );
-          }
-        }
-      }
-    }),
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vJobs {var} TODOC
-     * @return {void}
-     */
-    layoutChild_locationX : function( vChild, vJobs ) {
-      var vWidget = this.getWidget();
-      if( vJobs.initial || vJobs.left || vJobs.parentPaddingLeft ) {
-        if( vChild._computedLeftTypeNull ) {
-          if( vChild._computedRightTypeNull && vWidget.getPaddingLeft() > 0 ) {
-            vChild._renderRuntimeLeft( vWidget.getPaddingLeft() );
-          } else {
-            vChild._resetRuntimeLeft();
-          }
-        } else {
-          vChild._renderRuntimeLeft( vChild.getLeftValue() + vWidget.getPaddingLeft() );
-        }
-      }
-      if( vJobs.initial || vJobs.right || vJobs.parentPaddingRight ) {
-        if( vChild._computedRightTypeNull ) {
-          if( vChild._computedLeftTypeNull && vWidget.getPaddingRight() > 0 ) {
-            vChild._renderRuntimeRight( vWidget.getPaddingRight() );
-          } else {
-            vChild._resetRuntimeRight();
-          }
-        } else {
-          vChild._renderRuntimeRight( vChild.getRightValue() + vWidget.getPaddingRight() );
-        }
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vJobs {var} TODOC
-     * @return {void}
-     */
-    layoutChild_locationY : function( vChild, vJobs ) {
-      var vWidget = this.getWidget();
-      if( vJobs.initial || vJobs.top || vJobs.parentPaddingTop ) {
-        if( vChild._computedTopTypeNull ) {
-          if( vChild._computedBottomTypeNull && vWidget.getPaddingTop() > 0 ) {
-            vChild._renderRuntimeTop( vWidget.getPaddingTop() );
-          } else {
-            vChild._resetRuntimeTop();
-          }
-        } else {
-          vChild._renderRuntimeTop( vChild.getTopValue() + vWidget.getPaddingTop() );
-        }
-      }
-      if( vJobs.initial || vJobs.bottom || vJobs.parentPaddingBottom ) {
-        if( vChild._computedBottomTypeNull ) {
-          if( vChild._computedTopTypeNull && vWidget.getPaddingBottom() > 0 ) {
-            vChild._renderRuntimeBottom( vWidget.getPaddingBottom() );
-          } else {
-            vChild._resetRuntimeBottom();
-          }
-        } else {
-          vChild._renderRuntimeBottom( vChild.getBottomValue() + vWidget.getPaddingBottom() );
-        }
-      }
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * This is the basic widget of all qooxdoo applications.
- *
- * rwt.widgets.base.ClientDocument is the parent of all children inside your application. It
- * also handles their resizing and focus navigation.
- *
- * @appearance client-document
- */
-rwt.qx.Class.define("rwt.widgets.base.ClientDocument",
-{
-  type : "singleton",
-  extend : rwt.widgets.base.Parent,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function()
-  {
-    this.base(arguments);
-
-    this._window = window;
-    this._document = window.document;
-
-    // Init element
-    this.setElement(this._document.body);
-    this.getElement().setAttribute( "spellcheck", "false" );
-    // Reset absolute position
-    this._document.body.style.position = "";
-
-    // Cache current size
-    this._cachedInnerWidth = this._document.body.offsetWidth;
-    this._cachedInnerHeight = this._document.body.offsetHeight;
-
-    // Add Resize Handler
-    this.addEventListener("windowresize", this._onwindowresize);
-
-    // Dialog Support
-    this._modalWidgets = [];
-    this._modalNativeWindow = null;
-
-    // Enable as focus root behavior
-    this.activateFocusRoot();
-
-    // Initialize Properties
-    this.initHideFocus();
-    this.initSelectable();
-
-    // Register as current focus root
-    rwt.event.EventHandler.setFocusRoot(this);
-
-    // Gecko-specific settings
-    if( rwt.client.Client.isGecko() ) {
-      // Fix for bug 193703:
-      this.getElement().style.position = "absolute";
-      this.setSelectable( true );
-    }
-
-  },
-
-
-
-  /*
-  *****************************************************************************
-     EVENTS
-  *****************************************************************************
-  */
-
-  events:
-  {
-    /** (Fired by {@link rwt.event.EventHandler}) */
-    "focus"         : "rwt.event.Event",
-
-    /** Fired when the window looses the focus (Fired by {@link rwt.event.EventHandler}) */
-    "windowblur"    : "rwt.event.Event",
-
-    /**  Fired when the window gets the focus (Fired by {@link rwt.event.EventHandler}) */
-    "windowfocus"   : "rwt.event.Event",
-
-    /** Fired when the window has been resized (Fired by {@link rwt.event.EventHandler}) */
-    "windowresize"  : "rwt.event.Event"
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    appearance :
-    {
-      refine : true,
-      init : "client-document"
-    },
-
-    enableElementFocus :
-    {
-      refine : true,
-      init : false
-    },
-
-    enabled :
-    {
-      refine : true,
-      init : true
-    },
-
-    selectable :
-    {
-      refine : true,
-      init : false
-    },
-
-    hideFocus :
-    {
-      refine : true,
-      init : true
-    },
-
-    /**
-     *  Sets the global cursor style
-     *
-     *  The name of the cursor to show when the mouse pointer is over the widget.
-     *  This is any valid CSS2 cursor name defined by W3C.
-     *
-     *  The following values are possible:
-     *  <ul><li>default</li>
-     *  <li>crosshair</li>
-     *  <li>pointer (hand is the ie name and will mapped to pointer in non-ie).</li>
-     *  <li>move</li>
-     *  <li>n-resize</li>
-     *  <li>ne-resize</li>
-     *  <li>e-resize</li>
-     *  <li>se-resize</li>
-     *  <li>s-resize</li>
-     *  <li>sw-resize</li>
-     *  <li>w-resize</li>
-     *  <li>nw-resize</li>
-     *  <li>text</li>
-     *  <li>wait</li>
-     *  <li>help </li>
-     *  <li>url([file]) = self defined cursor, file should be an ANI- or CUR-type</li>
-     *  </ul>
-     */
-    globalCursor :
-    {
-      check : "String",
-      nullable : true,
-      themeable : true,
-      apply : "_applyGlobalCursor",
-      event : "changeGlobalCursor"
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      OVERWRITE WIDGET FUNCTIONS/PROPERTIES
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * @signature function()
-     */
-    _applyParent : rwt.util.Functions.returnTrue,
-
-
-    /**
-     * @signature function()
-     * @return {Object}
-     */
-    getTopLevelWidget : rwt.util.Functions.returnThis,
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getWindowElement : function() {
-      return this._window;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getDocumentElement : function() {
-      return this._document;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {rwt.widgets.base.Parent} TODOC
-     * @signature function()
-     */
-    getParent : rwt.util.Functions.returnNull,
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {rwt.widgets.base.ToolTip} TODOC
-     * @signature function()
-     */
-    getToolTip : rwt.util.Functions.returnNull,
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @signature function()
-     * @return {boolean}
-     */
-    isSeeable : rwt.util.Functions.returnTrue,
-
-
-    _isDisplayable : true,
-    _hasParent : false,
-    _initialLayoutDone : true,
-    _isInDom : true,
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      BLOCKER AND DIALOG SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Returns the blocker widget if already created; otherwise create it first
-     *
-     * @type member
-     * @return {ClientDocumentBlocker} the blocker widget.
-     */
-    _getBlocker : function() {
-      if( !this._blocker ) {
-        // Create blocker instance
-        this._blocker = new rwt.widgets.base.ClientDocumentBlocker();
-        // Add blocker events
-        this._blocker.addEventListener( "mousedown", this.blockHelper, this );
-        this._blocker.addEventListener( "mouseup", this.blockHelper, this );
-        // Add blocker to client document
-        this.add( this._blocker );
-      }
-      return this._blocker;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    blockHelper : function(e)
-    {
-      if (this._modalNativeWindow)
-      {
-        if (!this._modalNativeWindow.isClosed()) {
-          this._modalNativeWindow.focus();
-        }
-        else
-        {
-          this.release(this._modalNativeWindow);
-        }
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vActiveChild {var} TODOC
-     * @return {void}
-     */
-    block : function(vActiveChild)
-    {
-      this._getBlocker().show();
-
-      if (rwt.qx.Class.isDefined("rwt.widgets.base.Window") && vActiveChild instanceof rwt.widgets.base.Window)
-      {
-        this._modalWidgets.push(vActiveChild);
-
-        var vOrigIndex = vActiveChild.getZIndex();
-        this._getBlocker().setZIndex(vOrigIndex);
-        vActiveChild.setZIndex(vOrigIndex + 1);
-      }
-      else if (rwt.qx.Class.isDefined("qx.client.NativeWindow") && vActiveChild instanceof qx.client.NativeWindow)
-      {
-        this._modalNativeWindow = vActiveChild;
-        this._getBlocker().setZIndex(1e7);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vActiveChild {var} TODOC
-     * @return {void}
-     */
-    release : function( vActiveChild ) {
-      if( vActiveChild ) {
-        if(    rwt.qx.Class.isDefined( "qx.client.NativeWindow" )
-            && vActiveChild instanceof qx.client.NativeWindow )
-        {
-          this._modalNativeWindow = null;
-        } else {
-          rwt.util.Arrays.remove( this._modalWidgets, vActiveChild );
-        }
-      }
-      var l = this._modalWidgets.length;
-      if( l === 0 ) {
-        this._getBlocker().hide();
-      } else {
-        var oldActiveChild = this._modalWidgets[ l - 1 ];
-        var o = oldActiveChild.getZIndex();
-        this._getBlocker().setZIndex( o );
-        oldActiveChild.setZIndex( o + 1 );
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      CSS API
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vCssText {var} TODOC
-     * @return {var} TODOC
-     */
-    createStyleElement : function(vCssText) {
-      return rwt.html.StyleSheet.createElement(vCssText);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vSheet {var} TODOC
-     * @param vSelector {var} TODOC
-     * @param vStyle {var} TODOC
-     * @return {var} TODOC
-     */
-    addCssRule : function(vSheet, vSelector, vStyle) {
-      return rwt.html.StyleSheet.addRule(vSheet, vSelector, vStyle);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vSheet {var} TODOC
-     * @param vSelector {var} TODOC
-     * @return {var} TODOC
-     */
-    removeCssRule : function(vSheet, vSelector) {
-      return rwt.html.StyleSheet.removeRule(vSheet, vSelector);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vSheet {var} TODOC
-     * @return {var} TODOC
-     */
-    removeAllCssRules : function(vSheet) {
-      return rwt.html.StyleSheet.removeAllRules(vSheet);
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      GLOBAL CURSOR SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyGlobalCursor : rwt.util.Variant.select("qx.client",
-    {
-      // MSHTML uses special code here. The default code works, too in MSHTML
-      // but is really really slow. To change style sheets or class names
-      // in documents with a deep structure is nearly impossible in MSHTML. It
-      // runs multiple seconds to minutes just for adding a new rule to a global
-      // style sheet. For the highly interactive use cases of this method, this
-      // is not practicable. The alternative implementation directly patches
-      // all DOM elements with a manual cursor setting (to work-around the
-      // inheritance blocking nature of these local values). This solution does
-      // not work as perfect as the style sheet modification in other browsers.
-      // While a global cursor is applied the normal cursor property would overwrite
-      // the forced global cursor value. This site effect was decided to be less
-      // important than the expensive performance issue of the better working code.
-      // See also bug: http://bugzilla.qooxdoo.org/show_bug.cgi?id=487
-      "mshtml" : function(value, old)
-      {
-        if (value == "pointer") {
-          value = "hand";
-        }
-
-        if (old == "pointer") {
-          old = "hand";
-        }
-
-        var elem, current;
-
-        var list = this._cursorElements;
-        if (list)
-        {
-          for (var i=0, l=list.length; i<l; i++)
-          {
-            elem = list[i];
-
-            if (elem.style.cursor == old)
-            {
-              elem.style.cursor = elem._oldCursor;
-              elem._oldCursor = null;
-            }
-          }
-        }
-
-        var all = document.all;
-        var list = this._cursorElements = [];
-
-        if (value != null && value !== "" && value !== "auto" ) {
-          for (var i=0, l=all.length; i<l; i++)
-          {
-            elem = all[i];
-            current = elem.style.cursor;
-
-            if( current != null && current !== "" && current !== "auto" ) {
-              elem._oldCursor = current;
-              elem.style.cursor = value;
-              list.push(elem);
-            }
-          }
-
-          // Also apply to body element
-          document.body.style.cursor = value;
-        }
-        else
-        {
-          // Reset from body element
-          document.body.style.cursor = "";
-        }
-      },
-
-      "default" : function(value, old)
-      {
-        if (!this._globalCursorStyleSheet) {
-          this._globalCursorStyleSheet = this.createStyleElement();
-        }
-
-        this.removeCssRule(this._globalCursorStyleSheet, "*");
-
-        if (value) {
-          this.addCssRule(this._globalCursorStyleSheet, "*", "cursor:" + value + " !important");
-        }
-      }
-    }),
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      WINDOW RESIZE HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    _onwindowresize : function(e) {
-      rwt.widgets.util.PopupManager.getInstance().update();
-      this._recomputeInnerWidth();
-      this._recomputeInnerHeight();
-      rwt.widgets.base.Widget.flushGlobalQueues();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    _computeInnerWidth : function() {
-      return this._document.body.offsetWidth;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    _computeInnerHeight : function() {
-      return this._document.body.offsetHeight;
-    }
-  },
-
-
-  /*
-  *****************************************************************************
-     DEFER
-  *****************************************************************************
-  */
-
-  defer : function()
-  {
-    // CSS fix
-    var boxSizingAttr = rwt.client.Client.getEngineBoxSizingAttributes();
-    var borderBoxCss = boxSizingAttr.join(":border-box;") + ":border-box;";
-    var contentBoxCss = boxSizingAttr.join(":content-box;") + ":content-box;";
-
-    rwt.html.StyleSheet.createElement(
-      "html,body { margin:0;border:0;padding:0; } " +
-      "html { border:0 none; } " +
-      "*{" + borderBoxCss +"} " +
-      "img{" + contentBoxCss + "}"
-    );
-
-    rwt.html.StyleSheet.createElement("html,body{width:100%;height:100%;overflow:hidden;}");
-    rwt.widgets.base.ClientDocument.BOXSIZING = "border-box";
-  },
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function()
-  {
-    this._disposeObjects("_blocker");
-    this._disposeFields("_window", "_document", "_modalWidgets", "_modalNativeWindow", "_globalCursorStyleSheet");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * The Terminator is the base class for all widgets, which don't have child
- * widgets.
- *
- * If used directly it represents an rectangular area, which can be positioned
- * and sized using the layout managers.
- */
-rwt.qx.Class.define("rwt.widgets.base.Terminator",
-{
-  extend : rwt.widgets.base.Widget,
-
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      PADDING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param changes {Map} TODOC
-     * @return {void}
-     */
-    renderPadding : function(changes)
-    {
-      if (changes.paddingLeft) {
-        this._renderRuntimePaddingLeft(this.getPaddingLeft());
-      }
-
-      if (changes.paddingRight) {
-        this._renderRuntimePaddingRight(this.getPaddingRight());
-      }
-
-      if (changes.paddingTop) {
-        this._renderRuntimePaddingTop(this.getPaddingTop());
-      }
-
-      if (changes.paddingBottom) {
-        this._renderRuntimePaddingBottom(this.getPaddingBottom());
-      }
-    },
-
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      CONTENT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    _renderContent : function()
-    {
-      // Small optimization: Only add innerPreferred jobs
-      // if we don't have a static width
-      if (this._computedWidthTypePixel) {
-        this._cachedPreferredInnerWidth = null;
-      } else {
-        this._invalidatePreferredInnerWidth();
-      }
-
-      // Small optimization: Only add innerPreferred jobs
-      // if we don't have a static height
-      if (this._computedHeightTypePixel) {
-        this._cachedPreferredInnerHeight = null;
-      } else {
-        this._invalidatePreferredInnerHeight();
-      }
-
-      // add load job
-      if (this._initialLayoutDone) {
-        this.addToJobQueue("load");
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param changes {var} TODOC
-     * @return {void}
-     */
-    _layoutPost : function(changes)
-    {
-      if (changes.initial || changes.load || changes.width || changes.height) {
-        this._postApply();
-      }
-      this.createDispatchDataEvent( "flush", changes ); // TODO [tb] : use simple event
-    },
-
-    /**
-     * @signature function()
-     */
-    _postApply : rwt.util.Functions.returnTrue,
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      BOX DIMENSION HELPERS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * @return {Integer}
-     */
-    _computeBoxWidthFallback : function() {
-      return this.getPreferredBoxWidth();
-    },
-
-    /**
-     * @return {Integer}
-     */
-    _computeBoxHeightFallback : function() {
-      return this.getPreferredBoxHeight();
-    },
-
-
-    /**
-     * Returns the preferred inner width of the widget. This value is used
-     * by the layout managers to calculate the actual size of the widget.
-     *
-     * @return {Integer} the preffered inner width.
-     * @signature function()
-     */
-    _computePreferredInnerWidth : rwt.util.Functions.returnZero,
-
-    /**
-     * Returns the preferred inner height of the widget. This value is used
-     * by the layout managers to calculate the actual size of the widget.
-     *
-     * @return {Integer} the preffered inner height.
-     * @signature function()
-     */
-    _computePreferredInnerHeight : rwt.util.Functions.returnZero,
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      METHODS TO GIVE THE LAYOUTERS INFORMATIONS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     */
-    _isWidthEssential : function()
-    {
-      if (!this._computedLeftTypeNull && !this._computedRightTypeNull) {
-        return true;
-      }
-
-      if (!this._computedWidthTypeNull && !this._computedWidthTypeAuto) {
-        return true;
-      }
-
-      if (!this._computedMinWidthTypeNull && !this._computedMinWidthTypeAuto) {
-        return true;
-      }
-
-      if (!this._computedMaxWidthTypeNull && !this._computedMaxWidthTypeAuto) {
-        return true;
-      }
-
-      if (this._targetNode) {
-        return true;
-      }
-
-      return false;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     */
-    _isHeightEssential : function()
-    {
-      if (!this._computedTopTypeNull && !this._computedBottomTypeNull) {
-        return true;
-      }
-
-      if (!this._computedHeightTypeNull && !this._computedHeightTypeAuto) {
-        return true;
-      }
-
-      if (!this._computedMinHeightTypeNull && !this._computedMinHeightTypeAuto) {
-        return true;
-      }
-
-      if (!this._computedMaxHeightTypeNull && !this._computedMaxHeightTypeAuto) {
-        return true;
-      }
-
-      if (this._targetNode) {
-        return true;
-      }
-
-      return false;
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * rwt.widgets.base.ClientDocumentBlocker blocks the inputs from the user.
- * This will be used internally to allow better modal dialogs for example.
- *
- * @appearance blocker
- */
-rwt.qx.Class.define("rwt.widgets.base.ClientDocumentBlocker",
-{
-  extend : rwt.widgets.base.Terminator,
-  include : rwt.animation.VisibilityAnimationMixin,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function()
-  {
-    this.base(arguments);
-
-    this.initTop();
-    this.initLeft();
-
-    this.initWidth();
-    this.initHeight();
-
-    this.initZIndex();
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    appearance :
-    {
-      refine : true,
-      init : "client-document-blocker"
-    },
-
-    zIndex :
-    {
-      refine : true,
-      init : 1e8
-    },
-
-    top :
-    {
-      refine : true,
-      init : 0
-    },
-
-    left :
-    {
-      refine : true,
-      init : 0
-    },
-
-    width :
-    {
-      refine : true,
-      init : "100%"
-    },
-
-    height :
-    {
-      refine : true,
-      init : "100%"
-    },
-
-    display :
-    {
-      refine : true,
-      init : false
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    // We must omit that the focus root is changed to the client document
-    // when processing a mouse down event on this widget.
-    getFocusRoot : function() {
-      return null;
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.theme.AppearanceManager", {
-
-  type : "singleton",
-  extend : rwt.util.ObjectManager,
-
-  construct : function() {
-    this.base( arguments );
-    this.__cache = {};
-    this.__stateMap = {};
-    this.__stateMapLength = 1;
-  },
-
-  members : {
-
-    setCurrentTheme : function( appearance ) {
-      this._currentTheme = appearance;
-      this.syncAppearanceTheme();
-    },
-
-    getCurrentTheme : function() {
-      return this._currentTheme;
-    },
-
-    syncAppearanceTheme : function() {
-      if( !this._currentTheme ) {
-        return;
-      }
-      if( this._currentTheme ) {
-        this.__cache[this._currentTheme.name] = {};
-      }
-      if( rwt.runtime.System.getInstance().getUiReady() ) {
-        rwt.widgets.base.ClientDocument.getInstance()._recursiveAppearanceThemeUpdate( this._currentTheme );
-      }
-    },
-
-    styleFrom : function( id, states ) {
-      var theme = this.getCurrentTheme();
-      if( !theme ) {
-        return;
-      }
-      return this.styleFromTheme( theme, id, states );
-    },
-
-    styleFromTheme : function( theme, id, states ) {
-      var entry = theme.appearances[id];
-      if( !entry ) {
-        if( rwt.util.Variant.isSet( "qx.debug", "on" ) ) {
-          throw new Error( "Missing appearance entry: " + id );
-        }
-        return null;
-      }
-
-      // Fast fallback to super entry
-      if( !entry.style ) {
-        if( entry.include ) {
-          return this.styleFromTheme( theme, entry.include, states );
-        } else {
-          return null;
-        }
-      }
-
-      // Creating cache-able ID
-      var map = this.__stateMap;
-      var helper = [id];
-      for( var state in states ) {
-        if( !map[state] ) {
-          map[state] = this.__stateMapLength++;
-        }
-        helper[map[state]] = true;
-      }
-      var unique = helper.join();
-      // Using cache if available
-      var cache = this.__cache[theme.name];
-      if( cache && cache[unique] !== undefined ) {
-        return cache[unique];
-      }
-
-      var result;
-
-      // Otherwise "compile" the appearance
-      // If a include or base is defined, too, we need to merge the entries
-      if( entry.include || entry.base ) {
-        // This process tries to insert the original data first, and
-        // append the new data later, to higher priorise the local
-        // data above the included/inherited data. This is especially needed
-        // for property groups or properties which includences other
-        // properties when modified.
-        var local = entry.style(states);
-
-        // Gather included data
-        var incl;
-        if( entry.include ) {
-          incl = this.styleFromTheme(theme, entry.include, states);
-        }
-
-        // Create new map
-        result = {};
-
-        // Copy base data, but exclude overwritten local and included stuff
-        if( entry.base ) {
-          var base = this.styleFromTheme( entry.base, id, states );
-          if( entry.include ) {
-            for( var key in base ) {
-              if( incl[key] === undefined && local[key] === undefined ) {
-                result[key] = base[key];
-              }
-            }
-          } else {
-            for( var key in base ) {
-              if( local[key] === undefined ) {
-                result[key] = base[key];
-              }
-            }
-          }
-        }
-
-        // Copy include data, but exclude overwritten local stuff
-        if( entry.include ) {
-          for( var key in incl ) {
-            if( local[key] === undefined ) {
-              result[key] = incl[key];
-            }
-          }
-        }
-        // Append local data
-        for( var key in local ) {
-          result[key] = local[key];
-        }
-      } else {
-        result = entry.style( states );
-      }
-      // Cache new entry and return
-      if( cache ) {
-        cache[unique] = result || null;
-      }
-      return result || null;
-    }
-  },
-
-  destruct : function() {
-    this._disposeFields( "__cache", "__stateMap" );
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Methods to convert colors between different color spaces.
- */
-rwt.qx.Class.define("rwt.util.Colors",
-{
-  statics :
-  {
-    /**
-     * Regular expressions for color strings
-     */
-    REGEXP :
-    {
-      hex3 : /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
-      hex6 : /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
-      rgb : /^rgb\(\s*([0-9]{1,3}\.{0,1}[0-9]*)\s*,\s*([0-9]{1,3}\.{0,1}[0-9]*)\s*,\s*([0-9]{1,3}\.{0,1}[0-9]*)\s*\)$/
-    },
-
-
-    /**
-     * CSS3 system color names.
-     */
-    SYSTEM :
-    {
-      activeborder        : true,
-      activecaption       : true,
-      appworkspace        : true,
-      background          : true,
-      buttonface          : true,
-      buttonhighlight     : true,
-      buttonshadow        : true,
-      buttontext          : true,
-      captiontext         : true,
-      graytext            : true,
-      highlight           : true,
-      highlighttext       : true,
-      inactiveborder      : true,
-      inactivecaption     : true,
-      inactivecaptiontext : true,
-      infobackground      : true,
-      infotext            : true,
-      menu                : true,
-      menutext            : true,
-      scrollbar           : true,
-      threeddarkshadow    : true,
-      threedface          : true,
-      threedhighlight     : true,
-      threedlightshadow   : true,
-      threedshadow        : true,
-      window              : true,
-      windowframe         : true,
-      windowtext          : true
-    },
-
-
-    /**
-     * Named colors, only the 16 basic colors plus the following ones:
-     * transparent, grey, magenta, orange and brown
-     */
-    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 ],
-
-      // Additional values
-      transparent : [ -1, -1, -1 ],
-      grey        : [ 128, 128, 128 ], // also define 'grey' as a language variant
-      magenta     : [ 255, 0, 255 ],   // alias for fuchsia
-      orange      : [ 255, 165, 0 ],
-      brown       : [ 165, 42, 42 ]
-    },
-
-
-    /**
-     * Whether the incoming value is a named color.
-     *
-     * @param value {String} the color value to test
-     * @return {Boolean} true if the color is a named color
-     */
-    isNamedColor : function(value) {
-      return this.NAMED[value] !== undefined;
-    },
-
-
-    /**
-     * Whether the incoming value is a system color.
-     *
-     * @param value {String} the color value to test
-     * @return {Boolean} true if the color is a system color
-     */
-    isSystemColor : function(value) {
-      return this.SYSTEM[value] !== undefined;
-    },
-
-    /**
-     * Try to convert a incoming string to an RGB array.
-     * Supports themed, named and system colors, but also RGB strings,
-     * hex3 and hex6 values.
-     *
-     * @type static
-     * @param str {String} any string
-     * @return {Array} returns an array of red, green, blue on a successful transformation
-     * @throws an error if the string could not be parsed
-     */
-    stringToRgb : function(str)
-    {
-      if (this.isNamedColor(str))
-      {
-        return this.NAMED[str];
-      }
-      else if (this.isSystemColor(str))
-      {
-        throw new Error("Could not convert system colors to RGB: " + str);
-      }
-      else if (this.isRgbString(str))
-      {
-        return this.__rgbStringToRgb();
-      }
-      else if (this.isHex3String(str))
-      {
-        return this.__hex3StringToRgb();
-      }
-      else if (this.isHex6String(str))
-      {
-        return this.__hex6StringToRgb();
-      }
-
-      throw new Error("Could not parse color: " + str);
-    },
-
-
-    /**
-     * Try to convert a incoming string to an RGB array.
-     * Support named colors, RGB strings, hex3 and hex6 values.
-     *
-     * @type static
-     * @param str {String} any string
-     * @return {Array} returns an array of red, green, blue on a successful transformation
-     * @throws an error if the string could not be parsed
-     */
-    cssStringToRgb : function(str)
-    {
-      if (this.isNamedColor(str))
-      {
-        return this.NAMED[str];
-      }
-      else if (this.isSystemColor(str))
-      {
-        throw new Error("Could not convert system colors to RGB: " + str);
-      }
-      else if (this.isRgbString(str))
-      {
-        return this.__rgbStringToRgb();
-      }
-      else if (this.isHex3String(str))
-      {
-        return this.__hex3StringToRgb();
-      }
-      else if (this.isHex6String(str))
-      {
-        return this.__hex6StringToRgb();
-      }
-
-      throw new Error("Could not parse color: " + str);
-    },
-
-
-    /**
-     * Try to convert a incoming string to an RGB string, which can be used
-     * for all color properties.
-     * Supports themed, named and system colors, but also RGB strings,
-     * hex3 and hex6 values.
-     *
-     * @type static
-     * @param str {String} any string
-     * @return {String} a RGB string
-     * @throws an error if the string could not be parsed
-     */
-    stringToRgbString : function(str) {
-      return this.rgbToRgbString(this.stringToRgb(str));
-    },
-
-
-    /**
-     * Converts a RGB array to an RGB string
-     *
-     * @type static
-     * @param rgb {Array} an array with red, green and blue
-     * @return {String} a RGB string
-     */
-    rgbToRgbString : function(rgb) {
-      return "rgb(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + ")";
-    },
-
-
-    /**
-     * Converts a RGB array to an hex6 string
-     *
-     * @type static
-     * @param rgb {Array} an array with red, green and blue
-     * @return {String} a hex6 string
-     */
-    rgbToHexString : function(rgb) {
-      return(
-        rwt.util.Strings.pad(rgb[0].toString(16).toLowerCase(), 2) +
-        rwt.util.Strings.pad(rgb[1].toString(16).toLowerCase(), 2) +
-        rwt.util.Strings.pad(rgb[2].toString(16).toLowerCase(), 2)
-      );
-    },
-
-
-    /**
-     * Detects if a string is a valid qooxdoo color
-     *
-     * @type static
-     * @param str {String} any string
-     * @return {Boolean} true when the incoming value is a valid qooxdoo color
-     */
-    isValid : function(str) {
-      return this.isCssString(str);
-    },
-
-
-    /**
-     * Detects if a string is a valid CSS color string
-     *
-     * @type static
-     * @param str {String} any string
-     * @return {Boolean} true when the incoming value is a valid CSS color string
-     */
-    isCssString : function(str) {
-      return this.isSystemColor(str) || this.isNamedColor(str) || this.isHex3String(str) || this.isHex6String(str) || this.isRgbString(str);
-    },
-
-
-    /**
-     * Detects if a string is a valid hex3 string
-     *
-     * @type static
-     * @param str {String} any string
-     * @return {Boolean} true when the incoming value is a valid hex3 string
-     */
-    isHex3String : function(str) {
-      return this.REGEXP.hex3.test(str);
-    },
-
-
-    /**
-     * Detects if a string is a valid hex6 string
-     *
-     * @type static
-     * @param str {String} any string
-     * @return {Boolean} true when the incoming value is a valid hex6 string
-     */
-    isHex6String : function(str) {
-      return this.REGEXP.hex6.test(str);
-    },
-
-
-    /**
-     * Detects if a string is a valid RGB string
-     *
-     * @type static
-     * @param str {String} any string
-     * @return {Boolean} true when the incoming value is a valid RGB string
-     */
-    isRgbString : function(str) {
-      return this.REGEXP.rgb.test(str);
-    },
-
-
-    /**
-     * Converts a regexp object match of a rgb string to an RGB array.
-     *
-     * @type static
-     * @return {Array} an array with red, green, blue
-     */
-    __rgbStringToRgb : function() {
-      var red = parseInt( RegExp.$1, 10 );
-      var green = parseInt( RegExp.$2, 10 );
-      var blue = parseInt( RegExp.$3, 10 );
-      return [red, green, blue];
-    },
-
-
-    /**
-     * Converts a regexp object match of a hex3 string to an RGB array.
-     *
-     * @type static
-     * @return {Array} an array with red, green, blue
-     */
-    __hex3StringToRgb : function()
-    {
-      var red = parseInt(RegExp.$1, 16) * 17;
-      var green = parseInt(RegExp.$2, 16) * 17;
-      var blue = parseInt(RegExp.$3, 16) * 17;
-
-      return [red, green, blue];
-    },
-
-
-    /**
-     * Converts a regexp object match of a hex6 string to an RGB array.
-     *
-     * @type static
-     * @return {Array} an array with red, green, blue
-     */
-    __hex6StringToRgb : function()
-    {
-      var red = (parseInt(RegExp.$1, 16) * 16) + parseInt(RegExp.$2, 16);
-      var green = (parseInt(RegExp.$3, 16) * 16) + parseInt(RegExp.$4, 16);
-      var blue = (parseInt(RegExp.$5, 16) * 16) + parseInt(RegExp.$6, 16);
-
-      return [red, green, blue];
-    },
-
-
-    /**
-     * Converts a hex3 string to an RGB array
-     *
-     * @type static
-     * @param value {String} a hex3 (#xxx) string
-     * @return {Array} an array with red, green, blue
-     */
-    hex3StringToRgb : function(value)
-    {
-      if (this.isHex3String(value)) {
-        return this.__hex3StringToRgb(value);
-      }
-
-      throw new Error("Invalid hex3 value: " + value);
-    },
-
-
-    /**
-     * Converts a hex6 string to an RGB array
-     *
-     * @type static
-     * @param value {String} a hex6 (#xxxxxx) string
-     * @return {Array} an array with red, green, blue
-     */
-    hex6StringToRgb : function(value)
-    {
-      if (this.isHex6String(value)) {
-        return this.__hex6StringToRgb(value);
-      }
-
-      throw new Error("Invalid hex6 value: " + value);
-    },
-
-
-    /**
-     * Converts a hex string to an RGB array
-     *
-     * @type static
-     * @param value {String} a hex3 (#xxx) or hex6 (#xxxxxx) string
-     * @return {Array} an array with red, green, blue
-     */
-    hexStringToRgb : function(value)
-    {
-      if (this.isHex3String(value)) {
-        return this.__hex3StringToRgb(value);
-      }
-
-      if (this.isHex6String(value)) {
-        return this.__hex6StringToRgb(value);
-      }
-
-      throw new Error("Invalid hex value: " + value);
-    }
-
-  }
-
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.html.Border", {
-
-  extend : rwt.qx.Object,
-
-  /**
-   * All arguments can be either a single value, or an array of four values in the order of
-   * [ top, right, bottom, left ]. The contructor does not recognize an array of four identical
-   * values colors as one single value.
-   *
-   * @param width Integer. Multiple values can be given for rounded border but only the
-   *        biggest and zero may be used. Null is allowed.
-   * @param style String, either a browser-recognized border-style, or "complex" or "rounded".
-   *        The last two are not accepted as an array, only as a single string.
-   * @param color String in any browser-recognized color-format. For rounded border only one
-   *        color may be given.
-   * @param colorsOrRadii String/number either innerColors(s) for "complex" or radius/radii
-   *        for "rounded" border. Throws exception if its undefined for those or defiend for others.
-   */
-  construct : function( width, style, color, colorsOrRadii ) {
-    this.base( arguments );
-    this._colors = null;
-    this._widths = null;
-    this._styles = null;
-    this._innerColors = [ null, null, null, null ];
-    this._radii = [ null, null, null, null ];
-    this._singleColor = null;
-    this._singleStyle = null;
-    this._setWidth( width );
-    this._setStyle( style ? style : "none" );
-    this._setColor( color ? color : "" );
-    if( style === "complex" ) {
-      if( colorsOrRadii === undefined ) {
-        throw new Error( "Missing innerColors" );
-      }
-      this._setInnerColor( colorsOrRadii );
-    } else if( style === "rounded" ) {
-      if( colorsOrRadii === undefined || this.getColor() === null ) {
-        throw new Error( "Invalid arguments for border style rounded" );
-      }
-      this._setRadii( colorsOrRadii );
-    } else if( colorsOrRadii !== undefined ) {
-      throw new Error( "colorsOrRadii set for style " + this.getStyle() );
-    }
-  },
-
-  statics : {
-    _EDGEWIDTH : [ "borderTopWidth", "borderRightWidth", "borderBottomWidth", "borderLeftWidth" ],
-    _EDGECOLOR : [ "borderTopColor", "borderRightColor", "borderBottomColor", "borderLeftColor" ],
-    _EDGESTYLE : [ "borderTopStyle", "borderRightStyle", "borderBottomStyle", "borderLeftStyle" ],
-    _EDGEMOZCOLORS : [
-      "MozBorderTopColors",
-      "MozBorderRightColors",
-      "MozBorderBottomColors",
-      "MozBorderLeftColors"
-    ],
-    _BORDERRADII : rwt.util.Variant.select( "qx.client", {
-      "webkit" : [
-        "-webkit-border-top-left-radius",
-        "-webkit-border-top-right-radius",
-        "-webkit-border-bottom-right-radius",
-        "-webkit-border-bottom-left-radius"
-      ],
-      "gecko|newmshtml" : [
-        "borderTopLeftRadius",
-        "borderTopRightRadius",
-        "borderBottomRightRadius",
-        "borderBottomLeftRadius"
-      ],
-      "default" : []
-    } ),
-
-
-    resetWidget : function( widget ) {
-      widget._style.border = "";
-      if( widget._innerStyle ) {
-        widget._innerStyle.border = "";
-      }
-      this._resetRadii( widget );
-      this._resetComplexBorder( widget );
-    },
-
-    _resetRadii : function( widget ) {
-      try {
-        for( var i = 0; i < 4; i++ ) {
-          widget._style[ this._BORDERRADII[ i ] ] = "";
-        }
-      } catch( ex ) {
-        // ignore for browser without radii support
-      }
-    },
-
-    _resetComplexBorder : rwt.util.Variant.select("qx.client", {
-      "gecko" : function( widget ) {
-        var statics = rwt.html.Border;
-        var style = widget._style;
-        for( var i = 0; i < 4; i++ ) {
-          style[ statics._EDGEMOZCOLORS[ i ] ] = "";
-        }
-      },
-      "default" : function( widget ) {
-        var statics = rwt.html.Border;
-        var inner = widget._innerStyle;
-        if( inner ) {
-          for( var i = 0; i < 4; i++ ) {
-            inner[ statics._EDGEWIDTH[ i ] ] = "";
-            inner[ statics._EDGESTYLE[ i ] ] = "";
-            inner[ statics._EDGECOLOR[ i ] ] = "";
-          }
-        }
-      }
-    } )
-
-  },
-
-  members : {
-
-    _setColor : function( value ) {
-      if( typeof value === "string" ) {
-        this._singleColor = value;
-      }
-      this._colors = this._normalizeValue( value );
-    },
-
-    _setWidth : function( value ) {
-      this._widths = this._normalizeValue( value );
-    },
-
-    _setStyle : function( value ) {
-      if( typeof value === "string" ) {
-        this._singleStyle = value;
-        if( value === "complex" || value === "rounded" ) {
-          this._styles = this._normalizeValue( "solid" );
-        } else {
-          this._styles = this._normalizeValue( value );
-        }
-      } else {
-        this._styles = this._normalizeValue( value );
-      }
-    },
-
-    _setInnerColor : function( value ) {
-      this._innerColors = this._normalizeValue( value );
-    },
-
-    _setRadii : function( value ) {
-      this._radii = this._normalizeValue( value );
-    },
-
-    getRadii : function() {
-      return this._radii.concat();
-    },
-
-    getColor : function() {
-      return this._singleColor;
-    },
-
-    getColors : function() {
-      return this._colors.concat();
-    },
-
-    getColorTop : function() {
-      return this._colors[ 0 ];
-    },
-
-    getColorRight : function() {
-      return this._colors[ 1 ];
-    },
-
-    getColorBottom : function() {
-      return this._colors[ 2 ];
-    },
-
-    getColorLeft : function() {
-      return this._colors[ 3 ];
-    },
-
-    getInnerColors : function() {
-      return this._innerColors.concat();
-    },
-
-    getColorInnerTop : function() {
-      return this._innerColors[ 0 ];
-    },
-
-    getColorInnerRight : function() {
-      return this._innerColors[ 1 ];
-    },
-
-    getColorInnerBottom : function() {
-      return this._innerColors[ 2 ];
-    },
-
-    getColorInnerLeft : function() {
-      return this._innerColors[ 3 ];
-    },
-
-    getStyle : function() {
-      return this._singleStyle;
-    },
-
-    getStyles : function() {
-      return this._styles.concat();
-    },
-
-    getStyleTop : function() {
-      return this._styles[ 0 ];
-    },
-
-    getStyleRight : function() {
-      return this._styles[ 1 ];
-    },
-
-    getStyleBottom : function() {
-      return this._styles[ 2 ];
-    },
-
-    getStyleLeft : function() {
-      return this._styles[ 3 ];
-    },
-
-    getWidths : function() {
-      return this._widths.concat();
-    },
-
-    getWidthTop : function() {
-      return this._widths[ 0 ];
-    },
-
-    getWidthRight : function() {
-      return this._widths[ 1 ];
-    },
-
-    getWidthBottom : function() {
-      return this._widths[ 2 ];
-    },
-
-    getWidthLeft : function() {
-      return this._widths[ 3 ];
-    },
-
-    _normalizeValue : function( value ) {
-      var result;
-      if( value instanceof Array ) {
-        result = value;
-      } else {
-        result = [ value, value, value, value ];
-      }
-      return result;
-    },
-
-    renderWidget : function( widget ) {
-      if( this.getStyle() === "complex" ) {
-        this._renderComplexBorder( widget );
-      } else if( this.getStyle() === "rounded" ) {
-        this._renderRoundedBorder( widget );
-      } else {
-        this._renderSimpleBorder( widget );
-      }
-    },
-
-    renderElement : function( element ) {
-      if( this.getStyle() === "complex" || this.getStyle() === "rounded" ) {
-        throw new Error( "Rendering complex or rounded border on elements currently unsupported" );
-      }
-      this._renderSimpleBorderStyle( element.style );
-    },
-
-    _renderSimpleBorder : function( widget ) {
-      rwt.html.Border._resetComplexBorder( widget );
-      rwt.html.Border._resetRadii( widget );
-      this._renderSimpleBorderStyle( widget._style );
-    },
-
-    _renderSimpleBorderStyle : function( style ) {
-      var statics = rwt.html.Border;
-      for( var i = 0; i < 4; i++ ) {
-        style[ statics._EDGEWIDTH[ i ] ] = ( this._widths[ i ] || 0 ) + "px";
-        style[ statics._EDGESTYLE[ i ] ] = this._styles[ i ] || "none";
-        style[ statics._EDGECOLOR[ i ] ] = this._colors[ i ] || "";
-      }
-    },
-
-    _renderComplexBorder : rwt.util.Variant.select( "qx.client", {
-      "gecko" : function( widget ) {
-        var statics = rwt.html.Border;
-        statics._resetRadii( widget );
-        var style = widget._style;
-        for( var i = 0; i < 4; i++ ) {
-          style[ statics._EDGEWIDTH[ i ] ] = ( this._widths[ i ] || 0 ) + "px";
-          style[ statics._EDGECOLOR[ i ] ] = this._colors[ i ] || "";
-          if( this._widths[ i ] === 2 ) {
-            style[ statics._EDGESTYLE[ i ] ] = "solid";
-            style[ statics._EDGEMOZCOLORS[ i ] ] = this._colors[ i ] + " " + this._innerColors[ i ];
-          } else {
-            style[ statics._EDGESTYLE[ i ] ] = this._styles[ i ] || "none";
-            style[ statics._EDGEMOZCOLORS[ i ] ] = "";
-          }
-        }
-      },
-      "default" : function( widget ) {
-        var statics = rwt.html.Border;
-        statics._resetRadii( widget );
-        var outer = widget._style;
-        var inner = widget._innerStyle;
-        for( var i = 0; i < 4; i++ ) {
-          if( this._widths[ i ] === 2 ) {
-            if( !inner ) {
-              widget.prepareEnhancedBorder();
-              inner = widget._innerStyle;
-            }
-            outer[ statics._EDGEWIDTH[ i ] ] = "1px";
-            outer[ statics._EDGESTYLE[ i ] ] = "solid";
-            outer[ statics._EDGECOLOR[ i ] ] = this._colors[ i ] || "";
-            inner[ statics._EDGEWIDTH[ i ] ] = "1px";
-            inner[ statics._EDGESTYLE[ i ] ] = "solid";
-            inner[ statics._EDGECOLOR[ i ] ] = this._innerColors[ i ];
-          } else {
-            outer[ statics._EDGEWIDTH[ i ] ] = ( this._widths[ i ] || 0 ) + "px";
-            outer[ statics._EDGESTYLE[ i ] ] = this._styles[ i ] || "none";
-            outer[ statics._EDGECOLOR[ i ] ] = this._colors[ i ] || "";
-            if( inner ) {
-              inner[ statics._EDGEWIDTH[ i ] ] = "";
-              inner[ statics._EDGESTYLE[ i ] ] = "";
-              inner[ statics._EDGECOLOR[ i ] ] = "";
-            }
-          }
-        }
-      }
-    } ),
-
-    _renderRoundedBorder : function( widget ) {
-      var statics = rwt.html.Border;
-      this._renderSimpleBorder( widget );
-      var style = widget._style;
-      for( var i = 0; i < 4; i++ ) {
-        style[ statics._BORDERRADII[ i ] ] = this._radii[ i ] + "px";
-      }
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * A wrapper for CSS font styles. Fond objects can be aplpied to widgets
- * or DOM elements.
- */
-rwt.qx.Class.define( "rwt.html.Font", {
-
-  extend : rwt.qx.Object,
-
-  /**
-   * @param size {String} The font size (Unit: pixel)
-   * @param family {String[]} A sorted list of font families
-   */
-  construct : function( size, family ) {
-    this.base( arguments );
-    if( size !== undefined ) {
-      this.setSize( size );
-    }
-    if( family !== undefined ) {
-      this.setFamily( family );
-    }
-  },
-
-  statics : {
-
-    _fontPool : {},
-
-    /**
-     * Converts a typical CSS font definition string to an font object
-     *
-     * @type static
-     * @param str {String} the CSS string
-     * @return {rwt.html.Font} the created instance
-     */
-    fromString : function( str ) {
-      var font = new rwt.html.Font();
-      var parts = str.split( /\s+/ );
-      var name = [];
-      for( var i = 0; i < parts.length; i++ ) {
-        var part = parts[ i ];
-        switch( part ) {
-          case "bold":
-            font.setBold( true );
-            break;
-          case "italic":
-            font.setItalic( true );
-            break;
-          case "underline":
-            font.setDecoration( "underline" );
-            break;
-          default:
-            var temp = parseInt( part, 10 );
-            if( temp == part || rwt.util.Strings.contains( part, "px" ) ) {
-              font.setSize(temp);
-            } else {
-              name.push(part);
-            }
-            break;
-        }
-      }
-      if( name.length > 0 ) {
-        font.setFamily( name );
-      }
-      return font;
-    },
-
-    fromArray : function( arr ) {
-      var name = arr[ 0 ];
-      var size = arr[ 1 ];
-      var bold = arr[ 2 ];
-      var italic = arr[ 3 ];
-      var id = name + size + bold + italic;
-      var font = this._fontPool[ id ]; // TODO [tb] : use pool for all static methods
-      if( !font ) {
-        font = new rwt.html.Font( size, name );
-        font.setBold( bold );
-        font.setItalic( italic );
-        this._fontPool[ id ] = font;
-      }
-      return font;
-    },
-
-    /**
-     * Converts a map property definition into a border object.
-     *
-     * @type static
-     * @param config {Map} map of property values
-     * @return {rwt.html.Font} the created instance
-     */
-    fromConfig : function( config ) {
-      var font = new rwt.html.Font();
-      font.set( config );
-      return font;
-    },
-
-    /**
-     * Removes all fond styles from this widget
-     *
-     * @param widget {rwt.widgets.base.Widget} widget to reset
-     */
-    reset : function( widget ) {
-      widget.removeStyleProperty("fontFamily");
-      widget.removeStyleProperty("fontSize");
-      widget.removeStyleProperty("fontWeight");
-      widget.removeStyleProperty("fontStyle");
-      widget.removeStyleProperty("textDecoration");
-    },
-
-    /**
-     * Removes all fond styles from this DOM element
-     *
-     * @param element {Element} DOM element to reset
-     */
-    resetElement : function( element ) {
-      var style = element.style;
-      style.fontFamily = "";
-      style.fontSize = "";
-      style.fontWeight = "";
-      style.fontStyle = "";
-      style.textDecoration = "";
-    },
-
-    /**
-     * Reset a style map by setting the font attributes to empty.
-     *
-     * @param style {Map} The style map
-     * @type static
-     * @return {void}
-     */
-    resetStyle : function( style ) {
-      style.fontFamily = "";
-      style.fontSize = "";
-      style.fontWeight = "";
-      style.fontStyle = "";
-      style.textDecoration = "";
-    }
-  },
-
-  properties : {
-
-    /** The font size (Unit: pixel) */
-    size : {
-      check : "Integer",
-      nullable : true,
-      apply : "_applySize"
-    },
-
-    /** A sorted list of font families */
-    family : {
-      check : "Array",
-      nullable : true,
-      apply : "_applyFamily"
-    },
-
-    /** Whether the font is bold */
-    bold : {
-      check : "Boolean",
-      nullable : true,
-      apply : "_applyBold"
-    },
-
-    /** Whether the font is italic */
-    italic : {
-      check : "Boolean",
-      nullable : true,
-      apply : "_applyItalic"
-    },
-
-    /** The text decoration for this font */
-    decoration : {
-      check : [ "underline", "line-through", "overline" ],
-      nullable : true,
-      apply : "_applyDecoration"
-    }
-  },
-
-  members : {
-    __size : null,
-    __family : null,
-    __bold : null,
-    __italic : null,
-    __decoration : null,
-
-    _applySize : function(value, old) {
-      this.__size = value === null ? null : value + "px";
-    },
-
-    _applyFamily : function( value, old ) {
-      var family = "";
-      for( var i = 0, l = value.length; i < l; i++ ) {
-        if( value[ i ].indexOf( " " ) > 0 ) {
-          family += '"' + value[ i ] + '"';
-        } else {
-          // in FireFox 2 and WebKit fonts like 'serif' or 'sans-serif' must
-          // not be quoted!
-          family += value[ i ];
-        }
-        if( i != l-1 ) {
-          family += ",";
-        }
-      }
-      this.__family = family;
-    },
-
-    _applyBold : function( value, old ) {
-      this.__bold = value === null ? null : value ? "bold" : "normal";
-    },
-
-    _applyItalic : function( value, old ) {
-      this.__italic = value === null ? null : value ? "italic" : "normal";
-    },
-
-    _applyDecoration : function( value, old ) {
-      this.__decoration = value === null ? null : value;
-    },
-
-    /**
-     * Apply the font to the given widget.
-     *
-     * @param widget {rwt.widgets.base.Widget} The widget to apply the font to
-     */
-    render : function( widget ) {
-      widget.setStyleProperty( "fontFamily", this.__family );
-      widget.setStyleProperty( "fontSize", this.__size );
-      widget.setStyleProperty( "fontWeight", this.__bold );
-      widget.setStyleProperty( "fontStyle", this.__italic );
-      widget.setStyleProperty( "textDecoration", this.__decoration );
-    },
-
-    /**
-     * Generate a style map with the current font attributes.
-     *
-     * @param style {Map} The style map
-     * @type member
-     * @return {void}
-     */
-    renderStyle : function( style ) {
-      style.fontFamily = this.__family || "";
-      style.fontSize = this.__size || "";
-      style.fontWeight = this.__bold || "";
-      style.fontStyle =  this.__italic || "";
-      style.textDecoration = this.__decoration || "";
-    },
-
-    /**
-     * Apply the font styles to the given DOM element.
-     *
-     * @param element {Element} The DOM element to apply the font to
-     */
-    renderElement : function( element ) {
-      var style = element.style;
-      style.fontFamily = this.__family || "";
-      style.fontSize = this.__size || "";
-      style.fontWeight = this.__bold || "";
-      style.fontStyle =  this.__italic || "";
-      style.textDecoration = this.__decoration || "";
-    },
-
-    /**
-     * Generate a style string with the current font attributes.
-     *
-     * @type member
-     * @return {String} The generated style string for this font
-     */
-    generateStyle : function() {
-      return ( this.__family ? "font-family:" + this.__family.replace(/\"/g, "'") + ";" : "" ) +
-             ( this.__size ? "font-size:" + this.__size + ";" : "" ) +
-             ( this.__weight ? "font-weight:" + this.__weight + ";" : "" ) +
-             ( this.__style ? "font-style:" + this.__style + ";" : "" ) +
-             ( this.__decoration ? "text-decoration:" + this.__decoration + ";" : "" );
-    },
-
-    toCss : function() {
-      return ( this.getItalic() ? "italic " : "" ) +
-             ( this.getBold() ? "bold " : "" ) +
-             ( this.__size ? this.getSize() + "px " : "" ) +
-             ( this.__family ? this.__family.replace(/\"/g, "'") : "" );
-    }
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Each focus root delegates the focus handling to instances of the FocusHandler.
- */
-rwt.qx.Class.define("rwt.widgets.util.FocusHandler",
-{
-  extend : rwt.qx.Target,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function(widget)
-  {
-    this.base(arguments);
-
-    if (widget != null) {
-      this._attachedWidget = widget;
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics : {
-    mouseFocus : false,
-    blockFocus : false
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      UTILITIES
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getAttachedWidget : function() {
-      return this._attachedWidget;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param container {var} TODOC
-     * @param ev {Event} TODOC
-     * @return {void}
-     */
-    _onkeyevent : function(container, ev)
-    {
-      if (ev.getKeyIdentifier() != "Tab") {
-        return;
-      }
-
-      // Stop all key-events with a TAB keycode
-      ev.stopPropagation();
-      ev.preventDefault();
-
-      rwt.widgets.util.FocusHandler.mouseFocus = false;
-
-      var vCurrent = this.getAttachedWidget().getFocusedChild();
-
-      // Support shift key to reverse widget detection order
-      if (!ev.isShiftPressed()) {
-        var vNext = vCurrent ? this.getWidgetAfter(container, vCurrent) : this.getFirstWidget(container);
-      } else {
-        var vNext = vCurrent ? this.getWidgetBefore(container, vCurrent) : this.getLastWidget(container);
-      }
-
-      // If there was a widget found, focus it
-      if (vNext)
-      {
-        vNext.setFocused(true);
-        vNext._ontabfocus();
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param c1 {var} TODOC
-     * @param c2 {var} TODOC
-     * @return {int | var} TODOC
-     */
-    compareTabOrder : function(c1, c2)
-    {
-      // Sort-Check #1: Tab-Index
-      if (c1 == c2) {
-        return 0;
-      }
-
-      var t1 = c1.getTabIndex();
-      var t2 = c2.getTabIndex();
-
-      // The following are some ideas to handle focus after tabindex.
-      // Sort-Check #2: Top-Position
-      if (t1 != t2) {
-        return t1 - t2;
-      }
-
-      var y1 = rwt.html.Location.getTop(c1.getElement());
-      var y2 = rwt.html.Location.getTop(c2.getElement());
-
-      if (y1 != y2) {
-        return y1 - y2;
-      }
-
-      // Sort-Check #3: Left-Position
-      var x1 = rwt.html.Location.getLeft(c1.getElement());
-      var x2 = rwt.html.Location.getLeft(c2.getElement());
-
-      if (x1 != x2) {
-        return x1 - x2;
-      }
-
-      // Sort-Check #4: zIndex
-      var z1 = c1.getZIndex();
-      var z2 = c2.getZIndex();
-
-      if (z1 != z2) {
-        return z1 - z2;
-      }
-
-      return 0;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      UTILITIES FOR TAB HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param parentContainer {var} TODOC
-     * @return {var} TODOC
-     */
-    getFirstWidget : function(parentContainer) {
-      return this._getFirst(parentContainer, null);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param parentContainer {var} TODOC
-     * @return {var} TODOC
-     */
-    getLastWidget : function(parentContainer) {
-      return this._getLast(parentContainer, null);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param parentContainer {var} TODOC
-     * @param widget {var} TODOC
-     * @return {var | Array} TODOC
-     */
-    getWidgetAfter : function(parentContainer, widget)
-    {
-      if (parentContainer == widget) {
-        return this.getFirstWidget(parentContainer);
-      }
-
-      if (widget.getAnonymous()) {
-        widget = widget.getParent();
-      }
-
-      if (widget == null) {
-        return [];
-      }
-
-      var vAll = [];
-
-      this._getAllAfter(parentContainer, widget, vAll);
-
-      vAll.sort(this.compareTabOrder);
-
-      return vAll.length > 0 ? vAll[0] : this.getFirstWidget(parentContainer);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param parentContainer {var} TODOC
-     * @param widget {var} TODOC
-     * @return {var | Array} TODOC
-     */
-    getWidgetBefore : function(parentContainer, widget)
-    {
-      if (parentContainer == widget) {
-        return this.getLastWidget(parentContainer);
-      }
-
-      if (widget.getAnonymous()) {
-        widget = widget.getParent();
-      }
-
-      if (widget == null) {
-        return [];
-      }
-
-      var vAll = [];
-
-      this._getAllBefore(parentContainer, widget, vAll);
-
-      vAll.sort(this.compareTabOrder);
-
-      var len = vAll.length;
-      return len > 0 ? vAll[len - 1] : this.getLastWidget(parentContainer);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @param parent {var} TODOC
-     * @param widget {var} TODOC
-     * @param arr {var} TODOC
-     */
-    _getAllAfter : function(parent, widget, arr)
-    {
-      var children = parent.getChildren();
-      var child;
-      var len = children.length || 0;
-
-      for (var i=0; i<len; i++)
-      {
-        child = children[i];
-
-        if (child.isDisposed() || !(child instanceof rwt.widgets.base.Parent) && !(child instanceof rwt.widgets.base.Terminator)) {
-          continue;
-        }
-
-        if (child.isFocusable() && child.getTabIndex() > 0 && this.compareTabOrder(widget, child) < 0) {
-          arr.push(children[i]);
-        }
-
-        if (!child.isFocusRoot() && child instanceof rwt.widgets.base.Parent) {
-          this._getAllAfter(child, widget, arr);
-        }
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param parent {var} TODOC
-     * @param widget {var} TODOC
-     * @param arr {var} TODOC
-     * @return {void}
-     */
-    _getAllBefore : function(parent, widget, arr)
-    {
-      var children = parent.getChildren();
-      var child;
-      var len = children.length;
-
-      for (var i=0; i<len; i++)
-      {
-        child = children[i];
-
-        if (!(child instanceof rwt.widgets.base.Parent) && !(child instanceof rwt.widgets.base.Terminator)) {
-          continue;
-        }
-
-        if (child.isFocusable() && child.getTabIndex() > 0 && this.compareTabOrder(widget, child) > 0) {
-          arr.push(child);
-        }
-
-        if (!child.isFocusRoot() && child instanceof rwt.widgets.base.Parent) {
-          this._getAllBefore(child, widget, arr);
-        }
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param parent {var} TODOC
-     * @param firstWidget {var} TODOC
-     * @return {var} TODOC
-     */
-    _getFirst : function(parent, firstWidget)
-    {
-      var children = parent.getChildren();
-      var child;
-      var len = children.length;
-
-      for (var i=0; i<len; i++)
-      {
-        child = children[i];
-
-        if (!(child instanceof rwt.widgets.base.Parent) && !(child instanceof rwt.widgets.base.Terminator)) {
-          continue;
-        }
-
-        if (child.isFocusable() && child.getTabIndex() > 0)
-        {
-          if (firstWidget == null || this.compareTabOrder(child, firstWidget) < 0) {
-            firstWidget = child;
-          }
-        }
-
-        if (!child.isFocusRoot() && child instanceof rwt.widgets.base.Parent) {
-          firstWidget = this._getFirst(child, firstWidget);
-        }
-      }
-
-      return firstWidget;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param parent {var} TODOC
-     * @param lastWidget {var} TODOC
-     * @return {var} TODOC
-     */
-    _getLast : function(parent, lastWidget)
-    {
-      var children = parent.getChildren();
-      var child;
-      var len = children.length;
-
-      for (var i=0; i<len; i++)
-      {
-        child = children[i];
-
-        if (!(child instanceof rwt.widgets.base.Parent) && !(child instanceof rwt.widgets.base.Terminator)) {
-          continue;
-        }
-
-        if (child.isFocusable() && child.getTabIndex() > 0)
-        {
-          if (lastWidget == null || this.compareTabOrder(child, lastWidget) > 0) {
-            lastWidget = child;
-          }
-        }
-
-        if (!child.isFocusRoot() && child instanceof rwt.widgets.base.Parent) {
-          lastWidget = this._getLast(child, lastWidget);
-        }
-      }
-
-      return lastWidget;
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function() {
-    this._disposeFields("_attachedWidget");
-  }
-});
-
-/*******************************************************************************
- * Copyright: 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                       and EclipseSource
- *
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- *
- * This class contains code based on the following work:
- *
- *   * jQuery Dimension Plugin
- *       http://jquery.com/
- *       Version 1.1.3
- *
- *     Copyright:
- *       (c) 2007, Paul Bakaus & Brandon Aaron
- *
- *     License:
- *       MIT: http://www.opensource.org/licenses/mit-license.php
- *
- *     Authors:
- *       Paul Bakaus
- *       Brandon Aaron
- *
- ******************************************************************************/
-
-/**
- * Query the location of an arbitrary DOM element in relation to its top
- * level body element. Works in all major browsers:
- *
- * * Mozilla 1.5 + 2.0
- * * Internet Explorer 6.0 + 7.0 (both standard & quirks mode)
- * * Opera 9.2
- * * Safari 3.0 beta
- */
-rwt.qx.Class.define("rwt.html.Location",
-{
-  statics :
-  {
-    /**
-     * Queries a style property for the given element
-     *
-     * @type static
-     * @param elem {Element} DOM element to query
-     * @param style {String} Style property
-     * @return {String} Value of given style property
-     */
-    __style : function(elem, style) {
-      return rwt.html.Style.get(elem, style, rwt.html.Style.COMPUTED_MODE, false);
-    },
-
-
-    /**
-     * Queries a style property for the given element and parses it to a integer value
-     *
-     * @type static
-     * @param elem {Element} DOM element to query
-     * @param style {String} Style property
-     * @return {Integer} Value of given style property
-     */
-    __num : function(elem, style) {
-      return parseInt(rwt.html.Style.get(elem, style, rwt.html.Style.COMPUTED_MODE, false), 10) || 0;
-    },
-
-
-    /**
-     * Computes the scroll offset of the given element relative to the document
-     * <code>body</code>.
-     *
-     * @type static
-     * @param elem {Element} DOM element to query
-     * @return {Map} Map which contains the <code>left</code> and <code>top</code> scroll offsets
-     */
-    __computeScroll : function(elem)
-    {
-      var left = 0, top = 0;
-
-      // Use faster getBoundingClientRect() if available
-      // Hint: The viewport workaround here only needs to be applied for
-      // MSHTML and gecko clients currently.
-      if (elem.getBoundingClientRect)
-      {
-        // Find window
-        var win = rwt.html.Nodes.getWindow(elem);
-
-        // Reduce by viewport scrolling. getBoundingClientRect returns the
-        // location of the element in relation to the viewport which includes
-        // its scrolling, except in mobile webkit
-        if( !rwt.client.Client.isMobileSafari() ) {
-          left -= rwt.html.Viewport.getScrollLeft(win);
-          top -= rwt.html.Viewport.getScrollTop(win);
-        }
-      }
-      else
-      {
-        // Find body element
-        var body = rwt.html.Nodes.getDocument(elem).body;
-
-        // Only the parents are influencing the scroll position
-        elem = elem.parentNode;
-
-        // Get scroll offsets
-        // stop at the body => the body scroll position is irrelevant
-        while (elem && elem != body)
-        {
-          left += elem.scrollLeft;
-          top += elem.scrollTop;
-
-          // One level up (children hierarchy)
-          elem = elem.parentNode;
-        }
-      }
-
-      return {
-        left : Math.ceil( left ),
-        top : Math.ceil( top )
-      };
-    },
-
-
-    /**
-     * Computes the offset of the given element relative to the document
-     * <code>body</code>.
-     *
-     * @type static
-     * @param elem {Element} DOM element to query
-     * @return {Map} Map which contains the <code>left</code> and <code>top</code> offsets
-     */
-    __computeBody : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function(elem)
-      {
-        // Find body element
-        var doc = rwt.html.Nodes.getDocument(elem);
-        var body = doc.body;
-
-        // Start with the offset
-        var left = body.offsetLeft;
-        var top = body.offsetTop;
-
-        // Substract the body border
-        left -= this.__num(body, "borderLeftWidth");
-        top -= this.__num(body, "borderTopWidth");
-
-        // Add the margin when running in standard mode
-        if (doc.compatMode === "CSS1Compat")
-        {
-          left += this.__num(body, "marginLeft");
-          top += this.__num(body, "marginTop");
-        }
-
-        return {
-          left : Math.ceil( left ),
-          top : Math.ceil( top )
-        };
-      },
-
-      "webkit" : function(elem)
-      {
-        // Find body element
-        var doc = rwt.html.Nodes.getDocument(elem);
-        var body = doc.body;
-
-        // Start with the offset
-        var left = body.offsetLeft;
-        var top = body.offsetTop;
-
-        // Correct substracted border
-        left += this.__num(body, "borderLeftWidth");
-        top += this.__num(body, "borderTopWidth");
-
-        // Add the margin when running in standard mode
-        if (doc.compatMode === "CSS1Compat")
-        {
-          left += this.__num(body, "marginLeft");
-          top += this.__num(body, "marginTop");
-        }
-
-        return {
-          left : Math.ceil( left ),
-          top : Math.ceil( top )
-        };
-      },
-
-      "gecko" : function(elem)
-      {
-        // Find body element
-        var body = rwt.html.Nodes.getDocument(elem).body;
-
-        // Start with the offset
-        var left = body.offsetLeft;
-        var top = body.offsetTop;
-
-        // Correct substracted border (only in content-box mode)
-        if (rwt.widgets.base.ClientDocument.BOXSIZING !== "border-box")
-        {
-          left += this.__num(body, "borderLeftWidth");
-          top += this.__num(body, "borderTopWidth");
-
-          // For some unknown reason we must add the border two times
-          // when there is no absolute positioned element in the DOM tree
-
-          // This is not neededd if the offset is computed using
-          // <code>getBoundingClientRect</code>
-          if (!elem.getBoundingClientRect)
-          {
-            var hasAbs;
-
-            while (elem)
-            {
-              if (this.__style(elem, "position") === "absolute" || this.__style(elem, "position") === "fixed")
-              {
-                hasAbs = true;
-                break;
-              }
-
-              elem = elem.offsetParent;
-            }
-
-            if (!hasAbs)
-            {
-              left += this.__num(body, "borderLeftWidth");
-              top += this.__num(body, "borderTopWidth");
-            }
-          }
-        }
-
-        return {
-          left : Math.ceil( left ),
-          top : Math.ceil( top )
-        };
-      },
-
-
-      // At the moment only correctly supported by Opera
-      "default" : function(elem)
-      {
-        // Find body element
-        var body = rwt.html.Nodes.getDocument(elem).body;
-
-        // Start with the offset
-        var left = body.offsetLeft;
-        var top = body.offsetTop;
-
-        return {
-          left : Math.ceil( left ),
-          top : Math.ceil( top )
-        };
-      }
-    }),
-
-
-    /**
-     * Computes the sum of all offsets of the given element node.
-     *
-     * Traditionally this is a loop which goes up the whole parent tree
-     * and sums up all found offsets.
-     *
-     * But both <code>mshtml</code> and <code>gecko >= 1.9</code> support
-     * <code>getBoundingClientRect</code> which allows a
-     * much faster access to the offset position.
-     *
-     * Please note: When gecko 1.9 does not use the <code>getBoundingClientRect</code>
-     * implementation, and therefor use the tranditional offset calculation
-     * the gecko 1.9 fix in <code>__computeBody</code> must not be applied.
-     *
-     * @type static
-     * @signature function(elem)
-     * @param elem {Element} DOM element to query
-     * @return {Map} Map which contains the <code>left</code> and <code>top</code> offsets
-     */
-    __computeOffset : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml|newmshtml|webkit|opera" : function(elem)
-      {
-        var doc = rwt.html.Nodes.getDocument(elem);
-
-        // Use faster getBoundingClientRect() if available
-        // Note: This is not yet supported by Webkit.
-        if (elem.getBoundingClientRect)
-        {
-          var rect = elem.getBoundingClientRect();
-
-          var left = rect.left;
-          var top = rect.top;
-        }
-        else
-        {
-          // Offset of the incoming element
-          var left = elem.offsetLeft;
-          var top = elem.offsetTop;
-
-          // Start with the first offset parent
-          elem = elem.offsetParent;
-
-          // Stop at the body
-          var body = doc.body;
-
-          // Border correction is only needed for each parent
-          // not for the incoming element itself
-          while (elem && elem != body)
-          {
-            // Add node offsets
-            left += elem.offsetLeft;
-            top += elem.offsetTop;
-
-            // Fix missing border
-            left += this.__num(elem, "borderLeftWidth");
-            top += this.__num(elem, "borderTopWidth");
-
-            // One level up (offset hierarchy)
-            elem = elem.offsetParent;
-          }
-        }
-
-        return {
-          left : Math.ceil( left ),
-          top : Math.ceil( top )
-        };
-      },
-
-      "gecko" : function(elem)
-      {
-        // Use faster getBoundingClientRect() if available (gecko >= 1.9)
-        if (elem.getBoundingClientRect)
-        {
-          var rect = elem.getBoundingClientRect();
-
-          // Firefox 3.0 alpha 6 (gecko 1.9) returns floating point numbers
-          // use Math.round() to round them to style compatible numbers
-          // MSHTML returns integer numbers, maybe gecko will fix this in
-          // the future, too
-          var left = Math.round(rect.left);
-          var top = Math.round(rect.top);
-        }
-        else
-        {
-          var left = 0;
-          var top = 0;
-
-          // Stop at the body
-          var body = rwt.html.Nodes.getDocument(elem).body;
-          var box = rwt.widgets.base.ClientDocument.BOXSIZING;
-
-          if( box !== "border-box" ) {
-            left -= this.__num(elem, "borderLeftWidth");
-            top -= this.__num(elem, "borderTopWidth");
-          }
-
-          while (elem && elem !== body)
-          {
-            // Add node offsets
-            left += elem.offsetLeft;
-            top += elem.offsetTop;
-
-            // Mozilla does not add the borders to the offset
-            // when using box-sizing=content-box
-            if( box !== "border-box" ) {
-              left += this.__num(elem, "borderLeftWidth");
-              top += this.__num(elem, "borderTopWidth");
-            }
-
-            // Mozilla does not add the border for a parent that has
-            // overflow set to anything but visible
-            if (elem.parentNode && this.__style(elem.parentNode, "overflow") != "visible")
-            {
-              left += this.__num(elem.parentNode, "borderLeftWidth");
-              top += this.__num(elem.parentNode, "borderTopWidth");
-            }
-
-            // One level up (offset hierarchy)
-            elem = elem.offsetParent;
-          }
-        }
-
-        return {
-          left : Math.ceil( left ),
-          top : Math.ceil( top )
-        };
-      },
-
-      // At the moment only correctly supported by Opera
-      "default" : function(elem)
-      {
-        var left = 0;
-        var top = 0;
-
-        // Stop at the body
-        var body = rwt.html.Nodes.getDocument(elem).body;
-
-        // Add all offsets of parent hierarchy, do not include
-        // body element.
-        while (elem && elem !== body)
-        {
-          // Add node offsets
-          left += elem.offsetLeft;
-          top += elem.offsetTop;
-
-          // One level up (offset hierarchy)
-          elem = elem.offsetParent;
-        }
-
-        return {
-          left : Math.ceil( left ),
-          top : Math.ceil( top )
-        };
-      }
-    }),
-
-
-    /**
-     * Computes the location of the given element in context of
-     * the document dimensions.
-     *
-     * Supported modes:
-     *
-     * * <code>margin</code>: Calculate from the margin box of the element (bigger than the visual appearance: including margins of given element)
-     * * <code>box</code>: Calculates the offset box of the element (default, uses the same size as visible)
-     * * <code>border</code>: Calculate the border box (useful to align to border edges of two elements).
-     * * <code>scroll</code>: Calculate the scroll box (relevant for absolute positioned content).
-     * * <code>padding</code>: Calculate the padding box (relevant for static/relative positioned content).
-     *
-     * @type static
-     * @param elem {Element} DOM element to query
-     * @param mode {String} A supported option. See comment above.
-     * @return {Map} Returns a map with <code>left</code>, <code>top</code>,
-     *   <code>right</code> and <code>bottom</code> which contains the distance
-     *   of the element relative to the document.
-     */
-    get : function(elem, mode)
-    {
-      var body = this.__computeBody(elem);
-
-      if (elem.tagName == "BODY")
-      {
-        var left = body.left;
-        var top = body.top;
-      }
-      else
-      {
-        var offset = this.__computeOffset(elem);
-        var scroll = this.__computeScroll(elem);
-
-        var left = offset.left + body.left - scroll.left;
-        var top = offset.top + body.top - scroll.top;
-      }
-
-      var right = left + elem.offsetWidth;
-      var bottom = top + elem.offsetHeight;
-
-      if (mode)
-      {
-        // In this modes we want the size as seen from a child what means that we want the full width/height
-        // which may be higher than the outer width/height when the element has scrollbars.
-        if (mode == "padding" || mode == "scroll")
-        {
-          var overX = rwt.html.Overflow.getX(elem);
-          if (overX == "scroll" || overX == "auto") {
-            right += elem.scrollWidth - elem.offsetWidth + this.__num(elem, "borderLeftWidth") + this.__num(elem, "borderRightWidth");
-          }
-
-          var overY = rwt.html.Overflow.getY(elem);
-          if (overY == "scroll" || overY == "auto") {
-            bottom += elem.scrollHeight - elem.offsetHeight + this.__num(elem, "borderTopWidth") + this.__num(elem, "borderBottomWidth");
-          }
-        }
-
-        if( mode === "padding" ) {
-          left += this.__num(elem, "paddingLeft");
-          top += this.__num(elem, "paddingTop");
-          right -= this.__num(elem, "paddingRight");
-          bottom -= this.__num(elem, "paddingBottom");
-        }
-        if( mode === "padding" || mode === "scroll" ) {
-          left -= elem.scrollLeft;
-          top -= elem.scrollTop;
-          right -= elem.scrollLeft;
-          bottom -= elem.scrollTop;
-        }
-        if( mode === "padding" || mode === "scroll" || mode === "border" ) {
-          left += this.__num(elem, "borderLeftWidth");
-          top += this.__num(elem, "borderTopWidth");
-          right -= this.__num(elem, "borderRightWidth");
-          bottom -= this.__num(elem, "borderBottomWidth");
-        }
-        if( mode === "margin" ) {
-          left -= this.__num(elem, "marginLeft");
-          top -= this.__num(elem, "marginTop");
-          right += this.__num(elem, "marginRight");
-          bottom += this.__num(elem, "marginBottom");
-        }
-      }
-
-      return {
-        left : left,
-        top : top,
-        right : right,
-        bottom : bottom
-      };
-    },
-
-
-    /**
-     * Computes the location of the given element in context of
-     * the document dimensions. For supported modes please
-     * have a look at the {@link rwt.html.Location#get} method.
-     *
-     * @type static
-     * @param elem {Element} DOM element to query
-     * @param mode {String} A supported option. See comment above.
-     * @return {Integer} The left distance
-     *   of the element relative to the document.
-     */
-    getLeft : function(elem, mode) {
-      return this.get(elem, mode).left;
-    },
-
-
-    /**
-     * Computes the location of the given element in context of
-     * the document dimensions.For supported modes please
-     * have a look at the {@link rwt.html.Location#get} method.
-     *
-     * @type static
-     * @param elem {Element} DOM element to query
-     * @param mode {String} A supported option. See comment above.
-     * @return {Integer} The top distance
-     *   of the element relative to the document.
-     */
-    getTop : function(elem, mode) {
-      return this.get(elem, mode).top;
-    },
-
-
-    /**
-     * Computes the location of the given element in context of
-     * the document dimenions.For supported modes please
-     * have a look at the {@link rwt.html.Location#get} method.
-     *
-     * @type static
-     * @param elem {Element} DOM element to query
-     * @param mode {String} A supported option. See comment above.
-     * @return {Integer} The right distance
-     *   of the element relative to the document.
-     */
-    getRight : function(elem, mode) {
-      return this.get(elem, mode).right;
-    },
-
-
-    /**
-     * Computes the location of the given element in context of
-     * the document dimenions.For supported modes please
-     * have a look at the {@link rwt.html.Location#get} method.
-     *
-     * @type static
-     * @param elem {Element} DOM element to query
-     * @param mode {String} A supported option. See comment above.
-     * @return {Integer} The bottom distance
-     *   of the element relative to the document.
-     */
-    getBottom : function(elem, mode) {
-      return this.get(elem, mode).bottom;
-    },
-
-
-    /**
-     * Returns the distance between two DOM elements. For supported modes please
-     * have a look at the {@link rwt.html.Location#get} method.
-     *
-     * @type static
-     * @param elem1 {Element} First element
-     * @param elem2 {Element} Second element
-     * @param mode1 {String?null} Mode for first element
-     * @param mode2 {String?null} Mode for second element
-     * @return {Map} Returns a map with <code>left</code> and <code>top</code>
-     *   which contains the distance of the elements from each other.
-     */
-    getRelative : function(elem1, elem2, mode1, mode2)
-    {
-      var loc1 = this.get(elem1, mode1);
-      var loc2 = this.get(elem2, mode2);
-
-      return {
-        left : loc1.left - loc2.left,
-        top : loc1.top - loc2.top,
-        right : loc1.right - loc2.right,
-        bottom : loc1.bottom - loc2.bottom
-      };
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright: 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                       and EclipseSource
- *
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- *
- *   This class contains code based on the following work:
- *
- *   * Prototype JS
- *     http://www.prototypejs.org/
- *     Version 1.5
- *
- *     Copyright:
- *       (c) 2006-2007, Prototype Core Team
- *
- *     License:
- *       MIT: http://www.opensource.org/licenses/mit-license.php
- *
- *     Authors:
- *       * Prototype Core Team
- *
- ******************************************************************************/
-
-/**
- * Style querying and modification of HTML elements.
- *
- * Automatically normalizes cross-browser differences. Optimized for
- * performance.
- */
-rwt.qx.Class.define( "rwt.html.Style", {
-
-  statics : {
-
-    /** Internal map of style property convertions */
-    __hints : {
-      // Style property name correction
-      names : {
-        "float" : rwt.client.Client.isMshtml() ? "styleFloat" : "cssFloat",
-        "boxSizing" : rwt.client.Client.isGecko() ? "mozBoxSizing" : "boxSizing"
-      },
-
-      // Mshtml has propertiery pixel* properties for locations and dimensions
-      // which return the pixel value. Used by getComputed() in mshtml variant.
-      mshtmlPixel : {
-        width : "pixelWidth",
-        height : "pixelHeight",
-        left : "pixelLeft",
-        right : "pixelRight",
-        top : "pixelTop",
-        bottom : "pixelBottom"
-      }
-
-    },
-
-    BROWSER_PREFIX : rwt.util.Variant.select( "qx.client", {
-      "gecko" : "-moz-",
-      "webkit" : "-webkit-",
-      "default" : ""
-    } ),
-
-    /*
-    ---------------------------------------------------------------------------
-      STYLE ATTRIBUTE SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    /** {Integer} Computed value of a style property. Compared to the cascaded style,
-     * this one also interprets the values e.g. translates <code>em</code> units to
-     * <code>px</code>.
-     */
-    COMPUTED_MODE : 1,
-
-
-    /** {Integer} Cascaded value of a style property. */
-    CASCADED_MODE : 2,
-
-
-    /** {Integer} Local value of a style property. Ignores inheritance cascade. Does not interpret values. */
-    LOCAL_MODE : 3,
-
-    /**
-     * Gets the value of a style property.
-     *
-     * *Computed*
-     *
-     * Returns the computed value of a style property. Compared to the cascaded style,
-     * this one also interprets the values e.g. translates <code>em</code> units to
-     * <code>px</code>.
-     *
-     * *Cascaded*
-     *
-     * Returns the cascaded value of a style property.
-     *
-     * *Local*
-     *
-     * Ignores inheritance cascade. Does not interpret values.
-     *
-     * @type static
-     * @signature function(element, name, mode, smart)
-     * @param element {Element} The DOM element to modify
-     * @param name {String} Name of the style attribute (js variant e.g. marginTop, wordSpacing)
-     * @param mode {Number} Choose one of the modes {@link #COMPUTED_MODE}, {@link #CASCADED_MODE},
-     *   {@link #LOCAL_MODE}. The computed mode is the default one.
-     * @param smart {Boolean?true} Whether the implementation should automatically use
-     *    special implementations for some properties
-     * @return {var} The value of the property
-     */
-    get : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function(element, name, mode, smart)
-      {
-        var hints = this.__hints;
-
-        // normalize name
-        name = hints.names[name] || name;
-
-        // switch to right mode
-        switch(mode)
-        {
-          case this.LOCAL_MODE:
-            return element.style[name] || "";
-
-          case this.CASCADED_MODE:
-            return element.currentStyle[name];
-
-          default:
-            // Read cascaded style
-            var currentStyle = element.currentStyle[name];
-
-            // Pixel values are always OK
-            if (/^-?[\.\d]+(px)?$/i.test(currentStyle)) {
-              return currentStyle;
-            }
-
-            // Try to convert non-pixel values
-            var pixel = hints.mshtmlPixel[name];
-            if (pixel)
-            {
-              // Backup local and runtime style
-              var localStyle = element.style[name];
-
-              // Overwrite local value with cascaded value
-              // This is needed to have the pixel value setupped
-              element.style[name] = currentStyle || 0;
-
-              // Read pixel value and add "px"
-              var value = element.style[pixel] + "px";
-
-              // Recover old local value
-              element.style[name] = localStyle;
-
-              // Return value
-              return value;
-            }
-
-            // Non-Pixel values may be problematic
-            if (/^-?[\.\d]+(em|pt|%)?$/i.test(currentStyle)) {
-              throw new Error("Untranslated computed property value: " + name + ". Only pixel values work well across different clients.");
-            }
-
-            // Just the current style
-            return currentStyle;
-        }
-      },
-
-      "default" : function(element, name, mode, smart)
-      {
-        var hints = this.__hints;
-
-        // normalize name
-        name = hints.names[name] || name;
-
-        // switch to right mode
-        switch(mode)
-        {
-          case this.LOCAL_MODE:
-            return element.style[name];
-
-          case this.CASCADED_MODE:
-            // Currently only supported by Opera and Internet Explorer
-            if (element.currentStyle) {
-              return element.currentStyle[name];
-            }
-
-            throw new Error("Cascaded styles are not supported in this browser!");
-
-          // Support for the DOM2 getComputedStyle method
-          //
-          // Safari >= 3 & Gecko > 1.4 expose all properties to the returned
-          // CSSStyleDeclaration object. In older browsers the function
-          // "getPropertyValue" is needed to access the values.
-          //
-          // On a computed style object all properties are read-only which is
-          // identical to the behavior of MSHTML's "currentStyle".
-          default:
-            // Opera, Mozilla and Safari 3+ also have a global getComputedStyle which is identical
-            // to the one found under document.defaultView.
-
-            // The problem with this is however that this does not work correctly
-            // when working with frames and access an element of another frame.
-            // Then we must use the <code>getComputedStyle</code> of the document
-            // where the element is defined.
-            var doc = rwt.html.Nodes.getDocument(element);
-            var computed = doc.defaultView.getComputedStyle(element, null);
-
-            // All relevant browsers expose the configured style properties to
-            // the CSSStyleDeclaration objects
-            return computed ? computed[name] : null;
-        }
-      }
-    }),
-
-
-    /**
-     * Get the computed (CSS) style property of a given DOM element
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @param propertyName {String} the name of the style property. e.g. "color", "border", ...
-     * @return {String} the (CSS) style property
-     * @signature function(vElement, propertyName)
-     */
-    getStyleProperty : rwt.util.Objects.select((document.defaultView && document.defaultView.getComputedStyle) ? "hasComputed" : "noComputed",
-    {
-      "hasComputed" : function(el, prop)
-      {
-        try {
-          return el.ownerDocument.defaultView.getComputedStyle(el, "")[prop];
-        } catch(ex) {
-          throw new Error("Could not evaluate computed style: " + el + "[" + prop + "]: " + ex);
-        }
-      },
-
-      "noComputed" : rwt.util.Variant.select("qx.client",
-      {
-        "mshtml" : function(el, prop)
-        {
-          try {
-            return el.currentStyle[prop];
-          } catch(ex) {
-            throw new Error("Could not evaluate computed style: " + el + "[" + prop + "]: " + ex);
-          }
-        },
-
-        "default" : function(el, prop)
-        {
-          try {
-            return el.style[prop];
-          } catch(ex) {
-            throw new Error("Could not evaluate computed style: " + el + "[" + prop + "]");
-          }
-        }
-      })
-    }),
-
-
-    /**
-     * Get a (CSS) style property of a given DOM element and interpret the property as integer value
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @param propertyName {String} the name of the style property. e.g. "paddingTop", "marginLeft", ...
-     * @return {Integer} the (CSS) style property converted to an integer value
-     */
-    getStyleSize : function(vElement, propertyName) {
-      return parseInt( rwt.html.Style.getStyleProperty( vElement, propertyName ), 10 ) || 0;
-    },
-
-
-    /**
-     * Get the element's left margin.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's left margin size
-     */
-    getMarginLeft : function(vElement) {
-      return rwt.html.Style.getStyleSize(vElement, "marginLeft");
-    },
-
-
-    /**
-     * Get the element's top margin.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's top margin size
-     */
-    getMarginTop : function(vElement) {
-      return rwt.html.Style.getStyleSize(vElement, "marginTop");
-    },
-
-
-    /**
-     * Get the element's right margin.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's right margin size
-     */
-    getMarginRight : function(vElement) {
-      return rwt.html.Style.getStyleSize(vElement, "marginRight");
-    },
-
-
-    /**
-     * Get the element's bottom margin.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's bottom margin size
-     */
-    getMarginBottom : function(vElement) {
-      return rwt.html.Style.getStyleSize(vElement, "marginBottom");
-    },
-
-
-    /**
-     * Get the element's left padding.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's left padding size
-     */
-    getPaddingLeft : function(vElement) {
-      return rwt.html.Style.getStyleSize(vElement, "paddingLeft");
-    },
-
-
-    /**
-     * Get the element's top padding.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's top padding size
-     */
-    getPaddingTop : function(vElement) {
-      return rwt.html.Style.getStyleSize(vElement, "paddingTop");
-    },
-
-
-    /**
-     * Get the element's right padding.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's right padding size
-     */
-    getPaddingRight : function(vElement) {
-      return rwt.html.Style.getStyleSize(vElement, "paddingRight");
-    },
-
-
-    /**
-     * Get the element's bottom padding.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's bottom padding size
-     */
-    getPaddingBottom : function(vElement) {
-      return rwt.html.Style.getStyleSize(vElement, "paddingBottom");
-    },
-
-
-    /**
-     * Get the element's left border width.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's left border width
-     */
-    getBorderLeft : function(vElement) {
-      return rwt.html.Style.getStyleProperty(vElement, "borderLeftStyle") == "none" ? 0 : rwt.html.Style.getStyleSize(vElement, "borderLeftWidth");
-    },
-
-
-    /**
-     * Get the element's top border width.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's top border width
-     */
-    getBorderTop : function(vElement) {
-      return rwt.html.Style.getStyleProperty(vElement, "borderTopStyle") == "none" ? 0 : rwt.html.Style.getStyleSize(vElement, "borderTopWidth");
-    },
-
-
-    /**
-     * Get the element's right border width.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's right border width
-     */
-    getBorderRight : function(vElement) {
-      return rwt.html.Style.getStyleProperty(vElement, "borderRightStyle") == "none" ? 0 : rwt.html.Style.getStyleSize(vElement, "borderRightWidth");
-    },
-
-
-    /**
-     * Get the element's bottom border width.
-     *
-     * @type static
-     * @param vElement {Element} the DOM element
-     * @return {Integer} the element's bottom border width
-     */
-    getBorderBottom : function(vElement) {
-      return rwt.html.Style.getStyleProperty(vElement, "borderBottomStyle") == "none" ? 0 : rwt.html.Style.getStyleSize(vElement, "borderBottomWidth");
-    },
-
-    // TODO [tb] : Without IE6-support the browser-switch and opacity parameter can be removed
-    setBackgroundImage : ( function() {
-      var result;
-      // For IE6 without transparency we need to use CssFilter for PNG opacity to work:
-      if( rwt.client.Client.isMshtml() && rwt.client.Client.getVersion() < 7 ) {
-        result = function( target, value, opacity ) {
-          if( opacity != null && opacity < 1 ) {
-            this.removeCssFilter( target );
-            this._setCssBackgroundImage( target, value );
-            this.setOpacity( target, opacity );
-          } else {
-            this._setCssBackgroundImage( target, null );
-            // NOTE: This overwrites opacity for this node:
-            this._setCssFilterImage( target, value );
-          }
-        };
-      } else {
-        result = function(  target, value, opacity ) {
-          this._setCssBackgroundImage( target, value );
-          if( opacity != null ) {
-            this.setOpacity( target, opacity );
-          }
-        };
-      }
-      return result;
-    }() ),
-
-    setOpacity  : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function( target, value ) {
-        if( value == null || value >= 1 || value < 0 ) {
-          this.removeCssFilter( target );
-        } else {
-          var valueStr = "Alpha(opacity=" + Math.round( value * 100 ) + ")";
-          this.setStyleProperty( target, "filter", valueStr );
-        }
-      },
-      "gecko" : function( target, value ) {
-        if( value == null || value >= 1 ) {
-          this.removeStyleProperty( target, "MozOpacity" );
-          this.removeStyleProperty( target, "opacity" );
-        } else {
-          var targetValue = rwt.util.Numbers.limit( value, 0, 1 );
-          this.setStyleProperty( target, "MozOpacity", targetValue );
-          this.setStyleProperty( target, "opacity", targetValue );
-        }
-      },
-      "default" : function( target, value ) {
-        if( value == null || value >= 1 ) {
-          this.removeStyleProperty( target, "opacity" );
-        } else {
-          var targetValue = rwt.util.Numbers.limit( value, 0, 1 );
-          this.setStyleProperty( target, "opacity", targetValue );
-        }
-      }
-    } ),
-
-    setBackgroundGradient : rwt.util.Variant.select( "qx.client", {
-      // TODO [tb] : Webkit and Gecko now support the default syntax, but will continue to support
-      //             their old syntax if prefexied. RAP should use new syntax if possible to be
-      //             future proof.
-      "webkit" : function( target, gradientObject ) {
-        if( gradientObject ) {
-          var args = [ "linear", "left top" ];
-          if( gradientObject.horizontal === true ) {
-            args.push( "right top" );
-          }  else {
-            args.push( "left bottom" );
-          }
-          for( var i = 0; i < gradientObject.length; i++ ) {
-            var position = gradientObject[ i ][ 0 ];
-            var color = gradientObject[ i ][ 1 ];
-            args.push( "color-stop(" + position + "," + color + ")" );
-          }
-          var string = this.BROWSER_PREFIX + "gradient( " + args.join() + ")";
-          this.setStyleProperty( target, "background", string );
-        } else {
-          this.removeStyleProperty( target, "background" );
-        }
-      },
-      "gecko" : function( target, gradientObject ) {
-        if( gradientObject ) {
-          var args = [ gradientObject.horizontal === true ? "0deg" : "-90deg" ];
-          for( var i = 0; i < gradientObject.length; i++ ) {
-            var position = ( gradientObject[ i ][ 0 ] * 100 ) + "%";
-            var color = gradientObject[ i ][ 1 ];
-            args.push( color + " " + position );
-          }
-          var string = this.BROWSER_PREFIX + "linear-gradient( " + args.join() + ")";
-          this.setStyleProperty( target, "background", string );
-        } else {
-          this.removeStyleProperty( target, "background" );
-        }
-      },
-      "default" : function( target, gradientObject ) {
-        if( gradientObject ) {
-          var args = [ gradientObject.horizontal === true ? "90deg" : "180deg" ];
-          for( var i = 0; i < gradientObject.length; i++ ) {
-            var position = ( gradientObject[ i ][ 0 ] * 100 ) + "%";
-            var color = gradientObject[ i ][ 1 ];
-            args.push( color + " " + position );
-          }
-          var string = "linear-gradient( " + args.join() + ")";
-          this.setStyleProperty( target, "background", string );
-        } else {
-          this.removeStyleProperty( target, "background" );
-        }
-      }
-    } ),
-
-    setBoxShadow: function( target, shadowObject ) {
-      var property;
-      if( rwt.client.Client.isWebkit() && !rwt.client.Client.isMobileChrome() ) {
-        property = this.BROWSER_PREFIX + "box-shadow";
-      } else {
-        property = "boxShadow";
-      }
-      if( shadowObject ) {
-        // NOTE: older webkit dont accept spread, therefor only use parameters 1-3
-        var string = shadowObject[ 0 ] ? "inset " : "";
-        string += shadowObject.slice( 1, 4 ).join( "px " ) + "px";
-        var rgba = rwt.util.Colors.stringToRgb( shadowObject[ 5 ] );
-        rgba.push( shadowObject[ 6 ] );
-        string += " rgba(" + rgba.join() + ")";
-        this.setStyleProperty( target, property, string );
-      } else {
-        this.removeStyleProperty( target, property );
-      }
-    },
-
-    setTextShadow  : rwt.util.Variant.select( "qx.client", {
-      "default" : function( target, shadowObject ) {
-        var property = "textShadow";
-        if( shadowObject ) {
-          var string = shadowObject.slice( 1, 4 ).join( "px " ) + "px";
-          var rgba = rwt.util.Colors.stringToRgb( shadowObject[ 5 ] );
-          rgba.push( shadowObject[ 6 ] );
-          string += " rgba(" + rgba.join() + ")";
-          this.setStyleProperty( target, property, string );
-        } else {
-          this.removeStyleProperty( target, property );
-        }
-      },
-      "mshtml" : function() {}
-    } ),
-
-    setPointerEvents : function( target, value ) {
-      var version = rwt.client.Client.getVersion();
-      var ffSupport = rwt.client.Client.getEngine() === "gecko" && version >= 1.9;
-      // NOTE: chrome does not support pointerEvents, but not on svg-nodes
-      var webKitSupport = rwt.client.Client.getBrowser() === "safari" && version >= 530;
-      if( ffSupport || webKitSupport ) {
-        this.setStyleProperty( target, "pointerEvents", value );
-        target.setAttribute( "pointerEvents", value );
-      } else {
-        this._passEventsThrough( target, value );
-      }
-    },
-
-    setStyleProperty : function( target, property, value ) {
-      if( target instanceof rwt.widgets.base.Widget ) {
-        target.setStyleProperty( property, value );
-      } else {
-        target.style[ property ] = value;
-      }
-    },
-
-    removeStyleProperty : function( target, property ) {
-      if( target instanceof rwt.widgets.base.Widget ) {
-        target.removeStyleProperty( property );
-      } else {
-        target.style[ property ] = "";
-      }
-    },
-
-    removeCssFilter : function( target ) {
-      var element = null;
-      if( target instanceof rwt.widgets.base.Widget ) {
-        if( target.isCreated() ) {
-          element = target.getElement();
-        } else {
-          target.removeStyleProperty( "filter" );
-        }
-      } else {
-        element = target;
-      }
-      if( element !== null ) {
-        var cssText = element.style.cssText;
-        cssText = cssText.replace( /FILTER:[^;]*(;|$)/, "" );
-        element.style.cssText = cssText;
-      }
-    },
-
-    //////////
-    // Private
-
-    _setCssBackgroundImage : function( target, value ) {
-      var cssImageStr = value ? "URL(" + value + ")" : "none";
-      this.setStyleProperty( target, "backgroundImage", cssImageStr );
-      this.setStyleProperty( target, "backgroundRepeat", "no-repeat" );
-      this.setStyleProperty( target, "backgroundPosition", "center" );
-    },
-
-    _setCssFilterImage : function( target, value ) {
-      if( value ) {
-        var cssImageStr =   "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"
-                          + value
-                          + "',sizingMethod='crop')";
-        this.setStyleProperty( target, "filter", cssImageStr );
-      } else {
-        this.removeCssFilter( target );
-      }
-    },
-
-    /////////
-    // Helper
-
-    _passEventsThrough : function( target, value ) {
-      // TODO [tb] : This is a very limited implementation that allowes
-      // to click "through" the elmement, but won't handle hover and cursor.
-      var EventRegistration = rwt.html.EventRegistration;
-      var types = rwt.event.EventHandler._mouseEventTypes;
-      var handler = this._passEventThroughHandler;
-      if( value === "none" ) {
-        this.setStyleProperty( target, "cursor", "default" );
-        for( var i = 0; i < types.length; i++ ) {
-          EventRegistration.addEventListener( target, types[ i ], handler );
-        }
-      } else {
-        // TODO
-      }
-    },
-
-    _passEventThroughHandler : function() {
-      var EventHandlerUtil = rwt.event.EventHandlerUtil;
-      var domEvent = EventHandlerUtil.getDomEvent( arguments );
-      var domTarget = EventHandlerUtil.getDomTarget( domEvent );
-      var type = domEvent.type;
-      domTarget.style.display = "none";
-      var newTarget
-        = document.elementFromPoint( domEvent.clientX, domEvent.clientY );
-      domEvent.cancelBubble = true;
-      EventHandlerUtil.stopDomEvent( domEvent );
-      if(    newTarget
-          && type !== "mousemove"
-          && type !== "mouseover"
-          && type !== "mouseout" )
-      {
-        if( type === "mousedown" ) {
-          rwt.html.Style._refireEvent( newTarget, "mouseover", domEvent );
-        }
-        rwt.html.Style._refireEvent( newTarget, type, domEvent );
-        if( type === "mouseup" ) {
-          rwt.html.Style._refireEvent( newTarget, "mouseout", domEvent );
-        }
-      }
-      domTarget.style.display = "";
-    },
-
-    _refireEvent : rwt.util.Variant.select("qx.client", {
-      "mshtml" : function( target, type, originalEvent ) {
-        var newEvent = document.createEventObject( originalEvent );
-        target.fireEvent( "on" + type , newEvent );
-      },
-      "default" : function( target, type, originalEvent ) {
-        var newEvent = document.createEvent( "MouseEvents" );
-        newEvent.initMouseEvent( type,
-                                 true,  /* can bubble */
-                                 true, /*cancelable */
-                                 originalEvent.view,
-                                 originalEvent.detail,
-                                 originalEvent.screenX,
-                                 originalEvent.screenY,
-                                 originalEvent.clientX,
-                                 originalEvent.clientY,
-                                 originalEvent.ctrlKey,
-                                 originalEvent.altKey,
-                                 originalEvent.shiftKey,
-                                 originalEvent.metaKey,
-                                 originalEvent.button,
-                                 originalEvent.relatedTarget);
-        target.dispatchEvent( newEvent );
-      }
-    } )
-
-
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Contains methods to control and query the element's overflow properties.
- */
-rwt.qx.Class.define("rwt.html.Overflow",
-{
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics :
-  {
-
-    // Mozilla notes (http://developer.mozilla.org/en/docs/Mozilla_CSS_Extensions):
-    // -moz-scrollbars-horizontal: Indicates that horizontal scrollbars should
-    //    always appear and vertical scrollbars should never appear.
-    // -moz-scrollbars-vertical: Indicates that vertical scrollbars should
-    //    always appear and horizontal scrollbars should never appear.
-    // -moz-scrollbars-none: Indicates that no scrollbars should appear but
-    //    the element should be scrollable from script. (This is the same as
-    //    hidden, and has been since Mozilla 1.6alpha.)
-    //
-    // Also a lot of interesting bugs:
-    // * https://bugzilla.mozilla.org/show_bug.cgi?id=42676
-    // * https://bugzilla.mozilla.org/show_bug.cgi?id=47710
-    // * https://bugzilla.mozilla.org/show_bug.cgi?id=235524
-
-    /**
-     * Returns the computed value of the horizontal overflow
-     *
-     * @type static
-     * @signature function(element, mode)
-     * @param element {Element} DOM element to query
-     * @param mode {Number} Choose one of the modes {@link rwt.html.Style#COMPUTED_MODE},
-     *   {@link rwt.html.Style#CASCADED_MODE}, {@link rwt.html.Style#LOCAL_MODE}.
-     *   The computed mode is the default one.
-     * @return {String} computed overflow value
-     */
-    getX : rwt.util.Variant.select("qx.client",
-    {
-      // gecko support differs
-      "gecko" : rwt.client.Client.getVersion() < 1.8 ?
-
-      // older geckos do not support overflowX
-      // it's also more safe to translate hidden to -moz-scrollbars-none
-      // because of issues in older geckos
-      function(element, mode)
-      {
-        var overflow = rwt.html.Style.get(element, "overflow", mode, false);
-
-        if (overflow === "-moz-scrollbars-none") {
-          overflow = "hidden";
-        }
-
-        return overflow;
-      } :
-
-      // gecko >= 1.8 supports overflowX, too
-      function(element, mode) {
-        return rwt.html.Style.get(element, "overflowX", mode, false);
-      },
-
-      // opera support differs
-      "opera" : rwt.client.Client.getVersion() < 9.5 ?
-
-      // older versions of opera have no support for splitted overflow properties.
-      function(element, mode) {
-        return rwt.html.Style.get(element, "overflow", mode, false);
-      } :
-
-      // opera >=9.5 supports overflowX, too
-      function(element, mode) {
-        return rwt.html.Style.get(element, "overflowX", mode, false);
-      },
-
-      // use native overflowX property
-      "default" : function(element, mode) {
-        return rwt.html.Style.get(element, "overflowX", mode, false);
-      }
-    }),
-
-
-
-
-    /**
-     * Returns the computed value of the vertical overflow
-     *
-     * @type static
-     * @signature function(element, mode)
-     * @param element {Element} DOM element to query
-     * @param mode {Number} Choose one of the modes {@link rwt.html.Style#COMPUTED_MODE},
-     *   {@link rwt.html.Style#CASCADED_MODE}, {@link rwt.html.Style#LOCAL_MODE}.
-     *   The computed mode is the default one.
-     * @return {String} computed overflow value
-     */
-    getY : rwt.util.Variant.select("qx.client",
-    {
-      // gecko support differs
-      "gecko" : rwt.client.Client.getVersion() < 1.8 ?
-
-      // older geckos do not support overflowY
-      // it's also more safe to translate hidden to -moz-scrollbars-none
-      // because of issues in older geckos
-      function(element, mode)
-      {
-        var overflow = rwt.html.Style.get(element, "overflow", mode, false);
-
-        if (overflow === "-moz-scrollbars-none") {
-          overflow = "hidden";
-        }
-
-        return overflow;
-      } :
-
-      // gecko >= 1.8 supports overflowY, too
-      function(element, mode) {
-        return rwt.html.Style.get(element, "overflowY", mode, false);
-      },
-
-      // opera support differs
-      "opera" : rwt.client.Client.getVersion() < 9.5 ?
-
-      // older versions of opera have no support for splitted overflow properties.
-      function(element, mode) {
-        return rwt.html.Style.get(element, "overflow", mode, false);
-      } :
-
-      // opera >=9.5 supports overflowY, too
-      function(element, mode) {
-        return rwt.html.Style.get(element, "overflowY", mode, false);
-      },
-
-      // use native overflowY property
-      "default" : function(element, mode) {
-        return rwt.html.Style.get(element, "overflowY", mode, false);
-      }
-    })
-
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/** This singleton manage stuff around image handling. */
-rwt.qx.Class.define("rwt.html.ImageManager",
-{
-  type : "singleton",
-  extend : rwt.qx.Target,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function()
-  {
-    this.base(arguments);
-
-    this.__visible = {};
-    this.__all = {};
-  },
-
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /**
-     * Register an image.
-     * Gives the application the possibility to preload images.
-     *
-     * @type member
-     * @param source {String} The incoming (unresolved) URL.
-     * @return {void}
-     */
-    add : function(source)
-    {
-      var data = this.__all;
-
-      if (data[source] === undefined) {
-        data[source] = 1;
-      } else {
-        data[source]++;
-      }
-    },
-
-
-    /**
-     * Register an image.
-     * Gives the application the possibility to preload images.
-     *
-     * @type member
-     * @param source {String} The incoming (unresolved) URL.
-     * @return {void}
-     */
-    remove : function(source)
-    {
-      var data = this.__all;
-
-      if (data[source] !== undefined) {
-        data[source]--;
-      }
-
-      if (data[source] <= 0) {
-        delete data[source];
-      }
-    },
-
-
-    /**
-     * Register an visible image.
-     * Gives the application the possibility to preload visible images.
-     *
-     * @type member
-     * @param source {String} The incoming (unresolved) URL.
-     * @return {void}
-     */
-    show : function(source)
-    {
-      var data = this.__visible;
-      if (data[source] === undefined) {
-        data[source] = 1;
-      } else {
-        data[source]++;
-      }
-    },
-
-
-    /**
-     * Register an image and reduce the visible counter
-     * Warning: Only use after using show() before
-     *
-     * @type member
-     * @param source {String} The incoming (unresolved) URL.
-     * @return {void}
-     */
-    hide : function(source)
-    {
-      var data = this.__visible;
-
-      if (data[source] !== undefined) {
-        data[source]--;
-      }
-
-      if (data[source]<=0) {
-        delete data[source];
-      }
-    },
-
-
-    /**
-     * Returns a map with the sources of all visible images
-     *
-     * @type member
-     * @return {Map} Map with sources of all visible images
-     */
-    getVisibleImages : function()
-    {
-      var visible = this.__visible;
-      var list = {};
-
-      for (var source in visible)
-      {
-        if (visible[source] > 0) {
-          list[source] = true;
-        }
-      }
-
-      return list;
-    },
-
-
-    /**
-     * Returns a map with the sources of all hidden images
-     *
-     * @type member
-     * @return {Map} Map with sources of all hidden images
-     */
-    getHiddenImages : function()
-    {
-      var visible = this.__visible;
-      var all = this.__all;
-      var list = {};
-
-      for (var source in all)
-      {
-        if (visible[source] === undefined) {
-          list[source] = true;
-        }
-      }
-
-      return list;
-    }
-  },
-
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function() {
-    this._disposeFields("__all", "__visible");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define("rwt.html.Offset",
-{
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics :
-  {
-    /*
-    Mozilla seems to be a little buggy here.
-    Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.7.5) Gecko/20041108 Firefox/1.0
-
-    It calculates some borders and/or paddings to the offsetProperties.
-    */
-
-    /**
-     * TODOC
-     *
-     * @type static
-     * @param vElement {var} TODOC
-     * @return {void}
-     * @signature function(el)
-     */
-    getLeft : rwt.util.Variant.select("qx.client",
-    {
-      "gecko" : function(el)
-      {
-        var val = el.offsetLeft;
-        var pa = el.parentNode;
-
-        var pose = rwt.html.Style.getStyleProperty(el, "position");
-        var posp = rwt.html.Style.getStyleProperty(pa, "position");
-
-        // If element is positioned non-static: Substract the border of the element
-        if (pose != "absolute" && pose != "fixed") {
-          val -= rwt.html.Style.getBorderLeft(pa);
-        }
-
-        // If parent is positioned static: Substract the border of the first
-        // parent element which is ab positioned non-static.
-        if (posp != "absolute" && posp != "fixed")
-        {
-          while (pa)
-          {
-            pa = pa.parentNode;
-
-            if (!pa || typeof pa.tagName !== "string") {
-              break;
-            }
-
-            var posi = rwt.html.Style.getStyleProperty(pa, "position");
-
-            if (posi == "absolute" || posi == "fixed")
-            {
-              val -= rwt.html.Style.getBorderLeft(pa) + rwt.html.Style.getPaddingLeft(pa);
-              break;
-            }
-          }
-        }
-
-        return val;
-      },
-
-      "default" : function(el) {
-        return el.offsetLeft;
-      }
-    }),
-
-
-    /**
-     * TODOC
-     *
-     * @type static
-     * @param vElement {var} TODOC
-     * @return {void}
-     * @signature function(el)
-     */
-    getTop  : rwt.util.Variant.select("qx.client",
-    {
-      "gecko" : function(el)
-      {
-        var val = el.offsetTop;
-        var pa = el.parentNode;
-
-        var pose = rwt.html.Style.getStyleProperty(el, "position");
-        var posp = rwt.html.Style.getStyleProperty(pa, "position");
-
-        // If element is positioned non-static: Substract the border of the element
-        if (pose != "absolute" && pose != "fixed") {
-          val -= rwt.html.Style.getBorderTop(pa);
-        }
-
-        // If parent is positioned static: Substract the border of the first
-        // parent element which is ab positioned non-static.
-        if (posp != "absolute" && posp != "fixed")
-        {
-          while (pa)
-          {
-            pa = pa.parentNode;
-
-            if (!pa || typeof pa.tagName !== "string") {
-              break;
-            }
-
-            var posi = rwt.html.Style.getStyleProperty(pa, "position");
-
-            if (posi == "absolute" || posi == "fixed")
-            {
-              val -= rwt.html.Style.getBorderTop(pa) + rwt.html.Style.getPaddingTop(pa);
-              break;
-            }
-          }
-        }
-
-        return val;
-      },
-
-      "default" : function(el) {
-        return el.offsetTop;
-      }
-    })
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-// Internet Explorer has invented scrollIntoView, but does not behave the same like in Mozilla (which would be better)
-// Mozilla has a native well working method scrollIntoView
-// Safari does not support scrollIntoView (but it can be found in Webkit since May 2005)
-// Opera does not support scrollIntoView
-
-
-/**
- * Functions to scroll DOM elements into the visible area of the parent element
- */
-rwt.qx.Class.define("rwt.html.ScrollIntoView",
-{
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics :
-  {
-    /**
-     * Scroll the parent DOM element so that the element's so that the x coordinate is inside
-     * the visible area of the parent.
-     *
-     * @type static
-     * @param vElement {Element} DOM node to be scrolled into view
-     * @param vAlignLeft {Boolean?false} whether the element should be left aligned
-     * @return {Boolean} Whether the element could be scrolled into the view
-     */
-    scrollX : function(vElement, vAlignLeft)
-    {
-      var vParentWidth, vParentScrollLeft, vWidth, vHasScroll;
-
-      var vParent = vElement.parentNode;
-      var vOffset = vElement.offsetLeft;
-      var vWidth = vElement.offsetWidth;
-
-      while (vParent)
-      {
-        switch(rwt.html.Style.getStyleProperty(vParent, "overflow"))
-        {
-          case "scroll":
-          case "auto":
-          case "-moz-scrollbars-horizontal":
-            vHasScroll = true;
-            break;
-
-          default:
-            switch(rwt.html.Style.getStyleProperty(vParent, "overflowX"))
-            {
-              case "scroll":
-              case "auto":
-                vHasScroll = true;
-                break;
-
-              default:
-                vHasScroll = false;
-            }
-        }
-
-        if (vHasScroll)
-        {
-          vParentWidth = vParent.clientWidth;
-          vParentScrollLeft = vParent.scrollLeft;
-
-          if (vAlignLeft) {
-            vParent.scrollLeft = vOffset;
-          } else if (vAlignLeft === false) {
-            vParent.scrollLeft = vOffset + vWidth - vParentWidth;
-          } else if (vWidth > vParentWidth || vOffset < vParentScrollLeft) {
-            vParent.scrollLeft = vOffset;
-          } else if ((vOffset + vWidth) > (vParentScrollLeft + vParentWidth)) {
-            vParent.scrollLeft = vOffset + vWidth - vParentWidth;
-          }
-
-          vOffset = vParent.offsetLeft;
-          vWidth = vParent.offsetWidth;
-        }
-        else
-        {
-          vOffset += vParent.offsetLeft;
-        }
-
-        if (vParent.tagName.toLowerCase() == "body") {
-          break;
-        }
-
-        vParent = vParent.offsetParent;
-      }
-
-      return true;
-    },
-
-
-    /**
-     * Scroll the parent DOM element so that the element's so that the y coordinate is inside
-     * the visible area of the parent.
-     *
-     * @type static
-     * @param vElement {Element} DOM node to be scrolled into view
-     * @param vAlignTop {Boolean?false} whether the element should be top aligned
-     * @return {Boolean} Whether the element could be scrolled into the view
-     */
-    scrollY : function(vElement, vAlignTop)
-    {
-      var vParentHeight, vParentScrollTop, vHeight, vHasScroll;
-
-      var vParent = vElement.parentNode;
-      var vOffset = vElement.offsetTop;
-      var vHeight = vElement.offsetHeight;
-
-      while (vParent)
-      {
-        switch(rwt.html.Style.getStyleProperty(vParent, "overflow"))
-        {
-          case "scroll":
-          case "auto":
-          case "-moz-scrollbars-vertical":
-            vHasScroll = true;
-            break;
-
-          default:
-            switch(rwt.html.Style.getStyleProperty(vParent, "overflowY"))
-            {
-              case "scroll":
-              case "auto":
-                vHasScroll = true;
-                break;
-
-              default:
-                vHasScroll = false;
-            }
-        }
-
-        if (vHasScroll)
-        {
-          vParentHeight = vParent.clientHeight;
-          vParentScrollTop = vParent.scrollTop;
-
-          if (vAlignTop) {
-            vParent.scrollTop = vOffset;
-          } else if (vAlignTop === false) {
-            vParent.scrollTop = vOffset + vHeight - vParentHeight;
-          } else if (vHeight > vParentHeight || vOffset < vParentScrollTop) {
-            vParent.scrollTop = vOffset;
-          } else if ((vOffset + vHeight) > (vParentScrollTop + vParentHeight)) {
-            vParent.scrollTop = vOffset + vHeight - vParentHeight;
-          }
-
-          vOffset = vParent.offsetTop;
-          vHeight = vParent.offsetHeight;
-        }
-        else
-        {
-          vOffset += vParent.offsetTop;
-        }
-
-        if (vParent.tagName.toLowerCase() == "body") {
-          break;
-        }
-
-        vParent = vParent.offsetParent;
-      }
-
-      return true;
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define("rwt.widgets.base.BoxLayout",
-{
-  extend : rwt.widgets.base.Parent,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  /**
-   * @param orientation {String} Initial value for {@link #orientation}.
-   */
-  construct : function(orientation)
-  {
-    this.base(arguments);
-
-    // apply orientation
-    if (orientation != null) {
-      this.setOrientation(orientation);
-    } else {
-      this.initOrientation();
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics : {
-    STR_REVERSED : "-reversed"
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    /** The orientation of the layout control. */
-    orientation :
-    {
-      check : [ "horizontal", "vertical" ],
-      init : "horizontal",
-      apply : "_applyOrientation",
-      event : "changeOrientation"
-    },
-
-
-    /** The spacing between childrens. Could be any positive integer value. */
-    spacing :
-    {
-      check : "Integer",
-      init : 0,
-      themeable : true,
-      apply : "_applySpacing",
-      event : "changeSpacing"
-    },
-
-
-    /** The horizontal align of the children. Allowed values are: "left", "center" and "right" */
-    horizontalChildrenAlign :
-    {
-      check : [ "left", "center", "right" ],
-      init : "left",
-      themeable : true,
-      apply : "_applyHorizontalChildrenAlign"
-    },
-
-
-    /** The vertical align of the children. Allowed values are: "top", "middle" and "bottom" */
-    verticalChildrenAlign :
-    {
-      check : [ "top", "middle", "bottom" ],
-      init : "top",
-      themeable : true,
-      apply : "_applyVerticalChildrenAlign"
-    },
-
-
-    /** Should the children be layouted in reverse order? */
-    reverseChildrenOrder :
-    {
-      check : "Boolean",
-      init : false,
-      apply : "_applyReverseChildrenOrder"
-    },
-
-
-    /**
-     * Should the widgets be stretched to the available width (orientation==vertical) or height (orientation==horizontal)?
-     *  This only applies if the child has not configured a own value for this axis.
-     */
-    stretchChildrenOrthogonalAxis :
-    {
-      check : "Boolean",
-      init : true,
-      apply : "_applyStretchChildrenOrthogonalAxis"
-    },
-
-
-    /**
-     * If there are min/max values in combination with flex try to optimize placement.
-     *  This is more complex and produces more time for the layouter but sometimes this feature is needed.
-     */
-    useAdvancedFlexAllocation :
-    {
-      check : "Boolean",
-      init : false,
-      apply : "_applyUseAdvancedFlexAllocation"
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      ACCUMULATED CHILDREN WIDTH/HEIGHT
-    --------------------------------------------------------------------------------
-
-      Needed for center/middle and right/bottom alignment
-
-    ---------------------------------------------------------------------------
-    */
-
-    accumulatedChildrenOuterWidth :
-    {
-      _cached      : true,
-      defaultValue : null
-    },
-
-    accumulatedChildrenOuterHeight :
-    {
-      _cached      : true,
-      defaultValue : null
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      INIT LAYOUT IMPL
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * This creates an new instance of the layout impl this widget uses
-     *
-     * @type member
-     * @return {rwt.widgets.base.BoxLayout} TODOC
-     */
-    _createLayoutImpl : function() {
-      return this.getOrientation() == "vertical" ? new rwt.widgets.util.VerticalBoxLayoutImpl(this) : new rwt.widgets.util.HorizontalBoxLayoutImpl(this);
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      HELPERS
-    ---------------------------------------------------------------------------
-    */
-
-    _layoutHorizontal : false,
-    _layoutVertical : false,
-    _layoutMode : "left",
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    isHorizontal : function() {
-      return this._layoutHorizontal;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    isVertical : function() {
-      return this._layoutVertical;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getLayoutMode : function()
-    {
-      if (this._layoutMode == null) {
-        this._updateLayoutMode();
-      }
-
-      return this._layoutMode;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    _updateLayoutMode : function()
-    {
-      this._layoutMode = this._layoutVertical ? this.getVerticalChildrenAlign() : this.getHorizontalChildrenAlign();
-
-      if (this.getReverseChildrenOrder()) {
-        this._layoutMode += rwt.widgets.base.BoxLayout.STR_REVERSED;
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    _invalidateLayoutMode : function() {
-      this._layoutMode = null;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      MODIFIERS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     * @return {var} TODOC
-     */
-    _applyOrientation : function(value, old)
-    {
-      // update fast access variables
-      this._layoutHorizontal = value == "horizontal";
-      this._layoutVertical = value == "vertical";
-
-      // Layout Implementation
-      if (this._layoutImpl)
-      {
-        this._layoutImpl.dispose();
-        this._layoutImpl = null;
-      }
-
-      if (value) {
-        this._layoutImpl = this._createLayoutImpl();
-      }
-
-      // call layout helper
-      this._doLayoutOrder(value, old);
-
-      this.addToQueueRuntime("orientation");
-    },
-
-    _applySpacing : function(value, old)
-    {
-      this._doLayout();
-      this.addToQueueRuntime("spacing");
-    },
-
-    _applyHorizontalChildrenAlign : function(value, old)
-    {
-      this._doLayoutOrder();
-      this.addToQueueRuntime("horizontalChildrenAlign");
-    },
-
-    _applyVerticalChildrenAlign : function(value, old)
-    {
-      this._doLayoutOrder();
-      this.addToQueueRuntime("verticalChildrenAlign");
-    },
-
-    _applyReverseChildrenOrder : function(value, old)
-    {
-      this._doLayoutOrder();
-      this.addToQueueRuntime("reverseChildrenOrder");
-    },
-
-    _applyStretchChildrenOrthogonalAxis : function(value, old) {
-      this.addToQueueRuntime("stretchChildrenOrthogonalAxis");
-    },
-
-    _applyUseAdvancedFlexAllocation : function(value, old) {
-      this.addToQueueRuntime("useAdvancedFlexAllocation");
-    },
-
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     * @return {var} TODOC
-     */
-    _doLayoutOrder : function()
-    {
-      // update layout mode
-      this._invalidateLayoutMode();
-
-      // call doLayout
-      this._doLayout();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _doLayout : function()
-    {
-      // invalidate inner preferred dimensions
-      this._invalidatePreferredInnerDimensions();
-
-      // accumulated width needs to be invalidated
-      this._invalidateAccumulatedChildrenOuterWidth();
-      this._invalidateAccumulatedChildrenOuterHeight();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {String} TODOC
-     */
-    _computeAccumulatedChildrenOuterWidth : function() {
-      var children = this.getVisibleChildren();
-      var spacing = this.getSpacing();
-      var result = -spacing;
-      var i = 0;
-      var child = children[ i ];
-      while( child != null ) {
-        result += child.getOuterWidth() + spacing;
-        i++;
-        child = children[ i ];
-      }
-      return result;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {String} TODOC
-     */
-    _computeAccumulatedChildrenOuterHeight : function()
-    {
-      var ch = this.getVisibleChildren(), chc, i = -1, sp = this.getSpacing(), s = -sp;
-
-      chc = ch[++i];
-      while( chc ) {
-        s += chc.getOuterHeight() + sp;
-        chc = ch[++i];
-      }
-
-      return s;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      STRETCHING SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    _recomputeChildrenStretchingX : function()
-    {
-      var ch = this.getVisibleChildren(), chc, i = -1;
-
-      chc = ch[++i];
-      while( chc ) {
-        if (chc._recomputeStretchingX() && chc._recomputeBoxWidth()) {
-          chc._recomputeOuterWidth();
-        }
-        chc = ch[++i];
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    _recomputeChildrenStretchingY : function()
-    {
-      var ch = this.getVisibleChildren(), chc, i = -1;
-
-      chc = ch[++i];
-      while( chc ) {
-        if (chc._recomputeStretchingY() && chc._recomputeBoxHeight()) {
-          chc._recomputeOuterHeight();
-        }
-        chc = ch[++i];
-      }
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define("rwt.widgets.util.VerticalBoxLayoutImpl",
-{
-  extend : rwt.widgets.util.LayoutImpl,
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    enableFlexSupport :
-    {
-      check : "Boolean",
-      init : true
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD
-    ---------------------------------------------------------------------------
-    */
-
-    /** Compute and return the box width of the given child. */
-    /**
-     * Global Structure:
-     *  [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD
-     *  [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD
-     *  [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN
-     *  [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS
-     *  [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT
-     *  [06] UPDATE LAYOUT ON JOB QUEUE FLUSH
-     *  [07] UPDATE CHILDREN ON JOB QUEUE FLUSH
-     *  [08] CHILDREN ADD/REMOVE/MOVE HANDLING
-     *  [09] FLUSH LAYOUT QUEUES OF CHILDREN
-     *  [10] LAYOUT CHILD
-     *
-     *  Inherits from rwt.widgets.util.LayoutImpl:
-     *  [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {var} TODOC
-     */
-    computeChildBoxWidth : function(vChild)
-    {
-      if (this.getWidget().getStretchChildrenOrthogonalAxis() && vChild._computedWidthTypeNull && vChild.getAllowStretchX()) {
-        return this.getWidget().getInnerWidth();
-      }
-
-      return vChild.getWidthValue() || vChild._computeBoxWidthFallback();
-    },
-
-
-    /**
-     * Compute and return the box height of the given child.
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {var} TODOC
-     */
-    computeChildBoxHeight : function(vChild) {
-      return vChild.getHeightValue() || vChild._computeBoxHeightFallback();
-    },
-
-
-    /**
-     * Computes the height of all flexible children.
-     *
-     * @type member
-     * @return {void}
-     */
-    computeChildrenFlexHeight : function()
-    {
-      if (this._childrenFlexHeightComputed || !this.getEnableFlexSupport()) {
-        return;
-      }
-
-      this._childrenFlexHeightComputed = true;
-
-      var vWidget = this.getWidget();
-      var vChildren = vWidget.getVisibleChildren();
-      var vChildrenLength = vChildren.length;
-      var vCurrentChild;
-      var vFlexibleChildren = [];
-      var vAvailHeight = vWidget.getInnerHeight();
-      var vUsedHeight = vWidget.getSpacing() * (vChildrenLength - 1);
-      var vIterator;
-
-      // *************************************************************
-      // 1. Compute the sum of all static sized children and finding
-      //    all flexible children.
-      // *************************************************************
-      for (vIterator=0; vIterator<vChildrenLength; vIterator++)
-      {
-        vCurrentChild = vChildren[vIterator];
-
-        if (vCurrentChild._computedHeightTypeFlex)
-        {
-          vFlexibleChildren.push(vCurrentChild);
-
-          if (vWidget._computedHeightTypeAuto) {
-            vUsedHeight += vCurrentChild.getPreferredBoxHeight();
-          }
-        }
-        else
-        {
-          vUsedHeight += vCurrentChild.getOuterHeight();
-        }
-      }
-
-      // *************************************************************
-      // 2. Compute the sum of all flexible children heights
-      // *************************************************************
-      var vRemainingHeight = vAvailHeight - vUsedHeight;
-      var vFlexibleChildrenLength = vFlexibleChildren.length;
-      var vPrioritySum = 0;
-
-      for (vIterator=0; vIterator<vFlexibleChildrenLength; vIterator++) {
-        vPrioritySum += vFlexibleChildren[vIterator]._computedHeightParsed;
-      }
-
-      // *************************************************************
-      // 3. Calculating the size of each 'part'.
-      // *************************************************************
-      var vPartHeight = vRemainingHeight / vPrioritySum;
-
-      if (!vWidget.getUseAdvancedFlexAllocation())
-      {
-        // *************************************************************
-        // 4a. Computing the flex height value of each flexible child
-        //     and add the height to the usedHeight, so that we can
-        //     fix rounding problems later.
-        // *************************************************************
-        for (vIterator=0; vIterator<vFlexibleChildrenLength; vIterator++)
-        {
-          vCurrentChild = vFlexibleChildren[vIterator];
-
-          vCurrentChild._computedHeightFlexValue = Math.round(vCurrentChild._computedHeightParsed * vPartHeight);
-          vUsedHeight += vCurrentChild._computedHeightFlexValue;
-        }
-      }
-      else
-      {
-        // *************************************************************
-        // 4b. Calculating the diff. Which means respect the min/max
-        //     height configuration in flex and store the higher/lower
-        //     data in a diff.
-        // *************************************************************
-        var vAllocationDiff = 0;
-        var vMinAllocationLoops, vFlexibleChildrenLength, vAdjust, vCurrentAllocationSum, vFactorSum, vComputedFlexibleHeight;
-
-        for (vIterator=0; vIterator<vFlexibleChildrenLength; vIterator++)
-        {
-          vCurrentChild = vFlexibleChildren[vIterator];
-
-          vComputedFlexibleHeight = vCurrentChild._computedHeightFlexValue = vCurrentChild._computedHeightParsed * vPartHeight;
-          vAllocationDiff += vComputedFlexibleHeight - rwt.util.Numbers.limit(vComputedFlexibleHeight, vCurrentChild.getMinHeightValue(), vCurrentChild.getMaxHeightValue());
-        }
-
-        // Rounding diff
-        vAllocationDiff = Math.round(vAllocationDiff);
-
-        if( vAllocationDiff === 0 )
-        {
-          // *************************************************************
-          // 5a. If the diff is equal zero we must not do anything more
-          //     and do nearly identical the same like in 4a. which means
-          //     to round the calculated flex value and add it to the
-          //     used height so we can fix rounding problems later.
-          // *************************************************************
-          // Rounding values and fixing rounding errors
-          for (vIterator=0; vIterator<vFlexibleChildrenLength; vIterator++)
-          {
-            vCurrentChild = vFlexibleChildren[vIterator];
-
-            vCurrentChild._computedHeightFlexValue = Math.round(vCurrentChild._computedHeightFlexValue);
-            vUsedHeight += vCurrentChild._computedHeightFlexValue;
-          }
-        }
-        else
-        {
-          // *************************************************************
-          // 5b. Find maximum loops of each adjustable child to adjust
-          //     the height until the min/max height limits are reached.
-          // *************************************************************
-          var vUp = vAllocationDiff > 0;
-
-          for (vIterator=vFlexibleChildrenLength-1; vIterator>=0; vIterator--)
-          {
-            vCurrentChild = vFlexibleChildren[vIterator];
-
-            if (vUp)
-            {
-              vAdjust = (vCurrentChild.getMaxHeightValue() || Infinity) - vCurrentChild._computedHeightFlexValue;
-
-              if (vAdjust > 0) {
-                vCurrentChild._allocationLoops = Math.floor(vAdjust / vCurrentChild._computedHeightParsed);
-              }
-              else
-              {
-                rwt.util.Arrays.removeAt(vFlexibleChildren, vIterator);
-
-                vCurrentChild._computedHeightFlexValue = Math.round(vCurrentChild._computedHeightFlexValue);
-                vUsedHeight += Math.round(vCurrentChild._computedHeightFlexValue + vAdjust);
-              }
-            }
-            else
-            {
-              vAdjust = rwt.util.Validation.isValidNumber(vCurrentChild.getMinHeightValue()) ? vCurrentChild._computedHeightFlexValue - vCurrentChild.getMinHeightValue() : vCurrentChild._computedHeightFlexValue;
-
-              if (vAdjust > 0) {
-                vCurrentChild._allocationLoops = Math.floor(vAdjust / vCurrentChild._computedHeightParsed);
-              }
-              else
-              {
-                rwt.util.Arrays.removeAt(vFlexibleChildren, vIterator);
-
-                vCurrentChild._computedHeightFlexValue = Math.round(vCurrentChild._computedHeightFlexValue);
-                vUsedHeight += Math.round(vCurrentChild._computedHeightFlexValue - vAdjust);
-              }
-            }
-          }
-
-          // *************************************************************
-          // 6. Try to reallocate the height between flexible children
-          //    so that the requirements through min/max limits
-          //    are satisfied.
-          // *************************************************************
-          while( vAllocationDiff !== 0 && vFlexibleChildrenLength > 0 ) {
-            vFlexibleChildrenLength = vFlexibleChildren.length;
-            vMinAllocationLoops = Infinity;
-            vFactorSum = 0;
-
-            // Find minimal loop amount
-            for (vIterator=0; vIterator<vFlexibleChildrenLength; vIterator++)
-            {
-              vMinAllocationLoops = Math.min(vMinAllocationLoops, vFlexibleChildren[vIterator]._allocationLoops);
-              vFactorSum += vFlexibleChildren[vIterator]._computedHeightParsed;
-            }
-
-            // Be sure that the adjustment is not bigger/smaller than diff
-            vCurrentAllocationSum = Math.min(vFactorSum * vMinAllocationLoops, vAllocationDiff);
-
-            // Reducing diff by current sum
-            vAllocationDiff -= vCurrentAllocationSum;
-
-            // Adding sizes to children to adjust
-            for (vIterator=vFlexibleChildrenLength-1; vIterator>=0; vIterator--)
-            {
-              vCurrentChild = vFlexibleChildren[vIterator];
-              vCurrentChild._computedHeightFlexValue += vCurrentAllocationSum / vFactorSum * vCurrentChild._computedHeightParsed;
-
-              if (vCurrentChild._allocationLoops == vMinAllocationLoops)
-              {
-                vCurrentChild._computedHeightFlexValue = Math.round(vCurrentChild._computedHeightFlexValue);
-
-                vUsedHeight += vCurrentChild._computedHeightFlexValue;
-                delete vCurrentChild._allocationLoops;
-                rwt.util.Arrays.removeAt(vFlexibleChildren, vIterator);
-              }
-              else
-              {
-                if (vAllocationDiff === 0)
-                {
-                  vCurrentChild._computedHeightFlexValue = Math.round(vCurrentChild._computedHeightFlexValue);
-                  vUsedHeight += vCurrentChild._computedHeightFlexValue;
-                  delete vCurrentChild._allocationLoops;
-                }
-                else
-                {
-                  vCurrentChild._allocationLoops -= vMinAllocationLoops;
-                }
-              }
-            }
-          }
-        }
-      }
-
-      // *************************************************************
-      // 7. Fix rounding errors
-      // *************************************************************
-      vCurrentChild._computedHeightFlexValue += vAvailHeight - vUsedHeight;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    invalidateChildrenFlexHeight : function() {
-      delete this._childrenFlexHeightComputed;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Compute and return the height needed by all children of this widget
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    computeChildrenNeededHeight : function()
-    {
-      var w = this.getWidget();
-      return rwt.widgets.util.LayoutImpl.prototype.computeChildrenNeededHeight_sum.call(this) + ((w.getVisibleChildrenLength() - 1) * w.getSpacing());
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Things to do and layout when any of the childs changes its outer height.
-     *  Needed by layouts where the children depends on each-other, like flow- or box-layouts.
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {void}
-     */
-    updateSelfOnChildOuterHeightChange : function(vChild)
-    {
-      // if a childrens outer height changes we need to update our accumulated
-      // height of all childrens (used for middle or bottom alignments)
-      this.getWidget()._invalidateAccumulatedChildrenOuterHeight();
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Actions that should be done if the inner width of the widget was changed.
-     *  Normally this includes update to percent values and ranges.
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {boolean} TODOC
-     */
-    updateChildOnInnerWidthChange : function(vChild)
-    {
-      // use variables here to be sure to call both methods.
-      var vUpdatePercent = vChild._recomputePercentX();
-      var vUpdateStretch = vChild._recomputeStretchingX();
-
-      // priority to childs internal alignment
-      if ((vChild.getHorizontalAlign() || this.getWidget().getHorizontalChildrenAlign()) == "center") {
-        vChild.addToLayoutChanges("locationX");
-      }
-
-      // inform the caller if there were any notable changes occured
-      return vUpdatePercent || vUpdateStretch;
-    },
-
-
-    /**
-     * Actions that should be done if the inner height of the widget was changed.
-     *  Normally this includes update to percent values and ranges.
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {boolean} TODOC
-     */
-    updateChildOnInnerHeightChange : function(vChild)
-    {
-      if (this.getWidget().getVerticalChildrenAlign() == "middle") {
-        vChild.addToLayoutChanges("locationY");
-      }
-
-      // use variables here to be sure to call both methods.
-      var vUpdatePercent = vChild._recomputePercentY();
-      var vUpdateFlex = vChild._recomputeFlexY();
-
-      // inform the caller if there were any notable changes occured
-      return vUpdatePercent || vUpdateFlex;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [06] UPDATE LAYOUT ON JOB QUEUE FLUSH
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Invalidate and recompute things because of job in queue (before the rest of job handling will be executed).
-     *
-     * @type member
-     * @param vJobQueue {var} TODOC
-     * @return {void}
-     */
-    updateSelfOnJobQueueFlush : function(vJobQueue)
-    {
-      if (vJobQueue.addChild || vJobQueue.removeChild) {
-        this.getWidget()._invalidateAccumulatedChildrenOuterHeight();
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [07] UPDATE CHILDREN ON JOB QUEUE FLUSH
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Updates children on special jobs
-     *
-     * @type member
-     * @param vQueue {var} TODOC
-     * @return {boolean}
-     */
-    updateChildrenOnJobQueueFlush : function(vQueue)
-    {
-      var vStretchX = false, vStretchY = false;
-      var vWidget = this.getWidget();
-
-      // switching the orientation need updates for stretching on both axis
-      if (vQueue.orientation) {
-        vStretchX = vStretchY = true;
-      }
-
-      // different updates depending from the current orientation (or the new one)
-      if (vQueue.spacing || vQueue.orientation || vQueue.reverseChildrenOrder || vQueue.verticalChildrenAlign) {
-        vWidget._addChildrenToLayoutQueue("locationY");
-      }
-
-      if (vQueue.horizontalChildrenAlign) {
-        vWidget._addChildrenToLayoutQueue("locationX");
-      }
-
-      if (vQueue.stretchChildrenOrthogonalAxis) {
-        vStretchX = true;
-      }
-
-      // if stretching should be reworked reset the previous one and add
-      // a layout job to update the width respectively height.
-      if (vStretchX)
-      {
-        vWidget._recomputeChildrenStretchingX();
-        vWidget._addChildrenToLayoutQueue("width");
-      }
-
-      if (vStretchY)
-      {
-        vWidget._recomputeChildrenStretchingY();
-        vWidget._addChildrenToLayoutQueue("height");
-      }
-
-      return true;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [08] CHILDREN ADD/REMOVE/MOVE HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * This method combines calls of methods which should be done if a widget should be removed from the current layout.
-     *  Needed by layouts where the children depends on each-other, like flow- or box-layouts.
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vIndex {var} TODOC
-     * @return {void}
-     */
-    updateChildrenOnRemoveChild : function( vChild, vIndex ) {
-      var w = this.getWidget();
-      var ch = w.getVisibleChildren();
-      var chl = ch.length;
-      var chc;
-      var i = -1;
-      // Fix index to be at the first flex child
-      if( this.getEnableFlexSupport() )
-      {
-        for (var i=0; i<chl; i++)
-        {
-          chc = ch[i];
-
-          if (chc.getHasFlexY())
-          {
-            vIndex = Math.min(vIndex, i);
-            break;
-          }
-        }
-
-        i = -1;
-      }
-
-      // Handle differently depending on layout mode
-      switch(w.getLayoutMode())
-      {
-        case "bottom":
-        case "top-reversed":
-          while ((chc = ch[++i]) && i < vIndex) {
-            chc.addToLayoutChanges("locationY");
-          }
-
-          break;
-
-        case "middle":
-        case "middle-reversed":
-          chc = ch[++i];
-          while( chc ) {
-            chc.addToLayoutChanges("locationY");
-            chc = ch[++i];
-          }
-
-          break;
-
-        default:
-          i += vIndex;
-
-          chc = ch[++i];
-          while( chc ) {
-            chc.addToLayoutChanges("locationY");
-            chc = ch[++i];
-          }
-      }
-    },
-
-
-    /**
-     * This method combines calls of methods which should be done if a child should be moved
-     *  inside the same parent to a new positions.
-     *  Needed by layouts where the children depends on each-other, like flow- or box-layouts.
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vIndex {var} TODOC
-     * @param vOldIndex {var} TODOC
-     * @return {void}
-     */
-    updateChildrenOnMoveChild : function(vChild, vIndex, vOldIndex)
-    {
-      var vChildren = this.getWidget().getVisibleChildren();
-
-      var vStart = Math.min(vIndex, vOldIndex);
-      var vStop = Math.max(vIndex, vOldIndex) + 1;
-      vStop = Math.min(vChildren.length, vStop);
-
-      for (var i=vStart; i<vStop; i++) {
-        vChildren[i].addToLayoutChanges("locationY");
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [09] FLUSH LAYOUT QUEUES OF CHILDREN
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * This method have full control of the order in which the
-     *  registered (or also non-registered) children should be
-     *  layouted on the horizontal axis.
-     *
-     * @type member
-     * @param vChildrenQueue {var} TODOC
-     * @return {void}
-     */
-    flushChildrenQueue : function(vChildrenQueue)
-    {
-      var w = this.getWidget(), ch = w.getVisibleChildren(), chl = ch.length, chc, i;
-
-      // This block is needed for flex handling and
-      // will inform flex children if there was any
-      // change to the other content
-      if (this.getEnableFlexSupport())
-      {
-        this.invalidateChildrenFlexHeight();
-
-        for (i=0; i<chl; i++)
-        {
-          chc = ch[i];
-
-          if (chc.getHasFlexY())
-          {
-            chc._computedHeightValue = null;
-
-            if (chc._recomputeBoxHeight())
-            {
-              chc._recomputeOuterHeight();
-              chc._recomputeInnerHeight();
-            }
-
-            vChildrenQueue[chc.toHashCode()] = chc;
-            chc._layoutChanges.height = true;
-          }
-        }
-      }
-
-      switch(w.getLayoutMode())
-      {
-        case "bottom":
-        case "top-reversed":
-          // find the last child which has a layout request
-          for (var i=chl-1; i>=0&&!vChildrenQueue[ch[i].toHashCode()]; i--) {}
-
-          // layout all children before this last child
-          for (var j=0; j<=i; j++) {
-            w._layoutChild(chc = ch[j]);
-          }
-
-          break;
-
-        case "middle":
-        case "middle-reversed":
-          // re-layout all children
-          i = -1;
-
-          chc = ch[++i];
-          while( chc ) {
-            w._layoutChild(chc);
-            chc = ch[++i];
-          }
-
-          break;
-
-        default:
-          // layout all childs from the first child
-          // with an own layout request to the end
-          i = -1;
-          var changed = false;
-
-          chc = ch[++i];
-          while( chc ) {
-            if (changed || vChildrenQueue[chc.toHashCode()])
-            {
-              w._layoutChild(chc);
-              changed = true;
-            }
-            chc = ch[++i];
-          }
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [10] LAYOUT CHILD
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * This is called from rwt.widgets.base.Widget and  it's task is to apply the layout
-     *  (excluding border and padding) to the child.
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vJobs {var} TODOC
-     * @return {void}
-     */
-    layoutChild : function(vChild, vJobs)
-    {
-      this.layoutChild_sizeX(vChild, vJobs);
-      this.layoutChild_sizeY(vChild, vJobs);
-
-      this.layoutChild_sizeLimitX(vChild, vJobs);
-      this.layoutChild_sizeLimitY(vChild, vJobs);
-
-      this.layoutChild_locationX(vChild, vJobs);
-      this.layoutChild_locationY(vChild, vJobs);
-
-      this.layoutChild_marginX(vChild, vJobs);
-      this.layoutChild_marginY(vChild, vJobs);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vJobs {var} TODOC
-     * @return {void}
-     * @signature function(vChild, vJobs)
-     */
-    layoutChild_sizeX : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml|newmshtml|opera|webkit" : function(vChild, vJobs)
-      {
-        if (vJobs.initial || vJobs.width || vJobs.minWidth || vJobs.maxWidth)
-        {
-          if ((vChild._isWidthEssential() && (!vChild._computedWidthTypeNull || !vChild._computedMinWidthTypeNull || !vChild._computedMaxWidthTypeNull)) || (vChild.getAllowStretchX() && this.getWidget().getStretchChildrenOrthogonalAxis())) {
-            vChild._renderRuntimeWidth(vChild.getBoxWidth());
-          } else {
-            vChild._resetRuntimeWidth();
-          }
-        }
-      },
-
-      "default" : function(vChild, vJobs)
-      {
-        if (vJobs.initial || vJobs.width)
-        {
-          if (vChild._isWidthEssential() && !vChild._computedWidthTypeNull) {
-            vChild._renderRuntimeWidth(vChild.getWidthValue());
-          } else {
-            vChild._resetRuntimeWidth();
-          }
-        }
-      }
-    }),
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vJobs {var} TODOC
-     * @return {void}
-     * @signature function(vChild, vJobs)
-     */
-    layoutChild_sizeY : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml|newmshtml|opera|webkit" : function(vChild, vJobs)
-      {
-        if (vJobs.initial || vJobs.height || vJobs.minHeight || vJobs.maxHeight)
-        {
-          if (vChild._isHeightEssential() && (!vChild._computedHeightTypeNull || !vChild._computedMinHeightTypeNull || !vChild._computedMaxHeightTypeNull)) {
-            vChild._renderRuntimeHeight(vChild.getBoxHeight());
-          } else {
-            vChild._resetRuntimeHeight();
-          }
-        }
-      },
-
-      "default" : function(vChild, vJobs)
-      {
-        if (vJobs.initial || vJobs.height)
-        {
-          if (vChild._isHeightEssential() && !vChild._computedHeightTypeNull) {
-            vChild._renderRuntimeHeight(vChild.getHeightValue());
-          } else {
-            vChild._resetRuntimeHeight();
-          }
-        }
-      }
-    }),
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vJobs {var} TODOC
-     * @return {void}
-     */
-    layoutChild_locationY : function(vChild, vJobs)
-    {
-      var vWidget = this.getWidget();
-
-      // handle first child
-      if (vWidget.getFirstVisibleChild() == vChild)
-      {
-        switch(vWidget.getLayoutMode())
-        {
-          case "bottom":
-          case "top-reversed":
-            var vPos = vWidget.getPaddingBottom() + vWidget.getAccumulatedChildrenOuterHeight() - vChild.getOuterHeight();
-            break;
-
-          case "middle":
-          case "middle-reversed":
-            var vPos = vWidget.getPaddingTop() + Math.round((vWidget.getInnerHeight() - vWidget.getAccumulatedChildrenOuterHeight()) / 2);
-            break;
-
-          default:
-            var vPos = vWidget.getPaddingTop();
-        }
-      }
-
-      // handle any following child
-      else
-      {
-        var vPrev = vChild.getPreviousVisibleSibling();
-
-        switch(vWidget.getLayoutMode())
-        {
-          case "bottom":
-          case "top-reversed":
-            var vPos = vPrev._cachedLocationVertical - vChild.getOuterHeight() - vWidget.getSpacing();
-            break;
-
-          default:
-            var vPos = vPrev._cachedLocationVertical + vPrev.getOuterHeight() + vWidget.getSpacing();
-        }
-      }
-
-      // store for next sibling
-      vChild._cachedLocationVertical = vPos;
-
-      // apply styles
-      switch(this.getWidget().getLayoutMode())
-      {
-        case "bottom":
-        case "bottom-reversed":
-        case "middle-reversed":
-          // add relative positions (like 'position:relative' in css)
-          vPos += !vChild._computedBottomTypeNull ? vChild.getBottomValue() : !vChild._computedTopTypeNull ? -(vChild.getTopValue()) : 0;
-
-          vChild._resetRuntimeTop();
-          vChild._renderRuntimeBottom(vPos);
-          break;
-
-        default:
-          // add relative positions (like 'position:relative' in css)
-          vPos += !vChild._computedTopTypeNull ? vChild.getTopValue() : !vChild._computedBottomTypeNull ? -(vChild.getBottomValue()) : 0;
-
-          vChild._resetRuntimeBottom();
-          vChild._renderRuntimeTop(vPos);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vJobs {var} TODOC
-     * @return {void}
-     */
-    layoutChild_locationX : function(vChild, vJobs)
-    {
-      var vWidget = this.getWidget();
-
-      // special stretching support
-      if ( rwt.client.Client.isGecko() )
-      {
-        if (vChild.getAllowStretchX() && vWidget.getStretchChildrenOrthogonalAxis() && vChild._computedWidthTypeNull)
-        {
-          vChild._renderRuntimeLeft(vWidget.getPaddingLeft() || 0);
-          vChild._renderRuntimeRight(vWidget.getPaddingRight() || 0);
-
-          return;
-        }
-      }
-
-      // priority to childs internal alignment
-      var vAlign = vChild.getHorizontalAlign() || vWidget.getHorizontalChildrenAlign();
-
-      // handle center alignment
-      var vPos = vAlign == "center" ? Math.round((vWidget.getInnerWidth() - vChild.getOuterWidth()) / 2) : 0;
-
-      // the right alignment use the real 'right' styleproperty to
-      // use the best available method in modern browsers
-      if (vAlign == "right")
-      {
-        // add parent padding
-        vPos += vWidget.getPaddingRight();
-
-        // relative positions (like 'position:relative' in css)
-        if (!vChild._computedRightTypeNull) {
-          vPos += vChild.getRightValue();
-        } else if (!vChild._computedLeftTypeNull) {
-          vPos -= vChild.getLeftValue();
-        }
-
-        // apply styles
-        vChild._resetRuntimeLeft();
-        vChild._renderRuntimeRight(vPos);
-      }
-      else
-      {
-        // add parent padding
-        vPos += vWidget.getPaddingLeft();
-
-        // relative positions (like 'position:relative' in css)
-        if (!vChild._computedLeftTypeNull) {
-          vPos += vChild.getLeftValue();
-        } else if (!vChild._computedRightTypeNull) {
-          vPos -= vChild.getRightValue();
-        }
-
-        // apply styles
-        vChild._resetRuntimeRight();
-        vChild._renderRuntimeLeft(vPos);
-      }
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Collection of validation methods.
- *
- * All methods use the strict comparison operators as all modern
- * browsers (needs support for JavaScript 1.3) support this.
- *
- * http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Operators:Comparison_Operators
- */
-rwt.qx.Class.define("rwt.util.Validation",
-{
-  statics :
-  {
-
-    /**
-     * Whether a value is a valid number. Valid numbers are:
-     * <ul>
-     *   <li>type is number</li>
-     *   <li>not NaN</li>
-     * </ul>
-     *
-     * @type static
-     * @param v {var} the value to validate.
-     * @return {Boolean} whether the variable is valid
-     */
-    isValidNumber : function(v) {
-      return typeof v === "number" && !isNaN(v);
-    },
-
-    /**
-     * Whether a value is valid string. Valid strings are:
-     * <ul>
-     *   <li>type is string</li>
-     *   <li>not an empty string</li>
-     * </ul>
-     *
-     * @type static
-     * @param v {var} the value to validate.
-     * @return {Boolean} whether the variable is valid
-     */
-    isValidString : function(v) {
-      return typeof v === "string" && v !== "";
-    }
-
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define("rwt.widgets.util.HorizontalBoxLayoutImpl",
-{
-  extend : rwt.widgets.util.LayoutImpl,
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    enableFlexSupport :
-    {
-      check : "Boolean",
-      init : true
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD
-    ---------------------------------------------------------------------------
-    */
-
-    /** Compute and return the box width of the given child. */
-    /**
-     * Global Structure:
-     *  [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD
-     *  [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD
-     *  [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN
-     *  [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS
-     *  [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT
-     *  [06] UPDATE LAYOUT ON JOB QUEUE FLUSH
-     *  [07] UPDATE CHILDREN ON JOB QUEUE FLUSH
-     *  [08] CHILDREN ADD/REMOVE/MOVE HANDLING
-     *  [09] FLUSH LAYOUT QUEUES OF CHILDREN
-     *  [10] LAYOUT CHILD
-     *
-     *  Inherits from rwt.widgets.util.LayoutImpl:
-     *  [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {var} TODOC
-     */
-    computeChildBoxWidth : function(vChild) {
-      return vChild.getWidthValue() || vChild._computeBoxWidthFallback();
-    },
-
-
-    /**
-     * Compute and return the box height of the given child.
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {var} TODOC
-     */
-    computeChildBoxHeight : function(vChild)
-    {
-      if (this.getWidget().getStretchChildrenOrthogonalAxis() && vChild._computedHeightTypeNull && vChild.getAllowStretchY()) {
-        return this.getWidget().getInnerHeight();
-      }
-
-      return vChild.getHeightValue() || vChild._computeBoxHeightFallback();
-    },
-
-
-    /**
-     * Computes the width of all flexible children.
-     *
-     * @type member
-     * @return {void}
-     */
-    computeChildrenFlexWidth : function()
-    {
-      if (this._childrenFlexWidthComputed || !this.getEnableFlexSupport()) {
-        return;
-      }
-
-      this._childrenFlexWidthComputed = true;
-
-      var vWidget = this.getWidget();
-      var vChildren = vWidget.getVisibleChildren();
-      var vChildrenLength = vChildren.length;
-      var vCurrentChild;
-      var vFlexibleChildren = [];
-      var vAvailWidth = vWidget.getInnerWidth();
-      var vUsedWidth = vWidget.getSpacing() * (vChildrenLength - 1);
-      var vIterator;
-
-      // *************************************************************
-      // 1. Compute the sum of all static sized children and finding
-      //    all flexible children.
-      // *************************************************************
-      for (vIterator=0; vIterator<vChildrenLength; vIterator++)
-      {
-        vCurrentChild = vChildren[vIterator];
-
-        if (vCurrentChild._computedWidthTypeFlex)
-        {
-          vFlexibleChildren.push(vCurrentChild);
-
-          if (vWidget._computedWidthTypeAuto) {
-            vUsedWidth += vCurrentChild.getPreferredBoxWidth();
-          }
-        }
-        else
-        {
-          vUsedWidth += vCurrentChild.getOuterWidth();
-        }
-      }
-
-      // *************************************************************
-      // 2. Compute the sum of all flexible children widths
-      // *************************************************************
-      var vRemainingWidth = vAvailWidth - vUsedWidth;
-      var vFlexibleChildrenLength = vFlexibleChildren.length;
-      var vPrioritySum = 0;
-
-      for (vIterator=0; vIterator<vFlexibleChildrenLength; vIterator++) {
-        vPrioritySum += vFlexibleChildren[vIterator]._computedWidthParsed;
-      }
-
-      // *************************************************************
-      // 3. Calculating the size of each 'part'.
-      // *************************************************************
-      var vPartWidth = vRemainingWidth / vPrioritySum;
-
-      if (!vWidget.getUseAdvancedFlexAllocation())
-      {
-        // *************************************************************
-        // 4a. Computing the flex width value of each flexible child
-        //     and add the width to the usedWidth, so that we can
-        //     fix rounding problems later.
-        // *************************************************************
-        for (vIterator=0; vIterator<vFlexibleChildrenLength; vIterator++)
-        {
-          vCurrentChild = vFlexibleChildren[vIterator];
-
-          vCurrentChild._computedWidthFlexValue = Math.round(vCurrentChild._computedWidthParsed * vPartWidth);
-          vUsedWidth += vCurrentChild._computedWidthFlexValue;
-        }
-      }
-      else
-      {
-        // *************************************************************
-        // 4b. Calculating the diff. Which means respect the min/max
-        //     width configuration in flex and store the higher/lower
-        //     data in a diff.
-        // *************************************************************
-        var vAllocationDiff = 0;
-        var vMinAllocationLoops, vFlexibleChildrenLength, vAdjust, vCurrentAllocationSum, vFactorSum, vComputedFlexibleWidth;
-
-        for (vIterator=0; vIterator<vFlexibleChildrenLength; vIterator++)
-        {
-          vCurrentChild = vFlexibleChildren[vIterator];
-
-          vComputedFlexibleWidth = vCurrentChild._computedWidthFlexValue = vCurrentChild._computedWidthParsed * vPartWidth;
-          vAllocationDiff += vComputedFlexibleWidth - rwt.util.Numbers.limit(vComputedFlexibleWidth, vCurrentChild.getMinWidthValue(), vCurrentChild.getMaxWidthValue());
-        }
-
-        // Rounding diff
-        vAllocationDiff = Math.round(vAllocationDiff);
-
-        if (vAllocationDiff === 0)
-        {
-          // *************************************************************
-          // 5a. If the diff is equal zero we must not do anything more
-          //     and do nearly identical the same like in 4a. which means
-          //     to round the calculated flex value and add it to the
-          //     used width so we can fix rounding problems later.
-          // *************************************************************
-          // Rounding values and fixing rounding errors
-          for (vIterator=0; vIterator<vFlexibleChildrenLength; vIterator++)
-          {
-            vCurrentChild = vFlexibleChildren[vIterator];
-
-            vCurrentChild._computedWidthFlexValue = Math.round(vCurrentChild._computedWidthFlexValue);
-            vUsedWidth += vCurrentChild._computedWidthFlexValue;
-          }
-        }
-        else
-        {
-          // *************************************************************
-          // 5b. Find maximum loops of each adjustable child to adjust
-          //     the width until the min/max width limits are reached.
-          // *************************************************************
-          var vUp = vAllocationDiff > 0;
-
-          for (vIterator=vFlexibleChildrenLength-1; vIterator>=0; vIterator--)
-          {
-            vCurrentChild = vFlexibleChildren[vIterator];
-
-            if (vUp)
-            {
-              vAdjust = (vCurrentChild.getMaxWidthValue() || Infinity) - vCurrentChild._computedWidthFlexValue;
-
-              if (vAdjust > 0) {
-                vCurrentChild._allocationLoops = Math.floor(vAdjust / vCurrentChild._computedWidthParsed);
-              }
-              else
-              {
-                rwt.util.Arrays.removeAt(vFlexibleChildren, vIterator);
-
-                vCurrentChild._computedWidthFlexValue = Math.round(vCurrentChild._computedWidthFlexValue);
-                vUsedWidth += Math.round(vCurrentChild._computedWidthFlexValue + vAdjust);
-              }
-            }
-            else
-            {
-              vAdjust = rwt.util.Validation.isValidNumber(vCurrentChild.getMinWidthValue()) ? vCurrentChild._computedWidthFlexValue - vCurrentChild.getMinWidthValue() : vCurrentChild._computedWidthFlexValue;
-
-              if (vAdjust > 0) {
-                vCurrentChild._allocationLoops = Math.floor(vAdjust / vCurrentChild._computedWidthParsed);
-              }
-              else
-              {
-                rwt.util.Arrays.removeAt(vFlexibleChildren, vIterator);
-
-                vCurrentChild._computedWidthFlexValue = Math.round(vCurrentChild._computedWidthFlexValue);
-                vUsedWidth += Math.round(vCurrentChild._computedWidthFlexValue - vAdjust);
-              }
-            }
-          }
-
-          // *************************************************************
-          // 6. Try to reallocate the width between flexible children
-          //    so that the requirements through min/max limits
-          //    are satisfied.
-          // *************************************************************
-          while (vAllocationDiff !== 0 && vFlexibleChildrenLength > 0)
-          {
-            vFlexibleChildrenLength = vFlexibleChildren.length;
-            vMinAllocationLoops = Infinity;
-            vFactorSum = 0;
-
-            // Find minimal loop amount
-            for (vIterator=0; vIterator<vFlexibleChildrenLength; vIterator++)
-            {
-              vMinAllocationLoops = Math.min(vMinAllocationLoops, vFlexibleChildren[vIterator]._allocationLoops);
-              vFactorSum += vFlexibleChildren[vIterator]._computedWidthParsed;
-            }
-
-            // Be sure that the adjustment is not bigger/smaller than diff
-            vCurrentAllocationSum = Math.min(vFactorSum * vMinAllocationLoops, vAllocationDiff);
-
-            // Reducing diff by current sum
-            vAllocationDiff -= vCurrentAllocationSum;
-
-            // Adding sizes to children to adjust
-            for (vIterator=vFlexibleChildrenLength-1; vIterator>=0; vIterator--)
-            {
-              vCurrentChild = vFlexibleChildren[vIterator];
-              vCurrentChild._computedWidthFlexValue += vCurrentAllocationSum / vFactorSum * vCurrentChild._computedWidthParsed;
-
-              if (vCurrentChild._allocationLoops == vMinAllocationLoops)
-              {
-                vCurrentChild._computedWidthFlexValue = Math.round(vCurrentChild._computedWidthFlexValue);
-
-                vUsedWidth += vCurrentChild._computedWidthFlexValue;
-                delete vCurrentChild._allocationLoops;
-                rwt.util.Arrays.removeAt(vFlexibleChildren, vIterator);
-              }
-              else
-              {
-                if (vAllocationDiff === 0)
-                {
-                  vCurrentChild._computedWidthFlexValue = Math.round(vCurrentChild._computedWidthFlexValue);
-                  vUsedWidth += vCurrentChild._computedWidthFlexValue;
-                  delete vCurrentChild._allocationLoops;
-                }
-                else
-                {
-                  vCurrentChild._allocationLoops -= vMinAllocationLoops;
-                }
-              }
-            }
-          }
-        }
-      }
-
-      // *************************************************************
-      // 7. Fix rounding errors
-      // *************************************************************
-      vCurrentChild._computedWidthFlexValue += vAvailWidth - vUsedWidth;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    invalidateChildrenFlexWidth : function() {
-      delete this._childrenFlexWidthComputed;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Compute and return the width needed by all children of this widget
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    computeChildrenNeededWidth : function()
-    {
-      var w = this.getWidget();
-      return rwt.widgets.util.LayoutImpl.prototype.computeChildrenNeededWidth_sum.call(this) + ((w.getVisibleChildrenLength() - 1) * w.getSpacing());
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Things to do and layout when any of the childs changes its outer width.
-     *  Needed by layouts where the children depends on each-other, like flow- or box-layouts.
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {void}
-     */
-    updateSelfOnChildOuterWidthChange : function(vChild)
-    {
-      // if a childrens outer width changes we need to update our accumulated
-      // width of all childrens (used for center or right alignments)
-      this.getWidget()._invalidateAccumulatedChildrenOuterWidth();
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Actions that should be done if the inner width of the widget was changed.
-     *  Normally this includes update to percent values and ranges.
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {var} TODOC
-     */
-    updateChildOnInnerWidthChange : function(vChild)
-    {
-      if (this.getWidget().getHorizontalChildrenAlign() == "center") {
-        vChild.addToLayoutChanges("locationX");
-      }
-
-      // use variables here to be sure to call both methods.
-      var vUpdatePercent = vChild._recomputePercentX();
-      var vUpdateFlex = vChild._recomputeFlexX();
-
-      // inform the caller if there were any notable changes occured
-      return vUpdatePercent || vUpdateFlex;
-    },
-
-
-    /**
-     * Actions that should be done if the inner height of the widget was changed.
-     *  Normally this includes update to percent values and ranges.
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @return {var} TODOC
-     */
-    updateChildOnInnerHeightChange : function(vChild)
-    {
-      // use variables here to be sure to call both methods.
-      var vUpdatePercent = vChild._recomputePercentY();
-      var vUpdateStretch = vChild._recomputeStretchingY();
-
-      // priority to childs internal alignment
-      if ((vChild.getVerticalAlign() || this.getWidget().getVerticalChildrenAlign()) == "middle") {
-        vChild.addToLayoutChanges("locationY");
-      }
-
-      // inform the caller if there were any notable changes occured
-      return vUpdatePercent || vUpdateStretch;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [06] UPDATE LAYOUT ON JOB QUEUE FLUSH
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Invalidate and recompute things because of job in queue (before the rest of job handling will be executed).
-     *
-     * @type member
-     * @param vJobQueue {var} TODOC
-     * @return {void}
-     */
-    updateSelfOnJobQueueFlush : function(vJobQueue)
-    {
-      if (vJobQueue.addChild || vJobQueue.removeChild) {
-        this.getWidget()._invalidateAccumulatedChildrenOuterWidth();
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [07] UPDATE CHILDREN ON JOB QUEUE FLUSH
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Updates children on special jobs
-     *
-     * @type member
-     * @param vQueue {var} TODOC
-     * @return {boolean}
-     */
-    updateChildrenOnJobQueueFlush : function(vQueue)
-    {
-      var vStretchX = false, vStretchY = false;
-      var vWidget = this.getWidget();
-
-      // switching the orientation need updates for stretching on both axis
-      if (vQueue.orientation) {
-        vStretchX = vStretchY = true;
-      }
-
-      // different updates depending from the current orientation (or the new one)
-      if (vQueue.spacing || vQueue.orientation || vQueue.reverseChildrenOrder || vQueue.horizontalChildrenAlign) {
-        vWidget._addChildrenToLayoutQueue("locationX");
-      }
-
-      if (vQueue.verticalChildrenAlign) {
-        vWidget._addChildrenToLayoutQueue("locationY");
-      }
-
-      if (vQueue.stretchChildrenOrthogonalAxis) {
-        vStretchY = true;
-      }
-
-      // if stretching should be reworked reset the previous one and add
-      // a layout job to update the width respectively height.
-      if (vStretchX)
-      {
-        vWidget._recomputeChildrenStretchingX();
-        vWidget._addChildrenToLayoutQueue("width");
-      }
-
-      if (vStretchY)
-      {
-        vWidget._recomputeChildrenStretchingY();
-        vWidget._addChildrenToLayoutQueue("height");
-      }
-
-      return true;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [08] CHILDREN ADD/REMOVE/MOVE HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * This method combines calls of methods which should be done if a widget should be removed from the current layout.
-     *  Needed by layouts where the children depends on each-other, like flow- or box-layouts.
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vIndex {var} TODOC
-     * @return {void}
-     */
-    updateChildrenOnRemoveChild : function(vChild, vIndex)
-    {
-      var w = this.getWidget(), ch = w.getVisibleChildren(), chl = ch.length, chc, i = -1;
-
-      // Fix index to be at the first flex child
-      if (this.getEnableFlexSupport())
-      {
-        for (i=0; i<chl; i++)
-        {
-          chc = ch[i];
-
-          if (chc.getHasFlexX())
-          {
-            vIndex = Math.min(vIndex, i);
-            break;
-          }
-        }
-
-        i = -1;
-      }
-
-      // Handle differently depending on layout mode
-      switch(w.getLayoutMode())
-      {
-        case "right":
-        case "left-reversed":
-          while ((chc = ch[++i]) && i < vIndex) {
-            chc.addToLayoutChanges("locationX");
-          }
-
-          break;
-
-        case "center":
-        case "center-reversed":
-          chc = ch[ ++i ];
-          while( chc ) {
-            chc.addToLayoutChanges("locationX");
-            chc = ch[ ++i ];
-          }
-
-          break;
-
-        default:
-          i += vIndex;
-
-          chc = ch[ ++i ];
-          while( chc ) {
-            chc.addToLayoutChanges("locationX");
-            chc = ch[ ++i ];
-          }
-      }
-    },
-
-
-    /**
-     * This method combines calls of methods which should be done if a child should be moved
-     *  inside the same parent to a new positions.
-     *  Needed by layouts where the children depends on each-other, like flow- or box-layouts.
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vIndex {var} TODOC
-     * @param vOldIndex {var} TODOC
-     * @return {void}
-     */
-    updateChildrenOnMoveChild : function(vChild, vIndex, vOldIndex)
-    {
-      var vChildren = this.getWidget().getVisibleChildren();
-
-      var vStart = Math.min(vIndex, vOldIndex);
-      var vStop = Math.max(vIndex, vOldIndex) + 1;
-      vStop = Math.min(vChildren.length, vStop);
-
-      for (var i=vStart; i<vStop; i++) {
-        vChildren[i].addToLayoutChanges("locationX");
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [09] FLUSH LAYOUT QUEUES OF CHILDREN
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * This method have full control of the order in which the
-     *  registered (or also non-registered) children should be
-     *  layouted on the horizontal axis.
-     *
-     * @type member
-     * @param vChildrenQueue {var} TODOC
-     * @return {void}
-     */
-    flushChildrenQueue : function(vChildrenQueue)
-    {
-      var w = this.getWidget(), ch = w.getVisibleChildren(), chl = ch.length, chc, i;
-
-      // This block is needed for flex handling and
-      // will inform flex children if there was any
-      // change to the other content
-      if (this.getEnableFlexSupport())
-      {
-        this.invalidateChildrenFlexWidth();
-
-        for (i=0; i<chl; i++)
-        {
-          chc = ch[i];
-
-          if (chc.getHasFlexX())
-          {
-            chc._computedWidthValue = null;
-
-            if (chc._recomputeBoxWidth())
-            {
-              chc._recomputeOuterWidth();
-              chc._recomputeInnerWidth();
-            }
-
-            vChildrenQueue[chc.toHashCode()] = chc;
-            chc._layoutChanges.width = true;
-          }
-        }
-      }
-
-      switch(w.getLayoutMode())
-      {
-        case "right":
-        case "left-reversed":
-          // find the last child which has a layout request
-          for (var i=chl-1; i>=0&&!vChildrenQueue[ch[i].toHashCode()]; i--) {}
-
-          // layout all children before this last child
-          for (var j=0; j<=i; j++) {
-            w._layoutChild(chc = ch[j]);
-          }
-
-          break;
-
-        case "center":
-        case "center-reversed":
-          // re-layout all children
-          i = -1;
-
-          chc = ch[++i];
-          while( chc ) {
-            w._layoutChild(chc);
-            chc = ch[++i];
-          }
-
-          break;
-
-        default:
-          // layout all childs from the first child
-          // with an own layout request to the end
-          i = -1;
-          var changed = false;
-
-          chc = ch[++i];
-          while( chc ) {
-            if (changed || vChildrenQueue[chc.toHashCode()])
-            {
-              w._layoutChild(chc);
-              changed = true;
-            }
-            chc = ch[++i];
-          }
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      [10] LAYOUT CHILD
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * This is called from rwt.widgets.base.Widget and  it's task is to apply the layout
-     *  (excluding border and padding) to the child.
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vJobs {var} TODOC
-     * @return {void}
-     */
-    layoutChild : function(vChild, vJobs)
-    {
-      this.layoutChild_sizeX(vChild, vJobs);
-      this.layoutChild_sizeY(vChild, vJobs);
-
-      this.layoutChild_sizeLimitX(vChild, vJobs);
-      this.layoutChild_sizeLimitY(vChild, vJobs);
-
-      this.layoutChild_locationX(vChild, vJobs);
-      this.layoutChild_locationY(vChild, vJobs);
-
-      this.layoutChild_marginX(vChild, vJobs);
-      this.layoutChild_marginY(vChild, vJobs);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vJobs {var} TODOC
-     * @return {void}
-     * @signature function(vChild, vJobs)
-     */
-    layoutChild_sizeX : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml|newmshtml|opera|webkit" : function(vChild, vJobs)
-      {
-        if (vJobs.initial || vJobs.width || vJobs.minWidth || vJobs.maxWidth)
-        {
-          if (vChild._isWidthEssential() && (!vChild._computedWidthTypeNull || !vChild._computedMinWidthTypeNull || !vChild._computedMaxWidthTypeNull)) {
-            vChild._renderRuntimeWidth(vChild.getBoxWidth());
-          } else {
-            vChild._resetRuntimeWidth();
-          }
-        }
-      },
-
-      "default" : function(vChild, vJobs)
-      {
-        if (vJobs.initial || vJobs.width)
-        {
-          if (vChild._isWidthEssential() && !vChild._computedWidthTypeNull) {
-            vChild._renderRuntimeWidth(vChild.getWidthValue());
-          } else {
-            vChild._resetRuntimeWidth();
-          }
-        }
-      }
-    }),
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vJobs {var} TODOC
-     * @return {void}
-     * @signature function(vChild, vJobs)
-     */
-    layoutChild_sizeY : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml|newmshtml|opera|webkit" : function(vChild, vJobs)
-      {
-        if (vJobs.initial || vJobs.height || vJobs.minHeight || vJobs.maxHeight)
-        {
-          if ((vChild._isHeightEssential() && (!vChild._computedHeightTypeNull || !vChild._computedMinHeightTypeNull || !vChild._computedMaxHeightTypeNull)) || (vChild.getAllowStretchY() && this.getWidget().getStretchChildrenOrthogonalAxis())) {
-            vChild._renderRuntimeHeight(vChild.getBoxHeight());
-          } else {
-            vChild._resetRuntimeHeight();
-          }
-        }
-      },
-
-      "default" : function(vChild, vJobs)
-      {
-        if (vJobs.initial || vJobs.height)
-        {
-          if (vChild._isHeightEssential() && !vChild._computedHeightTypeNull) {
-            vChild._renderRuntimeHeight(vChild.getHeightValue());
-          } else {
-            vChild._resetRuntimeHeight();
-          }
-        }
-      }
-    }),
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vJobs {var} TODOC
-     * @return {void}
-     */
-    layoutChild_locationX : function(vChild, vJobs)
-    {
-      var vWidget = this.getWidget();
-
-      // handle first child
-      if (vWidget.getFirstVisibleChild() == vChild)
-      {
-        switch(vWidget.getLayoutMode())
-        {
-          case "right":
-          case "left-reversed":
-            var vPos = vWidget.getPaddingRight() + vWidget.getAccumulatedChildrenOuterWidth() - vChild.getOuterWidth();
-            break;
-
-          case "center":
-          case "center-reversed":
-            var vPos = vWidget.getPaddingLeft() + Math.round((vWidget.getInnerWidth() - vWidget.getAccumulatedChildrenOuterWidth()) / 2);
-            break;
-
-          default:
-            var vPos = vWidget.getPaddingLeft();
-        }
-      }
-
-      // handle any following child
-      else
-      {
-        var vPrev = vChild.getPreviousVisibleSibling();
-
-        switch(vWidget.getLayoutMode())
-        {
-          case "right":
-          case "left-reversed":
-            var vPos = vPrev._cachedLocationHorizontal - vChild.getOuterWidth() - vWidget.getSpacing();
-            break;
-
-          default:
-            var vPos = vPrev._cachedLocationHorizontal + vPrev.getOuterWidth() + vWidget.getSpacing();
-        }
-      }
-
-      // store for next sibling
-      vChild._cachedLocationHorizontal = vPos;
-
-      // apply styles
-      switch(vWidget.getLayoutMode())
-      {
-        case "right":
-        case "right-reversed":
-        case "center-reversed":
-          // add relative positions (like 'position:relative' in css)
-          vPos += !vChild._computedRightTypeNull ? vChild.getRightValue() : !vChild._computedLeftTypeNull ? -(vChild.getLeftValue()) : 0;
-
-          vChild._resetRuntimeLeft();
-          vChild._renderRuntimeRight(vPos);
-          break;
-
-        default:
-          // add relative positions (like 'position:relative' in css)
-          vPos += !vChild._computedLeftTypeNull ? vChild.getLeftValue() : !vChild._computedRightTypeNull ? -(vChild.getRightValue()) : 0;
-
-          vChild._resetRuntimeRight();
-          vChild._renderRuntimeLeft(vPos);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vChild {var} TODOC
-     * @param vJobs {var} TODOC
-     * @return {void}
-     */
-    layoutChild_locationY : function(vChild, vJobs)
-    {
-      var vWidget = this.getWidget();
-
-      // special stretching support
-      if( rwt.client.Client.isGecko() )
-      {
-        if (vChild.getAllowStretchY() && vWidget.getStretchChildrenOrthogonalAxis() && vChild._computedHeightTypeNull)
-        {
-          vChild._renderRuntimeTop(vWidget.getPaddingTop() || 0);
-          vChild._renderRuntimeBottom(vWidget.getPaddingBottom() || 0);
-
-          return;
-        }
-      }
-
-      // priority to childs internal alignment
-      var vAlign = vChild.getVerticalAlign() || vWidget.getVerticalChildrenAlign();
-
-      // handle middle alignment
-      var vPos = vAlign == "middle" ? Math.round((vWidget.getInnerHeight() - vChild.getOuterHeight()) / 2) : 0;
-
-      // the bottom alignment use the real 'bottom' styleproperty to
-      // use the best available method in modern browsers
-      if (vAlign == "bottom")
-      {
-        // add parent padding
-        vPos += vWidget.getPaddingBottom();
-
-        // relative positions (like 'position:relative' in css)
-        if (!vChild._computedBottomTypeNull) {
-          vPos += vChild.getBottomValue();
-        } else if (!vChild._computedTopTypeNull) {
-          vPos -= vChild.getTopValue();
-        }
-
-        // apply styles
-        vChild._resetRuntimeTop();
-        vChild._renderRuntimeBottom(vPos);
-      }
-      else
-      {
-        // add parent padding
-        vPos += vWidget.getPaddingTop();
-
-        // relative positions (like 'position:relative' in css)
-        if (!vChild._computedTopTypeNull) {
-          vPos += vChild.getTopValue();
-        } else if (!vChild._computedBottomTypeNull) {
-          vPos -= vChild.getBottomValue();
-        }
-
-        // apply styles
-        vChild._resetRuntimeBottom();
-        vChild._renderRuntimeTop(vPos);
-      }
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * A multi-purpose widget used by many more complex widgets.
- *
- * The intended purpose of rwt.widgets.base.Atom is to easily align the common icon-text
- * combination in different ways.
- *
- * This is useful for all types of buttons, menuentries, tooltips, ...
- *
- * @appearance atom
- */
-rwt.qx.Class.define("rwt.widgets.base.Atom",
-{
-  extend : rwt.widgets.base.BoxLayout,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  /**
-   * @param vLabel {String} label of the atom
-   * @param vIcon {String?null} Icon URL of the atom
-   * @param vIconWidth {Integer?null} desired width of the icon (the icon will be scaled to this size)
-   * @param vIconHeight {Integer?null} desired height of the icon (the icon will be scaled to this size)
-   * @param vFlash {qx.ui.embed.Flash?null} optional flash animation for the Atom. Needs valid width and height values.
-   */
-  construct : function(vLabel, vIcon, vIconWidth, vIconHeight, vFlash)
-  {
-    this.base(arguments);
-
-    // Disable flex support
-    this.getLayoutImpl().setEnableFlexSupport(false);
-
-    // Apply constructor arguments
-    if (vLabel !== undefined) {
-      this.setLabel(vLabel);
-    }
-
-    // Simple flash wrapper
-    if (rwt.qx.Class.isDefined("qx.ui.embed.Flash") && vFlash != null && vIconWidth != null && vIconHeight != null && qx.ui.embed.Flash.getPlayerVersion().getMajor() > 0)
-    {
-      this._flashMode = true;
-
-      this.setIcon(vFlash);
-    }
-    else if (vIcon != null)
-    {
-      this.setIcon(vIcon);
-    }
-
-    if (vIcon || vFlash)
-    {
-      if (vIconWidth != null) {
-        this.setIconWidth(vIconWidth);
-      }
-
-      if (vIconHeight != null) {
-        this.setIconHeight(vIconHeight);
-      }
-    }
-
-    // Property init
-    this.initWidth();
-    this.initHeight();
-  },
-
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      REFINED PROPERTIES
-    ---------------------------------------------------------------------------
-    */
-
-    orientation :
-    {
-      refine : true,
-      init : "horizontal"
-    },
-
-    allowStretchX :
-    {
-      refine : true,
-      init : false
-    },
-
-    allowStretchY :
-    {
-      refine : true,
-      init : false
-    },
-
-    appearance :
-    {
-      refine : true,
-      init : "atom"
-    },
-
-    stretchChildrenOrthogonalAxis :
-    {
-      refine : true,
-      init : false
-    },
-
-    width :
-    {
-      refine : true,
-      init : "auto"
-    },
-
-    height :
-    {
-      refine : true,
-      init : "auto"
-    },
-
-    horizontalChildrenAlign :
-    {
-      refine : true,
-      init : "center"
-    },
-
-    verticalChildrenAlign :
-    {
-      refine : true,
-      init : "middle"
-    },
-
-    spacing :
-    {
-      refine : true,
-      init : 4
-    },
-
-
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      OWN PROPERTIES
-    ---------------------------------------------------------------------------
-    */
-
-    /** The label/caption/text of the rwt.widgets.base.Atom instance */
-    label :
-    {
-      apply : "_applyLabel",
-      nullable : true,
-      dispose : true,
-      check : "Label"
-    },
-
-
-    /** Any URI String supported by rwt.widgets.base.Image to display a icon */
-    icon :
-    {
-      check : "String",
-      apply : "_applyIcon",
-      nullable : true,
-      themeable : true
-    },
-
-
-    /**
-     * Any URI String supported by rwt.widgets.base.Image to display a disabled icon.
-     * <p>
-     * If not set the normal icon is shown transparently.
-     */
-    disabledIcon :
-    {
-      check : "String",
-      apply : "_applyDisabledIcon",
-      nullable : true,
-      themeable : true
-    },
-
-
-    /**
-     * Configure the visibility of the sub elements/widgets.
-     *  Possible values: both, text, icon, none
-     */
-    show :
-    {
-      init : "both",
-      check : [ "both", "label", "icon", "none"],
-      themeable : true,
-      nullable : true,
-      inheritable : true,
-      apply : "_applyShow",
-      event : "changeShow"
-    },
-
-
-    /**
-     * The position of the icon in relation to the text.
-     *  Only useful/needed if text and icon is configured and 'show' is configured as 'both' (default)
-     */
-    iconPosition :
-    {
-      init   : "left",
-      check : [ "top", "right", "bottom", "left" ],
-      themeable : true,
-      apply : "_applyIconPosition"
-    },
-
-
-    /**
-     * The width of the icon.
-     *  If configured, this makes rwt.widgets.base.Atom a little bit faster as it does not need to wait until the image loading is finished.
-     */
-    iconWidth :
-    {
-      check : "Integer",
-      themeable : true,
-      apply : "_applyIconWidth",
-      nullable : true
-    },
-
-
-    /**
-     * The height of the icon
-     *  If configured, this makes rwt.widgets.base.Atom a little bit faster as it does not need to wait until the image loading is finished.
-     */
-    iconHeight :
-    {
-      check : "Integer",
-      themeable : true,
-      apply : "_applyIconHeight",
-      nullable : true
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      SUB WIDGETS
-    ---------------------------------------------------------------------------
-    */
-
-    _flashMode : false,
-
-    _labelObject : null,
-    _iconObject : null,
-
-
-    /**
-     * Creates the label object
-     *
-     * @type member
-     */
-    _createLabel : function()
-    {
-      var l = this._labelObject = new rwt.widgets.base.Label(this.getLabel());
-
-      l.setAnonymous(true);
-// RAP [rst] qx bug 455 http://bugzilla.qooxdoo.org/show_bug.cgi?id=455
-//      l.setCursor("default");
-
-      this.addAt(l, this._iconObject ? 1 : 0);
-    },
-
-
-    /**
-     * Creates the icon object
-     *
-     * @type member
-     */
-    _createIcon : function()
-    {
-      if (this._flashMode && rwt.qx.Class.isDefined("qx.ui.embed.Flash")) {
-        var i = this._iconObject = new qx.ui.embed.Flash(this.getIcon());
-      } else {
-        var i = this._iconObject = new rwt.widgets.base.Image();
-      }
-
-      i.setAnonymous(true);
-
-      var width = this.getIconWidth();
-      if (width !== null) {
-        this._iconObject.setWidth(width);
-      }
-
-      var height = this.getIconWidth();
-      if (height !== null) {
-        this._iconObject.setHeight(height);
-      }
-
-      this._updateIcon();
-      this.addAt(i, 0);
-    },
-
-
-    /**
-     * updates the icon
-     *
-     * @type member
-     */
-    _updateIcon : function() {
-      var icon = this.getIcon();
-      // NOTE: We have to check whether the properties "icon" and "disabledIcon"
-      //       exist, because some child classes remove them.
-      if( this._iconObject && this.getIcon && this.getDisabledIcon ) {
-        var disabledIcon = this.getDisabledIcon();
-        if( disabledIcon ) {
-          if( this.getEnabled() ) {
-            if( icon ) {
-              this._iconObject.setSource( icon );
-            } else {
-              this._iconObject.resetSource();
-            }
-          } else {
-            if( disabledIcon ) {
-              this._iconObject.setSource( disabledIcon );
-            } else {
-              this._iconObject.resetSource();
-            }
-          }
-          this._iconObject.setEnabled( true );
-        } else {
-          if( icon ) {
-            this._iconObject.setSource( icon );
-          } else {
-            this._iconObject.resetSource();
-          }
-          this._iconObject.resetEnabled();
-        }
-      }
-    },
-
-
-    /**
-     * Get the label widget of the atom.
-     *
-     * @type member
-     * @return {rwt.widgets.base.Label} The label widget of the atom.
-     */
-    getLabelObject : function() {
-      return this._labelObject;
-    },
-
-
-    /**
-     * Get the icon widget of the atom.
-     *
-     * @type member
-     * @return {rwt.widgets.base.Image|qx.ui.embed.Flash} The icon widget of the atom.
-     */
-    getIconObject : function() {
-      return this._iconObject;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      MODIFIERS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Applies the icon position
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyIconPosition : function(value, old)
-    {
-      switch(value)
-      {
-        case "top":
-        case "bottom":
-          this.setOrientation("vertical");
-          this.setReverseChildrenOrder(value == "bottom");
-          break;
-
-        default:
-          this.setOrientation("horizontal");
-          this.setReverseChildrenOrder(value == "right");
-          break;
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyShow : function(value, old)
-    {
-      this._handleIcon();
-      this._handleLabel();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyLabel : function( value, old ) {
-      if( this._labelObject ) {
-        if( value ) {
-          this._labelObject.setText( value );
-        } else {
-          this._labelObject.resetText();
-        }
-      }
-      this._handleLabel();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyIcon : function(value, old)
-    {
-      this._updateIcon();
-      this._handleIcon();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyDisabledIcon : function(value, old)
-    {
-      this._updateIcon();
-      this._handleIcon();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyIconWidth : function(value, old) {
-      if (this._iconObject) {
-        this._iconObject.setWidth(value);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyIconHeight : function(value, old) {
-      if (this._iconObject) {
-        this._iconObject.setHeight(value);
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      HANDLER
-    ---------------------------------------------------------------------------
-    */
-
-    _iconIsVisible : false,
-    _labelIsVisible : false,
-
-
-    /**
-     * Handle label
-     *
-     * @type member
-     * @return {void}
-     */
-    _handleLabel : function() {
-      switch( this.getShow() ) {
-        case "label":
-        case "both":
-        case "inherit":
-          this._labelIsVisible = !!this.getLabel();
-          break;
-        default:
-          this._labelIsVisible = false;
-      }
-      if( this._labelIsVisible ) {
-        if( this._labelObject ) {
-          this._labelObject.setDisplay( true );
-        } else {
-          this._createLabel();
-        }
-      } else if( this._labelObject ) {
-        this._labelObject.setDisplay( false );
-      }
-    },
-
-
-    /**
-     * handle icon
-     *
-     * @type member
-     * @return {void}
-     */
-    _handleIcon : function() {
-      switch( this.getShow() ) {
-        case "icon":
-        case "both":
-        case "inherit":
-          this._iconIsVisible = !!this.getIcon();
-          break;
-        default:
-          this._iconIsVisible = false;
-      }
-      if( this._iconIsVisible ) {
-        if( this._iconObject ) {
-          this._iconObject.setDisplay( true );
-        } else {
-          this._createIcon();
-        }
-      } else if( this._iconObject ) {
-        this._iconObject.setDisplay( false );
-      }
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function() {
-    this._disposeObjects("_iconObject", "_labelObject");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.Label", {
-
-  factory : function( properties ) {
-    var styleMap = rwt.remote.HandlerUtil.createStyleMap( properties.style );
-    styleMap.MARKUP_ENABLED = properties.markupEnabled;
-    var result = new rwt.widgets.Label( styleMap );
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "text",
-    "mnemonicIndex",
-    "image",
-    "alignment",
-    "appearance",
-    "leftMargin",
-    "topMargin",
-    "rightMargin",
-    "bottomMargin",
-    "backgroundGradient"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    "backgroundGradient" : rwt.remote.HandlerUtil.getBackgroundGradientHandler()
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * The Label widget displays plain text or HTML text.
- *
- * Most complex qooxdoo widgets use instances of Label to display text.
- * The label supports auto sizing and internationalization.
- *
- * @appearance label
- */
-rwt.qx.Class.define("rwt.widgets.base.Label",
-{
-  extend : rwt.widgets.base.Terminator,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  /**
-   * @param text {String} The text of the label (see property {@link #text}).
-   * @param mnemonic {String} The mnemonic of the label (see property {@link #mnemonic}).
-   * @param mode {String} The mode of the label (see property {@link #mode}).
-   */
-// TODO [rh] unused: replacement for below (no qx code calls 3-args ctor)
-  construct : function(text)
-//  construct : function(text, mnemonic, mode)
-  {
-    this.base(arguments);
-
-    if (text != null) {
-      this.setText(text);
-    }
-
-// TODO [rh] unused
-/*
-     if (mode != null) {
-      this.setMode(mode);
-    }
-
-    if (text != null) {
-      this.setText(text);
-    }
-
-    if (mnemonic != null) {
-      this.setMnemonic(mnemonic);
-    }
-*/
-
-    // Property init
-    this.initWidth();
-    this.initHeight();
-    this.initSelectable();
-    this.initCursor();
-    this.initWrap();
-  },
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    appearance :
-    {
-      refine : true,
-      init : "label"
-    },
-
-    width :
-    {
-      refine : true,
-      init : "auto"
-    },
-
-    height :
-    {
-      refine : true,
-      init : "auto"
-    },
-
-    allowStretchX :
-    {
-      refine : true,
-      init : false
-    },
-
-    allowStretchY :
-    {
-      refine : true,
-      init : false
-    },
-
-    selectable :
-    {
-      refine : true,
-      init : false
-    },
-
-// RAP [rst] qx bug 455 http://bugzilla.qooxdoo.org/show_bug.cgi?id=455
-//    cursor :
-//    {
-//      refine : true,
-//      init : "default"
-//    },
-
-
-
-    /**
-     * The text of the label. How the text is interpreted depends on the value of the
-     * property {@link #mode}.
-     */
-    text :
-    {
-      apply : "_applyText",
-      init : "",
-      dispose : true,
-// TODO [rh] unused
-//      event : "changeText",
-      check : "Label"
-    },
-
-
-    /**
-     * Whether the text should be automatically wrapped into the next line
-     */
-    wrap :
-    {
-      check : "Boolean",
-      init : false,
-      nullable : true,
-      apply : "_applyWrap"
-    },
-
-
-    /**
-     * The alignment of the text inside the box
-     */
-    textAlign :
-    {
-      check : [ "left", "center", "right", "justify" ],
-      nullable : true,
-      themeable : true,
-      apply : "_applyTextAlign"
-    },
-
-
-    /**
-     * Whether an ellipsis symbol should be rendered if there is not enough room for the full text.
-     *
-     * Please note: If enabled this conflicts with a custom overflow setting.
-     */
-    textOverflow :
-    {
-      check : "Boolean",
-      init : true
-// TODO [rh] unused: removed as the corresponding impl was also removed
-//      apply : "_applyText"
-    },
-
-    /**
-     * Set how the label text should be interpreted
-     *
-     * <ul>
-     *   <li><code>text</code> will set the text verbatim. Leading and trailing white space will be reserved.</li>
-     *   <li><code>html</code> will interpret the label text as html.</li>
-     *   <li><code>auto</code> will try to guess whether the text represents an HTML string or plain text.
-     *       This is how older qooxdoo versions treated the text.
-     *   </li>
-     * <ul>
-     */
-    mode :
-    {
-      check : [ "html", "text", "auto" ],
-      init : "auto"
-// TODO [rh] unused: replace with empty get/setMode functions
-//      apply : "_applyText"
-    } // , TODO [rh] unused: removed trailing comma, see below
-
-
-    /** A single character which will be underlined inside the text. */
-// TODO [rh] unused
-//    mnemonic :
-//    {
-//      check : "String",
-//      nullable : true,
-//      apply : "_applyMnemonic"
-//    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    _content : "",
-
-    /*
-    ---------------------------------------------------------------------------
-      TEXTALIGN SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    _applyTextAlign : function( value, old ) {
-      if( value === null ) {
-        this.removeStyleProperty( "textAlign" );
-      } else {
-        this.setStyleProperty( "textAlign", value );
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      FONT SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    _applyFont : function(value, old) {
-      this._styleFont( value );
-    },
-
-
-    /**
-     * Apply the font to the label.
-     *
-     * @type member
-     * @param font {rwt.html.Font} new font.
-     */
-    _styleFont : function( font ) {
-      this._invalidatePreferredInnerDimensions();
-      if( font ) {
-        font.render( this );
-      } else {
-        rwt.html.Font.reset( this );
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      TEXT COLOR SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    _applyTextColor : function(value, old) {
-      this._styleTextColor( value );
-    },
-
-    /**
-     * Apply the text color to the label.
-     *
-     * @type member
-     * @param value {String} any acceptable CSS color
-     */
-    _styleTextColor : function( value ) {
-      if( value ) {
-        this.setStyleProperty( "color", value );
-      } else {
-        this.removeStyleProperty( "color" );
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      WRAP SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    _applyWrap : function( value, old ) {
-      if( value == null ) {
-        this.removeStyleProperty( "whiteSpace" );
-      } else {
-        this.setStyleProperty( "whiteSpace", value ? "normal" : "nowrap" );
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      TEXT HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyText : function(value, old) {
-//      qx.locale.Manager.getInstance().connect(this._syncText, this, this.getText());
-      // DONT USE 'value' as this func is misued by other properties than text
-      this._syncText( this.getText() );
-    },
-
-
-    /**
-     * Apply a new label text
-     *
-     * @param text {String} new label text
-     */
-    _syncText : function(text) {
-      this._content = text;
-
-      if (this._isCreated) {
-        this._renderContent();
-      }
-    },
-
-
-    /*
-    ---------------------------------------------------------------------------
-      PREFERRED DIMENSIONS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Computes the needed dimension for the current text.
-     *
-     * @type member
-     */
-    _computeObjectNeededDimensions : function() {
-      var fontProps = this._styleProperties;
-      var calc = rwt.widgets.util.FontSizeCalculation;
-      var dimensions = calc.computeTextDimensions( this._content, fontProps );
-      this._cachedPreferredInnerWidth = dimensions[ 0 ];
-      this._cachedPreferredInnerHeight = dimensions[ 1 ];
-    },
-
-
-    /**
-     * overridden
-     * @return {Integer}
-     */
-    _computePreferredInnerWidth : function()
-    {
-      this._computeObjectNeededDimensions();
-      return this._cachedPreferredInnerWidth;
-    },
-
-
-    /**
-     * overridden
-     * @return {Integer}
-     */
-    _computePreferredInnerHeight : function()
-    {
-      this._computeObjectNeededDimensions();
-      return this._cachedPreferredInnerHeight;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      LAYOUT APPLY
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Creates an HTML fragment for the overflow symbol
-     *
-     * @param html {String} html string of the label
-     * @param inner {Integer} inner width of the label
-     * @return {String} html Fragment of the label with overflow symbol
-     */
-// TODO [rh] unused as not called anymore from replaced _postApply
-//    __patchTextOverflow : function(html, inner) {
-//      return (
-//        "<div style='float:left;width:" + (inner-14) +
-//        "px;overflow:hidden;white-space:nowrap'>" + html +
-//        "</div><span style='float:left'>&hellip;</span>"
-//      );
-//    },
-
-
-    // TODO [rh] replacement for original function below
-    _postApply : function() {
-      var html = this._content;
-      var element = this._getTargetNode();
-      if( html == null ) {
-        element.innerHTML = "";
-      } else {
-        var style = element.style;
-        if( !this.getWrap() ) {
-          if( this.getInnerWidth() < this.getPreferredInnerWidth() ) {
-            style.overflow = "hidden";
-          } else {
-            style.overflow = "";
-          }
-        }
-        element.innerHTML = html;
-      }
-    }
-
-    /*
-    // overridden
-    _postApply : function()
-    {
-      var html = this._content;
-      var element = this._getTargetNode();
-
-      if (html == null)
-      {
-        element.innerHTML = "";
-        return;
-      }
-
-      if (this.getMnemonic())
-      {
-        if (this._mnemonicTest.test(html))
-        {
-          html = RegExp.$1 + "<span style=\"text-decoration:underline\">" + RegExp.$7 + "</span>" + RegExp.rightContext;
-          this._isHtml = true;
-        }
-        else
-        {
-          html += " (" + this.getMnemonic() + ")";
-        }
-      }
-
-      var style = element.style;
-
-      if (this.getTextOverflow() && !this.getWrap())
-      {
-        if (this.getInnerWidth() < this.getPreferredInnerWidth())
-        {
-          style.overflow = "hidden";
-
-          if (rwt.util.Variant.isSet("qx.client", "mshtml|webkit"))
-          {
-            style.textOverflow = "ellipsis";
-          }
-          else if (rwt.util.Variant.isSet("qx.client", "opera"))
-          {
-            style.OTextOverflow = "ellipsis";
-          }
-          else
-          {
-            html = this.__patchTextOverflow(html, this.getInnerWidth());
-            this._isHtml = true;
-          }
-        }
-        else
-        {
-          style.overflow = "";
-
-          if (rwt.util.Variant.isSet("qx.client", "mshtml|webkit"))
-          {
-            style.textOverflow = "";
-          }
-          else if (rwt.util.Variant.isSet("qx.client", "opera"))
-          {
-            style.OTextOverflow = "";
-          }
-        }
-      }
-
-      if (this._isHtml)
-      {
-        element.innerHTML = html;
-      }
-      else
-      {
-        element.innerHTML = "";
-        rwt.html.Element.setTextContent(element, html);
-      }
-    }
-      */
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * This widget represents an image.
- *
- * @appearance image
- */
-rwt.qx.Class.define("rwt.widgets.base.Image",
-{
-  extend : rwt.widgets.base.Terminator,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  /**
-   * @param vSource {String} URL of the image
-   * @param vWidth {Integer|String ? "auto"} definition of the width of the image
-   * @param vHeight {Integer|String ? "auto"} definition of the height of the image
-   */
-  construct : function(vSource, vWidth, vHeight)
-  {
-    this.base(arguments);
-
-    this._blank = rwt.remote.Server.RESOURCE_PATH + "static/image/blank.gif";
-
-    // Source
-    if (vSource != null) {
-      this.setSource(vSource);
-    }
-
-    // Dimensions
-    if (vWidth != null) {
-      this.setWidth(vWidth);
-    } else {
-      this.initWidth();
-    }
-
-    if (vHeight != null) {
-      this.setHeight(vHeight);
-    } else {
-      this.initHeight();
-    }
-
-    // Property init
-    this.initSelectable();
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     EVENTS
-  *****************************************************************************
-  */
-
-  events : {
-    /** Fires if an image could not be preloaded  */
-    "error" : "rwt.event.Event"
-  },
-
-
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      REFINED PROPERTIES
-    ---------------------------------------------------------------------------
-    */
-
-    allowStretchX :
-    {
-      refine : true,
-      init : false
-    },
-
-    allowStretchY :
-    {
-      refine : true,
-      init : false
-    },
-
-    selectable :
-    {
-      refine : true,
-      init : false
-    },
-
-    width :
-    {
-      refine : true,
-      init : "auto"
-    },
-
-    height :
-    {
-      refine : true,
-      init : "auto"
-    },
-
-    appearance :
-    {
-      refine : true,
-      init : "image"
-    },
-
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      OWN PROPERTIES
-    ---------------------------------------------------------------------------
-    */
-
-    /** The source uri of the image. */
-    source :
-    {
-      check : "String",
-      apply : "_applySource",
-      event : "changeSource",
-      nullable : true,
-      themeable : true
-    },
-
-
-    /** The assigned preloader instance of the image. */
-    preloader :
-    {
-      check : "rwt.html.ImagePreloader",
-      apply : "_applyPreloader",
-      nullable : true
-    },
-
-
-    /**
-     * The loading status.
-     *
-     *  True if the image is loaded correctly. False if no image is loaded
-     *  or the one that should be loaded is currently loading or not available.
-     */
-    loaded :
-    {
-      check : "Boolean",
-      init : false,
-      apply : "_applyLoaded"
-    },
-
-
-    /** Should the image be maxified in it's own container? */
-    resizeToInner :
-    {
-      check : "Boolean",
-      init : false
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      EVENT MAPPERS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Listener method of the "load" event - sets "loaded" property
-     *
-     * @type member
-     * @return {void}
-     */
-    _onload : function() {
-      this.setLoaded(true);
-    },
-
-    /*
-    ---------------------------------------------------------------------------
-      DISPLAYBLE HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Registers an image at the image manager (rwt.html.ImageManager) and increases the
-     * visible counter
-     *
-     * @type member
-     * @return {void}
-     */
-    _beforeAppear : function()
-    {
-      var source = this.getSource();
-      if (source)
-      {
-        rwt.html.ImageManager.getInstance().show(source);
-        this._registeredAsVisible = true;
-      }
-
-      return this.base(arguments);
-    },
-
-
-    /**
-     * Registers an image at the image manager (rwt.html.ImageManager) and reduces the
-     * visible counter
-     *
-     * @type member
-     * @return {void}
-     */
-    _beforeDisappear : function()
-    {
-      var source = this.getSource();
-      if (source && this._registeredAsVisible)
-      {
-        rwt.html.ImageManager.getInstance().hide(source);
-        delete this._registeredAsVisible;
-      }
-
-      return this.base(arguments);
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      MODIFIERS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applySource : function(value, old)
-    {
-      var imageMgr = rwt.html.ImageManager.getInstance();
-
-      if (old)
-      {
-        imageMgr.remove(old);
-
-        if (this._registeredAsVisible)
-        {
-          imageMgr.hide(old);
-          delete this._registeredAsVisible;
-        }
-      }
-
-      if (value)
-      {
-        imageMgr.add(value);
-
-        if (this.isSeeable())
-        {
-          this._registeredAsVisible = true;
-          imageMgr.show(value);
-        }
-      }
-
-      if (this.isCreated()) {
-        this._connect();
-      }
-    },
-
-    /**
-     * Connects a callback method to the value manager to ensure
-     * that changes to the source are handled by the image instance
-     *
-     * @type member
-     * @return {void}
-     */
-    _connect : function() {
-      this._syncSource( this.getSource() );
-    },
-
-    /**
-     * Sets the preloader property (with creating a new instance)
-     *
-     * @param value {String} source of image instance
-     * @return {void}
-     */
-    _syncSource : function(value)
-    {
-      if (value === null)
-      {
-        this.setPreloader(null);
-      }
-      else
-      {
-        var preloader = rwt.html.ImagePreloaderManager.getInstance().create(value);
-        this.setPreloader(preloader);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyPreloader : function(value, old)
-    {
-      if (old)
-      {
-        // remove event connection
-        old.removeEventListener("load", this._onload, this);
-      }
-
-      if (value)
-      {
-        // Omit  here, otherwise the later setLoaded(true)
-        // will not be executed (prevent recursion)
-        this.setLoaded(false);
-
-        if( !value.isErroneous() && value.isLoaded() ) {
-          this.setLoaded(true);
-        } else {
-          value.addEventListener( "load", this._onload, this );
-        }
-      }
-      else
-      {
-        this.setLoaded(false);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyLoaded : function(value, old)
-    {
-      if (value && this.isCreated())
-      {
-        this._renderContent();
-      }
-      else if (!value)
-      {
-        this._invalidatePreferredInnerWidth();
-        this._invalidatePreferredInnerHeight();
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyElement : function(value, old)
-    {
-      if (value)
-      {
-        if (!this._image)
-        {
-          try
-          {
-            this._createImageNode();
-            this._image.style.border = "0 none";
-            this._image.style.verticalAlign = "top";
-            this._image.alt = "";
-            this._image.title = "";
-          }
-          catch(ex) {
-            throw new Error( "Failed while creating image #1 " + ex );
-          }
-
-          this._imageNodeCreated();
-        }
-
-        value.appendChild(this._image);
-      }
-
-      // call widget implmentation
-      this.base(arguments, value, old);
-
-      if (value && this.getSource()) {
-        this._connect();
-      }
-    },
-
-    // Create Image-Node
-    // Webkit has problems with "new Image". Maybe related to "new Function" with
-    // is also not working correctly.
-    _createImageNode : rwt.util.Variant.select( "qx.client", {
-      "webkit" : function() {
-        this._image = document.createElement("img");
-      },
-      "default" : function() {
-        this._image = new Image();
-      }
-    } ),
-
-    _imageNodeCreated : rwt.util.Variant.select( "qx.client", {
-      "gecko|opera|webkit" : function() {
-        this._styleEnabled();
-      },
-      "default": rwt.util.Functions.returnTrue
-    } ),
-
-    /*
-    ---------------------------------------------------------------------------
-      CLIENT OPTIMIZED MODIFIERS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Internal method (called by the layout engine)
-     * Applies the dimensions and then sets the source of the image instance
-     *
-     * @type member
-     * @return {void}
-     */
-    _postApply : function()
-    {
-      this._postApplyDimensions();
-      this._updateContent();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     * @return {void}
-     * @signature function(value, old)
-     */
-    _applyEnabled : function(value, old)
-    {
-      if (this._image) {
-        this._styleEnabled();
-      }
-
-      return this.base(arguments, value, old);
-    },
-
-
-    /**
-     * Updates the source of the image instance
-     *
-     * @type member
-     * @return {void}
-     * @signature function()
-     */
-    _updateContent : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function()
-      {
-        var i = this._image;
-        var pl = this.getPreloader();
-
-        var source = pl && pl.isLoaded() ? pl.getSource() : this._blank;
-
-        if (pl && pl.getIsPng() && this.getEnabled())
-        {
-          i.src = this._blank;
-          i.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + source + "',sizingMethod='scale')";
-        }
-        else
-        {
-          i.src = source;
-          i.style.filter = this.getEnabled() ? "" : "Gray() Alpha(Opacity=30)";
-        }
-      },
-
-      "default" : function()
-      {
-        var pl = this.getPreloader();
-        var source = pl && pl.isLoaded() ? pl.getSource() : this._blank;
-
-        this._image.src = source;
-      }
-    }),
-
-
-    /**
-     * Reset the source of the image instance to a blank image
-     *
-     * @type member
-     * @return {void}
-     * @signature function()
-     */
-    _resetContent : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function()
-      {
-        this._image.src = this._blank;
-        this._image.style.filter = "";
-      },
-
-      "default" : function() {
-        this._image.src = this._blank;
-      }
-    }),
-
-
-    /**
-     * Sets the style values for the states enabled/disabled
-     *
-     * @type member
-     * @return {void}
-     * @signature function()
-     */
-    _styleEnabled : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function()
-      {
-        this._updateContent();
-      },
-
-      "default" : function()
-      {
-        if (this._image)
-        {
-          var o = this.getEnabled()===false ? 0.3 : "";
-          var s = this._image.style;
-
-          s.opacity = s.KhtmlOpacity = s.MozOpacity = o;
-        }
-      }
-    }),
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      PREFERRED DIMENSIONS: INNER
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Returns width value of preloader or 0 (if preloader is not available)
-     *
-     * @type member
-     * @return {Integer} Returns width value of preloader or 0 (if preloader is not available)
-     */
-    _computePreferredInnerWidth : function()
-    {
-      var preloader = this.getPreloader();
-      return preloader ? preloader.getWidth() : 0;
-    },
-
-
-    /**
-     * Returns height value of preloader or 0 (if preloader is not available)
-     *
-     * @type member
-     * @return {Integer} Returns height value of preloader or 0 (if preloader is not available)
-     */
-    _computePreferredInnerHeight : function()
-    {
-      var preloader = this.getPreloader();
-      return preloader ? preloader.getHeight() : 0;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      APPLY
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Sets the style attributes for width and height
-     *
-     * @type member
-     * @return {void}
-     * @signature function()
-     */
-    _postApplyDimensions : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function()
-      {
-        try
-        {
-          var vImageStyle = this._image.style;
-
-          if (this.getResizeToInner())
-          {
-            vImageStyle.pixelWidth = this.getInnerWidth();
-            vImageStyle.pixelHeight = this.getInnerHeight();
-          }
-          else
-          {
-            vImageStyle.pixelWidth = this.getPreferredInnerWidth();
-            vImageStyle.pixelHeight = this.getPreferredInnerHeight();
-          }
-        }
-        catch(ex)
-        {
-          throw new Error( "postApplyDimensions failed " + ex );
-        }
-      },
-
-      "default" : function()
-      {
-        try
-        {
-          var vImageNode = this._image;
-
-          if (this.getResizeToInner())
-          {
-            vImageNode.width = this.getInnerWidth();
-            vImageNode.height = this.getInnerHeight();
-          }
-          else
-          {
-            vImageNode.width = this.getPreferredInnerWidth();
-            vImageNode.height = this.getPreferredInnerHeight();
-          }
-        }
-        catch(ex)
-        {
-          throw new Error( "postApplyDimensions failed " + ex );
-        }
-      }
-    }),
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      CHANGES IN DIMENSIONS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Sets the width style attribute
-     *
-     * @type member
-     * @param vNew {var} new inner width value
-     * @param vOld {var} old inner width value
-     * @return {void}
-     * @signature function(vNew, vOld)
-     */
-    _changeInnerWidth : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function(vNew, vOld)
-      {
-        if (this.getResizeToInner()) {
-          this._image.style.pixelWidth = vNew;
-        }
-      },
-
-      "default" : function(vNew, vOld)
-      {
-        if (this.getResizeToInner()) {
-          this._image.width = vNew;
-        }
-      }
-    }),
-
-
-    /**
-     * Sets the height style attribute
-     *
-     * @type member
-     * @param vNew {var} new inner height value
-     * @param vOld {var} old inner height value
-     * @return {void}
-     * @signature function(vNew, vOld)
-     */
-    _changeInnerHeight : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function(vNew, vOld)
-      {
-        if (this.getResizeToInner()) {
-          this._image.style.pixelHeight = vNew;
-        }
-      },
-
-      "default" : function(vNew, vOld)
-      {
-        if (this.getResizeToInner()) {
-          this._image.height = vNew;
-        }
-      }
-    })
-  },
-
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function()
-  {
-    // Remove leaking filter attribute before leaving page
-    if (this._image) {
-      this._image.style.filter = "";
-    }
-
-    // Remove fields
-    this._disposeFields("_image");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/** This singleton manage all rwt.html.ImagePreloader instances. */
-rwt.qx.Class.define("rwt.html.ImagePreloaderManager",
-{
-  type : "singleton",
-  extend : rwt.qx.Object,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function()
-  {
-    this.base(arguments);
-
-    this._objects = {};
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /**
-     * Adds a rwt.html.ImagePreloader instance to the manager
-     *
-     * @type member
-     * @param vObject {Preloader} rwt.html.ImagePreloader instance
-     * @return {void}
-     */
-    add : function(vObject) {
-      this._objects[vObject.getUri()] = vObject;
-    },
-
-
-    /**
-     * Removes a rwt.html.ImagePreloader instance from the manager
-     *
-     * @type member
-     * @param vObject {Preloader} rwt.html.ImagePreloader instance
-     * @return {void}
-     */
-    remove : function(vObject) {
-      delete this._objects[vObject.getUri()];
-    },
-
-
-    /**
-     * Returns whether an image preloader instance with the given source is registered
-     *
-     * @type member
-     * @param vSource {String} Source of preloader image instance
-     * @return {Boolean} whether an image preloader instance has given source
-     */
-    has : function(vSource) {
-      return this._objects[vSource] != null;
-    },
-
-
-    /**
-     * Return image preloader instance with given source
-     *
-     * @type member
-     * @param vSource {String} Source of preloader image instance
-     * @return {Preloader} rwt.html.ImagePreloader instance
-     */
-    get : function(vSource) {
-      return this._objects[vSource];
-    },
-
-
-    /**
-     * Create new qx.io.image.preloader instance with given source
-     *
-     * @type member
-     * @param vSource {String} Source of preloader image instance
-     * @return {Preloader} new rwt.html.ImagePreloader instance
-     */
-    create : function(vSource)
-    {
-      if (this._objects[vSource]) {
-        return this._objects[vSource];
-      }
-
-      return new rwt.html.ImagePreloader(vSource);
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function() {
-    this._disposeFields("_objects");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * This class preloads one image and provides information about this image
- * after it is loaded.
- *
- * This class should not be used directly. Better use {@link rwt.html.ImagePreloaderManager}:
- *
- * <pre class='javascript'>
- * rwt.html.ImagePreloaderManager.getInstance().create(imageUrl)
- * </pre>
- */
-rwt.qx.Class.define("rwt.html.ImagePreloader",
-{
-  extend : rwt.qx.Target,
-
-  events :
-  {
-    /** Dispatched after the images has successfully been loaded */
-    "load" : "rwt.event.Event",
-
-    /** Dispatched if the image could not be loaded */
-    "error" : "rwt.event.Event"
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  /**
-   * @param imageUrl {String} URL of the image to pre load
-   */
-  construct : function(imageUrl)
-  {
-    if (rwt.html.ImagePreloaderManager.getInstance().has(imageUrl))
-    {
-      return rwt.html.ImagePreloaderManager.getInstance().get(imageUrl);
-    }
-
-    this.base(arguments);
-
-    // Create Image-Node
-    // Does not work with document.createElement("img") in Webkit. Interesting.
-    // Compare this to the bug in rwt.widgets.base.Image.
-    this._element = new Image();
-
-    // Define handler if image events occurs
-    this._element.onload = rwt.util.Functions.bind(this.__onload, this);
-    this._element.onerror = rwt.util.Functions.bind(this.__onerror, this);
-
-    // Set Source
-    this._source = imageUrl;
-    this._element.src = imageUrl;
-
-    this._checkPng();
-
-    rwt.html.ImagePreloaderManager.getInstance().add(this);
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      STATE MANAGERS
-    ---------------------------------------------------------------------------
-    */
-
-    _source : null,
-    _isLoaded : false,
-    _isErroneous : false,
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      CROSSBROWSER GETTERS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Get the full URI of the image
-     *
-     * @type member
-     * @return {String} The URI of the image
-     */
-    getUri : function() {
-      return this._source;
-    },
-
-
-    /**
-     * Get the full URI of the image
-     *
-     * @type member
-     * @return {String} The URI of the image
-     */
-    getSource : function() {
-      return this._source;
-    },
-
-
-    /**
-     * Check whether the image is already loaded
-     *
-     * @type member
-     * @return {Boolean} Whether the image is already loaded
-     */
-    isLoaded : function() {
-      return this._isLoaded;
-    },
-
-
-    /**
-     * Check whether the loading of the image failed
-     *
-     * @type member
-     * @return {Boolean} Whether the loading of the image failed
-     */
-    isErroneous : function() {
-      return this._isErroneous;
-    },
-
-    _checkPng : rwt.util.Variant.select( "qx.client", {
-      "default": rwt.util.Functions.returnTrue,
-      "mshtml" : function() {
-        this._isPng = /\.png$/i.test(this._element.nameProp);
-      }
-    } ),
-
-    // only used in mshtml: true when the image format is in png
-    _isPng : false,
-
-
-    /**
-     * Check whether the image format if PNG
-     *
-     * @type member
-     * @return {Boolean} whether the image format if PNG
-     */
-    getIsPng : function() {
-      // TODO should be renamedto isPng to be consistent with the rest of the framework.
-      return this._isPng;
-    },
-
-
-    /**
-     * Return the width of the image in pixel.
-     *
-     * @type member
-     * @return {Integer} The width of the image in pixel.
-     * @signature function()
-     */
-    getWidth : rwt.util.Variant.select("qx.client",
-    {
-      "gecko" : function() {
-        return this._element.naturalWidth;
-      },
-
-      "default" : function() {
-        return this._element.width;
-      }
-    }),
-
-
-    /**
-     * Return the height of the image in pixel.
-     *
-     * @type member
-     * @return {Integer} The height of the image in pixel.
-     * @signature function()
-     */
-    getHeight : rwt.util.Variant.select("qx.client",
-    {
-      "gecko" : function() {
-        return this._element.naturalHeight;
-      },
-
-      "default" : function() {
-        return this._element.height;
-      }
-    }),
-
-
-    /**
-     * Load handler
-     *
-     * @type member
-     * @return {void}
-     */
-    __onload : function()
-    {
-      if (this._isLoaded || this._isErroneous) {
-        return;
-      }
-
-      this._isLoaded = true;
-      this._isErroneous = false;
-
-      if (this.hasEventListeners("load")) {
-        this.dispatchEvent(new rwt.event.Event("load"), true);
-      }
-    },
-
-
-    /**
-     * Error handler
-     *
-     * @type member
-     * @return {void}
-     */
-    __onerror : function()
-    {
-      if (this._isLoaded || this._isErroneous) {
-        return;
-      }
-
-      this._isLoaded = false;
-      this._isErroneous = true;
-
-      if (this.hasEventListeners("error")) {
-        this.dispatchEvent(new rwt.event.Event("error"), true);
-      }
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function()
-  {
-    if (this._element)
-    {
-      // terminate any downloading in progress and free memory for image
-      // this._element.src = "";
-
-      this._element.onload = this._element.onerror = null;
-    }
-
-    this._disposeFields("_element", "_isLoaded", "_isErroneous", "_isPng");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2002, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define("rwt.widgets.util.Layout", {
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics : {
-    ORIENTATION_HORIZONTAL : "horizontal",
-    ORIENTATION_VERTICAL   : "vertical",
-    ALIGN_LEFT             : "left",
-    ALIGN_LEFT_REVERSED    : "left-reversed",
-    ALIGN_CENTER           : "center",
-    ALIGN_CENTER_REVERSED  : "center-reversed",
-    ALIGN_RIGHT            : "right",
-    ALIGN_RIGHT_REVERSED   : "right-reversed",
-    ALIGN_TOP              : "top",
-    ALIGN_TOP_REVERSED     : "top-reversed",
-    ALIGN_MIDDLE           : "middle",
-    ALIGN_MIDDLE_REVERSED  : "middle-reversed",
-    ALIGN_BOTTOM           : "bottom",
-    ALIGN_BOTTOM_REVERSED  : "bottom-reversed"
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define("rwt.widgets.base.HorizontalBoxLayout", {
-  extend : rwt.widgets.base.BoxLayout
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * A *spinner* is a control that allows you to adjust a numerical value,
- * typically within an allowed range. An obvious example would be to specify the
- * month of a year as a number in the range 1 - 12.
- *
- * To do so, a spinner encompasses a field to display the current value (a
- * textfield) and controls such as up and down buttons to change that value. The
- * current value can also be changed by editing the display field directly, or
- * using mouse wheel and cursor keys.
- *
- * To implement the range of a spinner's value, a {@link rwt.util.Range
- * Range} object is deployed as the {@link #manager} object. Here you can define the
- * boundaries of the range (*min* and *max* properties), the *default* value,
- * the *precision* and whether the range should *wrap* when stepping beyond a
- * border (see the Range documentation for more information). An optional {@link
- * #numberFormat} property allows you to control the format of how a value can
- * be entered and will be displayed.
- *
- * A brief, but non-trivial example:
- *
- * <pre>
- * var s = new rwt.widgets.base.Spinner;
- * s.set({
- *   max: 3000,
- *   min: -3000
- * });
- * var nf = new qx.util.format.NumberFormat();
- * nf.setMaximumFractionDigits(2);
- * s.setNumberFormat(nf);
- * s.getManager().setPrecision(2);
- * </pre>
- *
- * A spinner instance without any further properties specified in the
- * constructor or a subsequent *set* command will appear with default
- * values and behaviour.
- *
- * @appearance spinner
- *
- * @appearance spinner-field {rwt.widgets.base.BasicText}
- *
- * @appearance spinner-button-up {rwt.widgets.base.Image}
- * @state pressed {spinner-button-up}
- *
- * @appearance spinner-button-down {rwt.widgets.base.Image}
- * @state pressed {spinner-button-down}
- */
-rwt.qx.Class.define("rwt.widgets.base.Spinner",
-{
-  extend : rwt.widgets.base.HorizontalBoxLayout,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function(vMin, vValue, vMax)
-  {
-    this.base(arguments);
-
-    // ************************************************************************
-    //   BEHAVIOR
-    // ************************************************************************
-    if( rwt.client.Client.isMshtml() ) {
-      this.setStyleProperty("fontSize", "0px");
-    }
-
-    // ************************************************************************
-    //   TEXTFIELD
-    // ************************************************************************
-    this._textfield = new rwt.widgets.base.BasicText();
-    this._textfield.setBorder(null);
-    this._textfield.setWidth("1*");
-    this._textfield.setAllowStretchY(true);
-    this._textfield.setHeight(null);
-    this._textfield.setVerticalAlign("middle");
-    this._textfield.setAppearance("spinner-text-field");
-    this.add(this._textfield);
-
-    // ************************************************************************
-    //   BUTTON LAYOUT
-    // ************************************************************************
-    this._buttonlayout = new rwt.widgets.base.VerticalBoxLayout();
-    this._buttonlayout.setWidth("auto");
-    this.add(this._buttonlayout);
-
-    // ************************************************************************
-    //   UP-BUTTON
-    // ************************************************************************
-    this._upbutton = new rwt.widgets.base.Button();
-    this._upbutton.setAppearance("spinner-button-up");
-    this._upbutton.setTabIndex(null);
-    this._upbutton.setHeight("1*");
-    this._buttonlayout.add(this._upbutton);
-
-    // ************************************************************************
-    //   DOWN-BUTTON
-    // ************************************************************************
-    this._downbutton = new rwt.widgets.base.Button();
-    this._downbutton.setAppearance("spinner-button-down");
-    this._downbutton.setTabIndex(null);
-    this._downbutton.setHeight("1*");
-    this._buttonlayout.add(this._downbutton);
-
-    // ************************************************************************
-    //   TIMER
-    // ************************************************************************
-    this._timer = new rwt.client.Timer(this.getInterval());
-
-    // ************************************************************************
-    //   MANAGER
-    // ************************************************************************
-    this.setManager(new rwt.util.Range());
-    this.initWrap();
-
-    // ************************************************************************
-    //   EVENTS
-    // ************************************************************************
-    this.addEventListener("keypress", this._onkeypress, this);
-    this.addEventListener("keydown", this._onkeydown, this);
-    this.addEventListener("keyup", this._onkeyup, this);
-    this.addEventListener("mousewheel", this._onmousewheel, this);
-
-    this._textfield.addEventListener("changeValue", this._ontextchange, this);
-    this._textfield.addEventListener("input", this._oninput, this);
-    this._textfield.addEventListener("blur", this._onblur, this);
-    this._upbutton.addEventListener("mousedown", this._onmousedown, this);
-    this._downbutton.addEventListener("mousedown", this._onmousedown, this);
-    this._timer.addEventListener("interval", this._oninterval, this);
-
-    // ************************************************************************
-    //   INITIALIZATION
-    // ************************************************************************
-    if (vMin != null) {
-      this.setMin(vMin);
-    }
-
-    if (vMax != null) {
-      this.setMax(vMax);
-    }
-
-    if (vValue != null) {
-      this.setValue(vValue);
-    }
-
-    this._checkValue = this.__checkValue;
-
-    this.initWidth();
-    this.initHeight();
-
-    this._last_value = "";
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     EVENTS
-  *****************************************************************************
-  */
-
-  events: {
-    /**
-     * Fired each time the value of the spinner changes.
-     * The "data" property of the event is set to the new value
-     * of the spinner.
-     */
-    "change" : "rwt.event.DataEvent"
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      PROPERTIES
-    ---------------------------------------------------------------------------
-    */
-
-    appearance :
-    {
-      refine : true,
-      init : "spinner"
-    },
-
-    width :
-    {
-      refine : true,
-      init : 60
-    },
-
-    height :
-    {
-      refine : true,
-      init : 22
-    },
-
-
-
-
-    /** The amount to increment on each event (keypress or mousedown). */
-    incrementAmount :
-    {
-      check : "Number",
-      init : 1,
-      apply : "_applyIncrementAmount"
-    },
-
-
-    /** The amount to increment on each event (keypress or mousedown). */
-    wheelIncrementAmount :
-    {
-      check : "Number",
-      init : 1
-    },
-
-
-    /** The amount to increment on each pageup / pagedown keypress */
-    pageIncrementAmount :
-    {
-      check : "Number",
-      init : 10
-    },
-
-
-    /** The current value of the interval (this should be used internally only). */
-    interval :
-    {
-      check : "Integer",
-      init : 100
-    },
-
-
-    /** The first interval on event based shrink/growth of the value. */
-    firstInterval :
-    {
-      check : "Integer",
-      init : 500
-    },
-
-
-    /** This configures the minimum value for the timer interval. */
-    minTimer :
-    {
-      check : "Integer",
-      init : 20
-    },
-
-
-    /** Decrease of the timer on each interval (for the next interval) until minTimer reached. */
-    timerDecrease :
-    {
-      check : "Integer",
-      init : 2
-    },
-
-
-    /** If minTimer was reached, how much the amount of each interval should grow (in relation to the previous interval). */
-    amountGrowth :
-    {
-      check : "Number",
-      init : 1.01
-    },
-
-
-    /** whether the value should wrap around */
-    wrap :
-    {
-      check : "Boolean",
-      init : false,
-      apply : "_applyWrap"
-    },
-
-
-    /** Controls whether the textfield of the spinner is editable or not */
-    editable :
-    {
-      check : "Boolean",
-      init : true,
-      apply : "_applyEditable"
-    },
-
-
-    /** Range manager */
-    manager :
-    {
-      check : "rwt.util.Range",
-      apply : "_applyManager",
-      dispose : true
-    },
-
-
-    /** Holding a reference to the protected {@link _checkValue} method */
-    checkValueFunction :
-    {
-      apply : "_applyCheckValueFunction"
-    },
-
-    /**  */
-    selectTextOnInteract :
-    {
-      check : "Boolean",
-      init : true
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-
-    _applyIncrementAmount : function(value, old) {
-      this._computedIncrementAmount = value;
-    },
-
-
-    _applyEditable : function(value, old)
-    {
-      if (this._textfield) {
-        this._textfield.setReadOnly(! value);
-      }
-    },
-
-
-    _applyWrap : function(value, old)
-    {
-      this.getManager().setWrap(value);
-      this._onchange();
-    },
-
-
-    _applyManager : function(value, old)
-    {
-      if (old)
-      {
-        old.removeEventListener("change", this._onchange, this);
-      }
-
-      if (value)
-      {
-        value.addEventListener("change", this._onchange, this);
-      }
-
-      // apply initital value
-      this._onchange();
-    },
-
-
-    _applyCheckValueFunction : function(value, old) {
-      this._checkValue = value;
-    },
-
-    /*
-    ---------------------------------------------------------------------------
-      PREFERRED DIMENSIONS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Returns the prefered inner width for the spinner widget. Currently this
-     * method returns 50.
-     *
-     * @type member
-     * @return {Integer} prefered inner width for the spinner widget
-     */
-    _computePreferredInnerWidth : function() {
-      return 50;
-    },
-
-
-    /**
-     * Return the prefered inner height for the spinner widget. Currently this
-     * method returns 14
-     *
-     * @type member
-     * @return {Integer} prefered inner height for the spinner widget
-     */
-    _computePreferredInnerHeight : function() {
-      return 14;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      KEY EVENT-HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Callback for the "keyPress" event.<br/>
-     * Perform action when "Enter" (without "Alt"), control keys
-     * and numeric (0-9) keys are pressed. Suppress all key events for
-     * events without modifiers.
-     *
-     * @type member
-     * @param e {rwt.event.KeyEvent} keyPress event
-     * @return {void}
-     */
-    _onkeypress : function(e)
-    {
-      var vIdentifier = e.getKeyIdentifier();
-
-      if (vIdentifier == "Enter" && !e.isAltPressed())
-      {
-        this._checkValue(true, false);
-        if (this.getSelectTextOnInteract()) {
-          this._textfield.selectAll();
-        }
-      }
-      else
-      {
-        switch(vIdentifier)
-        {
-          case "Up":
-          case "Down":
-          case "Left":
-          case "Right":
-          case "Shift":
-          case "Control":
-          case "Alt":
-          case "Escape":
-          case "Delete":
-          case "Backspace":
-          case "Insert":
-          case "Home":
-          case "End":
-          case "PageUp":
-          case "PageDown":
-          case "NumLock":
-          case "Tab":
-            break;
-
-          default:
-            if ((vIdentifier >= "0" && vIdentifier <= "9") ||
-                (vIdentifier == '-')) {
-              return;
-            }
-
-            // supress all key events without modifier
-            if( e.getModifiers() === 0 ) {
-              e.preventDefault();
-            }
-        }
-      }
-    },
-
-
-    /**
-     * Callback for "keyDown" event.<br/>
-     * Controls the interval mode ("single" or "page")
-     * and the interval increase by detecting "Up"/"Down"
-     * and "PageUp"/"PageDown" keys.
-     * Starting a timer to control the incrementing of the
-     * spinner value.
-     *
-     * @type member
-     * @param e {rwt.event.KeyEvent} keyDown event
-     * @return {void}
-     */
-    _onkeydown : function(e)
-    {
-      var vIdentifier = e.getKeyIdentifier();
-
-      if (this._intervalIncrease == null)
-      {
-        switch(vIdentifier)
-        {
-          case "Up":
-          case "Down":
-            this._intervalIncrease = vIdentifier == "Up";
-            this._intervalMode = "single";
-
-            this._resetIncrements();
-            this._checkValue(true, false);
-
-            this._increment();
-            this._timer.startWith(this.getFirstInterval());
-
-            break;
-
-          case "PageUp":
-          case "PageDown":
-            this._intervalIncrease = vIdentifier == "PageUp";
-            this._intervalMode = "page";
-
-            this._resetIncrements();
-            this._checkValue(true, false);
-
-            this._pageIncrement();
-            this._timer.startWith(this.getFirstInterval());
-
-            break;
-        }
-      }
-    },
-
-
-    /**
-     * Callback for "keyUp" event.<br/>
-     * Detecting "Up"/"Down" and "PageUp"/"PageDown" keys.
-     * If detected the interval mode and interval increase get resetted
-     * and the timer for the control of the increase of the spinner value
-     * gets stopped.
-     *
-     * @type member
-     * @param e {rwt.event.KeyEvent} keyUp event
-     * @return {void}
-     */
-    _onkeyup : function(e)
-    {
-      if (this._intervalIncrease != null)
-      {
-        switch(e.getKeyIdentifier())
-        {
-          case "Up":
-          case "Down":
-          case "PageUp":
-          case "PageDown":
-            this._timer.stop();
-
-            this._intervalIncrease = null;
-            this._intervalMode = null;
-        }
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      MOUSE EVENT-HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Callback method for the "mouseDown" event of the spinner buttons.<br/>
-     * State handling, registering event listeners at the spinner button and
-     * invoking the increment management (resets increments, setup and start timer etc.).
-     *
-     * @type member
-     * @param e {rwt.event.MouseEvent} mouseDown event
-     * @return {void}
-     */
-    _onmousedown : function(e)
-    {
-      if (!e.isLeftButtonPressed()) {
-        return;
-      }
-
-      this._checkValue(true);
-
-      var vButton = e.getCurrentTarget();
-
-      vButton.addState("pressed");
-
-      vButton.addEventListener("mouseup", this._onmouseup, this);
-      vButton.addEventListener("mouseout", this._onmouseup, this);
-
-      this._intervalIncrease = vButton == this._upbutton;
-      this._resetIncrements();
-      this._increment();
-
-      if (this.getSelectTextOnInteract()) {
-        this._textfield.selectAll();
-      }
-
-      this._timer.setInterval(this.getFirstInterval());
-      this._timer.start();
-    },
-
-
-    /**
-     * Callback method for the "mouseUp" event of the spinner buttons.<br/>
-     * State handling, removing event listeners at the spinner button, focusing
-     * the text field and resetting the interval management (stopping timer,
-     * resetting interval increase).
-     *
-     * @type member
-     * @param e {rwt.event.MouseEvent} mouseUp event
-     * @return {void}
-     */
-    _onmouseup : function(e)
-    {
-      var vButton = e.getCurrentTarget();
-
-      vButton.removeState("pressed");
-
-      vButton.removeEventListener("mouseup", this._onmouseup, this);
-      vButton.removeEventListener("mouseout", this._onmouseup, this);
-
-      if (this.getSelectTextOnInteract()) {
-        this._textfield.selectAll();
-      }
-      this._textfield.setFocused(true);
-
-      this._timer.stop();
-      this._intervalIncrease = null;
-    },
-
-
-    /**
-     * Callback method for the "mouseWheel" event.<br/>
-     * Delegates the in-/decrementing to the manager and
-     * selects the text field.
-     *
-     * @type member
-     * @param e {rwt.event.MouseEvent} mouseWheel event
-     * @return {void}
-     */
-    _onmousewheel : function(e)
-    {
-      this._checkValue(true);
-      if (this.getManager().incrementValue)
-      {
-        this.getManager().incrementValue(this.getWheelIncrementAmount() *
-                                         e.getWheelDelta());
-      }
-      else
-      {
-        var value = this.getManager().getValue() +
-                                   (this.getWheelIncrementAmount() *
-                                    e.getWheelDelta());
-        value = this.getManager().limit(value);
-        this.getManager().setValue(value);
-      }
-      this._textfield.selectAll();
-      // RAP [rst] See https://bugs.eclipse.org/bugs/show_bug.cgi?id=283546
-      e.preventDefault();
-      e.stopPropagation();
-      // END RAP
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      OTHER EVENT-HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Event handler method for text changes
-     *
-     * @type member
-     * @param e {rwt.event.ChangeEvent} change event
-     * @return {void}
-     */
-    _ontextchange : function(e) {
-      this._last_value = e.getOldValue();
-    },
-
-    /**
-     * Callback method for the "input" event.<br/>
-     * Delegates the further processing to the method
-     * hold by the "checkValue" property.
-     *
-     * @type member
-     * @param e {rwt.event.DataEvent} input event
-     * @return {void}
-     */
-    _oninput : function(e) {
-      this._checkValue(true, true);
-    },
-
-
-    /**
-     * Callback method for the "change" event.<br/>
-     * Sets the value of the text field and enables/disables
-     * the up-/down-buttons of the min-/max-value are reached
-     * (additionally stops the timer of the min-/max-boundaries are reached)
-     * Dispatched the "change" event.
-     *
-     * @type member
-     * @param e {rwt.event.ChangeEvent} change event
-     * @return {void}
-     */
-    _onchange : function(e)
-    {
-      var vValue = this.getManager().getValue();
-      this._textfield.setValue(String(vValue));
-
-      if (vValue == this.getMin() && !this.getWrap())
-      {
-        this._downbutton.removeState("pressed");
-        this._downbutton.setEnabled(false);
-        this._timer.stop();
-      }
-      else
-      {
-        this._downbutton.resetEnabled();
-      }
-
-      if (vValue == this.getMax() && !this.getWrap())
-      {
-        this._upbutton.removeState("pressed");
-        this._upbutton.setEnabled(false);
-        this._timer.stop();
-      }
-      else
-      {
-        this._upbutton.resetEnabled();
-      }
-
-      this.createDispatchDataEvent("change", vValue);
-    },
-
-
-    /**
-     * Callback method for the "blur" event.<br/>
-     * Calls the method of the "checkValueFunction" property
-     *
-     * @type member
-     * @param e {rwt.event.FocusEvent} blur event
-     * @return {void}
-     */
-    _onblur : function(e) {
-      this._checkValue(false);
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      MAPPING TO RANGE MANAGER
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Mapping to the "setValue" method of the Range manager
-     *
-     * @type member
-     * @param nValue {Number} new value of the spinner
-     * @return {void}
-     */
-    setValue : function(nValue) {
-      this.getManager().setValue(this.getManager().limit(nValue));
-    },
-
-
-    /**
-     * Mapping to the "getValue" method of the Range manager
-     *
-     * @type member
-     * @return {Number} Current value of the spinner
-     */
-    getValue : function()
-    {
-      // make sure the manager is uptodate with what is on screen
-      this._checkValue(true);
-      return this.getManager().getValue();
-    },
-
-
-    /**
-     * Mapping to the "resetValue" method of the Range manager
-     *
-     * @type member
-     * @return {void}
-     */
-    resetValue : function() {
-      this.getManager().resetValue();
-    },
-
-
-    /**
-     * Mapping to the "setMax" method of the Range manager
-     *
-     * @type member
-     * @param vMax {Number} new max value of the spinner
-     * @return {Number} new max value of the spinner
-     */
-    setMax : function(vMax) {
-      return this.getManager().setMax(vMax);
-    },
-
-
-    /**
-     * Mapping to the "getMax" method of the Range manager
-     *
-     * @type member
-     * @return {Number} current max value of the spinner
-     */
-    getMax : function() {
-      return this.getManager().getMax();
-    },
-
-
-    /**
-     * Mapping to the "setMin" method of the Range manager
-     *
-     * @type member
-     * @param vMin {Number} new min value of the spinner
-     * @return {Number} new min value of the spinner
-     */
-    setMin : function(vMin) {
-      return this.getManager().setMin(vMin);
-    },
-
-
-    /**
-     * Mapping to the "getMin" method of the Range manager
-     *
-     * @type member
-     * @return {Number} current min value of the spinner
-     */
-    getMin : function() {
-      return this.getManager().getMin();
-    },
-
-
-    /*
-    ---------------------------------------------------------------------------
-      INTERVAL HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    _intervalIncrease : null,
-
-
-    /**
-     * Callback method for the "interval" event.<br/>
-     * Stops the timer and sets a new interval. Executes the increment
-     * of the spinner depending on the intervalMode and restarts the timer with
-     * the new interval.
-     *
-     * @type member
-     * @param e {rwt.event.Event} interval event
-     * @return {void}
-     */
-    _oninterval : function(e)
-    {
-      this._timer.stop();
-      this.setInterval(Math.max(this.getMinTimer(), this.getInterval() - this.getTimerDecrease()));
-
-      if (this._intervalMode == "page")
-      {
-        this._pageIncrement();
-      }
-      else
-      {
-        if (this.getInterval() == this.getMinTimer()) {
-          this._computedIncrementAmount = this.getAmountGrowth() * this._computedIncrementAmount;
-        }
-
-        this._increment();
-      }
-
-      var wrap = this.getManager().getWrap();
-
-      switch( this._intervalIncrease ) {
-        case true:
-          if( !( this.getValue() == this.getMax() && !wrap ) ) {
-            this._timer.restartWith(this.getInterval());
-          }
-        break;
-        case false:
-          if( !( this.getValue() == this.getMin() && !wrap ) ) {
-            this._timer.restartWith(this.getInterval());
-          }
-        break;
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      UTILITY
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Default check value utility method
-     *
-     * @type member
-     * @param acceptEmpty {Boolean} Whether empty values are allowed or not.
-     * @param acceptEdit {Boolean} Whether editing is accepted or not.
-     * @return {void}
-     */
-    __checkValue : function(acceptEmpty, acceptEdit)
-    {
-      var el = this._textfield.getInputElement();
-
-      if (!el) {
-        return;
-      }
-
-      if( ( el.value === "" ) || ( el.value === "-" ) ) {
-        if (!acceptEmpty)
-        {
-          this.resetValue();
-          return;
-        }
-      }
-      else
-      {
-        // cache original value
-        var str_val = el.value;
-
-        // prepare for parsing. We don't use numberFormat itself to parse the
-        // string, as we want to be a little more liberal at this point since
-        // we might be currently editing the string. For example, we accept
-        // things like "4000."
-        var parsable_str;
-
-        parsable_str = str_val;
-
-        // parse the string
-        var val = parseFloat(parsable_str);
-        var limitedVal = this.getManager().limit(val);
-        var oldValue = this.getManager().getValue();
-        var fixedVal = limitedVal;
-
-        // NaN means we had a parse error, but we'll be more picky than
-        // parseFloat (refuse stuff like 5.55-12.5 which parseFloat
-        // parses as 5.55). We also refuse values outside the range.
-        if (isNaN(val) || (limitedVal != val) || (val != parsable_str))
-        {
-          if (acceptEdit) {
-            this._textfield.setValue(this._last_value);
-          } else {
-            if (isNaN(limitedVal)) {
-              // reset to last correct value
-              fixedVal = oldValue;
-            } else {
-              fixedVal = limitedVal;
-            }
-          }
-        }
-        if( acceptEdit ) {
-          return;
-        }
-
-        var formattedValue;
-
-        formattedValue = String(fixedVal);
-
-        if ((fixedVal === oldValue) && (str_val !== formattedValue)) {
-          // "silently" update the displayed value as it won't get
-          // updated by the range manager since it considers the value as
-          // unchanged.
-          this._textfield.setValue(formattedValue);
-        }
-
-        // inform manager
-        this.getManager().setValue(fixedVal);
-      }
-    },
-
-
-    /**
-     * Performs a normal increment
-     *
-     * @type member
-     * @return {void}
-     */
-    _increment : function()
-    {
-      if (this.getManager().incrementValue)
-      {
-        this.getManager().incrementValue((this._intervalIncrease ? 1 : -1) *
-                                         this._computedIncrementAmount);
-      }
-      else
-      {
-        var value = this.getManager().getValue() +
-                                   ((this._intervalIncrease ? 1 : -1) *
-                                    this._computedIncrementAmount);
-
-        value = this.getManager().limit(value);
-
-        this.getManager().setValue(value);
-      }
-    },
-
-
-    /**
-     * Performs a page increment
-     *
-     * @type member
-     * @return {void}
-     */
-    _pageIncrement : function()
-    {
-      if (this.getManager().pageIncrementValue)
-      {
-        this.getManager().pageIncrementValue();
-      }
-      else
-      {
-        var value = this.getManager().getValue() +
-                                   ((this._intervalIncrease ? 1 : -1) *
-                                    this.getPageIncrementAmount());
-
-        value = this.getManager().limit(value);
-
-        this.getManager().setValue(value);
-      }
-    },
-
-
-    /**
-     * Reset the increments
-     *
-     * @type member
-     * @return {void}
-     */
-    _resetIncrements : function()
-    {
-      this._computedIncrementAmount = this.getIncrementAmount();
-      this.resetInterval();
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function()
-  {
-    var mgr = this.getManager();
-    if (mgr) {
-      mgr.dispose();
-    }
-
-    this._disposeObjects("_textfield", "_buttonlayout", "_upbutton", "_downbutton",
-      "_timer");
-  }
-});
-
-/*******************************************************************************
- * Copyright: 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                       and EclipseSource
- *
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.base.BasicText", {
-
-  extend : rwt.widgets.base.Terminator,
-
-  construct : function( value ) {
-    this.base( arguments );
-    if( value != null ) {
-      this.setValue( value );
-    }
-    this.initHideFocus();
-    this.initWidth();
-    this.initHeight();
-    this.initTabIndex();
-    this._selectionStart = 0;
-    this._selectionLength = 0;
-    this.__oninput = rwt.util.Functions.bindEvent( this._oninputDom, this );
-    this.addEventListener( "blur", this._onblur );
-    this.addEventListener( "keydown", this._onkeydown );
-    this.addEventListener( "keypress", this._onkeypress );
-    this.addEventListener( "keyup", this._onkeyup, this );
-    this.addEventListener( "mousedown", this._onMouseDownUp, this );
-    this.addEventListener( "mouseup", this._onMouseDownUp, this );
-    this._updateLineHeight();
-    this._typed = null;
-    this._selectionNeedsUpdate = false;
-    this._applyBrowserFixes();
-    this._inputOverflow = "hidden";
-  },
-
-  destruct : function() {
-    if( this._inputElement != null ) {
-      if( rwt.client.Client.isMshtml() ) {
-        this._inputElement.onpropertychange = null;
-      } else {
-        this._inputElement.removeEventListener( "input", this.__oninput, false );
-      }
-    }
-    this._inputElement = null;
-    this.__font = null;
-    if( this._checkTimer ) {
-      this._checkTimer.dispose();
-      this._checkTimer = null;
-    }
-  },
-
-  events: {
-    "input" : "rwt.event.DataEvent"
-  },
-
-  properties : {
-
-    allowStretchX : { refine : true, init : true },
-    allowStretchY : { refine : true, init : false },
-    appearance : { refine : true, init : "text-field" },
-    tabIndex : { refine : true, init : 1 },
-    hideFocus : { refine : true, init : true },
-    width : { refine : true, init : "auto" },
-    height : { refine : true, init : "auto" },
-    selectable : { refine : true, init : true },
-
-    value : {
-      init : "",
-      nullable : true,
-      event : "changeValue",
-      apply : "_applyValue",
-      dispose : true // in the case we use i18n text here
-    },
-
-    textAlign : {
-      check : [ "left", "center", "right", "justify" ],
-      nullable : true,
-      themeable : true,
-      apply : "_applyTextAlign"
-    },
-
-    maxLength : {
-      check : "Integer",
-      apply : "_applyMaxLength",
-      nullable : true
-    },
-
-    readOnly : {
-      check : "Boolean",
-      apply : "_applyReadOnly",
-      init : false,
-      event : "changeReadOnly"
-    }
-
-  },
-
-  members : {
-    _LINE_HEIGT_FACTOR : 1.2,
-    _inputTag : "input",
-    _inputType : "text",
-    _inputElement : null,
-
-    /////////
-    // API
-
-    setSelection : function( selection ) {
-      this._selectionStart = selection[ 0 ];
-      this._selectionLength = selection[ 1 ] - selection[ 0 ];
-      this._renderSelection();
-    },
-
-    getSelection : function() {
-      return [ this._selectionStart, this._selectionStart + this._selectionLength ];
-    },
-
-    getComputedSelection : function() {
-      var start = this._getSelectionStart();
-      var length = this._getSelectionLength();
-      return [ start, start + length ];
-    },
-
-    getComputedValue : function() {
-      var result;
-      if( this._inputElement != null ) {
-        result = this._inputElement.value;
-      } else {
-        result = this.getValue();
-      }
-      return result;
-    },
-
-    getInputElement : function() {
-      return this._inputElement || null;
-    },
-
-    /////////////////////
-    // selection handling
-
-    _renderSelection : function() {
-      // setting selection here might de-select all other selections, so only render if focused
-      if( this.isCreated() && this.getFocused() ) {
-        this._setSelectionStart( this._selectionStart );
-        this._setSelectionLength( this._selectionLength );
-        this._selectionNeedsUpdate = false;
-      }
-    },
-
-    _detectSelectionChange : function() {
-      if( this._isCreated ) {
-        var start = this._getSelectionStart();
-        var length = this._getSelectionLength();
-        if( typeof start === "undefined" ) {
-          start = 0;
-        }
-        if( typeof length === "undefined" ) {
-          length = 0;
-        }
-        if( this._selectionStart !== start || this._selectionLength !== length ) {
-          this._handleSelectionChange( start, length );
-        }
-      }
-    },
-
-    _handleSelectionChange : function( start, length ) {
-      this._selectionStart = start;
-      this._selectionLength = length;
-    },
-
-    _setSelectionStart : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function( vStart ) {
-        this._visualPropertyCheck();
-        var vText = this._inputElement.value;
-        // special handling for line-breaks
-        var i = 0;
-        while( i < vStart ) {
-          i = vText.indexOf( "\r\n", i );
-          if( i === -1 ) {
-            break;
-          }
-          vStart--;
-          i++;
-        }
-        var vRange = this._inputElement.createTextRange();
-        vRange.collapse();
-        vRange.move( "character", vStart );
-        vRange.select();
-      },
-      "gecko" : function( vStart ) {
-        this._visualPropertyCheck();
-        // the try catch block is neccesary because FireFox raises an exception
-        // if the property "selectionStart" is read while the element or one of
-        // its parent elements is invisible
-        // https://bugzilla.mozilla.org/show_bug.cgi?id=329354
-        try {
-          this._inputElement.selectionStart = vStart;
-        } catch(ex ) {
-          // do nothing
-        }
-      },
-      "default" : function( vStart) {
-        this._visualPropertyCheck();
-        if( this._inputElement.selectionStart !== vStart ) {
-          this._inputElement.selectionStart = vStart;
-        }
-      }
-    } ),
-
-    _getSelectionStart : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function() {
-        this._visualPropertyCheck();
-        var vSelectionRange = window.document.selection.createRange();
-        // Check if the document.selection is the text range inside the input element
-        if( !this._inputElement.contains( vSelectionRange.parentElement() ) ) {
-          return -1;
-        }
-        var vRange = this._inputElement.createTextRange();
-        var vRange2 = vRange.duplicate();
-        // Weird Internet Explorer statement
-        vRange2.moveToBookmark( vSelectionRange.getBookmark() );
-        vRange.setEndPoint( 'EndToStart', vRange2 );
-        // for some reason IE doesn’t always count the \n and \r in the length
-        var textPart = vSelectionRange.text.replace( /[\r\n]/g, '.' );
-        var textWhole = this._inputElement.value.replace( /[\r\n]/g, '.' );
-        return textWhole.indexOf( textPart, vRange.text.length );
-      },
-      "gecko" : function() {
-        this._visualPropertyCheck();
-        var el = this._inputElement;
-        var result;
-        // the try catch block is neccesary because FireFox raises an exception
-        // if the property "selectionStart" is read while the element or one of
-        // its parent elements is invisible
-        // https://bugzilla.mozilla.org/show_bug.cgi?id=329354
-        try {
-          if( this.isValidString( el.value ) ) {
-            result = el.selectionStart;
-          } else {
-            result = 0;
-          }
-        } catch( ex ) {
-          result = 0;
-        }
-        return result;
-      },
-      "default" : function() {
-        this._visualPropertyCheck();
-        return this._inputElement.selectionStart;
-      }
-    } ),
-
-    _setSelectionLength : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function( vLength ) {
-        this._visualPropertyCheck();
-        var vSelectionRange = window.document.selection.createRange();
-        if( !this._inputElement.contains(vSelectionRange.parentElement() ) ) {
-          return;
-        }
-        vSelectionRange.collapse();
-        vSelectionRange.moveEnd( "character", vLength );
-        vSelectionRange.select();
-      },
-      "gecko" : function( vLength ) {
-        this._visualPropertyCheck();
-        var el = this._inputElement;
-        // the try catch block is neccesary because FireFox raises an exception
-        // if the property "selectionStart" is read while the element or one of
-        // its parent elements is invisible
-        // https://bugzilla.mozilla.org/show_bug.cgi?id=329354
-        try {
-          if( this.isValidString( el.value ) ) {
-            el.selectionEnd = el.selectionStart + vLength;
-          }
-        } catch (ex) {}
-      },
-      "default" : function(vLength) {
-        this._visualPropertyCheck();
-        var el = this._inputElement;
-        if( this.isValidString( el.value ) ) {
-          var end = el.selectionStart + vLength;
-          if( el.selectionEnd != end ) {
-            el.selectionEnd = el.selectionStart + vLength;
-          }
-        }
-      }
-    } ),
-
-    _getSelectionLength : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function() {
-        this._visualPropertyCheck();
-        var vSelectionRange = window.document.selection.createRange();
-        if( !this._inputElement.contains( vSelectionRange.parentElement() ) ) {
-          return 0;
-        }
-        return vSelectionRange.text.length;
-      },
-      "gecko" : function() {
-        this._visualPropertyCheck();
-        var el = this._inputElement;
-        // the try catch block is neccesary because FireFox raises an exception
-        // if the property "selectionStart" is read while the element or one of
-        // its parent elements is invisible
-        // https://bugzilla.mozilla.org/show_bug.cgi?id=329354
-        try {
-          return el.selectionEnd - el.selectionStart;
-        } catch( ex ) {
-          // do nothing
-        }
-      },
-      "default" : function() {
-        this._visualPropertyCheck();
-        var el = this._inputElement;
-        return el.selectionEnd - el.selectionStart;
-      }
-    } ),
-
-    selectAll : function() {
-      this._visualPropertyCheck();
-      if( this.getValue() != null ) {
-        this._setSelectionStart( 0 );
-        this._setSelectionLength( this._inputElement.value.length );
-      }
-      // to be sure we get the element selected
-      this._inputElement.select();
-      // RAP [if] focus() leads to error in IE if the _inputElement is disabled or not visible.
-      // 277444: JavaScript error in IE when using setSelection on a ComboViewer with setEnabled
-      // is false
-      // https://bugs.eclipse.org/bugs/show_bug.cgi?id=277444
-      // 280420: [Combo] JavaScript error in IE when using setSelection on an invisible Combo
-      // https://bugs.eclipse.org/bugs/show_bug.cgi?id=280420
-      if( this.isEnabled() && this.isSeeable() ) {
-        this._inputElement.focus();
-      }
-      this._detectSelectionChange();
-    },
-
-    ////////////
-    // rendering
-
-    _applyElement : function( value, old ) {
-      this.base( arguments, value, old );
-      if( value ) {
-        this._inputElement = document.createElement( this._inputTag );
-        if( this._inputType ) {
-          this._inputElement.type = this._inputType;
-        }
-        this._inputElement.autoComplete = "off";
-        this._inputElement.setAttribute( "autoComplete", "off" );
-        this._inputElement.disabled = this.getEnabled() === false;
-        this._inputElement.readOnly = this.getReadOnly();
-        if( rwt.client.Client.isMshtml() ) {
-          if( this.getValue() != null && this.getValue() !== "" ) {
-            this._inputElement.value = this.getValue();
-          } else {
-          // See Bug 243557 - [Text] Pasting text from clipboard does not trigger ModifyListener
-            this._inputElement.value = " ";
-          }
-        } else {
-          this._inputElement.value = this.getValue() != null ? this.getValue().toString() : "";
-        }
-        if( this.getMaxLength() != null ) {
-          this._inputElement.maxLength = this.getMaxLength();
-        }
-        var istyle = this._inputElement.style;
-        istyle.padding = 0;
-        istyle.margin = 0;
-        istyle.border = "0 none";
-        istyle.background = "transparent";
-        istyle.overflow = this._inputOverflow;
-        istyle.outline = "none";
-        istyle.resize = "none";
-        istyle.WebkitAppearance = "none";
-        istyle.MozAppearance = "none";
-        this._renderFont();
-        this._renderTextColor();
-        this._renderTextAlign();
-        this._renderCursor();
-        this._renderTextShadow();
-        this._textInit();
-        this._getTargetNode().appendChild( this._inputElement );
-        this._updateLineHeight();
-      }
-    },
-
-    _textInit : rwt.util.Variant.select( "qx.client", {
-      "default" : function() {
-        // Emulate IE hard-coded margin
-        // Mozilla by default emulates this IE handling, but in a wrong
-        // way. IE adds the additional margin to the CSS margin where
-        // Mozilla replaces it. But this make it possible for the user
-        // to overwrite the margin, which is not possible in IE.
-        // See also: https://bugzilla.mozilla.org/show_bug.cgi?id=73817
-        // NOTE [tb] : Non-IE browser also shift text 1px to the right, correcting with margin:
-        this._inputElement.style.margin = "1px 0 1px -1px";
-        this._inputElement.addEventListener( "input", this.__oninput, false );
-        this._applyBrowserFixesOnCreate();
-      },
-      "mshtml" : function() {
-        this._inputElement.onpropertychange = this.__oninput;
-      }
-    } ),
-
-    _postApply : function() {
-      this._syncFieldWidth();
-      this._syncFieldHeight();
-    },
-
-    _changeInnerWidth : function( value, old ) {
-      this._syncFieldWidth();
-    },
-
-    _changeInnerHeight : function(value, old) {
-      this._syncFieldHeight();
-      this._centerFieldVertically();
-    },
-
-    _syncFieldWidth : function() {
-      this._inputElement.style.width = Math.max( 2, this.getInnerWidth() ) + "px";
-    },
-
-    _syncFieldHeight : function() {
-      if( this._inputTag !== "input" ) {
-        // Reduce height by 2 pixels (the manual or mshtml margin)
-        this._inputElement.style.height = Math.max( 0, this.getInnerHeight() - 2 ) + "px";
-      }
-    },
-
-    _applyCursor : function( value, old ) {
-      if( this._inputElement != null ) {
-        this._renderCursor();
-      }
-    },
-
-    _renderCursor : function() {
-      var style = this._inputElement.style;
-      var value = this.getCursor();
-      if( value ) {
-        if( value === "pointer" && rwt.client.Client.isMshtml() ) {
-          style.cursor = "hand";
-        } else {
-          style.cursor = value;
-        }
-      } else {
-        style.cursor = "";
-      }
-    },
-
-    _applyTextAlign : function( value, old ) {
-      if( this._inputElement ) {
-        this._renderTextAlign();
-      }
-    },
-
-    _renderTextAlign : function() {
-      this._inputElement.style.textAlign = this.getTextAlign() || "";
-    },
-
-    _applyEnabled : function( value, old ) {
-      if( this._inputElement != null ) {
-        this._inputElement.disabled = value === false;
-      }
-      return this.base( arguments, value, old );
-    },
-
-    _applyValue : function( value, old ) {
-      this._renderValue();
-      this._detectSelectionChange();
-    },
-
-    _renderValue : function() {
-      this._inValueProperty = true;
-      var value = this.getValue();
-      if( this._inputElement != null ) {
-        if (value === null) {
-          value = "";
-        }
-        if( this._inputElement.value !== value ) {
-          this._inputElement.value = value;
-        }
-      }
-      delete this._inValueProperty;
-    },
-
-    _applyMaxLength : function( value, old ) {
-      if( this._inputElement ) {
-        this._inputElement.maxLength = value == null ? "" : value;
-      }
-    },
-
-    _applyReadOnly : function( value, old ) {
-      if( this._inputElement ) {
-        this._inputElement.readOnly = value;
-      }
-      if( value ) {
-        this.addState( "readonly" );
-      } else {
-        this.removeState( "readonly" );
-      }
-    },
-
-    _applyTextColor : function( value, old ) {
-      this._styleTextColor( value );
-    },
-
-    _styleTextColor : function( value ) {
-      this.__textColor = value;
-      this._renderTextColor();
-    },
-
-    _renderTextColor : function() {
-      if( this._inputElement != null ) {
-        this._inputElement.style.color = this.__textColor || "";
-      }
-    },
-
-    _applyFont : function( value, old ) {
-      this._styleFont( value );
-      this._updateLineHeight();
-    },
-
-    _styleFont : function( value ) {
-      this.__font = value;
-      this._renderFont();
-    },
-
-    _renderFont : function() {
-      if( this._inputElement != null ) {
-        if( this.__font != null ) {
-          this.__font.renderElement( this._inputElement );
-        } else {
-          rwt.html.Font.resetElement( this._inputElement );
-        }
-      }
-    },
-
-    _updateLineHeight : function() {
-      if( this._inputElement != null ) {
-        var font = this.getFont();
-        var height = Math.floor( font.getSize() * this._LINE_HEIGT_FACTOR );
-        this._inputElement.style.lineHeight = height + "px";
-      }
-    },
-
-    _applyTextShadow : function( value, oldValue ) {
-      this.__textShadow = value;
-      if( this._inputElement ) {
-        this._renderTextShadow();
-      }
-    },
-
-    _renderTextShadow : function() {
-      rwt.html.Style.setTextShadow( this._inputElement, this.__textShadow );
-    },
-
-    _visualizeFocus : function() {
-      this.base( arguments );
-      if( !rwt.widgets.util.FocusHandler.blockFocus ) {
-        try {
-          this._inputElement.focus();
-        } catch( ex ) {
-          // ignore
-        }
-      }
-    },
-
-    _visualizeBlur : function() {
-      this.base( arguments );
-      try {
-        this._inputElement.blur();
-      } catch( ex ) {
-        // ignore
-      }
-    },
-
-    _afterAppear : function() {
-      this.base( arguments );
-      this._applyBrowserFixesOnAppear();
-      this._centerFieldVertically();
-      this._renderSelection();
-    },
-
-
-    _centerFieldVertically : function() {
-      if( this._inputTag === "input" && this._inputElement ) {
-        var innerHeight = this.getInnerHeight();
-        var inputElementHeight = this._getInputElementHeight();
-        if( inputElementHeight !== 0 ) {
-          var top = ( innerHeight - inputElementHeight ) / 2 - 1;
-          if( top < 0 ) {
-            top = 0;
-          }
-          top = Math.floor( top );
-          // [if] Set padding instead of style.position of the _inputElement.
-          // style.position leads to problems with DOM events in FF 3.0.x
-          // see bug 292487 and bug 284356
-          this.setStyleProperty( "paddingTop", top + "px" );
-        }
-      }
-    },
-
-    _getInputElementHeight : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function() {
-        var result = this._inputElement.offsetHeight;
-        if( result !== 0 ) {
-          result -= 2;
-        }
-        return result;
-      },
-      "default" :function() {
-        return this._inputElement.offsetHeight;
-      }
-    } ),
-
-    ////////////////
-    // event handler
-
-    _oninputDom : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function( event ) {
-        if( !this._inValueProperty && event.propertyName === "value" ) {
-          this._oninput();
-        }
-      },
-      "default" : function( event ) {
-        this._oninput();
-      }
-    } ),
-
-    _oninput : function() {
-      try {
-        var newValue = this.getComputedValue().toString();
-        var doit = true;
-        if( this.hasEventListeners( "input" ) ) {
-          doit = this.dispatchEvent( new rwt.event.DataEvent( "input", this._typed ), true );
-        }
-        if( doit ) {
-          // at least webkit does sometiems fire "input" before the selection is updated
-          rwt.client.Timer.once( this._updateValueProperty, this, 0 );
-        } else if( rwt.client.Client.isWebkit() || rwt.client.Client.isMshtml() ){
-          // some browser set new selection after input event, ignoring all changes before that
-          rwt.client.Timer.once( this._renderSelection, this, 0 );
-          this._selectionNeedsUpdate = true;
-        }
-      } catch( ex ) {
-        rwt.runtime.ErrorHandler.processJavaScriptError( ex );
-      }
-    },
-
-    _updateValueProperty : function() {
-      this.setValue( this.getComputedValue().toString() );
-    },
-
-    _ontabfocus : function() {
-      this.selectAll();
-    },
-
-    _applyFocused : function( newValue, oldValue ) {
-      this.base( arguments, newValue, oldValue );
-      if( !rwt.widgets.util.FocusHandler.mouseFocus ) {
-        this._renderSelection();
-      }
-    },
-
-    _onblur : function() {
-      // RAP workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=201080
-      if( this.getParent() != null ) {
-        this._setSelectionLength( 0 );
-      }
-    },
-
-    // [rst] Catch backspace in readonly text fields to prevent browser default
-    // action (which commonly triggers a history step back)
-    // See https://bugs.eclipse.org/bugs/show_bug.cgi?id=178320
-    _onkeydown : function( e ) {
-      if( e.getKeyIdentifier() == "Backspace" && this.getReadOnly() ) {
-        e.preventDefault();
-      }
-      this._detectSelectionChange();
-      this._typed = null;
-    },
-
-    // [if] Stops keypress propagation
-    // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=335779
-    _onkeypress : function( e ) {
-      if( e.getKeyIdentifier() !== "Tab" ) {
-        e.stopPropagation();
-      }
-      if( this._selectionNeedsUpdate ) {
-        this._renderSelection();
-      }
-      this._detectSelectionChange();
-      this._typed = String.fromCharCode( e.getCharCode() );
-    },
-
-    _onkeyup : function( event ) {
-      if( this._selectionNeedsUpdate ) {
-        this._renderSelection();
-      }
-      this._detectSelectionChange();
-      this._typed = null;
-    },
-
-    _onMouseDownUp : function( event ) {
-      this._detectSelectionChange();
-      this._typed = null;
-    },
-
-    /////////////////
-    // browser quirks
-
-    _applyBrowserFixes : rwt.util.Variant.select( "qx.client", {
-      "default" : function() {},
-      "newmshtml" : function() {
-        // See Bug 372193 - Text widget: Modify Event not fired for Backspace key in IE
-        this._checkTimer = new rwt.client.Timer( 0 );
-        this._checkTimer.addEventListener( "interval", this._checkValueChanged, this );
-        // For delete, backspace, CTRL+X, etc:
-        this.addEventListener( "keypress", this._checkTimer.start, this._checkTimer );
-        this.addEventListener( "keyup", this._checkTimer.start, this._checkTimer );
-        // For context menu: (might not catch the change instantly
-        this.addEventListener( "mousemove", this._checkValueChanged, this );
-        this.addEventListener( "mouseout", this._checkValueChanged, this );
-        // Backup for all other cases (e.g. menubar):
-        this.addEventListener( "blur", this._checkValueChanged, this );
-      }
-    } ),
-
-    _checkValueChanged : function() {
-      this._checkTimer.stop();
-      var newValue = this.getComputedValue();
-      var oldValue = this.getValue();
-      if( newValue !== oldValue ) {
-        this._oninput();
-      }
-    },
-
-    _applyBrowserFixesOnAppear : rwt.util.Variant.select( "qx.client", {
-      "default" : function() {},
-      "mshtml" : function() {
-        if( this._firstInputFixApplied !== true && this._inputElement ) {
-          rwt.client.Timer.once( this._ieFirstInputFix, this, 1 );
-        }
-      }
-    } ),
-
-    _ieFirstInputFix : function() {
-      if( !this.isDisposed() ) {
-        this._inValueProperty = true;
-        this._inputElement.value = this.getValue() === null ? "" : this.getValue().toString();
-        this._renderSelection();
-        this._firstInputFixApplied = true;
-        delete this._inValueProperty;
-      }
-    },
-
-    _applyBrowserFixesOnCreate  : rwt.util.Variant.select( "qx.client", {
-      "default" : function() {},
-      "webkit" : function() {
-        this.addEventListener( "keydown", this._preventEnter, this );
-        this.addEventListener( "keypress", this._preventEnter, this );
-        this.addEventListener( "keyup", this._preventEnter, this );
-      }
-    } ),
-
-    _preventEnter : function( event ) {
-      if( event.getKeyIdentifier() === "Enter" ) {
-        event.preventDefault();
-      }
-    },
-
-    /////////
-    // helper
-
-    isValidString : function( v ) {
-      return typeof v === "string" && v !== "";
-    }
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define("rwt.widgets.base.VerticalBoxLayout",
-{
-  extend : rwt.widgets.base.BoxLayout,
-
-  properties :
-  {
-    orientation :
-    {
-      refine : true,
-      init : "vertical"
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * A button.
- *
- * @appearance button
- * @state abandoned
- * @state over
- * @state pressed
- */
-rwt.qx.Class.define("rwt.widgets.base.Button",
-{
-  extend : rwt.widgets.base.Atom,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function(vText, vIcon, vIconWidth, vIconHeight, vFlash)
-  {
-    this.base(arguments, vText, vIcon, vIconWidth, vIconHeight, vFlash);
-
-    this.initTabIndex();
-
-    this.addEventListener("mouseover", this._onmouseover);
-    this.addEventListener("mouseout", this._onmouseout);
-    this.addEventListener("mousedown", this._onmousedown);
-    this.addEventListener("mouseup", this._onmouseup);
-
-    this.addEventListener("keydown", this._onkeydown);
-    this.addEventListener("keyup", this._onkeyup);
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    appearance :
-    {
-      refine : true,
-      init : "button"
-    },
-
-    tabIndex :
-    {
-      refine : true,
-      init : 1
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /**
-     * Listener method for "mouseover" event
-     * <ul>
-     * <li>Adds state "over"</li>
-     * <li>Removes "abandoned" and adds "pressed" state (if "abandoned" state is set)</li>
-     * </ul>
-     *
-     * @type member
-     * @param e {Event} Mouse event
-     * @return {void}
-     */
-    _onmouseover : function(e)
-    {
-      if (e.getTarget() != this) {
-        return;
-      }
-
-      if (this.hasState("abandoned"))
-      {
-        this.removeState("abandoned");
-        this.addState("pressed");
-      }
-
-      this.addState("over");
-    },
-
-
-    /**
-     * Listener method for "mouseout" event
-     * <ul>
-     * <li>Removes "over" state</li>
-     * <li>Adds "abandoned" and removes "pressed" state (if "pressed" state is set)</li>
-     * </ul>
-     *
-     * @type member
-     * @param e {Event} Mouse event
-     * @return {void}
-     */
-    _onmouseout : function(e)
-    {
-      if (e.getTarget() != this) {
-        return;
-      }
-
-      this.removeState("over");
-
-      if (this.hasState("pressed"))
-      {
-        // Activate capturing if the button get a mouseout while
-        // the button is pressed.
-        this.setCapture(true);
-
-        this.removeState("pressed");
-        this.addState("abandoned");
-      }
-    },
-
-
-    /**
-     * Listener method for "mousedown" event
-     * <ul>
-     * <li>Removes "abandoned" state</li>
-     * <li>Adds "pressed" state</li>
-     * </ul>
-     *
-     * @type member
-     * @param e {Event} Mouse event
-     * @return {void}
-     */
-    _onmousedown : function(e)
-    {
-      if (e.getTarget() != this || !e.isLeftButtonPressed()) {
-        return;
-      }
-
-      this.removeState("abandoned");
-      this.addState("pressed");
-    },
-
-
-    /**
-     * Listener method for "mouseup" event
-     * <ul>
-     * <li>Removes "pressed" state (if set)</li>
-     * <li>Removes "abandoned" state (if set)</li>
-     * <li>Adds "over" state (if "abandoned" state is not set)</li>
-     *
-     * @type member
-     * @param e {Event} Mouse event
-     * @return {void}
-     */
-    _onmouseup : function(e)
-    {
-      this.setCapture(false);
-
-      // We must remove the states before executing the command
-      // because in cases were the window lost the focus while
-      // executing we get the capture phase back (mouseout).
-      var hasPressed = this.hasState("pressed");
-      var hasAbandoned = this.hasState("abandoned");
-
-      if (hasPressed) {
-        this.removeState("pressed");
-      }
-
-      if (hasAbandoned) {
-        this.removeState("abandoned");
-      }
-
-      if (!hasAbandoned)
-      {
-        this.addState("over");
-
-        if (hasPressed) {
-          this.execute();
-        }
-      }
-    },
-
-
-    /**
-     * Listener method for "keydown" event.<br/>
-     * Removes "abandoned" and adds "pressed" state
-     * for the keys "Enter" or "Space"
-     *
-     * @type member
-     * @param e {Event} Key event
-     * @return {void}
-     */
-    _onkeydown : function(e)
-    {
-      switch(e.getKeyIdentifier())
-      {
-        case "Enter":
-        case "Space":
-          this.removeState("abandoned");
-          this.addState("pressed");
-          e.stopPropagation();
-      }
-    },
-
-
-    /**
-     * Listener method for "keyup" event.<br/>
-     * Removes "abandoned" and "pressed" state (if "pressed" state is set)
-     * for the keys "Enter" or "Space"
-     *
-     * @type member
-     * @param e {Event} Key event
-     * @return {void}
-     */
-    _onkeyup : function(e)
-    {
-      switch(e.getKeyIdentifier())
-      {
-        case "Enter":
-        case "Space":
-          if (this.hasState("pressed"))
-          {
-            this.removeState("abandoned");
-            this.removeState("pressed");
-            this.execute();
-            e.stopPropagation();
-          }
-      }
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * This manager is used by all objects which needs ranges like rwt.widgets.base.Spinner, ...
- */
-rwt.qx.Class.define( "rwt.util.Range", {
-
-  extend : rwt.qx.Target,
-
-  events: {
-    "change" : "rwt.event.Event"
-  },
-
-  properties : {
-
-    /** current value of the Range object */
-    value : {
-      check : "!isNaN(value)&&value>=this.getMin()&&value<=this.getMax()",
-      nullable : true,
-      event : "change",
-      init : 0
-    },
-
-    /** maximum fraction digits */
-    precision : {
-      check : "Integer",
-      nullable : true,
-      event : "change",
-      init : 0
-    },
-
-    /** minimal value of the Range object */
-    min : {
-      check : "Number",
-      apply : "_applyMin",
-      event : "change",
-      init : 0
-    },
-
-    /** maximal value of the Range object */
-    max : {
-      check : "Number",
-      apply : "_applyMax",
-      event : "change",
-      init : 100
-    },
-
-    /** whether the value should wrap around */
-    wrap : {
-      check : "Boolean",
-      init : false
-    }
-  },
-
-  members : {
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyMax : function( value, old ) {
-      this.setValue( Math.min( this.getValue(), value ) );
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyMin : function( value, old ) {
-      this.setValue( Math.max( this.getValue(), value) );
-    },
-
-    limit : function( value ) {
-      var precision = this.getPrecision();
-      if( precision != null ) {
-        var mover = Math.pow( 10, precision );
-      }
-
-      if (this.getWrap()) {
-        if (precision != null) {
-          // round to the precision'th digit
-          var value = Math.round( value * mover ) / mover;
-        }
-
-        if (value < this.getMin()) {
-          return ( this.getMax() - ( this.getMin() - value ) ) + 1;
-        }
-        if (value > this.getMax()) {
-          return ( this.getMin() + ( value - this.getMax() ) ) - 1;
-        }
-      }
-
-      if( value < this.getMin() ) {
-        return this.getMin();
-      }
-
-      if( value > this.getMax() ) {
-        return this.getMax();
-      }
-
-      if( precision != null ) {
-        return Math.round( value * mover ) / mover;
-      } else {
-        return value;
-      }
-    }
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * @appearance tab-view
- */
-rwt.qx.Class.define("rwt.widgets.TabFolder",
-{
-  extend : rwt.widgets.base.BoxLayout,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function() {
-    this.base( arguments );
-    this.addEventListener( "changeFocused", rwt.widgets.util.TabUtil.onTabFolderChangeFocused );
-    this.addEventListener( "keypress", rwt.widgets.util.TabUtil.onTabFolderKeyPress );
-    this._bar = new rwt.widgets.base.TabFolderBar();
-    this._pane = new rwt.widgets.base.TabFolderPane();
-    this.add( this._bar, this._pane );
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    appearance :
-    {
-      refine : true,
-      init : "tab-view"
-    },
-
-    orientation :
-    {
-      refine : true,
-      init : "vertical"
-    },
-
-    alignTabsToLeft :
-    {
-      check : "Boolean",
-      init : true,
-      apply : "_applyAlignTabsToLeft"
-    },
-
-    placeBarOnTop :
-    {
-      check : "Boolean",
-      init : true,
-      apply : "_applyPlaceBarOnTop"
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {AbstractPane} TODOC
-     */
-    getPane : function() {
-      return this._pane;
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {AbstractBar} TODOC
-     */
-    getBar : function() {
-      return this._bar;
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyAlignTabsToLeft : function(value, old)
-    {
-      var vBar = this._bar;
-
-      vBar.setHorizontalChildrenAlign(value ? "left" : "right");
-
-      // force re-apply of states for all tabs
-      vBar._addChildrenToStateQueue();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyPlaceBarOnTop : function(value, old)
-    {
-      // This does not work if we use flexible zones
-      // this.setReverseChildrenOrder(!value);
-      var vBar = this._bar;
-
-      // move bar around
-      if (value) {
-        vBar.moveSelfToBegin();
-      } else {
-        vBar.moveSelfToEnd();
-      }
-
-      // force re-apply of states for all tabs
-      vBar._addChildrenToStateQueue();
-    }
-  },
-
-  destruct : function() {
-    this._disposeObjects( "_bar", "_pane" );
-  }
-
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Each instance manages vItems set of radio options: qx.ui.form.RadioButton, qx.ui.toolbar.RadioButton, ...
- */
-rwt.qx.Class.define("rwt.widgets.util.RadioManager",
-{
-  extend : rwt.qx.Target,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function(vName, vMembers)
-  {
-    // we don't need the manager data structures
-    this.base(arguments);
-
-    // create item array
-    this._items = [];
-
-    // apply name property
-    this.setName(vName != null ? vName : rwt.widgets.util.RadioManager.AUTO_NAME_PREFIX + this.toHashCode());
-
-    if (vMembers != null)
-    {
-      // add() iterates over arguments, but vMembers is an array
-      this.add.apply(this, vMembers);
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics : {
-    AUTO_NAME_PREFIX : "qx-radio-"
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    selected :
-    {
-      nullable : true,
-      apply : "_applySelected",
-      event : "changeSelected",
-      check : "rwt.qx.Object"
-    },
-
-    name :
-    {
-      check : "String",
-      nullable : true,
-      apply : "_applyName"
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      UTILITIES
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getItems : function() {
-      return this._items;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getEnabledItems : function()
-    {
-      var b = [];
-
-      for (var i=0, a=this._items, l=a.length; i<l; i++)
-      {
-        if (a[i].getEnabled()) {
-          b.push(a[i]);
-        }
-      }
-
-      return b;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @param vChecked {var} TODOC
-     * @return {void}
-     */
-    handleItemChecked : function(vItem, vChecked)
-    {
-      if (vChecked) {
-        this.setSelected(vItem);
-      } else if (this.getSelected() == vItem) {
-        this.setSelected(null);
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      REGISTRY
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param varargs {var} TODOC
-     * @return {void}
-     */
-    add : function(varargs)
-    {
-      var vItems = arguments;
-      var vLength = vItems.length;
-      var vItem;
-
-      for (var i=0; i<vLength; i++)
-      {
-        vItem = vItems[i];
-
-        if (rwt.util.Arrays.contains(this._items, vItem)) {
-          return;
-        }
-
-        // Push RadioButton to array
-        this._items.push(vItem);
-
-        // Inform radio button about new manager
-        vItem.setManager(this);
-
-        // Need to update internal value?
-        if (vItem.getChecked()) {
-          this.setSelected(vItem);
-        }
-
-        // Apply Make name the same
-        vItem.setName(this.getName());
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {void}
-     */
-    remove : function(vItem)
-    {
-      // Remove RadioButton from array
-      rwt.util.Arrays.remove(this._items, vItem);
-
-      // Inform radio button about new manager
-      vItem.setManager(null);
-
-      // if the radio was checked, set internal selection to null
-      if (vItem.getChecked()) {
-        this.setSelected(null);
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      APPLY ROUTINES
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applySelected : function(value, old)
-    {
-      if (old) {
-        old.setChecked(false);
-      }
-
-      if (value) {
-        value.setChecked(true);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyName : function(value, old)
-    {
-      for (var i=0, vItems=this._items, vLength=vItems.length; i<vLength; i++) {
-        vItems[i].setName(value);
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      SELECTION
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {void}
-     */
-    selectNext : function(vItem)
-    {
-      var vIndex = this._items.indexOf(vItem);
-
-      if (vIndex == -1) {
-        return;
-      }
-
-      var i = 0;
-      var vLength = this._items.length;
-
-      // Find next enabled item
-      vIndex = (vIndex + 1) % vLength;
-
-      while (i < vLength && !this._items[vIndex].getEnabled())
-      {
-        vIndex = (vIndex + 1) % vLength;
-        i++;
-      }
-
-      this._selectByIndex(vIndex);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {void}
-     */
-    selectPrevious : function(vItem)
-    {
-      var vIndex = this._items.indexOf(vItem);
-
-      if (vIndex == -1) {
-        return;
-      }
-
-      var i = 0;
-      var vLength = this._items.length;
-
-      // Find previous enabled item
-      vIndex = (vIndex - 1 + vLength) % vLength;
-
-      while (i < vLength && !this._items[vIndex].getEnabled())
-      {
-        vIndex = (vIndex - 1 + vLength) % vLength;
-        i++;
-      }
-
-      this._selectByIndex(vIndex);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vIndex {var} TODOC
-     * @return {void}
-     */
-    _selectByIndex : function(vIndex)
-    {
-      if (this._items[vIndex].getEnabled())
-      {
-        this.setSelected(this._items[vIndex]);
-        this._items[vIndex].setFocused(true);
-      }
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function() {
-    this._disposeObjectDeep("_items", 1);
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * @appearance tab-view-bar
- */
-rwt.qx.Class.define("rwt.widgets.base.TabFolderBar",
-{
-  extend : rwt.widgets.base.BoxLayout,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function()
-  {
-    this.base(arguments);
-
-    this.initZIndex();
-    this.initHeight();
-    this._manager = new rwt.widgets.util.RadioManager();
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    appearance :
-    {
-      refine : true,
-      init : "tab-view-bar"
-    },
-
-    zIndex :
-    {
-      refine : true,
-      init : 2
-    },
-
-    height :
-    {
-      refine : true,
-      init : "auto"
-    }
-  },
-
-  members : {
-
-    /**
-     * Get the selection manager.
-     *
-     * @type member
-     * @return {rwt.widgets.util.RadioManager} the selection manager of the bar.
-     */
-    getManager : function() {
-      return this._manager;
-    }
-
-  },
-
-  destruct : function() {
-    this._disposeObjects( "_manager" );
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * @appearance tab-view-pane
- */
-rwt.qx.Class.define("rwt.widgets.base.TabFolderPane",
-{
-  extend : rwt.widgets.base.Parent,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function()
-  {
-    this.base(arguments);
-
-    this.initZIndex();
-    this.initHeight();
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    appearance :
-    {
-      refine : true,
-      init : "tab-view-pane"
-    },
-
-    zIndex :
-    {
-      refine : true,
-      init : 1
-    },
-
-    height :
-    {
-      refine : true,
-      init : "1*"
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * @appearance popup
- */
-rwt.qx.Class.define("rwt.widgets.base.Popup",
-{
-  extend : rwt.widgets.base.Parent,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function()
-  {
-    this.base(arguments);
-
-    this.setZIndex(this._minZIndex);
-
-    // Init Focus Handler
-    if (this._isFocusRoot) {
-      this.activateFocusRoot();
-    }
-
-    this.initHeight();
-    this.initWidth();
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    appearance :
-    {
-      refine : true,
-      init : "popup"
-    },
-
-    width :
-    {
-      refine : true,
-      init : "auto"
-    },
-
-    height :
-    {
-      refine : true,
-      init : "auto"
-    },
-
-
-    /**
-     * Make element displayed (if switched to true the widget will be created, if needed, too).
-     *  Instead of rwt.widgets.base.Widget, the default is false here.
-     */
-    display :
-    {
-      refine : true,
-      init : false
-    },
-
-
-
-
-    /**
-     * Whether to let the system decide when to hide the popup. Setting
-     *  this to false gives you better control but it also requires you
-     *  to handle the closing of the popup.
-     */
-    autoHide :
-    {
-      check : "Boolean",
-      init : true
-    },
-
-
-    /** Center the popup on open */
-    centered :
-    {
-      check : "Boolean",
-      init : false
-    },
-
-
-    /**
-     * Whether the popup should be restricted to the visible area of the page when opened.
-     */
-    restrictToPageOnOpen :
-    {
-      check : "Boolean",
-      init : true
-    },
-
-
-    /**
-     * The minimum offset to the left of the page too keep when
-     * {@link #restrictToPageOnOpen} is true (in pixels).
-     */
-    restrictToPageLeft :
-    {
-      check : "Integer",
-      init : 0
-    },
-
-
-    /**
-     * The minimum offset to the right of the page too keep when
-     * {@link #restrictToPageOnOpen} is true (in pixels).
-     */
-    restrictToPageRight :
-    {
-      check : "Integer",
-      init : 0
-    },
-
-
-    /**
-     * The minimum offset to the top of the page too keep when
-     * {@link #restrictToPageOnOpen} is true (in pixels).
-     */
-    restrictToPageTop :
-    {
-      check : "Integer",
-      init : 0
-    },
-
-
-    /**
-     * The minimum offset to the bottom of the page too keep when
-     * {@link #restrictToPageOnOpen} is true (in pixels).
-     */
-    restrictToPageBottom :
-    {
-      check : "Integer",
-      init : 0
-    }
-
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    _isFocusRoot : true,
-
-    _showTimeStamp : (new Date(0)).valueOf(),
-    _hideTimeStamp : (new Date(0)).valueOf(),
-
-    /*
-    ---------------------------------------------------------------------------
-      APPEAR/DISAPPEAR
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Callback for "beforeAppear" event.<br/>
-     * Moves the popup out of the visible area to ensure the popup widget is
-     * displayed in the boundaries of the document. This mechnism jumps in when
-     * {@link #restrictToPageOnOpen} is set to <code>true</code> (default).<br/>
-     * Additionally the popup widget is registered at the popup manager and the
-     * method {@link #bringToFront} is called.
-     *
-     * @type member
-     * @return {void}
-     */
-    _beforeAppear : function()
-    {
-      this.base(arguments);
-
-      if (this.getRestrictToPageOnOpen())
-      {
-        this._wantedLeft = this.getLeft();
-
-        if (this._wantedLeft != null)
-        {
-          // Move the popup out of the view so its size could be calculated before
-          // it is positioned.
-          this.setLeft(10000);
-
-          if (this.getElement() != null)
-          {
-            // The popup was already visible once before
-            // -> Move it immediately before it gets visible again
-            this.getElement().style.left = 10000;
-          }
-        }
-      }
-
-      rwt.widgets.util.PopupManager.getInstance().add(this);
-      rwt.widgets.util.PopupManager.getInstance().update(this);
-
-      this._showTimeStamp = (new Date()).valueOf();
-      this.bringToFront();
-    },
-
-
-    /**
-     * Callback method for the "beforeDisappear" event.<br/>
-     * The popup widget gets deregistered from the popup manager.
-     *
-     * @type member
-     * @return {void}
-     */
-    _beforeDisappear : function()
-    {
-      this.base(arguments);
-
-      rwt.widgets.util.PopupManager.getInstance().remove(this);
-
-      this._hideTimeStamp = (new Date()).valueOf();
-    },
-
-
-    /**
-     * Callback method for the "afterAppear" event.<br/>
-     * If the property {@link #restrictToPageOnOpen} is set to <code>true</code>
-     * the popup gets repositioned to get displayed within the boundaries of the
-     * client document.
-     *
-     * @type member
-     * @return {void}
-     */
-    _afterAppear : function()
-    {
-      this.base(arguments);
-
-      if (this.getRestrictToPageOnOpen())
-      {
-        var doc = rwt.widgets.base.ClientDocument.getInstance();
-        var docWidth = doc.getClientWidth();
-        var docHeight = doc.getClientHeight();
-
-        var scrollTop = rwt.html.Viewport.getScrollTop();
-        var scrollLeft = rwt.html.Viewport.getScrollLeft();
-
-        var restrictToPageLeft = this.getRestrictToPageLeft() + scrollLeft;
-        var restrictToPageRight = this.getRestrictToPageRight() - scrollLeft;
-        var restrictToPageTop = this.getRestrictToPageTop() + scrollTop;
-        var restrictToPageBottom = this.getRestrictToPageBottom() - scrollTop;
-
-        var left = (this._wantedLeft == null) ? this.getLeft() : this._wantedLeft;
-        var top = this.getTop();
-        var width = this.getBoxWidth();
-        var height = this.getBoxHeight();
-
-        var oldLeft = this.getLeft();
-        var oldTop = top;
-
-        // NOTE: We check right and bottom first, because top and left should have
-        //       priority, when both sides are violated.
-        if (left + width > docWidth - restrictToPageRight) {
-          left = docWidth - restrictToPageRight - width;
-        }
-
-        if (top + height > docHeight - restrictToPageBottom) {
-          top = docHeight - restrictToPageBottom - height;
-        }
-
-        if (left < restrictToPageLeft) {
-          left = restrictToPageLeft;
-        }
-
-        if (top < restrictToPageTop) {
-          top = restrictToPageTop;
-        }
-
-        if (left != oldLeft || top != oldTop)
-        {
-          var self = this;
-
-          window.setTimeout(function()
-          {
-            self.setLeft(left);
-            self.setTop(top);
-          },
-          0);
-        }
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      ACTIVE/INACTIVE
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Sets the popup widget as active child
-     *
-     * @type member
-     * @return {void}
-     */
-    _makeActive : function() {
-      this.getFocusRoot().setActiveChild(this);
-    },
-
-
-    /**
-     * Give back the focus control to the focus root.
-     *
-     * @type member
-     * @return {void}
-     */
-    _makeInactive : function()
-    {
-      var vRoot = this.getFocusRoot();
-      var vCurrent = vRoot.getActiveChild();
-
-      if (vCurrent == this) {
-        vRoot.setActiveChild(vRoot);
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      ZIndex Positioning
-    ---------------------------------------------------------------------------
-    */
-
-    _minZIndex : 1e6,
-
-
-    /**
-     * Sets the {@link #zIndex} to Infinity and calls the
-     * method {@link #_sendTo}
-     *
-     * @type member
-     * @return {void}
-     */
-    bringToFront : function()
-    {
-      this.setZIndex(this._minZIndex+1000000);
-      this._sendTo();
-    },
-
-
-    /**
-     * Sets the {@link #zIndex} to -Infinity and calls the
-     * method {@link #_sendTo}
-     *
-     * @type member
-     * @return {void}
-     */
-    sendToBack : function()
-    {
-      this.setZIndex(this._minZIndex+1);
-      this._sendTo();
-    },
-
-
-    /**
-     * Resets the zIndex of all registered popups and menus
-     * (getting the instances via the {@link rwt.widgets.util.PopupManager} and
-     * the {@link qx.ui.menu.Manager}) one higher than the defined minimum zIndex.
-     *
-     * @type member
-     * @return {void}
-     */
-    _sendTo : function()
-    {
-      var vPopups = rwt.util.Objects.getValues(rwt.widgets.util.PopupManager.getInstance().getAll());
-      var zIndexCompare = function(a, b) {
-        return a.getZIndex() - b.getZIndex();
-      };
-      if (rwt.event.EventHandler.getMenuManager() != null)
-      {
-        var manager = rwt.event.EventHandler.getMenuManager();
-        var vMenus = rwt.util.Objects.getValues(manager.getAll());
-        var vAll = vPopups.concat(vMenus).sort(zIndexCompare);
-      }
-      else
-      {
-        var vAll = vPopups.sort(zIndexCompare);
-      }
-
-      var vLength = vAll.length;
-      var vIndex = this._minZIndex;
-
-      for (var i=0; i<vLength; i++) {
-        vAll[i].setZIndex(vIndex++);
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      TIMESTAMP HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Utility method to get the current showTimeStamp
-     *
-     * @type member
-     * @return {Number} Timestamp
-     */
-    getShowTimeStamp : function() {
-      return this._showTimeStamp;
-    },
-
-
-    /**
-     * Utility method to get the current showTimeStamp
-     *
-     * @type member
-     * @return {Number} Timestamp
-     */
-    getHideTimeStamp : function() {
-      return this._hideTimeStamp;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      UTILITIES
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Positions the popup relative to some reference element.
-     *
-     * @type member
-     * @param el {Element|rwt.widgets.base.Widget} Reference DOM element/widget.
-     * @param offsetX {Integer ? 0} Offset in pixels in X direction (optional).
-     * @param offsetY {Integer ? 0} Offset in pixels in Y direction (optional).
-     */
-    positionRelativeTo : function(el, offsetX, offsetY)
-    {
-      if (el instanceof rwt.widgets.base.Widget) {
-        el = el.getElement();
-      }
-
-      if (el)
-      {
-       var elementPos = rwt.html.Location.get(el);
-       this.setLocation(
-         elementPos.left + (offsetX || 0),
-         elementPos.top + (offsetY || 0)
-       );
-      }
-      else
-      {
-        throw new Error( 'Missing reference element' );
-      }
-    },
-
-
-    /**
-     * Centers the popup using the coordinates of the {@link rwt.widgets.base.ClientDocument}.
-     * This method does only work if the Popup has already been rendered, so it
-     * is best to call it in the {@link rwt.widgets.base.Widget#appear} event.
-     *
-     * @type member
-     */
-    centerToBrowser : function()
-    {
-      var d = rwt.widgets.base.ClientDocument.getInstance();
-
-      var left = (d.getClientWidth() - this.getBoxWidth()) / 2;
-      var top = (d.getClientHeight() - this.getBoxHeight()) / 2;
-
-      this.setLeft(left < 0 ? 0 : left);
-      this.setTop(top < 0 ? 0 : top);
-    }
-  },
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function()
-  {
-    rwt.widgets.util.PopupManager.getInstance().remove(this);
-
-    this._disposeFields("_showTimeStamp", "_hideTimeStamp");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/** This singleton is used to manager multiple instances of popups and their state. */
-rwt.qx.Class.define("rwt.widgets.util.PopupManager",
-{
-  type : "singleton",
-  extend : rwt.util.ObjectManager,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function() {
-    this.base(arguments);
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      METHODS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Updates all registered popups
-     *
-     * @type member
-     * @param vTarget {rwt.widgets.base.Popup | rwt.widgets.base.ToolTip} current widget
-     * @return {void}
-     */
-    update : function(vTarget)
-    {
-      // be sure that target is correctly set (needed for contains() later)
-      if (!(vTarget instanceof rwt.widgets.base.Widget)) {
-        vTarget = null;
-      }
-
-      var vPopup, vHashCode;
-      var vAll = this.getAll();
-
-      for (vHashCode in vAll)
-      {
-        vPopup = vAll[vHashCode];
-
-        if (!vPopup.getAutoHide() || vTarget == vPopup || vPopup.contains(vTarget)) {
-          continue;
-        }
-
-        if (rwt.qx.Class.isDefined("rwt.widgets.base.ToolTip") && vTarget instanceof rwt.widgets.base.ToolTip && !(vPopup instanceof rwt.widgets.base.ToolTip)) {
-          continue;
-        }
-
-        vPopup.hide();
-      }
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * This class represents a selection and manage incoming events for widgets
- * which need selection support.
- */
-rwt.qx.Class.define("rwt.widgets.util.SelectionManager",
-{
-  extend : rwt.qx.Target,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function(vBoundedWidget)
-  {
-    this.base(arguments);
-
-    this._selectedItems = new rwt.widgets.util.Selection(this);
-
-    if (vBoundedWidget != null) {
-      this.setBoundedWidget(vBoundedWidget);
-    }
-  },
-
-
-
-  /*
-  *****************************************************************************
-     EVENTS
-  *****************************************************************************
-  */
-
-  events:
-  {
-    /**
-     * Fired on a selection change. The "data" proeprty is set to an array of
-     * selected items as returned by {@link #getSelectedItems}.
-     **/
-    "changeSelection" : "rwt.event.DataEvent"
-  },
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    /** This contains the currently assigned widget (qx.ui.form.List, ...) */
-    boundedWidget :
-    {
-      check : "rwt.widgets.base.Widget",
-      nullable : true
-    },
-
-
-    /** Should multiple selection be allowed? */
-    multiSelection :
-    {
-      check: "Boolean",
-      init : true
-    },
-
-
-    /** Enable drag selection? */
-    dragSelection :
-    {
-      check : "Boolean",
-      init : true
-    },
-
-
-    /** Should the user be able to select */
-    canDeselect :
-    {
-      check : "Boolean",
-      init : true
-    },
-
-
-    /** Should a change event be fired? */
-    fireChange :
-    {
-      check : "Boolean",
-      init : true
-    },
-
-
-    /** The current anchor in range selections. */
-    anchorItem :
-    {
-      check : "Object",
-      nullable : true,
-      apply : "_applyAnchorItem",
-      event : "changeAnchorItem"
-    },
-
-
-    /** The last selected item */
-    leadItem :
-    {
-      check : "Object",
-      nullable : true,
-      apply : "_applyLeadItem",
-      event : "changeLeadItem"
-    },
-
-
-    /** Grid selection */
-    multiColumnSupport :
-    {
-      check : "Boolean",
-      init : false
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      APPLY ROUTINES
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyAnchorItem : function(value, old)
-    {
-      if (old) {
-        this.renderItemAnchorState(old, false);
-      }
-
-      if (value) {
-        this.renderItemAnchorState(value, true);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyLeadItem : function(value, old)
-    {
-      if (old) {
-        this.renderItemLeadState(old, false);
-      }
-
-      if (value) {
-        this.renderItemLeadState(value, true);
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      MAPPING TO BOUNDED WIDGET
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    _getFirst : function() {
-      return this.getBoundedWidget().getFirstVisibleChild();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    _getLast : function() {
-      return this.getBoundedWidget().getLastVisibleChild();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getFirst : function()
-    {
-      var vItem = this._getFirst();
-
-      if (vItem) {
-        return vItem.getEnabled() ? vItem : this.getNext(vItem);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getLast : function()
-    {
-      var vItem = this._getLast();
-
-      if (vItem) {
-        return vItem.getEnabled() ? vItem : this.getPrevious(vItem);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getItems : function() {
-      return this.getBoundedWidget().getChildren();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {var} TODOC
-     */
-    getNextSibling : function(vItem) {
-      return vItem.getNextSibling();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {var} TODOC
-     */
-    getPreviousSibling : function(vItem) {
-      return vItem.getPreviousSibling();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {var | null} TODOC
-     */
-    getNext : function(vItem)
-    {
-      while (vItem)
-      {
-        vItem = this.getNextSibling(vItem);
-
-        if (!vItem) {
-          break;
-        }
-
-        if (this.getItemEnabled(vItem)) {
-          return vItem;
-        }
-      }
-
-      return null;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {var | null} TODOC
-     */
-    getPrevious : function(vItem)
-    {
-      while (vItem)
-      {
-        vItem = this.getPreviousSibling(vItem);
-
-        if (!vItem) {
-          break;
-        }
-
-        if (this.getItemEnabled(vItem)) {
-          return vItem;
-        }
-      }
-
-      return null;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem1 {var} TODOC
-     * @param vItem2 {var} TODOC
-     * @return {boolean} TODOC
-     */
-    isBefore : function(vItem1, vItem2)
-    {
-      var cs = this.getItems();
-      return cs.indexOf(vItem1) < cs.indexOf(vItem2);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem1 {var} TODOC
-     * @param vItem2 {var} TODOC
-     * @return {var} TODOC
-     */
-    isEqual : function(vItem1, vItem2) {
-      return vItem1 == vItem2;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      MAPPING TO ITEM PROPERTIES
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {var} TODOC
-     */
-    getItemHashCode : function(vItem) {
-      return vItem.toHashCode();
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      MAPPING TO ITEM DIMENSIONS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @param vTopLeft {var} TODOC
-     * @return {void}
-     */
-    scrollItemIntoView : function(vItem, vTopLeft) {
-      vItem.scrollIntoView(vTopLeft);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {var} TODOC
-     */
-    getItemLeft : function(vItem) {
-      return vItem.getOffsetLeft();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {var} TODOC
-     */
-    getItemTop : function(vItem) {
-      return vItem.getOffsetTop();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {var} TODOC
-     */
-    getItemWidth : function(vItem) {
-      return vItem.getOffsetWidth();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {var} TODOC
-     */
-    getItemHeight : function(vItem) {
-      return vItem.getOffsetHeight();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {var} TODOC
-     */
-    getItemEnabled : function(vItem) {
-      return vItem.getEnabled();
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      ITEM STATE MANAGMENT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @param vIsSelected {var} TODOC
-     * @return {void}
-     */
-    renderItemSelectionState : function( vItem, vIsSelected ) {
-      if( vIsSelected ) {
-        vItem.addState( "selected" );
-      } else {
-        vItem.removeState( "selected" );
-      }
-      if( vItem.handleStateChange ) {
-        vItem.handleStateChange();
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @param vIsAnchor {var} TODOC
-     * @return {void}
-     */
-    renderItemAnchorState : function( vItem, vIsAnchor ) {
-      if( vIsAnchor ) {
-        vItem.addState( "anchor" );
-      } else {
-        vItem.removeState( "anchor" );
-      }
-      if( vItem.handleStateChange != null ) {
-        vItem.handleStateChange();
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @param vIsLead {var} TODOC
-     * @return {void}
-     */
-    renderItemLeadState : function( vItem, vIsLead ) {
-      if( vIsLead ) {
-        vItem.addState( "lead" );
-      } else {
-        vItem.removeState( "lead" );
-      }
-      if( vItem.handleStateChange != null ) {
-        vItem.handleStateChange();
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      SELECTION HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {var} TODOC
-     */
-    getItemSelected : function(vItem) {
-      return this._selectedItems.contains(vItem);
-    },
-
-
-    /**
-     * Make a single item selected / not selected
-     *
-     * #param vItem[rwt.widgets.base.Widget]: Item which should be selected / not selected
-     * #param vSelected[Boolean]: Should this item be selected?
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @param vSelected {var} TODOC
-     * @return {void}
-     */
-    setItemSelected : function(vItem, vSelected)
-    {
-      switch(this.getMultiSelection())
-      {
-          // Multiple item selection is allowed
-        case true:
-          if (!this.getItemEnabled(vItem)) {
-            return;
-          }
-
-          // If selection state is not to be changed => return
-          if (this.getItemSelected(vItem) == vSelected) {
-            return;
-          }
-
-          // Otherwise render new state
-          this.renderItemSelectionState(vItem, vSelected);
-
-          // Add item to selection hash / delete it from there
-          if( vSelected ) {
-            this._selectedItems.add( vItem );
-          } else {
-            this._selectedItems.remove( vItem );
-          }
-
-          // Dispatch change Event
-          this._dispatchChange();
-
-          break;
-
-          // Multiple item selection is NOT allowed
-
-        case false:
-          var item0 = this.getSelectedItems()[0];
-
-          if (vSelected)
-          {
-            // Precheck for any changes
-            var old = item0;
-
-            if (this.isEqual(vItem, old)) {
-              return;
-            }
-
-            // Reset rendering of previous selected item
-            if (old != null) {
-              this.renderItemSelectionState(old, false);
-            }
-
-            // Render new item as selected
-            this.renderItemSelectionState(vItem, true);
-
-            // Reset current selection hash
-            this._selectedItems.removeAll();
-
-            // Add new one
-            this._selectedItems.add(vItem);
-
-            // Dispatch change Event
-            this._dispatchChange();
-          }
-          else
-          {
-            // Pre-check if item is currently selected
-            // Do not allow deselection in single selection mode
-            if (!this.isEqual(item0, vItem))
-            {
-              // Reset rendering as selected item
-              this.renderItemSelectionState(vItem, false);
-
-              // Dispatch change Event
-              this._dispatchChange();
-            }
-          }
-
-          break;
-      }
-    },
-
-
-    /**
-     * Get the selected items (objects)
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getSelectedItems : function() {
-      return this._selectedItems.toArray();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getSelectedItem : function() {
-      return this._selectedItems.getFirst();
-    },
-
-
-    /**
-     * Select given items
-     *
-     * #param vItems[Array of Widgets]: Items to select
-     *
-     * @type member
-     * @param vItems {var} TODOC
-     * @return {void}
-     */
-    setSelectedItems : function(vItems)
-    {
-      var oldVal = this._getChangeValue();
-
-      // Temporary disabling of event fire
-      var oldFireChange = this.getFireChange();
-      this.setFireChange(false);
-
-      // Deselect all currently selected items
-      this._deselectAll();
-
-      // Apply new selection
-      var vItem;
-      var vItemLength = vItems.length;
-
-      for (var i=0; i<vItemLength; i++)
-      {
-        vItem = vItems[i];
-
-        if (!this.getItemEnabled(vItem)) {
-          continue;
-        }
-
-        // Add item to selection
-        this._selectedItems.add(vItem);
-
-        // Render new state for item
-        this.renderItemSelectionState(vItem, true);
-      }
-
-      // Recover change event status
-      this.setFireChange(oldFireChange);
-
-      // Dispatch change Event
-      if (oldFireChange && this._hasChanged(oldVal)) {
-        this._dispatchChange();
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {void}
-     */
-    setSelectedItem : function(vItem)
-    {
-      if (!vItem) {
-        return;
-      }
-
-      if (!this.getItemEnabled(vItem)) {
-        return;
-      }
-
-      var oldVal = this._getChangeValue();
-
-      // Temporary disabling of event fire
-      var oldFireChange = this.getFireChange();
-      this.setFireChange(false);
-
-      // Deselect all currently selected items
-      this._deselectAll();
-
-      // Add item to selection
-      this._selectedItems.add(vItem);
-
-      // Render new state for item
-      this.renderItemSelectionState(vItem, true);
-
-      // Recover change event status
-      this.setFireChange(oldFireChange);
-
-      // Dispatch change Event
-      if (oldFireChange && this._hasChanged(oldVal)) {
-        this._dispatchChange();
-      }
-    },
-
-
-    /**
-     * Select all items.
-     *
-     * @type member
-     * @return {void}
-     */
-    selectAll : function()
-    {
-      var oldVal = this._getChangeValue();
-
-      // Temporary disabling of event fire
-      var oldFireChange = this.getFireChange();
-      this.setFireChange(false);
-
-      // Call sub method to select all items
-      this._selectAll();
-
-      // Recover change event status
-      this.setFireChange(oldFireChange);
-
-      // Dispatch change Event
-      if (oldFireChange && this._hasChanged(oldVal)) {
-        this._dispatchChange();
-      }
-    },
-
-
-    /**
-     * Sub method for selectAll. Handles the real work
-     *  to select all items.
-     *
-     * @type member
-     * @return {void | Boolean} TODOC
-     */
-    _selectAll : function()
-    {
-      if (!this.getMultiSelection()) {
-        return;
-      }
-
-      var vItem;
-      var vItems = this.getItems();
-      var vItemsLength = vItems.length;
-
-      // Reset current selection hash
-      this._selectedItems.removeAll();
-
-      for (var i=0; i<vItemsLength; i++)
-      {
-        vItem = vItems[i];
-
-        if (!this.getItemEnabled(vItem)) {
-          continue;
-        }
-
-        // Add item to selection
-        this._selectedItems.add(vItem);
-
-        // Render new state for item
-        this.renderItemSelectionState(vItem, true);
-      }
-
-      return true;
-    },
-
-
-    /**
-     * Deselect all items.
-     *
-     * @type member
-     * @return {void}
-     */
-    deselectAll : function()
-    {
-      var oldVal = this._getChangeValue();
-
-      // Temporary disabling of event fire
-      var oldFireChange = this.getFireChange();
-      this.setFireChange(false);
-
-      // Call sub method to deselect all items
-      this._deselectAll();
-
-      // Recover change event status
-      this.setFireChange(oldFireChange);
-
-      // Dispatch change Event
-      if( oldFireChange && this._hasChanged( oldVal ) ) {
-        this._dispatchChange();
-      }
-    },
-
-
-    /**
-     * Sub method for deselectAll. Handles the real work
-     *  to deselect all items.
-     *
-     * @type member
-     */
-    _deselectAll : function()
-    {
-      // Render new state for items
-      var items = this._selectedItems.toArray();
-
-      for (var i=0; i<items.length; i++) {
-        this.renderItemSelectionState(items[i], false);
-      }
-
-      // Delete all entries in selectedItems hash
-      this._selectedItems.removeAll();
-
-      return true;
-    },
-
-
-    /**
-     * Select a range of items.
-     *
-     * #param vItem1[rwt.widgets.base.Widget]: Start item
-     * #param vItem2[rwt.widgets.base.Widget]: Stop item
-     *
-     * @type member
-     * @param vItem1 {var} TODOC
-     * @param vItem2 {var} TODOC
-     * @return {void}
-     */
-    selectItemRange : function(vItem1, vItem2)
-    {
-      var oldVal = this._getChangeValue();
-
-      // Temporary disabling of event fire
-      var oldFireChange = this.getFireChange();
-      this.setFireChange(false);
-
-      // Call sub method to select the range of items
-      this._selectItemRange(vItem1, vItem2, true);
-
-      // Recover change event status
-      this.setFireChange(oldFireChange);
-
-      // Dispatch change Event
-      if (oldFireChange && this._hasChanged(oldVal)) {
-        this._dispatchChange();
-      }
-    },
-
-
-    /**
-     * Sub method for selectItemRange. Handles the real work
-     * to select a range of items.
-     *
-     * #param vItem1[rwt.widgets.base.Widget]: Start item
-     * #param vItem2[rwt.widgets.base.Widget]: Stop item
-     * #param vDelect[Boolean]: Deselect currently selected items first?
-     *
-     * @type member
-     * @param vItem1 {var} TODOC
-     * @param vItem2 {var} TODOC
-     * @param vDeselect {var} TODOC
-     * @return {var | Boolean} TODOC
-     */
-    _selectItemRange : function(vItem1, vItem2, vDeselect)
-    {
-      // Pre-Check a revert call if vItem2 is before vItem1
-      if (this.isBefore(vItem2, vItem1)) {
-        return this._selectItemRange(vItem2, vItem1, vDeselect);
-      }
-
-      // Deselect all
-      if (vDeselect) {
-        this._deselectAll();
-      }
-
-      var vCurrentItem = vItem1;
-
-      while (vCurrentItem != null)
-      {
-        if (this.getItemEnabled(vCurrentItem))
-        {
-          // Add item to selection
-          this._selectedItems.add(vCurrentItem);
-
-          // Render new state for item
-          this.renderItemSelectionState(vCurrentItem, true);
-        }
-
-        // Stop here if we reached target item
-        if (this.isEqual(vCurrentItem, vItem2)) {
-          break;
-        }
-
-        // Get next item
-        vCurrentItem = this.getNext(vCurrentItem);
-      }
-
-      return true;
-    },
-
-
-    /**
-     * Internal method for deselection of ranges.
-     *
-     * #param vItem1[rwt.widgets.base.Widget]: Start item
-     * #param vItem2[rwt.widgets.base.Widget]: Stop item
-     *
-     * @type member
-     * @param vItem1 {var} TODOC
-     * @param vItem2 {var} TODOC
-     * @return {var} TODOC
-     */
-    _deselectItemRange : function(vItem1, vItem2)
-    {
-      // Pre-Check a revert call if vItem2 is before vItem1
-      if (this.isBefore(vItem2, vItem1)) {
-        return this._deselectItemRange(vItem2, vItem1);
-      }
-
-      var vCurrentItem = vItem1;
-
-      while (vCurrentItem != null)
-      {
-        // Add item to selection
-        this._selectedItems.remove(vCurrentItem);
-
-        // Render new state for item
-        this.renderItemSelectionState(vCurrentItem, false);
-
-        // Stop here if we reached target item
-        if (this.isEqual(vCurrentItem, vItem2)) {
-          break;
-        }
-
-        // Get next item
-        vCurrentItem = this.getNext(vCurrentItem);
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      MOUSE EVENT HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    _activeDragSession : false,
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    handleMouseDown : function(vItem, e)
-    {
-      // stop propagation of the event here to prevent
-      // reaction of subwidgets
-      e.stopPropagation();
-
-      // Only allow left and right button
-      if (!e.isLeftButtonPressed() && !e.isRightButtonPressed()) {
-        return;
-      }
-
-      // Keep selection on right click on already selected item
-      if (e.isRightButtonPressed() && this.getItemSelected(vItem)) {
-        return;
-      }
-
-      // Shift Key
-      //   or
-      // Click on an unseleted item (without Ctrl)
-      if (e.isShiftPressed() || this.getDragSelection() || (!this.getItemSelected(vItem) && !e.isCtrlPressed()))
-      {
-        // Handle event
-        this._onmouseevent(vItem, e);
-      }
-      else
-      {
-        // Update lead item
-        this.setLeadItem(vItem);
-      }
-
-      // Handle dragging
-      this._activeDragSession = this.getDragSelection();
-
-      if (this._activeDragSession)
-      {
-        // Add mouseup listener and register as capture widget
-        this.getBoundedWidget().addEventListener("mouseup", this._ondragup, this);
-        this.getBoundedWidget().setCapture(true);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    _ondragup : function(e)
-    {
-      this.getBoundedWidget().removeEventListener("mouseup", this._ondragup, this);
-      this.getBoundedWidget().setCapture(false);
-      this._activeDragSession = false;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    handleMouseUp : function(vItem, e)
-    {
-      if (!e.isLeftButtonPressed()) {
-        return;
-      }
-
-      if (e.isCtrlPressed() || this.getItemSelected(vItem) && !this._activeDragSession) {
-        this._onmouseevent(vItem, e);
-      }
-
-      if (this._activeDragSession)
-      {
-        this._activeDragSession = false;
-        this.getBoundedWidget().setCapture(false);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param oItem {Object} TODOC
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    handleMouseOver : function(oItem, e)
-    {
-      if (!this.getDragSelection() || !this._activeDragSession) {
-        return;
-      }
-
-      this._onmouseevent(oItem, e, true);
-    },
-
-    // currently unused placeholder
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    handleClick : function(vItem, e) {},
-
-    // currently unused placeholder
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    handleDblClick : function(vItem, e) {},
-
-
-    /**
-     * Internal handler for all mouse events bound to this manager.
-     *
-     * @type member
-     * @param oItem {Object} TODOC
-     * @param e {Event} TODOC
-     * @param bOver {Boolean} TODOC
-     * @return {void}
-     */
-    _onmouseevent : function(oItem, e, bOver)
-    {
-      if (!this.getItemEnabled(oItem)) {
-        return;
-      }
-
-      // ********************************************************************
-      //   Init
-      // ********************************************************************
-      // Cache current (old) values
-      var oldVal = this._getChangeValue();
-      var oldLead = this.getLeadItem();
-
-      // Temporary disabling of event fire
-      var oldFireChange = this.getFireChange();
-      this.setFireChange(false);
-
-      // Cache selection and count
-      var selectedItems = this.getSelectedItems();
-      var selectedCount = selectedItems.length;
-
-      // Update lead item
-      this.setLeadItem(oItem);
-
-      // Cache current anchor item
-      var currentAnchorItem = this.getAnchorItem();
-
-      // Cache keys pressed
-      var vCtrlKey = e.isCtrlPressed();
-      var vShiftKey = e.isShiftPressed();
-
-      // ********************************************************************
-      //   Do we need to update the anchor?
-      // ********************************************************************
-      if(   !currentAnchorItem
-          || selectedCount === 0
-          || ( vCtrlKey && !vShiftKey && this.getMultiSelection() && !this.getDragSelection() ) )
-      {
-        this.setAnchorItem( oItem );
-        currentAnchorItem = oItem;
-      }
-
-      // ********************************************************************
-      //   Mode #1: Replace current selection with new one
-      // ********************************************************************
-      if ((!vCtrlKey && !vShiftKey && !this._activeDragSession || !this.getMultiSelection()))
-      {
-        if (!this.getItemEnabled(oItem)) {
-          return;
-        }
-
-        // Remove current selection
-        this._deselectAll();
-
-        // Update anchor item
-        this.setAnchorItem(oItem);
-
-        if (this._activeDragSession)
-        {
-          // a little bit hacky, but seems to be a fast way to detect if we slide to top or to bottom
-          this.scrollItemIntoView((this.getBoundedWidget().getScrollTop() > (this.getItemTop(oItem) - 1) ? this.getPrevious(oItem) : this.getNext(oItem)) || oItem);
-        }
-
-        if (!this.getItemSelected(oItem)) {
-          this.renderItemSelectionState(oItem, true);
-        }
-
-        // Clear up and add new one
-        // this._selectedItems.removeAll();
-        this._selectedItems.add(oItem);
-
-        this._addToCurrentSelection = true;
-      }
-
-      // ********************************************************************
-      //   Mode #2: (De-)Select item range in mouse drag session
-      // ********************************************************************
-      else if (this._activeDragSession && bOver)
-      {
-        if (oldLead) {
-          this._deselectItemRange(currentAnchorItem, oldLead);
-        }
-
-        // Drag down
-        if (this.isBefore(currentAnchorItem, oItem))
-        {
-          if (this._addToCurrentSelection) {
-            this._selectItemRange(currentAnchorItem, oItem, false);
-          } else {
-            this._deselectItemRange(currentAnchorItem, oItem);
-          }
-        }
-
-        // Drag up
-        else
-        {
-          if (this._addToCurrentSelection) {
-            this._selectItemRange(oItem, currentAnchorItem, false);
-          } else {
-            this._deselectItemRange(oItem, currentAnchorItem);
-          }
-        }
-
-        // a little bit hacky, but seems to be a fast way to detect if we slide to top or to bottom
-        this.scrollItemIntoView((this.getBoundedWidget().getScrollTop() > (this.getItemTop(oItem) - 1) ? this.getPrevious(oItem) : this.getNext(oItem)) || oItem);
-      }
-
-      // ********************************************************************
-      //   Mode #3: Add new item to current selection (ctrl pressed)
-      // ********************************************************************
-      else if (this.getMultiSelection() && vCtrlKey && !vShiftKey)
-      {
-        if (!this._activeDragSession) {
-          this._addToCurrentSelection = !(this.getCanDeselect() && this.getItemSelected(oItem));
-        }
-
-        this.setItemSelected(oItem, this._addToCurrentSelection);
-        this.setAnchorItem(oItem);
-      }
-
-      // ********************************************************************
-      //   Mode #4: Add new (or continued) range to selection
-      // ********************************************************************
-      else if (this.getMultiSelection() && vCtrlKey && vShiftKey)
-      {
-        if (!this._activeDragSession) {
-          this._addToCurrentSelection = !(this.getCanDeselect() && this.getItemSelected(oItem));
-        }
-
-        if (this._addToCurrentSelection) {
-          this._selectItemRange(currentAnchorItem, oItem, false);
-        } else {
-          this._deselectItemRange(currentAnchorItem, oItem);
-        }
-      }
-
-      // ********************************************************************
-      //   Mode #5: Replace selection with new range selection
-      // ********************************************************************
-      else if (this.getMultiSelection() && !vCtrlKey && vShiftKey)
-      {
-        if (this.getCanDeselect()) {
-          this._selectItemRange(currentAnchorItem, oItem, true);
-        }
-        else
-        {
-          if (oldLead) {
-            this._deselectItemRange(currentAnchorItem, oldLead);
-          }
-
-          this._selectItemRange(currentAnchorItem, oItem, false);
-        }
-      }
-
-      // Recover change event status
-      this.setFireChange(oldFireChange);
-
-      // Dispatch change Event
-      if (oldFireChange && this._hasChanged(oldVal)) {
-        this._dispatchChange();
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      KEY EVENT HANDLER
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Handles key event to perform selection and navigation
-     *
-     * @type member
-     * @param vDomEvent {rwt.event.KeyEvent} event object
-     * @return {void}
-     */
-    handleKeyPress : function(vDomEvent)
-    {
-      var oldVal = this._getChangeValue();
-
-      // Temporary disabling of event fire
-      var oldFireChange = this.getFireChange();
-      this.setFireChange(false);
-
-      // Ctrl+A: Select all
-      if (vDomEvent.getKeyIdentifier() == "A" && vDomEvent.isCtrlPressed())
-      {
-        if (this.getMultiSelection())
-        {
-          this._selectAll();
-
-          // Update lead item to this new last
-          // (or better here: first) selected item
-          this.setLeadItem(this.getFirst());
-        }
-      }
-
-      // Default operation
-      else
-      {
-        var aIndex = this.getAnchorItem();
-        var itemToSelect = this.getItemToSelect(vDomEvent);
-
-        if (itemToSelect && this.getItemEnabled(itemToSelect))
-        {
-          // Update lead item to this new last selected item
-          this.setLeadItem(itemToSelect);
-
-          // Scroll new item into view
-          this.scrollItemIntoView(itemToSelect);
-
-          // Stop event handling
-          vDomEvent.preventDefault();
-
-          // Select a range
-          if (vDomEvent.isShiftPressed() && this.getMultiSelection())
-          {
-            // Make it a little bit more failsafe:
-            // Set anchor if not given already. Allows us to select
-            // a range without any previous selection.
-            if (aIndex == null) {
-              this.setAnchorItem(itemToSelect);
-            }
-
-            // Select new range (and clear up current selection first)
-            this._selectItemRange(this.getAnchorItem(), itemToSelect, true);
-          }
-          else if (!vDomEvent.isCtrlPressed())
-          {
-            // Clear current selection
-            this._deselectAll();
-
-            // Update new item to be selected
-            this.renderItemSelectionState(itemToSelect, true);
-
-            // Add item to new selection
-            this._selectedItems.add(itemToSelect);
-
-            // Update anchor to this new item
-            // (allows following shift range selection)
-            this.setAnchorItem(itemToSelect);
-          }
-          else if (vDomEvent.getKeyIdentifier() == "Space")
-          {
-            if (this._selectedItems.contains(itemToSelect))
-            {
-              // Update new item to be selected
-              this.renderItemSelectionState(itemToSelect, false);
-
-              // Add item to new selection
-              this._selectedItems.remove(itemToSelect);
-
-              // Fix anchor item
-              this.setAnchorItem(this._selectedItems.getFirst());
-            }
-            else
-            {
-              // Clear current selection
-              if (!vDomEvent.isCtrlPressed() || !this.getMultiSelection()) {
-                this._deselectAll();
-              }
-
-              // Update new item to be selected
-              this.renderItemSelectionState(itemToSelect, true);
-
-              // Add item to new selection
-              this._selectedItems.add(itemToSelect);
-
-              // Update anchor to this new item
-              // (allows following shift range selection)
-              this.setAnchorItem(itemToSelect);
-            }
-          }
-        }
-      }
-
-      // Recover change event status
-      this.setFireChange(oldFireChange);
-
-      // Dispatch change Event
-      if (oldFireChange && this._hasChanged(oldVal)) {
-        this._dispatchChange();
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vKeyboardEvent {var} TODOC
-     * @return {null | var} TODOC
-     */
-    getItemToSelect : function(vKeyboardEvent)
-    {
-      // Don't handle ALT here
-      if (vKeyboardEvent.isAltPressed()) {
-        return null;
-      }
-      // Handle event by key identifier
-      switch(vKeyboardEvent.getKeyIdentifier())
-      {
-        case "Home":
-          return this.getHome(this.getLeadItem());
-
-        case "End":
-          return this.getEnd(this.getLeadItem());
-
-        case "Down":
-          return this.getDown(this.getLeadItem());
-
-        case "Up":
-          return this.getUp(this.getLeadItem());
-
-        case "Left":
-          return this.getLeft(this.getLeadItem());
-
-        case "Right":
-          return this.getRight(this.getLeadItem());
-
-        case "PageUp":
-          return this.getPageUp(this.getLeadItem()) || this.getHome(this.getLeadItem());
-
-        case "PageDown":
-          return this.getPageDown(this.getLeadItem()) || this.getEnd(this.getLeadItem());
-
-        case "Space":
-          if (vKeyboardEvent.isCtrlPressed()) {
-            return this.getLeadItem();
-          }
-      }
-
-      return null;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      CHANGE HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    _dispatchChange : function()
-    {
-      if (!this.getFireChange()) {
-        return;
-      }
-
-      if (this.hasEventListeners("changeSelection")) {
-        this.dispatchEvent(new rwt.event.DataEvent("changeSelection", this.getSelectedItems()), true);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param sOldValue {String} TODOC
-     * @return {var} TODOC
-     */
-    _hasChanged : function(sOldValue) {
-      return sOldValue != this._getChangeValue();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    _getChangeValue : function() {
-      return this._selectedItems.getChangeValue();
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      POSITION HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getHome : function() {
-      return this.getFirst();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getEnd : function() {
-      return this.getLast();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {var} TODOC
-     */
-    getDown : function(vItem)
-    {
-      if (!vItem) {
-        return this.getFirst();
-      }
-
-      return this.getMultiColumnSupport() ? (this.getUnder(vItem) || this.getLast()) : this.getNext(vItem);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {var} TODOC
-     */
-    getUp : function(vItem)
-    {
-      if (!vItem) {
-        return this.getLast();
-      }
-
-      return this.getMultiColumnSupport() ? (this.getAbove(vItem) || this.getFirst()) : this.getPrevious(vItem);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {null | var} TODOC
-     */
-    getLeft : function(vItem)
-    {
-      if (!this.getMultiColumnSupport()) {
-        return null;
-      }
-
-      return !vItem ? this.getLast() : this.getPrevious(vItem);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {null | var} TODOC
-     */
-    getRight : function(vItem)
-    {
-      if (!this.getMultiColumnSupport()) {
-        return null;
-      }
-
-      return !vItem ? this.getFirst() : this.getNext(vItem);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @abstract
-     * @param vItem {var} TODOC
-     * @return {var}
-     * @throws the abstract function warning.
-     */
-    getAbove : function(vItem) {
-      throw new Error("getAbove(): Not implemented yet");
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @abstract
-     * @param vItem {var} TODOC
-     * @return {var}
-     * @throws the abstract function warning.
-     */
-    getUnder : function(vItem) {
-      throw new Error("getUnder(): Not implemented yet");
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      PAGE HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Jump a "page" up.
-     *
-     * #param vItem[rwt.widgets.base.Widget]: Relative to this widget
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {var} TODOC
-     */
-    getPageUp : function(vItem)
-    {
-      // Find next item
-      var nextItem = this.getLeadItem();
-
-      if (!nextItem) {
-        nextItem = this.getFirst();
-      }
-
-      var vBoundedWidget = this.getBoundedWidget();
-      if( vBoundedWidget.isCreated() ) {
-        var vParentScrollTop = vBoundedWidget.getScrollTop();
-        var vParentClientHeight = vBoundedWidget.getClientHeight();
-        // Normally we should reach the status "lead" for the
-        // nextItem after two iterations.
-        var tryLoops = 0;
-
-        while (tryLoops < 2)
-        {
-          while (nextItem && (this.getItemTop(nextItem) - this.getItemHeight(nextItem) >= vParentScrollTop)) {
-            nextItem = this.getUp(nextItem);
-          }
-
-          // This should never occour after the fix above
-          if (nextItem == null) {
-            break;
-          }
-
-          // If the nextItem is not anymore the leadItem
-          // Means: There has occured a change.
-          // We break here. This is normally the second step.
-          if (nextItem != this.getLeadItem())
-          {
-            // be sure that the top is reached
-            this.scrollItemIntoView(nextItem, true);
-            break;
-          }
-
-          // Update scrolling (this is normally the first step)
-          vBoundedWidget.setScrollTop(vParentScrollTop - vParentClientHeight - this.getItemHeight(nextItem));
-
-          // Use the real applied value instead of the calulated above
-          vParentScrollTop = vBoundedWidget.getScrollTop();
-
-          // Increment counter
-          tryLoops++;
-        }
-      }
-
-      return nextItem;
-    },
-
-
-    /**
-     * Jump a "page" down.
-     *
-     * #param vItem[rwt.widgets.base.Widget]: Relative to this widget
-     *
-     * @type member
-     * @param vItem {var} TODOC
-     * @return {var} TODOC
-     */
-    getPageDown : function(vItem)
-    {
-      // Find next item
-      var nextItem = this.getLeadItem();
-
-      if (!nextItem) {
-        nextItem = this.getFirst();
-      }
-
-      var vBoundedWidget = this.getBoundedWidget();
-      if( vBoundedWidget.isCreated() ) {
-        var vParentScrollTop = vBoundedWidget.getScrollTop();
-        var vParentClientHeight = vBoundedWidget.getClientHeight();
-
-        // Normally we should reach the status "lead" for the
-        // nextItem after two iterations.
-        var tryLoops = 0;
-
-        while (tryLoops < 2)
-        {
-          // Find next
-          while (nextItem && ((this.getItemTop(nextItem) + (2 * this.getItemHeight(nextItem))) <= (vParentScrollTop + vParentClientHeight))) {
-            nextItem = this.getDown(nextItem);
-          }
-
-          // This should never occour after the fix above
-          if (nextItem == null) {
-            break;
-          }
-
-          // If the nextItem is not anymore the leadItem
-          // Means: There has occured a change.
-          // We break here. This is normally the second step.
-          if (nextItem != this.getLeadItem()) {
-            break;
-          }
-
-          // Update scrolling (this is normally the first step)
-          vBoundedWidget.setScrollTop(vParentScrollTop + vParentClientHeight - 2 * this.getItemHeight(nextItem));
-
-          // Use the real applied value instead of the calulated above
-          vParentScrollTop = vBoundedWidget.getScrollTop();
-
-          // Increment counter
-          tryLoops++;
-        }
-      }
-
-      return nextItem;
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function() {
-    this._disposeObjects("_selectedItems");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Helper for rwt.widgets.util.SelectionManager, contains data for selections
- */
-rwt.qx.Class.define("rwt.widgets.util.Selection",
-{
-  extend : rwt.qx.Object,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  /**
-   * @param mgr {Object} a class which implements a getItemHashCode(item) method
-   */
-  construct : function(mgr)
-  {
-    this.base(arguments);
-
-    this.__manager = mgr;
-    this.removeAll();
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      USER METHODS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Add an item to the selection
-     *
-     * @type member
-     * @param item {var} item to add
-     * @return {void}
-     */
-    add : function(item) {
-      this.__storage[this.getItemHashCode(item)] = item;
-    },
-
-
-    /**
-     * Remove an item from the selection
-     *
-     * @type member
-     * @param item {var} item to remove
-     * @return {void}
-     */
-    remove : function(item) {
-      delete this.__storage[this.getItemHashCode(item)];
-    },
-
-
-    /**
-     * Remove all items from the selection
-     *
-     * @type member
-     * @return {void}
-     */
-    removeAll : function() {
-      this.__storage = {};
-    },
-
-
-    /**
-     * Check whether the selection contains a given item
-     *
-     * @type member
-     * @param item {var} item to check for
-     * @return {Boolean} whether the selection contains the item
-     */
-    contains : function(item) {
-      return this.getItemHashCode(item) in this.__storage;
-    },
-
-
-    /**
-     * Convert selection to an array
-     *
-     * @type member
-     * @return {Array} array representation of the selection
-     */
-    toArray : function()
-    {
-      var res = [];
-
-      for (var key in this.__storage) {
-        res.push(this.__storage[key]);
-      }
-
-      return res;
-    },
-
-
-    /**
-     * Return first element of the Selection
-     *
-     * @type member
-     * @return {var} first item of the selection
-     */
-    getFirst : function()
-    {
-      for (var key in this.__storage) {
-        return this.__storage[key];
-      }
-      return null;
-    },
-
-
-    /**
-     * Get a string representation of the Selection. The return value can be used to compare selections.
-     *
-     * @type member
-     * @return {String} string representation of the Selection
-     */
-    getChangeValue : function()
-    {
-      var sb = [];
-
-      for (var key in this.__storage) {
-        sb.push(key);
-      }
-
-      sb.sort();
-      return sb.join(";");
-    },
-
-
-    /**
-     * Compute a hash code for an item using the manager
-     *
-     * @type member
-     * @param item {var} the item
-     * @return {var} unique hash code for the item
-     */
-    getItemHashCode : function(item) {
-      return this.__manager.getItemHashCode(item);
-    },
-
-
-    /**
-     * Whether the selection is empty
-     *
-     * @type member
-     * @return {Boolean} whether the selection is empty
-     */
-    isEmpty : function() {
-      return rwt.util.Objects.isEmpty(this.__storage);
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function() {
-    this._disposeFields("__storage", "__manager");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2008, 2012 Innoopract Informationssysteme GmbH and others.
- * 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:
- *   Innoopract Informationssysteme GmbH - initial API and implementation
- *   EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.base.AbstractSlider", {
-
-  extend : rwt.widgets.base.Parent,
-
-  construct : function( horizontal ) {
-    this.base( arguments );
-    this.setOverflow( "hidden" );
-    this._horizontal = horizontal;
-    // properties (using virtual units):
-    this._selection = 0;
-    this._minimum = 0;
-    this._maximum = 100;
-    this._increment = 1;
-    this._pageIncrement = 10;
-    this._thumbLength = 10;
-    // state:
-    this._pxStep = 1.38; // ratio of virtual units to real (pixel) length
-    this._thumbDragOffset = 0;
-    this._autoRepeat = ""; // string indicating to auto-repeat an action
-    this._mouseOffset = 0; // horizontal or vertical offset to slider start
-    this._delayTimer = new rwt.client.Timer( 250 ); // delay auto-repeated actions
-    this._repeatTimer = new rwt.client.Timer( 100 ); // for auto-repeated actions
-    // subwidgets:
-    this._thumb = new rwt.widgets.base.BasicButton( "push", true );
-    this._minButton = new rwt.widgets.base.BasicButton( "push", true );
-    this._maxButton = new rwt.widgets.base.BasicButton( "push", true );
-    this.add( this._thumb );
-    this.add( this._minButton );
-    this.add( this._maxButton );
-    this._configureSubwidgets();
-    this._configureAppearance();
-    this._setStates();
-    this._registerListeners();
-  },
-
-  destruct : function() {
-    this._delayTimer.stop();
-    this._delayTimer.dispose();
-    this._delayTimer = null;
-    this._repeatTimer.stop();
-    this._repeatTimer.dispose();
-    this._repeatTimer = null;
-    this._thumb = null;
-    this._minButton = null;
-    this._maxButton = null;
-  },
-
-  members : {
-
-    ////////////
-    // protected
-
-    _setSelection : function( value ) {
-      var newSelection = this._limitSelection( value );
-      if( newSelection !== this._selection ) {
-        this._selection = newSelection;
-        this._selectionChanged();
-      }
-    },
-
-    _setMinimum : function( value ) {
-      this._minimum = value;
-      this._updateThumbSize();
-    },
-
-    _setMaximum : function( value ) {
-      this._maximum = value;
-      this._updateThumbSize();
-    },
-
-    _setIncrement : function( value ) {
-      this._increment = value;
-    },
-
-    _setPageIncrement : function( value ) {
-      this._pageIncrement = value;
-    },
-
-    _setThumb : function( value ) {
-      this._thumbLength = value;
-      this._updateThumbSize();
-    },
-
-    ////////////////
-    // Eventhandlers
-
-    _registerListeners : function() {
-      this._repeatTimer.addEventListener( "interval", this._onRepeatTimerInterval, this );
-      this._delayTimer.addEventListener( "interval", this._repeatTimerStart, this );
-      this.addEventListener( "changeWidth", this._onChangeSize, this );
-      this.addEventListener( "changeHeight", this._onChangeSize, this );
-      this.addEventListener( "changeEnabled", this._onChangeEnabled, this );
-      this.addEventListener( "mousedown", this._onMouseDown, this );
-      this.addEventListener( "mouseup", this._onMouseUp, this );
-      this.addEventListener( "mouseout",  this._onMouseOut, this );
-      this.addEventListener( "mouseover",  this._onMouseOver, this );
-      this.addEventListener( "mousemove", this._onMouseMove, this );
-      this.addEventListener( "mousewheel", this._onMouseWheel, this );
-      this._thumb.addEventListener( "mousedown", this._onThumbMouseDown, this );
-      this._thumb.addEventListener( "mousemove", this._onThumbMouseMove, this );
-      this._thumb.addEventListener( "mouseup", this._onThumbMouseUp, this );
-      this._minButton.addEventListener( "mousedown", this._onMinButtonMouseEvent, this );
-      this._maxButton.addEventListener( "mousedown", this._onMaxButtonMouseEvent, this );
-      this._minButton.addEventListener( "stateOverChanged", this._onMinButtonMouseEvent, this );
-      this._maxButton.addEventListener( "stateOverChanged", this._onMaxButtonMouseEvent, this );
-
-    },
-
-    _selectionChanged : function() {
-      this._updateThumbPosition();
-      if( this._autoRepeat !== "" && !this._repeatTimer.isEnabled() ) {
-        this._delayTimer.start();
-      }
-    },
-
-    _onChangeSize : function( event ) {
-      this._updateThumbSize();
-    },
-
-    _onChangeEnabled : function( event ) {
-      this._thumb.setVisibility( event.getValue() );
-    },
-
-    _onMouseWheel : function( event ) {
-      if ( event.getTarget() === this ) {
-        event.preventDefault();
-        event.stopPropagation();
-        var data = event.getWheelDelta();
-        var change = ( data / Math.abs( data ) ) * this._increment;
-        var sel = this._selection - change;
-        if( sel < this._minimum ) {
-          sel = this._minimum;
-        }
-        if( sel > ( this._maximum - this._thumbWidth ) ) {
-          sel = this._maximum - this._thumbWidth;
-        }
-        this._setSelection( sel );
-      }
-    },
-
-    _onMouseDown : function( event ) {
-      if( event.isLeftButtonPressed() ) {
-        this._mouseOffset = this._getMouseOffset( event );
-        this._handleLineMouseDown();
-      }
-    },
-
-    _onMouseUp : function( event ) {
-      this.setCapture( false );
-      this._autoRepeat = "";
-      this._delayTimer.stop();
-      this._repeatTimer.stop();
-    },
-
-    _onMouseOver : function( event ) {
-      var target = event.getOriginalTarget();
-      if ( target === this && this._autoRepeat.slice( 0, 4 ) === "line" ) {
-        this.setCapture( false );
-        this._repeatTimerStart();
-      }
-    },
-
-    _onMouseOut : function( event ) {
-      var target = event.getRelatedTarget();
-      var outOfSlider = target !== this && !this.contains( target );
-      if( outOfSlider && this._autoRepeat.slice( 0, 4 ) === "line" ) {
-        this.setCapture( true );
-        this._delayTimer.stop();
-        this._repeatTimer.stop();
-      }
-    },
-
-    _onMouseMove : function( event ) {
-      this._mouseOffset = this._getMouseOffset( event );
-    },
-
-    _onMinButtonMouseEvent : function( event ) {
-      event.stopPropagation();
-      if( this._minButton.hasState( "pressed" ) ) {
-        this._autoRepeat = "minButton";
-        this._setSelection( this._selection - this._increment );
-      } else {
-        this._autoRepeat = "";
-      }
-    },
-
-    _onMaxButtonMouseEvent : function( event ) {
-      event.stopPropagation();
-      if( this._maxButton.hasState( "pressed" ) ) {
-        this._autoRepeat = "maxButton";
-        this._setSelection( this._selection + this._increment );
-      } else {
-        this._autoRepeat = "";
-      }
-    },
-
-    _onThumbMouseDown : function( event ) {
-      event.stopPropagation();
-      this._thumb.addState( "pressed" );
-      if( event.isLeftButtonPressed() ) {
-        var mousePos = this._getMouseOffset( event );
-        this._thumbDragOffset = mousePos - this._getThumbPosition();
-        this._thumb.setCapture( true );
-      }
-    },
-
-    _onThumbMouseMove : function( event ) {
-      event.stopPropagation();
-      if( this._thumb.getCapture() ) {
-        var mousePos = this._getMouseOffset( event );
-        var newSelection
-          = this._getSelectionFromPosition( mousePos - this._thumbDragOffset );
-        this._setSelection( newSelection );
-      }
-    },
-
-    _onThumbMouseUp : function( event ) {
-      if( this._thumb.hasState( "pressed" ) ) {
-        event.stopPropagation();
-        this._repeatTimer.stop();
-        this._thumb.setCapture( false );
-        this._thumb.removeState( "pressed" );
-      }
-    },
-
-    ////////////
-    // Internals
-
-    _configureSubwidgets : function() {
-      if( this._horizontal ) {
-        this._thumb.setHeight( "100%" );
-        this._minButton.setHeight( "100%" );
-        this._maxButton.setHeight( "100%" );
-        this._maxButton.setRight( 0 );
-      } else {
-        this._thumb.setWidth( "100%" );
-        this._minButton.setWidth( "100%" );
-        this._maxButton.setWidth( "100%" );
-        this._maxButton.setBottom( 0 );
-      }
-      rwt.widgets.util.WidgetUtil.fixIEBoxHeight( this._thumb );
-      rwt.widgets.util.WidgetUtil.fixIEBoxHeight( this._minButton );
-      rwt.widgets.util.WidgetUtil.fixIEBoxHeight( this._maxButton );
-      this._minButton.setTabIndex( null );
-      this._maxButton.setTabIndex( null );
-      this._thumb.setTabIndex( null );
-    },
-
-    _setStates : function() {
-      var style = this._horizontal ? "rwt_HORIZONTAL" : "rwt_VERTICAL";
-      var state = this._horizontal ? "horizontal" : "vertical";
-      this.addState( style );
-      this._minButton.addState( style );
-      this._minButton.addState( state );
-      this._maxButton.addState( style );
-      this._maxButton.addState( state );
-      this._thumb.addState( style );
-      // We need to render appearance now because valid layout values
-      // (i.e. a number) might be needed by the constructor
-      this._renderAppearance();
-      this._minButton._renderAppearance();
-      this._maxButton._renderAppearance();
-      this._thumb._renderAppearance();
-    },
-
-    // overwritten:
-    _visualizeFocus : function() {
-      this.base( arguments );
-      this._thumb.addState( "focused" );
-    },
-
-    // overwritten:
-    _visualizeBlur : function() {
-      this.base( arguments );
-      this._thumb.removeState( "focused" );
-    },
-
-    _repeatTimerStart : function() {
-      this._delayTimer.stop();
-      if( this._autoRepeat !== "" ) {
-        this._repeatTimer.start();
-      }
-    },
-
-    _onRepeatTimerInterval : function( event ) {
-      switch( this._autoRepeat ) {
-        case "minButton":
-          this._setSelection( this._selection - this._increment );
-        break;
-        case "maxButton":
-          this._setSelection( this._selection + this._increment );
-        break;
-        case "linePlus":
-        case "lineMinus":
-          this._handleLineMouseDown();
-        break;
-      }
-    },
-
-    _handleLineMouseDown : function() {
-      var mode;
-      var thumbHalf = this._getThumbSize() / 2;
-      var pxSel = this._getThumbPosition() + thumbHalf;
-      var newSelection;
-      if( this._mouseOffset > pxSel ) {
-        newSelection = this._selection + this._pageIncrement;
-        mode = "linePlus";
-      } else {
-        mode = "lineMinus";
-        newSelection = this._selection - this._pageIncrement;
-      }
-      if( this._autoRepeat === "" || this._autoRepeat === mode ) {
-        this._autoRepeat = mode;
-        var thumbMove = this._pageIncrement * this._pxStep + thumbHalf;
-        this._setSelection( newSelection );
-      }
-    },
-
-    _updateThumbPosition : function() {
-      var pos = this._getMinButtonWidth();
-      pos += this._pxStep * ( this._selection - this._minimum );
-      if( this._horizontal ) {
-        this._thumb.setLeft( pos );
-      } else {
-        this._thumb.setTop( pos );
-      }
-    },
-
-    _updateThumbSize : function() {
-      var newSize =   this._thumbLength * this._getLineSize()
-                    / ( this._maximum - this._minimum );
-      newSize = Math.round( newSize );
-      if( this._horizontal ) {
-        this._thumb.setWidth( newSize );
-      } else {
-        this._thumb.setHeight( newSize );
-      }
-      this._updateStepsize();
-    },
-
-    _updateStepsize : function() {
-      var numSteps = this._maximum - this._minimum - this._thumbLength;
-      if( numSteps !== 0 ) {
-        var numPixels = this._getLineSize() - this._getThumbSize();
-        this._pxStep = numPixels / numSteps;
-      } else {
-        this._pxStep = 0;
-      }
-      this._selection = this._limitSelection( this._selection );
-      this._updateThumbPosition();
-    },
-
-    //////////
-    // Helpers
-
-    _getSelectionFromPosition : function( position ) {
-      var buttonSize = this._getMinButtonWidth();
-      var sel = ( position - buttonSize ) / this._pxStep + this._minimum;
-      return this._limitSelection( Math.round( sel ) );
-    },
-
-    _limitSelection : function( value ) {
-      var result = value;
-      if( value >= ( this._maximum - this._thumbLength ) ) {
-        result = this._maximum - this._thumbLength;
-      }
-      if( result <= this._minimum ) {
-        result = this._minimum;
-      }
-      return result;
-    },
-
-    _getMouseOffset : function( mouseEvent ) {
-      var location = rwt.html.Location;
-      var result;
-      if( this._horizontal ) {
-        result = mouseEvent.getPageX() - location.getLeft( this.getElement() );
-      } else {
-        result = mouseEvent.getPageY() - location.getTop( this.getElement() );
-      }
-      return result;
-    },
-
-    _getThumbPosition : function() {
-      var result;
-      if( this._horizontal ) {
-        result = this._thumb.getLeft();
-      } else {
-        result = this._thumb.getTop();
-      }
-      return result;
-    },
-
-    _getThumbSize : function() {
-      var result;
-      if( this._horizontal ) {
-        result = this._thumb.getWidth();
-      } else {
-        result = this._thumb.getHeight();
-      }
-      return result;
-    },
-
-    _getLineSize : function() {
-      var buttonSize = this._getMinButtonWidth() + this._getMaxButtonWidth();
-      var result =   this._getSliderSize()
-                   - this.getFrameWidth()
-                   - buttonSize;
-      return result;
-    },
-
-    _getSliderSize : function() {
-      var result;
-      if( this._horizontal ) {
-        result = this.getWidth();
-      } else {
-        result = this.getHeight();
-      }
-      return result;
-    },
-
-    _getMinButtonWidth : function() {
-      var result;
-      if( this._horizontal ) {
-        result = this._minButton.getWidth();
-      } else {
-        result = this._minButton.getHeight();
-      }
-      return result;
-    },
-
-    _getMaxButtonWidth : function() {
-      var result;
-      if( this._horizontal ) {
-        result = this._maxButton.getWidth();
-      } else {
-        result = this._maxButton.getHeight();
-      }
-      return result;
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.base.ScrollBar", {
-
-  extend : rwt.widgets.base.AbstractSlider,
-
-  construct : function( horizontal ) {
-    this.base( arguments, horizontal );
-    this._idealValue = 0;
-    this._selectionFactor = 1;
-    this._lastDispatchedValue = 0;
-    this._mergeEvents = false;
-    this._renderSum = 0;
-    this._renderSamples = 0;
-    this._eventTimerId = null;
-    this._setMinimum( 0 );
-    this._hasSelectionListener = false;
-    this._minThumbSize = this._getMinThumbSize();
-    this.setIncrement( 20 );
-    this.addEventListener( "click", this._stopEvent, this );
-    this.addEventListener( "dblclick", this._stopEvent, this );
-    this._eventTimer = null;
-  },
-
-  destruct : function() {
-    if( this._eventTimer != null ) {
-      this._eventTimer.dispose();
-      this._eventTimer = null;
-    }
-  },
-
-  statics : {
-
-    MERGE_THRESHOLD : 4
-
-  },
-
-  events: {
-    "changeValue" : "rwt.event.Event"
-  },
-
-  members : {
-
-    _configureAppearance : function() {
-      this.setAppearance( "scrollbar" );
-      this._thumb.setAppearance( "scrollbar-thumb" );
-      this._minButton.setAppearance( "scrollbar-min-button" );
-      this._maxButton.setAppearance( "scrollbar-max-button" );
-    },
-
-    //////
-    // API
-
-    setValue : function( value ) {
-      this._idealValue = value;
-      this._setSelection( value * this._selectionFactor );
-    },
-
-    getValue : function( value ) {
-      return Math.round( this._selection / this._selectionFactor );
-    },
-
-    setMaximum : function( value ) {
-      this._setMaximum( value );
-      this._updateThumbLength();
-    },
-
-    getMaximum : function() {
-      return this._maximum;
-    },
-
-    setIncrement : function( value ) {
-      this._setIncrement( value );
-      this._updatePageIncrement();
-    },
-
-    setHasSelectionListener : function( value ) {
-      this._hasSelectionListener = value;
-    },
-
-    getHasSelectionListener : function() {
-      return this._hasSelectionListener;
-    },
-
-    setMergeEvents : function( value ) {
-      if( !value && this._mergeEvents ) {
-        throw new Error( "mergeEvents can not be set to false" );
-      } else if( value ) {
-        this._mergeEvents = true;
-        this._eventTimer = new rwt.client.Timer( 125 );
-        this._eventTimer.addEventListener( "interval", this._dispatchValueChanged, this );
-      }
-    },
-
-    getMergeEvents : function() {
-      return this._mergeEvents;
-    },
-
-    autoEnableMerge : function( renderTime ) {
-      // TODO [tb] : also automatically disable again
-      if( !this._mergeEvents && renderTime > 0 ) {
-        this._renderSamples++;
-        this._renderSum += renderTime;
-        var avg = this._renderSum / this._renderSamples;
-        var result = false;
-        if( this._renderSamples > 2 ) {
-          result = avg > 600;
-        } else {
-          result = renderTime > 1500;
-       }
-        if( result ) {
-          this.setMergeEvents( true );
-        }
-      }
-    },
-
-    isHorizontal : function() {
-      return this._horizontal;
-    },
-
-    //////////////
-    // Overwritten
-
-    _onChangeSize : function() {
-      this.base( arguments );
-      this._updateThumbLength();
-      this._updatePageIncrement();
-    },
-
-    _updateThumbSize : function() {
-      this.base( arguments );
-      var size = this._getThumbSize();
-      if( size < this._minThumbSize ) {
-        this._renderMinThumbSize();
-      } else {
-        this._selectionFactor = 1;
-        this._checkIdealValue();
-      }
-      if( this._horizontal ) {
-        var iconWidth = this._thumb.getCellWidth( 1 );
-        var iconVisible = size >= ( iconWidth + 6 );
-        this._thumb.setCellVisible( 1, iconVisible );
-      } else {
-        var iconHeight = this._thumb.getCellHeight( 1 );
-        var iconVisible = size >= ( iconHeight + 6 );
-        this._thumb.setCellVisible( 1, iconVisible );
-      }
-    },
-
-    _checkIdealValue : function() {
-      if( this._idealValue !== null && this._idealValue) {
-        this._setSelection( this._idealValue * this._selectionFactor );
-      }
-    },
-
-
-    _renderMinThumbSize : function() {
-      if( this._maximum > 0 && this._getLineSize() > 0 ) {
-        var size = this._getThumbSize();
-        if( size < this._minThumbSize ) {
-          var idealLength = this._getSliderSize();
-          var newLength = this._minThumbSize * this._maximum / this._getLineSize();
-          this._setThumb( newLength );
-          if( this._maximum === idealLength ) {
-            this._selectionFactor = 1;
-          } else {
-            this._selectionFactor
-              = ( this._maximum - newLength ) / ( this._maximum - idealLength );
-          }
-        }
-      }
-      this._checkIdealValue();
-    },
-
-    _setSelection : function( value ) {
-      if( value !== ( this._idealValue * this._selectionFactor ) ) {
-        this._idealValue = null;
-      }
-      this.base( arguments, value );
-    },
-
-    _selectionChanged : function() {
-      this.base( arguments );
-      if( this._getMergeCurrentEvent() ) {
-        // TODO [tb] : firing an event here could enable a widget to show at least some feedback
-        this._eventTimer.stop();
-        this._eventTimer.start();
-      } else {
-        this._dispatchValueChanged();
-      }
-    },
-
-    ////////////
-    // Internals
-
-    _getMinThumbSize : function() {
-      var themeValues = new rwt.theme.ThemeValues( this.__states );
-      return themeValues.getCssDimension( "ScrollBar-Thumb", "min-height" );
-    },
-
-    _updateThumbLength : function() {
-      this._setThumb( this._getSliderSize() );
-    },
-
-    _updatePageIncrement : function() {
-      this._setPageIncrement( this._getSliderSize() - this._increment );
-    },
-
-    _stopEvent : function( event ) {
-      event.stopPropagation();
-      event.preventDefault();
-    },
-
-    _getMergeCurrentEvent : function() {
-      // TODO [tb] : dont use last dispatched target as reference, use last selection instead
-      var result = false;
-      if( this._mergeEvents ) {
-        var mergeThreshold = rwt.widgets.base.ScrollBar.MERGE_THRESHOLD;
-        var diff = Math.abs( this._lastDispatchedValue - this._selection );
-        if( diff >= this._increment * mergeThreshold ) {
-          result = true;
-        }
-      }
-      return result;
-    },
-
-    _dispatchValueChanged : function() {
-      if( this._mergeEvents ) {
-        this._eventTimer.stop();
-      }
-      this._lastDispatchedValue = this._selection;
-      this.createDispatchEvent( "changeValue" );
-    },
-
-    _updateStepsize : function() {
-      var oldValue = this._selection;
-      this.base( arguments );
-      if( oldValue !== this._selection ) {
-        this._dispatchValueChanged();
-      }
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * The image preloader can be used to fill the browser cache with images,
- * which are needed later. Once all images are pre loaded a "complete"
- * event is fired.
- */
-rwt.qx.Class.define("rwt.html.ImagePreloaderSystem",
-{
-  extend : rwt.qx.Target,
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  /**
-   * If the callback is provided the preloading starts automatically and the callback
-   * is called on completion of the pre loading. Otherwhise the pre loading has to be
-   * started manually using {@link #start}.
-   *
-   * @param vPreloadList {String[]} list of image URLs to preload
-   * @param vCallBack {Function} callback function. This function gets called after the
-   *    preloading is completed
-   * @param vCallBackScope {Object?window} scope for the callback function
-   */
-  construct : function(vPreloadList, vCallBack, vCallBackScope)
-  {
-    this.base(arguments);
-
-    // internally use a map for the image sources
-    if( vPreloadList instanceof Array ) {
-      this._list = rwt.util.Objects.fromArray( vPreloadList );
-    } else {
-      this._list = vPreloadList;
-    }
-
-    // Create timer
-    this._timer = new rwt.client.Timer( 3000 );
-    this._timer.addEventListener("interval", this.__oninterval, this);
-
-    // If we use the compact syntax, automatically add an event listeners and start the loading process
-    if (vCallBack) {
-      this.addEventListener("completed", vCallBack, vCallBackScope || null);
-    }
-  },
-
-
-
-  /*
-  *****************************************************************************
-     EVENTS
-  *****************************************************************************
-  */
-
-  events:
-  {
-    /** Fired after the pre loading of the images is complete */
-    "completed" : "rwt.event.Event"
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    _stopped : false,
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      USER ACCESS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Start the preloading
-     *
-     * @type member
-     * @return {void}
-     */
-    start : function()
-    {
-      if (rwt.util.Objects.isEmpty(this._list))
-      {
-        this.createDispatchEvent("completed");
-        return;
-      }
-
-      for (var vSource in this._list)
-      {
-        var vPreloader = rwt.html.ImagePreloaderManager.getInstance().create( vSource );
-
-        if (vPreloader.isErroneous() || vPreloader.isLoaded()) {
-          delete this._list[vSource];
-        }
-        else
-        {
-          vPreloader._origSource = vSource;
-
-          vPreloader.addEventListener("load", this.__onload, this);
-          vPreloader.addEventListener("error", this.__onerror, this);
-        }
-      }
-
-      // Initial check
-      this._check();
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      EVENT LISTENERS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Load event handler
-     *
-     * @type member
-     * @param e {Event} Event object
-     */
-    __onload : function(e)
-    {
-      if (this.getDisposed()) {
-        return;
-      }
-
-      delete this._list[e.getTarget()._origSource];
-      this._check();
-    },
-
-
-    /**
-     * Error handler
-     *
-     * @type member
-     * @param e {Event} Event object
-     */
-    __onerror : function(e)
-    {
-      if (this.getDisposed()) {
-        return;
-      }
-
-      delete this._list[e.getTarget()._origSource];
-      this._check();
-    },
-
-
-    /**
-     * Timer interval handler
-     *
-     * @type member
-     * @param e {Event} Event object
-     */
-    __oninterval : function(e)
-    {
-      this._stopped = true;
-      this._timer.stop();
-
-      this.createDispatchEvent("completed");
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      CHECK
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Checks whether the pre loading is complete and dispatches the "complete" event.
-     *
-     * @type member
-     */
-    _check : function()
-    {
-      if (this._stopped) {
-        return;
-      }
-
-      if (rwt.util.Objects.isEmpty(this._list))
-      {
-        this._timer.stop();
-        this.createDispatchEvent("completed");
-      }
-      else
-      {
-        // Restart timer for timeout
-        this._timer.restart();
-      }
-    }
-  },
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function()
-  {
-    if (this._timer)
-    {
-      this._timer.removeEventListener("interval", this.__oninterval, this);
-      this._disposeObjects("_timer");
-    }
-
-    this._disposeFields("_list");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Cross browser abstractions to work with iframes.
- */
-rwt.qx.Class.define("rwt.html.Iframes",
-{
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics :
-  {
-    /**
-     * Get the DOM window object of an iframe.
-     *
-     * @type static
-     * @param vIframe {Element} DOM element of the iframe.
-     * @return {DOMWindow} The DOM window object of the iframe.
-     * @signature function(vIframe)
-     */
-    getWindow : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function(vIframe)
-      {
-        try {
-          return vIframe.contentWindow;
-        } catch(ex) {
-          return null;
-        }
-      },
-
-      "default" : function(vIframe)
-      {
-        try
-        {
-          var vDoc = rwt.html.Iframes.getDocument(vIframe);
-          return vDoc ? vDoc.defaultView : null;
-        }
-        catch(ex)
-        {
-          return null;
-        }
-      }
-    }),
-
-
-    /**
-     * Get the DOM document object of an iframe.
-     *
-     * @type static
-     * @param vIframe {Element} DOM element of the iframe.
-     * @return {DOMDocument} The DOM document object of the iframe.
-     * @signature function(vIframe)
-     */
-    getDocument : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function(vIframe)
-      {
-        try
-        {
-          var vWin = rwt.html.Iframes.getWindow(vIframe);
-          return vWin ? vWin.document : null;
-        }
-        catch(ex)
-        {
-          return null;
-        }
-      },
-
-      "default" : function(vIframe)
-      {
-        try {
-          return vIframe.contentDocument;
-        } catch(ex) {
-          return null;
-        }
-      }
-    }),
-
-
-    /**
-     * Get the HTML body element of the iframe.
-     *
-     * @type static
-     * @param vIframe {Element} DOM element of the iframe.
-     * @return {Element} The DOM node of the <code>body</code> element of the iframe.
-     */
-    getBody : function(vIframe)
-    {
-      var vDoc = rwt.html.Iframes.getDocument(vIframe);
-      return vDoc ? vDoc.getElementsByTagName("body")[0] : null;
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2012, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-/*global ActiveXObject: false */
-
-namespace( "rwt.remote" );
-
-(function(){
-
-var Client = rwt.client.Client;
-
-rwt.remote.Request = function( url, method, responseType ) {
-  this._url = url;
-  this._method = method;
-  this._async = true;
-  this._success = null;
-  this._error = null;
-  this._data = null;
-  this._responseType = responseType;
-  this._request = rwt.remote.Request.createXHR();
-};
-
-rwt.remote.Request.createXHR = function() {
-  return new XMLHttpRequest();
-};
-
-rwt.remote.Request.prototype = {
-
-    dispose : function() {
-      if( this._request != null ) {
-        this._request.onreadystatechange = null;
-        this._request.abort();
-        this._success = null;
-        this._error = null;
-        this._request = null;
-      }
-    },
-
-    send : function() {
-      var urlpar = null;
-      var post = this._method === "POST";
-      if( !post && this._data ) {
-        urlpar = this._data;
-      }
-      var url = this._url;
-      if( urlpar ) {
-        url += ( url.indexOf( "?" ) >= 0 ? "&" : "?" ) + urlpar;
-      }
-      this._request.open( this._method, url, this._async );
-      this._configRequest();
-      this._request.send( post ? this._data : undefined );
-      if( !this._shouldUseStateListener() ) {
-        this._onReadyStateChange();
-      }
-      if( !this._async ) {
-        this.dispose();
-      }
-    },
-
-    setAsynchronous : function( value ) {
-      this._async = value;
-    },
-
-    getAsynchronous : function() {
-      return this._async;
-    },
-
-    setSuccessHandler : function( handler, context ) {
-      this._success = function(){ handler.apply( context, arguments ); };
-    },
-
-    setErrorHandler : function( handler, context ) {
-      this._error = function(){ handler.apply( context, arguments ); };
-    },
-
-    setData : function( value ) {
-      this._data = value;
-    },
-
-    getData : function() {
-      return this._data;
-    },
-
-    _configRequest : function() {
-      if( !Client.isWebkit() ) {
-        this._request.setRequestHeader( "Referer", window.location.href );
-      }
-      var contentType = "application/json; charset=UTF-8";
-      this._request.setRequestHeader( "Content-Type", contentType );
-      if( this._shouldUseStateListener() ) {
-        this._request.onreadystatechange = rwt.util.Functions.bind( this._onReadyStateChange, this );
-      }
-    },
-
-    _shouldUseStateListener : function() {
-      var result = true;
-      if( !this._async && Client.isGecko() && Client.getMajor() < 4 ) {
-        // see Bug 398951 - RAP does not start in Firefox 3.x 
-        result = false;
-      }
-      return result;
-    },
-
-    _onReadyStateChange : function() {
-      if( this._request.readyState === 4 ) {
-        var text;
-        // [if] typeof(..) == "unknown" is IE specific. Used to prevent error:
-        // "The data necessary to complete this operation is not yet available"
-        if( typeof this._request.responseText !== "unknown" ) {
-          text = this._request.responseText;
-        }
-        var event = {
-          "responseText" : text,
-          "status" : this._request.status,
-          "responseHeaders" : this._getHeaders(),
-          "target" : this
-        };
-        if( this._request.status === 200 ) {
-          if( this._success ) {
-            this._success( event );
-          }
-        } else {
-          if( this._error ) {
-            this._error( event );
-          }
-        }
-        if( this._async ) {
-          this.dispose();
-        }
-      }
-    },
-
-    _getHeaders : function() {
-      var text = this._request.getAllResponseHeaders();
-      var values = text.split( /[\r\n]+/g );
-      var result = {};
-      for( var i=0; i < values.length; i++ ) {
-        var pair = values[ i ].match( /^([^:]+)\s*:\s*(.+)$/i );
-        if( pair ) {
-          result[ pair[ 1 ] ] = pair[ 2 ];
-        }
-      }
-      return result;
-    }
-
-};
-
-}());
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define("rwt.widgets.base.PopupAtom",
-{
-  extend : rwt.widgets.base.Popup,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function(vLabel, vIcon)
-  {
-    this.base(arguments);
-
-    this._atom = new rwt.widgets.base.Atom(vLabel, vIcon);
-    this._atom.setParent(this);
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    _isFocusRoot : false,
-
-
-    /**
-     * Accessor method to get the atom sub widget
-     *
-     * @type member
-     * @return {rwt.widgets.base.Atom} atom sub widget
-     */
-    getAtom : function() {
-      return this._atom;
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function() {
-    this._disposeObjects("_atom");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * @appearance tool-tip
- */
-rwt.qx.Class.define("rwt.widgets.base.ToolTip",
-{
-  extend : rwt.widgets.base.PopupAtom,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function(vLabel, vIcon)
-  {
-    // ************************************************************************
-    //   INIT
-    // ************************************************************************
-    this.base(arguments, vLabel, vIcon);
-
-    // ************************************************************************
-    //   TIMER
-    // ************************************************************************
-    this._showTimer = new rwt.client.Timer(this.getShowInterval());
-    this._showTimer.addEventListener("interval", this._onshowtimer, this);
-
-    this._hideTimer = new rwt.client.Timer(this.getHideInterval());
-    this._hideTimer.addEventListener("interval", this._onhidetimer, this);
-
-    // ************************************************************************
-    //   EVENTS
-    // ************************************************************************
-    this.addEventListener("mouseover", this._onmouseover);
-    this.addEventListener("mouseout", this._onmouseover);
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    appearance :
-    {
-      refine : true,
-      init : "widget-tool-tip"
-    },
-
-    /** Controls whether the tooltip is hidden when hovered across */
-    hideOnHover :
-    {
-      check : "Boolean",
-      init : true
-    },
-
-    /** Horizontal offset of the mouse pointer (in pixel) */
-    mousePointerOffsetX :
-    {
-      check : "Integer",
-      init : 1
-    },
-
-    /** Vertical offset of the mouse pointer (in pixel) */
-    mousePointerOffsetY :
-    {
-      check : "Integer",
-      init : 20
-    },
-
-    /** Interval after the tooltip is shown (in milliseconds) */
-    showInterval :
-    {
-      check : "Integer",
-      init : 1000,
-      apply : "_applyShowInterval"
-    },
-
-    /** Interval after the tooltip is hidden (in milliseconds) */
-    hideInterval :
-    {
-      check : "Integer",
-      init : 4000,
-      apply : "_applyHideInterval"
-    },
-
-    /** Widget to which the tooltip is bound to */
-    boundToWidget :
-    {
-      check : "rwt.widgets.base.Widget",
-      apply : "_applyBoundToWidget"
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    _minZIndex : 1e7,
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      APPLY ROUTINES
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyHideInterval : function(value, old) {
-      this._hideTimer.setInterval(value);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyShowInterval : function(value, old) {
-      this._showTimer.setInterval(value);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyBoundToWidget : function(value, old)
-    {
-      if (value) {
-        this.setParent(value.getTopLevelWidget());
-      } else if (old) {
-        this.setParent(null);
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      APPEAR/DISAPPEAR
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Callback method for the "beforeAppear" event.<br/>
-     * Does two things: stops the timer for the show interval and
-     * starts the timer for the hide interval.
-     *
-     * @type member
-     * @return {void}
-     */
-    _beforeAppear : function()
-    {
-      this.base(arguments);
-
-      this._stopShowTimer();
-      this._startHideTimer();
-    },
-
-
-    /**
-     * Callback method for the "beforeDisappear" event.<br/>
-     * Stops the timer for the hide interval.
-     *
-     * @type member
-     * @return {void}
-     */
-    _beforeDisappear : function()
-    {
-      this.base(arguments);
-      this._stopHideTimer();
-    },
-
-
-    /**
-     * Callback method for the "afterAppear" event.<br/>
-     * If the property {@link #restrictToPageOnOpen} is set to <code>true</code>
-     * the tooltip gets repositioned to ensure it is displayed within the
-     * boundaries of the {@link rwt.widgets.base.ClientDocument}.
-     *
-     * @type member
-     * @return {void}
-     */
-    _afterAppear : function()
-    {
-      this.base(arguments);
-
-      if (this.getRestrictToPageOnOpen()) {
-        var doc = rwt.widgets.base.ClientDocument.getInstance();
-        var docWidth = doc.getClientWidth();
-        var docHeight = doc.getClientHeight();
-        var restrictToPageLeft = parseInt( this.getRestrictToPageLeft(), 10 );
-        var restrictToPageRight = parseInt( this.getRestrictToPageRight(), 10 );
-        var restrictToPageTop = parseInt( this.getRestrictToPageTop(), 10 );
-        var restrictToPageBottom = parseInt( this.getRestrictToPageBottom(), 10 );
-        var left   = (this._wantedLeft == null) ? this.getLeft() : this._wantedLeft;
-        var top    = this.getTop();
-        var width  = this.getBoxWidth();
-        var height = this.getBoxHeight();
-
-        var mouseX = rwt.event.MouseEvent.getPageX();
-        var mouseY = rwt.event.MouseEvent.getPageY();
-
-        var oldLeft = this.getLeft();
-        var oldTop = top;
-
-        // NOTE: We check right and bottom first, because top and left should have
-        //       priority, when both sides are violated.
-        if (left + width > docWidth - restrictToPageRight) {
-          left = docWidth - restrictToPageRight - width;
-        }
-        if (top + height > docHeight - restrictToPageBottom) {
-          top = docHeight - restrictToPageBottom - height;
-        }
-        if (left < restrictToPageLeft) {
-          left = restrictToPageLeft;
-        }
-        if (top < restrictToPageTop) {
-          top = restrictToPageTop;
-        }
-
-        // REPAIR: If mousecursor /within/ newly positioned popup, move away.
-        if (left <= mouseX && mouseX <= left+width &&
-            top <= mouseY && mouseY <= top+height){
-            // compute possible movements in all four directions
-            var deltaYdown = mouseY - top;
-            var deltaYup = deltaYdown - height;
-            var deltaXright = mouseX - left;
-            var deltaXleft = deltaXright - width;
-            var violationUp = Math.max(0, restrictToPageTop - (top+deltaYup));
-            var violationDown = Math.max(0, top+height+deltaYdown - (docHeight-restrictToPageBottom));
-            var violationLeft = Math.max(0, restrictToPageLeft - (left+deltaXleft));
-            var violationRight = Math.max(0, left+width+deltaXright - (docWidth-restrictToPageRight));
-            var possibleMovements = [// (deltaX, deltaY, violation)
-                [0, deltaYup,    violationUp], // up
-                [0, deltaYdown,  violationDown], // down
-                [deltaXleft, 0,  violationLeft], // left
-                [deltaXright, 0, violationRight] // right
-            ];
-
-            possibleMovements.sort(function(a, b){
-                // first sort criterion: overlap/clipping - fewer, better
-                // second criterion: combined movements - fewer, better
-                return a[2]-b[2] || (Math.abs(a[0]) + Math.abs(a[1])) - (Math.abs(b[0]) + Math.abs(b[1]));
-            });
-
-            var minimalNonClippingMovement = possibleMovements[0];
-            left = left + minimalNonClippingMovement[0];
-            top = top + minimalNonClippingMovement[1];
-        }
-
-        if (left != oldLeft || top != oldTop) {
-          var self = this;
-          window.setTimeout(function() {
-            self.setLeft(left);
-            self.setTop(top);
-          }, 0);
-        }
-      }
-    },
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      TIMER
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Utility method to start the timer for the show interval
-     * (if the timer is disabled)
-     *
-     * @type member
-     * @return {void}
-     */
-    _startShowTimer : function()
-    {
-      if (!this._showTimer.getEnabled()) {
-        this._showTimer.start();
-      }
-    },
-
-
-    /**
-     * Utility method to start the timer for the hide interval
-     * (if the timer is disabled)
-     *
-     * @type member
-     * @return {void}
-     */
-    _startHideTimer : function()
-    {
-      if (!this._hideTimer.getEnabled()) {
-        this._hideTimer.start();
-      }
-    },
-
-
-    /**
-     * Utility method to stop the timer for the show interval
-     * (if the timer is enabled)
-     *
-     * @type member
-     * @return {void}
-     */
-    _stopShowTimer : function()
-    {
-      if (this._showTimer.getEnabled()) {
-        this._showTimer.stop();
-      }
-    },
-
-
-    /**
-     * Utility method to stop the timer for the hide interval
-     * (if the timer is enabled)
-     *
-     * @type member
-     * @return {void}
-     */
-    _stopHideTimer : function()
-    {
-      if (this._hideTimer.getEnabled()) {
-        this._hideTimer.stop();
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      EVENTS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Callback method for the "mouseOver" event.<br/>
-     * If property {@link #hideOnOver} is enabled the tooltip gets hidden
-     *
-     * @type member
-     * @param e {rwt.event.MouseEvent} mouseOver event
-     * @return {void}
-     */
-    _onmouseover : function(e)
-    {
-      if (this.getHideOnHover()) {
-        this.hide();
-      }
-    },
-
-
-    /**
-     * Callback method for the "interval" event of the show timer.<br/>
-     * Positions the tooltip (sets left and top) and calls the
-     * {@link #show} method.
-     *
-     * @type member
-     * @param e {rwt.event.Event} interval event
-     */
-    _onshowtimer : function(e)
-    {
-      this.setLeft(rwt.event.MouseEvent.getPageX() + this.getMousePointerOffsetX());
-      this.setTop(rwt.event.MouseEvent.getPageY() + this.getMousePointerOffsetY());
-      this.show();
-    },
-
-
-    /**
-     * Callback method for the "interval" event of the hide timer.<br/>
-     * Hides the tooltip by calling the corresponding {@link #hide} method.
-     *
-     * @type member
-     * @param e {rwt.event.Event} interval event
-     * @return {var} TODOC
-     */
-    _onhidetimer : function(e) {
-      return this.hide();
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function()
-  {
-    var mgr = rwt.widgets.util.ToolTipManager.getInstance();
-    mgr.remove(this);
-
-    if (mgr.getCurrentToolTip() == this) {
-      mgr.resetCurrentToolTip();
-    }
-
-    this._disposeObjects("_showTimer", "_hideTimer");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/** This manages ToolTip instances */
-rwt.qx.Class.define("rwt.widgets.util.ToolTipManager",
-{
-  type : "singleton",
-  extend : rwt.util.ObjectManager,
-
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    /** Holds the current ToolTip instance */
-    currentToolTip :
-    {
-      check : "rwt.widgets.base.ToolTip",
-      nullable : true,
-      apply : "_applyCurrentToolTip"
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      APPLY ROUTINES
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     * @return {void | Boolean} TODOC
-     */
-    _applyCurrentToolTip : function(value, old)
-    {
-      // Return if the new tooltip is a child of the old one
-      if (old && old.contains(value)) {
-        return;
-      }
-
-      // If old tooltip existing, hide it and clear widget binding
-      if (old && !old.isDisposed())
-      {
-        old.hide();
-
-        old._stopShowTimer();
-        old._stopHideTimer();
-      }
-
-      // If new tooltip is not null, set it up and start the timer
-      if (value) {
-        value._startShowTimer();
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      EVENT INTERFACE: MOUSE
-    ---------------------------------------------------------------------------
-    */
-
-    handleMouseEvent : function( event ) {
-      var type = event.getType();
-      if( type === "mouseover" ) {
-        this._handleMouseOver( event );
-      } else if ( type === "mouseout" ) {
-        this._handleMouseOut( event );
-      }
-    },
-
-    /**
-     * Searches for the tooltip of the target widget. If any tooltip instance
-     * is found this instance is bound to the target widget and the tooltip is
-     * set as {@link #currentToolTip}
-     *
-     * @type member
-     * @param e {rwt.event.MouseEvent} mouseOver event
-     * @return {void}
-     */
-    _handleMouseOver : function( e ) {
-      var vTarget = e.getTarget();
-      var vToolTip;
-
-      // Allows us to use DOM Nodes as tooltip target :)
-      if (!(vTarget instanceof rwt.widgets.base.Widget) && vTarget.nodeType == 1) {
-        vTarget = rwt.event.EventHandlerUtil.getTargetObject(vTarget);
-      }
-
-      // Search first parent which has a tooltip
-      while (vTarget != null && !(vToolTip = vTarget.getToolTip())) {
-        vTarget = vTarget.getParent();
-      }
-
-      // Bind tooltip to widget
-      if (vToolTip != null) {
-        vToolTip.setBoundToWidget(vTarget);
-      }
-
-      // Set Property
-      this.setCurrentToolTip(vToolTip);
-    },
-
-
-    /**
-     * Resets the property {@link #currentToolTip} if there was a
-     * tooltip and no new one is created.
-     *
-     * @type member
-     * @param e {rwt.event.MouseEvent} mouseOut event
-     * @return {void}
-     */
-    _handleMouseOut : function( e ) {
-      var vTarget = e.getTarget();
-      var vRelatedTarget = e.getRelatedTarget();
-
-      var vToolTip = this.getCurrentToolTip();
-
-      // If there was a tooltip and
-      // - the destination target is the current tooltip
-      //   or
-      // - the current tooltip contains the destination target
-      if (vToolTip && (vRelatedTarget == vToolTip || vToolTip.contains(vRelatedTarget))) {
-        return;
-      }
-
-      // If the destination target exists and the target contains it
-      if (vRelatedTarget && vTarget && vTarget.contains(vRelatedTarget)) {
-        return;
-      }
-
-      // If there was a tooltip and there is no new one
-      if (vToolTip && !vRelatedTarget) {
-        this.setCurrentToolTip(null);
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      EVENT INTERFACE: FOCUS
-    ---------------------------------------------------------------------------
-    */
-
-    handleFocus : function( e ) {
-      // nothing to do
-    },
-
-
-    /**
-     * Reset the property {@link #currentToolTip} if the
-     * current tooltip is the tooltip of the target widget.
-     *
-     * @type member
-     * @param e {rwt.event.FocusEvent} blur event
-     * @return {void}
-     */
-    handleBlur : function(e)
-    {
-      var vTarget = e.getTarget();
-
-      if (!vTarget) {
-        return;
-      }
-
-      var vToolTip = this.getCurrentToolTip();
-
-      // Only set to null if blured widget is the
-      // one which has created the current tooltip
-      if (vToolTip && vToolTip == vTarget.getToolTip()) {
-        this.setCurrentToolTip(null);
-      }
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define("rwt.html.Window",
-{
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics :
-  {
-    /**
-     * Get the inner width of the given browser window
-     *
-     * @type static
-     * @param vWindow {window} browser window
-     * @return {Integer} the window's inner width
-     * @signature function(vWindow)
-     */
-    getInnerWidth  : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml|webkit" : function(vWindow)
-      {
-        if (vWindow.document.documentElement && vWindow.document.documentElement.clientWidth) {
-          return vWindow.document.documentElement.clientWidth;
-        } else if (vWindow.document.body) {
-          return vWindow.document.body.clientWidth;
-        }
-
-        return 0;
-      },
-
-      "default" : function(vWindow) {
-        return vWindow.innerWidth;
-      }
-    }),
-
-
-    /**
-     * Get the inner height of the given browser window
-     *
-     * @type static
-     * @param vWindow {window} browser window
-     * @return {Integer} the window's inner height
-     * @signature function(vWindow)
-     */
-    getInnerHeight : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml|webkit" : function(vWindow)
-      {
-        if (vWindow.document.documentElement && vWindow.document.documentElement.clientHeight) {
-          return vWindow.document.documentElement.clientHeight;
-        } else if (vWindow.document.body) {
-          return vWindow.document.body.clientHeight;
-        }
-
-        return 0;
-      },
-
-      "default" : function(vWindow) {
-        return vWindow.innerHeight;
-      }
-    }),
-
-
-    /**
-     * Get the left scroll position of the given browser window
-     *
-     * @type static
-     * @param vWindow {window} browser window
-     * @return {Integer} the window's left scroll position
-     * @signature function(vWindow)
-     */
-    getScrollLeft  : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function(vWindow)
-      {
-        if (vWindow.document.documentElement && vWindow.document.documentElement.scrollLeft) {
-          return vWindow.document.documentElement.scrollLeft;
-        } else if (vWindow.document.body) {
-          return vWindow.document.body.scrollTop;
-        }
-
-        return 0;
-      },
-
-      "default" : function(vWindow) {
-        return vWindow.document.body.scrollLeft;
-      }
-    }),
-
-
-    /**
-     * Get the top scroll position of the given browser window
-     *
-     * @type static
-     * @param vWindow {window} browser window
-     * @return {Integer} the window's top scroll position
-     * @signature function(vWindow)
-     */
-    getScrollTop   : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function(vWindow)
-      {
-        if (vWindow.document.documentElement && vWindow.document.documentElement.scrollTop) {
-          return vWindow.document.documentElement.scrollTop;
-        } else if (vWindow.document.body) {
-          return vWindow.document.body.scrollTop;
-        }
-
-        return 0;
-      },
-
-      "default" : function(vWindow) {
-        return vWindow.document.body.scrollTop;
-      }
-    })
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- *
- * This class contains code based on the following work:
- *
- *  * Yahoo! UI Library, version 2.2.0
- *    http://developer.yahoo.com/yui
- *    Copyright (c) 2007, Yahoo! Inc.
- *    License: BSD, http://developer.yahoo.com/yui/license.txt
- ******************************************************************************/
-
-/**
- * A helper for using the browser history in JavaScript Applications without
- * reloading the main page.
- *
- * Adds entries to the browser history and fires a "request" event when one of
- * the entries was requested by the user (e.g. by clicking on the back button).
- *
- * Browser history support is currently available for Internet Explorer 6/7,
- * Firefox, Opera 9 and WebKit. Safari 2 and older are not yet supported.
- *
- * This module is based on the ideas behind the YUI Browser History Manager
- * by Julien Lecomte (Yahoo), which is described at
- * http://yuiblog.com/blog/2007/02/21/browser-history-manager/. The Yahoo
- * implementation can be found at http://developer.yahoo.com/yui/history.
- * The original code is licensed under a BSD license
- * (http://developer.yahoo.com/yui/license.txt).
- */
-rwt.qx.Class.define("rwt.client.BrowserNavigation",
-{
-  type : "singleton",
-  extend : rwt.qx.Target,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  /**
-   * @signature function()
-   */
-  construct : rwt.util.Variant.select("qx.client",
-  {
-    "mshtml" : function()
-    {
-      this.base(arguments);
-      this._hasNavigationListener = false;
-
-      this._iframe = document.createElement("iframe");
-      this._iframe.style.visibility = "hidden";
-      this._iframe.style.position = "absolute";
-      this._iframe.style.left = "-1000px";
-      this._iframe.style.top = "-1000px";
-
-      /*
-       * IMPORTANT NOTE FOR IE:
-       * Setting the source before adding the iframe to the document.
-       * Otherwise IE will bring up a "Unsecure items ..." warning in SSL mode
-       */
-      var src = rwt.remote.Server.RESOURCE_PATH + "static/html/blank.html";
-      this._iframe.src = src;
-      document.body.appendChild(this._iframe);
-
-      this._titles = {};
-      this._state = decodeURIComponent(this.__getHash());
-      this._locationState = decodeURIComponent(this.__getHash());
-
-      this.__waitForIFrame(function()
-      {
-        this.__storeState(this._state);
-        this.__startTimer();
-      }, this);
-    },
-
-    "default" : function()
-    {
-      this.base(arguments);
-      this._hasNavigationListener = false;
-
-      this._titles = {};
-      this._state = this.__getState();
-
-      this.__startTimer();
-    }
-  }),
-
-
-
-
-  /*
-  *****************************************************************************
-     EVENTS
-  *****************************************************************************
-  */
-
-  events: {
-    /**
-     * Fired when the user moved in the history. The data property of the event
-     * holds the state, which was passed to {@link #addToHistory}.
-     */
-    "request" : "rwt.event.DataEvent"
-  },
-
-
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    /**
-     * Interval for the timer, which periodically checks the browser history state
-     * in milliseconds.
-     */
-    timeoutInterval :
-    {
-      check: "Number",
-      init : 100,
-      apply : "_applyTimeoutInterval"
-    }
-  },
-
-
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-
-    /**
-     * Adds an entry to the browser history.
-     *
-     * @type member
-     * @param state {String} a string representing the state of the
-     *          application. This command will be delivered in the data property of
-     *          the "request" event.
-     * @param newTitle {String ? null} the page title to set after the history entry
-     *          is done. This title should represent the new state of the application.
-     */
-    addToHistory : function( state, newTitle ) {
-      if( newTitle != null ) {
-        document.title = newTitle;
-      }
-      this._titles[ state ] = document.title;
-      if( state != this._state ) {
-        // RAP [if] Prevent the event dispatch
-        this._state = state;
-        this.__storeState( state );
-      }
-    },
-
-
-    /**
-     * Get the current state of the browser history.
-     *
-     * @return {String} The current state
-     */
-    getState : function() {
-      return this._state;
-    },
-
-
-    /**
-     * Navigates back in the browser history.
-     * Simulates a back button click.
-     */
-     navigateBack : function() {
-       rwt.client.Timer.once(function() {history.back();}, 0);
-     },
-
-
-    /**
-     * Navigates forward in the browser history.
-     * Simulates a forward button click.
-     */
-     navigateForward : function() {
-       rwt.client.Timer.once(function() {history.forward();}, 0);
-     },
-
-
-    /**
-     * Apply the interval of the timer.
-     *
-     * @type member
-     * @param newInterval {Integer} new timeout interval
-     */
-    _applyTimeoutInterval : function(value) {
-      this._timer.setInterval(value);
-    },
-
-
-    /**
-     * called on changes to the history using the browser buttons
-     *
-     * @param state {String} new state of the history
-     */
-    __onHistoryLoad : function(state) {
-      this._state = state;
-      this.createDispatchDataEvent("request", state);
-      if (this._titles[state] != null) {
-        document.title = this._titles[state];
-      }
-    },
-
-
-    /**
-     * Starts the timer polling for updates to the history IFrame on IE
-     * or the fragment identifier on other browsers.
-     */
-    __startTimer : function() {
-      this._timer = new rwt.client.Timer(this.getTimeoutInterval());
-
-      this._timer.addEventListener( "interval", function( e ) {
-        var newHash = this.__getState();
-        if( newHash != this._state ) {
-          this.__onHistoryLoad(newHash);
-        }
-      }, this );
-
-      if( this._hasNavigationListener ) {
-        this._timer.start();
-      }
-    },
-
-
-    /**
-     * Returns the fragment identifier of the top window URL
-     *
-     * @return {String} the fragment identifier
-     */
-    __getHash : function()
-    {
-      // RAP [if] Fix for bug 295816
-      //var href = top.location.href;
-      var href = window.location.href;
-      var idx = href.indexOf( "#" );
-      return idx >= 0 ? href.substring(idx+1) : "";
-    },
-
-
-    /**
-     * Browser dependent function to read the current state of the history
-     *
-     * @return {String} current state of the browser history
-     */
-    __getState : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function()
-      {
-        // the location only changes if the user manually changes the fragment
-        // identifier.
-        var locationState = decodeURIComponent(this.__getHash());
-        if (locationState != this._locationState)
-        {
-          this._locationState = locationState;
-          this.__storeState(locationState);
-          return locationState;
-        }
-
-        var doc = this._iframe.contentWindow.document;
-        var elem = doc.getElementById("state");
-        var iframeState = elem ? decodeURIComponent(elem.innerText) : "";
-
-        return iframeState;
-      },
-
-      "default" : function() {
-        return decodeURIComponent(this.__getHash());
-      }
-    }),
-
-
-    /**
-     * Save a state into the browser history.
-     *
-     * @param state {String} state to save
-     * @return {Boolean} Whether the state could be saved. This function may
-     *   fail on the Internet Explorer if the hidden IFrame is not yet fully
-     *   loaded.
-     */
-    __storeState : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function( state ) {
-        var html = '<html><body><div id="state">' + encodeURIComponent(state) + '</div></body></html>';
-        try {
-          var doc = this._iframe.contentWindow.document;
-          doc.open();
-          doc.write(html);
-          doc.close();
-        } catch( ex ) {
-          return false;
-        }
-        return true;
-      },
-
-      "default" : function( state ) {
-        // RAP [if] Fix for bug 295816
-        //top.location.hash = "#" + encodeURIComponent(state);
-        window.location.hash = "#" + encodeURIComponent(state);
-        return true;
-      }
-    }),
-
-
-    /**
-     * Waits for the IFrame being loaded. Once the IFrame is loaded
-     * the callback is called with the provided context.
-     *
-     * @param callback {Function} This function will be called once the iframe is loaded
-     * @param context {Object?window} The context for the callback.
-     */
-    __waitForIFrame : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function(callback, context)
-      {
-        if ( !this._iframe.contentWindow || !this._iframe.contentWindow.document ) {
-            // Check again in 10 msec...
-            rwt.client.Timer.once(function() {
-              this.__waitForIFrame(callback, context);
-            }, this, 10);
-            return;
-        }
-        callback.call(context || window);
-      },
-
-      "default" : null
-    }),
-
-    setHasNavigationListener : function( value ) {
-      this._hasNavigationListener = value;
-      if( value ) {
-        this.addEventListener( "request", this._historyNavigated, this );
-        if( this._timer ) {
-          this._timer.start();
-        }
-      } else {
-        this.removeEventListener( "request", this._historyNavigated, this );
-        if( this._timer ) {
-          this._timer.stop();
-        }
-      }
-    },
-
-    _historyNavigated : function( event ) {
-      var state = event.getData();
-      var server = rwt.remote.Server.getInstance();
-      server.getRemoteObject( this ).notify( "Navigation", {
-        "state" : state
-      } );
-    }
-
-  },
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function()
-  {
-    this._timer.stop();
-    this._disposeObjects("_timer");
-    this._disposeFields("_iframe", "_titles");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.client.BrowserNavigation", {
-
-  factory : function( properties ) {
-    return rwt.client.BrowserNavigation.getInstance();
-  },
-
-  service : true,
-
-  listeners : [
-    "Navigation"
-  ],
-
-  methods : [
-    "addToHistory"
-  ],
-
-  methodHandler : {
-    "addToHistory" : function( object, value ) {
-      var entries = value.entries;
-      for( var i = 0; i < entries.length; i++) {
-        object.addToHistory( entries[ i ][ 0 ], entries[ i ][ 1 ] );
-      }
-    }
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * This manager (singleton) manage all drag and drop handling of a rwt.qx.Init instance.
- */
-rwt.qx.Class.define("rwt.event.DragAndDropHandler",
-{
-  type : "singleton",
-  extend : rwt.util.ObjectManager,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function()
-  {
-    this.base(arguments);
-
-    this.__data = {};
-    this.__actions = {};
-    this.__cursors = {};
-
-    var vCursor, vAction;
-    var vActions = [ "move", "copy", "alias", "nodrop" ];
-
-    for (var i=0, l=vActions.length; i<l; i++)
-    {
-      vAction = vActions[i];
-      vCursor = this.__cursors[vAction] = new rwt.widgets.base.Image();
-      vCursor.setAppearance("cursor-dnd-" + vAction);
-      vCursor.setZIndex(1e8);
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    sourceWidget :
-    {
-      check : "rwt.widgets.base.Widget",
-      nullable : true
-    },
-
-    destinationWidget :
-    {
-      check : "rwt.widgets.base.Widget",
-      nullable : true,
-      apply : "_applyDestinationWidget"
-    },
-
-    currentAction :
-    {
-      check : "String",
-      nullable : true,
-      event : "changeCurrentAction"
-    },
-
-
-    /**
-     * The default delta x of the cursor feedback.
-     *
-     * @see #setCursorPosition
-     */
-    defaultCursorDeltaX :
-    {
-      check : "Integer",
-      init : 5
-    },
-
-
-    /**
-     * The default delta y of the cursor feedback.
-     *
-     * @see #setCursorPosition
-     */
-    defaultCursorDeltaY :
-    {
-      check : "Integer",
-      init : 15
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    __lastDestinationEvent : null,
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      COMMON MODIFIER
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyDestinationWidget : function(value, old)
-    {
-      if (value)
-      {
-        value.dispatchEvent(new rwt.event.DragEvent("dragdrop", this.__lastDestinationEvent, value, this.getSourceWidget()));
-        this.__lastDestinationEvent = null;
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      DATA HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Add data of mimetype.
-     *
-     * #param vMimeType[String]: A valid mimetype
-     * #param vData[Any]: Any value for the mimetype
-     *
-     * @type member
-     * @param vMimeType {var} TODOC
-     * @param vData {var} TODOC
-     * @return {void}
-     */
-    addData : function(vMimeType, vData) {
-      this.__data[vMimeType] = vData;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vMimeType {var} TODOC
-     * @return {var} TODOC
-     */
-    getData : function(vMimeType) {
-      return this.__data[vMimeType];
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    clearData : function() {
-      this.__data = {};
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      MIME TYPE HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getDropDataTypes : function()
-    {
-      var vDestination = this.getDestinationWidget();
-      var vDropTypes = [];
-
-      // If there is not any destination, simple return
-      if (!vDestination) {
-        return vDropTypes;
-      }
-
-      // Search for matching mimetypes
-      var vDropDataTypes = vDestination.getDropDataTypes();
-
-      for (var i=0, l=vDropDataTypes.length; i<l; i++)
-      {
-        if (vDropDataTypes[i] in this.__data) {
-          vDropTypes.push(vDropDataTypes[i]);
-        }
-      }
-
-      return vDropTypes;
-    },
-
-    /**
-     * @signature function(e)
-     */
-    getDropTarget : rwt.util.Variant.select("qx.client",
-    {
-      // This hack is no longer needed for Firefox 2.0
-      // We should verify, which Firefox version needed this hack.
-      /*
-      "gecko" : function(e)
-      {
-        var vCurrent = e.getTarget();
-
-        // work around gecko bug (all other browsers are correct)
-        // clicking on a free space and drag prohibit the get of
-        // a valid event target. The target is always the element
-        // which was the one with the mousedown event before.
-        if (vCurrent == this.__dragCache.sourceWidget) {
-          vCurrent = rwt.event.EventHandlerUtil.getTargetObject(rwt.html.ElementFromPoint.getElementFromPoint(e.getPageX(), e.getPageY()));
-        } else {
-          vCurrent = rwt.event.EventHandlerUtil.getTargetObject(null, vCurrent);
-        }
-
-        while (vCurrent != null)
-        {
-          if (!vCurrent.supportsDrop(this.__dragCache)) {
-            return null;
-          }
-
-          if (this.supportsDrop(vCurrent)) {
-            return vCurrent;
-          }
-
-          vCurrent = vCurrent.getParent();
-        }
-
-        return null;
-      },
-      */
-
-      "default" : function(e)
-      {
-        var vCurrent = e.getTarget();
-
-        while (vCurrent != null)
-        {
-          if (!vCurrent.supportsDrop(this.__dragCache)) {
-            return null;
-          }
-
-          if (this.supportsDrop(vCurrent)) {
-            return vCurrent;
-          }
-
-          vCurrent = vCurrent.getParent();
-        }
-
-        return null;
-      }
-    }),
-
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      START DRAG
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * This needed be called from any "dragstart" event to really start drag session.
-     *
-     * @type member
-     * @return {void}
-     * @throws TODOC
-     */
-    startDrag : function()
-    {
-      if (!this.__dragCache) {
-        throw new Error("Invalid usage of startDrag. Missing dragInfo!");
-      }
-
-      // Update status flag
-      this.__dragCache.dragHandlerActive = true;
-
-      // Internal storage of source widget
-      this.setSourceWidget(this.__dragCache.sourceWidget);
-
-      // Add feedback widget
-      if (this.__feedbackWidget)
-      {
-        this.__feedbackWidget.setVisibility(false);
-
-        var doc = rwt.widgets.base.ClientDocument.getInstance();
-        doc.add(this.__feedbackWidget);
-        this.__feedbackWidget.setZIndex(1e8);
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      FIRE IMPLEMENTATION FOR USER EVENTS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param fromWidget {var} TODOC
-     * @param toWidget {var} TODOC
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    _fireUserEvents : function(fromWidget, toWidget, e)
-    {
-      if (fromWidget && fromWidget != toWidget && fromWidget.hasEventListeners("dragout")) {
-        fromWidget.dispatchEvent(new rwt.event.DragEvent("dragout", e, fromWidget, toWidget), true);
-      }
-
-      if (toWidget)
-      {
-        if (fromWidget != toWidget && toWidget.hasEventListeners("dragover")) {
-          toWidget.dispatchEvent(new rwt.event.DragEvent("dragover", e, toWidget, fromWidget), true);
-        }
-
-        if (toWidget.hasEventListeners("dragmove")) {
-          toWidget.dispatchEvent(new rwt.event.DragEvent("dragmove", e, toWidget, null), true);
-        }
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      HANDLER FOR MOUSE EVENTS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * This wraps the mouse events to custom handlers.
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {var} TODOC
-     */
-    handleMouseEvent : function(e)
-    {
-      switch(e.getType())
-      {
-        case "mousedown":
-          return this._handleMouseDown(e);
-
-        case "mouseup":
-          return this._handleMouseUp(e);
-
-        case "mousemove":
-          return this._handleMouseMove(e);
-      }
-    },
-
-
-    /**
-     * This starts the core drag and drop session.
-     *
-     * To really get drag and drop working you need to define
-     * a function which you attach to "dragstart"-event, which
-     * invokes at least this.startDrag()
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    _handleMouseDown : function(e)
-    {
-      if (e.getDefaultPrevented() || !e.isLeftButtonPressed()) {
-        return;
-      }
-
-      if(this.__dragCache == null)
-      {
-        // Store initial dragCache
-        this.__dragCache =
-        {
-          startScreenX      : e.getScreenX(),
-          startScreenY      : e.getScreenY(),
-          pageX             : e.getPageX(),
-          pageY             : e.getPageY(),
-          sourceWidget      : e.getTarget(),
-          sourceTopLevel    : e.getTarget().getTopLevelWidget(),
-          dragHandlerActive : false,
-          hasFiredDragStart : false
-        };
-      }
-    },
-
-
-    /**
-     * Handler for mouse move events
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    _handleMouseMove : function(e)
-    {
-      // Return if dragCache was not filled before
-      if (!this.__dragCache) {
-        return;
-      }
-
-      /*
-        Default handling if drag handler is activated
-      */
-
-      if (this.__dragCache.dragHandlerActive)
-      {
-        // Update page coordinates
-        this.__dragCache.pageX = e.getPageX();
-        this.__dragCache.pageY = e.getPageY();
-
-        // Get current target
-        var currentDropTarget = this.getDropTarget(e);
-
-        // Update action
-        this.setCurrentAction(currentDropTarget ? this._evalNewAction(e.isShiftPressed(), e.isCtrlPressed(), e.isAltPressed()) : null);
-
-        // Fire user events
-        this._fireUserEvents(this.__dragCache.currentDropWidget, currentDropTarget, e);
-
-        // Store current widget
-        this.__dragCache.currentDropWidget = currentDropTarget;
-
-        // Update cursor icon
-        this._renderCursor();
-
-        // Update user feedback
-        this._renderFeedbackWidget();
-      }
-
-      /*
-        Initial activation and fire of dragstart
-      */
-
-      else if (!this.__dragCache.hasFiredDragStart)
-      {
-        if (Math.abs(e.getScreenX() - this.__dragCache.startScreenX) > 5 || Math.abs(e.getScreenY() - this.__dragCache.startScreenY) > 5)
-        {
-          // Fire dragstart event to finally allow the above if to handle next events
-          this.__dragCache.sourceWidget.dispatchEvent(new rwt.event.DragEvent("dragstart", e, this.__dragCache.sourceWidget), true);
-
-          // Update status flag
-          this.__dragCache.hasFiredDragStart = true;
-
-          // Look if handler become active
-          if (this.__dragCache.dragHandlerActive)
-          {
-            // Fire first user events
-            var currentDropWidget = this.getDropTarget( e );
-            this._fireUserEvents( null, currentDropWidget, e);
-
-            // Update status flags
-            this.__dragCache.currentDropWidget = currentDropWidget;
-
-            // Activate capture for clientDocument
-            rwt.widgets.base.ClientDocument.getInstance().setCapture(true);
-          }
-        }
-      }
-    },
-
-
-    /**
-     * Handle mouse up event. Normally this finalize the drag and drop event.
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    _handleMouseUp : function(e)
-    {
-      // Return if dragCache was not filled before
-      if (!this.__dragCache) {
-        return;
-      }
-
-      if (this.__dragCache.dragHandlerActive) {
-        this._endDrag(this.getDropTarget(e), e);
-      }
-      else
-      {
-        // Clear drag cache
-        this.__dragCache = null;
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      HANDLER FOR KEY EVENTS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * This wraps the key events to custom handlers.
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    handleKeyEvent : function(e)
-    {
-      if (!this.__dragCache) {
-        return;
-      }
-
-      switch(e.getType())
-      {
-        case "keydown":
-          this._handleKeyDown(e);
-          return;
-
-        case "keyup":
-          this._handleKeyUp(e);
-          return;
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    _handleKeyDown : function(e)
-    {
-      // Stop Drag on Escape
-      if (e.getKeyIdentifier() == "Escape") {
-        this.cancelDrag(e);
-      }
-
-      // Update cursor and action on press of modifier keys
-      else if (this.getCurrentAction() != null)
-      {
-        // TODO this doesn't work in WebKit because WebKit doesn't fire keyevents for modifier keys
-        switch(e.getKeyIdentifier())
-        {
-          case "Shift":
-          case "Control":
-          case "Alt":
-            this.setAction(this._evalNewAction(e.isShiftPressed(), e.isCtrlPressed(), e.isAltPressed()));
-            this._renderCursor();
-
-            e.preventDefault();
-        }
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    _handleKeyUp : function(e)
-    {
-      // TODO this doesn't work in WebKit because WebKit doesn't fire keyevents for modifier keys
-      var bShiftPressed = e.getKeyIdentifier() == "Shift";
-      var bCtrlPressed = e.getKeyIdentifier() == "Control";
-      var bAltPressed = e.getKeyIdentifier() == "Alt";
-
-      if (bShiftPressed || bCtrlPressed || bAltPressed)
-      {
-        if (this.getCurrentAction() != null)
-        {
-          this.setAction(this._evalNewAction(!bShiftPressed && e.isShiftPressed(), !bCtrlPressed && e.isCtrlPressed(), !bAltPressed && e.isAltPressed()));
-          this._renderCursor();
-
-          e.preventDefault();
-        }
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      IMPLEMENTATION OF DRAG&DROP SESSION FINALISATION
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Cancel current drag and drop session
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    cancelDrag : function(e)
-    {
-      // Return if dragCache was not filled before
-      if (!this.__dragCache) {
-        return;
-      }
-
-      if (this.__dragCache.dragHandlerActive) {
-        this._endDrag(null, e);
-      }
-      else
-      {
-        // Clear drag cache
-        this.__dragCache = null;
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    globalCancelDrag : function()
-    {
-      if (this.__dragCache && this.__dragCache.dragHandlerActive) {
-        this._endDragCore();
-      }
-    },
-
-
-    /**
-     * This will be called to the end of each drag and drop session
-     *
-     * @type member
-     * @param currentDestinationWidget {var} TODOC
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    _endDrag : function(currentDestinationWidget, e)
-    {
-      // Use given destination widget
-      if (currentDestinationWidget)
-      {
-        this.__lastDestinationEvent = e;
-        this.setDestinationWidget(currentDestinationWidget);
-      }
-
-      // Dispatch dragend event
-      this.getSourceWidget().dispatchEvent(new rwt.event.DragEvent("dragend", e, this.getSourceWidget(), currentDestinationWidget), true);
-
-      // Fire dragout event
-      // RAP : We create this event on the server-side:
-      //this._fireUserEvents(this.__dragCache && this.__dragCache.currentDropWidget, null, e);
-
-      // Call helper
-      this._endDragCore();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    _endDragCore : function()
-    {
-      // Cleanup feedback widget
-      if (this.__feedbackWidget)
-      {
-        var doc = rwt.widgets.base.ClientDocument.getInstance();
-        doc.remove(this.__feedbackWidget);
-
-        if (this.__feedbackAutoDispose) {
-          this.__feedbackWidget.destroy();
-        }
-
-        this.__feedbackWidget = null;
-      }
-
-      // Remove cursor
-      var oldCursor = this.__cursor;
-
-      if (oldCursor)
-      {
-        oldCursor._style.display = "none";
-        this.__cursor = null;
-      }
-
-      this._cursorDeltaX = null;
-      this._cursorDeltaY = null;
-
-      // Reset drag cache for next drag and drop session
-      if (this.__dragCache)
-      {
-        this.__dragCache.currentDropWidget = null;
-        this.__dragCache = null;
-      }
-
-      // Deactivate capture for clientDocument
-      rwt.widgets.base.ClientDocument.getInstance().setCapture(false);
-
-      // Cleanup data and actions
-      this.clearData();
-      this.clearActions();
-
-      // Cleanup widgets
-      this.setSourceWidget(null);
-      this.setDestinationWidget(null);
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      IMPLEMENTATION OF CURSOR UPDATES
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Sets the position of the cursor feedback (the icon showing whether dropping
-     * is allowed at the current position and which action a drop will do).
-     *
-     * @type member
-     * @param deltaX {int} The number of pixels the top-left corner of the
-     *          cursor feedback should be away from the mouse cursor in x direction.
-     * @param deltaY {int} The number of pixels the top-left corner of the
-     *          cursor feedback should be away from the mouse cursor in y direction.
-     * @return {void}
-     */
-    setCursorPosition : function(deltaX, deltaY)
-    {
-      this._cursorDeltaX = deltaX;
-      this._cursorDeltaY = deltaY;
-    },
-
-
-    /**
-     * Select and setup the current used cursor
-     *
-     * @type member
-     * @return {void}
-     */
-    _renderCursor : function()
-    {
-      var vNewCursor;
-      var vOldCursor = this.__cursor;
-
-      switch(this.getCurrentAction())
-      {
-        case "move":
-          vNewCursor = this.__cursors.move;
-          break;
-
-        case "copy":
-          vNewCursor = this.__cursors.copy;
-          break;
-
-        case "alias":
-          vNewCursor = this.__cursors.alias;
-          break;
-
-        default:
-          vNewCursor = this.__cursors.nodrop;
-      }
-
-      // Hide old cursor
-      if (vNewCursor != vOldCursor && vOldCursor != null) {
-        vOldCursor._style.display = "none";
-      }
-
-      // Ensure that the cursor is created
-      if (!vNewCursor._initialLayoutDone)
-      {
-        rwt.widgets.base.ClientDocument.getInstance().add(vNewCursor);
-        rwt.widgets.base.Widget.flushGlobalQueues();
-      }
-
-      // Apply position with runtime style (fastest qooxdoo method)
-      vNewCursor._renderRuntimeLeft(this.__dragCache.pageX + ((this._cursorDeltaX != null) ? this._cursorDeltaX : this.getDefaultCursorDeltaX()));
-      vNewCursor._renderRuntimeTop(this.__dragCache.pageY + ((this._cursorDeltaY != null) ? this._cursorDeltaY : this.getDefaultCursorDeltaY()));
-
-      // Finally show new cursor
-      if (vNewCursor != vOldCursor) {
-        vNewCursor._style.display = "";
-      }
-
-      // Store new cursor
-      this.__cursor = vNewCursor;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      IMPLEMENTATION OF DROP TARGET VALIDATION
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vWidget {var} TODOC
-     */
-    supportsDrop : function(vWidget)
-    {
-      var vTypes = vWidget.getDropDataTypes();
-
-      if (!vTypes) {
-        return false;
-      }
-
-      for (var i=0; i<vTypes.length; i++)
-      {
-        if (vTypes[i] in this.__data) {
-          return true;
-        }
-      }
-
-      return false;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      ACTION HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vAction {var} TODOC
-     * @param vForce {var} TODOC
-     * @return {void}
-     */
-    addAction : function(vAction, vForce)
-    {
-      this.__actions[vAction] = true;
-
-      // Defaults to first added action
-      if (vForce || this.getCurrentAction() == null) {
-        this.setCurrentAction(vAction);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    clearActions : function()
-    {
-      this.__actions = {};
-      this.setCurrentAction(null);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vAction {var} TODOC
-     * @return {void}
-     */
-    removeAction : function(vAction)
-    {
-      delete this.__actions[vAction];
-
-      // Reset current action on remove
-      if (this.getCurrentAction() == vAction) {
-        this.setCurrentAction(null);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vAction {var} TODOC
-     * @return {void}
-     */
-    setAction : function(vAction)
-    {
-      if (vAction != null && !(vAction in this.__actions)) {
-        this.addAction(vAction, true);
-      } else {
-        this.setCurrentAction(vAction);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vKeyShift {var} TODOC
-     * @param vKeyCtrl {var} TODOC
-     * @param vKeyAlt {var} TODOC
-     * @return {var | null} TODOC
-     */
-    _evalNewAction : function(vKeyShift, vKeyCtrl, vKeyAlt)
-    {
-      if (vKeyShift && vKeyCtrl && "alias" in this.__actions) {
-        return "alias";
-      } else if (vKeyShift && vKeyAlt && "copy" in this.__actions) {
-        return "copy";
-      } else if (vKeyShift && "move" in this.__actions) {
-        return "move";
-      } else if (vKeyAlt && "alias" in this.__actions) {
-        return "alias";
-      } else if (vKeyCtrl && "copy" in this.__actions) {
-        return "copy";
-      }
-      else
-      {
-        // Return the first action found
-        for (var vAction in this.__actions) {
-          return vAction;
-        }
-      }
-
-      return null;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      USER FEEDBACK SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Sets the widget to show as feedback for the user. This widget should
-     * represent the object(s) the user is dragging.
-     *
-     * @type member
-     * @param widget {rwt.widgets.base.Widget} the feedback widget.
-     * @param deltaX {int ? 10} the number of pixels the top-left corner of the widget
-     *          should be away from the mouse cursor in x direction.
-     * @param deltaY {int ? 10} the number of pixels the top-left corner of the widget
-     *          should be away from the mouse cursor in y direction.
-     * @param autoDisposeWidget {Boolean} whether the widget should be disposed when
-     *          dragging is finished or cancelled.
-     * @return {void}
-     */
-    setFeedbackWidget : function(widget, deltaX, deltaY, autoDisposeWidget)
-    {
-      this.__feedbackWidget = widget;
-      this.__feedbackDeltaX = (deltaX != null) ? deltaX : 10;
-      this.__feedbackDeltaY = (deltaY != null) ? deltaY : 10;
-      this.__feedbackAutoDispose = autoDisposeWidget ? true : false;
-    },
-
-
-    /**
-     * Renders the user feedback widget at the correct location.
-     *
-     * @type member
-     * @return {void}
-     */
-    _renderFeedbackWidget : function()
-    {
-      if (this.__feedbackWidget)
-      {
-        this.__feedbackWidget.setVisibility(true);
-
-        // Apply position with runtime style (fastest qooxdoo method)
-        this.__feedbackWidget._renderRuntimeLeft(this.__dragCache.pageX + this.__feedbackDeltaX);
-        this.__feedbackWidget._renderRuntimeTop(this.__dragCache.pageY + this.__feedbackDeltaY);
-      }
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function()
-  {
-    this._disposeObjectDeep("__cursors", 1);
-    this._disposeObjects("__feedbackWidget");
-    this._disposeFields("__dragCache", "__data", "__actions", "__lastDestinationEvent");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/** The event object for drag and drop sessions */
-rwt.qx.Class.define("rwt.event.DragEvent",
-{
-  extend : rwt.event.MouseEvent,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function(vType, vMouseEvent, vTarget, vRelatedTarget)
-  {
-    this._mouseEvent = vMouseEvent;
-
-    var vOriginalTarget = null;
-
-    switch(vType)
-    {
-      case "dragstart":
-      case "dragover":
-        vOriginalTarget = vMouseEvent.getOriginalTarget();
-    }
-
-    this.base(arguments, vType, vMouseEvent.getDomEvent(), vTarget.getElement(), vTarget, vOriginalTarget, vRelatedTarget);
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      UTILITIY
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getMouseEvent : function() {
-      return this._mouseEvent;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      APPLICATION CONNECTION
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     * @throws TODOC
-     */
-    startDrag : function()
-    {
-      if (this.getType() != "dragstart") {
-        throw new Error("rwt.event.DragEvent startDrag can only be called during the dragstart event: " + this.getType());
-      }
-
-      this.stopPropagation();
-      rwt.event.DragAndDropHandler.getInstance().startDrag();
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      DATA SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param sType {String} TODOC
-     * @param oData {Object} TODOC
-     * @return {void}
-     */
-    addData : function(sType, oData) {
-      rwt.event.DragAndDropHandler.getInstance().addData(sType, oData);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param sType {String} TODOC
-     * @return {var} TODOC
-     */
-    getData : function(sType) {
-      return rwt.event.DragAndDropHandler.getInstance().getData(sType);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    clearData : function() {
-      rwt.event.DragAndDropHandler.getInstance().clearData();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getDropDataTypes : function() {
-      return rwt.event.DragAndDropHandler.getInstance().getDropDataTypes();
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      ACTION SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param sAction {String} TODOC
-     * @return {void}
-     */
-    addAction : function(sAction) {
-      rwt.event.DragAndDropHandler.getInstance().addAction(sAction);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param sAction {String} TODOC
-     * @return {void}
-     */
-    removeAction : function(sAction) {
-      rwt.event.DragAndDropHandler.getInstance().removeAction(sAction);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getAction : function() {
-      return rwt.event.DragAndDropHandler.getInstance().getCurrentAction();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    clearActions : function() {
-      rwt.event.DragAndDropHandler.getInstance().clearActions();
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      USER FEEDBACK SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Sets the widget to show as feedback for the user. This widget should
-     * represent the object(s) the user is dragging.
-     *
-     * @type member
-     * @param widget {rwt.widgets.base.Widget} the feedback widget.
-     * @param deltaX {int ? 10} the number of pixels the top-left corner of the widget
-     *          should be away from the mouse cursor in x direction.
-     * @param deltaY {int ? 10} the number of pixels the top-left corner of the widget
-     *          should be away from the mouse cursor in y direction.
-     * @param autoDisposeWidget {Boolean} whether the widget should be disposed when
-     *          dragging is finished or cancelled.
-     * @return {void}
-     */
-    setFeedbackWidget : function(widget, deltaX, deltaY, autoDisposeWidget) {
-      rwt.event.DragAndDropHandler.getInstance().setFeedbackWidget(widget, deltaX, deltaY, autoDisposeWidget);
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      CURSPOR POSITIONING SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Sets the position of the cursor feedback (the icon showing whether dropping
-     * is allowed at the current position and which action a drop will do).
-     *
-     * @type member
-     * @param deltaX {int} The number of pixels the top-left corner of the
-     *          cursor feedback should be away from the mouse cursor in x direction.
-     * @param deltaY {int} The number of pixels the top-left corner of the
-     *          cursor feedback should be away from the mouse cursor in y direction.
-     * @return {void}
-     */
-    setCursorPosition : function(deltaX, deltaY) {
-      rwt.event.DragAndDropHandler.getInstance().setCursorPosition(deltaX, deltaY);
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function() {
-    this._disposeFields("_mouseEvent");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define("rwt.widgets.base.HtmlEmbed",
-{
-  extend : rwt.widgets.base.Terminator,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function(vHtml)
-  {
-    this.base(arguments);
-
-    if (vHtml != null) {
-      this.setHtml(vHtml);
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    /** Any text string which can contain HTML, too */
-    html :
-    {
-      check : "String",
-      init : "",
-      apply : "_applyHtml",
-      event : "changeHtml"
-    },
-
-
-    /**
-     * The alignment of the text inside the box
-     */
-    textAlign :
-    {
-      check : [ "left", "center", "right", "justify" ],
-      nullable : true,
-      themeable : true,
-      apply : "_applyTextAlign"
-    },
-
-
-    /** Block inheritance as default for font property */
-    font :
-    {
-      refine : true,
-      init : null
-    },
-
-
-    /** Block inheritance as default for textColor property */
-    textColor :
-    {
-      refine : true,
-      init : null
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      APPLY ROUTINES
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     */
-    _applyHtml : function()
-    {
-      if (this._isCreated) {
-        this._syncHtml();
-      }
-    },
-
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      TEXTALIGN SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    _applyTextAlign : function( value, old ) {
-      if( value === null ) {
-        this.removeStyleProperty( "textAlign" );
-      } else {
-        this.setStyleProperty( "textAlign", value );
-      }
-    },
-
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      FONT SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    _applyFont : function(value, old) {
-      this._styleFont( value );
-    },
-
-
-    /**
-     * @type member
-     * @param value {rwt.html.Font}
-     */
-    _styleFont : function( value ) {
-      if( value ) {
-        value.render( this );
-      } else {
-        rwt.html.Font.reset( this );
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      TEXT COLOR SUPPORT
-    ---------------------------------------------------------------------------
-    */
-
-    _applyTextColor : function(value, old) {
-      this._styleTextColor( value );
-    },
-
-    /**
-     * @type member
-     * @param value {var} any acceptable CSS color property
-     */
-    _styleTextColor : function( value ) {
-      if( value ) {
-        this.setStyleProperty( "color", value );
-      } else {
-        this.removeStyleProperty( "color" );
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      ELEMENT HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    _applyElementData : function() {
-      this._syncHtml();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    _syncHtml : function() {
-      this._getTargetNode().innerHTML = this.getHtml();
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Container widget for internal frames (iframes).
- *
- * An iframe can display any HTML page inside the widget.
- *
- * @appearance iframe
- */
-rwt.qx.Class.define("rwt.widgets.base.Iframe",
-{
-  extend : rwt.widgets.base.Terminator,
-
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  /**
-   * @param vSource {String?null} URL of the HTML page displayed in the iframe.
-   */
-  construct : function(vSource)
-  {
-    this.base(arguments);
-
-    this.initSelectable();
-    this.initTabIndex();
-    this.initScrolling();
-
-    if (vSource != null) {
-      this.setSource(vSource);
-    }
-  },
-
-
-  /*
-  *****************************************************************************
-     EVENTS
-  *****************************************************************************
-  */
-
-  events:
-  {
-    /**
-     * The "load" event is fired after the iframe content has successfully been loaded.
-     */
-    "load" : "rwt.event.Event"
-  },
-
-
-
-
-
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics :
-  {
-    load : function( obj ) {
-      try {
-        if( !obj ) {
-          throw new Error("Could not find iframe which was loaded [A]!");
-        }
-        // Non-MSHTML browsers will input an DOM event here
-        if( obj.currentTarget ) {
-          obj = obj.currentTarget;
-        }
-        // Find iframe instance and call onload
-        if( obj._QxIframe ) {
-          obj._QxIframe._onload();
-        } else if( obj.parentNode ) { // Check for parentNode necessary, see Bug 346064
-          throw new Error("Could not find iframe which was loaded [B]!");
-        }
-      } catch( ex ) {
-        rwt.runtime.ErrorHandler.processJavaScriptError( ex );
-      }
-    },
-
-    _useAlternateLayouting : function() {
-      return rwt.client.Client.isMobileSafari();
-    }
-
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    tabIndex :
-    {
-      refine : true,
-      init : 0
-    },
-
-    selectable :
-    {
-      refine : true,
-      init : false
-    },
-
-    appearance :
-    {
-      refine : true,
-      init : "iframe"
-    },
-
-    /**
-     * Source URL of the iframe.
-     */
-    source :
-    {
-      check : "String",
-      apply : "_applySource",
-      event : "changeSource",
-      nullable : true
-    },
-
-    /**
-     * Name of the iframe.
-     */
-    frameName :
-    {
-      check : "String",
-      init : "",
-      apply : "_applyFrameName"
-    },
-
-
-    /** Whether the iframe's content pane should have scroll bars */
-    scrolling :
-    {
-      check : ["yes", "no", "auto"],
-      init  : "auto",
-      apply : "_applyScrolling"
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /**
-     * Get the DOM element of the iframe.
-     *
-     * @type member
-     * @return {Element} The DOM element of the iframe.
-     */
-    getIframeNode : function() {
-      return this._iframeNode;
-    },
-
-
-    /**
-     * Change the DOM element of the iframe.
-     *
-     * @type member
-     * @param vIframeNode {Element} The new DOM element of the iframe.
-     */
-    setIframeNode : function(vIframeNode) {
-      return this._iframeNode = vIframeNode;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getBlockerNode : function() {
-      return this._blockerNode;
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param vBlockerNode {var} TODOC
-     * @return {var} TODOC
-     */
-    setBlockerNode : function(vBlockerNode) {
-      return this._blockerNode = vBlockerNode;
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      WINDOW & DOCUMENT ACCESS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Get the DOM window object of the iframe.
-     *
-     * @type member
-     * @return {DOMWindow} The DOM window object of the iframe.
-     */
-    getContentWindow : function()
-    {
-      if (this.isCreated()) {
-        return rwt.html.Iframes.getWindow(this.getIframeNode());
-      } else {
-        return null;
-      }
-    },
-
-
-    /**
-     * Get the DOM document object of the iframe.
-     *
-     * @type member
-     * @return {DOMDocument} The DOM document object of the iframe.
-     */
-    getContentDocument : function()
-    {
-      if (this.isCreated()) {
-        return rwt.html.Iframes.getDocument(this.getIframeNode());
-      } else {
-        return null;
-      }
-    },
-
-
-    /**
-     * @signature function()
-     */
-    isLoaded : rwt.util.Variant.select("qx.client",
-    {
-      "mshtml" : function()
-      {
-        var doc = this.getContentDocument();
-        return doc ? doc.readyState == "complete" : false;
-      },
-
-      "default" : function() {
-        return this._isLoaded;
-      }
-    }),
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      METHODS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Reload the contents of the iframe.
-     *
-     * @type member
-     */
-    reload : function()
-    {
-      if (this.isCreated() && this.getContentWindow())
-      {
-        this._isLoaded = false;
-
-        var currentSource = this.queryCurrentUrl() || this.getSource();
-
-        try
-        {
-          /*
-          Some gecko users might have an exception here:
-            Exception... "Component returned failure code: 0x805e000a
-            [nsIDOMLocation.replace]"  nsresult: "0x805e000a (<unknown>)"
-          */
-          try
-          {
-            this.getContentWindow().location.replace(currentSource);
-          }
-          catch(ex)
-          {
-            this.getIframeNode().src = currentSource;
-          }
-        }
-        catch(ex) {
-          throw new Error( "Iframe source could not be set! This may be related to AdBlock Plus Firefox Extension." );
-        }
-      }
-    },
-
-
-    /**
-     * Returns the current (served) URL inside the iframe
-     *
-     * @return {String} Returns the location href or null (if a query is not possible/allowed)
-     */
-    queryCurrentUrl : function()
-    {
-      var doc = this.getContentDocument();
-
-      try
-      {
-        if (doc && doc.location) {
-          return doc.location.href;
-        }
-      }
-      catch(ex) {}
-
-      return null;
-    },
-
-
-    /**
-     * Cover the iframe with a transparent blocker div element. This prevents
-     * mouse or key events to be handled by the iframe. To release the blocker
-     * use {@link #release}.
-     *
-     * @type member
-     */
-    block : function()
-    {
-      if (this._blockerNode &&
-         (!this._blockerNode.parentElement ||
-         (rwt.client.Client.isGecko() && !this._blockerNode.parentNode))) {
-        this._getBlockerParent().appendChild(this._blockerNode);
-      }
-    },
-
-
-    /**
-     * Release the blocker set by {@link #block}.
-     *
-     * @type member
-     */
-    release : function()
-    {
-      if (this._blockerNode &&
-         (this._blockerNode.parentElement ||
-         (rwt.client.Client.isGecko() && this._blockerNode.parentNode))) {
-        this._getBlockerParent().removeChild(this._blockerNode);
-      }
-    },
-
-
-    /**
-     * Get the parent element of the blocker node. Respects extended border
-     * elements.
-     *
-     * @return {Element} the blocker's parent element
-     */
-    _getBlockerParent : function()
-    {
-      var el = this.getElement();
-      if (this._innerStyle) {
-        return el.firstChild;
-      } else {
-        return el;
-      }
-    },
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      ELEMENT HELPER
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Creates an template iframe element and sets all required html and style properties.
-     *
-     * @type static
-     * @param vFrameName {String} Name of the iframe.
-     */
-    _generateIframeElement : function()
-    {
-      var frameEl = this._createIframeNode( this.getFrameName() );
-
-      frameEl._QxIframe = this;
-
-      frameEl.frameBorder = "0";
-      frameEl.frameSpacing = "0";
-
-      frameEl.marginWidth = "0";
-      frameEl.marginHeight = "0";
-
-      if( !rwt.widgets.base.Iframe._useAlternateLayouting() ) {
-        frameEl.width = "100%";
-        frameEl.height = "100%";
-      }
-
-      frameEl.hspace = "0";
-      frameEl.vspace = "0";
-
-      frameEl.border = "0";
-      frameEl.unselectable = "on";
-      frameEl.allowTransparency = "true";
-
-      frameEl.style.position = "absolute";
-      frameEl.style.top = 0;
-      frameEl.style.left = 0;
-
-      return frameEl;
-    },
-
-    _createIframeNode : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function( frameName ) {
-        var nameStr = frameName ? 'name="' + frameName + '"' : '';
-        var frameEl = rwt.widgets.base.Iframe._element = document.createElement(
-          "<iframe " + nameStr + " ></iframe>");
-        frameEl.attachEvent("onload", function() {
-          rwt.widgets.base.Iframe.load(frameEl);
-        });
-        return frameEl;
-      },
-      "default" : function( frameName ) {
-        var frameEl = rwt.widgets.base.Iframe._element = document.createElement("iframe");
-        frameEl.onload = rwt.widgets.base.Iframe.load;
-        if (frameName) {
-          frameEl.name = frameName;
-        }
-        return frameEl;
-      }
-    } ),
-
-
-    /**
-     * TODOC
-     *
-     * @type static
-     * @return {void}
-     */
-    _generateBlockerElement : function()
-    {
-      var blockerEl = rwt.widgets.base.Iframe._blocker = document.createElement("div");
-      var blockerStyle = blockerEl.style;
-
-      if( rwt.client.Client.isMshtml() ) {
-        // Setting the backgroundImage causes an "insecure elements" warning under SSL
-
-        blockerStyle.backgroundColor = "white";
-        blockerStyle.filter = "Alpha(Opacity=0)";
-      }
-
-      blockerStyle.position = "absolute";
-      blockerStyle.top = 0;
-      blockerStyle.left = 0;
-      blockerStyle.width = "100%";
-      blockerStyle.height = "100%";
-      blockerStyle.zIndex = 1;
-
-      return blockerEl;
-    },
-
-
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      APPLY ROUTINES
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyElement : function(value, old)
-    {
-      var iframeNode = this.setIframeNode(this._generateIframeElement());
-      var blockerNode = this.setBlockerNode(this._generateBlockerElement());
-
-      this._syncSource();
-      this._syncScrolling();
-
-      value.appendChild(iframeNode);
-
-      this.base(arguments, value, old);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    _beforeAppear : function()
-    {
-      this.base(arguments);
-
-      // register to iframe manager as active widget
-      rwt.widgets.util.IframeManager.getInstance().add(this);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    _beforeDisappear : function()
-    {
-      this.base(arguments);
-
-      // deregister from iframe manager
-      rwt.widgets.util.IframeManager.getInstance().remove(this);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applySource : function(value, old)
-    {
-      if (this.isCreated()) {
-        this._syncSource();
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    _syncSource : function()
-    {
-      var currentSource = this.getSource();
-
-      if (currentSource == null || currentSource === "") {
-        currentSource = rwt.remote.Server.RESOURCE_PATH + "static/html/blank.html";
-      }
-
-      this._isLoaded = false;
-
-      try
-      {
-        // the guru says ...
-        // it is better to use 'replace' than 'src'-attribute, since 'replace' does not interfer
-        // with the history (which is taken care of by the history manager), but there
-        // has to be a loaded document
-        if (this.getContentWindow())
-        {
-          /*
-          Some gecko users might have an exception here:
-            Exception... "Component returned failure code: 0x805e000a
-            [nsIDOMLocation.replace]"  nsresult: "0x805e000a (<unknown>)"
-          */
-          try
-          {
-            this.getContentWindow().location.replace(currentSource);
-          }
-          catch(ex)
-          {
-            this.getIframeNode().src = currentSource;
-          }
-        }
-        else
-        {
-          this.getIframeNode().src = currentSource;
-        }
-      }
-      catch(ex) {
-        throw new Error( "Iframe source could not be set! This may be related to AdBlock Plus Firefox Extension." );
-      }
-    },
-
-
-    // property apply
-    _applyScrolling : function(value, old)
-    {
-      if (this.isCreated()) {
-        this._syncScrolling();
-      }
-    },
-
-
-    /**
-     * Sync scrolling property to the iframe DOM node.
-     *
-     * @type member
-     */
-    _syncScrolling : function() {
-      this.getIframeNode().setAttribute("scrolling", this.getScrolling());
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     * @param propName {var} TODOC
-     * @param uniqModIds {var} TODOC
-     * @throws TODOC
-     */
-    _applyFrameName : function(value, old, propName, uniqModIds)
-    {
-      if (this.isCreated()) {
-        throw new Error("Not allowed to set frame name after it has been created");
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      EVENT HANDLER
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    _onload : function()
-    {
-      if (!this._isLoaded)
-      {
-        this._isLoaded = true;
-        this.createDispatchEvent("load");
-      }
-    },
-
-    destroy : function() {
-      // best known method to remove iframe content from memory is to set this url:
-      /*jshint scripturl:true */
-      var src = "javascript:false;";
-      if( rwt.client.Client.isMshtml() && this._iframeNode && this.getSource() !== src ) {
-        this.setStyleProperty( "visibility", "hidden" );
-        this.addToDocument();
-        this.addEventListener( "load", function() {
-          this.destroy();
-        }, this );
-        this.setSource( src );
-      } else {
-        this.base( arguments );
-      }
-    },
-
-
-    /*
-    ---------------------------------------------------------------------------
-      LOAD STATUS
-    ---------------------------------------------------------------------------
-    */
-
-    _isLoaded : false
-  },
-
-
-  defer : function( statics, members ) {
-    if( rwt.widgets.base.Iframe._useAlternateLayouting() ) {
-      var originalRenderWidth = members._renderRuntimeWidth;
-      var originalRenderHeight = members._renderRuntimeHeight;
-      var originalResetWidth = members._resetRuntimeWidth;
-      var originalResetHeight = members._resetRuntimeHeight;
-      members._renderRuntimeWidth = function( value ) {
-        originalRenderWidth.call( this, value );
-        this._iframeNode.style.minWidth = value + "px";
-        this._iframeNode.style.maxWidth = value + "px";
-      };
-      var org = members._renderRuntimeHeight;
-      members._renderRuntimeHeight = function( value ) {
-        originalRenderHeight.call( this, value );
-        this._iframeNode.style.minHeight = value + "px";
-        this._iframeNode.style.maxHeight = value + "px";
-      };
-      members._resetRuntimeWidth = function( value ) {
-        originalResetWidth.call( this, value );
-        this._iframeNode.style.minWidth = "";
-        this._iframeNode.style.maxWidth = "";
-      };
-      members._resetRuntimeHeight = function( value ) {
-        originalResetHeight.call( this, value );
-        this._iframeNode.style.minHeight = "";
-        this._iframeNode.style.maxHeight = "";
-      };
-    }
-  },
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function()
-  {
-    if (this._iframeNode)
-    {
-      this._iframeNode._QxIframe = null;
-      this._iframeNode.onload = null;
-      this._iframeNode = null;
-      this._getTargetNode().innerHTML = "";
-    }
-    this._disposeFields("__onload", "_blockerNode");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * Provides resizing behavior to any widget.
- */
-rwt.qx.Mixin.define("rwt.widgets.util.MResizable",
-{
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function(child)
-  {
-    this._frame = new rwt.widgets.base.Terminator();
-    this._frame.setAppearance("resizer-frame");
-    this.addEventListener("mousedown", this._onmousedown);
-    this.addEventListener("mouseup", this._onmouseup);
-    this.addEventListener("mousemove", this._onmousemove);
-  },
-
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    /** It is resizable in the left direction. */
-    resizableWest :
-    {
-      check : "Boolean",
-      init : true,
-      apply : "_applyResizable"
-    },
-
-
-    /** It is resizable in the top direction. */
-    resizableNorth :
-    {
-      check : "Boolean",
-      init : true,
-      apply : "_applyResizable"
-    },
-
-
-    /** It is resizable in the right direction. */
-    resizableEast :
-    {
-      check : "Boolean",
-      init : true,
-      apply : "_applyResizable"
-    },
-
-
-    /** It is resizable in the bottom direction. */
-    resizableSouth :
-    {
-      check : "Boolean",
-      init : true,
-      apply : "_applyResizable"
-    },
-
-
-    /** If the window is resizable */
-    resizable :
-    {
-      group : [ "resizableNorth", "resizableEast", "resizableSouth", "resizableWest" ],
-      mode  : "shorthand"
-    },
-
-
-    /** The resize method to use */
-    resizeMethod :
-    {
-      init : "frame",
-      check : [ "opaque", "lazyopaque", "frame", "translucent" ],
-      event : "changeResizeMethod"
-    }
-  },
-
-
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /**
-     * Adjust so that it returns a boolean instead of an array.
-     *
-     * @type member
-     * @return {Boolean} TODOC
-     */
-    isResizable : function() {
-      return this.getResizableWest() || this.getResizableEast() || this.getResizableNorth() || this.getResizableSouth();
-    },
-
-
-    /**
-     * Adjust so that it returns a boolean instead of an array.
-     * Wrapper around isResizable. Please use isResizable instead.
-     *
-     * @type member
-     * @return {Boolean} TODOC
-     */
-    getResizable : function() {
-      return this.isResizable();
-    },
-
-
-
-    _applyResizable : function(value, old) {
-      // placeholder
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    _onmousedown : function(e)
-    {
-      if (this._resizeNorth || this._resizeSouth || this._resizeWest || this._resizeEast)
-      {
-        // enable capturing
-        this.setCapture(true);
-
-        // activate global cursor
-        this.getTopLevelWidget().setGlobalCursor(this.getCursor());
-
-        // caching element
-        var el = this.getElement();
-
-        // measuring and caching of values for resize session
-        var pa = this._getResizeParent();
-        var pl = pa.getElement();
-
-        // compute locations
-        var paLoc = rwt.html.Location.get(pl, "scroll");
-        var elLoc = rwt.html.Location.get(el);
-
-        // handle frame and translucently
-        switch(this.getResizeMethod())
-        {
-          case "translucent":
-            this.setOpacity(0.5);
-            break;
-
-          case "frame":
-            var f = this._frame;
-
-            if (f.getParent() != pa)
-            {
-              f.setParent(pa);
-              rwt.widgets.base.Widget.flushGlobalQueues();
-            }
-
-            f._renderRuntimeLeft(elLoc.left - paLoc.left);
-            f._renderRuntimeTop(elLoc.top - paLoc.top);
-
-            f._renderRuntimeWidth(el.offsetWidth);
-            f._renderRuntimeHeight(el.offsetHeight);
-
-            f.setZIndex(this.getZIndex() + 1);
-
-            break;
-        }
-
-        // create resize session
-        var s = this._resizeSession = {};
-        var minRef = this._getMinSizeReference();
-
-        if (this._resizeWest)
-        {
-          s.boxWidth = el.offsetWidth;
-          s.boxRight = elLoc.right;
-        }
-
-        if (this._resizeWest || this._resizeEast)
-        {
-          s.boxLeft = elLoc.left;
-
-          s.parentContentLeft = paLoc.left;
-          s.parentContentRight = paLoc.right;
-
-          s.minWidth = minRef.getMinWidthValue();
-          s.maxWidth = minRef.getMaxWidthValue();
-        }
-
-        if (this._resizeNorth)
-        {
-          s.boxHeight = el.offsetHeight;
-          s.boxBottom = elLoc.bottom;
-        }
-
-        if (this._resizeNorth || this._resizeSouth)
-        {
-          s.boxTop = elLoc.top;
-
-          s.parentContentTop = paLoc.top;
-          s.parentContentBottom = paLoc.bottom;
-
-          s.minHeight = minRef.getMinHeightValue();
-          s.maxHeight = minRef.getMaxHeightValue();
-        }
-      }
-      else
-      {
-        // cleanup resize session
-        delete this._resizeSession;
-      }
-
-      // stop event
-      e.stopPropagation();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    _onmouseup : function(e)
-    {
-      var s = this._resizeSession;
-
-      if (s)
-      {
-        // disable capturing
-        this.setCapture(false);
-
-        // deactivate global cursor
-        this.getTopLevelWidget().setGlobalCursor(null);
-
-        // sync sizes to frame
-        if(    this.getResizeMethod() === "lazyopaque"
-            || ( this.getResizeMethod() === "frame" && this._frame && this._frame.getParent() )
-         ) {
-          if (s.lastLeft != null) {
-            this.setLeft(s.lastLeft);
-          }
-
-          if (s.lastTop != null) {
-            this.setTop(s.lastTop);
-          }
-
-          if (s.lastWidth != null)
-          {
-            this._changeWidth(s.lastWidth);
-          }
-
-          if (s.lastHeight != null)
-          {
-            this._changeHeight(s.lastHeight);
-          }
-
-          if (this.getResizeMethod() == "frame") {
-            this._frame.setParent(null);
-          }
-        } else if( this.getResizeMethod() === "translucent" ) {
-          this.setOpacity(null);
-        }
-        delete this._resizeSession;
-      }
-
-      // stop event
-      e.stopPropagation();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param p {var} TODOC
-     * @param e {Event} TODOC
-     * @return {var} TODOC
-     */
-    _near : function(p, e) {
-      return e > (p - 5) && e < (p + 5);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    _onmousemove : function(e)
-    {
-      if (this._disableResize) {
-        return;
-      }
-
-      var s = this._resizeSession;
-
-      if (s)
-      {
-        if (this._resizeWest)
-        {
-          s.lastWidth = rwt.util.Numbers.limit(s.boxWidth + s.boxLeft - Math.max(e.getPageX(), s.parentContentLeft), s.minWidth, s.maxWidth);
-          s.lastLeft = s.boxRight - s.lastWidth - s.parentContentLeft;
-        }
-        else if (this._resizeEast)
-        {
-          s.lastWidth = rwt.util.Numbers.limit(Math.min(e.getPageX(), s.parentContentRight) - s.boxLeft, s.minWidth, s.maxWidth);
-        }
-
-        if (this._resizeNorth)
-        {
-          s.lastHeight = rwt.util.Numbers.limit(s.boxHeight + s.boxTop - Math.max(e.getPageY(), s.parentContentTop), s.minHeight, s.maxHeight);
-          s.lastTop = s.boxBottom - s.lastHeight - s.parentContentTop;
-        }
-        else if (this._resizeSouth)
-        {
-          s.lastHeight = rwt.util.Numbers.limit(Math.min(e.getPageY(), s.parentContentBottom) - s.boxTop, s.minHeight, s.maxHeight);
-        }
-
-        switch(this.getResizeMethod())
-        {
-          case "opaque":
-          case "translucent":
-            if (this._resizeWest || this._resizeEast)
-            {
-              this.setWidth(s.lastWidth);
-
-              if (this._resizeWest) {
-                this.setLeft(s.lastLeft);
-              }
-            }
-
-            if (this._resizeNorth || this._resizeSouth)
-            {
-              this.setHeight(s.lastHeight);
-
-              if (this._resizeNorth) {
-                this.setTop(s.lastTop);
-              }
-            }
-
-            break;
-
-          default:
-            var o = this.getResizeMethod() == "frame" ? this._frame : this;
-
-            if (this._resizeWest || this._resizeEast)
-            {
-              o._renderRuntimeWidth(s.lastWidth);
-
-              if (this._resizeWest) {
-                o._renderRuntimeLeft(s.lastLeft);
-              }
-            }
-
-            if (this._resizeNorth || this._resizeSouth)
-            {
-              o._renderRuntimeHeight(s.lastHeight);
-
-              if (this._resizeNorth) {
-                o._renderRuntimeTop(s.lastTop);
-              }
-            }
-        }
-      }
-      else
-      {
-        var resizeMode = "";
-        var el = this.getElement();
-
-        this._resizeNorth = this._resizeSouth = this._resizeWest = this._resizeEast = false;
-
-        var elLoc = rwt.html.Location.get(el);
-
-        if (this._near(elLoc.top, e.getPageY()))
-        {
-          if (this.getResizableNorth())
-          {
-            resizeMode = "n";
-            this._resizeNorth = true;
-          }
-        }
-        else if (this._near(elLoc.bottom, e.getPageY()))
-        {
-          if (this.getResizableSouth())
-          {
-            resizeMode = "s";
-            this._resizeSouth = true;
-          }
-        }
-
-        if (this._near(elLoc.left, e.getPageX()))
-        {
-          if (this.getResizableWest())
-          {
-            resizeMode += "w";
-            this._resizeWest = true;
-          }
-        }
-        else if (this._near(elLoc.right, e.getPageX()))
-        {
-          if (this.getResizableEast())
-          {
-            resizeMode += "e";
-            this._resizeEast = true;
-          }
-        }
-
-        if (this._resizeNorth || this._resizeSouth || this._resizeWest || this._resizeEast) {
-          this.setCursor(resizeMode + "-resize");
-        } else {
-          this.resetCursor();
-        }
-      }
-
-      // stop event
-      e.stopPropagation();
-    }
-  },
-
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function() {
-    this._disposeObjects("_frame");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2007, 2012 David Perez Carmona, EclipseSource, and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for RAP
- ******************************************************************************/
-
-/**
- * A popup that can be resized.
- */
-rwt.qx.Class.define("rwt.widgets.base.ResizablePopup",
-{
-  extend   : rwt.widgets.base.Popup,
-  include  : rwt.widgets.util.MResizable,
-
-  construct : function()
-  {
-    this.base(arguments);
-
-    this.initMinWidth();
-    this.initMinHeight();
-    this.initWidth();
-    this.initHeight();
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties:
-  {
-    appearance :
-    {
-      refine : true,
-      init : "resizer"
-    },
-
-    minWidth :
-    {
-      refine : true,
-      init : "auto"
-    },
-
-    minHeight :
-    {
-      refine : true,
-      init : "auto"
-    },
-
-    width :
-    {
-      refine : true,
-      init : "auto"
-    },
-
-    height :
-    {
-      refine : true,
-      init : "auto"
-    }
-  },
-
-
-
-
-
-
-  members:
-  {
-
-    _changeWidth: function(value) {
-      this.setWidth(value);
-    },
-
-    _changeHeight: function(value) {
-      this.setHeight(value);
-    },
-
-    /**
-     * @return {Widget}
-     */
-    _getResizeParent: function() {
-      return this.getParent();
-    },
-
-    /**
-     * @return {Widget}
-     */
-    _getMinSizeReference: function() {
-      return this;
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * @state active
- * @state maximized This state is active if the window is maximized
- *
- * @appearance window The main window object
- * @appearance window-resize-frame {rwt.widgets.base.Terminator}
- * @appearance window-captionbar-icon {rwt.widgets.base.Image}
- * @appearance window-captionbar-title {rwt.widgets.base.Label} The label of the caption bar
- * @appearance window-captionbar-minimize-button {rwt.widgets.base.Button}
- * @appearance window-captionbar-restore-button {rwt.widgets.base.Button}
- * @appearance window-captionbar-maximize-button {rwt.widgets.base.Button}
- * @appearance window-captionbar-close-button {rwt.widgets.base.Button}
- * @appearance window-statusbar {rwt.widgets.base.HorizontalBoxLayout}
- * @appearance window-statusbar-text {rwt.widgets.base.Label}
- *
- * @appearance window-captionbar {rwt.widgets.base.HorizontalBoxLayout}
- * @state active {window-captionbar}
- */
-rwt.qx.Class.define("rwt.widgets.base.Window",
-{
-  extend : rwt.widgets.base.ResizablePopup,
-
-
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  construct : function(vCaption, vIcon, vWindowManager)
-  {
-    this.base(arguments);
-
-    // ************************************************************************
-    //   MANAGER
-    // ************************************************************************
-    // Init Window Manager
-    this.setWindowManager(vWindowManager || rwt.widgets.base.Window.getDefaultWindowManager());
-
-    // ************************************************************************
-    //   LAYOUT
-    // ************************************************************************
-    var l = this._layout = new rwt.widgets.base.VerticalBoxLayout();
-    l.setEdge(0);
-    this.add(l);
-
-    // ************************************************************************
-    //   CAPTIONBAR
-    // ************************************************************************
-    var cb = this._captionBar = new rwt.widgets.base.HorizontalBoxLayout();
-    cb.setAppearance("window-captionbar");
-    cb.setHeight("auto");
-    cb.setOverflow("hidden");
-    l.add(cb);
-
-    // ************************************************************************
-    //   CAPTIONICON
-    // ************************************************************************
-    var ci = this._captionIcon = new rwt.widgets.base.Image();
-    ci.setAppearance("window-captionbar-icon");
-    cb.add(ci);
-
-    // ************************************************************************
-    //   CAPTIONTITLE
-    // ************************************************************************
-    var ct = this._captionTitle = new rwt.widgets.base.Label(vCaption);
-    ct.setAppearance("window-captionbar-title");
-    ct.setSelectable(false);
-    cb.add(ct);
-
-    // ************************************************************************
-    //   CAPTIONFLEX
-    // ************************************************************************
-    var cf = this._captionFlex = new rwt.widgets.base.HorizontalSpacer();
-    cb.add(cf);
-
-    // ************************************************************************
-    //   CAPTIONBUTTONS: MINIMIZE
-    // ************************************************************************
-    var bm = this._minimizeButton = new rwt.widgets.base.Button();
-
-    bm.setAppearance("window-captionbar-minimize-button");
-    bm.setTabIndex(null);
-
-    bm.addEventListener("execute", this._onminimizebuttonclick, this);
-    bm.addEventListener("mousedown", this._onbuttonmousedown, this);
-
-    cb.add(bm);
-
-    // ************************************************************************
-    //   CAPTIONBUTTONS: RESTORE
-    // ************************************************************************
-    var br = this._restoreButton = new rwt.widgets.base.Button();
-
-    br.setAppearance("window-captionbar-restore-button");
-    br.setTabIndex(null);
-
-    br.addEventListener("execute", this._onrestorebuttonclick, this);
-    br.addEventListener("mousedown", this._onbuttonmousedown, this);
-
-    // don't add initially
-    // cb.add(br);
-    // ************************************************************************
-    //   CAPTIONBUTTONS: MAXIMIZE
-    // ************************************************************************
-    var bx = this._maximizeButton = new rwt.widgets.base.Button();
-
-    bx.setAppearance("window-captionbar-maximize-button");
-    bx.setTabIndex(null);
-
-    bx.addEventListener("execute", this._onmaximizebuttonclick, this);
-    bx.addEventListener("mousedown", this._onbuttonmousedown, this);
-
-    cb.add(bx);
-
-    // ************************************************************************
-    //   CAPTIONBUTTONS: CLOSE
-    // ************************************************************************
-    var bc = this._closeButton = new rwt.widgets.base.Button();
-
-    bc.setAppearance("window-captionbar-close-button");
-    bc.setTabIndex(null);
-
-    bc.addEventListener("execute", this._onclosebuttonclick, this);
-    bc.addEventListener("mousedown", this._onbuttonmousedown, this);
-
-    cb.add(bc);
-
-    // ************************************************************************
-    //   PANE
-    // ************************************************************************
-    var p = this._pane = new rwt.widgets.base.Parent();
-    p.setHeight("1*");
-    p.setOverflow("hidden");
-    l.add(p);
-
-    // ************************************************************************
-    //   STATUSBAR
-    // ************************************************************************
-    var sb = this._statusBar = new rwt.widgets.base.HorizontalBoxLayout();
-    sb.setAppearance("window-statusbar");
-    sb.setHeight("auto");
-
-    // ************************************************************************
-    //   STATUSTEXT
-    // ************************************************************************
-    var st = this._statusText = new rwt.widgets.base.Label("Ready");
-    st.setAppearance("window-statusbar-text");
-    st.setSelectable(false);
-    sb.add(st);
-
-    // ************************************************************************
-    //   INIT
-    // ************************************************************************
-    if (vCaption != null) {
-      this.setCaption(vCaption);
-    }
-
-    if (vIcon != null) {
-      this.setIcon(vIcon);
-    }
-
-    // ************************************************************************
-    //   FUNCTIONAL
-    // ************************************************************************
-    this.setAutoHide(false);
-
-    // ************************************************************************
-    //   EVENTS: WINDOW
-    // ************************************************************************
-    this.addEventListener("mousedown", this._onwindowmousedown);
-    this.addEventListener("click", this._onwindowclick);
-
-    // ************************************************************************
-    //   EVENTS: CAPTIONBAR
-    // ************************************************************************
-    cb.addEventListener("mousedown", this._oncaptionmousedown, this);
-    cb.addEventListener("mouseup", this._oncaptionmouseup, this);
-    cb.addEventListener("mousemove", this._oncaptionmousemove, this);
-    cb.addEventListener("dblclick", this._oncaptiondblblick, this);
-
-    // ************************************************************************
-    //   REMAPPING
-    // ************************************************************************
-    this.remapChildrenHandlingTo(this._pane);
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      MANAGER HANDLING
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Returns the default window manager. If no exists a new instance of
-     * the manager is created.
-     *
-     * @type static
-     * @return {rwt.widgets.util.WindowManager} window manager instance
-     */
-    getDefaultWindowManager : function()
-    {
-      if (!rwt.widgets.base.Window._defaultWindowManager) {
-        rwt.widgets.base.Window._defaultWindowManager = new rwt.widgets.util.WindowManager();
-      }
-
-      return rwt.widgets.base.Window._defaultWindowManager;
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    /** Appearance of the widget */
-    appearance :
-    {
-      refine : true,
-      init : "window"
-    },
-
-
-    /** The windowManager to use for. */
-    windowManager :
-    {
-      check : "rwt.widgets.util.WindowManager",
-      event : "changeWindowManager"
-    },
-
-
-    /**
-     * If the window is active, only one window in a single rwt.widgets.util.WindowManager could
-     *  have set this to true at the same time.
-     */
-    active :
-    {
-      check : "Boolean",
-      init : false,
-      apply : "_applyActive",
-      event : "changeActive"
-    },
-
-
-    /** Should be window be modal (this disable minimize and maximize buttons) */
-    modal :
-    {
-      check : "Boolean",
-      init : false,
-      apply : "_applyModal",
-      event : "changeModal"
-    },
-
-
-    /** The current mode (minimized or maximized) of the window instance
-     * <b>Attention:</b> if the window instance is neither maximized nor minimized this
-     * property will return <code>null</code>
-     */
-    mode :
-    {
-      check : [ "minimized", "maximized" ],
-      init : null,
-      nullable: true,
-      apply : "_applyMode",
-      event : "changeMode"
-    },
-
-
-    /** The opener (button) of the window */
-    opener :
-    {
-      check : "rwt.widgets.base.Widget"
-    },
-
-
-    /** The text of the caption */
-    caption :
-    {
-      apply : "_applyCaption",
-      event : "changeCaption",
-      dispose : true
-    },
-
-
-    /** The icon of the caption */
-    icon :
-    {
-      check : "String",
-      nullable : true,
-      apply : "_applyIcon",
-      event : "changeIcon"
-    },
-
-
-    /** The text of the statusbar */
-    status :
-    {
-      check : "String",
-      init : "Ready",
-      apply : "_applyStatus",
-      event :"changeStatus"
-    },
-
-
-    /** Should the close button be shown */
-    showClose :
-    {
-      check : "Boolean",
-      init : true,
-      apply : "_applyShowClose"
-    },
-
-
-    /** Should the maximize button be shown */
-    showMaximize :
-    {
-      check : "Boolean",
-      init : true,
-      apply : "_applyShowMaximize"
-    },
-
-
-    /** Should the minimize button be shown */
-    showMinimize :
-    {
-      check : "Boolean",
-      init : true,
-      apply : "_applyShowMinimize"
-    },
-
-
-    /** Should the statusbar be shown */
-    showStatusbar :
-    {
-      check : "Boolean",
-      init : false,
-      apply : "_applyShowStatusbar"
-    },
-
-
-    /** Should the user have the ability to close the window */
-    allowClose :
-    {
-      check : "Boolean",
-      init : true,
-      apply : "_applyAllowClose"
-    },
-
-
-    /** Should the user have the ability to maximize the window */
-    allowMaximize :
-    {
-      check : "Boolean",
-      init : true,
-      apply : "_applyAllowMaximize"
-    },
-
-
-    /** Should the user have the ability to minimize the window */
-    allowMinimize :
-    {
-      check : "Boolean",
-      init : true,
-      apply : "_applyAllowMinimize"
-    },
-
-
-    /** If the text (in the captionbar) should be visible */
-    showCaption :
-    {
-      check : "Boolean",
-      init : true,
-      apply : "_applyShowCaption"
-    },
-
-
-    /** If the icon (in the captionbar) should be visible */
-    showIcon :
-    {
-      check : "Boolean",
-      init : true,
-      apply : "_applyShowIcon"
-    },
-
-
-    /** If the window is moveable */
-    moveable :
-    {
-      check : "Boolean",
-      init : true,
-      event : "changeMoveable"
-    },
-
-
-    /** The move method to use */
-    moveMethod :
-    {
-      check : [ "opaque", "frame", "translucent" ],
-      init : "opaque",
-      event : "changeMoveMethod"
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-    /*
-    ---------------------------------------------------------------------------
-      UTILITIES
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Accessor method for the pane sub widget
-     *
-     * @type member
-     * @return {rwt.widgets.base.Parent} pane sub widget
-     */
-    getPane : function() {
-      return this._pane;
-    },
-
-
-    /**
-     * Accessor method for the captionbar sub widget
-     *
-     * @type member
-     * @return {rwt.widgets.base.HorizontalBoxLayout} captionbar sub widget
-     */
-    getCaptionBar : function() {
-      return this._captionBar;
-    },
-
-
-    /**
-     * Accessor method for the statusbar sub widget
-     *
-     * @type member
-     * @return {rwt.widgets.base.HorizontalBoxLayout} statusbar sub widget
-     */
-    getStatusBar : function() {
-      return this._statusBar;
-    },
-
-
-    /**
-     * Closes the current window instance.
-     * Technically calls the {@link rwt.widgets.base.Widget#hide} method.
-     *
-     * @type member
-     * @return {void}
-     */
-    close : function() {
-      this.hide();
-    },
-
-
-    /**
-     * Opens the window.<br/>
-     * Sets the opener property (if available) and centers
-     * the window if the property {@link #centered} is enabled.
-     *
-     * @type member
-     * @param vOpener {Object} Opener widget
-     * @return {void}
-     */
-    open : function(vOpener)
-    {
-      if (vOpener != null) {
-        this.setOpener(vOpener);
-      }
-
-      if (this.getCentered()) {
-        this.centerToBrowser();
-      }
-
-      this.show();
-    },
-
-
-    /**
-     * Set the focus on the window.<br/>
-     * Setting the {@link #active} property to <code>true</code>
-     *
-     * @type member
-     * @return {void}
-     */
-    focus : function() {
-      this.setActive(true);
-    },
-
-
-    /**
-     * Release the focus on the window.<br/>
-     * Setting the {@link #active} property to <code>false</code>
-     *
-     * @type member
-     * @return {void}
-     */
-    blur : function() {
-      this.setActive(false);
-    },
-
-
-    /**
-     * Maximize the window by setting the property {@link mode} to <code>maximized</code>
-     *
-     * @type member
-     * @return {void}
-     */
-    maximize : function() {
-      this.setMode("maximized");
-    },
-
-
-    /**
-     * Maximize the window by setting the property {@link mode} to <code>minimized</code>
-     *
-     * @type member
-     * @return {void}
-     */
-    minimize : function() {
-      this.setMode("minimized");
-    },
-
-
-    /**
-     * Maximize the window by setting the property {@link mode} to <code>null</code>
-     *
-     * @type member
-     * @return {void}
-     */
-    restore : function() {
-      this.setMode(null);
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      APPEAR/DISAPPEAR
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Executes routines to ensure the window is displayed correctly and gains control.<br/>
-     * Hides all open popups, sets the focus root to the current window, adds
-     * the current window to the window manager and calls {@link rwt.widgets.base.Popup#_makeActive}.
-     *
-     * @type member
-     * @return {void}
-     */
-    _beforeAppear : function()
-    {
-      // Intentionally bypass superclass and call super.super._beforeAppear
-      rwt.widgets.base.Parent.prototype._beforeAppear.call(this);
-
-      // Hide popups
-      rwt.widgets.util.PopupManager.getInstance().update();
-
-      // Configure the focus root to be the current opened window
-      rwt.event.EventHandler.setFocusRoot(this);
-
-      this.getWindowManager().add(this);
-      this._makeActive();
-    },
-
-
-    /**
-     * Executes routines to ensure the window releases all control.<br/>
-     * Resets the focus root, release the capturing on any contained widget,
-     * deregisters from the window manager and calls {@link rwt.widgets.base.Popup#_makeInactive}.
-     *
-     * @type member
-     * @return {void}
-     */
-    _beforeDisappear : function()
-    {
-      // Intentionally bypass superclass and call super.super._beforeDisappear
-      rwt.widgets.base.Parent.prototype._beforeDisappear.call(this);
-
-      // Reset focus root
-      var vFocusRoot = rwt.event.EventHandler.getFocusRoot();
-
-      if (vFocusRoot == this || this.contains(vFocusRoot)) {
-        rwt.event.EventHandler.setFocusRoot(null);
-      }
-
-      // Be sure to disable any capturing inside invisible parts
-      // Is this to much overhead?
-      // Are there any other working solutions?
-      var vWidget = rwt.event.EventHandler.getCaptureWidget();
-
-      if (vWidget && this.contains(vWidget)) {
-        vWidget.setCapture(false);
-      }
-
-      this.getWindowManager().remove(this);
-      this._makeInactive();
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      ZIndex Positioning
-    ---------------------------------------------------------------------------
-    */
-
-    _minZIndex : 1e5,
-
-
-    /**
-     * Gets all registered window instances (sorted by the zIndex) and resets
-     * the zIndex on all instances.
-     *
-     * @type member
-     * @return {void}
-     */
-    _sendTo : function()
-    {
-      var zIndexCompare = function(a, b) {
-        return a.getZIndex() - b.getZIndex();
-      };
-      var vAll = rwt.util.Objects.getValues(this.getWindowManager().getAll()).sort(zIndexCompare);
-      var vLength = vAll.length;
-      var vIndex = this._minZIndex;
-
-      for (var i=0; i<vLength; i++) {
-        vAll[i].setZIndex(vIndex++);
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      MODIFIERS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyActive : function(value, old)
-    {
-      if (old)
-      {
-        if (this.getFocused()) {
-          this.setFocused(false);
-        }
-        if (this.getWindowManager().getActiveWindow() == this) {
-          this.getWindowManager().setActiveWindow(null);
-        }
-        this._setActiveState( false );
-
-      }
-      else
-      {
-        // Switch focus
-        // Also do this if gets inactive as this moved the focus outline
-        // away from any focused child.
-        if (!this.getFocusedChild()) {
-          this.setFocused(true);
-        }
-        this._setActiveState( true );
-        this.getWindowManager().setActiveWindow(this);
-        this.bringToFront();
-
-      }
-    },
-
-    _setActiveState : function( value ) {
-      if( !this.getWindowManager().blockActiveState ) {
-        if( value ) {
-          this.addState("active");
-          this._captionBar.addState("active");
-          this._minimizeButton.addState("active");
-          this._restoreButton.addState("active");
-          this._maximizeButton.addState("active");
-          this._closeButton.addState("active");
-        } else {
-          this.removeState("active");
-          this._captionBar.removeState("active");
-          this._minimizeButton.removeState("active");
-          this._restoreButton.removeState("active");
-          this._maximizeButton.removeState("active");
-          this._closeButton.removeState("active");
-        }
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyModal : function( value, old ) {
-      // Inform blocker
-      if( this._initialLayoutDone && this.getVisibility() && this.getDisplay() ) {
-        var vTop = this.getTopLevelWidget();
-        if( value ) {
-          vTop.block( this );
-        } else {
-          vTop.release( this );
-        }
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     * @return {var} TODOC
-     */
-    _applyAllowClose : function(value, old) {
-      this._closeButtonManager();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     * @return {var} TODOC
-     */
-    _applyAllowMaximize : function(value, old) {
-      this._maximizeButtonManager();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     * @return {var} TODOC
-     */
-    _applyAllowMinimize : function(value, old) {
-      this._minimizeButtonManager();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyMode : function(value, old)
-    {
-      switch(value)
-      {
-        case "minimized":
-          this._disableResize = true;
-          this._minimize();
-          break;
-
-        case "maximized":
-          this._disableResize = true;
-          this._maximize();
-          break;
-
-        default:
-          delete this._disableResize;
-          switch(old)
-          {
-            case "maximized":
-              this._restoreFromMaximized();
-              break;
-
-            case "minimized":
-              this._restoreFromMinimized();
-              break;
-          }
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyShowCaption : function(value, old)
-    {
-      if (value) {
-        this._captionBar.addAt(this._captionTitle, this.getShowIcon() ? 1 : 0);
-      } else {
-        this._captionBar.remove(this._captionTitle);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyShowIcon : function(value, old)
-    {
-      if (value) {
-        this._captionBar.addAtBegin(this._captionIcon);
-      } else {
-        this._captionBar.remove(this._captionIcon);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyShowStatusbar : function(value, old)
-    {
-      if (value) {
-        this._layout.addAtEnd(this._statusBar);
-      } else {
-        this._layout.remove(this._statusBar);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyShowClose : function(value, old)
-    {
-      if (value) {
-        this._captionBar.addAtEnd(this._closeButton);
-      } else {
-        this._captionBar.remove(this._closeButton);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyShowMaximize : function(value, old)
-    {
-      if (value)
-      {
-        var t = this.getMode() == "maximized" ? this._restoreButton : this._maximizeButton;
-
-        if (this.getShowMinimize()) {
-          this._captionBar.addAfter(t, this._minimizeButton);
-        } else {
-          this._captionBar.addAfter(t, this._captionFlex);
-        }
-      }
-      else
-      {
-        this._captionBar.remove(this._maximizeButton);
-        this._captionBar.remove(this._restoreButton);
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyShowMinimize : function(value, old)
-    {
-      if (value) {
-        this._captionBar.addAfter(this._minimizeButton, this._captionFlex);
-      } else {
-        this._captionBar.remove(this._minimizeButton);
-      }
-    },
-
-
-    /**
-     * Enables/disables the minimize button in order of the {@link #allowMinimize} property
-     *
-     * @type member
-     */
-    _minimizeButtonManager : function() {
-      if( this.getAllowMinimize() === false ) {
-        this._minimizeButton.setEnabled( false );
-      } else {
-        this._minimizeButton.resetEnabled();
-      }
-    },
-
-
-    /**
-     * Enables/disables the close button in order of the {@link #allowClose} property
-     *
-     * @type member
-     */
-    _closeButtonManager : function() {
-      if( this.getAllowClose() === false ) {
-        this._closeButton.setEnabled( false );
-      } else {
-        this._closeButton.resetEnabled();
-      }
-    },
-
-
-    /**
-     * Disables the maximize and restore buttons when the window instance is already maximized,
-     * otherwise the {@link #enabled} property of both buttons get resetted.
-     *
-     * @type member
-     */
-    _maximizeButtonManager : function() {
-      var b = this.getAllowMaximize() && this.getResizable() && this._computedMaxWidthTypeNull && this._computedMaxHeightTypeNull;
-      if( this._maximizeButton ) {
-        if( b === false ) {
-          this._maximizeButton.setEnabled( false );
-        } else {
-          this._maximizeButton.resetEnabled();
-        }
-      }
-      if( this._restoreButton ) {
-        if( b === false ) {
-          this._restoreButton.setEnabled( false );
-        } else {
-          this._restoreButton.resetEnabled();
-        }
-      }
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyStatus : function(value, old) {
-      this._statusText.setText(value);
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     * @return {void} TODOC
-     */
-    _applyMaxWidth : function(value, old)
-    {
-      this.base(arguments, value);
-      this._maximizeButtonManager();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     * @return {void} TODOC
-     */
-    _applyMaxHeight : function(value, old)
-    {
-      this.base(arguments, value);
-      this._maximizeButtonManager();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     * @return {var} TODOC
-     */
-    _applyResizable : function(value, old) {
-      this._maximizeButtonManager();
-    },
-
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyCaption : function(value, old) {
-      this._captionTitle.setText(value);
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyIcon : function(value, old) {
-      this._captionIcon.setSource(value);
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      STATE LAYOUT IMPLEMENTATION
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Minimizes the window. Technically this methods calls the {@link rwt.widgets.base.Widget#blur}
-     * and the {@link rwt.widgets.base.Widget#hide} methods.
-     *
-     * @type member
-     * @return {void}
-     */
-    _minimize : function()
-    {
-      this.blur();
-      this.hide();
-    },
-
-
-    /**
-     * Restores the window from maximized mode.<br/>
-     * Restores the previous dimension and location, removes the
-     * state <code>maximized</code> and replaces the restore button
-     * with the maximize button.
-     *
-     * @type member
-     * @return {void}
-     */
-    _restoreFromMaximized : function()
-    {
-      // restore previous dimension and location
-      this.setLeft(this._previousLeft ? this._previousLeft : null);
-      this.setWidth(this._previousWidth ? this._previousWidth : null);
-      this.setRight(this._previousRight ? this._previousRight : null);
-
-      this.setTop(this._previousTop ? this._previousTop : null);
-      this.setHeight(this._previousHeight ? this._previousHeight : null);
-      this.setBottom(this._previousBottom ? this._previousBottom : null);
-
-      // update state
-      this.removeState("maximized");
-
-      // toggle button
-      if (this.getShowMaximize())
-      {
-        var cb = this._captionBar;
-        var v = cb.indexOf(this._restoreButton);
-
-        cb.remove(this._restoreButton);
-        cb.addAt(this._maximizeButton, v);
-      }
-
-      // finally focus the window
-      this.focus();
-    },
-
-
-    /**
-     * Restores the window from minimized mode.<br/>
-     * Reset the window mode to maximized if the window
-     * has the state maximized and call {@link rwt.widgets.base.Widget#show} and
-     * {@link rwt.widgets.base.Widget#focus}
-     *
-     * @type member
-     * @return {void}
-     */
-    _restoreFromMinimized : function()
-    {
-      if (this.hasState("maximized")) {
-        this.setMode("maximized");
-      }
-
-      this.show();
-      this.focus();
-    },
-
-
-    /**
-     * Maximizes the window.<br/>
-     * Stores the current dimension and location and setups up
-     * the new ones. Adds the state <code>maximized</code> and toggles
-     * the buttons in the caption bar.
-     *
-     * @type member
-     * @return {void}
-     */
-    _maximize : function()
-    {
-      if (this.hasState("maximized")) {
-        return;
-      }
-
-      // store current dimension and location
-      this._previousLeft = this.getLeft();
-      this._previousWidth = this.getWidth();
-      this._previousRight = this.getRight();
-      this._previousTop = this.getTop();
-      this._previousHeight = this.getHeight();
-      this._previousBottom = this.getBottom();
-
-      // setup new dimension and location
-      this.setLeft( 0 );
-      this.setTop( 0 );
-      this.setWidth( "100%" );
-      this.setHeight( "100%" );
-
-      // update state
-      this.addState("maximized");
-
-      // toggle button
-      if (this.getShowMaximize())
-      {
-        var cb = this._captionBar;
-        var v = cb.indexOf(this._maximizeButton);
-
-        cb.remove(this._maximizeButton);
-        cb.addAt(this._restoreButton, v);
-      }
-
-      // finally focus the window
-      this.focus();
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      EVENTS: WINDOW
-    ---------------------------------------------------------------------------
-    */
-
-
-    /**
-     * Stops every mouse click on the window by calling {@link rwt.event.Event#stopPropagation}
-     *
-     * @type member
-     * @param e {rwt.event.MouseEvent} mouse click event
-     * @return {void}
-     */
-    _onwindowclick : function(e)
-    {
-      // stop event
-      e.stopPropagation();
-    },
-
-
-    /**
-     * Focuses the window instance.
-     *
-     * @type member
-     * @param e {rwt.event.MouseEvent} mouse down event
-     * @return {void}
-     */
-    _onwindowmousedown : function(e) {
-      this.focus();
-    },
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      EVENTS: BUTTONS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Stops every mouse down event on each button in the captionbar
-     * by calling {@link rwt.event.Event#stopPropagation}
-     *
-     * @type member
-     * @param e {rwt.event.MouseEvent} mouse down event
-     * @return {void}
-     */
-    _onbuttonmousedown : function(e) {
-      e.stopPropagation();
-    },
-
-
-    /**
-     * Minmizes the window, removes all states from the minimize button and
-     * stops the further propagation of the event (calling {@link rwt.event.Event#stopPropagation}).
-     *
-     * @type member
-     * @param e {rwt.event.MouseEvent} mouse click event
-     * @return {void}
-     */
-    _onminimizebuttonclick : function(e)
-    {
-      this.minimize();
-
-      // we need to be sure that the button gets the right states after clicking
-      // because the button will move and does not get the mouseup event anymore
-      this._minimizeButton.removeState("pressed");
-      this._minimizeButton.removeState("abandoned");
-      this._minimizeButton.removeState("over");
-
-      e.stopPropagation();
-    },
-
-
-    /**
-     * Restores the window, removes all states from the restore button and
-     * stops the further propagation of the event (calling {@link rwt.event.Event#stopPropagation}).
-     *
-     * @type member
-     * @param e {rwt.event.MouseEvent} mouse click event
-     * @return {void}
-     */
-    _onrestorebuttonclick : function(e)
-    {
-      this.restore();
-
-      // we need to be sure that the button gets the right states after clicking
-      // because the button will move and does not get the mouseup event anymore
-      this._restoreButton.removeState("pressed");
-      this._restoreButton.removeState("abandoned");
-      this._restoreButton.removeState("over");
-
-      e.stopPropagation();
-    },
-
-
-    /**
-     * Maximizes the window, removes all states from the maximize button and
-     * stops the further propagation of the event (calling {@link rwt.event.Event#stopPropagation}).
-     *
-     * @type member
-     * @param e {rwt.event.MouseEvent} mouse click event
-     * @return {void}
-     */
-    _onmaximizebuttonclick : function(e)
-    {
-      this.maximize();
-
-      // we need to be sure that the button gets the right states after clicking
-      // because the button will move and does not get the mouseup event anymore
-      this._maximizeButton.removeState("pressed");
-      this._maximizeButton.removeState("abandoned");
-      this._maximizeButton.removeState("over");
-
-      e.stopPropagation();
-    },
-
-
-    /**
-     * Closes the window, removes all states from the close button and
-     * stops the further propagation of the event (calling {@link rwt.event.Event#stopPropagation}).
-     *
-     * @type member
-     * @param e {rwt.event.MouseEvent} mouse click event
-     * @return {void}
-     */
-    _onclosebuttonclick : function(e)
-    {
-      this.close();
-
-      // we need to be sure that the button gets the right states after clicking
-      // because the button will move and does not get the mouseup event anymore
-      this._closeButton.removeState("pressed");
-      this._closeButton.removeState("abandoned");
-      this._closeButton.removeState("over");
-
-      e.stopPropagation();
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      EVENTS: CAPTIONBAR
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Enables the capturing of the caption bar and prepares the drag session and the
-     * appearance (translucent, frame or opaque) for the moving of the window.
-     *
-     * @type member
-     * @param e {rwt.event.MouseEvent} mouse down event
-     * @return {void}
-     */
-    _oncaptionmousedown : function(e)
-    {
-      if (!e.isLeftButtonPressed() || !this.getMoveable() || this.getMode() != null) {
-        return;
-      }
-
-      // enable capturing
-      this._captionBar.setCapture(true);
-
-      // element cache
-      var el = this.getElement();
-
-      // measuring and caching of values for drag session
-      var pa = this.getParent();
-      var pl = pa.getElement();
-
-      // compute locations
-      var paLoc = rwt.html.Location.get(pl, "scroll");
-      var elLoc = rwt.html.Location.get(el);
-
-      this._dragSession =
-      {
-        offsetX                   : e.getPageX() - elLoc.left + paLoc.left,
-        offsetY                   : e.getPageY() - elLoc.top + paLoc.top,
-        parentAvailableAreaLeft   : paLoc.left + 5,
-        parentAvailableAreaTop    : paLoc.top + 5,
-        parentAvailableAreaRight  : paLoc.right - 5,
-        parentAvailableAreaBottom : paLoc.bottom - 5
-      };
-
-      // handle frame and translucently
-      switch(this.getMoveMethod())
-      {
-        case "translucent":
-          this.setOpacity(0.5);
-          break;
-
-        case "frame":
-          var f = this._frame;
-
-          if (f.getParent() != this.getParent())
-          {
-            f.setParent(this.getParent());
-
-            // This flush is required to get the element node, needed by
-            // the code below and the other event handlers
-            rwt.widgets.base.Widget.flushGlobalQueues();
-          }
-
-          f._renderRuntimeLeft(elLoc.left - paLoc.left);
-          f._renderRuntimeTop(elLoc.top - paLoc.top);
-
-          f._renderRuntimeWidth(el.offsetWidth);
-          f._renderRuntimeHeight(el.offsetHeight);
-
-          f.setZIndex(this.getZIndex() + 1);
-
-          break;
-      }
-    },
-
-
-    /**
-     * Disables the capturing of the caption bar and moves the window
-     * to the last position of the drag session. Also restores the appearance
-     * of the window.
-     *
-     * @type member
-     * @param e {rwt.event.MouseEvent} mouse up event
-     * @return {void}
-     */
-    _oncaptionmouseup : function(e)
-    {
-      var s = this._dragSession;
-
-      if (!s) {
-        return;
-      }
-
-      // disable capturing
-      this._captionBar.setCapture(false);
-
-      // move window to last position
-      if (s.lastX != null) {
-        this.setLeft(s.lastX);
-      }
-
-      if (s.lastY != null) {
-        this.setTop(s.lastY);
-      }
-
-      // handle frame and translucently
-      switch(this.getMoveMethod())
-      {
-        case "translucent":
-          this.setOpacity(null);
-          break;
-
-        case "frame":
-          this._frame.setParent(null);
-          break;
-      }
-
-      // cleanup session
-      delete this._dragSession;
-    },
-
-
-    /**
-     * Does the moving of the window by rendering the position
-     * of the window (or frame) at runtime using direct dom methods.
-     *
-     * @type member
-     * @param e {rwt.event.Event} mouse move event
-     * @return {void}
-     */
-    _oncaptionmousemove : function(e)
-    {
-      var s = this._dragSession;
-
-      // pre check for active session and capturing
-      if (!s || !this._captionBar.getCapture()) {
-        return;
-      }
-
-      // pre check if we go out of the available area
-      if (!rwt.util.Numbers.isBetweenRange(e.getPageX(), s.parentAvailableAreaLeft, s.parentAvailableAreaRight) || !rwt.util.Numbers.isBetweenRange(e.getPageY(), s.parentAvailableAreaTop, s.parentAvailableAreaBottom)) {
-        return;
-      }
-
-      // use the fast and direct dom methods
-      var o = this.getMoveMethod() == "frame" ? this._frame : this;
-
-      o._renderRuntimeLeft(s.lastX = e.getPageX() - s.offsetX);
-      o._renderRuntimeTop(s.lastY = e.getPageY() - s.offsetY);
-    },
-
-
-    /**
-     * Maximizes the window or restores it if it is already
-     * maximized.
-     *
-     * @type member
-     * @param e {rwt.event.MouseEvent} double click event
-     * @return {void}
-     */
-    _oncaptiondblblick : function(e)
-    {
-      if (!this._maximizeButton.getEnabled()) {
-        return;
-      }
-
-      return this.getMode() == "maximized" ? this.restore() : this.maximize();
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function()
-  {
-    this._disposeObjects("_layout", "_captionBar", "_captionIcon",
-      "_captionTitle", "_captionFlex", "_closeButton", "_minimizeButton",
-      "_maximizeButton", "_restoreButton", "_pane", "_statusBar", "_statusText");
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * This widget can be used to create a horizontal spacing between
- * widgets in e.g. a {@link rwt.widgets.base.HorizontalBoxLayout} or in
- * a menu or toolbar.
- *
- * By default it tries to occupy the all the remaining space by setting
- * a flex width of <code>1*</code>.
- */
-rwt.qx.Class.define("rwt.widgets.base.HorizontalSpacer",
-{
-  extend : rwt.widgets.base.Terminator,
-
-  construct : function()
-  {
-    this.base(arguments);
-
-    this.initWidth();
-  },
-
-  properties :
-  {
-    width :
-    {
-      refine : true,
-      init : "1*"
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/** This singleton manages rwt.widgets.base.Windows */
-rwt.qx.Class.define("rwt.widgets.util.WindowManager",
-{
-  extend : rwt.util.ObjectManager,
-
-
-
-
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties :
-  {
-    /** This property holds the current active window */
-    activeWindow :
-    {
-      check : "Object",
-      nullable : true,
-      apply : "_applyActiveWindow"
-    }
-  },
-
-
-
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members :
-  {
-
-    blockActiveState : false,
-
-    /*
-    ---------------------------------------------------------------------------
-      APPLY ROUTINES
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyActiveWindow : function(value, old)
-    {
-      rwt.widgets.util.PopupManager.getInstance().update();
-
-      if (old) {
-        old.setActive(false);
-      }
-
-      if (value) {
-        value.setActive(true);
-      }
-
-      if (old && old.getModal()) {
-        old.getTopLevelWidget().release(old);
-      }
-
-      if (value && value.getModal()) {
-        value.getTopLevelWidget().block(value);
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      UTILITIES
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Updates all registered window instances
-     *
-     * @type member
-     * @return {void}
-     */
-    update : function()
-    {
-      var vWindow, vHashCode;
-      var vAll = this.getAll();
-
-      for (var vHashCode in vAll)
-      {
-        vWindow = vAll[vHashCode];
-
-        if (!vWindow.getAutoHide()) {
-          continue;
-        }
-
-        vWindow.hide();
-      }
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      MANAGER INTERFACE
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Compares two windows (used as sort method in {@link #remove}).
-     * Sorts the windows by checking which of the given windows is active.
-     * If none of those two are active the zIndex are subtracted from each
-     * other to determine the sort order.
-     *
-     * @type member
-     * @param w1 {rwt.widgets.base.Window} first window to compare
-     * @param w2 {rwt.widgets.base.Window} second window to compare
-     * @return {int | var} 1 for first window active, -1 for second window active
-     * and the subtraction of the zIndex if none of the two are active.
-     */
-    compareWindows : function(w1, w2)
-    {
-      switch(w1.getWindowManager().getActiveWindow())
-      {
-        case w1:
-          return 1;
-
-        case w2:
-          return -1;
-      }
-
-      return w1.getZIndex() - w2.getZIndex();
-    },
-
-
-    /**
-     * Adds a {@link rwt.widgets.base.Window} instance to the manager and
-     * sets it as active window.
-     *
-     * @type member
-     * @param vWindow {rwt.widgets.base.Window} window instance to add
-     * @return {void}
-     */
-    add : function(vWindow)
-    {
-      this.base(arguments, vWindow);
-
-      this.setActiveWindow(vWindow);
-    },
-
-
-    /**
-     * Removes a {@link rwt.widgets.base.Window} instance from the manager.
-     * If the current active window is the one which should be removed the
-     * existing windows are compared to determine the new active window
-     * (using the {@link #compareWindows} method).
-     *
-     * @type member
-     * @param vWindow {rwt.widgets.base.Window} window instance
-     * @return {void}
-     */
-    remove : function( vWindow ) {
-      this.base( arguments, vWindow );
-      if( this.getActiveWindow() == vWindow ) {
-        var a = [];
-        for( var i in this._objects ) {
-          a.push( this._objects[ i ] );
-        }
-        var l = a.length;
-        if( l === 0 ) {
-          this.setActiveWindow( null );
-        } else if ( l === 1 ) {
-          this.setActiveWindow( a[ 0 ] );
-        } else if ( l > 1 ) {
-          a.sort( this.compareWindows );
-          this.setActiveWindow( a[ l - 1 ] );
-        }
-      }
-    }
-
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * @appearance menu-separator
- * @appearance menu-separator-line {rwt.widgets.base.Terminator}
- */
-rwt.qx.Class.define( "rwt.widgets.MenuItemSeparator", {
-
-  extend : rwt.widgets.base.Parent,
-
-  construct : function() {
-    this.base(arguments);
-
-    this.initHeight();
-
-    // Fix IE Styling Issues
-    this.setStyleProperty("fontSize", "0");
-    this.setStyleProperty("lineHeight", "0");
-
-    // LINE
-    this._line = new rwt.widgets.base.Terminator();
-    this._line.setAnonymous(true);
-    this._line.setAppearance("menu-separator-line");
-    this.add(this._line);
-
-    // EVENTS
-    // needed to stop the event, and keep the menu showing
-    this.addEventListener("mousedown", this._onmousedown);
-  },
-
-  properties : {
-    height : {
-      refine : true,
-      init : "auto"
-    },
-
-    appearance : {
-      refine : true,
-      init : "menu-separator"
-    }
-  },
-
-  members : {
-
-    /**
-     * Returns <code>false</code> to clarify that the Separator widget has no icon
-     *
-     * @signature function()
-     * @return {Boolean} false
-     */
-    hasIcon : rwt.util.Functions.returnFalse,
-
-    /**
-     * Returns <code>false</code> to clarify that the Separator widget has no label
-     *
-     * @signature function()
-     * @return {Boolean} false
-     */
-    hasLabel : rwt.util.Functions.returnFalse,
-
-    /**
-     * Returns <code>false</code> to clarify that the Separator widget has no shortcut
-     *
-     * @signature function()
-     * @return {Boolean} false
-     */
-    hasShortcut : rwt.util.Functions.returnFalse,
-
-    /**
-     * Returns <code>false</code> to clarify that the Separator widget has no sub menu
-     *
-     * @signature function()
-     * @return {Boolean} false
-     */
-    hasMenu : rwt.util.Functions.returnFalse,
-
-
-    /**
-     * Callback method for the "mouseDown" event<br/>
-     * Simply stops the propagation of the event
-     *
-     * @type member
-     * @param e {rwt.event.MouseEvent} mouseDown event
-     * @return {void}
-     */
-    _onmousedown : function(e) {
-      e.stopPropagation();
-    }
-  },
-
-  destruct : function() {
-    this._disposeObjects( "_line" );
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * @appearance tab-view-page
- */
-rwt.qx.Class.define("rwt.widgets.base.TabFolderPage",
-{
-  extend : rwt.widgets.base.Parent,
-
-  construct : function(vButton)
-  {
-    this.base(arguments);
-
-    if (vButton !== undefined) {
-      this.setButton(vButton);
-    }
-
-    this.initTop();
-    this.initRight();
-    this.initBottom();
-    this.initLeft();
-  },
-
-  properties :
-  {
-    appearance :
-    {
-      refine : true,
-      init : "tab-view-page"
-    },
-
-    top :
-    {
-      refine : true,
-      init : 0
-    },
-
-    right :
-    {
-      refine : true,
-      init : 0
-    },
-
-    bottom :
-    {
-      refine : true,
-      init : 0
-    },
-
-    left :
-    {
-      refine : true,
-      init : 0
-    },
-
-    /**
-     * Make element displayed (if switched to true the widget will be created, if needed, too).
-     *  Instead of rwt.widgets.base.Widget, the default is false here.
-     */
-    display :
-    {
-      refine: true,
-      init : false
-    },
-
-
-    /** The attached tab of this page. */
-    button :
-    {
-      check : "rwt.widgets.TabItem",
-      apply : "_applyButton"
-    }
-
-  },
-
-  members :
-  {
-    _applyButton : function(value, old)
-    {
-      if (old) {
-        old.setPage(null);
-      }
-
-      if (value) {
-        value.setPage(this);
-      }
-    }
-  }
-
-});
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          and EclipseSource
- *
- * 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:
- *   1&1 Internet AG and others - original API and implementation
- *   EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-/**
- * @appearance tab-view-button
- * @state checked Set by {@link #checked}
- * @state over
- */
-rwt.qx.Class.define( "rwt.widgets.TabItem", {
-
-  extend : rwt.widgets.base.Atom,
-
-  construct : function( vText, vIcon, vIconWidth, vIconHeight, vFlash ) {
-    this.base( arguments, vText, vIcon, vIconWidth, vIconHeight, vFlash );
-    this.initChecked();
-    this.initTabIndex();
-    this._rawText = null;
-    this._mnemonicIndex = null;
-    this.addEventListener("mouseover", this._onmouseover);
-    this.addEventListener("mouseout", this._onmouseout);
-    this.addEventListener("mousedown", this._onmousedown);
-    this.addEventListener("keydown", this._onkeydown);
-    this.addEventListener("keypress", this._onkeypress);
-  },
-
-  events: {
-    "closetab" : "rwt.event.Event"
-  },
-
-  properties : {
-
-    appearance : {
-      refine : true,
-      init : "tab-view-button"
-    },
-
-    /** default Close Tab Button */
-    showCloseButton : {
-      check : "Boolean",
-      init : false,
-      apply : "_applyShowCloseButton",
-      event : "changeShowCloseButton"
-    },
-
-    /** Close Tab Icon */
-    closeButtonImage : {
-      check : "String",
-      init : "icon/16/actions/dialog-cancel.png",
-      apply : "_applyCloseButtonImage"
-    },
-
-    tabIndex : {
-      refine : true,
-      init : 1
-    },
-
-    /** If this tab is the currently selected/active one */
-    checked : {
-      check :"Boolean",
-      init : false,
-      apply : "_applyChecked",
-      event : "changeChecked"
-    },
-
-    /** The attached page of this tab */
-    page : {
-      check : "rwt.widgets.base.TabFolderPage",
-      apply : "_applyPage",
-      nullable : true
-    },
-
-    /** The assigned rwt.widgets.util.RadioManager which handles the switching between registered buttons */
-    manager : {
-      check  : "rwt.widgets.util.RadioManager",
-      nullable : true,
-      apply : "_applyManager"
-    },
-
-    /**
-     * The name of the radio group. All the radio elements in a group (registered by the same manager)
-     *  have the same name (and could have a different value).
-     */
-    name : {
-      check : "String",
-      apply : "_applyName"
-    }
-
-  },
-
-  members : {
-
-    setText : function( value ) {
-      this._rawText = value;
-      this._mnemonicIndex = null;
-      this._applyText( false );
-    },
-
-    setMnemonicIndex : function( value ) {
-      this._mnemonicIndex = value;
-      var mnemonicHandler = rwt.widgets.util.MnemonicHandler.getInstance();
-      if( ( typeof value === "number" ) && ( value >= 0 ) ) {
-        mnemonicHandler.add( this, this._onMnemonic );
-      } else {
-        mnemonicHandler.remove( this );
-      }
-    },
-
-    getMnemonicIndex : function() {
-      return this._mnemonicIndex;
-    },
-
-    _applyText : function( mnemonic ) {
-      if( this._rawText ) {
-        var mnemonicIndex = mnemonic ? this._mnemonicIndex : undefined;
-        var text = rwt.util.Encoding.escapeText( this._rawText, mnemonicIndex );
-        this.setLabel( text );
-      } else {
-        this.setLabel( null );
-      }
-    },
-
-    _onMnemonic : function( event ) {
-      switch( event.type ) {
-        case "show":
-          this._applyText( true );
-        break;
-        case "hide":
-          this._applyText( false );
-        break;
-        case "trigger":
-          var charCode = this._rawText.toUpperCase().charCodeAt( this._mnemonicIndex );
-          if( event.charCode === charCode ) {
-            this.setChecked( true );
-            event.success = true;
-          }
-        break;
-      }
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    _onkeydown : function( e ) {
-      var identifier = e.getKeyIdentifier();
-      if( identifier == "Enter" || identifier == "Space" ) {
-        // there is no toggeling, just make it checked
-        this.setChecked( true );
-      }
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    _onkeypress : function( e ) {
-      switch( e.getKeyIdentifier() ) {
-        case "Left":
-          var vPrev = this.getPreviousActiveSibling();
-          if ( vPrev && vPrev != this ) {
-            // we want to enable the outline border, because
-            // the user used the keyboard for activation
-            delete rwt.widgets.util.FocusHandler.mouseFocus;
-            // focus previous tab
-            vPrev.setFocused(true);
-            // and naturally make it also checked
-            vPrev.setChecked(true);
-          }
-        break;
-        case "Right":
-          var vNext = this.getNextActiveSibling();
-          if( vNext && vNext != this ) {
-            // we want to enable the outline border, because
-            // the user used the keyboard for activation
-            delete rwt.widgets.util.FocusHandler.mouseFocus;
-            // focus next tab
-            vNext.setFocused(true);
-            // and naturally make it also checked
-            vNext.setChecked(true);
-          }
-        break;
-      }
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    _ontabclose : function( e ) {
-      this.createDispatchDataEvent( "closetab", this );
-      e.stopPropagation();
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyShowCloseButton : function( value, old ) {
-      // if no image exists, then create one
-      if( !this._closeButtonImage ) {
-        this._closeButtonImage = new rwt.widgets.base.Image( this.getCloseButtonImage() );
-      }
-      if( value ) {
-        this._closeButtonImage.addEventListener( "click", this._ontabclose, this );
-        this.add( this._closeButtonImage );
-      } else {
-        this.remove( this._closeButtonImage );
-        this._closeButtonImage.removeEventListener( "click", this._ontabclose, this );
-      }
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyCloseButtonImage : function( value, old ) {
-      if( this._closeButtonImage ) {
-        this._closeButtonImage.setSource( value );
-      }
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    _renderAppearance : function() {
-      if( this.getView() ) {
-        if( this.isFirstVisibleChild() ) {
-         this.addState( "firstChild" );
-        } else {
-          this.removeState( "lastChild" );
-        }
-        if( this.isLastVisibleChild() ) {
-          this.addState( "lastChild" );
-        } else {
-          this.removeState( "lastChild" );
-        }
-        if( this.getView().getAlignTabsToLeft() ) {
-          this.addState( "alignLeft" );
-        } else {
-          this.removeState( "alignLeft" );
-        }
-        if( !this.getView().getAlignTabsToLeft() ) {
-          this.addState( "alignRight" );
-        } else {
-          this.removeState( "alignRight" );
-        }
-        if( this.getView().getPlaceBarOnTop() ) {
-          this.addState( "barTop" );
-        } else {
-          this.removeState( "barTop" );
-        }
-        if( !this.getView().getPlaceBarOnTop() ) {
-          this.addState( "barBottom" );
-        } else {
-          this.removeState( "barBottom" );
-        }
-      }
-      this.base( arguments );
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {var} TODOC
-     */
-    getView : function() {
-      var pa = this.getParent();
-      return pa ? pa.getParent() : null;
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyManager : function( value, old ) {
-      if( old ) {
-        old.remove( this );
-      }
-      if( value ) {
-        value.add( this );
-      }
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     * @return {var} TODOC
-     */
-    _applyParent : function( value, old ) {
-      this.base( arguments, value, old );
-      if ( old ) {
-        old.getManager().remove( this );
-      }
-      if( value ) {
-        value.getManager().add( this );
-      }
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyPage : function( value, old ) {
-      if( old ) {
-        old.setButton( null );
-      }
-      if( value ) {
-        value.setButton( this );
-        if( this.getChecked() ) {
-          value.show();
-        } else {
-          value.hide();
-        }
-      }
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-
-    _applyChecked : function( value, old )
-    {
-      if( this._hasParent ) {
-        var vManager = this.getManager();
-        if( vManager ) {
-          vManager.handleItemChecked(this, value);
-        }
-      }
-      if( value ) {
-        this.addState( "checked" );
-      } else {
-        this.removeState( "checked" );
-      }
-      var vPage = this.getPage();
-      if( vPage ) {
-        if( this.getChecked() ) {
-          vPage.show();
-        } else {
-          vPage.hide();
-        }
-      }
-      this.setZIndex( value ? 1 : 0 );
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyName : function( value, old ) {
-      if( this.getManager() ) {
-        this.getManager().setName(value);
-      }
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    _onmousedown : function( e ) {
-      this.setChecked( true );
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    _onmouseover : function( e ) {
-      this.addState( "over" );
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param e {Event} TODOC
-     * @return {void}
-     */
-    _onmouseout : function( e ) {
-      this.removeState( "over" );
-    }
-
-  },
-
-  destruct : function() {
-    this._disposeObjects( "_closeButtonImage" );
-    this.setMnemonicIndex( null );
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-/*global console: false */
-
-rwt.qx.Class.define( "rwt.runtime.ErrorHandler", {
-
-  statics : {
-
-    _overlay : null,
-    _box : null,
-
-    processJavaScriptErrorInResponse : function( script, error, currentRequest ) {
-      var content = this._getErrorPageHeader();
-      content += "<pre>" + this._gatherErrorDetails( error, script, currentRequest ) + "</pre>";
-      this.showErrorPage( content );
-    },
-
-    processJavaScriptError : function( error ) {
-      this.errorObject = error; // for later inspection by developer
-      if( typeof console === "object" ) {
-        var msg = "Error: " + ( error.message ? error.message : error );
-        if( typeof console.error !== "undefined" ) { // IE returns "object" for typeof
-          console.error( msg );
-        } else if( typeof console.log !== "undefined" ) {
-          console.log( msg );
-        }
-        if( typeof console.log === "function" && error.stack ) {
-          console.log( "Error stack:\n" + error.stack );
-        } else if( typeof console.trace !== "undefined" ) {
-          console.trace();
-        }
-      }
-      var debug = true;
-      try {
-        debug = rwt.util.Variant.isSet( "qx.debug", "on" );
-      } catch( ex ) {
-        // ignore: Variant may not be loaded yet
-      }
-      if( debug ) {
-        var content = this._getErrorPageHeader();
-        content += "<pre>" + this._gatherErrorDetails( error ) + "</pre>";
-        this.showErrorPage( content );
-        throw error;
-      }
-    },
-
-    showErrorPage : function( content ) {
-      this._enableTextSelection();
-      this._freezeApplication();
-      document.title = "Error Page";
-      this._createErrorPageArea().innerHTML = content;
-    },
-
-    showErrorBox : function( errorType, freeze ) {
-      if( freeze ) {
-        this._freezeApplication();
-      }
-      this._overlay = this._createOverlay();
-      this._box = this._createErrorBoxArea( 450, 150 );
-      this._box.style.padding = "0px";
-      this._box.style.border = "1px solid #3B5998";
-      this._box.style.overflow = "hidden";
-      var errorBoxData = this._getErrorBoxData( errorType );
-      this._title = this._createErrorBoxTitleArea( this._box );
-      this._title.innerHTML = errorBoxData.title;
-      this._description = this._createErrorBoxDescriptionArea( this._box );
-      this._description.innerHTML = errorBoxData.description;
-      this._action = this._createErrorBoxActionArea( this._box );
-      if( errorBoxData.action ) {
-        this._action.innerHTML = errorBoxData.action;
-      }
-      var hyperlink = this._action.getElementsByTagName( "a" )[ 0 ];
-      if( hyperlink ) {
-        this._styleHyperlinkAsButton( hyperlink );
-        hyperlink.focus();
-      }
-    },
-
-    showWaitHint : function() {
-      this._overlay = this._createOverlay();
-      var themeStore = rwt.theme.ThemeStore.getInstance();
-      var cssElement = "SystemMessage-DisplayOverlay";
-      var icon = themeStore.getSizedImage( cssElement, {}, "background-image" );
-      if( icon && icon[ 0 ] ) {
-        this._box = this._createErrorBoxArea( icon[ 1 ], icon[ 2 ] );
-        rwt.html.Style.setBackgroundImage( this._box, icon[ 0 ] );
-        this._box.style.backgroundColor = "transparent";
-        this._box.style.border = "none";
-        this._box.style.overflow = "hidden";
-      }
-    },
-
-    hideErrorBox : function() {
-      if( this._box ) {
-        this._box.parentNode.removeChild( this._box );
-        this._box = null;
-      }
-      if( this._overlay ) {
-        this._overlay.parentNode.removeChild( this._overlay );
-        this._overlay = null;
-      }
-      rwt.event.EventHandler.setBlockKeyEvents( false );
-    },
-
-    _getErrorPageHeader : function() {
-       var errorBoxData = this._getErrorBoxData( "client error" );
-       var result = "<h2>" + errorBoxData.title + "</h2>";
-       result += "<h3>" + errorBoxData.action + "</h3>";
-       result += "<hr/>";
-       return result;
-    },
-
-    _gatherErrorDetails : function( error, script, currentRequest ) {
-      var info = [];
-      try {
-        info.push( "Error: " + error + "\n" );
-        if( script ) {
-          info.push( "Script: " + script );
-        }
-        if( error instanceof Error ) {
-          for( var key in error ) { // NOTE : does not work in webkit (no iteration)
-            info.push( key + ": " + error[ key ] );
-          }
-          if( error.stack ) { // ensures stack is printed in webkit, might be printed twice in gecko
-            info.push( "Stack: " + error.stack );
-          }
-       }
-        info.push( "Debug: " + rwt.util.Variant.get( "qx.debug" ) );
-        if( currentRequest ) {
-          info.push( "Request: " + currentRequest.getData() );
-        }
-        var inFlush = rwt.widgets.base.Widget._inFlushGlobalQueues;
-        if( inFlush ) {
-          info.push( "Phase: " + rwt.widgets.base.Widget._flushGlobalQueuesPhase );
-        }
-      } catch( ex ) {
-        // ensure we get a info no matter what
-      }
-      return info.join( "\n  " );
-    },
-
-    _createOverlay : function() {
-      var element = document.createElement( "div" );
-      var themeStore = rwt.theme.ThemeStore.getInstance();
-      var color = themeStore.getColor( "SystemMessage-DisplayOverlay", {}, "background-color" );
-      var alpha = themeStore.getAlpha( "SystemMessage-DisplayOverlay", {}, "background-color" );
-      var style = element.style;
-      style.position = "absolute";
-      style.width = "100%";
-      style.height = "100%";
-      style.backgroundColor = color === "undefined" ? "transparent" : color;
-      rwt.html.Style.setOpacity( element, alpha );
-      style.zIndex = 100000000;
-      document.body.appendChild( element );
-      rwt.event.EventHandler.setBlockKeyEvents( true );
-      return element;
-    },
-
-    _createErrorPageArea : function() {
-      var element = document.createElement( "div" );
-      var style = element.style;
-      style.position = "absolute";
-      style.width = "100%";
-      style.height = "100%";
-      style.backgroundColor = "#ffffff";
-      style.zIndex = 100000001;
-      style.overflow = "auto";
-      style.padding = "10px";
-      document.body.appendChild( element );
-      return element;
-    },
-
-    _createErrorBoxArea : function( width, height ) {
-      var element = document.createElement( "div" );
-      var style = element.style;
-      style.position = "absolute";
-      style.width = width + "px";
-      style.height = height + "px";
-      var doc = rwt.widgets.base.ClientDocument.getInstance();
-      var left = ( doc.getClientWidth() - width ) / 2;
-      var top = ( doc.getClientHeight() - height ) / 2;
-      style.left = ( left < 0 ? 0 : left ) + "px";
-      style.top = ( top < 0 ? 0 : top ) + "px";
-      style.zIndex = 100000001;
-      style.padding = "10px";
-      style.textAlign = "center";
-      style.fontFamily = 'verdana,"lucida sans",arial,helvetica,sans-serif';
-      style.fontSize = "12px";
-      style.fontStyle = "normal";
-      style.fontWeight = "normal";
-      document.body.appendChild( element );
-      return element;
-    },
-
-    _createErrorBoxTitleArea : function( parentElement ) {
-      var element = document.createElement( "div" );
-      var style = element.style;
-      style.position = "absolute";
-      style.left = "0px";
-      style.top = "0px";
-      style.width = "100%";
-      style.height = "40px";
-      style.padding = "10px";
-      style.textAlign = "left";
-      style.backgroundColor = "#406796";
-      style.color = "white";
-      style.fontSize = "14px";
-      style.fontWeight = "bold";
-      parentElement.appendChild( element );
-      return element;
-    },
-
-    _createErrorBoxDescriptionArea : function( parentElement ) {
-      var element = document.createElement( "div" );
-      var style = element.style;
-      style.position = "absolute";
-      style.left = "0px";
-      style.top = "40px";
-      style.width = "100%";
-      style.height = "70px";
-      style.padding = "10px";
-      style.overflow = "auto";
-      style.textAlign = "left";
-      style.backgroundColor = "white";
-      style.color = "#4a4a4a";
-      style.fontSize = "14px";
-      parentElement.appendChild( element );
-      return element;
-    },
-
-    _createErrorBoxActionArea : function( parentElement ) {
-      var element = document.createElement( "div" );
-      var style = element.style;
-      style.position = "absolute";
-      style.left = "0px";
-      style.top = "110px";
-      style.width = "100%";
-      style.height = "40px";
-      style.padding = "10px";
-      style.textAlign = "center";
-      style.borderTop = "1px solid #CCCCCC";
-      style.backgroundColor = "#F2F2F2";
-      style.fontSize = "14px";
-      parentElement.appendChild( element );
-      return element;
-    },
-
-    _freezeApplication : function() {
-      try {
-        var display = rwt.widgets.Display.getCurrent();
-        display.setExitConfirmation( null );
-        //qx.io.remote.RequestQueue.getInstance().setEnabled( false );
-        rwt.event.EventHandler.detachEvents();
-        rwt.qx.Target.prototype.dispatchEvent = function() {};
-        rwt.animation.Animation._stopLoop();
-      } catch( ex ) {
-        try {
-          console.log( "_freezeApplication exception: " + ex );
-        } catch( exTwo ) {
-          // ignore
-        }
-      }
-    },
-
-    _enableTextSelection : function() {
-      var doc = rwt.widgets.base.ClientDocument.getInstance();
-      doc.setSelectable( true );
-      if( rwt.client.Client.isGecko() ) {
-        var EventHandlerUtil = rwt.event.EventHandlerUtil;
-        rwt.html.EventRegistration.removeEventListener( document.documentElement,
-                                                        "mousedown",
-                                                        EventHandlerUtil._ffMouseFixListener );
-      }
-    },
-
-    _getErrorBoxData : function( errorType ) {
-      var result = {
-        title : "",
-        description : ""
-      };
-      var messages = rwt.client.ClientMessages.getInstance();
-      switch( errorType ) {
-        case "invalid request counter":
-        case "request failed":
-          result.title = messages.getMessage( "ServerError" );
-          result.description = messages.getMessage( "ServerErrorDescription" );
-          result.action = "<a href=\"" + this._getRestartURL() + "\">"
-                        + messages.getMessage( "Restart" ) + "</a>";
-          break;
-        case "session timeout":
-          result.title = messages.getMessage( "SessionTimeout" );
-          result.description = messages.getMessage( "SessionTimeoutDescription" );
-          result.action = "<a href=\"" + this._getRestartURL() + "\">"
-                        + messages.getMessage( "Restart" ) + "</a>";
-          break;
-        case "connection error":
-          result.title = messages.getMessage( "ConnectionError" );
-          result.description = messages.getMessage( "ConnectionErrorDescription" );
-          result.action = "<a href=\"javascript:rwt.remote.Server.getInstance()._retry();\">"
-                        + messages.getMessage( "Retry" ) + "</a>";
-          break;
-        case "client error":
-          result.title = messages.getMessage( "ClientError" );
-          result.action = messages.getMessage( "Details" );
-          break;
-        default:
-          result.title = messages.getMessage( "ServerError" );
-          result.action = "<a href=\"" + this._getRestartURL() + "\">"
-                        + messages.getMessage( "Restart" ) + "</a>";
-      }
-      result.title = rwt.util.Encoding.replaceNewLines( result.title, "" );
-      result.description = rwt.util.Encoding.replaceNewLines( result.description, "<br/>" );
-      return result;
-    },
-
-    _getRestartURL : function() {
-      var result = String( window.location );
-      var index = result.indexOf( "#" );
-      if( index != -1 ) {
-        result = result.substring( 0, index );
-      }
-      return result;
-    },
-
-    _styleHyperlinkAsButton : function( element ) {
-      var style = element.style;
-      style.outline = "none";
-      style.textDecoration = "none";
-      style.backgroundColor = "#E8E8E8";
-      style.color = "#4a4a4a";
-      style.padding = "5px 15px";
-      style.borderTop = "1px solid #CCCCCC";
-      style.borderRight = "1px solid #333333";
-      style.borderBottom = "1px solid #333333";
-      style.borderLeft = "1px solid #CCCCCC";
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *   EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.base.GridRowContainer", {
-  extend : rwt.widgets.base.VerticalBoxLayout,
-
-  construct : function() {
-    this.base( arguments );
-    this.setOverflow( "hidden" );
-    this._scrollLeft = 0;
-    this._rowHeight = 16;
-    this._rowWidth = 0;
-    this._horzGridBorder = null;
-    this._rowBorder = null;
-    this._baseAppearance = null;
-    this._topItem = null;
-    this._vertGridLines = [];
-    this._vertGridBorder = null;
-    this._renderTime = null;
-    this._topItemIndex = 0;
-    this._items = [];
-    this._asyncQueue = {};
-    this._asyncTimer = new rwt.client.Timer( 0 );
-    this._asyncTimer.addEventListener( "interval", this._onAsyncTimer, this );
-    this._hoverItem = null;
-    this._hoverElement = null;
-    this._config = rwt.widgets.base.GridRowContainer.createRenderConfig();
-    this.addEventListener( "mouseover", this._onRowOver, this );
-    this.addEventListener( "mouseout", this._onRowOver, this );
-    this.addEventListener( "elementOver", this._onElementOver, this );
-  },
-
-  destruct : function() {
-    this._rowBorder = null;
-    this._topItem = null;
-    this._renderTime = null;
-    this._items = null;
-    this._hoverItem = null;
-    this._hoverElement = null;
-    this._asyncTimer.dispose();
-    this._asyncTimer = null;
-  },
-
-  statics : {
-
-    createRenderConfig : function() {
-      var result = {
-        "textColor" : null,
-        "font" : null,
-        "enabled" : true,
-        "focused" : false,
-        "linesVisible" : false,
-        "fullSelection" : false,
-        "hideSelection" : false,
-        "alwaysHideSelection" : false,
-        "variant" : null,
-        "selectionPadding" : null,
-        "indentionWidth" : 16,
-        "hasCheckBoxes" : false,
-        "checkBoxLeft" : null,
-        "checkBoxWidth" : null,
-        "columnCount" : 0,
-        "treeColumn" : 0,
-        "alignment" : [],
-        "itemLeft" : [],
-        "itemWidth" : [],
-        "itemImageLeft" : [],
-        "itemImageWidth" : [],
-        "itemTextLeft" : [],
-        "itemTextWidth" : [],
-        "itemCellCheck" : [],
-        "itemCellCheckLeft" : [],
-        "itemCellCheckWidth" : []
-      };
-      return result;
-    }
-
-  },
-
-  members : {
-
-    /////////////
-    // Public API
-
-    /**
-     * Returns a map with values for treeRow configuration. (see _createRenderConfig).
-     * Will not be changed by TreeRow or TreeRowContainer. When doing changes renderAll must
-     * be called for them take effect.
-     */
-    getRenderConfig : function() {
-      return this._config;
-    },
-
-    /**
-     * Calls this function after each complete rendering with the renderTime in ms.
-     */
-    setPostRenderFunction : function( func, context ) {
-      this._postRender = [ func, context ];
-    },
-
-    /**
-     * Calls this function with an item as the parameter. Expects a boolean as return value.
-     */
-    setSelectionProvider : function( func, context ) {
-      this._selectionProvider = [ func, context ];
-    },
-
-    setBaseAppearance : function( value ) {
-      this._baseAppearance = value;
-    },
-
-    // TODO [tb] : the rest of the setters could be refactored to "update" functions using _config.
-
-    setRowWidth : function( width ) {
-      this._rowWidth = width;
-      for( var i = 0; i < this._children.length; i++ ) {
-        this._children[ i ].setWidth( width );
-      }
-    },
-
-    setRowHeight : function( height ) {
-      this._rowHeight = height;
-      for( var i = 0; i < this._children.length; i++ ) {
-        this._children[ i ].setHeight( height );
-      }
-      this._updateRowCount();
-    },
-
-    updateRowLines : function() {
-      var border = this._config.linesVisible ? this._getHorizontalGridBorder() : null;
-      this._rowBorder = border;
-      for( var i = 0; i < this._children.length; i++ ) {
-        this._children[ i ].setBorder( border );
-        this._children[ i ].setState( "linesvisible", this._config.linesVisible );
-      }
-    },
-
-    _renderGridVertical : function() {
-      var linesNeeded = this._config.linesVisible ? this._config.columnCount : 0;
-      for( var i = 0; i < linesNeeded; i++ ) {
-        this._renderVerticalGridline( i );
-      }
-      for( var i = linesNeeded; i < this._vertGridLines.length; i++ ) {
-        this._removeGridLine( i );
-      }
-    },
-
-    _renderVerticalGridline : function( column ) {
-      var width = this._config.itemWidth[ column ];
-      var left = this._config.itemLeft[ column ] + width - 1;
-      if( width > 0 ) {
-        var line = this._getVerticalGridline( column );
-        line.style.left = left + "px";
-        line.style.height = this.getHeight() + "px";
-      } else {
-        this._removeGridLine( column );
-      }
-    },
-
-    _getVerticalGridline : function( column ) {
-      if( typeof this._vertGridLines[ column ] === "undefined" ) {
-        var line = document.createElement( "div" );
-        line.style.zIndex = 1;
-        line.style.position = "absolute";
-        line.style.top = "0px";
-        line.style.width = "0px";
-        this._getVerticalGridBorder().renderElement( line );
-        if( this._isCreated ) {
-          this._getTargetNode().appendChild( line );
-        } else {
-          this.addEventListener( "appear", function() {
-            this._getTargetNode().appendChild( line );
-          }, this );
-        }
-        this._vertGridLines[ column ] = line;
-      }
-      return this._vertGridLines[ column ];
-    },
-
-    _removeGridLine : function( column ) {
-      if( this._vertGridLines[ column ] ) {
-        this._getTargetNode().removeChild( this._vertGridLines[ column ] );
-        delete this._vertGridLines[ column ];
-      }
-    },
-
-    _getVerticalGridBorder : function() {
-      if( this._vertGridBorder === null ) {
-        this._vertGridBorder = this._getGridBorder( { "vertical" : true } );
-      }
-      return this._vertGridBorder;
-    },
-
-    _getHorizontalGridBorder : function() {
-      if( this._horzGridBorder === null ) {
-        this._horzGridBorder = this._getGridBorder( { "horizontal" : true } );
-      }
-      return this._horzGridBorder;
-    },
-
-    _getGridBorder : function( state ) {
-      var tvGrid = new rwt.theme.ThemeValues( state );
-      var cssElement = rwt.util.Strings.toFirstUp( this._baseAppearance ) + "-GridLine";
-      var gridColor = tvGrid.getCssColor( cssElement, "color" );
-      tvGrid.dispose();
-      var borderWidths = [ 0, 0, 0, 0 ];
-      gridColor = gridColor == "undefined" ? "transparent" : gridColor;
-      if( state.horizontal ) {
-        borderWidths[ 2 ] = 1;
-      } else if( state.vertical ) {
-        borderWidths[ 1 ] = 1;
-      }
-      return new rwt.html.Border( borderWidths, "solid", gridColor );
-    },
-
-    _getRowAppearance : function() {
-      return this._baseAppearance + "-row";
-    },
-
-    setTopItem : function( item, index, render ) {
-      // TODO [tb] : write test for optimized render
-      this._topItem = item;
-      if( render ) {
-        var delta = index - this._topItemIndex;
-        this._topItemIndex = index;
-        var forwards = delta > 0;
-        delta = Math.abs( delta );
-        if( delta >= this._children.length ) {
-          this._renderAll( true );
-        } else {
-          var numberOfShiftingRows = this._children.length - delta;
-          var updateFromRow = forwards ? numberOfShiftingRows : 0;
-          var newFirstRow = forwards ? delta : numberOfShiftingRows;
-          this._switchRows( newFirstRow );
-          this._updateRows( updateFromRow, delta, true );
-          this._renderBounds( true );
-        }
-      } else {
-        this._topItemIndex = index;
-      }
-    },
-
-    renderAll : function() {
-      this._renderAll( false );
-    },
-
-    renderItemQueue : function( queue ) {
-      for( var key in queue ) {
-        var item = queue[ key ];
-        var index = this._items.indexOf( item );
-        if( index !== -1 ) {
-          this._renderRow( this._children[ index ], item );
-        }
-      }
-    },
-
-    renderItem : function( item ) {
-      if( this._isCreated && item != null ) {
-        var row = this._findRowByItem( item );
-        if( row!= null ) {
-          this._renderRow( row, item );
-        }
-      }
-    },
-
-    setScrollLeft : function( value ) {
-      this._scrollLeft = value;
-      if( this.isSeeable() ) {
-        this.base( arguments, value );
-      }
-    },
-
-    findItemByRow : function( targetRow ) {
-      var index = this._children.indexOf( targetRow );
-      return index !== -1 ? this._items[ index ] : null;
-    },
-
-    getHoverItem : function() {
-      return this._hoverItem;
-    },
-
-    // NOTE: Used only by TreeUtil.js
-    setHoverItem : function( item ) {
-      if( item ) {
-        this._hoverElement = [ "other" ];
-      }
-      this._setHoverItem( item );
-    },
-
-    ////////////
-    // Internals
-
-    _renderAll : function( contentOnly ) {
-      if( !contentOnly ) {
-        this._renderGridVertical();
-      }
-      var start = ( new Date() ).getTime();
-      this._updateRows( 0, this._children.length, contentOnly );
-      this._renderBounds();
-      if( this._postRender ) {
-        var postRender = this._postRender;
-        window.setTimeout( function() {
-          var renderTime = ( new Date() ).getTime() - start;
-          if( !postRender[ 1 ].isDisposed() ) {
-            postRender[ 0 ].call( postRender[ 1 ], renderTime );
-          }
-        }, 0 );
-      }
-    },
-
-    _updateRowCount : function() {
-      var height = this.getHeight();
-      var rowsNeeded = Math.round( ( this.getHeight() / this._rowHeight ) + 0.5 );
-      while( this._children.length < rowsNeeded ) {
-        var row = new rwt.widgets.base.GridRow( this.getParent() );
-        row.setAppearance( this._getRowAppearance() );
-        row.setZIndex( 0 );
-        row.setWidth( this._rowWidth );
-        row.setHeight( this._rowHeight );
-        row.setBorder( this._rowBorder );
-        row.setState( "linesvisible", this._config.linesVisible );
-        this.add( row );
-      }
-      while( this._children.length > rowsNeeded ) {
-        this._children[ this._children.length - 1 ].destroy();
-      }
-      this._items.length = this._children.length;
-      this._updateRowsEvenState();
-    },
-
-    _updateRowsEvenState: function() {
-      for( var i = 0; i < this._children.length; i++ ) {
-        this._children[ i ].updateEvenState( this._topItemIndex + i );
-      }
-    },
-
-    _findRowByItem : function( targetItem ) {
-      var index = this._items.indexOf( targetItem );
-      return index !== -1 ? this._children[ index ] : null;
-    },
-
-    _updateRows : function( from, delta, contentOnly ) {
-      this._updateRowsEvenState();
-      var item = this._topItem;
-      var to = from + delta;
-      var row = 0;
-      while( item != null && row < this._children.length ) {
-        if( row >= from && row <= to ) {
-          this._renderRow( this._children[ row ], item, contentOnly );
-          this._items[ row ] = item;
-        }
-        item = item.getNextItem();
-        row++;
-      }
-      for( var i = row; i < this._children.length; i++ ) {
-        this._renderRow( this._children[ i ], null, contentOnly );
-        this._items[ i ] = null;
-      }
-    },
-
-    _renderRow : function( row, item, contentOnly ) {
-       row.renderItem( item,
-                       this._config,
-                       this._isSelected( item ),
-                       this._getHoverElement( item ),
-                       contentOnly );
-    },
-
-    _switchRows : function( newFirstRow ) {
-      var rowTemp = this._children.slice( newFirstRow );
-      var itemsTemp = this._items.slice( newFirstRow );
-      this._children = rowTemp.concat( this._children.slice( 0, newFirstRow ) );
-      this._items = itemsTemp.concat( this._items.slice( 0, newFirstRow ) );
-      this._invalidateVisibleChildren();
-    },
-
-    _renderBounds : function( renderLocation ) {
-      if( renderLocation ) {
-        for( var i = 0; i < this._children.length; i++ ) {
-          this._children[ i ].addToLayoutChanges( "locationY" );
-        }
-      }
-      //this.getLayoutImpl().layoutChild( this._children[ i ], changes );
-      this._flushChildrenQueue();
-    },
-
-    _onElementOver : function( event ) {
-      var target = event.getTarget();
-      var internal = target === event.getRelatedTarget();
-      if( target instanceof rwt.widgets.base.GridRow && internal && this._hoverItem ) {
-        var hoverElement = target.getTargetIdentifier( event );
-        if( this._hoverElement[ 0 ] !== hoverElement[ 0 ] ) {
-          this._hoverElement = hoverElement;
-          this._setHoverItem( this._hoverItem );
-        }
-      }
-    },
-
-    _onRowOver : function( event ) {
-      var target = event.getOriginalTarget();
-      if( target instanceof rwt.widgets.base.GridRow ) {
-        if( event.getType() === "mouseout" ) {
-          this._hoverElement = null;
-          this._setHoverItem( null );
-        } else {
-          this._hoverElement = target.getTargetIdentifier( event );
-          var item = this.findItemByRow( target );
-          if( item !== this._hoverItem ) { // can happen due to use of innerHTML/replacing elements
-            this._setHoverItem( item );
-          }
-        }
-      }
-    },
-
-    _setHoverItem : function( item ) {
-      var oldItem = this._hoverItem;
-      this._hoverItem = item;
-      if( oldItem !== item ) {
-        this._renderAsync( oldItem );
-      }
-      this._renderAsync( item );
-    },
-
-    _getHoverElement : function( item ) {
-      var result = null;
-      if( this._hoverItem === item ) {
-        result = this._hoverElement;
-      }
-      return result;
-    },
-
-    _renderAsync : function( item ) {
-      // async rendering needed in some cases where webkit (and possibly other browser) get confused
-      // when changing dom-elements in "mouseover" events
-      if( item !== null ) {
-        this._asyncQueue[ item.toHashCode() ] = item;
-        this._asyncTimer.start();
-      }
-    },
-
-    _onAsyncTimer : function() {
-      this._asyncTimer.stop();
-      this.renderItemQueue( this._asyncQueue );
-      this._asyncQueue = {};
-    },
-
-    _isSelected : function( item ) {
-      return this._selectionProvider[ 0 ].call( this._selectionProvider[ 1 ], item );
-    },
-
-    //////////////
-    // Overwritten
-
-    _applyHeight : function( value, oldValue ) {
-      this.base( arguments, value, oldValue );
-      this._updateRowCount();
-    },
-
-    _afterAppear : function() {
-      this.base( arguments );
-      this.setScrollLeft( this._scrollLeft );
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-namespace( "rwt.widgets.util" );
-
-rwt.widgets.util.GridRowContainerWrapper = function() {
-  this._fixedColumns = 0;
-  this._container = [];
-  this._container[ 0 ] = new rwt.widgets.base.GridRowContainer();
-  this._container[ 1 ] = new rwt.widgets.base.GridRowContainer();
-  this._config = rwt.widgets.base.GridRowContainer.createRenderConfig();
-  this._width = 0;
-  this._splitOffset = 0;
-  this._rowWidth = 0;
-  this.addEventListener( "mouseover", this._onRowOver, this );
-  this.addEventListener( "mouseout", this._onRowOver, this );
-};
-
-rwt.widgets.util.GridRowContainerWrapper.createInstance = function() {
-  if( !this.prototype._protoInit ) {
-    for( var i = 0; i < this._CONTAINER_DELEGATES.length; i++ ) {
-      this._createContainerDelegater( this._CONTAINER_DELEGATES[ i ] );
-    }
-    for( var i = 0; i < this._CONTAINER_GETTER_DELEGATES.length; i++ ) {
-      this._createContainerGetterDelegater( this._CONTAINER_GETTER_DELEGATES[ i ] );
-    }
-    this.prototype._protoInit = true;
-  }
-  return new rwt.widgets.util.GridRowContainerWrapper();
-};
-
-rwt.widgets.util.GridRowContainerWrapper._createContainerDelegater = function( funcName ) {
-  this.prototype[ funcName ] = function() {
-    this._container[ 0 ][ funcName ].apply( this._container[ 0 ], arguments );
-    this._container[ 1 ][ funcName ].apply( this._container[ 1 ], arguments );
-  };
-};
-
-rwt.widgets.util.GridRowContainerWrapper._createContainerGetterDelegater = function( funcName ) {
-  this.prototype[ funcName ] = function() {
-    return this._container[ 0 ][ funcName ].apply( this._container[ 0 ], arguments );
-  };
-};
-
-rwt.widgets.util.GridRowContainerWrapper._CONTAINER_DELEGATES = [
-  "setParent",
-  "destroy",
-  "addEventListener",
-  "removeEventListener",
-  "setSelectionProvider",
-  "setHeight",
-  "setTop",
-  "setBackgroundColor",
-  "setBackgroundImage",
-  "setRowHeight",
-  "setTopItem",
-  "renderItem",
-  "setToolTip",
-  "renderItemQueue",
-  "setBaseAppearance"
-];
-
-rwt.widgets.util.GridRowContainerWrapper._CONTAINER_GETTER_DELEGATES = [
-  "getTop",
-  "getHeight",
-  "getHoverItem",
-  "getElement",
-  "getChildrenLength"
-];
-
-rwt.widgets.util.GridRowContainerWrapper.prototype = {
-
-  _protoInit : false,
-
-  ///////////////////
-  // Wrapper-only API
-
-  getSubContainer : function( pos ) {
-    return this._container[ pos ] || null;
-  },
-
-  setFixedColumns : function( value ) {
-    this._fixedColumns = value;
-    this._updateConfig();
-  },
-
-  getFixedColumns : function() {
-    return this._fixedColumns;
-  },
-
-  /////////////////////////////////////////////
-  // New Implementation of TreeRowContainer API
-
-  getRenderConfig : function() {
-    return this._config;
-  },
-
-  setPostRenderFunction : function() {
-    // TODO [tb] : Dummy!
-  },
-
-  setWidth : function( value ) {
-    this._width = value;
-    this._layoutX();
-  },
-
-  getWidth : function() {
-    return this._width;
-  },
-
-  setRowWidth : function( value ) {
-    this._rowWidth = value;
-    this._layoutX();
-  },
-
-  setScrollLeft : function( value ) {
-    this._container[ 1 ].setScrollLeft( value );
-  },
-
-  findItemByRow : function( row ) {
-    var result = this._container[ 0 ].findItemByRow( row );
-    if( result == null ) {
-      result = this._container[ 1 ].findItemByRow( row );
-    }
-    return result;
-  },
-
-  updateRowLines : function() {
-    this._container[ 0 ].getRenderConfig().linesVisible = this._config.linesVisible;
-    this._container[ 0 ].updateRowLines();
-    this._container[ 1 ].getRenderConfig().linesVisible = this._config.linesVisible;
-    this._container[ 1 ].updateRowLines();
-  },
-
-  renderAll : function() {
-    this._updateConfig();
-    this._container[ 0 ].renderAll();
-    this._container[ 1 ].renderAll();
-  },
-
-  _updateConfig : function() {
-    var configLeft = this._container[ 0 ].getRenderConfig();
-    var configRight = this._container[ 1 ].getRenderConfig();
-    for( var key in this._config ) {
-      if( this._config[ key ] instanceof Array ) {
-        configLeft[ key ] = this._config[ key ].concat();
-        configRight[ key ] = this._config[ key ].concat();
-      } else {
-        configLeft[ key ] = this._config[ key ];
-        configRight[ key ] = this._config[ key ];
-      }
-    }
-    configRight.hasCheckBoxes = false;
-    var columnOrder = this._getColumnOrder();
-    var rightColumnsOffset = 0;
-    if( columnOrder.length > this._fixedColumns ) {
-      rightColumnsOffset = this._config.itemLeft[ columnOrder[ this._fixedColumns ] ];
-    } else {
-      rightColumnsOffset = this._width;
-    }
-    for( var i = 0; i < columnOrder.length; i++ ) {
-      var column = columnOrder[ i ];
-      if( i < this._fixedColumns ) {
-        configRight.itemWidth[ column ] = 0;
-      } else {
-        configLeft.itemWidth[ column ] = 0;
-        configRight.itemLeft[ column ] -= rightColumnsOffset;
-        configRight.itemImageLeft[ column ] -= rightColumnsOffset;
-        configRight.itemTextLeft[ column ] -= rightColumnsOffset;
-      }
-    }
-    if( this._splitOffset !== rightColumnsOffset ) {
-      this._splitOffset = rightColumnsOffset;
-      this._layoutX();
-    }
-  },
-
-  _layoutX : function() {
-    var leftWidth = Math.min( this._splitOffset, this._width );
-    this._container[ 0 ].setWidth( leftWidth );
-    this._container[ 0 ].setRowWidth( leftWidth );
-    this._container[ 1 ].setLeft( leftWidth );
-    this._container[ 1 ].setWidth( this._width - leftWidth );
-    this._container[ 1 ].setRowWidth( this._rowWidth - leftWidth );
-  },
-
-  _getColumnOrder : function() {
-    var result = [];
-    var offsets = this._config.itemLeft.concat();
-    var sorted = offsets.concat().sort( function( a, b ){ return a - b; } );
-    for( var i = 0; i < sorted.length; i++ ) {
-      var pos = offsets.indexOf( sorted[ i ] );
-      result[ i ] = pos;
-      offsets[ pos ] = null; // TODO [tb] : test
-    }
-    return result;
-  },
-
-  _onRowOver : function( event ) {
-    var eventTarget = event.getCurrentTarget();
-    for( var i = 0; i < this._container.length; i++ ) {
-      if( this._container[ i ] !== eventTarget ) {
-        this._container[ i ].setHoverItem( eventTarget.getHoverItem() );
-      }
-    }
-  }
-
-};
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-namespace( "rwt.widgets.util" );
-
-rwt.widgets.util.GridUtil = {
-
-  /////////////////
-  // API for Server
-
-  setFixedColumns : function( tree, value ) {
-    var container = tree.getRowContainer();
-    if( container.setFixedColumns ) {
-      container.setFixedColumns( value );
-      tree.update();
-    }
-  },
-
-  ///////////////
-  // API for Tree
-
-  createTreeRowContainer : function( argsmap ) {
-    var result;
-    if( argsmap.splitContainer ) {
-      result = rwt.widgets.util.GridRowContainerWrapper.createInstance();
-    } else {
-      result = new rwt.widgets.base.GridRowContainer();
-    }
-    return result;
-  },
-
-  getColumnByPageX : function( tree, pageX ) {
-    var container = tree.getRowContainer();
-    var splitContainer = container instanceof rwt.widgets.util.GridRowContainerWrapper;
-    if( splitContainer ) {
-      container = tree.getRowContainer().getSubContainer( 0 );
-    }
-    var result = this._getColumnByPageX( container, pageX );
-    if( result === -1 && splitContainer ) {
-      container = tree.getRowContainer().getSubContainer( 1 );
-      result = this._getColumnByPageX( container, pageX );
-    }
-    return result;
-  },
-
-  ////////////
-  // Internals
-
-  _getColumnByPageX : function( container, pageX ) {
-    var config = container.getRenderConfig();
-    var columnCount = config.columnCount;
-    var columnIndex = columnCount === 0 ? 0 : -1;
-    var element = container.getFirstChild().getElement();
-    var leftOffset = rwt.html.Location.getLeft( element );
-    for( var i = 0; columnIndex == -1 && i < columnCount; i++ ) {
-      var pageLeft = leftOffset + config.itemLeft[ i ];
-      if( pageX >= pageLeft && pageX < pageLeft + config.itemWidth[ i ] ) {
-        columnIndex = i;
-      }
-    }
-    return columnIndex;
-  }
-
-};
-
-/*******************************************************************************
- * Copyright (c) 2010, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-/**
- * Represents a visible TreeItem.
- */
-
-(function() {
-
-var Style = rwt.html.Style;
-var Variant = rwt.util.Variant;
-
-rwt.qx.Class.define( "rwt.widgets.base.GridRow", {
-
-  extend : rwt.widgets.base.Terminator,
-
-  construct : function() {
-    this.base( arguments );
-    this.setSelectable( false ); // Prevents user from selecting text
-    this.setHeight( 16 );
-    this._styleMap = {};
-    this._overlayStyleMap = {};
-    this._variant = null;
-    this._graphicsOverlay = null;
-    this._expandElement = null;
-    this._checkBoxElement = null;
-    this._overlayElement = null;
-    this._treeColumnElements = [];
-    this._cellLabels = [];
-    this._cellImages = [];
-    this._cellCheckImages = [];
-    this._cellBackgrounds = [];
-    this._miscNodes = [];
-    this._usedMiscNodes = 0;
-    this._cellsRendered = 0;
-  },
-
-  destruct : function() {
-    this._expandElement = null;
-    this._graphicsOverlay = null;
-    this._checkBoxElement = null;
-    this._treeColumnElements = null;
-    this._cellLabels = null;
-    this._cellImages = null;
-    this._cellCheckImages = null;
-    this._cellBackgrounds = null;
-    this._miscNodes = null;
-  },
-
-  events : {
-    "itemRendered" : "rwt.event.Event"
-  },
-
-  members : {
-
-    renderItem : function( item, config, selected, hoverTarget, scrolling ) {
-      this._usedMiscNodes = 0;
-      if( item !== null ) {
-        var renderSelected = this._renderAsSelected( config, selected );
-        var heightChanged = this._renderHeight( item, config );
-        var contentOnly = scrolling && !heightChanged;
-        this._renderStates( item, config, renderSelected, hoverTarget );
-        this._renderBackground( item, config, renderSelected );
-        if( config.treeColumn !== -1 ) {
-          this._renderIndention( item, config, hoverTarget );
-        }
-        this._renderCheckBox( item, config, hoverTarget, contentOnly );
-        this._renderCells( item, config, renderSelected, hoverTarget, contentOnly );
-        this._renderOverlay( item, config );
-        this._hideRemainingElements();
-      } else {
-        this.setBackgroundColor( null );
-        this.setBackgroundImage( null );
-        this.setBackgroundGradient( null );
-        this._clearContent( config );
-        if( !scrolling && config ) {
-          this._renderAllBounds( config );
-        }
-      }
-      this.dispatchSimpleEvent( "itemRendered", item );
-    },
-
-    getTargetIdentifier : function( event ) {
-      var node = event.getDomTarget();
-      var result = [ "other" ];
-      if( this._expandElement !== null && this._expandElement === node ) {
-        result = [ "expandIcon" ];
-      } else if( this._checkBoxElement !== null && this._checkBoxElement === node ) {
-        result = [ "checkBox" ];
-      } else if( this._cellCheckImages.indexOf( node ) !== -1 ) {
-        var cell = this._cellCheckImages.indexOf( node );
-        result = [ "cellCheckBox", cell ];
-      } else {
-        while( node !== this.getElement() && result[ 0 ] === "other" ) { // Can be removed?
-          if( this._treeColumnElements.indexOf( node ) != -1 ) {
-            result = [ "treeColumn" ]; // TODO [tb] : now should be [ "label", 0 ] / [ "image", 0 ]
-          }
-          node = node.parentNode;
-        }
-      }
-      return result;
-    },
-
-    updateEvenState : function( index ) {
-      this.setState( "even", index % 2 === 0 );
-    },
-
-    ////////////
-    // internals
-
-    _renderHeight : function( item, config ) {
-      var result = false;
-      var itemHeight = item.getOwnHeight();
-      if( itemHeight !== this.getHeight() ) {
-        this.setHeight( item.getOwnHeight() );
-        result = true;
-      }
-      return result;
-    },
-
-    _renderStates : function( item, config, selected, hoverTarget ) {
-      this.setState( "checked", item.isChecked() );
-      this.setState( "grayed", item.isGrayed() );
-      this.setState( "parent_unfocused", this._renderAsUnfocused( config ) );
-      this.setState( "selected", config.fullSelection ? selected : false );
-      this._renderVariant( item.getVariant() );
-      this._renderOverState( hoverTarget, config );
-      this._styleMap = this._getStyleMap();
-      this.setState( "selected", selected );
-      if( config.fullSelection ) {
-        this._overlayStyleMap = this._getOverlayStyleMap();
-      } else {
-        this._overlayStyleMap = this._getTreeColumnStyleMap();
-      }
-    },
-
-    _renderVariant : function( variant ) {
-      if( this._variant != variant ) {
-        if( this._variant != null ) {
-          this.setState( this._variant, false );
-        }
-        this._variant = variant;
-        if( this._variant != null ) {
-          this.setState( this._variant, true );
-        }
-      }
-    },
-
-    _renderOverState : function( hoverTarget, config ) {
-      var fullOverState = hoverTarget !== null && config.fullSelection;
-      var singleOverState = hoverTarget != null && hoverTarget[ 0 ] === "treeColumn";
-      this.setState( "over", fullOverState || singleOverState );
-    },
-
-    setState : function( state, value ) {
-      if( !this.__states ) {
-        this.__states = {};
-      }
-      if( value ) {
-        this.__states[ state ] = true;
-      } else {
-        delete this.__states[ state ];
-      }
-    },
-
-    _getStyleMap : function() {
-      var manager = rwt.theme.AppearanceManager.getInstance();
-      return manager.styleFrom( this.getAppearance(), this.__states );
-    },
-
-    _getOverlayStyleMap : function() {
-      var manager = rwt.theme.AppearanceManager.getInstance();
-      return manager.styleFrom( this.getAppearance() + "-overlay", this.__states );
-    },
-
-    _getTreeColumnStyleMap : function() {
-      var manager = rwt.theme.AppearanceManager.getInstance();
-      var rowMap = manager.styleFrom( this.getAppearance(), this.__states );
-      var overlayMap = manager.styleFrom( this.getAppearance() + "-overlay", this.__states );
-      overlayMap.rowForeground = rowMap.foreground;
-      return overlayMap;
-    },
-
-    _styleFromMap : function() {
-      // TODO [tb] : Overwrites (now) useless function from Widget.js
-      //             Find a clean way to disable renderAppearance.
-      //             This would need changes to Widget.js
-    },
-
-    _renderBackground : function( item, config, selected ) {
-      var color = this._styleMap.background;
-      var image = this._styleMap.backgroundImage;
-      var gradient = this._styleMap.backgroundGradient;
-      if( config.enabled !== false && item !== null && item.getBackground() !== null ) {
-        color = item.getBackground();
-        image = null;
-        gradient = null;
-      }
-      // Note: "undefined" is a string stored in the themestore
-      this.setBackgroundColor( color !== "undefined" ? color : null );
-      this.setBackgroundImage( image !== "undefined" ? image : null );
-      this.setBackgroundGradient( gradient !== "undefined" ? gradient : null );
-    },
-
-    _hasOverlayBackground : function() {
-      var result =    this._overlayStyleMap.background !== "undefined"
-                   || this._overlayStyleMap.backgroundImage !== null
-                   || this._overlayStyleMap.backgroundGradient !== null;
-      return result;
-    },
-
-    _renderIndention : function( item, config, hoverTarget ) {
-      var expandSymbol = this._getExpandSymbol( item, config, hoverTarget );
-      if( expandSymbol != null ) {
-        var element =  this._addIndentSymbol( item.getLevel(), config, expandSymbol );
-        this._expandElement = element;
-      } else {
-        this._expandElement = null;
-      }
-      var lineSymbol = this._getLineSymbol( item, config );
-      if( lineSymbol != null ) {
-        var parent = item.getParent();
-        while( !parent.isRootItem() ) {
-          if( parent.hasNextSibling() ) {
-            this._addIndentSymbol( parent.getLevel(), config, lineSymbol );
-          }
-          parent = parent.getParent();
-        }
-      }
-    },
-
-    _getExpandSymbol : function( item, config, hoverTarget ) {
-      var states = this._getParentStates( config );
-      if( item.getLevel() === 0 && !item.hasPreviousSibling() ) {
-        states.first = true;
-      }
-      if( !item.hasNextSibling() ) {
-        states.last = true;
-      }
-      if( item.hasChildren() ) {
-        if( item.isExpanded() ) {
-          states.expanded = true;
-        } else {
-          states.collapsed = true;
-        }
-      }
-      if( hoverTarget && hoverTarget[ 0 ] === "expandIcon" ) {
-        states.over = true;
-      }
-      return this._getImageFromAppearance( "indent", states );
-    },
-
-    _getLineSymbol : function( item, config ) {
-      var states = this._getParentStates( config );
-      states.line = true;
-      return this._getImageFromAppearance( "indent", states );
-    },
-
-    _getParentStates : function( config ) {
-      var result = {};
-      if( config.variant ) {
-        result[ config.variant ] = true;
-      }
-      return result;
-    },
-
-    _getImageFromAppearance : function( image, states ) {
-      var appearance = this.getAppearance() + "-" + image;
-      var manager = rwt.theme.AppearanceManager.getInstance();
-      var styleMap = manager.styleFrom( appearance, states );
-      var valid = styleMap && styleMap.backgroundImage;
-      return valid ? styleMap.backgroundImage : null;
-    },
-
-    _addIndentSymbol : function( level, config, source ) {
-      var result = null;
-      var nextLevelOffset = ( level + 1 ) * config.indentionWidth;
-      var cellWidth = config.itemWidth[ config.treeColumn ];
-      if( nextLevelOffset <= cellWidth ) {
-        var offset = level * config.indentionWidth;
-        var height = this.getHeight();
-        var width = nextLevelOffset - offset;
-        var element = this._getMiscImage();
-        this._setImage( element, source, config.enabled );
-        this._setBounds( element, offset, 0, width, height );
-        result = element;
-      }
-      return result;
-    },
-
-    _renderCheckBox : function( item, config, hoverTarget, contentOnly ) {
-      if( config.hasCheckBoxes ) {
-        var states = this.__states;
-        this.setState( "over", hoverTarget && hoverTarget[ 0 ] === "checkBox" );
-        var image = this._getImageFromAppearance( "check-box", states );
-        this.setState( "over", hoverTarget !== null );
-        if( this._checkBoxElement === null ) {
-          this._checkBoxElement = this._createElement( 3 );
-          this._checkBoxElement.style.backgroundRepeat = "no-repeat";
-          this._checkBoxElement.style.backgroundPosition = "center";
-        }
-        this._setImage( this._checkBoxElement, image, config.enabled );
-        if( config.treeColumn !== -1 || !contentOnly ) {
-          var left = this._getCheckBoxLeft( item, config );
-          var width = this._getCheckBoxWidth( item, config );
-          var height = this.getHeight();
-          this._setBounds( this._checkBoxElement, left, 0, width, height );
-        }
-      }
-    },
-
-    _renderCells : function( item, config, selected, hoverTarget, contentOnly ) {
-      var columns = this._getColumnCount( config );
-      if( this._cellsRendered > columns ) {
-        this._removeCells( columns, this._cellsRendered );
-      }
-      for( var i = 0; i < columns; i++ ) {
-        var isTreeColumn = this._isTreeColumn( i, config );
-        if( this._getItemWidth( item, i, config ) > 0 ) {
-          this._renderCellBackground( item, i, config, contentOnly );
-          this._renderCellCheckBox( item, i, config, isTreeColumn, contentOnly, hoverTarget );
-          var imageElement = this._renderCellImage( item, i, config, isTreeColumn, contentOnly );
-          var labelElement = this._renderCellLabel( item, i, config, isTreeColumn, contentOnly );
-          if( !config.fullSelection && isTreeColumn ) {
-            this._treeColumnElements = [ imageElement, labelElement ];
-          }
-        } else {
-          this._removeCell( i );
-        }
-      }
-      this._cellsRendered = columns;
-    },
-
-    _renderOverlay : function( item, config ) {
-      if( item && this._hasOverlayBackground() ) {
-        this._styleOverlay( item, config );
-        this._layoutOverlay( item, config );
-      } else if( this._overlayElement ){
-        this._overlayElement.style.display = "none";
-      }
-    },
-
-    _styleOverlay : function( item, config ) {
-      var element = this._getOverlayElement();
-      var styleMap = this._overlayStyleMap;
-      var gradient = styleMap.backgroundGradient;
-      if( gradient ) {
-        this._renderOverlayGradient( element, gradient );
-      } else {
-        element.style.backgroundColor = styleMap.background;
-        Style.setOpacity( element, styleMap.backgroundAlpha );
-      }
-    },
-
-    _renderOverlayGradient : function( element, gradient ) {
-      if( rwt.client.Client.supportsCss3() ) {
-        Style.setBackgroundGradient( element, gradient );
-      } else {
-        rwt.graphics.GraphicsUtil.setFillGradient( this._getOverlayShape(), gradient );
-      }
-    },
-
-    _getOverlayShape : function() {
-      if( !this._graphicsOverlay ) {
-        var GraphicsUtil = rwt.graphics.GraphicsUtil;
-        var canvas = GraphicsUtil.createCanvas();
-        var shape = GraphicsUtil.createShape( "roundrect" );
-        GraphicsUtil.addToCanvas( canvas, shape );
-        this._graphicsOverlay = {
-          "canvas" : canvas,
-          "shape" : shape
-        };
-        this._getTargetNode().replaceChild( canvas.node, this._overlayElement );
-        this._overlayElement = canvas.node;
-        this._overlayElement.style.zIndex = 2;
-      }
-      return this._graphicsOverlay.shape;
-    },
-
-    _layoutOverlay : function( item, config ) {
-      var element = this._getOverlayElement();
-      var height = this.getHeight();
-      var left;
-      var width;
-      if( config.fullSelection ) {
-        left = 0;
-        width = this.getWidth();
-      } else {
-        var cell = config.treeColumn;
-        var padding = config.selectionPadding;
-        left = this._getItemTextLeft( item, cell, config );
-        left -= padding[ 0 ];
-        width = this._getItemTextWidth( item, cell, config );
-        width += width > 0 ? padding[ 0 ] : 0;
-        var visualWidth  = this._getVisualTextWidth( item, cell, config );
-        visualWidth  += padding[ 0 ] + padding[ 1 ];
-        width = Math.min( width, visualWidth );
-      }
-      if( this._graphicsOverlay ) {
-        var GraphicsUtil = rwt.graphics.GraphicsUtil;
-        var shape = this._graphicsOverlay.shape;
-        element.style.left = left + "px";
-        element.style.top = "0px";
-        var radii = [ 0, 0, 0, 0 ];
-        GraphicsUtil.setRoundRectLayout( shape, 0, 0, width, height, radii );
-      } else {
-        this._setBounds( element, left, 0, width, height );
-      }
-    },
-
-    _renderCellBackground : function( item, cell, config, contentOnly ) {
-      var background = this._getCellBackgroundColor( item, cell, config );
-      var renderBounds = false;
-      if( background !== "undefined" && background != this._styleMap.backgroundColor ) {
-        renderBounds = !contentOnly || !this._cellBackgrounds[ cell ];
-        var element = this._getBackgroundElement( cell );
-        element.style.backgroundColor = background;
-      } else if( this._cellBackgrounds[ cell ] ){
-        this._cellBackgrounds[ cell ].style.backgroundColor = "transparent";
-        renderBounds = !contentOnly;
-      }
-      if( renderBounds ) {
-        this._renderCellBackgroundBounds( item, cell, config );
-      }
-    },
-
-    _renderCellBackgroundBounds : function( item, cell, config ) {
-      var element = this._cellBackgrounds[ cell ];
-      if( element ) {
-        var left = this._getItemLeft( item, cell, config );
-        var width = this._getItemWidth( item, cell, config );
-        var height = this.getHeight();
-        if( this.hasState( "linesvisible" ) ) {
-          height -= 1;
-        }
-        this._setBounds( element, left, 0, width, height );
-      }
-    },
-
-    _renderCellCheckBox : function( item, cell, config, isTreeColumn, contentOnly, hoverTarget ) {
-      var element = null;
-      var renderBounds = false;
-      if( config.itemCellCheck[ cell ] ) {
-        this.setState( "checked", item.isCellChecked( cell ) );
-        this.setState( "grayed", item.isCellGrayed( cell ) );
-        this.setState( "over",    hoverTarget
-                               && hoverTarget[ 0 ] === "cellCheckBox"
-                               && hoverTarget[ 1 ] === cell );
-        var source = this._getImageFromAppearance( "check-box", this.__states );
-        renderBounds = isTreeColumn || !contentOnly || !this._cellCheckImages[ cell ];
-        element = this._getCellCheckImage( cell );
-        this._setImage( element, source, config.enabled );
-      }
-      if( renderBounds ) {
-        this._renderCellCheckBounds( item, cell, config );
-      }
-      return element;
-    },
-
-    _renderCellCheckBounds : function( item, cell, config ) {
-      var element = this._cellCheckImages[ cell ];
-      if( element ) {
-        var left = this._getCellCheckLeft( item, cell, config );
-        var width = this._getCellCheckWidth( item, cell, config );
-        this._setBounds( element, left, 0, width, this.getHeight() );
-      }
-    },
-
-    _renderCellImage : function( item, cell, config, isTreeColumn, contentOnly ) {
-      var source = item.getImage( cell );
-      var element = null;
-      var renderBounds = false;
-      if( source !== null ) {
-        renderBounds = isTreeColumn || !contentOnly || !this._cellImages[ cell ];
-        element = this._getCellImage( cell );
-        this._setImage( element, source, renderBounds ? config.enabled : null );
-      } else if( this._cellImages[ cell ] ) {
-        renderBounds = isTreeColumn || !contentOnly;
-        element = this._getCellImage( cell );
-        this._setImage( element, null, null );
-      }
-      if( renderBounds ) {
-        this._renderCellImageBounds( item, cell, config );
-      }
-      return element;
-    },
-
-    _renderCellImageBounds : function( item, cell, config ) {
-      var element = this._cellImages[ cell ];
-      if( element ) {
-        var left = this._getItemImageLeft( item, cell, config );
-        var width = this._getItemImageWidth( item, cell, config );
-        this._setBounds( element, left, 0, width, this.getHeight() );
-      }
-    },
-
-    _renderCellLabel : function( item, cell, config, isTreeColumn, contentOnly ) {
-      // NOTE [tb] : When scrolling in Firefox, it may happen that the text
-      //             becomes temorarily invisible. This is a browser-bug
-      //             that ONLY occurs when Firebug is installed.
-      var element = null;
-      var renderBounds = false;
-      if( item.hasText( cell ) ) {
-        renderBounds = isTreeColumn || !contentOnly || !this._cellLabels[ cell ];
-        element = this._getTextElement( cell, config );
-        this._renderElementContent( element, item, cell, config.markupEnabled );
-        if( renderBounds ) {
-          element.style.textAlign = isTreeColumn ? "left" : this._getAlignment( cell, config );
-        }
-        this._styleLabel( element, item, cell, config );
-      } else if( this._cellLabels[ cell ] ) {
-        renderBounds = isTreeColumn || !contentOnly;
-        element = this._getTextElement( cell, config );
-        this._renderElementContent( element, null, -1, config.markupEnabled );
-      }
-      if( renderBounds ) {
-        this._renderCellLabelBounds( item, cell, config );
-      }
-      return element;
-    },
-
-    _renderCellLabelBounds : function( item, cell, config ) {
-      var element = this._cellLabels[ cell ];
-      if( element ) {
-        var left = this._getItemTextLeft( item, cell, config );
-        var width = this._getItemTextWidth( item, cell, config );
-        var top = this._getCellPadding( config )[ 0 ];
-        this._setBounds( element, left, top, width, this.getHeight() - top );
-      }
-    },
-
-    _renderElementContent : Variant.select( "qx.client", {
-      "mshtml|newmshtml" : function( element, item, cell, markupEnabled ) {
-        if( markupEnabled ) {
-          var html = item ? item.getText( cell, false ) : "";
-          if( element.rap_Markup !== html ) {
-            element.innerHTML = html;
-            element.rap_Markup = html;
-          }
-        } else {
-          // innerText is faster, but works correctly onlw when seeable
-          if( this.isSeeable() ) {
-            element.innerText = item ? item.getText( cell, false ) : "";
-          } else {
-            element.innerHTML = item ? item.getText( cell ) : "";
-          }
-        }
-      },
-      "default" : function( element, item, cell, markupEnabled ) {
-        var html = item ? item.getText( cell, !markupEnabled ) : "";
-        if( markupEnabled ) {
-          if( html !== element.rap_Markup ) {
-            element.innerHTML = html;
-            element.rap_Markup = html;
-          }
-        } else {
-          element.innerHTML = html;
-        }
-      }
-    } ),
-
-    _styleLabel : function( element, item, cell, config ) {
-      this._setForeground( element, this._getCellColor( item, cell, config ) );
-      this._setFont( element, this._getCellFont( item, cell, config ) );
-      this._setTextDecoration( element, this._styleMap.textDecoration );
-      Style.setTextShadow( element, this._styleMap.textShadow );
-    },
-
-    _getCellBackgroundColor : function( item, cell, config ) {
-      var result;
-      if( config.enabled === false ) {
-        result = "undefined";
-      } else {
-        result = item.getCellBackground( cell );
-      }
-      return result;
-    },
-
-    _getCellColor : function( item, cell, config ) {
-      var result = null;
-      var foreground = this._styleMap.foreground;
-      var overlayForeground = this._overlayStyleMap.foreground;
-      if( !config.fullSelection ) {
-        if( this._isTreeColumn( cell, config ) ){
-          foreground = this._overlayStyleMap.rowForeground;
-        } else {
-          overlayForeground = "undefined";
-        }
-      }
-      if( overlayForeground !== "undefined" ) {
-        result = overlayForeground;
-      } else if( config.enabled !== false && item.getCellForeground( cell ) ) {
-        result = item.getCellForeground( cell );
-      } else {
-        result = foreground;
-        if( result === "undefined" ) {
-          result = config.textColor;
-        }
-      }
-      return result;
-    },
-
-    _getCellFont : function( item, cell, config ) {
-      var result = item.getCellFont( cell );
-      if( result === null || result === "" ) {
-        result = config.font;
-      }
-      return result;
-    },
-
-    _getVisualTextWidth : function( item, cell, config ) {
-      var calc = rwt.widgets.util.FontSizeCalculation;
-      var result = 0;
-      if( this._cellLabels[ cell ] ) {
-        var font = this._getCellFont( item, cell, config );
-        var fontProps = this._getFontProps( font );
-        var text = this._cellLabels[ cell ].innerHTML;
-        var dimensions = calc.computeTextDimensions( text, fontProps );
-        result = dimensions[ 0 ];
-      }
-      return result;
-    },
-
-    _renderAsUnfocused : function( config ) {
-      return !config.focused && !this.hasState( "dnd_selected" );
-    },
-
-    _renderAsSelected : function( config, selected ) {
-      var result =    ( selected || this.hasState( "dnd_selected" ) )
-                   && ( !config.hideSelection || config.focused )
-                   && !config.alwaysHideSelection;
-      return result;
-    },
-
-    _getFontProps : function( font ) {
-      var result = {};
-      if( font instanceof rwt.html.Font ) {
-        font.renderStyle( result );
-      } else {
-        var fontObject = rwt.html.Font.fromString( font );
-        fontObject.renderStyle( result );
-        fontObject.dispose();
-      }
-      return result;
-    },
-
-    /////////////
-    // DOM-Helper
-
-    _setFont : function( element, font ) {
-      if( font === "" || font === null ) {
-        this._resetFont( element );
-      } else {
-        if( font instanceof rwt.html.Font ) {
-          font.renderStyle( element.style );
-        } else {
-          element.style.font = font;
-        }
-      }
-    },
-
-    _resetFont : Variant.select( "qx.client", {
-      "default" : function( element ) {
-        element.style.font = "";
-        element.style.fontFamily = "";
-        element.style.fontSize = "";
-        element.style.fontVariant = "";
-        element.style.fontStyle = "";
-        element.style.fontWeight = "";
-      },
-      "mshtml" : function( element ) {
-        // Resetting style.font causes errors in IE with any of these syntaxes:
-        // node.style.font = null | undefined | "inherit" | "";
-        element.style.fontFamily = "";
-        element.style.fontSize = "";
-        element.style.fontVariant = "";
-        element.style.fontStyle = "";
-        element.style.fontWeight = "";
-      }
-    } ),
-
-    _setTextDecoration : function( element, decoration ) {
-      if( decoration == null || decoration === "none" ) {
-        element.style.textDecoration = "";
-      } else {
-        element.style.textDecoration = decoration;
-      }
-    },
-
-    _setBounds : function( element, x, y, width, height ) {
-      try{
-        element.style.left = x + "px";
-        element.style.top = y + "px";
-        element.style.width = width + "px";
-        element.style.height = height + "px";
-      }catch( ex ) {
-        throw "setBounds failed: " + [ element, x, y, width, height ];
-      }
-    },
-
-    _setForeground : function( element, color ) {
-      element.style.color = color != null ? color : "";
-    },
-
-    _setImage : function( element, src, enabled ) {
-      element.style.backgroundImage = src ? "URL(" + src + ")" : "none";
-      if( enabled !== null ) {
-        var opacity = enabled ? 1 : 0.3;
-        Style.setOpacity( element, opacity );
-      }
-    },
-
-    _getTextElement : function( cell, config ) {
-      var result = this._cellLabels[ cell ];
-      if( !result ) {
-        result = this._createElement( 3 );
-        result.style.verticalAlign = "middle";
-        result.style.whiteSpace = "nowrap";
-        if( rwt.client.Client.isNewMshtml() ) {
-          result.style.backgroundColor = "rgba(0, 0, 0, 0)";
-        }
-        this._cellLabels[ cell ] = result;
-      }
-      return result;
-    },
-
-    _getCellImage : function( cell ) {
-      var result = this._cellImages[ cell ];
-      if( !result ) {
-        result = this._createElement( 3 );
-        result.style.backgroundRepeat = "no-repeat";
-        result.style.backgroundPosition = "center";
-        this._cellImages[ cell ] = result;
-      }
-      return result;
-    },
-
-    _getCellCheckImage : function( cell ) {
-      var result = this._cellCheckImages[ cell ];
-      if( !result ) {
-        result = this._createElement( 3 );
-        result.style.backgroundRepeat = "no-repeat";
-        result.style.backgroundPosition = "center";
-        this._cellCheckImages[ cell ] = result;
-      }
-      return result;
-    },
-
-    _getMiscImage : function() {
-      var result = this._getMiscElement( 3 );
-      result.innerHTML = "";
-      result.style.backgroundColor = "";
-      return result;
-    },
-
-    _getOverlayElement : function() {
-      if( this._overlayElement === null ) {
-        this._overlayElement = this._createElement( 2 );
-      }
-      this._overlayElement.style.display = "";
-      return this._overlayElement;
-    },
-
-    _getBackgroundElement : function( cell ) {
-      var result = this._cellBackgrounds[ cell ];
-      if( !result ) {
-        result = this._createElement( 1 );
-        this._cellBackgrounds[ cell ] = result;
-      }
-      return result;
-    },
-
-    _getMiscElement : function( zIndex ) {
-      var result;
-      var node = this._getTargetNode();
-      if( this._usedMiscNodes < this._miscNodes.length ) {
-        result = this._miscNodes[ this._usedMiscNodes ];
-        result.style.display = "";
-        result.style.zIndex = zIndex;
-      } else {
-        result = this._createElement( zIndex );
-        result.style.backgroundRepeat = "no-repeat";
-        result.style.backgroundPosition = "center";
-        this._miscNodes.push( result );
-      }
-      this._usedMiscNodes++;
-      return result;
-    },
-
-    _createElement : function( zIndex ) {
-      var result = document.createElement( "div" );
-      result.style.position = "absolute";
-      result.style.overflow = "hidden";
-      result.style.zIndex = zIndex;
-      this._getTargetNode().appendChild( result );
-      return result;
-    },
-
-    _clearContent : function( config ) {
-      for( var i = 0; i < this._cellBackgrounds.length; i++ ) {
-        if( this._cellBackgrounds[ i ] ) {
-          this._cellBackgrounds[ i ].style.backgroundColor = "transparent";
-        }
-      }
-      for( var i = 0; i < this._cellCheckImages.length; i++ ) {
-        if( this._cellCheckImages[ i ] ) {
-          this._cellCheckImages[ i ].style.backgroundImage = "";
-        }
-      }
-      for( var i = 0; i < this._cellImages.length; i++ ) {
-        if( this._cellImages[ i ] ) {
-          this._cellImages[ i ].style.backgroundImage = "";
-        }
-      }
-      for( var i = 0; i < this._cellLabels.length; i++ ) {
-        if( this._cellLabels[ i ] ) {
-          this._renderElementContent( this._cellLabels[ i ], null, -1, config.markupEnabled );
-        }
-      }
-      if( this._checkBoxElement ) {
-        this._checkBoxElement.style.backgroundImage = "";
-      }
-      this._renderOverlay( null );
-      this._hideRemainingElements();
-    },
-
-    _renderAllBounds : function( config ) {
-      var columns = this._getColumnCount( config );
-      for( var i = 0; i < columns; i++ ) {
-        // tree column bounds can not be rendered without item, is rendered always anyway
-        if( !this._isTreeColumn( i, config ) ) {
-          this._renderCellLabelBounds( null, i, config );
-          this._renderCellImageBounds( null, i, config );
-        }
-        this._renderCellBackgroundBounds( null, i, config );
-      }
-    },
-
-    _hideRemainingElements : function() {
-      var node = this._getTargetNode();
-      for( var i = this._usedMiscNodes; i < this._miscNodes.length; i++ ) {
-        this._miscNodes[ i ].style.display = "none";
-      }
-    },
-
-    _removeCells : function( from, to ) {
-      for( var i = from; i < to; i++ ) {
-        this._removeCell( i );
-      }
-    },
-
-    _removeCell : function( cell ) {
-      this._removeNode( this._cellBackgrounds, cell );
-      this._removeNode( this._cellImages, cell );
-      this._removeNode( this._cellCheckImages, cell );
-      this._removeNode( this._cellLabels, cell );
-    },
-
-    _removeNode : function( arr, pos ) {
-      var node = arr[ pos ];
-      if( node ) {
-        this._getTargetNode().removeChild( node );
-        arr[ pos ] = null;
-      }
-    },
-
-    _ieFixLayoutOnAppear : Variant.select( "qx.client", {
-      "mshtml" : function() {
-        // TODO [tb] : find a faster alternative, possibly delete hidden nodes on disappear or collect hidden elements
-        this.base( arguments );
-        var node = this._getTargetNode();
-        for( var i = 0; i < node.childNodes.length; i++ ) {
-          if( node.childNodes[ i ].style.display === "none" ) {
-            node.childNodes[ i ].style.display = "";
-            node.childNodes[ i ].style.display = "none";
-          }
-        }
-      },
-      "default" : rwt.util.Functions.returnTrue
-    } ),
-
-    ////////////////
-    // layout-helper
-
-    _getCheckBoxLeft : function( item, config ) {
-      return this._correctOffset( config.checkBoxLeft, item, config );
-    },
-
-    _getCheckBoxWidth : function( item, config ) {
-      var result = config.checkBoxWidth;
-      var offset = this._getCheckBoxLeft( item, config );
-      return this._correctWidth( result, offset, 0, config );
-    },
-
-    _getItemLeft : function( item, columnIndex, config ) {
-      return config.itemLeft[ columnIndex ];
-    },
-
-    _getItemWidth : function( item, columnIndex, config ) {
-      return config.itemWidth[ columnIndex ];
-    },
-
-    _getItemImageLeft : function( item, columnIndex, config ) {
-      var result = config.itemImageLeft[ columnIndex ];
-      if( this._isTreeColumn( columnIndex, config ) ) {
-        result = this._correctOffset( result, item, config );
-      }
-      return result;
-    },
-
-    _getItemImageWidth : function( item, columnIndex, config ) {
-      var result = config.itemImageWidth[ columnIndex ];
-      if( this._isTreeColumn( columnIndex, config ) ) {
-        var offset = this._getItemImageLeft( item, columnIndex, config );
-        result = this._correctWidth( result, offset, columnIndex, config );
-      }
-      return result;
-    },
-
-    _getCellCheckLeft : function( item, columnIndex, config ) {
-      var result = config.itemCellCheckLeft[ columnIndex ];
-      if( this._isTreeColumn( columnIndex, config ) ) {
-        result = this._correctOffset( result, item, config );
-      }
-      return result;
-    },
-
-    _getCellCheckWidth : function( item, columnIndex, config ) {
-      var result = config.itemCellCheckWidth[ columnIndex ];
-      if( this._isTreeColumn( columnIndex, config ) ) {
-        var offset = this._getCellCheckLeft( item, columnIndex, config );
-        result = this._correctWidth( result, offset, columnIndex, config );
-      }
-      return result;
-    },
-
-    _getItemTextLeft : function( item, columnIndex, config ) {
-      var result = config.itemTextLeft[ columnIndex ];
-      if( this._isTreeColumn( columnIndex, config ) ) {
-        result = this._correctOffset( result, item, config );
-      }
-      return result;
-    },
-
-    _getItemTextWidth : function( item, columnIndex, config ) {
-      var result = config.itemTextWidth[ columnIndex ];
-      if( this._isTreeColumn( columnIndex, config ) ) {
-        var offset = this._getItemTextLeft( item, columnIndex, config );
-        result = this._correctWidth( result, offset, columnIndex, config );
-      }
-      return result;
-    },
-
-    _getCellPadding : function( config ) {
-      var manager = rwt.theme.AppearanceManager.getInstance();
-      return manager.styleFrom( config.baseAppearance + "-cell", {} ).padding;
-    },
-
-    _correctOffset : function( offset, item, config ) {
-      return offset + this._getIndentionOffset( item.getLevel() + 1, config );
-    },
-
-    _correctWidth : function( width, offset, column, config ) {
-      var result = width;
-      var columnEnd = config.itemLeft[ column ] + config.itemWidth[ column ];
-      var elementEnd = offset + result;
-      if( elementEnd > columnEnd ) {
-        result = Math.max( 0, columnEnd - offset );
-      }
-      return result;
-    },
-
-    _getAlignment : function( column, config ) {
-      return config.alignment[ column ] ? config.alignment[ column ] : "left";
-    },
-
-    _getIndentionOffset : function( level, config ) {
-      // NOTE [tb] : Shoud actually add the isTreeColumns own offset, assumes 0 now.
-      return config.indentionWidth * level;
-    },
-
-    _getColumnCount : function( config ) {
-      return Math.max( 1, config.columnCount );
-    },
-
-    _isTreeColumn : function( columnIndex, config ) {
-      return columnIndex === config.treeColumn;
-    },
-
-    //////////////
-    // DND-Support
-
-   supportsDrop : function() {
-     return true;
-   }
-
-  }
-
-} );
-
-}());
-
-/*******************************************************************************
- * Copyright (c) 2009, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.Menu", {
-  extend : rwt.widgets.base.Popup,
-  include : rwt.animation.VisibilityAnimationMixin,
-
-  construct : function() {
-    this.base( arguments );
-    this._layout = null;
-    this._preItem = null;
-    this._hasShowListener = false;
-    this._hasHideListener = false;
-    this._maxCellWidths = null;
-    this._menuLayoutScheduled = false;
-    this._opener = null;
-    this._mnemonics = false;
-    this._hoverItem = null;
-    this._openTimer = null;
-    this._closeTimer = null;
-    this._openItem = null;
-    this._itemsHiddenFlag = false;
-    this._hoverFirstItemFlag = false;
-    this.setHeight( "auto" );
-    this.setWidth( "auto" );
-    this._maxCellWidths = [ null, null, null, null, null ];
-    this._layout = new rwt.widgets.base.VerticalBoxLayout();
-    this._layout.set( {
-      top : 0,
-      right : 0,
-      bottom : 0,
-      left : 0,
-      anonymous : true
-    } );
-    this.add( this._layout );
-    this.addEventListener( "mousedown", this._unhoverSubMenu );
-    this.addEventListener( "mouseout", this._onMouseOut );
-    this.addEventListener( "mouseover", this._onMouseOver );
-    this.addEventListener( "keypress", this._onKeyPress );
-    this.addEventListener( "keydown", this._onKeyDown );
-    this._openTimer = new rwt.client.Timer( 250 );
-    this._openTimer.addEventListener( "interval", this._onopentimer, this );
-    this._closeTimer = new rwt.client.Timer( 250 );
-    this._closeTimer.addEventListener( "interval", this._onclosetimer, this );
-    this.addToDocument();
-  },
-
-  destruct : function() {
-    this._disposeObjects( "_openTimer", "_closeTimer", "_preItem", "_animation" );
-    this._disposeFields( "_lastActive",
-                         "_lastFocus",
-                         "_layout",
-                         "_opener",
-                         "_hoverItem",
-                         "_openItem" );
-  },
-
-  statics : {
-
-    menuDetectedByKey : function( evt ) {
-      if( evt.getKeyIdentifier() === "Apps" ) {
-        rwt.widgets.Menu.contextMenuHandler( evt );
-      }
-    },
-
-    menuDetectedByMouse : function( evt ) {
-      if( evt.getButton() === rwt.event.MouseEvent.C_BUTTON_RIGHT ) {
-        rwt.widgets.Menu.contextMenuHandler( evt );
-      }
-    },
-
-    contextMenuHandler : function( event ) {
-      var control = rwt.widgets.util.WidgetUtil.getControl( event.getTarget() );
-      var contextMenu = control ? control.getContextMenu() : null;
-      if( contextMenu != null ) {
-        event.stopPropagation();
-        event.preventDefault();
-        var pageX = rwt.event.MouseEvent.getPageX();
-        var pageY = rwt.event.MouseEvent.getPageY();
-        contextMenu.setLocation( pageX, pageY );
-        contextMenu.setOpener( control );
-        contextMenu.show();
-      }
-    },
-
-    getAllowContextMenu : function( target, domTarget ) {
-      var result = false;
-      switch( target.classname ) {
-        case "rwt.widgets.Label":
-        case "rwt.widgets.Text":
-        case "rwt.widgets.base.GridRow":
-        case "rwt.widgets.ListItem":
-        case "rwt.widgets.base.BasicText":
-        case "qx.ui.form.TextArea":
-          // NOTE: "enabled" can be "inherit", so it is not always a boolean
-          if( target.getEnabled() !== false ) {
-            if( rwt.widgets.Menu._hasNativeMenu( domTarget ) ) {
-              result = target.getContextMenu() == null;
-            }
-          }
-        break;
-      }
-      return result;
-    },
-
-
-    _hasNativeMenu : function( element ) {
-      var result;
-      var tagName = typeof element.tagName == "string" ? element.tagName.toLowerCase() : "";
-      if( tagName === "a" ) {
-        result = element.getAttribute( "href" ) && element.getAttribute( "target" ) !== "_rwt";
-      } else {
-        result = tagName === "input" || tagName === "textarea";
-      }
-      return result;
-    }
-
-  },
-
-  properties :  {
-
-    appearance : {
-      refine : true,
-      init : "menu"
-    }
-
-  },
-
-  events : {
-    "changeHoverItem" : "rwt.event.Event"
-  },
-
-  members : {
-
-    /////////
-    // Opener
-
-    setOpener : function( value ) {
-      this._opener = value;
-    },
-
-    getOpener : function( value ) {
-      return this._opener;
-    },
-
-    setMnemonics : function( value ) {
-      if( this._mnemonics !== value ) {
-        this._mnemonics = value;
-        var items = this._layout.getChildren();
-        for( var i = 0; i < items.length; i++ ) {
-          if( items[ i ].renderText ) {
-            items[ i ].renderText();
-          }
-        }
-      }
-    },
-
-    getMnemonics : function() {
-      return this._mnemonics;
-    },
-
-    // Overwritten:
-    getFocusRoot : function() {
-      var root = null;
-      if ( this._opener ) {
-        root = this._opener.getFocusRoot();
-      } else if( this._hasParent ) {
-        root = this.getParent().getFocusRoot();
-      }
-      return root;
-    },
-
-    /////////
-    // Layout
-
-    addMenuItemAt : function( menuItem, index ) {
-      // seperator does not have this function:
-      if( menuItem.setParentMenu ) {
-        // it is essential that this happens before the menuItem is added
-        menuItem.setParentMenu( this );
-      }
-      var position = index;
-      if( this._preItem && this._preItem !== menuItem ) {
-        position++;
-      }
-      this._layout.addAt( menuItem, position );
-    },
-
-    scheduleMenuLayout : function() {
-      if( this._menuLayoutScheduled !== true ) {
-        this._menuLayoutScheduled = true;
-        var children = this._layout.getChildren();
-        var length = children.length;
-        for( var i = 0; i < length; i++ ) {
-          children[ i ]._invalidatePreferredInnerWidth();
-          children[ i ].addToQueue( "layoutX" );
-        }
-        this.addToQueue( "menuLayout" );
-      }
-    },
-
-    _layoutPost : function( changes ) {
-      this.base( arguments, changes );
-      if( changes.menuLayout ) {
-        this._menuLayoutScheduled = false;
-        if( this.isSeeable() ) {
-          this._afterAppear(); // recomputes the location
-        }
-      }
-    },
-
-    getMaxCellWidth : function( cell ) {
-      if( this._maxCellWidths[ cell ] == null ) {
-        var max = 0;
-        var children = this._layout.getChildren();
-        var length = children.length;
-        for( var i = 0; i < length; i++ ) {
-          if( children[ i ].getPreferredCellWidth ) {
-            max = Math.max( max, children[ i ].getPreferredCellWidth( cell ) );
-          }
-        }
-        this._maxCellWidths[ cell ] = max;
-      }
-      if( cell === 0 && this._maxCellWidths[ 0 ] === 0 && this.getMaxCellWidth( 1 ) === 0 ) {
-        this._maxCellWidths[ cell ] = 13;
-      }
-      return this._maxCellWidths[ cell ];
-    },
-
-    invalidateMaxCellWidth : function( cell ) {
-      this._maxCellWidths[ cell ] = null;
-    },
-
-    invalidateAllMaxCellWidths : function() {
-      for( var i = 0; i < 5; i++ ) {
-        this._maxCellWidths[ i ] = null;
-      }
-    },
-
-    // needed for the menu-manager:
-    isSubElement : function( vElement, vButtonsOnly ) {
-      var ret = false;
-      if (    ( vElement.getParent() === this._layout )
-           || ( ( !vButtonsOnly ) && ( vElement === this ) ) ) {
-        ret = true;
-      }
-      if( !ret ) {
-        var a = this._layout.getChildren(), l=a.length;
-        for ( var i = 0; i < l; i++ ) {
-          if (    this.hasSubmenu( a[ i ] )
-               && a[ i ].getMenu().isSubElement( vElement, vButtonsOnly ) )
-          {
-            ret = true;
-          }
-        }
-      }
-      return ret;
-    },
-
-    ////////
-    // Hover
-
-    setHoverItem : function( value, fromKeyEvent ) {
-      var newHover = value ? value : this._openItem;
-      if( this._hoverItem && this._hoverItem != newHover ) {
-        this._hoverItem.removeState( "over" );
-      }
-      if( newHover ) {
-        newHover.addState( "over" );
-      }
-      this._hoverItem = newHover;
-      if( !fromKeyEvent ) {
-        // handle open timer
-        this._openTimer.setEnabled( false );
-        if( this.hasSubmenu( newHover ) && ( this._openItem != newHover ) ) {
-          this._openTimer.setEnabled( true );
-        }
-        // handle close tiemr
-        if( this._openItem ) {
-          if( this._openItem == newHover || newHover == null ) {
-            this._closeTimer.setEnabled( false );
-          } else if( newHover != null ) {
-            this._closeTimer.setEnabled( true );
-          }
-        }
-      }
-      this.dispatchSimpleEvent( "changeHoverItem" );
-    },
-
-    getHoverItem : function() {
-      return this._hoverItem;
-    },
-
-    hoverFirstItem : function() {
-      if( this._isDisplayable && !this._itemsHiddenFlag ) {
-        this.setHoverItem( null, true );
-        this._hoverNextItem();
-        this.removeState( "hoverFristItem" );
-      } else {
-        this.addState( "hoverFristItem" );
-      }
-    },
-
-    _hoverNextItem : function() {
-      // About _hoverNext/Previous:
-      // the index used for the array of visible children can have
-      // "-1" as a valid value (as returned by indexOf), meaning a position
-      // between the last and the first item. This is value is needed when no
-      // item is hovered or the index-position is wrapping around.
-      var current;
-      var next = null;
-      var children = this._layout.getVisibleChildren();
-      var index = children.indexOf( this._hoverItem );
-      var startIndex = index;
-      do {
-        index++;
-        if( index > children.length ) {
-          index = -1;
-        }
-        current = index >= 0 ? children[ index ] : null;
-        if(   current
-           && current.isEnabled()
-           && current.classname == "rwt.widgets.MenuItem" )
-        {
-          next = current;
-        }
-      } while( !next && ( index != startIndex ) );
-      this.setHoverItem( next, true );
-    },
-
-    _hoverPreviousItem : function() {
-      var current;
-      var prev = null;
-      var children = this._layout.getVisibleChildren();
-      var index = children.indexOf( this._hoverItem );
-      var startIndex = index;
-      do {
-        index--;
-        if( index < -1 ) {
-          index = children.length;
-        }
-        current = index >= 0 ? children[ index ] : null;
-        if(   current
-           && current.isEnabled()
-           && current.classname == "rwt.widgets.MenuItem" )
-        {
-          prev = current;
-        }
-      } while( !prev && ( index != startIndex ) );
-      this.setHoverItem( prev, true );
-    },
-
-    //////////////////
-    // Pop-Up handling
-
-    // overwritten:
-    _makeActive : function() {
-      this._lastActive = this.getFocusRoot().getActiveChild();
-      this._lastFocus = this.getFocusRoot().getFocusedChild();
-      this.getFocusRoot().setActiveChild(this);
-    },
-
-    // overwritten:
-    _makeInactive : function() {
-      var vRoot = this.getFocusRoot();
-      vRoot.setActiveChild( this._lastActive );
-      vRoot.setFocusedChild( this._lastFocus );
-    },
-
-    _beforeAppear : function() {
-      // original qooxdoo code: (1 line)
-      rwt.widgets.base.Parent.prototype._beforeAppear.call( this );
-      rwt.widgets.util.MenuManager.getInstance().add( this );
-      this.bringToFront();
-      this._makeActive();
-      this._menuShown();
-      rwt.widgets.util.MnemonicHandler.getInstance().deactivate();
-    },
-
-    _beforeDisappear : function() {
-      // original qooxdoo code: (1 line)
-      rwt.widgets.base.Parent.prototype._beforeDisappear.call( this );
-      rwt.widgets.util.MenuManager.getInstance().remove( this );
-      if( this.getFocusRoot() ) {
-        // if the menu is disposed while visible, it might not have a focusRoot
-        this._makeInactive();
-      }
-      this.setOpenItem( null );
-      this.setHoverItem( null );
-      if( this._opener instanceof rwt.widgets.MenuItem ) {
-        var parentMenu = this._opener.getParentMenu();
-        if( parentMenu instanceof rwt.widgets.MenuBar ) {
-          this._opener.removeState( "pressed" );
-          if( parentMenu.getOpenItem() == this._opener ) {
-            parentMenu.setOpenItem( null );
-          }
-        }
-      }
-      this._menuHidden();
-    },
-
-    //////////
-    // Submenu
-
-    hasSubmenu : function( item ) {
-      return item && item.getMenu && item.getMenu();
-    },
-
-   _onopentimer : function( event ) {
-      this._openTimer.stop();
-      this.setOpenItem( this._hoverItem );
-      // fix for bug 299350
-      this._closeTimer.stop();
-    },
-
-    _onclosetimer : function( event ) {
-      this._closeTimer.stop();
-      this.setOpenItem( null );
-    },
-
-    openByMnemonic : function( item ) {
-      this.setOpenItem( item, true );
-      this.setHoverItem( null, true );
-    },
-
-    setOpenItem : function( item, byMnemonic ) {
-      if( this._openItem && this._openItem.getMenu() ) {
-        this._openItem.setSubMenuOpen( false );
-        var oldMenu = this._openItem.getMenu();
-        oldMenu.hide();
-        if( this.getFocusRoot() ) {
-          this._makeActive();
-        }
-      }
-      this._openItem = item;
-      // in theory an item could have lost it's assigned menu (by eval-code)
-      // since the timer has been started/the item opend, so check for it
-      if( item && item.getMenu() ) {
-        var subMenu = item.getMenu();
-        item.setSubMenuOpen( true );
-        subMenu.setOpener( item );
-        var itemNode = item.getElement();
-        var thisNode = this.getElement();
-        // the position is relative to the document, therefore we need helper
-        subMenu.setTop( rwt.html.Location.getTop( itemNode ) - 2 );
-        subMenu.setLeft(   rwt.html.Location.getLeft( thisNode )
-                         + thisNode.offsetWidth
-                         - 3 );
-        subMenu.setMnemonics( byMnemonic === true );
-        subMenu.show();
-        if( byMnemonic ) {
-          subMenu.hoverFirstItem();
-        }
-      }
-    },
-
-    /////////////////
-    // Event-handling
-
-    _onMouseOut : function( event ) {
-      var target = event.getTarget();
-      var related = event.getRelatedTarget();
-      if ( target == this || ( related != this && !this.contains( related ) ) )
-      {
-        this.setHoverItem( null );
-      }
-    },
-
-   _onMouseOver : function( event ) {
-     var target = event.getTarget();
-     if( target != this ) {
-       this.setHoverItem( target );
-     }
-     this._unhoverSubMenu();
-   },
-
-   _unhoverSubMenu : function() {
-     if( this._openItem ) {
-       var subMenu = this._openItem.getMenu();
-       subMenu.setOpenItem( null );
-       subMenu.setHoverItem( null );
-     }
-   },
-
-   _onKeyDown :function( event ) {
-     if( this._mnemonics ) {
-       var keyCode = event.getKeyCode();
-       var isChar =    !isNaN( keyCode )
-                    && rwt.event.EventHandlerUtil.isAlphaNumericKeyCode( keyCode );
-       if( isChar ) {
-         var event = {
-           "type" : "trigger",
-           "charCode" : keyCode,
-           "success" : false
-         };
-         var items = this._layout.getChildren();
-         for( var i = 0; i < items.length; i++ ) {
-           if( items[ i ].handleMnemonic ) {
-             items[ i ].handleMnemonic( event );
-           }
-         }
-       }
-     }
-
-   },
-
-    _onKeyPress : function( event ) {
-      switch( event.getKeyIdentifier() ) {
-        case "Up":
-          this._handleKeyUp( event );
-        break;
-        case "Down":
-          this._handleKeyDown( event );
-        break;
-        case "Left":
-          this._handleKeyLeft( event );
-        break;
-        case "Right":
-          this._handleKeyRight( event );
-        break;
-        case "Enter":
-          this._handleKeyEnter( event );
-        break;
-      }
-    },
-
-    _handleKeyUp : function( event ) {
-      if( this._openItem ) {
-        this._openItem.getMenu()._hoverPreviousItem();
-      } else {
-        this._hoverPreviousItem();
-      }
-      event.preventDefault();
-      event.stopPropagation();
-    },
-
-    _handleKeyDown : function( event ) {
-      if( this._openItem ) {
-        this._openItem.getMenu()._hoverNextItem();
-      } else {
-        this._hoverNextItem();
-      }
-      event.preventDefault();
-      event.stopPropagation();
-    },
-
-    _handleKeyLeft : function( event ) {
-      var parentMenu = this._opener ? this._opener.getParentMenu() : null;
-      if( parentMenu instanceof rwt.widgets.Menu ) {
-        var hover = this._opener;
-        parentMenu.setOpenItem( null );
-        parentMenu.setHoverItem( hover, true );
-        event.preventDefault();
-        event.stopPropagation();
-      }
-    },
-
-    _handleKeyRight : function( event ) {
-      if( this.hasSubmenu( this._hoverItem ) ) {
-        this._onopentimer();
-        this.setHoverItem( null, true );
-        this._openItem.getMenu().hoverFirstItem();
-        event.preventDefault();
-        event.stopPropagation();
-      }
-    },
-
-    _handleKeyEnter : function( event ) {
-      if( this.hasSubmenu( this._hoverItem ) ) {
-        this._onopentimer();
-        this.setHoverItem( null, true );
-        this._openItem.getMenu().hoverFirstItem();
-      } else if( this._hoverItem ){
-        this._hoverItem.execute();
-        rwt.widgets.util.MenuManager.getInstance().update();
-      }
-      event.preventDefault();
-      event.stopPropagation();
-    },
-
-   ////////////////
-   // Client-Server
-
-    setHasShowListener : function( value ) {
-      if( !this.hasState( "rwt_BAR" ) ) {
-        this._hasShowListener = value;
-      }
-    },
-
-    setHasHideListener : function( value ) {
-      if( !this.hasState( "rwt_BAR" ) ) {
-        this._hasHideListener = value;
-      }
-    },
-
-   _menuShown : function() {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        if( this._hasShowListener ) {
-          // create preliminary item
-          if( this._preItem == null ) {
-            this._preItem = new rwt.widgets.MenuItem( "push" );
-            this._preItem.setText( "..." );
-            this._preItem.setEnabled( false );
-            this.addMenuItemAt( this._preItem, 0 );
-          }
-          // hide all but the preliminary item
-          var items = this._layout.getChildren();
-          for( var i = 0; i < items.length; i++ ) {
-            var item = items[ i ];
-            item.setDisplay( false );
-          }
-          this._preItem.setDisplay( true );
-          this._itemsHiddenFlag = true;
-          if( this.getWidth() < 60 ) {
-            this.setWidth( 60 );
-          }
-          //this.setDisplay( true ); //wouldn't be called if display was false
-          // send event
-          rwt.remote.Server.getInstance().getRemoteObject( this ).notify( "Show" );
-        } else {
-          var display = this._layout.getChildren().length !== 0;
-          //no items and no listener to add some:
-          this.setDisplay( display );
-          if( display ) {
-            if( this._hoverFirstItemFlag ) {
-              this.hoverFirstItem();
-            }
-          }
-        }
-      }
-    },
-
-    _menuHidden : function() {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        if( this._hasHideListener ) {
-          rwt.remote.Server.getInstance().getRemoteObject( this ).notify( "Hide" );
-        }
-      }
-    },
-
-    unhideItems : function( reveal ) {
-      if( reveal ) {
-        var items = this._layout.getChildren();
-        for( var i = 0; i < items.length; i++ ) {
-          items[ i ].setDisplay( true );
-        }
-        if( this._preItem ) {
-          this._preItem.setDisplay( false );
-        }
-        this._itemsHiddenFlag = false;
-        if( this._hoverFirstItemFlag ) {
-          this.hoverFirstItem();
-        }
-      } else {
-        this.hide();
-      }
-      this._hoverFirstItemFlag = false;
-    },
-
-    // Called to open a popup menu from server side
-    showMenu : function( menu, x, y ) {
-      if( menu != null ) {
-        menu._renderAppearance();
-        menu.setLocation( x, y );
-        menu.show();
-      }
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.Menu", {
-
-  factory : function( properties ) {
-    var result;
-    // TODO [tb] : split into Menu and MenuBar, or unify parent handling
-    if( properties.style.indexOf( "BAR" ) != -1 ) {
-      result = new rwt.widgets.MenuBar();
-    } else {
-      result = new rwt.widgets.Menu();
-    }
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getWidgetDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : [
-    "parent",
-    "bounds",
-    "enabled",
-    "customVariant"
-  ],
-
-  propertyHandler : {
-    "parent" : function( widget, value ) {
-      if( widget.hasState( "rwt_BAR" ) ) {
-        rwt.remote.HandlerUtil.callWithTarget( value, function( parent ) {
-          widget.setParent( parent );
-        } );
-      }
-    },
-    "bounds" : function( widget, value ) {
-      if( widget.hasState( "rwt_BAR" ) ) {
-        widget.setLeft( value[ 0 ] );
-        widget.setTop( value[ 1 ] );
-        widget.setWidth( value[ 2 ] );
-        widget.setHeight( value[ 3 ] );
-      }
-    }
-  },
-
-  listeners : [
-    "Show",
-    "Hide",
-    "Help"
-  ],
-
-  listenerHandler : {
-    "Help" : rwt.remote.HandlerUtil.getControlListenerHandler( "Help" )
-  },
-
-  methods : [
-    "unhideItems",
-    "showMenu"
-  ],
-
-  methodHandler : {
-    "unhideItems" : function( widget, args ) {
-      if( !widget.hasState( "rwt_BAR" ) ) {
-        widget.unhideItems( args.reveal );
-      }
-    },
-    "showMenu" : function( widget, args ) {
-      if( widget.hasState( "rwt_POP_UP" ) ) {
-        widget.showMenu( widget, args.x, args.y );
-      }
-    }
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2002, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-/**
- * This class contains static listener functions for common events.
- */
-rwt.qx.Class.define( "rwt.remote.EventUtil", {
-
-  statics : {
-    _suspended : false,
-
-    setSuspended : function( value ) {
-      this._suspended = value;
-    },
-
-    getSuspended : function() {
-      return this._suspended;
-    },
-
-    DOUBLE_CLICK_TIME : 500,
-
-    _capturingWidget : null,
-    _lastMouseDown : {
-      widget : null,
-      button : "",
-      x : -1,
-      y : -1,
-      mouseUpCount : 0
-    },
-    _shiftKey : false,
-    _ctrlKey : false,
-    _altKey : false,
-    _metaKey : false,
-
-    eventTimestamp : function() {
-      var init = rwt.runtime.System.getInstance();
-      return new Date().getTime() - init.getStartupTime();
-    },
-
-    widgetDefaultSelected : function( evt, target ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        var server = rwt.remote.Server.getInstance();
-        var properties = {};
-        rwt.remote.EventUtil.addModifierToProperties( properties );
-        var remoteObject = server.getRemoteObject( target ? target : evt.getTarget() );
-        remoteObject.notify( "DefaultSelection", properties );
-      }
-    },
-
-    widgetSelected : function( evt ) {
-      var left = evt.getTarget().getLeft();
-      var top = evt.getTarget().getTop();
-      var width = evt.getTarget().getWidth();
-      var height = evt.getTarget().getHeight();
-      rwt.remote.EventUtil.notifySelected( evt.getTarget(), left, top, width, height );
-    },
-
-    notifySelected : function( target, left, top, width, height, detail ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        var server = rwt.remote.Server.getInstance();
-        var properties;
-        if( arguments.length === 2 ) {
-          properties = left;
-        } else {
-          properties = {
-              "x" : left,
-              "y" : top,
-              "width" : width,
-              "height" : height,
-              "detail" : detail
-          };
-        }
-        rwt.remote.EventUtil.addModifierToProperties( properties );
-        server.getRemoteObject( target ).notify( "Selection", properties );
-      }
-    },
-
-    notifyDefaultSelected : function( target, left, top, width, height, detail ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        var server = rwt.remote.Server.getInstance();
-        var properties;
-        if( arguments.length === 2 ) {
-          properties = left;
-        } else {
-          properties = {
-              "x" : left,
-              "y" : top,
-              "width" : width,
-              "height" : height,
-              "detail" : detail
-          };
-        }
-        rwt.remote.EventUtil.addModifierToProperties( properties );
-        server.getRemoteObject( target ).notify( "DefaultSelection", properties );
-      }
-    },
-
-    addModifierToProperties : function( properties, event ) {
-      var isMac = rwt.client.Client.getPlatform() === "mac";
-      var commandKey = isMac && ( event ? event.metaKey : rwt.remote.EventUtil._metaKey ) === true;
-      properties.shiftKey = event ? event.shiftKey : rwt.remote.EventUtil._shiftKey;
-      properties.ctrlKey = ( event ? event.ctrlKey : rwt.remote.EventUtil._ctrlKey ) || commandKey;
-      properties.altKey = event ? event.altKey : rwt.remote.EventUtil._altKey;
-    },
-
-    _getKeyModifier : function() {
-      var modifier = ""; // TODO [tb] : use real array for json protocol
-      var commandKey
-        = rwt.client.Client.getPlatform() === "mac" && rwt.remote.EventUtil._metaKey;
-      if( rwt.remote.EventUtil._shiftKey ) {
-        modifier += "shift,";
-      }
-      if( rwt.remote.EventUtil._ctrlKey || commandKey ) {
-        modifier += "ctrl,";
-      }
-      if( rwt.remote.EventUtil._altKey ) {
-        modifier += "alt,";
-      }
-      return modifier;
-    },
-
-    focusGained : function( evt ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( evt.getTarget() );
-        remoteObject.notify( "FocusIn" );
-      }
-    },
-
-    focusLost : function( evt ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( evt.getTarget() );
-        remoteObject.notify( "FocusOut" );
-      }
-    },
-
-    ///////////////////////
-    // Mouse event handling
-
-    mouseDown : function( evt ) {
-      if(    !rwt.remote.EventUtil.getSuspended()
-          && rwt.remote.EventUtil._isRelevantMouseEvent( this, evt ) )
-      {
-        // disabled capturing as it interferes with Combo capturing
-        // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=262171
-        // from now on, redirect mouse event to this widget
-        // this.setCapture( true );
-        rwt.remote.EventUtil._capturingWidget = this;
-        // Collect request parameters and send
-        rwt.remote.EventUtil._notifyMouseListeners( this, evt, "MouseDown" );
-      }
-    },
-
-    mouseUp : function( evt ) {
-      if(    !rwt.remote.EventUtil.getSuspended()
-          && rwt.remote.EventUtil._isRelevantMouseEvent( this, evt ) )
-      {
-        // disabled capturing as it interferes with Combo capturing
-        // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=262171
-        // release mouse event capturing
-        // this.setCapture( false );
-        rwt.remote.EventUtil._capturingWidget = null;
-        // Add mouse-up request parameter
-        rwt.remote.EventUtil._notifyMouseListeners( this, evt, "MouseUp" );
-      }
-    },
-
-    mouseDoubleClick : function( evt ) {
-      if(    !rwt.remote.EventUtil.getSuspended()
-          && rwt.remote.EventUtil._isRelevantMouseEvent( this, evt ) )
-      {
-        // disabled capturing as it interferes with Combo capturing
-        // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=262171
-        // from now on, redirect mouse event to this widget
-        // this.setCapture( true );
-        rwt.remote.EventUtil._capturingWidget = this;
-        // Add parameters for double-click event
-        if( rwt.remote.EventUtil._isDoubleClick( this, evt ) ) {
-          rwt.remote.EventUtil._clearLastMouseDown();
-          rwt.remote.EventUtil._notifyMouseListeners( this, evt, "MouseDoubleClick" );
-        } else {
-          // Store relevant data of current event to detect double-clicks
-          var lastMouseDown = rwt.remote.EventUtil._lastMouseDown;
-          lastMouseDown.widget = this;
-          lastMouseDown.button = evt.getButton();
-          lastMouseDown.x = evt.getPageX();
-          lastMouseDown.y = evt.getPageY();
-          lastMouseDown.mouseUpCount = 0;
-          rwt.client.Timer.once( rwt.remote.EventUtil._clearLastMouseDown,
-                                this,
-                                rwt.remote.EventUtil.DOUBLE_CLICK_TIME );
-        }
-      }
-    },
-
-    mouseUpCounter : function( evt ) {
-      if(    !rwt.remote.EventUtil.getSuspended()
-          && rwt.remote.EventUtil._isRelevantMouseEvent( this, evt ) )
-      {
-        // disabled capturing as it interferes with Combo capturing
-        // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=262171
-        // release mouse event capturing
-        // this.setCapture( false );
-        rwt.remote.EventUtil._capturingWidget = null;
-        // increase number of mouse-up events since last stored mouse down
-        rwt.remote.EventUtil._lastMouseDown.mouseUpCount += 1;
-      }
-    },
-
-    /**
-     * Determines whether the event is relevant (i.e. should be sent) for the
-     * given widget.
-     * @param widget - the listening widget
-     * @param evt - the mouse event
-     */
-    _isRelevantMouseEvent : function( widget, evt ) {
-      var result = true;
-      if(    widget !== rwt.remote.EventUtil._capturingWidget
-          && widget !== evt.getOriginalTarget() )
-      {
-        // find parent control and ensure that it is the same as the widget-
-        // parameter. Otherwise the mouse event is ignored.
-        var widgetManager = rwt.remote.WidgetManager.getInstance();
-        var target = evt.getOriginalTarget();
-        var control = widgetManager.findEnabledControl( target );
-        result = widget === control;
-      }
-      return result;
-    },
-
-    _clearLastMouseDown : function() {
-      var lastMouseDown = rwt.remote.EventUtil._lastMouseDown;
-      lastMouseDown.widget = null;
-      lastMouseDown.button = "";
-      lastMouseDown.mouseUpCount = 0;
-      lastMouseDown.x = -1;
-      lastMouseDown.y = -1;
-    },
-
-    _isDoubleClick : function( widget, evt ) {
-      // TODO [rh] compare last position with current position and don't
-      //      report double-click if deviation is too big
-      var lastMouseDown = rwt.remote.EventUtil._lastMouseDown;
-      return    lastMouseDown.mouseUpCount === 1
-             && lastMouseDown.widget === widget
-             && lastMouseDown.button === rwt.event.MouseEvent.C_BUTTON_LEFT
-             && lastMouseDown.button === evt.getButton();
-    },
-
-    _notifyMouseListeners : function( widget, evt, eventType ) {
-      var button = rwt.remote.EventUtil._determineMouseButton( evt );
-      var modifier = rwt.remote.EventUtil._getKeyModifier();
-      var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( widget );
-      var properties = {
-        "button" : button,
-        "x" : evt.getPageX(),
-        "y" : evt.getPageY(),
-        "time" : this.eventTimestamp()
-      };
-      rwt.remote.EventUtil.addModifierToProperties( properties );
-      remoteObject.notify( eventType, properties );
-    },
-
-    /**
-     * Returns an integer value that represents the button property from the
-     * given mouse event.
-     * 0 = unknown
-     * 1 = left button
-     * 2 = middle button
-     * 3 = right button
-     */
-    _determineMouseButton : function( evt ) {
-      var result = 0;
-      switch( evt.getButton() ) {
-        case rwt.event.MouseEvent.C_BUTTON_LEFT:
-          result = 1;
-          break;
-        case rwt.event.MouseEvent.C_BUTTON_MIDDLE:
-          result = 2;
-          break;
-        case rwt.event.MouseEvent.C_BUTTON_RIGHT:
-          result = 3;
-          break;
-      }
-      return result;
-    },
-
-    helpRequested : function( evt ) {
-      if( evt.getKeyIdentifier() === "F1" ) {
-        // stop further handling and default handling by the browser
-        evt.stopPropagation();
-        evt.preventDefault();
-        // send help request to server
-        var widget = evt.getTarget();
-        var widgetManager = rwt.remote.WidgetManager.getInstance();
-        var id = widgetManager.findIdByWidget( widget );
-        if( id === null ) {
-          // find parent control for the widget that received the event in case
-          // it wasn't the control itself that received the event
-          widget = widgetManager.findControl( widget );
-          id = widgetManager.findIdByWidget( widget );
-        }
-        if( id != null ) {
-          var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( widget );
-          remoteObject.notify( "Help" );
-        }
-      }
-    },
-
-    menuDetectedByKey : function( evt ) {
-      if( evt.getKeyIdentifier() === "Apps" ) {
-        // stop further handling and default handling by the browser
-        evt.stopPropagation();
-        evt.preventDefault();
-        var x = rwt.event.MouseEvent.getPageX();
-        var y = rwt.event.MouseEvent.getPageY();
-        rwt.remote.EventUtil.sendMenuDetected( evt.getTarget(), x, y );
-      }
-    },
-
-    menuDetectedByMouse : function( evt ) {
-      if( evt.getButton() === rwt.event.MouseEvent.C_BUTTON_RIGHT ) {
-        // stop further handling and default handling by the browser
-        evt.stopPropagation();
-        evt.preventDefault();
-        var x = evt.getPageX();
-        var y = evt.getPageY();
-        rwt.remote.EventUtil.sendMenuDetected( evt.getTarget(), x, y );
-      }
-    },
-
-    sendMenuDetected : function( widget, x, y ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        // send menu detect request to server
-        var widgetManager = rwt.remote.WidgetManager.getInstance();
-        // find parent control for the widget that received the event in case
-        // it wasn't the control itself that received the event
-        while( widget != null && !widgetManager.isControl( widget ) ) {
-          widget = widget.getParent ? widget.getParent() : null;
-        }
-        var id = widgetManager.findIdByWidget( widget );
-        if( id != null ) {
-          var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( widget );
-          remoteObject.notify( "MenuDetect", { "x" : x, "y" : y } );
-        }
-      }
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2009, 2012 EclipseSource.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.base.WidgetToolTip", {
-  type : "singleton",
-  extend : rwt.widgets.base.ToolTip,
-  include : rwt.animation.VisibilityAnimationMixin,
-
-  construct : function() {
-    this.base( arguments );
-    this._atom._createLabel();
-    this._atom.getLabelObject().setMode( "html" );
-  },
-
-  members : {
-
-    _applyBoundToWidget : function( value, old ) {
-      this.base( arguments, value, old );
-      this.updateText( value );
-      var manager = rwt.widgets.util.ToolTipManager.getInstance();
-      manager.setCurrentToolTip( null );
-    },
-
-    updateText : function( widget ) {
-      this._atom.setLabel( widget.getUserData( "toolTipText" ) );
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2009, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Mixin.define( "rwt.widgets.util.GraphicsMixin", {
-
-  destruct : function() {
-    this._gfxProperties = null;
-    this._gfxData = null;
-    this._gfxCanvas = null;
-  },
-
-  statics : {
-
-    getSupportsShadows : function() {
-      if( this._shadowSupport === undefined ) {
-        var engine = rwt.client.Client.getEngine();
-        var version = rwt.client.Client.getVersion();
-        this._shadowSupport = false;
-        switch( engine ) {
-          case "gecko":
-            this._shadowSupport = version >= 4;
-          break;
-          case "mshtml":
-            this._shadowSupport = version >= 7;
-          break;
-          case "opera":
-            this._shadowSupport = version >= 11.6;
-          break;
-          case "webkit":
-            this._shadowSupport = version >= 532.9;
-          break;
-        }
-      }
-      return this._shadowSupport;
-    }
-
-  },
-
-  members : {
-    // NOTE : "gfx" (short for "graphics") is used in field-names to prevent
-    //        potential name-clashes with the classes including this mixin.
-    // TODO [tb] : refactor to work entirely with gfxData (with setter/getter)
-    _gfxData : null,
-    _gfxProperties : null,
-    _gfxCanvas : null,
-    _gfxEnabled : false,
-    _gfxBorderEnabled : false,
-    _gfxBackgroundEnabled : false,
-    _gfxCanvasAppended : false,
-
-    //////////
-    // GFX-API
-
-    _applyBackgroundGradient : function( value, old ) {
-      // color-theme values are NOT supported for gradient
-      this.setGfxProperty( "gradient", value );
-      this._handleGfxBackground();
-    },
-
-    _applyShadow : rwt.util.Variant.select( "qx.client", {
-      "default" : function( value, oldValue ) {
-        if( rwt.widgets.util.GraphicsMixin.getSupportsShadows() ) {
-          var isInset = value != null && value[ 0 ];
-          var hasOpacity = this.getOpacity() !== 1 && this.getOpacity() !== null;
-          var opacityBug = value != null && hasOpacity && rwt.client.Client.isMshtml();
-          if( isInset || opacityBug ) {
-            this.setGfxProperty( "shadow", null );
-          } else {
-            this.setGfxProperty( "shadow", value );
-          }
-          this.setGfxProperty( "shadowLayouted", null );
-          this._handleGfxShadow();
-        }
-      },
-      "newmshtml" : function( value, oldValue ) {
-        // Use CSS3 shadows for i9+
-        this.base( arguments, value, oldValue );
-      }
-    } ),
-
-
-    _applyOpacity : function( value, oldValue ) {
-      this.base( arguments, value, oldValue );
-      this._checkAntiAlias( value );
-      this._applyShadow( this.getShadow() );
-   },
-
-    _checkAntiAlias : rwt.util.Variant.select( "qx.client", {
-      "default" : rwt.util.Functions.returnTrue,
-      "mshtml" : function( opacity ) {
-        if( this._gfxData && this._gfxData.backgroundInsert ) {
-          var antiAlias = opacity === 1 || opacity === null;
-          rwt.graphics.VML._setAntiAlias( this._gfxData.backgroundShape, antiAlias );
-        }
-      }
-    } ),
-
-    //overwritten
-    _styleBackgroundColor : function( value ) {
-      if( this._gfxBackgroundEnabled ) {
-        this.setGfxProperty( "backgroundColor", value );
-        if( this.getGfxProperty( "fillType" ) == "solid" && this._isCanvasReady() ) {
-          this._renderGfxBackground();
-        }
-      } else {
-        this.base( arguments, value );
-      }
-    },
-
-    //overwritten
-    _styleBackgroundImage : function( value ) {
-      if( this._gfxBackgroundEnabled ) {
-        this.setGfxProperty( "backgroundImage", value );
-        if(    this.getGfxProperty( "fillType" ) == "image"
-            && this._isCanvasReady()
-            && value != null )
-        {
-          this._renderGfxBackground();
-        } else {
-          this._handleGfxBackground();
-        }
-      } else {
-        if( value == null && this.getGfxProperty( "gradient" ) != null ) {
-          this._handleGfxBackground();
-        } else {
-          this.base( arguments, value );
-        }
-      }
-    },
-
-    // Overwritten:
-    renderBorder : function( changes ) {
-      var value = this.__borderObject;
-      if( value && value.getStyle() === "rounded" ) {
-        this._styleGfxBorder( value.getWidths(), value.getColor(), value.getRadii() );
-      } else {
-        if( this._gfxBorderEnabled ) {
-          this._styleGfxBorder( null, null, null );
-        }
-        this.base( arguments, changes );
-      }
-    },
-
-    _styleGfxBorder : function( width, color, radii ) {
-      // NOTE: widgets with no dimensions of their own wont work together
-      //       with a gfxBorder (accepted bug)
-      var max = 0;
-      if( width ) {
-        for( var i = 0; i < width.length; i++ ) {
-          max = Math.max( max, width[ i ] );
-        }
-      }
-      var renderRadii;
-      if( width != null && radii != null && max > 0 ) {
-        renderRadii = [];
-        for( var i = 0; i < 4; i++ ) {
-          var prev = i > 0 ? i - 1 : 3;
-          if( width[ i ] === 0 || width[ prev ] === 0 ) {
-            renderRadii[ i ] = 0;
-          } else {
-            renderRadii[ i ] = radii[ i ];
-          }
-        }
-      } else {
-        renderRadii = radii;
-      }
-      this.setGfxProperty( "borderWidths", width );
-      this.setGfxProperty( "borderMaxWidth", max );
-      this.setGfxProperty( "borderColor", color );
-      this.setGfxProperty( "borderRadii", renderRadii );
-       // force the shapes to be re-layouted:
-      this.setGfxProperty( "backgroundLayouted", null );
-      this.setGfxProperty( "shadowLayouted", null );
-      this._handleGfxBorder();
-      this._handleCssRadii( radii );
-    },
-
-    _handleCssRadii : rwt.util.Variant.select( "qx.client", {
-      "default" : rwt.util.Functions.returnTrue,
-      "newmshtml" : function( radii ) {
-        // NOTE : While the actual border is rendred with vector graphics, CSS radii
-        //        are set anyway to provide clipping and rounded CSS-shadows
-        var props = rwt.html.Border._BORDERRADII;
-        for( var i = 0; i < 4; i++ ) {
-          this._style[ props[ i ] ] = radii ? radii[ i ] + "px" : "";
-        }
-      }
-    } ),
-
-    setGfxProperty : function( key, value ) {
-      if( this._gfxProperties === null ) {
-       this._gfxProperties = {};
-      }
-      this._gfxProperties[ key ] = value;
-    },
-
-    getGfxProperty : function( key ) {
-      var value = this._gfxProperties !== null ? this._gfxProperties[ key ] : null;
-      return typeof value != "undefined" ? value : null;
-    },
-
-    ///////////////////
-    // internals - main
-
-    _handleGfxBorder : function() {
-      var useBorder =      this.getGfxProperty( "borderRadii" ) != null
-                        && this.getGfxProperty( "borderWidths" ) != null
-                        && this.getGfxProperty( "borderColor" ) != null;
-      var toggle = ( this._gfxBorderEnabled != useBorder );
-      if( toggle ) {
-        if( useBorder ) {
-          this._gfxBorderEnabled = true;
-        } else {
-          this._gfxBorderEnabled = false;
-          this._resetTargetNode();
-        }
-        this._handleGfxBackground(); // Using a gfxBorder forces the use of gfxBackground
-        this._handleGfxStatus();
-      }
-      // render or reset
-      // TODO [tb] : order matters (_isCanvasReady first), refactor
-      if( this._isCanvasReady() && useBorder ) {
-        this._renderGfxBorder();
-        if( !this._willBeLayouted() ) {
-          this._layoutShapes();
-        }
-      } else if( toggle && !useBorder ) {
-        this._prepareBackgroundShape();
-      }
-    },
-
-    _handleGfxBackground : function() {
-      var useImage = this.getBackgroundImage() != null;
-      var useGradient = false;
-      if( useImage ){
-        this.setGfxProperty( "fillType", "image" );
-      } else {
-        useGradient = this.getGfxProperty( "gradient" ) != null;
-        if( useGradient ) {
-          this.setGfxProperty( "fillType", "gradient" );
-        } else {
-          this.setGfxProperty( "fillType", "solid" );
-        }
-      }
-      var useBackground = ( useGradient || this._gfxBorderEnabled );
-      var toggle = ( this._gfxBackgroundEnabled != useBackground );
-      if( toggle ) {
-        if( useBackground ) {
-          var backgroundColor = this.getStyleProperty( "backgroundColor" );
-          this.removeStyleProperty( "backgroundColor" );
-          this.setGfxProperty( "backgroundColor", backgroundColor );
-          var backgroundImage = this.getBackgroundImage();
-          this.setGfxProperty( "backgroundImage", backgroundImage );
-          this.removeStyleProperty( "backgroundImage" );
-          this._gfxBackgroundEnabled = true;
-        } else {
-          this._gfxBackgroundEnabled = false;
-          this._applyBackgroundColor( this.getBackgroundColor() );
-          this.setGfxProperty( "backgroundColor", null );
-          this._applyBackgroundImage( this.getBackgroundImage() );
-          this.setGfxProperty( "backgroundImage", null );
-        }
-        this._handleGfxStatus();
-      }
-      // render or reset
-      // TODO [tb] : order matters (_isCanvasReady first), refactor
-      if( this._isCanvasReady() && useBackground ) {
-        this._renderGfxBackground();
-        if( toggle && !this._gfxBorderEnabled && !this._willBeLayouted() ) {
-          this._layoutShapes();
-        }
-      } else if( toggle && !useBackground ) {
-        this._prepareBackgroundShape();
-      }
-    },
-
-    _handleGfxShadow : function() {
-      var hasShadow = this.getGfxProperty( "shadow" ) != null;
-      this._gfxShadowEnabled = hasShadow;
-      this._handleGfxStatus();
-      if( this._isCanvasReady() && hasShadow ) {
-        this._renderGfxShadow();
-        if( !this._willBeLayouted() ) {
-          this._layoutShapes();
-        }
-      } else if( !this._gfxShadowEnabled && this._gfxData && this._gfxData.shadowInsert ) {
-        this._prepareShadowShape(); // remove shape from canvas
-      }
-    },
-
-    _handleGfxStatus : function() {
-      var useGfx =  this._gfxBorderEnabled || this._gfxBackgroundEnabled || this._gfxShadowEnabled;
-      if( useGfx != this._gfxEnabled ) {
-        if( useGfx ) {
-          this._gfxEnabled = true;
-          this.addEventListener( "changeElement", this._gfxOnElementChanged, this );
-          this.addEventListener( "flush", this._gfxOnFlush, this );
-        } else {
-          this._gfxEnabled = false;
-          this.removeEventListener( "changeElement", this._gfxOnElementChanged, this );
-          this.removeEventListener( "flush", this._gfxOnFlush, this );
-        }
-        this._targetNodeEnabled = ( this._innerStyle || useGfx ) && !this._gfxBorderEnabled;
-      }
-    },
-
-    // called after the element of the widget has been set
-    _gfxOnElementChanged : function( event ) {
-      if( event.getValue() == null && this._gfxCanvasAppended ) {
-        this._removeCanvas();
-      }
-      if( event.getValue() != null && this._isCanvasReady() ) { // TODO [tb] : prevent _copyData in this case
-        if( this._gfxBackgroundEnabled ) {
-          this._renderGfxBackground();
-        }
-        if( this._gfxShadowEnabled ) {
-          this._renderGfxShadow();
-        }
-        // border is handled by widget queue
-      }
-    },
-
-    _gfxOnFlush : function( event ) {
-      var changes = event.getData();
-      if ( changes.paddingRight || changes.paddingBottom ) {
-        // TODO [tb] : Can this be removed savely?
-        this.setGfxProperty( "backgroundLayouted", null );
-        this.setGfxProperty( "shadowLayouted", null );
-      }
-      this._layoutShapes();
-    },
-
-    _layoutShapes : function() {
-      if( this._gfxBackgroundEnabled ) {
-        this._layoutBackgroundShape();
-      }
-      if( this._gfxShadowEnabled ) {
-        this._layoutShadowShape();
-      }
-    },
-
-    /////////////////////////
-    // inernals - target node
-
-    _layoutTargetNode : function() {
-      if( this._innerStyle && this._gfxBorderEnabled ) {
-        var rect = this.getGfxProperty( "backgroundLayouted" );
-        var width = this.getGfxProperty( "borderWidths" );
-        var style = this._innerStyle;
-        style.top = width[ 0 ] + "px";
-        style.left = width[ 3 ] + "px";
-        style.width = Math.max( 0, rect[ 0 ] - width[ 3 ] - width[ 1 ] ) + "px";
-        style.height = Math.max( 0, rect[ 1 ] - width[ 0 ] - width[ 2 ] ) + "px";
-      }
-    },
-
-    _resetTargetNode : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function() {
-        if( this._innerStyle ) {
-          this._innerStyle.left = "0px";
-          this._innerStyle.top = "0px";
-          this._innerStyle.width = "";
-          this._innerStyle.height = "";
-          this.addToQueue( "width" );
-          this.addToQueue( "height" );
-        }
-      },
-      "default" : function() {
-        if( this._innerStyle ) {
-          this._innerStyle.left = "0px";
-          this._innerStyle.top = "0px";
-          this._innerStyle.width = "100%";
-          this._innerStyle.height = "100%";
-        }
-      }
-    } ),
-
-    /////////////////////
-    // internals - canvas
-
-    _isCanvasReady : function() {
-      var result = false;
-      if( this._isCreated ) {
-        if( this._gfxEnabled && this._gfxCanvasAppended ) {
-          result = true;
-        } else if( this._gfxEnabled && !this._gfxCanvasAppended ) {
-          if( this._gfxCanvas == null ) {
-            this._createCanvas();
-          }
-          this._appendCanvas();
-          result = true;
-        } else if( !this._gfxEnabled && this._gfxCanvasAppended ) {
-          this._removeCanvas();
-        }
-      } else if( this._gfxEnabled ) {
-        this._prepareGraphicsSupport();
-      }
-      return result;
-    },
-
-    _createCanvas : function() {
-      if( !this._innerStyle ) {
-        this._prepareForCanvas();
-      }
-      this._gfxData = {};
-      this._gfxCanvas = rwt.graphics.GraphicsUtil.createCanvas();
-      // TODO [tb] : can be removed?
-      this._prepareBackgroundShape();
-    },
-
-    _prepareForCanvas : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function() {
-        this.prepareEnhancedBorder();
-        this._applyOpacity( this.getOpacity() );
-      },
-      "gecko" : function() {
-        this.prepareEnhancedBorder();
-        this._applyOpacity( this.getOpacity() );
-      },
-      "webkit" : function() {
-        var outline = this.getStyleProperty( "outline" );
-        this.removeStyleProperty( "outline" );
-        this.__outerElementStyleProperties.outline = true;
-        this.setStyleProperty( "outline", outline );
-        this._applyOpacity( this.getOpacity() );
-      },
-      "default" : function() {
-        this.prepareEnhancedBorder();
-        this._applyOpacity( this.getOpacity() );
-      }
-    } ),
-
-    _appendCanvas : function() {
-      var parentNode = this.getElement();
-      var gfxNode = rwt.graphics.GraphicsUtil.getCanvasNode( this._gfxCanvas );
-      if( gfxNode != null ) {
-        parentNode.insertBefore( gfxNode, parentNode.firstChild );
-      }
-      this._gfxCanvasAppended = true;
-      this.addEventListener( "insertDom", this._onCanvasAppear );
-      if( this._isInDom ) {
-        this._onCanvasAppear();
-      }
-    },
-
-    _removeCanvas : function() {
-      var gfxNode = rwt.graphics.GraphicsUtil.getCanvasNode( this._gfxCanvas );
-      if( gfxNode != null ) {
-        gfxNode.parentNode.removeChild( gfxNode );
-        this._gfxCanvasAppended = false;
-        this.removeEventListener( "insertDom", this._onCanvasAppear );
-      }
-    },
-
-    _onCanvasAppear : function() {
-      if( this._gfxCanvasAppended ) {
-        rwt.graphics.GraphicsUtil.handleAppear( this._gfxCanvas );
-      }
-    },
-
-    //////////////////////////////
-    // internals - backgroundShape
-
-    _prepareBackgroundShape : function() {
-      var GraphicsUtil = rwt.graphics.GraphicsUtil;
-      if( this._gfxData ) {
-        var backgroundShape = this._gfxData.backgroundShape;
-        if( this._gfxBackgroundEnabled ) {
-          if( backgroundShape === undefined ) {
-            this._gfxData.backgroundShape = GraphicsUtil.createShape( "roundrect" );
-          }
-          if( !this._gfxData.backgroundInsert ) {
-            var shape = this._gfxData.backgroundShape;
-            GraphicsUtil.addToCanvas( this._gfxCanvas, shape );
-            this._gfxData.backgroundInsert = true;
-            this._checkAntiAlias( this.getOpacity() );
-          }
-        } else if( this._gfxData.backgroundInsert ) {
-          GraphicsUtil.removeFromCanvas( this._gfxCanvas, backgroundShape );
-          this._gfxData.backgroundInsert = false;
-        }
-      }
-    },
-
-    _renderGfxBackground : function() {
-      this._prepareBackgroundShape();
-      var fillType = this.getGfxProperty( "fillType" );
-      var GraphicsUtil = rwt.graphics.GraphicsUtil;
-      if( fillType == "gradient" ) {
-        var gradient = this.getGfxProperty( "gradient" );
-        GraphicsUtil.setFillGradient( this._gfxData.backgroundShape, gradient );
-      } else if( fillType == "image" ) {
-        var image = this.getGfxProperty( "backgroundImage" );
-        image = typeof image == "undefined" ? null : image;
-        var size = this._getImageSize( image );
-        GraphicsUtil.setFillPattern( this._gfxData.backgroundShape, image, size[ 0 ], size[ 1 ] );
-      } else { //assume fillType is "solid"
-        var color = this.getGfxProperty( "backgroundColor" );
-        if( color && ( color === "transparent" || color.slice( 0, 4 ) === "rgba" ) ) {
-          color = null;
-        }
-        GraphicsUtil.setFillColor( this._gfxData.backgroundShape, color );
-      }
-    },
-
-    _renderGfxBorder : function() {
-      this._prepareBackgroundShape();
-      this._style.borderWidth = 0;
-      var inner = this._innerStyle;
-      inner.borderWidth = 0; // TODO [tb] : useless?
-      var shape = this._gfxData.backgroundShape;
-      var width = this.getGfxProperty( "borderMaxWidth" );
-      var color = this.getGfxProperty( "borderColor" );
-      rwt.graphics.GraphicsUtil.setStroke( shape, color, width );
-    },
-
-    _layoutBackgroundShape : function() {
-      var rectDimension = [ this.getBoxWidth(), this.getBoxHeight() ];
-      var oldDimension = this.getGfxProperty( "backgroundLayouted" );
-      var changedX = !oldDimension || ( rectDimension[ 0 ] !== oldDimension[ 0 ] );
-      var changedY = !oldDimension || ( rectDimension[ 1 ] !== oldDimension[ 1 ] );
-      if( changedX || changedY ) {
-        this.setGfxProperty( "backgroundLayouted", rectDimension );
-        this._layoutTargetNode();
-        var rectDimension = [ this.getBoxWidth(), this.getBoxHeight() ]; // TODO [tb] : useless?
-        // TODO [tb] : refactor from here
-        var rectWidth;
-        var rectHeight;
-        var left;
-        var top;
-        var radii;
-        if( this._gfxBorderEnabled ) {
-          radii = this.getGfxProperty( "borderRadii" );
-          var borderWidth = this.getGfxProperty( "borderWidths" );
-          var maxWidth = this.getGfxProperty( "borderMaxWidth" );
-          var borderTop = 0;
-          var borderRight = 0;
-          var borderBottom = 0;
-          var borderLeft = 0;
-          // TODO [tb] : This hides the edges with width "0" by drawing
-          // them outside the element so they are hidden. ("ContainerOverflow"
-          // must be set to false.) However this does not always work in IE.
-          // See bug 306820.
-          if( maxWidth > 0 ) {
-            borderTop = ( borderWidth[ 0 ] === 0 ? -maxWidth - 1 : maxWidth );
-            borderRight = ( borderWidth[ 1 ] === 0 ? -maxWidth - 1 : maxWidth );
-            borderBottom = ( borderWidth[ 2 ] === 0 ? -maxWidth - 1 : maxWidth );
-            borderLeft = ( borderWidth[ 3 ] === 0 ? -maxWidth - 1: maxWidth );
-          }
-          rectWidth = rectDimension[ 0 ] - ( borderLeft * 0.5 + borderRight * 0.5 );
-          rectHeight = rectDimension[ 1 ] - ( borderTop * 0.5 + borderBottom * 0.5 );
-          left = borderLeft * 0.5;
-          top = borderTop * 0.5;
-        } else {
-          // TODO [tb] : write tests for this case
-          left = 0;
-          top = 0;
-          rectWidth = rectDimension[ 0 ] - this._cachedBorderLeft - this._cachedBorderRight;
-          rectHeight = rectDimension[ 1 ] - this._cachedBorderTop - this._cachedBorderBottom;
-          radii = [ 0, 0, 0, 0 ];
-        }
-        //a few safeguards:
-        rectWidth = Math.max( 0, rectWidth );
-        rectHeight = Math.max( 0, rectHeight );
-        var shape = this._gfxData.backgroundShape;
-        var GraphicsUtil = rwt.graphics.GraphicsUtil;
-        GraphicsUtil.setRoundRectLayout( shape, left, top, rectWidth, rectHeight, radii );
-      }
-    },
-
-    /////////////////////////
-    // internal - shadowShape
-
-    _prepareShadowShape : function() {
-      var GraphicsUtil = rwt.graphics.GraphicsUtil;
-      if( this._gfxData ) {
-        if( this._gfxShadowEnabled ) {
-          if( this._gfxData.shadowShape === undefined ) {
-            this._createShadowShape();
-            var canvasNode = GraphicsUtil.getCanvasNode( this._gfxCanvas );
-            rwt.html.Style.setPointerEvents( canvasNode, "none" );
-          }
-          var shape = this._gfxData.shadowShape;
-          if( !this._gfxData.shadowInsert ) {
-            var before = null;
-            if( this._gfxData.backgroundInsert ) {
-              before = this._gfxData.backgroundShape;
-            }
-            GraphicsUtil.addToCanvas( this._gfxCanvas, shape, before );
-            this._gfxData.shadowInsert = true;
-          }
-        } else if( this._gfxData.shadowInsert ) {
-          GraphicsUtil.removeFromCanvas( this._gfxCanvas, this._gfxData.shadowShape );
-          // disable overflow:
-          GraphicsUtil.enableOverflow( this._gfxCanvas, 0, 0, null, null );
-          delete this._gfxData.shadowInsert;
-        }
-      }
-    },
-
-    _createShadowShape : function() {
-      var shape = null;
-      var GraphicsUtil = rwt.graphics.GraphicsUtil;
-      var shape = GraphicsUtil.createShape( "roundrect" );
-      this._gfxData.shadowShape = shape;
-      return shape;
-    },
-
-    _renderGfxShadow : function() {
-      this._prepareShadowShape();
-      if( this._gfxShadowEnabled ) {
-        var GraphicsUtil = rwt.graphics.GraphicsUtil;
-        var shadow = this.getGfxProperty( "shadow" );
-        var shape = this._gfxData.shadowShape;
-        GraphicsUtil.setBlur( shape, shadow[ 3 ] );
-        GraphicsUtil.setFillColor( shape, shadow[ 5 ] );
-        GraphicsUtil.setOpacity( shape, shadow[ 6 ] );
-      }
-    },
-
-    _layoutShadowShape : function() {
-      var GraphicsUtil = rwt.graphics.GraphicsUtil;
-      var rect = [ this.getBoxWidth(), this.getBoxHeight() ];
-      var rectDimension = [ this.getBoxWidth(), this.getBoxHeight() ];
-      var oldDimension = this.getGfxProperty( "shadowLayouted" );
-      var changedX = !oldDimension || ( rectDimension[ 0 ] !== oldDimension[ 0 ] );
-      var changedY = !oldDimension || ( rectDimension[ 1 ] !== oldDimension[ 1 ] );
-      if( changedX || changedY ) {
-        var shape = this._gfxData.shadowShape;
-        this.setGfxProperty( "shadowLayouted", rectDimension );
-        var shadow = this.getGfxProperty( "shadow" );
-        var radii = this.getGfxProperty( "borderRadii" );
-        radii = radii === null ? [ 0, 0, 0, 0 ] : radii;
-        var left = shadow[ 1 ];
-        var top = shadow[ 2 ];
-        var width = rect[ 0 ];
-        var height = rect[ 1 ];
-        var blur = shadow[ 3 ];
-        var overflowLeft = left < 0 ? Math.abs( left ) + blur : 0;
-        var overflowTop = top < 0 ? Math.abs( top ) + blur : 0;
-        var overflowRight = Math.max( 0, blur + left );
-        var overflowBottom = Math.max( 0, blur + top );
-        var overflowWidth = width + overflowRight;
-        var overflowHeight = height + overflowBottom;
-        // overflow-area must be defined every time:
-        GraphicsUtil.enableOverflow( this._gfxCanvas,
-                             overflowLeft,
-                             overflowTop,
-                             overflowWidth,
-                             overflowHeight );
-        GraphicsUtil.setRoundRectLayout( shape, left, top, width, height, radii );
-      }
-    },
-
-    /////////////////////
-    // internals - helper
-
-    _getImageSize : function( source ) {
-      var result = this.getUserData( "backgroundImageSize" );
-      if( result == null ) {
-        var themeStore = rwt.theme.ThemeStore.getInstance();
-        result = themeStore.getImageSize( source );
-      }
-      return result;
-    },
-
-    _willBeLayouted : function() {
-      return this._jobQueue !== undefined || !rwt.util.Objects.isEmpty( this._layoutChanges );
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2010, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.graphics.GraphicsUtil", {
-
-  statics : {
-    _renderClass : null,
-
-    init : function() {
-      if( this._renderClass == null ) {
-        if( rwt.client.Client.supportsVml() ) {
-          this._renderClass = rwt.graphics.VML;
-        } else if ( rwt.client.Client.supportsSvg() ) {
-          this._renderClass = rwt.graphics.SVG;
-        }
-        if( this._renderClass != null ) {
-          this._renderClass.init();
-        }
-      }
-    },
-
-    ///////
-    // Core
-
-    /**
-     * Returns a handle for a canvas. This objects members are considered
-     * package-private and should not be accessed outside the renderclass.
-     * The canvas dimensions will be those of its parent-node.
-     * The overflow-behavior is browser-dependant. To enforce a
-     * "overflow:hidden"-behavior, set it on the parent-node of the canvas.
-     */
-    createCanvas : function() {
-      var result = null;
-      result = this._renderClass.createCanvas();
-      return result;
-    },
-
-    /**
-     * Returns the DOM-node for the given canvas to be added to or removed from
-     * HTML DOM-nodes. Returns null if no renderClass is found!
-     */
-    getCanvasNode : function( canvas ) {
-      var result = null;
-      result = this._renderClass.getCanvasNode( canvas );
-      return result;
-    },
-
-    /**
-     * This must be called after the canvas has been (directly or inderectly)
-     * inserted into the DOM, i.e. after it becomes visible. It has not to
-     * be called if the canvas was made visible by other means, e.g. the
-     * "visibility", "display" or "opacity" css-properties, but it won't
-     * do any damage.
-     */
-    handleAppear : function( canvas ) {
-      this._renderClass.handleAppear( canvas );
-    },
-
-    /**
-     * Grants the canvas at least 50 px overflow in every direction.
-     * The overflow captures events, so HtmlUtil.setPointerEvents should be
-     * used on canvas. Not setting this does not mean that overflow is hidden.
-     */
-    enableOverflow : function( canvas, x, y, width, height ) {
-      this._renderClass.enableOverflow( canvas, x, y, width, height );
-    },
-
-    /**
-     * Returns a handle for a shape. This objects members are considered
-     * package-private and should not be accessed outside the renderclass.
-     * Currently supported types: "rect", "roundrect"
-     */
-    createShape : function( type ) {
-      var result = null;
-      if( this._renderClass != null ) {
-        result = this._renderClass.createShape( type );
-      }
-      return result;
-    },
-
-    // TODO [tb] : There might currently be a glitch in IE if a shape is added
-    //             to an alreadey visible canvas.
-    addToCanvas : function( canvas, shape, beforeShape ) {
-      this._renderClass.addToCanvas( canvas, shape, beforeShape );
-    },
-
-    removeFromCanvas : function( canvas, shape ) {
-      this._renderClass.removeFromCanvas( canvas, shape );
-    },
-
-    ////////////
-    // Layouting
-
-    /**
-     * value is a boolean
-     */
-    setDisplay : function( shape, value ) {
-      this._renderClass.setDisplay( shape, value );
-    },
-
-    /**
-     * returns a boolean
-     */
-    getDisplay : function( shape ) {
-      return this._renderClass.getDisplay( shape );
-    },
-
-    /**
-     * shape must be of type "rect"
-     * all other values must be a number (for pixels) or a string with
-     * "%"-postfix for percentage, depending on the layout-mode of the canvas.
-     * If the layout-mode and the format of the value don't match, the shape
-     * might be layouted incorrectly.
-     * width and height must be positive or 0.
-     * Initial values are all 0.
-     */
-    setRectBounds : function( shape, x, y, width, height ) {
-      this._renderClass.setRectBounds( shape, x, y, width, height );
-    },
-
-    /**
-     * radii is an array: [ topLeft, topRight, bottomRight, bottomLeft ]
-     * Other paramters as described in "setRectBounds".
-     * Using this function in layout-mode "percentage" is not tested.
-     *
-     * If the shape is geometrically impossible to draw becuse the
-     * the sum of the radii of any two opposite corners is larger than
-     * the corresponding edge, a normal rectagle will be drawn instead
-     * (i.e. ALL radii are 0).
-     */
-    setRoundRectLayout : function( shape, x, y, width, height, radii ) {
-      this._renderClass.setRoundRectLayout( shape,
-                                            x,
-                                            y,
-                                            width,
-                                            height,
-                                            radii );
-    },
-
-    //////////
-    // Styling
-
-    /**
-     * color is any rgb-value or null (transparent).
-     * Initial value is null.
-     */
-    setFillColor : function( shape, color ) {
-      this._renderClass.setFillColor( shape, color );
-    },
-
-    /**
-     * returns a string or null
-     */
-    getFillColor : function( shape, color ) {
-      return this._renderClass.getFillColor( shape );
-    },
-
-    /**
-     * gradient is a two dimensional array [ [ offset, color ] ] or null.
-     * the array can also have a "horizontal" boolean as a field, creating
-     * a horizontal instead of a vertical gradient if set to true.
-     * offset is a number between 0 and 1
-     * Iniital value is null (transparent).
-     */
-    setFillGradient : function( shape, gradient ) {
-      this._renderClass.setFillGradient( shape, gradient );
-    },
-
-    /**
-     * source is a valid URL of an image or null
-     * width and height are numbers representing the dimension of image in pixel
-     */
-    setFillPattern : function( shape, source, width, height ) {
-      this._renderClass.setFillPattern( shape, source, width, height );
-    },
-
-    /**
-     * Returns "color", "gradient", "pattern" or null
-     */
-    getFillType : function( shape, color ) {
-      return this._renderClass.getFillType( shape );
-    },
-
-    /**
-     * color is any rgb-value or null (transparent)
-     * width is any positive number or 0.
-     * Initial values are null and 0.
-     * Note that strokes are (unlike css-borders) not part of the shapes
-     * geometric model, but drawn centered along the shapes path.
-     */
-    setStroke : function( shape, color, width ) {
-      this._renderClass.setStroke( shape, color, width );
-    },
-
-    /**
-     * returns the width of the stroke as a number (pixel)
-     */
-    getStrokeWidth : function( shape ) {
-      return this._renderClass.getStrokeWidth( shape );
-    },
-
-    /**
-     * returns the color of the stroke of the shape
-     */
-    getStrokeColor : function( shape ) {
-      return this._renderClass.getStrokeColor( shape );
-    },
-
-    /**
-     * opaciy is a value between 0 and 1.
-     */
-    setOpacity : function( shape, opacity ) {
-      this._renderClass.setOpacity( shape, opacity );
-    },
-
-    getOpacity : function( shape ) {
-      return this._renderClass.getOpacity( shape );
-    },
-
-    /**
-     * radius is 0 or greater
-     */
-    setBlur : function( shape, radius ) {
-      this._renderClass.setBlur( shape, radius );
-    },
-
-    getBlur : function( shape ) {
-      return this._renderClass.getBlur( shape );
-    }
-
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2010, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.graphics.VML", {
-
-  statics : {
-
-    init : function() {
-      document.namespaces.add( "v", "urn:schemas-microsoft-com:vml");
-      document.namespaces.add( "o", "urn:schemas-microsoft-com:office:office");
-      var sheet = document.createStyleSheet();
-      sheet.cssText = "v\\:* { behavior:url(#default#VML);display:inline-block; } "+
-                      "o\\:* { behavior: url(#default#VML);}";
-      this._vmlEnabled = true;
-    },
-
-    createCanvas : function() {
-      var result = {};
-      result.type = "vmlCanvas";
-      var node = document.createElement( "div" );
-      node.style.position = "absolute";
-      node.style.width = "10px";
-      node.style.height = "10px";
-      node.style.top = "0";
-      node.style.left = "0";
-      node.style.fontSize = "0";
-      node.style.lineHeight = "0";
-      result.node = node;
-      result.children = {};
-      return result;
-    },
-
-    clearCanvas : function( canvas ) {
-      for( var hash in canvas.children ) {
-        canvas.node.removeChild( canvas.children[ hash ].node );
-      }
-      canvas.children = {};
-    },
-
-    getCanvasNode : function( canvas ) {
-      return canvas.node;
-    },
-
-    handleAppear : function( canvas ) {
-      var children = canvas.children;
-      for( var hash in children ) {
-       this._handleAppearShape( children[ hash ] );
-      }
-    },
-
-    createShape : function( type ) {
-      var result = null;
-      switch( type ) {
-        case "rect":
-          result = this._createRect();
-        break;
-        case "roundrect":
-        case "custom":
-          result = this._createCustomShape();
-          result.blurRadius = 0;
-        break;
-        case "image":
-          result = this._createImage();
-        break;
-        default:
-          throw "VML does not support shape " + type;
-      }
-      result.restoreData = { "fill" : {} };
-      result.node.stroked = false;
-      // TODO [tb] : test if stroke-node conflicts with stroke-properties on
-      // the element-node when moved in dom.
-      var fill = this._createNode( "fill" );
-      fill.method = "sigma";
-      result.node.appendChild( fill );
-      result.fill = fill;
-      this.setFillColor( result, null );
-      return result;
-    },
-
-    addToCanvas : function( canvas, shape, beforeShape ) {
-      var hash = rwt.qx.Object.toHashCode( shape );
-      canvas.children[ hash ] = shape;
-      //canvas.node.appendChild( shape.node );
-      if( beforeShape ) {
-        canvas.node.insertBefore( shape.node, beforeShape.node );
-      } else {
-        canvas.node.appendChild( shape.node );
-      }
-    },
-
-    enableOverflow : function( canvas ) {
-      // nothing to do
-    },
-
-    removeFromCanvas : function( canvas, shape ) {
-      var hash = rwt.qx.Object.toHashCode( shape );
-      delete canvas.children[ hash ];
-      canvas.node.removeChild( shape.node );
-    },
-
-    setDisplay : function( shape, value ) {
-      shape.node.style.display = value ? "" : "none";
-    },
-
-    getDisplay : function( shape) {
-      var result = shape.node.style.display == "none" ? false : true;
-      return result;
-    },
-
-    setRectBounds : function( shape, x, y, width, height ) {
-      var node = shape.node;
-      node.style.width = this._convertNumeric( width, false );
-      node.style.height = this._convertNumeric( height, false );
-      node.style.left = this._convertNumeric( x, true );
-      node.style.top = this._convertNumeric( y, true );
-    },
-
-    /**
-     * "crop" is an optional array [ top, right, bottom, left ]. The values have
-     * to be between 0 and 1, representing percentage of the image-dimension.
-     */
-    setImageData : function( shape, src, x, y, width, height, crop ) {
-      var node = shape.node;
-      node.src = src;
-      if( typeof crop != "undefined" ) {
-        node.cropTop = crop[ 0 ];
-        node.cropRight = crop[ 1 ];
-        node.cropBottom =  crop[ 2 ];
-        node.cropLeft = crop[ 3 ];
-      }
-      node.style.width = width;
-      node.style.height = height;
-      node.style.left = x;
-      node.style.top = y;
-    },
-
-    setRoundRectLayout : function( shape, x, y, width, height, radii ) {
-      var quarter = this._VMLDEGREE * 90;
-      var maxRadius = Math.floor( Math.min( width, height ) / 2 );
-      var radiusLeftTop = Math.min( radii[ 0 ], maxRadius );
-      var radiusTopRight = Math.min( radii[ 1 ], maxRadius );
-      var radiusRightBottom = Math.min( radii[ 2 ], maxRadius );
-      var radiusBottomLeft = Math.min( radii[ 3 ], maxRadius );
-      radiusLeftTop = this._convertNumeric( radiusLeftTop, false );
-      radiusTopRight = this._convertNumeric( radiusTopRight, false );
-      radiusRightBottom = this._convertNumeric( radiusRightBottom, false );
-      radiusBottomLeft = this._convertNumeric( radiusBottomLeft, false );
-      var bluroffsets = this._getBlurOffsets( shape.blurRadius );
-      var rectLeft = this._convertNumeric( x - bluroffsets[ 1 ], true );
-      var rectTop = this._convertNumeric( y - bluroffsets[ 1 ], true );
-      var rectWidth = this._convertNumeric( width - bluroffsets[ 2 ], false );
-      var rectHeight = this._convertNumeric( height - bluroffsets[ 2 ], false );
-      var path = [];
-      if( radiusLeftTop > 0 ) {
-        path.push( "AL", rectLeft + radiusLeftTop, rectTop + radiusLeftTop );
-        path.push( radiusLeftTop, radiusLeftTop, 2 * quarter, quarter );
-      } else {
-        path.push( "M", rectLeft, rectTop + radiusLeftTop );
-      }
-      if( radiusTopRight > 0 ) {
-        path.push( "AE", rectLeft + rectWidth - radiusTopRight );
-        path.push( rectTop + radiusTopRight );
-        path.push( radiusTopRight, radiusTopRight, 3 * quarter, quarter );
-      } else {
-        path.push( "L", rectLeft + rectWidth, rectTop );
-      }
-      if( radiusRightBottom > 0 ) {
-        path.push( "AE", rectLeft + rectWidth - radiusRightBottom );
-        path.push( rectTop + rectHeight - radiusRightBottom );
-        path.push( radiusRightBottom, radiusRightBottom, 0, quarter );
-      } else {
-        path.push( "L", rectLeft + rectWidth, rectTop + rectHeight );
-      }
-      if( radiusBottomLeft > 0 ) {
-        path.push( "AE", rectLeft + radiusBottomLeft );
-        path.push( rectTop + rectHeight - radiusBottomLeft );
-        path.push( radiusBottomLeft, radiusBottomLeft, quarter, quarter );
-      } else {
-        path.push( "L", rectLeft, rectTop + rectHeight );
-      }
-      path.push( "X E" );
-      shape.node.path = path.join( " " );
-    },
-
-    applyDrawingContext : function( shape, context, fill ) {
-      var opacity = context.globalAlpha;
-      if( opacity != 1 ) {
-        this.setOpacity( shape, opacity );
-      }
-      if( fill ) {
-        var fill = context.fillStyle;
-        if( fill instanceof Array ) {
-          this.setFillGradient( shape, context.fillStyle );
-        } else {
-          this.setFillColor( shape, context.fillStyle );
-        }
-        this.setStroke( shape, null, 0 );
-      } else {
-        this.setFillColor( shape, null );
-        this.setStroke( shape, context.strokeStyle, context.lineWidth );
-        var endCap = context.lineCap == "butt" ? "flat" : context.lineCap;
-        var joinStyle = context.lineJoin;
-        var miterLimit = context.miterLimit;
-        this._setStrokeStyle( shape, joinStyle, miterLimit, endCap );
-      }
-      shape.node.path = this._convertPath( context._currentPath );
-    },
-
-    createShapeFromContext : function( context, fill ) {
-      var shape = this.createShape( "custom" );
-      this.applyDrawingContext( shape, context, fill );
-      return shape;
-    },
-
-    setFillColor : function( shape, color ) {
-      var fill = shape.fill;
-      fill.type = "solid";
-      if( color != null && color !== "transparent" && color !== "" ) {
-        this._setFillEnabled( shape, true );
-        fill.color = color;
-        shape.restoreData.fill.color = color;
-      } else {
-        this._setFillEnabled( shape, false );
-        delete shape.restoreData.fill.color;
-      }
-    },
-
-    getFillColor : function( shape ) {
-      var result = null;
-      if( this.getFillType( shape ) == "color" ) {
-        result = shape.restoreData.fill.color;
-      }
-      return result;
-    },
-
-    setFillGradient : function( shape, gradient ) {
-      var fill = shape.fill;
-      if( gradient != null ) {
-        shape.node.removeChild( shape.fill );
-        this._setFillEnabled( shape, true );
-        delete shape.restoreData.fill.color;
-        fill.type = "gradient";
-        //the "color" attribute of fill is lost when the node
-        //is removed from the dom. However, it can be overwritten
-        //by a transition colors, so it doesn't matter
-        var startColor = gradient[ 0 ][ 1 ];
-        //fill.color = startColor;
-        fill.color2 = gradient[ gradient.length - 1 ][ 1 ];
-        fill.angle = gradient.horizontal ? 270 : 180;
-        var transitionColors = "0% " + startColor;
-        var lastColor = rwt.util.Colors.stringToRgb( startColor );
-        var nextColor = null;
-        var lastOffset = 0;
-        var currentOffset = null;
-        for( var colorPos = 1; colorPos < gradient.length; colorPos++ ) {
-          var color = gradient[ colorPos ][ 1 ];
-          nextColor = rwt.util.Colors.stringToRgb( color );
-          var nextOffset = gradient[ colorPos ][ 0 ];
-          transitionColors += ", ";
-          transitionColors += this._transitionColors( lastColor,
-                                                      nextColor,
-                                                      lastOffset,
-                                                      nextOffset,
-                                                      3 );
-          transitionColors += ", " + ( nextOffset * 100 ) + "% " + color;
-          lastColor = nextColor;
-          lastOffset = nextOffset;
-        }
-        fill.colors = transitionColors;
-        shape.node.appendChild( fill );
-      } else {
-        this._setFillEnabled( shape, true );
-      }
-    },
-
-    setFillPattern : function( shape, source, width, height ) {
-      var fill = shape.fill;
-      if( source != null ) {
-        shape.node.removeChild( shape.fill );
-        this._setFillEnabled( shape, true );
-        fill.type = "tile";
-        fill.src = source;
-        // IE only accepts "pt" for the size:
-        fill.size = ( width * 0.75 ) + "pt," + ( height * 0.75 ) + "pt";
-        shape.node.appendChild( fill );
-      } else {
-        this._setFillEnabled( shape, false );
-      }
-    },
-
-    getFillType : function( shape ) {
-      var on = shape.fill.on;
-      var result = !on ? null : shape.fill.type;
-      if( result == "solid" ) {
-        result = "color";
-      }
-      if( result == "tile" ) {
-        result = "pattern";
-      }
-      return result;
-    },
-
-    // About VML-strokes and opacity:
-    // There is a bug in the VML antialiasing, that can produce grey pixels
-    // around vml elements if the css-opacity-filter is used on any of its
-    // parents, including the widgets div or any of the parent-widgets divs.
-    // However this ONLY happens if the element that the opacity is applied to,
-    // does NOT have a background of its own!
-    // If antialiasing is turned off, the effect is gone, but without
-    // antaliasing the element looks just as ugly as with the glitch.
-    setStroke : function( shape, color, width ) {
-      if( width > 0 ) {
-        shape.node.stroked = true;
-        shape.node.strokecolor = color;
-        shape.node.strokeweight = width + "px";
-        shape.restoreData.strokecolor = color;
-        shape.restoreData.strokeweight = width + "px";
-        // TODO [tb] : joinstyle
-      } else {
-        shape.node.stroked = false;
-        delete shape.restoreData.strokecolor;
-        delete shape.restoreData.strokeweight;
-      }
-    },
-
-    getStrokeWidth : function( shape ) {
-      // IE returns strokeweight either as number (then its pt)
-      // or as string with a "px" or "pt" postfix
-      var result = false;
-      if( shape.node.stroked ) {
-        result = shape.node.strokeweight;
-        var isPt = typeof result == "number" || result.search( "pt" ) != -1;
-        result = parseFloat( result );
-        result = isPt ? result / 0.75 : result;
-      }
-      return result;
-    },
-
-    getStrokeColor : function( shape ) {
-      return shape.node.strokecolor.value;
-    },
-
-    setOpacity : function( shape, opacity ) {
-      shape.opacity = opacity;
-      this._renderFilter( shape );
-      this._setAntiAlias( shape, opacity < 1 );
-    },
-
-    getOpacity : function( shape ) {
-      var result = 1;
-      if( typeof shape.opacity === "number" && shape.opacity < 1 ) {
-        result = shape.opacity;
-      }
-      return result;
-    },
-
-    setBlur : function( shape, radius ) {
-      // NOTE: IE shifts the shape to the bottom-right,
-      // compensated ONLY in setRoundRectLayout
-      shape.blurRadius = radius;
-      this._renderFilter( shape );
-    },
-
-    getBlur : function( shape, radius ) {
-      var result = 0;
-      if( typeof shape.blurRadius === "number" && shape.blurRadius > 0 ) {
-        result = shape.blurRadius;
-      }
-      return result;
-    },
-
-    _renderFilter : function( shape ) {
-      var filterStr = [];
-      var opacity = this.getOpacity( shape );
-      var blurRadius = this.getBlur( shape );
-      if( opacity < 1 ) {
-        filterStr.push( "Alpha(opacity=" );
-        filterStr.push( Math.round( opacity * 100 ) );
-        filterStr.push( ")" );
-      }
-      if( blurRadius > 0 ) {
-        filterStr.push( "progid:DXImageTransform.Microsoft.Blur(pixelradius=" );
-        filterStr.push( this._getBlurOffsets( blurRadius )[ 0 ] );
-        filterStr.push( ")" );
-      }
-      if( filterStr.length > 0 ) {
-        shape.node.style.filter = filterStr.join( "" );
-      } else {
-        rwt.html.Style.removeCssFilter( shape.node );
-      }
-    },
-
-    /////////
-    // helper
-
-    _VMLFACTOR : 10,
-    _VMLDEGREE : -65535,
-    _VMLRAD : -65535 * ( 180 / Math.PI ),
-
-    _createNode : function( type ) {
-      return document.createElement( "v:" + type );
-    },
-
-    _createRect : function() {
-      var result = {};
-      result.type = "vmlRect";
-      var node = this._createNode( "rect" );
-      node.style.position = "absolute";
-      node.style.width = 0;
-      node.style.height = 0;
-      node.style.top = 0;
-      node.style.left = 0;
-      node.style.antialias = false;
-      result.node = node;
-      return result;
-    },
-
-    _createImage : function() {
-      var result = {};
-      result.type = "vmlImage";
-      var node = this._createNode( "image" );
-      node.style.position = "absolute";
-      result.node = node;
-      return result;
-    },
-
-    _createCustomShape : function() {
-      var result = {};
-      var node = this._createNode( "shape" );
-      var coordsize = 100 * this._VMLFACTOR + ", " + 100 * this._VMLFACTOR;
-      node.coordsize = coordsize;
-      node.coordorigin = "0 0";
-      node.style.position = "absolute";
-      node.style.width = 100;
-      node.style.height = 100;
-      node.style.top = 0;
-      node.style.left = 0;
-      result.node = node;
-      return result;
-    },
-
-    _setFillEnabled : function( shape, value ) {
-      shape.fill.on = value;
-      shape.restoreData.fill.on = value;
-    },
-
-    _ensureStrokeNode : function( shape ) {
-      if( !shape.stroke ) {
-        var stroke = this._createNode( "stroke" );
-        shape.node.appendChild( stroke );
-        shape.stroke = stroke;
-      }
-    },
-
-    _setStrokeStyle : function( shape, joinStyle, miterLimit, endCap ) {
-      this._ensureStrokeNode( shape );
-      shape.stroke.joinstyle = joinStyle;
-      shape.stroke.miterlimit = miterLimit;
-      shape.stroke.endcap = endCap;
-    },
-
-    _transitionColors : function( color1, color2, start, stop, steps ) {
-      var diff = stop-start;
-      var stepwidth = diff / ( steps + 1 );
-      var str =[];
-      var color3 = [];
-      var pos;
-      for ( var i = 1; i <= steps; i++ ) {
-        pos = i * ( 1 / ( steps + 1 ) );
-        color3[ 0 ] = this._transitionColorPart( color1[ 0 ], color2[ 0 ], pos);
-        color3[ 1 ] = this._transitionColorPart( color1[ 1 ], color2[ 1 ], pos);
-        color3[ 2 ] = this._transitionColorPart( color1[ 2 ], color2[ 2 ], pos);
-        str.push(   Math.round( ( ( start + ( i * stepwidth ) ) * 100 ) )
-                  + "% RGB(" + color3.join()
-                  + ")" );
-      }
-      return str.join(" ,");
-    },
-
-    _copyData : function( source, target ) {
-      if( !source || !target ) {
-        throw "VML._copyData: source or target missing.";
-      }
-      for( var key in source ) {
-        var value = source[ key ];
-        if( typeof value === "object" ) {
-          try {
-            this._copyData( value, target[ key ] );
-          } catch( ex ) {
-            throw new Error( "Could not copy " + key + ": " + ex );
-          }
-        } else {
-          target[ key ] = value;
-        }
-      }
-    },
-
-    _handleAppearShape : function( shape ) {
-      this._copyData( shape.restoreData, shape.node );
-    },
-
-    _transitionColorPart : function( color1, color2, pos ) {
-      // TODO [tb] : color1 should always be a number, parseInt not needed?
-      var part = parseInt( color1, 10 ) + ( ( color2 - color1 ) * pos );
-      return Math.round( part );
-    },
-
-    _convertNumeric : function( value, fixOffset ) {
-      var result;
-      if( typeof value == "number" ) {
-        result = ( fixOffset ? value - 0.5 : value ) * this._VMLFACTOR;
-        result = Math.round( result );
-      } else {
-        result = value;
-      }
-      return  result;
-    },
-
-    _convertPath : function( path ) {
-      var string = [];
-      for( var i = 0; i < path.length; i++ ) {
-        var item = path[ i ];
-        switch( item.type ) {
-          case "moveTo":
-            string.push( "M" );
-            string.push( this._convertNumeric( item.x, true ) );
-            string.push( this._convertNumeric( item.y, true ) );
-          break;
-          case "lineTo":
-            string.push( "L" );
-            string.push( this._convertNumeric( item.x, true ) );
-            string.push( this._convertNumeric( item.y, true ) );
-          break;
-          case "close":
-            string.push( "X" );
-            item = null;
-          break;
-          case "quadraticCurveTo":
-            string.push( "QB" );
-            string.push( this._convertNumeric( item.cp1x, true ) );
-            string.push( this._convertNumeric( item.cp1y, true ) );
-            string.push( "L" ); // a bug in VML requires this
-            string.push( this._convertNumeric( item.x, true ) );
-            string.push( this._convertNumeric( item.y, true ) );
-          break;
-          case "bezierCurveTo":
-            string.push( "C" );
-            string.push( this._convertNumeric( item.cp1x, true ) );
-            string.push( this._convertNumeric( item.cp1y, true ) );
-            string.push( this._convertNumeric( item.cp2x, true ) );
-            string.push( this._convertNumeric( item.cp2y, true ) );
-            string.push( this._convertNumeric( item.x, true ) );
-            string.push( this._convertNumeric( item.y, true ) );
-          break;
-          case "arc":
-            string.push( "AE" );
-            var startAngle = Math.round( item.startAngle * this._VMLRAD );
-            var endAngle = Math.round( item.endAngle * this._VMLRAD );
-            string.push( this._convertNumeric( item.centerX, true ) );
-            string.push( this._convertNumeric( item.centerY, true ) );
-            string.push( this._convertNumeric( item.radiusX, false ) );
-            string.push( this._convertNumeric( item.radiusY, false ) );
-            string.push( startAngle );
-            string.push( endAngle - startAngle );
-          break;
-        }
-      }
-      return string.join( " " );
-    },
-
-    _setAntiAlias : function( shape, value ) {
-      shape.node.style.antialias = value;
-    },
-
-    _getBlurOffsets : function( blurradius ) {
-      // returns [ blurradius, location-offset, dimension-offset ]
-      var result;
-      var offsets = this._BLUROFFSETS[ blurradius ];
-      if( offsets !== undefined ) {
-        result = offsets;
-      } else {
-        result = [ blurradius, blurradius, 1 ];
-      }
-      return result;
-    },
-
-    _BLUROFFSETS : [
-      // NOTE: these values are chosen to resemble the blur-effect on css3-shadows
-      // as closely as possible, but in doubt going for the stronger effect.
-      [ 0, 0, 0 ],
-      [ 2, 2, 1 ],
-      [ 3, 3, 1 ],
-      [ 4, 4, 1 ]
-    ]
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2010, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.graphics.SVG", {
-
-  statics : {
-
-    init : function(){
-      // nothing to do
-    },
-
-    createCanvas : function() {
-      var result = {};
-      var node = this._createNode( "svg" );
-      node.style.position = "absolute";
-      node.style.left = "0px";
-      node.style.top = "0px";
-      node.style.width = "100%";
-      node.style.height = "100%";
-      var defs = this._createNode( "defs" );
-      node.appendChild( defs );
-      result.type = "svgCanvas";
-      result.node = node;
-      result.group = node;
-      result.defsNode = defs;
-      return result;
-    },
-
-    getCanvasNode : function( canvas ) {
-      return canvas.node;
-    },
-
-    handleAppear : function( canvas ) {
-      // nothing to do
-    },
-
-    enableOverflow : function( canvas, x, y, width, height ) {
-      // Supported in firefox 3.0+, safari and chrome (with limitations)
-      if( canvas.group === canvas.node ) {
-        var node = canvas.node;
-        var group = this._createNode( "g" );
-        canvas.group = group;
-        while( node.firstChild ) {
-          group.appendChild( node.firstChild );
-        }
-        node.appendChild( group );
-      }
-      canvas.node.style.left = ( x * -1 ) + "px";
-      canvas.node.style.top = ( y * -1 ) + "px";
-      if( width ) {
-        canvas.node.style.width = ( x + width ) + "px";
-      } else {
-        canvas.node.style.width = "100%";
-      }
-      if( height ) {
-        canvas.node.style.height = ( y + height ) + "px";
-      } else {
-        canvas.node.style.height = "100%";
-      }
-      if( x === 0 && y === 0 ) {
-        canvas.group.setAttribute( "transform", "" );
-      } else {
-        canvas.group.setAttribute( "transform", "translate(" + x + "," + y + ")" );
-      }
-    },
-
-    createShape : function( type ) {
-      var result;
-      switch( type ) {
-        case "rect":
-          result = this._createRect();
-        break;
-        case "roundrect":
-          result = this._createRoundRect();
-        break;
-        default:
-          throw "invalid shape " + type;
-      }
-      result.node.setAttribute( "stroke", "none" );
-      result.node.setAttribute( "stroke-width", "0px" );
-      result.node.setAttribute( "fill", "none" );
-      result.defNodes = {};
-      result.parent = null;
-      return result;
-    },
-
-    addToCanvas : function( canvas, shape, beforeShape ) {
-      shape.parent = canvas;
-      if( beforeShape ) {
-        canvas.group.insertBefore( shape.node, beforeShape.node );
-      } else {
-        canvas.group.appendChild( shape.node );
-      }
-      this._attachDefinitions( shape );
-    },
-
-    removeFromCanvas : function( canvas, shape ) {
-      this._detachDefinitions( shape );
-      canvas.group.removeChild( shape.node );
-      shape.parent = null;
-    },
-
-    setDisplay : function( shape, value ) {
-      shape.node.setAttribute( "display", value ? "inline" : "none" );
-    },
-
-    getDisplay : function( shape ) {
-      var display = shape.node.getAttribute( "display" );
-      var result = display == "none" ? false : true;
-      return result;
-    },
-
-    setRectBounds : function( shape, x, y, width, height ) {
-      var node = shape.node;
-      node.setAttribute( "width", this._convertNumeric( width ) );
-      node.setAttribute( "height", this._convertNumeric( height ) );
-      node.setAttribute( "x", this._convertNumeric( x ) );
-      node.setAttribute( "y", this._convertNumeric( y ) );
-    },
-
-    setRoundRectLayout : function( shape, x, y, width, height, radii ) {
-      var maxRadius = Math.floor( Math.min( width, height ) / 2 );
-      var radiusLeftTop = Math.min( radii[ 0 ], maxRadius );
-      var radiusTopRight = Math.min( radii[ 1 ], maxRadius );
-      var radiusRightBottom = Math.min( radii[ 2 ], maxRadius );
-      var radiusBottomLeft = Math.min( radii[ 3 ], maxRadius );
-      var path = [];
-      path.push( "M", x , y + radiusLeftTop );
-      if( radiusLeftTop > 0 ) {
-        path.push( "A", radiusLeftTop, radiusLeftTop, 0, 0, 1 );
-        path.push( x + radiusLeftTop, y );
-      }
-      path.push( "L", x + width - radiusTopRight, y );
-      if( radiusTopRight > 0 ) {
-        path.push( "A", radiusTopRight, radiusTopRight, 0, 0, 1 );
-      }
-      path.push( x + width, y + radiusTopRight);
-      path.push( "L", x + width, y + height - radiusRightBottom );
-      if( radiusRightBottom > 0 ) {
-        path.push( "A", radiusRightBottom, radiusRightBottom, 0, 0, 1 );
-      }
-      path.push( x + width - radiusRightBottom, y + height );
-      path.push( "L", x + radiusBottomLeft, y + height );
-      if( radiusBottomLeft > 0 ) {
-        path.push( "A", radiusBottomLeft, radiusBottomLeft, 0, 0, 1 );
-      }
-      path.push( x , y + height - radiusBottomLeft );
-      path.push( "Z" );
-      shape.node.setAttribute( "d", path.join(" ") );
-    },
-
-    setFillColor : function( shape, color ) {
-      this.setFillGradient( shape, null );
-      if( color != null && color !== "" ) {
-        shape.node.setAttribute( "fill", color );
-      } else {
-        shape.node.setAttribute( "fill", "none" );
-      }
-    },
-
-    getFillColor : function( shape ) {
-      var result = null;
-      if( this.getFillType( shape ) == "color" ) {
-        result = shape.node.getAttribute( "fill" );
-      }
-      return result;
-    },
-
-    setFillGradient : function( shape, gradient ) {
-      if( gradient != null ) {
-        var id = "gradient_" + rwt.qx.Object.toHashCode( shape );
-        var gradNode;
-        var horizontal = gradient.horizontal === true;
-        if( typeof shape.defNodes[ id ] == "undefined" ) {
-          gradNode = this._createNode( "linearGradient" );
-          gradNode.setAttribute( "id", id );
-          gradNode.setAttribute( "x1", 0 );
-          gradNode.setAttribute( "y1", 0 );
-          this._addNewDefinition( shape, gradNode, id );
-        } else {
-          gradNode = shape.defNodes[ id ];
-        }
-        gradNode.setAttribute( "x2", horizontal ? 1 : 0 );
-        gradNode.setAttribute( "y2", horizontal ? 0 : 1 );
-        // clear old colors:
-        var stopColor = gradNode.childNodes[ 0 ];
-        while( stopColor ) {
-          gradNode.removeChild( stopColor );
-          stopColor = gradNode.childNodes[ 0 ];
-        }
-        // set new colors
-        for( var colorPos = 0; colorPos < gradient.length; colorPos++ ) {
-          stopColor = this._createNode( "stop" );
-          stopColor.setAttribute( "offset", gradient[ colorPos ][ 0 ] );
-          stopColor.setAttribute( "stop-color", gradient[ colorPos ][ 1 ] );
-          gradNode.appendChild( stopColor );
-        }
-        shape.node.setAttribute( "fill", "url(#" + id + ")" );
-      } else {
-        shape.node.setAttribute( "fill", "none" );
-      }
-    },
-
-    setFillPattern : function( shape, source, width, height ) {
-      if( source != null ) {
-        var hash = rwt.qx.Object.toHashCode( shape );
-        var patternId = "pattern_" + hash;
-        var patternNode;
-        var imageNode;
-        if( typeof shape.defNodes[ patternId ] == "undefined" ) {
-          patternNode = this._createNode( "pattern" );
-          patternNode.setAttribute( "id", patternId );
-          patternNode.setAttribute( "x", 0 );
-          patternNode.setAttribute( "y", 0 );
-          patternNode.setAttribute( "patternUnits", "userSpaceOnUse" );
-          imageNode = this._createNode( "image" );
-          imageNode.setAttribute( "x", 0 );
-          imageNode.setAttribute( "y", 0 );
-          imageNode.setAttribute( "preserveAspectRatio", "none" );
-          patternNode.appendChild( imageNode );
-          this._addNewDefinition( shape, patternNode, patternId );
-        } else {
-          patternNode = shape.defNodes[ patternId ];
-          imageNode = patternNode.firstChild;
-        }
-        // the "-1" offset drastically reduces the white lines between
-        // the tiles when zoomed in firefox.
-        patternNode.setAttribute( "width", width );
-        patternNode.setAttribute( "height", height );
-        imageNode.setAttribute( "width", width );
-        imageNode.setAttribute( "height", height );
-        shape.node.setAttribute( "fill", "url(#" + patternId + ")" );
-        if( rwt.client.Client.getEngine() == "webkit" ) {
-          // Bug 301236: Loading an image using SVG causes a bad request
-          // AFTER the image-request. Prevent by pre-loading the image.
-          this._onImageLoad( source, function() {
-            if(   shape.parent !== null
-               && shape.parent.node.parentNode )
-            {
-              rwt.graphics.SVG._setXLink( imageNode, source );
-              rwt.graphics.SVG._redrawWebkit( shape );
-            }
-          } );
-        } else {
-          this._setXLink( imageNode, source );
-        }
-      } else {
-        shape.node.setAttribute( "fill", "none" );
-      }
-    },
-
-    getFillType : function( shape ) {
-      var result = shape.node.getAttribute( "fill" );
-      if( result.search( "pattern_") != -1 ) {
-        result = "pattern";
-      } else if( result.search( "gradient_") != -1 ) {
-        result = "gradient";
-      } else if( result == "none" ) {
-        result = null;
-      } else {
-        result = "color";
-      }
-      return result;
-    },
-
-    setStroke : function( shape, color, width ) {
-      shape.node.setAttribute( "stroke-width", width + "px" );
-      // needed due to a bug in Google Chrome (see bug 300509 ):
-      if( width === 0 ) {
-        shape.node.setAttribute( "stroke", "none" );
-      } else {
-        shape.node.setAttribute( "stroke", color != null ? color : "none" );
-      }
-    },
-
-    getStrokeWidth : function( shape ) {
-      // this assumes that only px can be set, which is true within this class
-      return parseFloat( shape.node.getAttribute( "stroke-width" ) );
-    },
-
-    getStrokeColor : function( shape ) {
-      return shape.node.getAttribute( "stroke" );
-    },
-
-    setOpacity : function( shape, opacity ) {
-      shape.node.setAttribute( "opacity", opacity );
-    },
-
-    getOpacity : function( shape ) {
-      var result = shape.node.getAttribute( "opacity" );
-      return result ? result : 0;
-    },
-
-    setBlur : function( shape, blurRadius ) {
-      if( blurRadius > 0 ) {
-        var id = "filter_" + rwt.qx.Object.toHashCode( shape );
-        var filterNode;
-        if( typeof shape.defNodes[ id ] === "undefined" ) {
-          filterNode = this._createNode( "filter" );
-          filterNode.setAttribute( "id", id );
-          filterNode.appendChild( this._createNode( "feGaussianBlur" ) );
-          this._addNewDefinition( shape, filterNode, id );
-        } else {
-          filterNode = shape.defNodes[ id ];
-        }
-        filterNode.firstChild.setAttribute( "stdDeviation", blurRadius / 2 );
-        shape.node.setAttribute( "filter", "url(#" + id + ")" );
-      } else {
-        shape.node.setAttribute( "filter", "none" );
-      }
-    },
-
-    getBlur : function( shape ) {
-      var result = 0;
-      var filter = shape.node.getAttribute( "filter" );
-      if( filter && filter !== "none" ) {
-        var id = "filter_" + rwt.qx.Object.toHashCode( shape );
-        var filterNode = shape.defNodes[ id ];
-        result = filterNode.firstChild.getAttribute( "stdDeviation" ) * 2;
-      }
-      return result;
-    },
-
-    /////////
-    // helper
-
-    _onImageLoad : function( source, func ) {
-      var loader = new Image();
-      loader.src = source;
-      loader.onload = function( ev ) {
-        // Fix for bug 301768: "onload" is sometimes called too early due
-        // to a bug in Google Chrome. This can be detected by this check:
-        if( arguments.callee.caller != null ) {
-          rwt.graphics.SVG._onImageLoad( source, func );
-        } else {
-          func();
-        }
-      };
-    },
-
-    _createNode : function( type ) {
-      return document.createElementNS( "http://www.w3.org/2000/svg", type );
-    },
-
-    _createRect : function() {
-      var result = {};
-      result.type = "svgRect";
-      var node = this._createNode( "rect" );
-      node.setAttribute( "width", "0" );
-      node.setAttribute( "height", "0" );
-      node.setAttribute( "x", "0" );
-      node.setAttribute( "y", "0" );
-      result.node = node;
-      return result;
-    },
-
-    _setXLink : function( node, value ) {
-      node.setAttributeNS( "http://www.w3.org/1999/xlink", "href", value );
-    },
-
-    _createRoundRect : function() {
-      var result = {};
-      result.type = "svgRoundRect";
-      var node = this._createNode( "path" );
-      result.node = node;
-      return result;
-    },
-
-    _addNewDefinition : function( shape, node, id ) {
-      shape.defNodes[ id ] = node;
-      if( shape.parent != null ) {
-        shape.parent.defsNode.appendChild( node );
-      }
-    },
-
-    // TODO [tb] : optimize so only the currently needed defs. are attached?
-    _attachDefinitions : function( shape ) {
-      for( var id in shape.defNodes ) {
-        var node = shape.defNodes[ id ];
-        shape.parent.defsNode.appendChild( node );
-      }
-    },
-
-    _detachDefinitions : function( shape ) {
-      for( var id in shape.defNodes ) {
-        var node = shape.defNodes[ id ];
-        node.parentNode.removeChild( node );
-      }
-    },
-
-    _convertNumeric : function( value ) {
-      return typeof value == "string" ? value : value + "px";
-    },
-
-    _redrawWebkit : function( shape ) {
-      var wrapper = function() {
-        rwt.graphics.SVG._redrawWebkitCore( shape );
-      };
-      window.setTimeout( wrapper, 10 );
-    },
-
-    _redrawWebkitCore : function( shape ) {
-      if( shape.parent != null ) {
-        shape.node.style.webkitTransform = "scale(1)";
-      }
-    },
-
-    // TODO [tb] : remove if no longer needed:
-
-    _dummyNode : null,
-
-    _getDummyNode : function() {
-      if( this._dummyNode == null ) {
-        this._dummyNode = this._createNode( "rect" );
-      }
-      return this._dummyNode;
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2007, 2013 Innoopract Informationssysteme GmbH.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-/**
- * This class contains static helper functions for widgets.
- */
-rwt.qx.Class.define( "rwt.widgets.util.WidgetUtil", {
-
-  statics : {
-
-    /**
-     * workaround for IE bug
-     * div's have the height of the font even if they are empty
-     */
-    fixIEBoxHeight : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function( widget ) {
-        widget.setStyleProperty( "fontSize", "0" );
-        widget.setStyleProperty( "lineHeight", "0" );
-      },
-      "default" : rwt.util.Functions.returnTrue
-    } ),
-
-    getControl : function( widget ) {
-      var widgetManager = rwt.remote.WidgetManager.getInstance();
-      var result = widget;
-      while( result != null && !widgetManager.isControl( result ) ) {
-        result = result.getParent ? result.getParent() : null;
-      }
-      return result;
-    },
-
-    getChildIds : function( widget ) {
-      return widget.getUserData( "rwt_Children" );
-    },
-
-    /**
-     * Can be used simulate mouseEvents on the qooxdoo event-layer.
-     * Manager and handler that are usually notified by
-     * rwt.event.EventHandler will not receive the event.
-     */
-    _fakeMouseEvent : function( originalTarget, type ) {
-      if( originalTarget.getEnabled() ) {
-        var domTarget = originalTarget._getTargetNode();
-        var EventHandlerUtil = rwt.event.EventHandlerUtil;
-        var target = EventHandlerUtil.getTargetObject( null, originalTarget, true );
-        var domEvent = {
-          "type" : type,
-          "target" : domTarget,
-          "button" : 0,
-          "wheelData" : 0,
-          "detail" : 0,
-          "pageX" : 0,
-          "pageY" : 0,
-          "clientX" : 0,
-          "clientY" : 0,
-          "screenX" : 0,
-          "screenY" : 0,
-          "shiftKey" : false,
-          "ctrlKey" : false,
-          "altKey" : false,
-          "metaKey" : false,
-          "preventDefault" : function(){}
-        };
-        var event = new rwt.event.MouseEvent( type,
-                                                  domEvent,
-                                                  domTarget,
-                                                  target,
-                                                  originalTarget,
-                                                  null );
-        target.dispatchEvent( event );
-      }
-    }
-
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2007, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-/**
- * Store for theme values that cannot be kept in a qooxdoo theme. The store is
- * filled from the server at startup.
- */
-rwt.qx.Class.define( "rwt.theme.ThemeStore", {
-
-  type : "singleton",
-
-  extend : rwt.qx.Object,
-
-  construct : function() {
-    this._values = {
-      dimensions : {},
-      boxdims : {},
-      images : {},
-      gradients : {},
-      fonts : {},
-      colors : {},
-      borders : {},
-      cursors : {},
-      animations : {},
-      shadows : {}
-    };
-    this._cssValues = {};
-    this._statesMap = {
-      "*" : {
-        "hover" : "over"
-      },
-      "DateTime-Calendar-Day" : {
-        "unfocused" : "parent_unfocused"
-      },
-      "List-Item" : {
-        "unfocused" : "parent_unfocused"
-      },
-      "Text" : {
-        "read-only" : "readonly"
-      },
-      "TreeItem" : {
-        "unfocused" : "parent_unfocused"
-      },
-      "Tree-RowOverlay" : {
-        "unfocused" : "parent_unfocused"
-      },
-      "TreeColumn" : {
-        "hover" : "mouseover"
-      },
-      "Shell" : {
-        "inactive" : "!active"
-      },
-      "Shell-Titlebar" : {
-        "inactive" : "!active"
-      },
-      "Shell-MinButton" : {
-        "inactive" : "!active"
-      },
-      "Shell-MaxButton" : {
-        "inactive" : "!active"
-      },
-      "Shell-CloseButton" : {
-        "inactive" : "!active"
-      },
-      "TableColumn" : {
-        "hover" : "mouseover"
-      },
-      "TableItem" : {
-        "unfocused" : "parent_unfocused"
-      },
-      "Table-RowOverlay" : {
-        "unfocused" : "parent_unfocused"
-      },
-      "TabItem" : {
-        "selected" : "checked",
-        "first" : "firstChild",
-        "last" : "lastChild"
-      }
-    };
-    this._namedColors = {};
-  },
-
-  members : {
-
-    setCurrentTheme : function( themeId ) {
-      this._currentTheme = themeId;
-    },
-
-    getCurrentTheme : function() {
-      return this._currentTheme;
-    },
-
-    setFallbackTheme : function( themeId ) {
-      this.fallbackTheme = themeId;
-    },
-
-    getFallbackTheme : function() {
-      return this.fallbackTheme;
-    },
-
-    /////////////
-    // Server API
-
-    defineValues : function( values ) {
-      for( var type in this._values ) {
-        if( type in values ) {
-          for( var key in values[ type ] ) {
-            if( !( key in this._values[ type ] ) ) {
-              this._values[ type ][ key ] = values[ type ][ key ];
-            }
-          }
-        }
-      }
-    },
-
-    setThemeCssValues : function( theme, values, isFallback ) {
-      this._cssValues[ theme ] = values;
-      if( isFallback ) {
-        this.fallbackTheme = theme;
-      }
-      this._fillNamedColors( theme );
-    },
-
-    /////////////
-    // Client API
-
-    getColor : function( element, states, property, theme ) {
-      var key = this._getCssValue( element, states, property, theme );
-      var result = this._values.colors[ key ];
-      if( result instanceof Array ) {
-        result = "#" + rwt.util.Colors.rgbToHexString( result );
-      }
-      return result;
-    },
-
-    getAlpha : function( element, states, property, theme ) {
-      var key = this._getCssValue( element, states, property, theme );
-      var color = this._values.colors[ key ];
-      var result = 1;
-      if( color instanceof Array ) {
-        result = color[ 3 ];
-      } else if( color === "transparent" ) {
-        result = 0;
-      }
-      return result;
-    },
-
-    getNamedColor : function( name ) {
-      var result = this._namedColors[ name ];
-      return result ? result : name;
-    },
-
-    getDimension : function( element, states, property, theme ) {
-      var key = this._getCssValue( element, states, property, theme );
-      return this._values.dimensions[ key ];
-    },
-
-    getBoxDimensions : function( element, states, property, theme ) {
-      var key = this._getCssValue( element, states, property, theme );
-      return this._values.boxdims[ key ];
-    },
-
-    getBoolean : function( element, states, property, theme ) {
-      return this._getCssValue( element, states, property, theme );
-    },
-
-    getFloat : function( element, states, property, theme ) {
-      return parseFloat( this._getCssValue( element, states, property, theme ) );
-    },
-
-    getIdentifier : function( element, states, property, theme ) {
-      return this._getCssValue( element, states, property, theme );
-    },
-
-    getImage : function( element, states, property, theme ) {
-      var result;
-      var key = this._getCssValue( element, states, property, theme );
-      var imageArray = this._values.images[ key ];
-      if( imageArray != null ) {
-        // TODO [rh] remove hard-coded path (first segment is defined by
-        //      resource-manager)
-        result = "rwt-resources/themes/images/" + key;
-      } else {
-        // TODO [rst] Handle null values - currently, both null and the string
-        // "undefined" lead to a js error for icon property
-        result = rwt.theme.ThemeValues.NONE_IMAGE;
-      }
-      return result;
-    },
-
-    getSizedImage : function( element, states, property, theme ) {
-      var key = this._getCssValue(  element, states, property, theme );
-      var imageArray = this._values.images[ key ];
-      var result;
-      if( imageArray != null ) {
-        // TODO [tb] : Revise hardcoded path
-        result = [ "rwt-resources/themes/images/" + key ].concat( imageArray );
-      } else {
-        result = rwt.theme.ThemeValues.NONE_IMAGE_SIZED;
-      }
-      return result;
-    },
-
-    getCursor : function( element, states, property, theme ) {
-      var key = this._getCssValue( element, states, property, theme );
-      var result = this._values.cursors[ key ];
-      if( key === null ) {
-        result = "rwt-resources/themes/cursors/" + key;
-      }
-      return result;
-    },
-
-    getAnimation : function( element, states, property, theme ) {
-      var key = this._getCssValue( element, states, property, theme );
-      return this._values.animations[ key ];
-    },
-
-    getFont : function( element, states, property, theme ) {
-      var key = this._getCssValue( element, states, property, theme );
-      var value = this._values.fonts[ key ];
-      if( !( value instanceof rwt.html.Font ) ) {
-        var font = new rwt.html.Font();
-        font.setSize( value.size );
-        font.setFamily( value.family );
-        font.setBold( value.bold );
-        font.setItalic( value.italic );
-        this._values.fonts[ key ] = font;
-      }
-      return this._values.fonts[ key ];
-    },
-
-    getBorder : function( element, states, property, theme ) {
-      var border;
-      var key = this._getCssValue( element, states, property, theme );
-      var value = this._values.borders[ key ];
-      var resolved = value instanceof rwt.html.Border;
-      var style = resolved ? value.getStyle() : value.style;
-      if( style === "solid" || style === "none" || style === null ) {
-        var radiiKey = this._getCssValue( element, states, "border-radius", theme );
-        var radii = this._values.boxdims[ radiiKey ];
-        if( radii != null && ( radii.join( "" ) !== "0000" ) ) {
-          var roundedBorderKey = key + "#" + radiiKey;
-          var roundedBorder = this._values.borders[ roundedBorderKey ];
-          if( !roundedBorder ) {
-            var width = resolved ? value.getWidthTop() : value.width;
-            var color = resolved ? value.getColorTop() : value.color;
-            border = new rwt.html.Border( width, "rounded", color, radii );
-            this._values.borders[ roundedBorderKey ] = border;
-          } else {
-            border = roundedBorder;
-          }
-        }
-      }
-      if( !border ) {
-        if( resolved ) {
-          border = value;
-        } else {
-          border = this._getBorderFromValue( value );
-          this._values.borders[ key ] = border;
-        }
-      }
-      return border;
-    },
-
-    getShadow : function( element, states, property, theme ) {
-      var key = this._getCssValue( element, states, property, theme );
-      return this._values.shadows[ key ];
-    },
-
-    getNamedBorder : function( name ) {
-      var key = "_" + name;
-      var result = this._values.borders[ key ];
-      if( !result ) {
-        var borderDef = rwt.theme.BorderDefinitions.getDefinition( name );
-        if( borderDef ) {
-          var color = this._resolveNamedColors( borderDef.color );
-          var innerColor = this._resolveNamedColors( borderDef.innerColor );
-          result = new rwt.html.Border( borderDef.width, "complex", color, innerColor );
-          this._values.borders[ key ] = result;
-        } else {
-          result = null;
-        }
-      }
-      return result;
-    },
-
-    getGradient : function( element, states, property, theme ) {
-      var result = null;
-      var key = this._getCssValue( element, states, property, theme );
-      var value = this._values.gradients[ key ];
-      if( value ) {
-        // TODO [if] remove this check when values are rendered only once
-        if( value.colors && value.percents ) {
-          var gradient = [];
-          for( var i = 0; i < value.colors.length; i++ ) {
-            gradient[ i ] = [ value.percents[ i ] / 100, value.colors[ i ] ];
-          }
-          gradient.horizontal = !value.vertical;
-          this._values.gradients[ key ] = gradient;
-        }
-        result = this._values.gradients[ key ];
-      }
-      return result;
-    },
-
-    // Used by GraphicsMixin:
-    getImageSize : function( source ) {
-      var key = source.slice( "rwt-resources/themes/images/".length );
-      var image = this._values.images[ key ];
-      return image != null ? [ image[ 0 ], image[ 1 ] ] : [ 0, 0 ];
-    },
-
-    ////////////
-    // Internals
-
-    _getCssValue : function( element, states, property, theme ) {
-      var result;
-      if( theme == null ) {
-        theme = this._currentTheme;
-      }
-      if(    this._cssValues[ theme ] !== undefined
-          && this._cssValues[ theme ][ element ] !== undefined
-          && this._cssValues[ theme ][ element ][ property ] !== undefined )
-      {
-        var values = this._cssValues[ theme ][ element ][ property ];
-        var found = false;
-        for( var i = 0; i < values.length && !found; i++ ) {
-          if( this._matches( states, element, values[ i ][ 0 ] ) ) {
-            result = values[ i ][ 1 ];
-            found = true;
-          }
-        }
-      }
-      if( result === undefined && theme != this.fallbackTheme ) {
-        result = this._getCssValue( element, states, property, this.fallbackTheme );
-      }
-      return result;
-    },
-
-    _matches : function( states, element, constraints ) {
-      var result = true;
-      for( var i = 0; i < constraints.length && result; i++ ) {
-        var cond = constraints[ i ];
-        if( cond.length > 0 ) {
-          var c = cond.charAt( 0 );
-          if( c == "." ) {
-            result = "variant_" + cond.substr( 1 ) in states;
-          } else if( c == ":" ) {
-            var state = this._translateState( cond.substr( 1 ), element );
-            if( state.charAt( 0 ) == "!" ) {
-              result = ! ( state.substr( 1 ) in states );
-            } else {
-              result = state in states;
-            }
-          } else if( c == "[" ) {
-            result = "rwt_" + cond.substr( 1 ) in states;
-          }
-        }
-      }
-      return result;
-    },
-
-    _translateState : function( state, element ) {
-      var result = state;
-      if( element in this._statesMap && state in this._statesMap[ element ] ) {
-        result = this._statesMap[ element ][ state ];
-      } else if( state in this._statesMap[ "*" ] ) {
-        result = this._statesMap[ "*" ][ state ];
-      }
-      return result;
-    },
-
-    _resolveNamedColors : function( colorArr ) {
-      var result = null;
-      if( colorArr ) {
-        result = [];
-        for( var i = 0; i < colorArr.length; i++ ) {
-          result[ i ] = this.getNamedColor( colorArr[ i ] );
-        }
-      }
-      return result;
-    },
-
-    // Fills a map with named colors necessary for border-definitions
-    _fillNamedColors : function( theme ) {
-      this._namedColors[ "darkshadow" ]
-        = this.getColor( "Display", {}, "rwt-darkshadow-color", theme );
-      this._namedColors[ "highlight" ]
-        = this.getColor( "Display", {}, "rwt-highlight-color", theme );
-      this._namedColors[ "lightshadow" ]
-        = this.getColor( "Display", {}, "rwt-lightshadow-color", theme );
-      this._namedColors[ "shadow" ]
-        = this.getColor( "Display", {}, "rwt-shadow-color", theme );
-      this._namedColors[ "thinborder" ]
-        = this.getColor( "Display", {}, "rwt-thinborder-color", theme );
-      // TODO [rst] eliminate these properties
-      this._namedColors[ "selection-marker" ]
-        = this.getColor( "Display", {}, "rwt-selectionmarker-color", theme );
-      this._namedColors[ "background" ]
-        = this.getColor( "*", {}, "background-color", theme );
-      this._namedColors[ "foreground" ]
-        = this.getColor( "*", {}, "color", theme );
-      this._namedColors[ "info.foreground" ]
-        = this.getColor( "Widget-ToolTip", {}, "color", theme );
-    },
-
-    _getBorderFromValue : function( value ) {
-      var result = null;
-      if( value.color == null ) {
-        if( value.width == 1 ) {
-          if( value.style == "outset" ) {
-            result = this.getNamedBorder( "thinOutset" );
-          } else if( value.style == "inset" ) {
-            result = this.getNamedBorder( "thinInset" );
-          }
-        } else if( value.width == 2 ) {
-          result = this.getNamedBorder( value.style );
-        }
-      }
-      if( result === null ) {
-        result = new rwt.html.Border( value.width, value.style, value.color );
-      }
-      return result;
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.theme.ThemeStore", {
-
-  factory : function( properties ) {
-    return rwt.theme.ThemeStore.getInstance();
-  },
-
-  service : true,
-
-  methods : [
-    "loadActiveTheme",
-    "loadFallbackTheme"
-  ],
-
-  methodHandler : {
-    "loadActiveTheme" : function( object, params ) {
-      var request = new rwt.remote.Request( params.url, "GET", "application/json" );
-      request.setAsynchronous( false );
-      request.setSuccessHandler( function( event ) {
-        var result = JSON.parse( event.responseText );
-        object.defineValues( result.values );
-        object.setThemeCssValues( params.url, result.theme, false );
-        object.setCurrentTheme( params.url );
-      } );
-      request.send();
-    },
-    "loadFallbackTheme" : function( object, params ) {
-      var request = new rwt.remote.Request( params.url, "GET", "application/json" );
-      request.setAsynchronous( false );
-      request.setSuccessHandler( function( event ) {
-        var result = JSON.parse( event.responseText );
-        object.defineValues( result.values );
-        object.setThemeCssValues( params.url, result.theme, true );
-      } );
-      request.send();
-    }
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2009, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.base.MultiCellWidget",  {
-
-  extend : rwt.widgets.base.Terminator,
-
-  /**
-   * param cells: an array of cell types to define widget structure.
-   *              Valid types are "image" and "label".
-   *              Examples:
-   *                [ "image" ]
-   *                [ "image", "image", "label", "image" ]
-   */
-  construct : function( cells ) {
-    this.base( arguments );
-    // cellData for a single cell is:
-    // [ type, content, width, height, computedWidth, computedHeight, visible ]
-    this.__cellData = null;
-    this.__cellNodes = null;
-    this.__cellCount = null;
-    this.__computedTotalSpacing = null;
-    this.__styleRegExp = /([a-z])([A-Z])/g;
-    this.__createCellData( cells );
-    this.__paddingCache = [ 0, 0, 0, 0 ];
-    this.__fontCache = {};
-    this.__colorCache = "";
-    this._flexibleCell = -1;
-    this.initWidth();
-    this.initHeight();
-    this.addToQueue( "createContent" );
-    this.setOverflow( "hidden" );
-    this.initSelectable();
-    this.initCursor();
-    this.initTextColor();
-    this.initHorizontalChildrenAlign();
-  },
-
-  destruct : function() {
-    this._disposeObjectDeep( "__cellData", 0 );
-    this._disposeObjectDeep( "__cellNodes", 0 );
-    this._disposeObjectDeep( "__paddingCache", 0 );
-    this._disposeObjectDeep( "_fontCache", 0 );
-  },
-
-  properties : {
-
-    spacing : {
-      check : "Integer",
-      init : 4,
-      themeable : true,
-      apply : "_applySpacing",
-      event : "changeSpacing"
-    },
-
-    horizontalChildrenAlign : {
-      check : [ "left", "center", "right" ],
-      init : "center",
-      themeable : true,
-      apply : "_applyHorizontalChildrenAlign"
-    },
-
-    verticalChildrenAlign : {
-      check : [ "top", "middle", "bottom" ],
-      init : "middle",
-      themeable : true,
-      apply : "_applyVerticalChildrenAlign"
-    },
-
-    /////////////////////////////////
-    // refined properties from Widget
-
-    selectable : {
-      refine : true,
-      init : false
-    },
-
-    textColor : {
-      refine : true,
-      init : "#000000"
-    },
-
-    cursor : {
-      refine : true,
-      init : "default"
-    },
-
-    allowStretchX : {
-      refine : true,
-      init : false
-    },
-
-    allowStretchY : {
-      refine : true,
-      init : false
-    },
-
-    appearance : {
-      refine : true,
-      init : "atom"
-    },
-
-    width : {
-      refine : true,
-      init : "auto"
-    },
-
-    height : {
-      refine : true,
-      init : "auto"
-    }
-
-  },
-
-  members : {
-
-    // TODO [tb] : clean up api (private/public, order)
-
-    ///////////////////////
-    // LAYOUT : public api
-
-    /**
-     * This is either the URL (image) or the text (label)
-     */
-    setCellContent : function( cell, value ) {
-      this.__updateComputedCellDimension( cell );
-      if( this._cellHasContent( cell ) != ( value != null ) ) {
-        this._invalidateTotalSpacing();
-        this.addToQueue( "createContent" );
-      } else {
-        this.addToQueue( "updateContent" );
-      }
-      this.__cellData[ cell ][ 1 ] = value;
-    },
-
-    /**
-     * The dimensions for the cell. Is mandatory for images (or 0x0 will
-     * be assumed), optional for labels. Set a dimension to "null" to use the
-     * computed value.
-     */
-    setCellDimension : function( cell, width, height ) {
-      this.setCellWidth( cell, width );
-      this.setCellHeight( cell, height );
-    },
-
-    /**
-     * Setting visibility for a cell to false causes the element to have display:none,
-     * but still to be created and layouted.
-     */
-    setCellVisible : function( cell, value ) {
-      this.__cellData[ cell ][ 6 ] = value;
-      if( this.getCellNode( cell ) ) {
-        this.getCellNode( cell ).style.display = value ? "" : "none";
-      }
-    },
-
-    isCellVisible : function( cell ) {
-      return this.__cellData[ cell ][ 6 ];
-    },
-
-    getCellNode : function( cell ) {
-      return this.__cellNodes[ cell ];
-    },
-
-    getCellContent : function( cell ) {
-      return this.__cellData[ cell ][ 1 ];
-    },
-
-    setCellWidth : function( cell, width ) {
-      if( this._getCellWidth( cell ) !== width ) {
-        this._setCellWidth( cell, width );
-        this._invalidateTotalSpacing();
-        this._invalidatePreferredInnerWidth();
-        this._scheduleLayoutX();
-      }
-    },
-
-    setCellHeight : function( cell, height ) {
-      this._setCellHeight( cell, height );
-      this._invalidateTotalSpacing();
-      this._invalidatePreferredInnerHeight();
-      this._scheduleLayoutY();
-    },
-
-    setFlexibleCell : function( value ) {
-      this._flexibleCell = value;
-    },
-
-    getFlexibleCell : function() {
-      return this._flexibleCell;
-    },
-
-    // NOTE : Only needed by Tests
-    getCellDimension : function( cell ) {
-      var width = this.getCellWidth( cell );
-      var height = this.getCellHeight( cell );
-      return [ width, height ];
-    },
-
-    /**
-     * Returns the user-set value for width if it exists, else the computed
-     */
-    getCellWidth : function( cell, ignoreFlexible ) {
-      var cellEntry = this.__cellData[ cell ];
-      var isFlexible = this._flexibleCell === cell && ignoreFlexible !== true;
-      var width = ( cellEntry[ 2 ] != null ? cellEntry[ 2 ] : cellEntry[ 4 ] );
-      if( width == null || ( isFlexible && cellEntry[ 3 ] === null ) ) {
-        var computed = this.__computeCellDimension( cellEntry );
-        width = computed[ 0 ];
-      }
-      if( isFlexible ) {
-        width = this._limitCellWidth( cell, width );
-      }
-      return width;
-    },
-
-    /**
-     * Returns the user-set value for height if it exists, else the computed
-     */
-    getCellHeight : function( cell, ignoreFlexible ) {
-      var cellEntry = this.__cellData[ cell ];
-      var isFlexible = this._flexibleCell === cell && ignoreFlexible !== true;
-      var height = ( cellEntry[ 3 ] != null ? cellEntry[ 3 ] : cellEntry[ 5 ] );
-      if( height == null || ( isFlexible && cellEntry[ 3 ] === null ) ) {
-        var wrapWidth = isFlexible ? this.getCellWidth( cell ) : null;
-        var computed = this.__computeCellDimension( cellEntry, wrapWidth );
-        height = computed[ 1 ];
-      }
-      if( isFlexible ) {
-        height = this._limitCellHeight( cell, height );
-      }
-      return height;
-    },
-
-    /*
-    ---------------------------------------------------------------------------
-      DOM/HTML
-    ---------------------------------------------------------------------------
-    */
-
-    _applyElement : function( value, old ) {
-      this.base( arguments, value, old );
-      if( value ) {
-        this._createSubelements();
-        this._catchSubelements();
-      }
-    },
-
-    _createSubelements : function() {
-      var html = "";
-      for( var i = 0; i < this.__cellCount; i++ ) {
-        this.__setCellNode( i, null );
-        if( this._cellHasContent( i ) ) {
-          if( this._isTextCell( i ) ) {
-            html += this._getLabelHtml( i );
-          } else if( this._isImageCell( i ) ) {
-            html += this._getImageHtml( i );
-          }
-        }
-      }
-      this._getTargetNode().innerHTML = html;
-    },
-
-    _catchSubelements : function() {
-      var el = this._getTargetNode();
-      var childNumber = 0;
-      for( var i = 0; i < this.__cellCount; i++ ) {
-        if( this._cellHasContent( i ) ) {
-          this.__setCellNode( i, el.childNodes[ childNumber ] );
-          childNumber++;
-        }
-      }
-      if( !this.getEnabled() ) {
-        this._applyEnabled( false );
-      }
-    },
-
-    /*
-    ---------------------------------------------------------------------------
-      LAYOUT : _apply methods
-    ---------------------------------------------------------------------------
-    */
-
-    _applySpacing : function( value, old ) {
-      this._invalidateTotalSpacing();
-      this._scheduleLayoutX();
-    },
-
-    _applyHorizontalChildrenAlign : function( value, old ) {
-      this._scheduleLayoutX();
-      this.setStyleProperty( "textAlign", value );
-    },
-
-    _applyVerticalChildrenAlign : function( value, old ) {
-      this._scheduleLayoutY();
-    },
-
-    _applyPaddingTop : function( value, old ) {
-      this.addToLayoutChanges( "paddingTop" );
-      this.__paddingCache[ 0 ] = value;
-      this._invalidateFrameHeight();
-    },
-
-    _applyPaddingRight : function( value, old ) {
-      this.addToLayoutChanges( "paddingRight" );
-      this.__paddingCache[ 1 ] = value;
-      this._invalidateFrameWidth();
-    },
-
-    _applyPaddingBottom : function( value, old ) {
-      this.addToLayoutChanges( "paddingBottom" );
-      this.__paddingCache[ 2 ] = value;
-      this._invalidateFrameHeight();
-    },
-
-    _applyPaddingLeft : function( value, old ) {
-      this.addToLayoutChanges( "paddingLeft" );
-      this.__paddingCache[ 3 ] = value;
-      this._invalidateFrameWidth();
-    },
-
-    _applyEnabled : function( value, old ) {
-      this.base( arguments, value, old );
-      this._styleAllImagesEnabled();
-    },
-
-    /*
-    ---------------------------------------------------------------------------
-      LAYOUT : internals
-    ---------------------------------------------------------------------------
-    */
-
-    _scheduleLayoutX : function() {
-      this.addToQueue( "layoutX" );
-      this._afterScheduleLayoutX();
-    },
-
-    _scheduleLayoutY : function() {
-      this.addToQueue( "layoutY" );
-      this._afterScheduleLayoutY();
-    },
-
-    _afterScheduleLayoutX : rwt.util.Functions.returnTrue,
-
-    _afterScheduleLayoutY : rwt.util.Functions.returnTrue,
-
-    _beforeComputeInnerWidth : rwt.util.Functions.returnTrue,
-
-    _beforeComputeInnerHeight : rwt.util.Functions.returnTrue,
-
-    _beforeRenderLayout : rwt.util.Functions.returnTrue,
-
-    _afterRenderLayout : rwt.util.Functions.returnTrue,
-
-    _cellHasContent : function( cell ) {
-      var content = this.__cellData[ cell ][ 1 ];
-      return content != null;
-    },
-
-    _isImageCell : function( cell ) {
-      var type = this.__cellData[ cell ][ 0 ];
-      return type == "image";
-    },
-
-    _isTextCell : function( cell ) {
-      var type = this.__cellData[ cell ][ 0 ];
-      return type == "label";
-    },
-
-    _setCellWidth : function( cell, width ) {
-      this.__cellData[ cell ][ 2 ] = width;
-    },
-
-    _getCellWidth : function( cell ) {
-      return this.__cellData[ cell ][ 2 ];
-    },
-
-    _setCellHeight : function( cell, height ) {
-      this.__cellData[ cell ][ 3 ] = height;
-    },
-
-    __setCellNode : function( cell, node ) {
-      this.__cellNodes[ cell ] = node;
-      if( node !== null && !this.isCellVisible( cell ) ) {
-        node.style.display = "none";
-      }
-    },
-
-    __cellHasNode : function( cell ) {
-      return this.__cellNodes[ cell ] != null;
-    },
-
-    __createCellData : function( cells ) {
-      var data = [];
-      var nodes = [];
-      this.__cellCount = cells.length;
-      for( var i = 0; i < this.__cellCount; i++ ) {
-        nodes[ i ] = null;
-        data[ i ] = [ cells[ i ], null, null, null, null, null, true ];
-      }
-      this.__cellNodes = nodes;
-      this.__cellData = data;
-    },
-
-    __updateComputedCellDimension : function( cell ) {
-      var cellEntry = this.__cellData[ cell ];
-      cellEntry[ 4 ] = null; //delete computedWidth
-      cellEntry[ 5 ] = null; //delete computedHeight
-      if( cellEntry[ 2 ] == null ) { //uses computed width
-        this._invalidatePreferredInnerWidth();
-        this._scheduleLayoutX();
-      }
-      if( cellEntry[ 3 ] == null ) { //usses computedheight
-        this._invalidatePreferredInnerHeight();
-        this._scheduleLayoutY();
-      }
-    },
-
-    __computeCellDimension : function( cellEntry, wrapWidth ) {
-      var dimension;
-      if( cellEntry[ 0 ] == "label" && cellEntry[ 1 ] != null ) {
-        var calc = rwt.widgets.util.FontSizeCalculation;
-        dimension = calc.computeTextDimensions( cellEntry[ 1 ], this.__fontCache, wrapWidth );
-      } else {
-        dimension = [ 0, 0 ];
-      }
-      cellEntry[ 4 ] = dimension[ 0 ];
-      cellEntry[ 5 ] = dimension[ 1 ];
-      return dimension;
-    },
-
-    _isWidthEssential : rwt.util.Functions.returnTrue,
-    _isHeightEssential : rwt.util.Functions.returnTrue,
-
-    _computePreferredInnerWidth : function() {
-      return this._getContentWidth( "ignoreFlexible" );
-    },
-
-    _limitCellWidth : function( cell, preferredCellWidth ) {
-      // NOTE: Will assume current width as valid, not to be used for widget size calculation
-      var inner = this.getInnerWidth();
-      var contentWidth = this._getContentWidth( "skipFlexible" );
-      var maxCellWidth = Math.max( 0, inner - contentWidth );
-      var result;
-      if( preferredCellWidth > maxCellWidth ) {
-        result = maxCellWidth;
-      }  else {
-        result = preferredCellWidth;
-      }
-      return result;
-    },
-
-    // TODO [tb] : refactor
-    _getContentWidth : function( hint ) {
-      this._beforeComputeInnerWidth();
-      var result = 0;
-      if( hint === "ignoreFlexible" ) {
-        var space = this.getTotalSpacing();
-        var content = 0;
-        for( var i = 0; i < this.__cellCount; i++ ) {
-          content += this.getCellWidth( i, true );
-        }
-        result = space + content;
-      } else if( hint === "skipFlexible" ) {
-        var spacing = this.getSpacing();
-        for( var i = 0; i < this.__cellCount; i++ ) {
-          if( i !== this._flexibleCell ) {
-            var cellWidth = this.getCellWidth( i );
-            result += cellWidth;
-            if( cellWidth > 0 ) {
-              result += spacing;
-            }
-          }
-        }
-      } else if( hint === "flexible" ) {
-        var space = this.getTotalSpacing();
-        var content = 0;
-        for( var i = 0; i < this.__cellCount; i++ ) {
-          content += this.getCellWidth( i );
-        }
-        result = space + content;
-      } else {
-        throw new Error( "unkown hint" );
-      }
-      return result;
-    },
-
-    _computePreferredInnerHeight : function() {
-      this._beforeComputeInnerHeight();
-      var maxHeight = 0;
-      for( var i = 0; i < this.__cellCount; i++ ) {
-        maxHeight = Math.max( maxHeight, this.getCellHeight( i, true ) );
-      }
-      return maxHeight;
-    },
-
-    _limitCellHeight : function( cell, preferredCellHeight ) {
-      var inner = this.getInnerHeight();
-      var result;
-      if( preferredCellHeight > inner ) {
-        result = inner;
-      } else {
-        result = preferredCellHeight;
-      }
-      return result;
-    },
-
-    getTotalSpacing : function() {
-      if( this.__computedTotalSpacing == null ) {
-        var spaces = Math.max( 0, ( this.getTotalVisibleCells() - 1 ) );
-        this.__computedTotalSpacing = spaces * this.getSpacing();
-      }
-      return this.__computedTotalSpacing;
-    },
-
-    getTotalVisibleCells : function() {
-      var ret = 0;
-      for( var i = 0; i < this.__cellCount; i++ ) {
-        if( this.cellIsDisplayable( i ) ) {
-          ret++;
-        }
-      }
-      return ret;
-    },
-
-    /**
-     * a cell is "displayable" ( i.e. counts for the layout) if
-     * it either has a content set, or at least one dimension
-     */
-    cellIsDisplayable : function( cell ) {
-      return ( this.getCellWidth( cell, true ) > 0 );
-    },
-
-    _invalidateTotalSpacing : function() {
-      this.__computedTotalSpacing = null;
-      this._invalidatePreferredInnerWidth();
-    },
-
-    renderPadding : function( changes ) { },
-
-    _layoutPost : function( changes ) {
-      if( changes.createContent ){
-        this._createSubelements();
-        this._catchSubelements();
-      }
-      if( changes.updateContent && !changes.createContent ) {
-        this._updateAllImages();
-        this._updateAllLabels();
-      }
-      changes.layoutX =    changes.width
-                        || changes.layoutX
-                        || changes.frameWidth
-                        || changes.initial;
-      changes.layoutY =    changes.height
-                        || changes.layoutY
-                        || changes.frameHeight
-                        || changes.initial
-                        || ( changes.layoutX && this._flexibleCell != -1 );
-      this._beforeRenderLayout( changes );
-      if ( changes.layoutX ) {
-        this._renderLayoutX();
-      }
-      if ( changes.layoutY ) {
-        this._renderLayoutY();
-      }
-      this._afterRenderLayout( changes );
-      this.base( arguments, changes );
-    },
-
-    _renderLayoutX : function() {
-      var space = this.getSpacing();
-      var pad = this.__paddingCache;
-      var align = this.getHorizontalChildrenAlign();
-      var total = this._getContentWidth( "flexible" );
-      var inner = this.getInnerWidth();
-      var firstCellLeft  = null;
-      switch( align ) {
-        case "left":
-          firstCellLeft  = pad[ 3 ];
-        break;
-        case "center":
-          firstCellLeft  = Math.round( pad[ 3 ] + inner * 0.5 - total * 0.5 );
-        break;
-        case "right":
-          firstCellLeft  = pad[ 3 ] + inner - total;
-        break;
-        default:
-          firstCellLeft  = pad[ 3 ];
-        break;
-      }
-      var left = firstCellLeft ;
-      var width = null;
-      var style = null;
-      for( var i = 0; i < this.__cellCount; i++ ) {
-        if( this.cellIsDisplayable( i ) ) {
-          width = this.getCellWidth( i );
-          if( this._cellHasContent( i ) ) {
-            style = this.getCellNode( i ).style;
-            style.left = left + "px";
-            style.width = Math.max( 0, width ) + "px";
-          }
-          left += ( width + space );
-        }
-      }
-    },
-
-    _renderLayoutY : function() {
-      for( var i = 0; i < this.__cellCount; i++ ) {
-        if( this._cellHasContent( i ) ) {
-          this._renderCellLayoutY( i );
-        }
-      }
-    },
-
-    _renderCellLayoutY : function( cell ) {
-      var align = this.getVerticalChildrenAlign();
-      var pad = this.__paddingCache;
-      var inner = this.getInnerHeight();
-      var height = this.getCellHeight( cell );
-      var top = null;
-      switch( align ) {
-        case "top":
-          top = pad[ 0 ];
-        break;
-        case "middle":
-          top = Math.round( pad[ 0 ] + inner * 0.5 - height * 0.5 );
-        break;
-        case "bottom":
-          top = pad[ 0 ] + inner - height;
-        break;
-        default:
-          top = pad[ 0 ];
-        break;
-      }
-      var style = this.getCellNode( cell ).style;
-      style.top = top + "px";
-      style.height = Math.max( 0, height ) + "px";
-    },
-
-    /*
-    ---------------------------------------------------------------------------
-      IMAGE
-    ---------------------------------------------------------------------------
-    */
-
-    // TODO [tb] : refactor
-    _getImageHtml : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function( cell ) {
-        if( rwt.client.Client.getVersion() < 7 ) {
-          var content = this.getCellContent( cell );
-          var cssImageStr = "";
-          if( content ) {
-            cssImageStr
-              = "filter:progid:DXImageTransform.Microsoft"
-              + ".AlphaImageLoader(src='"
-              + content
-              + "',sizingMethod='crop')";
-          }
-          return    '<div style="position:absolute;border:0 none;line-height:0px;font-size:0px;'
-                  + cssImageStr
-                  + '"></div>';
-        } else {
-          var content = this.getCellContent( cell );
-          var cssImageStr = "";
-          if( content ) {
-            cssImageStr = "background-image:url(" + content + ")";
-          }
-          return   "<div style='position:absolute;border:0 none;line-height:0px;font-size:0px;"
-                 + cssImageStr
-                 + ";background-repeat:no-repeat;' ></div>";
-        }
-      },
-      "default" : function( cell ) {
-        var content = this.getCellContent( cell );
-        var cssImageStr = "";
-        if( content ) {
-          cssImageStr = "background-image:url(" + content + ")";
-        }
-        return   "<div style='position:absolute;border:0 none;"
-               + cssImageStr
-               + ";background-repeat:no-repeat;' ></div>";
-      }
-    } ),
-
-    _updateImage : function( cell ) {
-      var node = this.getCellNode( cell );
-      var source = this.getCellContent( cell );
-      var opacity = this.getEnabled() ? 1 : 0.3;
-      rwt.html.Style.setBackgroundImage( node, source, opacity );
-    },
-
-    _updateAllImages : function() {
-      for( var i = 0; i < this.__cellCount; i++ ) {
-        if( this._isImageCell( i ) && this._cellHasContent( i ) ) {
-          this._updateImage( i );
-        }
-      }
-    },
-
-    _styleAllImagesEnabled : function() {
-      for( var i = 0; i < this.__cellCount; i++ ) {
-        if( this._isImageCell( i ) && this.__cellHasNode( i ) ) {
-          this._updateImage( i );
-        }
-      }
-    },
-
-    /*
-    ---------------------------------------------------------------------------
-      LABEL
-    ---------------------------------------------------------------------------
-    */
-
-    _getLabelHtml : function( cell ) {
-      return   "<div style='position:absolute;border:0 none;overflow:hidden;"
-             + this._joinStyleProperties( this.__fontCache )
-             + "'>"
-             + this.getCellContent( cell )
-             + "</div>";
-    },
-
-   _joinStyleProperties : function( map ) {
-      var str = [];
-      var value;
-      for( var attribute in map ) {
-        value = map[ attribute ];
-        if( value ) {
-          str.push( attribute, ":", value, ";" );
-        }
-      }
-      var joinedCss = str.join( "" );
-      return joinedCss.replace( this.__styleRegExp, "$1-$2" ).toLowerCase();
-    },
-
-    _applyFont : function( value, old ) {
-      this._styleFont( value );
-    },
-
-    _styleFont : function( font ) {
-      if( font ) {
-        font.renderStyle( this.__fontCache );
-      } else {
-        rwt.html.Font.resetStyle( this.__fontCache );
-      }
-      for( var i = 0; i < this.__cellCount; i++ ) {
-        if( this._isTextCell( i ) && this._cellHasContent( i ) ) {
-          if( this.__cellHasNode( i ) ) {
-            if( font ) {
-              font.renderStyle( this.getCellNode( i ).style );
-            } else {
-              rwt.html.Font.resetStyle( this.getCellNode( i ).style );
-            }
-          }
-          this.__updateComputedCellDimension( i );
-        }
-      }
-    },
-
-    _applyTextColor : function( value, old ) {
-      if( value ) {
-        this.setStyleProperty( "color", value );
-      } else {
-        this.removeStyleProperty( "color" );
-      }
-    },
-
-    _updateLabel : function( cell ) {
-      this.getCellNode( cell ).innerHTML = this.getCellContent( cell );
-    },
-
-    _updateAllLabels : function() {
-      for( var i = 0; i < this.__cellCount; i++ ) {
-        if( this._isTextCell( i ) && this._cellHasContent( i ) ) {
-          this._updateLabel( i );
-        }
-      }
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- *  Copyright: 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                        and EclipseSource
- *
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define("rwt.widgets.ListItem", {
-
-  extend : rwt.widgets.base.MultiCellWidget,
-
-  construct : function() {
-    this.base( arguments, [ "label" ] );
-    this.setHorizontalChildrenAlign( "left" );
-    // Fix for Bug 396835 - [List][Combo] Lists can scroll over maximum in IE7/8
-    this.setContainerOverflow( false );
-  },
-
-  properties : {
-
-    appearance : {
-      refine : true,
-      init : "list-item"
-    },
-
-    width : {
-      refine : true,
-      init : null
-    },
-
-    allowStretchX : {
-      refine : true,
-      init : true
-    }
-
-  },
-
-  members : {
-
-    setLabel : function( value ) {
-      this.setCellContent( 0, value );
-    },
-
-    getLabel : function( value ) {
-      return this.getCellContent( 0 );
-    },
-
-    matchesString : function( value ) {
-      var content;
-      var el = this.getCellNode( 0 );
-      if( el ) {
-        content = el.innerText || el.textContent;
-      } else {
-        content = this.getLabel();
-      }
-      var input = ( typeof value === "string" ) ? value.toLowerCase() : "";
-      content = ( typeof content === "string" ) ? content.toLowerCase() : "";
-      return input !== "" && content.indexOf( input ) === 0;
-    },
-
-    // overwritten:
-    getCellHeight : function( cell ) {
-      return this.getHeight() - this.getPaddingTop();
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2009, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Mixin.define( "rwt.event.DomEventPatch", {
-
-  "members" : {
-
-    setDomEvent : function( domEvent ) {
-      this.base( arguments, domEvent );
-      rwt.remote.EventUtil._shiftKey = domEvent.shiftKey;
-      rwt.remote.EventUtil._ctrlKey = domEvent.ctrlKey;
-      rwt.remote.EventUtil._altKey = domEvent.altKey;
-      rwt.remote.EventUtil._metaKey = domEvent.metaKey;
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2009, 2012 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.util.MenuManager", {
-  type : "singleton",
-  extend : rwt.util.ObjectManager,
-
-  members :  {
-
-    // Note: This function is called on alle mousedown and mouseup events,
-    //       and also on "esc" and "tab" key-events and on window-blur.
-    update : function( target, eventType ) {
-      var menus = this.getAll();
-      var isMouseDown = eventType == "mousedown";
-      var isMouseUp = eventType == "mouseup";
-      var isMouseEvent = isMouseDown || isMouseUp;
-      var eventHasTarget = target != null;
-      var targetHasMenu =    eventHasTarget
-                          && target.getMenu
-                          && target.getMenu() != null;
-      var targetMenuBar = this._getMenuBar( target );
-
-      for ( var hash in menus ) {
-        var menu = menus[ hash ];
-        var hide = false;
-        // 1. AutoHide supported?
-        if ( menu.getAutoHide() ) {
-          // Gathering data
-          var targetIsOpener = menu.getOpener() === target;
-          var isContextMenu =
-            !( menu.getOpener() instanceof rwt.widgets.MenuItem );
-          var notSameMenuBar = targetMenuBar != this._getMenuBar( menu );
-          // 2. Global event like keydown or blur?
-          if ( !eventHasTarget || !isMouseEvent ) {
-            hide = true;
-          }
-          // 3. Click on another menubar?
-          if( isMouseDown && notSameMenuBar ) {
-            hide = true;
-          }
-          // 4. Click on the opener of a context menu?
-          if( isMouseDown && isContextMenu && targetIsOpener ) {
-            hide = true;
-          }
-          // Ignore other events that are handled by the menu itself
-          if( !targetHasMenu && !targetIsOpener ) {
-            // 5. mousedown somwhere outside the menu
-            if ( isMouseDown && !menu.isSubElement( target ) ) {
-              hide = true;
-            }
-            // 6. Execute of an menuItem
-            if ( isMouseUp && menu.isSubElement( target, true ) ) {
-              hide = true;
-            }
-          }
-        }
-        if( hide ) {
-          menu.hide();
-        }
-      }
-    },
-
-    _getMenuBar : function( widget ) {
-      var menu = null;
-      var menuBar = null;
-      if( widget instanceof rwt.widgets.MenuItem ) {
-        menu = widget.getParentMenu();
-      } else {
-        if(    widget instanceof rwt.widgets.Menu
-            || widget instanceof rwt.widgets.MenuBar
-        ) {
-          menu = widget;
-        }
-      }
-      while ( menuBar == null && menu != null ) {
-        if( menu instanceof rwt.widgets.MenuBar ) {
-          menuBar = menu;
-        } else {
-          var hasOpener =
-            menu.getOpener() instanceof rwt.widgets.MenuItem;
-          var menu = hasOpener ? menu.getOpener().getParentMenu() : null;
-        }
-      }
-      return menuBar;
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2009, 2013 Innoopract Informationssysteme GmbH.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define("rwt.widgets.MenuItem",  {
-  extend : rwt.widgets.base.MultiCellWidget,
-
-  construct : function( menuItemType ) {
-    this.base( arguments, [ "image", "image", "label", "label", "image" ] );
-    this._hasSelectionListener = false;
-    this._selected = false;
-    this._parentMenu = null;
-    this._rawText = null;
-    this._mnemonicIndex = null;
-    this._subMenu = null;
-    this._subMenuOpen = false;
-    this._preferredCellWidths = null;
-    this.initTabIndex();
-    this.set( {
-      width : "auto",
-      horizontalChildrenAlign : "left",
-      verticalChildrenAlign : "middle"
-    } );
-    this.addEventListener( "mouseup", this.execute );
-    this.addEventListener( "changeFont", this._onFontChange );
-    this.addState( menuItemType );
-    switch( menuItemType ){
-      case "push" :
-       this._isSelectable = false;
-       this._isDeselectable = false;
-      break;
-      case "check":
-       this._isSelectable = true;
-       this._isDeselectable = true;
-      break;
-      case "cascade":
-       this._isSelectable = false;
-       this._isDeselectable = false;
-      break;
-      case "radio":
-       this._isSelectable = true;
-       this.setNoRadioGroup( false );
-       rwt.widgets.util.RadioButtonUtil.registerExecute( this );
-      break;
-    }
-    this._preferredCellWidths = [ 0, 0, 0, 0, 13 ];
-    if( this._isSelectable ) {
-      this.setCellContent( 0, "" );
-    }
-  },
-
-  destruct : function() {
-    this.setMnemonicIndex( null );
-    this._disposeFields( "_parentMenu", "_subMenu" );
-  },
-
-  properties : {
-
-    selectionIndicator : {
-      apply : "_applySelectionIndicator",
-      nullable : true,
-      themeable : true
-    },
-
-    arrow : {
-      apply : "_applyArrow",
-      nullable : true,
-      themeable : true
-    },
-
-    appearance : {
-      refine : true,
-      init : "menu-item"
-    },
-
-    tabIndex : {
-      refine : true,
-      init : 1
-    }
-
-  },
-
-  events : {
-    "subMenuChanged" : "rwt.event.Event"
-  },
-
-  members : {
-
-   setText : function( value ) {
-      this._rawText = value;
-      this._mnemonicIndex = null;
-      this.renderText();
-    },
-
-    setAccelerator : function( value ) {
-      var acc = null;
-      if( value ) {
-        // assumign a tab is rendered as four spaces
-        acc = rwt.util.Encoding.escapeText( value );
-        acc = rwt.util.Encoding.replaceWhiteSpaces( "    " + acc );
-      }
-      this.setCellContent( 3, acc );
-      this.setCellDimension( 3, null, null ); // force to recompute the width
-      this._setPreferredCellWidth( 3, this.getCellWidth( 3 ) );
-    },
-
-    setMnemonicIndex : function( value ) {
-      this._mnemonicIndex = value;
-      if( this._parentMenu instanceof rwt.widgets.MenuBar ) {
-        var mnemonicHandler = rwt.widgets.util.MnemonicHandler.getInstance();
-        if( ( typeof value === "number" ) && ( value >= 0 ) ) {
-          mnemonicHandler.add( this, this._onMnemonic );
-        } else {
-          mnemonicHandler.remove( this );
-        }
-      } else if( value != null && this._isMnemonicMenu() ) {
-        this.renderText();
-      }
-    },
-
-    renderText : function() {
-      this._applyText( this._isMnemonicMenu() );
-    },
-
-    _isMnemonicMenu : function() {
-      return     this._parentMenu instanceof rwt.widgets.Menu
-              && this._parentMenu.getMnemonics();
-    },
-
-    getMnemonicIndex : function() {
-      return this._mnemonicIndex;
-    },
-
-    handleMnemonic : function( event ) {
-      this._onMnemonic( event );
-    },
-
-    _applyText : function( mnemonic ) {
-      if( this._rawText ) {
-        var mnemonicIndex = mnemonic ? this._mnemonicIndex : undefined;
-        var text = rwt.util.Encoding.escapeText( this._rawText, mnemonicIndex );
-        this._setText( text );
-      } else {
-        this._setText( null );
-      }
-    },
-
-    _afterRenderLayout : function( changes ) {
-      if( changes.createContent && this.getCellNode( 3 ) ) {
-        this.getCellNode( 3 ).style.textAlign = "right";
-      }
-    },
-
-    _onMnemonic : function( event ) {
-      switch( event.type ) {
-        case "show":
-          this._applyText( true );
-        break;
-        case "hide":
-          this._applyText( false );
-        break;
-        case "trigger":
-          var charCode = this._rawText.toUpperCase().charCodeAt( this._mnemonicIndex );
-          if( event.charCode === charCode ) {
-            if( this.hasState( "cascade" ) ) {
-              this._parentMenu.openByMnemonic( this );
-            } else {
-              this.execute();
-              rwt.widgets.util.MenuManager.getInstance().update();
-            }
-            event.success = true;
-          }
-        break;
-      }
-    },
-
-    setParentMenu : function( menu ) {
-      this._parentMenu = menu;
-    },
-
-    getParentMenu : function() {
-      return this._parentMenu;
-    },
-
-    setSubMenuOpen : function( bool ) {
-      this._subMenuOpen = bool;
-    },
-
-    setMenu : function( menu ) {
-      this._subMenu = menu;
-      this.dispatchSimpleEvent( "subMenuChanged" );
-    },
-
-    getMenu : function() {
-      return this._subMenu;
-    },
-
-    _applySelectionIndicator : function( value, old ) {
-      //never remove cell-node
-      var url = value ? value[ 0 ] : null;
-      var width = value ? value[ 1 ] : 0;
-      var height = value ? value[ 2 ] : 0;
-      if( url == null ) {
-        var content = this._isSelectable ? "" : null;
-        this.setCellContent( 0, content );
-      } else {
-        this.setCellContent( 0, url );
-      }
-      this.setCellHeight( 0, height );
-      this._setPreferredCellWidth( 0, width );
-    },
-
-    _setPreferredCellWidth : function( cell, width ) {
-      this._preferredCellWidths[ cell ] = width;
-      if( this._parentMenu instanceof rwt.widgets.Menu ) {
-        this._parentMenu.invalidateMaxCellWidth( cell );
-      }
-      this._scheduleLayoutX();
-    },
-
-    _afterScheduleLayoutX : function() {
-      if( this._parentMenu instanceof rwt.widgets.Menu ) {
-        this._parentMenu.scheduleMenuLayout();
-      }
-    },
-
-    getPreferredCellWidth : function( cell ) {
-      return this._preferredCellWidths[ cell ];
-    },
-
-    setImage : function( value, width, height ) {
-      this.setCellContent( 1, value );
-      this.setCellHeight( 1, height );
-      this._setPreferredCellWidth( 1, width );
-    },
-
-    _setText : function( value ) {
-      this.setCellContent( 2, value );
-      this.setCellDimension( 2, null, null ); // force to recompute the width
-      this._setPreferredCellWidth( 2, this.getCellWidth( 2 ) );
-    },
-
-    _onFontChange : function() {
-      this.setCellDimension( 2, null, null );
-      this._setPreferredCellWidth( 2, this.getCellWidth( 2 ) );
-    },
-
-    _applyArrow : function( value, old ) {
-      var url = value ? value[ 0 ] : null;
-      var width = value ? value[ 1 ] : 13;
-      var height = value ? value[ 2 ] : 0;
-      this.setCellContent( 4, url );
-      this.setCellHeight( 4, height );
-      this._setPreferredCellWidth( 4, width );
-    },
-
-    _beforeComputeInnerWidth : function() {
-      if( this._parentMenu instanceof rwt.widgets.Menu ) {
-        for( var i = 0; i < 5; i++ ) {
-          this._setCellWidth( i, this._parentMenu.getMaxCellWidth( i ) );
-        }
-      }
-    },
-
-    _beforeAppear : function() {
-      this.base( arguments );
-      if( this._parentMenu instanceof rwt.widgets.Menu ) {
-        this._parentMenu.invalidateAllMaxCellWidths();
-        this._parentMenu.scheduleMenuLayout();
-      }
-    },
-
-    setHasSelectionListener : function( value ) {
-      this._hasSelectionListener = value;
-    },
-
-    setSubMenu : function( value ) {
-      this._subMenu = value;
-      this.createDispatchEvent( "subMenuChanged" );
-    },
-
-    setNoRadioGroup : function( value ) {
-      if( this.hasState( "radio") ) {
-        this._noRadioGroup = value;
-        this._isDeselectable = value;
-      }
-    },
-
-    getNoRadioGroup : function() {
-      return this._noRadioGroup;
-    },
-
-    // TODO [tb] "execute", "setSelection", "_notifySelected" and possibly more
-    // could be shared between Button, MenuItem and (future) ToolItem.
-    // Then, also the corrosponding LCA-methods could be shared
-    execute : function() {
-      this.base( arguments );
-      if( this._isSelectable ) {
-        this.setSelection( !( this._selected && this._isDeselectable ) );
-      } else {
-        this._notifySelected();
-      }
-    },
-
-    setSelection : function( value ) {
-      var wasSelected = this._selected;
-      var selectionChanged = this._selected != value;
-      if( selectionChanged ) {
-        this._selected = value;
-        if( this._selected ) {
-          this.addState( "selected" );
-        } else {
-          this.removeState( "selected" );
-        }
-        if( !rwt.remote.EventUtil.getSuspended() ) {
-          var server = rwt.remote.Server.getInstance();
-          server.getRemoteObject( this ).set( "selection", this._selected );
-        }
-      }
-      if( selectionChanged || wasSelected ) {
-        this._notifySelected();
-      }
-    },
-
-    _notifySelected : function() {
-      if(    !rwt.remote.EventUtil.getSuspended()
-          && this._hasSelectionListener
-          && this._shouldSendEvent() )
-      {
-        rwt.remote.EventUtil.notifySelected( this );
-      }
-    },
-
-    _shouldSendEvent : function() {
-      return !this.hasState( "cascade" );
-    },
-
-    _onmouseup : function( event ) {
-      this.execute();
-    }
-  }
-
-});
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.MenuItem", {
-
-  factory : function( properties ) {
-    var result;
-    rwt.remote.HandlerUtil.callWithTarget( properties.parent, function( menu ) {
-      var styleMap = rwt.remote.HandlerUtil.createStyleMap( properties.style );
-      var onMenuBar = menu.hasState( "rwt_BAR" );
-      var menuItemType = "push";
-      if( styleMap.CASCADE ) {
-        menuItemType = "cascade";
-      } else if( styleMap.CHECK && !onMenuBar ) {
-        menuItemType = "check";
-      } else if( styleMap.RADIO && !onMenuBar ) {
-        menuItemType = "radio";
-      }
-      if( styleMap.SEPARATOR ) {
-        result = new rwt.widgets.MenuItemSeparator();
-      } else {
-        result = new rwt.widgets.MenuItem( menuItemType );
-        result.setNoRadioGroup( menu.hasState( "rwt_NO_RADIO_GROUP" ) );
-        if( onMenuBar ) {
-          result.addState( "onMenuBar" );
-        }
-      }
-      menu.addMenuItemAt( result, properties.index );
-      rwt.remote.HandlerUtil.addDestroyableChild( menu, result );
-      result.setUserData( "protocolParent", menu );
-    } );
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getWidgetDestructor(),
-
-  properties : [
-    "menu",
-    "enabled",
-    "text",
-    "mnemonicIndex",
-    "image",
-    "selection",
-    "customVariant"
-  ],
-
-  propertyHandler : {
-    "menu" : function( widget, value ) {
-      if( !widget.hasState( "rwt_SEPARATOR" ) ) {
-        rwt.remote.HandlerUtil.callWithTarget( value, function( menu ) {
-          widget.setMenu( menu );
-        } );
-      }
-    },
-    "text" : function( widget, value ) {
-      if( !widget.hasState( "rwt_SEPARATOR" ) ) {
-        var text = value;
-        // Strip accelerator text
-        var index = text.indexOf( "\t" );
-        var accelerator = null;
-        if( index != -1 ) {
-          accelerator = text.substring( index + 1 );
-          text = text.substring( 0, index );
-        }
-        widget.setText( text );
-        widget.setAccelerator( accelerator );
-      }
-    },
-    "image" : function( widget, value ) {
-      if( !widget.hasState( "rwt_SEPARATOR" ) ) {
-        if( value === null ) {
-          widget.setImage( value );
-        } else {
-          widget.setImage.apply( widget, value );
-        }
-      }
-    },
-    "selection" : function( widget, value ) {
-      if( !widget.hasState( "rwt_SEPARATOR" ) ) {
-        widget.setSelection( value );
-      }
-    }
-  },
-
-  listeners : [
-    "Selection",
-    "Help"
-  ],
-
-  listenerHandler : {
-    "Selection" : function( widget, value ) {
-      if( !widget.hasState( "rwt_SEPARATOR" ) ) {
-        widget.setHasSelectionListener( value );
-      }
-    },
-    "Help" : rwt.remote.HandlerUtil.getControlListenerHandler( "Help" )
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2002, 2013 Innoopract Informationssysteme GmbH and others.
- * 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.eclipsevent.org/legal/epl-v10.html
- *
- * Contributors:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-
-/**
- * This class contains static functions for radio buttons
- */
-rwt.qx.Class.define( "rwt.widgets.util.RadioButtonUtil", {
-
-  statics : {
-
-    registerExecute : function( button ) {
-      button.addEventListener( "execute", this._onSelection, this );
-    },
-
-    registerKeypress : function( button ) {
-      button.addEventListener( "keypress", this._onKeypress, this );
-    },
-
-    _onKeypress : function( event ) {
-      var widget = event.getTarget();
-      switch( event.getKeyIdentifier() ) {
-        case "Left":
-        case "Up":
-          this._setNextOrPrevious( widget, "previous" );
-          event.preventDefault();
-          event.stopPropagation();
-          break;
-        case "Right":
-        case "Down":
-          this._setNextOrPrevious( widget, "next" );
-          event.preventDefault();
-          event.stopPropagation();
-          break;
-        case "Home":
-        case "End":
-        case "PageDown":
-        case "PageUp":
-          event.preventDefault();
-          event.stopPropagation();
-        break;
-      }
-    },
-
-    _onSelection : function( event ) {
-      this._unselectSiblings( event.getTarget() );
-    },
-
-    _isRadioElement : function( widget ) {
-      return widget.hasState( "radio" );
-    },
-
-    _getRadioGroup: function( widget ) {
-      var group = [];
-      if( !widget.getNoRadioGroup() ) {
-        var siblings = widget.getParent().getChildren();
-        var length = siblings.length;
-        // For Radio-Buttons all Radio-items of the group count,
-        // else the group is bounded by any non-radio items
-        if( widget.classname == "rwt.widgets.Button" ) {
-          for( var i = 0; i < length; i++ ) {
-            if( this._isRadioElement( siblings[ i ] ) ) {
-              group.push( siblings[ i ] );
-            }
-          }
-        } else {
-          var isCurrentGroup = false;
-          var i = 0;
-          while( i < length && ( !isCurrentGroup || this._isRadioElement( siblings[ i ] ) ) ) {
-            if( !isCurrentGroup ) {
-              isCurrentGroup = siblings[ i ] == widget;
-            }
-            if( this._isRadioElement( siblings[ i ] ) ) {
-              group.push( siblings[ i ] );
-            } else {
-              group = [];
-            }
-            i++;
-          }
-        }
-      }
-      return group;
-    },
-
-    // Set the "checked" property and focus on the following (next or previous)
-    // radio button of the same group, after a corresponding key press.
-    _setNextOrPrevious : function( widget, command ) {
-      var allRadioButtons = this._getRadioGroup( widget );
-      if( allRadioButtons.length > 0 ) {
-        var currentRbIndex;
-        for( var j = 0; j < allRadioButtons.length; j++ ) {
-          if( allRadioButtons[ j ] == widget ) {
-            currentRbIndex = j;
-          }
-        }
-        // assign a value to 'nextSelectedRbIndex',
-        // in case the 'command' is unrecognizable
-        var nextSelectedRbIndex = currentRbIndex;
-        if ( command == "next" ) {
-          do {
-            nextSelectedRbIndex++;
-            if( nextSelectedRbIndex >= allRadioButtons.length ) {
-              nextSelectedRbIndex = 0;
-            }
-          } while( !allRadioButtons[ nextSelectedRbIndex ].getEnabled() );
-        }
-        if ( command == "previous" ) {
-          do {
-            nextSelectedRbIndex--;
-            if( nextSelectedRbIndex < 0 ) {
-              nextSelectedRbIndex = allRadioButtons.length - 1;
-            }
-          } while( !allRadioButtons[ nextSelectedRbIndex ].getEnabled() );
-        }
-        if( nextSelectedRbIndex !== currentRbIndex ) {
-          var nextRb = allRadioButtons[ nextSelectedRbIndex ];
-          this._unselectSiblings( nextRb );
-          nextRb.setSelection( true );
-          nextRb.setFocused( true );
-        }
-      }
-    },
-
-    _unselectSiblings : function( widget ) {
-      var group = this._getRadioGroup( widget );
-      for( var i = 0; i < group.length; i++ ) {
-        if( group[ i ] !== widget ) {
-          group[ i ].setSelection( false );
-        }
-      }
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2009, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.MenuBar", {
-  extend : rwt.widgets.base.HorizontalBoxLayout,
-
-  construct : function() {
-    this.base( arguments );
-    this._hoverItem = null;
-    this._openItem = null;
-    this.addEventListener( "mousedown", this._onMouseDown );
-    this.addEventListener( "mouseover", this._onMouseOver );
-    this.addEventListener( "mouseout", this._onMouseOut );
-    // TODO [tb] : optional: implement keyboard control
-  },
-
-  properties : {
-
-    appearance :  {
-      refine : true,
-      init : "toolbar"
-    }
-
-  },
-
-  events : {
-    "changeOpenItem" : "rwt.event.Event"
-  },
-
-  members : {
-
-    addMenuItemAt : function( menuItem, index ) {
-      // seperator does not have this function:
-      if( menuItem.setParentMenu ) {
-        // it is essential that this happens before the menuItem is added
-        menuItem.setParentMenu( this );
-      }
-      this.addAt( menuItem, index );
-    },
-
-    _onMouseOver : function( event ) {
-      var target = event.getTarget();
-      var hoverItem = target == this ? null : target;
-      this.setHoverItem( hoverItem );
-    },
-
-    _onMouseOut : function( event ) {
-      var target = event.getTarget();
-      var related = event.getRelatedTarget();
-      if( target == this || !this.contains( related ) ) {
-        this.setHoverItem( null );
-      }
-    },
-
-    _onMouseDown : function( event ) {
-      var target = event.getTarget();
-      if( target != this ) {
-        this.setOpenItem( target );
-      }
-    },
-
-    setHoverItem : function( item ) {
-      if( this._hoverItem != null && this._hoverItem != item ) {
-        this._hoverItem.removeState( "over" );
-      }
-      if( item != null ) {
-        item.addState( "over" );
-        if( this._openItem != null && this._openItem != item ) {
-          this.setOpenItem( item );
-        }
-      }
-      this._hoverItem = item;
-    },
-
-    openByMnemonic : function( item ) {
-      this.setOpenItem( item, true );
-    },
-
-    setOpenItem : function( item, byMnemonic ) {
-      var oldItem = this._openItem;
-      if( oldItem != null && oldItem.getMenu() != null ) {
-        oldItem.setSubMenuOpen( false );
-        oldItem.getMenu().hide();
-      }
-      if( item != null && item != oldItem && item.getMenu() != null ) {
-        this._openItem = item;
-        item.addState( "pressed" );
-        var subMenu = item.getMenu();
-        item.setSubMenuOpen( true );
-        subMenu.setOpener( item );
-        var itemNode = item.getElement();
-        // the position is relative to the document, therefore we need helper
-        subMenu.setTop( rwt.html.Location.getTop( itemNode ) + itemNode.offsetHeight );
-        subMenu.setLeft( rwt.html.Location.getLeft( itemNode ) );
-        subMenu.setMnemonics( byMnemonic === true );
-        subMenu.show();
-      } else {
-        this._openItem = null;
-      }
-      this.dispatchSimpleEvent( "changeOpenItem" );
-    },
-
-    getOpenItem : function() {
-      return this._openItem;
-    }
-
-  }
-
-});
-
-
-/*******************************************************************************
- * Copyright (c) 2009, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.remote.DNDSupport", {
-  type : "singleton",
-  extend : rwt.qx.Object,
-
-  construct : function() {
-    this.base( arguments );
-    this._dragSources = {};
-    this._dropTargets = {};
-    this._dropTargetEventQueue = {};
-    this._requestScheduled = false;
-    this._currentDragSource = null;
-    this._currentDropTarget = null;
-    this._currentTargetWidget = null;
-    this._currentMousePosition = { x : 0, y : 0 };
-    this._actionOverwrite = null;
-    this._dataTypeOverwrite = null;
-    this._dropFeedbackRenderer = null;
-    this._dropFeedbackFlags = 0;
-    this._dragFeedbackWidget = null;
-    this._blockDrag = false;
-  },
-
-  members : {
-
-    /////////////
-    // dragSource
-
-    registerDragSource : function( widget, operations ) {
-      widget.addEventListener( "dragstart", this._dragStartHandler, this );
-      widget.addEventListener( "dragend", this._dragEndHandler, this );
-      var hash = widget.toHashCode();
-      this._dragSources[ hash ] = {
-        "dataTypes" : [],
-        "actions" : this._operationsToActions( operations )
-      };
-    },
-
-    setDragSourceTransferTypes : function( widget, transferTypes ) {
-      var hash = widget.toHashCode();
-      this._dragSources[ hash ][ "dataTypes" ] = transferTypes;
-    },
-
-    deregisterDragSource : function( widget ) {
-      widget.removeEventListener( "dragstart", this._dragStartHandler, this );
-      widget.removeEventListener( "dragend", this._dragEndHandler, this );
-      var hash = widget.toHashCode();
-      delete this._dragSources[ hash ];
-    },
-
-    isDragSource : function( widget ) {
-      var hash = widget.toHashCode();
-      return typeof this._dragSources[ hash ] != "undefined";
-    },
-
-    isDropTarget : function( widget ) {
-      var hash = widget.toHashCode();
-      return typeof this._dropTargets[ hash ] != "undefined";
-    },
-
-    setHasListener : function( widget, type, value ) {
-      var remoteObject = rwt.remote.RemoteObjectFactory.getRemoteObject( widget );
-      remoteObject._.listen[ type ] = value;
-    },
-
-    _dragStartHandler : function( event ) {
-      var wm = rwt.remote.WidgetManager.getInstance();
-      var target = event.getCurrentTarget();
-      var control = wm.findControl( event.getTarget() );
-      if( control == target && !this._blockDrag ) {
-        var hash = target.toHashCode();
-        var dataTypes = this._dragSources[ hash ].dataTypes;
-        if( dataTypes.length > 0 ) {
-          for( var i = 0; i < dataTypes.length; i++ ) {
-            event.addData( dataTypes[ i ], true );
-          }
-          this._actionOverwrite = null;
-          this._currentDragSource = target;
-          var dndHandler = rwt.event.DragAndDropHandler.getInstance();
-          dndHandler.clearActions();
-          var doc = rwt.widgets.base.ClientDocument.getInstance();
-          doc.addEventListener( "mouseover", this._onMouseOver, this );
-          doc.addEventListener( "keydown", this._onKeyEvent, this );
-          doc.addEventListener( "keyup", this._onKeyEvent, this );
-          this.setCurrentTargetWidget( event.getOriginalTarget() );
-          // fix for bug 296348
-          var widgetUtil = rwt.widgets.util.WidgetUtil;
-          widgetUtil._fakeMouseEvent( this._currentTargetWidget, "mouseout" );
-          var sourceWidget = dndHandler.__dragCache.sourceWidget;
-          var feedbackWidget = this._getFeedbackWidget( control, sourceWidget );
-          // Note: Unlike SWT, the feedbackWidget can not be rendered behind
-          // the cursor, i.e. with a negative offset, as the widget would
-          // get all the mouse-events instead of a potential drop-target.
-          dndHandler.setFeedbackWidget( feedbackWidget, 10, 20 );
-          event.startDrag();
-          event.stopPropagation();
-        }
-        this._sendDragSourceEvent( target, "DragStart", event.getMouseEvent() );
-      }
-    },
-
-    _dragEndHandler : function( event ) {
-      var target = event.getCurrentTarget();
-      var mouseEvent = event.getMouseEvent();
-      // fix for Bug 301544: block new dragStarts until request is send
-      this._blockDrag = true;
-      if( !this._requestScheduled ) {
-        var req = rwt.remote.Server.getInstance();
-        req.addEventListener( "send", this._onSend, this );
-      }
-      this._sendDragSourceEvent( target, "DragEnd", mouseEvent );
-      this._cleanUp();
-      event.stopPropagation();
-    },
-
-    _sendDragSourceEvent : function( widget, type, qxDomEvent ) {
-      var x = 0;
-      var y = 0;
-      if( qxDomEvent instanceof rwt.event.MouseEvent ) {
-        x = qxDomEvent.getPageX();
-        y = qxDomEvent.getPageY();
-      }
-      var parameters = {
-        "x" : x,
-        "y" : y,
-        "time" : rwt.remote.EventUtil.eventTimestamp()
-      };
-      rwt.remote.Server.getInstance().getRemoteObject( widget ).notify( type, parameters );
-    },
-
-    /////////////
-    // dropTarget
-
-    registerDropTarget : function( widget, operations ) {
-      widget.addEventListener( "dragover", this._dragOverHandler, this );
-      widget.addEventListener( "dragmove", this._dragMoveHandler, this );
-      widget.addEventListener( "dragout", this._dragOutHandler, this );
-      widget.addEventListener( "dragdrop", this._dragDropHandler, this );
-      var hash = widget.toHashCode();
-      this._dropTargets[ hash ] = {
-        "actions" : this._operationsToActions( operations )
-      };
-      widget.setSupportsDropMethod( rwt.util.Functions.returnTrue );
-    },
-
-    setDropTargetTransferTypes : function( widget, transferTypes ) {
-      widget.setDropDataTypes( transferTypes );
-    },
-
-    deregisterDropTarget : function( widget ) {
-      widget.setDropDataTypes( [] );
-      widget.removeEventListener( "dragover", this._dragOverHandler, this );
-      widget.removeEventListener( "dragmove", this._dragMoveHandler, this );
-      widget.removeEventListener( "dragout", this._dragOutHandler, this );
-      widget.removeEventListener( "dragdrop", this._dragDropHandler, this );
-      var hash = widget.toHashCode();
-      delete this._dropTargets[ hash ];
-      widget.setSupportsDropMethod( null );
-    },
-
-    _dragOverHandler : function( event ) {
-      var target = event.getCurrentTarget();
-      var hash = target.toHashCode();
-      var mouseEvent = event.getMouseEvent();
-      this._currentDropTarget = target;
-      var action = this._computeCurrentAction( mouseEvent, target );
-      this._setAction( action, null );
-      this._sendDropTargetEvent( target, "DragEnter", mouseEvent, action );
-      event.stopPropagation();
-    },
-
-    _dragMoveHandler : function( event ) {
-      var target = event.getCurrentTarget();
-      var mouseEvent = event.getMouseEvent();
-      this._currentMousePosition.x = mouseEvent.getPageX();
-      this._currentMousePosition.y = mouseEvent.getPageY();
-      var action = this._computeCurrentAction( mouseEvent, target );
-      this._setAction( action, mouseEvent );
-      this._sendDropTargetEvent( target, "DragOver", mouseEvent, action );
-      event.stopPropagation();
-    },
-
-    _dragOutHandler : function( event ) {
-      var target = event.getCurrentTarget();
-      var mouseEvent = event.getMouseEvent();
-      if( this._currentTargetWidget !== mouseEvent.getTarget() ) {
-        this._onMouseOver( mouseEvent );
-      }
-      var dndHandler = rwt.event.DragAndDropHandler.getInstance();
-      dndHandler.clearActions();
-      this.setFeedback( target, null, 0 );
-      this._currentDropTarget = null;
-      this._actionOverwrite = null;
-      this._dataTypeOverwrite = null;
-      if( this._isDropTargetEventScheduled( "DragEnter" ) ) {
-        this._cancelDropTargetEvent( "DragEnter" );
-        this._cancelDropTargetEvent( "DragOver" );
-      } else {
-        this._sendDropTargetEvent( target, "DragLeave", mouseEvent, "none" );
-      }
-      event.stopPropagation();
-    },
-
-    _dragDropHandler : function( event ) {
-      var target = event.getCurrentTarget();
-      var mouseEvent = event.getMouseEvent();
-      var action = this._computeCurrentAction( mouseEvent, target );
-      this._sendDropTargetEvent( target, "DropAccept", mouseEvent, action );
-      event.stopPropagation();
-    },
-
-    _sendDropTargetEvent : function( widget, type, qxDomEvent, action ) {
-      var wm = rwt.remote.WidgetManager.getInstance();
-      var item = this._getCurrentItemTarget();
-      var itemId = item != null ? wm.findIdByWidget( item ) : null;
-      var x = 0;
-      var y = 0;
-      if( qxDomEvent instanceof rwt.event.MouseEvent ) {
-        x = qxDomEvent.getPageX();
-        y = qxDomEvent.getPageY();
-      } else {
-        x = this._currentMousePosition.x;
-        y = this._currentMousePosition.y;
-      }
-      var source = wm.findIdByWidget( this._currentDragSource );
-      var time = rwt.remote.EventUtil.eventTimestamp();
-      var operation = action == "alias" ? "link" : action;
-      var event = {};
-      event[ "widget" ] = widget;
-      event[ "eventName" ] = type;
-      var param = {};
-      param[ "x" ] = x;
-      param[ "y" ] = y;
-      param[ "item" ] = itemId;
-      param[ "operation" ] = operation;
-      param[ "feedback" ] = this._dropFeedbackFlags;
-      param[ "dataType" ] = this._dataTypeOverwrite;
-      param[ "source" ] = source;
-      param[ "time" ] = time;
-      event[ "param" ] = param;
-      this._dropTargetEventQueue[ type ] = event;
-      if( !this._requestScheduled ) {
-        var req = rwt.remote.Server.getInstance();
-        req.addEventListener( "send", this._onSend, this );
-        this._requestScheduled = true;
-        rwt.client.Timer.once( req.send, req, 200 );
-      }
-    },
-
-    _isDropTargetEventScheduled : function( type ) {
-      return typeof this._dropTargetEventQueue[ type ] != "undefined";
-    },
-
-    _cancelDropTargetEvent : function( type ) {
-      delete this._dropTargetEventQueue[ type ];
-    },
-
-    _setPropertyRetroactively : function( dropTarget, property, value ) {
-      for( var type in this._dropTargetEventQueue ) {
-        var event = this._dropTargetEventQueue[ type ];
-        if( event[ "widget" ] === dropTarget ) {
-          event[ "param" ][ property ] = value;
-        }
-      }
-    },
-
-    _attachDropTargetEvents : function() {
-      var server = rwt.remote.Server.getInstance();
-      var events = this._dropTargetEventQueue;
-      for( var type in events ) {
-        var event = events[ type ];
-        server.getRemoteObject( event.widget ).notify( event.eventName, event.param );
-      }
-      this._dropTargetEventQueue = {};
-    },
-
-    _getCurrentItemTarget : function() {
-      var result = null;
-      var target = this._getCurrentFeedbackTarget();
-      if( target instanceof rwt.widgets.base.GridRow ) {
-        var tree = this._currentDropTarget;
-        result = tree._rowContainer.findItemByRow( target );
-      } else {
-        result = target;
-      }
-      return result;
-    },
-
-    //////////
-    // actions
-
-    _setAction : function( newAction, sourceEvent ) {
-      // NOTE: using setCurrentAction would conflict with key events
-      var dndHandler = rwt.event.DragAndDropHandler.getInstance();
-      var oldAction = dndHandler.getCurrentAction();
-      if( oldAction != newAction ) {
-        dndHandler.clearActions();
-        dndHandler.setAction( newAction );
-        if( sourceEvent != null ) {
-          this._sendDropTargetEvent( this._currentDropTarget,
-                                     "DragOperationChanged",
-                                     sourceEvent,
-                                     newAction );
-        }
-      }
-    },
-
-    _operationsToActions : function( operations ) {
-      var result = {};
-      for( var i = 0; i < operations.length; i++ ) {
-        var action = this._toAction( operations[ i ] );
-        result[ action ] = action != null;
-      }
-      return result;
-    },
-
-    _toAction : function( operation ) {
-      var result;
-      switch( operation ) {
-        case "DROP_MOVE":
-          result = "move";
-        break;
-        case "DROP_COPY":
-          result = "copy";
-        break;
-        case "DROP_LINK":
-          result = "alias";
-        break;
-        default:
-          result = operation;
-        break;
-      }
-      return result;
-    },
-
-    _computeCurrentAction : function( domEvent, target ) {
-      var result;
-      if( this._actionOverwrite != null ) {
-        result = this._actionOverwrite;
-      } else {
-        result = "move";
-        var shift = domEvent.isShiftPressed();
-        var ctrl = domEvent.isCtrlPressed();
-        var alt = domEvent.isAltPressed();
-        if( ctrl && !shift && !alt ) {
-          result = "copy";
-        } else if( alt && !shift && !ctrl ) {
-          result = "alias";
-        } else if( !alt && shift && ctrl ) {
-          result = "alias";
-        }
-        var dropTargetHash = target.toHashCode();
-        var dropActions = this._dropTargets[ dropTargetHash ].actions;
-        var dragSourceHash = this._currentDragSource.toHashCode();
-        var dragActions = this._dragSources[ dragSourceHash ].actions;
-        if( !dragActions[ result ] || !dropActions[ result ] ) {
-          result = "none";
-        }
-      }
-      return result;
-    },
-
-    ///////////
-    // feedback
-
-    // TODO [tb] : allow overwrite using DropTarget.setDropTargetEffect?
-    /*
-     * Creates a feedback-renderer matching the given widget,
-     * "implementing" the following interface:
-     *  setFeedback : function( feedbackMap )
-     *  renderFeedback : function( target )
-     *  isFeedbackNode : function( node )
-     */
-    _createFeedback : function( widget ) {
-      if( this._dropFeedbackRenderer == null ) {
-        if( widget instanceof rwt.widgets.Grid ) {
-          this._dropFeedbackRenderer = new rwt.widgets.util.GridDNDFeedback( widget );
-        }
-      }
-    },
-
-    _renderFeedback : function() {
-      if( this._dropFeedbackRenderer != null ) {
-        var target = this._getCurrentFeedbackTarget();
-        this._dropFeedbackRenderer.renderFeedback( target );
-      }
-    },
-
-    _getCurrentFeedbackTarget : function() {
-      var result = null;
-      var widget = this._currentTargetWidget;
-      if( widget instanceof rwt.widgets.base.GridRow ) {
-        // _currentDropTarget could be another tree
-        if( this._currentDropTarget && this._currentDropTarget.contains( widget ) ) {
-          result = widget;
-        }
-      }
-      return result;
-    },
-
-    // TODO [tb] : allow overwrite using DragSourceEvent.image?
-    _getFeedbackWidget : function( control, target ) {
-      var item = target;
-      var success = false;
-      if( this._dragFeedbackWidget == null ) {
-        this._dragFeedbackWidget
-          = new rwt.widgets.base.MultiCellWidget( [ "image", "label" ] );
-        this._dragFeedbackWidget.setOpacity( 0.7 );
-        this._dragFeedbackWidget.setEnabled( false );
-        this._dragFeedbackWidget.setPadding( 2 );
-      }
-      while( !success && item != control ) {
-        if( item instanceof rwt.widgets.base.GridRow ) {
-          success = true;
-          this._configureTreeRowFeedback( item );
-        }
-        if( !success ) {
-          item = item.getParent();
-        }
-      }
-      return success ? this._dragFeedbackWidget : null;
-    },
-
-    _configureTreeRowFeedback : function( row ) {
-      var widget = this._dragFeedbackWidget;
-      var tree = this._currentDragSource;
-      var item = tree._rowContainer.findItemByRow( row );
-      if( item != null ) {
-        var config = tree.getRenderConfig();
-        var image = item.getImage( config.treeColumn );
-        if( image != null ) {
-          widget.setCellContent( 0, image );
-          var imageWidth = config.itemImageWidth[ config.treeColumn ];
-          widget.setCellDimension( 0, imageWidth, row.getHeight() );
-        }
-        var backgroundColor = item.getCellBackground( config.treeColumn );
-        var textColor = item.getCellForeground( config.treeColumn );
-        widget.setBackgroundColor( backgroundColor );
-        widget.setTextColor( textColor );
-        widget.setCellContent( 1, item.getText( config.treeColumn ) );
-        widget.setFont( config.font );
-      }
-    },
-
-    _resetFeedbackWidget : function() {
-      if( this._dragFeedbackWidget != null ) {
-        this._dragFeedbackWidget.setParent( null );
-        this._dragFeedbackWidget.setFont( null );
-        this._dragFeedbackWidget.setCellContent( 0, null );
-        this._dragFeedbackWidget.setCellDimension( 0, null, null );
-        this._dragFeedbackWidget.setCellContent( 1, null );
-        this._dragFeedbackWidget.setBackgroundColor( null );
-      }
-    },
-
-    ///////////////
-    // eventhandler
-
-    _onSend : function( event ) {
-      this._attachDropTargetEvents();
-      this._requestScheduled = false;
-      this._blockDrag = false;
-      var req = rwt.remote.Server.getInstance();
-      req.removeEventListener( "send", this._onSend, this );
-    },
-
-    _onMouseOver : function( event ) {
-      var target = event.getTarget();
-      if( this._dropFeedbackRenderer != null ) {
-        var node = event.getDomTarget();
-        if( !this._dropFeedbackRenderer.isFeedbackNode( node ) ) {
-          this.setCurrentTargetWidget( target );
-        }
-      } else {
-        this.setCurrentTargetWidget( target );
-      }
-    },
-
-    setCurrentTargetWidget : function( target ) {
-      this._currentTargetWidget = target;
-      this._renderFeedback();
-    },
-
-    _onKeyEvent : function( event ) {
-      if( event.getType() == "keyup" && event.getKeyIdentifier() == "Alt" ) {
-        // NOTE: This combination causes problems with future dom events,
-        // so instead we cancel the operation.
-        this._sendDragSourceEvent( this._currentDragSource, "DragEnd", event );
-        this.cancel();
-      } else if( this._currentDropTarget != null ) {
-        var dndHandler = rwt.event.DragAndDropHandler.getInstance();
-        var action = this._computeCurrentAction( event, this._currentDropTarget );
-        this._setAction( action, event );
-        dndHandler._renderCursor();
-      }
-    },
-
-    /////////
-    // helper
-
-    _cleanUp : function() {
-      // fix for bug 296348
-      var widgetUtil = rwt.widgets.util.WidgetUtil;
-      widgetUtil._fakeMouseEvent( this._currentTargetWidget, "elementOver" );
-      widgetUtil._fakeMouseEvent( this._currentTargetWidget, "mouseover" );
-      this.setCurrentTargetWidget( null );
-      if( this._currentDropTarget != null) {
-        this.setFeedback( this._currentDropTarget, null, 0 );
-        this._currentDropTarget = null;
-      }
-      var dndHandler = rwt.event.DragAndDropHandler.getInstance();
-      dndHandler.setFeedbackWidget( null );
-      this._resetFeedbackWidget();
-      this._currentDragSource = null;
-      this._dataTypeOverwrite = null;
-      this._currentMousePosition.x = 0;
-      this._currentMousePosition.y = 0;
-      var doc = rwt.widgets.base.ClientDocument.getInstance();
-      doc.removeEventListener( "mouseover", this._onMouseOver, this );
-      doc.removeEventListener( "keydown", this._onKeyEvent, this );
-      doc.removeEventListener( "keyup", this._onKeyEvent, this );
-    },
-
-    //////////////////
-    // server response
-
-    cancel : function() {
-      if( this._currentDragSource != null ) {
-        var dndHandler = rwt.event.DragAndDropHandler.getInstance();
-        dndHandler.globalCancelDrag();
-        this._cleanUp();
-      }
-    },
-
-    setOperationOverwrite : function( widget, operation ) {
-      if( widget == this._currentDropTarget ) {
-        var action = this._toAction( operation );
-        var dndHandler = rwt.event.DragAndDropHandler.getInstance();
-        this._actionOverwrite = action;
-        this._setAction( action, null );
-        dndHandler._renderCursor();
-      }
-      this._setPropertyRetroactively( widget, "operation", operation );
-    },
-
-    /*
-     * feedback is an array of strings with possible values
-     * "select", "before", "after", "expand" and "scroll", while
-     * flags is the "feedback"-field of SWTs dropTargetEvent,
-     * representing the same information as an integer.
-     */
-    setFeedback : function( widget, feedback, flags ) {
-      if( widget == this._currentDropTarget ) {
-        if( feedback != null ) {
-          this._createFeedback( widget );
-          if( this._dropFeedbackRenderer != null ) {
-            var feedbackMap = {};
-            for( var i = 0; i < feedback.length; i++ ) {
-              feedbackMap[ feedback[ i ] ] = true;
-            }
-            this._dropFeedbackRenderer.setFeedback( feedbackMap );
-            this._renderFeedback();
-          }
-        } else if( this._dropFeedbackRenderer != null ) {
-          this._dropFeedbackRenderer.dispose();
-          this._dropFeedbackRenderer = null;
-        }
-        this._dropFeedbackFlags = flags;
-      }
-    },
-
-    setDataType : function( widget, type ) {
-      if( widget == this._currentDropTarget ) {
-        this._dataTypeOverwrite = type;
-      }
-      this._setPropertyRetroactively( widget, "dataType", type );
-    }
-
-  }
-
-} );
-
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.DropTarget", {
-
-  factory : function( properties ) {
-    var control = rwt.remote.ObjectRegistry.getObject( properties.control );
-    var result = { "control" : control };
-    rwt.remote.DNDSupport.getInstance().registerDropTarget( control, properties.style );
-    rwt.remote.HandlerUtil.addDestroyableChild( control, result );
-    return result;
-  },
-
-  destructor : function( source ) {
-    rwt.remote.HandlerUtil.removeDestroyableChild( source.control, source );
-    rwt.remote.DNDSupport.getInstance().deregisterDropTarget( source.control );
-  },
-
-  properties : [ "transfer" ],
-
-  propertyHandler : {
-    "transfer" : function( source, value ) {
-      var control = source.control;
-      rwt.remote.DNDSupport.getInstance().setDropTargetTransferTypes( control, value );
-    }
-  },
-
-  listeners : [ "DragEnter", "DragOver", "DragLeave", "DragOperationChanged", "DropAccept" ],
-
-  listenerHandler : {
-    "DragEnter" : function( source, value ) {
-      var control = source.control;
-      rwt.remote.DNDSupport.getInstance().setHasListener( control, "DragEnter", value );
-    },
-    "DragOver" : function( source, value ) {
-      var control = source.control;
-      rwt.remote.DNDSupport.getInstance().setHasListener( control, "DragOver", value );
-    },
-    "DragLeave" : function( source, value ) {
-      var control = source.control;
-      rwt.remote.DNDSupport.getInstance().setHasListener( control, "DragLeave", value );
-    },
-    "DragOperationChanged" : function( source, value ) {
-      var control = source.control;
-      rwt.remote.DNDSupport.getInstance().setHasListener( control, "DragOperationChanged", value );
-    },
-    "DropAccept" : function( source, value ) {
-      var control = source.control;
-      rwt.remote.DNDSupport.getInstance().setHasListener( control, "DropAccept", value );
-    }
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.DragSource", {
-
-  factory : function( properties ) {
-    var control = rwt.remote.ObjectRegistry.getObject( properties.control );
-    var result = { "control" : control };
-    rwt.remote.DNDSupport.getInstance().registerDragSource( control, properties.style );
-    rwt.remote.HandlerUtil.addDestroyableChild( control, result );
-    return result;
-  },
-
-  destructor : function( source ) {
-    rwt.remote.HandlerUtil.removeDestroyableChild( source.control, source );
-    rwt.remote.DNDSupport.getInstance().deregisterDragSource( source.control );
-  },
-
-  properties : [ "transfer" ],
-
-  propertyHandler : {
-    "transfer" : function( source, value ) {
-      var control = source.control;
-      rwt.remote.DNDSupport.getInstance().setDragSourceTransferTypes( control, value );
-    }
-  },
-
-  listeners : [ "DragStart", "DragEnd" ],
-
-  listenerHandler : {
-    "DragStart" : function( source, value ) {
-      var control = source.control;
-      rwt.remote.DNDSupport.getInstance().setHasListener( control, "DragStart", value );
-    },
-    "DragEnd" : function( source, value ) {
-      var control = source.control;
-      rwt.remote.DNDSupport.getInstance().setHasListener( control, "DragEnd", value );
-    }
-  },
-
-  methods : [ "changeFeedback", "changeDetail", "changeDataType", "cancel" ],
-
-  methodHandler : {
-    "changeFeedback" : function( source, properties ) {
-      var dnd = rwt.remote.DNDSupport.getInstance();
-      var control = rwt.remote.ObjectRegistry.getObject( properties.control );
-      var feedback = properties.feedback;
-      var flags = properties.flags;
-      dnd.setFeedback( control, feedback, flags );
-    },
-    "changeDetail" : function( source, properties ) {
-      var dnd = rwt.remote.DNDSupport.getInstance();
-      var control = rwt.remote.ObjectRegistry.getObject( properties.control );
-      var detail = properties.detail;
-      dnd.setOperationOverwrite( control, detail );
-    },
-    "changeDataType" : function( source, properties ) {
-      var dnd = rwt.remote.DNDSupport.getInstance();
-      var control = rwt.remote.ObjectRegistry.getObject( properties.control );
-      var dataType = properties.dataType;
-      dnd.setDataType( control, dataType );
-    },
-    "cancel" : function( source, properties ) {
-      var dnd = rwt.remote.DNDSupport.getInstance();
-      dnd.cancel();
-    }
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2007, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-/**
- * An adapter class for accessing theme values.
- * Values for the widget state given in the construtor are selected if available.
- */
-rwt.qx.Class.define( "rwt.theme.ThemeValues", {
-
-  extend : rwt.qx.Object,
-
-  /**
-   * Creates a new ThemeValues instance for the variant defined in the given
-   * widget states.
-   */
-  construct : function( states ) {
-    if( states === undefined ) {
-      throw new Error( "no states given" );
-    }
-    this._states = states;
-    this._store = rwt.theme.ThemeStore.getInstance();
-  },
-
-  statics : {
-    NONE_IMAGE : null,
-    NONE_IMAGE_SIZED : [ null, 0, 0 ]
-  },
-
-  members : {
-
-    getCssBorder : function( element, key ) {
-      return this._store.getBorder( element, this._states, key );
-    },
-
-    getCssNamedBorder : function( name ) {
-      return this._store.getNamedBorder( name );
-    },
-
-    getCssColor : function( element, key ) {
-      return this._store.getColor( element, this._states, key );
-    },
-
-    getCssAlpha : function( element, key ) {
-      return this._store.getAlpha( element, this._states, key );
-    },
-
-    getCssNamedColor : function( name ) {
-      return this._store.getNamedColor( name );
-    },
-
-    getCssFont : function( element, key ) {
-      return this._store.getFont( element, this._states, key );
-    },
-
-    getCssDimension : function( element, key ) {
-      return this._store.getDimension( element, this._states, key );
-    },
-
-    getCssBoxDimensions : function( element, key ) {
-      return this._store.getBoxDimensions( element, this._states, key );
-    },
-
-    getCssBoolean : function( element, key ) {
-      return this._store.getBoolean( element, this._states, key );
-    },
-
-    getCssFloat : function( element, key ) {
-      return this._store.getFloat( element, this._states, key );
-    },
-
-    getCssIdentifier : function( element, key ) {
-      return this._store.getIdentifier( element, this._states, key );
-    },
-
-    getCssImage : function( element, key ) {
-      return this._store.getImage( element, this._states, key );
-    },
-
-    getCssSizedImage : function( element, key ) {
-      return this._store.getSizedImage( element, this._states, key );
-    },
-
-    getCssGradient : function( element, key ) {
-      return this._store.getGradient( element, this._states, key );
-    },
-
-    getCssCursor : function( element, key ) {
-      return this._store.getCursor( element, this._states, key );
-    },
-
-    getCssAnimation : function( element, key ) {
-      return this._store.getAnimation( element, this._states, key );
-    },
-
-    getCssShadow : function( element, key ) {
-      return this._store.getShadow( element, this._states, key );
-    },
-
-    mergeBorders : function( border, borderTop, borderRight, borderBottom, borderLeft ) {
-      if( border == null ) {
-        throw new Error( "Unable to merge borders. Base border is null" );
-      }
-      var result = border;
-      var changed = false;
-      var borderColors = border.getColors();
-      var borderWidths = border.getWidths();
-      var borderStyles = border.getStyles();
-      if( borderTop != null && borderTop.getWidthTop() !== 0 ) {
-        changed = true;
-        borderColors[ 0 ] = borderTop.getColorTop();
-        borderWidths[ 0 ] = borderTop.getWidthTop();
-        borderStyles[ 0 ] = borderTop.getStyleTop();
-      }
-      if( borderRight != null && borderRight.getWidthRight() !== 0 ) {
-        changed = true;
-        borderColors[ 1 ] = borderRight.getColorRight();
-        borderWidths[ 1 ] = borderRight.getWidthRight();
-        borderStyles[ 1 ] = borderRight.getStyleRight();
-      }
-      if( borderBottom != null && borderBottom.getWidthBottom() !== 0 ) {
-        changed = true;
-        borderColors[ 2 ] = borderBottom.getColorBottom();
-        borderWidths[ 2 ] = borderBottom.getWidthBottom();
-        borderStyles[ 2 ] = borderBottom.getStyleBottom();
-      }
-      if( borderLeft != null && borderLeft.getWidthLeft() !== 0 ) {
-        changed = true;
-        borderColors[ 3 ] = borderLeft.getColorLeft();
-        borderWidths[ 3 ] = borderLeft.getWidthLeft();
-        borderStyles[ 3 ] = borderLeft.getStyleLeft();
-      }
-      if( changed ) {
-        // TODO: Border radii are ingnored during the merge.
-        result = new rwt.html.Border( borderWidths, borderStyles, borderColors );
-      }
-      return result;
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2010, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.Grid", {
-
-  extend : rwt.widgets.base.Parent,
-
-  construct : function( argsMap ) {
-    this.base( arguments );
-    this._rootItem = new rwt.widgets.GridItem();
-    // Style-Flags:
-    this._hasMultiSelection = false;
-    // Internal State:
-    this._hasSelectionListener = false;
-    this._hasDefaultSelectionListener = false;
-    this._leadItem = null;
-    this._topItemIndex = 0;
-    this._topItem = null;
-    this._hasSetDataListener = false;
-    this._selection = [];
-    this._focusItem = null;
-    this._renderQueue = {};
-    this._resizeLine = null;
-    this._selectionTimestamp = null;
-    this._selectionOffsetX = null;
-    this._delayedSelection = false;
-    this._sortDirection = null;
-    this._sortColumn = null;
-    this._hasFixedColumns = false;
-    this._hasExpandListener = false;
-    this._hasCollapseListener = false;
-    // Layout:
-    this._headerHeight = 0;
-    this._footerHeight = 0;
-    this._itemHeight = 16;
-    // Timer & Border
-    this._mergeEventsTimer = new rwt.client.Timer( 50 );
-    // Subwidgets
-    this._rowContainer = rwt.widgets.util.GridUtil.createTreeRowContainer( argsMap );
-    this._columns = {};
-    this._horzScrollBar = new rwt.widgets.base.ScrollBar( true );
-    this._vertScrollBar = new rwt.widgets.base.ScrollBar( false );
-    this._header = null;
-    this._footer = null;
-    this.add( this._rowContainer );
-    this.add( this._horzScrollBar );
-    this.add( this._vertScrollBar );
-    this._cellToolTip = null;
-    // Configure:
-    this._config = this._rowContainer.getRenderConfig();
-    this.setCursor( "default" );
-    this.setOverflow( "hidden" );
-    // Disable scrolling (see bugs 279460 and 364739)
-    rwt.widgets.base.Widget.disableScrolling( this );
-    this._configureScrollBars();
-    this._registerListeners();
-    this._parseArgsMap( argsMap );
-  },
-
-  destruct : function() {
-    this._rootItem.removeEventListener( "update", this._onItemUpdate, this );
-    this._rootItem.dispose();
-    this._rootItem = null;
-    this._mergeEventsTimer.dispose();
-    this._mergeEventsTimer = null;
-    this._rowContainer = null;
-    this._header = null;
-    this._footer = null;
-    this._horzScrollBar = null;
-    this._vertScrollBar = null;
-    this._leadItem = null;
-    this._focusItem = null;
-    this._sortColumn = null;
-    this._resizeLine = null;
-    if( this._cellToolTip ) {
-      this._cellToolTip.destroy();
-      this._cellToolTip = null;
-    }
-  },
-
-  members : {
-
-    /////////////////////////////////
-    // Contructor & Subwidget helpers
-
-    _createHeader : function() {
-      this._header = new rwt.widgets.base.GridHeader( {
-        "appearance" : this.getAppearance(),
-        "splitContainer" : this._hasFixedColumns
-      } );
-      this.add( this._header );
-      this._header.addEventListener( "showResizeLine", this._onShowResizeLine, this );
-      this._header.addEventListener( "hideResizeLine", this._onHideResizeLine, this );
-      this._header.setTop( 0 );
-      this._header.setLeft( 0 );
-      this._header.setScrollLeft( this._horzScrollBar.getValue() );
-      this._scheduleColumnUpdate();
-    },
-
-    _createFooter : function() {
-      this._footer = new rwt.widgets.base.GridHeader( {
-        "appearance" : this.getAppearance(),
-        "splitContainer" : this._hasFixedColumns,
-        "footer" : true
-      } );
-      this.add( this._footer );
-      this._footer.setLeft( 0 );
-      this._footer.setScrollLeft( this._horzScrollBar.getValue() );
-      this._scheduleColumnUpdate();
-    },
-
-    _configureScrollBars : function() {
-      var dragBlocker = function( event ) { event.stopPropagation(); };
-      this._horzScrollBar.setZIndex( 1e8 );
-      this._horzScrollBar.setVisibility( false );
-      this._horzScrollBar.setLeft( 0 );
-      this._horzScrollBar.setMergeEvents( false );
-      this._horzScrollBar.addEventListener( "dragstart", dragBlocker );
-      this._vertScrollBar.setZIndex( 1e8 );
-      this._vertScrollBar.setVisibility( false );
-      this._vertScrollBar.setIncrement( 16 );
-      this._vertScrollBar.setMergeEvents( false );
-      this._vertScrollBar.addEventListener( "dragstart", dragBlocker );
-    },
-
-    _registerListeners : function() {
-      this._rootItem.addEventListener( "update", this._onItemUpdate, this );
-      this.addEventListener( "mousedown", this._handleHyperlinkActivation, this );
-      this.addEventListener( "mouseup", this._handleHyperlinkActivation, this );
-      this.addEventListener( "click", this._handleHyperlinkActivation, this );
-      this.addEventListener( "mousedown", this._onMouseDown, this );
-      this.addEventListener( "mouseup", this._onMouseUp, this );
-      this.addEventListener( "mouseout", this._onMouseOut, this );
-      this.addEventListener( "keypress", this._onKeyPress, this );
-      this._rowContainer.addEventListener( "mousewheel", this._onClientAreaMouseWheel, this );
-      this._mergeEventsTimer.addEventListener( "interval", this._updateTopItemIndex, this );
-      this._horzScrollBar.addEventListener( "changeValue", this._onHorzScrollBarChangeValue, this );
-      this._vertScrollBar.addEventListener( "changeValue", this._onVertScrollBarChangeValue, this );
-      this._rowContainer.setSelectionProvider( this.isItemSelected, this );
-      this._rowContainer.setPostRenderFunction( this._vertScrollBar.autoEnableMerge,
-                                                this._vertScrollBar );
-    },
-
-    _parseArgsMap : function( map ) {
-      if( map.noScroll ) {
-        this._rowContainer.removeEventListener( "mousewheel", this._onClientAreaMouseWheel, this );
-      }
-      if( map.hideSelection ) {
-        this._config.hideSelection = true;
-      }
-      if( map.multiSelection ) {
-        this._hasMultiSelection = true;
-      }
-      if( map.fullSelection ) {
-        this._config.fullSelection = true;
-      } else {
-        this._config.selectionPadding = map.selectionPadding;
-      }
-      if( map.check ) {
-        this._config.hasCheckBoxes = true;
-        this._config.checkBoxLeft = map.checkBoxMetrics[ 0 ];
-        this._config.checkBoxWidth = map.checkBoxMetrics[ 1 ];
-      }
-      if( typeof map.indentionWidth === "number" ) {
-        this._config.indentionWidth = map.indentionWidth;
-      }
-      if( map.markupEnabled ) {
-        this._config.markupEnabled = true;
-      }
-      this._hasFixedColumns = map.splitContainer;
-      this._config.baseAppearance = map.appearance;
-      this._rowContainer.setBaseAppearance( map.appearance );
-      this.setAppearance( map.appearance );
-    },
-
-    ///////////////////////////
-    // API for server - general
-
-    setItemCount : function( value ) {
-      this._rootItem.setItemCount( value );
-    },
-
-    setHeaderVisible : function( value ) {
-      if( value && this._header == null ) {
-        this._createHeader();
-      } else if( !value ) {
-        this._header.destroy();
-        this._header = null;
-      }
-      this._layoutX();
-      this._layoutY();
-    },
-
-    setFooterVisible : function( value ) {
-      if( value && this._footer == null ) {
-        this._createFooter();
-      } else if( !value ) {
-        this._footer.destroy();
-        this._footer = null;
-      }
-      this._scheduleUpdate( "scrollHeight" );
-      this._layoutX();
-      this._layoutY();
-    },
-
-    setHeaderHeight : function( value ) {
-      this._headerHeight = value;
-      this._layoutX();
-      this._layoutY();
-    },
-
-    setFooterHeight : function( value ) {
-      this._footerHeight = value;
-      this._scheduleUpdate( "scrollHeight" );
-      this._layoutX();
-      this._layoutY();
-    },
-
-    setItemHeight : function( height ) {
-      this._itemHeight = height;
-      this._vertScrollBar.setIncrement( height );
-      this._rowContainer.setRowHeight( height );
-      this._rootItem.setDefaultHeight( height );
-      this._scheduleUpdate( "scrollHeight" );
-    },
-
-    setColumnCount : function( count ) {
-      this._config.columnCount = count;
-      this._scheduleUpdate();
-      this._updateScrollWidth();
-    },
-
-    setItemMetrics : function( columnIndex,
-                               left,
-                               width,
-                               imageLeft,
-                               imageWidth,
-                               textLeft,
-                               textWidth,
-                               checkLeft,
-                               checkWidth )
-    {
-      this._config.itemLeft[ columnIndex ] = left;
-      this._config.itemWidth[ columnIndex ] = width;
-      this._config.itemImageLeft[ columnIndex ] = imageLeft;
-      this._config.itemImageWidth[ columnIndex ] = imageWidth;
-      this._config.itemTextLeft[ columnIndex ] = textLeft;
-      this._config.itemTextWidth[ columnIndex ] = textWidth;
-      if( !isNaN( checkLeft ) ) {
-        this._config.itemCellCheckLeft[ columnIndex ] = checkLeft;
-        this._config.itemCellCheckWidth[ columnIndex ] = checkWidth;
-      }
-      this._scheduleUpdate();
-      this._updateScrollWidth();
-    },
-
-    setTreeColumn : function( columnIndex ) {
-      this._config.treeColumn = columnIndex;
-    },
-
-    setTopItemIndex : function( index ) {
-      this._updateScrollHeight();
-      var offset = 0;
-      var item = this._rootItem.findItemByFlatIndex( index );
-      if( item != null ) {
-        offset = item.getOffset();
-      }
-      this._vertScrollBar.setValue( offset );
-      if( !this._inServerResponse() ) {
-        rwt.widgets.base.Widget.flushGlobalQueues();
-      }
-    },
-
-    getTopItemIndex : function() {
-      return this._topItemIndex;
-    },
-
-    setScrollLeft: function( value ) {
-      this._horzScrollBar.setValue( value );
-    },
-
-    selectItem : function( item ) {
-      this._selectItem( item, false );
-      this._scheduleItemUpdate( item );
-    },
-
-    deselectItem : function( item ) {
-      this._deselectItem( item, false );
-      this._scheduleItemUpdate( item );
-    },
-
-    setFocusItem : function( item ) {
-      this._focusItem = item;
-      this._sendItemFocusChange();
-    },
-
-    setSortDirection : function( direction ) {
-      this._sortDirection = direction;
-      if( this._sortColumn !== null ) {
-        this._sortColumn.setSortDirection( this._sortDirection );
-      }
-    },
-
-    setSortColumn : function( column ) {
-      if( this._sortColumn !== null ) {
-        this._sortColumn.setSortDirection( "none" );
-      }
-      this._sortColumn = column;
-      if( this._sortColumn !== null ) {
-        this._sortColumn.setSortDirection( this._sortDirection );
-      }
-    },
-
-    setScrollBarsVisible : function( horzVisible, vertVisible ) {
-      if( !horzVisible ) {
-        this._horzScrollBar.setValue( 0 );
-      }
-      this._horzScrollBar.setVisibility( horzVisible );
-      if( !vertVisible ) {
-        this._vertScrollBar.setValue( 0 );
-      }
-      this._vertScrollBar.setVisibility( vertVisible );
-      this._layoutX();
-      this._layoutY();
-    },
-
-    getVerticalBar : function() {
-      return this._vertScrollBar;
-    },
-
-    getHorizontalBar : function() {
-      return this._horzScrollBar;
-    },
-
-    isVerticalBarVisible : function() {
-      return this._vertScrollBar.getVisibility();
-    },
-
-    isHorizontalBarVisible : function() {
-      return this._horzScrollBar.getVisibility();
-    },
-
-    setHasSelectionListener : function( value ) {
-      this._hasSelectionListener = value;
-    },
-
-    setHasDefaultSelectionListener : function( value ) {
-      this._hasDefaultSelectionListener = value;
-    },
-
-    setHasExpandListener : function( value ) {
-      this._hasExpandListener = value;
-    },
-
-    setHasCollapseListener : function( value ) {
-      this._hasCollapseListener = value;
-    },
-
-    setHasSetDataListener : function( value ) {
-      this._hasSetDataListener = value;
-    },
-
-    setAlignment : function( column, value ) {
-      this._config.alignment[ column ] = value;
-      this._scheduleUpdate();
-    },
-
-    setCellCheck : function( column, value ) {
-      this._config.itemCellCheck[ column ] = value;
-      this._scheduleUpdate();
-    },
-
-    setLinesVisible : function( value ) {
-      this._config.linesVisible = value;
-      if( value ) {
-        this.addState( "linesvisible" );
-      } else {
-        this.removeState( "linesvisible" );
-      }
-      this._rowContainer.updateRowLines();
-      this._scheduleUpdate();
-    },
-
-    setAlwaysHideSelection : function( value ) {
-      this._config.alwaysHideSelection = value;
-      this._scheduleUpdate();
-    },
-
-    //////////////
-    // Overwritten
-
-    addState : function( state ) {
-      this.base( arguments, state );
-      if( state.slice( 0, 8 ) === "variant_" ) {
-        this._config.variant = state;
-      }
-    },
-
-    removeState : function( state ) {
-      if( this._config.variant === state ) {
-        this._config.variant = null;
-      }
-      this.base( arguments, state );
-    },
-
-    ///////////////////////////////////////////////
-    // API for Tests, DND, TreeUtil and TableColumn
-
-    getRenderConfig : function() {
-      return this._config;
-    },
-
-    getRootItem : function() {
-      return this._rootItem;
-    },
-
-    isFocusItem : function( item ) {
-      return this._focusItem === item;
-    },
-
-    isItemSelected : function( item ) {
-      return this._selection.indexOf( item ) != -1;
-    },
-
-    getRowContainer : function() {
-      return this._rowContainer;
-    },
-
-    getTableHeader : function() {
-      return this._header;
-    },
-
-    getFooter : function() {
-      return this._footer;
-    },
-
-    update : function() {
-      this._scheduleUpdate();
-    },
-
-    addColumn : function( column ) {
-      //this.getTableHeader().addColumn( column );
-      this._columns[ column.toHashCode() ] = column;
-      column.addEventListener( "update", this._scheduleColumnUpdate, this );
-      this._scheduleColumnUpdate();
-    },
-
-    removeColumn : function( column ) {
-      //this.getTableHeader().removeColumn( column );
-      delete this._columns[ column.toHashCode() ];
-      column.removeEventListener( "update", this._scheduleColumnUpdate, this );
-      this._scheduleColumnUpdate();
-    },
-
-    ////////////////
-    // event handler
-
-    _onItemUpdate : function( event ) {
-      var item = event.target;
-      if( event.msg === "collapsed" ) {
-        if(    this._focusItem
-            && ( this._focusItem.isDisposed() || this._focusItem.isChildOf( item ) )
-        ) {
-          this.setFocusItem( item );
-        }
-      }
-      if( event.msg === "remove" ) {
-        this._scheduleUpdate( "checkDisposedItems" );
-      }
-      this._sendItemUpdate( item, event );
-      this._renderItemUpdate( item, event );
-      return false;
-    },
-
-    _beforeAppear : function() {
-      this.base( arguments );
-      this._scheduleColumnUpdate();
-    },
-
-    _scheduleColumnUpdate : function() {
-      rwt.widgets.base.Widget.addToGlobalWidgetQueue( this );
-      this._scheduleUpdate();
-    },
-
-    flushWidgetQueue : function() {
-      this._updateColumns();
-    },
-
-    _onVertScrollBarChangeValue : function() {
-      if( this._vertScrollBar._internalValueChange ) {
-        // NOTE : IE can create several scroll events with one click. Using
-        // this timer to merge theses events improves performance a bit.
-        this._mergeEventsTimer.start();
-      } else {
-        this._updateTopItemIndex();
-      }
-    },
-
-    _updateTopItemIndex : function() {
-      this._mergeEventsTimer.stop();
-      var scrollTop = this._vertScrollBar.getValue();
-      var beforeTopitem = this._rootItem.findItemByOffset( scrollTop - 1 );
-      if( beforeTopitem ) {
-        this._topItemIndex = beforeTopitem.getFlatIndex() + 1;
-        this._topItem = beforeTopitem.getNextItem();
-      } else {
-        this._topItemIndex = 0;
-        this._topItem = null;
-      }
-      if( this._inServerResponse() ) {
-        this._scheduleUpdate( "topItem" );
-      } else {
-        this._sendTopItemIndexChange();
-        this._updateTopItem( true );
-      }
-    },
-
-    _onHorzScrollBarChangeValue : function() {
-      this._rowContainer.setScrollLeft( this._horzScrollBar.getValue() );
-      if( this._header ) {
-        this._header.setScrollLeft( this._horzScrollBar.getValue() );
-      }
-      if( this._footer ) {
-        this._footer.setScrollLeft( this._horzScrollBar.getValue() );
-      }
-      this._sendScrollLeftChange();
-    },
-
-    _onMouseDown : function( event ) {
-      this._delayedSelection = false;
-      var target = event.getOriginalTarget();
-      if( target instanceof rwt.widgets.base.GridRow && !this._isHyperlinkTarget( event ) ) {
-        this._onRowMouseDown( target, event );
-      }
-    },
-
-    _onMouseUp : function( event ) {
-      if( this._delayedSelection ) {
-        this._onMouseDown( event );
-      }
-    },
-
-    _onRowMouseDown : function( row, event ) {
-      var item = this._rowContainer.findItemByRow( row );
-      if( item != null ) {
-        var identifier = row.getTargetIdentifier( event );
-        if( identifier[ 0 ] === "expandIcon" && item.hasChildren() ) {
-          var expanded = !item.isExpanded();
-          if( !expanded ) {
-            this._deselectVisibleChildren( item );
-          }
-          item.setExpanded( expanded );
-        } else if( identifier[ 0 ] === "checkBox" || identifier[ 0 ] === "cellCheckBox" ) {
-          this._toggleCheckSelection( item, identifier[ 1 ] );
-        } else if( this._isSelectionClick( identifier ) ) {
-          this._onSelectionClick( event, item );
-        }
-      }
-    },
-
-    _handleHyperlinkActivation : function( event ) {
-      if( this._isRWTHyperlinkTarget( event ) ) {
-        event.setDefaultPrevented( true );
-        if( event.getType() === "click" ) {
-          var domTarget = event.getDomTarget();
-          var row = event.getOriginalTarget();
-          var item = this._rowContainer.findItemByRow( row );
-          var text = domTarget.getAttribute( "href" );
-          if( !text ) {
-            text = domTarget.innerHTML;
-          }
-          this._sendSelectionEvent( item, false, "hyperlink", undefined, text );
-        }
-      }
-    },
-
-    _isHyperlinkTarget : function( event ) {
-      return event.getDomTarget().tagName.toLowerCase() === "a";
-    },
-
-    _isRWTHyperlinkTarget : function( event ) {
-      var domTarget = event.getDomTarget();
-      return this._isHyperlinkTarget( event ) && domTarget.getAttribute( "target" ) === "_rwt";
-    },
-
-    _isSelectionClick : function( identifier ) {
-      var result;
-      if( this._config.fullSelection ) {
-        result = identifier[ 0 ] !== "checkBox";
-      } else {
-        result = identifier[ 0 ] === "treeColumn";
-      }
-      return result;
-    },
-
-    _onSelectionClick : function( event, item ) {
-      // NOTE: Using a listener for "dblclick" does not work because the
-      //       item is re-rendered on mousedown which prevents the dom-event.
-      var doubleClick = this._isDoubleClicked( event, item );
-      if( doubleClick ) {
-        this._sendSelectionEvent( item, true, null );
-      } else {
-        if( this._hasMultiSelection ) {
-          if( !this._delayMultiSelect( event, item ) ) {
-            this._multiSelectItem( event, item );
-          }
-        } else {
-          this._singleSelectItem( event, item );
-        }
-      }
-    },
-
-    _delayMultiSelect : function( event, item ) {
-      if( this._isDragSource() && this.isItemSelected( item ) && event.getType() === "mousedown" ) {
-        this._delayedSelection = true;
-      }
-      return this._delayedSelection;
-    },
-
-    _onMouseOut : function( event ) {
-      this._delayedSelection = false;
-    },
-
-    _onClientAreaMouseWheel : function( event ) {
-      event.preventDefault();
-      event.stopPropagation();
-      var change = event.getWheelDelta() * this._itemHeight * 2;
-      this._vertScrollBar.setValue( this._vertScrollBar.getValue() - change );
-      this._vertScrollBar.setValue( this._vertScrollBar.getValue() ); // See Bug 396309
-    },
-
-    _onKeyPress : function( event ) {
-      if( this._focusItem != null ) {
-        switch( event.getKeyIdentifier() ) {
-          case "Enter":
-            this._handleKeyEnter( event );
-          break;
-          case "Space":
-            this._handleKeySpace( event );
-          break;
-          case "Up":
-            this._handleKeyUp( event );
-          break;
-          case "Down":
-            this._handleKeyDown( event );
-          break;
-          case "PageUp":
-            this._handleKeyPageUp( event );
-          break;
-          case "PageDown":
-            this._handleKeyPageDown( event );
-          break;
-          case "Home":
-            this._handleKeyHome( event );
-          break;
-          case "End":
-            this._handleKeyEnd( event );
-          break;
-          case "Left":
-            this._handleKeyLeft( event );
-          break;
-          case "Right":
-            this._handleKeyRight( event );
-          break;
-        }
-      }
-      this._stopKeyEvent( event );
-    },
-
-    _stopKeyEvent : function( event ) {
-      switch( event.getKeyIdentifier() ) {
-        case "Up":
-        case "Down":
-        case "Left":
-        case "Right":
-        case "Home":
-        case "End":
-        case "PageUp":
-        case "PageDown":
-          event.preventDefault();
-          event.stopPropagation();
-        break;
-      }
-    },
-
-    // TODO [tb] : handle by event via TableHeader instead of direct call
-    _onShowResizeLine : function( event ) {
-      var x = event.position;
-      if( this._resizeLine === null ) {
-        this._resizeLine = new rwt.widgets.base.Terminator();
-        this._resizeLine.setAppearance( "table-column-resizer" );
-        this.add( this._resizeLine );
-        rwt.widgets.base.Widget.flushGlobalQueues();
-      }
-      var top = this._rowContainer.getTop();
-      this._resizeLine._renderRuntimeTop( top );
-      var left = x - 2 - this._horzScrollBar.getValue();
-      this._resizeLine._renderRuntimeLeft( left );
-      var height = this._rowContainer.getHeight();
-      this._resizeLine._renderRuntimeHeight( height );
-      this._resizeLine.removeStyleProperty( "visibility" );
-    },
-
-    _onHideResizeLine : function() {
-      this._resizeLine.setStyleProperty( "visibility", "hidden" );
-    },
-
-    _handleKeyEnter : function( event ) {
-      this._sendSelectionEvent( this._focusItem, true, null );
-    },
-
-    _handleKeySpace : function( event ) {
-      if( event.isCtrlPressed() || !this.isItemSelected( this._focusItem ) ) {
-        // NOTE: When space does not change the selection, the SWT Tree still fires an selection
-        //       event, while the Table doesnt. Table behavior is used since it makes more sense.
-        var itemIndex = this._focusItem.getFlatIndex();
-        this._handleKeyboardSelect( event, this._focusItem, itemIndex );
-      }
-      if( this._config.hasCheckBoxes ) {
-        this._toggleCheckSelection( this._focusItem );
-      }
-    },
-
-    _handleKeyUp : function( event ) {
-      var item = this._focusItem.getPreviousItem();
-      if( item != null ) {
-        var itemIndex = item.getFlatIndex();
-        this._handleKeyboardSelect( event, item, itemIndex );
-      }
-    },
-
-    _handleKeyDown : function( event ) {
-      var item = this._focusItem.getNextItem();
-      if( item != null ) {
-        var itemIndex = item.getFlatIndex();
-        this._handleKeyboardSelect( event, item, itemIndex );
-      }
-    },
-
-    _handleKeyPageUp : function( event ) {
-      var oldOffset = this._focusItem.getOffset();
-      var diff = this._rowContainer.getHeight();
-      var newOffset = Math.max( 0, oldOffset - diff );
-      var item = this._rootItem.findItemByOffset( newOffset );
-      if( newOffset !== 0 ) {
-        item = item.getNextItem();
-      }
-      var itemIndex = item.getFlatIndex();
-      this._handleKeyboardSelect( event, item, itemIndex );
-    },
-
-    _handleKeyPageDown : function( event ) {
-      var oldOffset = this._focusItem.getOffset();
-      var diff = this._rowContainer.getHeight();
-      var max = this.getRootItem().getOffsetHeight() - 1;
-      var newOffset = Math.min( max, oldOffset + diff );
-      var item = this._rootItem.findItemByOffset( newOffset );
-      if( newOffset !== max ) {
-        item = item.getPreviousItem();
-      }
-      var itemIndex = item.getFlatIndex();
-      this._handleKeyboardSelect( event, item, itemIndex );
-    },
-
-    _handleKeyHome : function( event ) {
-      var item = this.getRootItem().getChild( 0 );
-      this._handleKeyboardSelect( event, item, 0 );
-    },
-
-    _handleKeyEnd : function( event ) {
-      var item = this.getRootItem().getLastChild();
-      var itemIndex = this.getRootItem().getVisibleChildrenCount() - 1;
-      this._handleKeyboardSelect( event, item, itemIndex );
-    },
-
-    _handleKeyLeft : function( event ) {
-      if( this._focusItem.isExpanded() ) {
-        this._focusItem.setExpanded( false );
-      } else if( !this._focusItem.getParent().isRootItem() ) {
-        var item = this._focusItem.getParent();
-        var itemIndex = item.getFlatIndex();
-        this._handleKeyboardSelect( event, item, itemIndex, true );
-      }
-    },
-
-    _handleKeyRight : function( event ) {
-      if( this._focusItem.hasChildren() ) {
-        if( !this._focusItem.isExpanded() ) {
-          this._focusItem.setExpanded( true );
-        } else {
-          var item = this._focusItem.getChild( 0 );
-          var itemIndex = item.getFlatIndex();
-          this._handleKeyboardSelect( event, item, itemIndex, true );
-        }
-      }
-    },
-
-    _handleKeyboardSelect : function( event, item, itemIndex, suppressMulti ) {
-      if( this._hasMultiSelection && !suppressMulti ) {
-        this._multiSelectItem( event, item );
-      } else {
-        this._singleSelectItem( event, item );
-      }
-      this._scrollIntoView( itemIndex, item );
-    },
-
-    /////////////////
-    // render content
-
-    _updateColumns : function() {
-      this._updateScrollWidth();
-      if( this._header != null ) {
-        this._header.renderColumns( this._columns );
-      }
-      if( this._footer != null ) {
-        this._footer.renderColumns( this._columns );
-      }
-    },
-
-    _renderItemUpdate : function( item, event ) {
-      if( item.isDisplayable() ) {
-        switch( event.msg ) {
-          case "expanded":
-          case "collapsed":
-          case "height":
-            this._topItem = null;
-            this._scheduleUpdate( "scrollHeight" );
-          break;
-          case "add":
-          case "remove":
-            // NOTE: the added/removed item is a child of this item
-            if( item.isExpanded() ) {
-              this._scheduleUpdate( "scrollHeight" );
-            } else {
-              this._scheduleItemUpdate( item );
-            }
-            this._topItem = null;
-          break;
-          default:
-            if( this._inServerResponse() ) {
-              this._scheduleItemUpdate( item );
-            } else {
-              this._rowContainer.renderItem( item );
-            }
-          break;
-        }
-      }
-    },
-
-    /**
-     * This will schedule the entire content of the tree (visible rows and gridlines)
-     * to be re-rendered. Additional tasks my be executed depending on "task" parameter.
-     * Is only used within a server-response or when expanding/collapsing. Not used
-     * when user is scrolling.
-     */
-    _scheduleUpdate : function( task ) {
-      if( task !== undefined ) {
-        this.addToQueue( task );
-      }
-      this._renderQueue[ "allItems" ] = true;
-      this.addToQueue( "updateRows" );
-    },
-
-    /**
-     * Optimized version of _scheduleUpdate. Used when server only changes specific items.
-     */
-    _scheduleItemUpdate : function( item ) {
-      this._renderQueue[ item.toHashCode() ] = item;
-      this.addToQueue( "updateRows" );
-    },
-
-    _layoutPost : function( changes ) {
-      this.base( arguments, changes );
-      if( changes[ "checkDisposedItems" ] ) {
-        this._checkDisposedItems();
-      }
-      if( changes[ "scrollHeight" ] ) {
-        this._updateScrollHeight();
-      }
-      if( changes[ "scrollHeight" ] || changes[ "topItem" ] ) {
-        this._updateTopItem( false );
-      }
-      if( changes[ "updateRows" ] ) {
-        if( this._renderQueue[ "allItems" ] ) {
-          this._rowContainer.renderAll();
-        } else {
-          this._rowContainer.renderItemQueue( this._renderQueue );
-        }
-        this._renderQueue = {};
-      }
-    },
-
-    ////////////
-    // scrolling
-
-    _updateScrollHeight : function() {
-      var itemsOffsetHeight = this.getRootItem().getOffsetHeight();
-      var height = itemsOffsetHeight + ( this._footer ? this._footerHeight : 0 );
-      // recalculating topItem can be expensive, therefore this simple check:
-      if( this._vertScrollBar.getMaximum() != height ) {
-        // Without the check, it may cause an error in FF when unloading doc
-        if( !this._vertScrollBar.getDisposed() ) {
-          this._vertScrollBar.setMaximum( height );
-        }
-      }
-    },
-
-    /**
-     * NOTE: If render is true, the content will be updated immediately. The rendering
-     * assumes that no other parameter than topItem have changed and may optimize accordingly.
-     */
-    _updateTopItem : function( render ) {
-      this._rowContainer.setTopItem( this._getTopItem(), this._topItemIndex, render );
-    },
-
-    _updateScrollWidth : function() {
-      var width = this._getItemWidth();
-      this._rowContainer.setRowWidth( this._getRowWidth() );
-      if( !this._horzScrollBar.getDisposed() ) {
-        this._horzScrollBar.setMaximum( width );
-      }
-      var headerOverlap = this._vertScrollBar.getVisibility() ? this._vertScrollBar.getWidth() : 0;
-      if( this._header ) {
-        this._header.setScrollWidth( width + headerOverlap );
-      }
-      if( this._footer ) {
-        this._footer.setScrollWidth( width );
-      }
-    },
-
-    _scrollIntoView : function( index, item ) {
-      if( index < this._topItemIndex ) {
-        this.setTopItemIndex( index );
-      } else if( index > this._topItemIndex ) {
-        var topItem = this._getTopItem();
-        var topItemOffset = topItem.getOffset();
-        var itemOffset = item.getOffset();
-        var pageSize = this._rowContainer.getHeight() - item.getOwnHeight();
-        if( itemOffset > topItemOffset + pageSize ) {
-          var newTopOffset = itemOffset - pageSize - 1;
-          var newTopItem = this.getRootItem().findItemByOffset( newTopOffset );
-          var newTopIndex = newTopItem.getFlatIndex() + 1;
-          this.setTopItemIndex( newTopIndex );
-        }
-      }
-    },
-
-    setHasScrollBarsSelectionListener : function( value ) {
-      this._vertScrollBar.setHasSelectionListener( true );
-      this._horzScrollBar.setHasSelectionListener( true );
-    },
-
-    //////////////
-    // Send events
-
-    _sendSelectionChange : function( item ) {
-      if( !this._inServerResponse() ) {
-        var selection = this._getSelectionList();
-        rwt.remote.Server.getInstance().getRemoteObject( this ).set( "selection", selection );
-        this._sendSelectionEvent( item, false, null );
-      }
-    },
-
-    _sendItemCheckedChange : function( item ) { // TODO [tb] : item events should be send by item
-      if( !this._inServerResponse() ) {
-        rwt.remote.Server.getInstance().getRemoteObject( item ).set( "checked", item.isChecked() );
-        this._sendSelectionEvent( item, false, "check" );
-      }
-    },
-
-    _sendCellCheckedChange : function( item, cell ) { // TODO [tb] : item events should be send by item
-      if( !this._inServerResponse() ) {
-        var server = rwt.remote.Server.getInstance();
-        var arr = item.getCellChecked();
-        var sendArr = [];
-        for( var i = 0; i < this._config.columnCount; i++ ) {
-          sendArr[ i ] = arr[ i ] === true;
-        }
-        server.getRemoteObject( item ).set( "cellChecked", sendArr );
-        this._sendSelectionEvent( item, false, "check", cell );
-      }
-    },
-
-    _sendItemFocusChange : function() {
-      if( !this._inServerResponse() ) {
-        var focusItemId = this._getItemId( this._focusItem );
-        rwt.remote.Server.getInstance().getRemoteObject( this ).set( "focusItem", focusItemId );
-      }
-    },
-
-    _sendTopItemIndexChange : function() {
-      var server = rwt.remote.Server.getInstance();
-      var remoteObject = server.getRemoteObject( this );
-      remoteObject.set( "topItemIndex", this._topItemIndex );
-      if( this._hasSetDataListener || this._vertScrollBar.getHasSelectionListener() ) {
-        this._startScrollBarChangesTimer( false );
-      }
-    },
-
-    _sendScrollLeftChange : function() {
-      // TODO [tb] : There should be a check for _inServerResponse,
-      // but currently this is needed to sync the value with the
-      // server when the scrollbars are hidden by the server.
-      var server = rwt.remote.Server.getInstance();
-      var remoteObject = server.getRemoteObject( this );
-      remoteObject.set( "scrollLeft", this._horzScrollBar.getValue() );
-      if( this._hasSetDataListener || this._horzScrollBar.getHasSelectionListener() ) {
-        this._startScrollBarChangesTimer( true );
-      }
-    },
-
-    _startScrollBarChangesTimer : function( horizontal ) {
-      var server = rwt.remote.Server.getInstance();
-      if( horizontal && this._horzScrollBar.getHasSelectionListener() ) {
-        server.onNextSend( this._sendHorizontalScrolled, this );
-      } else {
-        if( this._vertScrollBar.getHasSelectionListener() ) {
-          server.onNextSend( this._sendVerticalScrolled, this );
-        }
-        if( this._hasSetDataListener ) {
-          server.onNextSend( this._sendSetData, this );
-        }
-      }
-      server.sendDelayed( 400 );
-    },
-
-    _sendVerticalScrolled : function() {
-      var server = rwt.remote.Server.getInstance();
-      server.getRemoteObject( this._vertScrollBar ).notify( "Selection" );
-    },
-
-    _sendHorizontalScrolled : function() {
-      var server = rwt.remote.Server.getInstance();
-      server.getRemoteObject( this._horzScrollBar ).notify( "Selection" );
-    },
-
-    _sendSetData : function() {
-      var server = rwt.remote.Server.getInstance();
-      server.getRemoteObject( this ).notify( "SetData" );
-    },
-
-    _sendItemUpdate : function( item, event ) {
-      if( !this._inServerResponse() ) {
-        if( event.msg === "expanded" || event.msg === "collapsed" ) {
-          var expanded = event.msg === "expanded";
-          rwt.remote.Server.getInstance().getRemoteObject( item ).set( "expanded", expanded );
-          if( expanded && this._hasExpandListener ) {
-            rwt.remote.Server.getInstance().getRemoteObject( this ).notify( "Expand", {
-              "item" : rwt.remote.ObjectRegistry.getId( item )
-            } );
-          } else if( !expanded && this._hasCollapseListener ) {
-            rwt.remote.Server.getInstance().getRemoteObject( this ).notify( "Collapse", {
-              "item" : rwt.remote.ObjectRegistry.getId( item )
-            } );
-          }
-        }
-      }
-    },
-
-    _sendSelectionEvent : function( item, defaultSelected, detail, index, text ) {
-      if(    ( this._hasSelectionListener && !defaultSelected )
-          || ( this._hasDefaultSelectionListener && defaultSelected ) )
-      {
-        var properties = {
-          "item" : this._getItemId( item ),
-          "detail" : detail,
-          "index" : !isNaN( index ) ? index : undefined,
-          "text" : text
-        };
-        if( defaultSelected ) {
-          rwt.remote.EventUtil.notifyDefaultSelected( this, properties );
-        } else {
-          rwt.remote.EventUtil.notifySelected( this, properties );
-        }
-      }
-    },
-
-    _isDoubleClicked : function( event, item ) {
-      var result = false;
-      var mousedown = event.getType() === "mousedown";
-      var leftClick = event.getButton() === "left";
-      if( leftClick && mousedown && this.isFocusItem( item ) && this._selectionTimestamp != null ) {
-        var stamp = new Date();
-        var offset = event.getPageX();
-        var timeDiff = rwt.remote.EventUtil.DOUBLE_CLICK_TIME;
-        var offsetDiff = 8;
-        if (    stamp.getTime() - this._selectionTimestamp.getTime() < timeDiff
-             && Math.abs( this._selectionOffsetX - offset ) < offsetDiff )
-        {
-          result = true;
-        }
-      }
-      if( mousedown && leftClick && !result ) {
-        this._selectionTimestamp = new Date();
-        this._selectionOffsetX = event.getPageX();
-      } else if( mousedown ) {
-        this._selectionTimestamp = null;
-      }
-      return result;
-    },
-
-    _getSelectionList : function() {
-      var result = [];
-      for( var i = 0; i < this._selection.length; i++ ) {
-        result.push( this._getItemId( this._selection[ i ] ) );
-      }
-      return result;
-    },
-
-    _getItemId : function( item ) {
-      var wm = rwt.remote.WidgetManager.getInstance();
-      var result;
-      if( item.isCached() ) {
-        result = wm.findIdByWidget( item );
-      } else {
-        var parent = item.getParent();
-        if( parent.isRootItem() ) {
-          result = wm.findIdByWidget( this );
-        } else {
-          result = wm.findIdByWidget( parent );
-        }
-        result += "#" + parent.indexOf( item );
-      }
-      return result;
-    },
-
-    ////////////////////
-    // focus & selection
-
-    _singleSelectItem : function( event, item ) {
-      if( event.isCtrlPressed() && this.isItemSelected( item ) ) {
-        // NOTE: Apparently in SWT this is only supported by Table, not Tree.
-        //       No reason not to support it in RAP though.
-        this._ctrlSelectItem( item );
-      } else {
-        this._exclusiveSelectItem( item );
-      }
-    },
-
-    _multiSelectItem : function( event, item ) {
-      if( event instanceof rwt.event.MouseEvent && event.isRightButtonPressed() ) {
-        if( !this.isItemSelected( item ) ) {
-          this._exclusiveSelectItem( item );
-        }
-      } else if( event.isCtrlPressed() ) {
-        if( event instanceof rwt.event.KeyEvent && item != this._focusItem  ) {
-          this.setFocusItem( item );
-        } else {
-          this._ctrlSelectItem( item );
-        }
-      } else if( event.isShiftPressed() ) {
-        if( this._focusItem != null ) {
-          this._shiftSelectItem( item );
-        } else {
-          this._exclusiveSelectItem( item );
-        }
-      } else {
-        this._exclusiveSelectItem( item );
-      }
-    },
-
-    _exclusiveSelectItem : function( item ) {
-      this.deselectAll();
-      this._leadItem = null;
-      this._selectItem( item, true );
-      this._sendSelectionChange( item );
-      this.setFocusItem( item );
-    },
-
-    _ctrlSelectItem : function( item ) {
-      if( !this.isItemSelected( item ) ) {
-        this._selectItem( item, true );
-      } else {
-        this._deselectItem( item, true );
-      }
-      this._sendSelectionChange( item );
-      this.setFocusItem( item );
-    },
-
-    _shiftSelectItem : function( item ) {
-      this.deselectAll();
-      var currentItem = this._leadItem != null ? this._leadItem : this._focusItem;
-      this._leadItem = currentItem;
-      var targetItem = item;
-      var startIndex = currentItem.getFlatIndex();
-      var endIndex = targetItem.getFlatIndex();
-      if( startIndex > endIndex ) {
-        var temp = currentItem;
-        currentItem = targetItem;
-        targetItem = temp;
-      }
-      this._selectItem( currentItem, true );
-      while( currentItem !== targetItem ) {
-        currentItem = currentItem.getNextItem();
-        this._selectItem( currentItem, true );
-      }
-      this._sendSelectionChange( item );
-      this.setFocusItem( item );
-    },
-
-    _selectItem : function( item, render ) {
-      if( !this.isItemSelected( item ) ) {
-        this._selection.push( item );
-      }
-      if( render ) {
-        this._rowContainer.renderItem( item );
-      }
-    },
-
-    _deselectItem : function( item, render ) {
-      if( this.isItemSelected( item ) ) {
-        this._selection.splice( this._selection.indexOf( item ), 1 );
-      }
-      if( render ) {
-        this._rowContainer.renderItem( item );
-      }
-    },
-
-    deselectAll : function() {
-      this._checkDisposedItems();
-      var oldSelection = this._selection;
-      this._selection = [];
-      for( var i = 0; i < oldSelection.length; i++ ) {
-        this._rowContainer.renderItem( oldSelection[ i ] );
-      }
-    },
-
-    _toggleCheckSelection : function( item, cell ) {
-      if( item.isCached() ) {
-        if( isNaN( cell ) ) {
-          item.setChecked( !item.isChecked() );
-          this._sendItemCheckedChange( item );
-        } else if( item.isCellCheckable( cell ) ) {
-          item.toggleCellChecked( cell );
-          this._sendCellCheckedChange( item, cell );
-        }
-      }
-    },
-
-    _deselectVisibleChildren : function( item ) {
-      var currentItem = item.getNextItem();
-      var finalItem = item.getNextItem( true );
-      while( currentItem !== finalItem ) {
-        this._deselectItem( currentItem, false );
-        currentItem = currentItem.getNextItem();
-      }
-    },
-
-    _applyFocused : function( newValue, oldValue ) {
-      this.base( arguments, newValue, oldValue );
-      this._config.focused = newValue;
-      this._scheduleUpdate();
-    },
-
-    _applyEnabled : function( newValue, oldValue ) {
-      this.base( arguments, newValue, oldValue );
-      this._config.enabled = newValue;
-      this._scheduleUpdate();
-    },
-
-    _checkDisposedItems : function() {
-      // NOTE : FocusItem might already been fixed by the server. But since this is not
-      //        always the case (depending on the server-side widget), we also do it here.
-      if( this._focusItem && this._focusItem.isDisposed() ) {
-        this._focusItem = null;
-      }
-      if( this._leadItem && this._leadItem.isDisposed() ) {
-        this._leadItem = null;
-      }
-      var i = 0;
-      while( i < this._selection.length ) {
-        if( this._selection[ i ].isDisposed() ) {
-          this._deselectItem( this._selection[ i ], false );
-        } else {
-          i++;
-        }
-      }
-    },
-
-    ////////////////////////////
-    // internal layout & theming
-
-    _applyTextColor : function( newValue, oldValue ) {
-      this.base( arguments, newValue, oldValue );
-      this._config.textColor = newValue;
-      this._scheduleUpdate();
-    },
-
-    _applyFont : function( newValue, oldValue ) {
-      this.base( arguments, newValue, oldValue );
-      this._config.font = newValue;
-      this._scheduleUpdate();
-    },
-
-    _applyBackgroundColor : function( newValue ) {
-      this._rowContainer.setBackgroundColor( newValue );
-    },
-
-    _applyBackgroundImage : function( newValue ) {
-      this._rowContainer.setBackgroundImage( newValue );
-    },
-
-    _applyWidth : function( newValue, oldValue ) {
-      this.base( arguments, newValue, oldValue );
-      this._layoutX();
-    },
-
-    _applyHeight : function( newValue, oldValue ) {
-      this.base( arguments, newValue, oldValue );
-      this._layoutY();
-    },
-
-    _applyBorder : function( newValue, oldValue ) {
-      this.base( arguments, newValue, oldValue );
-      this._layoutX();
-      this._layoutY();
-    },
-
-    _layoutX : function() {
-      var width = this.getWidth() - this.getFrameWidth();
-      if( this._header && this._header.getDisplay() ) {
-        this._header.setWidth( width );
-      }
-      if( this._vertScrollBar.getVisibility() ) {
-        width -= this._vertScrollBar.getWidth();
-        this._vertScrollBar.setLeft( width );
-      }
-      if( this._footer ) {
-        this._footer.setWidth( width );
-      }
-      this._horzScrollBar.setWidth( width );
-      this._rowContainer.setWidth( width );
-      this._updateScrollWidth();
-    },
-
-    _layoutY : function() {
-      var top = 0;
-      top += this._header ? this._headerHeight : 0;
-      var height = this.getHeight() - this.getFrameHeight();
-      height -= this._header ? this._headerHeight : 0;
-      height -= this._footer ? this._footerHeight : 0;
-      height -= this._horzScrollBar.getVisibility() ? this._horzScrollBar.getHeight() : 0;
-      height = Math.max( 0, height );
-      if( this._header ) {
-        this._header.setHeight( this._headerHeight );
-      }
-      if( this._footer ) {
-        this._footer.setHeight( this._footerHeight );
-        this._footer.setTop( top + height );
-      }
-      if( this._horzScrollBar.getVisibility() ) {
-        this._horzScrollBar.setTop( top + height + ( this._footer ? this._footerHeight : 0  ) );
-      }
-      this._vertScrollBar.setHeight( height + ( this._footer ? this._footerHeight : 0  ) );
-      this._vertScrollBar.setTop( top );
-      this._rowContainer.setTop( top );
-      this._rowContainer.setHeight( height );
-      this._scheduleUpdate();
-    },
-
-    _getItemWidth : function() {
-      var result = 0;
-      if( this._config.itemLeft.length > 0 ) {
-        var columnCount = Math.max( 1, this._config.columnCount );
-        for( var i = 0; i < columnCount; i++ ) {
-          result = Math.max( result, this._config.itemLeft[ i ] + this._config.itemWidth[ i ] );
-        }
-      }
-      return result;
-    },
-
-    _getRowWidth : function() {
-      var width = this._rowContainer.getWidth();
-      var result = Math.max( this._getItemWidth(), width );
-      return result;
-    },
-
-    /////////
-    // helper
-
-    _inServerResponse : function() {
-      return rwt.remote.EventUtil.getSuspended();
-    },
-
-    _isDragSource : function() {
-      return this.hasEventListeners( "dragstart" );
-    },
-
-    _getTopItem : function() {
-      if( this._topItem === null ) {
-        this._topItem = this._rootItem.findItemByFlatIndex( this._topItemIndex );
-      }
-      return this._topItem;
-    },
-
-    ////////////////////////
-    // Cell tooltip handling
-
-    setEnableCellToolTip : function( value ) {
-      if( value ) {
-        this._cellToolTip = new rwt.widgets.base.GridCellToolTip( this );
-        this._rowContainer.addEventListener( "mousemove", this._onClientAreaMouseMove, this );
-        this._rowContainer.setToolTip( this._cellToolTip );
-      } else {
-        this._rowContainer.removeEventListener( "mousemove", this._onClientAreaMouseMove, this );
-        this._rowContainer.setToolTip( null );
-        this._cellToolTip.destroy();
-        this._cellToolTip = null;
-      }
-    },
-
-    _onClientAreaMouseMove : function( evt ) {
-      if( this._cellToolTip != null ) {
-        var itemId = null;
-        var columnIndex = -1;
-        if( this._rowContainer.getHoverItem() ) {
-          var widgetManager = rwt.remote.WidgetManager.getInstance();
-          itemId = widgetManager.findIdByWidget( this._rowContainer.getHoverItem() );
-          columnIndex = rwt.widgets.util.GridUtil.getColumnByPageX( this, evt.getPageX() );
-        }
-        this._cellToolTip.setCell( itemId, columnIndex );
-      }
-    },
-
-    /** Only called by server-side */
-    setCellToolTipText : function( text ) {
-      if( this._cellToolTip != null ) {
-        this._cellToolTip.setText( text );
-      }
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.ScrollBar", {
-
-  factory : function( properties ) {
-    // NOTE : In this case the parent HAS to be already created by the protocol
-    var styleMap = rwt.remote.HandlerUtil.createStyleMap( properties.style );
-    var parent = rwt.remote.ObjectRegistry.getObject( properties.parent );
-    var result;
-    if( styleMap.HORIZONTAL ) {
-      result = parent.getHorizontalBar();
-    } else {
-      result = parent.getVerticalBar();
-    }
-    rwt.remote.HandlerUtil.addDestroyableChild( parent, result );
-    result.setUserData( "protocolParent", parent );
-    return result;
-  },
-
-  destructor : function( widget ) { 
-    var parent = widget.getUserData( "protocolParent" );
-    if( parent ) {
-      rwt.remote.HandlerUtil.removeDestroyableChild( parent, widget );
-    }
-  },
-
-  properties : [
-    "visibility"
-  ],
-
-  propertyHandler : {
-    "visibility" : function( widget, value ) {
-      var parent = widget.getParent();
-      // NOTE : use parent.getXXXBarVisible because "visibility" or "display" my be used
-      // TODO [tb] : alwas use display
-      if( widget.isHorizontal() ) {
-        parent.setScrollBarsVisible( value, parent.isVerticalBarVisible() );
-      } else {
-        parent.setScrollBarsVisible( parent.isHorizontalBarVisible(), value );
-      }
-    }
-  },
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [
-    "Selection"
-  ] ),
-
-  listenerHandler : {},
-
-  methods : []
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.Grid", {
-
-  factory : function( properties ) {
-    var styleMap = rwt.remote.HandlerUtil.createStyleMap( properties.style );
-    var configMap = {
-      appearance : properties.appearance,
-      noScroll : styleMap.NO_SCROLL,
-      multiSelection : styleMap.MULTI,
-      check : styleMap.CHECK,
-      // TODO: Remove this check when bug 355408: [Table] Always uses FULL_SELECTION is fixed
-      fullSelection : properties.appearance === "table" ? true : styleMap.FULL_SELECTION,
-      hideSelection : styleMap.HIDE_SELECTION,
-      checkBoxMetrics : properties.checkBoxMetrics,
-      selectionPadding : properties.selectionPadding,
-      indentionWidth : properties.indentionWidth,
-      splitContainer : properties.splitContainer,
-      markupEnabled : properties.markupEnabled
-    };
-    var result = new rwt.widgets.Grid( configMap );
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : function( widget ) {
-    var destroyItems = widget.getRootItem().getUncachedChildren();
-    for( var i = 0; i < destroyItems.length; i++ ) {
-      destroyItems[ i ].dispose();
-    }
-    rwt.remote.HandlerUtil.getControlDestructor()( widget );
-  },
-
-  getDestroyableChildren : function( widget ) {
-    var result = widget.getRootItem().getCachedChildren();
-    return result.concat( rwt.remote.HandlerUtil.getDestroyableChildrenFinder()( widget ) );
-  },
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "itemCount",
-    "itemHeight",
-    "itemMetrics",
-    // NOTE : Client currently requires itemMetrics before columnCount
-    "columnCount",
-    "treeColumn",
-    "fixedColumns",
-    "headerHeight",
-    "headerVisible",
-    "footerHeight",
-    "footerVisible",
-    "linesVisible",
-    "topItemIndex",
-    "scrollLeft",
-    "selection",
-    "focusItem",
-    "sortDirection",
-    "sortColumn",
-    "alwaysHideSelection",
-    "enableCellToolTip",
-    "cellToolTipText"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    "itemMetrics" : function( widget, value ) {
-      for( var i = 0; i < value.length; i++ ) {
-        widget.setItemMetrics.apply( widget, value[ i ] );
-      }
-    },
-    "fixedColumns" : function( widget, value ) {
-      rwt.widgets.util.GridUtil.setFixedColumns( widget, value );
-    },
-    "focusItem" : function( widget, value ) {
-      rwt.remote.HandlerUtil.callWithTarget( value, function( item ) {
-        widget.setFocusItem( item );
-      } );
-    },
-    "selection" : function( widget, value ) {
-      widget.deselectAll();
-      var applySelection = function( item ) {
-        widget.selectItem( item );
-      };
-      for( var i = 0; i < value.length; i++ ) {
-        rwt.remote.HandlerUtil.callWithTarget( value[ i ], applySelection );
-      }
-    },
-    "sortColumn" : function( widget, value ) {
-      rwt.remote.HandlerUtil.callWithTarget( value, function( column ) {
-        widget.setSortColumn( column );
-      } );
-    },
-    "scrollBarsVisible" : function( widget, value ) {
-      widget.setScrollBarsVisible( value[ 0 ], value[ 1 ] );
-    },
-    "cellToolTipText" : function( widget, value ) {
-      var EncodingUtil = rwt.util.Encoding;
-      var text = EncodingUtil.escapeText( value, false );
-      text = EncodingUtil.replaceNewLines( text, "<br/>" );
-      widget.setCellToolTipText( text );
-    }
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [
-    "Selection",
-    "DefaultSelection",
-    "Expand",
-    "Collapse",
-    "SetData"
-  ] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {
-    "scrollBarsSelection" : function( widget, value ) {
-      widget.setHasScrollBarsSelectionListener( value );
-    }
-  } )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2010, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.GridItem", {
-
-  extend : rwt.qx.Target,
-
-  construct : function( parent, index, placeholder ) {
-    // Dispose is only needed to remove items from the tree and widget manager.
-    // Since it holds no references to the dom, it suffices to dispose tree.
-    this._autoDispose = false;
-    this.base( arguments );
-    this._parent = parent;
-    this._level = -1;
-    this._height = null;
-    this._children = [];
-    this._indexCache = {};
-    this._visibleChildrenCount = 0;
-    this._expandedItems = {};
-    this._customHeightItems = {};
-    this._texts = placeholder ? [ "..." ] : [];
-    this._images = [];
-    this._cached = !placeholder;
-    this._font = null;
-    this._cellFonts = [];
-    this._foreground = null;
-    this._cellForegrounds = [];
-    this._background = null;
-    this._cellBackgrounds = [];
-    this._checked = false;
-    this._grayed = false;
-    this._cellChecked = [];
-    this._cellGrayed = [];
-    this._cellCheckable = [];
-    this._variant = null;
-    if( this._parent != null ) {
-      this._level = this._parent.getLevel() + 1;
-      this._parent._add( this, index );
-    }
-    this._expanded = this.isRootItem();
-    this.addEventListener( "update", this._onUpdate, this );
-    this._escaped = false;
-    if( this.isRootItem() ) {
-      this._rootItem = this;
-      this._height = 16;
-    } else {
-      this._rootItem = parent.getRootItem();
-    }
-  },
-
-  destruct : function() {
-    if( this._parent != null && !this._parent.isDisposed() ) {
-      this._parent._remove( this );
-    }
-    this._parent = null;
-    this._height = null;
-    this._children = null;
-    this._indexCache = null;
-    this._expandedItems = null;
-    this._customHeightItems = null;
-    this._texts = null;
-    this._images = null;
-    this._font = null;
-    this._cellFonts = null;
-    this._foreground = null;
-    this._cellForegrounds = null;
-    this._background = null;
-    this._cellBackgrounds = null;
-    this._cellChecked = null;
-    this._cellGrayed = null;
-    this._cellCheckable = null;
-    this._rootItem = null;
-  },
-
-  statics : {
-
-    createItem : function( parent, index ) {
-      var parentItem = this._getItem( parent );
-      var result;
-      if( parentItem.isChildCreated( index ) && !parentItem.isChildCached( index ) ) {
-        result = parentItem.getChild( index );
-        result.markCached();
-      } else {
-        result = new rwt.widgets.GridItem( parentItem, index, false );
-      }
-      return result;
-    },
-
-    _getItem : function( treeOrItem ) {
-      var result;
-      if( treeOrItem instanceof rwt.widgets.Grid ) {
-        result = treeOrItem.getRootItem();
-      } else {
-        result = treeOrItem;
-      }
-      return result;
-    }
-
-  },
-
-  events: {
-    "update" : "rwt.event.Event"
-  },
-
-  members : {
-
-    setItemCount : function( value ) {
-      var msg = this._children.length > value ? "remove" : "add";
-      this._children.length = value;
-      this._update( msg );
-    },
-
-    setIndex : function( value ) {
-      var siblings = this._parent._children;
-      if( siblings.indexOf( this ) !== value ) {
-        var target = siblings[ value ];
-        siblings[ value ] = this;
-        if( target && !target.isCached() ) {
-          target.dispose();
-        }
-      }
-    },
-
-    clear : function() {
-      // TODO [tb] : children?
-      this._cached = false;
-      this._checked = false;
-      this._grayed = false;
-      this._texts = [ "..." ];
-      this._images = [];
-      this._background = null;
-      this._foreground = null;
-      this._font = null;
-      this._cellBackgrounds = [];
-      this._cellForegrounds = [];
-      this._cellFonts = [];
-      this._variant = null;
-    },
-
-    isCached : function() {
-      return this._cached;
-    },
-
-    markCached : function() {
-      this._cached = true;
-      this._texts = [];
-    },
-
-    setTexts : function( texts ) {
-      this._texts = texts;
-      this._escaped = false;
-      this._update( "content" );
-    },
-
-    /**
-     * Id doEscape is true, the text is permanantly ecaped, unescaped text can no longer
-     * be provided. If it is undefined the text is escaped, but not permanently.
-     */
-    getText : function( column, doEscape ) {
-      var result = this._texts[ column ];
-      if( ( typeof result ) === "string" ) {
-        if( doEscape !== false && !this._escaped ) {
-          if( doEscape === true ) {
-            this._escapeTexts();
-            this._escaped = true;
-            result = this._texts[ column ];
-          } else {
-            result = this._escape( this._texts[ column ] );
-          }
-        } if( doEscape === false && this._escaped ) {
-          throw new Error( "Unescaped text requested from GridItem, but is already escaped" );
-        }
-      } else {
-        result = "";
-      }
-      return result;
-    },
-
-    hasText : function( column ) {
-      return !!this._texts[ column ];
-    },
-
-    setFont : function( font ) {
-      this._font = font;
-      this._update( "content" );
-    },
-
-    getCellFont : function( column ) {
-      var result = this._cellFonts[ column ];
-      return typeof result === "string" && result !== "" ? result : this._font;
-    },
-
-    setCellFonts : function( fonts ) {
-      this._cellFonts = fonts;
-      this._update( "content" );
-    },
-
-    setForeground : function( color ) {
-      this._foreground = color;
-      this._update( "content" );
-    },
-
-    getCellForeground : function( column ) {
-      var result = this._cellForegrounds[ column ];
-      return typeof result === "string" ? result : this._foreground;
-    },
-
-    setCellForegrounds : function( colors ) {
-      this._cellForegrounds = colors;
-      this._update( "content" );
-    },
-
-    setBackground : function( color ) {
-      this._background = color;
-      this._update( "content" );
-    },
-
-    getCellBackground : function( column ) {
-      var result = this._cellBackgrounds[ column ];
-      return typeof result === "string" ? result : null;
-    },
-
-    getBackground : function() {
-      return this._background;
-    },
-
-    setCellBackgrounds : function( colors ) {
-      this._cellBackgrounds = colors;
-      this._update( "content" );
-    },
-
-    setImages : function( images ) {
-      this._images = images;
-      this._update( "content" );
-    },
-
-    getImage : function( column ) {
-      var result = this._images[ column ];
-      return typeof result === "string" ? result : null;
-    },
-
-    setChecked : function( value ) {
-      this._checked = value;
-      this._update( "content" );
-    },
-
-    isChecked : function() {
-      return this._checked;
-    },
-
-    setGrayed : function( value ) {
-      this._grayed = value;
-      this._update( "content" );
-    },
-
-    isGrayed : function() {
-      return this._grayed;
-    },
-
-    setCellChecked : function( value ) {
-      this._cellChecked = value;
-      this._update( "content" );
-    },
-
-    toggleCellChecked : function( cell ) {
-      this._cellChecked[ cell ] = !this._cellChecked[ cell ];
-      this._update( "content" );
-    },
-
-    getCellChecked : function() {
-      return this._cellChecked;
-    },
-
-    isCellChecked : function( column ) {
-      return this._cellChecked[ column ];
-    },
-
-    setCellGrayed : function( value ) {
-      this._cellGrayed = value;
-      this._update( "content" );
-    },
-
-    isCellGrayed : function( column ) {
-      return this._cellGrayed[ column ];
-    },
-
-    setCellCheckable : function( value ) {
-      this._cellCheckable = value;
-    },
-
-    isCellCheckable : function( column ) {
-      return this._cellCheckable[ column ] === undefined ? true : this._cellCheckable[ column ];
-    },
-
-    setVariant : function( variant ) {
-      this._variant = variant;
-    },
-
-    getVariant : function() {
-      return this._variant;
-    },
-
-    setDefaultHeight : function( value ) {
-      if( !this.isRootItem() ) {
-        throw new Error( "Can only set default item height on root item" );
-      }
-      this._height = value;
-    },
-
-    setHeight : function( value ) {
-      if( this.isRootItem() ) {
-        throw new Error( "Can not set item height on root item" );
-      }
-      this._height = value;
-      if( value !== null ) {
-        this._parent._addToCustomHeightItems( this );
-      } else {
-        this._removeFromCustomHeightItems( this );
-      }
-      this._update( "height" );
-    },
-
-    getDefaultHeight : function() {
-      var result;
-      if( this.isRootItem() ) {
-        result = this._height;
-      } else {
-        result = this.getRootItem().getDefaultHeight();
-      }
-      return result;
-    },
-
-    //////////////////////////
-    // relationship management
-
-    isRootItem : function() {
-      return this._level < 0;
-    },
-
-    getRootItem : function() {
-      return this._rootItem;
-    },
-
-    getLevel : function() {
-      return this._level;
-    },
-
-    getParent : function() {
-      return this._parent;
-    },
-
-    setExpanded : function( value ) {
-      if( this._expanded != value ) {
-        this._expanded = value;
-        this._update( value ? "expanded" : "collapsed" );
-        if( value ) {
-          this._parent._addToExpandedItems( this );
-        } else {
-          this._parent._removeFromExpandedItems( this );
-        }
-      }
-    },
-
-    isExpanded : function() {
-      return this._expanded;
-    },
-
-    isDisplayable : function() {
-      var result = false;
-      if( this.isRootItem() || this._parent.isRootItem() ) {
-        result = true;
-      } else {
-        result = this._parent.isExpanded() && this._parent.isDisplayable();
-      }
-      return result;
-    },
-
-    hasChildren : function() {
-      return this._children.length > 0;
-    },
-
-    getChildrenLength : function() {
-      return this._children.length;
-    },
-
-    isChildCreated : function( index ) {
-      return this._children[ index ] !== undefined;
-    },
-
-    isChildCached : function( index ) {
-      return this._children[ index ].isCached();
-    },
-
-    getCachedChildren : function() {
-      var result = [];
-      for( var i = 0; i < this._children.length; i++ ) {
-        if( this.isChildCreated( i ) && this.isChildCached( i ) ) {
-          result.push( this._children[ i ] );
-        }
-      }
-      return result;
-    },
-
-    getUncachedChildren : function() {
-      var result = [];
-      for( var i = 0; i < this._children.length; i++ ) {
-        if( this.isChildCreated( i ) && !this.isChildCached( i ) ) {
-          result.push( this._children[ i ] );
-        }
-      }
-      return result;
-    },
-
-    getOffsetHeight : function() {
-      var result = this.getOwnHeight();
-      if( this.isExpanded() && this.hasChildren() ) {
-        var lastChild = this.getLastChild();
-        result += this._getChildOffset( lastChild );
-        result += lastChild.getOffsetHeight();
-      }
-      return result;
-    },
-
-    hasCustomHeight : function() {
-      return this._height !== null;
-    },
-
-    getOwnHeight : function() {
-      var result = 0;
-      if( !this.isRootItem() ) {
-        result = this._height !== null ? this._height : this.getDefaultHeight();
-      }
-      return result;
-    },
-
-    getVisibleChildrenCount : function() { // TODO [tb] : rather "itemCount"
-      if( this._visibleChildrenCount == null ) {
-        this._computeVisibleChildrenCount();
-      }
-      return this._visibleChildrenCount;
-    },
-
-    getChild : function( index ) {
-      var result = this._children[ index ];
-      if( !result ) {
-        if( index >= 0 && index < this._children.length ) {
-          result = new rwt.widgets.GridItem( this, index, true );
-        }
-      }
-      return result;
-    },
-
-    getLastChild : function() {
-      return this.getChild( this._children.length - 1 );
-    },
-
-    indexOf : function( item ) {
-      var hash = item.toHashCode();
-      if( this._indexCache[ hash ] === undefined ) {
-        this._indexCache[ hash ] = this._children.indexOf( item );
-      }
-      return this._indexCache[ hash ];
-    },
-
-    /**
-     * Returns true if the given item is one of the parents of this item (recursive).
-     */
-    isChildOf : function( parent ) {
-      var result = this._parent === parent;
-      if( !result && !this._parent.isRootItem() ) {
-        result = this._parent.isChildOf( parent );
-      }
-      return result;
-    },
-
-    /**
-     * Returns the item that at the given vertical offset in pixel. The offset starts below
-     * this item. The returned items occupies an area that includes the position defined by the
-     * given offset. Its exact offset may by different. Negative offset is now allowed.
-     */
-    findItemByOffset : function( targetOffset ) {
-      // TODO [tb] : cache results
-      var itemHeight = this.getDefaultHeight();
-      var waypoints = this._getDifferingHeightIndicies();
-      if( waypoints[ 0 ] === 0 ) {
-        waypoints.shift();
-      }
-      var currentOffset = 0;
-      var currentIndex = 0;
-      var result = null;
-      var finished = false;
-      if( targetOffset < 0 || this.getChildrenLength() === 0 ) {
-        finished = true;
-      }
-      while( !finished ) {
-        var currentItem = this.getChild( currentIndex );
-        var currentItemHeight = currentItem.getOffsetHeight();
-        var nextIndex = waypoints.shift();
-        var nextOffset =   currentOffset
-                         + currentItemHeight
-                         + ( nextIndex - currentIndex - 1 ) * itemHeight;
-        if( targetOffset < currentOffset + currentItemHeight ) {
-          // case: target in current item
-          if( targetOffset < currentOffset + currentItem.getOwnHeight() ) {
-            result = currentItem;
-          } else {
-            var localOffset = targetOffset - currentOffset - currentItem.getOwnHeight();
-            result = currentItem.findItemByOffset( localOffset );
-          }
-          finished = true;
-        } else if( nextIndex === undefined || nextOffset > targetOffset ) {
-          // case: target after current item, before next waypoint (or no more waypoint)
-          var offsetDiff = targetOffset - currentOffset - currentItemHeight;
-          var targetIndex = currentIndex + 1 + Math.floor( offsetDiff / itemHeight );
-          result = this.getChild( targetIndex );
-          finished = true;
-        } else {
-         // case: target in or after next waypoint
-          currentIndex = nextIndex;
-          currentOffset = nextOffset;
-        }
-      }
-      return result;
-    },
-
-    /**
-     * Finds the item at the given index, counting all visible children.
-     */
-    findItemByFlatIndex : function( index ) {
-      var expanded = this._getExpandedIndicies();
-      var localIndex = index;
-      var result = null;
-      var success = false;
-      while( !success && localIndex >= 0) {
-        var expandedIndex = expanded.shift();
-        if( expandedIndex === undefined || expandedIndex >= localIndex ) {
-          result = this.getChild( localIndex );
-          if( result ) {
-            this._indexCache[ result.toHashCode() ] = localIndex;
-          }
-          success = true;
-        } else {
-          var childrenCount = this.getChild( expandedIndex ).getVisibleChildrenCount();
-          var offset = localIndex - expandedIndex; // Items between current item and target item
-          if( offset <= childrenCount ) {
-            result = this.getChild( expandedIndex ).findItemByFlatIndex( offset - 1 );
-            success = true;
-            if( result == null ) {
-              throw new Error( "getItemByFlatIndex failed" );
-            }
-          } else {
-            localIndex -= childrenCount;
-          }
-        }
-      }
-      return result;
-    },
-
-    /**
-     * Returns the offset of this items top to the top of the entire visible item tree in pixel.
-     * Root item is excluded, as it is not displayed.
-     */
-    getOffset : function() {
-      var result = 0;
-      if( !this._parent.isRootItem() ) {
-        result += this._parent.getOffset() + this._parent.getOwnHeight();
-      }
-      result += this._parent._getChildOffset( this );
-      return result;
-    },
-
-    /**
-     * Returns the offset of a child in pixel relative to this item (its parent),
-     * excluding the height of child and parent themselves (just the distance between)
-     */
-    _getChildOffset : function( item ) {
-      var localIndex = this.indexOf( item );
-      var result = localIndex * this.getDefaultHeight();
-      var indicies = this._getDifferingHeightIndicies();
-      while( indicies.length > 0 && localIndex > indicies[ 0 ] ) {
-        var index = indicies.shift();
-        result -= this.getDefaultHeight();
-        result += this._children[ index ].getOffsetHeight();
-      }
-      return result;
-    },
-
-    /**
-     * Gets the index relative to the root-item, counting all visible items inbetween.
-     */
-    getFlatIndex : function() {
-      var localIndex = this._parent.indexOf( this );
-      var result = localIndex;
-      var expanded = this._parent._getExpandedIndicies();
-      while( expanded.length > 0 && localIndex > expanded[ 0 ] ) {
-        var expandedIndex = expanded.shift();
-        result += this._parent._children[ expandedIndex ].getVisibleChildrenCount();
-      }
-      if( !this._parent.isRootItem() ) {
-        result += this._parent.getFlatIndex() + 1;
-      }
-      return result;
-    },
-
-    hasPreviousSibling : function() {
-      var index = this._parent.indexOf( this ) - 1 ;
-      return index >= 0;
-    },
-
-    hasNextSibling : function() {
-      var index = this._parent.indexOf( this ) + 1 ;
-      return index < this._parent.getChildrenLength();
-    },
-
-    getPreviousSibling : function() {
-      var index = this._parent.indexOf( this ) - 1 ;
-      return this._parent.getChild( index );
-    },
-
-    getNextSibling : function() {
-      var index = this._parent.indexOf( this ) + 1 ;
-      var item = this._parent.getChild( index );
-      this._parent._indexCache[ item.toHashCode() ] = index;
-      return item;
-    },
-
-    /**
-     * Returns the next visible item, which my be the first child,
-     * the next sibling or the next sibling of the parent.
-     */
-    getNextItem : function( skipChildren ) {
-      var result = null;
-      if( !skipChildren && this.hasChildren() && this.isExpanded() ) {
-        result = this.getChild( 0 );
-      } else if( this.hasNextSibling() ) {
-        result = this.getNextSibling();
-      } else if( this.getLevel() > 0 ) {
-        result = this._parent.getNextItem( true );
-      }
-      return result;
-    },
-
-    /**
-     * Returns the previous visible item, which my be the previous sibling,
-     * the previous siblings last child, or the parent.
-     */
-    getPreviousItem : function() {
-      var result = null;
-      if( this.hasPreviousSibling() ) {
-        result = this.getPreviousSibling();
-        while( result.hasChildren() && result.isExpanded() ) {
-          result = result.getLastChild();
-        }
-      } else if( this.getLevel() > 0 ) {
-        result = this._parent;
-      }
-      return result;
-    },
-
-    /////////////////////////
-    // API for other TreeItem
-
-    _add : function( item, index ) {
-      if( this._children[ index ] ) {
-        this._children.splice( index, 0, item );
-        this._children.pop();
-        this._update( "add", item );
-      } else {
-        this._children[ index ] = item;
-      }
-    },
-
-    _remove : function( item ) {
-      if( item.isExpanded() ) {
-        delete this._expandedItems[ item.toHashCode() ];
-      }
-      if( item.hasCustomHeight() ) {
-        delete this._customHeightItems[ item.toHashCode() ];
-      }
-      var index = this._children.indexOf( item );
-      if( index !== -1 ) {
-        this._children.splice( index, 1 );
-        this._children.push( undefined );
-      }
-      this._update( "remove", item );
-    },
-
-    _addToExpandedItems : function( item ) {
-      this._expandedItems[ item.toHashCode() ] = item;
-    },
-
-    _removeFromExpandedItems : function( item ) {
-      delete this._expandedItems[ item.toHashCode() ];
-    },
-
-    _addToCustomHeightItems : function( item ) {
-      this._customHeightItems[ item.toHashCode() ] = item;
-    },
-
-    _removeFromCustomHeightItems : function( item ) {
-      delete this._customHeightItems[ item.toHashCode() ];
-    },
-
-    //////////////////////////////
-    // support for event-bubbling:
-
-    getEnabled : function() {
-      return true;
-    },
-
-    _update : function( msg, related ) {
-      var event = {
-        "msg" : msg,
-        "related" : related,
-        "target" : this
-      };
-      this.dispatchSimpleEvent( "update", event, true );
-      delete event.target;
-      delete event.related;
-      delete event.msg;
-    },
-
-    _onUpdate : function( event ) {
-      if( event.msg !== "content" ) {
-        this._visibleChildrenCount = null;
-        this._indexCache = {};
-      }
-    },
-
-    /////////
-    // Helper
-
-    _escapeTexts : function() {
-      for( var i = 0; i < this._texts.length; i++ ) {
-        var text = this._texts[ i ];
-        if( text ) {
-          text = this._escape( text );
-        }
-        this._texts[ i ] = text;
-      }
-    },
-
-    _escape : function( text ) {
-      var EncodingUtil = rwt.util.Encoding;
-      var result = EncodingUtil.escapeText( text, false );
-      result = EncodingUtil.replaceWhiteSpaces( result );
-      return result;
-    },
-
-    _computeVisibleChildrenCount : function() {
-      // NOTE: Caching this value speeds up creating and scrolling the tree considerably
-      var result = 0;
-      if( this.isExpanded() || this.isRootItem() ) {
-       result = this._children.length;
-        for( var i = 0; i < this._children.length; i++ ) {
-          if( this.isChildCreated( i ) ) {
-            result += this.getChild( i ).getVisibleChildrenCount();
-          }
-        }
-      }
-      this._visibleChildrenCount = result;
-    },
-
-    _getDifferingHeightIndicies : function() {
-      var result = [];
-      for( var key in this._expandedItems ) {
-        result.push( this.indexOf( this._expandedItems[ key ] ) );
-      }
-      for( var key in this._customHeightItems ) {
-        if( !this._expandedItems[ key ] ) { // prevent duplicates
-          result.push( this.indexOf( this._customHeightItems[ key ] ) );
-        }
-      }
-      // TODO [tb] : result could be cached
-      return result.sort( function( a, b ){ return a - b; } );
-    },
-
-    _getExpandedIndicies : function() {
-      var result = [];
-      for( var key in this._expandedItems ) {
-        result.push( this.indexOf( this._expandedItems[ key ] ) );
-      }
-      // TODO [tb] : result could be cached
-      return result.sort( function( a, b ){ return a - b; } );
-    },
-
-    toString : function() {
-      return "TreeItem " + this._texts.join();
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.GridItem", {
-
-  factory : function( properties ) {
-    var result;
-    rwt.remote.HandlerUtil.callWithTarget( properties.parent, function( parent ) {
-      result = rwt.widgets.GridItem.createItem( parent, properties.index );
-    } );
-    return result;
-  },
-
-  destructor : function( item ) {
-    var destroyItems = item.getUncachedChildren();
-    for( var i = 0; i < destroyItems.length; i++ ) {
-      destroyItems[ i ].dispose();
-    }
-    item.dispose();
-  },
-
-  getDestroyableChildren : function( widget ) {
-    return widget.getCachedChildren();
-  },
-
-  properties : [
-    "itemCount",
-    "texts",
-    "images",
-    "background",
-    "foreground",
-    "font",
-    "cellBackgrounds",
-    "cellForegrounds",
-    "cellFonts",
-    "expanded",
-    "checked",
-    "grayed",
-    "cellChecked",
-    "cellGrayed",
-    "cellCheckable",
-    "customVariant",
-    "height",
-    "index"
-  ],
-
-  propertyHandler : {
-    "images" : function( widget, value ) {
-      var images = [];
-      for( var i = 0; i < value.length; i++ ) {
-        if( value[ i ] === null ) {
-          images[ i ] = null;
-        } else {
-          images[ i ] = value[ i ][ 0 ];
-        }
-      }
-      widget.setImages( images );
-    },
-    "background" : function( widget, value ) {
-      if( value === null ) {
-        widget.setBackground( null );
-      } else {
-        widget.setBackground( rwt.util.Colors.rgbToRgbString( value ) );
-      }
-    },
-    "foreground" : function( widget, value ) {
-      if( value === null ) {
-        widget.setForeground( null );
-      } else {
-        widget.setForeground( rwt.util.Colors.rgbToRgbString( value ) );
-      }
-    },
-    "font" : function( widget, value ) {
-      if( value === null ) {
-        widget.setFont( null );
-      } else {
-        var font = rwt.html.Font.fromArray( value );
-        widget.setFont( font );
-      }
-    },
-    "cellBackgrounds" : function( widget, value ) {
-      var backgrounds = [];
-      for( var i = 0; i < value.length; i++ ) {
-        if( value[ i ] === null ) {
-          backgrounds[ i ] = null;
-        } else {
-          backgrounds[ i ] = rwt.util.Colors.rgbToRgbString( value[ i ] );
-        }
-      }
-      widget.setCellBackgrounds( backgrounds );
-    },
-    "cellForegrounds" : function( widget, value ) {
-      var foregrounds = [];
-      for( var i = 0; i < value.length; i++ ) {
-        if( value[ i ] === null ) {
-          foregrounds[ i ] = null;
-        } else {
-          foregrounds[ i ] = rwt.util.Colors.rgbToRgbString( value[ i ] );
-        }
-      }
-      widget.setCellForegrounds( foregrounds );
-    },
-    "cellFonts" : function( widget, value ) {
-      var fonts = [];
-      for( var i = 0; i < value.length; i++ ) {
-        if( value[ i ] === null ) {
-          fonts[ i ] = "";
-        } else {
-          var font = rwt.html.Font.fromArray( value[ i ] );
-          fonts[ i ] = font.toCss();
-        }
-      }
-      widget.setCellFonts( fonts );
-    },
-    "customVariant" : function( widget, value ) {
-      widget.setVariant( value );
-    }
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2009, 2013 Innoopract Informationssysteme GmbH.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.util.GridDNDFeedback", {
-  extend : rwt.qx.Object,
-
-  construct : function( tree ) {
-    this.base( arguments );
-    this._tree = tree;
-    this._feedback = null;
-    this._currentRow = null;
-    this._insertIndicator = null;
-    this._expandTimer = null;
-    this._scrollTimer = null;
-  },
-
-  destruct : function() {
-    this._renderFeedback( this._currentRow, false );
-    if( this._expandTimer != null ) {
-      this._expandTimer.dispose();
-      this._expandTimer = null;
-    }
-    if( this._scrollTimer != null ) {
-      this._scrollTimer.dispose();
-      this._scrollTimer = null;
-    }
-    this._tree = null;
-    this._feedback = null;
-    this._insertIndicator = null;
-    this._currentRow = null;
-  },
-
-  members : {
-
-    /////////
-    // Public
-
-    setFeedback : function( feedbackMap ) {
-      this._renderFeedback( this._currentRow, false );
-      this._feedback = feedbackMap;
-      this._renderFeedback( this._currentRow, true );
-    },
-
-    renderFeedback : function( target ) {
-      this._renderFeedback( this._currentRow, false );
-      this._renderFeedback( target, true );
-      this._currentRow = target;
-    },
-
-    isFeedbackNode : function( node ) {
-      var result = false;
-      if( this._insertIndicator != null && this._insertIndicator == node ) {
-        result = true;
-      }
-      return result;
-    },
-
-    ////////////
-    // Internals
-
-    _renderFeedback : function( row, value ) {
-      if( this._feedback != null && row != null ) {
-        if( this._feedback[ "FEEDBACK_SELECT" ] ) {
-          this._renderFeedbackSelect( row, value );
-        } else if( this._feedback[ "FEEDBACK_INSERT_BEFORE" ] ) {
-          this._renderFeedbackBefore( row, value );
-        } else if( this._feedback[ "FEEDBACK_INSERT_AFTER" ] ) {
-          this._renderFeedbackAfter( row, value );
-        }
-        if( this._feedback[ "FEEDBACK_EXPAND" ] ) {
-          this._renderFeedbackExpand( row, value );
-        }
-        if( this._feedback[ "FEEDBACK_SCROLL" ] ) {
-          this._renderFeedbackScroll( row, value );
-        }
-      }
-    },
-
-    _renderFeedbackSelect : function( row, value ) {
-      row.setState( "dnd_selected", value );
-      var item = this._tree._rowContainer.findItemByRow( row );
-      this._tree._rowContainer.renderItem( item );
-    },
-
-    _renderFeedbackBefore : function( row, value ) {
-      if( value ) {
-        // draw insert-indicator above row (1px heigher)
-        var location = this._getRowLocation( row );
-        location.y--;
-        this._showInsertIndicator( location.x, location.y );
-      } else {
-        this._hideInsertIndicator();
-      }
-    },
-
-    _renderFeedbackAfter : function( row, value ) {
-      if( value ) {
-        // draw insert-indicator below row (1px heigher)
-        var location = this._getRowLocation( row );
-        var height = row.getHeightValue();
-        location.y = location.y + ( height - 1 );
-        this._showInsertIndicator( location.x, location.y );
-      } else {
-        this._hideInsertIndicator();
-      }
-    },
-
-    _renderFeedbackExpand : function( row, value ) {
-      var item = this._tree._rowContainer.findItemByRow( row );
-      if( item != null && item.hasChildren() ) {
-        if( value && !item.isExpanded() ) {
-          this._startExpandTimer();
-        } else {
-          this._stopExpandTimer();
-        }
-      }
-    },
-
-    _renderFeedbackScroll : function( row, value ) {
-      if( value ) {
-        this._startScrollTimer();
-      } else {
-        this._stopScrollTimer();
-      }
-    },
-
-    _getRowLocation : function( row ) {
-      var location = { x : 0, y : 0 };
-      var node = row.getElement();
-      var treeNode = this._tree._getTargetNode();
-      while( node != treeNode ) {
-        location.x += parseInt( node.style.left || 0, 10 );
-        location.y += parseInt( node.style.top || 0, 10 );
-        node = node.parentNode;
-      }
-      return location;
-    },
-
-    /////////
-    // Helper
-
-    _showInsertIndicator : function( x, y ) {
-      if( this._insertIndicator == null ) {
-        var div = document.createElement( "div" );
-        div.style.position = "absolute";
-        div.style.borderTopStyle = "solid";
-        div.style.borderTopColor = "black";
-        div.style.borderTopWidth = "2px";
-        div.style.zIndex = 100000;
-        div.style.height = "2px";
-        this._insertIndicator = div;
-      }
-      var width = this._tree.getWidthValue() - ( x + 6 );
-      this._insertIndicator.style.left = x + "px";
-      this._insertIndicator.style.top = y + "px";
-      this._insertIndicator.style.width = width + "px";
-      var treeNode = this._tree._getTargetNode();
-      treeNode.appendChild( this._insertIndicator );
-    },
-
-    _hideInsertIndicator : function() {
-      var treeNode = this._tree._getTargetNode();
-      treeNode.removeChild( this._insertIndicator );
-    },
-
-    _startExpandTimer : function() {
-      if( this._expandTimer == null ) {
-        this._expandTimer = new rwt.client.Timer( 750 );
-        this._expandTimer.addEventListener( "interval",
-                                            this._onExpandTimer,
-                                            this );
-      }
-      this._expandTimer.setEnabled( true );
-    },
-
-    _stopExpandTimer : function() {
-      if( this._expandTimer != null ) {
-        this._expandTimer.stop();
-      }
-    },
-
-    _onExpandTimer : function( event ) {
-      this._stopExpandTimer();
-      var item = this._tree._rowContainer.findItemByRow( this._currentRow );
-      item.setExpanded( true );
-    },
-
-    _startScrollTimer : function() {
-      if( this._scrollTimer == null ) {
-        this._scrollTimer = new rwt.client.Timer( 250 );
-        this._scrollTimer.addEventListener( "interval", this._onScrollTimer, this );
-      }
-      this._scrollTimer.setEnabled( true );
-    },
-
-    _stopScrollTimer : function() {
-      if( this._scrollTimer != null ) {
-        this._scrollTimer.stop();
-      }
-    },
-
-    _getScrollDirection : function( row ) {
-      var result = 0;
-      var rowIndex = this._tree._rowContainer.indexOf( row );
-      if( rowIndex === 0 ) {
-        result = -1;
-      } else if( rowIndex >= this._tree._rowContainer.getChildrenLength() - 2 ) {
-        result = 1;
-      }
-      return result;
-    },
-
-    _onScrollTimer : function( event ) {
-      this._stopScrollTimer();
-      var offset = this._getScrollDirection( this._currentRow );
-      if( offset !== 0 ) {
-        var item = this._tree._rowContainer.findItemByRow( this._currentRow );
-        if( item != null ) {
-          var index = item.getFlatIndex();
-          var newItem = offset > 0 ? item.getNextItem() : item.getPreviousItem();
-          if( newItem != null ) {
-            var newTopIndex = this._tree._topItemIndex + offset;
-            this._tree.setTopItemIndex( newTopIndex );
-            var newRow = this._tree._rowContainer._findRowByItem( newItem );
-            var oldRow = this._currentRow;
-            var wrapper = function() {
-              this._targetUpdateCheck( oldRow, newRow );
-            };
-            rwt.client.Timer.once( wrapper, this, 1 );
-          }
-        }
-      }
-    },
-
-    _targetUpdateCheck : function( oldRow, newRow ) {
-      if( !this.isDisposed() ) {
-        // TODO [tb] : this is not a good way to check for scrolling, as the tree can theoretically
-        //             scroll without changing the row order.
-        if( newRow != this._currentRow && oldRow == this._currentRow ) {
-          var dndSupport = rwt.remote.DNDSupport.getInstance();
-          dndSupport.setCurrentTargetWidget( newRow );
-        }
-      }
-    }
-
-  }
-
-} );
-
-
-/*******************************************************************************
- * Copyright (c) 2009, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.base.GridCellToolTip", {
-  extend : rwt.widgets.base.ToolTip,
-  include : rwt.animation.VisibilityAnimationMixin,
-
-  construct : function( grid ) {
-    this.base( arguments );
-    this._grid = grid;
-    this._itemId = null;
-    this._columnIndex = -1;
-  },
-
-  members : {
-
-    _onshowtimer : function( evt ) {
-      this._stopShowTimer();
-      this._requestCellToolTipText();
-    },
-
-    setText : function( text ) {
-      if( this._isValidToolTip( text ) ) {
-        this.getAtom().setLabel( text );
-        this.setLeft( rwt.event.MouseEvent.getPageX() + this.getMousePointerOffsetX() );
-        this.setTop( rwt.event.MouseEvent.getPageY() + this.getMousePointerOffsetY() );
-        this.show();
-      }
-    },
-
-    setCell : function( itemId, columnIndex ) {
-      if( this._itemId != itemId || this._columnIndex != columnIndex ) {
-        this._itemId = itemId;
-        this._columnIndex = columnIndex;
-        this.hide();
-        if( this._isValidCell() ) {
-          this._startShowTimer();
-        } else {
-          this._stopShowTimer();
-        }
-      }
-    },
-
-    _requestCellToolTipText : function() {
-      if( this._isValidCell() ) {
-        var server = rwt.remote.Server.getInstance();
-        this._requestedCell = this._itemId + "," + this._columnIndex;
-        server.getRemoteObject( this._grid ).call( "renderToolTipText", {
-          "item" : this._itemId,
-          "column" : this._columnIndex
-        } );
-      }
-    },
-
-    _isValidCell : function() {
-      return this._itemId != null && this._columnIndex != -1;
-    },
-
-    _isValidToolTip : function( text ) {
-      var currentCell = this._itemId + "," + this._columnIndex;
-      return text && text !== "" && currentCell === this._requestedCell;
-    }
-
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.base.GridHeader", {
-
-  extend : rwt.widgets.base.Parent,
-
-  construct : function( argsMap ) {
-    this.base( arguments );
-    this.setOverflow( "hidden" );
-    this.setZIndex( 2000 );
-    this._fixedColumns = argsMap.splitContainer;
-    this._scrollWidth = 0;
-    this._scrollLeft = 0;
-    this._footer = argsMap.footer ? true : false;
-    this._baseAppearance = argsMap.appearance;
-    this._dummyColumn = this._createDummyColumn();
-    this._currentDragColumn = null;
-    this._feedbackLabel = null;
-    this._labelToColumnMap = {};
-    this._columnToLabelMap = {};
-    // TODO [tb] : Find a cleaner solution to block drag-events
-    var dragBlocker = function( event ) { event.stopPropagation(); };
-    this.addEventListener( "dragstart", dragBlocker );
-  },
-
-  destruct : function() {
-    this._dummyColumn = null;
-  },
-
-  events: {
-    "columnLayoutChanged" : "rwt.event.Event"
-  },
-
-  members : {
-
-    setScrollLeft : function( value ) {
-      this._scrollLeft = value;
-      if( this._fixedColumns && !rwt.widgets.base.Widget._inFlushGlobalQueues ) {
-        for( var i = 0; i < this._children.length; i++ ) {
-          var column = this._getColumnByLabel( this._children[ i ] );
-          if( column && column.isFixed() ) {
-            this._renderLabelLeft( this._children[ i ], column );
-          }
-        }
-        if( !rwt.remote.EventUtil.getSuspended() ) {
-          rwt.widgets.base.Widget.flushGlobalQueues();
-        }
-      }
-      // NOTE [tb] : order is important to prevent flickering in IE
-      if( this.isSeeable() ) {
-        this.base( arguments, value );
-      }
-    },
-
-    setScrollWidth : function( value ) {
-      this._scrollWidth = value;
-      if( this.getVisibility() ) {
-        this._renderDummyColumn();
-      }
-    },
-
-    _onColumnDispose : function( event ) {
-      var column = event.target;
-      var label = this._getLabelByColumn( column );
-      delete this._labelToColumnMap[ label.toHashCode() ];
-      delete this._columnToLabelMap[ column.toHashCode() ];
-      label.destroy();
-    },
-
-    renderColumns : function( columns ) {
-      for( var key in columns ) {
-        var column = columns[ key ];
-        var label = this._getLabelByColumn( column );
-        if( label ) {
-          this._renderLabel( label, column );
-        }
-      }
-      this._renderDummyColumn();
-    },
-
-    _renderLabel : function( label, column ) {
-      this._renderLabelLeft( label, column );
-      label.setWidth( column.getWidth() );
-      label.setHoverEffect( column.getMoveable() );
-      label.setVisibility( column.getVisibility() && column.getWidth() > 0 );
-      column.applyHtmlAttributes( label );
-      if( this._footer ) {
-        label.setText( column.getFooterText() );
-        label.setImage( column.getFooterImage() );
-        if( column.getFooterFont() !== null ) {
-          label.setFont( column.getFooterFont() );
-        } else {
-          label.resetFont();
-        }
-      } else {
-        if( column.getFont() !== null ) {
-          label.setFont( column.getFont() );
-        } else {
-          label.resetFont();
-        }
-        label.setText( column.getText() );
-        label.setImage( column.getImage() );
-        label.setToolTip( column.getToolTip() );
-        label.setUserData( "toolTipText", column.getUserData( "toolTipText" ) );
-        label.setSortIndicator( column.getSortDirection() );
-        label.applyObjectId( column.getObjectId() );
-        if( column.isGroup() ) {
-          label.setChevron( column.isExpanded() ? "expanded" : "collapsed" );
-        }
-        this._renderLabelY( label, column );
-      }
-      label.setCustomVariant( column.getCustomVariant() );
-      label.setZIndex( column.isFixed() ? 1e7 : 1 );
-      label.setHorizontalChildrenAlign( column.getAlignment() );
-    },
-
-    _renderLabelY : function( label, column ) {
-      if( column.isGroup() ) {
-        label.setTop( 0 );
-        label.setHeight( column.getHeight() );
-      } else if( column.getGroup() != null ) {
-        var groupHeight = column.getGroup().getHeight();
-        label.setTop( groupHeight );
-        label.setHeight( this.getHeight() - groupHeight );
-      } else {
-        label.setTop( 0 );
-        label.setHeight( "100%" );
-      }
-    },
-
-    _renderLabelLeft : function( label, column ) {
-      var offset = column.isFixed() ? this._scrollLeft : 0;
-      label.setLeft( column.getLeft() + offset );
-    },
-
-    _onDummyRendered : function() {
-      this.setScrollLeft( this._scrollLeft );
-    },
-
-    _fireUpdateEvent : function( event ) {
-      this.createDispatchEvent( "columnLayoutChanged" );
-    },
-
-    _renderDummyColumn : function() {
-      var dummyLeft = this._getDummyColumnLeft();
-      var totalWidth = Math.max( this._scrollWidth, this.getWidth() );
-      var dummyWidth = Math.max( 0, totalWidth - dummyLeft );
-      this._dummyColumn.setLeft( dummyLeft );
-      this._dummyColumn.setWidth( dummyWidth );
-    },
-
-    _getDummyColumnLeft : function() {
-      var columns = this._labelToColumnMap;
-      var result = 0;
-      for( var key in columns ) {
-        if( columns[ key ].getVisibility() ) {
-          var left = columns[ key ].getLeft() + columns[ key ].getWidth();
-          result = Math.max( result, left );
-        }
-      }
-      return result;
-    },
-
-    _onLabelSelected : function( event ) {
-      var column = this._getColumnByLabel( event.target );
-      column.handleSelectionEvent( event );
-    },
-
-    _onLabelMoveStart : function( event ) {
-      var column = this._getColumnByLabel( event.target );
-      return !this._footer && column.getMoveable();
-    },
-
-    _onLabelMoveEnd : function( event ) {
-      var column = this._getColumnByLabel( event.target );
-      column.setLeft( event.position );
-    },
-
-    _onShowDragFeedback : function( event ) {
-      var column = this._getColumnByLabel( event.target );
-      var widget = this._getDragFeedback( column );
-      widget.setLeft( event.position );
-    },
-
-    _onHideDragFeedback : function( event ) {
-      var label = event.target;
-      var column = this._getColumnByLabel( label );
-      var widget = this._getDragFeedback( column );
-      var left = label.getLeft();
-      if( event.snap ) {
-        rwt.animation.AnimationUtil.snapTo( widget, 250, left, label.getTop(), true );
-      } else {
-        widget.setDisplay( false );
-      }
-      this._currentDragColumn = null;
-    },
-
-    _onLabelResizeStart : function( event ) {
-      var column = this._getColumnByLabel( event.target );
-      return !this._footer && column.getResizeable();
-    },
-
-    _onLabelResizeEnd : function( event ) {
-      var column = this._getColumnByLabel( event.target );
-      column.setWidth( event.width );
-    },
-
-    _getColumnByLabel : function( label ) {
-      return this._labelToColumnMap[ label.toHashCode() ];
-    },
-
-    _getLabelByColumn : function( column ) {
-      var result = this._columnToLabelMap[ column.toHashCode() ];
-      if( !result ) {
-        if( column.getVisibility() ) {
-          result = this._createLabel( column );
-        } else {
-          result = null;
-        }
-      }
-      return result;
-    },
-
-    _getDragFeedback : function( column ) {
-      if( this._feedbackLabel === null ) {
-        this._feedbackLabel = this._createFeedbackColumn();
-      }
-      if( this._currentDragColumn !== column ) {
-        this._renderLabelY( this._feedbackLabel, column );
-        this._feedbackLabel.setWidth( column.getWidth() );
-        this._feedbackLabel.setCustomVariant( column.getCustomVariant() );
-        this._feedbackLabel.setText( column.getText() );
-        this._feedbackLabel.setImage( column.getImage() );
-        this._feedbackLabel.setSortIndicator( column.getSortDirection() );
-        this._feedbackLabel.setHorizontalChildrenAlign( column.getAlignment() );
-        this._feedbackLabel.setDisplay( true );
-        this._feedbackLabel.dispatchSimpleEvent( "cancelAnimations" );
-        this._currentDragColumn = column;
-      }
-      return this._feedbackLabel;
-    },
-
-    _createLabel : function( column ) {
-      var label = new rwt.widgets.base.GridColumnLabel( this._baseAppearance );
-      if( this._footer ) {
-        label.addState( "footer" );
-      } else if( column.getResizeable() ) {
-        label.setResizeCursor( "col-resize" );
-      }
-      if( column.isGroup() ) {
-        label.addState( "group" );
-      }
-      label.setTop( 0 );
-      label.setHeight( "100%" );
-      this.add( label );
-      this._labelToColumnMap[ label.toHashCode() ] = column;
-      this._columnToLabelMap[ column.toHashCode() ] = label;
-      label.addEventListener( "selected", this._onLabelSelected, this );
-      label.addEventListener( "moveStart", this._onLabelMoveStart, this );
-      label.addEventListener( "showDragFeedback", this._onShowDragFeedback, this );
-      label.addEventListener( "hideDragFeedback", this._onHideDragFeedback, this );
-      label.addEventListener( "moveEnd", this._onLabelMoveEnd, this );
-      label.addEventListener( "resizeStart", this._onLabelResizeStart, this );
-      label.addEventListener( "resizeEnd", this._onLabelResizeEnd, this );
-      column.addEventListener( "dispose", this._onColumnDispose, this );
-      return label;
-    },
-
-    _createDummyColumn : function() {
-      var dummyColumn = new rwt.widgets.base.GridColumnLabel( this._baseAppearance );
-      if( this._footer ) {
-        dummyColumn.addState( "footer" );
-      }
-      dummyColumn.setTop( 0 );
-      dummyColumn.setHeight( "100%" );
-      dummyColumn.addState( "dummy" );
-      dummyColumn.addEventListener( "flush", this._onDummyRendered, this );
-      dummyColumn.addEventListener( "appear", this._onDummyRendered, this );
-      dummyColumn.setEnabled( false );
-      this.add( dummyColumn );
-      return dummyColumn;
-    },
-
-    _createFeedbackColumn : function() {
-      var feedback = new rwt.widgets.base.GridColumnLabel( this._baseAppearance );
-      feedback.addState( "moving" );
-      feedback.setTop( 0 );
-      feedback.setHeight( "100%" );
-      feedback.setEnabled( false );
-      feedback.setZIndex( 1e8 );
-      feedback.addState( "mouseover" ); // to make the label more visible, not ideal
-      this.add( feedback );
-      return feedback;
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2007, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.GridColumn", {
-
-  extend : rwt.qx.Target,
-
-  construct : function( grid, isGroup ) {
-    this.base( arguments );
-    this._grid = grid;
-    this._isGroup = isGroup ? true : false;
-    this._index = 0;
-    this._resizable = isGroup ? false : true;
-    this._moveable = false;
-    this._alignment = "left";
-    this._group = null;
-    this._left = 0;
-    this._height = 0;
-    this._visibility = true;
-    this._expanded = true;
-    this._hasSelectionListener = false;
-    this._hasExpandListener = false;
-    this._hasCollapseListener = false;
-    this._width = 0;
-    this._toolTip = null;
-    this._customVariant = null;
-    this._objectId = null;
-    this._text = "";
-    this._font = null;
-    this._image = null;
-    this._footerText = "";
-    this._footerFont = null;
-    this._footerImage = null;
-    this._sortDirection = null;
-    this._check = false;
-    this._grid.addColumn( this );
-  },
-
-  destruct : function() {
-    this._grid.removeColumn( this );
-    this.dispatchSimpleEvent( "dispose", { target : this } );
-  },
-
-  members : {
-
-    setLeft : function( value ) {
-      if( rwt.remote.EventUtil.getSuspended() ) {
-        this._left = value;
-        this._update();
-      } else {
-        this._sendMove( value );
-      }
-    },
-
-    getLeft : function() {
-      return this._left;
-    },
-
-    setWidth : function( value ) {
-      if( rwt.remote.EventUtil.getSuspended() ) {
-        this._width = value;
-        this._update();
-      } else {
-        this._sendResize( value );
-      }
-    },
-
-    getWidth : function() {
-      return this._width;
-    },
-
-    setHeight : function( value ) {
-      this._height = value;
-      this._update();
-    },
-
-    getHeight : function() {
-      return this._height;
-    },
-
-    setVisibility : function( value ) {
-      this._visibility = value;
-      this._update();
-    },
-
-    getVisibility : function() {
-      return this._visibility;
-    },
-
-    setExpanded : function( value ) {
-      this._expanded = value;
-      this._update();
-    },
-
-    isExpanded : function() {
-      return this._expanded;
-    },
-
-    setGroup : function( value ) {
-      this._group = value;
-    },
-
-    getGroup : function() {
-      return this._group;
-    },
-
-    setToolTip : function( value ) {
-      this._toolTip = value;
-      this._update();
-    },
-
-    getToolTip : function() {
-      return this._toolTip;
-    },
-
-    setCustomVariant : function( value ) {
-      this._customVariant = value;
-      this._update();
-    },
-
-    getCustomVariant : function( value ) {
-      return this._customVariant;
-    },
-
-    setText : function( value ) {
-      this._text = value;
-      this._update();
-    },
-
-    getText : function( value ) {
-      return this._text;
-    },
-
-    setImage : function( value ) {
-      this._image = value;
-      this._update();
-    },
-
-    getImage : function( ) {
-      return this._image;
-    },
-
-    setFont : function( value ) {
-      this._font = value ? rwt.html.Font.fromArray( value ) : null;
-      this._update();
-    },
-
-    getFont : function() {
-      return this._font;
-    },
-
-    setFooterText : function( value ) {
-      this._footerText = value;
-      this._update();
-    },
-
-    getFooterText : function( value ) {
-      return this._footerText;
-    },
-
-    setFooterImage : function( value ) {
-      this._footerImage = value;
-      this._update();
-    },
-
-    getFooterImage : function( ) {
-      return this._footerImage;
-    },
-
-    setFooterFont : function( value ) {
-      var wm = rwt.remote.WidgetManager.getInstance();
-      this._footerFont = value ? rwt.html.Font.fromArray( value ) : null;
-      this._update();
-    },
-
-    getFooterFont : function() {
-      return this._footerFont;
-    },
-
-    setIndex : function( value ) {
-      this._index = value;
-      this._update();
-    },
-
-    getIndex : function() {
-      return this._index;
-    },
-
-    setSortDirection : function( value ) {
-      this._sortDirection = value;
-      this._update();
-    },
-
-    getSortDirection : function( value ) {
-      return this._sortDirection;
-    },
-
-    setResizable : function( value ) {
-      this._resizable = value;
-    },
-
-    getResizeable : function() {
-      return this._resizable;
-    },
-
-    setMoveable : function( value ) {
-      this._moveable = value;
-    },
-
-    getMoveable : function() {
-      return this._moveable;
-    },
-
-    setCheck : function( value ) {
-      this._grid.setCellCheck( this._index, value );
-      this._check = value;
-    },
-
-    getCheck : function() {
-      return this._check;
-    },
-
-    setHasSelectionListener : function( value ) {
-      this._hasSelectionListener = value;
-    },
-
-    getHasSelectionListener : function() {
-      return this._hasSelectionListener;
-    },
-
-    setHasExpandListener : function( value ) {
-      this._hasExpandListener = value;
-    },
-
-    getHasExpandListener : function() {
-      return this._hasExpandListener;
-    },
-
-    setHasCollapseListener : function( value ) {
-      this._hasCollapseListener = value;
-    },
-
-    getHasCollapseListener : function() {
-      return this._hasCollapseListener;
-    },
-
-    handleSelectionEvent : function( event ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        var isTreeEvent = this._isGroup && event.chevron;
-        if( this._hasSelectionListener || isTreeEvent ) {
-          if( isTreeEvent ) {
-            var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( this );
-            remoteObject.set( "expanded", !this._expanded );
-            if(    ( this._hasCollapseListener && this._expanded )
-                || ( this._hasExpandListener && !this._expanded )  )
-            {
-              remoteObject.notify( this._expanded ? "Collapse" : "Expand" );
-            }
-          } else {
-            rwt.remote.EventUtil.notifySelected( this );
-          }
-        }
-      }
-    },
-
-    applyObjectId : function( id ) {
-      this._objectId = id;
-      this._update();
-    },
-
-    getObjectId : function() {
-      return this._objectId;
-    },
-
-    setAlignment : function( value ) {
-      this._grid.setAlignment( this._index, value );
-      this._alignment = value;
-      this._update();
-    },
-
-    getAlignment : function() {
-      return this._alignment;
-    },
-
-    setFixed : function( value ) {
-      this._fixed = value;
-      this._update();
-    },
-
-    isFixed : function() {
-      return this._fixed;
-    },
-
-    isGroup : function() {
-      return this._isGroup;
-    },
-
-    /**
-     * Implemented for UI testing. Implementation mostly identical to Widget.js
-     */
-    setHtmlAttribute : function( propName, value ) {
-      if( !this._htmlAttributes ) {
-        this._htmlAttributes = {};
-      }
-      this._htmlAttributes[ propName ] = value;
-      this._update();
-      return true;
-    },
-
-    applyHtmlAttributes : function( widget ) {
-      var attributes = this._htmlAttributes;
-      if( attributes ) {
-        var propName;
-        for( propName in attributes ) {
-          widget.setHtmlAttribute( propName, attributes[ propName ] );
-        }
-      }
-    },
-
-    _update : function() {
-      this.dispatchSimpleEvent( "update" );
-    },
-
-    _sendResize : function( width ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        var serverColumn = rwt.remote.Server.getInstance().getRemoteObject( this );
-        serverColumn.call( "resize", {
-          "width" : width
-        } );
-      }
-    },
-
-    _sendMove : function( left ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        var serverColumn = rwt.remote.Server.getInstance().getRemoteObject( this );
-        serverColumn.call( "move", {
-          "left" : left
-        } );
-      }
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2007, 2012 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.base.GridColumnLabel", {
-  extend : rwt.widgets.base.MultiCellWidget,
-
-  construct : function( baseAppearance ) {
-    this.base( arguments, [ "image", "label", "image" ] );
-    this._resizeStartX = 0;
-    this._inResize = false;
-    this._wasResizeOrMoveEvent = false;
-    this._feedbackVisible = false;
-    this._inMove = false;
-    this._hoverEffect = false;
-    this._offsetX = 0;
-    this._initialLeft = 0;
-    this._chevron = null;
-    this.setAppearance( baseAppearance + "-column" );
-    this._resizeCursor = null;
-    this.setHorizontalChildrenAlign( "left" );
-    this.setOverflow( "hidden" );
-    this.addEventListener( "elementOver", this._onElementOver, this );
-    this.addEventListener( "elementOut", this._onElementOut, this );
-    this.addEventListener( "mouseover", this._onMouseOver, this );
-    this.addEventListener( "mousemove", this._onMouseMove, this );
-    this.addEventListener( "mouseout", this._onMouseOut, this );
-    this.addEventListener( "mousedown", this._onMouseDown, this );
-    this.addEventListener( "mouseup", this._onMouseUp, this );
-    this.addEventListener( "click", this._onClick, this );
-  },
-
-  members : {
-
-    setLeft : function( value ) {
-      this.base( arguments, value );
-      this._hideDragFeedback( true );
-    },
-
-    setText : function( value ) {
-      var EncodingUtil = rwt.util.Encoding;
-      var text = EncodingUtil.escapeText( value, false );
-      text = EncodingUtil.replaceNewLines( text, "<br/>" );
-      this.setCellContent( 1, text );
-    },
-
-    setImage : function( value ) {
-      if( value === null ) {
-        this.setCellContent( 0, null );
-        this.setCellDimension( 0, 0, 0 );
-      } else {
-        this.setCellContent( 0, value[ 0 ] );
-        this.setCellDimension( 0, value[ 1 ], value[ 2 ] );
-      }
-    },
-
-    setHoverEffect : function( value ) {
-      this._hoverEffect = value;
-    },
-
-    setResizeCursor : function( value ) {
-      this._resizeCursor = value;
-    },
-
-    setSortIndicator : function( value ) {
-      if( value ) {
-        var manager = rwt.theme.AppearanceManager.getInstance();
-        var states = {};
-        states[ value ] = true;
-        var styleMap = manager.styleFrom( this.getAppearance() + "-sort-indicator", states );
-        var image = styleMap.backgroundImage;
-        this.setCellContent( 2, image[ 0 ] );
-        this.setCellDimension( 2, image[ 1 ], image[ 2 ] );
-      } else {
-        this.setCellContent( 2, null );
-        this.setCellDimension( 2, 0, 0 );
-      }
-    },
-
-    setChevron : function( value ) {
-      this._chevron = value;
-      this._updateChevronImage( false );
-    },
-
-    _onElementOver : function( event ) {
-      if( this._chevron && event.getDomTarget() === this.getCellNode( 2 ) ) {
-        this._updateChevronImage( true );
-      }
-    },
-
-    _onElementOut : function( event ) {
-      if( this._chevron && event.getDomTarget() === this.getCellNode( 2 ) ) {
-        this._updateChevronImage( false );
-      }
-    },
-
-    _updateChevronImage : function( hover ) {
-      if( this._chevron ) {
-        this.setFlexibleCell( 1 );
-        var manager = rwt.theme.AppearanceManager.getInstance();
-        var states = {};
-        states[ this._chevron ] = true;
-        if( hover ) {
-          states[ "mouseover" ] = true;
-        }
-        var styleMap = manager.styleFrom( this.getAppearance() + "-chevron", states );
-        var image = styleMap.backgroundImage;
-        this.setCellContent( 2, image[ 0 ] );
-        this.setCellDimension( 2, image[ 1 ], image[ 2 ] );
-      } else {
-        this.setCellContent( 2, null );
-        this.setCellDimension( 2, 0, 0 );
-      }
-    },
-
-     // TODO [tb] : right alignment should be done in MCW
-     _limitCellWidth : function( cell, preferredCellWidth ) {
-      var inner = this.getInnerWidth();
-      var contentWidth = this._getContentWidth( "skipFlexible" );
-      var maxCellWidth = Math.max( 0, inner - contentWidth );
-      return maxCellWidth;
-    },
-
-    cellIsDisplayable : function( cell ) {
-      var result = this.base( arguments, cell );
-      return result || cell == 2;
-    },
-
-    _onMouseOver : function( evt ) {
-      if( this._hoverEffect && !this._inMove && !this._inResize ) {
-        this.addState( "mouseover" );
-      }
-    },
-
-    _onMouseDown : function( evt ) {
-      if( !this._inMove && !this._inResize && evt.getButton() === "left" ) {
-        if( this._isResizeLocation( evt.getPageX() ) && this._allowResize() ) {
-          this._inResize = true;
-          var position = this.getLeft() + this.getWidth();
-          this.dispatchSimpleEvent( "showResizeLine", { "position" : position }, true );
-          this._resizeStartX = evt.getPageX();
-          this.setCapture( true );
-          evt.stopPropagation();
-          evt.preventDefault();
-          rwt.widgets.util.WidgetUtil._fakeMouseEvent( this, "mouseout" );
-        } else if( this._allowMove() ) {
-          this._inMove = true;
-          this.setCapture( true );
-          this._offsetX = evt.getPageX() - this.getLeft();
-          this._initialLeft = evt.getPageX();
-          evt.stopPropagation();
-          evt.preventDefault();
-          rwt.widgets.util.WidgetUtil._fakeMouseEvent( this, "mouseout" );
-        }
-      }
-    },
-
-    _onMouseMove : function( evt ) {
-      if( this._inResize ) {
-        var position = this.getLeft() + this._getResizeWidth( evt.getPageX() );
-        // min column width is 5 px
-        if( position < this.getLeft() + 5 ) {
-          position = this.getLeft() + 5;
-        }
-        this.dispatchSimpleEvent( "showResizeLine", { "position" : position }, true );
-      } else if( this._inMove ) {
-        this.addState( "mouseover" );
-        var left = evt.getPageX() - this._offsetX;
-        this.dispatchSimpleEvent( "showDragFeedback", { "target" : this, "position" : left } );
-        this._feedbackVisible = true;
-      } else {
-        if( this._isResizeLocation( evt.getPageX() ) ) {
-          this.getTopLevelWidget().setGlobalCursor( this._resizeCursor );
-        } else {
-          this.getTopLevelWidget().setGlobalCursor( null );
-        }
-      }
-      evt.stopPropagation();
-      evt.preventDefault();
-    },
-
-    _onMouseUp : function( evt ) {
-      var widgetUtil = rwt.widgets.util.WidgetUtil;
-      if( this._inResize ) {
-        this.dispatchSimpleEvent( "hideResizeLine", null, true ); // bubbles: handled by grid
-        this.getTopLevelWidget().setGlobalCursor( null );
-        this.setCapture( false );
-        var newWidth = this._getResizeWidth( evt.getPageX() );
-        this.dispatchSimpleEvent( "resizeEnd", {
-          "target" : this,
-          "width" : newWidth
-        } );
-        this._inResize = false;
-        this._wasResizeOrMoveEvent = true;
-        evt.stopPropagation();
-        evt.preventDefault();
-        widgetUtil._fakeMouseEvent( evt.getTarget(), "mouseover" );
-      } else if( this._inMove ) {
-        this._inMove = false;
-        this.setCapture( false );
-        this.removeState( "mouseover" );
-        if( Math.abs( evt.getPageX() - this._initialLeft ) > 1 ) {
-          this._wasResizeOrMoveEvent = true;
-          // Fix for bugzilla 306842
-          this.dispatchSimpleEvent( "moveEnd", {
-            "target" : this,
-            "position" : evt.getPageX() - this._offsetX
-          } );
-        } else {
-          this._hideDragFeedback( false );
-        }
-        evt.stopPropagation();
-        evt.preventDefault();
-        widgetUtil._fakeMouseEvent( evt.getTarget(), "mouseover" );
-      }
-    },
-
-    _onClick : function( evt ) {
-       // Don't send selection event when the onClick was caused by resizing
-      if( !this._wasResizeOrMoveEvent ) {
-        var data = { "target" : this };
-        if( this._chevron ) {
-          data.chevron = evt.getDomTarget() === this.getCellNode( 2 );
-          if( data.chevron ) {
-            this.setChevron( "loading" );
-          }
-        }
-        this.dispatchSimpleEvent( "selected", data );
-      }
-      this._wasResizeOrMoveEvent = false;
-    },
-
-    _onMouseOut : function( evt ) {
-      if( !this._inMove ) {
-        this.removeState( "mouseover" );
-      }
-      if( !this._inResize ) {
-        this.getTopLevelWidget().setGlobalCursor( null );
-        evt.stopPropagation();
-        evt.preventDefault();
-      }
-    },
-
-    _allowResize : function() {
-      return this.dispatchSimpleEvent( "resizeStart", { "target" : this } );
-    },
-
-    _allowMove : function() {
-      return this.dispatchSimpleEvent( "moveStart", { "target" : this } );
-    },
-
-    _hideDragFeedback : function( snap ) {
-      if( this._feedbackVisible ) {
-        this.dispatchSimpleEvent( "hideDragFeedback", {
-          "target" : this,
-          "snap" : snap
-        } );
-        this._feedbackVisible = false;
-      }
-    },
-
-    /** Returns whether the given pageX is within the right 5 pixels of this
-     * column */
-    _isResizeLocation : function( pageX ) {
-      var result = false;
-      var columnRight = rwt.html.Location.getLeft( this.getElement() ) + this.getWidth();
-      if( pageX >= columnRight - 5 && pageX <= columnRight ) {
-        result = true;
-      }
-      return result;
-    },
-
-    /** Returns the width of the column that is currently being resized */
-    _getResizeWidth : function( pageX ) {
-      var delta = this._resizeStartX - pageX;
-      return this.getWidth() - delta;
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.GridColumn", {
-
-  factory : function( properties ) {
-    var result;
-    rwt.remote.HandlerUtil.callWithTarget( properties.parent, function( parent ) {
-      result = new rwt.widgets.GridColumn( parent );
-      rwt.remote.HandlerUtil.addDestroyableChild( parent, result );
-    } );
-    return result;
-  },
-
-  destructor : function( column ) {
-    rwt.remote.HandlerUtil.removeDestroyableChild( column._grid, column );
-    column.dispose();
-  },
-
-  properties : [
-    // Always set column index first
-    "index",
-    "left",
-    "width",
-    "text",
-    "image",
-    "font",
-    "footerText",
-    "footerImage",
-    "footerFont",
-    "toolTip",
-    "resizable",
-    "moveable",
-    "alignment",
-    "fixed",
-    "group",
-    "customVariant",
-    "visibility",
-    "check"
-  ],
-
-  propertyHandler : {
-    "toolTip" : rwt.remote.HandlerUtil.getControlPropertyHandler( "toolTip" ),
-    "group" : function( widget, value ) {
-      rwt.remote.HandlerUtil.callWithTarget( value, function( group ) {
-        widget.setGroup( group );
-      } );
-    }
-  },
-
-  listeners : [
-    "Selection"
-  ]
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.GridColumnGroup", {
-
-  factory : function( properties ) {
-    var result;
-    rwt.remote.HandlerUtil.callWithTarget( properties.parent, function( parent ) {
-      result = new rwt.widgets.GridColumn( parent, true );
-      rwt.remote.HandlerUtil.addDestroyableChild( parent, result );
-    } );
-    return result;
-  },
-
-  destructor : function( column ) {
-    rwt.remote.HandlerUtil.removeDestroyableChild( column._grid, column );
-    column.dispose();
-  },
-
-  properties : [
-    "left",
-    "width",
-    "height",
-    "text",
-    "image",
-    "font",
-    "expanded",
-    "visibility",
-    "customVariant"
-  ],
-
-  listeners : [
-    "Expand",
-    "Collapse"
-  ]
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2007, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.Browser", {
-
-  extend : rwt.widgets.base.Iframe,
-
-  construct : function() {
-    this.base( arguments );
-    this._hasProgressListener = false;
-    this._browserFunctions = {};
-    // TODO [rh] preliminary workaround to make Browser accessible by tab
-    this.setTabIndex( 1 );
-    this.setAppearance( "browser" );
-    this.addEventListener( "create", this._onCreate, this );
-  },
-
-  properties : {
-
-    asynchronousResult : {
-      check : "Boolean",
-      init : false
-    },
-
-    executedFunctionPending : {
-      check : "Boolean",
-      init : false
-    },
-
-    executedFunctionResult : {
-      nullable : true,
-      init : null
-    },
-
-    executedFunctionError : {
-      check : "String",
-      nullable : true,
-      init : null
-    }
-
-  },
-
-  statics : {
-
-    getDomain : function( url ) {
-      var domain = null;
-      if( url !== null ) {
-        var lowerCaseUrl = url.toLowerCase();
-        // Accepted limitation: In case of other protocls this detection fails.
-        if(    lowerCaseUrl.indexOf( "http://" ) === 0
-            || lowerCaseUrl.indexOf( "https://" ) === 0
-            || lowerCaseUrl.indexOf( "ftp://" ) === 0
-            || lowerCaseUrl.indexOf( "ftps://" ) === 0
-        ) {
-          domain = lowerCaseUrl.slice( lowerCaseUrl.indexOf( "://" ) + 3 );
-          var pathStart = domain.indexOf( "/" );
-          if( pathStart !== -1 ) {
-            domain = domain.slice( 0, pathStart );
-          }
-        }
-      }
-      return domain;
-    }
-
-  },
-
-  members : {
-
-    syncSource : function() {
-      if( this.isCreated() ) {
-        this._syncSource();
-      }
-    },
-
-    // overwritten
-    _applySource : function( value, oldValue ) {
-      // server syncs manually
-    },
-
-    // overwritten
-    _applyEnabled : function( value, oldValue ) {
-      this.base( arguments, value, oldValue );
-      if( value ) {
-        this.release();
-      } else {
-        this.block();
-      }
-    },
-
-    // overwritten
-    release : function() {
-      if( this.getEnabled() ) {
-        this.base( arguments );
-      }
-    },
-
-    _onload : function( evt ) {
-      // syncSource in destroy may cause unwanted load event when widget is about to be disposed
-      if( !this._isInGlobalDisposeQueue ) {
-        this.base( arguments, evt );
-        if( this._isContentAccessible() ) {
-          this._attachBrowserFunctions();
-        }
-        this._sendProgressEvent();
-      }
-    },
-
-    _onCreate : function( evt ) {
-      if( !this.getEnabled() ) {
-        this.block();
-      }
-    },
-
-    _sendProgressEvent : function() {
-      if( this._hasProgressListener ) {
-        rwt.remote.Server.getInstance().getRemoteObject( this ).notify( "Progress" );
-      }
-    },
-
-    setHasProgressListener : function( value ) {
-      this._hasProgressListener = value;
-    },
-
-    execute : function( script ) {
-      // NOTE [tb] : For some very strange reason the access check must not be done directly
-      // before the try-catch for the ipad to recognize the error is may throw.
-      this._checkIframeAccess();
-      var success = true;
-      var result = null;
-      try {
-        result = this._parseEvalResult( this._eval( script ) );
-      } catch( ex ) {
-        success = false;
-      }
-      var req = rwt.remote.Server.getInstance();
-      var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( this );
-      remoteObject.set( "executeResult", success );
-      remoteObject.set( "evaluateResult", result );
-      if( this.getExecutedFunctionPending() ) {
-        req.sendImmediate( false );
-      } else {
-        req.send();
-      }
-    },
-
-    _srcInLocalDomain : function() {
-      var src = this.getSource();
-      var statics = rwt.widgets.Browser;
-      var localDomain = statics.getDomain( document.URL );
-      var srcDomain = statics.getDomain( src );
-      var isSameDomain = localDomain === srcDomain;
-      var isRelative = srcDomain === null;
-      return isRelative || isSameDomain;
-    },
-
-    _isContentAccessible : function() {
-      var accessible;
-      try {
-        var ignored = this.getContentDocument().body.URL;
-        accessible = true;
-      } catch( ex ) {
-        accessible = false;
-      }
-      return accessible && this._isLoaded;
-    },
-
-    _checkIframeAccess : function( functionName ) {
-      if( !this._isContentAccessible() ) {
-        var isSameDomain = this._srcInLocalDomain();
-        if( !isSameDomain ) {
-          this._throwSecurityException( false );
-        }
-        if( this._isLoaded && isSameDomain ) {
-          // not accessible when it appears it should be
-          // => user navigated to external site.
-          this._throwSecurityException( true );
-        }
-      }
-    },
-
-    _throwSecurityException : function( domainUnkown ) {
-      var statics = rwt.widgets.Browser;
-      var localDomain = statics.getDomain( document.URL );
-      var srcDomain = domainUnkown ? null : statics.getDomain( this.getSource() );
-      var msg = "SecurityRestriction:\nBrowser-Widget can not access ";
-      msg +=   srcDomain !== null
-             ? "\"" + srcDomain + "\""
-             : "unkown domain";
-      msg += " from \"" + localDomain + "\".";
-      throw new Error( msg );
-    },
-
-    _eval : function( script ) {
-      var win = this.getContentWindow();
-      if( !win[ "eval" ] && win[ "execScript" ] ) {
-        // Workaround for IE bug, see: http://www.thismuchiknow.co.uk/?p=25
-        win.execScript( "null;", "JScript" );
-      }
-      return win[ "eval" ]( script );
-    },
-
-    _parseEvalResult : function( value ) {
-      var result = null;
-      var win = this.getContentWindow();
-      // NOTE: This mimics the behavior of the evaluate method in SWT:
-      if( value instanceof win.Function || value instanceof Function ) {
-        result = this.toJSON( [ [] ] );
-      } else if( value instanceof win.Array || value instanceof Array ) {
-        result = this.toJSON( [ value ] );
-      } else if( typeof value !== "object" && typeof value !== "function" ) {
-        // above: some browser say regular expressions of the type "function"
-        result = this.toJSON( [ value ] );
-      }
-      return result;
-    },
-
-    createFunction : function( name ) {
-      this._browserFunctions[ name ] = true;
-      this._checkIframeAccess();
-      if( this.isLoaded() ) {
-        try {
-          this._createFunctionImpl( name );
-          this._createFunctionWrapper( name );
-        } catch( e ) {
-          var msg = "Unable to create function: \"" + name + "\".\n" + e;
-          if( rwt.remote.EventUtil.getSuspended() ) {
-            throw msg;
-          } else {
-            rwt.runtime.ErrorHandler.processJavaScriptError( msg );
-          }
-        }
-      }
-    },
-
-    _attachBrowserFunctions : function() {
-      // NOTE: In case the user navigates to a page outside the domain,
-      // this function will not be triggered due to the lack of a loading event.
-      // That also means that this is the only case were creating a browser
-      // function in a cross-domain scenario silently fails.
-      for( var name in this._browserFunctions ) {
-        this.createFunction( name );
-      }
-    },
-
-    _createFunctionImpl : function( name ) {
-      var win = this.getContentWindow();
-      var server = rwt.remote.Server.getInstance();
-      var remoteObject = server.getRemoteObject( this );
-      var that = this;
-      win[ name + "_impl" ] = function() {
-        var result = {};
-        try {
-          if( that.getExecutedFunctionPending() ) {
-            result.error = "Unable to execute browser function \""
-              + name
-              + "\". Another browser function is still pending.";
-          } else {
-            var args = that.toJSON( arguments );
-            remoteObject.set( "executeFunction", name );
-            remoteObject.set( "executeArguments", args );
-            that.setExecutedFunctionResult( null );
-            that.setExecutedFunctionError( null );
-            that.setExecutedFunctionPending( true );
-            that.setAsynchronousResult( false );
-            server.sendImmediate( false );
-            if( that.getExecutedFunctionPending() ) {
-              that.setAsynchronousResult( true );
-            } else {
-              var error = that.getExecutedFunctionError();
-              if( error != null ) {
-                result.error = error;
-              } else {
-                result.result = that.getExecutedFunctionResult();
-              }
-            }
-          }
-        } catch( ex ) {
-          rwt.runtime.ErrorHandler.processJavaScriptError( ex );
-        }
-        return result;
-      };
-    },
-
-    // [if] This wrapper function is a workaround for bug 332313
-    _createFunctionWrapper : function( name ) {
-      var script = [];
-      script.push( "function " + name + "(){" );
-      script.push( "  var result = " + name + "_impl.apply( window, arguments );" );
-      script.push( "  if( result.error ) {" );
-      script.push( "    throw new Error( result.error );" );
-      script.push( "  }" );
-      script.push( "  return result.result;" );
-      script.push( "}");
-      this._eval( script.join( "" ) );
-    },
-
-    destroyFunction : rwt.util.Variant.select( "qx.client", {
-      "default" : function( name ) {
-        delete this._browserFunctions[ name ];
-        var win = this.getContentWindow();
-        if( win != null ) {
-          try {
-            var script = [];
-            script.push( "delete window." +  name + ";" );
-            script.push( "delete window." +  name + "_impl;" );
-            this._eval( script.join( "" ) );
-          } catch( e ) {
-            throw new Error( "Unable to destroy function: " + name + " error: " + e );
-          }
-        }
-      },
-      "mshtml" : function( name ) {
-        delete this._browserFunctions[ name ];
-        var win = this.getContentWindow();
-        if( win != null ) {
-          try {
-            var script = [];
-            script.push( "window." + name + " = undefined;" );
-            script.push( "window." + name + "_impl = undefined;" );
-            this._eval( script.join( "" ) );
-          } catch( e ) {
-            throw new Error( "Unable to destroy function: " + name + " error: " + e );
-          }
-        }
-      }
-    } ),
-
-    setFunctionResult : function( name, result, error ) {
-      this.setExecutedFunctionResult( result );
-      this.setExecutedFunctionError( error );
-      this.setExecutedFunctionPending( false );
-    },
-
-    toJSON : function( object ) {
-      var result;
-      var type = typeof object;
-      if( object === null ) {
-        result = object;
-      } else if( type === "object" ) {
-        result = [];
-        for( var i = 0; i < object.length; i++ ) {
-          result.push( this.toJSON( object[ i ] ) );
-        }
-      } else if( type === "function" ) {
-        result = String( object );
-      } else {
-        result = object;
-      }
-      return result;
-    },
-
-    destroy : function() {
-      this.base( arguments );
-      // Needed for IE dipose fix in Iframe.js because _applySource is overwritten in Browser.js
-      this.syncSource();
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.Browser", {
-
-  factory : function( properties ) {
-    var result = new rwt.widgets.Browser();
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "url",
-    "functionResult"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    "url" : function( widget, value ) {
-      widget.setSource( value );
-      widget.syncSource();
-    },
-    "functionResult" : function( widget, value ) {
-      widget.setFunctionResult( value[ 0 ], value[ 1 ], value[ 2 ] );
-    }
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [
-    "Progress"
-  ] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} ),
-
-  methods : [
-    "evaluate",
-    "destroyFunctions",
-    "createFunctions"
-  ],
-
-  methodHandler : {
-    "evaluate" : function( widget, properties ) {
-      widget.execute( properties.script );
-    },
-    "createFunctions" : function( widget, properties ) {
-      var functions = properties.functions;
-      for( var i = 0; i < functions.length; i++ ) {
-        widget.createFunction( functions[ i ] );
-      }
-    },
-    "destroyFunctions" : function( widget, properties ) {
-      var functions = properties.functions;
-      for( var i = 0; i < functions.length; i++ ) {
-        widget.destroyFunction( functions[ i ] );
-      }
-    }
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2007, 2012 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.ExternalBrowser", {
-
-  type : "singleton",
-
-  extend : rwt.qx.Object,
-
-  members : {
-    // maps id's (aka window names) to window instances
-    // key = id, value = window object
-    _map : {},
-
-    open : function( id, url, features ) {
-      var escapedId = this._escapeId( id );
-      var win = window.open( url, escapedId, features, true );
-      if( win != null ) {
-        win.focus();
-        this._map[ escapedId ] = win;
-      }
-    },
-
-    close : function( id ) {
-      var escapedId = this._escapeId( id );
-      var win = this._map[ escapedId ];
-      if( win != null ) {
-        win.close();
-      }
-      delete this._map[ escapedId ];
-    },
-
-    _escapeId : function( id ) {
-      var result = id;
-      result = result.replace( /_/g, "_0" );
-      // IE does not accept '-' in popup-window names
-      result = result.replace( /-/g, "_1" );
-      result = result.replace( /\./g, "_" );
-      // IE does not accept blanks in popup-window names
-      result = result.replace( / /g, "__" );
-      return result;
-    }
-  }
-} );
-
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.ExternalBrowser", {
-
-  factory : function( properties ) {
-    return rwt.widgets.ExternalBrowser.getInstance();
-  },
-
-  destructor : rwt.util.Functions.returnTrue,
-
-  methods : [
-    "open",
-    "close"
-  ],
-
-  methodHandler : {
-    "open" : function( widget, args ) {
-      var styleMap = rwt.remote.HandlerUtil.createStyleMap( args.style );
-      var features = "dependent=1,scrollbars=1,resizable=1,";
-      var status = "status=".concat( styleMap.STATUS ? 1 : 0, "," );
-      var location = "location=".concat( styleMap.LOCATION_BAR ? 1 : 0, "," );
-      var toolbar = "toolbar=".concat( styleMap.NAVIGATION_BAR ? 1 : 0, "," );
-      var menubar = "menubar=".concat( styleMap.NAVIGATION_BAR ? 1 : 0 );
-      features = features.concat( status, location, toolbar, menubar );
-      widget.open( args.id, args.url, features );
-    },
-    "close" : function( widget, args ) {
-      widget.close( args.id );
-    }
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2002, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.util.FontSizeCalculation", {
-
-  statics : {
-
-    _measureNode : null,
-    _offset : rwt.client.Client.isZoomed() ? 1 : 0,
-
-    measureItems : function( args ) {
-      var items = args.items;
-      var results = {};
-      for( var i = 0; i < items.length; i++ ) {
-        var item = items[ i ];
-        var isMarkup = item[ 7 ];
-        var size = this._measureItem( item, !isMarkup );
-        var id = item[ 0 ];
-        results[ id ] = size;
-      }
-      this._storeMeasurements( id, results );
-    },
-
-    _measureItem : function( item, escapeText ) {
-      var text = escapeText ? this._escapeText( item[ 1 ] ) : item[ 1 ];
-      var fontProps = {
-        "fontFamily" : item[ 2 ],
-        "fontSize" : item[ 3 ] + "px",
-        "fontWeight" : item[ 4 ] ? "bold" : "normal",
-        "fontStyle" : item[ 5 ] ? "italic" : "normal"
-      };
-      var width = item[ 6 ] > 0 ? item[ 6 ] : null;
-      return this.computeTextDimensions( text, fontProps, width );
-    },
-
-    computeTextDimensions : function( text, fontProps, wrapWidth ) {
-      var element = this._getMeasureNode();
-      var style = element.style;
-      // Resetting style.font causes errors in IE with any of these syntaxes:
-      // node.style.font = null | undefined | "inherit" | "";
-      if( !rwt.client.Client.isMshtml() ) {
-        style.font = "";
-      }
-      style.fontFamily = fontProps.fontFamily || "";
-      style.fontSize = fontProps.fontSize || "";
-      style.fontWeight = fontProps.fontWeight || "";
-      style.fontStyle = fontProps.fontStyle || "";
-      element.innerHTML = text;
-      if( wrapWidth ) {
-        style.width = wrapWidth + "px";
-        style.whiteSpace = "normal";
-      } else {
-        style.width = "auto";
-        style.whiteSpace = "nowrap";
-      }
-      return this._measureElement( element );
-    },
-
-    _measureElement : rwt.util.Variant.select( "qx.client", {
-      "default" : function( element ) {
-        var result;
-        if( element.getBoundingClientRect ) {
-          // See Bug 340841
-          var bounds = element.getBoundingClientRect();
-          // In FF 3.0.x getBoundingClientRect has no width/height properties
-          if( bounds.width != null && bounds.height != null ) {
-            result = [ Math.ceil( bounds.width ), Math.ceil( bounds.height ) ];
-          } else {
-            result = [ element.scrollWidth, element.scrollHeight ];
-          }
-        } else {
-          result = [ element.scrollWidth, element.scrollHeight ];
-        }
-        return this._addOffset( result );
-      },
-      "newmshtml" : function( element ) {
-        var computed = window.getComputedStyle( element, null );
-        var result = [
-          Math.ceil( parseFloat( computed.width ) ),
-          Math.ceil( parseFloat( computed.height ) )
-        ];
-        return this._addOffset( result );
-      }
-    } ),
-
-    _addOffset : function( bounds ) {
-      var x = bounds[ 0 ] > 0 ? bounds[ 0 ] + this._offset : 0;
-      var y = bounds[ 1 ] > 0 ? bounds[ 1 ] + this._offset : 0;
-      return [ x, y ];
-    },
-
-    _getMeasureNode : function() {
-      var node = this._measureNode;
-      if( !node ) {
-        node = document.createElement( "div" );
-        var style = node.style;
-        style.width = style.height = "auto";
-        style.visibility = "hidden";
-        style.position = "absolute";
-        style.zIndex = "-1";
-        document.body.appendChild( node );
-        this._measureNode = node;
-      }
-      if( !rwt.client.Client.isMshtml() ) {
-        node.style.font = "";
-      }
-      return node;
-    },
-
-    _storeMeasurements : function( id, results ) {
-      var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( this );
-      remoteObject.call( "storeMeasurements", {
-        "results" : results
-      } );
-    },
-
-    _escapeText : function( text ) {
-      var EncodingUtil = rwt.util.Encoding;
-      var result = EncodingUtil.escapeText( text, true );
-      result = EncodingUtil.replaceNewLines( result, "<br/>" );
-      result = EncodingUtil.replaceWhiteSpaces( result );
-      return result;
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.client.TextSizeMeasurement", {
-
-  factory : function( properties ) {
-    return rwt.widgets.util.FontSizeCalculation;
-  },
-
-  service : true,
-
-  methods : [
-    "measureItems"
-  ]
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.Label", {
-
-  extend : rwt.widgets.base.MultiCellWidget,
-
-  construct : function( styles ) {
-    this.base( arguments, this._CELLORDER );
-    this.addEventListener( "mouseover", this._onMouseOver );
-    this.addEventListener( "mouseout", this._onMouseOut );
-    this.setVerticalChildrenAlign( "top" );
-    this.setAlignment( "left" );
-    this.setAppearance( "label-wrapper" );
-    if( styles.WRAP ) {
-      this.setFlexibleCell( 1 );
-    }
-    this._markupEnabled = styles.MARKUP_ENABLED === true;
-    this._rawText = null;
-    this._mnemonicIndex = null;
-  },
-
-  destruct : function() {
-    this.setMnemonicIndex( null );
-  },
-
-  members : {
-
-    _CELLORDER : [ "image", "label" ],
-
-    setAlignment : function( value ) {
-      this.setHorizontalChildrenAlign( value );
-    },
-
-    setImage : function( image ) {
-      if( image ) {
-        this.setCellContent( 0, image[ 0 ] );
-        this.setCellDimension( 0, image[ 1 ], image[ 2 ] );
-      } else {
-        this.setCellContent( 0, null );
-        this.setCellDimension( 0, 0, 0 );
-      }
-    },
-
-    setText : function( value ) {
-      this._rawText = value;
-      this._applyText( false );
-      this._mnemonicIndex = null;
-    },
-
-    setMnemonicIndex : function( value ) {
-      this._mnemonicIndex = value;
-      var mnemonicHandler = rwt.widgets.util.MnemonicHandler.getInstance();
-      if( ( typeof value === "number" ) && ( value >= 0 ) ) {
-        mnemonicHandler.add( this, this._onMnemonic );
-      } else {
-        mnemonicHandler.remove( this );
-      }
-    },
-
-    getMnemonicIndex : function() {
-      return this._mnemonicIndex;
-    },
-
-    _applyText : function( mnemonic ) {
-      var text = this._rawText;
-      if( text ) {
-        if( !this._markupEnabled ) {
-          var EncodingUtil = rwt.util.Encoding;
-          var mnemonicIndex = mnemonic ? this._mnemonicIndex : undefined;
-          // Order is important here: escapeText, replace line breaks
-          text = EncodingUtil.escapeText( this._rawText, mnemonicIndex );
-          text = EncodingUtil.replaceNewLines( text, "<br/>" );
-          text = EncodingUtil.replaceWhiteSpaces( text ); // fixes bug 192634
-        }
-        this.setCellContent( 1, text );
-      } else {
-        this.setCellContent( 1, null );
-      }
-    },
-
-    _onMnemonic : function( event ) {
-      switch( event.type ) {
-        case "show":
-          this._applyText( true );
-        break;
-        case "hide":
-          this._applyText( false );
-        break;
-        case "trigger":
-          var charCode = this._rawText.toUpperCase().charCodeAt( this._mnemonicIndex );
-          if( event.charCode === charCode ) {
-            var focusWidget = this.getNextSibling();
-            if( focusWidget && focusWidget.getVisibility() && focusWidget.getEnabled() ) {
-              focusWidget.focus();
-            }
-            event.success = true;
-          }
-        break;
-      }
-    },
-
-    setTopMargin : function( value ) {
-      this.setPaddingTop( value );
-    },
-
-    setLeftMargin : function( value ) {
-      this.setPaddingLeft( value );
-    },
-
-    setRightMargin : function( value ) {
-      this.setPaddingRight( value );
-    },
-
-    setBottomMargin : function( value ) {
-      this.setPaddingBottom( value );
-    },
-
-    _onMouseOver : function( event ) {
-      if( event.getTarget() === this && !this.hasState( "over" ) ) {
-        this.addState( "over" );
-      }
-    },
-
-    _onMouseOut : function( event ) {
-      if( event.getTarget() === this ) {
-        this.removeState( "over" );
-      }
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2009, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.base.BasicButton", {
-
-  extend : rwt.widgets.base.MultiCellWidget,
-
-  construct : function( buttonType, noKeyControl ) {
-    this.base( arguments, this._CELLORDER );
-    this._hasSelectionListener = false;
-    this._selected = false;
-    this._image = [ null, null, null ] ;
-    this._hotImage = [ null, null, null ];
-    this.addEventListener( "mouseover", this._onMouseOver );
-    this.addEventListener( "mouseout", this._onMouseOut );
-    this.addEventListener( "mousedown", this._onMouseDown );
-    this.addEventListener( "mouseup", this._onMouseUp );
-    if( !noKeyControl ) {
-      this.addEventListener( "keydown", this._onKeyDown );
-      this.addEventListener( "keyup", this._onKeyUp );
-      this.addEventListener( "keypress", this._onKeyPress );
-    }
-    this.addState( buttonType );
-    switch( buttonType ) {
-      case "arrow":
-      case "push":
-        this._isSelectable = false;
-        this._isDeselectable = false;
-      break;
-      case "toggle":
-      case "check":
-        this._isSelectable = true;
-        this._isDeselectable = true;
-      break;
-      case "radio":
-        this._isSelectable = true;
-        this.setNoRadioGroup( false );
-        rwt.widgets.util.RadioButtonUtil.registerExecute( this );
-        rwt.widgets.util.RadioButtonUtil.registerKeypress( this );
-      break;
-    }
-
-  },
-
-  destruct : function() {
-    if( this._animation != null ) {
-      this._animation.dispose();
-    }
-    this._animation = null;
-  },
-
-  events: {
-    "stateOverChanged" : "rwt.event.Event"
-  },
-
-  properties : {
-
-    selectionIndicator : {
-      apply : "_applySelectionIndicator",
-      nullable : true,
-      themeable : true
-    },
-
-    // TODO [tb] : non-ideal solution to provide theming support for image
-    icon : {
-      apply : "_applyIcon",
-      nullable : true,
-      themeable : true
-    },
-
-    animation : {
-      check : "Object",
-      nullable : false,
-      init : null,
-      apply : "_applyAnimation",
-      themeable : true
-    }
-
-  },
-
-  members : {
-    _CELLORDER : [ "image", "image", "label" ],
-
-    _applyIcon : function( newValue, oldValue ) {
-      this.setImage.apply( this, newValue );
-    },
-
-    setImage : function( value, width, height ) {
-      this._image = [ value, width, height ];
-      this._updateButtonImage();
-    },
-
-    setHotImage : function( value, width, height ) {
-      this._hotImage = [ value, width, height ];
-      this._updateButtonImage();
-    },
-
-    _updateButtonImage : function() {
-      var image =
-          ( this._hotImage[ 0 ] != null && this.hasState( "over" ) )
-        ? this._hotImage
-        : this._image;
-      var current = this.getCellContent( 1 );
-      if( current != image[ 0 ] ) {
-        this.setCellContent( 1, image[ 0 ] );
-        this.setCellDimension( 1, image[ 1 ], image[ 2 ] );
-      }
-    },
-
-    setText : function( value ) {
-      this.setCellContent( 2, value );
-    },
-
-    _applySelectionIndicator : function( value, old ) {
-      var url = value ? value[ 0 ] : null;
-      var width = value ? value[ 1 ] : 0;
-      var height = value ? value[ 2 ] : 0;
-      this.setCellContent( 0, url );
-      this.setCellDimension( 0, width, height );
-    },
-
-    setHasSelectionListener : function( value ) {
-      this._hasSelectionListener = value;
-    },
-
-    setGrayed : function( value ) {
-      if( value ) {
-        this.addState( "grayed" );
-      } else {
-        this.removeState( "grayed" );
-      }
-    },
-
-    setNoRadioGroup : function( value ) {
-      if( this.hasState( "radio") ) {
-        this._noRadioGroup = value;
-        this._isDeselectable = value;
-      }
-    },
-
-    getNoRadioGroup : function() {
-      return this._noRadioGroup;
-    },
-
-    execute : function() {
-      this.base( arguments );
-      if( this._isSelectable ) {
-        this.setSelection( !( this._selected && this._isDeselectable ) );
-      } else {
-        this._notifySelected();
-      }
-    },
-
-    setSelection : function( value ) {
-      var wasSelected = this._selected;
-      var selectionChanged = this._selected != value;
-      if( selectionChanged ) {
-        this._selected = value;
-        if( this._selected ) {
-          this.addState( "selected" );
-        } else {
-          this.removeState( "selected" );
-        }
-        if( !rwt.remote.EventUtil.getSuspended() ) {
-          var server = rwt.remote.Server.getInstance();
-          server.getRemoteObject( this ).set( "selection", this._selected );
-        }
-      }
-      if( selectionChanged || wasSelected ) {
-        this._notifySelected();
-      }
-    },
-
-    _notifySelected : function() {
-      if( !rwt.remote.EventUtil.getSuspended() && this._hasSelectionListener ) {
-        rwt.remote.EventUtil.notifySelected( this );
-      }
-    },
-
-    _onMouseOver : function( event ) {
-      // [tb] Firefox can sometimes fire false "over" events.
-      if ( event.getTarget() == this && !this.hasState( "over" ) ) {
-        if( this.hasState( "abandoned" ) ) {
-          this.removeState( "abandoned" );
-          this.addState( "pressed" );
-        }
-        this.addState( "over" );
-        this._updateButtonImage();
-        this.createDispatchEvent( "stateOverChanged" );
-      }
-    },
-
-    _onMouseOut : function( event ) {
-      if ( event.getTarget() == this ) {
-        this.removeState( "over" );
-        this._updateButtonImage();
-        if ( this.hasState( "pressed" ) ) {
-          this.setCapture( true );
-          this.removeState( "pressed" );
-          this.addState( "abandoned" );
-        }
-        this.createDispatchEvent( "stateOverChanged" );
-      }
-    },
-
-    _onMouseDown : function( event ) {
-      if ( event.getTarget() == this && event.isLeftButtonPressed() ) {
-        this.removeState( "abandoned" );
-        this.addState( "pressed" );
-      }
-    },
-
-    _onMouseUp : function( event ) {
-      this.setCapture( false );
-      var hasPressed = this.hasState( "pressed" );
-      var hasAbandoned = this.hasState( "abandoned" );
-      if( hasPressed ) {
-        this.removeState( "pressed" );
-      }
-      if ( hasAbandoned ) {
-        this.removeState( "abandoned" );
-      }
-      if ( !hasAbandoned ) {
-        this.addState( "over" );
-        this._updateButtonImage();
-        if ( hasPressed ) {
-          this.execute();
-        }
-      }
-    },
-
-    _onKeyDown : function( event ) {
-      switch( event.getKeyIdentifier() ) {
-        case "Enter":
-        case "Space":
-          this.removeState( "abandoned" );
-          this.addState( "pressed" );
-          event.stopPropagation();
-      }
-    },
-
-    _onKeyUp : function( event ) {
-      switch( event.getKeyIdentifier() ) {
-        case "Enter":
-        case "Space":
-          if ( this.hasState( "pressed" ) ) {
-            this.removeState( "abandoned" );
-            this.removeState( "pressed" );
-            this.execute();
-            event.preventDefault();
-            event.stopPropagation();
-          }
-      }
-    },
-
-    _onKeyPress : function( event ) {
-      switch( event.getKeyIdentifier() ) {
-        case "Left":
-        case "Up":
-        case "Right":
-        case "Down":
-        case "PageUp":
-        case "PageDown":
-        case "End":
-        case "Home":
-        case "Enter":
-        case "Space":
-          event.preventDefault();
-          event.stopPropagation();
-      }
-    },
-
-    ////////////
-    // Animation
-
-    _applyAnimation : function( newValue, oldValue ) {
-      if( newValue[ "hoverIn" ] || newValue[ "hoverOut" ] ) {
-        if( this._animation == null ) {
-          this._animation = new rwt.animation.Animation();
-          this._animation.addEventListener( "init",
-                                            this._initAnimation,
-                                            this );
-        }
-        this.addEventListener( "stateOverChanged",
-                               this._animation.activateRendererOnce,
-                               this._animation );
-        this.addEventListener( "changeBackgroundGradient",
-                               this._configureRenderer,
-                               this );
-        this._configureRenderer();
-      } else if( this._animation != null ) {
-        this.removeEventListener( "stateOverChanged",
-                                  this._animation.activateRendererOnce,
-                                  this._animation );
-        this.removeEventListener( "changeBackgroundGradient",
-                                  this._configureRenderer,
-                                  this );
-      }
-    },
-
-    _configureRenderer : function( event ) {
-      if( !event || event.getValue() == null || event.getOldValue() == null ) {
-        this._animation.skip();
-        var renderer = this._animation.getDefaultRenderer( false );
-        var renderType =   this.getBackgroundGradient() != null
-                         ? "backgroundGradient"
-                         : "backgroundColor";
-        var animationType = rwt.animation.AnimationRenderer.ANIMATION_CHANGE;
-        renderer.animate( this, renderType, animationType );
-      }
-    },
-
-    _initAnimation : function( event ) {
-      if( this.hasState( "pressed" ) ) {
-        this._animation.cancel();
-      } else {
-        var animation = this.getAnimation();
-        if( this.hasState( "over" ) && animation[ "hoverIn" ] ) {
-          this._animation.setProperties( animation[ "hoverIn" ] );
-        } else if( !this.hasState( "over" ) && animation[ "hoverOut" ] ) {
-          this._animation.setProperties( animation[ "hoverOut" ] );
-        } else {
-          this._animation.cancel();
-        }
-      }
-    },
-
-    _renderAppearance : function() {
-      this.base( arguments );
-      // TODO [tb] : Find a more elegant and generic way to do this.
-      if( this._animation != null && !this._animation.isStarted() ) {
-        this._animation.getDefaultRenderer().cancelActivateOnce();
-      }
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2009, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.ToolItem", {
-
-  extend : rwt.widgets.base.BasicButton,
-
-  construct : function( itemType ) {
-    this.base( arguments, itemType );
-    this._isDropDown = false;
-    if( itemType == "dropDown" ) {
-      this._isDropDown = true;
-      this._isSelectable = false;
-      this._isDeselectable = false;
-      this._sendEvent = true;
-      this.setCellDimension( 3, 1, 0 );
-      this.setCellContent( 3, "" );
-    }
-    this._separatorBorder = null;
-    this._rawText = null;
-    this._mnemonicIndex = null;
-    this.setAppearance( "toolbar-button" );
-    this.removeEventListener( "keydown", this._onKeyDown );
-    this.removeEventListener( "keyup", this._onKeyUp );
-  },
-
-  destruct : function() {
-    this.setMnemonicIndex( null );
-  },
-
-  properties : {
-
-    dropDownArrow : {
-      apply : "_applyDropDownArrow",
-      nullable : true,
-      themeable : true
-    },
-
-    separatorBorder : {
-      nullable : true,
-      init : null,
-      apply : "_applySeparatorBorder",
-      themeable : true
-    }
-
-  },
-
-  events : {
-    "dropDownClicked" : "rwt.event.Event"
-  },
-
-  members : {
-    // overwritten:
-    _CELLORDER : [ "image", "image", "label", "label", "image" ],
-
-    // overwritten:
-    _onKeyPress : function( event ) {
-      // give to toolBar for keyboard control (left/right keys):
-      this.getParent().dispatchEvent( event );
-      this.base( arguments, event );
-    },
-
-    setText : function( value ) {
-      this._rawText = value;
-      this._mnemonicIndex = null;
-      this._applyText( false );
-    },
-
-    setMnemonicIndex : function( value ) {
-      this._mnemonicIndex = value;
-      var mnemonicHandler = rwt.widgets.util.MnemonicHandler.getInstance();
-      if( ( typeof value === "number" ) && ( value >= 0 ) ) {
-        mnemonicHandler.add( this, this._onMnemonic );
-      } else {
-        mnemonicHandler.remove( this );
-      }
-    },
-
-    getMnemonicIndex : function() {
-      return this._mnemonicIndex;
-    },
-
-    _applyText : function( mnemonic ) {
-      if( this._rawText ) {
-        var mnemonicIndex = mnemonic ? this._mnemonicIndex : undefined;
-        var text = rwt.util.Encoding.escapeText( this._rawText, mnemonicIndex );
-        this.setCellContent( 2, text );
-      } else {
-        this.setCellContent( 2, null );
-      }
-    },
-
-    _onMnemonic : function( event ) {
-      switch( event.type ) {
-        case "show":
-          this._applyText( true );
-        break;
-        case "hide":
-          this._applyText( false );
-        break;
-        case "trigger":
-          var charCode = this._rawText.toUpperCase().charCodeAt( this._mnemonicIndex );
-          if( event.charCode === charCode ) {
-            this.execute();
-            event.success = true;
-          }
-        break;
-      }
-    },
-
-    ////////////////////
-    // Dropdown-support
-
-    // overwritten:
-    _onMouseDown : function( event ) {
-      if ( event.getTarget() == this && event.isLeftButtonPressed() ) {
-        this.removeState( "abandoned" );
-        if( this._isDropdownClick( event ) ) {
-          this._onDropDownClick();
-        } else {
-          this.addState( "pressed" );
-        }
-      }
-    },
-
-    _isDropdownClick : function( event ) {
-      var result = false;
-      var node = this.getCellNode( 3 );
-      if( node != null ) {
-        var nodeLeft = rwt.html.Location.getLeft( node );
-        var clickLeft = event.getClientX();
-        result = clickLeft > nodeLeft;
-      }
-      return result;
-    },
-
-    _onDropDownClick : function() {
-      if(    !rwt.remote.EventUtil.getSuspended()
-          && this._hasSelectionListener
-          && this._sendEvent )
-      {
-        rwt.remote.EventUtil.notifySelected( this, 0, 0, 0, 0, "arrow" );
-      }
-      this.dispatchSimpleEvent( "dropDownClicked" );
-    },
-
-    _applyDropDownArrow : function( value, oldValue ) {
-      var url = value ? value[ 0 ] : null;
-      var width = value ? value[ 1 ] : 0;
-      var height = value ? value[ 2 ] : 0;
-      this.setCellContent( 4, url );
-      this.setCellDimension( 4, width, height );
-    },
-
-    _applySeparatorBorder : function( value, oldValue ) {
-      this._queueSeparatorBorder( value );
-    },
-
-    _queueSeparatorBorder : function( value ) {
-      this._separatorBorder = value;
-      this.addToQueue( "separatorBorder" );
-    },
-
-    // overwritten:
-    _beforeRenderLayout : function( changes ) {
-      // TODO [tb] : Is there a less error-prone and shabby way to layout the dropDown icon?
-      if( this._isDropDown ) {
-        if( changes.layoutY ) {
-          // the cell used for the line needs to have 100% height
-          var padding = this.getPaddingTop() + this.getPaddingBottom();
-          this._setCellHeight( 3, this.getInnerHeight() + padding );
-        }
-        if( changes.layoutX ) {
-          // uses cell 0 (unused for tool-items) and 2 (text)
-          // to force the dropdown-area to the right
-          var inner = this.getInnerWidth();
-          this._setCellWidth( 0, 0 );
-          this._setCellWidth( 2, null );
-          var preferred = this.getPreferredInnerWidth();
-          var diff = inner - preferred;
-          if( diff > 0 ) {
-            var space = this.getSpacing();
-            if( ( diff > ( space * 2 ) ) && this.getHorizontalChildrenAlign() != "left" ) {
-              var spaceLeft = Math.round( diff * 0.5 ) - space;
-              var spaceRight = Math.round( diff * 0.5 );
-              this.setCellWidth( 0, spaceLeft );
-              this.setCellWidth( 2, this.getCellWidth( 2 ) + spaceRight );
-            } else {
-              this.setCellWidth( 2, this.getCellWidth( 2 ) + diff );
-            }
-          }
-        }
-        if( changes.separatorBorder ) {
-          // apply the separator-border (currently verly limited)
-          var style = this.getCellNode( 3 ).style;
-          var borderWidth = this._separatorBorder.getWidthLeft();
-          var borderStyle = this._separatorBorder.getStyleLeft();
-          var borderColor = this._separatorBorder.getColorLeft();
-          style.borderLeftWidth = ( borderWidth || 0 ) + "px";
-          style.borderLeftStyle = borderStyle || "none";
-          style.borderLeftColor = borderColor || "";
-        }
-      }
-    },
-
-    // overwritten:
-    _renderCellLayoutY : function( cell ) {
-      this.base( arguments, cell );
-      if( this._isDropDown && cell == 3 ) {
-        this.getCellNode( cell ).style.top = 0;
-      }
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2002, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.Group", {
-  extend : rwt.widgets.base.Parent,
-
-  construct : function() {
-    this.base( arguments );
-    // Sub widgets
-    this._createFrameObject();
-    this._createLegendObject();
-
-    // Processing parameters
-    this.setLegend( "" );
-
-    // Enable method remapping
-    this.remapChildrenHandlingTo(this._frameObject);
-    this.setOverflow( "hidden" );
-    var themeValues = new rwt.theme.ThemeValues( {} );
-    this._themeBackgroundColor = themeValues.getCssColor( "Group-Label", "background-color" );
-    themeValues.dispose();
-    // Make sure that the 'labelObject' is created
-    var labelObject = this.getLegendObject().getLabelObject();
-    if( labelObject == null ) {
-      this.setLegend( "(empty)" );
-      this.setLegend( "" );
-    }
-    labelObject = this.getLegendObject().getLabelObject();
-    labelObject.setMode( "html" );
-    this.addEventListener( "changeBackgroundColor",
-                           this._onChangeBackgroundColor,
-                           this );
-    this.addEventListener( "changeFont",
-                           this._onChangeFont,
-                           this );
-    this.getLegendObject().addEventListener( "mouseover",
-                                             this._onMouseOver,
-                                             this );
-    this.getLegendObject().addEventListener( "mouseout",
-                                             this._onMouseOut,
-                                             this );
-    // Disable scrolling (see bug 345903)
-    rwt.widgets.base.Widget.disableScrolling( this );
-  },
-
-  destruct : function() {
-    this.removeEventListener( "changeBackgroundColor",
-                              this._onChangeBackgroundColor,
-                              this );
-    this.removeEventListener( "changeFont",
-                              this._onChangeFont,
-                              this );
-    this.getLegendObject().removeEventListener( "mouseover",
-                                                this._onMouseOver,
-                                                this );
-    this.getLegendObject().removeEventListener( "mouseout",
-                                                this._onMouseOut,
-                                                this );
-    this._disposeObjects("_legendObject", "_frameObject");
-    this.setMnemonicIndex( null );
-  },
-
-  properties :
-  {
-    appearance :
-    {
-      refine : true,
-      init : "group-box"
-    }
-  },
-
-  members : {
-
-    setText : function( value ) {
-      this._rawText = value;
-      this._mnemonicIndex = null;
-      this._applyText( false );
-    },
-
-    setMnemonicIndex : function( value ) {
-      this._mnemonicIndex = value;
-      var mnemonicHandler = rwt.widgets.util.MnemonicHandler.getInstance();
-      if( ( typeof value === "number" ) && ( value >= 0 ) ) {
-        mnemonicHandler.add( this, this._onMnemonic );
-      } else {
-        mnemonicHandler.remove( this );
-      }
-    },
-
-    getMnemonicIndex : function() {
-      return this._mnemonicIndex;
-    },
-
-    _onMnemonic : function( event ) {
-      switch( event.type ) {
-        case "show":
-          this._applyText( true );
-        break;
-        case "hide":
-          this._applyText( false );
-        break;
-        case "trigger":
-          var charCode = this._rawText.toUpperCase().charCodeAt( this._mnemonicIndex );
-          if( event.charCode === charCode ) {
-            var widget = this._findFirstFocusableChild( this );
-            if( widget != null ) {
-              widget.focus();
-            }
-            event.success = true;
-          }
-        break;
-      }
-    },
-
-    _applyText : function( mnemonic ) {
-      var EncodingUtil = rwt.util.Encoding;
-      if( this._rawText ) {
-        var mnemonicIndex = mnemonic ? this._mnemonicIndex : undefined;
-        var text = EncodingUtil.escapeText( this._rawText, mnemonicIndex );
-        if( this.hasState( "rwt_WRAP" ) ) {
-          text = EncodingUtil.replaceNewLines( text, "<br/>" );
-        }
-        this.setLegend( text );
-      } else {
-        this.setLegend( null );
-      }
-    },
-
-    addState : function( state ) {
-      this.base( arguments, state );
-      if( state.substr( 0, 8 ) == "variant_" ) {
-        this._legendObject.addState( state );
-        this._frameObject.addState( state );
-      }
-    },
-
-    removeState : function( state ) {
-      this.base( arguments, state );
-      if( state.substr( 0, 8 ) == "variant_" ) {
-        this._legendObject.removeState( state );
-        this._frameObject.removeState( state );
-      }
-    },
-
-    _onChangeBackgroundColor : function( evt ) {
-      var newColor = evt.getValue();
-      if( this._themeBackgroundColor === "undefined" ) {
-        this.getLegendObject().setBackgroundColor( newColor );
-      }
-    },
-
-    _onChangeFont : function( evt ) {
-      var newFont = evt.getValue();
-      this.getLegendObject().setFont( newFont );
-    },
-
-    _onMouseOver : function( event ) {
-      this.getLegendObject().addState( "over" );
-      this.getFrameObject().addState( "over" );
-    },
-
-    _onMouseOut : function( event ) {
-      this.getLegendObject().removeState( "over" );
-      this.getFrameObject().removeState( "over" );
-    },
-
-    _layoutPost : function( changes ) {
-      this.base( arguments, changes );
-      this._frameObject._layoutPost( changes );
-    },
-
-    //////////////////
-    // apply subelement IDs
-
-    applyObjectId : function( id ) {
-      this.base( arguments, id );
-      if( rwt.widgets.base.Widget._renderHtmlIds ) {
-        var labelObject = this.getLegendObject().getLabelObject();
-        labelObject.setHtmlAttribute( "id", id + "-label" );
-      }
-    },
-
-    /**
-     * Creates the legend sub widget
-     *
-     * @type member
-     * @return {void}
-     */
-    _createLegendObject : function() {
-      this._legendObject = new rwt.widgets.base.Atom();
-      this._legendObject.setAppearance( "group-box-legend" );
-      this.add( this._legendObject );
-    },
-
-    /**
-     * Creates the frame sub widget
-     *
-     * @type member
-     * @return {void}
-     */
-    _createFrameObject : function() {
-      this._frameObject = new rwt.widgets.base.Parent();
-      this._frameObject.setAppearance( "group-box-frame" );
-      this.add( this._frameObject );
-    },
-
-
-
-
-    /*
-    ---------------------------------------------------------------------------
-      GETTER FOR SUB WIDGETS
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Accessor method for the frame sub widget
-     *
-     * @type member
-     * @return {rwt.widgets.base.Parent} frame sub widget
-     */
-    getFrameObject : function() {
-      return this._frameObject;
-    },
-
-
-    /**
-     * Accessor method for the legend sub widget
-     *
-     * @type member
-     * @return {rwt.widgets.base.Atom} legend sub widget
-     */
-    getLegendObject : function() {
-      return this._legendObject;
-    },
-
-    /*
-    ---------------------------------------------------------------------------
-      SETTER/GETTER
-    ---------------------------------------------------------------------------
-    */
-
-    /**
-     * Sets the label of the legend sub widget if the given string is
-     * valid. Otherwise the legend sub widget get not displayed.
-     *
-     * @type member
-     * @param vLegend {String} new label of the legend sub widget
-     * @return {void}
-     */
-    setLegend : function(vLegend) {
-      if (vLegend !== "" && vLegend !== null) {
-        this._legendObject.setLabel(vLegend);
-        this._legendObject.setDisplay(true);
-      } else {
-        this._legendObject.setDisplay(false);
-      }
-    },
-
-    /**
-     * Accessor method for the label of the legend sub widget
-     *
-     * @type member
-     * @return {String} Label of the legend sub widget
-     */
-    getLegend : function() {
-      return this._legendObject.getLabel();
-    },
-
-
-    /**
-     * Sets the icon of the legend sub widget.
-     *
-     * @type member
-     * @param vIcon {String} source of the new icon of the legend sub widget
-     * @return {void}
-     */
-    setIcon : function(vIcon) {
-      this._legendObject.setIcon(vIcon);
-    },
-
-
-    /**
-     * Accessor method for the icon of the legend sub widget
-     *
-     * @type member
-     * @return {String} source of the new icon of the legend sub widget
-     */
-    getIcon : function() {
-      this._legendObject.getIcon();
-    },
-
-    _findFirstFocusableChild : function( parent ) {
-      var ObjectRegistry = rwt.remote.ObjectRegistry;
-      var WidgetUtil = rwt.widgets.util.WidgetUtil;
-      var result = null;
-      var ids = WidgetUtil.getChildIds( parent );
-      for( var i = 0; i < ids.length && result === null; i++ ) {
-        var child = ObjectRegistry.getObject( ids[ i ] );
-        if( WidgetUtil.getChildIds( child ) ) {
-          result = this._findFirstFocusableChild( child );
-        } else if( child.isSeeable() && child.isEnabled() ) {
-          result = child;
-        }
-      }
-      return result;
-    }
-
-
-  }
-
-});
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.Group", {
-
-  factory : function( properties ) {
-    var result = new rwt.widgets.Group();
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "text",
-    "mnemonicIndex"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {} ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2002, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.Shell", {
-
-  extend : rwt.widgets.base.Window,
-
-  include : rwt.animation.VisibilityAnimationMixin,
-
-  construct : function( styles ) {
-    this.base( arguments );
-    this.setShowMinimize( styles.MIN === true );
-    this.setAllowMinimize( styles.MIN === true  );
-    this.setShowMaximize( styles.MAX === true  );
-    this.setAllowMaximize(styles.MAX === true  );
-    this.setShowClose( styles.CLOSE === true  );
-    this.setAllowClose( styles.CLOSE === true  );
-    this.setResizableWest( styles.RESIZE === true  );
-    this.setResizableNorth( styles.RESIZE === true  );
-    this.setResizableEast( styles.RESIZE === true  );
-    this.setResizableSouth( styles.RESIZE === true  );
-    this.setOverflow( "hidden" );
-    // Note: This prevents a laoyut-glitch on the ipad:
-    this.setRestrictToPageOnOpen( false );
-    // TODO [rh] HACK to set mode on Label that shows the caption, _captionTitle
-    //      is a 'protected' field on class Window
-    this._captionTitle.setMode( "html" );
-    this._activeControl = null;
-    this._focusControl = null;
-    this._parentShell = null;
-    this._renderZIndex = true;
-    this._hasResizeListener = false;
-    this._hasMoveListener = false;
-    this.addEventListener( "changeActiveChild", this._onChangeActiveChild );
-    this.addEventListener( "changeFocusedChild", this._onChangeFocusedChild );
-    this.addEventListener( "changeActive", this._onChangeActive );
-    this.addEventListener( "changeMode", this._onChangeMode );
-    this.addEventListener( "changeLeft", this._onChangeLocation, this );
-    this.addEventListener( "changeTop", this._onChangeLocation, this );
-    this.addEventListener( "changeWidth", this._onChangeSize, this );
-    this.addEventListener( "changeHeight", this._onChangeSize, this );
-    this.addEventListener( "keydown", this._onKeydown );
-    var req = rwt.remote.Server.getInstance();
-    req.addEventListener( "send", this._onSend, this );
-    this.getCaptionBar().setWidth( "100%" );
-    // [if] Listen for DOM event instead of qooxdoo event - see bug 294846.
-    this.removeEventListener( "mousedown", this._onwindowmousedown );
-    this.addEventListener( "create", this._onCreate, this );
-    this.__onwindowmousedown = rwt.util.Functions.bind( this._onwindowmousedown, this );
-    this.addToDocument();
-  },
-
-  statics : {
-    TOP_LEFT : "topLeft",
-    TOP_RIGHT : "topRight",
-    BOTTOM_LEFT : "bottomLeft",
-    BOTTOM_RIGHT : "bottomRight",
-    CORNER_NAMES : [
-      "topLeft",
-      "topRight",
-      "bottomLeft",
-      "bottomRight"
-    ],
-
-    _onParentClose : function( evt ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        this.doClose();
-      }
-    },
-
-    reorderShells : function( vWindowManager ) {
-      var shells = rwt.util.Objects.getValues( vWindowManager.getAll() );
-      shells = shells.sort( rwt.widgets.Shell._compareShells );
-      var vLength = shells.length;
-      var upperModalShell = null;
-      if( vLength > 0 ) {
-        var vTop = shells[ 0 ].getTopLevelWidget();
-        var vZIndex = rwt.widgets.Shell.MIN_ZINDEX;
-        for( var i = 0; i < vLength; i++ ) {
-          vZIndex += 10;
-          shells[ i ].setZIndex( vZIndex );
-          if( shells[ i ]._appModal && shells[ i ].getVisibility() && shells[ i ].getDisplay() ) {
-            upperModalShell = shells[ i ];
-          }
-        }
-        if( upperModalShell != null ) {
-          this._copyStates( upperModalShell, vTop._getBlocker() );
-          vTop._getBlocker().show();
-          vTop._getBlocker().setZIndex( upperModalShell.getZIndex() - 1 );
-        } else {
-          vTop._getBlocker().hide();
-        }
-      }
-      rwt.widgets.Shell._upperModalShell = upperModalShell;
-    },
-
-    _copyStates : function( source, target ) {
-      target.__states = {};
-      for( var state in source.__states ) {
-        if( source._isRelevantState( state ) ) {
-          target.addState( state );
-        }
-      }
-      target._renderAppearance();
-      rwt.widgets.base.Widget.removeFromGlobalLayoutQueue( target );
-    },
-
-    /*
-     * Compares two Shells regarding their desired z-order.
-     *
-     * Result is
-     * - positive if sh1 is higher
-     * - negative if sh2 is higher
-     * - zero if equal
-     */
-    _compareShells : function( sh1, sh2 ) {
-      var result = 0;
-      // check for dialog relationship
-      if( sh1.isDialogOf( sh2 ) ) {
-        result = 1;
-      } else if( sh2.isDialogOf( sh1 ) ) {
-        result = -1;
-      }
-      // compare by onTop property
-      if( result === 0 ) {
-        result = ( sh1._onTop ? 1 : 0 ) - ( sh2._onTop ? 1 : 0 );
-      }
-      // compare by appModal property
-      if( result === 0 ) {
-        result = ( sh1._appModal ? 1 : 0 ) - ( sh2._appModal ? 1 : 0 );
-      }
-      // compare by top-level parent's z-order
-      if( result === 0 ) {
-        var top1 = sh1.getTopLevelShell();
-        var top2 = sh2.getTopLevelShell();
-        result = top1.getZIndex() - top2.getZIndex();
-      }
-      // compare by actual z-order
-      if( result === 0 ) {
-        result = sh1.getZIndex() - sh2.getZIndex();
-      }
-      return result;
-    },
-
-    MIN_ZINDEX : 1e5,
-
-    MAX_ZINDEX : 1e7
-  },
-
-  destruct : function() {
-    this.setParentShell( null );
-    var req = rwt.remote.Server.getInstance();
-    req.removeEventListener( "send", this._onSend, this );
-    if( this.isCreated() ) {
-      rwt.html.EventRegistration.removeEventListener( this.getElement(),
-                                                     "mousedown",
-                                                     this.__onwindowmousedown );
-    }
-  },
-
-  events : {
-    "close" : "rwt.event.DataEvent",
-    "parentShellChanged" : "rwt.event.Event"
-  },
-
-  members : {
-
-    destroy : function() {
-      this.doClose();
-      this.getWindowManager().remove( this );
-      this.base( arguments );
-    },
-
-    _onCreate : function( evt ) {
-      rwt.html.EventRegistration.addEventListener( this.getElement(),
-                                                  "mousedown",
-                                                  this.__onwindowmousedown );
-      this.removeEventListener( "create", this._onCreate, this );
-    },
-
-    // [if] Override to prevent the new open shell to automaticaly become
-    // an active shell (see bug 297167).
-    _beforeAppear : function() {
-      rwt.widgets.base.Parent.prototype._beforeAppear.call( this );
-      rwt.widgets.util.PopupManager.getInstance().update();
-      var activeWindow = this.getWindowManager().getActiveWindow();
-      this.getWindowManager().add( this );
-      this.getWindowManager().setActiveWindow( activeWindow );
-    },
-
-    setDefaultButton : function( value ) {
-      if( this._defaultButton != null ) {
-        this._defaultButton.removeState( "default" );
-      }
-      this._defaultButton = value;
-      if( this._defaultButton != null ) {
-        this._defaultButton.addState( "default" );
-      }
-    },
-
-    getDefaultButton : function() {
-      return this._defaultButton;
-    },
-
-    setParentShell : function( parentShell ) {
-      var oldParentShell = this._parentShell;
-      this._parentShell = parentShell;
-      var listener = rwt.widgets.Shell._onParentClose;
-      if( oldParentShell != null ) {
-        oldParentShell.removeEventListener( "close", listener, this );
-      }
-      if( parentShell != null ) {
-        parentShell.addEventListener( "close", listener, this );
-      }
-      this.dispatchSimpleEvent( "parentShellChanged" );
-    },
-
-    isDisableResize : function() {
-      return this._disableResize ? true : false;
-    },
-
-    setHasActivateListener : function( hasListener ) {
-      // [if] Do nothing. Shell "Activate" event is always sent by the client
-    },
-
-    setHasCloseListener : function( hasListener ) {
-      // [if] Do nothing. Shell "Close" event is always sent by the client
-    },
-
-    setHasResizeListener : function( hasListener ) {
-      this._hasResizeListener = hasListener;
-    },
-
-    setHasMoveListener : function( hasListener ) {
-      this._hasMoveListener = hasListener;
-    },
-
-    setActiveControl : function( control ) {
-      this._activeControl = control;
-    },
-
-    /** To be called after rwt_XXX states are set */
-    initialize : function() {
-      this.setShowCaption( this.hasState( "rwt_TITLE" ) );
-      this._onTop = ( this._parentShell != null && this._parentShell._onTop )
-                    || this.hasState( "rwt_ON_TOP" );
-      this._appModal =    this.hasState( "rwt_APPLICATION_MODAL" )
-                       || this.hasState( "rwt_PRIMARY_MODAL" )
-                       || this.hasState( "rwt_SYSTEM_MODAL" );
-    },
-
-    // TODO [rst] Find a generic solution for state inheritance
-    addState : function( state ) {
-      this.base( arguments, state );
-      if( this._isRelevantState( state ) ) {
-        this._captionBar.addState( state );
-        this._captionTitle.addState( state );
-        this._minimizeButton.addState( state );
-        this._maximizeButton.addState( state );
-        this._restoreButton.addState( state );
-        this._closeButton.addState( state );
-        var blocker = this._getClientDocumentBlocker();
-        if( blocker != null ) {
-          blocker.addState( state );
-        }
-      }
-    },
-
-    removeState : function( state ) {
-      this.base( arguments, state );
-      if( this._isRelevantState( state ) ) {
-        this._captionBar.removeState( state );
-        this._captionTitle.removeState( state );
-        this._minimizeButton.removeState( state );
-        this._maximizeButton.removeState( state );
-        this._restoreButton.removeState( state );
-        this._closeButton.removeState( state );
-        var blocker = this._getClientDocumentBlocker();
-        if( blocker != null ) {
-          blocker.removeState( state );
-        }
-      }
-    },
-
-    _getClientDocumentBlocker : function() {
-      var result = null;
-      if(    this._appModal
-          && rwt.widgets.Shell._upperModalShell == this )
-      {
-        result = this.getTopLevelWidget()._getBlocker();
-      }
-      return result;
-    },
-
-    _isRelevantState : function( state ) {
-      var result =    state == "active"
-                   || state == "maximized"
-                   || state == "minimized"
-                   || state.substr( 0, 8 ) == "variant_"
-                   || state.substr( 0, 4 ) == "rwt_";
-      return result;
-    },
-
-    /**
-     * Overrides rwt.widgets.base.Window#close()
-     *
-     * Called when user tries to close the shell.
-     */
-    close : function() {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        rwt.remote.Server.getInstance().getRemoteObject( this ).notify( "Close" );
-      }
-    },
-
-    /**
-     * Really closes the shell.
-     */
-    doClose : function() {
-      // Note [rst]: Fixes bug 232977
-      // Background: There are situations where a shell is disposed twice, thus
-      // doClose is called on an already disposed shell at the second time
-      if( !this.isDisposed() ) {
-        this.hide();
-        if( this.hasEventListeners( "close" ) ) {
-          var event = new rwt.event.DataEvent( "close", this );
-          this.dispatchEvent( event, true );
-        }
-        var wm = this.getWindowManager();
-        rwt.widgets.Shell.reorderShells( wm );
-      }
-    },
-
-    _onChangeActiveChild : function( evt ) {
-      // Work around qooxdoo bug #254: the changeActiveChild is fired twice when
-      // a widget was activated by keyboard (getData() is null in this case)
-      var widget = this._getParentControl( evt.getValue() );
-      if(    !rwt.remote.EventUtil.getSuspended()
-          && widget != null
-          && widget !== this._activeControl )
-      {
-        this._notifyDeactivate( this._activeControl, widget );
-        var id = rwt.remote.WidgetManager.getInstance().findIdByWidget( widget );
-        var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( this );
-        remoteObject.set( "activeControl", id );
-        this._notifyActivate( this._activeControl, widget );
-        this._activeControl = widget;
-      }
-    },
-
-    _notifyDeactivate : function( oldActive, newActive ) {
-      var target = oldActive;
-      while( target != null && !this._hasDeactivateListener( target ) ) {
-        if( target.getParent ) {
-          target = target.getParent();
-        } else {
-          target = null;
-        }
-      }
-      if( target != null && !target.contains( newActive ) ) {
-        var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( target );
-        remoteObject.notify( "Deactivate" );
-      }
-    },
-
-    _notifyActivate : function( oldActive, newActive ) {
-      var target = newActive;
-      while( target != null && !this._hasActivateListener( target ) ) {
-        if( target.getParent ) {
-          target = target.getParent();
-        } else {
-          target = null;
-        }
-      }
-      if( target != null && !target.contains( oldActive ) ) {
-        var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( target );
-        remoteObject.notify( "Activate" );
-      }
-    },
-
-    _hasDeactivateListener : function( widget ) {
-      return widget.getUserData( "deactivateListener" ) === true;
-    },
-
-    _hasActivateListener : function( widget ) {
-      return widget.getUserData( "activateListener" ) === true;
-    },
-
-    _onChangeFocusedChild : function( evt ) {
-      if( rwt.remote.EventUtil.getSuspended() ) {
-        this._focusControl = this.getFocusedChild();
-      }
-    },
-
-    _onChangeActive : function( evt ) {
-      // TODO [rst] This hack is a workaround for bug 345 in qooxdoo, remove this
-      //      block as soon as the bug is fixed.
-      //      See http://bugzilla.qooxdoo.org/show_bug.cgi?id=345
-      if( !this.getActive() && !isFinite( this.getZIndex() ) ) {
-        this.setZIndex( 1e8 );
-      }
-      // end of workaround
-      if( !rwt.remote.EventUtil.getSuspended() && this.getActive() ) {
-        rwt.remote.Server.getInstance().getRemoteObject( this ).notify( "Activate" );
-      }
-      var active = evt.getValue();
-      if( active ) {
-        // workaround: Do not activate Shells that are blocked by a modal Shell
-        var modalShell = rwt.widgets.Shell._upperModalShell;
-        if( modalShell != null && modalShell.getZIndex() > this.getZIndex() ) {
-          this.setActive( false );
-          modalShell.setActive( true );
-        }
-        // end of workaround
-      }
-    },
-
-    _onChangeMode : function( evt ) {
-      var value = evt.getValue();
-      rwt.remote.Server.getInstance().getRemoteObject( evt.getTarget() ).set( "mode", value );
-    },
-
-    _onChangeSize : function( evt ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        this._sendBounds();
-        if( this._hasResizeListener ) {
-          var server = rwt.remote.Server.getInstance();
-          server.getRemoteObject( this ).notify( "Resize", {} );
-        }
-      }
-    },
-
-    _onChangeLocation : function( evt ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        this._sendBounds();
-        if( this._hasMoveListener ) {
-          var server = rwt.remote.Server.getInstance();
-          server.getRemoteObject( this ).notify( "Move", {} );
-        }
-      }
-    },
-
-    _sendBounds : function() {
-      var server = rwt.remote.Server.getInstance();
-      var left = this._parseNumber( this.getLeft() );
-      var top = this._parseNumber( this.getTop() );
-      var height = this._parseNumber( this.getHeightValue() );
-      var width = this._parseNumber( this.getWidthValue() );
-      server.getRemoteObject( this ).set( "bounds", [ left, top, width, height ] );
-    },
-
-    _parseNumber : function( value ) {
-      var result = parseInt( value, 10 );
-      return isNaN( result ) ? 0 : result;
-    },
-
-    _onKeydown : function( evt ) {
-      var keyId = evt.getKeyIdentifier();
-      if(    keyId == "Enter"
-          && !evt.isShiftPressed()
-          && !evt.isAltPressed()
-          && !evt.isCtrlPressed()
-          && !evt.isMetaPressed() )
-      {
-        var defButton = this.getDefaultButton();
-        if( defButton != null && defButton.isSeeable() ) {
-          defButton.setFocused( true );
-          defButton.execute();
-        }
-      } else if( keyId == "Escape" && this._parentShell != null ) {
-        this.close();
-      }
-    },
-
-    _onSend : function( evt ) {
-      if( this.getActive() ) {
-        var focusedChild = this.getFocusedChild();
-        if( focusedChild != null && focusedChild != this._focusControl ) {
-          this._focusControl = focusedChild;
-          var widgetManager = rwt.remote.WidgetManager.getInstance();
-          var focusedChildId = widgetManager.findIdByWidget( focusedChild );
-          var server = rwt.remote.Server.getInstance();
-          var serverDisplay = server.getRemoteObject( rwt.widgets.Display.getCurrent() );
-          serverDisplay.set( "focusControl", focusedChildId );
-        }
-      }
-    },
-
-    /**
-     * Returns the parent Control for the given widget. If widget is a Control
-     * itself, the widget is returned. Otherwise its parent is returned or null
-     * if there is no parent
-     */
-    _getParentControl : function( widget ) {
-      var widgetMgr = rwt.remote.WidgetManager.getInstance();
-      var result = widget;
-      while( result != null && !widgetMgr.isControl( result ) ) {
-        if( result.getParent ) {
-          result = result.getParent();
-        } else {
-          result = null;
-        }
-      }
-      return result;
-    },
-
-    /**
-     * Returns true if the receiver is a dialog shell of the given parent shell,
-     * directly or indirectly.
-     */
-    isDialogOf : function( shell ) {
-      var result = false;
-      var parentShell = this._parentShell;
-      while( !result && parentShell != null ) {
-        result = shell === parentShell;
-        parentShell = parentShell._parentShell;
-      }
-      return result;
-    },
-
-    /**
-     * Returns the top-level shell if the receiver is a dialog or the shell
-     * itself if it is a top-level shell.
-     */
-    getTopLevelShell : function() {
-      var result = this;
-      while( result._parentShell != null ) {
-        result = result._parentShell;
-      }
-      return result;
-    },
-
-    /* TODO [rst] Revise when upgrading: overrides the _sendTo() function in
-     *      superclass Window to allow for always-on-top.
-     *      --> http://bugzilla.qooxdoo.org/show_bug.cgi?id=367
-     */
-    _sendTo : function() {
-      rwt.widgets.Shell.reorderShells( this.getWindowManager() );
-    },
-
-    /*
-     * Overwrites Popup#bringToFront
-     */
-    bringToFront : function() {
-      var targetShell = this;
-      while( targetShell._parentShell != null ) {
-        targetShell = targetShell._parentShell;
-      }
-      this._setRenderZIndex( false );
-      this.setZIndex( rwt.widgets.Shell.MAX_ZINDEX + 1 );
-      targetShell.setZIndex( rwt.widgets.Shell.MAX_ZINDEX + 1 );
-      rwt.widgets.Shell.reorderShells( this.getWindowManager() );
-      this._setRenderZIndex( true );
-    },
-
-    _applyZIndex : function( newValue, oldValue ) {
-      if( this._renderZIndex ) {
-        this.base( arguments, newValue, oldValue );
-      }
-    },
-
-    _setRenderZIndex : function( value ) {
-       // Needed to prevent flickering during display-overlay animations.
-      this._renderZIndex = value;
-      if( value ) {
-        this._applyZIndex( this.getZIndex() );
-      }
-    },
-
-    /*
-     * Overwrites Popup#sendToBack
-     */
-    sendToBack : function() {
-      var targetShell = this;
-      while( targetShell._parentShell != null ) {
-        targetShell = targetShell._parentShell;
-      }
-      this._setRenderZIndex( false );
-      this.setZIndex( rwt.widgets.Shell.MIN_ZINDEX - 1 );
-      targetShell.setZIndex( rwt.widgets.Shell.MIN_ZINDEX - 1 );
-      rwt.widgets.Shell.reorderShells( this.getWindowManager() );
-      this._setRenderZIndex( true );
-    },
-
-    /*
-     * E X P E R I M E N T A L
-     * (for future PRIMARY_MODAL support)
-     */
-    setBlocked : function( blocked ) {
-      if( blocked ) {
-        if( !this._blocker ) {
-          this._blocker = new rwt.widgets.base.Parent();
-          this._blocker.setAppearance( "client-document-blocker" );
-          this.add( this._blocker );
-        }
-        this._blocker.setSpace( 0, 0, 10000, 10000 );
-        this._blocker.setZIndex( 1000 );
-      } else {
-        if( this._blocker ) {
-          this.remove( this._blocker );
-          this._blocker.destroy();
-          this._blocker = null;
-        }
-      }
-    },
-
-    setFullScreen : function( fullScreen ) {
-      if( fullScreen ) {
-        this._captionBar.setDisplay( false );
-      } else {
-        this._captionBar.setDisplay( this.hasState( "rwt_TITLE" ) );
-      }
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.Shell", {
-
-  factory : function( properties ) {
-    var adapterUtil = rwt.remote.HandlerUtil;
-    var styles = adapterUtil.createStyleMap( properties.style );
-    var result = new rwt.widgets.Shell( styles );
-    adapterUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    adapterUtil.callWithTarget( properties.parentShell, function( parentShell ) {
-      if( parentShell ) {
-        result.setParentShell( parentShell );
-      }
-      result.initialize();
-    } );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "showMinimize",
-    "allowMinimize",
-    "showMaximize",
-    "allowMaximize",
-    "showClose",
-    "allowClose",
-    "resizable",
-    "image",
-    "text",
-    "alpha",
-    "active",
-    "mode",
-    "hasShellListener",
-    "minimumSize",
-    "defaultButton",
-    "activeControl"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    // Overwrites original bounds handler, see bug 306042 and 354597
-    "bounds" : function( widget, value ) {
-      if( !widget.isDisableResize() ) {
-        widget.setLeft( value[ 0 ] );
-        widget.setTop( value[ 1 ] );
-        widget.setWidth( value[ 2 ] );
-        widget.setHeight( value[ 3 ] );
-      }
-    },
-    "alpha" : function( shell, alpha ) {
-      shell.setOpacity( alpha / 255 );
-    },
-    "defaultButton" : function( shell, value ) {
-      rwt.remote.HandlerUtil.callWithTarget( value, function( widget ) {
-        shell.setDefaultButton( widget );
-      } );
-    },
-    "activeControl" : function( shell, value ) {
-      rwt.remote.HandlerUtil.callWithTarget( value, function( widget ) {
-        shell.setActiveControl( widget );
-      } );
-    },
-    "mode" : function( shell, value ) {
-      var fullscreen = value === "fullscreen";
-      shell.setMode( fullscreen ? "maximized" : value );
-      shell.setFullScreen( fullscreen );
-    },
-    "minimumSize" : function( shell, value ) {
-      shell.setMinWidth( value[ 0 ] );
-      shell.setMinHeight( value[ 1 ] );
-    },
-    "text" : function( shell, value ) {
-      var text = rwt.util.Encoding.escapeText( value, false );
-      shell.setCaption( text );
-    },
-    "image" : function( shell, value ) {
-      if( value === null ) {
-        shell.setIcon( value );
-      } else {
-        shell.setIcon( value[ 0 ] );
-      }
-    },
-    "visibility" : function( shell, value ) {
-      if( value ) {
-        shell.show();
-      } else {
-        shell.hide();
-      }
-      rwt.widgets.Shell.reorderShells( shell.getWindowManager() );
-    }
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [
-    "Activate",
-    "Close",
-    "Resize",
-    "Move"
-  ] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2002, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.ProgressBar", {
-  extend : rwt.widgets.base.Parent,
-
-  construct : function() {
-    this.base( arguments );
-    this.setOverflow( "hidden" );
-    this.setAppearance( "progressbar" );
-    this.setState( "normal" );
-    this._timer = null;
-    this._gfxCanvasAppended = false;
-    // TODO [tb] : Create a superclass for vector-based widgets (canvas?)
-    this._canvas = null;
-    this._backgroundShape = null;
-    this._indicatorShape = null;
-    this._borderShape = null;
-    this._useBorderShape = false;
-    this._gfxBorderWidth = 0;
-    this._indicatorVirtualPosition = 0;
-    this._separatorStartShape = null;
-    this._separatorEndShape = null;
-    this._useSeparator = false;
-    this._separatorWidth = 0;
-    this._minimum = 0;
-    this._maximum = 100;
-    this._selection = 0;
-  },
-
-  destruct : function() {
-    if( this._timer != null ) {
-      this._timer.stop();
-      this._timer.dispose();
-    }
-    this._timer = null;
-    this._canvas = null;
-    this._backgroundShape = null;
-    this._indicatorShape = null;
-    this._borderShape = null;
-    this._separatorStartShape = null;
-    this._separatorEndShape = null;
-  },
-
-  statics : {
-    UNDETERMINED_SIZE : 40
-  },
-
-  events : {
-    "minimumChanged" : "rwt.event.Event",
-    "maximumChanged" : "rwt.event.Event",
-    "selectionChanged" : "rwt.event.Event"
-  },
-
-  properties : {
-
-    indicatorColor : {
-      nullable : true,
-      init : null,
-      apply : "_applyIndicatorFill",
-      themeable : true
-    },
-
-    // TODO [tb] : wrong offset in IE when vertical (or undetermined)
-    indicatorImage : {
-      nullable : true,
-      init : null,
-      apply : "_applyIndicatorFill",
-      themeable : true
-    },
-
-    indicatorGradient : {
-      nullable : true,
-      init : null,
-      apply : "_applyIndicatorFill",
-      themeable : true
-    },
-
-    indicatorOpacity : {
-      nullable : true,
-      init : 1,
-      apply : "_applyIndicatorFill",
-      themeable : true
-    },
-
-    backgroundImageSized : {
-      nullable : true,
-      init : null,
-      apply : "_applyBackgroundImageSized",
-      themeable : true
-    },
-
-    separatorBorder : {
-      nullable : true,
-      init : null,
-      apply : "_applySeparatorBorder",
-      themeable : true
-    }
-
-  },
-
-  members : {
-
-    //////
-    // API
-
-    setMinimum : function( minimum ) {
-      this._minimum = minimum;
-      this.dispatchSimpleEvent( "minimumChanged" );
-    },
-
-    setMaximum : function( maximum ) {
-      this._maximum = maximum;
-      this.dispatchSimpleEvent( "maximumChanged" );
-    },
-
-    setSelection : function( selection ) {
-      this._selection = selection;
-      this.addToQueue( "indicatorSelection" );
-      this.dispatchSimpleEvent( "selectionChanged" );
-    },
-
-    addState : function( state ) {
-      if( state === "rwt_INDETERMINATE" ) {
-        this._timer = new rwt.client.Timer( 120 );
-        this._timer.addEventListener( "interval", this._onInterval, this );
-        this._timer.start();
-      }
-      this.base( arguments, state );
-    },
-
-    setState : function( state ) {
-      if( state == "error" ) {
-        this.removeState( "normal" );
-        this.removeState( "paused" );
-        this.addState( "error" );
-      } else if( state == "paused" ) {
-        this.removeState( "normal" );
-        this.removeState( "error" );
-        this.addState( "paused" );
-      } else {
-        this.removeState( "error" );
-        this.removeState( "paused" );
-        this.addState( "normal" );
-      }
-    },
-
-    //////////////
-    // state-info
-
-    _isIndeterminate : function() {
-      return this.hasState( "rwt_INDETERMINATE" );
-    },
-
-    _isHorizontal : function() {
-      return this.hasState( "rwt_HORIZONTAL" );
-    },
-
-    _isVertical : function() {
-      return this.hasState( "rwt_VERTICAL" );
-    },
-
-    ////////////////
-    // apply-methods
-
-    // OVERWRITTEN, called indirectly by _applyBorder in rwt.widgets.base.Widget
-    _queueBorder : function( value ) {
-      this.addToQueue( "indicatorBorder" );
-      if( value && value.getStyle() === "rounded" ) {
-        // rounded borders are to be ignored by the qooxdoo-layouting:
-        this._cachedBorderTop = 0;
-        this._cachedBorderRight = 0;
-        this._cachedBorderBottom = 0;
-        this._cachedBorderLeft = 0;
-        this._invalidateFrameDimensions();
-      } else {
-        this.base( arguments, value );
-      }
-    },
-
-    // Overwritten from Widget
-    _applyBackgroundColor : function( value ) {
-      if( this._gfxCanvasAppended ) {
-        this._styleBackgroundFill();
-      }
-    },
-
-    // OVERWRITTEN FROM rwt.widgets.util.GraphicsMixin
-    _applyBackgroundGradient : function( value ) {
-      if( this._gfxCanvasAppended ) {
-        this._styleBackgroundFill();
-      }
-    },
-
-    _applyBackgroundImage : function( value ) {
-      // nothing to do, uses _applyBackgroundImageSized instead
-    },
-
-    _applyBackgroundImageSized : function( value ) {
-      if( this._gfxCanvasAppended ) {
-        this._styleBackgroundFill();
-      }
-    },
-
-    _applyIndicatorFill : function( value ) {
-      if( this._gfxCanvasAppended ) {
-        this._styleIndicatorFill();
-      }
-    },
-
-    _applySeparatorBorder : function( value ) {
-      this.addToQueue( "separatorBorder" );
-    },
-
-    ///////////////
-    // eventhandler
-
-    _onCanvasAppear : function() {
-      rwt.graphics.GraphicsUtil.handleAppear( this._canvas );
-    },
-
-    _onInterval : function() {
-      if( this.isSeeable() ) {
-        this._renderIndicatorSelection();
-      }
-    },
-
-    ///////
-    // core
-
-    _layoutPost : function( changes ) {
-      if( !this._gfxCanvasAppended ) {
-        this._createCanvas();
-      }
-      var dimensionChanged =    changes.width
-                             || changes.height
-                             || changes.frameWidth
-                             || changes.frameHeight
-                             || changes.initial;
-      if( changes.separatorBorder ) {
-        this._styleSeparatorBorder();
-      }
-      if( changes.indicatorBorder ) {
-        this._styleIndicatorBorder();
-      }
-      if( changes.indicatorBorder || dimensionChanged ) {
-        this._renderDimension();
-        this._renderIndicatorSelection();
-      } else if( changes.indicatorSelection || changes.separatorBorder ) {
-        this._renderIndicatorSelection();
-      }
-    },
-
-    _createCanvas : function() {
-      var GraphicsUtil = rwt.graphics.GraphicsUtil;
-      this._canvas = GraphicsUtil.createCanvas();
-      this._getTargetNode().appendChild( GraphicsUtil.getCanvasNode( this._canvas ) );
-      this._gfxCanvasAppended = true;
-      this.addEventListener( "insertDom", this._onCanvasAppear );
-      this._backgroundShape = GraphicsUtil.createShape( "roundrect" );
-      this._indicatorShape = GraphicsUtil.createShape( "roundrect" );
-      GraphicsUtil.addToCanvas( this._canvas, this._backgroundShape );
-      GraphicsUtil.addToCanvas( this._canvas, this._indicatorShape );
-      this._styleBackgroundFill();
-      this._styleIndicatorFill();
-      if( this.isSeeable() ) {
-        this._onCanvasAppear();
-      }
-    },
-
-    ///////////////
-    // render style
-
-    _styleIndicatorBorder : function() {
-      var GraphicsUtil = rwt.graphics.GraphicsUtil;
-      if( this.getBorder() && this.getBorder().getStyle() === "rounded" ) {
-        if( !this._useBorderShape ) {
-          this._style.border = "";
-          if( this._borderShape == null ) {
-            this._borderShape = GraphicsUtil.createShape( "roundrect" );
-          }
-          GraphicsUtil.addToCanvas( this._canvas, this._borderShape );
-          this._useBorderShape = true;
-        }
-        this._gfxBorderWidth = this._getMaxBorderWidth( this.getBorder() );
-        var color = this.getBorder().getColor();
-        // NOTE : Different widths for different edges are not supported
-        GraphicsUtil.setStroke( this._borderShape, color, this._gfxBorderWidth );
-      } else {
-        if( this._useBorderShape ) {
-          GraphicsUtil.removeFromCanvas( this._canvas, this._borderShape );
-          this._useBorderShape = true;
-          this._gfxBorderWidth = 0;
-        }
-      }
-    },
-
-    _styleSeparatorBorder : function() {
-      var GraphicsUtil = rwt.graphics.GraphicsUtil;
-      var border = this.getSeparatorBorder();
-      if( border != null ) {
-        if( !this._useSeparator ) {
-          if( this._isIndeterminate() ) {
-            if( this._separatorStartShape == null ) {
-              this._separatorStartShape = GraphicsUtil.createShape( "rect" );
-            }
-            GraphicsUtil.addToCanvas( this._canvas, this._separatorStartShape );
-          }
-          if( this._separatorEndShape == null ) {
-            this._separatorEndShape = GraphicsUtil.createShape( "rect" );
-          }
-          GraphicsUtil.addToCanvas( this._canvas, this._separatorEndShape );
-          this._useSeparator = true;
-        }
-        this._separatorWidth = this._getMaxBorderWidth( border );
-        // use one color for all edges:
-        var color = border.getColorTop();
-        GraphicsUtil.setFillColor( this._separatorEndShape, color );
-        if( this._isIndeterminate() ) {
-          GraphicsUtil.setFillColor( this._separatorStartShape, color );
-        }
-      } else if( this._useSeparator ) {
-        GraphicsUtil.removeFromCanvas( this._canvas, this._separatorEndShape );
-        this._useSeparator = false;
-        if( this._isIndeterminate() ) {
-          GraphicsUtil.removeFromCanvas( this._canvas, this._separatorStartShape );
-        }
-        this._separatorWidth = 0;
-      }
-    },
-
-    // indicator and separator do not support different border-widths
-    _getMaxBorderWidth : function( border ) {
-      var maxWidth = 0;
-      maxWidth = Math.max( maxWidth, border.getWidthTop() );
-      maxWidth = Math.max( maxWidth, border.getWidthLeft() );
-      maxWidth = Math.max( maxWidth, border.getWidthRight() );
-      maxWidth = Math.max( maxWidth, border.getWidthBottom() );
-      return maxWidth;
-    },
-
-    _styleIndicatorFill : function() {
-      var GraphicsUtil = rwt.graphics.GraphicsUtil;
-      if( this.getIndicatorImage() != null && this.getIndicatorImage()[ 0 ] != null ) {
-        var image = this.getIndicatorImage();
-        GraphicsUtil.setFillPattern( this._indicatorShape, image[ 0 ], image[ 1 ], image[ 2 ] );
-      } else if( this.getIndicatorGradient() != null ) {
-        GraphicsUtil.setFillGradient( this._indicatorShape, this.getIndicatorGradient() );
-      } else {
-        GraphicsUtil.setFillColor( this._indicatorShape, this.getIndicatorColor() );
-      }
-      GraphicsUtil.setOpacity( this._indicatorShape, this.getIndicatorOpacity() );
-    },
-
-    _styleBackgroundFill : function() {
-      var GraphicsUtil = rwt.graphics.GraphicsUtil;
-      if( this.getBackgroundImageSized() != null && this.getBackgroundImageSized()[ 0 ] != null ) {
-        var image = this.getBackgroundImageSized();
-        GraphicsUtil.setFillPattern( this._backgroundShape, image[ 0 ], image[ 1 ], image[ 2 ] );
-      } else if( this.getBackgroundGradient() != null ) {
-        GraphicsUtil.setFillGradient( this._backgroundShape, this.getBackgroundGradient() );
-      } else {
-        GraphicsUtil.setFillColor( this._backgroundShape, this.getBackgroundColor() );
-      }
-    },
-
-    ////////////////
-    // render layout
-
-    _renderDimension : function() {
-      var GraphicsUtil = rwt.graphics.GraphicsUtil;
-      var radii = [ 0, 0, 0, 0 ];
-      var width = this.getInnerWidth();
-      var height = this.getInnerHeight();
-      if( this._useBorderShape ) {
-        radii = this.getBorder().getRadii();
-        GraphicsUtil.setRoundRectLayout( this._borderShape,
-                                         this._gfxBorderWidth / 2,
-                                         this._gfxBorderWidth / 2,
-                                         width - this._gfxBorderWidth,
-                                         height - this._gfxBorderWidth,
-                                         radii );
-      }
-      GraphicsUtil.setRoundRectLayout( this._backgroundShape,
-                                       this._gfxBorderWidth / 2,
-                                       this._gfxBorderWidth / 2,
-                                       width - this._gfxBorderWidth,
-                                       height - this._gfxBorderWidth,
-                                       radii );
-    },
-
-    _renderIndicatorSelection : function() {
-      var GraphicsUtil = rwt.graphics.GraphicsUtil;
-      var virtualPosition = this._getIndicatorVirtualPosition();
-      var position = Math.max( virtualPosition, 0 );
-      var length = this._getIndicatorLength( virtualPosition );
-      if( length > 0 ) {
-        var radii = this._getIndicatorRadii( position, length );
-        // adjust position and length to hide edges under the border
-        var displayPosition = position;
-        var displayLength = length;
-        if( position + length == this._getIndicatorFullLength() ) {
-          displayLength += this._gfxBorderWidth / 2;
-        } else {
-          // this is done to reduce flickering in IE:
-          displayLength += this._separatorWidth;
-        }
-        if( displayPosition === 0 ) {
-          displayPosition += this._gfxBorderWidth / 2;
-          displayLength += this._gfxBorderWidth / 2;
-        } else {
-          displayPosition += this._gfxBorderWidth;
-        }
-        // compute bounds
-        var vertical = this._isVertical();
-        var width =   vertical
-                    ? this.getInnerWidth() - this._gfxBorderWidth
-                    : displayLength;
-        var height =   vertical
-                     ? displayLength
-                     : this.getInnerHeight() - this._gfxBorderWidth;
-        var top =   vertical
-                  ? this.getInnerHeight() - ( displayPosition + displayLength )
-                  : this._gfxBorderWidth / 2;
-        var left = vertical ? this._gfxBorderWidth / 2 : displayPosition;
-        var shape = this._indicatorShape;
-        GraphicsUtil.setDisplay( this._indicatorShape, true );
-        GraphicsUtil.setRoundRectLayout( shape, left, top, width, height, radii );
-      } else {
-        GraphicsUtil.setDisplay( this._indicatorShape, false );
-      }
-      if( this._useSeparator ) {
-        this._renderSeparator( position, length );
-      }
-    },
-
-    _renderSeparator : function( position, length ) {
-      var GraphicsUtil = rwt.graphics.GraphicsUtil;
-      var full = length + position == this._getIndicatorFullLength();
-      if( length === 0 ) {
-        GraphicsUtil.setDisplay( this._separatorEndShape, false );
-        if( this._isIndeterminate() ) {
-          GraphicsUtil.setDisplay( this._separatorStartShape, false );
-        }
-      } else {
-        GraphicsUtil.setDisplay( this._separatorEndShape, !full );
-        if( this._isIndeterminate() ) {
-          GraphicsUtil.setDisplay( this._separatorStartShape, position !== 0 );
-        }
-        var displayPosition = position + this._gfxBorderWidth - this._separatorWidth;
-        var displayLength = length + 2 * this._separatorWidth;
-        if( this._isVertical() ) {
-          var left = this._gfxBorderWidth;
-          var top = this.getInnerHeight() - ( displayLength + displayPosition );
-          var width = this.getInnerWidth() - 2 * this._gfxBorderWidth;
-          var height = this._separatorWidth;
-          var shape = this._separatorEndShape;
-          if( !full ) {
-            GraphicsUtil.setRectBounds( shape, left, top, width, height );
-          }
-          if( position !== 0 ) {
-            top = this.getInnerHeight() - displayPosition - this._separatorWidth;
-            shape = this._separatorStartShape;
-            GraphicsUtil.setRectBounds( shape, left, top, width, height );
-          }
-        } else {
-          var left = displayPosition + displayLength - this._separatorWidth;
-          var top = this._gfxBorderWidth;
-          var width = this._separatorWidth;
-          var height = this.getInnerHeight() - 2 * this._gfxBorderWidth;
-          var shape = this._separatorEndShape;
-          if( !full ) {
-            GraphicsUtil.setRectBounds( shape, left, top, width, height );
-          }
-          if( position !== 0 ) {
-            left = displayPosition;
-            shape = this._separatorStartShape;
-            GraphicsUtil.setRectBounds( shape, left, top, width, height );
-          }
-        }
-      }
-    },
-
-    ////////////////
-    // layout helper
-
-    _getIndicatorLength : function( virtualPosition ) {
-      var result = this._getIndicatorVirtualLength();
-      var fullLength = this._getIndicatorFullLength();
-      if( this._isIndeterminate() ) {
-        // shorten the length to fit in the bar
-        if( virtualPosition < 0 ) {
-          result += virtualPosition;
-        }
-        if( ( virtualPosition + result ) > fullLength ) {
-          result = fullLength - virtualPosition;
-        }
-      } else if( this._useBorderShape ) {
-        // round length so it falls into a save area, position is assumed 0
-        var minLength = this._getIndicatorMinSafeLength();
-        var maxLength = this._getIndicatorMaxSafeLength();
-        if( result < minLength ) {
-          if( result > 0 ) {
-            result = minLength;
-          } else {
-            result = 0;
-          }
-        }
-        if( result > maxLength && result < fullLength ) {
-          result = maxLength;
-        }
-      }
-      return Math.round( result );
-    },
-
-    _getIndicatorVirtualLength : function() {
-      var result;
-      if( this._isIndeterminate() ) {
-        result = rwt.widgets.ProgressBar.UNDETERMINED_SIZE;
-      } else {
-        var fullLength = this._getIndicatorFullLength();
-        var selected = this._selection - this._minimum;
-        var max = this._maximum - this._minimum;
-        result = ( selected / max ) * fullLength;
-      }
-      return result;
-    },
-
-    _getIndicatorVirtualPosition : function() {
-      var result = 0;
-      if( this._isIndeterminate() ) {
-        result = this._computeNextSaveIndicatorPosition();
-      }
-      return result;
-    },
-
-    _computeNextSaveIndicatorPosition : function() {
-      var length = rwt.widgets.ProgressBar.UNDETERMINED_SIZE;
-      var fullLength = this._getIndicatorFullLength();
-      var position = this._indicatorVirtualPosition + 2;
-      if( this._useBorderShape ) {
-        var minWidth = this._getIndicatorMinSafeLength();
-        var maxWidth = this._getIndicatorMaxSafeLength();
-        var endPosition = position + length;
-        if( endPosition > 0 && endPosition < minWidth ) {
-          position = minWidth - length;
-        }
-        if( position > 0 && position < minWidth ) {
-          position = minWidth;
-        }
-        endPosition = position + length;
-        if( endPosition > maxWidth && endPosition < fullLength ) {
-          position = fullLength - length;
-        }
-        if( position > maxWidth ) {
-          position = -length;
-        }
-      } else if( position >= fullLength ) {
-        position = -length;
-      }
-      this._indicatorVirtualPosition = position;
-      return position;
-    },
-
-    _getIndicatorRadii : function( position, length ) {
-      // works under the assumption that positon and length are "radii-save"
-      var result = [ 0, 0, 0, 0 ];
-      if( this._useBorderShape && length > 0 ) {
-        var radii = this.getBorder().getRadii();
-        var endPosition = position + length;
-        var fullLength = this._getIndicatorFullLength();
-        if( this._isVertical() ) {
-          if( position === 0 ) {
-            result[ 2 ] = radii[ 2 ];
-            result[ 3 ] = radii[ 3 ];
-          }
-          if( endPosition == fullLength ) {
-            result[ 0 ] = radii[ 0 ];
-            result[ 1 ] = radii[ 1 ];
-          }
-        } else {
-          if( position === 0 ) {
-            result[ 0 ] = radii[ 0 ];
-            result[ 3 ] = radii[ 3 ];
-          }
-          if( endPosition == fullLength ) {
-            result[ 1 ] = radii[ 1 ];
-            result[ 2 ] = radii[ 2 ];
-          }
-        }
-      }
-      return result;
-    },
-
-    _getIndicatorFullLength : function() {
-      return   this._isVertical()
-             ? this.getInnerHeight() - 2 * this._gfxBorderWidth
-             : this.getInnerWidth() - 2 * this._gfxBorderWidth;
-    },
-
-    // minimal indicator-length for the left/lower rounded corners to work
-    _getIndicatorMinSafeLength : function() {
-      var radii = this.getBorder().getRadii();
-      var result =   this._isVertical()
-                   ? Math.max( radii[ 2 ], radii[ 3 ] )
-                   : Math.max( radii[ 0 ], radii[ 3 ] );
-      result += this._separatorWidth;
-      result -= Math.floor( this._gfxBorderWidth / 2 );
-      return result;
-    },
-
-    // maximum indicator-length for the right/upper corners to be rectangular
-    _getIndicatorMaxSafeLength : function() {
-      var radii = this.getBorder().getRadii();
-      var fullLength = this._getIndicatorFullLength();
-      var result =   this._isVertical()
-                   ? fullLength - Math.max( radii[ 0 ], radii[ 1 ] )
-                   : fullLength - Math.max( radii[ 1 ], radii[ 2 ] );
-      result -= this._separatorWidth;
-      result += Math.floor( this._gfxBorderWidth / 2 );
-      return result;
-    }
-
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.ProgressBar", {
-
-  factory : function( properties ) {
-    var result = new rwt.widgets.ProgressBar();
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    // [if] Important: Order matters - minimum, maximum, selection
-    "minimum",
-    "maximum",
-    "selection",
-    "state"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    // Overrides original backgroundImage handler
-    "backgroundImage" : function( widget, value ) {
-      if( value === null ) {
-        widget.resetBackgroundImageSized();
-      } else {
-        widget.setBackgroundImageSized( value );
-      }
-    }
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2009, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-/**
- * This class provides the client-side implementation for
- * rwt.widgets.Link
- */
-rwt.qx.Class.define( "rwt.widgets.Link", {
-  extend : rwt.widgets.base.Parent,
-
-  construct : function() {
-    this.base( arguments );
-    this.setAppearance( "link" );
-    this._text = "";
-    this._hasSelectionListener = false;
-    this._hyperlinksHaveListeners = false;
-    this._readyToSendChanges = true;
-    this._focusedLinkIndex = -1;
-    this._linksCount = 0;
-    this._link = new rwt.widgets.base.HtmlEmbed();
-    this._link.setAppearance( "link-text" );
-    this.add( this._link );
-    this.setSelectable( false );
-    this.setHideFocus( true );
-    this.__onMouseDown = rwt.util.Functions.bindEvent( this._onMouseDown, this );
-    this.__onMouseOver = rwt.util.Functions.bindEvent( this._onMouseOver, this );
-    this.__onMouseOut = rwt.util.Functions.bindEvent( this._onMouseOut, this );
-    this.__onKeyDown = rwt.util.Functions.bindEvent( this._onKeyDown, this );
-    this.addEventListener( "appear", this._onAppear, this );
-    this.addEventListener( "changeEnabled", this._onChangeEnabled, this );
-    this.addEventListener( "keypress", this._onKeyPress );
-    this.addEventListener( "focusout", this._onFocusOut );
-    this._link.addEventListener( "changeHtml", this._onChangeHtml, this );
-  },
-
-  destruct : function() {
-    this._removeEventListeners();
-    delete this.__onMouseDown;
-    delete this.__onMouseOver;
-    delete this.__onMouseOut;
-    delete this.__onKeyDown;
-    this.removeEventListener( "appear", this._onAppear, this );
-    this.removeEventListener( "changeEnabled", this._onChangeEnabled, this );
-    this.removeEventListener( "keypress", this._onKeyPress );
-    this.removeEventListener( "focusout", this._onFocusOut );
-    this._link.removeEventListener( "changeHtml", this._onChangeHtml, this );
-    this._link.dispose();
-  },
-
-  members : {
-
-    _onAppear : function( evt ) {
-      this._link.setTabIndex( null );
-      this._link.setHideFocus( true );
-      this._applyHyperlinksStyleProperties();
-      this._addEventListeners();
-    },
-
-    _onChangeHtml : function( evt ) {
-      this._applyHyperlinksStyleProperties();
-      this._addEventListeners();
-    },
-
-    _applyTextColor : function( value, old ) {
-      this.base( arguments, value, old );
-      this._applyHyperlinksStyleProperties();
-    },
-
-    _onChangeEnabled : function( evt ) {
-      this._applyHyperlinksStyleProperties();
-      this._changeHyperlinksTabIndexProperty();
-    },
-
-    _getStates : function() {
-      if( !this.__states ) {
-        this.__states = {};
-      }
-      return this.__states;
-    },
-
-    addState : function( state ) {
-      this.base( arguments, state );
-      this._link.addState( state );
-    },
-
-    removeState : function( state ) {
-      this.base( arguments, state );
-      this._link.removeState( state );
-    },
-
-    setHasSelectionListener : function( value ) {
-      this._hasSelectionListener = value;
-    },
-
-    addText : function( text ) {
-      this._text += text;
-    },
-
-    addLink : function( text, index ) {
-      var style = this._getHyperlinkStyle( false );
-      var widgetManager = rwt.remote.WidgetManager.getInstance();
-      var id = widgetManager.findIdByWidget( this ) + "#" + index;
-      this._text += "<span tabIndex=\"1\" ";
-      this._text += "style=\"";
-      this._text += "text-decoration:" + style.textDecoration + "; ";
-      this._text += "\" ";
-      this._text += "id=\"" + id + "\"";
-      this._text += ">";
-      this._text += text;
-      this._text += "</span>";
-      this._linksCount++;
-    },
-
-    applyText : function() {
-      this._link.setHtml( this._text );
-      if( this._linksCount === 0 ) {
-        this.setTabIndex( null );
-      } else {
-        this.setTabIndex( 1 );
-      }
-    },
-
-    clear : function() {
-      this._removeEventListeners();
-      this._text = "";
-      this._linksCount = 0;
-      this._focusedLinkIndex = -1;
-    },
-
-    _applyHyperlinksStyleProperties : function() {
-      var style = this._getHyperlinkStyle( false );
-      var hyperlinks = this._getHyperlinkElements();
-      for( var i = 0; i < hyperlinks.length; i++ ) {
-        rwt.html.Style.setStyleProperty( hyperlinks[ i ], "color", style.textColor );
-        rwt.html.Style.setTextShadow( hyperlinks[ i ], style.textShadow );
-        rwt.html.Style.setStyleProperty( hyperlinks[ i ], "cursor", style.cursor );
-      }
-    },
-
-    _changeHyperlinksTabIndexProperty : function() {
-      var hyperlinks = this._getHyperlinkElements();
-      for( var i = 0; i < hyperlinks.length; i++ ) {
-        if( this.isEnabled() ) {
-          hyperlinks[ i ].tabIndex = "1";
-        } else {
-          hyperlinks[ i ].tabIndex = "-1";
-        }
-      }
-    },
-
-    // TODO [tb] : This is way more complicated than it needs to be.
-    //             There is no need to work on DOM-level except when handling the event.
-    _addEventListeners : function() {
-      var hyperlinks = this._getHyperlinkElements();
-      if( hyperlinks.length > 0 && !this._hyperlinksHaveListeners ) {
-        for( var i = 0; i < hyperlinks.length; i++ ) {
-          rwt.html.EventRegistration.addEventListener( hyperlinks[ i ],
-                                                      "mousedown",
-                                                      this.__onMouseDown );
-          rwt.html.EventRegistration.addEventListener( hyperlinks[ i ],
-                                                      "mouseover",
-                                                      this.__onMouseOver );
-          rwt.html.EventRegistration.addEventListener( hyperlinks[ i ],
-                                                      "mouseout",
-                                                      this.__onMouseOut );
-          rwt.html.EventRegistration.addEventListener( hyperlinks[ i ],
-                                                      "keydown",
-                                                      this.__onKeyDown );
-        }
-        this._hyperlinksHaveListeners = true;
-      }
-    },
-
-    _removeEventListeners : function() {
-      var hyperlinks = this._getHyperlinkElements();
-      if( hyperlinks.length > 0 && this._hyperlinksHaveListeners ) {
-        for( var i = 0; i < hyperlinks.length; i++ ) {
-          rwt.html.EventRegistration.removeEventListener( hyperlinks[ i ],
-                                                         "mousedown",
-                                                         this.__onMouseDown );
-          rwt.html.EventRegistration.removeEventListener( hyperlinks[ i ],
-                                                         "mouseover",
-                                                         this.__onMouseOver );
-          rwt.html.EventRegistration.removeEventListener( hyperlinks[ i ],
-                                                         "mouseout",
-                                                         this.__onMouseOut );
-          rwt.html.EventRegistration.removeEventListener( hyperlinks[ i ],
-                                                         "keydown",
-                                                         this.__onKeyDown );
-        }
-        this._hyperlinksHaveListeners = false;
-      }
-    },
-
-    _onMouseDown : function( evt ) {
-      if( this.isEnabled() && this._isLeftMouseButtonPressed( evt ) ) {
-        var target = this._getEventTarget( evt );
-        var index = this._getLinkIndex( target );
-        this._setFocusedLink( index );
-        if( this._readyToSendChanges ) {
-          // [if] Fix for bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=252559
-          this._readyToSendChanges = false;
-          rwt.client.Timer.once( function() {
-            this._sendChanges( index );
-          }, this, rwt.remote.EventUtil.DOUBLE_CLICK_TIME );
-        }
-      }
-    },
-
-    _onMouseOver : function( evt ) {
-      var target = this._getEventTarget( evt );
-      var style = this._getHyperlinkStyle( true );
-      rwt.html.Style.setStyleProperty( target, "textDecoration", style.textDecoration );
-    },
-
-    _onMouseOut : function( evt ) {
-      var target = this._getEventTarget( evt );
-      var style = this._getHyperlinkStyle( false );
-      rwt.html.Style.setStyleProperty( target, "textDecoration", style.textDecoration );
-    },
-
-    _isLeftMouseButtonPressed : function( evt ) {
-      var result = false;
-      if( evt.which ) {
-        result = ( evt.which === 1 );
-      } else if( evt.button ) {
-        if( rwt.client.Client.isMshtml() ) {
-          result = ( evt.button === 1 );
-        } else {
-          result = ( evt.button === 0 );
-        }
-      }
-      return result;
-    },
-
-    _onKeyDown : function( evt ) {
-      if( this.isEnabled() && evt.keyCode === 13 ) {
-        var target = this._getEventTarget( evt );
-        var index = this._getLinkIndex( target );
-        this._sendChanges( index );
-      }
-    },
-
-    _getLinkIndex : function( element ) {
-      var id = element.id;
-      var index = id.substr( id.lastIndexOf( "#" ) + 1 );
-      return parseInt( index, 10 );
-    },
-
-    _getHyperlinkStyle : function( hover ) {
-      var states = this._getStates();
-      if( hover ) {
-        states[ "over" ] = true;
-      } else {
-        delete states[ "over" ];
-      }
-      var manager = rwt.theme.AppearanceManager.getInstance();
-      return manager.styleFrom( "link-hyperlink", states );
-    },
-
-    _getEventTarget : function( evt ) {
-      var target;
-      if( rwt.client.Client.isMshtml() ) {
-        target = window.event.srcElement;
-      } else {
-        target = evt.target;
-      }
-      return target;
-    },
-
-    // Override of the _ontabfocus method from rwt.widgets.base.Widget
-    _ontabfocus : function() {
-      if( this._focusedLinkIndex === -1 && this._linksCount > 0 ) {
-        this._setFocusedLink( 0 );
-      }
-    },
-
-    _onKeyPress : function( evt ) {
-      if( this.isFocused() && evt.getKeyIdentifier() === "Tab" && this._linksCount > 0 ) {
-        var index = this._focusedLinkIndex;
-        if( !evt.isShiftPressed() && index >= 0 && index < this._linksCount - 1 ) {
-          evt.stopPropagation();
-          evt.preventDefault();
-          this._setFocusedLink( index + 1 );
-        } else if( !evt.isShiftPressed() && index === -1 ) {
-          evt.stopPropagation();
-          evt.preventDefault();
-          this._setFocusedLink( 0 );
-        } else if( evt.isShiftPressed() && index > 0 && index <= this._linksCount - 1 ) {
-          evt.stopPropagation();
-          evt.preventDefault();
-          this._setFocusedLink( index - 1 );
-        }
-      }
-    },
-
-    _onFocusOut : function( evt ) {
-      this._setFocusedLink( -1 );
-    },
-
-    _setFocusedLink : function( index ) {
-      var hyperlink = this._getFocusedHyperlinkElement();
-      if( hyperlink !== null ) {
-        hyperlink.blur();
-        hyperlink.style.outline = "none";
-      }
-      this._focusedLinkIndex = index;
-      hyperlink = this._getFocusedHyperlinkElement();
-      if( hyperlink !== null ) {
-        hyperlink.focus();
-        hyperlink.style.outline = "1px dotted";
-      }
-    },
-
-    _getFocusedHyperlinkElement : function() {
-      var result = null;
-      var hyperlinks = this._getHyperlinkElements();
-      var index = this._focusedLinkIndex;
-      if( index >= 0 && index < hyperlinks.length ) {
-        result = hyperlinks[ index ];
-      }
-      return result;
-    },
-
-    _getHyperlinkElements : function() {
-      var result;
-      var linkElement = this.getElement();
-      if( linkElement ) {
-        result = linkElement.getElementsByTagName( "span" );
-      } else {
-        result = [];
-      }
-      return result;
-    },
-
-    _sendChanges : function( index ) {
-      if( this._hasSelectionListener ) {
-        rwt.remote.EventUtil.notifySelected( this, { "index" : index } );
-      }
-      this._readyToSendChanges = true;
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.Link", {
-
-  factory : function( properties ) {
-    var result = new rwt.widgets.Link();
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "text"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    "text" : function( widget, value ) {
-      var EncodingUtil = rwt.util.Encoding;
-      widget.clear();
-      for (var i = 0; i < value.length; i++ ) {
-        var text = EncodingUtil.escapeText( value[ i ][ 0 ], false );
-        text = EncodingUtil.replaceNewLines( text, "<br/>" );
-        var index = value[ i ][ 1 ];
-        if( index !== null ) {
-          widget.addLink( text, index );
-        } else {
-          widget.addText( text );
-        }
-      }
-      widget.applyText();
-    }
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [
-    "Selection"
-  ] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          and EclipseSource
- *
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.base.Scrollable", {
-  extend : rwt.widgets.base.Parent,
-
-  construct : function( clientArea ) {
-    this.base( arguments );
-    this._ignoreScrollTo = [ -1, -1 ];
-    this._clientArea = clientArea;
-    this._horzScrollBar = new rwt.widgets.base.ScrollBar( true );
-    this._vertScrollBar = new rwt.widgets.base.ScrollBar( false );
-    this._blockScrolling = false;
-    this._internalChangeFlag = false;
-    this.add( this._clientArea );
-    this.add( this._horzScrollBar );
-    this.add( this._vertScrollBar );
-    this._configureScrollBars();
-    this._configureClientArea();
-    this.__onscroll = rwt.util.Functions.bindEvent( this._onscroll, this );
-  },
-
-  destruct : function() {
-    var el = this._clientArea._getTargetNode();
-    if( el ) {
-      var eventUtil = rwt.html.EventRegistration;
-      eventUtil.removeEventListener( el, "scroll", this.__onscroll );
-      delete this.__onscroll;
-    }
-    this._clientArea = null;
-    this._horzScrollBar = null;
-    this._vertScrollBar = null;
-  },
-
-  events : {
-    "userScroll" : "rwt.event.Event"
-  },
-
-  statics : {
-    _nativeWidth : null,
-
-    getNativeScrollBarWidth : function() {
-      if( this._nativeWidth === null ) {
-        var dummy = document.createElement( "div" );
-        dummy.style.width = "100px";
-        dummy.style.height = "100px";
-        dummy.style.overflow = "scroll";
-        dummy.style.visibility = "hidden";
-        document.body.appendChild( dummy );
-        this._nativeWidth = dummy.offsetWidth - dummy.clientWidth;
-        document.body.removeChild(dummy);
-      }
-      return this._nativeWidth;
-    }
-
-  },
-
-  members : {
-
-    /////////
-    // Public
-
-    setScrollBarsVisible : function( horizontal, vertical ) {
-      this._horzScrollBar.setDisplay( horizontal );
-      this._vertScrollBar.setDisplay( vertical );
-      var overflow = "hidden";
-      if( horizontal && vertical ) {
-        overflow = "scroll";
-      } else if( horizontal ) {
-        overflow = "scrollX";
-      } else if( vertical ) {
-        overflow = "scrollY";
-      }
-      this._clientArea.setOverflow( overflow );
-      this._layoutX();
-      this._layoutY();
-    },
-
-    setHBarSelection : function( value ) {
-      this._internalChangeFlag = true;
-      this._horzScrollBar.setValue( value );
-      this._internalChangeFlag = false;
-    },
-
-    setVBarSelection : function( value ) {
-      this._internalChangeFlag = true;
-      this._vertScrollBar.setValue( value );
-      this._internalChangeFlag = false;
-    },
-
-    setBlockScrolling : function( value ) {
-      this._blockScrolling = value;
-    },
-
-    getVerticalBar : function() {
-      return this._vertScrollBar;
-    },
-
-    getHorizontalBar : function() {
-      return this._horzScrollBar;
-    },
-
-    isVerticalBarVisible : function() {
-      return this._vertScrollBar.getDisplay();
-    },
-
-    isHorizontalBarVisible : function() {
-      return this._horzScrollBar.getDisplay();
-    },
-
-    /////////
-    // Layout
-
-    _configureClientArea : function() {
-      this._clientArea.setOverflow( "scroll" );
-      this._clientArea.setLeft( 0 );
-      this._clientArea.setTop( 0 );
-      this._clientArea.addEventListener( "create", this._onClientCreate, this );
-      this._clientArea.addEventListener( "appear", this._onClientAppear, this );
-      // TOOD [tb] : Do this with an eventlistner after fixing Bug 327023
-      this._clientArea._layoutPost = rwt.util.Functions.bindEvent( this._onClientLayout, this );
-    },
-
-    _configureScrollBars : function() {
-      var dragBlocker = function( event ) { event.stopPropagation(); };
-      this._horzScrollBar.setLeft( 0 );
-      this._horzScrollBar.addEventListener( "dragstart", dragBlocker );
-      this._vertScrollBar.setTop( 0 );
-      this._vertScrollBar.addEventListener( "dragstart", dragBlocker );
-      this._horzScrollBar.addEventListener( "changeValue", this._onHorzScrollBarChangeValue, this );
-      this._vertScrollBar.addEventListener( "changeValue", this._onVertScrollBarChangeValue, this );
-    },
-
-    _applyWidth : function( newValue, oldValue ) {
-      this.base( arguments, newValue, oldValue );
-      this._layoutX();
-    },
-
-    _applyHeight : function( newValue, oldValue ) {
-      this.base( arguments, newValue, oldValue );
-      this._layoutY();
-    },
-
-    _applyBorder : function( newValue, oldValue ) {
-      this.base( arguments, newValue, oldValue );
-      this._layoutX();
-      this._layoutY();
-    },
-
-    _layoutX : function() {
-      var clientWidth = this.getWidth() - this.getFrameWidth();
-      if( this._vertScrollBar.getDisplay() ) {
-        clientWidth -= this._vertScrollBar.getWidth();
-      }
-      this._clientArea.setWidth( clientWidth );
-      this._vertScrollBar.setLeft( clientWidth );
-      this._horzScrollBar.setWidth( clientWidth );
-    },
-
-    _layoutY : function() {
-      var clientHeight = this.getHeight() - this.getFrameHeight();
-      if( this._horzScrollBar.getDisplay() ) {
-        clientHeight -= this._horzScrollBar.getHeight();
-      }
-      this._clientArea.setHeight( clientHeight );
-      this._vertScrollBar.setHeight( clientHeight );
-      this._horzScrollBar.setTop( clientHeight );
-    },
-
-    _onClientCreate : function( evt ) {
-      this._clientArea.prepareEnhancedBorder();
-      this._clientArea.setContainerOverflow( false );
-      var el = this._clientArea._getTargetNode();
-      var eventUtil = rwt.html.EventRegistration;
-      eventUtil.addEventListener( el, "scroll", this.__onscroll );
-      rwt.html.Scroll.disableScrolling( this._clientArea.getElement() );
-    },
-
-    _onClientLayout : ( function() {
-      if( rwt.client.Client.isNewMshtml() && rwt.client.Client.getMajor() === 9 ) {
-        return function() {
-          // NOTE [tb] : there is a bug in IE9 where the scrollbar is substracted from the inner
-          //             size of an element, not added. Therefore add the barWidth twice.
-          var barWidth = rwt.widgets.base.Scrollable.getNativeScrollBarWidth();
-          var node = this._clientArea._getTargetNode();
-          var el = this._clientArea.getElement();
-          var overflow = this._clientArea.getOverflow();
-          var width = parseInt( el.style.width, 10 );
-          var height = parseInt( el.style.height, 10 );
-          if( overflow === "scroll" || overflow === "scrollY" ) {
-            width += ( 2 * barWidth );
-          }
-          if( overflow === "scroll" || overflow === "scrollX" ) {
-            height += ( 2 * barWidth );
-          }
-          node.style.width = width + "px";
-          node.style.height = height + "px";
-        };
-      } else {
-        return function() {
-          var barWidth = rwt.widgets.base.Scrollable.getNativeScrollBarWidth();
-          var node = this._clientArea._getTargetNode();
-          var el = this._clientArea.getElement();
-          var overflow = this._clientArea.getOverflow();
-          var width = parseInt( el.style.width, 10 );
-          var height = parseInt( el.style.height, 10 );
-          if( overflow === "scroll" || overflow === "scrollY" ) {
-            width += barWidth;
-          }
-          if( overflow === "scroll" || overflow === "scrollX" ) {
-            height += barWidth;
-          }
-          node.style.width = width + "px";
-          node.style.height = height + "px";
-        };
-      }
-    }() ),
-
-    ////////////
-    // Scrolling
-
-    _onHorzScrollBarChangeValue : function() {
-      if( this._isCreated ) {
-        this._syncClientArea( true, false );
-      }
-      if( !this._internalChangeFlag ) {
-        this.dispatchSimpleEvent( "userScroll", true );
-      }
-    },
-
-    _onVertScrollBarChangeValue : function() {
-      if( this._isCreated ) {
-        this._syncClientArea( false, true );
-      }
-      if( !this._internalChangeFlag ) {
-        this.dispatchSimpleEvent( "userScroll", false );
-      }
-    },
-
-    _onClientAppear : function() {
-      this._internalChangeFlag = true;
-      this._syncClientArea( true, true );
-      this._internalChangeFlag = false;
-    },
-
-    _onscroll : function( evt ) {
-      var positionChanged =    this._ignoreScrollTo[ 0 ] !== this._clientArea.getScrollLeft()
-                            || this._ignoreScrollTo[ 1 ] !== this._clientArea.getScrollTop();
-      if( !this._internalChangeFlag && positionChanged ) {
-        this._ignoreScrollTo = [ -1, -1 ];
-        rwt.event.EventHandlerUtil.stopDomEvent( evt );
-        var blockH = this._blockScrolling || !this._horzScrollBar.getDisplay();
-        var blockV = this._blockScrolling || !this._vertScrollBar.getDisplay();
-        this._internalChangeFlag = true;
-        this._syncClientArea( blockH, blockV );
-        this._internalChangeFlag = false;
-        this._syncScrollBars();
-      }
-    },
-
-    _syncClientArea : function( horz, vert ) {
-      if( horz ) {
-        var scrollX = this._horzScrollBar.getValue();
-        if( this._clientArea.getScrollLeft() !== scrollX ) {
-          this._clientArea.setScrollLeft( scrollX );
-        }
-        var newScrollLeft = this._clientArea.getScrollLeft();
-        this._ignoreScrollTo[ 0 ] = newScrollLeft;
-        if( newScrollLeft !== scrollX ) {
-          this.addToQueue( "hSync" );
-        }
-      }
-      if( vert ) {
-        var scrollY = this._vertScrollBar.getValue();
-        if( this._clientArea.getScrollTop() !== scrollY ) {
-          this._clientArea.setScrollTop( scrollY );
-        } else {
-        }
-        var newScrollTop = this._clientArea.getScrollTop();
-        this._ignoreScrollTo[ 1 ] = newScrollTop;
-        if( newScrollTop !== scrollY ) {
-          this.addToQueue( "vSync" );
-        }
-      }
-    },
-
-    _layoutPost : function( changes ) {
-      this.base( arguments, changes );
-      if( changes.hSync || changes.vSync ) {
-        // delay because this is still before the client area might get bigger in the display flush
-        rwt.client.Timer.once( function() {
-          this._internalChangeFlag = true;
-          this._syncClientArea( changes.hSync, changes.vSync );
-          this._internalChangeFlag = false;
-        }, this, 0 );
-      }
-    },
-
-    _syncScrollBars : function() {
-      var scrollX = this._clientArea.getScrollLeft();
-      this._horzScrollBar.setValue( scrollX );
-      var scrollY = this._clientArea.getScrollTop();
-      this._vertScrollBar.setValue( scrollY );
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2002, 2012 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.ScrolledComposite", {
-  extend : rwt.widgets.base.Scrollable,
-
-  construct : function() {
-    this.base( arguments, new rwt.widgets.base.Parent() );
-    this.setScrollBarsVisible( false, false );
-    this._clientArea.addEventListener( "mousewheel", this._onMouseWheel, this );
-    this._clientArea.addEventListener( "keypress", this._onKeyPress, this );
-    if( rwt.client.Client.supportsTouch() ) {
-      this._clientArea.addEventListener( "mousedown", this._onTouch, this );
-    }
-    this.addEventListener( "userScroll", this._onUserScroll );
-    this._content = null;
-    this._requestTimerRunning = false;
-    this._showFocusedControl = false;
-    this._focusRoot = null;
-    this.addEventListener( "changeParent", this._onChangeParent, this );
-    this.setAppearance( "scrolledcomposite" );
-  },
-
-  members : {
-
-    /////////
-    // Public
-
-    setShowFocusedControl : function( value ) {
-      this._showFocusedControl = value;
-    },
-
-    setContent : function( widget ) {
-      if( this._content != null ) {
-        this._content.removeEventListener( "changeParent", this._onContentRemove, this );
-        this._content.removeEventListener( "changeWidth", this._onContentResize, this );
-        this._content.removeEventListener( "changeHeight", this._onContentResize, this );
-        this._clientArea.remove( this._content );
-      }
-      this._content = widget;
-      this._onContentResize();
-      if( this._content != null ) {
-        this._clientArea.add( this._content );
-        this._content.addEventListener( "changeParent", this._onContentRemove, this );
-        this._content.addEventListener( "changeWidth", this._onContentResize, this );
-        this._content.addEventListener( "changeHeight", this._onContentResize, this );
-      }
-    },
-
-    ///////////////
-    // Eventhandler
-
-    _onContentRemove : function() {
-      this.setContent( null );
-    },
-
-    _onContentResize : function() {
-      if(    this._content !== null
-          && typeof this._content.getWidth() === "number"
-          && typeof this._content.getHeight() === "number" )
-      {
-        var maxWidth = this._content.getWidth();
-        var maxHeight = this._content.getHeight();
-        this._horzScrollBar.setMaximum( maxWidth );
-        this._vertScrollBar.setMaximum( maxHeight );
-      }
-    },
-
-    _onChangeParent : function( evt ) {
-      if( this._focusRoot != null ) {
-        this._focusRoot.removeEventListener( "changeFocusedChild",
-                                             this._onChangeFocusedChild,
-                                             this );
-      }
-      this._focusRoot = this.getFocusRoot();
-      if( this._focusRoot != null ) {
-        this._focusRoot.addEventListener( "changeFocusedChild",
-                                          this._onChangeFocusedChild,
-                                          this );
-      }
-    },
-
-    _onMouseWheel : function( evt ) {
-      this.setBlockScrolling( false );
-    },
-
-    _onTouch : function( evt ) {
-      this.setBlockScrolling( false );
-    },
-
-    _onKeyPress : function( evt ) {
-      switch( evt.getKeyIdentifier() ) {
-        case "Left":
-        case "Up":
-        case "Right":
-        case "Down":
-        case "PageUp":
-        case "PageDown":
-        case "End":
-        case "Home":
-          this.setBlockScrolling( false );
-          evt.stopPropagation();
-        break;
-      }
-    },
-
-    _onUserScroll : function( horizontal ) {
-      var server = rwt.remote.Server.getInstance();
-      var scrollbar = horizontal ? this._horzScrollBar : this._vertScrollBar;
-      var remoteObject = server.getRemoteObject( this );
-      var prop = horizontal ? "horizontalBar.selection" : "verticalBar.selection";
-      remoteObject.set( prop, scrollbar.getValue() );
-      if( scrollbar.getHasSelectionListener() ) {
-        if( horizontal ) {
-          server.onNextSend( this._sendHorizontalScrolled, this );
-        } else {
-          server.onNextSend( this._sendVerticalScrolled, this );
-        }
-        server.sendDelayed( 500 );
-      }
-    },
-
-    _sendVerticalScrolled : function() {
-      var server = rwt.remote.Server.getInstance();
-      server.getRemoteObject( this._vertScrollBar ).notify( "Selection" );
-    },
-
-    _sendHorizontalScrolled : function() {
-      var server = rwt.remote.Server.getInstance();
-      server.getRemoteObject( this._horzScrollBar ).notify( "Selection" );
-    },
-
-    _onChangeFocusedChild : function( evt ) {
-      var focusedChild = evt.getValue();
-      this.setBlockScrolling( !this._showFocusedControl && focusedChild !== this );
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.ScrolledComposite", {
-
-  factory : function( properties ) {
-    var result = new rwt.widgets.ScrolledComposite();
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "origin",
-    "content",
-    "showFocusedControl"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    // Override original bounds handler to set clipWidth and clipHeight
-    "bounds" : function( widget, value ) {
-      rwt.remote.HandlerUtil.getControlPropertyHandler( "bounds" )( widget, value );
-      widget.setClipWidth( value[ 2 ] );
-      widget.setClipHeight( value[ 3 ] );
-    },
-    // Order is important: origin before scrollBarsVisible
-    "origin" : function( widget, value ) {
-      widget.setHBarSelection( value[ 0 ] );
-      widget.setVBarSelection( value[ 1 ] );
-    },
-    "content" : function( widget, value ) {
-      rwt.remote.HandlerUtil.callWithTarget( value, function( content ) {
-        widget.setContent( content );
-      } );
-    },
-    "scrollBarsVisible" : function( widget, value ) {
-      widget.setScrollBarsVisible( value[ 0 ], value[ 1 ] );
-    }
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {
-    "scrollBarsSelection" : function( widget, value ) {
-      widget.setHasSelectionListener( value );
-    }
-  } )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2009, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.ToolBar", {
-
-  extend : rwt.widgets.base.Parent,
-
-  construct : function() {
-    this.base( arguments );
-    this._hoverItem = null;
-    this.setAppearance( "toolbar" );
-    this.setOverflow( "hidden" );
-    this.initTabIndex();
-    this.addEventListener( "focus", this._onFocus );
-    this.addEventListener( "blur", this._onBlur );
-    this.addEventListener( "mouseover", this._onMouseOver );
-    this.addEventListener( "keypress", this._onKeyPress );
-    this.addEventListener( "keydown", this._onKeyDown );
-    this.addEventListener( "keyup", this._onKeyUp );
-  },
-
-  properties : {
-
-    tabIndex : {
-      refine : true,
-      init : 1
-    }
-
-  },
-
-  members : {
-
-    _isRelevantEvent : function( event ) {
-      var target = event.getTarget();
-      return this._isToolItem( target ) || target === this;
-    },
-
-    _isToolItem : function( item ) {
-      return item instanceof rwt.widgets.ToolItem && item.getParent() === this;
-    },
-
-    _onMouseOver : function( event ) {
-      var target = event.getTarget();
-      if( this._hoverItem != null && this._hoverItem != target ) {
-        this._hoverItem.removeState( "over" );
-        this._hoverItem = null;
-      }
-      if( this._isToolItem( target ) ) {
-        this._hoverItem = target;
-        this._hoverItem.addState( "over" );
-      }
-    },
-
-    _onFocus : function( event ) {
-      if( this._hoverItem == null ) {
-        this._hoverItem = this.getFirstChild();
-      }
-      if( this._hoverItem != null ) {
-        this._hoverItem.addState( "over" );
-      }
-    },
-
-    _onBlur : function( event ) {
-      if( this._hoverItem != null ) {
-        this._hoverItem.removeState( "over" );
-      }
-    },
-
-    _onKeyPress : function( event ) {
-      if( this._isRelevantEvent( event ) ) {
-        switch( event.getKeyIdentifier() ) {
-          case "Left":
-            this._hoverNext( true );
-          break;
-          case "Right":
-            this._hoverNext( false );
-          break;
-        }
-      }
-    },
-
-    _onKeyDown : function( event ) {
-      if( this._hoverItem != null && this._isRelevantEvent( event ) ) {
-        this._hoverItem._onKeyDown( event );
-      }
-    },
-
-    _onKeyUp : function( event ) {
-      if( this._hoverItem != null && this._isRelevantEvent( event ) ) {
-        this._hoverItem._onKeyUp( event );
-      }
-    },
-
-    _hoverNext : function( backwards ) {
-      if( this._hoverItem != null ) {
-        var oldHoverItem = this._hoverItem;
-        this._hoverItem.removeState( "over" );
-        do {
-          if( backwards ) {
-            this._hoverItem = this._hoverItem.getPreviousSibling();
-            if( this._hoverItem == null ) {
-              this._hoverItem = this.getLastChild();
-            }
-          } else {
-            this._hoverItem = this._hoverItem.getNextSibling();
-            if( this._hoverItem == null ) {
-              this._hoverItem = this.getFirstChild();
-            }
-          }
-        } while( !( this._isToolItem( this._hoverItem ) && this._hoverItem.isEnabled() )
-                 && this._hoverItem !== oldHoverItem );
-        this._hoverItem.addState( "over" );
-      }
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.ToolBar", {
-
-  factory : function( properties ) {
-    var result = new rwt.widgets.ToolBar();
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {} ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.ToolItem", {
-
-  factory : function( properties ) {
-    var styleMap = rwt.remote.HandlerUtil.createStyleMap( properties.style );
-    var type = "separator";
-    if( styleMap.PUSH ) {
-      type = "push";
-    } else if( styleMap.CHECK ) {
-      type = "check";
-    } else if( styleMap.RADIO ) {
-      type = "radio";
-    } else if( styleMap.DROP_DOWN ) {
-      type = "dropDown";
-    }
-    var result;
-    rwt.remote.HandlerUtil.callWithTarget( properties.parent, function( toolbar ) {
-      if( type === "separator" ) {
-        result = new rwt.widgets.ToolItemSeparator( toolbar.hasState( "rwt_FLAT" ),
-                                                            toolbar.hasState( "rwt_VERTICAL" ) );
-      } else {
-        result = new rwt.widgets.ToolItem( type );
-        result.setNoRadioGroup( toolbar.hasState( "rwt_NO_RADIO_GROUP" ) );
-      }
-      toolbar.addAt( result, properties.index );
-      rwt.remote.HandlerUtil.addDestroyableChild( toolbar, result );
-      result.setUserData( "protocolParent", toolbar );
-    } );
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getWidgetDestructor(),
-
-  properties : [
-    "bounds",
-    "visible",
-    "enabled",
-    "customVariant",
-    "toolTip",
-    "text",
-    "mnemonicIndex",
-    "image",
-    "hotImage",
-    "control",
-    "selection"
-  ],
-
-  propertyHandler : {
-    "bounds" : rwt.remote.HandlerUtil.getControlPropertyHandler( "bounds" ),
-    "visible" : function( widget, value ) {
-      widget.setVisibility( value );
-    },
-    "toolTip" : rwt.remote.HandlerUtil.getControlPropertyHandler( "toolTip" ),
-    "image" : function( widget, value ) {
-      if( value === null ) {
-        widget.setImage( null );
-      } else {
-        widget.setImage( value[ 0 ], value[ 1 ], value[ 2 ] );
-      }
-    },
-    "hotImage" : function( widget, value ) {
-      if( value === null ) {
-        widget.setHotImage( null );
-      } else {
-        widget.setHotImage( value[ 0 ], value[ 1 ], value[ 2 ] );
-      }
-    },
-    "control" : function( widget, value ) {
-      widget.setLineVisible( value === null );
-    }
-  },
-
-  listeners : [
-    "Selection"
-  ]
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2008, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-/**
- * This class provides the client-side counterpart for
- * rwt.widgets.Scale.
- */
-rwt.qx.Class.define( "rwt.widgets.Scale", {
-  extend : rwt.widgets.base.Parent,
-
-  construct : function( isHorizontal ) {
-    this.base( arguments );
-    this.setAppearance( "scale" );
-    this._horizontal = isHorizontal;
-
-    // Has selection listener
-    this._hasSelectionListener = false;
-
-    // Flag indicates that the next request can be sent
-    this._readyToSendChanges = true;
-
-    // Default values
-    this._selection = 0;
-    this._minimum = 0;
-    this._maximum = 100;
-    this._increment = 1;
-    this._pageIncrement = 10;
-    this._pxStep = 1.34;
-
-    // Base line
-    this._line = new rwt.widgets.base.Image();
-    if( this._horizontal ) {
-      this._line.addState( rwt.widgets.Scale.STATE_HORIZONTAL );
-    }
-    this._line.setAppearance( "scale-line" );
-    this._line.setResizeToInner( true );
-    this._line.addEventListener( "mousedown", this._onLineMouseDown, this );
-    this.add( this._line );
-
-    // Thumb
-    this._thumb = new rwt.widgets.base.BasicButton( "push", true );
-    if( this._horizontal ) {
-      this._thumb.addState( rwt.widgets.Scale.STATE_HORIZONTAL );
-    }
-    this._thumb.setAppearance( "scale-thumb" );
-    this._thumb.addEventListener( "mousedown", this._onThumbMouseDown, this );
-    this._thumb.addEventListener( "mousemove", this._onThumbMouseMove, this );
-    this._thumb.addEventListener( "mouseup", this._onThumbMouseUp, this );
-    // Fix IE Styling issues
-    rwt.widgets.util.WidgetUtil.fixIEBoxHeight( this._thumb );
-    this.add( this._thumb );
-    // Thumb offset
-    this._thumbOffset = 0;
-
-    // Add events listeners
-    if( this._horizontal ) {
-      this.addEventListener( "changeWidth", this._onChangeWidth, this );
-    } else {
-      this.addEventListener( "changeHeight", this._onChangeHeight, this );
-    }
-    this.addEventListener( "contextmenu", this._onContextMenu, this );
-    this.addEventListener( "keypress", this._onKeyPress, this );
-    this.addEventListener( "mousewheel", this._onMouseWheel, this );
-  },
-
-  destruct : function() {
-    this._line.removeEventListener( "mousedown", this._onLineMouseDown, this );
-    this._thumb.removeEventListener( "mousedown", this._onThumbMouseDown, this );
-    this._thumb.removeEventListener( "mousemove", this._onThumbMouseMove, this );
-    this._thumb.removeEventListener( "mouseup", this._onThumbMouseUp, this );
-    if( this._horizontal ) {
-      this.removeEventListener( "changeWidth", this._onChangeWidth, this );
-    } else {
-      this.removeEventListener( "changeHeight", this._onChangeHeight, this );
-    }
-    this.removeEventListener( "contextmenu", this._onContextMenu, this );
-    this.removeEventListener( "keypress", this._onKeyPress, this );
-    this.removeEventListener( "mousewheel", this._onMouseWheel, this );
-    this._disposeObjects( "_line", "_thumb" );
-    this._thumb = null;
-  },
-
-  events : {
-    "selectionChanged" : "rwt.event.Event",
-    "minimumChanged" : "rwt.event.Event",
-    "maximumChanged" : "rwt.event.Event"
-  },
-
-  statics : {
-    STATE_HORIZONTAL : "horizontal",
-    PADDING : 8,
-    SCALE_LINE_OFFSET : 9,
-    THUMB_OFFSET : 9,
-    HALF_THUMB : 5,
-
-    _isNoModifierPressed : function( evt ) {
-      return    !evt.isCtrlPressed()
-             && !evt.isShiftPressed()
-             && !evt.isAltPressed()
-             && !evt.isMetaPressed();
-    }
-  },
-
-  members : {
-    _onChangeWidth : function( evt ) {
-      this._line.setWidth( this.getWidth() - 2 * rwt.widgets.Scale.PADDING );
-      this._updateStep();
-      this._updateThumbPosition();
-    },
-
-    _onChangeHeight : function( evt ) {
-      this._line.setHeight( this.getHeight() - 2 * rwt.widgets.Scale.PADDING );
-      this._updateStep();
-      this._updateThumbPosition();
-    },
-
-    _onContextMenu : function( evt ) {
-      var menu = this.getContextMenu();
-      if( menu != null ) {
-        menu.setLocation( evt.getPageX(), evt.getPageY() );
-        menu.setOpener( this );
-        menu.show();
-        evt.stopPropagation();
-      }
-    },
-
-    _onKeyPress : function( evt ) {
-      var keyIdentifier = evt.getKeyIdentifier();
-      var sel = null;
-      if( rwt.widgets.Scale._isNoModifierPressed( evt ) ) {
-        switch( keyIdentifier ) {
-          case "Left":
-            sel = this._selection - this._increment;
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-          case "Down":
-            if( this._horizontal ) {
-              sel = this._selection - this._increment;
-            } else {
-              sel = this._selection + this._increment;
-            }
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-          case "Right":
-            sel = this._selection + this._increment;
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-          case "Up":
-            if( this._horizontal ) {
-              sel = this._selection + this._increment;
-            } else {
-              sel = this._selection - this._increment;
-            }
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-          case "Home":
-            sel = this._minimum;
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-          case "End":
-            sel = this._maximum;
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-          case "PageDown":
-            if( this._horizontal ) {
-              sel = this._selection - this._pageIncrement;
-            } else {
-              sel = this._selection + this._pageIncrement;
-            }
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-          case "PageUp":
-            if( this._horizontal ) {
-              sel = this._selection + this._pageIncrement;
-            } else {
-              sel = this._selection - this._pageIncrement;
-            }
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-        }
-        if( sel != null ) {
-          this.setSelection( sel );
-          this._scheduleSendChanges();
-        }
-      }
-    },
-
-    _onMouseWheel : function( evt ) {
-      if( this.getFocused() ) {
-        evt.preventDefault();
-        evt.stopPropagation();
-        var change = Math.round( evt.getWheelDelta() );
-        this.setSelection( this._selection - change );
-        this._scheduleSendChanges();
-      }
-    },
-
-    _onLineMouseDown : function( evt ) {
-      var pxSel;
-      var mousePos;
-      var sel;
-      if( evt.isLeftButtonPressed() ){
-        if( this._horizontal ) {
-          pxSel = this._thumb.getLeft() + rwt.widgets.Scale.HALF_THUMB;
-          mousePos = evt.getPageX() - rwt.html.Location.getLeft( this.getElement() );
-        } else {
-          pxSel = this._thumb.getTop() + rwt.widgets.Scale.HALF_THUMB;
-          mousePos = evt.getPageY() - rwt.html.Location.getTop( this.getElement() );
-        }
-        if( mousePos > pxSel ) {
-          sel = this._selection + this._pageIncrement;
-        } else {
-          sel = this._selection - this._pageIncrement;
-        }
-        this.setSelection( sel );
-        this._scheduleSendChanges();
-      }
-    },
-
-    _onThumbMouseDown : function( evt ) {
-      var mousePos;
-      if( evt.isLeftButtonPressed() ) {
-        if( this._horizontal ) {
-          mousePos = evt.getPageX() - rwt.html.Location.getLeft( this.getElement() );
-          this._thumbOffset = mousePos - this._thumb.getLeft();
-        } else {
-          mousePos = evt.getPageY() - rwt.html.Location.getTop( this.getElement() );
-          this._thumbOffset = mousePos - this._thumb.getTop();
-        }
-        this._thumb.setCapture(true);
-      }
-    },
-
-    _onThumbMouseMove : function( evt ) {
-      var mousePos;
-      if( this._thumb.getCapture() ) {
-        if( this._horizontal ) {
-          mousePos = evt.getPageX() - rwt.html.Location.getLeft( this.getElement() );
-        } else {
-          mousePos = evt.getPageY() - rwt.html.Location.getTop( this.getElement() );
-        }
-        var sel = this._getSelectionFromThumbPosition( mousePos - this._thumbOffset );
-        if( this._selection != sel ) {
-          this.setSelection( sel );
-          this._scheduleSendChanges();
-        }
-      }
-    },
-
-    _onThumbMouseUp : function( evt ) {
-      this._thumb.setCapture( false );
-    },
-
-    _updateStep : function() {
-      var padding =   rwt.widgets.Scale.PADDING
-                    + rwt.widgets.Scale.HALF_THUMB;
-      if( this._horizontal ) {
-        this._pxStep = ( this.getWidth() - 2 * padding ) / ( this._maximum - this._minimum );
-      } else {
-        this._pxStep = ( this.getHeight() - 2 * padding ) / ( this._maximum - this._minimum );
-      }
-    },
-
-    _updateThumbPosition : function() {
-      var pos =   rwt.widgets.Scale.PADDING
-                + this._pxStep * ( this._selection - this._minimum );
-      if( this._horizontal ) {
-        this._thumb.setLeft( pos );
-      } else {
-        this._thumb.setTop( pos );
-      }
-    },
-
-    _getSelectionFromThumbPosition : function( position ) {
-      var sel = ( position - rwt.widgets.Scale.PADDING ) / this._pxStep + this._minimum;
-      return this._normalizeSelection( Math.round( sel ) );
-    },
-
-    _normalizeSelection : function( value ) {
-      var result = value;
-      if( value < this._minimum ) {
-        result = this._minimum;
-      }
-      if( value > this._maximum ) {
-        result = this._maximum;
-      }
-      return result;
-    },
-
-    _scheduleSendChanges : function() {
-      if( this._readyToSendChanges ) {
-        this._readyToSendChanges = false;
-        rwt.client.Timer.once( this._sendChanges, this, 500 );
-      }
-    },
-
-    _sendChanges : function() {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        rwt.remote.Server.getInstance().getRemoteObject( this ).set( "selection", this._selection );
-        if( this._hasSelectionListener ) {
-          rwt.remote.EventUtil.notifySelected( this );
-        }
-        this._readyToSendChanges = true;
-      }
-    },
-
-    setHasSelectionListener : function( value ) {
-      this._hasSelectionListener = value;
-    },
-
-    setSelection : function( value ) {
-      this._selection = this._normalizeSelection( value );
-      this._updateThumbPosition();
-      this.dispatchSimpleEvent( "selectionChanged" );
-    },
-
-    setMinimum : function( value ) {
-      this._minimum = value;
-      this._updateStep();
-      this._updateThumbPosition();
-      this.dispatchSimpleEvent( "minimumChanged" );
-    },
-
-    setMaximum : function( value ) {
-      this._maximum = value;
-      this._updateStep();
-      this._updateThumbPosition();
-      this.dispatchSimpleEvent( "maximumChanged" );
-    },
-
-    setIncrement : function( value ) {
-      this._increment = value;
-    },
-
-    setPageIncrement : function( value ) {
-      this._pageIncrement = value;
-    },
-
-    // overwritten:
-    _visualizeFocus : function() {
-      this.base( arguments );
-      this._thumb.addState( "focused" );
-    },
-
-    // overwritten:
-    _visualizeBlur : function() {
-      this.base( arguments );
-      this._thumb.removeState( "focused" );
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.Scale", {
-
-  factory : function( properties ) {
-    var isHorizontal = properties.style.indexOf( "HORIZONTAL" ) != -1;
-    var result = new rwt.widgets.Scale( isHorizontal );
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "minimum",
-    "maximum",
-    "selection",
-    "increment",
-    "pageIncrement"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {} ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [
-    "Selection"
-  ] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2009, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.ToolItemSeparator", {
-  extend : rwt.widgets.base.Parent,
-
-  construct : function( flat, vertical ) {
-    this.base( arguments );
-    this._line = null;
-    this._control = null;
-    this._vertical = vertical;
-    if( flat ) {
-      this._line = new rwt.widgets.base.Terminator();
-      if( vertical ) {
-        this._line.addState( "vertical" );
-      }
-      this._line.setAppearance( "toolbar-separator-line" );
-      this.add( this._line );
-    }
-    this.setStyleProperty( "fontSize", "0px" );
-    this.setStyleProperty( "lineHeight", "0px" );
-  },
-
-  properties : {
-
-    appearance : {
-      refine : true,
-      init : "toolbar-separator"
-    }
-
-  },
-
-  members : {
-
-    _applyWidth : function( newValue, oldValue ) {
-      this.base( arguments, newValue, oldValue );
-      if( this._line && !this._vertical ) {
-        var lineWidth = this._line.getWidth();
-        var center = newValue * 0.5;
-        var lineLeft = Math.floor( center - ( lineWidth * 0.5 ) );
-        this._line.setLeft( lineLeft );
-      }
-    },
-
-    _applyHeight : function( newValue, oldValue ) {
-      this.base( arguments, newValue, oldValue );
-      if( this._line && this._vertical ) {
-        var lineHeight = this._line.getHeight();
-        var center = newValue * 0.5;
-        var lineTop = Math.floor( center - ( lineHeight * 0.5 ) );
-        this._line.setTop( lineTop );
-      }
-    },
-
-    setLineVisible : function( value ) {
-      if( this._line ) {
-        this._line.setVisibility( value );
-      }
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2007, 2012 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.theme.BorderDefinitions", {
-
-  type : "static",
-
-  statics : {
-
-    getDefinition : function( name ) {
-      return this._definitions[ name ];
-    },
-
-    _definitions : {
-
-      ///////////////////////////
-      // Names used in ThemeStore
-
-      "inset" : {
-        color : [ "shadow", "highlight", "highlight", "shadow" ],
-        innerColor : [ "darkshadow", "lightshadow", "lightshadow", "darkshadow" ],
-        width : 2
-      },
-
-      "thinInset" : {
-        color : [ "shadow", "highlight", "highlight", "shadow" ],
-        width : 1
-      },
-
-      "outset" : {
-        color : [ "lightshadow", "darkshadow", "darkshadow", "lightshadow" ],
-        innerColor : [ "highlight", "shadow", "shadow", "highlight" ],
-        width : 2
-      },
-
-      "thinOutset" : {
-        color : [ "highlight", "shadow", "shadow", "highlight" ],
-        width : 1
-      },
-
-      "groove" : {
-        color : [ "shadow", "highlight", "highlight", "shadow" ],
-        innerColor : [ "highlight", "shadow", "shadow", "highlight" ],
-        width : 2
-      },
-
-      "ridge" : {
-        color : [ "highlight", "shadow", "shadow", "highlight" ],
-        innerColor : [ "shadow", "highlight", "highlight", "shadow" ],
-        width : 2
-      },
-
-      ////////////////////////////////////
-      // Names also used in AppearanceBase
-
-      "shadow" : {
-        width : 1,
-        color :  [ "shadow", "shadow", "shadow", "shadow" ]
-      },
-
-      "verticalDivider" : {
-        width : [ 1, 0, 1, 0 ],
-        color : [ "shadow", null, "highlight", null ]
-      },
-
-      "horizontalDivider" : {
-        width : [ 0, 1, 0, 1 ],
-        color : [ null, "shadow", null, "highlight" ]
-      },
-
-      "separator.shadowin.horizontal.border" : {
-        width : [ 1, 0, 1, 0 ],
-        color : [ "lightshadow", null, "highlight" ]
-      },
-
-      "separator.shadowin.vertical.border" : {
-        width : [ 0, 1, 0, 1 ],
-        color : [ null, "highlight", null, "lightshadow" ]
-      },
-
-      "separator.shadowout.horizontal.border" : {
-        width : [ 1, 0, 1, 0 ],
-        color : [ "highlight", null, "shadow", null ]
-      },
-
-      "separator.shadowout.vertical.border" : {
-        width : [ 0, 1, 0, 1 ],
-        color : [ null, "shadow", null, "highlight" ]
-      }
-    }
-  }
-} );
-
-/*******************************************************************************
- * Copyright: 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                       and EclipseSource
- *
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.base.BasicList", {
-  extend : rwt.widgets.base.Scrollable,
-
-  construct : function( multiSelection ) {
-    this.base( arguments, new rwt.widgets.base.VerticalBoxLayout() );
-    this.setAppearance( "list" );
-    this.setTabIndex( 1 );
-    this._manager = new rwt.widgets.util.SelectionManager( this._clientArea );
-    this.addEventListener( "mouseover", this._onmouseover );
-    this.addEventListener( "mousedown", this._onmousedown );
-    this.addEventListener( "mouseup", this._onmouseup );
-    this.addEventListener( "keypress", this._onkeypress );
-    this.addEventListener( "keypress", this._onkeyinput );
-    this.initOverflow();
-    this.initTabIndex();
-    this._pressedString = "";
-    this._lastKeyPress = 0;
-    this._itemWidth = 0;
-    this._itemHeight = 0;
-    this._markupEnabled = false;
-    var selMgr = this.getManager();
-    selMgr.setMultiSelection( multiSelection );
-    selMgr.setDragSelection( false );
-    this.addEventListener( "dblclick", this._ondblclick, this );
-  },
-
-  destruct : function() {
-    this.removeEventListener( "dblclick", this._ondblclick, this );
-    this._disposeObjects("_manager" );
-  },
-
-  members : {
-
-    setMarkupEnabled : function( value ) {
-      this._markupEnabled = value;
-    },
-
-    getManager : function() {
-      return this._manager;
-    },
-
-    getPreferredWidth: function() {
-      var result = 0;
-      var items = this.getItems();
-      for( var i = 0; i < items.length; i++ ) {
-        var paddingWidth = items[ i ].getPaddingLeft() + items[ i ].getPaddingRight();
-        var itemWidth = items[ i ].getPreferredBoxWidth() + paddingWidth;
-        result = Math.max( result, itemWidth );
-      }
-      result += this._vertScrollBar.getWidth();
-      return result;
-    },
-
-    isRelevantEvent : function( evt ) {
-      var target = evt.getTarget();
-      while( target != null && target !== this ) {
-        target = target.getParent();
-      }
-      return target === this;
-    },
-
-    getListItemTarget : function( vItem ) {
-      while( vItem != null && vItem.getParent() != this._clientArea ) {
-        vItem = vItem.getParent();
-      }
-      return vItem;
-    },
-
-    getSelectedItem : function() {
-      return this._manager.getSelectedItems()[0] || null;
-    },
-
-    getSelectedItems : function() {
-      return this._manager.getSelectedItems();
-    },
-
-    _onmouseover : function( event ) {
-      var vItem = this.getListItemTarget( event.getTarget() );
-      if( vItem ) {
-        this._manager.handleMouseOver( vItem, event );
-      }
-    },
-
-    _onmousedown : function( event ) {
-      if( !this._isHyperlinkTarget( event ) ) {
-        var vItem = this.getListItemTarget( event.getTarget() );
-        if( vItem ) {
-          this._manager.handleMouseDown( vItem, event );
-        }
-      }
-    },
-
-    _onmouseup : function( event ) {
-      if( !this._isHyperlinkTarget( event ) ) {
-        var vItem = this.getListItemTarget( event.getTarget() );
-        if( vItem ) {
-          this._manager.handleMouseUp( vItem, event );
-        }
-      }
-    },
-
-    _onclick : function( event ) {
-      if( !this._isHyperlinkTarget( event ) ) {
-        var vItem = this.getListItemTarget( event.getTarget() );
-        if( vItem ) {
-          this._manager.handleClick( vItem, event );
-        }
-      }
-    },
-
-    _ondblclick : function( event ) {
-      if( !this._isHyperlinkTarget( event ) ) {
-        var vItem = this.getListItemTarget( event.getTarget() );
-        if( vItem ) {
-          this._manager.handleDblClick( vItem, event );
-        }
-      }
-    },
-
-    _onkeypress : function( event ) {
-      // Give control to selectionManager
-      this._manager.handleKeyPress( event );
-    },
-
-    _onkeyinput : function( event ) {
-      // Fix for bug# 288344
-      if( !event.isAltPressed() && !event.isCtrlPressed() ) {
-        if( event.getCharCode() !== 0 ) {
-          // Reset string after a second of non pressed key
-          if( ( ( new Date() ).valueOf() - this._lastKeyPress ) > 1000 ) {
-            this._pressedString = "";
-          }
-          // Combine keys the user pressed to a string
-          this._pressedString += String.fromCharCode( event.getCharCode() );
-          // Find matching item
-          var matchedItem = this.findString( this._pressedString, null );
-          if( matchedItem ) {
-            var oldVal = this._manager._getChangeValue();
-            // Temporary disable change event
-            var oldFireChange = this._manager.getFireChange();
-            this._manager.setFireChange( false );
-            // Reset current selection
-            this._manager._deselectAll();
-            // Update manager
-            this._manager.setItemSelected( matchedItem, true );
-            this._manager.setAnchorItem( matchedItem );
-            this._manager.setLeadItem( matchedItem );
-            // Scroll to matched item
-            matchedItem.scrollIntoView();
-            // Recover event status
-            this._manager.setFireChange( oldFireChange );
-            // Dispatch event if there were any changes
-            if( oldFireChange && this._manager._hasChanged( oldVal ) ) {
-              this._manager._dispatchChange();
-            }
-          }
-          // Store timestamp
-          this._lastKeyPress = ( new Date() ).valueOf();
-          event.preventDefault();
-        }
-      }
-    },
-
-    findString : function( vText, vStartIndex ) {
-      return this._findItem( vText, vStartIndex || 0 );
-    },
-
-    _findItem : function( vUserValue, vStartIndex ) {
-      var vAllItems = this.getItems();
-      // If no startIndex given try to get it by current selection
-      if( vStartIndex == null ) {
-        vStartIndex = vAllItems.indexOf( this.getSelectedItem() );
-        if (vStartIndex == -1) {
-          vStartIndex = 0;
-        }
-      }
-      // Mode #1: Find all items after the startIndex
-      for( var i = vStartIndex; i < vAllItems.length; i++ ) {
-        if( vAllItems[ i ].matchesString( vUserValue ) ) {
-          return vAllItems[i];
-        }
-      }
-      // Mode #2: Find all items before the startIndex
-      for( var i = 0; i < vStartIndex; i++ ) {
-        if( vAllItems[ i ].matchesString( vUserValue ) ) {
-          return vAllItems[i];
-        }
-      }
-      return null;
-    },
-
-    setItems : function( value ) {
-      var items = this._escapeItems( value );
-      // preserve selection and focused item
-      var manager = this.getManager();
-      var oldLeadItem = manager.getLeadItem();
-      var oldAnchorItem = manager.getAnchorItem();
-      var oldSelection = manager.getSelectedItems();
-      // exchange/add/remove items
-      var oldItems = this.getItems();
-      for( var i = 0; i < items.length; i++ ) {
-        if( i < oldItems.length ) {
-          oldItems[ i ].setLabel( items[ i ] );
-        } else {
-          // TODO [rh] optimize this: context menu should be handled by the List
-          //      itself for all its ListItems
-          var item = new rwt.widgets.ListItem();
-          if( this._markupEnabled ) {
-            item.setFlexibleCell( 0 );
-          }
-          item.addEventListener( "mouseover", this._onListItemMouseOver, this );
-          item.addEventListener( "mouseout", this._onListItemMouseOut, this );
-          // prevent items from being drawn outside the list
-          this._renderItemDimension( item );
-          item.setContextMenu( this.getContextMenu() );
-          item.setTabIndex( null );
-          item.setLabel( items[ i ] );
-          if( i % 2 === 0 ) {
-            item.addState( "even" );
-          }
-          if( this._customVariant !== null ) {
-            item.addState( this._customVariant );
-          }
-          this._clientArea.add( item );
-        }
-      }
-      var child = null;
-      while( this._clientArea.getChildrenLength() > items.length ) {
-        child = this._clientArea.getLastChild();
-        child.removeEventListener( "mouseover", this._onListItemMouseOver, this );
-        child.removeEventListener( "mouseout", this._onListItemMouseOut, this );
-        // [if] Workaround for bug:
-        // 278361: [Combo] Overlays text after changing items
-        // https://bugs.eclipse.org/bugs/show_bug.cgi?id=278361
-        // Items are not removed from DOM if the _isDisplayable property is false.
-        child._isDisplayable = true;
-        child.destroy();
-      }
-      // restore previous selection and focusItem
-      manager.setSelectedItems( oldSelection );
-      manager.setLeadItem( oldLeadItem );
-      if( manager.getMultiSelection() ) {
-        manager.setAnchorItem( oldAnchorItem );
-      }
-      this._updateScrollDimension();
-    },
-
-    _escapeItems : function( items ) {
-      var result = items;
-      if( !this._markupEnabled ) {
-        var EncodingUtil = rwt.util.Encoding;
-        for( var i = 0; i < result.length; i++ ) {
-          result[ i ] = EncodingUtil.replaceNewLines( result[ i ], " " );
-          result[ i ] = EncodingUtil.escapeText( result[ i ], false );
-          result[ i ] = EncodingUtil.replaceWhiteSpaces( result[ i ] );
-        }
-      }
-      return result;
-    },
-
-    getItems : function() {
-      return this.getManager().getItems();
-    },
-
-    getItemsCount : function() {
-      return this.getItems().length;
-    },
-
-    getItemIndex : function( item ) {
-      return this._clientArea.indexOf( item );
-    },
-
-    /**
-     * Sets the single selection for the List to the item specified by the given
-     * itemIndex (-1 to clear selection).
-     */
-    selectItem : function( itemIndex ) {
-      if( itemIndex == -1 ) {
-        this.getManager().deselectAll();
-      } else {
-        var item = this.getItems()[ itemIndex ];
-        this.getManager().setSelectedItem( item );
-        // avoid warning message. scrollIntoView works only for visible widgets
-        // the assumtion is that if 'this' is visible, the item to scroll into
-        // view is also visible
-        if ( this._clientArea.isCreated() && this._clientArea.isDisplayable() ) {
-          this.getManager().scrollItemIntoView( item, undefined );
-        }
-      }
-    },
-
-    /**
-     * Sets the multi selection for the List to the items specified by the given
-     * itemIndices array (empty array to clear selection).
-     */
-    selectItems : function( itemIndices ) {
-      var manager = this.getManager();
-      manager.deselectAll();
-      for( var i = 0; i < itemIndices.length; i++ ) {
-        var item = this.getItems()[ itemIndices[ i ] ];
-        manager.setItemSelected( item, true );
-      }
-    },
-
-    /**
-     * Sets the focused item the List to the item specified by the given
-     * itemIndex (-1 for no focused item).
-     */
-    focusItem : function( itemIndex ) {
-      if( itemIndex == -1 ) {
-        this.getManager().setLeadItem( null );
-      } else {
-        var items = this.getItems();
-        this.getManager().setLeadItem( items[ itemIndex ] );
-      }
-    },
-
-    selectAll : function() {
-      if( this.getManager().getMultiSelection() === true ) {
-        this.getManager().selectAll();
-      }
-    },
-
-    setItemDimensions : function( width, height ) {
-      this._itemWidth = width;
-      this._itemHeight = height;
-      var items = this.getItems();
-      for( var i = 0; i < items.length; i++ ) {
-        this._renderItemDimension( items[ i ] );
-      }
-      this._vertScrollBar.setIncrement( height );
-      this._updateScrollDimension();
-    },
-
-    _updateScrollDimension : function() {
-      var itemCount = this.getItems().length;
-      this._horzScrollBar.setMaximum( this._itemWidth );
-      this._vertScrollBar.setMaximum( this._itemHeight * itemCount );
-    },
-
-    setCustomVariant : function( value ) {
-      if( this._customVariant !== null ) {
-        var oldState = this._customVariant;
-        this._clientArea.forEachChild( function() {
-          this.removeState( oldState );
-        } );
-      }
-      this._clientArea.forEachChild( function() {
-        this.addState( value );
-      } );
-      this.base( arguments, value );
-    },
-
-    _renderItemDimension : function( item ) {
-      item.setWidth( this._itemWidth );
-      item.setHeight( this._itemHeight );
-    },
-
-    _onListItemMouseOver : function( evt ) {
-      evt.getTarget().addState( "over" );
-    },
-
-    _onListItemMouseOut : function( evt ) {
-      evt.getTarget().removeState( "over" );
-    },
-
-    _isHyperlinkTarget : function( event ) {
-      return event.getDomTarget().tagName.toLowerCase() === "a";
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2009, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-/**
- * This class provides the client-side counterpart for
- * org.eclipse.swt.widget.Combo and org.eclipse.swt.custom.CCombo.
- */
-rwt.qx.Class.define( "rwt.widgets.Combo", {
-  extend : rwt.widgets.base.Parent,
-
-  construct : function( isCCombo ) {
-    this.base( arguments );
-    this._ccombo = isCCombo === true;
-    //
-    this._hasSelectionListener = false;
-    this._hasDefaultSelectionListener = false;
-    this._hasModifyListener = false;
-    this._isModified = false;
-    // Default values
-    this._selected = null;
-    this._editable = true;
-    this._dropped = false;
-    this._borderWidth = 0;
-    this._selectionStart = 0;
-    this._selectionLength = 0;
-    this._itemHeight = 20;
-    this._visibleItemCount = 5;
-    // Text field
-    this._field = new rwt.widgets.base.BasicText();
-    this._field.setTabIndex( null );
-    this._field.setAllowStretchY( true );
-    this.add( this._field );
-    // Drop down button
-    this._button = new rwt.widgets.base.Button();
-    this._button.setTabIndex( null );
-    this._button.setHeight( "100%" );
-    this.add( this._button );
-    // List
-    this._list = new rwt.widgets.base.BasicList( false );
-    this._list.setTabIndex( null );
-    this._list.setDisplay( false );
-    this._blockMouseOver = false;
-    this._list.addEventListener( "userScroll", function() {
-      this._blockMouseOver = true;
-      rwt.client.Timer.once( function() {
-        this._blockMouseOver = false;
-      }, this, 300 ); // the browser may fire a mouse event with some delay
-    }, this );
-    // List Manager
-    this._manager = this._list.getManager();
-    this._manager.setMultiSelection( false );
-    this._manager.setDragSelection( false );
-    this._manager.scrollItemIntoView = this._scrollItemIntoView;
-    // Do not visualize the focus rectangle around the widget
-    this.setHideFocus( true );
-    // Add events listeners
-    var cDocument = rwt.widgets.base.ClientDocument.getInstance();
-    cDocument.addEventListener( "windowblur", this._onBlur, this );
-    // Set appearance
-    if( this._ccombo ) {
-      this.setAppearance( "ccombo" );
-      this._field.setAppearance( "ccombo-field" );
-      this._button.setAppearance( "ccombo-button" );
-      this._list.setAppearance( "ccombo-list" );
-    } else {
-      this.setAppearance( "combo" );
-      this._field.setAppearance( "combo-field" );
-      this._button.setAppearance( "combo-button" );
-      this._list.setAppearance( "combo-list" );
-    }
-    // Init events
-    this.addEventListener( "appear", this._onAppear, this );
-    this.addEventListener( "focusin", this._onFocusIn, this );
-    this.addEventListener( "blur", this._onBlur, this );
-    this.addEventListener( "changeWidth", this._onChangeSize, this );
-    this.addEventListener( "changeHeight", this._onChangeSize, this );
-    this.addEventListener( "contextmenu", this._onContextMenu, this );
-    this.addEventListener( "changeFont", this._onChangeFont, this );
-    this.addEventListener( "changeTextColor", this._onChangeTextColor, this );
-    this.addEventListener( "changeBackgroundColor", this._onChangeBackgroundColor, this );
-    this.addEventListener( "changeVisibility", this._onChangeVisibility, this );
-    // Mouse events
-    this.addEventListener( "mousedown", this._onMouseDown, this );
-    this.addEventListener( "mouseup", this._onMouseUp, this );
-    this.addEventListener( "click", this._onMouseClick, this );
-    this.addEventListener( "mousewheel", this._onMouseWheel, this );
-    this.addEventListener( "mouseover", this._onMouseOver, this );
-    this.addEventListener( "mousemove", this._onMouseMove, this );
-    this.addEventListener( "mouseout", this._onMouseOut, this );
-    // Keyboard events
-    this.addEventListener( "keydown", this._onKeyDown, this );
-    this.addEventListener( "keypress", this._onKeyPress, this );
-    this._field.addEventListener( "keypress", this._onKeyPress, this );
-    // Specific events
-    this._field.addEventListener( "blur", this._onTextBlur, this );
-    this._field.addEventListener( "input", this._onTextInput, this );
-    this._list.addEventListener( "appear", this._onListAppear, this );
-    this._setupCaptureRestore();
-  },
-
-  destruct : function() {
-    var cDocument = rwt.widgets.base.ClientDocument.getInstance();
-    cDocument.removeEventListener( "windowblur", this._onBlur, this );
-    this.removeEventListener( "appear", this._onAppear, this );
-    this.removeEventListener( "focusin", this._onFocusIn, this );
-    this.removeEventListener( "blur", this._onBlur, this );
-    this.removeEventListener( "changeWidth", this._onChangeSize, this );
-    this.removeEventListener( "changeHeight", this._onChangeSize, this );
-    this.removeEventListener( "contextmenu", this._onContextMenu, this );
-    this.removeEventListener( "changeFont", this._onChangeFont, this );
-    this.removeEventListener( "changeTextColor", this._onChangeTextColor, this );
-    this.removeEventListener( "changeBackgroundColor", this._onChangeBackgroundColor, this );
-    this.removeEventListener( "changeVisibility", this._onChangeVisibility, this );
-    this.removeEventListener( "mousedown", this._onMouseDown, this );
-    this.removeEventListener( "mouseup", this._onMouseUp, this );
-    this.removeEventListener( "click", this._onMouseClick, this );
-    this.removeEventListener( "mousewheel", this._onMouseWheel, this );
-    this.removeEventListener( "mouseover", this._onMouseOver, this );
-    this.removeEventListener( "mouseout", this._onMouseOut, this );
-    this.removeEventListener( "keydown", this._onKeyDown, this );
-    this.removeEventListener( "keypress", this._onKeyPress, this );
-    this._field.removeEventListener( "keypress", this._onKeyPress, this );
-    this._field.removeEventListener( "blur", this._onTextBlur, this );
-    this._field.removeEventListener( "input", this._onTextInput, this );
-    this._list.removeEventListener( "appear", this._onListAppear, this );
-    // Solution taken from Qooxdoo implementation of ComboBox
-    // in order to prevent memory leak and other problems.
-    if( this._list && !rwt.qx.Object.inGlobalDispose() ) {
-      this._list.setParent( null );
-    }
-    this._disposeObjects( "_field",
-                          "_button",
-                          "_list",
-                          "_manager",
-                          "_selected" );
-  },
-
-  events : {
-    "itemsChanged" : "rwt.event.Event",
-    "selectionChanged" : "rwt.event.Event"
-  },
-
-  members : {
-
-    addState : function( state ) {
-      this.base( arguments, state );
-      if( state.substr( 0, 8 ) == "variant_" ) {
-        this._field.addState( state );
-        this._list.addState( state );
-        this._button.addState( state );
-      }
-    },
-
-    removeState : function( state ) {
-      this.base( arguments, state );
-      if( state.substr( 0, 8 ) == "variant_" ) {
-        this._field.removeState( state );
-        this._list.removeState( state );
-        this._button.removeState( state );
-      }
-    },
-
-    _onChangeSize : function( evt ) {
-      this._setListBounds();
-    },
-
-    _onAppear : function( evt ) {
-        if( this.hasState( "rwt_FLAT" ) ) {
-          this._field.addState( "rwt_FLAT" );
-          this._button.addState( "rwt_FLAT" );
-          this._list.addState( "rwt_FLAT" );
-        }
-        if( this.hasState( "rwt_BORDER" ) ) {
-          this._field.addState( "rwt_BORDER" );
-          this._button.addState( "rwt_BORDER" );
-          this._list.addState( "rwt_BORDER" );
-        }
-        this.getTopLevelWidget().add( this._list );
-    },
-
-    _onFocusIn : function( evt ) {
-      if(    this._field.isCreated()
-          && !rwt.remote.EventUtil.getSuspended() )
-      {
-        this._handleSelectionChange();
-      }
-    },
-
-    _onContextMenu : function( evt ) {
-      var menu = this.getContextMenu();
-      if( menu != null && !this._dropped ) {
-        menu.setLocation( evt.getPageX(), evt.getPageY() );
-        menu.setOpener( this );
-        menu.show();
-        evt.stopPropagation();
-      }
-    },
-
-    _onChangeFont : function( evt ) {
-      var value = evt.getValue();
-      this._field.setFont( value );
-      var items = this._list.getItems();
-      for( var i = 0; i < items.length; i++ ) {
-        items[ i ].setFont( value );
-      }
-    },
-
-    _onChangeTextColor : function( evt ) {
-      var value = evt.getValue();
-      this._field.setTextColor( value );
-      this._list.setTextColor( value );
-    },
-
-    _onChangeBackgroundColor : function( evt ) {
-      var color = evt.getValue();
-      // Ensure that the list is never transparent (see bug 282540)
-      if( color != null ) {
-        this._list.setBackgroundColor( color );
-      } else {
-        this._list.resetBackgroundColor();
-      }
-    },
-
-    _onChangeVisibility : function( evt ) {
-      var value = evt.getValue();
-      if( !value && this._dropped ) {
-        this._toggleListVisibility();
-      }
-    },
-
-    _applyCursor : function( value, old ) {
-      this.base( arguments, value, old );
-      if( value ) {
-        this._field.setCursor( value );
-        this._button.setCursor( value );
-        this._list.setCursor( value );
-      } else {
-        this._field.resetCursor();
-        this._button.resetCursor();
-        this._list.resetCursor();
-      }
-    },
-
-    // Focus handling methods
-    _visualizeFocus : function() {
-      if( this._field.isCreated() ) {
-        this._field._visualizeFocus();
-      }
-      if( !this._editable ) {
-        var focusIndicator = rwt.widgets.util.FocusIndicator.getInstance();
-        var cssSelector = this._ccombo ? "CCombo-FocusIndicator" : "Combo-FocusIndicator";
-        focusIndicator.show( this, cssSelector, null );
-      }
-      this.addState( "focused" );
-    },
-
-    // Override of the _ontabfocus method from rwt.widgets.base.Widget
-    _ontabfocus : function() {
-      if( this._field.isCreated() ) {
-        this._field.selectAll();
-      }
-    },
-
-    _visualizeBlur : function() {
-      if( this._field.isCreated() ) {
-        // setting selection lenght to 0 needed for IE to deselect text
-        this._field._setSelectionLength( 0 );
-        this._field._visualizeBlur();
-      }
-      if( !this._editable ) {
-        var focusIndicator = rwt.widgets.util.FocusIndicator.getInstance();
-        focusIndicator.hide( this );
-      }
-      this.removeState( "focused" );
-    },
-
-    // On "blur" or "windowblur" event: closes the list, if it is seeable
-    _onBlur : function( evt ) {
-      if( this._dropped ) {
-        this._toggleListVisibility();
-      }
-    },
-
-    ///////////////////////////////////////
-    // List and list-items handling methods
-
-    _setListBounds : function() {
-      if( this.getElement() ){
-        var elementPos = rwt.html.Location.get( this.getElement() );
-        var listLeft = elementPos.left;
-        var comboTop = elementPos.top;
-        var listTop = comboTop + this.getHeight();
-        var browserHeight = rwt.html.Window.getInnerHeight( window );
-        var browserWidth = rwt.html.Window.getInnerWidth( window );
-        var itemsWidth = this._list.getPreferredWidth();
-        var listWidth = Math.min( browserWidth - listLeft, itemsWidth );
-        listWidth = Math.max( this.getWidth(), listWidth );
-        var itemsHeight = this._list.getItemsCount() * this._itemHeight;
-        var listHeight = Math.min( this._getListMaxHeight(), itemsHeight );
-        listHeight += this._list.getFrameHeight();
-        if(    browserHeight < listTop + listHeight
-            && comboTop > browserHeight - listTop )
-        {
-          listTop = elementPos.top - listHeight;
-        }
-        this._list.setLocation( listLeft, listTop );
-        this._list.setWidth( listWidth );
-        this._list.setHeight( listHeight );
-        this._list.setItemDimensions( listWidth, this._itemHeight );
-      }
-    },
-
-    _toggleListVisibility : function() {
-      if( this._list.getItemsCount() ) {
-        // Temporary make the text field ReadOnly, when the list is dropped.
-        if( this._editable ) {
-          this._field.setReadOnly( !this._dropped  );
-        }
-        if( !this._dropped ) {
-          // Brings this widget on top of the others with same parent.
-          this._bringToFront();
-        }
-        this.setCapture( !this._dropped );
-        this._list.setDisplay( !this._dropped );
-        if( this._list.getDisplay() ) {
-          this._setListBounds();
-        }
-        this._dropped = !this._dropped;
-        if( this._dropped ) {
-          this._setListSelection( this._selected );
-        }
-        this._updateListScrollBar();
-        this._updateListVisibleRequestParam();
-      }
-    },
-
-    _updateListScrollBar : function() {
-      if( this._dropped ) {
-        var itemsHeight = this._list.getItemsCount() * this._itemHeight;
-        var visible = this._getListMaxHeight() < itemsHeight;
-        this._list.setScrollBarsVisible( false, visible );
-      }
-    },
-
-    _resetListSelection : function() {
-      this._manager.deselectAll();
-      this._manager.setLeadItem( null );
-      this._manager.setAnchorItem( null );
-    },
-
-    _setListSelection : function( item ) {
-      this._manager.deselectAll();
-      this._manager.setLeadItem( item );
-      this._manager.setAnchorItem( item );
-      this._manager.setSelectedItem( item );
-    },
-
-    _onListAppear : function( evt ) {
-      if( this._selected ) {
-        this._selected.scrollIntoView();
-        this._list._syncScrollBars();
-      }
-    },
-
-    _bringToFront : function() {
-      var allWidgets = this.getTopLevelWidget().getChildren();
-      var topZIndex = this._list.getZIndex();
-      for( var vHashCode in allWidgets ) {
-        var widget = allWidgets[ vHashCode ];
-        if( widget.getZIndex ) {
-          if( topZIndex < widget.getZIndex() ) {
-            topZIndex = widget.getZIndex();
-          }
-        }
-      }
-      if( topZIndex > this._list.getZIndex() ) {
-        this._list.setZIndex( topZIndex + 1 );
-      }
-    },
-
-    _setSelected : function( value ) {
-      this._selected = value;
-      if( value ) {
-        var fieldValue = value.getLabel().toString();
-        this.setText( this._formatText( fieldValue ) );
-        if( this._field.isCreated() ) {
-          if( !rwt.remote.EventUtil.getSuspended() ) {
-            this._field.selectAll();
-            this._handleSelectionChange();
-          }
-        }
-        this._setListSelection( value );
-        this._manager.scrollItemIntoView( value );
-      } else {
-        if( !this._editable ) {
-          this.setText( "" );
-        }
-        this._resetListSelection();
-      }
-      this._sendWidgetSelected();
-      this.dispatchSimpleEvent( "selectionChanged" );
-    },
-
-    // [if] avoid warning message - see bug 300038
-    _scrollItemIntoView : function( item, topLeft ) {
-      if( item.isCreated() && item.isDisplayable() ) {
-        item.scrollIntoView( topLeft );
-      }
-    },
-
-    _formatText : function( value ) {
-      var result = value;
-      result = result.replace( /<[^>]+?>/g, "" );
-      result = rwt.util.Encoding.unescape( result );
-      return result;
-    },
-
-    ////////////////////////////////
-    // Mouse events handling methods
-
-    _reDispatch : function( event ) {
-      var originalTarget = event.getTarget();
-      if( this._list.contains( originalTarget ) ) {
-        // TODO [tb] : should be disposed automatically, test
-        originalTarget.dispatchEvent( event, false );
-        event.stopPropagation();
-      }
-    },
-
-    _onMouseDown : function( evt ) {
-      if( evt.isLeftButtonPressed() ) {
-        if( evt.getTarget() == this._field ) {
-          if( !this._editable || this._dropped ) {
-            this._toggleListVisibility();
-          }
-        } else if( this._dropped ) {
-          this._reDispatch( evt );
-        }
-      }
-    },
-
-    _onMouseClick : function( evt ) {
-      if( evt.isLeftButtonPressed() ) {
-        // In case the 'mouseout' event has not been catched
-        if( this._button.hasState( "over" ) ) {
-          this._button.removeState( "over" );
-        }
-        // Redirecting the action, according to the click target
-        var target = evt.getTarget();
-        // Click is on a list item
-        if(    target instanceof rwt.widgets.ListItem
-            && target === this._list.getListItemTarget( target ) )
-        {
-          this._reDispatch( evt );
-          this._toggleListVisibility();
-          this._setSelected( this._manager.getSelectedItem() );
-          this.setFocused( true );
-        // Click is on the combo's button or outside the dropped combo
-        } else if(    target == this._button
-                   || (    this._dropped
-                        && target != this
-                        && target != this._field
-                        && !this._list.contains( target ) ) )
-        {
-          this._toggleListVisibility();
-        }
-      }
-    },
-
-    _onMouseUp : function( evt ) {
-      if( !this._dropped ) {
-        this.setCapture( false );
-      }
-      if(    evt.getTarget() == this._field
-          && !rwt.remote.EventUtil.getSuspended() )
-      {
-        this._handleSelectionChange();
-      } else if( this._dropped ) {
-        this._reDispatch( evt );
-      }
-    },
-
-    _onMouseWheel : function( evt ) {
-      if( this._dropped ) {
-        if( !this._list.isRelevantEvent( evt ) ) {
-          evt.preventDefault();
-          evt.stopPropagation();
-        }
-      } else if( this.getFocused() ) {
-        evt.preventDefault();
-        evt.stopPropagation();
-        var toSelect;
-        var isSelected = this._selected;
-        if( isSelected ) {
-          if( evt.getWheelDelta() < 0 ) {
-            toSelect = this._manager.getNext( isSelected );
-          } else {
-            toSelect = this._manager.getPrevious( isSelected );
-          }
-          if( toSelect ) {
-            this._setSelected( toSelect );
-          }
-        } else if( this._list.getItemsCount() ) {
-          this._setSelected( this._list.getItems()[0] );
-        }
-      }
-    },
-
-    _onMouseOver : function( evt ) {
-      var target = evt.getTarget();
-      if( target instanceof rwt.widgets.ListItem && !this._blockMouseOver ) {
-        this._setListSelection( target );
-      } else if( target == this._button ) {
-        this._button.addState( "over" );
-      }
-    },
-
-    _onMouseMove : function( evt ) {
-      var target = evt.getTarget();
-      if(    target instanceof rwt.widgets.ListItem
-          && this._manager.getSelectedItem() !== evt.getTarget() )
-      {
-        this._onMouseOver( evt );
-      }
-    },
-
-    _onMouseOut : function( evt ) {
-      if( evt.getTarget() == this._button ) {
-        this._button.removeState( "over" );
-      }
-    },
-
-    _setupCaptureRestore : function() {
-      var thumb = this._list._vertScrollBar._thumb;
-      thumb.addEventListener( "mouseup", this._captureRestore, this );
-    },
-
-    _captureRestore : function( event ) {
-      this.setCapture( true );
-    },
-
-    ////////////////////////////////////
-    // Keyboard events handling methods
-
-    _onKeyDown : function( evt ) {
-      switch( evt.getKeyIdentifier() ) {
-        case "Enter":
-          if( this._dropped ) {
-            this._toggleListVisibility();
-            this._setSelected( this._manager.getSelectedItem() );
-          } else if(    !evt.isShiftPressed()
-                     && !evt.isAltPressed()
-                     && !evt.isCtrlPressed()
-                     && !evt.isMetaPressed() )
-          {
-            this._sendWidgetDefaultSelected();
-          }
-          this.setFocused( true );
-          evt.stopPropagation();
-        break;
-        case "Escape":
-          if( this._dropped ) {
-            this._toggleListVisibility();
-            this.setFocused( true );
-            evt.stopPropagation();
-          }
-        break;
-        case "Down":
-        case "Up":
-        case "PageUp":
-        case "PageDown":
-          if( evt.isAltPressed() ) {
-            this._toggleListVisibility();
-          } else {
-            if( this._selected || this._manager.getSelectedItem() ) {
-              this._list._onkeypress( evt );
-              var selected = this._manager.getSelectedItem();
-              this._setSelected( selected );
-            } else if( this._list.getItemsCount() ) {
-              this._setSelected( this._list.getItems()[ 0 ] );
-            }
-          }
-        break;
-      }
-      if( this._field.isCreated() && !rwt.remote.EventUtil.getSuspended() ) {
-        this._handleSelectionChange();
-      }
-    },
-
-    _onKeyPress : function( evt ) {
-      switch( evt.getKeyIdentifier() ) {
-        case "Escape":
-        case "Down":
-        case "Up":
-        case "PageUp":
-        case "PageDown":
-          evt.stopPropagation();
-        break;
-        case "Tab":
-          if( this._dropped ) {
-            this._toggleListVisibility();
-          }
-        break;
-        case "Right":
-          if( this._dropped ) {
-            var toSelect =   this._selected
-                           ? this._manager.getNext( this._selected )
-                           : this._manager.getFirst();
-            if( toSelect ) {
-              this._setSelected( toSelect );
-            }
-          }
-        break;
-        case "Left":
-          if( this._dropped ) {
-            var toSelect =   this._selected
-                           ? this._manager.getPrevious( this._selected )
-                           : this._manager.getLast();
-            if( toSelect ) {
-              this._setSelected( toSelect );
-            }
-          }
-        break;
-        case "Enter":
-          evt.preventDefault();
-        break;
-      }
-      if( this._field.isCreated() && !rwt.remote.EventUtil.getSuspended() ) {
-        this._handleSelectionChange();
-      }
-      if( evt.getCharCode() !== 0 ) {
-        this._onKeyInput( evt );
-      }
-    },
-
-    // Additional check for ALT and CTRL keys is added to fix bug 288344
-    _onKeyInput : function( evt ) {
-      if( ( this._dropped || !this._editable ) && !evt.isAltPressed() && !evt.isCtrlPressed() ) {
-        this._list._onkeyinput( evt );
-        var selected = this._manager.getSelectedItem();
-        if( selected != null ) {
-          this._setSelected( selected );
-        } else {
-          this._setListSelection( this._selected );
-        }
-      }
-    },
-
-    _onTextInput : function( evt ) {
-      if( this._editable ) {
-        this._isModified = true;
-        this._selected = null;
-        this._resetListSelection();
-        if( !rwt.remote.EventUtil.getSuspended() ) {
-          var req = rwt.remote.Server.getInstance();
-          req.addEventListener( "send", this._onSend, this );
-          if( this._hasModifyListener ) {
-            rwt.client.Timer.once( this._sendModifyText, this, 500 );
-          }
-        }
-      }
-    },
-
-    ///////////////////////////////////////////////
-    // Actions, connected with server communication
-
-    _onTextBlur : function( evt ) {
-      if( !rwt.remote.EventUtil.getSuspended() && this._isModified ) {
-        var req = rwt.remote.Server.getInstance();
-        req.send();
-      }
-    },
-
-    _onSend : function( evt ) {
-      var server = rwt.remote.Server.getInstance();
-      server.getRemoteObject( this ).set( "text", this._field.getComputedValue() );
-      server.removeEventListener( "send", this._onSend, this );
-      this._isModified = false;
-      this.setText( this._field.getComputedValue() );
-    },
-
-    _sendModifyText : function() {
-      var server = rwt.remote.Server.getInstance();
-      server.getRemoteObject( this ).notify( "Modify" );
-      this._isModified = false;
-    },
-
-    _sendWidgetSelected : function() {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        var listItem = this._list.getSelectedItem();
-        var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( this );
-        remoteObject.set( "selectionIndex", this._list.getItemIndex( listItem ) );
-        if( this._hasSelectionListener ) {
-          rwt.remote.EventUtil.notifySelected( this );
-        }
-        if( this._hasModifyListener ) {
-          this._sendModifyText();
-        }
-      }
-    },
-
-    _sendWidgetDefaultSelected : function() {
-      if( this._hasDefaultSelectionListener && !rwt.remote.EventUtil.getSuspended() ) {
-        rwt.remote.EventUtil.notifyDefaultSelected( this );
-      }
-    },
-
-    _updateListVisibleRequestParam : function() {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        var server = rwt.remote.Server.getInstance();
-        server.getRemoteObject( this ).set( "listVisible", this._list.getDisplay() );
-      }
-    },
-
-    // Checks for a text field selection change and updates
-    // the request parameter if necessary.
-    _handleSelectionChange : function() {
-      var sel = this._field.getComputedSelection();
-      var start = sel[ 0 ];
-      // TODO [ad] Solution from TextUtil.js - must be in synch with it
-      // TODO [rst] Quick fix for bug 258632
-      //            https://bugs.eclipse.org/bugs/show_bug.cgi?id=258632
-      if( start === undefined ) {
-        start = 0;
-      }
-      var length = sel[ 1 ] - sel[ 0 ];
-      // TODO [ad] Solution from TextUtil.js - must be in synch with it
-      // TODO [rst] Workaround for qx bug 521. Might be redundant as the
-      //            bug is marked as (partly) fixed.
-      //            See http://bugzilla.qooxdoo.org/show_bug.cgi?id=521
-      if( typeof length == "undefined" ) {
-        length = 0;
-      }
-      if( this._selectionStart != start || this._selectionLength != length ) {
-        var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( this );
-        this._selectionStart = start;
-        remoteObject.set( "selectionStart", start );
-        this._selectionLength = length;
-        remoteObject.set( "selectionLength", length );
-      }
-    },
-
-    _getListMaxHeight : function() {
-      return this._itemHeight * this._visibleItemCount;
-    },
-
-    //////////////
-    // Set methods
-
-    setItems : function( items ) {
-      this._list.setItems( items );
-      this.createDispatchEvent( "itemsChanged" );
-    },
-
-    setVisibleItemCount : function( value ) {
-      this._visibleItemCount = value;
-    },
-
-    setItemHeight : function( value ) {
-      this._itemHeight = value;
-    },
-
-    select : function( index ) {
-      var items = this._list.getItems();
-      var item = null;
-      if( index >= 0 && index <= items.length - 1 ) {
-        item = items[ index ];
-      }
-      this._setSelected( item );
-    },
-
-    setEditable : function( value ) {
-      this._editable = value;
-      this._field.setReadOnly( !value );
-      this._field.setCursor( value ? null : "default" );
-    },
-
-    setListVisible : function( value ) {
-      if( this._list.getDisplay() != value ) {
-        this._dropped = !value;
-        this._toggleListVisibility();
-      }
-    },
-
-    setText : function( value ) {
-      this._field.setValue( value );
-    },
-
-    setTextSelection : function( start, length ) {
-      if( this._field.isCreated() ) {
-        this._selectionStart = start;
-        this._selectionLength = length;
-        this._field.setSelection( start, start + length );
-      }
-    },
-
-    setTextLimit : function( value ) {
-      this._field.setMaxLength( value );
-    },
-
-    setHasSelectionListener : function( value ) {
-      this._hasSelectionListener = value;
-    },
-
-    setHasDefaultSelectionListener : function( value ) {
-      this._hasDefaultSelectionListener = value;
-    },
-
-    setHasModifyListener : function( value ) {
-      this._hasModifyListener = value;
-    },
-
-    ////////////////////////////
-    // apply subwidget html IDs
-
-    applyObjectId : function( id ) {
-      this.base( arguments, id );
-      if( rwt.widgets.base.Widget._renderHtmlIds ) {
-        this._list.applyObjectId( id + "-listbox" );
-        this.addEventListener( "itemsChanged", this._applyListItemIds );
-      }
-    },
-
-    _applyListItemIds : function() {
-      var listId = this._list.getHtmlAttribute( "id" );
-      var listItems = this._list.getItems();
-      if( listItems ) {
-        for( var i = 0; i < listItems.length; i++ ) {
-          listItems[ i ].setHtmlAttribute( "id", this._list.getHtmlAttribute( "id" ) + "-listitem-" + i );
-        }
-      }
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.Combo", {
-
-  factory : function( properties ) {
-    var result = new rwt.widgets.Combo( properties.ccombo );
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "itemHeight",
-    "visibleItemCount",
-    "items",
-    "listVisible",
-    "selectionIndex",
-    "editable",
-    "text",
-    "selection",
-    "textLimit"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    "selectionIndex" : function( widget, value ) {
-      widget.select( value );
-    },
-    "selection" : function( widget, value ) {
-      var start = value[ 0 ];
-      var length = value[ 1 ] - value[ 0 ];
-      widget.setTextSelection( start, length );
-    }
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [
-    "Selection",
-    "DefaultSelection",
-    "Modify"
-  ] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2009, 2012 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.util.FocusIndicator", {
-  type : "singleton",
-  extend : rwt.qx.Object,
-
-  construct : function() {
-    this.base( arguments );
-    this._frame = null;
-  },
-
-  members : {
-
-    _createFrame : function() {
-      this._frame = document.createElement( "div" );
-      this._frame.setAttribute( "id", "focusIndicator" ); // used by unit tests
-      this._frame.style.position = "absolute";
-      this._frame.style.fontSize = 0;
-      this._frame.style.lineHeight = 0;
-      this._frame.style.zIndex = 0;
-    },
-
-    _createTheme : function( widget, cssSelector, focusElement ) {
-      var theme = null;
-      var states = typeof widget.__states != "undefined" ? widget.__states : {};
-      var tv = new rwt.theme.ThemeValues( states );
-      var border = tv.getCssBorder( cssSelector, "border" );
-      var opacity = tv.getCssFloat( cssSelector, "opacity" );
-      var hasValidBorder = border instanceof rwt.html.Border;
-      var margin = tv.getCssBoxDimensions( cssSelector, "margin" );
-      var padding = tv.getCssBoxDimensions( cssSelector, "padding" );
-      if( !padding ) {
-        padding = [ 0, 0, 0, 0 ];
-      }
-      var paddingIsZero =    padding[ 0 ] === 0
-                          && padding[ 1 ] === 0
-                          && padding[ 2 ] === 0
-                          && padding[ 3 ] === 0;
-      var usePadding = !paddingIsZero && focusElement != null;
-      if( hasValidBorder && ( margin != null || usePadding ) ) {
-        var color = tv.getCssColor( cssSelector, "background-color" );
-        theme = {
-          "backgroundColor" : color != "undefined" ? color : "",
-          "opacity" : opacity,
-          "border" : border,
-          "margin" : margin,
-          "padding" : usePadding ? padding : null
-        };
-      }
-      return theme;
-    },
-
-    show : function( widget, cssSelector, focusElement ) {
-      this.hide();
-      if( widget.isCreated() ) {
-        var theme = this._createTheme( widget, cssSelector, focusElement );
-        if( theme != null ) {
-          var parentNode = widget._getTargetNode();
-          if( this._frame == null ) {
-            this._createFrame();
-          }
-          if( this._frame.parentNode != parentNode ) {
-            if( parentNode.hasChildNodes() ) {
-              var firstChild = parentNode.firstChild;
-              parentNode.insertBefore( this._frame, firstChild );
-            } else {
-              parentNode.appendChild( this._frame );
-            }
-          }
-          this._styleFocusIndicator( theme );
-          this._layoutFocusIndicator( widget, theme, focusElement );
-        }
-      }
-    },
-
-
-    hide : function() {
-      if( this._frame != null && this._frame.parentNode != null ) {
-        this._frame.parentNode.removeChild( this._frame );
-      }
-    },
-
-    _styleFocusIndicator : function( theme ) {
-      // ignores complex borders and color-manager (for now):
-      var border = theme[ "border" ];
-      var style = this._frame.style;
-      var edges = [ "Left", "Top", "Bottom", "Right" ];
-      for( var i = 0; i < 4; i++ ) {
-        var edge = edges[ i ];
-        var borderColor = border[ "getColor" + edge ]();
-        var borderStyle = border[ "getStyle" + edge ]();
-        var borderWidth = border[ "getWidth" + edge ]();
-        style[ "border" + edge + "Width" ] = borderWidth == null ? "0px" : borderWidth + "px";
-        style[ "border" + edge + "Style" ] = borderStyle == null ? "none" : borderStyle;
-        style[ "border" + edge + "Color" ] = borderColor == null ? "" : borderColor;
-      }
-      style.backgroundColor = theme[ "backgroundColor" ];
-      this._styleFocusIndiactorOpacity( theme[ "opacity" ] );
-    },
-
-    _styleFocusIndiactorOpacity : rwt.util.Variant.select( "qx.client", {
-      "default" : function( value ) {
-        var style = this._frame.style;
-        var opacity = value == 1 ? "" : value;
-        style.opacity = opacity;
-        style.KhtmlOpacity = opacity;
-        style.MozOpacity = opacity;
-      },
-      "mshtml" : function( value ) {
-        var style = this._frame.style;
-        var opacity =
-          value == 1 ? "" : "Alpha(Opacity=" + ( value * 100 ) + ")";
-        style.filter = opacity;
-      }
-    } ),
-
-    _layoutFocusIndicator : function( widget, theme, focusElement ) {
-      // NOTE : It is assumed that a focusElement, if given, has
-      //        valid css-bounds (top,left,width,height) set in "px".
-      var border = theme[ "border" ];
-      var bounds = [];
-      if( theme[ "padding" ] != null ) {
-        var padding = theme[ "padding" ];
-        bounds[ 0 ] = parseInt( focusElement.style.left, 10 ) - padding[ 3 ];
-        bounds[ 1 ] = parseInt( focusElement.style.top, 10 ) - padding[ 0 ];
-        bounds[ 2 ] = parseInt( focusElement.style.width, 10 ) + padding[ 1 ] + padding[ 3 ];
-        bounds[ 3 ] = parseInt( focusElement.style.height, 10 ) + padding[ 2 ] + padding[ 0 ];
-      } else {
-        var margin = theme[ "margin" ];
-        // Fix for bug 312544
-        widget._invalidateBoxWidth();
-        widget._invalidateBoxHeight();
-        var parentWidth = widget.getBoxWidth() - widget._cachedBorderLeft - widget._cachedBorderRight;
-        var parentHeight =   widget.getBoxHeight()
-                           - widget._cachedBorderTop
-                           - widget._cachedBorderBottom;
-        widget._invalidateBoxWidth();
-        widget._invalidateBoxHeight();
-        bounds[ 0 ] = margin[ 3 ];
-        bounds[ 1 ] = margin[ 0 ];
-        bounds[ 2 ] = parentWidth - ( margin[ 3 ] + margin[ 1 ] );
-        bounds[ 3 ] = parentHeight - ( margin[ 0 ] + margin[ 2 ] );
-        bounds[ 2 ] = Math.max( 0, bounds[ 2 ] );
-        bounds[ 3 ] = Math.max( 0, bounds[ 3 ] );
-      }
-      this._frame.style.left = bounds[ 0 ] + "px";
-      this._frame.style.top = bounds[ 1 ] + "px";
-      this._frame.style.width = bounds[ 2 ] + "px";
-      this._frame.style.height = bounds[ 3 ] + "px";
-    }
-  }
-
-} );
-
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.GC", {
-
-  factory : function( properties ) {
-    var parent = rwt.remote.ObjectRegistry.getObject( properties.parent );
-    var result = new rwt.widgets.GC( parent );
-    rwt.remote.HandlerUtil.addDestroyableChild( parent, result );
-    return result;
-  },
-
-  destructor : function( gc ) {
-    rwt.remote.HandlerUtil.removeDestroyableChild( gc._control, gc );
-    gc.dispose();
-  },
-
-  methods : [ "init", "draw" ],
-
-  methodHandler : {
-    "init" : function( gc, properties ) {
-      gc.init(
-        properties.width,
-        properties.height,
-        properties.font,
-        properties.fillStyle,
-        properties.strokeStyle
-      );
-    },
-    "draw" : function( gc, properties ) {
-      gc.draw( properties.operations );
-    }
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2010, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.GC", {
-
-  extend : rwt.qx.Object,
-
-  construct : function( control ) {
-    this.base( arguments );
-    this._control = control;
-    this._control.addEventListener( "create", this._onControlCreate, this );
-    this._vmlCanvas = null;
-    this._canvas = null;
-    this._context = null;
-    this._createCanvas();
-    this._canvas.rwtObject = this; // like "rwtWidget" in Widget.js, useful for custom JS components
-    this._textCanvas = document.createElement( "div" );
-    this._textCanvas.style.position = "absolute";
-    this._textCanvas.style.overflow = "hidden";
-    this._textCanvas.style.left = "0px";
-    this._textCanvas.style.top = "0px";
-    this._textCanvas.rwtObject = this;
-    if( this._control.isCreated() ) {
-      this._addCanvasToDOM();
-    }
-    this._linearGradient = null;
-  },
-
-  destruct : function() {
-    this._control.removeEventListener( "create", this._onControlCreate, this );
-    if( rwt.client.Client.isMshtml() ) {
-      this._control.removeEventListener( "insertDom", this._onCanvasAppear, this );
-    }
-    if( this._control.isCreated() && !this._control.isDisposed() ) {
-      this._removeCanvasFromDOM();
-    }
-    this._control = null;
-    this._canvas.rwtObject = null;
-    this._canvas = null;
-    if( this._context.dispose ) {
-      this._context.dispose();
-    }
-    this._context = null;
-    this._textCanvas.rwtObject = null;
-    this._textCanvas = null;
-  },
-
-  members : {
-
-    init : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function( width, height, font, background, foreground ) {
-        // TODO [tb]: Should the control be detached from the DOM
-        // (e.g. by Widget.prepareEnhancedBorder), this might lead to glitches
-        // in IE/VML. The flush prevents this in some cases:
-        rwt.widgets.base.Widget.flushGlobalQueues();
-        this._initTextCanvas( width, height );
-        this._context.clearRect( 0, 0, width, height );
-        this._initFields( font, background, foreground );
-        this._control.dispatchSimpleEvent( "paint" ); // client-side painting on server-side redraw
-      },
-      "default" : function( width, height, font, background, foreground  ) {
-        this._initTextCanvas( width, height );
-        this._canvas.width = width;
-        this._canvas.style.width = width + "px";
-        this._canvas.height = height;
-        this._canvas.style.height = height + "px";
-        this._context.clearRect( 0, 0, width, height );
-        this._initFields( font, background, foreground );
-        this._control.dispatchSimpleEvent( "paint" ); // client-side painting on server-side redraw
-      }
-    } ),
-
-
-    /**
-     * Executes drawing operations using the HTML5-Canvas 2D-Context syntax.
-     * Only a subset is supported on all browser, especially IE is limited.
-     * Each operation is an array starting with the name of the function to call, followed
-     * by its parameters. Properties are treated the same way, i.e. [ "propertyName", "value" ].
-     * Other differences from official HTML5-Canvas API:
-     *  - Colors are to be given as array ( [ red, green blue ] )
-     *  - "addColorStop" will automatically applied to the last created gradient.
-     *  - To assign the last created linear gradient as a style, use "linearGradient" as the value.
-     *  - strokeText behaves like fillText and fillText draws a rectangular background
-     *  - ellipse is not a W3C standard, only WHATWG, but we need it for SWT arc to work.
-     */
-    draw : function( operations ) {
-      for( var i = 0; i < operations.length; i++ ) {
-        try {
-          var op = operations[ i ][ 0 ];
-          switch( op ) {
-            case "fillStyle":
-            case "strokeStyle":
-            case "globalAlpha":
-            case "lineWidth":
-            case "lineCap":
-            case "lineJoin":
-            case "font":
-              this._setProperty( operations[ i ] );
-            break;
-            case "createLinearGradient":
-            case "addColorStop":
-            case "fillText":
-            case "strokeText":
-            case "ellipse":
-            case "drawImage":
-              this[ "_" + op ]( operations[ i ] );
-            break;
-            default:
-              this._context[ op ].apply( this._context, operations[ i ].slice( 1 ) );
-            break;
-          }
-        } catch( ex ) {
-          var opArrStr = "[ " + operations[ i ].join( ", " ) + " ]";
-          throw new Error( "Drawing operation failed: " + opArrStr + " :" + ex.message );
-        }
-      }
-    },
-
-    getNativeContext : function() {
-      return this._context;
-    },
-
-    ////////////
-    // Internals
-
-    _createCanvas : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function() {
-        this._vmlCanvas = rwt.graphics.VML.createCanvas();
-        this._canvas = rwt.graphics.VML.getCanvasNode( this._vmlCanvas );
-        this._context = new rwt.graphics.VMLCanvas( this._vmlCanvas );
-        this._control.addEventListener( "insertDom", this._onCanvasAppear, this );
-      },
-      "default" : function() {
-        this._canvas = document.createElement( "canvas" );
-        this._context = this._canvas.getContext( "2d" );
-      }
-    } ),
-
-    _onControlCreate : function() {
-      this._addCanvasToDOM();
-    },
-
-    _onCanvasAppear : function() {
-      var graphicsUtil = rwt.graphics.GraphicsUtil;
-      graphicsUtil.handleAppear( this._vmlCanvas );
-    },
-
-    _addCanvasToDOM  : function() {
-      // TODO [tb] : append textCanvas onDemand
-      var controlElement = this._control._getTargetNode();
-      var firstChild = controlElement.firstChild;
-      if( firstChild ) {
-        controlElement.insertBefore( this._canvas, firstChild );
-        controlElement.insertBefore( this._textCanvas, firstChild );
-      } else {
-        controlElement.appendChild( this._canvas );
-        controlElement.appendChild( this._textCanvas );
-      }
-    },
-
-    _removeCanvasFromDOM : function() {
-      this._canvas.parentNode.removeChild( this._canvas );
-      this._textCanvas.parentNode.removeChild( this._textCanvas );
-    },
-
-    _initTextCanvas : function( width, height ) {
-      this._textCanvas.width = width;
-      this._textCanvas.style.width = width + "px";
-      this._textCanvas.height = height;
-      this._textCanvas.style.height = height + "px";
-      this._textCanvas.innerHTML = "";
-    },
-
-    _initFields : function( font, background, foreground ) {
-      this._context.strokeStyle = rwt.util.Colors.rgbToRgbString( foreground );
-      this._context.fillStyle = rwt.util.Colors.rgbToRgbString( background );
-      this._context.globalAlpha = 1.0;
-      this._context.lineWidth = 1;
-      this._context.lineCap = "butt";
-      this._context.lineJoin = "miter";
-      this._context.font = this._toCssFont( font );
-    },
-
-    // See http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#building-paths
-    _ellipse : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function( operation ) {
-        this._context[ operation[ 0 ] ].apply( this._context, operation.slice( 1 ) );
-      },
-      "default" : function( operation ) {
-        var cx = operation[ 1 ];
-        var cy = operation[ 2 ];
-        var rx = operation[ 3 ];
-        var ry = operation[ 4 ];
-        //var rotation = operation[ 5 ]; // not supported
-        var startAngle = operation[ 6 ];
-        var endAngle = operation[ 7 ];
-        var dir = operation[ 8 ];
-        if( rx > 0 && ry > 0 ) {
-          this._context.save();
-          this._context.translate( cx, cy );
-          // TODO [tb] : using scale here changes the stroke-width also, looks wrong
-          this._context.scale( 1, ry / rx );
-          this._context.arc( 0, 0, rx, startAngle, endAngle, dir );
-          this._context.restore();
-        }
-      }
-    } ),
-
-    _setProperty : function( operation ) {
-      var property = operation[ 0 ];
-      var value = operation[ 1 ];
-      if( value === "linearGradient" ) {
-        value = this._linearGradient;
-      } else if( property === "fillStyle" || property === "strokeStyle" ) {
-        value = rwt.util.Colors.rgbToRgbString( value );
-      } else if( property === "font" ) {
-        value = this._toCssFont( value );
-      }
-      this._context[ property ] = value;
-    },
-
-    _strokeText : function( operation ) {
-      this._fillText( operation );
-    },
-
-    _fillText : function( operation ) {
-      var fill = operation[ 0 ] === "fillText";
-      var text = this._escapeText( operation[ 1 ], operation[ 2 ], operation[ 3 ], operation[ 4 ] );
-      var x = operation[ 5 ];
-      var y = operation[ 6 ];
-      var textElement = document.createElement( "div" );
-      var style = textElement.style;
-      style.position = "absolute";
-      style.left = x + "px";
-      style.top = y + "px";
-      style.color = this._context.strokeStyle;
-      if( fill ) {
-        style.backgroundColor = this._context.fillStyle;
-      }
-      if( this._context.font !== "" && this._context.font != null ) {
-        style.font = this._context.font;
-      }
-      textElement.innerHTML = text;
-      this._textCanvas.appendChild( textElement );
-    },
-
-    _escapeText : function( value, drawMnemonic, drawDelemiter, drawTab ) {
-      var EncodingUtil = rwt.util.Encoding;
-      var text = EncodingUtil.escapeText( value, drawMnemonic );
-      var replacement = drawDelemiter ? "<br/>" : "";
-      text = EncodingUtil.replaceNewLines( text, replacement );
-      replacement = drawTab ? "&nbsp;&nbsp;&nbsp;&nbsp;" : "";
-      text = text.replace( /\t/g, replacement );
-      return text;
-    },
-
-    _drawImage : function( operation ) {
-      var args = operation.slice( 1 );
-      var simple = args.length === 3;
-      var image = new Image();
-      image.src = args[ 0 ];
-      args[ 0 ] = image;
-      // On (native) canvas, only loaded images can be drawn:
-      if( image.complete || rwt.client.Client.isMshtml() ) {
-        this._context.drawImage.apply( this._context, args );
-      } else {
-        var alpha = this._context.globalAlpha;
-        var context = this._context;
-        image.onload = function() {
-          // TODO [tb] : The z-order will be wrong in this case.
-          context.save();
-          context.globalAlpha = alpha;
-          context.drawImage.apply( context, args );
-          context.restore();
-        };
-      }
-    },
-
-    _createLinearGradient : function( operation ) {
-      var func = this._context.createLinearGradient;
-      this._linearGradient = func.apply( this._context, operation.slice( 1 ) );
-    },
-
-    _addColorStop : function( operation ) {
-      this._linearGradient.addColorStop(
-        operation[ 1 ],
-        rwt.util.Colors.rgbToRgbString( operation[ 2 ] )
-      );
-    },
-
-    _toCssFont : function( fontArray ) {
-      var result = "";
-      if( fontArray[ 3 ] ) {
-        result += "italic ";
-      }
-      if( fontArray[ 2 ] ) {
-        result += "bold ";
-      }
-      result += fontArray[ 1 ] + "px ";
-      result += fontArray[ 0 ].join( "," );
-      return result;
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2010, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.graphics.VMLCanvas", {
-
-  extend : rwt.qx.Object,
-
-  construct : function( canvas ) {
-    this._autoDispose = false;
-    this.base( arguments );
-    this._canvas = canvas;
-    this._stateStack = [];
-    this._currentPath = [];
-    this.strokeStyle = "#000000";
-    this.fillStyle = "#000000";
-    this.lineWidth = 1;
-    this.lineJoin = "miter";
-    this.lineCap = "butt";
-    this.miterLimit = 10;
-    this.globalAlpha = 1;
-  },
-
-  destruct : function() {
-    this._canvas = null;
-  },
-
-  // Implements the Canvas "2d"-context API, with some limitations:
-  // Missing: strokeRect, fillRect, clip, arcTo, createRadialGradient,
-  // scale, rotate, translate, transform, setTransform
-  // Differing API: arc
-  // Limited implementation: clearRect, createLinearGradient, drawImage,
-  // strokeStyle only supports color, fillStyle does not support patterns
-  members : {
-
-    save : function() {
-      var states = {};
-      this._copyState( this, states );
-      this._stateStack.push( states );
-    },
-
-    restore : function() {
-      var context = this._stateStack.pop();
-      this._copyState( context, this );
-    },
-
-    beginPath : function() {
-      this._currentPath = [];
-    },
-
-    closePath : function() {
-      this._currentPath.push( { "type" : "close" } );
-    },
-
-    // Limitation: Arguments are ignored, the entire canvas is cleared.
-    clearRect : function( x, y, width, height ) {
-      rwt.graphics.VML.clearCanvas( this._canvas );
-    },
-
-    stroke : function( fill ) {
-      var shape = rwt.graphics.VML.createShapeFromContext( this, fill );
-      rwt.graphics.VML.addToCanvas( this._canvas, shape );
-    },
-
-    fill : function() {
-      this.stroke( true );
-    },
-
-    moveTo : function( x, y ) {
-      this._currentPath.push( {
-        "type" : "moveTo",
-        "x" : x,
-        "y" : y
-      } );
-    },
-
-    lineTo : function( x, y ) {
-      this._currentPath.push( {
-        "type" : 'lineTo',
-        "x" : x,
-        "y" : y
-      } );
-    },
-
-    quadraticCurveTo : function( cp1x, cp1y, x, y ) {
-      this._currentPath.push( {
-        "type" : "quadraticCurveTo",
-        "cp1x" : cp1x,
-        "cp1y" : cp1y,
-        "x" : x,
-        "y" : y
-      } );
-    },
-
-    bezierCurveTo : function( cp1x, cp1y, cp2x, cp2y, x, y ) {
-      this._currentPath.push( {
-        "type" : 'bezierCurveTo',
-        "cp1x" : cp1x,
-        "cp1y" : cp1y,
-        "cp2x" : cp2x,
-        "cp2y" : cp2y,
-        "x"    : x,
-        "y"    : y
-      } );
-    },
-
-    rect : function( x, y, width, height ) {
-      // TODO [tb] : Apparently due to "closepath" call IE does not apply the lineJoin attribute
-      this.moveTo( x, y );
-      this.lineTo( x + width, y );
-      this.lineTo( x + width, y + height );
-      this.lineTo( x, y + height );
-      this.closePath();
-    },
-
-    ellipse : function( x, y, radiusX, radiusY, rotation, startAngle, endAngle, antiCW ) {
-      // NOTE : according to WHATWG standard, but no support for rotation
-      if( this._currentPath.length === 0 ) {
-        var startX = x + Math.cos( startAngle ) * radiusX;
-        var startY = y + Math.sin( startAngle ) * radiusY;
-        this.moveTo( startX, startY );
-      }
-      this._currentPath.push( {
-        "type" : "arc",
-        "anticlockwise" : antiCW,
-        "centerX" : x,
-        "centerY" : y,
-        "radiusX" : radiusX,
-        "radiusY" : radiusY,
-        "startAngle" : startAngle,
-        "endAngle" : endAngle
-      } );
-    },
-
-    arc : function( x, y, radius, startAngle, endAngle, antiCW ) {
-      this.ellipse( x, y, radius, radius, 0, startAngle, endAngle, antiCW );
-    },
-
-    drawImage : function() {
-      var shape = rwt.graphics.VML.createShape( "image" );
-      rwt.graphics.VML.setOpacity( shape, this.globalAlpha );
-      var image = arguments[ 0 ];
-      if( arguments.length == 3 ) {
-        var destX = arguments[ 1 ];
-        var destY = arguments[ 2 ];
-        rwt.graphics.VML.setImageData( shape,
-                                          image.src,
-                                          destX,
-                                          destY,
-                                          image.width,
-                                          image.height );
-      } else {
-        var srcX = arguments[ 1 ];
-        var srcY = arguments[ 2 ];
-        var srcWidth = arguments[ 3 ];
-        var srcHeight = arguments[ 4 ];
-        var destX = arguments[ 5 ];
-        var destY = arguments[ 6 ];
-        var destWidth = arguments[ 7 ];
-        var destHeight = arguments[ 8 ];
-        var crop = [
-          srcY / image.height,
-          ( image.width - srcX - srcWidth ) / image.width,
-          ( image.height - srcY - srcHeight ) / image.height,
-          srcX / image.width
-        ];
-        rwt.graphics.VML.setImageData( shape,
-                                          image.src,
-                                          destX,
-                                          destY,
-                                          destWidth,
-                                          destHeight,
-                                          crop );
-      }
-      rwt.graphics.VML.addToCanvas( this._canvas, shape );
-    },
-
-    // Limitations: The gradient is drawn wither vertically or horizontally.
-    // Calls to "addColorStop" must be in the order of the offsets and can not
-    // overwrite previous colorsStops.
-    createLinearGradient : function( x1, y1, x2, y2 ) {
-      var gradient = [];
-      gradient.addColorStop = this._addColorStopFunction;
-      gradient.horizontal = x1 != x2;
-      return gradient;
-    },
-
-    /////////
-    // Helper
-
-    _copyState : function( source, target ) {
-      target.font = source.font;
-      target.fillStyle = source.fillStyle;
-      target.lineCap = source.lineCap;
-      target.lineJoin = source.lineJoin;
-      target.lineWidth = source.lineWidth;
-      target.miterLimit = source.miterLimit;
-      target.shadowBlur = source.shadowBlur;
-      target.shadowColor = source.shadowColor;
-      target.shadowOffsetX = source.shadowOffsetX;
-      target.shadowOffsetY = source.shadowOffsetY;
-      target.strokeStyle = source.strokeStyle;
-      target.globalAlpha = source.globalAlpha;
-    },
-
-    _addColorStopFunction : function( offset, color ) {
-      this.push( [ offset, color ] );
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.Composite", {
-
-  factory : function( properties ) {
-    var result = new rwt.widgets.Composite();
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "backgroundGradient",
-    "roundedBorder",
-    "clientArea"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    "backgroundGradient" : rwt.remote.HandlerUtil.getBackgroundGradientHandler(),
-    "roundedBorder" : rwt.remote.HandlerUtil.getRoundedBorderHandler()
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2009, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.Composite", {
-
-  extend : rwt.widgets.base.Parent,
-
-  include : rwt.animation.VisibilityAnimationMixin,
-
-  construct : function() {
-    this.base( arguments );
-    this.setAppearance( "composite" );
-    this.setOverflow( "hidden" );
-    this.setHideFocus( true );
-    this.addEventListener( "mouseover", this._onMouseOver, this );
-    this.addEventListener( "mouseout", this._onMouseOut, this );
-    if( rwt.client.Client.isMshtml() ) {
-      // Alternate fix for 299629. This might not always work if the composite
-      // is changed back and forth between rounded and normal border.
-      this._fixBackgroundTransparency();
-      this.addEventListener( "changeBackgroundColor",
-                             this._fixBackgroundTransparency,
-                             this );
-    }
-    // Disable scrolling (see bug 345903)
-    rwt.widgets.base.Widget.disableScrolling( this );
-    this._clientArea = [ 0, 0, 0, 0 ];
-  },
-
-  destruct : function() {
-    this.removeEventListener( "mouseover", this._onMouseOver, this );
-    this.removeEventListener( "mouseout", this._onMouseOut, this );
-    this._clientArea = null;
-  },
-
-  members : {
-
-    setClientArea : function( clientArea ) {
-      this._clientArea = clientArea;
-      this.dispatchSimpleEvent( "clientAreaChanged" );
-    },
-
-    getClientArea : function() {
-      return this._clientArea.concat();
-    },
-
-    _onMouseOver : function( evt ) {
-      this.addState( "over" );
-    },
-
-    _onMouseOut : function( evt ) {
-      this.removeState( "over" );
-    },
-
-    _applyBackgroundImage : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function( newValue, oldValue ) {
-        this.base( arguments, newValue, oldValue );
-        if( newValue == null ) {
-          this._fixBackgroundTransparency();
-        }
-      },
-      "default" : function( newValue, oldValue ) {
-        this.base( arguments, newValue, oldValue );
-      }
-    } ),
-
-    _fixBackgroundTransparency : function() {
-      if( this.getBackgroundColor() == null && this.getBackgroundImage() == null ) {
-        this._applyBackgroundImage( "static/image/blank.gif", null );
-      }
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2007, 2012 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.Sash", {
-  extend : rwt.widgets.base.Parent,
-
-  construct : function() {
-    this.base( arguments );
-    this.setOverflow( null );
-    this.setHtmlProperty( "unselectable", "on" );
-    this.addEventListener( "changeWidth", this._onChangeSize, this );
-    this.addEventListener( "changeHeight", this._onChangeSize, this );
-    this.addEventListener( "mouseover", this._onMouseOver, this );
-    this.addEventListener( "mouseout", this._onMouseOut, this );
-    this._slider = new rwt.widgets.base.Parent();
-    this._slider.setAppearance( "sash-slider" );
-    this._slider.setVisibility( false );
-    // Fix IE Styling issues
-    rwt.widgets.util.WidgetUtil.fixIEBoxHeight( this._slider );
-    this.add( this._slider );
-    this._sliderHandle = new rwt.widgets.base.Parent();
-    this._sliderHandle.setStyleProperty( "backgroundPosition", "center center" );
-    this._sliderHandle.setAppearance( "sash-handle" );
-    this._sliderHandle.setVisibility( false );
-    // Fix IE Styling issues
-    rwt.widgets.util.WidgetUtil.fixIEBoxHeight( this._sliderHandle );
-    this.add( this._sliderHandle );
-    this._handle = new rwt.widgets.base.Parent();
-    this._handle.setStyleProperty( "backgroundPosition", "center center" );
-    this._handle.setAppearance( "sash-handle" );
-    // Fix IE Styling issues
-    rwt.widgets.util.WidgetUtil.fixIEBoxHeight( this._handle );
-    this.add( this._handle );
-    this.initOrientation();
-    this._bufferZIndex = null;
-  },
-
-  destruct : function() {
-    this.removeEventListener( "changeWidth", this._onChangeSize, this );
-    this.removeEventListener( "changeHeight", this._onChangeSize, this );
-    this.removeEventListener( "mouseover", this._onMouseOver, this );
-    this.removeEventListener( "mouseout", this._onMouseOut, this );
-    this._removeStyle( this.getOrientation() );
-    this._disposeObjects( "_slider", "_handle", "_sliderHandle" );
-  },
-
-  properties : {
-
-    appearance : {
-      refine : true,
-      init : "sash"
-    },
-
-    orientation : {
-      check : [ "horizontal", "vertical" ],
-      apply : "_applyOrientation",
-      init : "horizontal",
-      nullable : true
-    }
-
-  },
-
-  members : {
-
-    _onChangeSize : function( evt ) {
-      this._handle.setWidth( this.getWidth() );
-      this._handle.setHeight( this.getHeight() );
-    },
-
-    _onMouseDownX : function( evt ) {
-      if( evt.isLeftButtonPressed() ) {
-        if( this.getEnabled() ) {
-          this._commonMouseDown();
-          this._dragOffset = evt.getPageX();
-          this._minMove = - this.getLeft() - this._frameOffset;
-          this._maxMove = this.getParent().getWidth() - this.getLeft()
-                              - this.getWidth() - this._frameOffset;
-        }
-      }
-    },
-
-    _onMouseDownY : function( evt ) {
-      if( evt.isLeftButtonPressed() ) {
-        if( this.getEnabled() ) {
-          this._commonMouseDown();
-          this._dragOffset = evt.getPageY();
-          this._minMove = - this.getTop() - this._frameOffset;
-          this._maxMove = this.getParent().getHeight() - this.getTop()
-                              - this.getHeight() - this._frameOffset;
-        }
-      }
-    },
-
-    _commonMouseDown : function() {
-      this.setCapture( true );
-      this.getTopLevelWidget().setGlobalCursor( this.getCursor() );
-      // Used to subtract border width
-      // Note: Assumes that the Sash border has equal width on all four edges
-      this._frameOffset = this.getFrameWidth() / 2;
-      this._slider.setLeft( 0 - this._frameOffset );
-      this._slider.setTop( 0 - this._frameOffset );
-      this._slider.setWidth( this.getWidth() );
-      this._slider.setHeight( this.getHeight() );
-      this._sliderHandle.setLeft( 0 );
-      this._sliderHandle.setTop( 0 );
-      this._sliderHandle.setWidth( this.getWidth() );
-      this._sliderHandle.setHeight( this.getHeight() );
-      this._bufferZIndex = this.getZIndex();
-      this.setZIndex( 1e7 );
-      this._slider.show();
-      this._sliderHandle.show();
-      // notify server
-      this._sendWidgetSelected();
-    },
-
-    _onMouseUpX : function( evt ) {
-      if( this.getCapture() ) {
-        this._commonMouseUp();
-      }
-    },
-
-    _onMouseUpY : function( evt ) {
-      if( this.getCapture() ) {
-        this._commonMouseUp();
-      }
-    },
-
-    _commonMouseUp : function() {
-      this._slider.hide();
-      this._sliderHandle.hide();
-      this.setCapture( false );
-      this.getTopLevelWidget().setGlobalCursor( null );
-      if( this._bufferZIndex != null ) {
-        this.setZIndex( this._bufferZIndex );
-      }
-      var widgetUtil = rwt.widgets.util.WidgetUtil;
-      widgetUtil._fakeMouseEvent( this, "mouseout" );
-      // notify server
-      this._sendWidgetSelected();
-    },
-
-    _onMouseMoveX : function( evt ) {
-      if( this.getCapture() ) {
-        // [if] Global cursor is reset by Request#_hideWaitHint. Set it again.
-        if( this.getTopLevelWidget().getGlobalCursor() != this.getCursor() ) {
-          this.getTopLevelWidget().setGlobalCursor( this.getCursor() );
-        }
-        var toMove = evt.getPageX() - this._dragOffset;
-        this._slider.setLeft( this._normalizeMove( toMove ) );
-        this._sliderHandle.setLeft( this._normalizeMove( toMove ) );
-      }
-    },
-
-    _onMouseMoveY : function( evt ) {
-      if( this.getCapture() ) {
-        // [if] Global cursor is reset by Request#_hideWaitHint. Set it again.
-        if( this.getTopLevelWidget().getGlobalCursor() != this.getCursor() ) {
-          this.getTopLevelWidget().setGlobalCursor( this.getCursor() );
-        }
-        var toMove = evt.getPageY() - this._dragOffset;
-        this._slider.setTop( this._normalizeMove( toMove ) );
-        this._sliderHandle.setTop( this._normalizeMove( toMove ) );
-      }
-    },
-
-    _normalizeMove : function( toMove ) {
-      var result = toMove;
-      if( result < this._minMove ) {
-        result = this._minMove;
-      }
-      if( result > this._maxMove ) {
-        result = this._maxMove;
-      }
-      return result;
-    },
-
-    _applyOrientation : function( value, old ) {
-      this._removeStyle( old );
-      this._setStyle( value );
-    },
-
-    _setStyle : function( style ) {
-      if( style == "horizontal" ) {
-        this.addEventListener( "mousedown", this._onMouseDownY, this );
-        this.addEventListener( "mousemove", this._onMouseMoveY, this );
-        this.addEventListener( "mouseup", this._onMouseUpY, this );
-        this.addState( "horizontal" );
-        this._handle.addState( "horizontal" );
-        this._sliderHandle.addState( "horizontal" );
-      } else if( style == "vertical" ) {
-        this.addEventListener( "mousemove", this._onMouseMoveX, this );
-        this.addEventListener( "mousedown", this._onMouseDownX, this );
-        this.addEventListener( "mouseup", this._onMouseUpX, this );
-        this.addState( "vertical" );
-        this._handle.addState( "vertical" );
-        this._sliderHandle.addState( "vertical" );
-      }
-    },
-
-    _removeStyle : function( style ) {
-      if( style == "horizontal" ) {
-        this.removeEventListener( "mousedown", this._onMouseDownY, this );
-        this.removeEventListener( "mousemove", this._onMouseMoveY, this );
-        this.removeEventListener( "mouseup", this._onMouseUpY, this );
-        this.removeState( "horizontal" );
-        this._handle.removeState( "horizontal" );
-        this._sliderHandle.removeState( "horizontal" );
-      } else if( style == "vertical" ) {
-        this.removeEventListener( "mousedown", this._onMouseDownX, this );
-        this.removeEventListener( "mousemove", this._onMouseMoveX, this );
-        this.removeEventListener( "mouseup", this._onMouseUpX, this );
-        this.removeState( "vertical" );
-        this._handle.removeState( "vertical" );
-        this._sliderHandle.removeState( "vertical" );
-      }
-    },
-
-    _sendWidgetSelected : function() {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        // TODO [rst] Clarify what the getOffsetLeft() does
-        var leftOffset = this._slider.getLeft() + this._frameOffset;
-        var topOffset = this._slider.getTop() + this._frameOffset;
-        rwt.remote.EventUtil.notifySelected(
-            this,
-            this.getLeft() + leftOffset,
-            this.getTop() + topOffset,
-            this.getWidth(),
-            this.getHeight(),
-            this.getCapture() ? "drag" : null
-         );
-      }
-    },
-
-    _onMouseOver : function( evt ) {
-      this.addState( "over" );
-    },
-
-    _onMouseOut : function( evt ) {
-      this.removeState( "over" );
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.Sash", {
-
-  factory : function( properties ) {
-    var result = new rwt.widgets.Sash();
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    var orientation = rwt.widgets.util.Layout.ORIENTATION_VERTICAL;
-    if( properties.style.indexOf( "HORIZONTAL" ) != -1 ) {
-      orientation = rwt.widgets.util.Layout.ORIENTATION_HORIZONTAL;
-    }
-    result.setOrientation( orientation );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {} ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [ "Selection" ] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.Canvas", {
-
-  factory : function( properties ) {
-    var result = new rwt.widgets.Composite();
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "backgroundGradient",
-    "roundedBorder",
-    "clientArea"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    "backgroundGradient" : rwt.remote.HandlerUtil.getBackgroundGradientHandler(),
-    "roundedBorder" : rwt.remote.HandlerUtil.getRoundedBorderHandler()
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2010, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.List", {
-  extend : rwt.widgets.base.BasicList,
-
-  construct : function( multiSelection ) {
-    this.base( arguments, multiSelection );
-    this.setScrollBarsVisible( false, false );
-    this._topIndex = 0;
-    this._hasSelectionListener = false;
-    this._hasDefaultSelectionListener = false;
-    // Listen to send event of request to report topIndex
-    var req = rwt.remote.Server.getInstance();
-    var selMgr = this.getManager();
-    selMgr.addEventListener( "changeLeadItem", this._onChangeLeadItem, this );
-    selMgr.addEventListener( "changeSelection", this._onSelectionChange, this );
-    this.addEventListener( "mousedown", this._handleHyperlinkActivation, this );
-    this.addEventListener( "mouseup", this._handleHyperlinkActivation, this );
-    this.addEventListener( "click", this._handleHyperlinkActivation, this );
-    this.addEventListener( "focus", this._onFocusIn, this );
-    this.addEventListener( "blur", this._onFocusOut, this );
-    this.addEventListener( "dblclick", this._onDblClick, this );
-    this.addEventListener( "appear", this._onAppear, this );
-    this.addEventListener( "userScroll", this._onUserScroll );
-  },
-
-  destruct : function() {
-    var req = rwt.remote.Server.getInstance();
-    var selMgr = this.getManager();
-    selMgr.removeEventListener( "changeLeadItem", this._onChangeLeadItem, this );
-    selMgr.removeEventListener( "changeSelection", this._onSelectionChange, this );
-    this.removeEventListener( "mousedown", this._handleHyperlinkActivation, this );
-    this.removeEventListener( "mouseup", this._handleHyperlinkActivation, this );
-    this.removeEventListener( "click", this._handleHyperlinkActivation, this );
-    this.removeEventListener( "focus", this._onFocusIn, this );
-    this.removeEventListener( "blur", this._onFocusOut, this );
-    this.removeEventListener( "dblclick", this._onDblClick, this );
-    this.removeEventListener( "appear", this._onAppear, this );
-  },
-
-  members : {
-
-    setTopIndex : function( value ) {
-      this._topIndex = value;
-      this._applyTopIndex( value );
-    },
-
-    _applyTopIndex : function( newIndex ) {
-      var items = this.getManager().getItems();
-      if( items.length > 0 && items[ 0 ].isCreated() ) {
-        if( this._itemHeight > 0 ) {
-          this.setVBarSelection( newIndex * this._itemHeight );
-        }
-      }
-    },
-
-    _getTopIndex : function() {
-      var topIndex = 0;
-      var scrollTop = this._clientArea.getScrollTop();
-      var items = this.getManager().getItems();
-      if( items.length > 0 ) {
-        var itemHeight = this.getManager().getItemHeight( items[ 0 ] );
-        if( itemHeight > 0 ) {
-          topIndex = Math.round( scrollTop / itemHeight );
-        }
-      }
-      return topIndex;
-    },
-
-    _onAppear : function( evt ) {
-      // [ad] Fix for Bug 277678
-      // when #showSelection() is called for invisible widget
-      this._applyTopIndex( this._topIndex );
-    },
-
-    _updateScrollDimension : function() {
-      this.base( arguments );
-      this._applyTopIndex( this._topIndex );
-    },
-
-    setHasSelectionListener : function( value ) {
-      this._hasSelectionListener = value;
-    },
-
-    setHasDefaultSelectionListener : function( value ) {
-      this._hasDefaultSelectionListener = value;
-    },
-
-    _onChangeLeadItem : function( evt ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        var focusIndex = this._clientArea.indexOf( this.getManager().getLeadItem() );
-        rwt.remote.Server.getInstance().getRemoteObject( this ).set( "focusIndex", focusIndex );
-      }
-    },
-
-    _onSelectionChange : function( evt ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        this._sendSelectionChange();
-        if( this._hasSelectionListener ) {
-          rwt.remote.EventUtil.notifySelected( this );
-        }
-      }
-      this._updateSelectedItemState();
-    },
-
-    _sendSelectionChange : function() {
-      var selection = [];
-      var selectedItems = this.getManager().getSelectedItems();
-      for( var i = 0; i < selectedItems.length; i++ ) {
-        var index = this._clientArea.indexOf( selectedItems[ i ] );
-        selection.push( index );
-      }
-      rwt.remote.Server.getInstance().getRemoteObject( this ).set( "selection", selection );
-    },
-
-    _onUserScroll : function( horizontal ) {
-      this._topIndex = this._isCreated ? this._getTopIndex() : 0;
-      rwt.remote.Server.getInstance().getRemoteObject( this ).set( "topIndex", this._topIndex );
-    },
-
-    _onDblClick : function( evt ) {
-      if( !rwt.remote.EventUtil.getSuspended() && this._hasDefaultSelectionListener ) {
-        rwt.remote.EventUtil.notifyDefaultSelected( this );
-      }
-    },
-
-    _handleHyperlinkActivation : function( event ) {
-      if( this._isRWTHyperlinkTarget( event ) ) {
-        event.setDefaultPrevented( true );
-        if( event.getType() === "click" && this._hasSelectionListener ) {
-          var domTarget = event.getDomTarget();
-          var text = domTarget.getAttribute( "href" );
-          if( !text ) {
-            text = domTarget.innerHTML;
-          }
-          var properties = {
-            "detail" : "hyperlink",
-            "text" : text
-          };
-          rwt.remote.EventUtil.notifySelected( this, properties );
-        }
-      }
-    },
-
-    _isRWTHyperlinkTarget : function( event ) {
-      var domTarget = event.getDomTarget();
-      return this._isHyperlinkTarget( event ) && domTarget.getAttribute( "target" ) === "_rwt";
-    },
-
-    _onFocusIn : function( evt ) {
-      this._updateSelectedItemState();
-    },
-
-    _onFocusOut : function( evt ) {
-      this._updateSelectedItemState();
-    },
-
-    _updateSelectedItemState : function() {
-      var selectedItems = this.getManager().getSelectedItems();
-      for( var i = 0; i < selectedItems.length; i++ ) {
-        if( this.getFocused() ) {
-          selectedItems[ i ].removeState( "parent_unfocused" );
-        } else {
-          selectedItems[ i ].addState( "parent_unfocused" );
-        }
-      }
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.List", {
-
-  factory : function( properties ) {
-    var multiSelection = properties.style.indexOf( "MULTI" ) != -1;
-    var result = new rwt.widgets.List( multiSelection );
-    result.setMarkupEnabled( properties.markupEnabled === true );
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    // order of items, selection, focus is crucial
-    "items",
-    "selectionIndices",
-    "topIndex",
-    "focusIndex",
-    "itemDimensions"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    "selectionIndices" : function( widget, value ) {
-      if( widget.hasState( "rwt_MULTI" ) ) {
-        if( widget.getItemsCount() === value.length ) {
-          widget.selectAll();
-        } else {
-          widget.selectItems( value );
-        }
-      } else {
-        widget.selectItem( value[ 0 ] !== undefined ? value[ 0 ] : -1 );
-      }
-    },
-    "focusIndex" : function( widget, value ) {
-      widget.focusItem( value );
-    },
-    "scrollBarsVisible" : function( widget, value ) {
-      widget.setScrollBarsVisible( value[ 0 ], value[ 1 ] );
-    },
-    "itemDimensions" : function( widget, value ) {
-      widget.setItemDimensions( value[ 0 ], value[ 1 ] );
-    }
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [
-    "Selection",
-    "DefaultSelection"
-  ] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2002, 2012 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.util.TabUtil", {
-
-  statics : {
-    createTabItem : function( id, parentId, index ) {
-      var widgetManager = rwt.remote.WidgetManager.getInstance();
-      var tabFolder = widgetManager.findWidgetById( parentId );
-      var tabItem = new rwt.widgets.TabItem();
-      tabItem.setTabIndex( null );
-      tabItem.setLabel( "(empty)" );
-      tabItem.getLabelObject().setMode( "html" );
-      tabItem.setLabel( "" );
-      tabItem.setEnableElementFocus( false );
-      tabItem.addEventListener( "changeFocused", rwt.widgets.util.TabUtil._onTabItemChangeFocus );
-      tabItem.addEventListener( "changeChecked", rwt.widgets.util.TabUtil._onTabItemSelected );
-      tabItem.addEventListener( "click", rwt.widgets.util.TabUtil._onTabItemClick );
-      tabFolder.getBar().addAt( tabItem, index );
-      var tabViewPage = new rwt.widgets.base.TabFolderPage( tabItem );
-      tabFolder.getPane().add( tabViewPage );
-      widgetManager.add( tabViewPage, id + "pg" );
-      return tabItem;
-    },
-
-    releaseTabItem : function( tabItem ) {
-      var tabFolder = tabItem.getParent().getParent();
-      tabItem.removeEventListener( "changeFocused", rwt.widgets.util.TabUtil._onTabItemChangeFocus );
-      tabItem.removeEventListener( "changeChecked", rwt.widgets.util.TabUtil._onTabItemSelected );
-      tabItem.removeEventListener( "click", rwt.widgets.util.TabUtil._onTabItemClick );
-      var widgetManager = rwt.remote.WidgetManager.getInstance();
-      var itemId = widgetManager.findIdByWidget( tabItem );
-      widgetManager.dispose( itemId + "pg" );
-      widgetManager.dispose( itemId );
-    },
-
-    _onTabItemChangeFocus : function( evt ) {
-      // Focus the tabFolder the item belongs to when the item is focused
-      if( evt.getTarget().getFocused() ) {
-        evt.getTarget().getParent().getParent().focus();
-      }
-    },
-
-    _onTabItemClick : function( evt ) {
-      // Focus the tabFolder the item belongs to when the item is clicked
-      var folder = evt.getTarget().getParent().getParent();
-      if( !folder.getFocused() ) {
-        folder.focus();
-      }
-    },
-
-    _onTabItemSelected : function( evt ) {
-      var tab = evt.getTarget();
-      if( !rwt.remote.EventUtil.getSuspended() && tab.getChecked() ) {
-        var widgetManager = rwt.remote.WidgetManager.getInstance();
-        var itemId = widgetManager.findIdByWidget( tab );
-        var server = rwt.remote.Server.getInstance();
-        var folder = tab.getParent().getParent();
-        server.getRemoteObject( folder ).notify( "Selection", {
-          "item" : itemId
-        } );
-      }
-    },
-
-    onTabFolderKeyPress : function( evt ) {
-      var folder = evt.getTarget();
-      if( folder.classname == "rwt.widgets.TabFolder" ) {
-        var manager = folder.getBar().getManager();
-        var item = manager.getSelected();
-        if( item != null ) {
-          switch( evt.getKeyIdentifier() ) {
-            case "Left":
-              manager.selectPrevious( item );
-              rwt.widgets.util.TabUtil.markTabItemFocused( folder, evt.getTarget() );
-              evt.stopPropagation();
-              break;
-            case "Right":
-              manager.selectNext( item );
-              rwt.widgets.util.TabUtil.markTabItemFocused( folder, evt.getTarget() );
-              evt.stopPropagation();
-              break;
-          }
-        }
-      }
-    },
-
-    onTabFolderChangeFocused : function( evt ) {
-      var folder = evt.getTarget();
-      var item = folder.getBar().getManager().getSelected();
-      rwt.widgets.util.TabUtil.markTabItemFocused( folder, item );
-    },
-
-    markTabItemFocused : function( folder, item ) {
-      var items = folder.getBar().getManager().getItems();
-      for( var i = 0; i < items.length; i++ ) {
-        items[i].removeState( "focused" );
-      }
-      // add state to the selected item if the tabFolder is focused
-      if( item != null && folder.getFocused() ) {
-        item.addState( "focused" );
-      }
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.TabFolder", {
-
-  factory : function( properties ) {
-    var result = new rwt.widgets.TabFolder();
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    result.setHideFocus( true );
-    result.setPlaceBarOnTop( properties.style.indexOf( "BOTTOM" ) === -1 );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "selection"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    "selection" : function( widget, value ) {
-      rwt.remote.HandlerUtil.callWithTarget( value, function( item ) {
-        var items = widget.getBar().getChildren();
-        for( var index = 0; index < items.length; index++ ) {
-          if( items[ index ] === item ) {
-            items[ index ].setChecked( true );
-          } else if( items[ index ].getChecked() ) {
-            items[ index ].setChecked( false );
-          }
-        }
-      } );
-    }
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [ "Selection" ] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.TabItem", {
-
-  factory : function( properties ) {
-    var result = rwt.widgets.util.TabUtil.createTabItem( properties.id,
-                                                         properties.parent,
-                                                         properties.index );
-
-    rwt.remote.HandlerUtil.callWithTarget( properties.parent, function( parent ) {
-      rwt.remote.HandlerUtil.addDestroyableChild( parent, result );
-      result.setUserData( "protocolParent", parent );
-    } );
-    return result;
-  },
-
-  destructor : function( widget ) {
-    rwt.widgets.util.TabUtil.releaseTabItem( widget );
-    var parent = widget.getUserData( "protocolParent" );
-    if( parent ) {
-      rwt.remote.HandlerUtil.removeDestroyableChild( parent, widget );
-    }
-  },
-
-  properties : [
-    "text",
-    "mnemonicIndex",
-    "image",
-    "control",
-    "toolTip",
-    "customVariant"
-  ],
-
-  propertyHandler : {
-    "image" : function( widget, value ) {
-      if( value === null ) {
-        widget.setIcon( null );
-      } else {
-        widget.setIcon( value[ 0 ] );
-      }
-    },
-    "control" : function( widget, value ) {
-      if( value !== null ) {
-        rwt.remote.HandlerUtil.callWithTarget( value, function( control ) {
-          var widgetManager = rwt.remote.WidgetManager.getInstance();
-          var id = widgetManager.findIdByWidget( widget ) + "pg";
-          rwt.remote.HandlerUtil.callWithTarget( id, function( parent ) {
-            control.setParent( parent );
-          } );
-        } );
-      }
-    },
-    "toolTip" : rwt.remote.HandlerUtil.getControlPropertyHandler( "toolTip" )
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2008, 2013 Innoopract Informationssysteme GmbH.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
- /**
-  * This is a modified version of qooxdoo qx.ui.component.DateChooser component.
-  */
-
-/**
- * Shows a calendar and allows choosing a date.
- *
- * @appearance calendar-toolbar-button {qx.ui.toolbar.Button}
- * @appearance calendar-navBar {rwt.widgets.base.BoxLayout}
- * @appearance calendar-monthyear {rwt.widgets.base.Label}
- * @appearance calendar-weekday {rwt.widgets.base.Label}
- * @appearance calendar-datepane {rwt.widgets.base.Parent}
- * @appearance calendar-weekday {rwt.widgets.base.Label}
- *
- * @appearance calendar-day {rwt.widgets.base.Label}
- * @state weekend {calendar-day}
- * @state otherMonth {calendar-day}
- * @state today {calendar-day}
- * @state selected {calendar-day}
- */
-rwt.qx.Class.define("rwt.widgets.base.Calendar", {
-  extend : rwt.widgets.base.BoxLayout,
-
-  /*
-  *****************************************************************************
-     CONSTRUCTOR
-  *****************************************************************************
-  */
-
-  /**
-   * @param date {Date ? null} The initial date to show. If <code>null</code>
-   *        the current day (today) is shown.
-   */
-  construct : function( date ) {
-    this.base( arguments );
-    this.setOrientation( "vertical" );
-
-    // Create the navigation bar
-    var navBar = new rwt.widgets.base.BoxLayout();
-    navBar.setAppearance("calendar-navBar");
-
-    navBar.set( {
-      height  : "auto",
-      spacing : 1
-    } );
-
-    var lastYearBt = new rwt.widgets.base.Button();
-    var lastMonthBt = new rwt.widgets.base.Button();
-    var monthYearLabel = new rwt.widgets.base.Label();
-    var nextMonthBt = new rwt.widgets.base.Button();
-    var nextYearBt = new rwt.widgets.base.Button();
-
-    var wm = rwt.remote.WidgetManager.getInstance();
-    wm.setToolTip( lastYearBt, "Previous year" );
-    wm.setToolTip( lastMonthBt, "Previous month" );
-    wm.setToolTip( nextMonthBt, "Next month" );
-    wm.setToolTip( nextYearBt, "Next year" );
-
-    lastYearBt.set( {
-      show    : 'icon',
-      spacing : 0,
-      tabIndex: null
-    } );
-    lastYearBt.setUserData( "calendar-button", true );
-
-    lastMonthBt.set( {
-      show    : 'icon',
-      tabIndex: null
-    } );
-    lastMonthBt.setUserData( "calendar-button", true );
-
-    nextMonthBt.set( {
-      show    : 'icon',
-      tabIndex: null
-    } );
-    nextMonthBt.setUserData( "calendar-button", true );
-
-    nextYearBt.set( {
-      show    : 'icon',
-      tabIndex: null
-    } );
-    nextYearBt.setUserData( "calendar-button", true );
-
-    lastYearBt.setAppearance("calendar-toolbar-previous-year-button");
-    lastMonthBt.setAppearance("calendar-toolbar-previous-month-button");
-    nextMonthBt.setAppearance("calendar-toolbar-next-month-button");
-    nextYearBt.setAppearance("calendar-toolbar-next-year-button");
-
-    lastYearBt.addEventListener("click", this._onNavButtonClicked, this);
-    lastMonthBt.addEventListener("click", this._onNavButtonClicked, this);
-    nextMonthBt.addEventListener("click", this._onNavButtonClicked, this);
-    nextYearBt.addEventListener("click", this._onNavButtonClicked, this);
-
-    this._lastYearBt = lastYearBt;
-    this._lastMonthBt = lastMonthBt;
-    this._nextMonthBt = nextMonthBt;
-    this._nextYearBt = nextYearBt;
-
-    monthYearLabel.setAppearance("calendar-monthyear");
-    monthYearLabel.set( { width : "1*" } );
-
-    navBar.add(lastYearBt, lastMonthBt, monthYearLabel, nextMonthBt, nextYearBt);
-    this._monthYearLabel = monthYearLabel;
-    navBar.setHtmlProperty("id", "navBar");
-
-    // Create the date pane
-    var datePane = new rwt.widgets.base.Parent();
-    datePane.setAppearance("calendar-datepane");
-
-    datePane.set( {
-      width  : rwt.widgets.base.Calendar.CELL_WIDTH * 8,
-      height : rwt.widgets.base.Calendar.CELL_HEIGHT * 7
-    } );
-
-    // Create the weekdays
-    // Add an empty label as spacer for the week numbers
-    var label = new rwt.widgets.base.Label();
-    label.setAppearance( "calendar-week" );
-
-    label.set( {
-      width  : rwt.widgets.base.Calendar.CELL_WIDTH,
-      height : rwt.widgets.base.Calendar.CELL_HEIGHT,
-      left   : 0
-    } );
-
-    label.addState( "header" );
-    datePane.add( label );
-
-    this._weekdayLabelArr = [];
-
-    for( var i=1; i<8; i++ ) {
-      var label = new rwt.widgets.base.Label();
-      label.setAppearance( "calendar-weekday" );
-      label.setSelectable( false );
-      label.setCursor( "default" );
-
-      label.set( {
-        width  : rwt.widgets.base.Calendar.CELL_WIDTH,
-        height : rwt.widgets.base.Calendar.CELL_HEIGHT,
-        left   : i * rwt.widgets.base.Calendar.CELL_WIDTH
-      } );
-
-      datePane.add( label );
-      this._weekdayLabelArr.push( label );
-    }
-
-    // Add the days
-    this._dayLabelArr = [];
-    this._weekLabelArr = [];
-
-    for( var y = 0; y < 6; y++ ) {
-      // Add the week label
-      var label = new rwt.widgets.base.Label();
-      label.setAppearance( "calendar-week" );
-      label.setSelectable( false );
-      label.setCursor( "default" );
-
-      label.set( {
-        width  : rwt.widgets.base.Calendar.CELL_WIDTH,
-        height : rwt.widgets.base.Calendar.CELL_HEIGHT,
-        left   : 0,
-        top    : (y + 1) * rwt.widgets.base.Calendar.CELL_HEIGHT
-      } );
-
-      datePane.add( label );
-      this._weekLabelArr.push( label );
-
-      // Add the day labels
-      for (var x=1; x<8; x++) {
-        var label = new rwt.widgets.base.Label();
-        label.setAppearance( "calendar-day" );
-        label.setSelectable( false );
-        label.setCursor( "default" );
-
-        label.set( {
-          width  : rwt.widgets.base.Calendar.CELL_WIDTH,
-          height : rwt.widgets.base.Calendar.CELL_HEIGHT,
-          left   : x * rwt.widgets.base.Calendar.CELL_WIDTH,
-          top    : (y + 1) * rwt.widgets.base.Calendar.CELL_HEIGHT
-        } );
-
-        label.addEventListener( "mousedown", this._onDayClicked, this );
-        label.addEventListener( "dblclick", this._onDayDblClicked, this );
-        label.addEventListener( "mouseover", this._onDayMouseOver, this );
-        label.addEventListener( "mouseout", this._onDayMouseOut, this );
-        label.setUserData( "calendar-day", true );
-        datePane.add( label );
-        this._dayLabelArr.push( label );
-      }
-    }
-
-    // [if] The focus and key keypress event are handled by DateTimeCalendar
-    // Make focusable
-    // this.setTabIndex(1);
-    // this.addEventListener("keypress", this._onkeypress);
-
-    // Show the right date
-    var shownDate = ( date != null ) ? date : new Date();
-    this.showMonth( shownDate.getMonth(), shownDate.getFullYear() );
-
-    // Add the main widgets
-    this.add( navBar );
-    this.add( datePane );
-
-    // Initialize dimensions
-    this.initWidth();
-    this.initHeight();
-  },
-
-  /*
-  *****************************************************************************
-     EVENTS
-  *****************************************************************************
-  */
-
-  events: {
-    /** Fired when a date was selected. The event holds the new selected date in its data property.*/
-    "select"     : "rwt.event.DataEvent"
-  },
-
-  /*
-  *****************************************************************************
-     STATICS
-  *****************************************************************************
-  */
-
-  statics : {
-    CELL_WIDTH : 24,
-    CELL_HEIGHT : 16,
-    MONTH_NAMES : [],
-    WEEKDAY_NAMES : []
-  },
-
-  /*
-  *****************************************************************************
-     PROPERTIES
-  *****************************************************************************
-  */
-
-  properties : {
-    width : {
-      refine : true,
-      init : "auto"
-    },
-
-    height : {
-      refine : true,
-      init : "auto"
-    },
-
-    /** The currently shown month. 0 = january, 1 = february, and so on. */
-    shownMonth : {
-      check : "Integer",
-      init : null,
-      nullable : true,
-      event : "changeShownMonth"
-    },
-
-    /** The currently shown year. */
-    shownYear : {
-      check : "Integer",
-      init : null,
-      nullable : true,
-      event : "changeShownYear"
-    },
-
-    /** {Date} The currently selected date. */
-    date : {
-      check : "Date",
-      init : null,
-      nullable : true,
-      apply : "_applyDate",
-      event : "changeDate",
-      transform : "_checkDate"
-    }
-  },
-
-  /*
-  *****************************************************************************
-     MEMBERS
-  *****************************************************************************
-  */
-
-  members : {
-    addState : function( state ) {
-      this.base( arguments, state );
-      if( state.substr( 0, 8 ) == "variant_" ) {
-        this._monthYearLabel.addState( state );
-        for( var i = 0; i < 7; i++ ) {
-          this._weekdayLabelArr[ i ].addState( state );
-        }
-        for( var i = 0; i < 6 * 7; i++ ) {
-          this._dayLabelArr[ i ].addState( state );
-        }
-        for( var i = 0; i < 6; i++ ) {
-          this._weekLabelArr[ i ].addState( state );
-        }
-      }
-    },
-
-    removeState : function( state ) {
-      this.base( arguments, state );
-      if( state.substr( 0, 8 ) == "variant_" ) {
-        this._monthYearLabel.removeState( state );
-        for( var i = 0; i < 7; i++ ) {
-          this._weekdayLabelArr[ i ].removeState( state );
-        }
-        for( var i = 0; i < 6 * 7; i++ ) {
-          this._dayLabelArr[ i ].removeState( state );
-        }
-        for( var i = 0; i < 6; i++ ) {
-          this._weekLabelArr[ i ].removeState( state );
-        }
-      }
-    },
-
-    // property checker
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @return {var} TODOC
-     */
-    _checkDate : function(value) {
-      // Use a clone of the date internally since date instances may be changed
-      return (value == null) ? null : new Date(value.getTime());
-    },
-
-    // property modifier
-    /**
-     * TODOC
-     *
-     * @type member
-     * @param value {var} Current value
-     * @param old {var} Previous value
-     */
-    _applyDate : function(value, old) {
-      if ((value != null) && (this.getShownMonth() != value.getMonth() || this.getShownYear() != value.getFullYear())) {
-        // The new date is in another month -> Show that month
-        this.showMonth(value.getMonth(), value.getFullYear());
-      } else {
-        // The new date is in the current month -> Just change the states
-        var newDay = (value == null) ? -1 : value.getDate();
-
-        for (var i=0; i<6*7; i++) {
-          var dayLabel = this._dayLabelArr[i];
-
-          if (dayLabel.hasState("otherMonth")) {
-            if (dayLabel.hasState("selected")) {
-              dayLabel.removeState("selected");
-            }
-          } else {
-            var day = parseInt( dayLabel.getText(), 10 );
-            if( day == newDay ) {
-              dayLabel.addState("selected");
-            } else if (dayLabel.hasState("selected")) {
-              dayLabel.removeState("selected");
-            }
-          }
-        }
-      }
-    },
-
-    /**
-     * Event handler. Called when a navigation button has been clicked.
-     *
-     * @type member
-     * @param evt {Map} the event.
-     * @return {void}
-     */
-    _onNavButtonClicked : function(evt) {
-      var year = this.getShownYear();
-      var month = this.getShownMonth();
-
-      switch(evt.getTarget()) {
-        case this._lastYearBt:
-          year--;
-          break;
-
-        case this._lastMonthBt:
-          month--;
-
-          if (month < 0) {
-            month = 11;
-            year--;
-          }
-          break;
-
-        case this._nextMonthBt:
-          month++;
-
-          if (month >= 12) {
-            month = 0;
-            year++;
-          }
-          break;
-
-        case this._nextYearBt:
-          year++;
-          break;
-      }
-
-      this.showMonth(month, year);
-    },
-
-    /**
-     * Event handler. Called when a day has been clicked.
-     *
-     * @type member
-     * @param evt {Map} the event.
-     * @return {void}
-     */
-    _onDayClicked : function(evt) {
-      if( evt.isLeftButtonPressed() ) {
-        var time = evt.getTarget().dateTime;
-        this.setDate(new Date(time));
-      }
-    },
-
-    /**
-     * TODOC
-     *
-     * @type member
-     * @return {void}
-     */
-    _onDayDblClicked : function() {
-      this.createDispatchDataEvent("select", this.getDate());
-    },
-
-    _onDayMouseOver : function( evt ) {
-      evt.getTarget().addState( "over" );
-    },
-
-    _onDayMouseOut : function( evt ) {
-      evt.getTarget().removeState( "over" );
-    },
-
-    /**
-     * Event handler. Called when a key was pressed.
-     *
-     * @type member
-     * @param evt {Map} the event.
-     * @return {boolean | void} TODOC
-     */
-    _onkeypress : function( evt ) {
-      var dayIncrement = null;
-      var monthIncrement = null;
-      var yearIncrement = null;
-      if( evt.getModifiers() === 0 ) {
-        switch( evt.getKeyIdentifier() ) {
-          case "Left":
-            dayIncrement = -1;
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-
-          case "Right":
-            dayIncrement = 1;
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-
-          case "Up":
-            dayIncrement = -7;
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-
-          case "Down":
-            dayIncrement = 7;
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-
-          case "PageUp":
-            monthIncrement = -1;
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-
-          case "PageDown":
-            monthIncrement = 1;
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-
-          case "Home":
-          case "End":
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-
-          case "Enter":
-          case "Space":
-            if (this.getDate() != null) {
-              this.createDispatchDataEvent("select", this.getDate());
-            }
-
-            evt.preventDefault();
-            evt.stopPropagation();
-            return;
-        }
-      }
-      else if (evt.isShiftPressed()) {
-        switch(evt.getKeyIdentifier()) {
-          case "PageUp":
-            yearIncrement = -1;
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-
-          case "PageDown":
-            yearIncrement = 1;
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-        }
-      }
-
-      if (dayIncrement != null || monthIncrement != null || yearIncrement != null) {
-        var date = this.getDate();
-
-        if (date != null) {
-          date = new Date(date.getTime()); // TODO: Do cloning in getter
-        }
-
-        if (date == null) {
-          date = new Date();
-        } else {
-          if( dayIncrement != null ) {
-            date.setDate( date.getDate() + dayIncrement );
-          }
-          if( monthIncrement != null ) {
-            date.setMonth( date.getMonth() + monthIncrement );
-          }
-          if( yearIncrement != null ) {
-            date.setFullYear( date.getFullYear() + yearIncrement );
-          }
-        }
-
-        this.setDate(date);
-      }
-    },
-
-    // ***** Methods *****
-    /**
-     * Shows a certain month.
-     *
-     * @type member
-     * @param month {Integer ? null} the month to show (0 = january). If not set the month
-     *      will remain the same.
-     * @param year {Integer ? null} the year to show. If not set the year will remain the
-     *      same.
-     * @return {void}
-     */
-    showMonth : function(month, year) {
-      if ((month != null && month != this.getShownMonth()) || (year != null && year != this.getShownYear())) {
-        if (month != null) {
-          this.setShownMonth(month);
-        }
-
-        if (year != null) {
-          this.setShownYear(year);
-        }
-
-        this._updateDatePane();
-      }
-    },
-
-    /**
-     * Updates the date pane.
-     *
-     * @type member
-     * @return {void}
-     */
-    _updateDatePane : function() {
-      var today = new Date();
-      var todayYear = today.getFullYear();
-      var todayMonth = today.getMonth();
-      var todayDayOfMonth = today.getDate();
-
-      var selDate = this.getDate();
-      var selYear = (selDate == null) ? -1 : selDate.getFullYear();
-      var selMonth = (selDate == null) ? -1 : selDate.getMonth();
-      var selDayOfMonth = (selDate == null) ? -1 : selDate.getDate();
-
-      var shownMonth = this.getShownMonth();
-      var shownYear = this.getShownYear();
-
-      var startOfWeek = this.__getWeekStart();
-
-      // Create a help date that points to the first of the current month
-      var helpDate = new Date(this.getShownYear(), this.getShownMonth(), 1);
-
-      var year = this.getShownYear();
-      var month = rwt.widgets.base.Calendar.MONTH_NAMES[ this.getShownMonth() ];
-      this._monthYearLabel.setText( month + " " + year );
-
-      // Show the day names
-      var firstDayOfWeek = helpDate.getDay();
-      var firstSundayInMonth = (1 + 7 - firstDayOfWeek) % 7;
-
-      for (var i=0; i<7; i++) {
-        var day = (i + startOfWeek) % 7;
-
-        var dayLabel = this._weekdayLabelArr[i];
-
-        helpDate.setDate(firstSundayInMonth + day);
-
-        var weekdayName = rwt.widgets.base.Calendar.WEEKDAY_NAMES[ helpDate.getDay() + 1 ];
-
-        dayLabel.setText( weekdayName );
-
-        if (this.__isWeekend(day)) {
-          dayLabel.addState("weekend");
-        } else {
-          dayLabel.removeState("weekend");
-        }
-      }
-
-      // Show the days
-      helpDate = new Date(shownYear, shownMonth, 1);
-      var nrDaysOfLastMonth = (7 + firstDayOfWeek - startOfWeek) % 7;
-      helpDate.setDate(helpDate.getDate() - nrDaysOfLastMonth);
-
-      for (var week=0; week<6; week++) {
-        this._weekLabelArr[week].setText("" + this.__getWeekInYear(helpDate));
-
-        for (var i=0; i<7; i++) {
-          var dayLabel = this._dayLabelArr[week * 7 + i];
-
-          var year = helpDate.getFullYear();
-          var month = helpDate.getMonth();
-          var dayOfMonth = helpDate.getDate();
-
-          var isSelectedDate = (selYear == year && selMonth == month && selDayOfMonth == dayOfMonth);
-
-          if (isSelectedDate) {
-            dayLabel.addState("selected");
-          } else {
-            dayLabel.removeState("selected");
-          }
-
-          if (month != shownMonth) {
-            dayLabel.addState("otherMonth");
-          } else {
-            dayLabel.removeState("otherMonth");
-          }
-
-          var isToday = (year == todayYear && month == todayMonth && dayOfMonth == todayDayOfMonth);
-
-          if (isToday) {
-            dayLabel.addState("today");
-          } else {
-            dayLabel.removeState("today");
-          }
-
-          dayLabel.setText("" + dayOfMonth);
-          dayLabel.dateTime = helpDate.getTime();
-
-          // Go to the next day
-          helpDate.setDate(helpDate.getDate() + 1);
-        }
-      }
-    },
-
-    /**
-     * Returns the thursday in the same week as the date.
-     *
-     * @type member
-     * @param date {Date} the date to get the thursday of.
-     * @return {Date} the thursday in the same week as the date.
-     */
-    __thursdayOfSameWeek : function(date) {
-      return new Date(date.getTime() + (3 - ((date.getDay() + 6) % 7)) * 86400000);
-    },
-
-    /**
-     * Returns the week in year of a date.
-     *
-     * @type member
-     * @param date {Date} the date to get the week in year of.
-     * @return {Integer} the week in year.
-     */
-    __getWeekInYear : function(date) {
-      // This algorithm gets the correct calendar week after ISO 8601.
-      // This standard is used in almost all european countries.
-      // TODO: In the US week in year is calculated different!
-      // See http://www.merlyn.demon.co.uk/weekinfo.htm
-      // The following algorithm comes from http://www.salesianer.de/util/kalwoch.html
-      // Get the thursday of the week the date belongs to
-      var thursdayDate = this.__thursdayOfSameWeek(date);
-
-      // Get the year the thursday (and therefor the week) belongs to
-      var weekYear = thursdayDate.getFullYear();
-
-      // Get the thursday of the week january 4th belongs to
-      // (which defines week 1 of a year)
-      var thursdayWeek1 = this.__thursdayOfSameWeek(new Date(weekYear, 0, 4));
-
-      // Calculate the calendar week
-      return Math.floor(1.5 + (thursdayDate.getTime() - thursdayWeek1.getTime()) / 86400000 / 7);
-    },
-
-    /**
-     * Return the day the week starts with
-     *
-     * Reference: Common Locale Data Repository (cldr) supplementalData.xml
-     *
-     * @type member
-     * @return {Integer} index of the first day of the week. 0=sunday, 1=monday, ...
-     */
-    __getWeekStart : function() {
-      var weekStart = {
-        // default is monday
-        "MV" : 5, // friday
-        "AE" : 6, // saturday
-        "AF" : 6,
-        "BH" : 6,
-        "DJ" : 6,
-        "DZ" : 6,
-        "EG" : 6,
-        "ER" : 6,
-        "ET" : 6,
-        "IQ" : 6,
-        "IR" : 6,
-        "JO" : 6,
-        "KE" : 6,
-        "KW" : 6,
-        "LB" : 6,
-        "LY" : 6,
-        "MA" : 6,
-        "OM" : 6,
-        "QA" : 6,
-        "SA" : 6,
-        "SD" : 6,
-        "SO" : 6,
-        "TN" : 6,
-        "YE" : 6,
-        "AS" : 0, // sunday
-        "AU" : 0,
-        "AZ" : 0,
-        "BW" : 0,
-        "CA" : 0,
-        "CN" : 0,
-        "FO" : 0,
-        "GE" : 0,
-        "GL" : 0,
-        "GU" : 0,
-        "HK" : 0,
-        "IE" : 0,
-        "IL" : 0,
-        "IS" : 0,
-        "JM" : 0,
-        "JP" : 0,
-        "KG" : 0,
-        "KR" : 0,
-        "LA" : 0,
-        "MH" : 0,
-        "MN" : 0,
-        "MO" : 0,
-        "MP" : 0,
-        "MT" : 0,
-        "NZ" : 0,
-        "PH" : 0,
-        "PK" : 0,
-        "SG" : 0,
-        "TH" : 0,
-        "TT" : 0,
-        "TW" : 0,
-        "UM" : 0,
-        "US" : 0,
-        "UZ" : 0,
-        "VI" : 0,
-        "ZA" : 0,
-        "ZW" : 0,
-        "MW" : 0,
-        "NG" : 0,
-        "TJ" : 0
-      };
-
-      var territory = this.__getTerritory();
-
-      // default is monday
-      return weekStart[territory] != null ? weekStart[territory] : 1;
-    },
-
-    /**
-     * Return the day the weekend starts with
-     *
-     * Reference: Common Locale Data Repository (cldr) supplementalData.xml
-     *
-     * @type member
-     * @return {Integer} index of the first day of the weekend. 0=sunday, 1=monday, ...
-     */
-    __getWeekendStart : function() {
-      var weekendStart = {
-        // default is saturday
-        "EG" : 5, // friday
-        "IL" : 5,
-        "SY" : 5,
-        "IN" : 0, // sunday
-        "AE" : 4, // thursday
-        "BH" : 4,
-        "DZ" : 4,
-        "IQ" : 4,
-        "JO" : 4,
-        "KW" : 4,
-        "LB" : 4,
-        "LY" : 4,
-        "MA" : 4,
-        "OM" : 4,
-        "QA" : 4,
-        "SA" : 4,
-        "SD" : 4,
-        "TN" : 4,
-        "YE" : 4
-      };
-
-      var territory = this.__getTerritory();
-
-      // default is saturday
-      return weekendStart[territory] != null ? weekendStart[territory] : 6;
-    },
-
-    /**
-     * Return the day the weekend ends with
-     *
-     * Reference: Common Locale Data Repository (cldr) supplementalData.xml
-     *
-     * @type member
-     * @return {Integer} index of the last day of the weekend. 0=sunday, 1=monday, ...
-     */
-    __getWeekendEnd : function() {
-      var weekendEnd = {
-        // default is sunday
-        "AE" : 5, // friday
-        "BH" : 5,
-        "DZ" : 5,
-        "IQ" : 5,
-        "JO" : 5,
-        "KW" : 5,
-        "LB" : 5,
-        "LY" : 5,
-        "MA" : 5,
-        "OM" : 5,
-        "QA" : 5,
-        "SA" : 5,
-        "SD" : 5,
-        "TN" : 5,
-        "YE" : 5,
-        "AF" : 5,
-        "IR" : 5,
-        "EG" : 6, // saturday
-        "IL" : 6,
-        "SY" : 6
-      };
-
-      var territory = this.__getTerritory();
-
-      // default is sunday
-      return weekendEnd[territory] != null ? weekendEnd[territory] : 0;
-    },
-
-    /**
-     * Returns whether a certain day of week belongs to the week end.
-     *
-     * @type member
-     * @param day {Integer} index of the day. 0=sunday, 1=monday, ...
-     * @return {Boolean} whether the given day is a weekend day
-     */
-    __isWeekend : function(day) {
-      var weekendStart = this.__getWeekendStart();
-      var weekendEnd = this.__getWeekendEnd();
-
-      if (weekendEnd > weekendStart) {
-        return ((day >= weekendStart) && (day <= weekendEnd));
-      } else {
-        return ((day >= weekendStart) || (day <= weekendEnd));
-      }
-    },
-
-    /**
-     * Extract the territory part from a locale
-     *
-     * @type member
-     * @return {String} territory
-     */
-    __getTerritory : function() {
-        var territory = rwt.client.Client.getTerritory() || rwt.client.Client.getLanguage();
-      return territory.toUpperCase();
-    }
-  },
-
-  /*
-  *****************************************************************************
-     DESTRUCTOR
-  *****************************************************************************
-  */
-
-  destruct : function() {
-    this._disposeObjects("_lastYearBt", "_lastMonthBt", "_nextMonthBt", "_nextYearBt", "_monthYearLabel");
-
-    this._disposeObjectDeep("_weekdayLabelArr", 1);
-    this._disposeObjectDeep("_dayLabelArr", 1);
-    this._disposeObjectDeep("_weekLabelArr", 1);
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2002, 2012 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-/**
- * The parameter orientation must be one of "vertical" or "horizontal".
- * Note that updateHandleBounds must be called after each size manipulation.
- */
-rwt.qx.Class.define( "rwt.widgets.CoolItem", {
-  extend : rwt.widgets.base.Parent,
-
-  construct : function( orientation ) {
-    this.base( arguments );
-    this.setOverflow( "hidden" );
-    this.setAppearance( "coolitem" );
-    this._orientation = orientation;
-    // Create handle to drag this CoolItem around
-    this._handle = new rwt.widgets.base.Terminator();
-    this._handle.addState( orientation );
-    this._handle.setAppearance( "coolitem-handle" );
-    //this._handle.setHeight( "100%" );
-    this._handle.addEventListener( "mousedown", this._onHandleMouseDown, this );
-    this._handle.addEventListener( "mousemove", this._onHandleMouseMove, this );
-    this._handle.addEventListener( "mouseup", this._onHandleMouseUp, this );
-    this.add( this._handle );
-    // buffers zIndex and background during drag to be restored when dropped
-    this._bufferedZIndex = null;
-    this._bufferedControlZIndex = null;
-    this._control = null;
-  },
-
-  destruct : function() {
-    if( this._handle != null ) {
-      this._handle.removeEventListener( "mousedown", this._onHandleMouseDown, this );
-      this._handle.removeEventListener( "mousemove", this._onHandleMouseMove, this );
-      this._handle.removeEventListener( "mouseup", this._onHandleMouseUp, this );
-      this._handle.dispose();
-    }
-  },
-
-  statics : {
-    DRAG_CURSOR : "col-resize",
-    CONTROL_OFFSET : 6
-  },
-
-  members : {
-
-    setLocked : function( value )  {
-      this._handle.setDisplay( !value );
-    },
-
-    // reparenting to enable coolitem dragging
-    setControl : function( control ) {
-      if( control != null ) {
-        // TODO [tb] : Control positioning is already handled by server
-        control.setLeft( this.getLeft() + rwt.widgets.CoolItem.CONTROL_OFFSET );
-        control.setDisplay( true );
-      }
-      if( this._control != null ) {
-        this._control.setDisplay( false );
-      }
-      this._control = control;
-    },
-
-    updateHandleBounds : function() {
-      if( this._orientation == "vertical" ) {
-        this._handle.setWidth( this.getWidth() );
-      } else {
-        this._handle.setHeight( this.getHeight() );
-      }
-    },
-
-    _applyParent : function( value, oldValue ) {
-      this.base( arguments, value, oldValue );
-      if( value != null ) {
-        this.setLocked( value.getLocked() );
-      }
-    },
-
-    _onHandleMouseDown : function( evt ) {
-      this._handle.setCapture( true );
-      this.getTopLevelWidget().setGlobalCursor( rwt.widgets.CoolItem.DRAG_CURSOR );
-      this._offsetX = evt.getPageX() - this.getLeft();
-      this._offsetY = evt.getPageY() - this.getTop();
-      this._bufferedZIndex = this.getZIndex();
-      this.setZIndex( 1e7 - 1 );
-      if( this._control != null ) {
-        this._bufferedControlZIndex = this._control.getZIndex();
-        this._control.setZIndex( 1e7 );
-      }
-      // In some cases the coolItem appeare transparent when dragged around
-      // To fix this, walk along the parent hierarchy and use the first explicitly
-      // set background color.
-      this.setBackgroundColor( this._findBackground() );
-    },
-
-    _applyLeft : function( newValue, oldValue ) {
-      this.base( arguments, newValue, oldValue );
-      if( this._control != null ) {
-        var left = newValue + rwt.widgets.CoolItem.CONTROL_OFFSET;
-        this._control.setLeft( left );
-      }
-    },
-
-    _applyWidth : function( newValue, oldValue ) {
-      this.base( arguments, newValue, oldValue );
-      if( this._control != null ) {
-        var width = newValue - rwt.widgets.CoolItem.CONTROL_OFFSET;
-        this._control.setWidth( width );
-      }
-    },
-
-    _onHandleMouseMove : function( evt ) {
-      if( this._handle.getCapture() ) {
-        this.setLeft( evt.getPageX() - this._offsetX );
-      }
-    },
-
-    _onHandleMouseUp : function( evt ) {
-      this._handle.setCapture( false );
-      this.setZIndex( this._bufferedZIndex );
-      if( this._control != null ) {
-        this._control.setZIndex( this._bufferedControlZIndex );
-      }
-      this.resetBackgroundColor();
-      this.getTopLevelWidget().setGlobalCursor( null );
-      // Send request that informs about dragged CoolItem
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        rwt.remote.Server.getInstance().getRemoteObject( this ).call( "move", {
-          "left" : this.getLeft()
-        } );
-      }
-    },
-
-    _findBackground : function() {
-      var hasParent = true;
-      var result = null;
-      var parent = this.getParent();
-      while( hasParent && parent != null && result == null ) {
-        if( parent.getBackgroundColor ) {
-          result = parent.getBackgroundColor();
-        }
-        if( parent.getParent ) {
-          parent = parent.getParent();
-        } else {
-          hasParent = false;
-        }
-      }
-      return result;
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.CoolItem", {
-
-  factory : function( properties ) {
-    var styles = rwt.remote.HandlerUtil.createStyleMap( properties.style );
-    var orientation = styles.VERTICAL ? "vertical" : "horizontal";
-    var result = new rwt.widgets.CoolItem( orientation );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    result.setMinWidth( 0 );
-    result.setMinHeight( 0 );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getWidgetDestructor(),
-
-  properties : [ "bounds", "control", "customVariant" ],
-
-  propertyHandler : {
-    "bounds" : function( widget, bounds ) {
-      widget.setLeft( bounds[ 0 ] );
-      widget.setTop( bounds[ 1 ] );
-      widget.setWidth( bounds[ 2 ] );
-      widget.setHeight( bounds[ 3 ] );
-      widget.updateHandleBounds();
-    },
-    "control" : function( widget, controlId ) {
-      rwt.remote.HandlerUtil.callWithTarget( controlId, function( control ) {
-        widget.setControl( control );
-      } );
-    }
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2009, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.Button", {
-
-  extend : rwt.widgets.base.BasicButton,
-
-  construct : function( buttonType ) {
-    this.base( arguments, buttonType );
-    this._alignment = buttonType === "arrow" ? "up" : "center";
-    switch( buttonType ) {
-     case "arrow":
-       this.addState( "rwt_UP" );
-       this.setAppearance( "push-button" );
-     break;
-     case "push":
-     case "toggle":
-       this.setAppearance( "push-button" );
-     break;
-     case "check":
-       this.setAppearance( "check-box" );
-     break;
-     case "radio":
-       this.setAppearance( "radio-button" );
-    }
-    this.initTabIndex();
-    this.addEventListener( "focus", this._onFocus );
-    this.addEventListener( "blur", this._onBlur );
-    this._rawText = null;
-    this._mnemonicIndex = null;
-  },
-
-  destruct : function() {
-    this.setMnemonicIndex( null );
-  },
-
-  properties : {
-
-    tabIndex : {
-      refine : true,
-      init : 1
-    }
-
-  },
-
-  members : {
-
-    setText : function( value ) {
-      this._rawText = value;
-      this._mnemonicIndex = null;
-      this._applyText( false );
-    },
-
-    setMnemonicIndex : function( value ) {
-      this._mnemonicIndex = value;
-      var mnemonicHandler = rwt.widgets.util.MnemonicHandler.getInstance();
-      if( ( typeof value === "number" ) && ( value >= 0 ) ) {
-        mnemonicHandler.add( this, this._onMnemonic );
-      } else {
-        mnemonicHandler.remove( this );
-      }
-    },
-
-    getMnemonicIndex : function() {
-      return this._mnemonicIndex;
-    },
-
-    setAlignment : function( value ) {
-      if( this.hasState( "rwt_ARROW" ) ) {
-        this.removeState( "rwt_" + this._alignment.toUpperCase() );
-        this.addState( "rwt_" + value.toUpperCase() );
-      } else {
-        this.setHorizontalChildrenAlign( value );
-      }
-      this._alignment = value;
-    },
-
-    setWrap : function( value ) {
-      if( value ) {
-        this.setFlexibleCell( 2 );
-      }
-    },
-
-    _onMnemonic : function( event ) {
-      switch( event.type ) {
-        case "show":
-          this._applyText( true );
-        break;
-        case "hide":
-          this._applyText( false );
-        break;
-        case "trigger":
-          var charCode = this._rawText.toUpperCase().charCodeAt( this._mnemonicIndex );
-          if( event.charCode === charCode ) {
-            this.setFocused( true );
-            this.execute();
-            event.success = true;
-          }
-        break;
-      }
-    },
-
-    _applyText : function( mnemonic ) {
-      var EncodingUtil = rwt.util.Encoding;
-      if( this._rawText ) {
-        var mnemonicIndex = mnemonic ? this._mnemonicIndex : undefined;
-        var text = EncodingUtil.escapeText( this._rawText, mnemonicIndex );
-        if( this.hasState( "rwt_WRAP" ) ) {
-          text = EncodingUtil.replaceNewLines( text, "<br/>" );
-        }
-        this.setCellContent( 2, text );
-      } else {
-        this.setCellContent( 2, null );
-      }
-    },
-
-    //overwritten:
-    _afterRenderLayout : function( changes ) {
-      if( this.hasState( "focused" ) ) {
-         this._showFocusIndicator();
-      }
-    },
-
-    _showFocusIndicator : function() {
-      var focusIndicator = rwt.widgets.util.FocusIndicator.getInstance();
-      var node = this.getCellNode( 2 ) != null ? this.getCellNode( 2 ) : this.getCellNode( 1 );
-      focusIndicator.show( this, "Button-FocusIndicator", node );
-    },
-
-    _onFocus : function( event ) {
-      this._showFocusIndicator();
-    },
-
-    _onBlur : function( event ) {
-      var focusIndicator = rwt.widgets.util.FocusIndicator.getInstance();
-      focusIndicator.hide( this );
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.Button", {
-
-  factory : function( properties ) {
-    var styleMap = rwt.remote.HandlerUtil.createStyleMap( properties.style );
-    var buttonType = "push";
-    if( styleMap.CHECK ) {
-      buttonType = "check";
-    } else if( styleMap.TOGGLE ) {
-      buttonType = "toggle";
-    } else if( styleMap.RADIO ) {
-      buttonType = "radio";
-    } else if( styleMap.ARROW ) {
-      buttonType = "arrow";
-    }
-    var result = new rwt.widgets.Button( buttonType );
-    result.setWrap( styleMap.WRAP );
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    rwt.remote.HandlerUtil.callWithTarget( properties.parent, function( parent ) {
-      result.setNoRadioGroup( parent.hasState( "rwt_NO_RADIO_GROUP" ) );
-    } );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "text",
-    "mnemonicIndex",
-    "alignment",
-    "image",
-    "selection",
-    "grayed"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    "image" : function( widget, value ) {
-      if( value === null ) {
-        widget.setImage( value );
-      } else {
-        widget.setImage.apply( widget, value );
-      }
-    }
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [
-    "Selection"
-  ] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.FileUpload", {
-
-  extend : rwt.widgets.Button,
-
-  construct : function() {
-    this.base( arguments, "push" );
-    this.setAppearance( "file-upload" );
-    this.addEventListener( "insertDom", this._layoutInputElement, this );
-    this.addEventListener( "elementOver", this._onMouseOverElement, this );
-    this._formElement = null;
-    this._inputElement = null;
-    this._iframe = null;
-    this._cursor = "";
-    this.__onValueChange = rwt.util.Functions.bind( this._onValueChange, this );
-    this.setEnableElementFocus( false );
-    this._createIframeWidget();
-  },
-
-  destruct : function() {
-    this._formElement = null;
-    this._inputElement = null;
-  },
-
-  members : {
-
-    submit : function( url ) {
-      if( typeof url !== "string" ) {
-        throw new Error( "No url given!" );
-      }
-      if( this._getFileName() === "" ) {
-        throw new Error( "No file selected!" );
-      }
-      if( this._formElement === null ) {
-        throw new Error( "Form element not created!" );
-      }
-      this._formElement.setAttribute( "action", url );
-      this._formElement.submit();
-    },
-
-    destroy : function() {
-      this.base( arguments );
-      this._iframe.destroy();
-    },
-
-    ////////////
-    // Internals
-
-    _createSubelements : function() {
-      // NOTE: MultiCellWidget uses innerHTML, therefore this must be done here:
-      if( this._formElement === null ) {
-        this.base( arguments );
-        this._createFormElement();
-        this._createInputElement();
-      } else {
-        this._formElement.removeChild( this._inputElement );
-        this._getTargetNode().removeChild( this._formElement );
-        this.base( arguments );
-        this._getTargetNode().appendChild( this._formElement );
-        this._formElement.appendChild( this._inputElement );
-      }
-    },
-
-    _createFormElement : function() {
-      this._formElement = document.createElement( "form" );
-      this._formElement.setAttribute( "target", this._getFrameName() );
-      this._formElement.setAttribute( "method", "POST" );
-      if( rwt.client.Client.isMshtml() ) {
-        this._formElement.setAttribute( "encoding", "multipart/form-data" );
-      } else {
-        this._formElement.setAttribute( "enctype", "multipart/form-data" );
-      }
-      this._getTargetNode().appendChild( this._formElement );
-    },
-
-    _createInputElement : function() {
-      this._inputElement = document.createElement( "input" );
-      this._inputElement.style.position = "absolute";
-      this._inputElement.setAttribute( "type", "file" );
-      this._inputElement.setAttribute( "name", "file" );
-      this._inputElement.setAttribute( "size", "1" );
-      this._inputElement.style.cursor = this._cursor;
-      this._inputElement.onchange = this.__onValueChange;
-      rwt.html.Style.setOpacity( this._inputElement, 0 );
-      this._formElement.appendChild( this._inputElement );
-    },
-
-    _createIframeWidget : function() {
-      this._iframe = new rwt.widgets.base.Iframe();
-      // NOTE: The frame-content should only be changed by the form:
-      this._iframe.setSource( "about:blank" );
-      this._iframe.setVisibility( false );
-      this._iframe.setWidth( 0 );
-      this._iframe.setHeight( 0 );
-      this._iframe.setFrameName( this._getFrameName() );
-      this._iframe.addToDocument();
-    },
-
-    _onValueChange : function( event ) {
-      // TODO [tb] : implement setHasValueChangedListener?
-      var fileName = this._formatFileName( this._getFileName() );
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        var server = rwt.remote.Server.getInstance();
-        server.getRemoteObject( this ).set( "fileName", fileName );
-        server.send();
-      }
-    },
-
-    _getFileName : function() {
-      return this._inputElement.value;
-    },
-
-    ////////////
-    // Layouting
-
-    _layoutPost : function( changes ) {
-      this.base( arguments, changes );
-      if( changes.width || changes.height ) {
-        this._layoutInputElement();
-      }
-    },
-
-    _layoutInputElement : function() {
-      if( this.getEnabled() && this.isSeeable() && !rwt.client.Client.isMobileSafari() ) {
-        //Assumed maximal padding between input button and input outer dimensions:
-        var padding = 10;
-        this._layoutInputElementHorizontal( padding );
-        this._layoutInputElementVertical( padding );
-      }
-    },
-
-    _layoutInputElementHorizontal : function( padding ) {
-      // Respect assumed maximal relative width of the input textfield:
-      var inputButtonPercentage = 0.6;
-      // NOTE : This is how inputWidth is calculated:
-      // widgetWidth + padding * 2 = 0.6 * inputWidth
-      // inputWidth = ( widthWidth + padding * 2 ) / 0.6
-      var widgetWidth = this.getBoxWidth();
-      var inputTargetWidth =   ( widgetWidth + padding * 2 )
-                             / ( inputButtonPercentage );
-      var fontSize = inputTargetWidth / 10;
-      this._inputElement.style.fontSize = fontSize;
-      var iterations = 0;
-      while( this._inputElement.offsetWidth <= inputTargetWidth ) {
-        fontSize += 10;
-        this._inputElement.style.font = fontSize + "px monospace";
-        iterations++;
-        if( iterations > 100 ) {
-          // crash the rap-application instead of freezing the browser.
-          var msg = "Failed to force input-element width.";
-          throw new Error( msg );
-        }
-      }
-      var actualInputWidth = this._inputElement.offsetWidth;
-      var inputLeft = widgetWidth - actualInputWidth + padding;
-      this._inputElement.style.left = inputLeft + "px";
-    },
-
-    _layoutInputElementVertical : function( padding ) {
-      var widgetHeight = this.getBoxHeight();
-      this._inputElement.style.height = ( widgetHeight + padding * 2 ) + "px";
-      this._inputElement.style.top = ( padding * -1 ) + "px";
-    },
-
-    setStyleProperty : function( propName, value ) {
-      if( propName === "cursor" ) {
-        this._cursor = value;
-        if( this._inputElement != null ) {
-          // NOTE : This will have no effect in firefox.
-          this._inputElement.style.cursor = value;
-        }
-      } else {
-        this.base( arguments, propName, value );
-      }
-    },
-
-    _applyEnabled : function( value, oldValue ) {
-      this.base( arguments, value, oldValue );
-      if( this._inputElement ) {
-        this._inputElement.style.display = value ? "" : "none";
-        this._layoutInputElement();
-      }
-    },
-
-    _afterAppear : function() {
-      this.base( arguments );
-      this._layoutInputElement();
-    },
-
-    ////////////////
-    // Mouse-control
-
-    // NOTE : In contrast to other widgets, the border does not trigger the
-    //        expected function, adapt state-behavior accordingly:
-
-    _onMouseOver : function( event ) {
-      if( event.getDomTarget() === this._inputElement ) {
-        this.base( arguments, event );
-      }
-    },
-
-    _onMouseOverElement : function( event ) {
-      if( event.getDomTarget() === this._inputElement ) {
-        this._onMouseOver( event );
-      }
-    },
-
-    _onMouseDown : function( event ) {
-      if( event.getDomTarget() === this._inputElement ) {
-        this.base( arguments, event );
-      }
-      if( rwt.client.Client.getBrowser() === "chrome") {
-        // Chrome looses keyboard control on mouse-focus, see _ontabfocus.
-        this._onBlur();
-      }
-    },
-
-    _onMouseUp : function( event ) {
-      if( event.getDomTarget() === this._inputElement || this.hasState( "abandoned" ) ) {
-        this.base( arguments, event );
-      }
-    },
-
-    /////////////////////////
-    // Focus/keyboard-control
-
-    // NOTE : Since the browse-button can't be triggered programatically,
-    //        supporting native keyboard-control is necessary, which is a bit
-    //        problematic.
-    _onFocus : function( event ) {
-      this.base( arguments, event );
-      this._inputElement.focus();
-    },
-
-    // NOTE : key-handling interferes with native keyboard control. This
-    //        disables the "pressed" state, but is still the lesser evil.
-    _onKeyDown : rwt.util.Functions.returnTrue,
-    _onKeyUp : rwt.util.Functions.returnTrue,
-
-    // NOTE : In chrome (windows?), the input-element needs to be focused using
-    //        tabulator for keyboard control to work. To minimize confusion,
-    //        do not display focus frame in other cases.
-    _ontabfocus : function() {
-      if( rwt.client.Client.getBrowser() === "chrome" ) {
-        this._showFocusIndicator( true );
-      }
-    },
-
-    _showFocusIndicator : function( allow ) {
-      var isChrome = rwt.client.Client.getBrowser() === "chrome";
-      if( !isChrome || allow ) {
-        var focusIndicator = rwt.widgets.util.FocusIndicator.getInstance();
-        var node =   this.getCellNode( 2 ) != null
-                   ? this.getCellNode( 2 )
-                   : this.getCellNode( 1 );
-        focusIndicator.show( this, "FileUpload-FocusIndicator", node );
-      }
-    },
-
-    /////////
-    // Helper
-
-    _formatFileName : function( fileName ) {
-      var result = fileName;
-      if( result.indexOf( "\\" ) != -1 ) {
-        result = result.substr( result.lastIndexOf( "\\" ) + 1 );
-      } else if( result.indexOf( "/" ) != -1 ) {
-        result = result.substr( result.lastIndexOf( "/" ) + 1 );
-      }
-      return result;
-    },
-
-    _getFrameName : function() {
-      return "FileUpload_" + this.toHashCode();
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.FileUpload", {
-
-  factory : function( properties ) {
-    var result = new rwt.widgets.FileUpload();
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "text",
-    "image"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    "image" : function( widget, value ) {
-      if( value === null ) {
-        widget.setImage( value );
-      } else {
-        widget.setImage.apply( widget, value );
-      }
-    }
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} ),
-
-  methods : [
-    "submit"
-  ],
-
-  methodHandler : {
-    "submit" : function( widget, args ) {
-      widget.submit( args.url );
-    }
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2008, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-/**
- * This class provides the client-side counterpart for
- * rwt.widgets.Slider.
- */
-rwt.qx.Class.define( "rwt.widgets.Slider", {
-  extend : rwt.widgets.base.AbstractSlider,
-
-  construct : function( isHorizontal ) {
-    this.base( arguments, isHorizontal );
-    this._hasSelectionListener = false;
-    this._requestScheduled = false;
-    this.addEventListener( "contextmenu", this._onContextMenu, this );
-    this.addEventListener( "keypress", this._onKeyPress, this );
-  },
-
-  statics : {
-
-    SEND_DELAY : 50,
-
-    _isNoModifierPressed : function( evt ) {
-      return    !evt.isCtrlPressed()
-             && !evt.isShiftPressed()
-             && !evt.isAltPressed()
-             && !evt.isMetaPressed();
-    }
-
-  },
-
-  members : {
-
-    _configureAppearance : function() {
-      this.setAppearance( "slider" );
-      this._thumb.setAppearance( "slider-thumb" );
-      this._minButton.setAppearance( "slider-min-button" );
-      this._maxButton.setAppearance( "slider-max-button" );
-    },
-
-    setSelection : function( value ) {
-      this._setSelection( value );
-    },
-
-    setMinimum : function( value ) {
-      this._setMinimum( value );
-    },
-
-    setMaximum : function( value ) {
-      this._setMaximum( value );
-    },
-
-    setIncrement : function( value ) {
-      this._setIncrement( value );
-    },
-
-    setPageIncrement : function( value ) {
-      this._setPageIncrement( value );
-    },
-
-    setThumb : function( value ) {
-      this._setThumb( value );
-    },
-
-    setHasSelectionListener : function( value ) {
-      this._hasSelectionListener = value;
-    },
-
-    //////////////
-    // Overwritten
-
-    _setSelection : function( value ) {
-      this.base( arguments, value );
-      this._scheduleSendChanges();
-    },
-
-    ////////////
-    // Internals
-
-    _onContextMenu : function( evt ) {
-      var menu = this.getContextMenu();
-      if( menu != null ) {
-        menu.setLocation( evt.getPageX(), evt.getPageY() );
-        menu.setOpener( this );
-        menu.show();
-        evt.stopPropagation();
-      }
-    },
-
-    _onKeyPress : function( evt ) {
-      var keyIdentifier = evt.getKeyIdentifier();
-      var sel = null;
-      if( rwt.widgets.Slider._isNoModifierPressed( evt ) ) {
-        switch( keyIdentifier ) {
-          case "Left":
-            sel = this._selection - this._increment;
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-          case "Down":
-            if( this._horizontal ) {
-              sel = this._selection - this._increment;
-            } else {
-              sel = this._selection + this._increment;
-            }
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-          case "Right":
-            sel = this._selection + this._increment;
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-          case "Up":
-            if( this._horizontal ) {
-              sel = this._selection + this._increment;
-            } else {
-              sel = this._selection - this._increment;
-            }
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-          case "Home":
-            sel = this._minimum;
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-          case "End":
-            sel = this._maximum;
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-          case "PageDown":
-            if( this._horizontal ) {
-              sel = this._selection - this._pageIncrement;
-            } else {
-              sel = this._selection + this._pageIncrement;
-            }
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-          case "PageUp":
-            if( this._horizontal ) {
-              sel = this._selection + this._pageIncrement;
-            } else {
-              sel = this._selection - this._pageIncrement;
-            }
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-        }
-        if( sel != null ) {
-          if( sel < this._minimum ) {
-            sel = this._minimum;
-          }
-          if( sel > this._maximum ) {
-            sel = this._maximum;
-          }
-          this.setSelection( sel );
-          if( this._readyToSendChanges ) {
-            this._readyToSendChanges = false;
-            // Send changes
-            rwt.client.Timer.once( this._sendChanges,
-                                  this,
-                                  rwt.widgets.Slider.SEND_DELAY );
-          }
-        }
-      }
-    },
-
-    _onMouseWheel : function( evt ) {
-      if( this.getFocused() ) {
-        this.base( arguments, evt );
-        if( this._readyToSendChanges ) {
-          this._readyToSendChanges = false;
-          // Send changes
-          rwt.client.Timer.once( this._sendChanges, this, 500 );
-        }
-      }
-    },
-
-    // TODO [tb] : refactor to use only this for scheduling
-    _scheduleSendChanges : function() {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        if( !this._requestScheduled ) {
-          this._requestScheduled = true;
-          // Send changes
-          rwt.client.Timer.once( this._sendChanges,
-                                this,
-                                rwt.widgets.Slider.SEND_DELAY );
-
-        }
-      }
-    },
-
-    _sendChanges : function() {
-      rwt.remote.Server.getInstance().getRemoteObject( this ).set( "selection", this._selection );
-      if( this._hasSelectionListener ) {
-        rwt.remote.EventUtil.notifySelected( this );
-      }
-      this._requestScheduled = false;
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.Slider", {
-
-  factory : function( properties ) {
-    var isHorizontal = properties.style.indexOf( "HORIZONTAL" ) != -1;
-    var result = new rwt.widgets.Slider( isHorizontal );
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "minimum",
-    "maximum",
-    "selection",
-    "increment",
-    "pageIncrement",
-    "thumb"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {} ),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [
-    "Selection"
-  ] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2007, 2012 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.Spinner", {
-  extend : rwt.widgets.base.Spinner,
-
-  construct : function() {
-    this.base( arguments );
-    //this._hasModifyListener = false;
-    this._hasSelectionListener = false;
-    this._hasDefaultSelectionListener = false;
-    this.setWrap( false );
-    // Hack to prevent the spinner text field to request the focus
-    this._textfield.setFocused = function() {};
-    this._textfield.addEventListener( "changeValue", this._onChangeValue, this );
-    this._textfield.addEventListener( "keypress", this._onChangeValue, this );
-    this._textfield.addEventListener( "blur", this._onChangeValue, this );
-    this._textfield.addEventListener( "keydown", this._onKeyDown, this );
-    this._textfield.setTabIndex( null );
-    this.addEventListener( "changeEnabled", this._onChangeEnabled, this );
-    this.addEventListener( "focusout", this._onFocusOut, this );
-    this._checkValue = this.__checkValueWithDigits;
-  },
-
-  destruct : function() {
-    this._textfield.removeEventListener( "changeValue", this._onChangeValue, this );
-    this._textfield.removeEventListener( "keypress", this._onChangeValue, this );
-    this._textfield.removeEventListener( "blur", this._onChangeValue, this );
-    this._textfield.removeEventListener( "keydown", this._onKeyDown, this );
-    this.removeEventListener( "changeEnabled", this._onChangeEnabled, this );
-    this.removeEventListener( "focusout", this._onFocusOut, this );
-  },
-
-  properties : {
-
-    digits : {
-      check : "Integer",
-      init : 0,
-      apply : "_applyDigits"
-    },
-
-    decimalSeparator : {
-      check : "String",
-      init : ".",
-      apply : "_applyDecimalSeparator"
-    }
-
-  },
-
-  members : {
-
-    setFont : function( value ) {
-      this._textfield.setFont( value );
-    },
-
-    setMaxLength : function( value ) {
-      this._textfield.setMaxLength( value );
-    },
-
-    // [if] Spinner#setValues allows minimum, maximum and selection to be set in
-    // one hop. In case of not crossed ranges ( for example new min > old max ),
-    // a javascript error appears if we set them one by one.
-    setMinMaxSelection : function( min, max, value ) {
-      this.setMin( Math.min( min, this.getMin() ) );
-      this.setMax( Math.max( max, this.getMax() ) );
-      this.setValue( value );
-      this.setMin( min );
-      this.setMax( max );
-    },
-
-    _applyCursor : function( value, old ) {
-      this.base( arguments, value, old );
-      if( value ) {
-        this._upbutton.setCursor( value );
-        this._downbutton.setCursor( value );
-        this._textfield.setCursor( value );
-      } else {
-        this._upbutton.resetCursor();
-        this._downbutton.resetCursor();
-        this._textfield.resetCursor();
-      }
-    },
-
-    setHasSelectionListener : function( value ) {
-      this._hasSelectionListener = value;
-    },
-
-    setHasDefaultSelectionListener : function( value ) {
-      this._hasDefaultSelectionListener = value;
-    },
-
-    _visualizeFocus : function() {
-      this._textfield._visualizeFocus();
-      if( this._textfield.isCreated() ) {
-        this._textfield.selectAll();
-      }
-      this.addState( "focused" );
-    },
-
-    _visualizeBlur : function() {
-      // setSelectionLength( 0 ) for TextField - needed for IE
-      this._textfield._setSelectionLength( 0 );
-      this._textfield._visualizeBlur();
-      this.removeState( "focused" );
-    },
-
-    // [if] Override original qooxdoo Spinner method. Fix for bug 209476
-    _oninput : function( evt ) {
-      this._suspendTextFieldUpdate = true;
-      this._checkValue( true, false );
-      this._suspendTextFieldUpdate = false;
-    },
-
-    _onChangeValue : function( evt ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        var server = rwt.remote.Server.getInstance();
-        server.getRemoteObject( this ).set( "selection", this.getManager().getValue() );
-        if( this._hasSelectionListener ) {
-          server.onNextSend( this._sendWidgetSelected, this );
-          server.sendDelayed( 500 );
-        }
-      }
-    },
-
-    // TODO [rst] workaround: setting enabled to false still leaves the buttons enabled
-    _onChangeEnabled : function( evt ) {
-      var enabled = evt.getValue();
-      this._upbutton.setEnabled( enabled && this.getValue() < this.getMax() );
-      this._downbutton.setEnabled( enabled && this.getValue() > this.getMin() );
-    },
-
-    _onKeyDown : function( event ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        if(    event.getKeyIdentifier() == "Enter"
-            && !event.isShiftPressed()
-            && !event.isAltPressed()
-            && !event.isCtrlPressed()
-            && !event.isMetaPressed()
-            && this._hasDefaultSelectionListener )
-        {
-          event.stopPropagation();
-          this._sendWidgetDefaultSelected();
-        }
-      }
-    },
-
-    _onmousewheel : function( evt ) {
-      if( this.getFocused() ) {
-        this.base( arguments, evt );
-      }
-    },
-
-    _sendWidgetSelected : function() {
-      rwt.remote.EventUtil.notifySelected( this );
-    },
-
-    _sendWidgetDefaultSelected : function() {
-      rwt.remote.EventUtil.notifyDefaultSelected( this );
-    },
-
-    /////////////////
-    // Digits support
-
-    _applyDigits : function( value, old ) {
-      var spinnerValue = this.getManager().getValue();
-      if( this.getDigits() > 0 ) {
-        this._textfield.setValue( this._format( spinnerValue ) );
-      } else {
-        this._textfield.setValue( String( spinnerValue ) );
-      }
-    },
-
-    _applyDecimalSeparator : function( value, old ) {
-      var spinnerValue = this.getManager().getValue();
-      if( this.getDigits() > 0 ) {
-        this._textfield.setValue( this._format( spinnerValue ) );
-      }
-    },
-
-    _format : function( value ) {
-      var digits = this.getDigits();
-      var floatValue = value / Math.pow( 10, digits );
-      var result = floatValue.toFixed( digits );
-      var separator = this.getDecimalSeparator();
-      if( separator != "." ) {
-        var dot = rwt.util.Encoding.escapeRegexpChars( "." );
-        result = result.replace( new RegExp( dot ), separator );
-      }
-      return result;
-    },
-
-    _limit : function( value ) {
-      var result = value;
-      var digits = this.getDigits();
-      if( digits > 0 ) {
-        result = result * Math.pow( 10, digits );
-      }
-      result = Math.round( result );
-      if( result > this.getMax() ) {
-        result = this.getMax();
-      }
-      if( result < this.getMin() ) {
-        result = this.getMin();
-      }
-      return result;
-    },
-
-    _onFocusOut : function( evt ) {
-      this._checkValue( true, false );
-    },
-
-    _onkeypress : function( evt ) {
-      var identifier = evt.getKeyIdentifier();
-      var separator = this.getDecimalSeparator();
-      if( !( this.getDigits() > 0 && identifier == separator ) ) {
-        this.base( arguments, evt );
-      }
-    },
-
-    _onchange : function( evt ) {
-      var value = this.getManager().getValue();
-      if( !this._suspendTextFieldUpdate ) {
-        if( this.getDigits() > 0 ) {
-          this._textfield.setValue( this._format( value ) );
-        } else {
-          this._textfield.setValue( String( value ) );
-        }
-      }
-      if( value == this.getMin() && !this.getWrap() ) {
-        this._downbutton.removeState( "pressed" );
-        this._downbutton.setEnabled( false );
-        this._timer.stop();
-      } else {
-        this._downbutton.resetEnabled();
-      }
-      if( value == this.getMax() && !this.getWrap() ) {
-        this._upbutton.removeState( "pressed" );
-        this._upbutton.setEnabled( false );
-        this._timer.stop();
-      } else {
-        this._upbutton.resetEnabled();
-      }
-      this.createDispatchDataEvent( "change", value );
-    },
-
-    __checkValueWithDigits : function( acceptEmpty, acceptEdit ) {
-      var inputElement = this._textfield.getInputElement();
-      if( inputElement ) {
-        if( inputElement.value === "" && !acceptEmpty ) {
-          this.resetValue();
-        } else {
-          var strValue = inputElement.value;
-          var parseValue = strValue;
-          var separator = this.getDecimalSeparator();
-          if( this.getDigits() > 0 && separator != "." ) {
-            separator = rwt.util.Encoding.escapeRegexpChars( separator );
-            parseValue = strValue.replace( new RegExp( separator ), "." );
-          }
-          var value = parseFloat( parseValue );
-          var limitedValue = this._limit( value );
-          var oldValue = this.getManager().getValue();
-          var fixedValue = limitedValue;
-          if( isNaN( value ) || value != limitedValue || value != parseValue ) {
-            if( acceptEdit ) {
-              this._textfield.setValue( this._last_value );
-            } else if( isNaN( limitedValue ) ) {
-              fixedValue = oldValue;
-            }
-          }
-          if( !acceptEdit ) {
-            var formattedValue = String( fixedValue );
-            if( this.getDigits() > 0 ) {
-              formattedValue = this._format( fixedValue );
-            }
-            if(    fixedValue === oldValue
-                && strValue !== formattedValue
-                && !this._suspendTextFieldUpdate )
-            {
-              this._textfield.setValue( formattedValue );
-            }
-            this.getManager().setValue( fixedValue );
-          }
-        }
-      }
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.Spinner", {
-
-  factory : function( properties ) {
-    var result = new rwt.widgets.Spinner();
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    var styleMap = rwt.remote.HandlerUtil.createStyleMap( properties.style );
-    if( styleMap.READ_ONLY ) {
-      result.setEditable( false );
-    }
-    if( styleMap.WRAP ) {
-      result.setWrap( true );
-    }
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    // [if] Important: Order matters - minimum, maximum, selection
-    "minimum",
-    "maximum",
-    "selection",
-    "digits",
-    "increment",
-    "pageIncrement",
-    "textLimit",
-    "decimalSeparator"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    "minimum" : function( widget, value ) {
-      // [if] Ensures that we don't set min bigger than current max, otherwize and error will be
-      // thrown. The correct max is always set by the server in this case.
-      var max = widget.getMax();
-      if( value > max ) {
-        widget.setMax( value + 1 );
-      }
-      widget.setMin( value );
-    },
-    "maximum" : function( widget, value ) {
-      widget.setMax( value );
-    },
-    "selection" : function( widget, value ) {
-      widget.setValue( value );
-    },
-    "increment" : function( widget, value ) {
-      widget.setIncrementAmount( value );
-      widget.setWheelIncrementAmount( value );
-    },
-    "pageIncrement" : function( widget, value ) {
-      widget.setPageIncrementAmount( value );
-    },
-    "textLimit" : function( widget, value ) {
-      widget.setMaxLength( value );
-    }
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [
-    "Selection",
-    "DefaultSelection"
-  ] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2008, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.DateTimeTime", {
-  extend : rwt.widgets.base.Parent,
-
-  construct : function( style ) {
-    this.base( arguments );
-    this.setOverflow( "hidden" );
-    this.setAppearance( "datetime-time" );
-
-    // Get styles
-    this._short = rwt.util.Strings.contains( style, "short" );
-    this._medium = rwt.util.Strings.contains( style, "medium" );
-    this._long = rwt.util.Strings.contains( style, "long" );
-
-    // Has selection listener
-    this._hasSelectionListener = false;
-    this._requestTimer = null;
-
-    // Add listener for font change
-    this.addEventListener( "changeFont", this._rwt_onChangeFont, this );
-
-    this.addEventListener( "keypress", this._onKeyPress, this );
-    this.addEventListener( "keyup", this._onKeyUp, this );
-    this.addEventListener( "mousewheel", this._onMouseWheel, this );
-    this.addEventListener( "contextmenu", this._onContextMenu, this );
-    this.addEventListener( "focus", this._onFocusIn, this );
-    this.addEventListener( "blur", this._onFocusOut, this );
-
-    // Focused text field
-    this._focusedTextField = null;
-    // Hours
-    this._hoursTextField = new rwt.widgets.base.Label( "00" );
-    this._hoursTextField.setAppearance( "datetime-field" );
-    this._hoursTextField.setUserData( "maxLength", 2 );
-    this._hoursTextField.addEventListener( "mousedown",  this._onTextFieldMouseDown, this );
-    this.add(this._hoursTextField);
-    // Separator
-    this._separator3 = new rwt.widgets.base.Label( ":" );
-    this._separator3.setAppearance( "datetime-separator" );
-    this._separator3.addEventListener( "contextmenu", this._onContextMenu, this );
-    this.add(this._separator3);
-    // Minutes
-    this._minutesTextField = new rwt.widgets.base.Label( "00" );
-    this._minutesTextField.setAppearance( "datetime-field" );
-    this._minutesTextField.setUserData( "maxLength", 2 );
-    this._minutesTextField.addEventListener( "mousedown",  this._onTextFieldMouseDown, this );
-    this.add(this._minutesTextField);
-    // Separator
-    this._separator4 = new rwt.widgets.base.Label( ":" );
-    this._separator4.setAppearance( "datetime-separator" );
-    if( this._medium || this._long ) {
-      this.add(this._separator4);
-    }
-    // Seconds
-    this._secondsTextField = new rwt.widgets.base.Label( "00" );
-    this._secondsTextField.setAppearance( "datetime-field" );
-    this._secondsTextField.setUserData( "maxLength", 2 );
-    this._secondsTextField.addEventListener( "mousedown",  this._onTextFieldMouseDown, this );
-    if( this._medium || this._long ) {
-      this.add(this._secondsTextField);
-    }
-    // Spinner
-    this._spinner = new rwt.widgets.base.Spinner();
-    this._spinner.set({
-      wrap: true,
-      border: null,
-      backgroundColor: null
-    });
-    this._spinner.setMin( 0 );
-    this._spinner.setMax( 23 );
-    this._spinner.setValue( 0 );
-    this._spinner.addEventListener( "change",  this._onSpinnerChange, this );
-    this._spinner._textfield.setTabIndex( null );
-    // Hack to prevent the spinner text field to request the focus
-    this._spinner._textfield.setFocused = function() {};
-    // Solution for Bug 284021
-    this._spinner._textfield.setVisibility( false );
-    this._spinner._upbutton.setAppearance("datetime-button-up");
-    this._spinner._downbutton.setAppearance("datetime-button-down");
-    this._spinner.removeEventListener("keypress", this._spinner._onkeypress, this._spinner);
-    this._spinner.removeEventListener("keydown", this._spinner._onkeydown, this._spinner);
-    this._spinner.removeEventListener("keyup", this._spinner._onkeyup, this._spinner);
-    this._spinner.removeEventListener("mousewheel", this._spinner._onmousewheel, this._spinner);
-    this.add( this._spinner );
-    // Set the default focused text field
-    this._focusedTextField = this._hoursTextField;
-  },
-
-  destruct : function() {
-    this.removeEventListener( "changeFont", this._rwt_onChangeFont, this );
-    this.removeEventListener( "keypress", this._onKeyPress, this );
-    this.removeEventListener( "keyup", this._onKeyUp, this );
-    this.removeEventListener( "mousewheel", this._onMouseWheel, this );
-    this.removeEventListener( "contextmenu", this._onContextMenu, this );
-    this.removeEventListener( "focus", this._onFocusIn, this );
-    this.removeEventListener( "blur", this._onFocusOut, this );
-    this._hoursTextField.removeEventListener( "mousedown",  this._onTextFieldMouseDown, this );
-    this._minutesTextField.removeEventListener( "mousedown",  this._onTextFieldMouseDown, this );
-    this._secondsTextField.removeEventListener( "mousedown",  this._onTextFieldMouseDown, this );
-    this._spinner.removeEventListener( "change",  this._onSpinnerChange, this );
-    this._disposeObjects( "_hoursTextField",
-                          "_minutesTextField",
-                          "_secondsTextField",
-                          "_focusedTextField",
-                          "_spinner",
-                          "_separator3",
-                          "_separator4" );
-  },
-
-  statics : {
-    HOURS_TEXTFIELD : 8,
-    MINUTES_TEXTFIELD : 9,
-    SECONDS_TEXTFIELD : 10,
-    HOURS_MINUTES_SEPARATOR : 11,
-    MINUTES_SECONDS_SEPARATOR : 12,
-    SPINNER : 7,
-
-    _isNoModifierPressed : function( evt ) {
-      return    !evt.isCtrlPressed()
-             && !evt.isShiftPressed()
-             && !evt.isAltPressed()
-             && !evt.isMetaPressed();
-    }
-  },
-
-  members : {
-    addState : function( state ) {
-      this.base( arguments, state );
-      if( state.substr( 0, 8 ) == "variant_" ) {
-        this._hoursTextField.addState( state );
-        this._minutesTextField.addState( state );
-        this._secondsTextField.addState( state );
-        this._spinner.addState( state );
-        this._separator3.addState( state );
-        this._separator4.addState( state );
-      }
-    },
-
-    removeState : function( state ) {
-      this.base( arguments, state );
-      if( state.substr( 0, 8 ) == "variant_" ) {
-        this._hoursTextField.removeState( state );
-        this._minutesTextField.removeState( state );
-        this._secondsTextField.removeState( state );
-        this._spinner.removeState( state );
-        this._separator3.removeState( state );
-        this._separator4.removeState( state );
-      }
-    },
-
-    _rwt_onChangeFont : function( evt ) {
-      var value = evt.getValue();
-      this._hoursTextField.setFont( value );
-      this._minutesTextField.setFont( value );
-      this._secondsTextField.setFont( value );
-    },
-
-    _onContextMenu : function( evt ) {
-      var menu = this.getContextMenu();
-      if( menu != null ) {
-        menu.setLocation( evt.getPageX(), evt.getPageY() );
-        menu.setOpener( this );
-        menu.show();
-        evt.stopPropagation();
-      }
-    },
-
-    _onFocusIn : function( evt ) {
-      this._focusedTextField.addState( "selected" );
-      this._initialEditing = true;
-    },
-
-    _onFocusOut : function( evt ) {
-      this._focusedTextField.removeState( "selected" );
-    },
-
-    _onTextFieldMouseDown : function( evt ) {
-      this._setFocusedTextField( evt.getTarget() );
-    },
-
-    _setFocusedTextField :  function( textField ) {
-      if( this._focusedTextField !== textField ) {
-        var tmpValue;
-        this._focusedTextField.removeState( "selected" );
-        this._focusedTextField = null;
-        if( textField === this._hoursTextField ) {
-          this._spinner.setMin( 0 );
-          this._spinner.setMax( 23 );
-          tmpValue = this._removeLeadingZero( this._hoursTextField.getText() );
-          this._spinner.setValue( parseInt( tmpValue, 10 ) );
-        } else if( textField === this._minutesTextField ) {
-          this._spinner.setMin( 0 );
-          this._spinner.setMax( 59 );
-          tmpValue = this._removeLeadingZero( this._minutesTextField.getText() );
-          this._spinner.setValue( parseInt( tmpValue, 10 ) );
-        } else if( textField === this._secondsTextField ) {
-          this._spinner.setMin( 0 );
-          this._spinner.setMax( 59 );
-          tmpValue = this._removeLeadingZero( this._secondsTextField.getText() );
-          this._spinner.setValue( parseInt( tmpValue, 10 ) );
-        }
-        this._focusedTextField = textField;
-        this._focusedTextField.addState( "selected" );
-        this._initialEditing = true;
-      }
-    },
-
-    _onSpinnerChange : function( evt ) {
-      if( this._focusedTextField != null ) {
-        var oldValue = this._focusedTextField.getText();
-        var newValue = this._addLeadingZero( this._spinner.getValue() );
-        this._focusedTextField.setText( newValue );
-        if( oldValue != newValue ) {
-          this._sendChanges();
-        }
-      }
-    },
-
-    _onKeyPress : function( evt ) {
-      var keyIdentifier = evt.getKeyIdentifier();
-      if( rwt.widgets.DateTimeTime._isNoModifierPressed( evt ) ) {
-        switch( keyIdentifier ) {
-          case "Left":
-            if( this._focusedTextField === this._hoursTextField ) {
-              if( this._short ) {
-                this._setFocusedTextField( this._minutesTextField );
-              } else {
-                this._setFocusedTextField( this._secondsTextField );
-              }
-            } else if( this._focusedTextField === this._minutesTextField ) {
-              this._setFocusedTextField( this._hoursTextField );
-            } else if( this._focusedTextField === this._secondsTextField ) {
-              this._setFocusedTextField( this._minutesTextField );
-            }
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-          case "Right":
-            if( this._focusedTextField === this._hoursTextField ) {
-              this._setFocusedTextField( this._minutesTextField );
-            } else if( this._focusedTextField === this._minutesTextField ) {
-              if( this._short ) {
-                this._setFocusedTextField( this._hoursTextField );
-              } else {
-                this._setFocusedTextField( this._secondsTextField );
-              }
-            } else if( this._focusedTextField === this._secondsTextField ) {
-              this._setFocusedTextField( this._hoursTextField );
-            }
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-          case "Up":
-            var value = this._spinner.getValue();
-            if( value == this._spinner.getMax() ) {
-              this._spinner.setValue( this._spinner.getMin() );
-            } else {
-              this._spinner.setValue( value + 1 );
-            }
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-          case "Down":
-            var value = this._spinner.getValue();
-            if( value == this._spinner.getMin() ) {
-              this._spinner.setValue( this._spinner.getMax() );
-            } else {
-              this._spinner.setValue( value - 1 );
-            }
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-          case "PageUp":
-          case "PageDown":
-          case "Home":
-          case "End":
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-        }
-      }
-    },
-
-    _onKeyUp : function( evt ) {
-      var keypress = evt.getKeyIdentifier();
-      var value = this._focusedTextField.getText();
-      value = this._removeLeadingZero( value );
-      if( rwt.widgets.DateTimeTime._isNoModifierPressed( evt ) ) {
-        switch( keypress ) {
-          case "0": case "1": case "2": case "3": case "4":
-          case "5": case "6": case "7": case "8": case "9":
-            var maxChars = this._focusedTextField.getUserData( "maxLength" );
-            var newValue = keypress;
-            if( value.length < maxChars && !this._initialEditing ) {
-              newValue = value + keypress;
-            }
-            var intValue = parseInt( newValue, 10 );
-            if( intValue >= this._spinner.getMin() && intValue <= this._spinner.getMax() ) {
-              this._spinner.setValue( intValue );
-            } else {
-              newValue = keypress;
-              intValue = parseInt( newValue, 10 );
-              if( intValue >= this._spinner.getMin() && intValue <= this._spinner.getMax() ) {
-                this._spinner.setValue( intValue );
-              }
-            }
-            this._initialEditing = false;
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-          case "Home":
-            var newValue = this._spinner.getMin();
-            this._spinner.setValue( newValue );
-            this._initialEditing = true;
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-          case "End":
-            var newValue = this._spinner.getMax();
-            this._spinner.setValue( newValue );
-            this._initialEditing = true;
-            evt.preventDefault();
-            evt.stopPropagation();
-            break;
-        }
-      }
-    },
-
-    _onMouseWheel : function( evt ) {
-      if( this.getFocused() ) {
-        evt.preventDefault();
-        evt.stopPropagation();
-        this._spinner._onmousewheel( evt );
-      }
-    },
-
-    _addLeadingZero : function( value ) {
-      return value < 10 ? "0" + value : "" + value;
-    },
-
-    _removeLeadingZero : function( value ) {
-      var result = value;
-      if( value.length == 2 ) {
-        var firstChar = value.substring( 0, 1 );
-        if( firstChar == "0" ) {
-          result = value.substring( 1 );
-        }
-      }
-      return result;
-    },
-
-    _sendChanges : function() {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( this );
-        remoteObject.set( "hours", this._removeLeadingZero( this._hoursTextField.getText() ) );
-        remoteObject.set( "minutes", this._removeLeadingZero( this._minutesTextField.getText() ) );
-        remoteObject.set( "seconds", this._removeLeadingZero( this._secondsTextField.getText() ) );
-        if( this._hasSelectionListener ) {
-          this._requestTimer.restart();
-        }
-      }
-    },
-
-    _onInterval : function() {
-      this._requestTimer.stop();
-      rwt.remote.EventUtil.notifySelected( this );
-    },
-
-    setHours : function( value ) {
-      this._hoursTextField.setText( this._addLeadingZero( value ) );
-      if( this._focusedTextField === this._hoursTextField ) {
-        this._spinner.setValue( value );
-      }
-    },
-
-    setMinutes : function( value ) {
-      this._minutesTextField.setText( this._addLeadingZero( value ) );
-      if( this._focusedTextField === this._minutesTextField ) {
-        this._spinner.setValue( value );
-      }
-    },
-
-    setSeconds : function( value ) {
-      this._secondsTextField.setText( this._addLeadingZero( value ) );
-      if( this._focusedTextField === this._secondsTextField ) {
-        this._spinner.setValue( value );
-      }
-    },
-
-    setHasSelectionListener : function( value ) {
-      this._hasSelectionListener = value;
-      this._requestTimer = new rwt.client.Timer( 110 );
-      this._requestTimer.addEventListener( "interval", this._onInterval, this );
-    },
-
-    setBounds : function( ind, x, y, width, height ) {
-      var widget;
-      switch( ind ) {
-        case rwt.widgets.DateTimeTime.HOURS_TEXTFIELD:
-          widget = this._hoursTextField;
-        break;
-        case rwt.widgets.DateTimeTime.MINUTES_TEXTFIELD:
-          widget = this._minutesTextField;
-        break;
-        case rwt.widgets.DateTimeTime.SECONDS_TEXTFIELD:
-          widget = this._secondsTextField;
-        break;
-        case rwt.widgets.DateTimeTime.HOURS_MINUTES_SEPARATOR:
-          widget = this._separator3;
-        break;
-        case rwt.widgets.DateTimeTime.MINUTES_SECONDS_SEPARATOR:
-          widget = this._separator4;
-        break;
-        case rwt.widgets.DateTimeTime.SPINNER:
-          widget = this._spinner;
-        break;
-      }
-      widget.set({
-        left: x,
-        top: y,
-        width: width,
-        height: height
-      });
-    }
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2008, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.DateTimeDate", {
-  extend : rwt.widgets.base.Parent,
-
-  construct : function( style,
-                        monthNames,
-                        weekdayNames,
-                        weekdayShortNames,
-                        dateSeparator,
-                        datePattern )
-  {
-    this.base( arguments );
-    this.setOverflow( "hidden" );
-    this.setAppearance( "datetime-date" );
-
-    // Get styles
-    this._short = rwt.util.Strings.contains( style, "short" );
-    this._medium = rwt.util.Strings.contains( style, "medium" );
-    this._long = rwt.util.Strings.contains( style, "long" );
-    this._drop_down = rwt.util.Strings.contains( style, "drop_down" );
-
-    // Has selection listener
-    this._hasSelectionListener = false;
-    this._requestTimer = null;
-
-    // Flag that indicates that the next request can be sent
-    this._readyToSendChanges = true;
-
-    // Get names of weekdays and months
-    this._weekday = weekdayNames;
-    this._monthname = monthNames;
-
-    // Date pattern
-    this._datePattern = datePattern;
-
-    // Add listener for font change
-    this.addEventListener( "changeFont", this._rwt_onChangeFont, this );
-
-    this.addEventListener( "keypress", this._onKeyPress, this );
-    this.addEventListener( "keyup", this._onKeyUp, this );
-    this.addEventListener( "mousewheel", this._onMouseWheel, this );
-    this.addEventListener( "contextmenu", this._onContextMenu, this );
-    this.addEventListener( "focus", this._onFocusIn, this );
-    this.addEventListener( "blur", this._onFocusOut, this );
-
-    // Focused text field
-    this._focusedTextField = null;
-    // Weekday
-    this._weekdayTextField = new rwt.widgets.base.Label();
-    this._weekdayTextField.setAppearance( "datetime-field" );
-    if( this._long ) {
-      this.add( this._weekdayTextField );
-    }
-    // Separator
-    this._separator0 = new rwt.widgets.base.Label(",");
-    this._separator0.setAppearance( "datetime-separator" );
-    if( this._long ) {
-      this.add(this._separator0);
-    }
-    // Month
-    this._monthTextField = new rwt.widgets.base.Label();
-    this._monthTextField.setAppearance( "datetime-field" );
-    this._monthTextField.set({
-      textAlign: this._medium ? "right" : "center"
-    });
-    // Integer value of the month
-    this._monthInt = 1;
-    if( this._medium ) {
-      this._monthTextField.setText( "1" );
-    } else {
-      this._monthTextField.setText( this._monthname[ this._monthInt - 1 ] );
-    }
-    this._monthTextField.addEventListener( "mousedown",  this._onTextFieldMouseDown, this );
-    this.add( this._monthTextField );
-    // Separator
-    this._separator1 = new rwt.widgets.base.Label( dateSeparator );
-    this._separator1.setAppearance( "datetime-separator" );
-    if( this._medium ) {
-      this.add(this._separator1);
-    }
-    // Date
-    this._dayTextField = new rwt.widgets.base.Label( "1" );
-    this._dayTextField.setAppearance( "datetime-field" );
-    this._dayTextField.setUserData( "maxLength", 2 );
-    this._dayTextField.set({
-      textAlign: "right"
-    });
-    this._dayTextField.addEventListener( "mousedown",  this._onTextFieldMouseDown, this );
-    if( !this._short ) {
-      this.add( this._dayTextField );
-    }
-    // Separator
-    this._separator2 = new rwt.widgets.base.Label( "," );
-    this._separator2.setAppearance( "datetime-separator" );
-    if( this._medium ) {
-      this._separator2.setText( dateSeparator );
-    }
-    this.add(this._separator2);
-    // Year
-    this._yearTextField = new rwt.widgets.base.Label( "1970" );
-    this._yearTextField.setAppearance( "datetime-field" );
-    this._yearTextField.setUserData( "maxLength", 4 );
-    this._yearTextField.set({
-      textAlign: "right"
-    });
-    // Last valid year
-    this._lastValidYear = 1970;
-    this._yearTextField.addEventListener( "mousedown",  this._onTextFieldMouseDown, this );
-    this.add( this._yearTextField );
-    // Spinner
-    this._spinner = new rwt.widgets.base.Spinner();
-    this._spinner.set({
-      wrap: true,
-      border: null,
-      backgroundColor: null
-    });
-    this._spinner.setMin( 1 );
-    this._spinner.setMax( 12 );
-    this._spinner.setValue( this._monthInt );
-    this._spinner.addEventListener( "change",  this._onSpinnerChange, this );
-    this._spinner._textfield.setTabIndex( null );
-    // Hack to prevent the spinner text field to request the focus
-    this._spinner._textfield.setFocused = function() {};
-    // Solution for Bug 284021
-    this._spinner._textfield.setVisibility( false );
-    this._spinner._upbutton.setAppearance("datetime-button-up");
-    this._spinner._downbutton.setAppearance("datetime-button-down");
-    this._spinner.removeEventListener("keypress", this._spinner._onkeypress, this._spinner);
-    this._spinner.removeEventListener("keydown", this._spinner._onkeydown, this._spinner);
-    this._spinner.removeEventListener("keyup", this._spinner._onkeyup, this._spinner);
-    this._spinner.removeEventListener("mousewheel", this._spinner._onmousewheel, this._spinner);
-    this._spinner.setVisibility( !this._drop_down );
-    this.add( this._spinner );
-    // Drop-down button and calendar
-    this._dropped = false;
-    this._dropDownButton = null;
-    this._calendar = null;
-    if( this._drop_down ) {
-      // Add events listeners
-      var cDocument = rwt.widgets.base.ClientDocument.getInstance();
-      cDocument.addEventListener( "windowblur", this._onWindowBlur, this );
-      this.addEventListener( "appear", this._onAppear, this );
-      this.addEventListener( "changeVisibility", this._onChangeVisibility, this );
-      this.addEventListener( "mousedown", this._onMouseDown, this );
-      this.addEventListener( "click", this._onMouseClick, this );
-      this.addEventListener( "mouseover", this._onMouseOver, this );
-      this.addEventListener( "mouseout", this._onMouseOut, this );
-      this._dropDownButton = new rwt.widgets.base.Button();
-      this._dropDownButton.setAppearance( "datetime-drop-down-button" );
-      this._dropDownButton.setTabIndex( null );
-      this._dropDownButton.setAllowStretchY( true );
-      this.add( this._dropDownButton );
-      // Get names of weekdays and months
-      rwt.widgets.base.Calendar.MONTH_NAMES = monthNames;
-      rwt.widgets.base.Calendar.WEEKDAY_NAMES = weekdayShortNames;
-      this._calendar = new rwt.widgets.base.Calendar();
-      this._calendar.setAppearance( "datetime-drop-down-calendar" );
-      this._calendar.setDate( new Date( 70, 0, 1 ) );
-      this._calendar.setTabIndex( null );
-      this._calendar.setVisibility( false );
-      // TODO: [if] Calendar buttons tooltips have wrong z-index
-      // Remove tooltips for now.
-      this._calendar._lastYearBt.setToolTip( null );
-      this._calendar._lastMonthBt.setToolTip( null );
-      this._calendar._nextMonthBt.setToolTip( null );
-      this._calendar._nextYearBt.setToolTip( null );
-    }
-    // Set the default focused text field
-    this._focusedTextField = this._monthTextField;
-    // Set the weekday
-    this._setWeekday();
-  },
-
-  destruct : function() {
-    this.removeEventListener( "changeFont", this._rwt_onChangeFont, this );
-    this.removeEventListener( "keypress", this._onKeyPress, this );
-    this.removeEventListener( "keyup", this._onKeyUp, this );
-    this.removeEventListener( "mousewheel", this._onMouseWheel, this );
-    this.removeEventListener( "contextmenu", this._onContextMenu, this );
-    this.removeEventListener( "focus", this._onFocusIn, this );
-    this.removeEventListener( "blur", this._onFocusOut, this );
-    this._monthTextField.removeEventListener( "mousedown",  this._onTextFieldMouseDown, this );
-    this._dayTextField.removeEventListener( "mousedown",  this._onTextFieldMouseDown, this );
-    this._yearTextField.removeEventListener( "mousedown",  this._onTextFieldMouseDown, this );
-    this._spinner.removeEventListener( "change",  this._onSpinnerChange, this );
-    this._disposeObjects( "_weekdayTextField",
-                          "_monthTextField",
-                          "_dayTextField",
-                          "_yearTextField",
-                          "_focusedTextField",
-                          "_spinner",
-                          "_separator0",
-                          "_separator1",
-                          "_separator2" );
-    if( this._drop_down ) {
-      var cDocument = rwt.widgets.base.ClientDocument.getInstance();
-      cDocument.removeEventListener( "windowblur", this._onWindowBlur, this );
-      this.removeEventListener( "appear", this._onAppear, this );
-      this.removeEventListener( "changeVisibility", this._onChangeVisibility, this );
-      this.removeEventListener( "mousedown", this._onMouseDown, this );
-      this.removeEventListener( "click", this._onMouseClick, this );
-      this.removeEventListener( "mouseover", this._onMouseOver, this );
-      this.removeEventListener( "mouseout", this._onMouseOut, this );
-      this._dropDownButton.dispose();
-      this._dropDownButton = null;
-      if( !rwt.qx.Object.inGlobalDispose() ) {
-        this._calendar.setParent( null );
-      }
-      this._calendar.dispose();
-      this._calendar = null;
-    }
-  },
-
-  statics : {
-    WEEKDAY_TEXTFIELD : 0,
-    DATE_TEXTFIELD : 1,
-    MONTH_TEXTFIELD : 2,
-    YEAR_TEXTFIELD : 3,
-    WEEKDAY_MONTH_SEPARATOR : 4,
-    MONTH_DATE_SEPARATOR : 5,
-    DATE_YEAR_SEPARATOR : 6,
-    SPINNER : 7,
-    DROP_DOWN_BUTTON : 13,
-
-    _isNoModifierPressed : function( evt ) {
-      return    !evt.isCtrlPressed()
-             && !evt.isShiftPressed()
-             && !evt.isAltPressed()
-             && !evt.isMetaPressed();
-    }
-  },
-
-  members : {
-    addState : function( state ) {
-      this.base( arguments, state );
-      if( state.substr( 0, 8 ) == "variant_" ) {
-        this._weekdayTextField.addState( state );
-        this._monthTextField.addState( state );
-        this._dayTextField.addState( state );
-        this._yearTextField.addState( state );
-        this._spinner.addState( state );
-        this._separator0.addState( state );
-        this._separator1.addState( state );
-        this._separator2.addState( state );
-        if( this._drop_down ) {
-          this._dropDownButton.addState( state );
-          this._calendar.addState( state );
-        }
-      }
-    },
-
-    removeState : function( state ) {
-      this.base( arguments, state );
-      if( state.substr( 0, 8 ) == "variant_" ) {
-        this._weekdayTextField.removeState( state );
-        this._monthTextField.removeState( state );
-        this._dayTextField.removeState( state );
-        this._yearTextField.removeState( state );
-        this._spinner.removeState( state );
-        this._separator0.removeState( state );
-        this._separator1.removeState( state );
-        this._separator2.removeState( state );
-        if( this._drop_down ) {
-          this._dropDownButton.removeState( state );
-          this._calendar.removeState( state );
-        }
-      }
-    },
-
-    _rwt_onChangeFont : function( evt ) {
-      var value = evt.getValue();
-      this._weekdayTextField.setFont( value );
-      this._dayTextField.setFont( value );
-      this._monthTextField.setFont( value );
-      this._yearTextField.setFont( value );
-    },
-
-    _onContextMenu : function( evt ) {
-      var menu = this.getContextMenu();
-      if( menu != null && !this._dropped ) {
-        menu.setLocation( evt.getPageX(), evt.getPageY() );
-        menu.setOpener( this );
-        menu.show();
-        evt.stopPropagation();
-      }
-    },
-
-    _onFocusIn : function( evt ) {
-      this._focusedTextField.addState( "selected" );
-      this._initialEditing = true;
-    },
-
-    _onFocusOut : function( evt ) {
-      if( this._focusedTextField === this._yearTextField ) {
-        this._checkAndApplyYearValue();
-      }
-      this._focusedTextField.removeState( "selected" );
-    },
-
-    _onTextFieldMouseDown : function( evt ) {
-      if( this._focusedTextField === this._yearTextField ) {
-        this._checkAndApplyYearValue();
-      }
-      this._setFocusedTextField( evt.getTarget() );
-    },
-
-    _setFocusedTextField :  function( textField ) {
-      if( this._focusedTextField !== textField ) {
-        this._focusedTextField.removeState( "selected" );
-        this._focusedTextField = null;
-        if( textField === this._dayTextField ) {
-          this._spinner.setMin( 1 );
-          this._spinner.setMax( this._getDaysInMonth() );
-          var tmpValue = this._removeLeadingZero( this._dayTextField.getText() );
-          this._spinner.setValue( parseInt( tmpValue, 10 ) );
-        } else if( textField === this._monthTextField ) {
-          this._spinner.setMin( 1 );
-          this._spinner.setMax( 12 );
-          this._spinner.setValue( this._monthInt );
-        } else if( textField === this._yearTextField ) {
-          this._spinner.setMax( 9999 );
-          this._spinner.setMin( 1752 );
-          this._spinner.setValue( this._lastValidYear );
-        }
-        this._focusedTextField = textField;
-        this._focusedTextField.addState( "selected" );
-        this._initialEditing = true;
-      }
-    },
-
-    _onSpinnerChange : function( evt ) {
-      if( this._focusedTextField != null ) {
-        var oldValue = this._focusedTextField.getText();
-        // Set the value
-        if( this._focusedTextField === this._monthTextField ) {
-          this._monthInt = this._spinner.getValue();
-          if( this._medium ) {
-            this._focusedTextField.setText( this._addLeadingZero( this._monthInt ) );
-          } else {
-            this._focusedTextField.setText( this._monthname[ this._monthInt - 1 ] );
-          }
-        } else if( this._focusedTextField === this._yearTextField ) {
-          this._lastValidYear = this._spinner.getValue();
-          this._focusedTextField.setText( "" + this._spinner.getValue() );
-        } else {
-          this._focusedTextField.setText( this._addLeadingZero( this._spinner.getValue() ) );
-        }
-        // Adjust date field
-        if(    this._focusedTextField == this._monthTextField // month
-            || this._focusedTextField == this._yearTextField ) // year
-        {
-          var dateValue = this._dayTextField.getText();
-          if( dateValue > this._getDaysInMonth() ) {
-            this._dayTextField.setText( "" + this._getDaysInMonth() );
-          }
-        }
-        // Set the weekday field
-        this._setWeekday();
-
-        var newValue = this._focusedTextField.getText();
-        if( oldValue != newValue ) {
-          this._sendChanges();
-        }
-      }
-    },
-
-    _onKeyPress : function( evt ) {
-      var keyIdentifier = evt.getKeyIdentifier();
-      if( this._dropped ) {
-        this._calendar._onkeypress( evt );
-        if( rwt.widgets.DateTimeDate._isNoModifierPressed( evt ) ) {
-          switch( keyIdentifier ) {
-            case "Enter": case "Escape": case "Space": case "Tab":
-              this._toggleCalendarVisibility();
-            break;
-            case "Left": case "Right":
-            case "Up": case "Down":
-            case "PageUp": case "PageDown":
-              var date = this._calendar.getDate();
-              this._setDate( date );
-              this._sendChanges();
-              evt.preventDefault();
-              evt.stopPropagation();
-            break;
-          }
-        } else if( evt.isShiftPressed() ) {
-          switch( keyIdentifier ) {
-            case "Tab":
-              this._toggleCalendarVisibility();
-            break;
-            case "PageUp": case "PageDown":
-              var date = this._calendar.getDate();
-              this._setDate( date );
-              this._sendChanges();
-              evt.preventDefault();
-              evt.stopPropagation();
-            break;
-          }
-        }
-      } else {
-        if( rwt.widgets.DateTimeDate._isNoModifierPressed( evt ) ) {
-          switch( keyIdentifier ) {
-            case "Left":
-              if( this._datePattern == "MDY") {
-                this._rollLeft( this._monthTextField, this._dayTextField, this._yearTextField );
-              } else if( this._datePattern == "DMY") {
-                this._rollLeft( this._dayTextField, this._monthTextField, this._yearTextField );
-              } else {
-                if( this._medium ) {
-                  this._rollLeft( this._yearTextField, this._monthTextField, this._dayTextField );
-                } else {
-                  this._rollLeft( this._monthTextField, this._dayTextField, this._yearTextField );
-                }
-              }
-              evt.preventDefault();
-              evt.stopPropagation();
-              break;
-            case "Right":
-              if( this._datePattern == "MDY") {
-                this._rollRight( this._monthTextField, this._dayTextField, this._yearTextField );
-              } else if( this._datePattern == "DMY") {
-                this._rollRight( this._dayTextField, this._monthTextField, this._yearTextField );
-              } else {
-                if( this._medium ) {
-                  this._rollRight( this._yearTextField, this._monthTextField, this._dayTextField );
-                } else {
-                  this._rollRight( this._monthTextField, this._dayTextField, this._yearTextField );
-                }
-              }
-              evt.preventDefault();
-              evt.stopPropagation();
-              break;
-            case "Up":
-              if( this._focusedTextField === this._yearTextField ) {
-                this._checkAndApplyYearValue();
-              }
-              var value = this._spinner.getValue();
-              if( value == this._spinner.getMax() ) {
-                this._spinner.setValue( this._spinner.getMin() );
-              } else {
-                this._spinner.setValue( value + 1 );
-              }
-              evt.preventDefault();
-              evt.stopPropagation();
-              break;
-            case "Down":
-              if( this._focusedTextField === this._yearTextField ) {
-                this._checkAndApplyYearValue();
-              }
-              var value = this._spinner.getValue();
-              if( value == this._spinner.getMin() ) {
-                this._spinner.setValue( this._spinner.getMax() );
-              } else {
-                this._spinner.setValue( value - 1 );
-              }
-              evt.preventDefault();
-              evt.stopPropagation();
-              break;
-            case "PageUp":
-            case "PageDown":
-            case "Home":
-            case "End":
-              evt.preventDefault();
-              evt.stopPropagation();
-              break;
-          }
-        }
-      }
-    },
-
-    _rollRight : function( first, second, third ) {
-      // Apply year value
-      if( this._focusedTextField === this._yearTextField ) {
-        this._checkAndApplyYearValue();
-      }
-      // Roll right
-      if( this._focusedTextField === first ){
-        if( second.isSeeable() ) {
-          this._setFocusedTextField( second );
-        } else {
-          this._setFocusedTextField( third );
-        }
-      } else if( this._focusedTextField === second ) {
-        if( third.isSeeable() ) {
-          this._setFocusedTextField( third );
-        } else {
-          this._setFocusedTextField( first );
-        }
-      } else if( this._focusedTextField === third ) {
-        if( first.isSeeable() ) {
-          this._setFocusedTextField( first );
-        } else {
-          this._setFocusedTextField( second );
-        }
-      }
-    },
-
-    _rollLeft : function( first, second, third ) {
-      // Apply year value
-      if( this._focusedTextField === this._yearTextField ) {
-        this._checkAndApplyYearValue();
-      }
-      // Roll left
-      if( this._focusedTextField === first ) {
-        if( third.isSeeable() ) {
-          this._setFocusedTextField( third );
-        } else {
-          this._setFocusedTextField( second );
-        }
-      } else if( this._focusedTextField === second ) {
-        if( first.isSeeable() ) {
-          this._setFocusedTextField( first );
-        } else {
-          this._setFocusedTextField( third );
-        }
-      } else if( this._focusedTextField === third ) {
-        if( second.isSeeable() ) {
-          this._setFocusedTextField( second );
-        } else {
-          this._setFocusedTextField( first );
-        }
-      }
-    },
-
-    _onKeyUp : function( evt ) {
-      if( !this._dropped ) {
-        var keypress = evt.getKeyIdentifier();
-        var value = this._focusedTextField.getText();
-        value = this._removeLeadingZero( value );
-        if( rwt.widgets.DateTimeDate._isNoModifierPressed( evt ) ) {
-          switch( keypress ) {
-            case "0": case "1": case "2": case "3": case "4":
-            case "5": case "6": case "7": case "8": case "9":
-              var maxChars = this._focusedTextField.getUserData( "maxLength" );
-              if( this._focusedTextField === this._monthTextField ) {
-                value = "" + this._monthInt;
-                maxChars = 2;
-              }
-              var newValue = keypress;
-              if( value.length < maxChars && !this._initialEditing ) {
-                newValue = value + keypress;
-              }
-              var intValue = parseInt( newValue, 10 );
-              if(    this._focusedTextField === this._dayTextField
-                  || this._focusedTextField === this._monthTextField )
-              {
-                if( intValue >= this._spinner.getMin() && intValue <= this._spinner.getMax() ) {
-                  this._spinner.setValue( intValue );
-                } else {
-                  // Do it again without adding the old value
-                  newValue = keypress;
-                  intValue = parseInt( newValue, 10 );
-                  if( intValue >= this._spinner.getMin() && intValue <= this._spinner.getMax() ) {
-                    this._spinner.setValue( intValue );
-                  }
-                }
-              } else if( this._focusedTextField == this._yearTextField ) {
-                this._focusedTextField.setText( newValue );
-                if( newValue.length == 4 ) {
-                  this._checkAndApplyYearValue();
-                }
-              }
-              this._initialEditing = false;
-              evt.preventDefault();
-              evt.stopPropagation();
-              break;
-            case "Home":
-              var newValue = this._spinner.getMin();
-              this._spinner.setValue( newValue );
-              this._initialEditing = true;
-              evt.preventDefault();
-              evt.stopPropagation();
-              break;
-            case "End":
-              var newValue = this._spinner.getMax();
-              this._spinner.setValue( newValue );
-              this._initialEditing = true;
-              evt.preventDefault();
-              evt.stopPropagation();
-              break;
-          }
-        }
-      }
-    },
-
-    _onMouseWheel : function( evt ) {
-      if( this.getFocused() ) {
-        evt.preventDefault();
-        evt.stopPropagation();
-        if( !this._dropped ) {
-          this._spinner._onmousewheel( evt );
-        }
-      }
-    },
-
-    _getDaysInMonth : function() {
-      var result = 31;
-      var tmpMonth = this._monthInt - 1;
-      var tmpYear = parseInt( this._yearTextField.getText(), 10 );
-      var tmpDate = new Date( tmpYear, tmpMonth, 1 );
-      tmpDate.setDate( result );
-      while( tmpDate.getMonth() !== tmpMonth ) {
-        result--;
-        tmpDate = new Date( tmpYear, tmpMonth, 1 );
-        tmpDate.setDate( result );
-      }
-      return result;
-    },
-
-    _setWeekday : function() {
-      var tmpDate = new Date();
-      tmpDate.setDate( parseInt( this._dayTextField.getText(), 10 ) );
-      tmpDate.setMonth( this._monthInt - 1 );
-      tmpDate.setFullYear( parseInt( this._yearTextField.getText(), 10 ) );
-      this._weekdayTextField.setText( this._weekday[ tmpDate.getDay() + 1 ] );
-    },
-
-    _checkAndApplyYearValue : function() {
-      var oldValue = this._lastValidYear;
-      var value = parseInt( this._yearTextField.getText(), 10 );
-      if( value >= 0 && value <= 29 ) {
-        this._lastValidYear = 2000 + value;
-      } else if( value >= 30 && value <= 99 ) {
-        this._lastValidYear = 1900 + value;
-      } else if( value >= 1752 ) {
-        this._lastValidYear = value;
-      }
-      this._yearTextField.setText( "" + oldValue );
-      if( oldValue != this._lastValidYear ) {
-        this._spinner.setValue( this._lastValidYear );
-      }
-    },
-
-    _addLeadingZero : function( value ) {
-      return value < 10 ? "0" + value : "" + value;
-    },
-
-    _removeLeadingZero : function( value ) {
-      var result = value;
-      if( value.length == 2 ) {
-        var firstChar = value.substring( 0, 1 );
-        if( firstChar == "0" ) {
-          result = value.substring( 1 );
-        }
-      }
-      return result;
-    },
-
-    _sendChanges : function() {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( this );
-        remoteObject.set( "day", this._removeLeadingZero( this._dayTextField.getText() ) );
-        remoteObject.set( "month", this._monthInt - 1 );
-        remoteObject.set( "year", this._lastValidYear );
-        if( this._hasSelectionListener ) {
-          this._requestTimer.restart();
-        }
-      }
-    },
-
-    _onInterval : function() {
-      this._requestTimer.stop();
-      rwt.remote.EventUtil.notifySelected( this );
-    },
-
-    setMonth : function( value ) {
-      this._monthInt = value + 1;
-      if( this._medium ) {
-        this._monthTextField.setText( this._addLeadingZero( this._monthInt ) );
-      } else {
-        this._monthTextField.setText( this._monthname[ this._monthInt - 1 ] );
-      }
-      if( this._focusedTextField === this._monthTextField ) {
-        this._spinner.setValue( this._monthInt );
-      }
-      // Set the weekday
-      this._setWeekday();
-    },
-
-    setDay : function( value ) {
-      this._dayTextField.setText( this._addLeadingZero( value ) );
-      if( this._focusedTextField === this._dayTextField ) {
-        this._spinner.setValue( value );
-      }
-      // Set the weekday
-      this._setWeekday();
-    },
-
-    setYear : function( value ) {
-      this._lastValidYear = value;
-      this._yearTextField.setText( "" + value );
-      if( this._focusedTextField === this._yearTextField ) {
-        this._spinner.setValue( value );
-      }
-      // Set the weekday
-      this._setWeekday();
-    },
-
-    _setDate : function( date ) {
-      this.setYear( date.getFullYear() );
-      this.setMonth( date.getMonth() );
-      this.setDay( date.getDate() );
-    },
-
-    setHasSelectionListener : function( value ) {
-      this._hasSelectionListener = value;
-      this._requestTimer = new rwt.client.Timer( 110 );
-      this._requestTimer.addEventListener( "interval", this._onInterval, this );
-    },
-
-    setBounds : function( ind, x, y, width, height ) {
-      var widget = null;
-      switch( ind ) {
-        case rwt.widgets.DateTimeDate.WEEKDAY_TEXTFIELD:
-          widget = this._weekdayTextField;
-        break;
-        case rwt.widgets.DateTimeDate.DATE_TEXTFIELD:
-          widget = this._dayTextField;
-        break;
-        case rwt.widgets.DateTimeDate.MONTH_TEXTFIELD:
-          widget = this._monthTextField;
-        break;
-        case rwt.widgets.DateTimeDate.YEAR_TEXTFIELD:
-          widget = this._yearTextField;
-        break;
-        case rwt.widgets.DateTimeDate.WEEKDAY_MONTH_SEPARATOR:
-          widget = this._separator0;
-        break;
-        case rwt.widgets.DateTimeDate.MONTH_DATE_SEPARATOR:
-          widget = this._separator1;
-        break;
-        case rwt.widgets.DateTimeDate.DATE_YEAR_SEPARATOR:
-          widget = this._separator2;
-        break;
-        case rwt.widgets.DateTimeDate.SPINNER:
-          widget = this._spinner;
-        break;
-        case rwt.widgets.DateTimeDate.DROP_DOWN_BUTTON:
-          widget = this._dropDownButton;
-        break;
-      }
-      if( widget != null ) {
-        widget.set({
-          left: x,
-          top: y,
-          width: width,
-          height: height
-        });
-      }
-    },
-
-    //////////////////////////////////////
-    // Drop-down calendar handling methods
-
-    _onAppear : function( evt ) {
-      if( this._calendar != null ) {
-        this.getTopLevelWidget().add( this._calendar );
-        this._setCalendarLocation();
-      }
-    },
-
-    _onWindowBlur : function( evt ) {
-      if( this._dropped ) {
-        this._toggleCalendarVisibility();
-      }
-    },
-
-    _onChangeVisibility : function( evt ) {
-      var value = evt.getValue();
-      if( !value && this._dropped ) {
-        this._toggleCalendarVisibility();
-      }
-    },
-
-    _onMouseDown : function( evt ) {
-      var target = evt.getTarget();
-      if( target.getUserData( "calendar-day" ) ) {
-        evt.stopPropagation();
-      } else if( target.getUserData( "calendar-button" ) ) {
-        evt.stopPropagation();
-      } else if( this._dropped && target !== this._dropDownButton ) {
-        this._toggleCalendarVisibility();
-      }
-    },
-
-    _onMouseClick : function( evt ) {
-      if( evt.isLeftButtonPressed() ) {
-        var target = evt.getTarget();
-        if( target.getUserData( "calendar-day" ) ) {
-          this._calendar._onDayClicked( evt );
-          var date = this._calendar.getDate();
-          this._setDate( date );
-          this._toggleCalendarVisibility();
-          this.setFocused( true );
-          this._sendChanges();
-        } else if( target.getUserData( "calendar-button" ) ) {
-          this._calendar._onNavButtonClicked( evt );
-        } else if( target === this._dropDownButton ) {
-          this._toggleCalendarVisibility();
-        }
-      }
-    },
-
-    _onMouseOver : function( evt ) {
-      var target = evt.getTarget();
-      if( target == this._dropDownButton ) {
-        this._dropDownButton.addState( "over" );
-      } else if( target.getUserData( "calendar-day" ) ) {
-        this._calendar._onDayMouseOver( evt );
-      }
-    },
-
-    _onMouseOut : function( evt ) {
-      var target = evt.getTarget();
-      if( target == this._dropDownButton ) {
-        this._dropDownButton.removeState( "over" );
-      } else if( target.getUserData( "calendar-day" ) ) {
-        this._calendar._onDayMouseOut( evt );
-      }
-    },
-
-    _toggleCalendarVisibility : function() {
-      if( this._calendar != null ) {
-        this._dropped = !this._dropped;
-        this._calendar.setVisibility( this._dropped );
-        this.setCapture( this._dropped );
-        if( this._dropped ) {
-          this._bringToFront();
-          this._setCalendarLocation();
-          var year = parseInt( this._yearTextField.getText(), 10 );
-          var day = parseInt( this._dayTextField.getText(), 10 );
-          var date = new Date( year, this._monthInt - 1, day );
-          this._calendar.setDate( date );
-          this._focusedTextField.removeState( "selected" );
-        } else if( this.getFocused() ){
-          this._focusedTextField.addState( "selected" );
-        }
-      }
-    },
-
-    _setCalendarLocation : function() {
-      if( this.getElement() && this._calendar != null ){
-        var elementPos = rwt.html.Location.get( this.getElement() );
-        var browserHeight = rwt.html.Window.getInnerHeight( window );
-        var top = elementPos.top + this.getHeight();
-        var height = this._calendar.getHeightValue();
-        if( top + height > browserHeight ) {
-          top = elementPos.top - height;
-        }
-        this._calendar.setLocation( elementPos.left, top );
-      }
-    },
-
-    _bringToFront : function() {
-      var allWidgets = this.getTopLevelWidget().getChildren();
-      var topZIndex = this._calendar.getZIndex();
-      for( var vHashCode in allWidgets ) {
-        var widget = allWidgets[ vHashCode ];
-        if( widget.getZIndex ) {
-          if( topZIndex < widget.getZIndex() ) {
-            topZIndex = widget.getZIndex();
-          }
-        }
-      }
-      if( topZIndex > this._calendar.getZIndex() ) {
-        this._calendar.setZIndex( topZIndex + 1 );
-      }
-    }
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2008, 2013 Innoopract Informationssysteme GmbH.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.DateTimeCalendar", {
-  extend : rwt.widgets.base.Parent,
-
-  construct : function( style, monthNames, weekdayNames ) {
-    this.base( arguments );
-    this.setOverflow( "hidden" );
-    this.setAppearance( "datetime-calendar" );
-
-    // Has selection listener
-    this._hasSelectionListener = false;
-
-    // Get names of weekdays and months
-    rwt.widgets.base.Calendar.MONTH_NAMES = monthNames;
-    rwt.widgets.base.Calendar.WEEKDAY_NAMES = weekdayNames;
-
-    // The Calendar
-    this._calendar = new rwt.widgets.base.Calendar();
-    this._calendar.setDate( new Date( 74, 5, 6 ) );
-    this._calendar.setTabIndex( null );
-    this._calendar.addEventListener( "changeDate", this._onChangeDate, this );
-    this.add( this._calendar );
-
-    this.addEventListener( "contextmenu", this._onContextMenu, this );
-    this.addEventListener( "keypress", this._onKeyPress, this );
-    this.addEventListener( "mousewheel", this._onmousewheel, this );
-    this.addEventListener( "focus", this._onFocusIn, this );
-    this.addEventListener( "blur", this._onFocusOut, this );
-
-    this._updateSelectedDayState();
-  },
-
-  destruct : function() {
-    this._calendar.removeEventListener( "changeDate", this._onChangeDate, this );
-    this.removeEventListener( "contextmenu", this._onContextMenu, this );
-    this.removeEventListener( "keypress", this._onKeyPress, this );
-    this.removeEventListener( "mousewheel", this._onmousewheel, this );
-    this.removeEventListener( "focus", this._onFocusIn, this );
-    this.removeEventListener( "blur", this._onFocusOut, this );
-    this._disposeObjects( "_calendar" );
-  },
-
-  members : {
-    addState : function( state ) {
-      this.base( arguments, state );
-      if( state.substr( 0, 8 ) == "variant_" ) {
-        this._calendar.addState( state );
-      }
-    },
-
-    removeState : function( state ) {
-      this.base( arguments, state );
-      if( state.substr( 0, 8 ) == "variant_" ) {
-        this._calendar.removeState( state );
-      }
-    },
-
-    _onChangeDate : function() {
-      var date = this._calendar.getDate();
-      this._sendChanges( date.getDate(), date.getMonth(), date.getFullYear() );
-    },
-
-    _onContextMenu : function( evt ) {
-      var menu = this.getContextMenu();
-      if( menu != null ) {
-        menu.setLocation( evt.getPageX(), evt.getPageY() );
-        menu.setOpener( this );
-        menu.show();
-        evt.stopPropagation();
-      }
-    },
-
-    _onKeyPress : function( evt ) {
-      this._calendar._onkeypress( evt );
-    },
-
-    _onmousewheel : function( evt ) {
-      evt.preventDefault();
-      evt.stopPropagation();
-    },
-
-    _onFocusIn : function( evt ) {
-      this._updateSelectedDayState();
-    },
-
-    _onFocusOut : function( evt ) {
-      this._updateSelectedDayState();
-    },
-
-    _updateSelectedDayState : function() {
-      for( var i = 0; i < 6 * 7; i++ ) {
-        if( this.getFocused() ) {
-          this._calendar._dayLabelArr[ i ].removeState( "parent_unfocused" );
-        } else {
-          this._calendar._dayLabelArr[ i ].addState( "parent_unfocused" );
-        }
-      }
-    },
-
-    _sendChanges : function( date, month, year ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( this );
-        remoteObject.set( "day", date );
-        remoteObject.set( "month", month );
-        remoteObject.set( "year", year );
-        if( this._hasSelectionListener ) {
-          rwt.remote.EventUtil.notifySelected( this );
-        }
-      }
-    },
-
-    setMonth : function( value ) {
-      var date = this._calendar.getDate();
-      date.setMonth( value );
-      this._calendar.setDate( date );
-    },
-
-    setDay : function( value ) {
-      var date = this._calendar.getDate();
-      date.setDate( value );
-      this._calendar.setDate( date );
-    },
-
-    setYear : function( value ) {
-      var date = this._calendar.getDate();
-      date.setYear( value );
-      this._calendar.setDate( date );
-    },
-
-    setHasSelectionListener : function( value ) {
-      this._hasSelectionListener = value;
-    },
-
-    setFont : function() {
-      // TODO: [if] Calendar font is not implemented
-    }
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.DateTime", {
-
-  factory : function( properties ) {
-    var result;
-    var styleMap = rwt.remote.HandlerUtil.createStyleMap( properties.style );
-    var styles;
-    if( styleMap.SHORT ) {
-      styles = "short";
-    } else if( styleMap.LONG ) {
-      styles = "long";
-    } else {
-      styles = "medium";
-    }
-    if( styleMap.DROP_DOWN ) {
-      styles += "|drop_down";
-    }
-    if( styleMap.TIME ) {
-      result = new rwt.widgets.DateTimeTime( styles );
-    } else if( styleMap.CALENDAR ) {
-      rwt.widgets.base.Calendar.CELL_WIDTH = properties.cellSize[ 0 ];
-      rwt.widgets.base.Calendar.CELL_HEIGHT = properties.cellSize[ 1 ];
-      result = new rwt.widgets.DateTimeCalendar( styles,
-                                                             properties.monthNames,
-                                                             properties.weekdayShortNames );
-    } else {
-      rwt.widgets.base.Calendar.CELL_WIDTH = properties.cellSize[ 0 ];
-      rwt.widgets.base.Calendar.CELL_HEIGHT = properties.cellSize[ 1 ];
-      result = new rwt.widgets.DateTimeDate( styles,
-                                                         properties.monthNames,
-                                                         properties.weekdayNames,
-                                                         properties.weekdayShortNames,
-                                                         properties.dateSeparator,
-                                                         properties.datePattern );
-    }
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "year",
-    "month",
-    "day",
-    "hours",
-    "minutes",
-    "seconds",
-    "subWidgetsBounds"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    "subWidgetsBounds" : function( widget, value ) {
-      for( var i = 0; i < value.length; i++ ) {
-        widget.setBounds.apply( widget, value[ i ] );
-      }
-    }
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [
-    "Selection"
-  ] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2008, 2012 Innoopract Informationssysteme GmbH.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.ExpandItem", {
-  extend : rwt.widgets.base.Parent,
-
-  construct : function( parent ) {
-    this.base( arguments );
-    if( parent.classname != "rwt.widgets.ExpandBar" ) {
-      throw new Error( "illegal parent, must be a ExpandBar" );
-    }
-    this._expandBar = parent;
-    this.setAppearance( "expand-item" );
-    this._headerHeight = 24; // Chevron size with top/bottom insets
-    this._expanded = false;
-    this._image = null;
-    this._text = "";
-    // Construct a header area
-    this._header = new rwt.widgets.base.Atom( "(empty)", this._image, 16, 16 );
-    this._header.getLabelObject().setPaddingBottom( 4 );
-    this._header.setAppearance( "expand-item-header" );
-    this._header.addEventListener( "click", this._onClick, this );
-    this._header.addEventListener( "mouseover", this._onHandleMouseOver, this );
-    this._header.addEventListener( "mouseout", this._onHandleMouseOut, this );
-    this._header.setHeight( this._headerHeight );
-    this._header.setLabel( this._text );
-    this.add( this._header );
-    // Chevron image
-    this._chevron = new rwt.widgets.base.Image();
-    this._chevron.setAppearance( "expand-item-chevron-button" );
-    this._chevron.setTop( ( this._headerHeight - this._chevron.getHeight() ) / 2 );
-    this._chevron.addEventListener( "click", this._onClick, this );
-    this._chevron.addEventListener( "mouseover", this._onHandleMouseOver, this );
-    this._chevron.addEventListener( "mouseout", this._onHandleMouseOut, this );
-    this.add( this._chevron );
-  },
-
-  destruct : function() {
-    this._header.removeEventListener( "click", this._onClick, this );
-    this._header.removeEventListener( "mouseover", this._onHandleMouseOver, this );
-    this._header.removeEventListener( "mouseout", this._onHandleMouseOut, this );
-    this._chevron.removeEventListener( "click", this._onClick, this );
-    this._chevron.removeEventListener( "mouseover", this._onHandleMouseOver, this );
-    this._chevron.removeEventListener( "mouseout", this._onHandleMouseOut, this );
-    this._disposeObjects( "_header", "_chevron" );
-  },
-
-  statics : {
-    STATE_EXPANDED : "expanded",
-    STATE_OVER : "over"
-  },
-
-  members : {
-
-    addState : function( state ) {
-      this.base( arguments, state );
-      if( state.substr( 0, 8 ) == "variant_" ) {
-        this._header.addState( state );
-        this._chevron.addState( state );
-      }
-    },
-
-    removeState : function( state ) {
-      this.base( arguments, state );
-      if( state.substr( 0, 8 ) == "variant_" ) {
-        this._header.removeState( state );
-        this._chevron.removeState( state );
-      }
-    },
-
-    setExpanded : function( expanded ) {
-      this._expanded = expanded;
-      if( expanded ) {
-        this._chevron.addState( rwt.widgets.ExpandItem.STATE_EXPANDED );
-        this._header.addState( rwt.widgets.ExpandItem.STATE_EXPANDED );
-      } else {
-        this._chevron.removeState( rwt.widgets.ExpandItem.STATE_EXPANDED );
-        this._header.removeState( rwt.widgets.ExpandItem.STATE_EXPANDED );
-      }
-    },
-
-    getExpanded : function( expanded ) {
-      return this._expanded;
-    },
-
-    setImage : function( image ) {
-      this._image = image;
-      this._header.setIcon( image );
-    },
-
-    setText : function( text ) {
-      this._text = text;
-      this._header.setLabel( text );
-    },
-
-    setHeaderHeight : function( headerHeight ) {
-      this._headerHeight = headerHeight;
-      this._header.setHeight( this._headerHeight );
-      this._chevron.setTop( ( this._headerHeight - this._chevron.getHeight() ) / 2 );
-    },
-
-    _onClick : function( evt ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        this.setExpanded( !this._expanded );
-        var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( this );
-        remoteObject.set( "expanded", this._expanded );
-        if(    ( this._expandBar._hasExpandListener && this._expanded )
-            || ( this._expandBar._hasCollapseListener && !this._expanded ) )
-        {
-          var serverBar = rwt.remote.Server.getInstance().getRemoteObject( this._expandBar );
-          var itemId = rwt.remote.ObjectRegistry.getId( this );
-          var eventName = this._expanded ? "Expand" : "Collapse";
-          serverBar.notify( eventName, { "item" : itemId } );
-        }
-      }
-    },
-
-    _onHandleMouseOver : function( evt ) {
-      this._chevron.addState( rwt.widgets.ExpandItem.STATE_OVER );
-    },
-
-    _onHandleMouseOut : function( evt ) {
-      this._chevron.removeState( rwt.widgets.ExpandItem.STATE_OVER );
-    }
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.ExpandItem", {
-
-  factory : function( properties ) {
-    var result;
-    rwt.remote.HandlerUtil.callWithTarget( properties.parent, function( parent ) {
-      result = new rwt.widgets.ExpandItem( parent );
-      parent.addWidget( result );
-      rwt.remote.HandlerUtil.addDestroyableChild( parent, result );
-      result.setUserData( "protocolParent", parent );
-    } );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getWidgetDestructor(),
-
-  properties : [
-    "customVariant",
-    "bounds",
-    "text",
-    "image",
-    "expanded",
-    "headerHeight"
-  ],
-
-  propertyHandler : {
-    "bounds" : function( widget, value ) {
-      widget.setLeft( value[ 0 ] );
-      widget.setTop( value[ 1 ] );
-      widget.setWidth( value[ 2 ] );
-      widget.setHeight( value[ 3 ] );
-    },
-    "text" : function( widget, value ) {
-      var EncodingUtil = rwt.util.Encoding;
-      var text = EncodingUtil.escapeText( value, false );
-      widget.setText( text );
-    },
-    "image" : function( widget, value ) {
-      if( value === null ) {
-        widget.setImage( null );
-      } else {
-        widget.setImage( value[ 0 ] );
-      }
-    }
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2008, 2012 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.ExpandBar", {
-  extend : rwt.widgets.base.Scrollable,
-
-  construct : function() {
-    this.base( arguments, new rwt.widgets.base.Parent() );
-    this.setAppearance( "expand-bar" );
-    this.setHideFocus( true );
-    this.setScrollBarsVisible( false, false );
-    // This object is needed for proper scrolling behaviour
-    this._bottomSpacing = new rwt.widgets.base.Parent();
-    rwt.widgets.util.WidgetUtil.fixIEBoxHeight( this._bottomSpacing );
-    this._clientArea.add( this._bottomSpacing );
-    this._hasExpandListener = false;
-    this._hasCollapseListener = false;
-  },
-
-  destruct : function() {
-    this._disposeObjects( "_bottomSpacing" );
-  },
-
-  members : {
-
-    addWidget : function( widget ) {
-      this._clientArea.add( widget );
-    },
-
-    setBottomSpacingBounds : function( x, y, width, height ) {
-      this._bottomSpacing.setLeft( x );
-      this._bottomSpacing.setTop( y );
-      this._bottomSpacing.setWidth( width );
-      this._bottomSpacing.setHeight( height );
-    },
-
-    setVScrollBarVisible : function( show ) {
-      this.setScrollBarsVisible( false, show );
-      if( !show ) {
-        this.setVBarSelection( 0 );
-      }
-    },
-
-    setVScrollBarMax : function( value ) {
-      this._vertScrollBar.setMaximum( value );
-    },
-
-    setHasExpandListener : function( value ) {
-      this._hasExpandListener = value;
-    },
-
-    setHasCollapseListener : function( value ) {
-      this._hasCollapseListener = value;
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.ExpandBar", {
-
-  factory : function( properties ) {
-    var result = new rwt.widgets.ExpandBar();
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "bottomSpacingBounds",
-    "vScrollBarMax"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    "bottomSpacingBounds" : function( widget, value ) {
-      widget.setBottomSpacingBounds.apply( widget, value );
-    }
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [
-    "Expand",
-    "Collapse"
-  ] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2010, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-(function(){
-
-rwt.qx.Class.define( "rwt.widgets.Text", {
-
-  extend : rwt.widgets.base.BasicText,
-
-  construct : function( isTextarea ) {
-    this.base( arguments );
-    if( isTextarea ) {
-      this._inputTag = "textarea";
-      this._inputType = null;
-      this._inputOverflow = "auto";
-      this.setAppearance( "text-area" );
-      this.setAllowStretchY( true );
-      this.__oninput = rwt.util.Functions.bindEvent( this._oninputDomTextarea, this );
-    }
-    this._hasDefaultSelectionListener = false;
-    this._hasModifyListener = false;
-    this._modifyScheduled = false;
-    this._message = null;
-    this._messageElement = null;
-    this._searchIconElement = null;
-    this._cancelIconElement = null;
-  },
-
-  destruct : function() {
-    this._messageElement = null;
-    this._searchIconElement = null;
-    this._cancelIconElement = null;
-    this.__oninput = null;
-  },
-
-  properties : {
-
-    wrap : {
-      check : "Boolean",
-      init : true,
-      apply : "_applyWrap"
-    }
-
-  },
-
-  members : {
-
-    //////
-    // API
-
-    setMessage : function( value ) {
-      this._message = value;
-      this._updateMessage();
-    },
-
-    getMessage : function() {
-      return this._message;
-    },
-
-    setPasswordMode : function( value ) {
-      var type = value ? "password" : "text";
-      if( this._inputTag != "textarea" && this._inputType != type ) {
-        this._inputType = type;
-        if( this._isCreated ) {
-          if( rwt.client.Client.getEngine() === "mshtml" ) {
-            this._reCreateInputField();
-          } else {
-            this._inputElement.type = this._inputType;
-          }
-        }
-      }
-    },
-
-    setHasDefaultSelectionListener : function( value ) {
-      if( !this.hasState( "rwt_MULTI" ) ) {
-        this._hasDefaultSelectionListener = value;
-      }
-    },
-
-    hasSelectionListener : function() {
-      // Emulate SWT (on Windows) where a default button takes precedence over
-      // a SelectionListener on a text field when both are on the same shell.
-      var shell = rwt.remote.HandlerUtil.getShell( this );
-      var defButton = shell ? shell.getDefaultButton() : null;
-      // TODO [rst] On GTK, the SelectionListener is also off when the default
-      //      button is invisible or disabled. Check with Windows and repair.
-      var hasDefaultButton = defButton != null && defButton.isSeeable();
-      return !hasDefaultButton && this._hasDefaultSelectionListener;
-    },
-
-    setHasModifyListener : function( value ) {
-      this._hasModifyListener = value;
-    },
-
-    hasModifyListener : function() {
-      return this._hasModifyListener;
-    },
-
-    ////////////////
-    // event handler
-
-    _ontabfocus : function() {
-      this._renderSelection();
-    },
-
-    _onkeydown : function( event ) {
-      this.base( arguments, event );
-      if(    event.getKeyIdentifier() == "Enter"
-          && !event.isShiftPressed()
-          && !event.isAltPressed()
-          && !event.isCtrlPressed()
-          && !event.isMetaPressed() )
-      {
-        if( this.hasState( "rwt_MULTI" ) ) {
-          event.stopPropagation();
-        }
-        if( this.hasSelectionListener() ) {
-          this._sendWidgetDefaultSelected();
-        }
-      }
-    },
-
-    _onMouseDownUp : function( event ) {
-      this.base( arguments, event );
-      if( event.getType() === "mousedown" ) {
-        var target = event.getDomTarget();
-        var detail = null;
-        if( target === this._searchIconElement ) {
-          detail = "search";
-        } else if( target === this._cancelIconElement ) {
-          this.setValue( "" );
-          detail = "cancel";
-        }
-        if( this._hasDefaultSelectionListener && detail != null ) {
-          this._sendWidgetDefaultSelected( detail );
-        }
-      }
-    },
-
-    ///////////////
-    // send changes
-
-    _handleSelectionChange : function( start, length ) {
-      this.base( arguments, start, length );
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( this );
-        remoteObject.set( "selectionStart", start );
-        remoteObject.set( "selectionLength", length );
-      }
-    },
-
-    _handleModification : function() {
-      var server = rwt.remote.Server.getInstance();
-      if( !this._modifyScheduled && this.hasModifyListener() ) {
-        this._modifyScheduled = true;
-        server.sendDelayed( 500 );
-        server.onNextSend( this._onSend, this );
-      }
-      server.getRemoteObject( this ).set( "text", this.getComputedValue() );
-      this._detectSelectionChange();
-    },
-
-    _onSend : function() {
-      if( this._modifyScheduled ) {
-        rwt.remote.Server.getInstance().getRemoteObject( this ).notify( "Modify", null, true );
-        this._modifyScheduled = false;
-      }
-    },
-
-    /*
-     * Sends a widget default selected event to the server.
-     */
-    _sendWidgetDefaultSelected : function( detail ) {
-      rwt.remote.EventUtil.notifyDefaultSelected( this, 0, 0, 0, 0, detail );
-    },
-
-    ///////////////////
-    // textarea support
-
-    _applyElement : function( value, oldValue ) {
-      this.base( arguments, value, oldValue );
-      if( this._inputTag == "textarea" ) {
-        this._styleWrap();
-      }
-      // Fix for bug 306354
-      this._inputElement.style.paddingRight = "1px";
-      this._updateAllIcons();
-      this._updateMessage();
-    },
-
-    _webkitMultilineFix : function() {
-      if( this._inputTag !== "textarea" ) {
-        this.base( arguments );
-      }
-    },
-
-    _applyWrap : function( value, oldValue ) {
-      if( this._inputTag == "textarea" ) {
-        this._styleWrap();
-      }
-    },
-
-    _styleWrap : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function() {
-        if( this._inputElement ) {
-          this._inputElement.wrap = this.getWrap() ? "soft" : "off";
-        }
-      },
-      "gecko" : function() {
-        if( this._inputElement ) {
-          var wrapValue = this.getWrap() ? "soft" : "off";
-          var styleValue = this.getWrap() ? "" : "auto";
-          this._inputElement.setAttribute( 'wrap', wrapValue );
-          this._inputElement.style.overflow = styleValue;
-        }
-      },
-      "default" : function() {
-        if( this._inputElement ) {
-          var wrapValue = this.getWrap() ? "soft" : "off";
-          this._inputElement.setAttribute( 'wrap', wrapValue );
-        }
-      }
-    } ),
-
-    _applyMaxLength : function( value, oldValue ) {
-      if( this._inputTag != "textarea" ) {
-        this.base( arguments, value, oldValue );
-      }
-    },
-
-    _oninputDomTextarea : function( event ) {
-      var maxLength = this.getMaxLength();
-      var fireEvents = true;
-      if( maxLength != null ) {
-        var value = this._inputElement.value;
-        if( value.length > this.getMaxLength() ) {
-          var oldValue = this.getValue();
-          // NOTE [tb] : When pasting strings, this might not always
-          //             behave like SWT. There is no reliable fix for that.
-          var position = this._getSelectionStart();
-          if( oldValue.length == ( value.length - 1 ) ) {
-            // The user added one character, undo.
-            this._inputElement.value = oldValue;
-            this._setSelectionStart( position - 1 );
-            this._setSelectionLength( 0 );
-          } else if( value.length >= oldValue.length && value != oldValue) {
-            // The user pasted a string, shorten:
-            this._inputElement.value = value.slice( 0, this.getMaxLength() );
-            this._setSelectionStart( Math.min( position, this.getMaxLength() ) );
-            this._setSelectionLength( 0 );
-          }
-          if( this._inputElement.value == oldValue ) {
-            fireEvents = false;
-          }
-        }
-      }
-      if( fireEvents ) {
-        this._oninputDom( event );
-      }
-    },
-
-    ////////////////
-    // icons support
-
-    // overrided
-    _syncFieldWidth : function() {
-      var width =   this.getInnerWidth()
-                  - this._getIconOuterWidth( "search" )
-                  - this._getIconOuterWidth( "cancel" );
-      this._inputElement.style.width = Math.max( 2, width ) + "px";
-    },
-
-    _syncFieldLeft : function() {
-      this._inputElement.style.marginLeft = this._getIconOuterWidth( "search" ) + "px";
-    },
-
-    _updateAllIcons : function() {
-      if( this._isCreated ) {
-        this._updateIcon( "search" );
-        this._updateIcon( "cancel" );
-      }
-    },
-
-    _updateIcon : function( iconId ) {
-      var element = this._getIconElement( iconId );
-      if( this._hasIcon( iconId ) && element == null ) {
-        element = document.createElement( "div" );
-        element.style.position = "absolute";
-        element.style.cursor = "pointer";
-        if( rwt.client.Client.isMshtml() ) {
-          element.style.fontSize = 0;
-          element.style.lineHeight = 0;
-        }
-        this._getTargetNode().insertBefore( element, this._inputElement );
-        this._setIconElement( iconId, element );
-      }
-      if( element ) {
-        var image = this._getIconImage( iconId );
-        element.style.backgroundImage = image ? "URL(" + image[ 0 ] + ")" : "none";
-      }
-      this._layoutIcon( iconId );
-    },
-
-    _layoutAllIcons : function() {
-      this._layoutIcon( "search" );
-      this._layoutIcon( "cancel" );
-    },
-
-    _layoutIcon : function( iconId ) {
-      var element = this._getIconElement( iconId );
-      if( element ) {
-        var style = element.style;
-        var image = this._getIconImage( iconId );
-        style.width = image ? image[ 1 ] + "px" : 0;
-        style.height = image ? image[ 2 ] + "px" : 0;
-        var iconHeight = parseInt( style.height, 10 );
-        style.top = Math.round( this.getInnerHeight() / 2 - iconHeight / 2 ) + "px";
-        if( this._getIconPosition( iconId ) === "right" ) {
-          var styleMap = this._getMessageStyle();
-          var iconWidth = parseInt( style.width, 10 );
-          style.left = (   this.getBoxWidth()
-                         - this._cachedBorderRight
-                         - styleMap.paddingRight
-                         - iconWidth ) + "px";
-        }
-      }
-    },
-
-    _getIconElement : function( iconId ) {
-      return iconId === "search" ? this._searchIconElement : this._cancelIconElement;
-    },
-
-    _setIconElement : function( iconId, element ) {
-      if( iconId === "search" ) {
-        this._searchIconElement = element;
-      } else {
-        this._cancelIconElement = element;
-      }
-    },
-
-    _getIconOuterWidth : function( iconId ) {
-      var result = 0;
-      var image = this._getIconImage( iconId );
-      if( this._hasIcon( iconId ) && image != null ) {
-        result = image[ 1 ] + this._getIconSpacing( iconId );
-      }
-      return result;
-    },
-
-    _hasIcon : function( iconId ) {
-      return this.hasState( iconId === "search" ? "rwt_ICON_SEARCH" : "rwt_ICON_CANCEL" );
-    },
-
-    _getIconImage : function( iconId ) {
-      return this._hasIcon( iconId ) ? this._getIconStyle( iconId ).icon : null;
-    },
-
-    _getIconPosition : function( iconId ) {
-      return iconId === "search" ? "left" : "right";
-    },
-
-    _getIconSpacing : function( iconId ) {
-      return this._hasIcon( iconId ) ? this._getIconStyle( iconId ).spacing : 0;
-    },
-
-    _getIconStyle : function( iconId ) {
-      var manager = rwt.theme.AppearanceManager.getInstance();
-      return manager.styleFrom( "text-field-icon", iconId === "search" ? { search : true } : {} );
-    },
-
-    ///////////////////
-    // password support
-
-    _reCreateInputField : function() {
-      var selectionStart = this._getSelectionStart();
-      var selectionLength = this._getSelectionLength();
-      this._inputElement.parentNode.removeChild( this._inputElement );
-      this._inputElement.onpropertychange = null;
-      this._inputElement = null;
-      this._firstInputFixApplied = false;
-      this._applyElement( this.getElement(), null );
-      this._afterAppear();
-      this._postApply();
-      this._applyFocused( this.getFocused() );
-      this._setSelectionStart( selectionStart );
-      this._setSelectionLength( selectionLength );
-    },
-
-    //////////////////
-    // message support
-
-    _postApply : function() {
-      this.base( arguments );
-      this._syncFieldLeft();
-      this._layoutAllIcons();
-      this._layoutMessage();
-    },
-
-    _applyValue : function( newValue, oldValue ) {
-      this.base( arguments, newValue, oldValue );
-      this._updateMessageVisibility();
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        this._handleModification();
-      }
-    },
-
-    _applyFocused : function( newValue, oldValue ) {
-      this.base( arguments, newValue, oldValue );
-      this._updateMessageVisibility();
-      if( newValue && ( this.getValue() === "" || this.getValue() == null ) ) {
-        this._forceFocus();
-      }
-    },
-
-    _forceFocus : rwt.util.Variant.select( "qx.client", {
-      "mshtml" : function() {
-        rwt.client.Timer.once( function() {
-          if( this._inputElement ) {
-            this._inputElement.select();
-            this._inputElement.focus();
-          }
-        }, this, 1 );
-      },
-      "webkit" : function() {
-        rwt.client.Timer.once( function() {
-          if( this._inputElement ) {
-            this._inputElement.focus();
-          }
-        }, this, 1 );
-      },
-      "default" : function() {
-        // nothing to do
-      }
-    } ),
-
-    _applyCursor : function( newValue, oldValue ) {
-      this.base( arguments, newValue, oldValue );
-      this._updateMessageCursor();
-    },
-
-    _applyFont : function( newValue, oldValue ) {
-      this.base( arguments, newValue, oldValue );
-      this._updateMessageFont();
-    },
-
-    // Overwritten
-    _preventEnter : function( event ) {
-      if( this._inputTag !== "textarea" ) {
-        this.base( arguments, event );
-      }
-    },
-
-    _updateMessage : function() {
-      if( this._isCreated ) {
-        if( this._message != null && this._message !== "" && this._messageElement == null ) {
-          this._messageElement = document.createElement( "div" );
-          var style = this._messageElement.style;
-          style.position = "absolute";
-          style.outline = "none";
-          var styleMap = this._getMessageStyle();
-          style.color = styleMap.textColor || "";
-          style.left = styleMap.paddingLeft + "px";
-          rwt.html.Style.setTextShadow( this._messageElement, styleMap.textShadow );
-          this._getTargetNode().insertBefore( this._messageElement, this._inputElement );
-        }
-        if( this._messageElement ) {
-          this._messageElement.innerHTML = this._message ? this._message : "";
-        }
-        this._updateMessageCursor();
-        this._updateMessageVisibility();
-        this._updateMessageFont();
-        this._layoutMessage();
-      }
-    },
-
-    _layoutMessage : function() {
-      if( this._messageElement ) {
-        var styleMap = this._getMessageStyle();
-        var style = this._messageElement.style;
-        var width = this.getBoxWidth()
-                    - this._cachedBorderLeft
-                    - this._cachedBorderRight
-                    - styleMap.paddingLeft
-                    - styleMap.paddingRight
-                    - this._getIconOuterWidth( "search" )
-                    - this._getIconOuterWidth( "cancel" );
-        style.width = Math.max( 0, width ) + "px";
-        var messageHeight = parseInt( style.height, 10 );
-        if( this._inputTag == "textarea" ) {
-          // The text-area padding is hard codded in the appearances
-          style.top = "0px";
-          style.left = "3px";
-        } else {
-          style.top = Math.round( this.getInnerHeight() / 2 - messageHeight / 2 ) + "px";
-          style.left = ( this._getIconOuterWidth( "search" ) + styleMap.paddingLeft ) + "px";
-        }
-      }
-    },
-
-    _getMessageStyle : function() {
-      var manager = rwt.theme.AppearanceManager.getInstance();
-      return manager.styleFrom( "text-field-message", {} );
-    },
-
-    _updateMessageVisibility : function() {
-      if( this._messageElement ) {
-        var visible = ( this.getValue() == null || this.getValue() === "" ) && !this.getFocused();
-        this._messageElement.style.display = visible ? "" : "none";
-      }
-    },
-
-    _updateMessageFont : function() {
-      if( this._messageElement ) {
-        var style = this._messageElement.style;
-        var font = this.getFont();
-        font.renderElement( this._messageElement );
-        style.height = Math.round( font.getSize() * this._LINE_HEIGT_FACTOR ) + "px";
-      }
-    },
-
-    _updateMessageCursor : function() {
-      if( this._messageElement ) {
-        var cursor = this._inputElement.style.cursor;
-        if( cursor == null || cursor === "" ) {
-          cursor = "text";
-        }
-        this._messageElement.style.cursor = cursor;
-      }
-    }
-
-  }
-
-} );
-
-}());
-
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.Text", {
-
-  factory : function( properties ) {
-    var styleMap = rwt.remote.HandlerUtil.createStyleMap( properties.style );
-    var result = new rwt.widgets.Text( styleMap.MULTI );
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    if( styleMap.RIGHT ) {
-      result.setTextAlign( "right" );
-    } else if( styleMap.CENTER ) {
-      result.setTextAlign( "center" );
-    }
-    result.setWrap( styleMap.WRAP !== undefined );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "text",
-    "message",
-    "echoChar",
-    "editable",
-    "selection",
-    "textLimit"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    "text" : function( widget, value ) {
-      var EncodingUtil = rwt.util.Encoding;
-      var text = EncodingUtil.truncateAtZero( value );
-      if( !widget.hasState( "rwt_MULTI" ) ) {
-        text = EncodingUtil.replaceNewLines( text, " " );
-      }
-      widget.setValue( text );
-    },
-    "echoChar" : function( widget, value ) {
-      if( !widget.hasState( "rwt_MULTI" ) ) {
-        widget.setPasswordMode( value !== null );
-      }
-    },
-    "editable" : function( widget, value ) {
-      widget.setReadOnly( !value );
-    },
-    "textLimit" : function( widget, value ) {
-      widget.setMaxLength( value );
-    }
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [
-    "DefaultSelection",
-    "Modify"
-  ] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2002, 2012 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-/**
- * This class represents SWT Labels with style SWT.SEPARATOR
- */
-rwt.qx.Class.define( "rwt.widgets.Separator", {
-  extend : rwt.widgets.base.BoxLayout,
-
-  construct : function() {
-    this.base( arguments );
-    // Fix IE Styling issues
-    rwt.widgets.util.WidgetUtil.fixIEBoxHeight( this );
-    // the actual separator line
-    this._line = new rwt.widgets.base.Parent();
-    this._line.setAnonymous( true );
-    this._line.setAppearance( "separator-line" );
-    this.add( this._line );
-  },
-
-  properties : {
-
-    appearance : {
-      refine : true,
-      init : "separator"
-    }
-  },
-
-  destruct : function() {
-    this._line.dispose();
-    this._line = null;
-  },
-
-  members : {
-
-    addState : function( state ) {
-      this.base( arguments, state );
-      if( state.substr( 0, 8 ) == "variant_" ) {
-        this._line.addState( state );
-      }
-    },
-
-    removeState : function( state ) {
-      this.base( arguments, state );
-      if( state.substr( 0, 8 ) == "variant_" ) {
-        this._line.removeState( state );
-      }
-    },
-
-    setLineStyle : function( style ) {
-      this._line.addState( style );
-    },
-
-    setLineOrientation : function( value ) {
-      if( value == "vertical" ) {
-        this.setHorizontalChildrenAlign( "center" );
-        this._line.setHeight( "100%" );
-        this._line.addState( "rwt_VERTICAL" );
-      } else {
-        this.setVerticalChildrenAlign( "middle" );
-        this._line.setWidth( "100%" );
-        this._line.removeState( "rwt_VERTICAL" );
-      }
-    }
-  }
-});
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.Separator", {
-
-  factory : function( properties ) {
-    var result = new rwt.widgets.Separator();
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    var styleMap = rwt.remote.HandlerUtil.createStyleMap( properties.style );
-    result.setLineOrientation( styleMap.VERTICAL ? "vertical" : "horizontal" );
-    var lineStyle = "rwt_SHADOW_NONE";
-    if( styleMap.SHADOW_IN ) {
-      lineStyle = "rwt_SHADOW_IN";
-    } else if( styleMap.SHADOW_OUT ) {
-      lineStyle = "rwt_SHADOW_OUT";
-    }
-    result.setLineStyle( lineStyle );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {} ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2009, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.ControlDecorator", {
-  extend : rwt.widgets.base.Image,
-
-  construct : function() {
-    this.base( arguments );
-    this.setZIndex( 1000 );
-    this.setVisibility( false );
-    this._showHover = true;
-    this._text = null;
-  },
-
-  members : {
-
-    setText : function( value ) {
-      this._text = value;
-      this._updateToolTip();
-    },
-
-    setShowHover : function( value ) {
-      this._showHover = value;
-      this._updateToolTip();
-    },
-
-    _updateToolTip : function() {
-      var wm = rwt.remote.WidgetManager.getInstance();
-      if( this._text === null || this._text === "" || !this._showHover ) {
-        wm.setToolTip( this, null );
-      } else {
-        wm.setToolTip( this, this._text );
-      }
-    },
-
-    setHasSelectionListener : function( value ) {
-      var eventUtil = rwt.remote.EventUtil;
-      if( value ) {
-        this.addEventListener( "mousedown", eventUtil.widgetSelected, this );
-      } else {
-        this.removeEventListener( "mousedown", eventUtil.widgetSelected, this );
-      }
-    },
-
-    setHasDefaultSelectionListener : function( value ) {
-      var eventUtil = rwt.remote.EventUtil;
-      if( value ) {
-        this.addEventListener( "dblclick", eventUtil.widgetDefaultSelected, this );
-      } else {
-        this.removeEventListener( "dblclick", eventUtil.widgetDefaultSelected, this );
-      }
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.ControlDecorator", {
-
-  factory : function( properties ) {
-    var result = new rwt.widgets.ControlDecorator();
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    // [if] ControlDecorator is destroyded by the protocol and must not be set as destroyable child.
-    // See bug 407397
-    rwt.remote.HandlerUtil.callWithTarget( properties.parent, function( parent ) {
-      rwt.remote.HandlerUtil.removeDestroyableChild( parent, result );
-      result.setUserData( "protocolParent", null );
-    } );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getWidgetDestructor(),
-
-  properties : [
-    "bounds",
-    "text",
-    "image",
-    "visible",
-    "showHover"
-  ],
-
-  propertyHandler : {
-    "bounds" : function( widget, value ) {
-      widget.setLeft( value[ 0 ] );
-      widget.setTop( value[ 1 ] );
-      widget.setWidth( value[ 2 ] );
-      widget.setHeight( value[ 3 ] );
-    },
-    "text" : function( widget, value ) {
-      var EncodingUtil = rwt.util.Encoding;
-      var text = EncodingUtil.escapeText( value, false );
-      text = EncodingUtil.replaceNewLines( text, "<br/>" );
-      widget.setText( text );
-    },
-    "image" : function( widget, value ) {
-      if( value === null ) {
-        widget.setSource( null );
-      } else {
-        widget.setSource( value[ 0 ] );
-      }
-    },
-    "visible" : function( widget, value ) {
-      widget.setVisibility( value );
-    }
-  },
-
-  listeners : [ "Selection", "DefaultSelection" ]
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2010, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *     EclipseSource - ongoing development
- *     Austin Riddle (Texas Center for Applied Technology) - draggable types
- ******************************************************************************/
-
-
-/*global alert:false, console:false */
-
-rwt.qx.Class.define( "rwt.runtime.MobileWebkitSupport", {
-
-  type : "static",
-
-  statics : {
-    // These represent widget types and (optionally) defined appearances that are used to determine
-    // if the widget is draggable.  If appearances are defined for a type, then one of the
-    // appearances must match to allow the widget to be draggable.
-    _draggableTypes : {
-      "rwt.widgets.Shell" : null,
-      "rwt.widgets.Sash"  : null,
-      "rwt.widgets.Scale" : [ "scale-thumb" ],
-      "rwt.widgets.Slider" : [ "slider-thumb" ],
-      "rwt.widgets.base.ScrollBar" : null,
-      "rwt.widgets.ScrolledComposite" : [ "scrollbar-thumb" ],
-      "rwt.widgets.base.BasicButton" : [ "scrollbar-thumb" ],
-      "rwt.widgets.base.Parent" : [ "coolitem-handle" ],
-      "rwt.widgets.List" : [ "scrollbar-thumb" ],
-      "rwt.widgets.Grid" : [ "tree-column", "label", "image", "scrollbar-thumb" ]
-    },
-    _lastMouseOverTarget : null,
-    _lastMouseClickTarget : null,
-    _lastMouseClickTime : null,
-    _mouseEnabled : true,
-    _fullscreen : window.navigator.standalone,
-    _touchListener : null,
-    _gestureListener : null,
-    _touchSession : null,
-    _allowNativeScroll : false,
-
-    _allowedMouseEvents : {
-      "INPUT" : {
-        "mousedown" : true,
-        "mouseup" : true
-      },
-      "TEXTAREA" : {
-        "mousedown" : true,
-        "mouseup" : true
-      },
-      "*" : {
-        "mousewheel" : true
-      }
-    },
-
-    init : function() {
-      if( rwt.client.Client.supportsTouch() ) {
-        this._configureToolTip();
-        this._hideTabHighlight();
-        this._bindListeners();
-        this._registerListeners();
-        this._registerFilter();
-        // scrolling is currently very buggy in android, deactivated:
-        this.setTouchScrolling( !rwt.client.Client.isAndroidBrowser() );
-      }
-    },
-
-    // API for registration of custom-widgets for touch handling
-    addDraggableType : function( type ) {
-      // protect already registered types
-      var exists = type in this._draggableTypes;
-      if( !exists ) {
-        this._draggableTypes[type] = null;
-      }
-    },
-
-    // Experimental API for custom-widget
-    setTouchListener : function( func, context ) {
-      this._touchListener = [ func, context ];
-    },
-
-    // Experimental API for custom-widget
-    setGestureListener : function( func, context ) {
-      this._gestureListener = [ func, context ];
-    },
-
-    setTouchScrolling : function( value ) {
-      this._allowNativeScroll = value;
-    },
-
-    _isZoomed : function() {
-      var vertical = window.orientation % 180 === 0;
-      var width = vertical ? screen.width : screen.height;
-      return window.innerWidth !== width;
-    },
-
-    _configureToolTip : function() {
-      var toolTip = rwt.widgets.base.WidgetToolTip.getInstance();
-      toolTip.setShowInterval( 600 );
-      toolTip.setHideInterval( 15000 );
-      toolTip.setMousePointerOffsetX( -35 );
-      toolTip.setMousePointerOffsetY( -100 );
-      var manager = rwt.widgets.util.ToolTipManager.getInstance();
-      manager.handleMouseEvent = function( event ) {
-        var type = event.getType();
-        if( type === "mousedown" ) {
-          this._handleMouseOver( event );
-        } else if ( type === "mouseup" ) {
-          this.setCurrentToolTip( null );
-        }
-      };
-    },
-
-    _hideTabHighlight : function() {
-      rwt.html.StyleSheet.createElement( " * { -webkit-tap-highlight-color: rgba(0,0,0,0); }" );
-    },
-
-    _bindListeners : function() {
-       this.__onTouchEvent = rwt.util.Functions.bind( this._onTouchEvent, this );
-       this.__onGestureEvent = rwt.util.Functions.bind( this._onGestureEvent, this );
-       this.__onOrientationEvent = rwt.util.Functions.bind( this._onOrientationEvent, this );
-    },
-
-    _registerListeners : function() {
-      var target = document.body;
-      if( rwt.client.Client.isGecko() ) {
-        target.addEventListener( "touchstart", this.__onTouchEvent, false );
-        target.addEventListener( "touchmove", this.__onTouchEvent, false );
-        target.addEventListener( "touchend", this.__onTouchEvent, false );
-        target.addEventListener( "touchcancel", this.__onTouchEvent, false );
-        target.addEventListener( "deviceorientation", this.__onOrientationEvent, false );
-      } else {
-        target.ontouchstart = this.__onTouchEvent;
-        target.ontouchmove = this.__onTouchEvent;
-        target.ontouchend = this.__onTouchEvent;
-        target.ontouchcancel = this.__onTouchEvent;
-        target.ongesturestart = this.__onGestureEvent;
-        target.ongesturechange = this.__onGestureEvent;
-        target.ongestureend = this.__onGestureEvent;
-        target.onorientationchange = this.__onOrientationEvent;
-      }
-    },
-
-    _removeListeners : function() {
-      var target = document.body;
-      if( rwt.client.Client.isGecko() ) {
-        target.removeEventListener( "touchstart", this.__onTouchEvent, false );
-        target.removeEventListener( "touchmove", this.__onTouchEvent, false );
-        target.removeEventListener( "touchend", this.__onTouchEvent, false );
-        target.removeEventListener( "touchcancel", this.__onTouchEvent, false );
-        target.removeEventListener( "deviceorientation", this.__onOrientationEvent, false );
-      } else {
-        target.ontouchstart = null;
-        target.ontouchmove = null;
-        target.ontouchend = null;
-        target.ontouchcancel = null;
-        target.ongesturestart = null;
-        target.ongesturechange = null;
-        target.ongestureend = null;
-        target.onorientationchange = null;
-      }
-    },
-
-    _registerFilter : function() {
-      var eventHandler = rwt.event.EventHandler;
-      eventHandler.setMouseEventFilter( this._filterMouseEvents, this );
-    },
-
-    _filterMouseEvents : function( event ) {
-      var allowedMap = this._allowedMouseEvents;
-      var result = typeof event.originalEvent === "object"; // faked event?
-      if( !result ) {
-        result = allowedMap[ "*" ][ event.type ] === true;
-      }
-      if( !result && typeof allowedMap[ event.target.tagName ] === "object" ) {
-        result = allowedMap[ event.target.tagName ][ event.type ] === true;
-      }
-      if( !result ) {
-        event.preventDefault();
-        event.returnValue = false;
-      }
-      return result;
-    },
-
-    _onTouchEvent : function( domEvent ) {
-      try {
-        if( !rwt.remote.EventUtil.getSuspended() ) {
-          var type = domEvent.type;
-          if( this._mouseEnabled ) {
-            switch( type ) {
-            case "touchstart":
-              this._handleTouchStart( domEvent );
-              break;
-            case "touchend":
-              this._handleTouchEnd( domEvent );
-              break;
-            case "touchmove":
-              this._handleTouchMove( domEvent );
-              break;
-            }
-          } else {
-            if( this._touchListener !== null ) {
-              this._touchListener[ 0 ].call( this._touchListener[ 1 ], domEvent );
-            }
-          }
-        } else {
-          domEvent.preventDefault();
-        }
-      } catch( ex ) {
-        // problem: touch events emulate mouse events. When an error occurs in the emulation
-        // layer, it would be ignored. However, if the ErrorHandler is called here, it will be
-        // called twice if the error occurs within the mouse event handling. Therefore only
-        // alert is used for now:
-        alert( "Error in touch event handling:" + ex );
-        if( typeof console === "object" ) {
-          console.log( ex );
-          if( ex.stack ) {
-            console.log( ex.stack );
-          }
-        }
-      }
-    },
-
-    _getTouch : function( domEvent ) {
-      var touch = domEvent.touches.item( 0 );
-      if( touch === null ) {
-        // Should happen at touchend (behavior seems unpredictable)
-        touch = domEvent.changedTouches.item( 0 );
-      }
-      return touch;
-    },
-
-    _handleTouchStart : function( domEvent ) {
-      var touch = this._getTouch( domEvent );
-      var target = domEvent.target;
-      var widgetTarget = rwt.event.EventHandlerUtil.getOriginalTargetObject( target );
-      var pos = [ touch.clientX, touch.clientY ];
-      this._touchSession = {
-       "type" : this._getSessionType( widgetTarget ),
-       "initialTarget" : target,
-       "widgetTarget" : widgetTarget,
-       "initialPosition" : pos
-      };
-      if(    !this._touchSession.type.scroll
-          && !this._touchSession.type.outerScroll
-          && !this._touchSession.type.focus )
-      {
-        domEvent.preventDefault();
-      }
-      this._moveMouseTo( target, domEvent );
-      if( this._touchSession.type.click ) {
-        this._fireMouseEvent( "mousedown", target, domEvent, pos );
-      }
-      if( this._touchSession.type.virtualScroll ) {
-        this._initVirtualScroll( widgetTarget );
-      }
-    },
-
-    _handleTouchMove : function( domEvent ) {
-      if( this._touchSession !== null ) {
-        var touch = this._getTouch( domEvent );
-        var pos = [ touch.clientX, touch.clientY ];
-        if( this._touchSession.type.virtualScroll ) {
-          this._handleVirtualScroll( pos );
-        }
-        if( !this._touchSession.type.scroll ) {
-          domEvent.preventDefault();
-        }
-        if ( this._touchSession.type.drag ) {
-          domEvent.preventDefault();
-          var target = domEvent.target;
-          this._fireMouseEvent( "mousemove", target, domEvent, pos );
-        } else {
-          var oldPos = this._touchSession.initialPosition;
-          // TODO [tb] : offset too big for good use with touch-scrolling
-          if(    Math.abs( oldPos[ 0 ] - pos[ 0 ] ) >= 15
-              || Math.abs( oldPos[ 1 ] - pos[ 1 ] ) >= 15 )
-          {
-            this._cancelMouseSession( domEvent );
-          }
-        }
-      }
-    },
-
-    _handleTouchEnd : function( domEvent ) {
-      domEvent.preventDefault();
-      var touch = this._getTouch( domEvent );
-      var pos = [ touch.clientX, touch.clientY ];
-      var target = domEvent.target;
-      if( this._touchSession !== null ) {
-        var type = this._touchSession.type;
-        if( type.delayedClick ) {
-          this._fireMouseEvent( "mousedown", target, domEvent, pos );
-        }
-        if( type.click || type.delayedClick ) {
-          this._fireMouseEvent( "mouseup", target, domEvent, pos );
-        }
-        if( this._touchSession.type.virtualScroll ) {
-          this._finishVirtualScroll();
-        }
-        if( ( type.click || type.delayedClick ) && this._touchSession.initialTarget === target ) {
-          this._fireMouseEvent( "click", target, domEvent, pos );
-          this._touchSession = null;
-          if( this._isDoubleClick( domEvent ) ) {
-            this._lastMouseClickTarget = null;
-            this._lastMouseClickTime = null;
-            this._fireMouseEvent( "dblclick", target, domEvent, pos );
-          } else {
-            this._lastMouseClickTarget = target;
-            this._lastMouseClickTime = ( new Date() ).getTime();
-          }
-        }
-      }
-    },
-
-    _getSessionType : function( widgetTarget ) {
-      var result = {};
-      if( this._isSelectableWidget( widgetTarget ) || this._isFocusable( widgetTarget ) ) {
-        result.delayedClick = true;
-      } else {
-        result.click = true;
-      }
-      if( this._isDraggableWidget( widgetTarget ) ) {
-        result.drag = true;
-      } else if( this._isGridRow( widgetTarget ) ) {
-        result.virtualScroll = true;
-        result.outerScroll = this._allowNativeScroll && this._isScrollableWidget( widgetTarget );
-      } else if( this._allowNativeScroll && this._isScrollableWidget( widgetTarget ) ) {
-        result.scroll = true;
-      } else if( this._isFocusable( widgetTarget ) ) {
-        result.focus = true;
-      }
-      return result;
-    },
-
-    ////////////////////
-    // virtual scrolling
-
-    _initVirtualScroll : function( widget ) {
-      var scrollable;
-      if( widget instanceof rwt.widgets.base.GridRow ) {
-        scrollable = widget.getParent().getParent();
-      } else {
-        scrollable = this._findScrollable( widget );
-      }
-      var scrollBarV = scrollable._vertScrollBar;
-      var scrollBarH = scrollable._horzScrollBar;
-      this._touchSession.scrollBarV = scrollBarV;
-      this._touchSession.initScrollY = scrollBarV.getValue();
-      this._touchSession.maxScrollY = scrollBarV.getMaximum();
-      this._touchSession.scrollBarH = scrollBarH;
-      this._touchSession.initScrollX = scrollBarH.getValue();
-      this._touchSession.maxScrollX = scrollBarH.getMaximum();
-    },
-
-    _handleVirtualScroll : function( pos ) {
-      var oldPos = this._touchSession.initialPosition;
-      var offsetX = oldPos[ 0 ] - pos[ 0 ];
-      var offsetY = oldPos[ 1 ] - pos[ 1 ];
-      var newX = this._touchSession.initScrollX + offsetX;
-      var newY = this._touchSession.initScrollY + offsetY;
-      var max =   this._touchSession.scrollBarV.getMaximum()
-                - this._touchSession.scrollBarV._thumbLength;
-      var nudged = newY < 0 || newY > max;
-      if( this._touchSession.type.outerScroll && nudged ) {
-        var outer = this._findScrollable( this._touchSession.widgetTarget );
-        var outerValue = outer._vertScrollBar.getValue();
-        var outerMax =   outer._vertScrollBar.getMaximum()
-                       - outer._vertScrollBar._thumbLength;
-        if(    ( newY < 0 && outerValue > 0 )
-            || ( newY > max && outerValue < outerMax ) )
-        {
-          delete this._touchSession.type.virtualScroll;
-          this._touchSession.type.scroll = true;
-        }
-      }
-      this._touchSession.scrollBarH.setValue( newX );
-      this._touchSession.scrollBarV.setValue( newY );
-    },
-
-    _finishVirtualScroll : function() {
-      // set ideal value to actual value (prevents scroll on resize when on max position)
-      var barV = this._touchSession.scrollBarV;
-      barV.setValue( barV.getValue() );
-    },
-
-    /////////
-    // Helper
-
-    _isFocusable : function( widgetTarget ) {
-      return widgetTarget instanceof rwt.widgets.base.BasicText;
-    },
-
-    _isScrollableWidget : function( widget ) {
-      return this._findScrollable( widget ) !== null;
-    },
-
-    _isGridRow : function( widgetTarget ) {
-      return widgetTarget instanceof rwt.widgets.base.GridRow;
-    },
-
-    _isSelectableWidget : function( widgetTarget ) {
-      var result = false;
-      if(    widgetTarget instanceof rwt.widgets.ListItem
-          || widgetTarget instanceof rwt.widgets.base.GridRow )
-      {
-        result = true;
-      }
-      return result;
-    },
-
-    _findScrollable : function( widget ) {
-      var result = null;
-      var currentWidget = widget;
-      do {
-        if( currentWidget instanceof rwt.widgets.base.Scrollable ) {
-          result = currentWidget;
-        } else if( currentWidget instanceof rwt.widgets.base.ClientDocument ) {
-          currentWidget = null;
-        } else {
-          currentWidget = currentWidget.getParent();
-        }
-      } while( currentWidget && !result );
-      return result;
-    },
-
-    _isDraggableWidget : function ( widgetTarget ) {
-      var widgetManager = rwt.remote.WidgetManager.getInstance();
-      // We find the nearest control because matching based on widgetTarget can produce too
-      // generalized cases.
-      var widget = widgetManager.findControl( widgetTarget );
-      var draggable = false;
-      if( widget == null ) {
-        widget = widgetTarget;
-      }
-      if( widget != null && widget.classname in this._draggableTypes ) {
-        var appearances = this._draggableTypes[ widget.classname ];
-        if( appearances == null ) {
-          draggable = true;
-        } else {
-          for( var i = 0; i < appearances.length && !draggable; i++ ) {
-            if( widgetTarget.getAppearance() === appearances[ i ] ) {
-              draggable = true;
-            }
-          }
-        }
-      }
-      return draggable;
-    },
-
-    _isDoubleClick : function( domEvent ) {
-      var target = domEvent.target;
-      var result = false;
-      if( this._lastMouseClickTarget === target ) {
-        var diff = ( ( new Date() ).getTime() ) - this._lastMouseClickTime;
-        result = diff < rwt.remote.EventUtil.DOUBLE_CLICK_TIME;
-      }
-      return result;
-    },
-
-    _onGestureEvent : function( domEvent ) {
-      domEvent.preventDefault();
-      var type = domEvent.type;
-      if( this._gestureListener !== null ) {
-        this._gestureListener[ 0 ].call( this._gestureListener[ 1 ], domEvent );
-      }
-      switch( type ) {
-        case "gesturestart":
-          this._disableMouse( domEvent );
-        break;
-        case "gestureend":
-          this._enableMouse( domEvent );
-        break;
-      }
-    },
-
-    _onOrientationEvent : function( domEvent ) {
-      // Nothing to do yet
-    },
-
-    ////////////////
-    // emulate mouse
-
-    _disableMouse : function( domEvent ) {
-      // Note: Safari already does somthing similar to this (a touchevent
-      // that executes JavaScript will prevent further touch/gesture events),
-      // but no in all cases, e.g. on a touchstart with two touches.
-      this._cancelMouseSession( domEvent );
-      this._mouseEnabled = false;
-    },
-
-    _cancelMouseSession : function( domEvent ) {
-      var dummy = this._getDummyTarget();
-      this._moveMouseTo( dummy, domEvent );
-      if( this._touchSession !== null ) {
-        this._fireMouseEvent( "mouseup", dummy, domEvent, [ 0, 0 ] );
-        delete this._touchSession.type.click;
-        delete this._touchSession.type.delayedClick;
-      }
-    },
-
-    // The target used to release the virtual mouse without consequences
-    _getDummyTarget : function() {
-      return rwt.widgets.base.ClientDocument.getInstance()._getTargetNode();
-    },
-
-    _enableMouse : function() {
-      this._mouseEnabled = true;
-    },
-
-    _moveMouseTo : function( target, domEvent ) {
-      var oldTarget = this._lastMouseOverTarget;
-      if( oldTarget !== target ) {
-        var pos = [ 0, 0 ];
-        if( oldTarget !== null ) {
-          this._fireMouseEvent( "mouseout", oldTarget, domEvent, pos );
-        }
-        this._lastMouseOverTarget = target;
-        this._fireMouseEvent( "mouseover", target, domEvent, pos );
-      }
-    },
-
-    _fireMouseEvent : function( type, target, originalEvent, coordiantes ) {
-      var event = document.createEvent( "MouseEvent" );
-      event.initMouseEvent( type,
-                            true, // bubbles
-                            true, //cancelable
-                            window, //view
-                            0, // detail
-                            coordiantes[ 0 ], //screenX
-                            coordiantes[ 1 ], //screenY
-                            coordiantes[ 0 ], //clientX
-                            coordiantes[ 1 ], //clientY
-                            false, //ctrlKey
-                            false, //altKey
-                            false, //shiftKey
-                            false, //metaKey
-                            rwt.event.MouseEvent.buttons.left,
-                            null );
-      event.originalEvent = originalEvent;
-      target.dispatchEvent( event );
-    },
-
-    _postMouseEvent : function( type ) {
-      if( type === "mouseup" ) {
-        rwt.widgets.util.ToolTipManager.getInstance().setCurrentToolTip( null );
-      }
-    }
-
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 Rüdiger Herrmann and others.
- * 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:
- *    Rüdiger Herrmann - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.ToolTip", {
-  extend : rwt.widgets.base.Popup,
-  include : rwt.animation.VisibilityAnimationMixin,
-
-  construct : function( style ) {
-    this.base( arguments );
-    this._style = style;
-    this.setAutoHide( false );
-    this.setDisplay( true );
-    this.setVisibility( false );
-    this.setAppearance( "tool-tip" );
-    var doc = rwt.widgets.base.ClientDocument.getInstance();
-    this.setMaxWidth( doc.getClientWidth() / 2 );
-    this.setMaxHeight( doc.getClientHeight() / 2 );
-    this.addToDocument();
-    this.addEventListener( "mousedown", this._onMouseDown, this );
-    this._hideAfterTimeout = false;
-    this._hasSelectionListener = false;
-    this._messageFont = this._getMessageFont();
-    this._contentArea = null;
-    this._textArea = null;
-    this._image = null;
-    this._text = null;
-    this._message = null;
-    this._createControls();
-  },
-
-  destruct : function() {
-    this.removeEventListener( "mousedown", this._onMouseDown, this );
-    this._contentArea.dispose();
-    this._textArea.dispose();
-    this._image.dispose();
-    this._text.dispose();
-    this._message.dispose();
-    this._messageFont = null;
-  },
-
-  members : {
-
-    setText : function( text ) {
-      this._text.setText( text );
-      if( this.getVisibility() ) {
-        this._update();
-      }
-    },
-
-    setMessage : function( message ) {
-      this._message.setText( message );
-      if( this.getVisibility() ) {
-        this._update();
-      }
-    },
-
-    setLocation : function( x, y ) {
-      this.setLeft( x );
-      this.setTop( y );
-    },
-
-    setHideAfterTimeout : function( value ) {
-      this._hideAfterTimeout = value;
-    },
-
-    setHasSelectionListener : function( value ) {
-      this._hasSelectionListener = value;
-    },
-
-    setVisible : function( visible ) {
-      this.setVisibility( visible );
-      if( visible ) {
-        this._update();
-        this.bringToFront();
-        if( this._hideAfterTimeout ) {
-          rwt.client.Timer.once( this._hide, this, 5 * 1000 );
-        }
-      }
-    },
-
-    addState : function( state ) {
-      this.base( arguments, state );
-      this._image.addState( state );
-    },
-
-    removeState : function( state ) {
-      this.base( arguments, state );
-      this._image.removeState( state );
-    },
-
-    _createControls : function() {
-      this._contentArea = new rwt.widgets.base.BoxLayout( "horizontal" );
-      this._contentArea.setWidth( "100%" );
-      this._contentArea.setHeight( "100%" );
-      this._contentArea.setSpacing( 5 );
-      this._contentArea.setParent( this );
-      this._image = new rwt.widgets.base.Image();
-      this._image.setAppearance( "tool-tip-image" );
-      this._image.setParent( this._contentArea );
-      this._textArea = new rwt.widgets.base.BoxLayout( "vertical" );
-      this._textArea.setParent( this._contentArea );
-      this._textArea.setHeight( "100%" );
-      this._textArea.setSpacing( 5 );
-      this._text = new rwt.widgets.base.Label();
-      this._text.setAppearance( "tool-tip-text" );
-      this._text.setParent( this._textArea );
-      this._message = new rwt.widgets.base.Label();
-      this._message.setAppearance( "tool-tip-message" );
-      this._message.setHeight( "auto" );
-      this._message.setWrap( true );
-      this._message.setParent( this._textArea );
-    },
-
-    _update : function() {
-      var message = this._message.getText();
-      var textSize = this._getTextSize( this._text.getText(), -1 );
-      var messageSize = this._getTextSize( message, -1 );
-      var width = messageSize.x;
-      while( width > 0 && !this._matchesWidthToHeightRatio( messageSize ) ) {
-        width -= 10;
-        messageSize = this._getTextSize( message, width );
-      }
-      messageSize.x = this._max( messageSize.x, textSize.x );
-      this._message.setWidth( messageSize.x );
-      this._message.setHeight( messageSize.y );
-    },
-
-    _matchesWidthToHeightRatio : function( size ) {
-      return size.x / size.y <= 6;
-    },
-
-    _max : function( a, b ) {
-      return a > b ? a : b;
-    },
-
-    _getTextSize : function( text, width ) {
-      var data = [];
-      data[ 0 ] = "";
-      data[ 1 ] = text;
-      data[ 2 ] = this._messageFont.getFamily();
-      data[ 3 ] = this._messageFont.getSize();
-      data[ 4 ] = this._messageFont.getBold();
-      data[ 5 ] = this._messageFont.getItalic();
-      data[ 6 ] = width;
-      var textSize = rwt.widgets.util.FontSizeCalculation._measureItem( data );
-      return {
-        x : textSize[ 0 ],
-        y : textSize[ 1 ]
-      };
-    },
-
-    _onMouseDown : function( evt ) {
-      this._hide();
-      if( this._hasSelectionListener ) {
-        rwt.remote.EventUtil.notifySelected( this );
-      }
-    },
-
-    _hide : function() {
-      this.setVisible( false );
-      rwt.widgets.base.Widget.flushGlobalQueues();
-      rwt.remote.Server.getInstance().getRemoteObject( this ).set( "visible", false );
-    },
-
-    _getMessageFont : function() {
-      var tv = new rwt.theme.ThemeValues( {} );
-      return tv.getCssFont( "ToolTip-Message", "font" );
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.ToolTip", {
-
-  factory : function( properties ) {
-    var styleMap = rwt.remote.HandlerUtil.createStyleMap( properties.style );
-    var style = null;
-    if( styleMap.ICON_ERROR ) {
-      style = "error";
-    } else if( styleMap.ICON_WARNING ) {
-      style = "warning";
-    } else if( styleMap.ICON_INFORMATION ) {
-      style = "information";
-    }
-    var result = new rwt.widgets.ToolTip( style );
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    rwt.remote.HandlerUtil.callWithTarget( properties.parent, function( parent ) {
-      rwt.remote.HandlerUtil.addDestroyableChild( parent, result );
-    } );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getWidgetDestructor(),
-
-  properties : [
-    "customVariant",
-    "roundedBorder",
-    "backgroundGradient",
-    "autoHide",
-    "text",
-    "message",
-    "location",
-    // Visible must be set after all other properties
-    "visible"
-  ],
-
-  propertyHandler : {
-    "roundedBorder" : rwt.remote.HandlerUtil.getRoundedBorderHandler(),
-    "backgroundGradient" : rwt.remote.HandlerUtil.getBackgroundGradientHandler(),
-    "autoHide" : function( widget, value ) {
-      widget.setHideAfterTimeout( value );
-    },
-    "text" : function( widget, value ) {
-      var EncodingUtil = rwt.util.Encoding;
-      var text = EncodingUtil.escapeText( value, false );
-      widget.setText( text );
-    },
-    "message" : function( widget, value ) {
-      var EncodingUtil = rwt.util.Encoding;
-      var text = EncodingUtil.escapeText( value, false );
-      text = EncodingUtil.replaceNewLines( text, "<br/>" );
-      widget.setMessage( text );
-    },
-    "location" : function( widget, value ) {
-      widget.setLocation( value[ 0 ], value[ 1 ] );
-    }
-  },
-
-  listeners : [
-    "Selection"
-  ]
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2002, 2012 Innoopract Informationssysteme GmbH.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-/**
- * Maps widget id's to their respective object references. Allows for
- * adding, removing and disposing of widgets and their id. In addition
- * the mapping of widgets and their respective id's can be queried.
- *
- * TODO [tb] : use ObjectRegistry/WidgetUtil instead, remove class
- *
- */
-rwt.qx.Class.define( "rwt.remote.WidgetManager", {
-
-  type : "singleton",
-  extend : rwt.qx.Object,
-
-  construct : function() {
-    this.base( arguments );
-  },
-
-  members : {
-    /**
-     * Disposes of the widget that is registered with the given id. The widget
-     * is disconnected from its parent, its 'dispose' method is called and it is
-     * removed from this WidgetManager (see remove).
-     * No action is taken if there is no widget registered for the given id or
-     * the widget was already disposed of.
-     */
-    dispose : function( id ) {
-      var widget = this.findWidgetById( id );
-      if( widget != null ) {
-        this.remove( widget );
-        if( !widget.getDisposed() ) {
-          this._removeToolTipPopup( widget );
-          widget.destroy();
-        }
-      }
-    },
-
-    /**
-     * Registers the given widget under the given id at the WidgetManager.
-     */
-    add : function( widget, id, isControl, adapter ) {
-      if( isControl === true ) {
-        widget.setUserData( "isControl", true );
-      }
-      rwt.remote.ObjectRegistry.add( id, widget, adapter );
-    },
-
-    /**
-     * Unregisters the given widget at the WidgetManager. Note that the widget is
-     * not disposed of.
-     */
-    remove : function( widget ) {
-      var id = this.findIdByWidget( widget );
-      rwt.remote.ObjectRegistry.remove( id );
-    },
-
-    /**
-     * Returns the widget for the given id or null if there is no widget
-     * registered for the given id exists.
-     */
-    findWidgetById : function( id ) {
-      return rwt.remote.ObjectRegistry.getObject( id );
-    },
-
-    /**
-     * Returns the id (string) for the given widget or null if the widget is not
-     * registered.
-     */
-    findIdByWidget : function( widget ) {
-      return rwt.remote.ObjectRegistry.getId( widget );
-    },
-
-    /**
-     * Determines whether the given widget represents a server-side instance of
-     * Control (or one of its subclasses)
-     */
-    isControl : function( widget ) {
-      var data = null;
-      if( widget != null ) {
-        data = widget.getUserData( "isControl" );
-      }
-      return data === true;
-    },
-
-    /**
-     * Returns the nearest SWT-control in the hierarchy for the given qxWidget
-     * or null if no parent control could be found. If the given qxWidget
-     * represents a control, it is returned.
-     */
-    findControl : function( qxWidget ) {
-      var parent = qxWidget;
-      while( parent != null && !this.isControl( parent ) ) {
-        parent = parent.getParent ? parent.getParent() : null;
-      }
-      return parent;
-    },
-
-    findEnabledControl : function( qxWidget ) {
-      var parent = qxWidget;
-      while( parent != null && !( this.isControl( parent ) && parent.getEnabled() ) ) {
-        parent = parent.getParent ? parent.getParent() : null;
-      }
-      return parent;
-    },
-
-    ////////////////////
-    // ToolTip handling
-
-    /**
-     * Sets the toolTipText for the given widget. An empty or null toolTipText
-     * removes the tool tip of the widget.
-     */
-    setToolTip : function( widget, toolTipText ) {
-      if( toolTipText != null && toolTipText !== "" ) {
-        widget.setUserData( "toolTipText", toolTipText );
-        var toolTip = rwt.widgets.base.WidgetToolTip.getInstance();
-        widget.setToolTip( toolTip );
-        // make sure "boundToWidget" is initialized:
-        if( toolTip.getParent() != null ) {
-          if( toolTip.getBoundToWidget() == widget ) {
-            toolTip.updateText( widget );
-          }
-        }
-      } else {
-        this._removeToolTipPopup( widget );
-      }
-    },
-
-    _removeToolTipPopup : function( widget ) {
-      widget.setToolTip( null );
-      widget.setUserData( "toolTipText", null );
-    }
-
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-namespace( "rwt.remote" );
-
-rwt.remote.MessageProcessor = {
-
-  processMessage : function( messageObject ) {
-    this.processHead( messageObject.head );
-    var operations = messageObject.operations;
-    for( var i = 0; i < operations.length; i++ ) {
-      this.processOperationArray( operations[ i ] );
-    }
-  },
-
-  processHead : function( head ) {
-    var server = rwt.remote.Server.getInstance();
-    if( head.url !== undefined ) {
-      server.setUrl( head.url );
-    }
-    if( head.requestCounter !== undefined ) {
-      server.setRequestCounter( head.requestCounter );
-    }
-    if( head.redirect !== undefined ) {
-      rwt.widgets.Display.getCurrent().setExitConfirmation( null );
-      document.location = head.redirect;
-    }
-  },
-
-  processOperationArray : function( operation ) {
-    var action = operation[ 0 ];
-    try {
-      switch( action ) {
-        case "create":
-          this._processCreate( operation[ 1 ], operation[ 2 ], operation[ 3 ] );
-        break;
-        case "set":
-          this._processSet( operation[ 1 ], operation[ 2 ] );
-        break;
-        case "listen":
-          this._processListen( operation[ 1 ], operation[ 2 ] );
-        break;
-        case "call":
-          this._processCall( operation[ 1 ], operation[ 2 ], operation[ 3 ] );
-        break;
-        case "destroy":
-          this._processDestroy( operation[ 1 ] );
-        break;
-      }
-    } catch( ex ) {
-      this._processError( ex, operation );
-    }
-  },
-
-  processOperation : function( operation ) {
-    switch( operation.action ) {
-      case "create":
-        this._processCreate( operation.target, operation.type, operation.properties );
-      break;
-      case "set":
-        this._processSet( operation.target, operation.properties );
-      break;
-      case "destroy":
-        this._processDestroy( operation.target );
-      break;
-      case "call":
-        this._processCall( operation.target, operation.method, operation.properties );
-      break;
-      case "listen":
-        this._processListen( operation.target, operation.properties );
-      break;
-    }
-  },
-
-  ////////////
-  // Internals
-
-  _processCreate : function( targetId, type, properties ) {
-    var handler = rwt.remote.HandlerRegistry.getHandler( type );
-    if( handler.service === true ) {
-      throw new Error( "Objects of type " + type + " can not be created" );
-    }
-    var targetObject = handler.factory( properties );
-    this._addTarget( targetObject, targetId, handler );
-    this._processSetImpl( targetObject, handler, properties );
-  },
-
-  _processDestroy : function( targetId ) {
-    var objectEntry = rwt.remote.ObjectRegistry.getEntry( targetId );
-    var handler = objectEntry.handler;
-    var targetObject = objectEntry.object;
-    rap._.removeWrapper( targetObject );
-    var children =   handler.getDestroyableChildren
-                   ? handler.getDestroyableChildren( targetObject )
-                   : null;
-    if( handler.destructor instanceof Function ) {
-      handler.destructor( targetObject );
-    } else if( typeof handler.destructor === "string" ) {
-      var destructorName = handler.destructor;
-      targetObject[ destructorName ]();
-    }
-    rwt.remote.ObjectRegistry.remove( targetId );
-    rwt.remote.RemoteObjectFactory.remove( targetId );
-    for( var i = 0; children != null && i < children.length; i++ ) {
-      if( children[ i ] ) {
-        this._processDestroy( rwt.remote.ObjectRegistry.getId( children[ i ] ) );
-      }
-    }
-  },
-
-  _processSet : function( targetId, properties ) {
-    var objectEntry = rwt.remote.ObjectRegistry.getEntry( targetId );
-    this._processSetImpl( objectEntry.object, objectEntry.handler, properties );
-  },
-
-  _processSetImpl : function( targetObject, handler, properties ) {
-    if( handler.isGeneric && !rwt.util.Objects.isEmpty( properties ) ) {
-      targetObject.set( properties, { "nosync" : true } );
-    } else if( properties && handler.properties instanceof Array ) {
-      for( var i = 0; i < handler.properties.length; i++ ) {
-        var property = handler.properties [ i ];
-        var value = properties[ property ];
-        if( value !== undefined ) {
-          if( handler.propertyHandler && handler.propertyHandler[ property ] ) {
-            handler.propertyHandler[ property ].call( window, targetObject, value );
-          } else {
-            var setterName = this._getSetterName( property );
-            targetObject[ setterName ]( value );
-          }
-        }
-      }
-    }
-  },
-
-  _processCall : function( targetId, method, properties ) {
-    var objectEntry = rwt.remote.ObjectRegistry.getEntry( targetId );
-    var handler = objectEntry.handler;
-    var targetObject = objectEntry.object;
-    if( handler.isGeneric ) {
-      targetObject[ method ]( properties );
-    } else if( handler.methods instanceof Array && handler.methods.indexOf( method ) !== -1 ) {
-      if( handler.methodHandler && handler.methodHandler[ method ] ) {
-        handler.methodHandler[ method ]( targetObject, properties );
-      } else {
-        targetObject[ method ]( properties );
-      }
-    }
-  },
-
-  _processListen : function( targetId, properties ) {
-    var objectEntry = rwt.remote.ObjectRegistry.getEntry( targetId );
-    var handler = objectEntry.handler;
-    var targetObject = objectEntry.object;
-    if( handler.events instanceof Array || handler.isGeneric ) {
-      var remoteObject = rwt.remote.RemoteObjectFactory.getRemoteObject( targetObject );
-      var events = handler.isGeneric ? rwt.util.Objects.getKeys( properties ) : handler.events;
-      for( var i = 0; i < events.length; i++ ) {
-        var type = events[ i ];
-        if( properties[ type ] === true ) {
-          remoteObject._.listen[ type ] = true;
-        } if( properties[ type ] === false ) {
-          remoteObject._.listen[ type ] = false;
-        }
-      }
-    } else if( handler.listeners instanceof Array ) {
-      for( var i = 0; i < handler.listeners.length; i++ ) {
-        var type = handler.listeners[ i ];
-        if( properties[ type ] === true ) {
-          this._addListener( handler, targetObject, type );
-        } if( properties[ type ] === false ) {
-          this._removeListener( handler, targetObject, type );
-        }
-      }
-    }
-  },
-
-  ////////////
-  // Internals
-
-  _processError : function( error, operation ) {
-    var errorstr;
-    if( error ) {
-      errorstr = error.message ? error.message : error.toString();
-    } else {
-      errorstr = "No Error given!";
-    }
-    var msg = "Operation \"" + operation[ 0 ] + "\"";
-    msg += " on target \"" +  operation[ 1 ] + "\"";
-    var objectEntry = rwt.remote.ObjectRegistry.getEntry( operation[ 1 ] );
-    var target = objectEntry ? objectEntry.object : null;
-    msg += " of type \"" +  ( target && target.classname ? target.classname : target ) + "\"";
-    msg += " failed:";
-    msg += "\n" + errorstr +"\n";
-    msg += "Properties: \n" + this._getPropertiesString( operation );
-    throw new Error( msg );
-  },
-
-  _getPropertiesString : function( operation ) {
-    var result = "";
-    var properties;
-    switch( operation[ 0 ] ) {
-      case "set":
-      case "listen":
-        properties = operation[ 2 ];
-      break;
-      case "create":
-      case "call":
-        properties = operation[ 3 ];
-      break;
-      default:
-        properties = {};
-      break;
-    }
-    for( var key in properties ) {
-      result += key + " = " + properties[ key ] + "\n";
-    }
-    return result;
-  },
-
-  _addTarget : function( target, targetId, handler ) {
-    if( target instanceof rwt.widgets.base.Widget ) {
-      // TODO [tb] : remove WidgetManager and then this if
-      var widgetManager = rwt.remote.WidgetManager.getInstance();
-      widgetManager.add( target, targetId, false, handler ); // uses ObjectManager internally
-    } else {
-      rwt.remote.ObjectRegistry.add( targetId, target, handler );
-    }
-  },
-
-  _addListener : function( handler, targetObject, eventType ) {
-    if( handler.listenerHandler &&  handler.listenerHandler[ eventType ] ) {
-      handler.listenerHandler[ eventType ]( targetObject, true );
-    } else {
-      var setterName = this._getListenerSetterName( eventType );
-      targetObject[ setterName ]( true );
-    }
-  },
-
-  _removeListener : function( handler, targetObject, eventType ) {
-    if( handler.listenerHandler &&  handler.listenerHandler[ eventType ] ) {
-      handler.listenerHandler[ eventType ]( targetObject, false );
-    } else {
-      var setterName = this._getListenerSetterName( eventType );
-      targetObject[ setterName ]( false );
-    }
-  },
-
-  _getSetterName : function( property ) {
-    return "set" + rwt.util.Strings.toFirstUp( property );
-  },
-
-  _getListenerSetterName : function( eventType ) {
-    return "setHas" + rwt.util.Strings.toFirstUp( eventType ) + "Listener";
-  }
-
-};
-
-/*******************************************************************************
- * Copyright (c) 2012, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-namespace( "rwt.remote" );
-
-rwt.remote.MessageWriter = function() {
-  this._head = {};
-  this._operations = [];
-  this._currentSetOperation = null;
-  this._disposed = false;
-};
-
-rwt.remote.MessageWriter.prototype = {
-
-    dispose : function() {
-      this._operations = null;
-      this._head = null;
-      this._disposed = true;
-    },
-
-    hasOperations : function() {
-      return this._operations.length > 0;
-    },
-
-    createMessage : function() {
-      if( this._disposed ) {
-        throw new Error( "Protocol message writer already disposed!" );
-      }
-      var message = {
-        "head" : this._head,
-        "operations" : this._operations
-      };
-      return JSON.stringify( message );
-    },
-
-    appendHead : function( property, value ) {
-      this._head[ property ] = value;
-    },
-
-    getHead : function( property ) {
-      return this._head[ property ] || null;
-    },
-
-    appendSet : function( targetId, property, value ) {
-      var properties = this._getPropertiesObjectFor( targetId );
-      properties[ property ] = value;
-    },
-
-    appendNotify : function( targetId, eventName, properties ) {
-      this._currentSetOperation = null;
-      this._operations.push( [ "notify", targetId, eventName, properties ] );
-    },
-
-    appendCall : function( targetId, methodName, properties ) {
-      this._currentSetOperation = null;
-      this._operations.push( [ "call", targetId, methodName, properties ] );
-    },
-
-    _getPropertiesObjectFor : function( targetId ) {
-      if( this._currentSetOperation === null || this._currentSetOperation[ 1 ] !== targetId ) {
-        this._currentSetOperation = [ "set", targetId, {} ];
-        this._operations.push( this._currentSetOperation );
-      }
-      return this._currentSetOperation[ 2 ];
-    }
-
-};
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-namespace( "rwt.client" );
-
-rwt.client.ServerPush = function() {
-  if( rwt.client.ServerPush._instance !== undefined ) {
-    throw new Error( "ServerPush can not be created twice" );
-  } else {
-    rwt.client.ServerPush._instance = this;
-  }
-  this._retryInterval = 0;
-  this._active = false;
-  this._running = false;
-  this._requestTimer = new rwt.client.Timer( 0 );
-  this._requestTimer.addEventListener( "interval", this._doSendUICallBackRequest, this );
-};
-
-rwt.client.ServerPush.getInstance = function() {
-  if( rwt.client.ServerPush._instance === undefined ) {
-    new rwt.client.ServerPush();
-  }
-  return rwt.client.ServerPush._instance;
-};
-
-rwt.client.ServerPush.prototype = {
-
-  setActive : function( active ) {
-    this._active = active;
-  },
-
-  sendUIRequest : function() {
-    rwt.remote.Server.getInstance().sendImmediate( true );
-  },
-
-  sendUICallBackRequest : function() {
-    if( this._active && !this._running ) {
-      this._running = true;
-      this._requestTimer.start();
-    }
-  },
-
-  // workaround for bug 353819 - send UICallBackRequest with a timer
-  _doSendUICallBackRequest : function() {
-    this._requestTimer.stop();
-    this._createRequest().send();
-  },
-
-  _createRequest : function() {
-    var server = rwt.remote.Server.getInstance();
-    var request = new rwt.remote.Request( server.getUrl(), "GET", "application/javascript" );
-    request.setSuccessHandler( this._handleSuccess, this );
-    request.setErrorHandler( this._handleError, this );
-    request.setData( "servicehandler=org.eclipse.rap.serverpush&cid=" + server.getConnectionId() );
-    return request;
-  },
-
-  _handleSuccess : function( event ) {
-    this._running = false;
-    this._retryInterval = 0;
-    this.sendUIRequest();
-  },
-
-  _handleError : function( event ) {
-    this._running = false;
-    if( rwt.remote.Server.getInstance()._isConnectionError( event.status ) ) {
-      rwt.client.Timer.once( this.sendUICallBackRequest, this, this._retryInterval );
-      this._increaseRetryInterval();
-    }
-  },
-
-  _increaseRetryInterval : function() {
-    if( this._retryInterval === 0 ) {
-      this._retryInterval = 1000;
-    } else if( this._retryInterval < 60 * 1000 ) {
-      this._retryInterval *= 2;
-    }
-  }
-
-};
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.client.ServerPush", {
-
-  factory : function( properties ) {
-    return rwt.client.ServerPush.getInstance();
-  },
-
-  service : true,
-
-  properties : [
-    "active"
-  ]
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2002, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-(function(){
-
-var Client = rwt.client.Client;
-var Timer = rwt.client.Timer;
-var Processor = rwt.remote.MessageProcessor;
-var ErrorHandler = rwt.runtime.ErrorHandler;
-var EventUtil = rwt.remote.EventUtil;
-var ServerPush = rwt.client.ServerPush;
-var ClientDocument = rwt.widgets.base.ClientDocument;
-var Widget = rwt.widgets.base.Widget;
-
-rwt.qx.Class.define( "rwt.remote.Server", {
-  type : "singleton",
-  extend : rwt.qx.Target,
-
-  construct : function() {
-    this.base( arguments );
-    this._url = "";
-    this._writer = null;
-    this._event = null;
-    this._requestCounter = null;
-    this._connectionId = this._generateConnectionId();
-    this._sendTimer = new Timer( 60 );
-    this._sendTimer.addEventListener( "interval", function() {
-      this.sendImmediate( true );
-     }, this );
-    this._delayTimer = new Timer();
-    this._delayTimer.addEventListener( "interval", function() {
-      this._delayTimer.stop();
-      this.send();
-    }, this );
-    this._waitHintTimer = new Timer( 1000 );
-    this._waitHintTimer.addEventListener( "interval", this._showWaitHint, this );
-    this._retryHandler = null;
-    this._sendListeners = [];
-  },
-
-  destruct : function() {
-    this._retryHandler = null;
-    this._sendTimer.dispose();
-    this._sendTimer = null;
-    this._waitHintTimer.dispose();
-    this._waitHintTimer = null;
-  },
-
-  members : {
-
-    //////
-    // API
-
-    setUrl : function( url ) {
-      this._url = url;
-    },
-
-    getUrl : function() {
-      return this._url;
-    },
-
-    setRequestCounter : function( requestCounter ) {
-      this._requestCounter = requestCounter;
-    },
-
-    getRequestCounter : function() {
-      return this._requestCounter;
-    },
-
-    getConnectionId : function() {
-      return this._connectionId;
-    },
-
-    _generateConnectionId : function() {
-      return Math.floor( Math.random() * 0xffffffff ).toString( 16 );
-    },
-
-    _flushEvent : function() {
-      if( this._event ) {
-        var writer = this.getMessageWriter();
-        this._event[ 1 ] = this._event[ 1 ].split( "." ).pop();
-        writer.appendNotify.apply( writer, this._event );
-        this._event = null;
-      }
-    },
-
-    sendDelayed : function( time ) {
-      this._delayTimer.setInterval( time );
-      this._delayTimer.start();
-    },
-
-    /**
-     * Sends an asynchronous request within 60 milliseconds
-     */
-    send : function() {
-      this._sendTimer.start();
-    },
-
-    /**
-     * Sends an synchronous or asynchronous request immediately. All parameters that were added
-     * since the last request will be sent.
-     */
-    sendImmediate : function( async ) {
-      this._delayTimer.stop();
-      if( this._requestCounter === -1 ) {
-        // NOTE: Delay sending the request until requestCounter is set
-        // TOOD [tb] : This would not work with synchronous requests - bug?
-        this._sendTimer.stop();
-        this.send();
-      } else {
-        this._flushEvent();
-        this.dispatchSimpleEvent( "send" );
-        rap._.notify( "send" );
-        this._flushEvent();
-        this._sendTimer.stop();
-        if( this._requestCounter != null ) {
-          this.getMessageWriter().appendHead( "requestCounter", this._requestCounter );
-        }
-        this._requestCounter = -1;
-        this._startWaitHintTimer();
-        var request = this._createRequest();
-        request.setAsynchronous( async );
-        request.setData( this.getMessageWriter().createMessage() );
-        this._writer.dispose();
-        this._writer = null;
-        request.send();
-        this._removeSendListeners();
-      }
-    },
-
-    getMessageWriter : function() {
-      if( this._writer === null ) {
-        this._writer = new rwt.remote.MessageWriter();
-      }
-      return this._writer;
-    },
-
-    getRemoteObject : function( target ) {
-      return rwt.remote.RemoteObjectFactory.getRemoteObject( target );
-    },
-
-    onNextSend : function( func, context ) {
-      this._sendListeners.push( [ func, context ] );
-      this.addEventListener( "send", func, context );
-    },
-
-    getWaitHintTimer : function() {
-      return this._waitHintTimer;
-    },
-
-    _startWaitHintTimer : function() {
-      if( !this.getMessageWriter().getHead( "rwt_initialize" ) ) {
-        this._waitHintTimer.start();
-      }
-    },
-
-    _removeSendListeners : function() {
-      for( var i = 0; i < this._sendListeners.length; i++ ) {
-        var item = this._sendListeners[ i ];
-        this.removeEventListener( "send", item[ 0 ], item[ 1 ] );
-      }
-      this._sendListeners = [];
-    },
-
-    ////////////
-    // Internals
-
-    _createRequest : function() {
-      var parameters = "cid=" + this._connectionId;
-      var url = this._url + ( this._url.indexOf( "?" ) >= 0 ? "&" : "?" ) + parameters;
-      var result = new rwt.remote.Request( url, "POST", "application/json" );
-      result.setSuccessHandler( this._handleSuccess, this );
-      result.setErrorHandler( this._handleError, this );
-      return result;
-    },
-
-    ////////////////////////
-    // Handle request events
-
-    _handleError : function( event ) {
-      this._hideWaitHint();
-      if( this._isConnectionError( event.status ) ) {
-        this._handleConnectionError( event );
-      } else {
-        var text = event.responseText;
-        if( text && text.length > 0 ) {
-          if( this._isJsonResponse( event ) ) {
-            var messageObject = JSON.parse( text );
-            ErrorHandler.showErrorBox( messageObject.head.error, true );
-          } else {
-            ErrorHandler.showErrorPage( text );
-          }
-        } else {
-          ErrorHandler.showErrorBox( "request failed" );
-        }
-      }
-    },
-
-    _handleSuccess : function( event ) {
-      try {
-        var messageObject = JSON.parse( event.responseText );
-        rwt.remote.EventUtil.setSuspended( true );
-        Processor.processMessage( messageObject );
-        Widget.flushGlobalQueues();
-        rap._.notify( "render" );
-        EventUtil.setSuspended( false );
-        ServerPush.getInstance().sendUICallBackRequest();
-        this.dispatchSimpleEvent( "received" );
-      } catch( ex ) {
-        ErrorHandler.processJavaScriptErrorInResponse( event.responseText, ex, event.target );
-      }
-      this._hideWaitHint();
-    },
-
-    ///////////////////////////////
-    // Handling connection problems
-
-    _handleConnectionError : function( event ) {
-      ClientDocument.getInstance().setGlobalCursor( null );
-      rwt.runtime.ErrorHandler.showErrorBox( "connection error", false );
-      this._retryHandler = function() {
-        var request = this._createRequest();
-        var failedRequest = event.target;
-        request.setAsynchronous( failedRequest.getAsynchronous() );
-        request.setData( failedRequest.getData() );
-        request.send();
-      };
-    },
-
-    _retry : function() {
-      try {
-        ErrorHandler.hideErrorBox();
-        this._showWaitHint();
-        this._retryHandler();
-      } catch( ex ) {
-        rwt.runtime.ErrorHandler.processJavaScriptError( ex );
-      }
-    },
-
-    _isConnectionError : rwt.util.Variant.select( "qx.client", {
-      "mshtml|newmshtml" : function( statusCode ) {
-        // for a description of the IE status codes, see
-        // http://support.microsoft.com/kb/193625
-        var result = (    statusCode === 12007    // ERROR_INTERNET_NAME_NOT_RESOLVED
-                       || statusCode === 12029    // ERROR_INTERNET_CANNOT_CONNECT
-                       || statusCode === 12030    // ERROR_INTERNET_CONNECTION_ABORTED
-                       || statusCode === 12031    // ERROR_INTERNET_CONNECTION_RESET
-                       || statusCode === 12152    // ERROR_HTTP_INVALID_SERVER_RESPONSE
-                       || statusCode === 0 );     // Some modern IEs use standard, but not all
-        return result;
-      },
-      "gecko" : function( statusCode ) {
-        // Firefox 3 reports other statusCode than oder versions (bug #249814)
-        var result;
-        // Check if Gecko > 1.9 is running (used in FF 3)
-        // Gecko/app integration overview: http://developer.mozilla.org/en/Gecko
-        if( Client.getMajor() * 10 + Client.getMinor() >= 19 ) {
-          result = ( statusCode === 0 );
-        } else {
-          result = ( statusCode === -1 );
-        }
-        return result;
-      },
-      "default" : function( statusCode ) {
-        return statusCode === 0;
-      }
-    } ),
-
-    _isJsonResponse : function( event ) {
-      var contentType = event.responseHeaders[ "Content-Type" ];
-      return contentType.indexOf( "application/json" ) !== -1;
-    },
-
-    ///////////////////////////////////////////////////
-    // Wait hint - UI feedback while request is running
-
-    _showWaitHint : function() {
-      this._waitHintTimer.stop();
-      ClientDocument.getInstance().setGlobalCursor( "progress" );
-      ErrorHandler.showWaitHint();
-    },
-
-    _hideWaitHint : function() {
-      this._waitHintTimer.stop();
-      ErrorHandler.hideErrorBox();
-      ClientDocument.getInstance().setGlobalCursor( null );
-    }
-
-  }
-} );
-
-}());
-
-/**
- * Path that points to the "resources/resource" path in the bundle. Files
- * must be registered in ClientResources.java.
- */
-rwt.remote.Server.RESOURCE_PATH = "./rwt-resources/resource/";
-
-/*******************************************************************************
- * Copyright (c) 2002, 2013 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.CTabItem", {
-  extend : rwt.widgets.base.Atom,
-
-  construct : function( parent, canClose ) {
-    this.base( arguments );
-    if( parent.classname != "rwt.widgets.CTabFolder" ) {
-      throw new Error( "illegal parent, must be a CTabFolder" );
-    }
-    this._parent = parent;
-    this.setAppearance( "ctab-item" );
-    this.setVerticalChildrenAlign( rwt.widgets.util.Layout.ALIGN_MIDDLE );
-    this.setHorizontalChildrenAlign( rwt.widgets.util.Layout.ALIGN_LEFT );
-    this.setOverflow( "hidden" );
-    this.setTabIndex( null );
-    // Set the label part to 'html mode'
-    this.setLabel( "(empty)" );
-    this.getLabelObject().setMode( "html" );
-    this.getLabelObject().setVerticalAlign( rwt.widgets.util.Layout.ALIGN_MIDDLE );
-    this.setLabel( "" );
-    this._selected = false;
-    this._showClose = false;
-    this._rawText = null;
-    this._mnemonicIndex = null;
-    this._canClose = canClose;
-    this.updateForeground();
-    this.updateBackground();
-    this.updateBackgroundImage();
-    this.updateBackgroundGradient();
-    this.setTabPosition( parent.getTabPosition() );
-    // TODO [rst] change when a proper state inheritance concept exists
-    if( parent.hasState( "rwt_BORDER" ) ) {
-      this.addState( "rwt_BORDER" );
-    }
-    this._closeButton = new rwt.widgets.base.Image();
-    this._closeButton.setAppearance( "ctab-close-button" );
-    this._closeButton.setWidth( 20 );
-    this._closeButton.addEventListener( "click", this._onClose, this );
-    var wm = rwt.remote.WidgetManager.getInstance();
-    wm.setToolTip( this._closeButton, rwt.widgets.CTabFolder.CLOSE_TOOLTIP );
-    this.add( this._closeButton );
-    this.updateCloseButton();
-    this.addEventListener( "mouseover", this._onMouseOver, this );
-    this.addEventListener( "mouseout", this._onMouseOut, this );
-    this.addEventListener( "click", this._onClick, this );
-    this.addEventListener( "dblclick", this._onDblClick, this );
-    this.addEventListener( "changeParent", this._onChangeParent, this );
-    this.addEventListener( "changeLeft", this._onChangeLeft, this );
-  },
-
-  destruct : function() {
-    this.removeEventListener( "mouseover", this._onMouseOver, this );
-    this.removeEventListener( "mouseout", this._onMouseOut, this );
-    this.removeEventListener( "click", this._onClick, this );
-    this.removeEventListener( "dblclick", this._onDblClick, this );
-    this.removeEventListener( "changeParent", this._onChangeParent, this );
-    this.removeEventListener( "changeLeft", this._onChangeLeft, this );
-    this._closeButton.removeEventListener( "click", this._onClose, this );
-    var wm = rwt.remote.WidgetManager.getInstance();
-    wm.setToolTip( this._closeButton, null );
-    this._closeButton.dispose();
-    this._closeButton = null;
-    this.setMnemonicIndex( null );
-  },
-
-  statics : {
-    STATE_OVER : "over",
-    STATE_SELECTED : "selected",
-
-    IMG_CLOSE : rwt.remote.Server.RESOURCE_PATH + "widget/rap/ctabfolder/close.gif",
-    IMG_CLOSE_HOVER : rwt.remote.Server.RESOURCE_PATH + "widget/rap/ctabfolder/close_hover.gif"
-  },
-
-  members : {
-
-   setText : function( value ) {
-      this._rawText = value;
-      this._mnemonicIndex = null;
-      this._applyText( false );
-    },
-
-    setMnemonicIndex : function( value ) {
-      this._mnemonicIndex = value;
-      var mnemonicHandler = rwt.widgets.util.MnemonicHandler.getInstance();
-      if( ( typeof value === "number" ) && ( value >= 0 ) ) {
-        mnemonicHandler.add( this, this._onMnemonic );
-      } else {
-        mnemonicHandler.remove( this );
-      }
-    },
-
-    getMnemonicIndex : function() {
-      return this._mnemonicIndex;
-    },
-
-    _applyText : function( mnemonic ) {
-      if( this._rawText ) {
-        var mnemonicIndex = mnemonic ? this._mnemonicIndex : undefined;
-        var text = rwt.util.Encoding.escapeText( this._rawText, mnemonicIndex );
-        this.setLabel( text );
-      } else {
-        this.setLabel( null );
-      }
-    },
-
-    setTabPosition : function( tabPosition ) {
-      if( tabPosition === "top" ) {
-        this.addState( "barTop" );
-      } else {
-        this.removeState( "barTop" );
-      }
-    },
-
-    setSelected : function( selected ) {
-      if( this._selected !== selected ) {
-        this._selected = selected;
-        if( selected ) {
-          this.addState( rwt.widgets.CTabItem.STATE_SELECTED );
-        } else {
-          this.removeState( rwt.widgets.CTabItem.STATE_SELECTED );
-        }
-        this._updateNextSelected();
-        this.updateForeground();
-        this.updateBackground();
-        this.updateBackgroundImage();
-        this.updateBackgroundGradient();
-        this.updateCloseButton();
-      }
-    },
-
-    _onMnemonic : function( event ) {
-      switch( event.type ) {
-        case "show":
-          this._applyText( true );
-        break;
-        case "hide":
-          this._applyText( false );
-        break;
-        case "trigger":
-          var charCode = this._rawText.toUpperCase().charCodeAt( this._mnemonicIndex );
-          if( event.charCode === charCode ) {
-            this._parent._notifyItemClick( this );
-            event.success = true;
-          }
-        break;
-      }
-    },
-
-    _updateNextSelected : function() {
-      var prevItem = null;
-      var findSelected = false;
-      var children = this._parent.getChildren();
-      for( var i = 0; i < children.length && !findSelected; i++ ) {
-        if( children[ i ].classname === "rwt.widgets.CTabItem" ) {
-          findSelected = children[ i ].isSelected();
-          if( prevItem != null ) {
-            if( findSelected ) {
-              prevItem.addState( "nextSelected" );
-            } else {
-              prevItem.removeState( "nextSelected" );
-            }
-          }
-          prevItem = children[ i ];
-        }
-      }
-    },
-
-    isSelected : function() {
-      return this._selected;
-    },
-
-    setShowClose : function( value ) {
-      this._showClose = value;
-      this.updateCloseButton();
-    },
-
-    updateForeground : function() {
-      var color = this.isSelected()
-                ? this._parent.getSelectionForeground()
-                : this._parent.getTextColor();
-      if( color != null ) {
-        this.setTextColor( color );
-      } else {
-        this.resetTextColor();
-      }
-    },
-
-    updateBackground : function() {
-      var color = this.isSelected() ? this._parent.getSelectionBackground() : null;
-      if( color != null ) {
-        this.setBackgroundColor( color );
-      } else {
-        this.resetBackgroundColor();
-      }
-    },
-
-    updateBackgroundImage : function() {
-      var image = this.isSelected() ? this._parent.getSelectionBackgroundImage() : null;
-      if( image != null ) {
-        this.setUserData( "backgroundImageSize", image.slice( 1 ) );
-        this.setBackgroundImage( image[ 0 ] );
-      } else {
-        this.resetBackgroundImage();
-      }
-    },
-
-    updateBackgroundGradient : function() {
-      var gradient = this.isSelected() ? this._parent.getSelectionBackgroundGradient() : null;
-      if( gradient != null ) {
-        this.setBackgroundGradient( gradient );
-      } else {
-        this.resetBackgroundGradient();
-      }
-    },
-
-    updateCloseButton : function() {
-      var visible = false;
-      if( this._canClose || this._showClose ) {
-        visible
-          =  this.isSelected()
-          || (    this._parent.getUnselectedCloseVisible()
-               && this.hasState( rwt.widgets.CTabItem.STATE_OVER ) );
-      }
-      this._closeButton.setVisibility( visible );
-    },
-
-    _onMouseOver : function( evt ) {
-      this.addState( rwt.widgets.CTabItem.STATE_OVER );
-      if( evt.getTarget() == this._closeButton ) {
-        this._closeButton.addState( rwt.widgets.CTabItem.STATE_OVER );
-      }
-      this.updateCloseButton();
-    },
-
-    _onMouseOut : function( evt ) {
-      this.removeState( rwt.widgets.CTabItem.STATE_OVER );
-      if( evt.getTarget() == this._closeButton ) {
-        this._closeButton.removeState( rwt.widgets.CTabItem.STATE_OVER );
-      }
-      this.updateCloseButton();
-    },
-
-    _onClick : function( evt ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        if( evt.getTarget() != this._closeButton ) {
-          evt.getTarget().getParent()._notifyItemClick( evt.getTarget() );
-        }
-      }
-    },
-
-    _onDblClick : function( evt ) {
-      if( evt.getTarget() != this._closeButton ) {
-        evt.getTarget().getParent()._notifyItemDblClick( evt );
-      }
-    },
-
-    _onClose : function( evt ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        var server = rwt.remote.Server.getInstance();
-        server.getRemoteObject( this.getParent() ).notify( "Folder", {
-          "detail" : "close",
-          "item" : rwt.remote.ObjectRegistry.getId( this )
-        } );
-      }
-    },
-
-    _onChangeParent : function( evt ) {
-      if( !this._parent._isInGlobalDisposeQueue ) {
-        this._updateNextSelected();
-      }
-    },
-
-    _onChangeLeft : function( evt ) {
-      if( this.getLeft() === 0 ) {
-        this.addState( "firstItem" );
-      } else {
-        this.removeState( "firstItem" );
-      }
-    }
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.CTabItem", {
-
-  factory : function( properties ) {
-    var result;
-    rwt.remote.HandlerUtil.callWithTarget( properties.parent, function( parent ) {
-      result = new rwt.widgets.CTabItem( parent, parent.hasState( "rwt_CLOSE" ) );
-      parent.addAt( result, properties.index );
-      rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-      rwt.remote.HandlerUtil.addDestroyableChild( parent, result );
-      result.setUserData( "protocolParent", parent );
-    } );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getWidgetDestructor(),
-
-  properties : [
-    "bounds",
-    "font",
-    "text",
-    "mnemonicIndex",
-    "image",
-    "toolTip",
-    "customVariant",
-    "showing",
-    "showClose"
-  ],
-
-  propertyHandler : {
-    "bounds" : function( widget, value ) {
-      var bounds = value;
-      if( widget.getParent().getTabPosition() === "bottom" ) {
-        bounds[ 1 ] -= 1;
-      }
-      bounds[ 3 ] += 1;
-      widget.setLeft( bounds[ 0 ] );
-      widget.setTop( bounds[ 1 ] );
-      widget.setWidth( bounds[ 2 ] );
-      widget.setHeight( bounds[ 3 ] );
-    },
-    "font" : rwt.remote.HandlerUtil.getControlPropertyHandler( "font" ),
-    "image" : function( widget, value ) {
-      if( value === null ) {
-        widget.setIcon( null );
-      } else {
-        widget.setIcon( value[ 0 ] );
-      }
-    },
-    "toolTip" : rwt.remote.HandlerUtil.getControlPropertyHandler( "toolTip" ),
-    "showing" : function( widget, value ) {
-      widget.setVisibility( value );
-    }
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2002, 2013 Innoopract Informationssysteme GmbH.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.widgets.CTabFolder", {
-  extend : rwt.widgets.base.Parent,
-
-  construct : function() {
-    this.base( arguments );
-    this.setTabIndex( 1 );
-    this.setHideFocus( true );
-    this.setAppearance( "ctabfolder" );
-    this.setOverflow( "hidden" );
-    this._hasFolderListener = false;
-    this._hasSelectionListener = false;
-    this._hasDefaultSelectionListener = false;
-    this._tabPosition = "top";
-    this._tabHeight = 0;
-    this._selectionForeground = null;
-    this._selectionBackground = null;
-    this._selectionBackgroundImage = null;
-    this._selectionBackgroundGradient = null;
-    this._chevron = null;
-    this._chevronBounds = [ 0, 0, 0, 0 ];
-    this._chevronMenu = null;
-    this._unselectedCloseVisible = true;
-    // Minimize/maximize buttons, initially non-existing
-    this._minMaxState = "normal";  // valid states: min, max, normal
-    this._maxButton = null;
-    this._maxButtonBounds = [ 0, 0, 0, 0 ];
-    this._minButton = null;
-    this._minButtonBounds = [ 0, 0, 0, 0 ];
-    this._body = new rwt.widgets.base.Parent();
-    this._body.addState( "barTop" );
-    this._body.setAppearance( "ctabfolder-body" );
-    this.add( this._body );
-    this._separator = new rwt.widgets.base.Parent();
-    this._separator.setAppearance( "ctabfolder-separator" );
-    this.add( this._separator );
-    this._frame = new rwt.widgets.base.Parent();
-    this._frame.setAppearance( "ctabfolder-frame" );
-    this.add( this._frame );
-    this._frameBorder = new rwt.html.Border( 2, "solid", "black" );
-
-    // Create horizontal line that separates the button bar from the rest of
-    // the client area
-    // Add resize listeners to update selection border (this._highlightXXX)
-    this.addEventListener( "changeWidth", this._updateLayout, this );
-    this.addEventListener( "changeHeight", this._updateLayout, this );
-    // Add keypress listener to select items with left/right keys
-    this.addEventListener( "keypress", this._onKeyPress, this );
-    this.addEventListener( "contextmenu", this._onContextMenu, this );
-  },
-
-  destruct : function() {
-    // use hideMin/MaxButton to dispose of toolTips
-    this.hideMinButton();
-    this.hideMaxButton();
-    this.removeEventListener( "changeWidth", this._updateLayout, this );
-    this.removeEventListener( "changeHeight", this._updateLayout, this );
-    this.removeEventListener( "keypress", this._onKeyPress, this );
-    this.removeEventListener( "contextmenu", this._onContextMenu, this );
-    this._disposeObjects( "_frame", "_separator" );
-    this._frameBorder.dispose();
-  },
-
-  statics : {
-    BUTTON_SIZE : 18,
-
-    MIN_TOOLTIP : "Minimize",
-    MAX_TOOLTIP : "Maximize",
-    RESTORE_TOOLTIP : "Restore",
-    CHEVRON_TOOLTIP : "Show List",
-    CLOSE_TOOLTIP : "Close",
-
-    setToolTipTexts : function( min, max, restore, chevron, close ) {
-      rwt.widgets.CTabFolder.MIN_TOOLTIP = min;
-      rwt.widgets.CTabFolder.MAX_TOOLTIP = max;
-      rwt.widgets.CTabFolder.RESTORE_TOOLTIP = restore;
-      rwt.widgets.CTabFolder.CHEVRON_TOOLTIP = chevron;
-      rwt.widgets.CTabFolder.CLOSE_TOOLTIP = close;
-    }
-  },
-
-  members : {
-
-    addState : function( state ) {
-      this.base( arguments, state );
-      if( state.substr( 0, 8 ) == "variant_" || state.substr( 0, 4 ) == "rwt_" ) {
-        this._body.addState( state );
-        this._frame.addState( state );
-        this._mapItems( function( item ) {
-          item.addState( state );
-        } );
-      }
-    },
-
-    removeState : function( state ) {
-      this.base( arguments, state );
-      if( state.substr( 0, 8 ) == "variant_" || state.substr( 0, 4 ) == "rwt_" ) {
-        this._body.removeState( state );
-        this._frame.removeState( state );
-        this._mapItems( function( item ) {
-          item.removeState( state );
-        } );
-      }
-    },
-
-    /* valid values: "top", "bottom" */
-    setTabPosition : function( tabPosition ) {
-      this._tabPosition = tabPosition;
-      this._mapItems( function( item ) {
-        item.setTabPosition( tabPosition );
-      } );
-      if( tabPosition == "top" ) {
-        this._body.addState( "barTop" );
-      } else {
-        this._body.removeState( "barTop" );
-      }
-      this._updateLayout();
-    },
-
-    /* returns one of: "top", "bottom" */
-    getTabPosition : function() {
-      return this._tabPosition;
-    },
-
-    setTabHeight : function( tabHeight ) {
-      this._tabHeight = tabHeight;
-      var buttonTop = this._getButtonTop();
-      if( this._minButton != null ) {
-        this._minButton.setTop( buttonTop );
-      }
-      if( this._maxButton != null ) {
-        this._maxButton.setTop( buttonTop );
-      }
-      if( this._chevron != null ) {
-        this._chevron.setTop( buttonTop );
-      }
-      this._updateLayout();
-    },
-
-    _applyTextColor : function( value, old ) {
-      this.base( arguments, value, old );
-      this._mapItems( function( item ) {
-        item.updateForeground();
-      } );
-    },
-
-    _applyBackgroundColor : function( value, old ) {
-      this._body.setBackgroundColor( value );
-    },
-
-    _applyBackgroundImage : function( value, old ) {
-      this._body.setUserData( "backgroundImageSize", this.getUserData( "backgroundImageSize" ) );
-      this._body.setBackgroundImage( value );
-    },
-
-    // transparent not supported, null resets color
-    setSelectionForeground : function( color ) {
-      this._selectionForeground = color;
-      this._mapItems( function( item ) {
-        item.updateForeground();
-      } );
-    },
-
-    // transparent not supported, null resets color
-    setSelectionBackground : function( color ) {
-      this._selectionBackground = color;
-      this._mapItems( function( item ) {
-        item.updateBackground();
-      } );
-      if( color != null && !this.hasState( "rwt_FLAT" ) ) {
-        this._frame.setBorder( null );
-        this._frameBorder.dispose();
-        this._frameBorder = new rwt.html.Border( 2, "solid", color );
-        this._frame.setBorder( this._frameBorder );
-      } else {
-        this._frame.resetBorder();
-      }
-    },
-
-    setSelectionBackgroundImage : function( image ) {
-      this._selectionBackgroundImage = image;
-      this._mapItems( function( item ) {
-        item.updateBackgroundImage();
-      } );
-    },
-
-    setSelectionBackgroundGradient : function( gradient ) {
-      this._selectionBackgroundGradient = gradient;
-      this._mapItems( function( item ) {
-        item.updateBackgroundGradient();
-      } );
-    },
-
-    setUnselectedCloseVisible : function( value ) {
-      this._unselectedCloseVisible = value;
-      this._mapItems( function( item ) {
-        item.updateCloseButton();
-      } );
-    },
-
-    setBorderVisible : function( visible ) {
-      if( visible ) {
-        this.addState( "rwt_BORDER" );
-      } else {
-        this.removeState( "rwt_BORDER" );
-      }
-      this._updateLayout();
-    },
-
-    getSelectionForeground : function() {
-      return this._selectionForeground;
-    },
-
-    getSelectionBackground : function() {
-      return this._selectionBackground;
-    },
-
-    getSelectionBackgroundImage : function() {
-      return this._selectionBackgroundImage;
-    },
-
-    getSelectionBackgroundGradient : function() {
-      return this._selectionBackgroundGradient;
-    },
-
-    getUnselectedCloseVisible : function() {
-      return this._unselectedCloseVisible;
-    },
-
-    _mapItems : function( func ) {
-      var children = this.getChildren();
-      for( var i = 0; i < children.length; i++ ) {
-        if( children[ i ].classname === "rwt.widgets.CTabItem" ) {
-          func( children[ i ] );
-        }
-      }
-    },
-
-    _getButtonTop : function() {
-      return ( this._tabHeight / 2 ) - ( rwt.widgets.CTabFolder.BUTTON_SIZE / 2 );
-    },
-
-    setChevronBounds : function( left, top, width, height ) {
-      this._chevronBounds = [ left, top, width, height ];
-      if( this._chevron != null ) {
-        this._chevron.setSpace( left, width, top, height );
-      }
-    },
-
-    showChevron : function() {
-      if( this._chevron == null ) {
-        // Create chevron button
-        this._chevron = new rwt.widgets.base.Button();
-        this._chevron.setAppearance( "ctabfolder-drop-down-button" );
-        this._chevron.setShow( "icon" );
-        this._chevron.addEventListener( "execute", this._onChevronExecute, this );
-        var wm = rwt.remote.WidgetManager.getInstance();
-        wm.setToolTip( this._chevron, rwt.widgets.CTabFolder.CHEVRON_TOOLTIP );
-        this.add( this._chevron );
-      }
-      this._chevron.setLeft( this._chevronBounds[ 0 ] );
-      this._chevron.setTop( this._chevronBounds[ 1 ] );
-      this._chevron.setWidth( this._chevronBounds[ 2 ] );
-      this._chevron.setHeight( this._chevronBounds[ 3 ] );
-    },
-
-    hideChevron : function() {
-      if( this._chevron != null ) {
-        var wm = rwt.remote.WidgetManager.getInstance();
-        wm.setToolTip( this._chevron, null );
-        this._chevron.removeEventListener( "execute", this._onChevronExecute, this );
-        this.remove( this._chevron );
-        this._chevron.dispose();
-        this._chevron = null;
-      }
-    },
-
-    setMinMaxState : function( state ) {
-      this._minMaxState = state;
-      var minIcon = "";
-      var maxIcon = "";
-      var minToolTip = "";
-      var maxToolTip = "";
-      var path = rwt.remote.Server.RESOURCE_PATH + "widget/rap/ctabfolder/";
-      switch( state ) {
-        case "min":
-          minIcon = path + "restore.gif";
-          maxIcon = path + "maximize.gif";
-          minToolTip = rwt.widgets.CTabFolder.RESTORE_TOOLTIP;
-          maxToolTip = rwt.widgets.CTabFolder.MAX_TOOLTIP;
-          break;
-        case "max":
-          minIcon = path + "minimize.gif";
-          maxIcon = path + "restore.gif";
-          minToolTip = rwt.widgets.CTabFolder.MIN_TOOLTIP;
-          maxToolTip = rwt.widgets.CTabFolder.RESTORE_TOOLTIP;
-          break;
-        case "normal":
-          minIcon = path + "minimize.gif";
-          maxIcon = path + "maximize.gif";
-          minToolTip = rwt.widgets.CTabFolder.MIN_TOOLTIP;
-          maxToolTip = rwt.widgets.CTabFolder.MAX_TOOLTIP;
-          break;
-      }
-      var wm = rwt.remote.WidgetManager.getInstance();
-      if( this._minButton != null ) {
-        this._minButton.setIcon( minIcon );
-        wm.setToolTip( this._minButton, minToolTip );
-      }
-      if( this._maxButton != null ) {
-        this._maxButton.setIcon( maxIcon );
-        wm.setToolTip( this._maxButton, maxToolTip );
-      }
-    },
-
-    setMaxButtonBounds : function( left, top, width, height ) {
-      this._maxButtonBounds = [ left, top, width, height ];
-      if( this._maxButton != null ) {
-        this._maxButton.setSpace( left, width, top, height );
-      }
-    },
-
-    showMaxButton : function() {
-      if( this._maxButton == null ) {
-        this._maxButton = new rwt.widgets.base.Button();
-        this._maxButton.setAppearance( "ctabfolder-button" );
-        this._maxButton.setShow( "icon" );
-        this.setMinMaxState( this._minMaxState );  // initializes the icon according to current state
-        // [if] "mousedown" is used instead of "execute" because of the bug 247672
-        this._maxButton.addEventListener( "mousedown", this._onMinMaxExecute, this );
-        this.add( this._maxButton );
-      }
-      this._maxButton.setLeft( this._maxButtonBounds[ 0 ] );
-      this._maxButton.setTop( this._maxButtonBounds[ 1 ] );
-      this._maxButton.setWidth( this._maxButtonBounds[ 2 ] );
-      this._maxButton.setHeight( this._maxButtonBounds[ 3 ] );
-    },
-
-    hideMaxButton : function() {
-      if( this._maxButton != null ) {
-        this._maxButton.removeEventListener( "mousedown",
-                                             this._onMinMaxExecute,
-                                             this );
-        var wm = rwt.remote.WidgetManager.getInstance();
-        wm.setToolTip( this._maxButton, null );
-        this.remove( this._maxButton );
-        this._maxButton.dispose();
-        this._maxButton = null;
-      }
-    },
-
-    setMinButtonBounds : function( left, top, width, height ) {
-      this._minButtonBounds = [ left, top, width, height ];
-      if( this._minButton != null ) {
-        this._minButton.setSpace( left, width, top, height );
-      }
-    },
-
-    showMinButton : function() {
-      if( this._minButton == null ) {
-        this._minButton = new rwt.widgets.base.Button();
-        this._minButton.setAppearance( "ctabfolder-button" );
-        this._minButton.setShow( "icon" );
-        this.setMinMaxState( this._minMaxState );  // initializes the icon according to current state
-        // [if] "mousedown" is used instead of "execute" because of the bug 247672
-        this._minButton.addEventListener( "mousedown", this._onMinMaxExecute, this );
-        this.add( this._minButton );
-      }
-      this._minButton.setLeft( this._minButtonBounds[ 0 ] );
-      this._minButton.setTop( this._minButtonBounds[ 1 ] );
-      this._minButton.setWidth( this._minButtonBounds[ 2 ] );
-      this._minButton.setHeight( this._minButtonBounds[ 3 ] );
-    },
-
-    hideMinButton : function( left ) {
-      if( this._minButton != null ) {
-        this._minButton.removeEventListener( "mousedown",
-                                             this._onMinMaxExecute,
-                                             this );
-        var wm = rwt.remote.WidgetManager.getInstance();
-        wm.setToolTip( this._minButton, null );
-        this.remove( this._minButton );
-        this._minButton.dispose();
-        this._minButton = null;
-      }
-    },
-
-    setHasFolderListener : function( hasFolderListener ) {
-      this._hasFolderListener = hasFolderListener;
-    },
-
-    setHasSelectionListener : function( value ) {
-      this._hasSelectionListener = value;
-    },
-
-    setHasDefaultSelectionListener : function( value ) {
-      this._hasDefaultSelectionListener = value;
-    },
-
-    deselectAll : function() {
-      this._mapItems( function( item ) {
-        item.setSelected( false );
-      } );
-    },
-
-    _updateLayout : function() {
-      // TODO [rst] take actual border width into account
-      var borderWidth = this.hasState( "rwt_BORDER" ) ? 1 : 0;
-      var frameWidth = this.hasState( "rwt_FLAT" ) ? 0 : 2;
-      var sepBorderWidth = 1;
-      var width = this.getWidth() - borderWidth * 2;
-      var tabHeight = this._tabHeight + 1;
-
-      this._body.setLeft( 0 );
-      this._body.setTop( 0 );
-      this._body.setWidth( this.getWidth() );
-      this._body.setHeight( this.getHeight() );
-
-      this._separator.setLeft( borderWidth );
-      this._separator.setWidth( width );
-      this._separator.setHeight( 10 );
-
-      this._frame.setLeft( borderWidth );
-      this._frame.setWidth( width );
-      this._frame.setHeight( this.getHeight() - borderWidth - sepBorderWidth - tabHeight );
-
-      if( this._tabPosition == "top" ) {
-        this._separator.setTop( tabHeight );
-        this._frame.setTop( tabHeight + 1 );
-      } else { // tabPosition == "bottom"
-        this._separator.setTop( this.getHeight() - tabHeight - 1 );
-        this._frame.setTop( borderWidth );
-      }
-    },
-
-    _onChevronExecute : function( evt ) {
-      if( this._chevronMenu == null || !this._chevronMenu.isSeeable() ) {
-        if( !rwt.remote.EventUtil.getSuspended() ) {
-          var server = rwt.remote.Server.getInstance();
-          server.getRemoteObject( this ).notify( "Folder", { "detail" : "showList" } );
-        }
-      }
-    },
-
-    _onMinMaxExecute : function( evt ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        var detail;
-        if ( evt.getTarget() == this._minButton ) {
-          // Minimize button was pressed
-          if( this._minMaxState == "min" ) {
-            this.setMinMaxState( "normal" );
-            detail = "restore";
-          } else {
-            this.setMinMaxState( "min" );
-            detail = "minimize";
-          }
-        } else {
-          // Maximize button was pressed
-          if( this._minMaxState == "normal" || this._minMaxState == "min" ) {
-            this.setMinMaxState( "max" );
-            detail = "maximize";
-          } else {
-            this.setMinMaxState( "normal" );
-            detail = "restore";
-          }
-        }
-        var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( this );
-        remoteObject.set( "minimized", this._minMaxState == "min" );
-        remoteObject.set( "maximized", this._minMaxState == "max" );
-        if( this._hasFolderListener ) {
-          remoteObject.notify( "Folder", { "detail" : detail } );
-        }
-      }
-    },
-
-    _onKeyPress : function( evt ) {
-      switch( evt.getKeyIdentifier() ) {
-        case "Left":
-          // TODO [rh] implementatin missing: select tab item to the left
-          evt.stopPropagation();
-          break;
-        case "Right":
-          // TODO [rh] implementatin missing: select tab item to the right
-          evt.stopPropagation();
-          break;
-      }
-    },
-
-    _onContextMenu : function( evt ) {
-      var menu = this.getContextMenu();
-      if( menu != null ) {
-        menu.setLocation( evt.getPageX(), evt.getPageY() );
-        menu.setOpener( this );
-        menu.show();
-        evt.stopPropagation();
-      }
-    },
-
-    // TODO [rst] Change to respect _hasSelectionListener as soon as server-side
-    // code is revised accordingly -> CTabFolderLCA.readData().
-    _notifyItemClick : function( item ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        if( !item.isSelected() ) {
-          this.deselectAll();
-          item.setSelected( true );
-          var itemId = rwt.remote.WidgetManager.getInstance().findIdByWidget( item );
-          var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( this );
-          remoteObject.set( "selection", itemId );
-          rwt.remote.EventUtil.notifySelected( this );
-        }
-      }
-    },
-
-    _notifyItemDblClick : function( evt ) {
-      if( !rwt.remote.EventUtil.getSuspended() ) {
-        if( this._hasDefaultSelectionListener ) {
-          var item = evt.getTarget();
-          // TODO [rst] remove this parameter as soon as server-side code is revised
-          //      -> CTabFolderLCA.readData()
-          var itemId = rwt.remote.WidgetManager.getInstance().findIdByWidget( item );
-          var remoteObject = rwt.remote.Server.getInstance().getRemoteObject( this );
-          remoteObject.set( "selection", itemId );
-          rwt.remote.EventUtil.widgetDefaultSelected( evt, this );
-        }
-      }
-    }
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.widgets.CTabFolder", {
-
-  factory : function( properties ) {
-    var result = new rwt.widgets.CTabFolder();
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.widgets.CTabFolder.setToolTipTexts.apply( result, properties.toolTipTexts );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "tabPosition",
-    "tabHeight",
-    "minMaxState",
-    "minimizeBounds",
-    "minimizeVisible",
-    "maximizeBounds",
-    "maximizeVisible",
-    "chevronBounds",
-    "chevronVisible",
-    "unselectedCloseVisible",
-    "selection",
-    "selectionBackground",
-    "selectionForeground",
-    "selectionBackgroundImage",
-    "selectionBackgroundGradient",
-    "borderVisible"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    "minimizeBounds" : function( widget, value ) {
-      widget.setMinButtonBounds.apply( widget, value );
-    },
-    "minimizeVisible" : function( widget, value ) {
-      if( value ) {
-        widget.showMinButton();
-      } else {
-        widget.hideMinButton();
-      }
-    },
-    "maximizeBounds" : function( widget, value ) {
-      widget.setMaxButtonBounds.apply( widget, value );
-    },
-    "maximizeVisible" : function( widget, value ) {
-      if( value ) {
-        widget.showMaxButton();
-      } else {
-        widget.hideMaxButton();
-      }
-    },
-    "chevronBounds" : function( widget, value ) {
-      widget.setChevronBounds.apply( widget, value );
-    },
-    "chevronVisible" : function( widget, value ) {
-      if( value ) {
-        widget.showChevron();
-      } else {
-        widget.hideChevron();
-      }
-    },
-    "selection" : function( widget, value ) {
-      widget.deselectAll();
-      rwt.remote.HandlerUtil.callWithTarget( value, function( item ) {
-        if( item != null ) {
-          item.setSelected( true );
-        }
-      } );
-    },
-    "selectionBackground" : function( widget, value ) {
-      if( value === null ) {
-        widget.setSelectionBackground( null );
-      } else {
-        widget.setSelectionBackground( rwt.util.Colors.rgbToRgbString( value ) );
-      }
-    },
-    "selectionForeground" : function( widget, value ) {
-      if( value === null ) {
-        widget.setSelectionForeground( null );
-      } else {
-        widget.setSelectionForeground( rwt.util.Colors.rgbToRgbString( value ) );
-      }
-    },
-    "selectionBackgroundGradient" : function( widget, value ) {
-      var gradient = null;
-      if( value ) {
-        var colors = value[ 0 ];
-        var percents = value[ 1 ];
-        var vertical = value[ 2 ];
-        gradient = [];
-        for( var i = 0; i < colors.length; i++ ) {
-          gradient[ i ] = [ percents[ i ] / 100, rwt.util.Colors.rgbToRgbString( colors[ i ] ) ];
-        }
-        gradient.horizontal = !vertical;
-      }
-      widget.setSelectionBackgroundGradient( gradient );
-    }
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [
-    "Folder",
-    "Selection",
-    "DefaultSelection"
-  ] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} )
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2012, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-(function(){
-
-var server = rwt.remote.Server.getInstance();
-
-/**
- * @private
- * @class Instances of RemoteObject represent the server-side counterpart of a client object
- * and are used to write operations into the next protocol message.
- * @description This constructor is not available in the global namespace. Instances can only
- * be obtained from {@link rap.getRemoteObject}.
- * @exports rwt.remote.RemoteObject as RemoteObject
- * @since 2.0
- * @param {}
- *
- */
-rwt.remote.RemoteObject = function( id ) {
-  this._ = {
-    "id" : id,
-    "listen" : {}
-  };
-};
-
-rwt.remote.RemoteObject.prototype = {
-
-  /**
-   * @description Sets the specified property of the remote object to the given value.
-   * Calling this method multiple times for the same property will overwrite the previous value,
-   * the message will not become longer. This method does not cause the message to be sent
-   * immediately. Instead it will be sent the next time a "notify" or "call" operation is
-   * written to the message.
-   * @param {string} property The name of the property.
-   * @param {var} value The value of the property.
-   */
-  set : function( key, value ) {
-    server.getMessageWriter().appendSet( this._.id, key, value );
-  },
-
-  /**
-   * @description Notifies the remote object that an event of the given type occurred.
-   * Notifications can only be sent for types that the server is currently listening for
-   * (see {@link rap.registerTypeHandler}, <b>handler.events</b>). If this is not the
-   * case, no "notify" operation is written into the message and no request will be sent.
-   * Otherwise the message will be sent to the server within a few milliseconds. One message
-   * may contain several "notify" operations, if they are added consecutively.
-   * @param {string} event The type of the event that occured.
-   * @param {Object|null} [properties] This object may contain any number of additional
-   * properties/fields associated with the event. It may also be null or omitted.
-   */
-  notify : function( event, properties ) {
-    var suppressSend = arguments[ 2 ];
-   // TODO [tb]: suppressSend should be a temporary workaround for KeyEventSupport.js
-    var actualProps = properties ? properties : {};
-    if( this.isListening( event ) ) {
-      server.getMessageWriter().appendNotify( this._.id, event, actualProps );
-      if( suppressSend !== true ) {
-        server.send();
-      }
-    }
-  },
-
-  /**
-   * @description Instructs the remote object to call the given method.
-   * Calling this method will write a "call" operation into the message, which will to be sent to
-   * the server within a few milliseconds. One message
-   * may contain several "call" operations, if they are added consecutively.
-   * @param {string} method The name of the method.
-   * @param {Object|null} [properties] This object may contain any number of additional
-   * properties/fields associated with the call. It may also be null or omitted.
-   */
-  call : function( method, properties ) {
-    var actualProps = properties ? properties : {};
-    server.getMessageWriter().appendCall( this._.id, method, actualProps );
-    server.send();
-  },
-
-  isListening : function( type ) {
-    return this._.listen[ type ] === true;
-  }
-
-};
-
-}());
-
-/*******************************************************************************
- * Copyright (c) 2012, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-(function(){
-
-var ObjectManager = rwt.remote.ObjectRegistry;
-
-rwt.remote.RemoteObjectFactory = { // TODO [tb] : merge with Server.js? (not a factory)
-
-  _db : {},
-
-  getRemoteObject : function( target ) {
-    var id = ObjectManager.getId( target );
-    if( id == null ){
-      throw new Error( "Invalid target for ServerObject, or target not in ObjectManager" );
-    }
-    return this._getRemoteObject( id );
-  },
-
-  remove : function( id ) {
-    delete this._db[ id ];
-  },
-
-  _getRemoteObject : function( id ) {
-    if( this._db[ id ] == null ) {
-      this._db[ id ] = new rwt.remote.RemoteObject( id );
-      this._initRemoteObject( id );
-    }
-    return this._db[ id ];
-  },
-
-  _initRemoteObject : function( id ) {
-    var remoteObject = this._db[ id ];
-    var handler = ObjectManager.getEntry( id ).handler;
-    if( handler && handler.listeners ) {
-      for( var i = 0; i < handler.listeners.length; i++ ) {
-        var type = handler.listeners[ i ];
-        remoteObject._.listen[ type ] = true;
-      }
-    }
-  }
-
-};
-
-
-}());
-
-/*******************************************************************************
- * Copyright (c) 2009, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.remote.KeyEventSupport", {
-  type : "singleton",
-  extend : rwt.qx.Object,
-
-  construct : function() {
-    this.base( arguments );
-    rwt.event.EventHandler.setKeyDomEventFilter( this._onKeyDomEvent, this );
-    rwt.event.EventHandler.setKeyEventFilter( this._onKeyEvent, this );
-    this._keyBindings = {};
-    this._cancelKeys = {};
-    this._currentKeyCode = -1;
-    this._bufferedEvents = [];
-    this._keyEventRequestRunning = false;
-    this._ignoreNextKeypress = false;
-    var req = rwt.remote.Server.getInstance();
-    req.addEventListener( "received", this._onRequestReceived, this );
-  },
-
-  destruct : function() {
-    var req = rwt.remote.Server.getInstance();
-    req.removeEventListener( "received", this._onRequestReceived, this );
-  },
-
-  members : {
-
-    //////
-    // API
-
-    setKeyBindings : function( value ) {
-      this._keyBindings = value;
-    },
-
-    setCancelKeys : function( value ) {
-      this._cancelKeys = value;
-    },
-
-    ////////////
-    // Internals
-
-    _onKeyDomEvent : function( eventType, keyCode, charCode, domEvent ) {
-      if( eventType === "keydown" ) {
-        this._currentKeyCode = keyCode;
-      }
-      var control = this._getTargetControl();
-      var mHandler = rwt.widgets.util.MnemonicHandler.getInstance();
-      var mnemonic = mHandler.handleKeyEvent( eventType, keyCode, charCode, domEvent );
-      if( mnemonic || this._shouldCancel( this._currentKeyCode, charCode, domEvent, control ) ) {
-        rwt.event.EventHandlerUtil.stopDomEvent( domEvent );
-        domEvent._noProcess = true;
-        domEvent._mnemonic = mnemonic;
-      }
-      if( mnemonic ) {
-        this._ignoreNextKeypress = true;
-      }
-    },
-
-    _onKeyEvent : function( eventType, keyCode, charCode, domEvent ) {
-      var control = this._getTargetControl();
-      if(    !domEvent._mnemonic
-          && this._shouldSend( eventType, this._currentKeyCode, charCode, domEvent, control ) )
-      {
-        this._sendKeyEvent( control, this._currentKeyCode, charCode, domEvent );
-      }
-      if( !domEvent._mnemonic && ( eventType === "keypress" || eventType === "keyup" ) ) {
-        this._ignoreNextKeypress = false;
-      }
-      return !domEvent._noProcess;
-    },
-
-    /////////////
-    // send event
-
-    _shouldSend : function( eventType, keyCode, charCode, domEvent, control ) {
-      var result = false;
-      if( this._isRelevant( keyCode, eventType, domEvent ) ) {
-        result =    this._shouldSendTraverse( keyCode, charCode, domEvent, control )
-                 || this._shouldSendKeyDown( keyCode, charCode, domEvent, control );
-      }
-      return result;
-    },
-
-    _shouldSendTraverse : function( keyCode, charCode, domEvent, control ) {
-      return this._hasTraverseListener( control ) && this._isTraverseKey( keyCode );
-    },
-
-    _shouldSendKeyDown : function( keyCode, charCode, domEvent, control ) {
-      var result = false;
-      if( this._hasKeyListener( control ) ) {
-        var activeKeys = control.getUserData( "activeKeys" );
-        if( activeKeys ) {
-          result = this._isActive( activeKeys, domEvent, keyCode, charCode );
-        } else {
-          result = true;
-        }
-      }
-      if( !result ) {
-        result = this._isActive( this._keyBindings, domEvent, keyCode, charCode );
-      }
-      return result;
-    },
-
-    _isRelevant : function( keyCode, eventType, domEvent ) {
-      var result;
-      if( eventType === "keypress" ) {
-        // NOTE : modifier don't repeat
-        result = !this._isModifier( keyCode ) && !this._ignoreNextKeypress;
-      } else if( eventType === "keydown" ) {
-        // NOTE : Prefered when keypress might not be fired, e.g. browser shortcuts that
-        //        are not or can not be prevented/canceled. Key might not repeat in that case.
-        //        Not to be used when charcode might be unkown (e.g. shift + char, special char)-
-        var EventHandlerUtil = rwt.event.EventHandlerUtil;
-        result =    EventHandlerUtil.isNonPrintableKeyCode( keyCode )
-                 || EventHandlerUtil.isSpecialKeyCode( keyCode );
-        if( !result && ( domEvent.altKey || domEvent.ctrlKey ) ) {
-          result = this._isAlphaNumeric( keyCode );
-        }
-        if( result ) {
-          this._ignoreNextKeypress = true;
-        }
-      }
-      if( domEvent.ctrlKey && keyCode === 9 ) {
-        // Used by the browser to switch tabs, not useable
-        result = false;
-      }
-      return result;
-    },
-
-    _onRequestReceived : function( evt ) {
-      if( this._keyEventRequestRunning ) {
-        this._keyEventRequestRunning = false;
-        this._checkBufferedEvents();
-      }
-    },
-
-    _checkBufferedEvents : function() {
-      while( this._bufferedEvents.length > 0 && !this._keyEventRequestRunning ) {
-        var oldEvent = this._bufferedEvents.shift();
-        this._sendKeyEvent.apply( this, oldEvent );
-      }
-    },
-
-    _sendKeyEvent : function( widget, keyCode, charCode, domEvent ) {
-      if( this._keyEventRequestRunning ) {
-        this._bufferedEvents.push( [ widget, keyCode, charCode, domEvent ] );
-      } else {
-        this._attachKeyEvent( widget, keyCode, charCode, domEvent );
-        this._keyEventRequestRunning = true;
-        this._sendRequestAsync();
-      }
-    },
-
-    _sendRequestAsync : function() {
-      window.setTimeout( function() {
-        rwt.remote.Server.getInstance().sendImmediate( true );
-      }, 0 );
-    },
-
-    _attachKeyEvent : function( widget, keyCode, charCode, domEvent ) {
-      var server = rwt.remote.Server.getInstance();
-      var remoteObject;
-      if( widget === null ) {
-        remoteObject = server.getRemoteObject( rwt.widgets.Display.getCurrent() );
-      } else {
-        remoteObject = server.getRemoteObject( widget );
-      }
-      var finalCharCode = this._getCharCode( keyCode, charCode, domEvent );
-      var properties = {
-        "keyCode" : keyCode,
-        "charCode" : finalCharCode
-      };
-      rwt.remote.EventUtil.addModifierToProperties( properties, domEvent );
-      if( this._shouldSendTraverse( keyCode, charCode, domEvent, widget ) ) {
-        remoteObject.notify( "Traverse", properties, true );
-      }
-      if( this._shouldSendKeyDown( keyCode, charCode, domEvent, widget ) ) {
-        remoteObject.notify( "KeyDown", properties, true );
-      }
-    },
-
-    ///////////////
-    // cancel event
-
-    _shouldCancel : function( keyCode, charCode, domEvent, control ) {
-      var result = this._isActive( this._cancelKeys, domEvent, keyCode, charCode );
-      if( !result ) {
-        var cancelKeys = control ? control.getUserData( "cancelKeys" ) : null;
-        if( cancelKeys ) {
-          result = this._isActive( cancelKeys, domEvent, keyCode, charCode );
-        }
-      }
-      return result;
-    },
-
-    /////////
-    // helper
-
-    _getTargetControl : function() {
-      var result = rwt.event.EventHandler.getCaptureWidget();
-      if( !result ) {
-        var focusRoot = rwt.event.EventHandler.getFocusRoot();
-        result = focusRoot === null ? null : focusRoot.getActiveChild();
-      }
-      var widgetManager = rwt.remote.WidgetManager.getInstance();
-      while( result !== null && !widgetManager.isControl( result ) ) {
-        result = result.getParent ? result.getParent() : null;
-      }
-      return result;
-    },
-
-    _isActive : function( activeKeys, domEvent, keyCode, charCode ) {
-      var result = false;
-      var identifier = this._getKeyBindingIdentifier( domEvent, "keydown", keyCode, charCode );
-      result = activeKeys[ identifier ] === true;
-      if( !result ) {
-        identifier = this._getKeyBindingIdentifier( domEvent, "keypress", keyCode, charCode );
-        result = activeKeys[ identifier ] === true;
-      }
-      return result;
-    },
-
-    _getKeyBindingIdentifier : function( domEvent, eventType, keyCode, charCode ) {
-      var result = [];
-      if( eventType === "keydown" && !isNaN( keyCode ) && keyCode > 0 ) {
-        if( domEvent.altKey ) {
-          result.push( "ALT" );
-        }
-        if( domEvent.ctrlKey ) {
-          result.push( "CTRL" ); //TODO Command @ apple?
-        }
-        if( domEvent.shiftKey ) {
-          result.push( "SHIFT" );
-        }
-        result.push( "#" + keyCode.toString() );
-      } else if( eventType === "keypress" && !isNaN( charCode ) && charCode > 0 ) {
-        result.push( String.fromCharCode( charCode ) );
-      }
-      return result.join( "+" );
-    },
-
-    _getCharCode : function( keyCode, charCode, domEvent ) {
-      var result = charCode;
-      if( result === 0 && this._isAlphaNumeric( keyCode ) ) {
-        if( domEvent.shiftKey && !this._isNumeric( keyCode ) ) {
-          result = keyCode;
-        } else {
-          result = String.fromCharCode( keyCode ).toLowerCase().charCodeAt( 0 );
-        }
-      }
-      return result;
-    },
-
-    _isModifier : function( keyCode ) {
-      return keyCode >= 16 && keyCode <= 20 && keyCode !== 19;
-    },
-
-    _isAlphaNumeric : function( keyCode ) {
-      return ( keyCode >= 65 && keyCode <= 90 ) || this._isNumeric( keyCode );
-    },
-
-    _isNumeric : function( keyCode ) {
-      return keyCode >= 48 && keyCode <= 57;
-    },
-
-    _hasKeyListener : function( widget ) {
-      return widget !== null && widget.getUserData( "keyListener" ) === true;
-    },
-
-    _hasTraverseListener : function( widget ) {
-      return widget !== null && widget.getUserData( "traverseListener" ) === true;
-    },
-
-    _isTraverseKey : function( keyCode ) {
-      var result = false;
-      if( keyCode === 27 || keyCode === 13 || keyCode === 9 ) {
-        result = true;
-      }
-      return result;
-    }
-
-  }
-} );
-
-// force instance:
-rwt.remote.KeyEventSupport.getInstance();
-
-/*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-namespace( "rwt.client" );
-
-rwt.client.JavaScriptExecutor = function() {
-  if( rwt.client.JavaScriptExecutor._instance !== undefined ) {
-    throw new Error( "JavaScriptExecutor can not be created twice" );
-  } else {
-    rwt.client.JavaScriptExecutor._instance = this;
-  }
-};
-
-rwt.client.JavaScriptExecutor.getInstance = function() {
-  if( rwt.client.JavaScriptExecutor._instance === undefined ) {
-    new rwt.client.JavaScriptExecutor();
-  }
-  return rwt.client.JavaScriptExecutor._instance;
-};
-
-rwt.client.JavaScriptExecutor.prototype = {
-
-  execute : function( code ) {
-    eval( code );
-  }
-
-};
-
-/*******************************************************************************
- * Copyright (c) 2012, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.client.ConnectionMessages", {
-
-  factory : function( properties ) {
-    return rwt.remote.Server.getInstance();
-  },
-
-  service : true,
-
-  properties : [ "waitHintTimeout" ],
-
-  propertyHandler : {
-
-    waitHintTimeout : function( server, value ) {
-      server.getWaitHintTimer().setInterval( value );
-    }
-
-  }
-
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-namespace( "rwt.client" );
-
-rwt.client.ClientMessages = function() {
-  if( rwt.client.ClientMessages._instance !== undefined ) {
-    throw new Error( "can not be created twice" );
-  } else {
-    rwt.client.ClientMessages._instance = this;
-  }
-  this._messages = {};
-};
-
-rwt.client.ClientMessages.getInstance = function() {
-  if( rwt.client.ClientMessages._instance === undefined ) {
-    new rwt.client.ClientMessages();
-  }
-  return rwt.client.ClientMessages._instance;
-};
-
-rwt.client.ClientMessages.prototype = {
-
-  setMessages : function( messages ) {
-    for( var id in messages ) {
-      this._messages[ id ] = messages[ id ];
-    }
-  },
-
-  getMessage : function( id ) {
-    return this._messages[ id ] ? this._messages[ id ] : "";
-  }
-
-};
-
-/*******************************************************************************
- * Copyright (c) 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.client.ClientMessages", {
-
-  factory : function( properties ) {
-    return rwt.client.ClientMessages.getInstance();
-  },
-
-  service : true,
-
-  properties : [ "messages" ]
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.client.JavaScriptExecutor", {
-
-  factory : function( properties ) {
-    return rwt.client.JavaScriptExecutor.getInstance();
-  },
-
-  service : true,
-
-  destructor : rwt.util.Functions.returnTrue,
-
-  methods : [
-    "execute"
-  ],
-
-  methodHandler : {
-    "execute" : function( object, args ) {
-      object.execute( args.content );
-    }
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-namespace( "rwt.client" );
-
-rwt.client.UrlLauncher = function() {
-  if( rwt.client.UrlLauncher._instance !== undefined ) {
-    throw new Error( "UrlLauncher can not be created twice" );
-  } else {
-    rwt.client.UrlLauncher._instance = this;
-  }
-  this._window = window;
-  var iframe = document.createElement( "iframe" );
-  iframe.style.visibility = "hidden";
-  iframe.style.position = "absolute";
-  iframe.style.left = "-1000px";
-  iframe.style.top = "-1000px";
-  iframe.src = rwt.remote.Server.RESOURCE_PATH + "static/html/blank.html";
-  document.body.appendChild( iframe );
-  this._iframe = iframe;
-};
-
-rwt.client.UrlLauncher.getInstance = function() {
-  if( rwt.client.UrlLauncher._instance === undefined ) {
-    new rwt.client.UrlLauncher();
-  }
-  return rwt.client.UrlLauncher._instance;
-};
-
-rwt.client.UrlLauncher.prototype = {
-
-  openURL : function( url ) {
-    var protocol = this.getProtocol( url );
-    try {
-      if( [ "http:", "https:", "ftp:", "ftps:" ].indexOf( protocol ) !== -1 ) {
-        this._window.open( url, "_blank" );
-      } else {
-        this._iframe.src = url;
-      }
-    } catch( ex ) {
-      // IE may throw security exception even if the user allows the popup
-    }
-  },
-
-  getProtocol : function( url ) {
-    var protocol = url.indexOf( ":" ) !== -1 ? url.split( ":" )[ 0 ] + ":" : location.protocol;
-    return protocol.toLowerCase();
-  }
-
-};
-/*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.client.UrlLauncher", {
-
-  factory : function( properties ) {
-    return rwt.client.UrlLauncher.getInstance();
-  },
-
-  service : true,
-
-  methods : [
-    "openURL"
-  ],
-
-  methodHandler : {
-    "openURL" : function( object, args ) {
-      object.openURL( args.url );
-    }
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-namespace( "rwt.client" );
-
-rwt.client.JavaScriptLoader = {
-
-  load : function( params ) {
-    for( var i = 0; i < params.files.length; i++ ) {
-      this._loadFile( params.files[ i ] );
-    }
-  },
-
-  _loadFile : function( file ) {
-    var request = new rwt.remote.Request( file, "GET", "text/javascript" );
-    request.setAsynchronous( false );
-    request.setSuccessHandler( this._onLoad, this );
-    request.send();
-  },
-
-  _onLoad : function( event ) {
-    var scriptElement = document.createElement( "script" );
-    scriptElement.type = "text/javascript";
-    scriptElement.text = event.responseText;
-    document.getElementsByTagName( "head" )[ 0 ].appendChild( scriptElement );
-  }
-
-};
-
-/*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.client.JavaScriptLoader", {
-
-  factory : function( properties ) {
-    return rwt.client.JavaScriptLoader;
-  },
-
-  service : true,
-
-  methods : [
-    "load"
-  ]
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2004, 2013 1&1 Internet AG, Germany, http://www.1und1.de,
- *                          EclipseSource and others.
- * 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:
- *    1&1 Internet AG and others - original API and implementation
- *    EclipseSource - adaptation for the Eclipse Remote Application Platform
- ******************************************************************************/
-
-rwt.qx.Class.define( "rwt.runtime.System", {
-
-  type : "singleton",
-
-  extend : rwt.qx.Target,
-
-  construct : function() {
-    if( this.isSupported() ) {
-      this.base( arguments );
-      this._startupTime = new Date().getTime();
-      // Attach load/unload events
-      this._onloadWrapped = rwt.util.Functions.bind( this._onload, this );
-      this._onbeforeunloadWrapped = rwt.util.Functions.bind( this._onbeforeunload, this );
-      this._onunloadWrapped = rwt.util.Functions.bind( this._onunload, this );
-      rwt.html.EventRegistration.addEventListener( window, "load", this._onloadWrapped );
-      rwt.html.EventRegistration.addEventListener( window, "beforeunload", this._onbeforeunloadWrapped );
-      rwt.html.EventRegistration.addEventListener( window, "unload", this._onunloadWrapped );
-      this._applyPatches();
-      rwt.graphics.GraphicsUtil.init();
-      var eventHandler = rwt.event.EventHandler;
-      eventHandler.setAllowContextMenu( rwt.widgets.Menu.getAllowContextMenu );
-      eventHandler.setMenuManager( rwt.widgets.util.MenuManager.getInstance() );
-    }
-  },
-
-  events : {
-    "beforeunload" : "rwt.event.DomEvent",
-    "unload" : "rwt.event.Event",
-    "uiready" : "rwt.event.Event"
-  },
-
-  members : {
-
-    _autoDispose : false,
-    _onloadDone : false,
-    _uiReady : false,
-
-    setUiReady : function( value ) {
-      this._uiReady = value;
-      if( value ) {
-        this.createDispatchEvent( "uiready" );
-      }
-    },
-
-    getUiReady : function() {
-      return this._uiReady;
-    },
-
-    isSupported : function() {
-      return this._isBrowserSupported() && this._isModeSupported() && this._isXHRSupported();
-    },
-
-    _applyPatches : function() {
-      if( !rwt.client.Client.supportsCss3() ) {
-        rwt.qx.Class.patch( rwt.widgets.base.Parent, rwt.widgets.util.GraphicsMixin );
-        rwt.qx.Class.patch( rwt.widgets.base.BasicText, rwt.widgets.util.GraphicsMixin );
-        rwt.qx.Class.patch( rwt.widgets.base.GridRow, rwt.widgets.util.GraphicsMixin );
-        rwt.qx.Class.patch( rwt.widgets.base.MultiCellWidget, rwt.widgets.util.GraphicsMixin );
-      } else {
-        rwt.qx.Class.patch( rwt.widgets.ProgressBar, rwt.widgets.util.GraphicsMixin );
-      }
-      rwt.qx.Class.patch( rwt.event.DomEvent, rwt.event.DomEventPatch );
-    },
-
-    getStartupTime : function() {
-      return this._startupTime;
-    },
-
-    _onload : function(e) {
-      if( !this._onloadDone ) {
-        this._onloadDone = true;
-        rwt.widgets.base.ClientDocument.getInstance();
-        rwt.runtime.MobileWebkitSupport.init();
-        rwt.client.Timer.once( this._preload, this, 0 );
-      }
-    },
-
-    _preload : function() {
-      var visibleImages = rwt.html.ImageManager.getInstance().getVisibleImages();
-      this.__preloader = new rwt.html.ImagePreloaderSystem( visibleImages, this._preloaderDone, this );
-      this.__preloader.start();
-    },
-
-    _preloaderDone : function() {
-      this.__preloader.dispose();
-      this.__preloader = null;
-      rwt.event.EventHandler.init();
-      rwt.event.EventHandler.attachEvents();
-      this.setUiReady( true );
-      rwt.widgets.base.Widget.flushGlobalQueues();
-      rwt.client.Timer.once( this._postload, this, 100 );
-    },
-
-    _postload : function() {
-      var hiddenImages = rwt.html.ImageManager.getInstance().getHiddenImages();
-      this.__postloader = new rwt.html.ImagePreloaderSystem( hiddenImages, this._postloaderDone, this );
-      this.__postloader.start();
-    },
-
-    _postloaderDone : function() {
-      this.__postloader.dispose();
-      this.__postloader = null;
-    },
-
-    _onbeforeunload : function( e ) {
-      var event = new rwt.event.DomEvent( "beforeunload", e, window, this );
-      this.dispatchEvent( event, false );
-      var msg = event.getUserData( "returnValue" );
-      event.dispose();
-      return msg !== null ? msg : undefined;
-    },
-
-    _onunload : function( e ) {
-      this.createDispatchEvent( "unload" );
-      rwt.event.EventHandler.detachEvents();
-      rwt.event.EventHandler.cleanUp();
-      rwt.qx.Object.dispose( true );
-    },
-
-    _isBrowserSupported : function() {
-      var result = true;
-      var engine = rwt.client.Client.getEngine();
-      var version = rwt.client.Client.getMajor();
-      if( engine === "mshtml" && version < 7 ) {
-        result = false;
-      }
-      return result;
-    },
-
-    _isModeSupported : function() {
-      var result = true;
-      var engine = rwt.client.Client.getEngine();
-      if( engine === "newmshtml" && document.documentMode < 9 ) {
-        result = false;
-      }
-      return result;
-    },
-
-    _isXHRSupported : function() {
-      return typeof window.XMLHttpRequest !== "undefined";
-    }
-
-  },
-
-  destruct : function() {
-    rwt.html.EventRegistration.removeEventListener( window, "load", this._onloadWrapped );
-    rwt.html.EventRegistration.removeEventListener( window, "beforeunload", this._onbeforeunloadWrapped );
-    rwt.html.EventRegistration.removeEventListener( window, "unload", this._onunloadWrapped );
-  },
-
-  defer : function( statics, proto, properties )  {
-    // Force direct creation
-    statics.getInstance();
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "rwt.client.ClientInfo", {
-
-  factory : function( properties ) {
-    return rwt.client.Client;
-  },
-
-  service : true
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-(function(){
-
-var EventHandlerUtil = rwt.event.EventHandlerUtil;
-
-rwt.qx.Class.define( "rwt.widgets.util.MnemonicHandler", {
-
-  type : "singleton",
-  extend : rwt.qx.Object,
-
-  construct : function() {
-    this.base( arguments );
-    this._map = {};
-    this._activator = null;
-    this._active = null;
-  },
-
-  members : {
-
-    add : function( widget, listener ) {
-      var root = widget.getFocusRoot();
-      if( root != null ) {  // TODO [tb] : this is for MenuBar items, handle them like Menu items
-        this._registerFocusRoot( root );
-        this._map[ root.toHashCode() ][ widget.toHashCode() ] = [ widget, listener ];
-      }
-    },
-
-    remove : function( widget ) {
-      // NOTE: The focus root may be gone if the widget is in dispose, therefore we have to search:
-      for( var key in this._map ) {
-        delete this._map[ key ][ widget.toHashCode() ];
-      }
-    },
-
-    setActivator : function( str ) {
-      if( str ) {
-        this._activator = {};
-        this._activator.ctrlKey = str.indexOf( "CTRL" ) !== -1;
-        this._activator.altKey = str.indexOf( "ALT" ) !== -1;
-        this._activator.shiftKey = str.indexOf( "SHIFT" ) !== -1;
-      } else {
-        this._activator = null;
-      }
-    },
-
-    isActive : function() {
-      return this._active != null;
-    },
-
-    handleKeyEvent : function( eventType, keyCode, charCode, domEvent ) {
-      var result = false;
-      if( this._isActivation( eventType, keyCode, charCode, domEvent ) ) {
-        this.activate();
-      } else if( this._isDeactivation( eventType, keyCode, charCode, domEvent ) ) {
-        this.deactivate();
-      } else if( this._isTrigger( eventType, keyCode, charCode, domEvent ) ) {
-        result = this.trigger( keyCode );
-      }
-      return result;
-    },
-
-    activate : function() {
-      if( this._noMenuOpen() ) {
-        // TODO : The Active shell is not always the focus root - why?
-        //var root = rwt.event.EventHandler.getFocusRoot();
-        var root = rwt.widgets.base.Window.getDefaultWindowManager().getActiveWindow();
-        if( root == null ) {
-          root = rwt.widgets.base.ClientDocument.getInstance();
-        }
-        this._active = root.toHashCode();
-        this._fire( { "type" : "show" } );
-      }
-    },
-
-    deactivate : function() {
-      if( this._active ) {
-        this._fire( { "type" : "hide" } );
-        this._active = null;
-      }
-    },
-
-    trigger : function( charCode ) {
-      var event = {
-        "type" : "trigger",
-        "charCode" : charCode,
-        "success" : false
-      };
-      this._fire( event, true );
-      return event.success;
-    },
-
-    _registerFocusRoot : function( root ) {
-      if( !this._map[ root.toHashCode() ] ) {
-        this._map[ root.toHashCode() ] = {};
-        root.addEventListener( "dispose", function() {
-          this.deactivate();
-          delete this._map[ root.toHashCode() ];
-        }, this );
-        root.addEventListener( "changeActive", this.deactivate, this );
-      }
-    },
-
-    _fire : function( event, onlyVisible ) {
-      var result = null;
-      if( this._map[ this._active ] ) {
-        var handlers = this._map[ this._active ];
-        for( var key in handlers ) {
-          var entry = handlers[ key ];
-          if( !onlyVisible || entry[ 0 ].isSeeable() ) {
-            try{
-              entry[ 1 ].call( entry[ 0 ], event );
-              if( event.success ) {
-                break;
-              }
-            } catch( ex ) {
-              var msg = "Could not handle mnemonic " + event.type + ". ";
-              if( entry[ 0 ].isDisposed() ) {
-                msg +=  entry[ 0 ].classname + " is disposed. ";
-              }
-              msg += ex.message;
-              throw new Error( msg );
-            }
-          }
-        }
-      }
-      return result;
-    },
-
-    _isActivation : function( eventType, keyCode, charCode, domEvent ) {
-      return    this._activator
-             && this._active == null
-             && eventType === "keydown"
-             && EventHandlerUtil.isModifier( keyCode )
-             && this._isActivatorCombo( domEvent );
-    },
-
-    _isDeactivation : function( eventType, keyCode, charCode, domEvent ) {
-      return    this._activator != null
-             && this._active != null
-             && eventType != "keypress"
-             && !this._isActivatorCombo( domEvent );
-    },
-
-    _isActivatorCombo : function( domEvent ) {
-      return    this._activator.ctrlKey === domEvent.ctrlKey
-             && this._activator.altKey === domEvent.altKey
-             && this._activator.shiftKey === domEvent.shiftKey;
-    },
-
-    _isTrigger : function( eventType, keyCode, charCode, domEvent ) {
-      var isChar = !isNaN( keyCode ) && rwt.event.EventHandlerUtil.isAlphaNumericKeyCode( keyCode );
-      return this._active != null && eventType === "keydown" && isChar;
-     },
-
-     _noMenuOpen : function() {
-       return rwt.util.Objects.isEmpty( rwt.widgets.util.MenuManager.getInstance().getAll() );
-     }
-
-  }
-
-} );
-
-}());
-/*******************************************************************************
- * Copyright (c) 2012, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-(function(){
-
-/**
- * @public
- * @since 2.0
- * @namespace Holds all public API of the RAP WebClient.
- */
-rap = {
-
-  /**
-   * @description Registers a RAP protocol type handler for a specific type of client objects.
-   * The handler is used by the protocol message processor to process operations that target
-   * any client object of this type. Example:
-   *
-   * @example
-   * rap.registerTypeHandler( "project.MyWidget", {
-   *   factory : function( properties ) {
-   *     return new MyWidget();
-   *   },
-   *   properties : [ "propA", "propB" ]
-   * } );
-   *
-   * @param {string} type
-   *
-   * @param {Object} handler The handler object.
-   *
-   * @param {Function} handler.factory Called for create operations.
-   * Is given a properties object as the first argument, which may contain any number for
-   * properties/fields set by the server. Has to return a "client object" representing an instance
-   * of the type of this handler. <em>Required for all type handler</em>.
-   *
-   * @param {string} handler.destructor Name of the method that is called for destroy operations.
-   * If the string is given, the client object <em>has</em> to implement a method with the given
-   * name. <em>Optional</em>
-   *
-   * @param {string[]} handler.properties List of properties supported by this type.
-   * The order in the list controls the order in which the properties are applied by the message
-   * processor. The client object <em>has</em> to implement a setter for each supported property.
-   * For example, if the property is "bounds", <code>setBounds</code> will be called on the client
-   * object. Properties given by the server that are not in this list will be ignored. (One
-   * exception is the factory, which gets an object with <i>all</i> properties set by the server
-   * at that time.)  If the property changes on the client, {@link RemoteObject#set} can be
-   * used to synchronize the value with the server.
-   * <em>Optional.</em>
-   *
-   * @param {string[]} handler.methods List of methods supported by this type.
-   * The order in the list is meaningless, "call" operations are processed in the order in which
-   * they are given by the server. The client object has to implement a method of the same name.
-   * One argument will be given, which is a properties object with any number of properties/fields.
-   * A "call" operation given by the server for a method that is not in this list will be ignored.
-   * <em>Optional.</em>
-   *
-   * @param {string[]} handler.events List of event types supported by this type.
-   * The server may instruct the client object with "listen" operations to start or stop sending
-   * notifications when events of he given event type occur. Notifications may and can only be
-   * sent for types that are given in this list and are listend to by the server. See also
-   * {@link RemoteObject#notify}.
-   * <em>Optional.</em>
-   */
-  registerTypeHandler : function( type, handler ) {
-    handler.isPublic = true;
-    rwt.remote.HandlerRegistry.add( type, handler );
-  },
-
-  /**
-   * @description Returns the client object associated with the given id.
-   * If there is no object registered for the given id, null is returned.
-   * For RAP internal objects (e.g. RWT widgets) a wrapper is returned instead of the real object.
-   * @see Composite
-   * @param {string} id The protocol id for a client object.
-   * @returns {Object} The client object associated with the id.
-   */
-  getObject : function( id ) {
-    var entry = rwt.remote.ObjectRegistry.getEntry( id );
-    var result;
-    if( entry && entry.handler.isPublic ) {
-      result = entry.object;
-    } else {
-      result = this._.getWrapperFor( entry.object );
-    }
-    return result;
-  },
-
-  /**
-   * @description Returns an instance of {@link RemoteObject} for the given client object.
-   * A client object is any object that was created by an type handler factory method.
-   * Multiple calls for the same object will return the same RemoteObject
-   * instance.
-   * @see rap.registerTypeHandler
-   * @param {Object} object The client object.
-   * @returns {RemoteObject}
-   */
-  getRemoteObject : function( object ) {
-    return rwt.remote.Server.getInstance().getRemoteObject( object );
-  },
-
-  /**
-   * @description Register the function as a listener of the given type. Registering unkown
-   * types throws an Error.
-   * @param {string} type The type of the event (e.g. "send").
-   * @param {Function} listener The callback function. It is executed in global context.
-   */
-   on : function( type, handler ) {
-     if( this._.events[ type ] ) {
-       if( this._.events[ type ].indexOf( handler ) === -1 ) {
-         this._.events[ type ].push( handler );
-       }
-     } else {
-       throw new Error( "Unkown type " + type );
-     }
-   },
-
-  /**
-   * @description De-register the function as a listener of the given type.
-   * @param {string} type The type of the event
-   * @param {Function} listener The callback function
-   */
-   off : function( type, handler ) {
-     if( this._.events[ type ] ) {
-       var index = this._.events[ type ].indexOf( handler );
-       rwt.util.Arrays.removeAt( this._.events[ type ], index );
-     }
-   },
-
-   _ : {
-    wrapperMap : {},
-    events : {
-      /**
-       * @event
-       * @description Sent right before a message is send to the server.
-       * @name rap#send
-       */
-      "render" : [],
-      /**
-       * @event
-       * @description Sent after a message has been processed.
-       * @name rap#render
-       */
-      "send" : []
-    },
-    notify : function( type ) {
-      var listener = this.events[ type ];
-      for( var i = 0; i < listener.length; i++ ) {
-        listener[ i ]();
-      }
-    },
-    getWrapperFor : function( obj ) {
-      var result = null;
-      if( obj instanceof Object ) {
-        var hash = rwt.qx.Object.toHashCode( obj );
-        if( this.wrapperMap[ hash ] == null ) {
-          if( obj instanceof rwt.widgets.Composite ) {
-            result = new CompositeWrapper( obj );
-          } else {
-            result = {};
-          }
-          this.wrapperMap[ hash ] = result;
-        }
-        result = this.wrapperMap[ hash ];
-      }
-      return result;
-    },
-    removeWrapper : function( obj ) {
-      if( obj instanceof Object ) {
-        var hash = rwt.qx.Object.toHashCode( obj );
-        delete this.wrapperMap[ hash ];
-      }
-    }
-  }
-
-};
-
-// TODO [tb] : propper class/namespace for this event? (Control? SWT? RWT? rap? rwt.widget?)
-/**
- * @event
- * @description Sent when widget changes size.
- * @name Composite#Resize
- */
-function convertEventType( type ) {
-  var result;
-  if( type === "Resize" ) {
-    result = "clientAreaChanged"; // works only for Composite
-  } else {
-    throw new Error( "Unkown event type " + type );
-  }
-  return result;
-}
-
-/**
- * @private
- * @class Represents RWT Composite widgets
- * @description This constructor is not available in the global namespace. Instances can only
- * be obtained from {@link rap.getObject}.
- * @name Composite
- * @since 2.0
- */
- // TODO [tb] : where to put this? rap.CompositeWrapper? rwt.widget.Composite? in CompositeHandler?
-function CompositeWrapper( widget ) {
-  var children = null;
-  if( !widget.isCreated() ) {
-    children = [];
-    widget.addEventListener( "create", function() {
-      for( var i = 0; i < children.length; i++ ) {
-        widget._getTargetNode().appendChild( children[ i ] );
-      }
-      widget.removeEventListener( "create", arguments.callee );
-      children = null;
-    } );
-  }
-  /**
-   * @name append
-   * @function
-   * @memberOf Composite#
-   * @description Adds a given HTMLElement to the Composite.
-   * @param {HTMLElement} childElement The element to append.
-   */
-  this.append = function( childElement ) {
-    if( children ) {
-      children.push( childElement );
-    } else {
-      widget._getTargetNode().appendChild( childElement );
-    }
-  };
-  /**
-   * @name getClientArea
-   * @function
-   * @memberOf Composite#
-   * @description Returns the client Area of the Composite
-   * @returns {int[]} the client area as array [ x, y, width, height ]
-   */
-  this.getClientArea = function() {
-    return widget.getClientArea();
-  };
-
-  /**
-   * @name addListener
-   * @function
-   * @memberOf Composite#
-   * @description Register the function as a listener of the given type
-   * @param {string} type The type of the event (e.g. "Resize").
-   * @param {Function} listener The callback function. It is executed in global context.
-   */
-  this.addListener = function( type, listener ) {
-    widget.addEventListener( convertEventType( type ), listener, window );
-  };
-
-  /**
-   * @name removeListener
-   * @function
-   * @memberOf Composite#
-   * @description De-register the function as a listener of the given type
-   * @param {string} type The type of the event (e.g. "Resize").
-   * @param {Function} listener The callback function
-   */
-  this.removeListener = function( type, listener ) {
-    widget.removeEventListener( convertEventType( type ), listener, window );
-  };
-
-}
-
-}());
-if(!this.JSON){this.JSON={}}(function(){function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||"null"}v=partial.length===0?"[]":gap?"[\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"]":"["+partial.join(",")+"]";gap=mind;return v}if(rep&&typeof rep==="object"){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==="string"){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}v=partial.length===0?"{}":gap?"{\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"}":"{"+partial.join(",")+"}";gap=mind;return v}}if(typeof JSON.stringify!=="function"){JSON.stringify=function(value,replacer,space){var i;gap="";indent="";if(typeof space==="number"){for(i=0;i<space;i+=1){indent+=" "}}else{if(typeof space==="string"){indent=space}}rep=replacer;if(replacer&&typeof replacer!=="function"&&(typeof replacer!=="object"||typeof replacer.length!=="number")){throw new Error("JSON.stringify")}return str("",{"":value})}}if(typeof JSON.parse!=="function"){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==="object"){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){j=eval("("+text+")");return typeof reviver==="function"?walk({"":j},""):j}throw new SyntaxError("JSON.parse")}}}());
-rwt.theme.AppearanceManager.getInstance().setCurrentTheme( {
-  name : "rwtAppearance",
-  appearances : {
-
-  "empty" : {
-  },
-
-  "widget" : {
-  },
-
-  "image" : {
-  },
-
-  /*
-  ---------------------------------------------------------------------------
-    CORE
-  ---------------------------------------------------------------------------
-  */
-
-  "cursor-dnd-move" : {
-    style : function( states ) {
-      return {
-        source : rwt.remote.Server.RESOURCE_PATH + "widget/rap/cursors/move.gif"
-      };
-    }
-  },
-
-  "cursor-dnd-copy" : {
-    style : function( states ) {
-      return {
-        source : rwt.remote.Server.RESOURCE_PATH + "widget/rap/cursors/copy.gif"
-      };
-    }
-  },
-
-  "cursor-dnd-alias" : {
-    style : function( states ) {
-      return {
-        source : rwt.remote.Server.RESOURCE_PATH + "widget/rap/cursors/alias.gif"
-      };
-    }
-  },
-
-  "cursor-dnd-nodrop" : {
-    style : function( states ) {
-      return {
-        source : rwt.remote.Server.RESOURCE_PATH + "widget/rap/cursors/nodrop.gif"
-      };
-    }
-  },
-
-  "client-document" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        font : tv.getCssFont( "*", "font" ),
-        textColor : "black",
-        backgroundColor : "white"
-      };
-    }
-  },
-
-  "client-document-blocker" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {
-        cursor : "default",
-        animation : tv.getCssAnimation( "Shell-DisplayOverlay", "animation" ),
-        backgroundColor : tv.getCssColor( "Shell-DisplayOverlay", "background-color" ),
-        backgroundImage : tv.getCssImage( "Shell-DisplayOverlay", "background-image" ),
-        opacity : tv.getCssFloat( "Shell-DisplayOverlay", "opacity" )
-      };
-      if(    result.backgroundImage == null
-          && result.backgroundColor == "undefined" ) {
-        // A background image or color is always needed for mshtml to
-        // block the events successfully.
-        result.backgroundImage = "static/image/blank.gif";
-      }
-      return result;
-    }
-  },
-
-  "atom" : {
-    style : function( states ) {
-      return {
-        cursor : "default",
-        spacing : 4,
-        width : "auto",
-        height : "auto",
-        horizontalChildrenAlign : "center",
-        verticalChildrenAlign : "middle"
-      };
-    }
-  },
-
-  // Note: This appearance applies to qooxdoo labels (as embedded in Atom,
-  //       Button, etc.). For SWT Label, see apperance "label-wrapper".
-  //       Any styles set for this appearance cannot be overridden by themeing
-  //       of controls that include a label! This is because the "inheritance"
-  //       feature does not overwrite theme property values from themes.
-  "label" : {
-  },
-
-  // Appearance used for qooxdoo "labelObjects" which are part of Atoms etc.
-  "label-graytext" : {
-    style : function( states ) {
-    }
-  },
-
-  // this applies to a qooxdoo rwt.widgets.base.Atom that represents an RWT Label
-
-
-  "htmlcontainer" : {
-    include : "label"
-  },
-
-  "popup" : {
-  },
-
-  "iframe" : {
-    style : function( states ) {
-      return { };
-    }
-  },
-
-  /*
-  ---------------------------------------------------------------------------
-    RESIZER
-  ---------------------------------------------------------------------------
-  */
-
-  // TODO [rst] necessary?
-
-  "resizer" : {
-    style : function( states ) {
-      return {};
-    }
-  },
-
-  "resizer-frame" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        border : tv.getCssNamedBorder( "shadow" )
-      };
-    }
-  },
-
-  "widget-tool-tip" : {
-    include : "popup",
-
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.border = tv.getCssBorder( "Widget-ToolTip", "border" );
-      result.animation = tv.getCssAnimation( "Widget-ToolTip", "animation" );
-      result.padding = tv.getCssBoxDimensions( "Widget-ToolTip", "padding" );
-      result.textColor = tv.getCssColor( "Widget-ToolTip", "color" );
-      result.font = tv.getCssFont( "Widget-ToolTip", "font" );
-      result.backgroundColor = tv.getCssColor( "Widget-ToolTip", "background-color" );
-      result.backgroundImage = tv.getCssImage( "Widget-ToolTip", "background-image" );
-      result.backgroundGradient = tv.getCssGradient( "Widget-ToolTip", "background-image" );
-      result.opacity = tv.getCssFloat( "Widget-ToolTip", "opacity" );
-      result.shadow = tv.getCssShadow( "Widget-ToolTip", "box-shadow" );
-      return result;
-    }
-  }
-,
-
-  "composite" : {
-    style : function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      result.backgroundColor = tv.getCssColor( "Composite", "background-color" );
-      result.backgroundImage = tv.getCssImage( "Composite", "background-image" );
-      result.backgroundRepeat = tv.getCssIdentifier( "Composite", "background-repeat" );
-      result.backgroundPosition = tv.getCssIdentifier( "Composite", "background-position" );
-      result.backgroundGradient = tv.getCssGradient( "Composite", "background-image" );
-      result.border = tv.getCssBorder( "Composite", "border" );
-      result.opacity = tv.getCssFloat( "Composite", "opacity" );
-      result.shadow = tv.getCssShadow( "Composite", "box-shadow" );
-      result.animation = tv.getCssAnimation( "Composite", "animation" );
-      return result;
-    }
-  }
-,
-
-  "button" : {
-    include : "atom",
-
-    style : function( states ) {
-      // [tb] exists for compatibility with the original qooxdoo button
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      result.font = tv.getCssFont( "Button", "font" );
-      var decoration = tv.getCssIdentifier( "Button", "text-decoration" );
-      if( decoration != null && decoration !== "none" ) {
-        var decoratedFont = new rwt.html.Font();
-        decoratedFont.setSize( result.font.getSize() );
-        decoratedFont.setFamily( result.font.getFamily() );
-        decoratedFont.setBold( result.font.getBold() );
-        decoratedFont.setItalic( result.font.getItalic() );
-        decoratedFont.setDecoration( decoration );
-        result.font = decoratedFont;
-      }
-      result.textColor = tv.getCssColor( "Button", "color" );
-      result.backgroundColor = tv.getCssColor( "Button", "background-color" );
-      result.backgroundImage = tv.getCssImage( "Button", "background-image" );
-      result.backgroundRepeat = tv.getCssIdentifier( "Button", "background-repeat" );
-      result.backgroundPosition = tv.getCssIdentifier( "Button", "background-position" );
-      result.backgroundGradient = tv.getCssGradient( "Button", "background-image" );
-      result.border = tv.getCssBorder( "Button", "border" );
-      result.spacing = tv.getCssDimension( "Button", "spacing" );
-      result.padding = tv.getCssBoxDimensions( "Button", "padding" );
-      result.cursor = tv.getCssCursor( "Button", "cursor" );
-      result.opacity = tv.getCssFloat( "Button", "opacity" );
-      result.textShadow = tv.getCssShadow( "Button", "text-shadow" );
-      return result;
-    }
-  },
-
-  "push-button" : {
-    include : "button",
-
-    style : function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      result.animation = tv.getCssAnimation( "Button", "animation" );
-      if( states.rwt_ARROW ) {
-        result.icon = tv.getCssSizedImage( "Button-ArrowIcon", "background-image" );
-      }
-      return result;
-    }
-  },
-
-  // ------------------------------------------------------------------------
-  // CheckBox
-
-  "check-box" : {
-    include : "button",
-
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        selectionIndicator : tv.getCssSizedImage( "Button-CheckIcon", "background-image" )
-      };
-    }
-  },
-
-
-  // ------------------------------------------------------------------------
-  // RadioButton
-
-  "radio-button" : {
-    include : "button",
-
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        selectionIndicator : tv.getCssSizedImage( "Button-RadioIcon", "background-image" )
-      };
-    }
-  }
-,
-
-  "combo" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.border = tv.getCssBorder( "Combo", "border" );
-      result.backgroundColor = tv.getCssColor( "Combo", "background-color" );
-      result.backgroundGradient = tv.getCssGradient( "Combo", "background-image" );
-      result.textColor = tv.getCssColor( "Combo", "color" );
-      result.font = tv.getCssFont( "Combo", "font" );
-      result.shadow = tv.getCssShadow( "Combo", "box-shadow" );
-      return result;
-    }
-  },
-
-  "combo-list" : {
-    include : "list",
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.border = tv.getCssBorder( "Combo-List", "border" );
-      result.textColor = tv.getCssColor( "Combo", "color" );
-      result.font = tv.getCssFont( "Combo", "font" );
-      result.backgroundColor = tv.getCssColor( "Combo", "background-color" );
-      result.shadow = tv.getCssShadow( "Combo-List", "box-shadow" );
-      result.textShadow = tv.getCssShadow( "Combo", "text-shadow" );
-      return result;
-    }
-  },
-
-  "combo-field" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.font = tv.getCssFont( "Combo", "font" );
-      // [if] Do not apply top/bottom paddings on the client
-      var cssPadding = tv.getCssBoxDimensions( "Combo-Field", "padding" );
-      result.paddingRight = cssPadding[ 1 ];
-      result.paddingLeft = cssPadding[ 3 ];
-      result.width = null;
-      result.height = null;
-      result.left = 0;
-      result.right = tv.getCssDimension( "Combo-Button", "width" );
-      result.top = 0;
-      result.bottom = 0;
-      result.textColor = tv.getCssColor( "Combo", "color" );
-      result.textShadow = tv.getCssShadow( "Combo", "text-shadow" );
-      return result;
-    }
-  },
-
-  "combo-button" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      var border = tv.getCssBorder( "Combo-Button", "border" );
-      var borderLeft = tv.getCssBorder( "Combo-Button", "border-left" );
-      result.border = tv.mergeBorders( border, null, null, null, borderLeft );
-      result.width = tv.getCssDimension( "Combo-Button", "width" );
-      result.height = null;
-      result.top = 0;
-      result.bottom = 0;
-      result.right = 0;
-      result.icon = tv.getCssImage( "Combo-Button-Icon", "background-image" );
-      if( result.icon === rwt.theme.ThemeValues.NONE_IMAGE ) {
-        result.icon = tv.getCssImage( "Combo-Button", "background-image" );
-      } else {
-        result.backgroundImage = tv.getCssImage( "Combo-Button", "background-image" );
-      }
-      result.backgroundGradient = tv.getCssGradient( "Combo-Button", "background-image" );
-      // TODO [rst] rather use button.bgcolor?
-      result.backgroundColor = tv.getCssColor( "Combo-Button", "background-color" );
-      result.cursor = tv.getCssCursor( "Combo-Button", "cursor" );
-      return result;
-    }
-  }
-,
-
-  "coolbar" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.border = tv.getCssBorder( "*", "border" );
-      result.backgroundGradient = tv.getCssGradient( "CoolBar", "background-image" );
-      result.backgroundImage = tv.getCssImage( "CoolBar", "background-image" );
-      return result;
-    }
-  },
-
-  "coolitem" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.border = tv.getCssBorder( "*", "border" );
-      return result;
-    }
-  },
-
-  "coolitem-handle" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      if( states.vertical ) {
-        result.height = tv.getCssDimension( "CoolItem-Handle", "width" );
-      } else {
-        result.width = tv.getCssDimension( "CoolItem-Handle", "width" );
-      }
-      result.border = tv.getCssBorder( "CoolItem-Handle", "border" );
-      result.margin = [ 1, 2, 1, 0 ];
-      result.cursor = "col-resize";
-      return result;
-    }
-  }
-,
-
-  "ctabfolder" : {
-    style: function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      result.font = tv.getCssFont( "CTabItem", "font" );
-      result.textColor = tv.getCssColor( "CTabItem", "color" );
-      return result;
-    }
-  },
-
-  "ctabfolder-body" : {
-    style: function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      result.backgroundColor = tv.getCssColor( "CTabItem", "background-color" );
-      var color = tv.getCssColor( "CTabFolder", "border-color" );
-      var radii = tv.getCssBoxDimensions( "CTabFolder", "border-radius" );
-      var borderWidth = states.rwt_BORDER ? 1 : 0;
-      if( radii[ 0 ] > 0 || radii[ 1 ] > 0 || radii[ 2 ] > 0 || radii[ 3 ] > 0 ) {
-        var borderRadii;
-        if( states.barTop ) {
-          borderRadii = [ radii[ 0 ], radii[ 1 ], 0, 0 ];
-        } else {
-          borderRadii = [ 0, 0, radii[ 2 ], radii[ 3 ] ];
-        }
-        result.border = new rwt.html.Border( borderWidth, "rounded", color, borderRadii );
-      } else {
-        result.border = new rwt.html.Border( borderWidth, "solid", color );
-      }
-      return result;
-    }
-  },
-
-  "ctabfolder-frame" : {
-    style: function( states ) {
-      var result = {};
-      if( !states.rwt_FLAT ) {
-        // get the background color for selected items
-        var statesWithSelected = { "selected": true };
-        for( var property in states ) {
-          statesWithSelected[ property ] = states[ property ];
-        }
-        var tv = new rwt.theme.ThemeValues( statesWithSelected );
-        var color = tv.getCssColor( "CTabItem", "background-color" );
-        result.border = new rwt.html.Border( 2, "solid", color );
-      } else {
-        result.border = "undefined";
-      }
-      result.backgroundColor = "undefined";
-      return result;
-    }
-  },
-
-  "ctabfolder-separator" : {
-    style: function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      var color = tv.getCssColor( "CTabFolder", "border-color" );
-      var border;
-      if( states.barTop ) {
-        border = new rwt.html.Border( [ 0, 0, 1, 0 ], "solid", color );
-      } else {
-        border = new rwt.html.Border( [ 1, 0, 0, 0 ], "solid", color );
-      }
-      result.border = border;
-      return result;
-    }
-  },
-
-  "ctab-item" : {
-    style: function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      result.cursor = "default";
-      var padding = tv.getCssBoxDimensions( "CTabItem", "padding" );
-      result.paddingLeft = padding[ 3 ];
-      result.paddingRight = padding[ 1 ];
-      result.spacing = tv.getCssDimension( "CTabItem", "spacing" );
-      result.font = tv.getCssFont( "CTabItem", "font" );
-      result.textColor = tv.getCssColor( "CTabItem", "color" );
-      result.textShadow = tv.getCssShadow( "CTabItem", "text-shadow" );
-      var color = tv.getCssColor( "CTabFolder", "border-color" );
-      // create a copy of the radii from theme
-      var radii = tv.getCssBoxDimensions( "CTabFolder", "border-radius" ).slice( 0 );
-      // cut off rounded corners at opposite side of tabs
-      if( states.barTop ) {
-        radii[ 2 ] = 0;
-        radii[ 3 ] = 0;
-      } else {
-        radii[ 0 ] = 0;
-        radii[ 1 ] = 0;
-      }
-      var rounded = radii[ 0 ] > 0 || radii[ 1 ] > 0 || radii[ 2 ] > 0 || radii[ 3 ] > 0;
-      var borderWidths = [ 0, 0, 0, 0 ];
-      if( !states.nextSelected ) {
-        borderWidths[ 1 ] = 1;
-      }
-      if( states.selected ) {
-        borderWidths[ 3 ] = 1;
-        if( states.barTop ) {
-          borderWidths[ 0 ] = 1;
-        } else {
-          borderWidths[ 2 ] = 1;
-        }
-      }
-      if( states.firstItem && states.rwt_BORDER && !rounded ) {
-        borderWidths[ 3 ] = 1;
-      }
-      if( rounded && states.selected ) {
-        result.border = new rwt.html.Border( borderWidths, "rounded", color, radii );
-        result.containerOverflow = false;
-      } else {
-        result.border = new rwt.html.Border( borderWidths, "solid", color );
-      }
-      if( states.selected ) {
-        result.backgroundColor = tv.getCssColor( "CTabItem", "background-color" );
-        result.backgroundImage = tv.getCssImage( "CTabItem", "background-image" );
-        result.backgroundGradient = tv.getCssGradient( "CTabItem", "background-image" );
-      } else {
-        result.backgroundColor = "undefined";
-        result.backgroundImage = null;
-        result.backgroundGradient = null;
-      }
-      return result;
-    }
-  },
-
-  "ctabfolder-button" : {
-    include : "image",
-    style : function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      if( states.over ) {
-        result.backgroundColor = "white";
-        var color = tv.getCssColor( "CTabFolder", "border-color" );
-        result.border = new rwt.html.Border( 1, "solid", color );
-      } else {
-        result.backgroundColor = "undefined";
-        result.border = "undefined";
-      }
-      return result;
-    }
-  },
-
-  "ctabfolder-drop-down-button" : {
-    include : "ctabfolder-button",
-    style : function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      result.icon = tv.getCssImage( "CTabFolder-DropDownButton-Icon", "background-image" );
-      return result;
-    }
-  },
-
-  "ctab-close-button" : {
-    include : "image",
-
-    style : function( states ) {
-      var path = rwt.remote.Server.RESOURCE_PATH + "widget/rap/ctabfolder/";
-      return {
-        source : path + ( states.over ? "close_hover.gif" : "close.gif" )
-      };
-    }
-  }
-,
-
-  "group-box" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        backgroundColor : tv.getCssColor( "Group", "background-color" ),
-        border : tv.getCssBorder( "Group", "border" ),
-        font : tv.getCssFont( "Group", "font"),
-        textColor : tv.getCssColor( "Group", "color" )
-      };
-    }
-  },
-
-  "group-box-legend" : {
-    include : "atom",
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        top : 0,
-        left : 0,
-        border : tv.getCssBorder( "Group-Label", "border" ),
-        padding : tv.getCssBoxDimensions( "Group-Label", "padding" ),
-        margin : tv.getCssBoxDimensions( "Group-Label", "margin" ),
-        backgroundColor : tv.getCssColor( "Group-Label", "background-color" ),
-        font : tv.getCssFont( "Group", "font"),
-        textColor : tv.getCssColor( "Group-Label", "color" ),
-        textShadow : tv.getCssShadow( "Group-Label", "text-shadow" )
-      };
-    }
-  },
-
-  "group-box-frame" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var margin = tv.getCssBoxDimensions( "Group-Frame", "margin" );
-      return {
-        top : margin[ 0 ],
-        right : margin[ 1 ],
-        bottom : margin[ 2 ],
-        left : margin[ 3 ],
-        border : tv.getCssBorder( "Group-Frame", "border" )
-      };
-    }
-  }
-,
-
-  "label-wrapper" : {
-    style : function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      result.font = tv.getCssFont( "Label", "font" );
-      var decoration = tv.getCssIdentifier( "Label", "text-decoration" );
-      if( decoration != null && decoration != "none" ) {
-        var decoratedFont = new rwt.html.Font();
-        decoratedFont.setSize( result.font.getSize() );
-        decoratedFont.setFamily( result.font.getFamily() );
-        decoratedFont.setBold( result.font.getBold() );
-        decoratedFont.setItalic( result.font.getItalic() );
-        decoratedFont.setDecoration( decoration );
-        result.font = decoratedFont;
-      }
-      result.textColor = tv.getCssColor( "Label", "color" );
-      result.backgroundColor = tv.getCssColor( "Label", "background-color" );
-      result.backgroundImage = tv.getCssImage( "Label", "background-image" );
-      result.backgroundRepeat = tv.getCssIdentifier( "Label", "background-repeat" );
-      result.backgroundPosition = tv.getCssIdentifier( "Label", "background-position" );
-      result.backgroundGradient = tv.getCssGradient( "Label", "background-image" );
-      result.border = tv.getCssBorder( "Label", "border" );
-      result.cursor = tv.getCssCursor( "Label", "cursor" );
-      result.opacity = tv.getCssFloat( "Label", "opacity" );
-      result.textShadow = tv.getCssShadow( "Label", "text-shadow" );
-      return result;
-    }
-  },
-
-  "separator-line" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      if( states.rwt_VERTICAL ) {
-        result.width = tv.getCssDimension( "Label-SeparatorLine", "width" );
-      } else {
-        result.height = tv.getCssDimension( "Label-SeparatorLine", "width" );
-      }
-      result.border = tv.getCssBorder( "Label-SeparatorLine", "border" );
-      var orient = states.rwt_VERTICAL ? "vertical" : "horizontal";
-      // TODO [tb] : Can we prevent creating a potentially useless border instance?
-      var borderName;
-      if( result.border === tv.getCssNamedBorder( "thinInset" ) ) {
-        borderName = "separator.shadowin." + orient + ".border";
-      } else if( result.border === tv.getCssNamedBorder( "thinOutset" ) ) {
-        borderName = "separator.shadowout." + orient + ".border";
-      }
-      if( borderName ) {
-        result.border = tv.getCssNamedBorder( borderName );
-      }
-      result.backgroundColor = tv.getCssColor( "Label-SeparatorLine", "background-color" );
-      result.backgroundImage = tv.getCssImage( "Label-SeparatorLine", "background-image" );
-      result.backgroundGradient = tv.getCssGradient( "Label-SeparatorLine", "background-image" );
-      return result;
-    }
-  },
-
-  "separator" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        backgroundColor : tv.getCssColor( "Label", "background-color" ),
-        backgroundImage : tv.getCssImage( "Label", "background-image" ),
-        backgroundGradient : tv.getCssGradient( "Label", "background-image" ),
-        border : tv.getCssBorder( "Label", "border" ),
-        cursor : tv.getCssCursor( "Label", "cursor" ),
-        opacity : tv.getCssFloat( "Label", "opacity" )
-      };
-    }
-  }
-,
-
- "link" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        cursor: "default",
-        padding : 2,
-        font : tv.getCssFont( "Link", "font" ),
-        border : tv.getCssBorder( "Link", "border" ),
-        textColor : tv.getCssColor( "Link", "color" ),
-        backgroundColor : tv.getCssColor( "Link", "background-color" ),
-        backgroundImage : tv.getCssImage( "Link", "background-image" ),
-        backgroundRepeat : tv.getCssIdentifier( "Link", "background-repeat" ),
-        backgroundPosition : tv.getCssIdentifier( "Link", "background-position" ),
-        textShadow : tv.getCssShadow( "Link", "text-shadow" )
-      };
-    }
-  },
-
-  "link-text" : {
-    style : function( states ) {
-      return {
-        textColor: "inherit"
-      };
-    }
-  },
-
-  "link-hyperlink" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        textColor : tv.getCssColor( "Link-Hyperlink", "color" ),
-        textShadow : tv.getCssShadow( "Link-Hyperlink", "text-shadow" ),
-        textDecoration : tv.getCssIdentifier( "Link-Hyperlink", "text-decoration" ),
-        cursor : states.disabled ? "default" : "pointer"
-      };
-    }
-  }
-,
-
-  "list" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.cursor = "default";
-      result.overflow = "hidden";
-      result.font = tv.getCssFont( "List", "font" );
-      result.textColor = tv.getCssColor( "List", "color" );
-      result.backgroundColor = tv.getCssColor( "List", "background-color" );
-      result.border = tv.getCssBorder( "List", "border" );
-      return result;
-    }
-  },
-
-  "list-item" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {
-        height : "auto",
-        horizontalChildrenAlign : "left",
-        verticalChildrenAlign : "top",
-        spacing : 4
-      };
-      result.textColor = tv.getCssColor( "List-Item", "color" );
-      result.backgroundColor = tv.getCssColor( "List-Item", "background-color" );
-      result.backgroundImage = tv.getCssImage( "List-Item", "background-image" );
-      result.backgroundGradient = tv.getCssGradient( "List-Item", "background-image" );
-      result.textShadow = tv.getCssShadow( "List-Item", "text-shadow" );
-      result.padding = tv.getCssBoxDimensions( "List-Item", "padding" );
-      return result;
-    }
-  }
-,
-
-  "menu" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        width : "auto",
-        height : "auto",
-        textColor : tv.getCssColor( "Menu", "color" ),
-        backgroundColor : tv.getCssColor( "Menu", "background-color" ),
-        backgroundImage : tv.getCssImage( "Menu", "background-image" ),
-        backgroundGradient : tv.getCssGradient( "Menu", "background-image" ),
-        animation : tv.getCssAnimation( "Menu", "animation" ),
-        font : tv.getCssFont( "Menu", "font" ),
-        overflow : "hidden",
-        border : tv.getCssBorder( "Menu", "border" ),
-        padding : tv.getCssBoxDimensions( "Menu", "padding" ),
-        opacity : tv.getCssFloat( "Menu", "opacity" ),
-        shadow : tv.getCssShadow( "Menu", "box-shadow" )
-      };
-    }
-  },
-
-  "menu-item" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {
-        spacing : 2,
-        padding : tv.getCssBoxDimensions( "MenuItem", "padding" ),
-        backgroundImage : tv.getCssImage( "MenuItem", "background-image" ),
-        backgroundGradient : tv.getCssGradient( "MenuItem", "background-image" ),
-        backgroundColor : tv.getCssColor( "MenuItem", "background-color" ),
-        height : states.onMenuBar ? "100%" : "auto",
-        opacity : tv.getCssFloat( "MenuItem", "opacity" ),
-        textShadow : tv.getCssShadow( "MenuItem", "text-shadow" )
-      };
-      result.textColor = tv.getCssColor( "MenuItem", "color" );
-      if( states.cascade ) {
-        result.arrow = tv.getCssSizedImage( "MenuItem-CascadeIcon", "background-image" );
-      } else {
-        result.arrow = null;
-      }
-      if( states.selected ) {
-        if( states.check ) {
-           result.selectionIndicator
-             = tv.getCssSizedImage( "MenuItem-CheckIcon", "background-image" );
-        } else if( states.radio ) {
-           result.selectionIndicator
-             = tv.getCssSizedImage( "MenuItem-RadioIcon", "background-image" );
-        }
-      } else {
-        if( states.radio ) {
-          var radioWidth = tv.getCssSizedImage( "MenuItem-RadioIcon", "background-image" )[ 1 ];
-          result.selectionIndicator = [ null, radioWidth, 0 ];
-        } else if( states.check ) {
-          var checkWidth = tv.getCssSizedImage( "MenuItem-CheckIcon", "background-image" )[ 1 ];
-          result.selectionIndicator = [ null, checkWidth, 0 ];
-        } else {
-          result.selectionIndicator = null;
-        }
-      }
-      return result;
-    }
-  },
-
-  "menu-separator" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        height : "auto",
-        marginTop : 3,
-        marginBottom : 2,
-        padding : tv.getCssBoxDimensions( "MenuItem", "padding" )
-      };
-    }
-  },
-
-  "menu-separator-line" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        right : 0,
-        left : 0,
-        height : 0,
-        border : tv.getCssNamedBorder( "verticalDivider" )
-      };
-    }
-  }
-,
-
-  "progressbar" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.border = tv.getCssBorder( "ProgressBar", "border" );
-      result.backgroundColor = tv.getCssColor( "ProgressBar", "background-color" );
-      result.backgroundImageSized = tv.getCssSizedImage( "ProgressBar", "background-image" );
-      result.backgroundGradient = tv.getCssGradient( "ProgressBar", "background-image" );
-      result.separatorBorder = tv.getCssBorder( "ProgressBar-Indicator", "border" );
-      result.indicatorColor = tv.getCssColor( "ProgressBar-Indicator", "background-color" );
-      result.indicatorImage = tv.getCssSizedImage( "ProgressBar-Indicator", "background-image" );
-      result.indicatorGradient = tv.getCssGradient( "ProgressBar-Indicator", "background-image" );
-      result.indicatorOpacity = tv.getCssFloat( "ProgressBar-Indicator", "opacity" );
-      return result;
-    }
-  },
-
-  "scrollbar-blocker" : {
-    style : function( states ) {
-      return {
-        backgroundColor : "black",
-        opacity : 0.2
-      };
-    }
-  }
-,
-
-  "window" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      // padding is only applied on the server, since client area content is
-      // positioned absolutely
-      result.backgroundColor = tv.getCssColor( "Shell", "background-color" );
-      result.backgroundImage = tv.getCssImage( "Shell", "background-image" );
-      result.backgroundGradient = tv.getCssGradient( "Shell", "background-image" );
-      result.border = tv.getCssBorder( "Shell", "border" );
-      result.minWidth = states.rwt_TITLE ? 80 : 5;
-      result.minHeight = states.rwt_TITLE ? 25 : 5;
-      result.opacity = tv.getCssFloat( "Shell", "opacity" );
-      result.shadow = tv.getCssShadow( "Shell", "box-shadow" );
-      result.animation = tv.getCssAnimation( "Shell", "animation" );
-      return result;
-    }
-  },
-
-  "window-captionbar" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {
-        verticalChildrenAlign : "middle"
-      };
-      result.margin = tv.getCssBoxDimensions( "Shell-Titlebar", "margin" );
-      result.padding = tv.getCssBoxDimensions( "Shell-Titlebar", "padding" );
-      result.textColor = tv.getCssColor( "Shell-Titlebar", "color" );
-      result.backgroundColor = tv.getCssColor( "Shell-Titlebar", "background-color" );
-      result.backgroundImage = tv.getCssImage( "Shell-Titlebar", "background-image" );
-      result.backgroundGradient = tv.getCssGradient( "Shell-Titlebar", "background-image" );
-      result.border = tv.getCssBorder( "Shell-Titlebar", "border" );
-      if( states.rwt_TITLE ) {
-        result.minHeight = tv.getCssDimension( "Shell-Titlebar", "height" );
-      } else {
-        result.minHeight = 0;
-      }
-      result.maxHeight = result.minHeight;
-      result.textShadow = tv.getCssShadow( "Shell-Titlebar", "text-shadow" );
-      return result;
-    }
-  },
-
-  "window-resize-frame" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        border : tv.getCssNamedBorder( "shadow" )
-      };
-    }
-  },
-
-  "window-captionbar-icon" : {
-    style : function( states ) {
-      return {
-        marginRight : 2
-      };
-    }
-  },
-
-  "window-captionbar-title" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        cursor : "default",
-        font : tv.getCssFont( "Shell-Titlebar", "font" ),
-        marginRight : 2
-      };
-    }
-  },
-
-  "window-captionbar-minimize-button" : {
-    style : function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      result.icon = tv.getCssImage( "Shell-MinButton", "background-image" );
-      result.margin = tv.getCssBoxDimensions( "Shell-MinButton", "margin" );
-      return result;
-    }
-  },
-
-  "window-captionbar-maximize-button" : {
-    style : function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      result.icon = tv.getCssImage( "Shell-MaxButton", "background-image" );
-      result.margin = tv.getCssBoxDimensions( "Shell-MaxButton", "margin" );
-      return result;
-    }
-  },
-
-  "window-captionbar-restore-button" : {
-    include : "window-captionbar-maximize-button"
-  },
-
-  "window-captionbar-close-button" : {
-    style : function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      result.icon = tv.getCssImage( "Shell-CloseButton", "background-image" );
-      result.margin = tv.getCssBoxDimensions( "Shell-CloseButton", "margin" );
-      return result;
-    }
-  },
-
-  "window-statusbar" : {
-    style : function( states ) {
-      return {};
-    }
-  },
-
-  "window-statusbar-text" : {
-    style : function( states ) {
-      return {};
-    }
-  }
-,
-
-  "spinner" : {
-    style : function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      result.font = tv.getCssFont( "Spinner", "font" );
-      result.textColor = tv.getCssColor( "Spinner", "color" );
-      result.backgroundColor = tv.getCssColor( "Spinner", "background-color" );
-      result.border = tv.getCssBorder( "Spinner", "border" );
-      result.backgroundGradient = tv.getCssGradient( "Spinner", "background-image" );
-      result.shadow = tv.getCssShadow( "Spinner", "box-shadow" );
-      return result;
-    }
-  },
-
-  "spinner-text-field" : {
-    style : function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      // [if] Do not apply top/bottom paddings on the client
-      var cssPadding = tv.getCssBoxDimensions( "Spinner-Field", "padding" );
-      result.paddingRight = cssPadding[ 1 ];
-      result.paddingLeft = cssPadding[ 3 ];
-      result.top = 0;
-      result.left = 0;
-      result.right = 0;
-      result.bottom = 0;
-      result.textShadow = tv.getCssShadow( "Spinner", "text-shadow" );
-      return result;
-    }
-  },
-
-  "spinner-button-up" : {
-    style : function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      var border = tv.getCssBorder( "Spinner-UpButton", "border" );
-      var borderLeft = tv.getCssBorder( "Spinner-UpButton", "border-left" );
-      result.border = tv.mergeBorders( border, null, null, null, borderLeft );
-      result.width = tv.getCssDimension( "Spinner-UpButton", "width" );
-      result.icon = tv.getCssImage( "Spinner-UpButton-Icon", "background-image" );
-      if( result.icon === rwt.theme.ThemeValues.NONE_IMAGE ) {
-        result.icon = tv.getCssImage( "Spinner-UpButton", "background-image" );
-      } else {
-        result.backgroundImage = tv.getCssImage( "Spinner-UpButton", "background-image" );
-      }
-      result.backgroundGradient = tv.getCssGradient( "Spinner-UpButton", "background-image" );
-      result.backgroundColor = tv.getCssColor( "Spinner-UpButton", "background-color" );
-      result.cursor = tv.getCssCursor( "Spinner-UpButton", "cursor" );
-      return result;
-    }
-  },
-
-  "spinner-button-down" : {
-    style : function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      var border = tv.getCssBorder( "Spinner-DownButton", "border" );
-      var borderLeft = tv.getCssBorder( "Spinner-DownButton", "border-left" );
-      result.border = tv.mergeBorders( border, null, null, null, borderLeft );
-      result.width = tv.getCssDimension( "Spinner-DownButton", "width" );
-      result.icon = tv.getCssImage( "Spinner-DownButton-Icon", "background-image" );
-      if( result.icon === rwt.theme.ThemeValues.NONE_IMAGE ) {
-        result.icon = tv.getCssImage( "Spinner-DownButton", "background-image" );
-      } else {
-        result.backgroundImage = tv.getCssImage( "Spinner-DownButton", "background-image" );
-      }
-      result.backgroundGradient = tv.getCssGradient( "Spinner-DownButton", "background-image" );
-      result.backgroundColor = tv.getCssColor( "Spinner-DownButton", "background-color" );
-      result.cursor = tv.getCssCursor( "Spinner-DownButton", "cursor" );
-      return result;
-    }
-  }
-,
-
-  "tab-view" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.textColor = tv.getCssColor( "*", "color" );
-      result.font = tv.getCssFont( "TabFolder", "font" );
-      result.spacing = -1;
-      result.border = tv.getCssBorder( "TabFolder", "border" );
-      return result;
-    }
-  },
-
-  "tab-view-bar" : {
-    style : function( states ) {
-      return {
-        height : "auto"
-      };
-    }
-  },
-
-  "tab-view-pane" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.overflow = "hidden";
-      result.backgroundColor = tv.getCssColor( "*", "background-color" );
-      result.border = tv.getCssBorder( "TabFolder-ContentContainer", "border" );
-      return result;
-    }
-  },
-
-  "tab-view-page" : {
-//          style : function( states ) {
-//            return {
-// TODO [rst] disappeared in qx 0.7
-//              top : 0,
-//              right : 0,
-//              bottom : 0,
-//              left : 0
-//            };
-//          }
-  },
-
-  "tab-view-button" : {
-    include : "atom",
-
-    style : function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      var borderColor = tv.getCssNamedColor( "thinborder" );
-      var top_color = tv.getCssColor( "TabItem", "border-top-color" );
-      var bottom_color = tv.getCssColor( "TabItem", "border-bottom-color" );
-      var checkedColorTop = [ top_color, borderColor, borderColor, borderColor ];
-      var checkedColorBottom = [ borderColor, borderColor, bottom_color, borderColor ];
-      if( states.checked ) {
-        result.zIndex = 1; // TODO [rst] Doesn't this interfere with our z-order?
-        if( states.barTop ) {
-          result.border = new rwt.html.Border( [ 3, 1, 0, 1 ], "solid", checkedColorTop );
-        } else {
-          result.border = new rwt.html.Border( [ 0, 1, 3, 1 ], "solid", checkedColorBottom );
-        }
-        result.margin = [ 0, -1, 0, -2 ];
-        if( states.firstChild ) {
-          result.marginLeft = 0;
-        }
-      } else {
-        result.zIndex = 0; // TODO [rst] Doesn't this interfere with our z-order?
-        result.marginRight = 1;
-        result.marginLeft = 0;
-        if( states.barTop ) {
-          result.border = new rwt.html.Border( [ 1, 1, 0, 1 ], "solid", borderColor );
-          result.marginTop = 3;
-          result.marginBottom = 1;
-        } else {
-          result.border = new rwt.html.Border( [ 0, 1, 1, 1 ], "solid", borderColor );
-          result.marginTop = 1;
-          result.marginBottom = 3;
-        }
-      }
-      result.padding = tv.getCssBoxDimensions( "TabItem", "padding" );
-      if( states.checked ) {
-        // Hack to hide the content containder border below the selected tab
-        var containerBorder = tv.getCssBorder( "TabFolder-ContentContainer", "border" );
-        result.paddingBottom = result.padding[ 2 ]  + containerBorder.getWidthTop();
-      }
-      result.backgroundColor = tv.getCssColor( "TabItem", "background-color" );
-      result.backgroundImage = tv.getCssImage( "TabItem", "background-image" );
-      result.backgroundGradient = tv.getCssGradient( "TabItem", "background-image" );
-      result.textShadow = tv.getCssShadow( "TabItem", "text-shadow" );
-      return result;
-    }
-  }
-,
-
-  "table" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        textColor : tv.getCssColor( "Table", "color" ),
-        font : tv.getCssFont( "Table", "font" ),
-        border : tv.getCssBorder( "Table", "border" ),
-        backgroundColor : tv.getCssColor( "Table", "background-color" ),
-        backgroundImage : tv.getCssImage( "Table", "background-image" ),
-        backgroundGradient : tv.getCssGradient( "Table", "background-image" )
-      };
-    }
-  },
-
-  "table-column" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {
-        cursor : "default",
-        spacing : 2,
-        opacity : states.moving ? 0.85 : 1.0
-      };
-      result.padding = tv.getCssBoxDimensions( "TableColumn", "padding" );
-      result.textColor = tv.getCssColor( "TableColumn", "color" );
-      result.font = tv.getCssFont( "TableColumn", "font" );
-      result.backgroundColor = tv.getCssColor( "TableColumn", "background-color" );
-      result.backgroundImage = tv.getCssImage( "TableColumn", "background-image" );
-      result.backgroundGradient = tv.getCssGradient( "TableColumn", "background-image" );
-      var borderColors = [ null, null, null, null ];
-      var borderWidths = [ 0, 0, 0, 0 ];
-      var borderStyles = [ "solid", "solid", "solid", "solid" ];
-      if( !states.dummy ) {
-        var gridLineStates = { "vertical" : true, "header" : true };
-        var tvGrid = new rwt.theme.ThemeValues( gridLineStates );
-        var gridColor = tvGrid.getCssColor( "Table-GridLine", "color" );
-        gridColor = gridColor == "undefined" ? "transparent" : gridColor;
-        borderColors[ 1 ] = gridColor;
-        borderWidths[ 1 ] = 1;
-        if( states.moving ) {
-          borderColors[ 3 ] = gridColor;
-          borderWidths[ 3 ] = 1;
-        }
-      }
-      var borderBottom = tv.getCssBorder( "TableColumn", "border-bottom" );
-      borderWidths[ 2 ] = borderBottom.getWidthBottom();
-      borderStyles[ 2 ] = borderBottom.getStyleBottom();
-      borderColors[ 2 ] = borderBottom.getColorBottom();
-      result.border = new rwt.html.Border( borderWidths, borderStyles, borderColors );
-      result.textShadow = tv.getCssShadow( "TableColumn", "text-shadow" );
-      return result;
-    }
-  },
-
-  "table-column-resizer" : {
-    style : function( states ) {
-      return {
-        width : 3,
-        opacity : 0.3,
-        backgroundColor : "black"
-      };
-    }
-  },
-
-  "table-column-sort-indicator" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.backgroundImage = tv.getCssSizedImage( "TableColumn-SortIndicator", "background-image" );
-      return result;
-    }
-  },
-
-  "table-row" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.background = tv.getCssColor( "TableItem", "background-color" );
-      result.backgroundImage = tv.getCssImage( "TableItem", "background-image" );
-      result.backgroundGradient = tv.getCssGradient( "TableItem", "background-image" );
-      result.foreground = tv.getCssColor( "TableItem", "color" );
-      result.textDecoration = tv.getCssIdentifier( "TableItem", "text-decoration" );
-      result.textShadow = tv.getCssShadow( "TableItem", "text-shadow" );
-      return result;
-    }
-  },
-
-  "table-row-overlay" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.background = tv.getCssColor( "Table-RowOverlay", "background-color" );
-      result.backgroundAlpha = tv.getCssAlpha( "Table-RowOverlay", "background-color" );
-      result.backgroundImage = tv.getCssImage( "Table-RowOverlay", "background-image" );
-      result.backgroundGradient = tv.getCssGradient( "Table-RowOverlay", "background-image" );
-      result.foreground = tv.getCssColor( "Table-RowOverlay", "color" );
-      return result;
-    }
-  },
-
-  "table-row-check-box" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        backgroundImage : tv.getCssImage( "Table-Checkbox", "background-image" )
-      };
-    }
-  },
-
-  "table-gridline-vertical" : {
-    style : function( states ) {
-      var verticalState = { "vertical" : true };
-      var tv = new rwt.theme.ThemeValues( verticalState );
-      var gridColor = tv.getCssColor( "Table-GridLine", "color" );
-      gridColor = gridColor == "undefined" ? "transparent" : gridColor;
-      var result = {};
-      result.border = new rwt.html.Border( [ 0, 0, 0, 1 ], "solid", gridColor );
-      return result;
-    }
-  },
-
-  "table-cell" : {
-    style : function( states ) {
-       var tv = new rwt.theme.ThemeValues( states );
-       var result = {};
-       result.spacing = tv.getCssDimension( "Table-Cell", "spacing" );
-       result.padding = tv.getCssBoxDimensions( "Table-Cell", "padding" );
-       return result;
-    }
-  }
-,
-
-  "text-field" : {
-    style : function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      result.font = tv.getCssFont( "Text", "font" );
-      result.textColor = tv.getCssColor( "Text", "color" );
-      result.backgroundColor = tv.getCssColor( "Text", "background-color" );
-      result.backgroundImage = tv.getCssImage( "Text", "background-image" );
-      result.backgroundRepeat = tv.getCssIdentifier( "Text", "background-repeat" );
-      result.backgroundPosition = tv.getCssIdentifier( "Text", "background-position" );
-      result.backgroundGradient = tv.getCssGradient( "Text", "background-image" );
-      result.border = tv.getCssBorder( "Text", "border" );
-      // [if] Do not apply top/bottom paddings on the client
-      var cssPadding = tv.getCssBoxDimensions( "Text", "padding" );
-      result.paddingRight = cssPadding[ 1 ];
-      result.paddingLeft = cssPadding[ 3 ];
-      result.textShadow = tv.getCssShadow( "Text", "text-shadow" );
-      result.shadow = tv.getCssShadow( "Text", "box-shadow" );
-      return result;
-    }
-  },
-
-  "text-field-icon" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var selector = states.search ? "Text-Search-Icon" : "Text-Cancel-Icon";
-      return {
-        icon : tv.getCssSizedImage( selector, "background-image" ),
-        spacing : tv.getCssDimension( selector, "spacing" )
-      };
-    }
-  },
-
-  "text-field-message" : {
-    style : function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      result.textColor = tv.getCssColor( "Text-Message", "color" );
-      // [if] Do not apply top/bottom paddings on the client
-      var cssPadding = tv.getCssBoxDimensions( "Text", "padding" );
-      result.paddingRight = cssPadding[ 1 ];
-      result.paddingLeft = cssPadding[ 3 ];
-      result.horizontalChildrenAlign = "left";
-      result.textShadow = tv.getCssShadow( "Text-Message", "text-shadow" );
-      return result;
-    }
-  },
-
-  "text-area" : {
-    include : "text-field",
-    style : function( states ) {
-      return {
-        padding : [ 0, 0, 0, 3 ]
-      };
-    }
-  }
-,
-
-  "toolbar" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        font : tv.getCssFont( "ToolBar", "font" ),
-        overflow : "hidden",
-        border : tv.getCssBorder( "ToolBar", "border" ),
-        textColor : tv.getCssColor( "ToolBar", "color" ),
-        backgroundColor : tv.getCssColor( "ToolBar", "background-color" ),
-        backgroundGradient : tv.getCssGradient( "ToolBar", "background-image" ),
-        backgroundImage : tv.getCssImage( "ToolBar", "background-image" ),
-        opacity : tv.getCssFloat( "ToolBar", "opacity" )
-      };
-    }
-  },
-
-  "toolbar-separator" : {
-    style : function( states ) {
-      return {};
-    }
-  },
-
-  "toolbar-separator-line" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = null;
-      if( states.vertical ) {
-        result = {
-          left : 2,
-          height : 2,
-          right : 2,
-          border : tv.getCssNamedBorder( "verticalDivider" )
-        };
-      } else {
-        result = {
-          top : 2,
-          width : 2,
-          bottom : 2,
-          border : tv.getCssNamedBorder( "horizontalDivider" )
-        };
-      }
-      return result;
-    }
-  },
-
-  "toolbar-button" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {
-        cursor : "default",
-        overflow : "hidden",
-        width : "auto",
-        verticalChildrenAlign : "middle"
-      };
-      result.spacing = tv.getCssDimension( "ToolItem", "spacing" );
-      result.animation = tv.getCssAnimation( "ToolItem", "animation" );
-      result.textColor = tv.getCssColor( "ToolItem", "color" );
-      result.textShadow = tv.getCssShadow( "ToolItem", "text-shadow" );
-      result.backgroundColor = tv.getCssColor( "ToolItem", "background-color" );
-      result.opacity = tv.getCssFloat( "ToolItem", "opacity" );
-      result.backgroundImage = tv.getCssImage( "ToolItem", "background-image" );
-      result.backgroundGradient = tv.getCssGradient( "ToolItem", "background-image" );
-      result.border = tv.getCssBorder( "ToolItem", "border" );
-      result.padding = tv.getCssBoxDimensions( "ToolItem", "padding" );
-      result.horizontalChildrenAlign = states.rwt_VERTICAL ? "left" : "center";
-      if( states.dropDown ) {
-        result.dropDownArrow = tv.getCssSizedImage( "ToolItem-DropDownIcon", "background-image" );
-        result.separatorBorder = tv.getCssBorder( "ToolItem-DropDownIcon", "border" );
-      } else {
-        result.dropDownArrow = null;
-        result.separatorBorder = null;
-      }
-      return result;
-    }
-  }
-,
-
-  "tree" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        backgroundColor : tv.getCssColor( "Tree", "background-color" ),
-        textColor : tv.getCssColor( "Tree", "color" ),
-        font : tv.getCssFont( "Tree", "font" ),
-        border : tv.getCssBorder( "Tree", "border" )
-      };
-    }
-  },
-
-  "tree-row" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.background = tv.getCssColor( "TreeItem", "background-color" );
-      result.backgroundImage = tv.getCssImage( "TreeItem", "background-image" );
-      result.backgroundGradient = tv.getCssGradient( "TreeItem", "background-image" );
-      result.foreground = tv.getCssColor( "TreeItem", "color" );
-      result.textDecoration = tv.getCssIdentifier( "TreeItem", "text-decoration" );
-      result.textShadow = tv.getCssShadow( "TreeItem", "text-shadow" );
-      return result;
-    }
-  },
-
-  "tree-row-overlay" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.background = tv.getCssColor( "Tree-RowOverlay", "background-color" );
-      result.backgroundAlpha = tv.getCssAlpha( "Tree-RowOverlay", "background-color" );
-      result.backgroundImage = tv.getCssImage( "Tree-RowOverlay", "background-image" );
-      result.backgroundGradient = tv.getCssGradient( "Tree-RowOverlay", "background-image" );
-      result.foreground = tv.getCssColor( "Tree-RowOverlay", "color" );
-      return result;
-    }
-  },
-
-  "tree-row-check-box" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        backgroundImage : tv.getCssImage( "Tree-Checkbox", "background-image" )
-      };
-    }
-  },
-
-  "tree-row-indent" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        backgroundImage : tv.getCssImage( "Tree-Indent", "background-image" )
-      };
-    }
-  },
-
-  "tree-column" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.cursor = "default";
-      result.spacing = 2;
-      result.textColor = tv.getCssColor( "TreeColumn", "color" );
-      result.font = tv.getCssFont( "TreeColumn", "font" );
-      if( states.footer ) {
-        //result.backgroundColor = "#efefef"; // this would make it "merged" with scrollbars
-        result.backgroundColor = "#dddddd";
-        result.backgroundImage = null;
-        result.backgroundGradient = null;
-      } else {
-        result.backgroundColor = tv.getCssColor( "TreeColumn", "background-color" );
-        result.backgroundImage = tv.getCssImage( "TreeColumn", "background-image" );
-        result.backgroundGradient = tv.getCssGradient( "TreeColumn", "background-image" );
-      }
-      result.opacity = states.moving ? 0.85 : 1.0;
-      result.padding = tv.getCssBoxDimensions( "TreeColumn", "padding" );
-      var borderColors = [ null, null, null, null ];
-      var borderWidths = [ 0, 0, 0, 0 ];
-      var borderStyles = [ "solid", "solid", "solid", "solid" ];
-      if( !states.dummy && !states.footer ) {
-        var gridLineStates = { "vertical" : true, "header" : true };
-        var tvGrid = new rwt.theme.ThemeValues( gridLineStates );
-        var gridColor = tvGrid.getCssColor( "Tree-GridLine", "color" );
-        gridColor = gridColor == "undefined" ? "transparent" : gridColor;
-        borderColors[ 1 ] = gridColor;
-        borderWidths[ 1 ] = 1;
-        if( states.moving ) {
-          borderColors[ 3 ] = gridColor;
-          borderWidths[ 3 ] = 1;
-        }
-      }
-      var borderBottom = tv.getCssBorder( "TreeColumn", "border-bottom" );
-      if( states.footer ) {
-        borderWidths[ 0 ] = borderBottom.getWidthBottom();
-        borderStyles[ 0 ] = "solid";
-        borderColors[ 0 ] = "#000000";
-      } else {
-        borderWidths[ 2 ] = borderBottom.getWidthBottom();
-        borderStyles[ 2 ] = borderBottom.getStyleBottom();
-        borderColors[ 2 ] = borderBottom.getColorBottom();
-      }
-      result.border = new rwt.html.Border( borderWidths, borderStyles, borderColors );
-      result.textShadow = tv.getCssShadow( "TreeColumn", "text-shadow" );
-      return result;
-    }
-  },
-
-  "tree-column-sort-indicator" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.backgroundImage = tv.getCssSizedImage( "TreeColumn-SortIndicator", "background-image" );
-      return result;
-    }
-  },
-
-  "tree-column-chevron" : {
-    style : function( states ) {
-      var result = {};
-      var path = rwt.remote.Server.RESOURCE_PATH + "widget/rap/"
-      if( states.loading ) {
-        result.backgroundImage = [ path + "tree/loading.gif", 16, 16 ];
-      } else {
-        var source = path + "arrows/chevron-";
-        source += states.expanded ? "left" : "right";
-        source += states.mouseover ? "-hover" : "";
-        source += ".png";
-        result.backgroundImage = [ source, 10, 7 ];
-      }
-      return result;
-    }
-  },
-
-  "tree-cell" : {
-    style : function( states ) {
-       var tv = new rwt.theme.ThemeValues( states );
-       var result = {};
-       result.spacing = tv.getCssDimension( "Tree-Cell", "spacing" );
-       result.padding = tv.getCssBoxDimensions( "Tree-Cell", "padding" );
-       return result;
-    }
-  }
-,
-
-  "scale" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        border : tv.getCssBorder( "Scale", "border" ),
-        font : tv.getCssFont( "*", "font" ),
-        textColor : tv.getCssColor( "*", "color" ),
-        backgroundColor : tv.getCssColor( "Scale", "background-color" )
-      };
-    }
-  },
-
-  "scale-line" : {
-    include : "image",
-
-    style : function( states ) {
-      var result = {};
-      var path = rwt.remote.Server.RESOURCE_PATH + "widget/rap/scale/";
-      if( states.horizontal ) {
-        result.left = rwt.widgets.Scale.PADDING;
-        result.top = rwt.widgets.Scale.SCALE_LINE_OFFSET;
-        result.source = path + "h_line.gif";
-      } else {
-        result.left = rwt.widgets.Scale.SCALE_LINE_OFFSET;
-        result.top = rwt.widgets.Scale.PADDING;
-        result.source = path + "v_line.gif";
-      }
-      return result;
-    }
-  },
-
-  "scale-thumb" : {
-    include : "atom",
-
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      if( states.horizontal ) {
-        result.left = rwt.widgets.Scale.PADDING;
-        result.top = rwt.widgets.Scale.THUMB_OFFSET;
-        // TODO: make it themable
-        result.width = 11;
-        result.height = 21;
-      } else {
-        result.left = rwt.widgets.Scale.THUMB_OFFSET;
-        result.top = rwt.widgets.Scale.PADDING;
-        // TODO: make it themable
-        result.width = 21;
-        result.height = 11;
-      }
-      // TODO: add themable background-image (gradient)
-      result.border = tv.getCssBorder( "Scale-Thumb", "border" );
-      result.backgroundColor = tv.getCssColor( "Scale-Thumb", "background-color" );
-      return result;
-    }
-  }
-,
-
-  "datetime-date" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.border = tv.getCssBorder( "DateTime", "border" );
-      result.font = tv.getCssFont( "DateTime", "font" );
-      result.textColor = tv.getCssColor( "DateTime", "color" );
-      result.backgroundColor = tv.getCssColor( "DateTime", "background-color" );
-      result.backgroundGradient = tv.getCssGradient( "DateTime", "background-image" );
-      result.textShadow = tv.getCssShadow( "DateTime", "text-shadow" );
-      result.shadow = tv.getCssShadow( "DateTime", "box-shadow" );
-      return result;
-    }
-  },
-
-  "datetime-time" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.border = tv.getCssBorder( "DateTime", "border" );
-      result.font = tv.getCssFont( "DateTime", "font" );
-      result.textColor = tv.getCssColor( "DateTime", "color" );
-      result.backgroundColor = tv.getCssColor( "DateTime", "background-color" );
-      result.backgroundGradient = tv.getCssGradient( "DateTime", "background-image" );
-      result.textShadow = tv.getCssShadow( "DateTime", "text-shadow" );
-      result.shadow = tv.getCssShadow( "DateTime", "box-shadow" );
-      return result;
-    }
-  },
-
-  "datetime-calendar" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.border = tv.getCssBorder( "DateTime", "border" );
-      result.font = tv.getCssFont( "DateTime", "font" );
-      result.textColor = tv.getCssColor( "DateTime", "color" );
-      result.backgroundColor = tv.getCssColor( "DateTime", "background-color" );
-      result.textShadow = tv.getCssShadow( "DateTime", "text-shadow" );
-      return result;
-    }
-  },
-
-  "datetime-field" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {
-        cursor : "default",
-        textAlign : "center",
-        padding : [ 0, 3 ]
-      };
-      if( !states.disabled ) {
-        result.textColor = tv.getCssColor( "DateTime-Field", "color" );
-        result.backgroundColor = tv.getCssColor( "DateTime-Field", "background-color" );
-      } else {
-        result.textColor = tv.getCssColor( "*", "color" );
-        result.backgroundColor = "undefined";
-      }
-      result.textShadow = tv.getCssShadow( "DateTime-Field", "text-shadow" );
-      return result;
-    }
-  },
-
-  "datetime-separator" : {
-    style : function( states ) {
-      var result = {
-        cursor : "default"
-      };
-      return result;
-    }
-  },
-
-  "datetime-button-up" : {
-    style : function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      var border = tv.getCssBorder( "DateTime-UpButton", "border" );
-      var borderLeft = tv.getCssBorder( "DateTime-UpButton", "border-left" );
-      result.border = tv.mergeBorders( border, null, null, null, borderLeft );
-      result.width = tv.getCssDimension( "DateTime-UpButton", "width" );
-      result.icon = tv.getCssImage( "DateTime-UpButton-Icon",
-                                    "background-image" );
-      if( result.icon === rwt.theme.ThemeValues.NONE_IMAGE ) {
-        result.icon = tv.getCssImage( "DateTime-UpButton", "background-image" );
-      } else {
-        result.backgroundImage = tv.getCssImage( "DateTime-UpButton", "background-image" );
-      }
-      result.backgroundGradient = tv.getCssGradient( "DateTime-UpButton", "background-image" );
-      result.backgroundColor = tv.getCssColor( "DateTime-UpButton", "background-color" );
-      result.cursor = tv.getCssCursor( "DateTime-UpButton", "cursor" );
-      return result;
-    }
-  },
-
-  "datetime-button-down" : {
-    style : function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      var border = tv.getCssBorder( "DateTime-DownButton", "border" );
-      var borderLeft = tv.getCssBorder( "DateTime-DownButton", "border-left" );
-      result.border = tv.mergeBorders( border, null, null, null, borderLeft );
-      result.width = tv.getCssDimension( "DateTime-DownButton", "width" );
-      result.icon = tv.getCssImage( "DateTime-DownButton-Icon", "background-image" );
-      if( result.icon === rwt.theme.ThemeValues.NONE_IMAGE ) {
-        result.icon = tv.getCssImage( "DateTime-DownButton", "background-image" );
-      } else {
-        result.backgroundImage = tv.getCssImage( "DateTime-DownButton", "background-image" );
-      }
-      result.backgroundGradient = tv.getCssGradient( "DateTime-DownButton", "background-image" );
-      result.backgroundColor = tv.getCssColor( "DateTime-DownButton", "background-color" );
-      result.cursor = tv.getCssCursor( "DateTime-DownButton", "cursor" );
-      return result;
-    }
-  },
-
-  "datetime-drop-down-button" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      var border = tv.getCssBorder( "DateTime-DropDownButton", "border" );
-      var borderLeft = tv.getCssBorder( "DateTime-DropDownButton", "border-left" );
-      result.border = tv.mergeBorders( border, null, null, null, borderLeft );
-      result.icon = tv.getCssImage( "DateTime-DropDownButton-Icon", "background-image" );
-      if( result.icon === rwt.theme.ThemeValues.NONE_IMAGE ) {
-        result.icon = tv.getCssImage( "DateTime-DropDownButton", "background-image" );
-      } else {
-        result.backgroundImage = tv.getCssImage( "DateTime-DropDownButton", "background-image" );
-      }
-      result.backgroundGradient = tv.getCssGradient( "DateTime-DropDownButton", "background-image" );
-      result.backgroundColor = tv.getCssColor( "DateTime-DropDownButton", "background-color" );
-      result.cursor = tv.getCssCursor( "DateTime-DropDownButton", "cursor" );
-      return result;
-    }
-  },
-
-  "datetime-drop-down-calendar" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.border = tv.getCssBorder( "DateTime-DropDownCalendar", "border" );
-      result.backgroundColor = tv.getCssColor( "DateTime", "background-color" );
-      return result;
-    }
-  },
-
-  //------------------------------------------------------------------------
-  // Calendar
-
-  "calendar-navBar" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        border : tv.getCssBorder( "DateTime-Calendar-Navbar", "border" ),
-        backgroundColor : tv.getCssColor( "DateTime-Calendar-Navbar", "background-color" ),
-        backgroundImage : tv.getCssImage( "DateTime-Calendar-Navbar", "background-image" ),
-        backgroundGradient : tv.getCssGradient( "DateTime-Calendar-Navbar", "background-image" ),
-        padding : [ 4, 4, 4, 4 ]
-      };
-    }
-  },
-
-  "calendar-toolbar-button" : {
-    style : function( states ) {
-      var result = {
-        spacing : 4,
-        width : 16,
-        height : 16,
-        clipWidth : 16,
-        clipHeight : 16,
-        verticalChildrenAlign : "middle"
-      };
-      if (states.pressed || states.checked || states.abandoned) {
-        result.padding = [ 2, 0, 0, 2 ];
-      } else {
-        result.padding = 2;
-      }
-      return result;
-    }
-  },
-
-  "calendar-toolbar-previous-year-button" : {
-    include: "calendar-toolbar-button",
-
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        icon : tv.getCssImage( "DateTime-Calendar-PreviousYearButton", "background-image" ),
-        cursor : tv.getCssCursor( "DateTime-Calendar-PreviousYearButton", "cursor" )
-      };
-    }
-  },
-
-  "calendar-toolbar-previous-month-button" : {
-    include: "calendar-toolbar-button",
-
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        icon : tv.getCssImage( "DateTime-Calendar-PreviousMonthButton", "background-image" ),
-        cursor : tv.getCssCursor( "DateTime-Calendar-PreviousMonthButton", "cursor" )
-      };
-    }
-  },
-
-  "calendar-toolbar-next-month-button" : {
-    include: "calendar-toolbar-button",
-
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        icon : tv.getCssImage( "DateTime-Calendar-NextMonthButton", "background-image" ),
-        cursor : tv.getCssCursor( "DateTime-Calendar-NextMonthButton", "cursor" )
-      };
-    }
-  },
-
-  "calendar-toolbar-next-year-button" : {
-    include: "calendar-toolbar-button",
-
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        icon : tv.getCssImage( "DateTime-Calendar-NextYearButton", "background-image" ),
-        cursor : tv.getCssCursor( "DateTime-Calendar-NextYearButton", "cursor" )
-      };
-    }
-  },
-
-  "calendar-monthyear" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        font : tv.getCssFont( "DateTime-Calendar-Navbar", "font" ),
-        textAlign : "center",
-        textColor : tv.getCssColor( "DateTime-Calendar-Navbar", "color" ),
-        textShadow : tv.getCssShadow( "DateTime-Calendar-Navbar", "text-shadow" ),
-        verticalAlign : "middle",
-        cursor : "default"
-      };
-    }
-  },
-
-  "calendar-datepane" : {
-    style : function( states ) {
-      return {
-        backgroundColor : "undefined"
-      };
-    }
-  },
-
-  "calendar-week" : {
-    style : function( states ) {
-      var border;
-      if( states.header ) {
-        border = new rwt.html.Border( [ 0, 1, 1, 0 ], "solid", "gray" );
-      } else {
-        border = new rwt.html.Border( [ 0, 1, 0, 0 ], "solid", "gray" );
-      }
-      return {
-        textAlign : "center",
-        verticalAlign : "middle",
-        border : border
-      };
-    }
-  },
-
-  "calendar-weekday" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var border = new rwt.html.Border( [ 0, 0, 1, 0 ], "solid", "gray" );
-      // FIXME: [if] Bigger font size leads to text cutoff
-      var font = tv.getCssFont( "DateTime", "font" );
-      var smallFont = rwt.html.Font.fromString( font.toCss() );
-      smallFont.setSize( 11 );
-      return {
-        font : smallFont,
-        border : border,
-        textAlign : "center"
-      };
-    }
-  },
-
-  "calendar-day" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {
-        textAlign : "center",
-        verticalAlign : "middle"
-      };
-      if( !states.disabled ) {
-        result.textColor = tv.getCssColor( "DateTime-Calendar-Day", "color" );
-        result.backgroundColor = tv.getCssColor( "DateTime-Calendar-Day", "background-color" );
-      } else {
-        result.textColor = tv.getCssColor( "*", "color" );
-        result.backgroundColor = "undefined";
-      }
-      result.textShadow = tv.getCssShadow( "DateTime-Calendar-Day", "text-shadow" );
-      var borderColor = states.disabled ? tv.getCssColor( "*", "color" ) : "red";
-      var border = new rwt.html.Border( 1, "solid", borderColor );
-      result.border = states.today ? border : "undefined";
-      return result;
-    }
-  }
-,
-
-  "expand-bar" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.border = tv.getCssBorder( "ExpandBar", "border" );
-      result.font = tv.getCssFont( "ExpandBar", "font" );
-      result.textColor = tv.getCssColor( "ExpandBar", "color" );
-      return result;
-    }
-  },
-
-  "expand-item" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        overflow : "hidden",
-        border : tv.getCssBorder( "ExpandItem", "border" )
-      };
-    }
-  },
-
-  "expand-item-chevron-button" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.width = 16;
-      result.height = 16;
-      result.clipWidth = 16;
-      result.clipHeight = 16;
-      result.right = 4;
-      result.source = tv.getCssImage( "ExpandItem-Button", "background-image" );
-      result.cursor = tv.getCssCursor( "ExpandItem-Header", "cursor" );
-      return result;
-    }
-  },
-
-  "expand-item-header" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.top = 0;
-      result.left = 0;
-      result.width = "100%";
-      result.horizontalChildrenAlign =  "left";
-      result.verticalChildrenAlign = "middle";
-      result.paddingLeft = 4;
-      result.paddingRight = 24;
-      result.border = tv.getCssBorder( "ExpandItem-Header", "border" );
-      result.backgroundColor = tv.getCssColor( "ExpandItem-Header", "background-color" );
-      result.cursor = tv.getCssCursor( "ExpandItem-Header", "cursor" );
-      result.backgroundImage = tv.getCssImage( "ExpandItem-Header", "background-image" );
-      result.backgroundGradient = tv.getCssGradient( "ExpandItem-Header", "background-image" );
-      result.textShadow = tv.getCssShadow( "ExpandItem-Header", "text-shadow" );
-      return result;
-    }
-  }
-,
-
-  "sash" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        backgroundColor : tv.getCssColor( "Sash", "background-color" ),
-        backgroundImage : tv.getCssImage( "Sash", "background-image" ),
-        border : tv.getCssBorder( "Sash", "border" ),
-        cursor : states.disabled ? "undefined" : states.horizontal ? "row-resize" : "col-resize"
-      };
-    }
-  },
-
-  "sash-slider" : {
-    style : function( states ) {
-      return {
-        zIndex : 1e7,
-        opacity : 0.3,
-        backgroundColor : "black"
-      };
-    }
-  },
-
-  "sash-handle" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.backgroundImage = tv.getCssImage( "Sash-Handle", "background-image" );
-      result.backgroundGradient = tv.getCssGradient( "Sash-Handle", "background-image" );
-      result.backgroundRepeat = "no-repeat";
-      return result;
-    }
-  }
-,
-
-  "slider" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        border : tv.getCssBorder( "Slider", "border" ),
-        font : tv.getCssFont( "*", "font" ),
-        textColor : tv.getCssColor( "*", "color" ),
-        backgroundColor : tv.getCssColor( "Slider", "background-color" )
-      };
-    }
-  },
-
-  "slider-thumb" : {
-    include : "atom",
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.backgroundColor = tv.getCssColor( "Slider-Thumb", "background-color" );
-      result.border = tv.getCssBorder( "Slider-Thumb", "border" );
-      result.backgroundImage = tv.getCssImage( "Slider-Thumb", "background-image" );
-      result.backgroundGradient = tv.getCssGradient( "Slider-Thumb", "background-image" );
-      return result;
-    }
-  },
-
-  "slider-min-button" : {
-    include : "atom",
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.font = tv.getCssFont( "Button", "font" );
-      result.textColor = tv.getCssColor( "Button", "color" );
-      result.spacing = tv.getCssDimension( "Button", "spacing" );
-      result.padding = tv.getCssBoxDimensions( "Slider-DownButton", "padding" );
-      result.backgroundColor = tv.getCssColor( "Slider-DownButton", "background-color" );
-      result.icon = tv.getCssSizedImage( "Slider-DownButton-Icon", "background-image" );
-      if( result.icon === rwt.theme.ThemeValues.NONE_IMAGE ) {
-        result.icon = tv.getCssSizedImage( "Slider-DownButton", "background-image" );
-      } else {
-        result.backgroundImage = tv.getCssImage( "Slider-DownButton", "background-image" );
-      }
-      result.backgroundGradient = tv.getCssGradient( "Slider-DownButton", "background-image" );
-      result.border = tv.getCssBorder( "Slider-DownButton", "border" );
-      if( states[ "rwt_HORIZONTAL" ] ){
-        result.width = 16;
-      } else {
-        result.height = 16;
-      }
-      result.cursor = tv.getCssCursor( "Slider-DownButton", "cursor" );
-      return result;
-    }
-  },
-
-  "slider-max-button" : {
-    include : "atom",
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.font = tv.getCssFont( "Button", "font" );
-      result.textColor = tv.getCssColor( "Button", "color" );
-      result.spacing = tv.getCssDimension( "Button", "spacing" );
-      result.padding = tv.getCssBoxDimensions( "Slider-UpButton", "padding" );
-      result.backgroundColor = tv.getCssColor( "Slider-UpButton", "background-color" );
-      result.icon = tv.getCssSizedImage( "Slider-UpButton-Icon", "background-image" );
-      if( result.icon === rwt.theme.ThemeValues.NONE_IMAGE ) {
-        result.icon = tv.getCssSizedImage( "Slider-UpButton", "background-image" );
-      } else {
-        result.backgroundImage = tv.getCssImage( "Slider-UpButton", "background-image" );
-      }
-      result.backgroundGradient = tv.getCssGradient( "Slider-UpButton", "background-image" );
-      result.border = tv.getCssBorder( "Slider-UpButton", "border" );
-      if( states[ "rwt_HORIZONTAL" ] ) {
-        result.width = 16;
-      } else {
-        result.height = 16;
-      }
-      result.cursor = tv.getCssCursor( "Slider-UpButton", "cursor" );
-      return result;
-    }
-  }
-,
-
-  "tool-tip" : {
-    include : "popup",
-
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.width = "auto";
-      result.height = "auto";
-      result.minWidth = 36;
-      result.minHeight = 36;
-      result.cursor = tv.getCssCursor( "ToolTip", "cursor" );
-      result.font = tv.getCssFont( "ToolTip", "font" );
-      result.textColor = tv.getCssColor( "ToolTip", "color" );
-      result.padding = tv.getCssBoxDimensions( "ToolTip", "padding" );
-      result.border = tv.getCssBorder( "ToolTip", "border" );
-      result.backgroundColor = tv.getCssColor( "ToolTip", "background-color" );
-      result.backgroundImage = tv.getCssImage( "ToolTip", "background-image" );
-      result.backgroundGradient = tv.getCssGradient( "ToolTip", "background-image" );
-      result.animation = tv.getCssAnimation( "ToolTip", "animation" );
-      result.opacity = tv.getCssFloat( "ToolTip", "opacity" );
-      result.shadow = tv.getCssShadow( "ToolTip", "box-shadow" );
-      return result;
-    }
-  },
-
-  "tool-tip-image" : {
-    include: "image",
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        source : tv.getCssImage( "ToolTip-Image", "background-image" )
-      };
-    }
-  },
-
-  "tool-tip-text" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {
-        font : tv.getCssFont( "ToolTip-Text", "font" ),
-        textColor : tv.getCssColor( "ToolTip-Text", "color" ),
-        textShadow : tv.getCssShadow( "ToolTip-Text", "text-shadow" )
-      };
-      return result;
-    }
-  },
-
-  "tool-tip-message" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {
-        font : tv.getCssFont( "ToolTip-Message", "font" ),
-        textColor : tv.getCssColor( "ToolTip-Message", "color" ),
-        textShadow : tv.getCssShadow( "ToolTip-Message", "text-shadow" )
-      };
-      return result;
-    }
-  }
-,
-
-  "ccombo" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.border = tv.getCssBorder( "CCombo", "border" );
-      result.backgroundColor = tv.getCssColor( "CCombo", "background-color" );
-      result.backgroundGradient = tv.getCssGradient( "CCombo", "background-image" );
-      result.textColor = tv.getCssColor( "CCombo", "color" );
-      result.font = tv.getCssFont( "CCombo", "font" );
-      result.shadow = tv.getCssShadow( "CCombo", "box-shadow" );
-      return result;
-    }
-  },
-
-  "ccombo-list" : {
-    include : "list",
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.border = tv.getCssBorder( "CCombo-List", "border" );
-      result.textColor = tv.getCssColor( "CCombo", "color" );
-      result.font = tv.getCssFont( "CCombo", "font" );
-      result.backgroundColor = tv.getCssColor( "CCombo", "background-color" );
-      result.shadow = tv.getCssShadow( "CCombo-List", "box-shadow" );
-      result.textShadow = tv.getCssShadow( "CCombo", "text-shadow" );
-      return result;
-    }
-  },
-
-  "ccombo-field" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.font = tv.getCssFont( "CCombo", "font" );
-      // [if] Do not apply top/bottom paddings on the client
-      var cssPadding = tv.getCssBoxDimensions( "CCombo-Field", "padding" );
-      result.paddingRight = cssPadding[ 1 ];
-      result.paddingLeft = cssPadding[ 3 ];
-      result.width = null;
-      result.height = null;
-      result.left = 0;
-      result.right = tv.getCssDimension( "CCombo-Button", "width" );
-      result.top = 0;
-      result.bottom = 0;
-      result.textColor = tv.getCssColor( "CCombo", "color" );
-      result.textShadow = tv.getCssShadow( "CCombo", "text-shadow" );
-      return result;
-    }
-  },
-
-  "ccombo-button" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      var border = tv.getCssBorder( "CCombo-Button", "border" );
-      var borderLeft = tv.getCssBorder( "CCombo-Button", "border-left" );
-      result.border = tv.mergeBorders( border, null, null, null, borderLeft );
-      result.width = tv.getCssDimension( "CCombo-Button", "width" );
-      result.height = null;
-      result.top = 0;
-      result.bottom = 0;
-      result.right = 0;
-      result.icon = tv.getCssImage( "CCombo-Button-Icon", "background-image" );
-      if( result.icon === rwt.theme.ThemeValues.NONE_IMAGE ) {
-        result.icon = tv.getCssImage( "CCombo-Button", "background-image" );
-      } else {
-        result.backgroundImage = tv.getCssImage( "CCombo-Button", "background-image" );
-      }
-      result.backgroundGradient = tv.getCssGradient( "CCombo-Button", "background-image" );
-      // TODO [rst] rather use button.bgcolor?
-      result.backgroundColor = tv.getCssColor( "CCombo-Button", "background-color" );
-      result.cursor = tv.getCssCursor( "CCombo-Button", "cursor" );
-      return result;
-    }
-  }
-,
-
-  "clabel" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.textColor = tv.getCssColor( "CLabel", "color" );
-      result.backgroundColor = tv.getCssColor( "CLabel", "background-color" );
-      result.font = tv.getCssFont( "CLabel", "font" );
-      if( states.rwt_SHADOW_IN ) {
-        result.border = tv.getCssNamedBorder( "thinInset" );
-      } else if( states.rwt_SHADOW_OUT ) {
-        result.border = tv.getCssNamedBorder( "thinOutset" );
-      } else {
-        result.border = tv.getCssBorder( "CLabel", "border" );
-      }
-      result.backgroundImage = tv.getCssImage( "CLabel", "background-image" );
-      result.backgroundRepeat = tv.getCssIdentifier( "CLabel", "background-repeat" );
-      result.backgroundPosition = tv.getCssIdentifier( "CLabel", "background-position" );
-      result.backgroundGradient = tv.getCssGradient( "CLabel", "background-image" );
-      result.cursor = tv.getCssCursor( "CLabel", "cursor" );
-      result.padding = tv.getCssBoxDimensions( "CLabel", "padding" );
-      result.spacing = tv.getCssDimension( "CLabel", "spacing" );
-      result.opacity = tv.getCssFloat( "CLabel", "opacity" );
-      result.textShadow = tv.getCssShadow( "CLabel", "text-shadow" );
-      return result;
-    }
-  }
-,
-
-  "browser" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        border : tv.getCssBorder( "Browser", "border" ),
-        backgroundColor : "white"
-      };
-    }
-  }
-  ,
-
-  "scrolledcomposite" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      if( states.rwt_BORDER ) {
-        result.border = tv.getCssNamedBorder( "shadow" );
-      } else {
-        result.border = tv.getCssBorder( "*", "border" );
-      }
-      return result;
-    }
-  }
-,
-
-  "scrollbar" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {
-        border : tv.getCssBorder( "ScrollBar", "border" ),
-        backgroundColor : tv.getCssColor( "ScrollBar", "background-color" ),
-        backgroundImage : tv.getCssImage( "ScrollBar", "background-image" ),
-        backgroundGradient : tv.getCssGradient( "ScrollBar", "background-image" )
-      };
-      var width = tv.getCssDimension( "ScrollBar", "width" );
-      if( states[ "rwt_HORIZONTAL" ] ) {
-        result.height = width;
-      } else {
-        result.width = width;
-      }
-      return result;
-    }
-  },
-
-  "scrollbar-thumb" : {
-    include : "atom",
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.backgroundColor = tv.getCssColor( "ScrollBar-Thumb", "background-color" );
-      result.border = tv.getCssBorder( "ScrollBar-Thumb", "border" );
-      result.backgroundImage = tv.getCssImage( "ScrollBar-Thumb", "background-image" );
-      result.backgroundGradient = tv.getCssGradient( "ScrollBar-Thumb", "background-image" );
-      result.icon = tv.getCssSizedImage( "ScrollBar-Thumb-Icon", "background-image" );
-      return result;
-    }
-  },
-
-  "scrollbar-min-button" : {
-    include : "atom",
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.spacing = tv.getCssDimension( "Button", "spacing" );
-      result.padding = tv.getCssBoxDimensions( "Button", "padding" );
-      result.backgroundColor = tv.getCssColor( "ScrollBar-DownButton", "background-color" );
-      result.icon = tv.getCssSizedImage( "ScrollBar-DownButton-Icon", "background-image" );
-      if( result.icon === rwt.theme.ThemeValues.NONE_IMAGE ) {
-        result.icon = tv.getCssSizedImage( "ScrollBar-DownButton", "background-image" );
-      } else {
-        result.backgroundImage = tv.getCssImage( "ScrollBar-DownButton", "background-image" );
-      }
-      result.backgroundGradient = tv.getCssGradient( "ScrollBar-DownButton", "background-image" );
-      result.border = tv.getCssBorder( "ScrollBar-DownButton", "border" );
-      var width = tv.getCssDimension( "ScrollBar", "width" );
-      if( states[ "rwt_HORIZONTAL" ] ){
-        result.width = width;
-      } else {
-        result.height = width;
-      }
-      result.cursor = tv.getCssCursor( "ScrollBar-DownButton", "cursor" );
-      return result;
-    }
-  },
-
-  "scrollbar-max-button" : {
-    include : "atom",
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      var result = {};
-      result.font = tv.getCssFont( "Button", "font" );
-      result.textColor = tv.getCssColor( "Button", "color" );
-      result.spacing = tv.getCssDimension( "Button", "spacing" );
-      result.padding = tv.getCssBoxDimensions( "Button", "padding" );
-      result.backgroundColor = tv.getCssColor( "ScrollBar-UpButton", "background-color" );
-      result.icon = tv.getCssSizedImage( "ScrollBar-UpButton-Icon", "background-image" );
-      if( result.icon === rwt.theme.ThemeValues.NONE_IMAGE ) {
-        result.icon = tv.getCssSizedImage( "ScrollBar-UpButton", "background-image" );
-      } else {
-        result.backgroundImage = tv.getCssImage( "ScrollBar-UpButton", "background-image" );
-      }
-      result.backgroundGradient = tv.getCssGradient( "ScrollBar-UpButton", "background-image" );
-      result.border = tv.getCssBorder( "ScrollBar-UpButton", "border" );
-      var width = tv.getCssDimension( "ScrollBar", "width" );
-      if( states[ "rwt_HORIZONTAL" ] ) {
-        result.width = width;
-      } else {
-        result.height = width;
-      }
-      result.cursor = tv.getCssCursor( "ScrollBar-UpButton", "cursor" );
-      return result;
-    }
-  }
-,
-
- "file-upload" : {
-    include : "atom",
- 
-    style : function( states ) {
-      var result = {};
-      var tv = new rwt.theme.ThemeValues( states );
-      result.font = tv.getCssFont( "FileUpload", "font" );
-      result.textColor = tv.getCssColor( "FileUpload", "color" );
-      result.backgroundColor = tv.getCssColor( "FileUpload", "background-color" );
-      result.backgroundImage = tv.getCssImage( "FileUpload", "background-image" );
-      result.backgroundRepeat = tv.getCssIdentifier( "FileUpload", "background-repeat" );
-      result.backgroundPosition = tv.getCssIdentifier( "FileUpload", "background-position" );
-      result.backgroundGradient = tv.getCssGradient( "FileUpload", "background-image" );
-      result.border = tv.getCssBorder( "FileUpload", "border" );
-      result.spacing = tv.getCssDimension( "FileUpload", "spacing" );
-      result.padding = tv.getCssBoxDimensions( "FileUpload", "padding" );
-      result.cursor = tv.getCssCursor( "FileUpload", "cursor" );
-      result.opacity = tv.getCssFloat( "FileUpload", "opacity" );
-      result.textShadow = tv.getCssShadow( "FileUpload", "text-shadow" );
-      result.animation = tv.getCssAnimation( "FileUpload", "animation" );
-      return result;
-    }
-  }
-  ,
-
-  "hyperlink" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        font: tv.getCssFont( "*", "font" ),
-        cursor : states.disabled ? "default" : "pointer",
-        spacing : 4,
-        width : "auto",
-        height : "auto",
-        horizontalChildrenAlign : "left",
-        verticalChildrenAlign : "middle"
-      }
-    }
-  },
-
-  "hyperlink-label" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        textColor : states.disabled
-                  ? tv.getCssColor( "*", "color" )
-                  : "undefined",
-        cursor : states.disabled ? "default" : "pointer"
-      }
-    }
-  }
-,
-
-  "formtext" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        textColor       : tv.getCssColor( "FormText", "color" ),
-        backgroundColor : tv.getCssColor( "FormText", "background-color" ),
-        font            : tv.getCssFont( "FormText", "font" ),
-        border          : tv.getCssBorder( "FormText", "border" )
-      }
-    }
-  },
-
-  "formtext-text" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        cursor          : "default"
-      }
-    }
-  },
-
-  "formtext-image" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-      }
-    }
-  },
-
-  "formtext-bullet" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-      }
-    }
-  },
-
-  "formtext-hyperlink" : {
-    style : function( states ) {
-      var tv = new rwt.theme.ThemeValues( states );
-      return {
-        cursor          : "pointer"
-      }
-    }
-  }
-
-  }
-} );
-
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/rap-rwt.theme.Custom_5686b46e.json b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/rap-rwt.theme.Custom_5686b46e.json
deleted file mode 100644
index d1649f6..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/rap-rwt.theme.Custom_5686b46e.json
+++ /dev/null
@@ -1 +0,0 @@
-{"values":{"colors":{"3ff98c68":[167,166,170,1],"4004dc1c":[255,255,255,1],"3ff53320":[133,135,140,1],"40006240":[220,223,228,1],"3ffa2a74":[172,168,153,1],"400457b0":[254,200,60,1],"3fed9ae8":[74,74,74,1],"ffffffff":"undefined","40021658":[233,243,210,1],"3ffeb15c":[207,207,207,1],"3f0e249a":[128,128,128,0.3],"3ff30d5c":[112,198,243,1],"3ffe4eb0":[204,204,204,1],"3fed9854":[73,95,21,1],"3fec13a8":[62,64,66,1],"40047970":[252,252,252,1],"3ff92b10":[164,164,164,1],"3fe41900":[0,0,0,1],"3ff7c220":[151,199,44,1],"3fed1e38":[70,74,78,1],"40024a4c":[235,235,235,1],"40007dd4":[221,221,221,1],"3ff73db4":[149,149,149,1],"3ff73bac":[147,193,43,1],"3ffa5abc":[171,224,51,1],"40035180":[243,243,244,1],"3ff112f4":[101,101,101,1],"3fec3b58":[59,143,194,1],"3fe4b0f4":[0,89,165,1],"40031d8c":[241,251,219,1],"3ff6b9d4":[143,190,41,1],"3fe4aeec":[0,88,159,1],"3ffd1540":[203,32,32,1],"3ff9f068":[170,170,170,1],"3ff3d584":[121,150,165,1],"3fe4f000":[0,128,192,1],"3ff7c144":[153,153,153,1],"400034dc":[218,233,247,1],"3ff133d8":[102,102,102,1],"4003f66c":[248,248,255,1],"40009eb8":[222,222,222,1],"3ffed240":[208,208,208,1],"3fff1408":[210,210,210,1],"3ff48b00":[128,128,128,1],"3ffcc400":[192,192,192,1],"3fe474a4":[0,51,153,1]},"images":{"dadc0503.png":[32,32],"fe40e850.png":[32,32],"89b0dad4.png":[32,32],"fea3fec0.png":[32,32],"42378b7e.png":[1,1600],"d0d699cc.png":[14,11],"9b457764.png":[14,11],"a58c3797.png":[14,11],"f9b67789.png":[14,11],"3f63f168.png":[20,20],"5525f68c.png":[20,20],"46c15c8d.png":[20,20],"8e927efd.png":[20,20],"7c7acb13.png":[8,8],"697d1ede.png":[8,8],"fe88b7d7.png":[8,8],"a36ad05a.png":[8,8],"91f761d1.png":[15,15],"96610370.png":[15,15],"a7a20297.png":[15,15],"4a542b6d.png":[15,15],"3bad9072.png":[15,15],"7c732bfb.png":[15,15],"5ad536ed.png":[15,15],"be30b3d3.png":[15,15],"4b219dca.png":[15,15],"2ede037a.png":[15,15],"4d43ec79.png":[9,9],"5135da6d.png":[9,9],"c47ac08b.png":[9,9],"175852a9.png":[9,9],"c87d4673.png":[9,6],"80945361.png":[9,6],"689d44d2.png":[10,7],"65054866.png":[10,7],"ff030f0f.gif":[16,7],"8a7aa6f4.gif":[16,5],"a98bc12c.gif":[13,13],"e7e44ccd.png":[19,19],"55afddf7.png":[11,11],"802659c.png":[11,11],"3bc1b40f.png":[11,11],"1ac11829.png":[11,11],"de3d280e.png":[11,11],"c537732e.png":[11,11],"15e0a581.png":[11,11],"484d1dea.png":[11,11],"38325440.png":[11,11],"1932f866.png":[11,11],"669675bb.png":[11,11],"2525a1c4.png":[11,11],"9eddc0e7.png":[11,11],"82638d00.png":[11,11],"3bbaf0cf.png":[9,6],"7c86072d.png":[9,6],"f9b9fbf2.png":[2,19],"fe639e2a.png":[2,19],"85536675.png":[9,5],"c9297456.png":[9,5],"28932128.png":[16,16],"5490d203.gif":[16,16],"541d109a.gif":[2,2],"4c63d54b.png":[7,12],"90e84629.png":[9,6],"cac8be21.png":[11,7],"18938a9d.png":[7,4],"5e607740.png":[7,12],"21bc6434.gif":[7,4],"34777395.png":[15,15],"c2ef0d9b.png":[15,15],"c00e5c5e.png":[15,15],"619fc3dc.png":[15,15],"dcbf5c35.png":[15,15],"be95e0e0.png":[15,15],"d807ea26.png":[7,7],"252f45a6.png":[6,9],"7b90a35a.png":[7,7],"1597b236.png":[6,9],"d3acc3a4.png":[6,7],"99f733cb.png":[6,7],"193a0649.png":[6,7],"d98c3abb.png":[6,7],"a3cefa91.png":[10,7],"a65fa588.png":[10,7],"8fc99d60.png":[10,7],"25db362.png":[10,7],"c3df1af3.png":[16,16],"456d9ca6.png":[16,16],"ae8c2849.png":[16,16],"a351e552.png":[16,16],"1a9f03bf.png":[6,9],"15db4987.png":[6,9],"282bf613.png":[6,9],"dd8098c.png":[6,9],"12dc3365.png":[32,32],"1c99cf1e.png":[32,32],"893ea652.png":[32,32],"c1d64071.png":[8,7],"f8b1f12a.png":[7,8],"e27d1512.png":[6,9],"9753a8ea.png":[9,6],"afa52be2.png":[6,9],"b114ca5.png":[9,6],"80b4cb50.png":[6,9],"453ee3bb.png":[9,6],"30bae239.png":[6,9],"92c0aead.png":[9,6]},"fonts":{"67d9a7ad":{"family":["Segoe UI","Corbel","Calibri","Tahoma","Lucida Sans Unicode"],"size":11,"bold":false,"italic":false},"dee31769":{"family":["Verdana","Lucida Sans","Arial","Helvetica","sans-serif"],"size":12,"bold":false,"italic":false},"c9a2fa1":{"family":["Verdana","Lucida Sans","Arial","Helvetica","sans-serif"],"size":11,"bold":true,"italic":false},"dee311c5":{"family":["Verdana","Lucida Sans","Arial","Helvetica","sans-serif"],"size":11,"bold":false,"italic":false},"c9a3013":{"family":["Verdana","Lucida Sans","Arial","Helvetica","sans-serif"],"size":14,"bold":true,"italic":false}},"borders":{"36a":{"width":0,"style":null,"color":null},"deefd67d":{"width":1,"style":"solid","color":"#abe033"},"dc65e06a":{"width":1,"style":"solid","color":"#a4a4a4"},"e7b1b511":{"width":1,"style":"solid","color":"#ffffff"},"2abfdf6d":{"width":1,"style":"dotted","color":"#b8b8b8"},"dfa628db":{"width":1,"style":"solid","color":"#c1c1c1"},"c411a436":{"width":1,"style":"outset","color":null},"e2677bf1":{"width":1,"style":"solid","color":"#cccccc"},"5fbe2ff":{"width":1,"style":"inset","color":null},"966111e4":{"width":1,"style":"solid","color":"#83a438"},"934c5924":{"width":1,"style":"solid","color":"#69b0df"},"905d45bd":{"width":1,"style":"solid","color":"#3b8fc2"},"92103dff":{"width":2,"style":"solid","color":"#4b4b4b"},"986b78bc":{"width":2,"style":"solid","color":"#99c92c"},"8879b0d1":{"width":1,"style":"solid","color":"#000000"},"9930ecc9":{"width":1,"style":"solid","color":"#8fbe29"},"dc902e9c":{"width":1,"style":"solid","color":"#a7a6aa"},"98585c31":{"width":1,"style":"solid","color":"#999999"},"de1b2d87":{"width":1,"style":"solid","color":"#b4b4b4"}},"boxdims":{"54f1c057":[2,2,2,2],"30813518":[1,3,2,3],"2144df1c":[0,0,0,0],"1051edc5":[5,5,0,0],"8393ccd2":[3,3,3,3],"4bf7d81":[4,5,2,7],"ca2ee18a":[4,4,4,4],"f626d399":[1,1,1,1],"cfda4371":[2,5,2,5],"bcebbb2b":[4,5,4,5],"cdf891ed":[2,2,2,1],"10f669f0":[0,2,2,0],"22349af6":[2,3,2,3],"fd7cdcb2":[0,0,2,2],"e984a487":[1,19,1,1],"b91f19d0":[2,4,2,4],"e4f0f7f3":[8,0,0,0],"3b4c2033":[8,2,2,2],"246fa55c":[0,3,0,4],"6da1e5f0":[1,10,1,10],"6e7d1555":[3,5,3,5],"9360dd65":[0,0,3,3],"1d4ced0f":[5,5,5,5],"2c59dfd6":[0,0,5,5],"b97b7515":[2,0,2,0],"ba0b30ff":[0,3,0,3],"bf9bfec1":[6,6,6,6],"983ad24e":[1,1,0,0],"25c9a3ae":[0,6,0,0],"278f1df7":[0,5,0,0],"6d693c7a":[1,2,1,2],"22c00b72":[0,2,0,0],"1372bd9e":[0,0,2,0],"3017804f":[2,8,3,7],"cd9cfd28":[2,6,2,5],"1e44f46b":[4,3,3,3],"ccce6a5e":[0,2,0,2],"452f77dc":[0,0,0,25],"31b7ceab":[3,3,0,0],"cc06b3d4":[0,10,0,10],"32b347e3":[0,25,0,0],"2e0351c4":[3,2,1,4],"18b84ff4":[3,4,3,4],"3b2fabb7":[2,3,3,3],"88c9c3f9":[2,2,0,0],"654376bb":[2,0,0,2],"aaf82148":[3,0,0,3],"82f3286":[0,3,3,0]},"animations":{"1a8c6849":{"fadeIn":[200,"linear"],"fadeOut":[600,"easeOut"]},"20":{},"2c52244e":{"hoverOut":[500,"easeOut"]},"58d514ea":{"hoverIn":[100,"easeIn"],"hoverOut":[500,"easeOut"]},"c0438311":{"slideIn":[250,"easeOut"],"slideOut":[50,"easeOut"]},"1a72bef3":{"fadeIn":[150,"linear"],"fadeOut":[400,"easeOut"]}},"shadows":{"24cb24f5":[false,3,4,2,0,"#000000",0.3],"306900d":null,"272e1059":[false,3,3,3,0,"#000000",0.4],"2962c9bd":[false,2,2,2,0,"#000000",0.5],"29f72ebd":[false,5,5,3,0,"#000000",0.5],"275f1b59":[false,4,4,2,0,"#000000",0.4]},"gradients":{"d25a7a25":{"percents":[0,52,100],"colors":["#e0e0e0","#e0e0e0","#b0b0b0"],"vertical":true},"a3972397":{"percents":[0,30,70,100],"colors":["#e0e0e0","#f0f0f0","#e0e0e0","#b0b0b0"],"vertical":true},"b94583ef":{"percents":[0,48,52,100],"colors":["#ffffff","#f0f0f0","#e0e0e0","#cccccc"],"vertical":true},"2eb911d6":{"percents":[0,48,52,100],"colors":["#ffffff","#f0f0f0","#e0e0e0","#ffffff"],"vertical":true},"aadae5a7":{"percents":[0,15,100],"colors":["#e2e2e2","#f8f8f8","#fbfbfb"],"vertical":true},"f7088417":{"percents":[0,100],"colors":["#a5a5a5","#858585"],"vertical":true},"68c67848":{"percents":[0,100],"colors":["#aee336","#88bd10"],"vertical":true},"97fa7cde":{"percents":[0,100],"colors":["#e9f3d2","#d9e3c2"],"vertical":true},"c3392633":{"percents":[0,100],"colors":["#595959","#4b4b4b"],"vertical":true},"1c6a842a":{"percents":[0,100],"colors":["#a8dd32","#87b127"],"vertical":true},"7f49586b":{"percents":[0,52,100],"colors":["#ffffff","#e0e0e0","#b0b0b0"],"vertical":true},"ff331b35":{"percents":[0,100],"colors":["#ffffff","#e0e0e0"],"vertical":true},"87f1e70d":{"percents":[0,52,100],"colors":["#b0b0b0","#e0e0e0","#ffffff"],"vertical":true},"a03e8aba":{"percents":[0,100],"colors":["#e0e0e0","#ffffff"],"vertical":true},"3751d55d":{"percents":[0,100],"colors":["#9acd2b","#8fbe29"],"vertical":true},"6979b4fd":{"percents":[0,55,100],"colors":["#ffffff","#e0e0e0","#f0f0f0"],"vertical":true},"5895a802":{"percents":[0,52,100],"colors":["#e0e0e0","#e0e0e0","#b0b0b0"],"vertical":false},"2c3d9652":{"percents":[0,48,52,100],"colors":["#ffffff","#f0f0f0","#e0e0e0","#cccccc"],"vertical":false},"6c14feac":{"percents":[0,100],"colors":["#ffffff","#e4e5f0"],"vertical":true},"b94583ef":{"percents":[0,42,58,100],"colors":["#ffffff","#f0f0f0","#e0e0e0","#cccccc"],"vertical":true},"2c3d9652":{"percents":[0,42,58,100],"colors":["#ffffff","#f0f0f0","#e0e0e0","#cccccc"],"vertical":false},"2eb911d6":{"percents":[0,38,62,100],"colors":["#ffffff","#f0f0f0","#e0e0e0","#ffffff"],"vertical":true},"2762759":{"percents":[0,38,62,100],"colors":["#ffffff","#f0f0f0","#e0e0e0","#ffffff"],"vertical":false}},"cursors":{"5c13d641":"default","e81f3e3d":"pointer"},"dimensions":{"bc":4,"5e":2,"34e":18,"40a":22,"8d":3,"3db":21,"497":25,"0":0,"eb":5,"1d6":10,"2f0":16,"2c1":15,"3ac":20}},"theme":{"Spinner-DownButton":{"background-image":[[[":pressed"],"87f1e70d"],[[],"a03e8aba"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-left":[[[],"36a"]],"border-radius":[[[],"1372bd9e"]],"cursor":[[[],"5c13d641"]],"width":[[[],"34e"]]},"DateTime-DropDownButton":{"background-image":[[[],"b94583ef"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-left":[[[],"36a"]],"border-radius":[[[],"10f669f0"]],"cursor":[[[],"5c13d641"]],"width":[[[],"34e"]]},"CoolBar":{"background-image":[[[],"a505df1b"]]},"TreeColumn":{"color":[[[":disabled"],"3ffeb15c"],[[],"3ff133d8"]],"font":[[[],"dee31769"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4003f66c"]],"background-image":[[[":hover"],"f9b9fbf2.png"],[[],"fe639e2a.png"]],"border-bottom":[[[":hover"],"36a"],[[],"36a"]],"padding":[[[],"6d693c7a"]],"text-shadow":[[[],"306900d"]]},"ScrollBar-UpButton":{"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"de1b2d87"]],"border-radius":[[["[VERTICAL"],"9360dd65"],[["[HORIZONTAL"],"82f3286"]],"background-image":[[[":pressed","[HORIZONTAL"],"d25a7a25"],[[":hover","[HORIZONTAL"],"b94583ef"],[[":pressed","[VERTICAL"],"5895a802"],[[":hover","[VERTICAL"],"2c3d9652"],[["[HORIZONTAL"],"2eb911d6"],[["[VERTICAL"],"2762759"],[[],"a505df1b"]],"cursor":[[[],"5c13d641"]]},"ExpandItem-Button":{"background-image":[[[":expanded",":hover"],"c3df1af3.png"],[[":expanded"],"456d9ca6.png"],[[":hover"],"ae8c2849.png"],[[],"a351e552.png"]]},"Spinner-UpButton":{"background-image":[[[":pressed"],"7f49586b"],[[],"ff331b35"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-left":[[[],"36a"]],"border-radius":[[[],"22c00b72"]],"cursor":[[[],"5c13d641"]],"width":[[[],"34e"]]},"Button-ArrowIcon":{"background-image":[[["[RIGHT"],"4d43ec79.png"],[["[LEFT"],"5135da6d.png"],[["[DOWN"],"c47ac08b.png"],[["[UP"],"175852a9.png"],[[],"a505df1b"]]},"Group":{"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"font":[[[],"dee31769"]],"border":[[[".partBorder"],"36a"],[["[BORDER"],"dc65e06a"],[[],"36a"]]},"Label-SeparatorLine":{"border":[[["[SHADOW_OUT"],"c411a436"],[["[SHADOW_IN"],"5fbe2ff"],[[".partBorder"],"36a"],[[],"dc65e06a"]],"border-radius":[[[],"2144df1c"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"background-image":[[[],"a505df1b"]],"width":[[[],"5e"]]},"Slider-UpButton":{"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"dc65e06a"]],"border-radius":[[["[VERTICAL"],"fd7cdcb2"],[["[HORIZONTAL"],"10f669f0"]],"background-image":[[[":pressed","[VERTICAL"],"5895a802"],[[":pressed","[HORIZONTAL"],"d25a7a25"],[["[VERTICAL"],"2c3d9652"],[["[HORIZONTAL"],"b94583ef"],[[],"a505df1b"]],"cursor":[[[],"5c13d641"]],"padding":[[[],"2144df1c"]]},"DateTime":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"40047970"]],"background-image":[[["[BORDER"],"aadae5a7"],[[],"a505df1b"]],"font":[[[],"dee311c5"]],"border":[[[":focused","[BORDER"],"dc65e06a"],[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[["[BORDER"],"54f1c057"]],"padding":[[[],"6d693c7a"]],"text-shadow":[[[],"306900d"]],"box-shadow":[[[],"306900d"]]},"Slider-DownButton":{"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"dc65e06a"]],"border-radius":[[["[VERTICAL"],"88c9c3f9"],[["[HORIZONTAL"],"654376bb"]],"background-image":[[[":pressed","[VERTICAL"],"5895a802"],[[":pressed","[HORIZONTAL"],"d25a7a25"],[["[VERTICAL"],"2c3d9652"],[["[HORIZONTAL"],"b94583ef"],[[],"a505df1b"]],"cursor":[[[],"5c13d641"]],"padding":[[[],"2144df1c"]]},"Tree-Cell":{"padding":[[[],"3b2fabb7"]],"spacing":[[[],"8d"]]},"CCombo-Button":{"background-image":[[[":pressed"],"d25a7a25"],[[],"b94583ef"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"border":[[[":hover","[FLAT"],"c411a436"],[["[FLAT"],"36a"],[[".partBorder"],"36a"],[[],"36a"]],"border-left":[[[],"36a"]],"border-radius":[[[],"10f669f0"]],"cursor":[[[],"5c13d641"]],"width":[[[],"34e"]]},"Shell":{"border":[[[":inactive",":maximized"],"36a"],[[":inactive","[TITLE"],"92103dff"],[[":inactive","[BORDER"],"92103dff"],[[".toolbarLayer"],"36a"],[[":maximized"],"36a"],[["[BORDER"],"986b78bc"],[["[TITLE"],"986b78bc"],[[".partBorder"],"36a"],[[],"8879b0d1"]],"border-radius":[[[":inactive",":maximized"],"2144df1c"],[[":maximized"],"2144df1c"],[["[BORDER"],"bf9bfec1"],[["[TITLE"],"bf9bfec1"]],"background-image":[[[],"a505df1b"]],"padding":[[["[BORDER"],"1d4ced0f"],[["[TITLE"],"1d4ced0f"],[[],"2144df1c"]],"background-color":[[[".toolbarLayer"],"4004dc1c"],[["[BORDER"],"4004dc1c"],[["[TITLE"],"4004dc1c"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"opacity":[[[],"1.0"]],"box-shadow":[[[":inactive",":maximized"],"306900d"],[[":inactive","[TITLE"],"306900d"],[[":inactive","[BORDER"],"306900d"],[[":maximized"],"306900d"],[["[BORDER"],"29f72ebd"],[["[TITLE"],"29f72ebd"],[[],"306900d"]],"animation":[[[],"20"]]},"ExpandItem-Header":{"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"background-image":[[[],"6979b4fd"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[[],"2144df1c"]],"cursor":[[[":disabled"],"5c13d641"],[[],"e81f3e3d"]],"text-shadow":[[[],"306900d"]]},"Combo":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"40047970"]],"background-image":[[[],"aadae5a7"]],"font":[[[],"dee311c5"]],"border":[[[".partBorder"],"36a"],[[],"dfa628db"]],"border-radius":[[[],"54f1c057"]],"text-shadow":[[[],"306900d"]],"box-shadow":[[[],"306900d"]]},"Combo-Button":{"background-image":[[[":pressed"],"d25a7a25"],[[],"b94583ef"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-left":[[[],"36a"]],"border-radius":[[[],"10f669f0"]],"cursor":[[[],"5c13d641"]],"width":[[[],"34e"]]},"ToolItem-DropDownIcon":{"background-image":[[[".menuBar",":hover"],"4c63d54b.png"],[[".header-overflow",":hover"],"90e84629.png"],[[".header-toolbar",":hover"],"cac8be21.png"],[[".viewToolbar"],"18938a9d.png"],[[".menuBar"],"5e607740.png"],[[".header-overflow"],"90e84629.png"],[[".header-toolbar"],"cac8be21.png"],[[],"21bc6434.gif"]],"border":[[[".menuBar",":hover"],"966111e4"],[[".header-overflow",":hover"],"36a"],[[".header-toolbar",":hover"],"905d45bd"],[[".viewToolbar"],"36a"],[[".header-toolbar"],"36a"],[[":hover"],"5fbe2ff"],[[".partBorder"],"36a"],[[],"36a"]]},"TabFolder-ContentContainer":{"border":[[[".partBorder"],"36a"],[[],"dc65e06a"]]},"DateTime-Calendar-Day":{"color":[[[":hover",":selected"],"4004dc1c"],[[":otherMonth"],"3ff48b00"],[[":selected"],"3fed9ae8"],[[],"ffffffff"]],"background-color":[[[":hover",":selected"],"3ffa5abc"],[[":selected",":unfocused"],"3ffcc400"],[[":hover"],"40021658"],[[":otherMonth"],"ffffffff"],[[":selected"],"3fff1408"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"text-shadow":[[[],"306900d"]]},"TableItem":{"color":[[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color":[[[":even",":linesvisible"],"40035180"],[[":even"],"40035180"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"background-image":[[[],"a505df1b"]],"text-decoration":[[[],"none"]],"text-shadow":[[[],"306900d"]]},"*":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"font":[[[],"dee31769"]],"border":[[[".partBorder"],"36a"],[["[BORDER"],"dc65e06a"],[[],"36a"]],"padding":[[[],"2144df1c"]]},"Tree-GridLine":{"color":[[[":horizontal"],"ffffffff"],[[],"3ffed240"]]},"CCombo-Button-Icon":{"background-image":[[[":hover"],"c87d4673.png"],[[],"80945361.png"]]},"Combo-Button-Icon":{"background-image":[[[":hover"],"c87d4673.png"],[[],"80945361.png"]]},"DateTime-UpButton-Icon":{"background-image":[[[":hover"],"3bbaf0cf.png"],[[],"7c86072d.png"]]},"Sash":{"background-color":[[[":hover"],"40021658"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"background-image":[[[],"a505df1b"]],"border":[[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]]},"TabItem":{"background-color":[[[":hover"],"40021658"],[[":selected"],"4004dc1c"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"background-image":[[[":hover"],"a505df1b"],[[":selected"],"a505df1b"],[[],"a505df1b"]],"border-top-color":[[[":selected"],"3ffa5abc"],[[],"4004dc1c"]],"border-bottom-color":[[[":selected"],"3ffa5abc"],[[],"4004dc1c"]],"text-shadow":[[[],"306900d"]],"padding":[[[":selected"],"3017804f"],[[],"cd9cfd28"]]},"ToolItem-Separator":{"width":[[[],"bc"]]},"TableColumn-SortIndicator":{"background-image":[[[":down"],"85536675.png"],[[":up"],"c9297456.png"],[[],"a505df1b"]]},"ToolTip-Text":{"color":[[[],"3fe474a4"]],"font":[[[],"c9a3013"]],"text-shadow":[[[],"306900d"]]},"ScrollBar":{"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"40035180"]],"background-image":[[[],"a505df1b"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[[],"8393ccd2"]],"width":[[[],"2c1"]]},"ProgressBar":{"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"border":[[[".partBorder"],"36a"],[[],"dc65e06a"]],"border-radius":[[[],"54f1c057"]]},"Group-Frame":{"border":[[[".partBorder"],"36a"],[[],"e2677bf1"]],"border-radius":[[[],"54f1c057"]],"margin":[[[],"e4f0f7f3"]],"padding":[[[],"3b4c2033"]]},"TreeColumn-SortIndicator":{"background-image":[[[":down"],"85536675.png"],[[":up"],"c9297456.png"],[[],"a505df1b"]]},"Shell-MinButton":{"margin":[[[":inactive"],"25c9a3ae"],[[],"25c9a3ae"]],"background-image":[[[":hover",":inactive"],"55afddf7.png"],[[":hover"],"802659c.png"],[[":inactive"],"3bc1b40f.png"],[[],"1ac11829.png"]]},"TableColumn":{"color":[[[":disabled"],"3ffeb15c"],[[],"3ff133d8"]],"font":[[[],"dee31769"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4003f66c"]],"background-image":[[[":hover"],"f9b9fbf2.png"],[[],"fe639e2a.png"]],"border-bottom":[[[":hover"],"36a"],[[],"36a"]],"padding":[[[],"6d693c7a"]],"text-shadow":[[[],"306900d"]]},"ToolTip-Image":{"background-image":[[["[ICON_WARNING"],"12dc3365.png"],[["[ICON_INFORMATION"],"1c99cf1e.png"],[["[ICON_ERROR"],"893ea652.png"],[[],"a505df1b"]]},"ScrollBar-Thumb-Icon":{"background-image":[[["[HORIZONTAL"],"c1d64071.png"],[["[VERTICAL"],"f8b1f12a.png"],[[],"a505df1b"]]},"CTabItem":{"font":[[[],"dee31769"]],"color":[[[":disabled"],"3fe41900"],[[":selected"],"4004dc1c"],[[],"3fed9ae8"]],"background-color":[[[":selected"],"3ff7c220"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"padding":[[[],"b91f19d0"]],"spacing":[[[],"bc"]],"text-shadow":[[[],"306900d"]]},"Combo-Field":{"padding":[[[],"22349af6"]]},"Table":{"font":[[[],"dee31769"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"border":[[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]],"background-image":[[[],"a505df1b"]]},"Text-Message":{"color":[[[],"3ff98c68"]],"text-shadow":[[[],"306900d"]]},"Slider-DownButton-Icon":{"background-image":[[[":hover","[VERTICAL"],"3bbaf0cf.png"],[[":hover","[HORIZONTAL"],"1a9f03bf.png"],[["[VERTICAL"],"7c86072d.png"],[["[HORIZONTAL"],"15db4987.png"],[[],"a505df1b"]]},"Spinner-Field":{"padding":[[[],"22349af6"]]},"Tree":{"font":[[[],"dee31769"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"border":[[["[BORDER"],"dfa628db"],[[".partBorder"],"36a"],[[],"36a"]]},"Widget-ToolTip":{"color":[[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"40021658"]],"border":[[[".partBorder"],"36a"],[[],"deefd67d"]],"border-radius":[[[],"54f1c057"]],"background-image":[[[],"a505df1b"]],"padding":[[[],"30813518"]],"font":[[[],"dee31769"]],"opacity":[[[],"1.0"]],"animation":[[[],"1a8c6849"]],"box-shadow":[[[],"24cb24f5"]]},"DateTime-Calendar-PreviousYearButton":{"background-image":[[[":hover"],"a3cefa91.png"],[[],"a65fa588.png"]],"cursor":[[[],"5c13d641"]]},"List-Item":{"color":[[[":even",":selected",":unfocused"],"4004dc1c"],[[":even",":selected"],"4004dc1c"],[[":selected",":unfocused"],"4004dc1c"],[[":selected"],"4004dc1c"],[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color":[[[":even",":selected",":unfocused"],"3ff73db4"],[[":even",":selected"],"3ffa5abc"],[[":even",":hover"],"40021658"],[[":selected",":unfocused"],"3ff73db4"],[[":selected"],"3ffa5abc"],[[":hover"],"40021658"],[[":even"],"40035180"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"background-image":[[[":even",":selected",":unfocused"],"f7088417"],[[":even",":selected"],"68c67848"],[[":selected",":unfocused"],"f7088417"],[[":selected"],"68c67848"],[[":hover"],"97fa7cde"],[[],"a505df1b"]],"text-shadow":[[[],"306900d"]],"padding":[[[],"6e7d1555"]]},"Scale-Thumb":{"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"3fe4aeec"]],"border":[[[".partBorder"],"36a"],[[],"dc65e06a"]],"border-radius":[[[],"54f1c057"]]},"FileUpload":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"background-image":[[[":pressed"],"d25a7a25"],[[":hover"],"b94583ef"],[[],"2eb911d6"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"border":[[[".partBorder"],"36a"],[["[BORDER"],"dc65e06a"],[[],"dc65e06a"]],"border-radius":[[[],"8393ccd2"]],"opacity":[[[],"1.0"]],"animation":[[[":pressed"],"20"],[[],"2c52244e"]],"cursor":[[[":disabled"],"5c13d641"],[[],"e81f3e3d"]],"padding":[[[":pressed"],"4bf7d81"],[[],"cfda4371"]],"spacing":[[[],"5e"]],"font":[[[],"dee31769"]],"text-shadow":[[[],"306900d"]]},"Text-Search-Icon":{"background-image":[[[],"28932128.png"]],"spacing":[[[],"8d"]]},"Link":{"font":[[[],"dee31769"]],"border":[[[".partBorder"],"36a"],[["[BORDER"],"dc65e06a"],[[],"36a"]],"text-shadow":[[[],"306900d"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]]},"Button-CheckIcon":{"background-image":[[[":grayed",":hover",":selected"],"91f761d1.png"],[[":grayed",":selected"],"96610370.png"],[[":hover",":selected"],"a7a20297.png"],[[":hover"],"4a542b6d.png"],[[":selected"],"3bad9072.png"],[[],"7c732bfb.png"]]},"Table-GridLine":{"color":[[[":horizontal"],"ffffffff"],[[],"40009eb8"]]},"Shell-CloseButton":{"margin":[[[":inactive"],"278f1df7"],[[],"278f1df7"]],"background-image":[[[":hover",":inactive"],"669675bb.png"],[[":hover"],"2525a1c4.png"],[[":inactive"],"9eddc0e7.png"],[[],"82638d00.png"]]},"DateTime-DownButton-Icon":{"background-image":[[[":hover"],"c87d4673.png"],[[],"80945361.png"]]},"Label":{"color":[[[".standaloneView"],"4004dc1c"],[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[".standaloneView"],"ffffffff"],[[".stackBorder"],"40024a4c"],[[".menuBorder"],"40007dd4"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"font":[[[".standaloneView"],"dee311c5"],[[],"dee31769"]],"border":[[[".standaloneView"],"36a"],[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[["[BORDER"],"54f1c057"]],"cursor":[[[],"5c13d641"]],"background-image":[[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"text-decoration":[[[],"none"]],"opacity":[[[],"1.0"]],"text-shadow":[[[],"306900d"]]},"Shell-Titlebar":{"color":[[[":inactive"],"3ff9f068"],[[],"4004dc1c"]],"background-color":[[[":inactive"],"3ff3d584"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"3fe4f000"]],"background-gradient-color":[[[":inactive"],"3ff3d584"],[[],"3fe4f000"]],"background-image":[[[":inactive"],"c3392633"],[[],"1c6a842a"]],"font":[[[],"dee31769"]],"margin":[[[],"2144df1c"]],"padding":[[[],"cfda4371"]],"height":[[[],"40a"]],"text-shadow":[[[],"306900d"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[[],"983ad24e"]]},"Tree-Indent":{"width":[[[],"2f0"]],"background-image":[[[":expanded",":first",":hover",":last"],"d807ea26.png"],[[":collapsed",":first",":hover",":last"],"252f45a6.png"],[[":expanded",":first",":last"],"7b90a35a.png"],[[":collapsed",":first",":last"],"1597b236.png"],[[":expanded",":hover",":last"],"d807ea26.png"],[[":collapsed",":hover",":last"],"252f45a6.png"],[[":expanded",":first",":hover"],"d807ea26.png"],[[":collapsed",":first",":hover"],"252f45a6.png"],[[":expanded",":last"],"7b90a35a.png"],[[":collapsed",":last"],"1597b236.png"],[[":expanded",":first"],"7b90a35a.png"],[[":collapsed",":first"],"1597b236.png"],[[":expanded",":hover"],"d807ea26.png"],[[":collapsed",":hover"],"252f45a6.png"],[[":first",":last"],"a505df1b"],[[":expanded"],"7b90a35a.png"],[[":collapsed"],"1597b236.png"],[[":last"],"a505df1b"],[[":first"],"a505df1b"],[[":line"],"a505df1b"],[[],"a505df1b"]]},"Combo-List":{"border":[[[".partBorder"],"36a"],[[],"dfa628db"]],"border-radius":[[[],"fd7cdcb2"]],"box-shadow":[[[],"272e1059"]]},"Combo-FocusIndicator":{"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"2abfdf6d"]],"margin":[[[],"e984a487"]],"opacity":[[[],"1.0"]]},"DateTime-DownButton":{"background-image":[[[":pressed"],"87f1e70d"],[[],"a03e8aba"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-left":[[[],"36a"]],"border-radius":[[[],"1372bd9e"]],"cursor":[[[],"5c13d641"]],"width":[[[],"34e"]]},"Link-Hyperlink":{"color":[[[":disabled"],"3ff73db4"],[[],"3ff73bac"]],"text-shadow":[[[],"306900d"]],"text-decoration":[[[],"underline"]]},"Spinner":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed1e38"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"40047970"]],"background-image":[[["[BORDER"],"aadae5a7"],[[],"a505df1b"]],"font":[[[],"dee31769"]],"border":[[[":focused","[BORDER"],"dc65e06a"],[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[["[BORDER"],"54f1c057"]],"padding":[[[],"6d693c7a"]],"text-shadow":[[[],"306900d"]],"box-shadow":[[[":focused","[BORDER"],"306900d"],[["[BORDER"],"306900d"],[[],"306900d"]]},"MenuItem-CascadeIcon":{"background-image":[[[],"a98bc12c.gif"]]},"ToolItem":{"color":[[[".menuBar",":hover"],"4004dc1c"],[[".header-overflow",":hover"],"3fec3b58"],[[".header-toolbar",":hover"],"4004dc1c"],[[".menuBar"],"3ff112f4"],[[".header-overflow"],"3ff112f4"],[[".header-toolbar"],"4004dc1c"],[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color":[[[".menuBar",":hover"],"ffffffff"],[[".header-overflow",":hover"],"ffffffff"],[[".header-toolbar",":hover"],"ffffffff"],[[".menuBar"],"ffffffff"],[[":hover"],"4004dc1c"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"background-image":[[[".menuBar",":hover"],"3751d55d"],[[".menuBar"],"a505df1b"],[[":selected"],"541d109a.gif"],[[":pressed"],"541d109a.gif"],[[],"a505df1b"]],"border":[[[".viewToolbar",":selected"],"9930ecc9"],[[".menuBar",":hover"],"966111e4"],[[".header-overflow",":hover"],"36a"],[[".header-toolbar",":hover"],"905d45bd"],[[".viewToolbar"],"36a"],[[".menuBar"],"36a"],[[".header-overflow"],"36a"],[[".header-toolbar"],"36a"],[[":selected"],"dc65e06a"],[[":pressed"],"dc65e06a"],[[":hover"],"dc65e06a"],[["[FLAT"],"36a"],[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[[".menuBar",":hover"],"31b7ceab"],[[".header-toolbar",":hover"],"1051edc5"],[[":selected"],"54f1c057"],[[":pressed"],"54f1c057"],[[":hover"],"54f1c057"],[[],"2144df1c"]],"animation":[[[],"20"]],"spacing":[[[".menuBar"],"eb"],[[".header-toolbar"],"1d6"],[[],"bc"]],"padding":[[[".viewToolbar",":selected"],"2144df1c"],[[".menuBar",":hover"],"cc06b3d4"],[[".header-toolbar",":hover"],"1d4ced0f"],[[".menuBar"],"cc06b3d4"],[[".header-overflow"],"32b347e3"],[[".header-toolbar"],"1d4ced0f"],[[":selected"],"2e0351c4"],[[":pressed"],"2e0351c4"],[[":hover"],"22349af6"],[["[FLAT"],"18b84ff4"],[[],"22349af6"]],"opacity":[[[],"1.0"]],"text-shadow":[[[],"306900d"]]},"CTabFolder":{"border-color":[[[],"3ff92b10"]],"border-radius":[[[],"54f1c057"]]},"Tree-Checkbox":{"margin":[[[],"22c00b72"]],"background-image":[[[":checked",":grayed",":hover"],"34777395.png"],[[":checked",":grayed"],"c2ef0d9b.png"],[[":checked",":hover"],"c00e5c5e.png"],[[":checked"],"619fc3dc.png"],[[":hover"],"dcbf5c35.png"],[[],"be95e0e0.png"]]},"FileUpload-FocusIndicator":{"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"2abfdf6d"]],"padding":[[[],"2144df1c"]],"margin":[[[],"54f1c057"]],"opacity":[[[],"1.0"]]},"Menu":{"color":[[[".menuBar"],"3ff112f4"],[[".header-overflow"],"3ff112f4"],[[".header-toolbar"],"3fec3b58"],[[":disabled"],"3ffeb15c"],[[],"3fe4b0f4"]],"background-color":[[[".menuBar"],"40031d8c"],[[".header-overflow"],"4004dc1c"],[[".header-toolbar"],"4004dc1c"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"font":[[[],"dee31769"]],"border":[[[".menuBar"],"966111e4"],[[".header-overflow"],"934c5924"],[[".header-toolbar"],"905d45bd"],[[".partBorder"],"36a"],[[],"deefd67d"]],"border-radius":[[[".menuBar"],"9360dd65"],[[".header-overflow"],"1d4ced0f"],[[".header-toolbar"],"2c59dfd6"],[[],"54f1c057"]],"opacity":[[[],"1.0"]],"padding":[[[],"b97b7515"]],"animation":[[[".menuBar"],"c0438311"],[[],"20"]],"box-shadow":[[[],"2962c9bd"]]},"TabFolder":{"border":[[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]],"font":[[[],"dee31769"]]},"Button":{"color":[[[".perspectiveActive"],"3ff30d5c"],[[".perspective"],"3ffe4eb0"],[[".partInactive"],"4004dc1c"],[[".partInActiveActive"],"3fed9854"],[[".partActive"],"3fec13a8"],[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[".tabOverflowInactive"],"ffffffff"],[[".tabOverflowActive"],"ffffffff"],[[".perspectiveActive"],"ffffffff"],[[".perspective"],"ffffffff"],[[".partInactive"],"ffffffff"],[[".partInActiveActive"],"ffffffff"],[[".partActive"],"ffffffff"],[[".toolbarOverflowActive"],"ffffffff"],[[".toolbarOverflowInactive"],"ffffffff"],[[".viewCloseInactive"],"ffffffff"],[[".viewClose"],"ffffffff"],[[".configMenuButton"],"ffffffff"],[[".clearButton"],"ffffffff"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"background-image":[[[":hover",":selected","[TOGGLE"],"d25a7a25"],[[".tabOverflowInactive",":hover"],"d0d699cc.png"],[[".tabOverflowInactive",":pressed"],"9b457764.png"],[[".tabOverflowActive",":hover"],"a58c3797.png"],[[".tabOverflowActive",":pressed"],"f9b67789.png"],[[".perspectiveActive",":selected"],"a505df1b"],[[".perspectiveActive",":pressed"],"a505df1b"],[[".perspectiveActive",":hover"],"a505df1b"],[[".perspective",":pressed"],"a505df1b"],[[".perspective",":hover"],"a505df1b"],[[".partInactive",":hover"],"a505df1b"],[[".partInactive",":pressed"],"a505df1b"],[[".partInActiveActive",":hover"],"a505df1b"],[[".partInActiveActive",":pressed"],"a505df1b"],[[".partActive",":hover"],"a505df1b"],[[".partActive",":pressed"],"a505df1b"],[[".toolbarOverflowActive",":hover"],"3f63f168.png"],[[".toolbarOverflowActive",":pressed"],"5525f68c.png"],[[".toolbarOverflowInactive",":hover"],"46c15c8d.png"],[[".toolbarOverflowInactive",":pressed"],"8e927efd.png"],[[".viewCloseInactive",":hover"],"7c7acb13.png"],[[".viewCloseInactive",":pressed"],"697d1ede.png"],[[".viewClose",":hover"],"fe88b7d7.png"],[[".viewClose",":pressed"],"a36ad05a.png"],[[".configMenuButton",":pressed"],"a505df1b"],[[".configMenuButton",":selected"],"a505df1b"],[[".configMenuButton",":hover"],"a505df1b"],[[".clearButton",":pressed"],"a505df1b"],[[".clearButton",":selected"],"a505df1b"],[[".clearButton",":hover"],"a505df1b"],[["[BORDER","[RADIO"],"a505df1b"],[["[BORDER","[CHECK"],"a505df1b"],[[":selected","[TOGGLE"],"a3972397"],[[":pressed","[TOGGLE"],"d25a7a25"],[[":pressed","[PUSH"],"d25a7a25"],[[":pressed","[ARROW"],"d25a7a25"],[[":hover","[TOGGLE"],"b94583ef"],[[":hover","[PUSH"],"b94583ef"],[[":hover","[ARROW"],"b94583ef"],[["[ARROW","[BORDER"],"2eb911d6"],[[".tabOverflowInactive"],"9b457764.png"],[[".tabOverflowActive"],"f9b67789.png"],[[".perspectiveActive"],"a505df1b"],[[".perspective"],"a505df1b"],[[".partInactive"],"a505df1b"],[[".partInActiveActive"],"a505df1b"],[[".partActive"],"a505df1b"],[[".toolbarOverflowActive"],"5525f68c.png"],[[".toolbarOverflowInactive"],"8e927efd.png"],[[".viewCloseInactive"],"697d1ede.png"],[[".viewClose"],"a36ad05a.png"],[[".configMenuButton"],"a505df1b"],[[".clearButton"],"a505df1b"],[["[ARROW"],"2eb911d6"],[["[BORDER"],"2eb911d6"],[["[TOGGLE"],"2eb911d6"],[["[PUSH"],"2eb911d6"],[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"border":[[["[ARROW","[BORDER"],"dc65e06a"],[[".tabOverflowInactive"],"36a"],[[".tabOverflowActive"],"36a"],[[".perspectiveActive"],"36a"],[[".perspective"],"36a"],[[".partInactive"],"36a"],[[".partInActiveActive"],"36a"],[[".partActive"],"36a"],[[".toolbarOverflowActive"],"36a"],[[".toolbarOverflowInactive"],"36a"],[[".viewCloseInactive"],"36a"],[[".viewClose"],"36a"],[[".configMenuButton"],"36a"],[[".clearButton"],"36a"],[["[ARROW"],"dc65e06a"],[["[BORDER"],"dc65e06a"],[["[TOGGLE"],"dc65e06a"],[["[PUSH"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[["[ARROW","[BORDER"],"8393ccd2"],[["[ARROW"],"8393ccd2"],[["[BORDER"],"8393ccd2"],[["[TOGGLE"],"8393ccd2"],[["[PUSH"],"8393ccd2"]],"opacity":[[[],"1.0"]],"text-decoration":[[[],"none"]],"animation":[[[":pressed","[TOGGLE"],"20"],[[":pressed","[PUSH"],"20"],[[":pressed","[ARROW"],"20"],[["[ARROW","[BORDER"],"2c52244e"],[["[BORDER"],"58d514ea"],[["[TOGGLE"],"58d514ea"],[["[PUSH"],"58d514ea"],[["[ARROW"],"2c52244e"],[[],"20"]],"cursor":[[[":disabled","[TOGGLE"],"5c13d641"],[[":disabled","[PUSH"],"5c13d641"],[[":disabled","[ARROW"],"5c13d641"],[["[ARROW","[BORDER"],"e81f3e3d"],[["[ARROW"],"e81f3e3d"],[["[BORDER"],"e81f3e3d"],[["[TOGGLE"],"e81f3e3d"],[["[PUSH"],"e81f3e3d"],[[],"5c13d641"]],"padding":[[[":pressed","[TOGGLE"],"4bf7d81"],[[":pressed","[PUSH"],"4bf7d81"],[[":pressed","[ARROW"],"4bf7d81"],[["[ARROW","[BORDER"],"ca2ee18a"],[[".tabOverflowInactive"],"54f1c057"],[[".tabOverflowActive"],"54f1c057"],[[".toolbarOverflowActive"],"54f1c057"],[[".toolbarOverflowInactive"],"54f1c057"],[[".viewClose"],"54f1c057"],[[".configMenuButton"],"f626d399"],[[".clearButton"],"54f1c057"],[["[ARROW"],"ca2ee18a"],[["[BORDER"],"cfda4371"],[["[TOGGLE"],"cfda4371"],[["[PUSH"],"cfda4371"],[[],"bcebbb2b"]],"spacing":[[["[RADIO"],"bc"],[["[CHECK"],"bc"],[[],"5e"]],"font":[[[".perspective",":hover"],"c9a2fa1"],[[".perspectiveActive"],"dee311c5"],[[".perspective"],"dee311c5"],[[".partInactive"],"dee311c5"],[[".partInActiveActive"],"dee311c5"],[[".partActive"],"dee311c5"],[[],"dee31769"]],"text-shadow":[[[],"306900d"]]},"CLabel":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"font":[[[],"dee31769"]],"border":[[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[["[BORDER"],"54f1c057"]],"cursor":[[[],"5c13d641"]],"background-image":[[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"padding":[[[],"8393ccd2"]],"spacing":[[[],"eb"]],"opacity":[[[],"1.0"]],"text-shadow":[[[],"306900d"]]},"MenuItem-CheckIcon":{"background-image":[[[],"ff030f0f.gif"]]},"Scale":{"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"border":[[[".partBorder"],"36a"],[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius":[[[],"2144df1c"]]},"ToolTip":{"font":[[[],"dee31769"]],"color":[[[],"3fe41900"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"40047970"]],"cursor":[[[],"5c13d641"]],"background-image":[[[],"6c14feac"]],"opacity":[[[],"1.0"]],"border":[[[".partBorder"],"36a"],[[],"dc65e06a"]],"border-radius":[[[],"1d4ced0f"]],"padding":[[[],"8393ccd2"]],"animation":[[[],"1a8c6849"]],"box-shadow":[[[],"275f1b59"]]},"Slider-Thumb":{"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"dc65e06a"]],"border-radius":[[[],"54f1c057"]],"background-image":[[[":pressed","[VERTICAL"],"5895a802"],[[":pressed","[HORIZONTAL"],"d25a7a25"],[["[VERTICAL"],"2c3d9652"],[["[HORIZONTAL"],"b94583ef"],[[],"a505df1b"]]},"CCombo-List":{"border":[[[".partBorder"],"36a"],[[],"dfa628db"]],"border-radius":[[[],"fd7cdcb2"]],"box-shadow":[[[],"272e1059"]]},"ScrollBar-DownButton-Icon":{"background-image":[[[":hover","[HORIZONTAL"],"e27d1512.png"],[[":hover","[VERTICAL"],"9753a8ea.png"],[["[HORIZONTAL"],"afa52be2.png"],[["[VERTICAL"],"b114ca5.png"],[[],"a505df1b"]]},"Display":{"rwt-shadow-color":[[[],"3ff98c68"]],"rwt-highlight-color":[[[],"4004dc1c"]],"rwt-darkshadow-color":[[[],"3ff53320"]],"rwt-lightshadow-color":[[[],"40006240"]],"rwt-thinborder-color":[[[],"3ffa2a74"]],"rwt-selectionmarker-color":[[[],"400457b0"]],"rwt-infobackground-color":[[[],"4004dc1c"]],"rwt-error-image":[[[],"dadc0503.png"]],"rwt-information-image":[[[],"fe40e850.png"]],"rwt-working-image":[[[],"fe40e850.png"]],"rwt-question-image":[[[],"89b0dad4.png"]],"rwt-warning-image":[[[],"fea3fec0.png"]],"rwt-fontlist":[[[],"67d9a7ad"]],"background-image":[[[],"42378b7e.png"]],"font":[[[],"dee31769"]]},"ToolBar":{"font":[[[],"dee31769"]],"color":[[[".menuBar"],"3ff112f4"],[[".header-toolbar"],"4004dc1c"],[[":disabled"],"3ffeb15c"],[[],"3fe41900"]],"background-color":[[[".viewToolbar"],"ffffffff"],[[".menuBar"],"ffffffff"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"padding":[[[".viewToolbar"],"ccce6a5e"],[[".menuBar"],"2144df1c"],[[".header-toolbar"],"452f77dc"],[[],"2144df1c"]],"spacing":[[[".viewToolbar"],"5e"],[[".menuBar"],"497"],[[".header-toolbar"],"497"],[[],"0"]],"border":[[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[["[BORDER"],"54f1c057"]],"opacity":[[[],"1.0"]]},"ExpandBar":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"font":[[[],"dee31769"]],"border":[[["[BORDER"],"dfa628db"],[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[["[BORDER"],"2144df1c"]]},"Button-RadioIcon":{"background-image":[[[":hover",":selected"],"5ad536ed.png"],[[":hover"],"be30b3d3.png"],[[":selected"],"4b219dca.png"],[[],"2ede037a.png"]]},"DateTime-DropDownCalendar":{"border":[[[".partBorder"],"36a"],[[],"dc902e9c"]]},"DateTime-Field":{"color":[[[":selected"],"3fed9ae8"],[[],"ffffffff"]],"background-color":[[[":selected"],"3fff1408"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"padding":[[[],"22349af6"]],"text-shadow":[[[],"306900d"]]},"DateTime-Calendar-NextYearButton":{"background-image":[[[":hover"],"8fc99d60.png"],[[],"25db362.png"]],"cursor":[[[],"5c13d641"]]},"FormText":{"color":[[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"font":[[[],"dee31769"]],"border":[[[".partBorder"],"36a"],[["[BORDER"],"dc65e06a"],[[],"36a"]]},"ScrollBar-UpButton-Icon":{"background-image":[[[":hover","[HORIZONTAL"],"80b4cb50.png"],[[":hover","[VERTICAL"],"453ee3bb.png"],[["[HORIZONTAL"],"30bae239.png"],[["[VERTICAL"],"92c0aead.png"],[[],"a505df1b"]]},"DateTime-Calendar-NextMonthButton":{"background-image":[[[":hover"],"193a0649.png"],[[],"d98c3abb.png"]],"cursor":[[[],"5c13d641"]]},"CCombo":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"40047970"]],"background-image":[[["[BORDER"],"aadae5a7"],[[],"a505df1b"]],"font":[[[],"dee311c5"]],"border":[[[":focused","[BORDER"],"dfa628db"],[["[BORDER"],"dfa628db"],[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[["[BORDER"],"54f1c057"],[[],"2144df1c"]],"text-shadow":[[[],"306900d"]],"box-shadow":[[[":focused","[BORDER"],"306900d"],[["[BORDER"],"306900d"],[[],"306900d"]]},"ScrollBar-Thumb":{"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"border":[[[":pressed"],"98585c31"],[[".partBorder"],"36a"],[[],"de1b2d87"]],"border-radius":[[[],"2144df1c"]],"background-image":[[[":pressed","[HORIZONTAL"],"d25a7a25"],[[":hover","[HORIZONTAL"],"b94583ef"],[[":pressed","[VERTICAL"],"5895a802"],[[":hover","[VERTICAL"],"2c3d9652"],[["[HORIZONTAL"],"2eb911d6"],[["[VERTICAL"],"2762759"],[[],"a505df1b"]],"min-height":[[[],"3ac"]]},"CCombo-FocusIndicator":{"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"2abfdf6d"]],"margin":[[[],"e984a487"]],"opacity":[[[],"1.0"]]},"SystemMessage-DisplayOverlay":{"background-image":[[[],"a505df1b"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"3f0e249a"]]},"Composite":{"border":[[[".inactiveButton"],"36a"],[[".tabInactive"],"e7b1b511"],[[".tabActive"],"e7b1b511"],[[".partBorder"],"36a"],[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius":[[[".tabInactive"],"1051edc5"],[[".tabActive"],"1051edc5"]],"background-color":[[[".inactiveButton"],"ffffffff"],[[".tabInactive"],"4004dc1c"],[[".tabActive"],"4004dc1c"],[[".compGray"],"4004dc1c"],[["[BORDER"],"4004dc1c"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"background-image":[[["[BORDER"],"a505df1b"],[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"padding":[[[],"2144df1c"]],"opacity":[[[],"1.0"]],"box-shadow":[[[],"306900d"]],"animation":[[[],"20"]]},"MenuItem-RadioIcon":{"background-image":[[[],"8a7aa6f4.gif"]]},"Slider-UpButton-Icon":{"background-image":[[[":hover","[VERTICAL"],"c87d4673.png"],[[":hover","[HORIZONTAL"],"282bf613.png"],[["[VERTICAL"],"80945361.png"],[["[HORIZONTAL"],"dd8098c.png"],[[],"a505df1b"]]},"Group-Label":{"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[[],"2144df1c"]],"padding":[[[],"246fa55c"]],"margin":[[[],"6da1e5f0"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"color":[[[],"3fed1e38"]],"text-shadow":[[[],"306900d"]]},"Table-Checkbox":{"width":[[[],"3db"]],"margin":[[[],"2144df1c"]],"background-image":[[[":checked",":grayed",":hover"],"91f761d1.png"],[[":checked",":grayed"],"96610370.png"],[[":checked",":hover"],"a7a20297.png"],[[":checked"],"3bad9072.png"],[[":hover"],"4a542b6d.png"],[[],"7c732bfb.png"]]},"TreeItem":{"color":[[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color":[[[":even",":linesvisible"],"40035180"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"background-image":[[[],"a505df1b"]],"text-decoration":[[[],"none"]],"text-shadow":[[[],"306900d"]]},"DateTime-DropDownButton-Icon":{"background-image":[[[":hover"],"c87d4673.png"],[[],"80945361.png"]]},"Slider":{"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"40035180"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[[],"2144df1c"]]},"Browser":{"border":[[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]]},"DateTime-Calendar-Navbar":{"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[[],"2144df1c"]],"color":[[[":disabled"],"3ffeb15c"],[[],"4004dc1c"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"3ffa5abc"]],"background-image":[[[],"a505df1b"]],"font":[[[],"c9a2fa1"]],"text-shadow":[[[],"306900d"]]},"CoolItem-Handle":{"border":[[[".partBorder"],"36a"],[[],"c411a436"]],"width":[[[],"bc"]]},"ToolTip-Message":{"color":[[[],"3fe41900"]],"font":[[[],"dee31769"]],"text-shadow":[[[],"306900d"]]},"ScrollBar-DownButton":{"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"de1b2d87"]],"border-radius":[[["[VERTICAL"],"31b7ceab"],[["[HORIZONTAL"],"aaf82148"]],"background-image":[[[":pressed","[HORIZONTAL"],"d25a7a25"],[[":hover","[HORIZONTAL"],"b94583ef"],[[":pressed","[VERTICAL"],"5895a802"],[[":hover","[VERTICAL"],"2c3d9652"],[["[HORIZONTAL"],"2eb911d6"],[["[VERTICAL"],"2762759"],[[],"a505df1b"]],"cursor":[[[],"5c13d641"]]},"List":{"font":[[[],"dee31769"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"border":[[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]]},"DateTime-UpButton":{"background-image":[[[":pressed"],"7f49586b"],[[],"ff331b35"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-left":[[[],"36a"]],"border-radius":[[[],"22c00b72"]],"cursor":[[[],"5c13d641"]],"width":[[[],"34e"]]},"Shell-DisplayOverlay":{"background-color":[[[".confDialog"],"3ff7c144"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"background-image":[[[".confDialog"],"a505df1b"],[[],"a505df1b"]],"animation":[[[".confDialog"],"1a72bef3"],[[],"1a72bef3"]],"opacity":[[[".confDialog"],"0.5"],[[],"0.5"]]},"Button-FocusIndicator":{"background-color":[[["[RADIO"],"ffffffff"],[["[CHECK"],"ffffffff"],[["[TOGGLE"],"ffffffff"],[["[PUSH"],"ffffffff"],[["[ARROW"],"ffffffff"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"4004dc1c"]],"border":[[[".tabOverflowInactive"],"36a"],[[".tabOverflowActive"],"36a"],[[".perspectiveActive"],"36a"],[[".perspective"],"36a"],[[".partInactive"],"36a"],[[".partInActiveActive"],"36a"],[[".partActive"],"36a"],[[".toolbarOverflowActive"],"36a"],[[".toolbarOverflowInactive"],"36a"],[[".viewCloseInactive"],"36a"],[[".viewClose"],"36a"],[[".configMenuButton"],"36a"],[[".clearButton"],"36a"],[["[RADIO"],"2abfdf6d"],[["[CHECK"],"2abfdf6d"],[["[TOGGLE"],"2abfdf6d"],[["[PUSH"],"2abfdf6d"],[["[ARROW"],"2abfdf6d"],[[".partBorder"],"36a"],[["[BORDER"],"dc65e06a"],[[],"36a"]],"padding":[[["[RADIO"],"cdf891ed"],[["[CHECK"],"cdf891ed"],[["[TOGGLE"],"2144df1c"],[["[PUSH"],"2144df1c"],[["[ARROW"],"2144df1c"],[[],"2144df1c"]],"margin":[[["[RADIO"],"2144df1c"],[["[CHECK"],"2144df1c"],[["[TOGGLE"],"54f1c057"],[["[PUSH"],"54f1c057"],[["[ARROW"],"54f1c057"]],"opacity":[[["[RADIO"],"1.0"],[["[CHECK"],"1.0"],[["[TOGGLE"],"1.0"],[["[PUSH"],"1.0"],[["[ARROW"],"1.0"]]},"Sash-Handle":{"background-image":[[[],"a505df1b"]]},"CTabFolder-DropDownButton-Icon":{"background-image":[[[":hover"],"689d44d2.png"],[[],"65054866.png"]]},"DateTime-Calendar-PreviousMonthButton":{"background-image":[[[":hover"],"d3acc3a4.png"],[[],"99f733cb.png"]],"cursor":[[[],"5c13d641"]]},"Table-RowOverlay":{"color":[[[":even",":linesvisible",":selected",":unfocused"],"4004dc1c"],[[":even",":linesvisible",":selected"],"4004dc1c"],[[":selected",":unfocused"],"4004dc1c"],[[":selected"],"4004dc1c"],[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color":[[[":even",":linesvisible",":selected",":unfocused"],"3ff73db4"],[[":even",":selected",":unfocused"],"3ff73db4"],[[":even",":linesvisible",":selected"],"3fe4aeec"],[[":even",":hover",":linesvisible"],"400034dc"],[[":even",":selected"],"3ffa5abc"],[[":even",":hover"],"40021658"],[[":selected",":unfocused"],"3ff73db4"],[[":selected"],"3ffa5abc"],[[":hover"],"40021658"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"background-image":[[[],"a505df1b"]]},"Spinner-DownButton-Icon":{"background-image":[[[":hover"],"c87d4673.png"],[[],"80945361.png"]]},"Tree-RowOverlay":{"color":[[[":selected",":unfocused"],"4004dc1c"],[[":selected"],"4004dc1c"],[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color":[[[":selected",":unfocused"],"3ff73db4"],[[":selected"],"3ffa5abc"],[[":hover"],"40021658"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"background-image":[[[],"a505df1b"]]},"Table-Cell":{"padding":[[[],"1e44f46b"]],"spacing":[[[],"8d"]]},"Text":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed1e38"]],"background-color":[[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"40047970"]],"font":[[[],"dee31769"]],"border":[[[":focused","[BORDER","[MULTI"],"dc65e06a"],[[":focused","[BORDER"],"dc65e06a"],[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[["[BORDER"],"54f1c057"]],"background-image":[[["[MULTI"],"a505df1b"],[["[BORDER"],"aadae5a7"],[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"padding":[[[],"22349af6"]],"text-shadow":[[[],"306900d"]],"box-shadow":[[[":focused","[BORDER","[MULTI"],"306900d"],[["[BORDER","[MULTI"],"306900d"],[[":focused","[BORDER"],"306900d"],[["[BORDER"],"306900d"],[[],"306900d"]]},"MenuItem":{"color":[[[".menuBar",":hover"],"3ff6b9d4"],[[".header-overflow",":hover"],"3fec3b58"],[[".header-toolbar",":hover"],"3fec3b58"],[[".menuBar"],"3ff112f4"],[[".header-overflow"],"3ff112f4"],[[".header-toolbar"],"3ff112f4"],[[":hover"],"3fed9ae8"],[[":pressed"],"4004dc1c"],[[":disabled"],"3ffeb15c"],[[],"3fe41900"]],"background-color":[[[".menuBar",":hover"],"ffffffff"],[[".header-overflow",":hover"],"ffffffff"],[[".header-toolbar",":hover"],"ffffffff"],[[":hover"],"40021658"],[[":pressed"],"3fe4aeec"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"ffffffff"]],"background-image":[[[],"a505df1b"]],"opacity":[[[],"1.0"]],"text-shadow":[[[],"306900d"]],"padding":[[["[SEPARATOR"],"ba0b30ff"],[[],"b91f19d0"]]},"Text-Cancel-Icon":{"background-image":[[[],"5490d203.gif"]],"spacing":[[[],"8d"]]},"ProgressBar-Indicator":{"background-color":[[[":paused"],"40024a4c"],[[":error"],"3ffd1540"],[[".compTrans"],"ffffffff"],[[".shellGray"],"4004dc1c"],[[],"3ffa5abc"]],"background-image":[[[],"e7e44ccd.png"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"opacity":[[[],"1.0"]]},"ExpandItem":{"border":[[[".partBorder"],"36a"],[[],"dfa628db"]],"border-radius":[[[],"2144df1c"]]},"CCombo-Field":{"padding":[[[],"22349af6"]]},"Shell-MaxButton":{"margin":[[[":inactive"],"25c9a3ae"],[[],"25c9a3ae"]],"background-image":[[[":hover",":inactive",":maximized"],"de3d280e.png"],[[":inactive",":maximized"],"c537732e.png"],[[":hover",":maximized"],"de3d280e.png"],[[":hover",":inactive"],"15e0a581.png"],[[":hover"],"484d1dea.png"],[[":maximized"],"c537732e.png"],[[":inactive"],"38325440.png"],[[],"1932f866.png"]]},"Spinner-UpButton-Icon":{"background-image":[[[":hover"],"3bbaf0cf.png"],[[],"7c86072d.png"]]}}}
\ No newline at end of file
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/rap-rwt.theme.Custom_c072efd1.json b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/rap-rwt.theme.Custom_c072efd1.json
deleted file mode 100644
index b963a23..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/rap-rwt.theme.Custom_c072efd1.json
+++ /dev/null
@@ -1 +0,0 @@
-{"values":{"colors":{"3ff98c68":[167,166,170,1],"4004dc1c":[255,255,255,1],"3ff53320":[133,135,140,1],"40006240":[220,223,228,1],"3ffa2a74":[172,168,153,1],"400457b0":[254,200,60,1],"3fed9ae8":[74,74,74,1],"ffffffff":"undefined","40024a4c":[235,235,235,1],"400034dc":[218,233,247,1],"3ffeb15c":[207,207,207,1],"3f0e249a":[128,128,128,0.3],"3fe4a154":[0,80,145,1],"40047970":[252,252,252,1],"3ff133d8":[102,102,102,1],"3fed1e38":[70,74,78,1],"3ff92b10":[164,164,164,1],"3fe41900":[0,0,0,1],"3fe4aeec":[0,88,159,1],"40007dd4":[221,221,221,1],"3ff73db4":[149,149,149,1],"40035180":[243,243,244,1],"3fe4b0f4":[0,89,165,1],"3ff112f4":[101,101,101,1],"3fec3b58":[59,143,194,1],"3fe52980":[3,105,188,1],"3fe4896c":[0,66,119,1],"3ffd1540":[203,32,32,1],"3ff9f068":[170,170,170,1],"3ff3d584":[121,150,165,1],"3fe4f000":[0,128,192,1],"3ff7c144":[153,153,153,1],"3ff48b00":[128,128,128,1],"4003f66c":[248,248,255,1],"40009eb8":[222,222,222,1],"3ffed240":[208,208,208,1],"3fff1408":[210,210,210,1],"3ffcc400":[192,192,192,1],"3fe4ab90":[0,86,156,1],"40000bec":[217,227,243,1],"3fe474a4":[0,51,153,1]},"images":{"dadc0503.png":[32,32],"fe40e850.png":[32,32],"89b0dad4.png":[32,32],"fea3fec0.png":[32,32],"ee7d83c5.png":[1,1600],"f4b75a7a.png":[14,11],"35ff8519.png":[14,11],"a5dd20b5.png":[14,11],"ad06bd9.png":[14,11],"f641cb59.png":[20,20],"58d22720.png":[20,20],"dc7ace07.png":[20,20],"ce10b6e1.png":[20,20],"976f4c7b.png":[7,8],"692c09fc.png":[7,8],"4e7a0982.png":[7,8],"6a48ea6b.png":[7,8],"34777395.png":[15,15],"c2ef0d9b.png":[15,15],"c00e5c5e.png":[15,15],"619fc3dc.png":[15,15],"dcbf5c35.png":[15,15],"be95e0e0.png":[15,15],"3d796824.png":[15,15],"1113ce64.png":[15,15],"28dbc48b.png":[15,15],"ec38c861.png":[15,15],"4d43ec79.png":[9,9],"5135da6d.png":[9,9],"c47ac08b.png":[9,9],"175852a9.png":[9,9],"bc32ef3d.png":[9,6],"ae8b4acf.png":[9,6],"3d99024e.png":[10,7],"b6f1bd73.png":[10,7],"ff030f0f.gif":[16,7],"8a7aa6f4.gif":[16,5],"a98bc12c.gif":[13,13],"55afddf7.png":[11,11],"3bc1b40f.png":[11,11],"de3d280e.png":[11,11],"c537732e.png":[11,11],"15e0a581.png":[11,11],"38325440.png":[11,11],"669675bb.png":[11,11],"9eddc0e7.png":[11,11],"9753a8ea.png":[9,6],"b114ca5.png":[9,6],"453ee3bb.png":[9,6],"92c0aead.png":[9,6],"4b0a131f.png":[9,5],"801ec7f4.png":[9,5],"28932128.png":[16,16],"5490d203.gif":[16,16],"541d109a.gif":[2,2],"6a297860.png":[7,12],"a53d4a3.png":[9,6],"7a1d1d0e.png":[9,6],"cc0e49ec.png":[7,4],"21bc6434.gif":[7,4],"1677980f.png":[7,7],"6753adb8.png":[6,9],"820410.png":[7,7],"83e5081f.png":[6,9],"27211de7.png":[6,7],"8dd42372.png":[6,7],"edb7d80a.png":[6,7],"cdaf2a02.png":[6,7],"faa5e887.png":[10,7],"84135394.png":[10,7],"d6a28f76.png":[10,7],"2011457e.png":[10,7],"b6f71a3f.png":[16,16],"d5e845a0.png":[16,16],"bf448660.png":[16,16],"d2972433.png":[16,16],"f38bdb4e.png":[6,9],"ef158107.png":[6,9],"e2782041.png":[6,9],"e09a4464.png":[6,9],"12dc3365.png":[32,32],"1c99cf1e.png":[32,32],"893ea652.png":[32,32],"c1d64071.png":[8,7],"f8b1f12a.png":[7,8],"e27d1512.png":[6,9],"afa52be2.png":[6,9],"80b4cb50.png":[6,9],"30bae239.png":[6,9]},"fonts":{"67d9a7ad":{"family":["Segoe UI","Corbel","Calibri","Tahoma","Lucida Sans Unicode"],"size":11,"bold":false,"italic":false},"dee31769":{"family":["Verdana","Lucida Sans","Arial","Helvetica","sans-serif"],"size":12,"bold":false,"italic":false},"c9a2fa1":{"family":["Verdana","Lucida Sans","Arial","Helvetica","sans-serif"],"size":11,"bold":true,"italic":false},"dee311c5":{"family":["Verdana","Lucida Sans","Arial","Helvetica","sans-serif"],"size":11,"bold":false,"italic":false},"c9a3013":{"family":["Verdana","Lucida Sans","Arial","Helvetica","sans-serif"],"size":14,"bold":true,"italic":false}},"borders":{"36a":{"width":0,"style":null,"color":null},"887c1601":{"width":1,"style":"solid","color":"#00589f"},"dc65e06a":{"width":1,"style":"solid","color":"#a4a4a4"},"9811d3e2":{"width":1,"style":"solid","color":"#949494"},"2abfdf6d":{"width":1,"style":"dotted","color":"#b8b8b8"},"dfa628db":{"width":1,"style":"solid","color":"#c1c1c1"},"c411a436":{"width":1,"style":"outset","color":null},"e2677bf1":{"width":1,"style":"solid","color":"#cccccc"},"5fbe2ff":{"width":1,"style":"inset","color":null},"887c06d0":{"width":1,"style":"solid","color":"#005499"},"887c1e69":{"width":1,"style":"solid","color":"#0059a5"},"92103dff":{"width":2,"style":"solid","color":"#4b4b4b"},"887bfd69":{"width":2,"style":"solid","color":"#005092"},"8879b0d1":{"width":1,"style":"solid","color":"#000000"},"887c4a6e":{"width":1,"style":"solid","color":"#004e8d"},"dc902e9c":{"width":1,"style":"solid","color":"#a7a6aa"},"98585c31":{"width":1,"style":"solid","color":"#999999"},"de1b2d87":{"width":1,"style":"solid","color":"#b4b4b4"}},"boxdims":{"54f1c057":[2,2,2,2],"30813518":[1,3,2,3],"2144df1c":[0,0,0,0],"240bc999":[0,7,0,0],"8393ccd2":[3,3,3,3],"4bf7d81":[4,5,2,7],"ca2ee18a":[4,4,4,4],"f626d399":[1,1,1,1],"cfda4371":[2,5,2,5],"bcebbb2b":[4,5,4,5],"cdf891ed":[2,2,2,1],"10f669f0":[0,2,2,0],"22349af6":[2,3,2,3],"fd7cdcb2":[0,0,2,2],"e984a487":[1,19,1,1],"b91f19d0":[2,4,2,4],"e4f0f7f3":[8,0,0,0],"3b4c2033":[8,2,2,2],"246fa55c":[0,3,0,4],"6da1e5f0":[1,10,1,10],"6e7d1555":[3,5,3,5],"b97b7515":[2,0,2,0],"ba0b30ff":[0,3,0,3],"1051edc5":[5,5,0,0],"1d4ced0f":[5,5,5,5],"983ad24e":[1,1,0,0],"25c9a3ae":[0,6,0,0],"278f1df7":[0,5,0,0],"6d693c7a":[1,2,1,2],"22c00b72":[0,2,0,0],"1372bd9e":[0,0,2,0],"3017804f":[2,8,3,7],"cd9cfd28":[2,6,2,5],"1e44f46b":[4,3,3,3],"512e2b93":[0,0,0,5],"88c9c3f9":[2,2,0,0],"cc06b3d4":[0,10,0,10],"80737479":[3,5,3,7],"32b347e3":[0,25,0,0],"2e0351c4":[3,2,1,4],"18b84ff4":[3,4,3,4],"3b2fabb7":[2,3,3,3],"654376bb":[2,0,0,2],"31b7ceab":[3,3,0,0],"aaf82148":[3,0,0,3],"9360dd65":[0,0,3,3],"82f3286":[0,3,3,0]},"animations":{"1a8c6849":{"fadeIn":[200,"linear"],"fadeOut":[600,"easeOut"]},"20":{},"2c52244e":{"hoverOut":[500,"easeOut"]},"1a72bef3":{"fadeIn":[150,"linear"],"fadeOut":[400,"easeOut"]},"1a897981":{"fadeIn":[200,"linear"],"fadeOut":[400,"easeOut"]}},"shadows":{"24cb24f5":[false,3,4,2,0,"#000000",0.3],"306900d":null,"272e1059":[false,3,3,3,0,"#000000",0.4],"2962c9bd":[false,2,2,2,0,"#000000",0.5],"29f72ebd":[false,5,5,3,0,"#000000",0.5],"275f1b59":[false,4,4,2,0,"#000000",0.4]},"gradients":{"d25a7a25":{"percents":[0,52,100],"colors":["#e0e0e0","#e0e0e0","#b0b0b0"],"vertical":true},"a3972397":{"percents":[0,30,70,100],"colors":["#e0e0e0","#f0f0f0","#e0e0e0","#b0b0b0"],"vertical":true},"b94583ef":{"percents":[0,48,52,100],"colors":["#ffffff","#f0f0f0","#e0e0e0","#cccccc"],"vertical":true},"2eb911d6":{"percents":[0,48,52,100],"colors":["#ffffff","#f0f0f0","#e0e0e0","#ffffff"],"vertical":true},"aadae5a7":{"percents":[0,15,100],"colors":["#e2e2e2","#f8f8f8","#fbfbfb"],"vertical":true},"f7088417":{"percents":[0,100],"colors":["#a5a5a5","#858585"],"vertical":true},"6630bd77":{"percents":[0,100],"colors":["#0078bf","#00589f"],"vertical":true},"a1b41899":{"percents":[0,100],"colors":["#dae9f7","#d2e0ee"],"vertical":true},"c3392633":{"percents":[0,100],"colors":["#595959","#4b4b4b"],"vertical":true},"dac72631":{"percents":[0,100],"colors":["#005fac","#005092"],"vertical":true},"7f49586b":{"percents":[0,52,100],"colors":["#ffffff","#e0e0e0","#b0b0b0"],"vertical":true},"ff331b35":{"percents":[0,100],"colors":["#ffffff","#e0e0e0"],"vertical":true},"87f1e70d":{"percents":[0,52,100],"colors":["#b0b0b0","#e0e0e0","#ffffff"],"vertical":true},"a03e8aba":{"percents":[0,100],"colors":["#e0e0e0","#ffffff"],"vertical":true},"208f7d4b":{"percents":[0,100],"colors":["#f4f5f6","#e6e6e6"],"vertical":true},"b8075ab4":{"percents":[0,100],"colors":["#fbfcfd","#ececec"],"vertical":true},"fbcf3e3":{"percents":[0,100],"colors":["#ffffff","#f1f1f1"],"vertical":true},"9738b181":{"percents":[0,100],"colors":["#196eb3","#00447a"],"vertical":true},"6979b4fd":{"percents":[0,55,100],"colors":["#ffffff","#e0e0e0","#f0f0f0"],"vertical":true},"5895a802":{"percents":[0,52,100],"colors":["#e0e0e0","#e0e0e0","#b0b0b0"],"vertical":false},"2c3d9652":{"percents":[0,48,52,100],"colors":["#ffffff","#f0f0f0","#e0e0e0","#cccccc"],"vertical":false},"6c14feac":{"percents":[0,100],"colors":["#ffffff","#e4e5f0"],"vertical":true},"b94583ef":{"percents":[0,42,58,100],"colors":["#ffffff","#f0f0f0","#e0e0e0","#cccccc"],"vertical":true},"2c3d9652":{"percents":[0,42,58,100],"colors":["#ffffff","#f0f0f0","#e0e0e0","#cccccc"],"vertical":false},"2eb911d6":{"percents":[0,38,62,100],"colors":["#ffffff","#f0f0f0","#e0e0e0","#ffffff"],"vertical":true},"2762759":{"percents":[0,38,62,100],"colors":["#ffffff","#f0f0f0","#e0e0e0","#ffffff"],"vertical":false}},"cursors":{"5c13d641":"default","e81f3e3d":"pointer"},"dimensions":{"bc":4,"5e":2,"34e":18,"40a":22,"8d":3,"3db":21,"497":25,"0":0,"eb":5,"1d6":10,"2f0":16,"2c1":15,"3ac":20}},"theme":{"Spinner-DownButton":{"background-image":[[[":pressed"],"87f1e70d"],[[],"a03e8aba"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-left":[[[],"36a"]],"border-radius":[[[],"1372bd9e"]],"cursor":[[[],"5c13d641"]],"width":[[[],"34e"]]},"DateTime-DropDownButton":{"background-image":[[[],"b94583ef"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-left":[[[],"36a"]],"border-radius":[[[],"10f669f0"]],"cursor":[[[],"5c13d641"]],"width":[[[],"34e"]]},"CoolBar":{"background-image":[[[],"a505df1b"]]},"TreeColumn":{"color":[[[":disabled"],"3ffeb15c"],[[],"3ff133d8"]],"font":[[[],"dee31769"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4003f66c"]],"background-image":[[[":hover"],"208f7d4b"],[[],"b8075ab4"]],"border-bottom":[[[":hover"],"36a"],[[],"36a"]],"padding":[[[],"6d693c7a"]],"text-shadow":[[[],"306900d"]]},"ScrollBar-UpButton":{"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"de1b2d87"]],"border-radius":[[["[VERTICAL"],"9360dd65"],[["[HORIZONTAL"],"82f3286"]],"background-image":[[[":pressed","[HORIZONTAL"],"d25a7a25"],[[":hover","[HORIZONTAL"],"b94583ef"],[[":pressed","[VERTICAL"],"5895a802"],[[":hover","[VERTICAL"],"2c3d9652"],[["[HORIZONTAL"],"2eb911d6"],[["[VERTICAL"],"2762759"],[[],"a505df1b"]],"cursor":[[[],"5c13d641"]]},"ExpandItem-Button":{"background-image":[[[":expanded",":hover"],"b6f71a3f.png"],[[":expanded"],"d5e845a0.png"],[[":hover"],"bf448660.png"],[[],"d2972433.png"]]},"Spinner-UpButton":{"background-image":[[[":pressed"],"7f49586b"],[[],"ff331b35"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-left":[[[],"36a"]],"border-radius":[[[],"22c00b72"]],"cursor":[[[],"5c13d641"]],"width":[[[],"34e"]]},"Button-ArrowIcon":{"background-image":[[["[RIGHT"],"4d43ec79.png"],[["[LEFT"],"5135da6d.png"],[["[DOWN"],"c47ac08b.png"],[["[UP"],"175852a9.png"],[[],"a505df1b"]]},"Group":{"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"font":[[[],"dee31769"]],"border":[[[".partBorder"],"36a"],[["[BORDER"],"dc65e06a"],[[],"36a"]]},"Label-SeparatorLine":{"border":[[["[SHADOW_OUT"],"c411a436"],[["[SHADOW_IN"],"5fbe2ff"],[[".partBorder"],"36a"],[[],"dc65e06a"]],"border-radius":[[[],"2144df1c"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"background-image":[[[],"a505df1b"]],"width":[[[],"5e"]]},"Slider-UpButton":{"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"dc65e06a"]],"border-radius":[[["[VERTICAL"],"fd7cdcb2"],[["[HORIZONTAL"],"10f669f0"]],"background-image":[[[":pressed","[VERTICAL"],"5895a802"],[[":pressed","[HORIZONTAL"],"d25a7a25"],[["[VERTICAL"],"2c3d9652"],[["[HORIZONTAL"],"b94583ef"],[[],"a505df1b"]],"cursor":[[[],"5c13d641"]],"padding":[[[],"2144df1c"]]},"DateTime":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed1e38"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"40047970"]],"background-image":[[["[BORDER"],"aadae5a7"],[[],"a505df1b"]],"font":[[[],"dee311c5"]],"border":[[[":focused","[BORDER"],"dc65e06a"],[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[["[BORDER"],"54f1c057"]],"padding":[[[],"6d693c7a"]],"text-shadow":[[[],"306900d"]],"box-shadow":[[[],"306900d"]]},"Slider-DownButton":{"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"dc65e06a"]],"border-radius":[[["[VERTICAL"],"88c9c3f9"],[["[HORIZONTAL"],"654376bb"]],"background-image":[[[":pressed","[VERTICAL"],"5895a802"],[[":pressed","[HORIZONTAL"],"d25a7a25"],[["[VERTICAL"],"2c3d9652"],[["[HORIZONTAL"],"b94583ef"],[[],"a505df1b"]],"cursor":[[[],"5c13d641"]],"padding":[[[],"2144df1c"]]},"Tree-Cell":{"padding":[[[],"3b2fabb7"]],"spacing":[[[],"8d"]]},"CCombo-Button":{"background-image":[[[":pressed"],"d25a7a25"],[[],"b94583ef"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"border":[[[":hover","[FLAT"],"c411a436"],[["[FLAT"],"36a"],[[".partBorder"],"36a"],[[],"36a"]],"border-left":[[[],"36a"]],"border-radius":[[[],"10f669f0"]],"cursor":[[[],"5c13d641"]],"width":[[[],"34e"]]},"Shell":{"border":[[[":inactive",":maximized"],"36a"],[[":inactive","[TITLE"],"92103dff"],[[":inactive","[BORDER"],"92103dff"],[[".toolbarLayer"],"36a"],[[":maximized"],"36a"],[["[BORDER"],"887bfd69"],[["[TITLE"],"887bfd69"],[[".partBorder"],"36a"],[[],"8879b0d1"]],"border-radius":[[[":inactive",":maximized"],"2144df1c"],[[":maximized"],"2144df1c"],[["[BORDER"],"1051edc5"],[["[TITLE"],"1051edc5"]],"background-image":[[[],"a505df1b"]],"padding":[[["[BORDER"],"1d4ced0f"],[["[TITLE"],"1d4ced0f"],[[],"2144df1c"]],"background-color":[[[".toolbarLayer"],"4004dc1c"],[["[BORDER"],"4004dc1c"],[["[TITLE"],"4004dc1c"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"opacity":[[[],"1.0"]],"box-shadow":[[[":inactive",":maximized"],"306900d"],[[":inactive","[TITLE"],"306900d"],[[":inactive","[BORDER"],"306900d"],[[":maximized"],"306900d"],[["[BORDER"],"29f72ebd"],[["[TITLE"],"29f72ebd"],[[],"306900d"]],"animation":[[[],"20"]]},"ExpandItem-Header":{"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"background-image":[[[],"6979b4fd"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[[],"2144df1c"]],"cursor":[[[":disabled"],"5c13d641"],[[],"e81f3e3d"]],"text-shadow":[[[],"306900d"]]},"Combo":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed1e38"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"40047970"]],"background-image":[[[],"aadae5a7"]],"font":[[[],"dee311c5"]],"border":[[[".partBorder"],"36a"],[[],"dfa628db"]],"border-radius":[[[],"54f1c057"]],"text-shadow":[[[],"306900d"]],"box-shadow":[[[],"306900d"]]},"Combo-Button":{"background-image":[[[":pressed"],"d25a7a25"],[[],"b94583ef"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-left":[[[],"36a"]],"border-radius":[[[],"10f669f0"]],"cursor":[[[],"5c13d641"]],"width":[[[],"34e"]]},"ToolItem-DropDownIcon":{"background-image":[[[".menuBar",":hover"],"6a297860.png"],[[".header-overflow",":hover"],"a53d4a3.png"],[[".header-toolbar",":hover"],"7a1d1d0e.png"],[[".viewToolbar"],"cc0e49ec.png"],[[".menuBar"],"6a297860.png"],[[".header-overflow"],"a53d4a3.png"],[[".header-toolbar"],"7a1d1d0e.png"],[[],"21bc6434.gif"]],"border":[[[".menuBar",":hover"],"e2677bf1"],[[".header-overflow",":hover"],"36a"],[[".header-toolbar",":hover"],"887c4a6e"],[[".viewToolbar"],"36a"],[[".header-toolbar"],"36a"],[[":hover"],"5fbe2ff"],[[".partBorder"],"36a"],[[],"36a"]]},"TabFolder-ContentContainer":{"border":[[[".partBorder"],"36a"],[[],"dc65e06a"]]},"DateTime-Calendar-Day":{"color":[[[":hover",":selected"],"4004dc1c"],[[":otherMonth"],"3ff48b00"],[[":selected"],"3fed9ae8"],[[],"ffffffff"]],"background-color":[[[":selected",":unfocused"],"3ffcc400"],[[":hover",":selected"],"3fe4ab90"],[[":hover"],"40000bec"],[[":otherMonth"],"ffffffff"],[[":selected"],"3fff1408"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"text-shadow":[[[],"306900d"]]},"TableItem":{"color":[[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color":[[[":even",":linesvisible"],"40035180"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"background-image":[[[],"a505df1b"]],"text-decoration":[[[],"none"]],"text-shadow":[[[],"306900d"]]},"*":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"font":[[[],"dee31769"]],"border":[[[".partBorder"],"36a"],[["[BORDER"],"dc65e06a"],[[],"36a"]],"padding":[[[],"2144df1c"]]},"Tree-GridLine":{"color":[[[":horizontal"],"ffffffff"],[[],"3ffed240"]]},"CCombo-Button-Icon":{"background-image":[[[":hover"],"bc32ef3d.png"],[[],"ae8b4acf.png"]]},"Combo-Button-Icon":{"background-image":[[[":hover"],"bc32ef3d.png"],[[],"ae8b4acf.png"]]},"DateTime-UpButton-Icon":{"background-image":[[[":hover"],"9753a8ea.png"],[[],"b114ca5.png"]]},"Sash":{"background-color":[[[":hover"],"400034dc"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"background-image":[[[],"a505df1b"]],"border":[[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]]},"TabItem":{"background-color":[[[":hover"],"400034dc"],[[":selected"],"4004dc1c"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"background-image":[[[":hover"],"a505df1b"],[[":selected"],"a505df1b"],[[],"a505df1b"]],"border-top-color":[[[":selected"],"3fe4aeec"],[[],"4004dc1c"]],"border-bottom-color":[[[":selected"],"3fe4aeec"],[[],"4004dc1c"]],"text-shadow":[[[],"306900d"]],"padding":[[[":selected"],"3017804f"],[[],"cd9cfd28"]]},"ToolItem-Separator":{"width":[[[],"bc"]]},"TableColumn-SortIndicator":{"background-image":[[[":down"],"4b0a131f.png"],[[":up"],"801ec7f4.png"],[[],"a505df1b"]]},"ToolTip-Text":{"color":[[[],"3fe474a4"]],"font":[[[],"c9a3013"]],"text-shadow":[[[],"306900d"]]},"ScrollBar":{"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"40035180"]],"background-image":[[[],"a505df1b"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[[],"8393ccd2"]],"width":[[[],"2c1"]]},"ProgressBar":{"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"border":[[[".partBorder"],"36a"],[[],"dc65e06a"]],"border-radius":[[[],"54f1c057"]]},"Group-Frame":{"border":[[[".partBorder"],"36a"],[[],"e2677bf1"]],"border-radius":[[[],"54f1c057"]],"margin":[[[],"e4f0f7f3"]],"padding":[[[],"3b4c2033"]]},"TreeColumn-SortIndicator":{"background-image":[[[":down"],"4b0a131f.png"],[[":up"],"801ec7f4.png"],[[],"a505df1b"]]},"Shell-MinButton":{"margin":[[[":inactive"],"25c9a3ae"],[[],"25c9a3ae"]],"background-image":[[[":hover",":inactive"],"55afddf7.png"],[[":inactive"],"3bc1b40f.png"],[[":hover"],"55afddf7.png"],[[],"3bc1b40f.png"]]},"TableColumn":{"color":[[[":disabled"],"3ffeb15c"],[[],"3ff133d8"]],"font":[[[],"dee31769"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4003f66c"]],"background-image":[[[":hover"],"208f7d4b"],[[],"b8075ab4"]],"border-bottom":[[[":hover"],"36a"],[[],"36a"]],"padding":[[[],"6d693c7a"]],"text-shadow":[[[],"306900d"]]},"ToolTip-Image":{"background-image":[[["[ICON_WARNING"],"12dc3365.png"],[["[ICON_INFORMATION"],"1c99cf1e.png"],[["[ICON_ERROR"],"893ea652.png"],[[],"a505df1b"]]},"ScrollBar-Thumb-Icon":{"background-image":[[["[HORIZONTAL"],"c1d64071.png"],[["[VERTICAL"],"f8b1f12a.png"],[[],"a505df1b"]]},"CTabItem":{"font":[[[],"dee31769"]],"color":[[[":disabled"],"3fe41900"],[[":selected"],"4004dc1c"],[[],"3fed9ae8"]],"background-color":[[[":selected"],"3fe4aeec"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"padding":[[[],"b91f19d0"]],"spacing":[[[],"bc"]],"text-shadow":[[[],"306900d"]]},"Combo-Field":{"padding":[[[],"22349af6"]]},"Table":{"font":[[[],"dee31769"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"border":[[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]],"background-image":[[[],"a505df1b"]]},"Text-Message":{"color":[[[],"3ff98c68"]],"text-shadow":[[[],"306900d"]]},"Slider-DownButton-Icon":{"background-image":[[[":hover","[VERTICAL"],"9753a8ea.png"],[[":hover","[HORIZONTAL"],"f38bdb4e.png"],[["[VERTICAL"],"b114ca5.png"],[["[HORIZONTAL"],"ef158107.png"],[[],"a505df1b"]]},"Spinner-Field":{"padding":[[[],"22349af6"]]},"Tree":{"font":[[[],"dee31769"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"border":[[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]]},"Widget-ToolTip":{"color":[[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"400034dc"]],"border":[[[".partBorder"],"36a"],[[],"887c1601"]],"border-radius":[[[],"54f1c057"]],"background-image":[[[],"a505df1b"]],"padding":[[[],"30813518"]],"font":[[[],"dee31769"]],"opacity":[[[],"1.0"]],"animation":[[[],"1a8c6849"]],"box-shadow":[[[],"24cb24f5"]]},"DateTime-Calendar-PreviousYearButton":{"background-image":[[[":hover"],"faa5e887.png"],[[],"84135394.png"]],"cursor":[[[],"5c13d641"]]},"List-Item":{"color":[[[":even",":selected",":unfocused"],"4004dc1c"],[[":even",":selected"],"4004dc1c"],[[":selected",":unfocused"],"4004dc1c"],[[":selected"],"4004dc1c"],[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color":[[[":even",":selected",":unfocused"],"3ff73db4"],[[":even",":selected"],"3fe4aeec"],[[":even",":hover"],"400034dc"],[[":selected",":unfocused"],"3ff73db4"],[[":even"],"40035180"],[[":selected"],"3fe4aeec"],[[":hover"],"400034dc"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"background-image":[[[":even",":selected",":unfocused"],"f7088417"],[[":even",":selected"],"6630bd77"],[[":selected",":unfocused"],"f7088417"],[[":selected"],"6630bd77"],[[":hover"],"a1b41899"],[[],"a505df1b"]],"text-shadow":[[[],"306900d"]],"padding":[[[],"6e7d1555"]]},"Scale-Thumb":{"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"3fe4aeec"]],"border":[[[".partBorder"],"36a"],[[],"dc65e06a"]],"border-radius":[[[],"54f1c057"]]},"FileUpload":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"background-image":[[[":pressed"],"d25a7a25"],[[":hover"],"b94583ef"],[[],"2eb911d6"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"border":[[[".partBorder"],"36a"],[["[BORDER"],"dc65e06a"],[[],"dc65e06a"]],"border-radius":[[[],"8393ccd2"]],"opacity":[[[],"1.0"]],"animation":[[[":pressed"],"20"],[[],"2c52244e"]],"cursor":[[[":disabled"],"5c13d641"],[[],"e81f3e3d"]],"padding":[[[":pressed"],"4bf7d81"],[[],"cfda4371"]],"spacing":[[[],"5e"]],"font":[[[],"dee31769"]],"text-shadow":[[[],"306900d"]]},"Text-Search-Icon":{"background-image":[[[],"28932128.png"]],"spacing":[[[],"8d"]]},"Link":{"font":[[[],"dee31769"]],"border":[[[".partBorder"],"36a"],[["[BORDER"],"dc65e06a"],[[],"36a"]],"text-shadow":[[[],"306900d"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]]},"Button-CheckIcon":{"background-image":[[[":grayed",":hover",":selected"],"34777395.png"],[[":grayed",":selected"],"c2ef0d9b.png"],[[":hover",":selected"],"c00e5c5e.png"],[[":selected"],"619fc3dc.png"],[[":hover"],"dcbf5c35.png"],[[],"be95e0e0.png"]]},"Table-GridLine":{"color":[[[":horizontal"],"ffffffff"],[[],"40009eb8"]]},"Shell-CloseButton":{"margin":[[[":inactive"],"278f1df7"],[[],"278f1df7"]],"background-image":[[[":hover",":inactive"],"669675bb.png"],[[":inactive"],"9eddc0e7.png"],[[":hover"],"669675bb.png"],[[],"9eddc0e7.png"]]},"DateTime-DownButton-Icon":{"background-image":[[[":hover"],"453ee3bb.png"],[[],"92c0aead.png"]]},"Label":{"color":[[[".standaloneView"],"3ff133d8"],[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[".standaloneView"],"ffffffff"],[[".stackBorder"],"40024a4c"],[[".menuBorder"],"40007dd4"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"font":[[[".standaloneView"],"dee311c5"],[[],"dee31769"]],"border":[[[".standaloneView"],"36a"],[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[["[BORDER"],"54f1c057"]],"cursor":[[[],"5c13d641"]],"background-image":[[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"text-decoration":[[[],"none"]],"opacity":[[[],"1.0"]],"text-shadow":[[[],"306900d"]]},"Shell-Titlebar":{"color":[[[":inactive"],"3ff9f068"],[[],"4004dc1c"]],"background-color":[[[":inactive"],"3ff3d584"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"3fe4f000"]],"background-gradient-color":[[[":inactive"],"3ff3d584"],[[],"3fe4f000"]],"background-image":[[[":inactive"],"c3392633"],[[],"dac72631"]],"font":[[[],"dee31769"]],"margin":[[[],"2144df1c"]],"padding":[[[],"cfda4371"]],"height":[[[],"40a"]],"text-shadow":[[[],"306900d"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[[],"983ad24e"]]},"Tree-Indent":{"width":[[[],"2f0"]],"background-image":[[[":expanded",":first",":hover",":last"],"1677980f.png"],[[":collapsed",":first",":hover",":last"],"6753adb8.png"],[[":expanded",":first",":last"],"820410.png"],[[":collapsed",":first",":last"],"83e5081f.png"],[[":expanded",":hover",":last"],"1677980f.png"],[[":collapsed",":hover",":last"],"6753adb8.png"],[[":expanded",":first",":hover"],"1677980f.png"],[[":collapsed",":first",":hover"],"6753adb8.png"],[[":first",":last"],"a505df1b"],[[":expanded",":last"],"820410.png"],[[":collapsed",":last"],"83e5081f.png"],[[":expanded",":first"],"820410.png"],[[":collapsed",":first"],"83e5081f.png"],[[":expanded",":hover"],"1677980f.png"],[[":collapsed",":hover"],"6753adb8.png"],[[":last"],"a505df1b"],[[":first"],"a505df1b"],[[":line"],"a505df1b"],[[":expanded"],"820410.png"],[[":collapsed"],"83e5081f.png"],[[],"a505df1b"]]},"Combo-List":{"border":[[[".partBorder"],"36a"],[[],"dfa628db"]],"border-radius":[[[],"fd7cdcb2"]],"box-shadow":[[[],"272e1059"]]},"Combo-FocusIndicator":{"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"2abfdf6d"]],"margin":[[[],"e984a487"]],"opacity":[[[],"1.0"]]},"DateTime-DownButton":{"background-image":[[[":pressed"],"87f1e70d"],[[],"a03e8aba"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-left":[[[],"36a"]],"border-radius":[[[],"1372bd9e"]],"cursor":[[[],"5c13d641"]],"width":[[[],"34e"]]},"Link-Hyperlink":{"color":[[[":disabled"],"3ff73db4"],[[],"3fe4aeec"]],"text-shadow":[[[],"306900d"]],"text-decoration":[[[],"underline"]]},"Spinner":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed1e38"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"40047970"]],"background-image":[[["[BORDER"],"aadae5a7"],[[],"a505df1b"]],"font":[[[],"dee31769"]],"border":[[[":focused","[BORDER"],"dc65e06a"],[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[["[BORDER"],"54f1c057"]],"padding":[[[],"6d693c7a"]],"text-shadow":[[[],"306900d"]],"box-shadow":[[[":focused","[BORDER"],"306900d"],[[],"306900d"]]},"MenuItem-CascadeIcon":{"background-image":[[[],"a98bc12c.gif"]]},"ToolItem":{"color":[[[".menuBar",":hover"],"3fe4b0f4"],[[".header-overflow",":hover"],"3fe52980"],[[".header-toolbar",":hover"],"4004dc1c"],[[".menuBar"],"3fe4b0f4"],[[".header-overflow"],"3fe4896c"],[[".header-toolbar"],"4004dc1c"],[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color":[[[".menuBar",":hover"],"ffffffff"],[[".header-overflow",":hover"],"ffffffff"],[[".header-toolbar",":hover"],"ffffffff"],[[".menuBar"],"ffffffff"],[[":hover"],"4004dc1c"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"background-image":[[[".menuBar",":hover"],"fbcf3e3"],[[".header-toolbar",":hover"],"9738b181"],[[".menuBar"],"a505df1b"],[[":selected"],"541d109a.gif"],[[":pressed"],"541d109a.gif"],[[],"a505df1b"]],"border":[[[".viewToolbar",":selected"],"887c1e69"],[[".menuBar",":hover"],"e2677bf1"],[[".header-overflow",":hover"],"36a"],[[".header-toolbar",":hover"],"887c4a6e"],[[".viewToolbar"],"36a"],[[".menuBar"],"36a"],[[".header-overflow"],"36a"],[[".header-toolbar"],"36a"],[[":selected"],"dc65e06a"],[[":pressed"],"dc65e06a"],[[":hover"],"dc65e06a"],[["[FLAT"],"36a"],[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[[".menuBar",":hover"],"88c9c3f9"],[[":selected"],"54f1c057"],[[":pressed"],"54f1c057"],[[":hover"],"54f1c057"],[[],"2144df1c"]],"animation":[[[],"20"]],"spacing":[[[".menuBar"],"eb"],[[".header-toolbar"],"1d6"],[[],"bc"]],"padding":[[[".viewToolbar",":selected"],"2144df1c"],[[".menuBar",":hover"],"cc06b3d4"],[[".header-toolbar",":hover"],"80737479"],[[".menuBar"],"cc06b3d4"],[[".header-overflow"],"32b347e3"],[[".header-toolbar"],"80737479"],[[":selected"],"2e0351c4"],[[":pressed"],"2e0351c4"],[[":hover"],"22349af6"],[["[FLAT"],"18b84ff4"],[[],"22349af6"]],"opacity":[[[],"1.0"]],"text-shadow":[[[],"306900d"]]},"CTabFolder":{"border-color":[[[],"3ff92b10"]],"border-radius":[[[],"54f1c057"]]},"Tree-Checkbox":{"margin":[[[],"22c00b72"]],"background-image":[[[":checked",":grayed",":hover"],"34777395.png"],[[":checked",":grayed"],"c2ef0d9b.png"],[[":checked",":hover"],"c00e5c5e.png"],[[":checked"],"619fc3dc.png"],[[":hover"],"dcbf5c35.png"],[[],"be95e0e0.png"]]},"FileUpload-FocusIndicator":{"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"2abfdf6d"]],"padding":[[[],"2144df1c"]],"margin":[[[],"54f1c057"]],"opacity":[[[],"1.0"]]},"Menu":{"color":[[[".menuBar"],"3fe4b0f4"],[[".header-overflow"],"3ff112f4"],[[".header-toolbar"],"3fec3b58"],[[":disabled"],"3ffeb15c"],[[],"3fe4b0f4"]],"background-color":[[[".menuBar"],"4004dc1c"],[[".header-overflow"],"4004dc1c"],[[".header-toolbar"],"4004dc1c"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"font":[[[],"dee31769"]],"border":[[[".menuBar"],"e2677bf1"],[[".header-overflow"],"887c06d0"],[[".header-toolbar"],"887c06d0"],[[".partBorder"],"36a"],[[],"887c1e69"]],"border-radius":[[[".menuBar"],"fd7cdcb2"],[[".header-overflow"],"54f1c057"],[[".header-toolbar"],"fd7cdcb2"],[[],"54f1c057"]],"opacity":[[[],"1.0"]],"padding":[[[],"b97b7515"]],"animation":[[[],"20"]],"box-shadow":[[[],"2962c9bd"]]},"TabFolder":{"border":[[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]],"font":[[[],"dee31769"]]},"Button":{"color":[[[".tabOverflowInactive"],"3fed9ae8"],[[".tabOverflowActive"],"3fed9ae8"],[[".perspectiveActive"],"3fe4a154"],[[".perspective"],"3fe4a154"],[[".partInActiveActive"],"40047970"],[[".partInactive"],"3ff133d8"],[[".partActive"],"40047970"],[[".toolbarOverflowActive"],"3fed9ae8"],[[".toolbarOverflowInactive"],"3fed9ae8"],[[".viewCloseInactive"],"3fed9ae8"],[[".viewClose"],"3fed9ae8"],[[".configMenuButton"],"3fed9ae8"],[[".clearButton"],"3fed9ae8"],[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[":default","[TOGGLE"],"4004dc1c"],[[":default","[PUSH"],"4004dc1c"],[[":default","[ARROW"],"4004dc1c"],[[".tabOverflowInactive"],"ffffffff"],[[".tabOverflowActive"],"ffffffff"],[[".perspectiveActive"],"ffffffff"],[[".perspective"],"ffffffff"],[[".partInActiveActive"],"ffffffff"],[[".partInactive"],"ffffffff"],[[".partActive"],"ffffffff"],[[".toolbarOverflowActive"],"ffffffff"],[[".toolbarOverflowInactive"],"ffffffff"],[[".viewCloseInactive"],"ffffffff"],[[".viewClose"],"ffffffff"],[[".configMenuButton"],"ffffffff"],[[".clearButton"],"ffffffff"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"background-image":[[[":hover",":selected","[TOGGLE"],"d25a7a25"],[[".tabOverflowInactive",":hover"],"f4b75a7a.png"],[[".tabOverflowInactive",":pressed"],"35ff8519.png"],[[".tabOverflowActive",":hover"],"a5dd20b5.png"],[[".tabOverflowActive",":pressed"],"ad06bd9.png"],[[".perspectiveActive",":hover"],"a505df1b"],[[".perspectiveActive",":pressed"],"a505df1b"],[[".perspective",":pressed"],"a505df1b"],[[".perspective",":hover"],"a505df1b"],[[".partInActiveActive",":hover"],"a505df1b"],[[".partInActiveActive",":pressed"],"a505df1b"],[[".partInactive",":hover"],"a505df1b"],[[".partInactive",":pressed"],"a505df1b"],[[".partActive",":hover"],"a505df1b"],[[".partActive",":pressed"],"a505df1b"],[[".toolbarOverflowActive",":hover"],"f641cb59.png"],[[".toolbarOverflowActive",":pressed"],"58d22720.png"],[[".toolbarOverflowInactive",":hover"],"dc7ace07.png"],[[".toolbarOverflowInactive",":pressed"],"ce10b6e1.png"],[[".viewCloseInactive",":hover"],"976f4c7b.png"],[[".viewCloseInactive",":pressed"],"692c09fc.png"],[[".viewClose",":hover"],"4e7a0982.png"],[[".viewClose",":pressed"],"6a48ea6b.png"],[[".configMenuButton",":pressed"],"a505df1b"],[[".configMenuButton",":selected"],"a505df1b"],[[".configMenuButton",":hover"],"a505df1b"],[[".clearButton",":hover"],"a505df1b"],[[".clearButton",":pressed"],"a505df1b"],[["[BORDER","[RADIO"],"a505df1b"],[["[BORDER","[CHECK"],"a505df1b"],[[":selected","[TOGGLE"],"a3972397"],[[":pressed","[TOGGLE"],"d25a7a25"],[[":pressed","[PUSH"],"d25a7a25"],[[":pressed","[ARROW"],"d25a7a25"],[[":hover","[TOGGLE"],"b94583ef"],[[":hover","[PUSH"],"b94583ef"],[[":hover","[ARROW"],"b94583ef"],[[":default","[TOGGLE"],"2eb911d6"],[[":default","[PUSH"],"2eb911d6"],[[":default","[ARROW"],"2eb911d6"],[["[ARROW","[BORDER"],"2eb911d6"],[[".tabOverflowInactive"],"35ff8519.png"],[[".tabOverflowActive"],"ad06bd9.png"],[[".perspectiveActive"],"a505df1b"],[[".perspective"],"a505df1b"],[[".partInActiveActive"],"a505df1b"],[[".partInactive"],"a505df1b"],[[".partActive"],"a505df1b"],[[".toolbarOverflowActive"],"58d22720.png"],[[".toolbarOverflowInactive"],"ce10b6e1.png"],[[".viewCloseInactive"],"692c09fc.png"],[[".viewClose"],"6a48ea6b.png"],[[".configMenuButton"],"a505df1b"],[[".clearButton"],"a505df1b"],[["[ARROW"],"2eb911d6"],[["[BORDER"],"2eb911d6"],[["[TOGGLE"],"2eb911d6"],[["[PUSH"],"2eb911d6"],[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"border":[[[":default","[TOGGLE"],"dc65e06a"],[[":default","[PUSH"],"dc65e06a"],[[":default","[ARROW"],"dc65e06a"],[["[ARROW","[BORDER"],"dc65e06a"],[[".tabOverflowInactive"],"36a"],[[".tabOverflowActive"],"36a"],[[".perspectiveActive"],"36a"],[[".perspective"],"36a"],[[".partInActiveActive"],"36a"],[[".partInactive"],"36a"],[[".partActive"],"36a"],[[".toolbarOverflowActive"],"36a"],[[".toolbarOverflowInactive"],"36a"],[[".viewCloseInactive"],"36a"],[[".viewClose"],"36a"],[[".configMenuButton"],"36a"],[[".clearButton"],"36a"],[["[ARROW"],"dc65e06a"],[["[BORDER"],"dc65e06a"],[["[TOGGLE"],"dc65e06a"],[["[PUSH"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[["[ARROW","[BORDER"],"8393ccd2"],[["[ARROW"],"8393ccd2"],[["[BORDER"],"8393ccd2"],[["[TOGGLE"],"8393ccd2"],[["[PUSH"],"8393ccd2"]],"opacity":[[[],"1.0"]],"text-decoration":[[[],"none"]],"animation":[[[":pressed","[TOGGLE"],"20"],[[":pressed","[PUSH"],"20"],[[":pressed","[ARROW"],"20"],[["[ARROW","[BORDER"],"2c52244e"],[["[ARROW"],"2c52244e"],[["[BORDER"],"2c52244e"],[["[TOGGLE"],"2c52244e"],[["[PUSH"],"2c52244e"],[[],"20"]],"cursor":[[[":disabled","[TOGGLE"],"5c13d641"],[[":disabled","[PUSH"],"5c13d641"],[[":disabled","[ARROW"],"5c13d641"],[["[ARROW","[BORDER"],"e81f3e3d"],[["[ARROW"],"e81f3e3d"],[["[BORDER"],"e81f3e3d"],[["[TOGGLE"],"e81f3e3d"],[["[PUSH"],"e81f3e3d"],[[],"5c13d641"]],"padding":[[[":pressed","[TOGGLE"],"4bf7d81"],[[":pressed","[PUSH"],"4bf7d81"],[[":pressed","[ARROW"],"4bf7d81"],[["[ARROW","[BORDER"],"ca2ee18a"],[[".tabOverflowInactive"],"54f1c057"],[[".tabOverflowActive"],"54f1c057"],[[".toolbarOverflowActive"],"54f1c057"],[[".toolbarOverflowInactive"],"54f1c057"],[[".viewClose"],"54f1c057"],[[".configMenuButton"],"f626d399"],[[".clearButton"],"54f1c057"],[["[ARROW"],"ca2ee18a"],[["[BORDER"],"cfda4371"],[["[TOGGLE"],"cfda4371"],[["[PUSH"],"cfda4371"],[[],"bcebbb2b"]],"spacing":[[["[RADIO"],"bc"],[["[CHECK"],"bc"],[[],"5e"]],"font":[[[".perspective",":hover"],"c9a2fa1"],[[".perspectiveActive"],"c9a2fa1"],[[".perspective"],"dee311c5"],[[".partInActiveActive"],"dee311c5"],[[".partInactive"],"dee311c5"],[[".partActive"],"dee311c5"],[[],"dee31769"]],"text-shadow":[[[],"306900d"]]},"CLabel":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"font":[[[],"dee31769"]],"border":[[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[["[BORDER"],"54f1c057"]],"cursor":[[[],"5c13d641"]],"background-image":[[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"padding":[[[],"8393ccd2"]],"spacing":[[[],"eb"]],"opacity":[[[],"1.0"]],"text-shadow":[[[],"306900d"]]},"MenuItem-CheckIcon":{"background-image":[[[],"ff030f0f.gif"]]},"Scale":{"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"border":[[[".partBorder"],"36a"],[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius":[[[],"2144df1c"]]},"ToolTip":{"font":[[[],"dee31769"]],"color":[[[],"3fe41900"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"40047970"]],"cursor":[[[],"5c13d641"]],"background-image":[[[],"6c14feac"]],"opacity":[[[],"1.0"]],"border":[[[".partBorder"],"36a"],[[],"dc65e06a"]],"border-radius":[[[],"1d4ced0f"]],"padding":[[[],"8393ccd2"]],"animation":[[[],"1a8c6849"]],"box-shadow":[[[],"275f1b59"]]},"Slider-Thumb":{"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"dc65e06a"]],"border-radius":[[[],"54f1c057"]],"background-image":[[[":pressed","[VERTICAL"],"5895a802"],[[":pressed","[HORIZONTAL"],"d25a7a25"],[["[VERTICAL"],"2c3d9652"],[["[HORIZONTAL"],"b94583ef"],[[],"a505df1b"]]},"CCombo-List":{"border":[[[".partBorder"],"36a"],[[],"dfa628db"]],"border-radius":[[[],"fd7cdcb2"]],"box-shadow":[[[],"272e1059"]]},"ScrollBar-DownButton-Icon":{"background-image":[[[":hover","[HORIZONTAL"],"e27d1512.png"],[[":hover","[VERTICAL"],"9753a8ea.png"],[["[HORIZONTAL"],"afa52be2.png"],[["[VERTICAL"],"b114ca5.png"],[[],"a505df1b"]]},"Display":{"rwt-shadow-color":[[[],"3ff98c68"]],"rwt-highlight-color":[[[],"4004dc1c"]],"rwt-darkshadow-color":[[[],"3ff53320"]],"rwt-lightshadow-color":[[[],"40006240"]],"rwt-thinborder-color":[[[],"3ffa2a74"]],"rwt-selectionmarker-color":[[[],"400457b0"]],"rwt-infobackground-color":[[[],"4004dc1c"]],"rwt-error-image":[[[],"dadc0503.png"]],"rwt-information-image":[[[],"fe40e850.png"]],"rwt-working-image":[[[],"fe40e850.png"]],"rwt-question-image":[[[],"89b0dad4.png"]],"rwt-warning-image":[[[],"fea3fec0.png"]],"rwt-fontlist":[[[],"67d9a7ad"]],"background-image":[[[],"ee7d83c5.png"]],"font":[[[],"dee31769"]]},"ToolBar":{"font":[[[],"dee31769"]],"color":[[[".menuBar"],"3fe4b0f4"],[[".header-toolbar"],"4004dc1c"],[[":disabled"],"3ffeb15c"],[[],"3fe41900"]],"background-color":[[[".viewToolbar"],"ffffffff"],[[".menuBar"],"ffffffff"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"padding":[[[".viewToolbar"],"6d693c7a"],[[".menuBar"],"2144df1c"],[[".header-toolbar"],"512e2b93"],[[],"2144df1c"]],"spacing":[[[".viewToolbar"],"5e"],[[".menuBar"],"497"],[[".header-toolbar"],"497"],[[],"0"]],"border":[[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[["[BORDER"],"54f1c057"]],"opacity":[[[],"1.0"]]},"ExpandBar":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"font":[[[],"dee31769"]],"border":[[["[BORDER"],"dfa628db"],[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[["[BORDER"],"2144df1c"]]},"Button-RadioIcon":{"background-image":[[[":hover",":selected"],"3d796824.png"],[[":selected"],"1113ce64.png"],[[":hover"],"28dbc48b.png"],[[],"ec38c861.png"]]},"DateTime-DropDownCalendar":{"border":[[[".partBorder"],"36a"],[[],"dc902e9c"]]},"DateTime-Field":{"color":[[[":selected"],"3fed9ae8"],[[],"ffffffff"]],"background-color":[[[":selected"],"3fff1408"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"padding":[[[],"22349af6"]],"text-shadow":[[[],"306900d"]]},"DateTime-Calendar-NextYearButton":{"background-image":[[[":hover"],"d6a28f76.png"],[[],"2011457e.png"]],"cursor":[[[],"5c13d641"]]},"FormText":{"color":[[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"font":[[[],"dee31769"]],"border":[[[".partBorder"],"36a"],[["[BORDER"],"dc65e06a"],[[],"36a"]]},"ScrollBar-UpButton-Icon":{"background-image":[[[":hover","[HORIZONTAL"],"80b4cb50.png"],[[":hover","[VERTICAL"],"453ee3bb.png"],[["[HORIZONTAL"],"30bae239.png"],[["[VERTICAL"],"92c0aead.png"],[[],"a505df1b"]]},"DateTime-Calendar-NextMonthButton":{"background-image":[[[":hover"],"edb7d80a.png"],[[],"cdaf2a02.png"]],"cursor":[[[],"5c13d641"]]},"CCombo":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed1e38"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"40047970"]],"background-image":[[["[BORDER"],"aadae5a7"],[[],"a505df1b"]],"font":[[[],"dee311c5"]],"border":[[[":focused","[BORDER"],"dfa628db"],[["[BORDER"],"dfa628db"],[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[["[BORDER"],"54f1c057"],[[],"2144df1c"]],"text-shadow":[[[],"306900d"]],"box-shadow":[[[":focused","[BORDER"],"306900d"],[["[BORDER"],"306900d"],[[],"306900d"]]},"ScrollBar-Thumb":{"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"border":[[[":pressed"],"98585c31"],[[".partBorder"],"36a"],[[],"de1b2d87"]],"border-radius":[[[],"2144df1c"]],"background-image":[[[":pressed","[HORIZONTAL"],"d25a7a25"],[[":hover","[HORIZONTAL"],"b94583ef"],[[":pressed","[VERTICAL"],"5895a802"],[[":hover","[VERTICAL"],"2c3d9652"],[["[HORIZONTAL"],"2eb911d6"],[["[VERTICAL"],"2762759"],[[],"a505df1b"]],"min-height":[[[],"3ac"]]},"CCombo-FocusIndicator":{"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"2abfdf6d"]],"margin":[[[],"e984a487"]],"opacity":[[[],"1.0"]]},"SystemMessage-DisplayOverlay":{"background-image":[[[],"a505df1b"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"3f0e249a"]]},"Composite":{"border":[[[".inactiveButton"],"36a"],[[".tabInactive"],"9811d3e2"],[[".tabActive"],"887c1601"],[[".partBorder"],"36a"],[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius":[[[".tabInactive"],"240bc999"],[[".tabActive"],"240bc999"]],"background-color":[[[".inactiveButton"],"ffffffff"],[["[BORDER"],"4004dc1c"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"background-image":[[["[BORDER"],"a505df1b"],[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"padding":[[[],"2144df1c"]],"opacity":[[[],"1.0"]],"box-shadow":[[[],"306900d"]],"animation":[[[],"20"]]},"MenuItem-RadioIcon":{"background-image":[[[],"8a7aa6f4.gif"]]},"Slider-UpButton-Icon":{"background-image":[[[":hover","[VERTICAL"],"453ee3bb.png"],[[":hover","[HORIZONTAL"],"e2782041.png"],[["[VERTICAL"],"92c0aead.png"],[["[HORIZONTAL"],"e09a4464.png"],[[],"a505df1b"]]},"Group-Label":{"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[[],"2144df1c"]],"padding":[[[],"246fa55c"]],"margin":[[[],"6da1e5f0"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"color":[[[],"3fed1e38"]],"text-shadow":[[[],"306900d"]]},"Table-Checkbox":{"width":[[[],"3db"]],"margin":[[[],"2144df1c"]],"background-image":[[[":checked",":grayed",":hover"],"34777395.png"],[[":checked",":grayed"],"c2ef0d9b.png"],[[":checked",":hover"],"c00e5c5e.png"],[[":checked"],"619fc3dc.png"],[[":hover"],"dcbf5c35.png"],[[],"be95e0e0.png"]]},"TreeItem":{"color":[[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color":[[[":even",":linesvisible"],"40035180"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"background-image":[[[],"a505df1b"]],"text-decoration":[[[],"none"]],"text-shadow":[[[],"306900d"]]},"DateTime-DropDownButton-Icon":{"background-image":[[[":hover"],"453ee3bb.png"],[[],"92c0aead.png"]]},"Slider":{"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"40035180"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[[],"2144df1c"]]},"Browser":{"border":[[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]]},"DateTime-Calendar-Navbar":{"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[[],"2144df1c"]],"color":[[[":disabled"],"3ffeb15c"],[[],"4004dc1c"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"3fe4ab90"]],"background-image":[[[],"a505df1b"]],"font":[[[],"c9a2fa1"]],"text-shadow":[[[],"306900d"]]},"CoolItem-Handle":{"border":[[[".partBorder"],"36a"],[[],"c411a436"]],"width":[[[],"bc"]]},"ToolTip-Message":{"color":[[[],"3fe41900"]],"font":[[[],"dee31769"]],"text-shadow":[[[],"306900d"]]},"ScrollBar-DownButton":{"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"de1b2d87"]],"border-radius":[[["[VERTICAL"],"31b7ceab"],[["[HORIZONTAL"],"aaf82148"]],"background-image":[[[":pressed","[HORIZONTAL"],"d25a7a25"],[[":hover","[HORIZONTAL"],"b94583ef"],[[":pressed","[VERTICAL"],"5895a802"],[[":hover","[VERTICAL"],"2c3d9652"],[["[HORIZONTAL"],"2eb911d6"],[["[VERTICAL"],"2762759"],[[],"a505df1b"]],"cursor":[[[],"5c13d641"]]},"List":{"font":[[[],"dee31769"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"border":[[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]]},"DateTime-UpButton":{"background-image":[[[":pressed"],"7f49586b"],[[],"ff331b35"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"border-left":[[[],"36a"]],"border-radius":[[[],"22c00b72"]],"cursor":[[[],"5c13d641"]],"width":[[[],"34e"]]},"Shell-DisplayOverlay":{"background-color":[[[".confDialog"],"3ff7c144"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"3ff48b00"]],"background-image":[[[".confDialog"],"a505df1b"],[[],"a505df1b"]],"animation":[[[".confDialog"],"1a72bef3"],[[],"1a897981"]],"opacity":[[[".confDialog"],"0.5"],[[],"0.2"]]},"Button-FocusIndicator":{"background-color":[[["[RADIO"],"ffffffff"],[["[CHECK"],"ffffffff"],[["[TOGGLE"],"ffffffff"],[["[PUSH"],"ffffffff"],[["[ARROW"],"ffffffff"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"4004dc1c"]],"border":[[[".tabOverflowInactive"],"36a"],[[".tabOverflowActive"],"36a"],[[".perspectiveActive"],"36a"],[[".perspective"],"36a"],[[".partInActiveActive"],"36a"],[[".partInactive"],"36a"],[[".partActive"],"36a"],[[".toolbarOverflowActive"],"36a"],[[".toolbarOverflowInactive"],"36a"],[[".viewCloseInactive"],"36a"],[[".viewClose"],"36a"],[[".configMenuButton"],"36a"],[[".clearButton"],"36a"],[["[RADIO"],"2abfdf6d"],[["[CHECK"],"2abfdf6d"],[["[TOGGLE"],"2abfdf6d"],[["[PUSH"],"2abfdf6d"],[["[ARROW"],"2abfdf6d"],[[".partBorder"],"36a"],[["[BORDER"],"dc65e06a"],[[],"36a"]],"padding":[[["[RADIO"],"cdf891ed"],[["[CHECK"],"cdf891ed"],[["[TOGGLE"],"2144df1c"],[["[PUSH"],"2144df1c"],[["[ARROW"],"2144df1c"],[[],"2144df1c"]],"margin":[[["[RADIO"],"2144df1c"],[["[CHECK"],"2144df1c"],[["[TOGGLE"],"54f1c057"],[["[PUSH"],"54f1c057"],[["[ARROW"],"54f1c057"]],"opacity":[[["[RADIO"],"1.0"],[["[CHECK"],"1.0"],[["[TOGGLE"],"1.0"],[["[PUSH"],"1.0"],[["[ARROW"],"1.0"]]},"Sash-Handle":{"background-image":[[[],"a505df1b"]]},"CTabFolder-DropDownButton-Icon":{"background-image":[[[":hover"],"3d99024e.png"],[[],"b6f1bd73.png"]]},"DateTime-Calendar-PreviousMonthButton":{"background-image":[[[":hover"],"27211de7.png"],[[],"8dd42372.png"]],"cursor":[[[],"5c13d641"]]},"Table-RowOverlay":{"color":[[[":even",":linesvisible",":selected",":unfocused"],"4004dc1c"],[[":even",":linesvisible",":selected"],"4004dc1c"],[[":selected",":unfocused"],"4004dc1c"],[[":selected"],"4004dc1c"],[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color":[[[":even",":linesvisible",":selected",":unfocused"],"3ff73db4"],[[":even",":linesvisible",":selected"],"3fe4aeec"],[[":even",":hover",":linesvisible"],"400034dc"],[[":selected",":unfocused"],"3ff73db4"],[[":selected"],"3fe4aeec"],[[":hover"],"400034dc"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"background-image":[[[],"a505df1b"]]},"Spinner-DownButton-Icon":{"background-image":[[[":hover"],"453ee3bb.png"],[[],"92c0aead.png"]]},"Tree-RowOverlay":{"color":[[[":even",":linesvisible",":selected",":unfocused"],"4004dc1c"],[[":even",":linesvisible",":selected"],"4004dc1c"],[[":selected",":unfocused"],"4004dc1c"],[[":selected"],"4004dc1c"],[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color":[[[":even",":linesvisible",":selected",":unfocused"],"3ff73db4"],[[":even",":linesvisible",":selected"],"3fe4aeec"],[[":even",":hover",":linesvisible"],"400034dc"],[[":selected",":unfocused"],"3ff73db4"],[[":selected"],"3fe4aeec"],[[":hover"],"400034dc"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"background-image":[[[],"a505df1b"]]},"Table-Cell":{"padding":[[[],"1e44f46b"]],"spacing":[[[],"8d"]]},"Text":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed1e38"]],"background-color":[[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"40047970"]],"font":[[[],"dee31769"]],"border":[[[":focused","[BORDER","[MULTI"],"dc65e06a"],[[":focused","[MULTI"],"dc65e06a"],[[":focused","[BORDER"],"dc65e06a"],[["[BORDER"],"dc65e06a"],[[".partBorder"],"36a"],[[],"36a"]],"border-radius":[[["[BORDER"],"54f1c057"]],"background-image":[[["[MULTI"],"a505df1b"],[["[BORDER"],"aadae5a7"],[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"padding":[[[],"22349af6"]],"text-shadow":[[[],"306900d"]],"box-shadow":[[[":focused","[BORDER","[MULTI"],"306900d"],[[":focused","[MULTI"],"306900d"],[[":focused","[BORDER"],"306900d"],[["[BORDER","[MULTI"],"306900d"],[["[BORDER"],"306900d"],[[],"306900d"]]},"MenuItem":{"color":[[[".menuBar",":hover"],"3fe52980"],[[".header-overflow",":hover"],"3fe52980"],[[".header-toolbar",":hover"],"3fe52980"],[[".menuBar"],"3fe4896c"],[[".header-overflow"],"3fe4896c"],[[".header-toolbar"],"3fe4896c"],[[":pressed"],"4004dc1c"],[[":hover"],"3fed9ae8"],[[":disabled"],"3ffeb15c"],[[],"3fe41900"]],"background-color":[[[".menuBar",":hover"],"ffffffff"],[[".header-overflow",":hover"],"ffffffff"],[[".header-toolbar",":hover"],"ffffffff"],[[":pressed"],"3fe4aeec"],[[":hover"],"400034dc"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"ffffffff"]],"background-image":[[[],"a505df1b"]],"opacity":[[[],"1.0"]],"text-shadow":[[[],"306900d"]],"padding":[[["[SEPARATOR"],"ba0b30ff"],[[],"b91f19d0"]]},"Text-Cancel-Icon":{"background-image":[[[],"5490d203.gif"]],"spacing":[[[],"8d"]]},"ProgressBar-Indicator":{"background-color":[[[":error"],"3ffd1540"],[[":paused"],"40024a4c"],[[".compTrans"],"ffffffff"],[[".compGray"],"40024a4c"],[[".shellGray"],"40024a4c"],[[],"3fe4aeec"]],"background-image":[[[],"a505df1b"]],"border":[[[".partBorder"],"36a"],[[],"36a"]],"opacity":[[[],"1.0"]]},"ExpandItem":{"border":[[[".partBorder"],"36a"],[[],"dfa628db"]],"border-radius":[[[],"2144df1c"]]},"CCombo-Field":{"padding":[[[],"22349af6"]]},"Shell-MaxButton":{"margin":[[[":inactive"],"25c9a3ae"],[[],"25c9a3ae"]],"background-image":[[[":hover",":inactive",":maximized"],"de3d280e.png"],[[":inactive",":maximized"],"c537732e.png"],[[":hover",":maximized"],"de3d280e.png"],[[":hover",":inactive"],"15e0a581.png"],[[":maximized"],"c537732e.png"],[[":inactive"],"38325440.png"],[[":hover"],"15e0a581.png"],[[],"38325440.png"]]},"Spinner-UpButton-Icon":{"background-image":[[[":hover"],"9753a8ea.png"],[[],"b114ca5.png"]]}}}
\ No newline at end of file
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/rap-rwt.theme.Default.json b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/rap-rwt.theme.Default.json
deleted file mode 100644
index 650ad30..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/rap-rwt.theme.Default.json
+++ /dev/null
@@ -1 +0,0 @@
-{"values":{"colors":{"3ff98c68":[167,166,170,1],"4004dc1c":[255,255,255,1],"3ff53320":[133,135,140,1],"40006240":[220,223,228,1],"3ffa2a74":[172,168,153,1],"400457b0":[254,200,60,1],"3fed9ae8":[74,74,74,1],"4002eec0":[240,240,240,1],"3ffeb15c":[207,207,207,1],"3ec157cd":[128,128,128,0.2],"3fff1408":[210,210,210,1],"400437a8":[250,250,250,1],"3fecb31c":[65,102,147,1],"ffffffff":"undefined","4002cddc":[239,239,239,1],"3ffc6154":[189,189,189,1],"3fe41900":[0,0,0,1],"3fff9798":[214,214,214,1],"3ff73db4":[149,149,149,1],"3ff4abe4":[129,129,129,1],"3fe4aeec":[0,88,159,1],"400034dc":[218,233,247,1],"3fe4b0f4":[0,89,165,1],"400416c4":[249,249,249,1],"3ff3d584":[121,150,165,1],"3fe4f000":[0,128,192,1],"3ff48b00":[128,128,128,1],"3fed1e38":[70,74,78,1],"3fefb044":[88,130,181,1],"3ffb5a34":[181,181,181,1],"40009eb8":[222,222,222,1],"3ffed240":[208,208,208,1],"400184f4":[229,229,229,1],"3ffcc400":[192,192,192,1],"3fe4ab90":[0,86,156,1],"40016410":[228,228,228,1],"40047970":[252,252,252,1]},"images":{"994dccc6.png":[32,32],"2c4058a5.png":[32,32],"83e441e9.png":[32,32],"aa96e44e.png":[32,32],"3c7d3330.png":[1,1600],"4f61765f.gif":[32,32],"94a6048c.png":[21,17],"fea0bb8.png":[21,17],"956fb108.png":[21,17],"3655dc8d.png":[21,17],"eee56d43.png":[21,17],"903dd6ca.png":[21,17],"68188572.png":[17,17],"46d9d135.png":[17,17],"1a81f5fd.png":[17,17],"c290fe4b.png":[17,17],"9f435c8c.png":[9,9],"5c00d24b.png":[9,9],"c94fc8ad.png":[9,9],"1d0cc994.png":[9,9],"d140090f.png":[7,5],"7d708cd9.png":[7,5],"5586d417.png":[10,7],"fa5334b.png":[10,7],"144ea8f9.gif":[16,7],"d218be7e.gif":[16,5],"eb8ac0f1.gif":[13,13],"dd851a27.png":[32,32],"4994768a.png":[27,27],"63a3ac85.png":[27,27],"baf651b9.png":[27,27],"679d075a.png":[27,27],"9db0efc.png":[27,27],"60504cca.png":[27,27],"bd03145b.png":[27,27],"4cdd7012.png":[27,27],"cf31b060.png":[7,5],"49104d78.png":[7,5],"973e534e.png":[7,5],"d1516768.png":[7,5],"2fc16aa8.png":[9,5],"5b8ba614.png":[9,5],"9b0a9001.png":[16,16],"1691d3de.gif":[16,16],"110f0331.png":[7,5],"cde2f9ef.png":[7,7],"c782daa1.png":[6,9],"d282b4e5.png":[7,7],"4ee00e3c.png":[6,9],"fcb47c07.png":[6,7],"5fd49387.png":[6,7],"3622b9ea.png":[6,7],"1faf9af7.png":[6,7],"d40ddead.png":[10,7],"89265bb2.png":[10,7],"f80ab95c.png":[10,7],"2d244d58.png":[10,7],"d7a9517.png":[7,5],"d886e9d6.png":[7,5],"bc44aa73.png":[7,5],"306e0068.png":[7,5],"dee8cc66.png":[16,16],"6cbccb98.png":[16,16],"d1af3dc.png":[16,16],"50cab11f.png":[16,16],"951d388e.png":[3,14],"68b89865.png":[14,3],"2ed10572.png":[32,32],"5be1033a.png":[10,10],"17352e6f.png":[10,10],"827a3489.png":[10,10],"a30b8da1.png":[10,10],"1888a858.png":[32,32],"d19cc93d.png":[32,32],"627301a4.png":[32,32],"b107e71b.png":[7,5],"56abe5a7.png":[7,5],"bf671604.png":[32,32],"ba1d7000.png":[10,10],"fb90316c.png":[10,10],"6edf2b8a.png":[10,10],"3aee7904.png":[10,10]},"fonts":{"67d9b899":{"family":["Segoe UI","Corbel","Calibri","Tahoma","Lucida Sans Unicode"],"size":14,"bold":false,"italic":false},"dee322b1":{"family":["Verdana","Lucida Sans","Arial","Helvetica","sans-serif"],"size":14,"bold":false,"italic":false},"dee30c21":{"family":["Verdana","Lucida Sans","Arial","Helvetica","sans-serif"],"size":10,"bold":false,"italic":false},"c9a3013":{"family":["Verdana","Lucida Sans","Arial","Helvetica","sans-serif"],"size":14,"bold":true,"italic":false}},"borders":{"dc2df36f":{"width":1,"style":"solid","color":"#a0b3ca"},"dc65e06a":{"width":1,"style":"solid","color":"#a4a4a4"},"36a":{"width":0,"style":null,"color":null},"e0c04a17":{"width":1,"style":"solid","color":"#bdbdbd"},"e169913b":{"width":1,"style":"solid","color":"#d2d2d2"},"2abfdf6d":{"width":1,"style":"dotted","color":"#b8b8b8"},"9249fc9e":{"width":1,"style":"solid","color":"#4f7cb1"},"dee0ab31":{"width":1,"style":"solid","color":"#aaaaaa"},"c411a436":{"width":1,"style":"outset","color":null},"5fbe2ff":{"width":1,"style":"inset","color":null},"95a5245e":{"width":1,"style":"solid","color":"#6e6e6e"},"dc902e9c":{"width":1,"style":"solid","color":"#a7a6aa"}},"boxdims":{"54f1c057":[2,2,2,2],"2ce1a471":[8,8,8,8],"2144df1c":[0,0,0,0],"5954bb3a":[10,10,10,10],"c9967dea":[6,15,6,15],"1a9a9d68":[3,3,3,0],"cdf891ed":[2,2,2,1],"10f669f0":[0,2,2,0],"86afb7a3":[5,10,5,10],"fe3f1fd4":[20,0,0,0],"b1369cc8":[15,8,8,8],"543919dd":[2,10,2,10],"a35b8659":[10,10,10,20],"27a454c8":[4,6,4,6],"cc06b3d4":[0,10,0,10],"2708e187":[4,10,4,10],"655c8929":[15,15,15,15],"9e1e81c6":[0,-2,0,0],"bf374b8e":[6,10,6,10],"22c00b72":[0,2,0,0],"1372bd9e":[0,0,2,0],"a680cf80":[6,6,7,6],"bf9bfec1":[6,6,6,6],"b7669218":[8,3,8,3],"f0a23488":[5,3,5,3],"26291b05":[0,0,0,4],"e35af382":[9,8,8,9],"c8dd5d18":[8,10,8,6],"8393ccd2":[3,3,3,3],"db8f674b":[5,3,6,3],"88c9c3f9":[2,2,0,0],"654376bb":[2,0,0,2],"fd7cdcb2":[0,0,2,2]},"gradients":{"8d0c9e31":{"percents":[0,100],"colors":["#f8f9ff","#f4f4f4"],"vertical":false},"92d14a78":{"percents":[0,100],"colors":["#d5d5d5","#eaeaea"],"vertical":true},"b1d21d8f":{"percents":[0,100],"colors":["#eaeaea","#d5d5d5"],"vertical":true},"7e37263d":{"percents":[0,100],"colors":["#e2eefc","#d4d4d4"],"vertical":true},"70272c87":{"percents":[0,100],"colors":["#f9f9f9","#e4e4e4"],"vertical":true},"45861c75":{"percents":[0,100],"colors":["#b5b5b5","#818181"],"vertical":true},"380010fc":{"percents":[0,100],"colors":["#5882b5","#416693"],"vertical":true},"84877d39":{"percents":[0,100],"colors":["#ebebeb","#d5d5d5"],"vertical":true},"7815b514":{"percents":[0,100],"colors":["#f4f4f4","#ffffff"],"vertical":true},"e7560a70":{"percents":[0,100],"colors":["#416693","#5882b5"],"vertical":true},"f051a2ce":{"percents":[0,100],"colors":["#bb1d1d","#fc0000"],"vertical":true},"22c3c0e1":{"percents":[0,100],"colors":["#818181","#b5b5b5"],"vertical":true},"4766b6e9":{"percents":[0,100],"colors":["#f9f9f9","#efefef"],"vertical":true},"4dbd8357":{"percents":[0,100],"colors":["#efefef","#e4e4e4"],"vertical":true},"b892b271":{"percents":[0,100],"colors":["#e4e4e4","#f9f9f9"],"vertical":true}},"animations":{"1a8c6849":{"fadeIn":[200,"linear"],"fadeOut":[600,"easeOut"]},"20":{},"1a897981":{"fadeIn":[200,"linear"],"fadeOut":[400,"easeOut"]}},"shadows":{"306900d":null,"be859fbd":[false,0,1,0,0,"#ffffff",1],"b42ba80d":[false,0,0,5,0,"#4f7cb1",1],"2739e22c":[true,0,0,3,0,"#bdbdbd",1],"d0dcdf6d":[false,0,0,4,0,"#ababab",1],"e0bb8acd":[false,0,0,4,0,"#adadad",1]},"cursors":{"5c13d641":"default","e81f3e3d":"pointer"},"dimensions":{"149":7,"5e":2,"582":30,"1d6":10,"6fa":38,"8d":3,"3db":21,"0":0,"bc":4,"2f0":16,"eb":5,"3ac":20}},"theme":{"Spinner-DownButton":{"background-image":[[[":disabled"],"a505df1b"],[[],"4dbd8357"]],"background-color":[[[":disabled"],"ffffffff"],[[],"4002cddc"]],"border":[[[],"36a"]],"border-left":[[[],"e0c04a17"]],"border-radius":[[[],"1372bd9e"]],"cursor":[[[],"5c13d641"]],"width":[[[],"582"]]},"DateTime-DropDownButton":{"background-image":[[[":disabled"],"a505df1b"],[[],"70272c87"]],"background-color":[[[":disabled"],"ffffffff"],[[],"4002eec0"]],"border":[[[],"36a"]],"border-left":[[[],"e0c04a17"]],"border-radius":[[[],"10f669f0"]],"cursor":[[[],"5c13d641"]],"width":[[[],"582"]]},"CoolBar":{"background-image":[[[],"a505df1b"]]},"TreeColumn":{"color":[[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"font":[[[],"dee322b1"]],"background-color":[[[],"4002eec0"]],"background-image":[[[":hover"],"b892b271"],[[],"70272c87"]],"border-bottom":[[[],"e0c04a17"]],"padding":[[[],"c8dd5d18"]],"text-shadow":[[[],"306900d"]]},"ScrollBar-UpButton":{"background-color":[[[],"ffffffff"]],"border":[[[],"36a"]],"border-radius":[[[],"2144df1c"]],"background-image":[[["[VERTICAL"],"6edf2b8a.png"],[["[HORIZONTAL"],"3aee7904.png"],[[],"a505df1b"]],"cursor":[[[],"5c13d641"]]},"ExpandItem-Button":{"background-image":[[[":expanded",":hover"],"dee8cc66.png"],[[":expanded"],"6cbccb98.png"],[[":hover"],"d1af3dc.png"],[[],"50cab11f.png"]]},"Spinner-UpButton":{"background-image":[[[":disabled"],"a505df1b"],[[],"4766b6e9"]],"background-color":[[[":disabled"],"ffffffff"],[[],"4002cddc"]],"border":[[[],"36a"]],"border-left":[[[],"e0c04a17"]],"border-radius":[[[],"22c00b72"]],"cursor":[[[],"5c13d641"]],"width":[[[],"582"]]},"Button-ArrowIcon":{"background-image":[[["[RIGHT"],"9f435c8c.png"],[["[LEFT"],"5c00d24b.png"],[["[DOWN"],"c94fc8ad.png"],[["[UP"],"1d0cc994.png"],[[],"a505df1b"]]},"Group":{"background-color":[[[],"4004dc1c"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"font":[[[],"dee30c21"]],"border":[[["[BORDER"],"dc65e06a"],[[],"36a"]]},"Label-SeparatorLine":{"border":[[["[SHADOW_OUT"],"c411a436"],[["[SHADOW_IN"],"5fbe2ff"],[[],"dc65e06a"]],"border-radius":[[[],"2144df1c"]],"background-color":[[[],"ffffffff"]],"background-image":[[[],"a505df1b"]],"width":[[[],"5e"]]},"Slider-UpButton":{"background-color":[[[],"40016410"]],"border":[[[],"e0c04a17"]],"border-radius":[[["[VERTICAL"],"fd7cdcb2"],[["[HORIZONTAL"],"10f669f0"]],"background-image":[[[":pressed","[VERTICAL"],"a505df1b"],[[":pressed","[HORIZONTAL"],"a505df1b"],[["[VERTICAL"],"a505df1b"],[["[HORIZONTAL"],"a505df1b"],[[],"a505df1b"]],"cursor":[[[],"5c13d641"]],"padding":[[[],"2144df1c"]]},"DateTime":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed1e38"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"font":[[[],"dee322b1"]],"border":[[[":focused","[BORDER"],"9249fc9e"],[["[BORDER"],"e0c04a17"],[[],"36a"]],"border-radius":[[["[BORDER"],"10f669f0"],[[],"10f669f0"]],"padding":[[[],"2144df1c"]],"text-shadow":[[[],"306900d"]],"box-shadow":[[[":focused","[BORDER"],"b42ba80d"],[[],"306900d"]]},"Slider-DownButton":{"background-color":[[[],"40016410"]],"border":[[[],"e0c04a17"]],"border-radius":[[["[VERTICAL"],"88c9c3f9"],[["[HORIZONTAL"],"654376bb"]],"background-image":[[[":pressed","[VERTICAL"],"a505df1b"],[[":pressed","[HORIZONTAL"],"a505df1b"],[["[VERTICAL"],"a505df1b"],[["[HORIZONTAL"],"a505df1b"],[[],"a505df1b"]],"cursor":[[[],"5c13d641"]],"padding":[[[],"2144df1c"]]},"Tree-Cell":{"padding":[[[],"f0a23488"]],"spacing":[[[],"8d"]]},"CCombo-Button":{"background-image":[[[":disabled"],"a505df1b"],[[],"70272c87"]],"background-color":[[[":disabled"],"ffffffff"],[[],"4002cddc"]],"border":[[[],"36a"]],"border-left":[[[],"e0c04a17"]],"border-radius":[[[],"10f669f0"]],"cursor":[[[],"5c13d641"]],"width":[[[],"582"]]},"Shell":{"border":[[[":inactive",":maximized"],"36a"],[[":inactive","[TITLE"],"e0c04a17"],[[":inactive","[BORDER"],"e0c04a17"],[[".jface_infoPopupDialog"],"e0c04a17"],[[".jface_contentProposalPopup"],"e0c04a17"],[[":maximized"],"36a"],[["[BORDER"],"95a5245e"],[["[TITLE"],"95a5245e"],[[],"36a"]],"border-radius":[[[":inactive",":maximized"],"2144df1c"],[[":maximized"],"2144df1c"],[["[BORDER"],"54f1c057"],[["[TITLE"],"54f1c057"],[[],"54f1c057"]],"background-image":[[[],"a505df1b"]],"padding":[[[".jface_infoPopupDialog"],"2144df1c"],[[".jface_contentProposalPopup"],"2144df1c"],[[],"2144df1c"]],"background-color":[[["[BORDER"],"4004dc1c"],[["[TITLE"],"4004dc1c"],[[],"4004dc1c"]],"opacity":[[[],"1.0"]],"box-shadow":[[[":inactive",":maximized"],"306900d"],[[":inactive","[TITLE"],"306900d"],[[":inactive","[BORDER"],"306900d"],[[".jface_infoPopupDialog"],"d0dcdf6d"],[[".jface_contentProposalPopup"],"d0dcdf6d"],[[":maximized"],"306900d"],[["[BORDER"],"d0dcdf6d"],[["[TITLE"],"d0dcdf6d"],[[],"306900d"]],"animation":[[[],"20"]]},"ExpandItem-Header":{"background-color":[[[],"4004dc1c"]],"background-image":[[[],"70272c87"]],"border":[[[],"36a"]],"border-radius":[[[],"2144df1c"]],"cursor":[[[":disabled"],"5c13d641"],[[],"e81f3e3d"]],"text-shadow":[[[],"306900d"]]},"Combo":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"font":[[[],"dee322b1"]],"border":[[[":focused"],"9249fc9e"],[[],"dee0ab31"]],"border-radius":[[[],"10f669f0"]],"text-shadow":[[[],"306900d"]],"box-shadow":[[[":disabled"],"306900d"],[[":focused"],"b42ba80d"],[[],"2739e22c"]]},"Combo-Button":{"background-image":[[[":disabled"],"a505df1b"],[[],"70272c87"]],"background-color":[[[":disabled"],"ffffffff"],[[],"4002cddc"]],"border":[[[],"36a"]],"border-left":[[[],"e0c04a17"]],"border-radius":[[[],"10f669f0"]],"cursor":[[[],"5c13d641"]],"width":[[[],"582"]]},"ToolItem-DropDownIcon":{"background-image":[[[],"110f0331.png"]],"border":[[[":hover"],"5fbe2ff"],[[],"36a"]]},"TabFolder-ContentContainer":{"border":[[[],"e0c04a17"]]},"DateTime-Calendar-Day":{"color":[[[":hover",":selected"],"4004dc1c"],[[":otherMonth"],"3ff48b00"],[[":selected"],"4004dc1c"],[[],"ffffffff"]],"background-color":[[[":selected",":unfocused"],"3ffcc400"],[[":hover",":selected"],"3fefb044"],[[":hover"],"3ffb5a34"],[[":otherMonth"],"ffffffff"],[[":selected"],"3fefb044"],[[],"ffffffff"]],"text-shadow":[[[],"306900d"]]},"TableItem":{"color":[[[":even",":linesvisible"],"ffffffff"],[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color":[[[":even",":linesvisible"],"4002eec0"],[[],"ffffffff"]],"background-image":[[[],"a505df1b"]],"text-decoration":[[[],"none"]],"text-shadow":[[[],"306900d"]]},"*":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"font":[[[],"dee322b1"]],"border":[[["[BORDER"],"dc65e06a"],[[],"36a"]],"padding":[[[],"2144df1c"]]},"Tree-GridLine":{"color":[[[":horizontal"],"ffffffff"],[[],"3ffed240"]]},"CCombo-Button-Icon":{"background-image":[[[":hover"],"b107e71b.png"],[[],"56abe5a7.png"]]},"Combo-Button-Icon":{"background-image":[[[":hover"],"d140090f.png"],[[],"7d708cd9.png"]]},"DateTime-UpButton-Icon":{"background-image":[[[":hover"],"d7a9517.png"],[[],"d886e9d6.png"]]},"Sash":{"background-color":[[[":hover"],"400184f4"],[[],"ffffffff"]],"background-image":[[[],"a505df1b"]],"border":[[["[BORDER"],"e0c04a17"],[[],"36a"]]},"TabItem":{"background-color":[[[],"4004dc1c"]],"background-image":[[[":selected"],"92d14a78"],[[],"70272c87"]],"border-top-color":[[[],"3fefb044"]],"border-bottom-color":[[[],"3fefb044"]],"text-shadow":[[[],"be859fbd"]],"padding":[[[":selected"],"a680cf80"],[[],"bf9bfec1"]]},"ToolItem-Separator":{"width":[[[],"bc"]]},"TableColumn-SortIndicator":{"background-image":[[[":down"],"2fc16aa8.png"],[[":up"],"5b8ba614.png"],[[],"a505df1b"]]},"ToolTip-Text":{"color":[[[],"3fed9ae8"]],"font":[[[],"c9a3013"]],"text-shadow":[[[],"306900d"]]},"ScrollBar":{"background-color":[[[],"4002eec0"]],"background-image":[[[],"a505df1b"]],"border":[[[],"36a"]],"border-radius":[[[],"2144df1c"]],"width":[[[],"1d6"]]},"ProgressBar":{"background-color":[[[],"4004dc1c"]],"background-image":[[[],"dd851a27.png"]],"border":[[[],"e0c04a17"]],"border-radius":[[[],"655c8929"]]},"Group-Frame":{"border":[[[],"e0c04a17"]],"border-radius":[[[],"54f1c057"]],"margin":[[[],"fe3f1fd4"]],"padding":[[[],"b1369cc8"]]},"TreeColumn-SortIndicator":{"background-image":[[[":down"],"2fc16aa8.png"],[[":up"],"5b8ba614.png"],[[],"a505df1b"]]},"Shell-MinButton":{"margin":[[[":inactive"],"9e1e81c6"],[[],"9e1e81c6"]],"background-image":[[[":hover",":inactive"],"4994768a.png"],[[":inactive"],"63a3ac85.png"],[[":hover"],"4994768a.png"],[[],"63a3ac85.png"]]},"TableColumn":{"color":[[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"font":[[[],"dee322b1"]],"background-color":[[[],"4002eec0"]],"background-image":[[[":hover"],"b892b271"],[[],"70272c87"]],"border-bottom":[[[],"e0c04a17"]],"padding":[[[],"b7669218"]],"text-shadow":[[[],"be859fbd"]]},"ToolTip-Image":{"background-image":[[["[ICON_WARNING"],"1888a858.png"],[["[ICON_INFORMATION"],"d19cc93d.png"],[["[ICON_ERROR"],"627301a4.png"],[[],"a505df1b"]]},"ScrollBar-Thumb-Icon":{"background-image":[[[],"a505df1b"]]},"CTabItem":{"font":[[[],"dee322b1"]],"color":[[[":disabled"],"3fe41900"],[[":selected"],"3fed9ae8"],[[],"3fed9ae8"]],"background-color":[[[":selected"],"3fff9798"],[[],"4002eec0"]],"background-image":[[[],"a505df1b"]],"padding":[[[],"c9967dea"]],"spacing":[[[],"1d6"]],"text-shadow":[[[],"306900d"]]},"Combo-Field":{"padding":[[[],"86afb7a3"]]},"Table":{"font":[[[],"dee322b1"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"border":[[["[BORDER"],"e0c04a17"],[[],"36a"]],"background-image":[[[],"a505df1b"]]},"Text-Message":{"color":[[[],"3ff98c68"]],"text-shadow":[[[],"306900d"]]},"Slider-DownButton-Icon":{"background-image":[[["[VERTICAL"],"5be1033a.png"],[["[HORIZONTAL"],"17352e6f.png"],[[],"a505df1b"]]},"Spinner-Field":{"padding":[[[],"bf374b8e"]]},"Tree":{"font":[[[],"dee322b1"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"border":[[["[BORDER"],"e0c04a17"],[[],"36a"]]},"Widget-ToolTip":{"color":[[[],"3fed9ae8"]],"background-color":[[[],"4002eec0"]],"border":[[[],"dc2df36f"]],"border-radius":[[[],"54f1c057"]],"background-image":[[[],"8d0c9e31"]],"padding":[[[],"2ce1a471"]],"font":[[[],"dee322b1"]],"opacity":[[[],"1.0"]],"animation":[[[],"1a8c6849"]],"box-shadow":[[[],"306900d"]]},"DateTime-Calendar-PreviousYearButton":{"background-image":[[[":hover"],"d40ddead.png"],[[],"89265bb2.png"]],"cursor":[[[],"5c13d641"]]},"List-Item":{"color":[[[":even",":selected",":unfocused"],"4004dc1c"],[[":even",":selected"],"4004dc1c"],[[":even",":hover"],"3fed9ae8"],[[":selected",":unfocused"],"4004dc1c"],[[":selected"],"4004dc1c"],[[":hover"],"ffffffff"],[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color":[[[":even",":selected",":unfocused"],"3ff73db4"],[[":even",":selected"],"3ff4abe4"],[[":even",":hover"],"3ff4abe4"],[[":selected",":unfocused"],"3ff73db4"],[[":even"],"4002eec0"],[[":selected"],"3fe4aeec"],[[":hover"],"400034dc"],[[],"4004dc1c"]],"background-image":[[[":even",":selected",":unfocused"],"45861c75"],[[":even",":selected"],"380010fc"],[[":even",":hover"],"84877d39"],[[":selected",":unfocused"],"45861c75"],[[":selected"],"380010fc"],[[":hover"],"84877d39"],[[],"a505df1b"]],"text-shadow":[[[],"306900d"]],"padding":[[[],"86afb7a3"]]},"Scale-Thumb":{"background-color":[[[],"400184f4"]],"border":[[[":focused"],"9249fc9e"],[[],"dc65e06a"]],"border-radius":[[[],"54f1c057"]]},"FileUpload":{"color":[[[":disabled"],"3fff1408"],[[],"3fed9ae8"]],"background-color":[[[":disabled"],"400437a8"],[[],"4004dc1c"]],"background-image":[[[":pressed"],"92d14a78"],[[":hover"],"b1d21d8f"],[[":disabled"],"a505df1b"],[[],"70272c87"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"border":[[[":disabled"],"e169913b"],[["[BORDER"],"dc65e06a"],[[],"e0c04a17"]],"border-radius":[[[],"54f1c057"]],"opacity":[[[],"1.0"]],"animation":[[[],"20"]],"cursor":[[[":disabled"],"5c13d641"],[[],"e81f3e3d"]],"padding":[[[],"c9967dea"]],"spacing":[[[],"5e"]],"font":[[[],"dee322b1"]],"text-shadow":[[[],"be859fbd"]]},"Text-Search-Icon":{"background-image":[[[],"9b0a9001.png"]],"spacing":[[[],"8d"]]},"Link":{"font":[[[],"dee322b1"]],"border":[[["[BORDER"],"e0c04a17"],[[],"36a"]],"text-shadow":[[[],"306900d"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]]},"Button-CheckIcon":{"background-image":[[[":grayed",":hover",":selected"],"94a6048c.png"],[[":grayed",":selected"],"fea0bb8.png"],[[":hover",":selected"],"956fb108.png"],[[":selected"],"3655dc8d.png"],[[":hover"],"eee56d43.png"],[[],"903dd6ca.png"]]},"Table-GridLine":{"color":[[[":horizontal"],"ffffffff"],[[],"40009eb8"]]},"Shell-CloseButton":{"margin":[[[":inactive"],"9e1e81c6"],[[],"9e1e81c6"]],"background-image":[[[":hover",":inactive"],"bd03145b.png"],[[":inactive"],"4cdd7012.png"],[[":hover"],"bd03145b.png"],[[],"4cdd7012.png"]]},"DateTime-DownButton-Icon":{"background-image":[[[":hover"],"bc44aa73.png"],[[],"306e0068.png"]]},"Label":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"font":[[[],"dee322b1"]],"border":[[["[BORDER"],"e0c04a17"],[[],"36a"]],"border-radius":[[["[BORDER"],"54f1c057"],[[],"2144df1c"]],"cursor":[[[],"5c13d641"]],"background-image":[[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"text-decoration":[[[],"none"]],"opacity":[[[],"1.0"]],"text-shadow":[[[],"306900d"]]},"Shell-Titlebar":{"color":[[[],"4004dc1c"]],"background-color":[[[":inactive"],"3ff3d584"],[[],"3fe4f000"]],"background-gradient-color":[[[":inactive"],"3ff3d584"],[[],"3fe4f000"]],"background-image":[[[":inactive"],"22c3c0e1"],[[],"e7560a70"]],"font":[[[],"dee322b1"]],"margin":[[[],"2144df1c"]],"padding":[[[],"cc06b3d4"]],"height":[[[],"6fa"]],"text-shadow":[[[],"306900d"]],"border":[[[],"36a"]],"border-radius":[[[],"2144df1c"]]},"Tree-Indent":{"width":[[[],"2f0"]],"background-image":[[[":expanded",":first",":hover",":last"],"cde2f9ef.png"],[[":collapsed",":first",":hover",":last"],"c782daa1.png"],[[":expanded",":first",":last"],"d282b4e5.png"],[[":collapsed",":first",":last"],"4ee00e3c.png"],[[":expanded",":hover",":last"],"cde2f9ef.png"],[[":collapsed",":hover",":last"],"c782daa1.png"],[[":expanded",":first",":hover"],"cde2f9ef.png"],[[":collapsed",":first",":hover"],"c782daa1.png"],[[":first",":last"],"a505df1b"],[[":expanded",":last"],"d282b4e5.png"],[[":collapsed",":last"],"4ee00e3c.png"],[[":expanded",":first"],"d282b4e5.png"],[[":collapsed",":first"],"4ee00e3c.png"],[[":expanded",":hover"],"cde2f9ef.png"],[[":collapsed",":hover"],"c782daa1.png"],[[":last"],"a505df1b"],[[":first"],"a505df1b"],[[":line"],"a505df1b"],[[":expanded"],"d282b4e5.png"],[[":collapsed"],"4ee00e3c.png"],[[],"a505df1b"]]},"Combo-List":{"border":[[[],"9249fc9e"]],"border-radius":[[[],"54f1c057"]],"box-shadow":[[[],"b42ba80d"]]},"Combo-FocusIndicator":{"background-color":[[[],"ffffffff"]],"border":[[[],"36a"]],"margin":[[[],"2144df1c"]],"opacity":[[[],"0.0"]]},"DateTime-DownButton":{"background-image":[[[":disabled"],"a505df1b"],[[],"4dbd8357"]],"background-color":[[[":disabled"],"ffffffff"],[[],"4002eec0"]],"border":[[[],"36a"]],"border-left":[[[],"e0c04a17"]],"border-radius":[[[],"1372bd9e"]],"cursor":[[[],"5c13d641"]],"width":[[[],"582"]]},"Link-Hyperlink":{"color":[[[":disabled",":hover"],"3ff73db4"],[[":disabled"],"3ff73db4"],[[],"3fecb31c"]],"text-shadow":[[[],"306900d"]],"text-decoration":[[[":disabled",":hover"],"none"],[[":hover"],"underline"],[[],"none"]]},"Spinner":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed1e38"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"font":[[[],"dee322b1"]],"border":[[[":focused","[BORDER"],"9249fc9e"],[["[BORDER"],"dee0ab31"],[[],"36a"]],"border-radius":[[["[BORDER"],"10f669f0"],[[],"10f669f0"]],"padding":[[[],"2144df1c"]],"text-shadow":[[[],"306900d"]],"box-shadow":[[[":disabled","[BORDER"],"306900d"],[[":focused","[BORDER"],"b42ba80d"],[[":disabled"],"306900d"],[["[BORDER"],"2739e22c"],[[],"306900d"]]},"MenuItem-CascadeIcon":{"background-image":[[[],"eb8ac0f1.gif"]]},"ToolItem":{"color":[[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color":[[[":hover"],"4002eec0"],[[],"4004dc1c"]],"background-image":[[[":selected"],"b892b271"],[[":pressed"],"b892b271"],[[":hover"],"70272c87"],[[],"a505df1b"]],"border":[[[":selected"],"dc65e06a"],[[":pressed"],"dc65e06a"],[[":hover"],"e0c04a17"],[[],"36a"]],"border-radius":[[[":selected"],"54f1c057"],[[":pressed"],"54f1c057"],[[":hover"],"54f1c057"],[[],"54f1c057"]],"animation":[[[],"20"]],"spacing":[[[],"bc"]],"padding":[[[":selected"],"e35af382"],[[":pressed"],"e35af382"],[[],"2ce1a471"]],"opacity":[[[],"1.0"]],"text-shadow":[[[],"306900d"]]},"CTabFolder":{"border-color":[[[],"3ffc6154"]],"border-radius":[[[],"54f1c057"]]},"Tree-Checkbox":{"margin":[[[],"22c00b72"]],"background-image":[[[":checked",":grayed",":hover"],"94a6048c.png"],[[":checked",":grayed"],"fea0bb8.png"],[[":checked",":hover"],"956fb108.png"],[[":checked"],"3655dc8d.png"],[[":hover"],"eee56d43.png"],[[],"903dd6ca.png"]]},"FileUpload-FocusIndicator":{"background-color":[[[],"ffffffff"]],"border":[[[],"2abfdf6d"]],"padding":[[[],"2144df1c"]],"margin":[[[],"54f1c057"]],"opacity":[[[],"1.0"]]},"Menu":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fe4b0f4"]],"background-color":[[[],"400416c4"]],"background-image":[[[],"7815b514"]],"font":[[[],"dee322b1"]],"border":[[[],"dc2df36f"]],"border-radius":[[[],"54f1c057"]],"opacity":[[[],"1.0"]],"padding":[[[],"2144df1c"]],"animation":[[[],"20"]],"box-shadow":[[[],"d0dcdf6d"]]},"TabFolder":{"border":[[["[BORDER"],"e0c04a17"],[[],"36a"]],"font":[[[],"dee322b1"]]},"Button":{"color":[[[":disabled",":selected","[TOGGLE"],"3fff1408"],[[":disabled","[TOGGLE"],"3fff1408"],[[":disabled","[PUSH"],"3fff1408"],[[":disabled","[ARROW"],"3fff1408"],[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[":disabled",":selected","[TOGGLE"],"400437a8"],[[":disabled","[TOGGLE"],"400437a8"],[[":disabled","[PUSH"],"400437a8"],[[":disabled","[ARROW"],"400437a8"],[[":default","[TOGGLE"],"3fecb31c"],[[":default","[PUSH"],"3fecb31c"],[[":default","[ARROW"],"3fecb31c"],[[],"4004dc1c"]],"background-image":[[[":hover",":selected","[TOGGLE"],"92d14a78"],[[":disabled",":selected","[TOGGLE"],"a505df1b"],[["[BORDER","[RADIO"],"a505df1b"],[["[BORDER","[CHECK"],"a505df1b"],[[":selected","[TOGGLE"],"92d14a78"],[[":pressed","[TOGGLE"],"92d14a78"],[[":pressed","[PUSH"],"92d14a78"],[[":pressed","[ARROW"],"92d14a78"],[[":hover","[TOGGLE"],"b1d21d8f"],[[":hover","[PUSH"],"b1d21d8f"],[[":hover","[ARROW"],"b1d21d8f"],[[":disabled","[TOGGLE"],"a505df1b"],[[":disabled","[PUSH"],"a505df1b"],[[":disabled","[ARROW"],"a505df1b"],[[":default","[TOGGLE"],"7e37263d"],[[":default","[PUSH"],"7e37263d"],[[":default","[ARROW"],"7e37263d"],[["[ARROW","[FLAT"],"70272c87"],[["[ARROW","[BORDER"],"70272c87"],[["[FLAT","[TOGGLE"],"70272c87"],[["[FLAT","[PUSH"],"70272c87"],[["[BORDER","[TOGGLE"],"70272c87"],[["[BORDER","[PUSH"],"70272c87"],[["[ARROW"],"70272c87"],[["[TOGGLE"],"70272c87"],[["[PUSH"],"70272c87"],[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"border":[[[":disabled",":selected","[TOGGLE"],"e169913b"],[["[BORDER","[RADIO"],"e0c04a17"],[["[BORDER","[CHECK"],"e0c04a17"],[[":disabled","[TOGGLE"],"e169913b"],[[":disabled","[PUSH"],"e169913b"],[[":disabled","[ARROW"],"e169913b"],[[":default","[TOGGLE"],"dc2df36f"],[[":default","[PUSH"],"dc2df36f"],[[":default","[ARROW"],"dc2df36f"],[["[ARROW","[FLAT"],"e0c04a17"],[["[ARROW","[BORDER"],"e0c04a17"],[["[FLAT","[TOGGLE"],"e0c04a17"],[["[FLAT","[PUSH"],"e0c04a17"],[["[BORDER","[TOGGLE"],"e0c04a17"],[["[BORDER","[PUSH"],"e0c04a17"],[["[ARROW"],"e0c04a17"],[["[TOGGLE"],"e0c04a17"],[["[PUSH"],"e0c04a17"],[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius":[[["[BORDER","[RADIO"],"54f1c057"],[["[BORDER","[CHECK"],"54f1c057"],[["[ARROW","[FLAT"],"54f1c057"],[["[ARROW","[BORDER"],"54f1c057"],[["[FLAT","[TOGGLE"],"54f1c057"],[["[FLAT","[PUSH"],"54f1c057"],[["[BORDER","[TOGGLE"],"54f1c057"],[["[BORDER","[PUSH"],"54f1c057"],[["[ARROW"],"54f1c057"],[["[TOGGLE"],"54f1c057"],[["[PUSH"],"54f1c057"],[[],"54f1c057"]],"opacity":[[[],"1.0"]],"text-decoration":[[[],"none"]],"animation":[[["[FLAT","[TOGGLE"],"20"],[["[FLAT","[PUSH"],"20"],[["[BORDER","[TOGGLE"],"20"],[["[BORDER","[PUSH"],"20"],[["[TOGGLE"],"20"],[["[PUSH"],"20"],[[],"20"]],"cursor":[[[":disabled",":selected","[TOGGLE"],"5c13d641"],[["[BORDER","[RADIO"],"5c13d641"],[["[BORDER","[CHECK"],"5c13d641"],[[":disabled","[TOGGLE"],"5c13d641"],[[":disabled","[PUSH"],"5c13d641"],[[":disabled","[ARROW"],"5c13d641"],[["[ARROW","[FLAT"],"e81f3e3d"],[["[ARROW","[BORDER"],"e81f3e3d"],[["[FLAT","[TOGGLE"],"e81f3e3d"],[["[FLAT","[PUSH"],"e81f3e3d"],[["[BORDER","[TOGGLE"],"e81f3e3d"],[["[BORDER","[PUSH"],"e81f3e3d"],[["[ARROW"],"e81f3e3d"],[["[TOGGLE"],"e81f3e3d"],[["[PUSH"],"e81f3e3d"],[[],"5c13d641"]],"padding":[[["[ARROW","[FLAT"],"5954bb3a"],[["[ARROW","[BORDER"],"5954bb3a"],[["[FLAT","[TOGGLE"],"c9967dea"],[["[FLAT","[PUSH"],"c9967dea"],[["[BORDER","[TOGGLE"],"c9967dea"],[["[BORDER","[PUSH"],"c9967dea"],[["[RADIO"],"1a9a9d68"],[["[CHECK"],"1a9a9d68"],[["[ARROW"],"5954bb3a"],[["[TOGGLE"],"c9967dea"],[["[PUSH"],"c9967dea"],[[],"c9967dea"]],"spacing":[[["[RADIO"],"149"],[["[CHECK"],"149"],[[],"5e"]],"font":[[[],"dee322b1"]],"text-shadow":[[["[FLAT","[TOGGLE"],"be859fbd"],[["[FLAT","[PUSH"],"be859fbd"],[["[BORDER","[TOGGLE"],"be859fbd"],[["[BORDER","[PUSH"],"be859fbd"],[["[TOGGLE"],"be859fbd"],[["[PUSH"],"be859fbd"],[[],"306900d"]]},"CLabel":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"font":[[[],"dee322b1"]],"border":[[["[BORDER"],"e0c04a17"],[[],"36a"]],"border-radius":[[["[BORDER"],"54f1c057"]],"cursor":[[[],"5c13d641"]],"background-image":[[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"padding":[[[],"bf9bfec1"]],"spacing":[[[],"eb"]],"opacity":[[[],"1.0"]],"text-shadow":[[[],"306900d"]]},"MenuItem-CheckIcon":{"background-image":[[[],"144ea8f9.gif"]]},"Scale":{"background-color":[[[],"4004dc1c"]],"border":[[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius":[[[],"8393ccd2"]]},"ToolTip":{"font":[[[],"dee322b1"]],"color":[[[],"3fed9ae8"]],"background-color":[[[],"40047970"]],"cursor":[[[],"5c13d641"]],"background-image":[[[],"8d0c9e31"]],"opacity":[[[],"1.0"]],"border":[[[],"dc2df36f"]],"border-radius":[[[],"54f1c057"]],"padding":[[[],"2ce1a471"]],"animation":[[[],"1a8c6849"]],"box-shadow":[[[],"e0bb8acd"]]},"Slider-Thumb":{"background-color":[[["[VERTICAL"],"40016410"],[["[HORIZONTAL"],"40016410"],[[],"4004dc1c"]],"border":[[["[VERTICAL"],"e0c04a17"],[["[HORIZONTAL"],"e0c04a17"],[[],"36a"]],"border-radius":[[["[VERTICAL"],"54f1c057"],[["[HORIZONTAL"],"54f1c057"]],"background-image":[[["[VERTICAL"],"2ed10572.png"],[["[HORIZONTAL"],"2ed10572.png"],[[],"a505df1b"]]},"CCombo-List":{"border":[[[],"9249fc9e"]],"border-radius":[[[],"54f1c057"]],"box-shadow":[[[],"b42ba80d"]]},"ScrollBar-DownButton-Icon":{"background-image":[[[],"a505df1b"]]},"Display":{"rwt-shadow-color":[[[],"3ff98c68"]],"rwt-highlight-color":[[[],"4004dc1c"]],"rwt-darkshadow-color":[[[],"3ff53320"]],"rwt-lightshadow-color":[[[],"40006240"]],"rwt-thinborder-color":[[[],"3ffa2a74"]],"rwt-selectionmarker-color":[[[],"400457b0"]],"rwt-infobackground-color":[[[],"4004dc1c"]],"rwt-error-image":[[[],"994dccc6.png"]],"rwt-information-image":[[[],"2c4058a5.png"]],"rwt-working-image":[[[],"2c4058a5.png"]],"rwt-question-image":[[[],"83e441e9.png"]],"rwt-warning-image":[[[],"aa96e44e.png"]],"rwt-fontlist":[[[],"67d9b899"]],"background-image":[[[],"3c7d3330.png"]],"font":[[[],"dee322b1"]]},"ToolBar":{"font":[[[],"dee322b1"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"padding":[[[],"2144df1c"]],"spacing":[[[],"0"]],"border":[[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius":[[["[BORDER"],"54f1c057"],[[],"2144df1c"]],"opacity":[[[],"1.0"]]},"ExpandBar":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"font":[[[],"dee322b1"]],"border":[[["[BORDER"],"e0c04a17"],[[],"36a"]],"border-radius":[[["[BORDER"],"54f1c057"]]},"Button-RadioIcon":{"background-image":[[[":hover",":selected"],"68188572.png"],[[":selected"],"46d9d135.png"],[[":hover"],"1a81f5fd.png"],[[],"c290fe4b.png"]]},"DateTime-DropDownCalendar":{"border":[[[],"dc902e9c"]]},"DateTime-Field":{"color":[[[":selected"],"4004dc1c"],[[],"ffffffff"]],"background-color":[[[":selected"],"3fefb044"],[[],"ffffffff"]],"padding":[[[],"db8f674b"]],"text-shadow":[[[],"306900d"]]},"DateTime-Calendar-NextYearButton":{"background-image":[[[":hover"],"f80ab95c.png"],[[],"2d244d58.png"]],"cursor":[[[],"5c13d641"]]},"FormText":{"color":[[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"font":[[[],"dee322b1"]],"border":[[["[BORDER"],"dc65e06a"],[[],"36a"]]},"ScrollBar-UpButton-Icon":{"background-image":[[[],"a505df1b"]]},"DateTime-Calendar-NextMonthButton":{"background-image":[[[":hover"],"3622b9ea.png"],[[],"1faf9af7.png"]],"cursor":[[[],"5c13d641"]]},"CCombo":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"font":[[[],"dee322b1"]],"border":[[[":focused","[BORDER"],"9249fc9e"],[["[BORDER"],"dee0ab31"],[[],"36a"]],"border-radius":[[["[BORDER"],"10f669f0"],[[],"10f669f0"]],"text-shadow":[[[],"306900d"]],"box-shadow":[[[":disabled","[BORDER"],"306900d"],[[":focused","[BORDER"],"b42ba80d"],[[":disabled"],"306900d"],[["[BORDER"],"2739e22c"],[[],"306900d"]]},"ScrollBar-Thumb":{"background-color":[[[],"4002eec0"]],"border":[[[],"e0c04a17"]],"border-radius":[[[],"655c8929"]],"background-image":[[[],"bf671604.png"]],"min-height":[[[],"3ac"]]},"CCombo-FocusIndicator":{"background-color":[[[],"ffffffff"]],"border":[[[],"36a"]],"margin":[[[],"2144df1c"]],"opacity":[[[],"0.0"]]},"SystemMessage-DisplayOverlay":{"background-image":[[[],"4f61765f.gif"]],"background-color":[[[],"3ec157cd"]]},"Composite":{"border":[[["[BORDER"],"e0c04a17"],[[],"36a"]],"border-radius":[[["[BORDER"],"54f1c057"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"padding":[[[],"2144df1c"]],"opacity":[[[],"1.0"]],"box-shadow":[[[],"306900d"]],"animation":[[[],"20"]]},"MenuItem-RadioIcon":{"background-image":[[[],"d218be7e.gif"]]},"Slider-UpButton-Icon":{"background-image":[[["[VERTICAL"],"827a3489.png"],[["[HORIZONTAL"],"a30b8da1.png"],[[],"a505df1b"]]},"Group-Label":{"border":[[[],"e0c04a17"]],"border-radius":[[[],"5954bb3a"]],"padding":[[[],"543919dd"]],"margin":[[[],"a35b8659"]],"background-color":[[[],"4002eec0"]],"color":[[[],"ffffffff"]],"text-shadow":[[[],"306900d"]]},"Table-Checkbox":{"width":[[[],"3db"]],"margin":[[[],"26291b05"]],"background-image":[[[":checked",":grayed",":hover"],"94a6048c.png"],[[":checked",":grayed"],"fea0bb8.png"],[[":checked",":hover"],"956fb108.png"],[[":checked"],"3655dc8d.png"],[[":hover"],"eee56d43.png"],[[],"903dd6ca.png"]]},"TreeItem":{"color":[[[":even",":linesvisible"],"ffffffff"],[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color":[[[":even",":linesvisible"],"4002eec0"],[[],"ffffffff"]],"background-image":[[[],"a505df1b"]],"text-decoration":[[[],"none"]],"text-shadow":[[[],"306900d"]]},"DateTime-DropDownButton-Icon":{"background-image":[[[":hover"],"973e534e.png"],[[],"d1516768.png"]]},"Slider":{"background-color":[[[],"4002eec0"]],"border":[[[],"36a"]],"border-radius":[[[],"54f1c057"]]},"Browser":{"border":[[["[BORDER"],"dc65e06a"],[[],"36a"]]},"DateTime-Calendar-Navbar":{"border":[[[],"36a"]],"border-radius":[[[],"2144df1c"]],"color":[[[":disabled"],"3ffeb15c"],[[],"4004dc1c"]],"background-color":[[[],"3fe4ab90"]],"background-image":[[[],"e7560a70"]],"font":[[[],"dee322b1"]],"text-shadow":[[[],"306900d"]]},"CoolItem-Handle":{"border":[[[],"e0c04a17"]],"width":[[[],"5e"]]},"ToolTip-Message":{"color":[[[],"3fed9ae8"]],"font":[[[],"dee322b1"]],"text-shadow":[[[],"306900d"]]},"ScrollBar-DownButton":{"background-color":[[[],"ffffffff"]],"border":[[[],"36a"]],"border-radius":[[[],"2144df1c"]],"background-image":[[["[VERTICAL"],"ba1d7000.png"],[["[HORIZONTAL"],"fb90316c.png"],[[],"a505df1b"]],"cursor":[[[],"5c13d641"]]},"List":{"font":[[[],"dee322b1"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"border":[[["[BORDER"],"e0c04a17"],[[],"36a"]]},"DateTime-UpButton":{"background-image":[[[":disabled"],"a505df1b"],[[],"4766b6e9"]],"background-color":[[[":disabled"],"ffffffff"],[[],"4002eec0"]],"border":[[[],"36a"]],"border-left":[[[],"e0c04a17"]],"border-radius":[[[],"22c00b72"]],"cursor":[[[],"5c13d641"]],"width":[[[],"582"]]},"Shell-DisplayOverlay":{"background-color":[[[],"3ff48b00"]],"background-image":[[[],"a505df1b"]],"animation":[[[],"1a897981"]],"opacity":[[[],"0.2"]]},"Button-FocusIndicator":{"background-color":[[["[RADIO"],"ffffffff"],[["[CHECK"],"ffffffff"],[["[TOGGLE"],"ffffffff"],[["[PUSH"],"ffffffff"],[["[ARROW"],"ffffffff"],[[],"4004dc1c"]],"border":[[["[RADIO"],"2abfdf6d"],[["[CHECK"],"2abfdf6d"],[["[TOGGLE"],"2abfdf6d"],[["[PUSH"],"2abfdf6d"],[["[ARROW"],"2abfdf6d"],[["[BORDER"],"dc65e06a"],[[],"36a"]],"padding":[[["[RADIO"],"cdf891ed"],[["[CHECK"],"cdf891ed"],[["[TOGGLE"],"2144df1c"],[["[PUSH"],"2144df1c"],[["[ARROW"],"2144df1c"],[[],"2144df1c"]],"margin":[[["[RADIO"],"2144df1c"],[["[CHECK"],"2144df1c"],[["[TOGGLE"],"54f1c057"],[["[PUSH"],"54f1c057"],[["[ARROW"],"54f1c057"]],"opacity":[[["[RADIO"],"1.0"],[["[CHECK"],"1.0"],[["[TOGGLE"],"1.0"],[["[PUSH"],"1.0"],[["[ARROW"],"1.0"]]},"Sash-Handle":{"background-image":[[[":vertical"],"951d388e.png"],[[":horizontal"],"68b89865.png"],[[],"a505df1b"]]},"CTabFolder-DropDownButton-Icon":{"background-image":[[[":hover"],"5586d417.png"],[[],"fa5334b.png"]]},"DateTime-Calendar-PreviousMonthButton":{"background-image":[[[":hover"],"fcb47c07.png"],[[],"5fd49387.png"]],"cursor":[[[],"5c13d641"]]},"Table-RowOverlay":{"color":[[[":even",":linesvisible",":selected",":unfocused"],"4004dc1c"],[[":even",":linesvisible",":selected"],"4004dc1c"],[[":even",":hover",":linesvisible"],"3fed9ae8"],[[":selected",":unfocused"],"4004dc1c"],[[":selected"],"4004dc1c"],[[":hover"],"3fed9ae8"],[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color":[[[":even",":linesvisible",":selected",":unfocused"],"3ff73db4"],[[":even",":linesvisible",":selected"],"3fefb044"],[[":even",":hover",":linesvisible"],"3ffb5a34"],[[":selected",":unfocused"],"3ffb5a34"],[[":selected"],"3fefb044"],[[":hover"],"3ffb5a34"],[[],"ffffffff"]],"background-image":[[[":even",":linesvisible",":selected",":unfocused"],"45861c75"],[[":even",":linesvisible",":selected"],"380010fc"],[[":even",":hover",":linesvisible"],"84877d39"],[[":selected",":unfocused"],"45861c75"],[[":selected"],"380010fc"],[[":hover"],"84877d39"],[[],"a505df1b"]]},"Spinner-DownButton-Icon":{"background-image":[[[":hover"],"973e534e.png"],[[],"d1516768.png"]]},"Tree-RowOverlay":{"color":[[[":even",":linesvisible",":selected",":unfocused"],"4004dc1c"],[[":even",":linesvisible",":selected"],"4004dc1c"],[[":even",":hover",":linesvisible"],"3fed9ae8"],[[":selected",":unfocused"],"4004dc1c"],[[":selected"],"4004dc1c"],[[":hover"],"3fed9ae8"],[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color":[[[":even",":linesvisible",":selected",":unfocused"],"3ffb5a34"],[[":even",":linesvisible",":selected"],"3fefb044"],[[":even",":hover",":linesvisible"],"3ffb5a34"],[[":selected",":unfocused"],"3ffb5a34"],[[":selected"],"3fefb044"],[[":hover"],"3ffb5a34"],[[],"ffffffff"]],"background-image":[[[":even",":linesvisible",":selected",":unfocused"],"45861c75"],[[":even",":linesvisible",":selected"],"380010fc"],[[":even",":hover",":linesvisible"],"84877d39"],[[":selected",":unfocused"],"45861c75"],[[":selected"],"380010fc"],[[":hover"],"84877d39"],[[],"a505df1b"]]},"Table-Cell":{"padding":[[[],"f0a23488"]],"spacing":[[[],"8d"]]},"Text":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"font":[[[],"dee322b1"]],"border":[[[":focused","[BORDER","[MULTI"],"9249fc9e"],[[":focused","[BORDER"],"9249fc9e"],[["[BORDER","[MULTI"],"dee0ab31"],[["[BORDER"],"dee0ab31"],[[],"36a"]],"border-radius":[[["[BORDER","[MULTI"],"2144df1c"],[["[BORDER"],"2144df1c"],[[],"2144df1c"]],"background-image":[[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"padding":[[["[MULTI"],"86afb7a3"],[[],"86afb7a3"]],"text-shadow":[[[],"306900d"]],"box-shadow":[[[":read-only","[BORDER","[MULTI"],"306900d"],[[":disabled","[BORDER","[MULTI"],"306900d"],[[":focused","[BORDER","[MULTI"],"b42ba80d"],[[":read-only","[BORDER"],"306900d"],[[":disabled","[BORDER"],"306900d"],[[":focused","[BORDER"],"b42ba80d"],[["[BORDER","[MULTI"],"2739e22c"],[["[BORDER"],"2739e22c"],[[],"306900d"]]},"MenuItem":{"color":[[[":disabled"],"3ffc6154"],[[":pressed"],"4004dc1c"],[[":hover"],"4004dc1c"],[[],"3fed9ae8"]],"background-color":[[[],"ffffffff"]],"background-image":[[[":pressed"],"e7560a70"],[[":hover"],"380010fc"],[[],"a505df1b"]],"opacity":[[[],"1.0"]],"text-shadow":[[[":disabled"],"306900d"],[[],"306900d"]],"padding":[[[":onMenuBar"],"27a454c8"],[["[SEPARATOR"],"cc06b3d4"],[[],"2708e187"]]},"Text-Cancel-Icon":{"background-image":[[[],"1691d3de.gif"]],"spacing":[[[],"8d"]]},"ProgressBar-Indicator":{"background-color":[[[],"3fe4aeec"]],"background-image":[[[":error"],"f051a2ce"],[[":paused"],"22c3c0e1"],[[],"380010fc"]],"border":[[[],"36a"]],"opacity":[[[],"1.0"]]},"ExpandItem":{"border":[[[],"e0c04a17"]],"border-radius":[[[],"54f1c057"]]},"CCombo-Field":{"padding":[[[],"86afb7a3"]]},"Shell-MaxButton":{"margin":[[[":inactive"],"9e1e81c6"],[[],"9e1e81c6"]],"background-image":[[[":hover",":inactive",":maximized"],"baf651b9.png"],[[":inactive",":maximized"],"679d075a.png"],[[":hover",":maximized"],"baf651b9.png"],[[":hover",":inactive"],"9db0efc.png"],[[":maximized"],"679d075a.png"],[[":inactive"],"60504cca.png"],[[":hover"],"9db0efc.png"],[[],"60504cca.png"]]},"Spinner-UpButton-Icon":{"background-image":[[[":hover"],"cf31b060.png"],[[],"49104d78.png"]]}}}
\ No newline at end of file
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/rap-rwt.theme.Fallback.json b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/rap-rwt.theme.Fallback.json
deleted file mode 100644
index 7eb3074..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/rap-rwt.theme.Fallback.json
+++ /dev/null
@@ -1 +0,0 @@
-{"values":{"colors":{"3ff98c68":[167,166,170,1],"4004dc1c":[255,255,255,1],"3ff53320":[133,135,140,1],"40006240":[220,223,228,1],"3ffa2a74":[172,168,153,1],"400457b0":[254,200,60,1],"3fed9ae8":[74,74,74,1],"3ffeb15c":[207,207,207,1],"ffffffff":"undefined","3ff9f068":[170,170,170,1],"3fff9798":[214,214,214,1],"3fe42cec":[0,0,255,1],"3fe4aeec":[0,88,159,1],"4001abb4":[236,120,105,1],"3ffb5a34":[181,181,181,1],"3ff3d584":[121,150,165,1],"3fe4f000":[0,128,192,1],"3ff48b00":[128,128,128,1],"3fefb044":[88,130,181,1],"40009eb8":[222,222,222,1],"3fe41900":[0,0,0,1]},"images":{"994dccc6.png":[32,32],"2c4058a5.png":[32,32],"83e441e9.png":[32,32],"aa96e44e.png":[32,32],"3c7d3330.png":[1,1600],"fea0bb8.png":[21,17],"3655dc8d.png":[21,17],"903dd6ca.png":[21,17],"46d9d135.png":[17,17],"c290fe4b.png":[17,17],"9f435c8c.png":[9,9],"5c00d24b.png":[9,9],"c94fc8ad.png":[9,9],"1d0cc994.png":[9,9],"7d708cd9.png":[7,5],"fa5334b.png":[10,7],"144ea8f9.gif":[16,7],"d218be7e.gif":[16,5],"eb8ac0f1.gif":[13,13],"63a3ac85.png":[27,27],"679d075a.png":[27,27],"60504cca.png":[27,27],"4cdd7012.png":[27,27],"49104d78.png":[7,5],"d1516768.png":[7,5],"2fc16aa8.png":[9,5],"5b8ba614.png":[9,5],"9b0a9001.png":[16,16],"1691d3de.gif":[16,16],"110f0331.png":[7,5],"d282b4e5.png":[7,7],"4ee00e3c.png":[6,9],"5fd49387.png":[6,7],"1faf9af7.png":[6,7],"89265bb2.png":[10,7],"2d244d58.png":[10,7],"d886e9d6.png":[7,5],"306e0068.png":[7,5],"6cbccb98.png":[16,16],"50cab11f.png":[16,16],"2ed10572.png":[32,32],"5be1033a.png":[10,10],"17352e6f.png":[10,10],"827a3489.png":[10,10],"a30b8da1.png":[10,10],"1888a858.png":[32,32],"d19cc93d.png":[32,32],"627301a4.png":[32,32],"56abe5a7.png":[7,5],"bf671604.png":[32,32],"ba1d7000.png":[10,10],"fb90316c.png":[10,10],"6edf2b8a.png":[10,10],"3aee7904.png":[10,10]},"fonts":{"67d9b899":{"family":["Segoe UI","Corbel","Calibri","Tahoma","Lucida Sans Unicode"],"size":14,"bold":false,"italic":false},"3a7cfc11":{"family":["Arial","sans-serif"],"size":14,"bold":false,"italic":false},"3a7ce581":{"family":["Arial","sans-serif"],"size":10,"bold":false,"italic":false},"18a06a3":{"family":["Arial","sans-serif"],"size":14,"bold":true,"italic":false},"e7de1195":{"family":["Segoe UI","Corbel","Calibri","Tahoma","Lucida Sans Unicode","sans-serif"],"size":11,"bold":false,"italic":false}},"borders":{"dee0ab31":{"width":1,"style":"solid","color":"#aaaaaa"},"36a":{"width":0,"style":null,"color":null},"2b4cf00b":{"width":1,"style":"dotted","color":"#aaaaaa"},"e0c04a17":{"width":1,"style":"solid","color":"#bdbdbd"},"c411a436":{"width":1,"style":"outset","color":null},"5fbe2ff":{"width":1,"style":"inset","color":null},"5fbe325":{"width":2,"style":"inset","color":null}},"boxdims":{"2144df1c":[0,0,0,0],"2ce1a471":[8,8,8,8],"8393ccd2":[3,3,3,3],"ca2ee18a":[4,4,4,4],"c9967dea":[6,15,6,15],"54f1c057":[2,2,2,2],"86afb7a3":[5,10,5,10],"e9929b96":[20,10,10,10],"b1369cc8":[15,8,8,8],"543919dd":[2,10,2,10],"a35b8659":[10,10,10,20],"bf374b8e":[6,10,6,10],"27a454c8":[4,6,4,6],"cc06b3d4":[0,10,0,10],"2708e187":[4,10,4,10],"655c8929":[15,15,15,15],"9e1e81c6":[0,-2,0,0],"a680cf80":[6,6,7,6],"bf9bfec1":[6,6,6,6],"b7669218":[8,3,8,3],"c93ac8a5":[6,3,6,3],"26291b05":[0,0,0,4],"e35af382":[9,8,8,9],"c8dd5d18":[8,10,8,6],"22c00b72":[0,2,0,0],"db8f674b":[5,3,6,3]},"animations":{"20":{}},"shadows":{"306900d":null},"cursors":{"5c13d641":"default","e81f3e3d":"pointer"},"dimensions":{"149":7,"5e":2,"582":30,"1d6":10,"6fa":38,"8d":3,"3db":21,"0":0,"bc":4,"2f0":16,"eb":5,"3ac":20}},"theme":{"Spinner-DownButton":{"background-image":[[[],"a505df1b"]],"background-color":[[[],"4004dc1c"]],"border":[[[],"36a"]],"border-left":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]],"cursor":[[[],"5c13d641"]],"width":[[[],"582"]]},"DateTime-DropDownButton":{"background-image":[[[],"a505df1b"]],"background-color":[[[],"4004dc1c"]],"border":[[[],"36a"]],"border-left":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]],"cursor":[[[],"5c13d641"]],"width":[[[],"582"]]},"CoolBar":{"background-image":[[[],"a505df1b"]]},"TreeColumn":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"font":[[[],"3a7cfc11"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"border-bottom":[[[],"dee0ab31"]],"padding":[[[],"c8dd5d18"]],"text-shadow":[[[],"306900d"]]},"ScrollBar-UpButton":{"background-color":[[[],"ffffffff"]],"border":[[[],"36a"]],"border-radius":[[[],"2144df1c"]],"background-image":[[["[VERTICAL"],"6edf2b8a.png"],[["[HORIZONTAL"],"3aee7904.png"],[[],"a505df1b"]],"cursor":[[[],"5c13d641"]]},"ExpandItem-Button":{"background-image":[[[":expanded"],"6cbccb98.png"],[[],"50cab11f.png"]]},"Spinner-UpButton":{"background-image":[[[],"a505df1b"]],"background-color":[[[],"4004dc1c"]],"border":[[[],"36a"]],"border-left":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]],"cursor":[[[],"5c13d641"]],"width":[[[],"582"]]},"Button-ArrowIcon":{"background-image":[[["[RIGHT"],"9f435c8c.png"],[["[LEFT"],"5c00d24b.png"],[["[DOWN"],"c94fc8ad.png"],[["[UP"],"1d0cc994.png"],[[],"a505df1b"]]},"Group":{"background-color":[[[],"4004dc1c"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"font":[[[],"3a7ce581"]],"border":[[["[BORDER"],"dee0ab31"],[[],"36a"]]},"Label-SeparatorLine":{"border":[[["[SHADOW_OUT"],"c411a436"],[["[SHADOW_IN"],"5fbe2ff"],[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]],"background-color":[[[],"ffffffff"]],"background-image":[[[],"a505df1b"]],"width":[[[],"5e"]]},"Slider-UpButton":{"background-color":[[[],"4004dc1c"]],"border":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]],"background-image":[[[],"a505df1b"]],"cursor":[[[],"5c13d641"]],"padding":[[[],"2144df1c"]]},"DateTime":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"font":[[[],"3a7cfc11"]],"border":[[["[BORDER"],"dee0ab31"],[[],"36a"]],"border-radius":[[[],"2144df1c"]],"padding":[[[],"2144df1c"]],"text-shadow":[[[],"306900d"]],"box-shadow":[[[],"306900d"]]},"Slider-DownButton":{"background-color":[[[],"4004dc1c"]],"border":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]],"background-image":[[[],"a505df1b"]],"cursor":[[[],"5c13d641"]],"padding":[[[],"2144df1c"]]},"Tree-Cell":{"padding":[[[],"bf9bfec1"]],"spacing":[[[],"0"]]},"CCombo-Button":{"background-image":[[[],"a505df1b"]],"background-color":[[[],"4004dc1c"]],"border":[[[],"36a"]],"border-left":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]],"cursor":[[[],"5c13d641"]],"width":[[[],"582"]]},"Shell":{"border":[[[":inactive","[TITLE"],"dee0ab31"],[[":inactive","[BORDER"],"dee0ab31"],[[":maximized","[BORDER"],"36a"],[["[BORDER"],"dee0ab31"],[["[TITLE"],"dee0ab31"],[[],"36a"]],"border-radius":[[[],"2144df1c"]],"background-image":[[[],"a505df1b"]],"padding":[[["[BORDER"],"655c8929"],[["[TITLE"],"655c8929"],[[],"2144df1c"]],"background-color":[[[],"4004dc1c"]],"opacity":[[[],"1.0"]],"box-shadow":[[[],"306900d"]],"animation":[[[],"20"]]},"ExpandItem-Header":{"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"border":[[[],"36a"]],"border-radius":[[[],"2144df1c"]],"cursor":[[[],"e81f3e3d"]],"text-shadow":[[[],"306900d"]]},"Combo":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"font":[[[],"3a7cfc11"]],"border":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]],"text-shadow":[[[],"306900d"]],"box-shadow":[[[],"306900d"]]},"Combo-Button":{"background-image":[[[],"a505df1b"]],"background-color":[[[],"4004dc1c"]],"border":[[[],"36a"]],"border-left":[[[],"e0c04a17"]],"border-radius":[[[],"2144df1c"]],"cursor":[[[],"5c13d641"]],"width":[[[],"582"]]},"ToolItem-DropDownIcon":{"background-image":[[[],"110f0331.png"]],"border":[[[],"36a"]]},"TabFolder-ContentContainer":{"border":[[[],"dee0ab31"]]},"DateTime-Calendar-Day":{"color":[[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"text-shadow":[[[],"306900d"]]},"TableItem":{"color":[[[":selected"],"4004dc1c"],[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[":selected"],"3fefb044"],[[":hover"],"3ffb5a34"],[[],"ffffffff"]],"background-image":[[[],"a505df1b"]],"text-decoration":[[[],"none"]],"text-shadow":[[[],"306900d"]]},"*":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"font":[[[],"3a7cfc11"]],"border":[[["[BORDER"],"dee0ab31"],[[],"36a"]],"padding":[[[],"2144df1c"]]},"Tree-GridLine":{"color":[[[":horizontal"],"ffffffff"],[[],"40009eb8"]]},"CCombo-Button-Icon":{"background-image":[[[],"56abe5a7.png"]]},"Combo-Button-Icon":{"background-image":[[[],"7d708cd9.png"]]},"DateTime-UpButton-Icon":{"background-image":[[[],"d886e9d6.png"]]},"Sash":{"background-color":[[[],"ffffffff"]],"background-image":[[[],"a505df1b"]],"border":[[["[BORDER"],"dee0ab31"],[[],"36a"]]},"TabItem":{"background-color":[[[":selected"],"3fff9798"],[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"border-top-color":[[[],"3ff9f068"]],"border-bottom-color":[[[],"3ff9f068"]],"text-shadow":[[[],"306900d"]],"padding":[[[":selected"],"a680cf80"],[[],"bf9bfec1"]]},"ToolItem-Separator":{"width":[[[],"bc"]]},"TableColumn-SortIndicator":{"background-image":[[[":down"],"2fc16aa8.png"],[[":up"],"5b8ba614.png"],[[],"a505df1b"]]},"ToolTip-Text":{"color":[[[],"3fed9ae8"]],"font":[[[],"18a06a3"]],"text-shadow":[[[],"306900d"]]},"ScrollBar":{"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"border":[[[],"36a"]],"border-radius":[[[],"2144df1c"]],"width":[[[],"1d6"]]},"ProgressBar":{"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"border":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]]},"Group-Frame":{"border":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]],"margin":[[[],"e9929b96"]],"padding":[[[],"b1369cc8"]]},"TreeColumn-SortIndicator":{"background-image":[[[":down"],"2fc16aa8.png"],[[":up"],"5b8ba614.png"],[[],"a505df1b"]]},"Shell-MinButton":{"margin":[[[":inactive"],"9e1e81c6"],[[],"9e1e81c6"]],"background-image":[[[":inactive"],"63a3ac85.png"],[[],"63a3ac85.png"]]},"TableColumn":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"font":[[[],"3a7cfc11"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"border-bottom":[[[],"dee0ab31"]],"padding":[[[],"b7669218"]],"text-shadow":[[[],"306900d"]]},"ToolTip-Image":{"background-image":[[["[ICON_WARNING"],"1888a858.png"],[["[ICON_INFORMATION"],"d19cc93d.png"],[["[ICON_ERROR"],"627301a4.png"],[[],"a505df1b"]]},"ScrollBar-Thumb-Icon":{"background-image":[[[],"a505df1b"]]},"CTabItem":{"font":[[[],"3a7cfc11"]],"color":[[[":selected"],"3fed9ae8"],[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[":selected"],"3fff9798"],[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"padding":[[[],"c9967dea"]],"spacing":[[[],"1d6"]],"text-shadow":[[[],"306900d"]]},"Combo-Field":{"padding":[[[],"86afb7a3"]]},"Table":{"font":[[[],"3a7cfc11"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"border":[[["[BORDER"],"dee0ab31"],[[],"36a"]],"background-image":[[[],"a505df1b"]]},"Text-Message":{"color":[[[],"3fed9ae8"]],"text-shadow":[[[],"306900d"]]},"Slider-DownButton-Icon":{"background-image":[[["[VERTICAL"],"5be1033a.png"],[["[HORIZONTAL"],"17352e6f.png"],[[],"a505df1b"]]},"Spinner-Field":{"padding":[[[],"bf374b8e"]]},"Tree":{"font":[[[],"3a7cfc11"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"border":[[["[BORDER"],"dee0ab31"],[[],"36a"]]},"Widget-ToolTip":{"color":[[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"border":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]],"background-image":[[[],"a505df1b"]],"padding":[[[],"2ce1a471"]],"font":[[[],"3a7cfc11"]],"opacity":[[[],"1.0"]],"animation":[[[],"20"]],"box-shadow":[[[],"306900d"]]},"DateTime-Calendar-PreviousYearButton":{"background-image":[[[],"89265bb2.png"]],"cursor":[[[],"5c13d641"]]},"List-Item":{"color":[[[":selected"],"4004dc1c"],[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[":selected"],"3fe4aeec"],[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"text-shadow":[[[],"306900d"]],"padding":[[[],"bf374b8e"]]},"Scale-Thumb":{"background-color":[[[],"4004dc1c"]],"border":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]]},"FileUpload":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"border":[[["[BORDER"],"dee0ab31"],[[],"36a"]],"border-radius":[[[],"2144df1c"]],"opacity":[[[],"1.0"]],"animation":[[[],"20"]],"cursor":[[[],"5c13d641"]],"padding":[[[],"c9967dea"]],"spacing":[[[],"5e"]],"font":[[[],"3a7cfc11"]],"text-shadow":[[[],"306900d"]]},"Text-Search-Icon":{"background-image":[[[],"9b0a9001.png"]],"spacing":[[[],"8d"]]},"Link":{"font":[[[],"3a7cfc11"]],"border":[[["[BORDER"],"dee0ab31"],[[],"36a"]],"text-shadow":[[[],"306900d"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]]},"Button-CheckIcon":{"background-image":[[[":grayed",":selected"],"fea0bb8.png"],[[":selected"],"3655dc8d.png"],[[],"903dd6ca.png"]]},"Table-GridLine":{"color":[[[":horizontal"],"ffffffff"],[[],"40009eb8"]]},"Shell-CloseButton":{"margin":[[[":inactive"],"9e1e81c6"],[[],"9e1e81c6"]],"background-image":[[[":inactive"],"4cdd7012.png"],[[],"4cdd7012.png"]]},"DateTime-DownButton-Icon":{"background-image":[[[],"306e0068.png"]]},"Label":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"font":[[[],"3a7cfc11"]],"border":[[["[BORDER"],"dee0ab31"],[[],"36a"]],"border-radius":[[[],"2144df1c"]],"cursor":[[[],"5c13d641"]],"background-image":[[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"text-decoration":[[[],"none"]],"opacity":[[[],"1.0"]],"text-shadow":[[[],"306900d"]]},"Shell-Titlebar":{"color":[[[],"4004dc1c"]],"background-color":[[[":inactive"],"3ff3d584"],[[],"3fe4f000"]],"background-gradient-color":[[[":inactive"],"3ff3d584"],[[],"3fe4f000"]],"background-image":[[[],"a505df1b"]],"font":[[[],"3a7cfc11"]],"margin":[[[],"2144df1c"]],"padding":[[[],"cc06b3d4"]],"height":[[[],"6fa"]],"text-shadow":[[[],"306900d"]],"border":[[[],"36a"]],"border-radius":[[[],"2144df1c"]]},"Tree-Indent":{"width":[[[],"2f0"]],"background-image":[[[":expanded",":first",":last"],"d282b4e5.png"],[[":collapsed",":first",":last"],"4ee00e3c.png"],[[":first",":last"],"a505df1b"],[[":expanded",":last"],"d282b4e5.png"],[[":collapsed",":last"],"4ee00e3c.png"],[[":expanded",":first"],"d282b4e5.png"],[[":collapsed",":first"],"4ee00e3c.png"],[[":last"],"a505df1b"],[[":first"],"a505df1b"],[[":line"],"a505df1b"],[[":expanded"],"d282b4e5.png"],[[":collapsed"],"4ee00e3c.png"],[[],"a505df1b"]]},"Combo-List":{"border":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]],"box-shadow":[[[],"306900d"]]},"Combo-FocusIndicator":{"background-color":[[[],"ffffffff"]],"border":[[[],"36a"]],"margin":[[[],"2144df1c"]],"opacity":[[[],"0.0"]]},"DateTime-DownButton":{"background-image":[[[],"a505df1b"]],"background-color":[[[],"4004dc1c"]],"border":[[[],"36a"]],"border-left":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]],"cursor":[[[],"5c13d641"]],"width":[[[],"582"]]},"Link-Hyperlink":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fe42cec"]],"text-shadow":[[[],"306900d"]],"text-decoration":[[[],"underline"]]},"Spinner":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"font":[[[],"3a7cfc11"]],"border":[[["[BORDER"],"dee0ab31"],[[],"36a"]],"border-radius":[[[],"2144df1c"]],"padding":[[[],"2144df1c"]],"text-shadow":[[[],"306900d"]],"box-shadow":[[[],"306900d"]]},"MenuItem-CascadeIcon":{"background-image":[[[],"eb8ac0f1.gif"]]},"ToolItem":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"border":[[[":selected"],"dee0ab31"],[[":pressed"],"dee0ab31"],[[],"36a"]],"border-radius":[[[],"2144df1c"]],"animation":[[[],"20"]],"spacing":[[[],"bc"]],"padding":[[[":selected"],"e35af382"],[[":pressed"],"e35af382"],[[],"2ce1a471"]],"opacity":[[[],"1.0"]],"text-shadow":[[[],"306900d"]]},"CTabFolder":{"border-color":[[[],"3ff9f068"]],"border-radius":[[[],"2144df1c"]]},"Tree-Checkbox":{"margin":[[[],"22c00b72"]],"background-image":[[[":checked",":grayed"],"fea0bb8.png"],[[":checked"],"3655dc8d.png"],[[],"903dd6ca.png"]]},"FileUpload-FocusIndicator":{"background-color":[[[],"ffffffff"]],"border":[[[],"2b4cf00b"]],"padding":[[[],"2144df1c"]],"margin":[[[],"54f1c057"]],"opacity":[[[],"1.0"]]},"Menu":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"font":[[[],"3a7cfc11"]],"border":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]],"opacity":[[[],"1.0"]],"padding":[[[],"2144df1c"]],"animation":[[[],"20"]],"box-shadow":[[[],"306900d"]]},"TabFolder":{"border":[[["[BORDER"],"dee0ab31"],[[],"36a"]],"font":[[[],"3a7cfc11"]]},"Button":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"border":[[["[ARROW"],"dee0ab31"],[["[BORDER"],"dee0ab31"],[["[TOGGLE"],"dee0ab31"],[["[PUSH"],"dee0ab31"],[[],"36a"]],"border-radius":[[[],"2144df1c"]],"opacity":[[[],"1.0"]],"text-decoration":[[[],"none"]],"animation":[[[],"20"]],"cursor":[[[],"5c13d641"]],"padding":[[["[RADIO"],"8393ccd2"],[["[CHECK"],"8393ccd2"],[["[ARROW"],"ca2ee18a"],[[],"c9967dea"]],"spacing":[[["[RADIO"],"149"],[["[CHECK"],"149"],[[],"5e"]],"font":[[[],"3a7cfc11"]],"text-shadow":[[[],"306900d"]]},"CLabel":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"font":[[[],"3a7cfc11"]],"border":[[["[BORDER"],"dee0ab31"],[[],"36a"]],"border-radius":[[[],"2144df1c"]],"cursor":[[[],"5c13d641"]],"background-image":[[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"padding":[[[],"bf9bfec1"]],"spacing":[[[],"eb"]],"opacity":[[[],"1.0"]],"text-shadow":[[[],"306900d"]]},"MenuItem-CheckIcon":{"background-image":[[[],"144ea8f9.gif"]]},"Scale":{"background-color":[[[],"4004dc1c"]],"border":[[["[BORDER"],"dee0ab31"],[[],"36a"]],"border-radius":[[[],"2144df1c"]]},"ToolTip":{"font":[[[],"3a7cfc11"]],"color":[[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"cursor":[[[],"5c13d641"]],"background-image":[[[],"a505df1b"]],"opacity":[[[],"1.0"]],"border":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]],"padding":[[[],"2ce1a471"]],"animation":[[[],"20"]],"box-shadow":[[[],"306900d"]]},"Slider-Thumb":{"background-color":[[[],"4004dc1c"]],"border":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]],"background-image":[[[],"2ed10572.png"]]},"CCombo-List":{"border":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]],"box-shadow":[[[],"306900d"]]},"ScrollBar-DownButton-Icon":{"background-image":[[[],"a505df1b"]]},"Display":{"rwt-shadow-color":[[[],"3ff98c68"]],"rwt-highlight-color":[[[],"4004dc1c"]],"rwt-darkshadow-color":[[[],"3ff53320"]],"rwt-lightshadow-color":[[[],"40006240"]],"rwt-thinborder-color":[[[],"3ffa2a74"]],"rwt-selectionmarker-color":[[[],"400457b0"]],"rwt-infobackground-color":[[[],"4004dc1c"]],"rwt-error-image":[[[],"994dccc6.png"]],"rwt-information-image":[[[],"2c4058a5.png"]],"rwt-working-image":[[[],"2c4058a5.png"]],"rwt-question-image":[[[],"83e441e9.png"]],"rwt-warning-image":[[[],"aa96e44e.png"]],"rwt-fontlist":[[[],"67d9b899"]],"background-image":[[[],"3c7d3330.png"]],"font":[[[],"3a7cfc11"]]},"ToolBar":{"font":[[[],"3a7cfc11"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"padding":[[[],"2144df1c"]],"spacing":[[[],"0"]],"border":[[["[BORDER"],"dee0ab31"],[[],"36a"]],"border-radius":[[[],"2144df1c"]],"opacity":[[[],"1.0"]]},"ExpandBar":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"font":[[[],"3a7cfc11"]],"border":[[["[BORDER"],"dee0ab31"],[[],"36a"]],"border-radius":[[[],"2144df1c"]]},"Button-RadioIcon":{"background-image":[[[":selected"],"46d9d135.png"],[[],"c290fe4b.png"]]},"DateTime-DropDownCalendar":{"border":[[[],"dee0ab31"]]},"DateTime-Field":{"color":[[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"padding":[[[],"db8f674b"]],"text-shadow":[[[],"306900d"]]},"DateTime-Calendar-NextYearButton":{"background-image":[[[],"2d244d58.png"]],"cursor":[[[],"5c13d641"]]},"FormText":{"color":[[[],"3fe41900"]],"background-color":[[[],"4004dc1c"]],"font":[[[],"e7de1195"]],"border":[[["[BORDER"],"5fbe325"],[[],"36a"]]},"ScrollBar-UpButton-Icon":{"background-image":[[[],"a505df1b"]]},"DateTime-Calendar-NextMonthButton":{"background-image":[[[],"1faf9af7.png"]],"cursor":[[[],"5c13d641"]]},"CCombo":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"font":[[[],"3a7cfc11"]],"border":[[["[BORDER"],"dee0ab31"],[[],"36a"]],"border-radius":[[[],"2144df1c"]],"text-shadow":[[[],"306900d"]],"box-shadow":[[[],"306900d"]]},"ScrollBar-Thumb":{"background-color":[[[],"4004dc1c"]],"border":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]],"background-image":[[[],"bf671604.png"]],"min-height":[[[],"3ac"]]},"CCombo-FocusIndicator":{"background-color":[[[],"ffffffff"]],"border":[[[],"36a"]],"margin":[[[],"2144df1c"]],"opacity":[[[],"0.0"]]},"SystemMessage-DisplayOverlay":{"background-image":[[[],"a505df1b"]],"background-color":[[[],"ffffffff"]]},"Composite":{"border":[[["[BORDER"],"dee0ab31"],[[],"36a"]],"border-radius":[[[],"2144df1c"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"padding":[[[],"2144df1c"]],"opacity":[[[],"1.0"]],"box-shadow":[[[],"306900d"]],"animation":[[[],"20"]]},"MenuItem-RadioIcon":{"background-image":[[[],"d218be7e.gif"]]},"Slider-UpButton-Icon":{"background-image":[[["[VERTICAL"],"827a3489.png"],[["[HORIZONTAL"],"a30b8da1.png"],[[],"a505df1b"]]},"Group-Label":{"border":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]],"padding":[[[],"543919dd"]],"margin":[[[],"a35b8659"]],"background-color":[[[],"4004dc1c"]],"color":[[[],"3fed9ae8"]],"text-shadow":[[[],"306900d"]]},"Table-Checkbox":{"width":[[[],"3db"]],"margin":[[[],"26291b05"]],"background-image":[[[":checked",":grayed"],"fea0bb8.png"],[[":checked"],"3655dc8d.png"],[[],"903dd6ca.png"]]},"TreeItem":{"color":[[[":selected"],"4004dc1c"],[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[":selected"],"3fefb044"],[[":hover"],"3ffb5a34"],[[],"ffffffff"]],"background-image":[[[],"a505df1b"]],"text-decoration":[[[],"none"]],"text-shadow":[[[],"306900d"]]},"DateTime-DropDownButton-Icon":{"background-image":[[[],"d1516768.png"]]},"Slider":{"background-color":[[[],"4004dc1c"]],"border":[[[],"36a"]],"border-radius":[[[],"2144df1c"]]},"Browser":{"border":[[["[BORDER"],"dee0ab31"],[[],"36a"]]},"DateTime-Calendar-Navbar":{"border":[[[],"36a"]],"border-radius":[[[],"2144df1c"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"background-image":[[[],"a505df1b"]],"font":[[[],"3a7cfc11"]],"text-shadow":[[[],"306900d"]]},"CoolItem-Handle":{"border":[[[],"dee0ab31"]],"width":[[[],"5e"]]},"ToolTip-Message":{"color":[[[],"3fed9ae8"]],"font":[[[],"3a7cfc11"]],"text-shadow":[[[],"306900d"]]},"ScrollBar-DownButton":{"background-color":[[[],"ffffffff"]],"border":[[[],"36a"]],"border-radius":[[[],"2144df1c"]],"background-image":[[["[VERTICAL"],"ba1d7000.png"],[["[HORIZONTAL"],"fb90316c.png"],[[],"a505df1b"]],"cursor":[[[],"5c13d641"]]},"List":{"font":[[[],"3a7cfc11"]],"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"border":[[["[BORDER"],"dee0ab31"],[[],"36a"]]},"DateTime-UpButton":{"background-image":[[[],"a505df1b"]],"background-color":[[[],"4004dc1c"]],"border":[[[],"36a"]],"border-left":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]],"cursor":[[[],"5c13d641"]],"width":[[[],"582"]]},"Shell-DisplayOverlay":{"background-color":[[[],"3ff48b00"]],"background-image":[[[],"a505df1b"]],"animation":[[[],"20"]],"opacity":[[[],"0.2"]]},"Button-FocusIndicator":{"background-color":[[[],"ffffffff"]],"border":[[["[BORDER"],"dee0ab31"],[[],"2b4cf00b"]],"padding":[[[],"2144df1c"]],"margin":[[[],"54f1c057"]],"opacity":[[[],"1.0"]]},"Sash-Handle":{"background-image":[[[],"a505df1b"]]},"CTabFolder-DropDownButton-Icon":{"background-image":[[[],"fa5334b.png"]]},"DateTime-Calendar-PreviousMonthButton":{"background-image":[[[],"5fd49387.png"]],"cursor":[[[],"5c13d641"]]},"Table-RowOverlay":{"color":[[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color":[[[],"ffffffff"]],"background-image":[[[],"a505df1b"]]},"Spinner-DownButton-Icon":{"background-image":[[[],"d1516768.png"]]},"Tree-RowOverlay":{"color":[[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color":[[[],"ffffffff"]],"background-image":[[[],"a505df1b"]]},"Table-Cell":{"padding":[[[],"c93ac8a5"]],"spacing":[[[],"8d"]]},"Text":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"4004dc1c"]],"font":[[[],"3a7cfc11"]],"border":[[["[BORDER"],"dee0ab31"],[[],"36a"]],"border-radius":[[[],"2144df1c"]],"background-image":[[[],"a505df1b"]],"background-position":[[[],"left top"]],"background-repeat":[[[],"repeat"]],"padding":[[["[MULTI"],"86afb7a3"],[[],"86afb7a3"]],"text-shadow":[[[],"306900d"]],"box-shadow":[[[],"306900d"]]},"MenuItem":{"color":[[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color":[[[],"ffffffff"]],"background-image":[[[],"a505df1b"]],"opacity":[[[],"1.0"]],"text-shadow":[[[],"306900d"]],"padding":[[[":onMenuBar"],"27a454c8"],[["[SEPARATOR"],"cc06b3d4"],[[],"2708e187"]]},"Text-Cancel-Icon":{"background-image":[[[],"1691d3de.gif"]],"spacing":[[[],"8d"]]},"ProgressBar-Indicator":{"background-color":[[[":error"],"4001abb4"],[[":paused"],"3ffb5a34"],[[],"3fe4aeec"]],"background-image":[[[],"a505df1b"]],"border":[[[],"36a"]],"opacity":[[[],"1.0"]]},"ExpandItem":{"border":[[[],"dee0ab31"]],"border-radius":[[[],"2144df1c"]]},"CCombo-Field":{"padding":[[[],"86afb7a3"]]},"Shell-MaxButton":{"margin":[[[":inactive"],"9e1e81c6"],[[],"9e1e81c6"]],"background-image":[[[":inactive",":maximized"],"679d075a.png"],[[":maximized"],"679d075a.png"],[[":inactive"],"60504cca.png"],[[],"60504cca.png"]]},"Spinner-UpButton-Icon":{"background-image":[[[],"49104d78.png"]]}}}
\ No newline at end of file
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/static/html/blank.html b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/static/html/blank.html
deleted file mode 100644
index 90531a4..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/static/html/blank.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<html>
-</html>
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/static/image/blank.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/static/image/blank.gif
deleted file mode 100644
index 75b945d..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/static/image/blank.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/static/image/dotted_white.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/static/image/dotted_white.gif
deleted file mode 100644
index 0c7252d..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/static/image/dotted_white.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/arrows/chevron-left-hover.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/arrows/chevron-left-hover.png
deleted file mode 100644
index 2187463..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/arrows/chevron-left-hover.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/arrows/chevron-left.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/arrows/chevron-left.png
deleted file mode 100644
index 6f35d3f..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/arrows/chevron-left.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/arrows/chevron-right-hover.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/arrows/chevron-right-hover.png
deleted file mode 100644
index 87a94ee..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/arrows/chevron-right-hover.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/arrows/chevron-right.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/arrows/chevron-right.png
deleted file mode 100644
index 26215d8..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/arrows/chevron-right.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/ctabfolder/close.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/ctabfolder/close.gif
deleted file mode 100644
index 9470c12..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/ctabfolder/close.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/ctabfolder/close_hover.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/ctabfolder/close_hover.gif
deleted file mode 100644
index 89d08ad..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/ctabfolder/close_hover.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/ctabfolder/ctabfolder-dropdown.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/ctabfolder/ctabfolder-dropdown.png
deleted file mode 100644
index 26215d8..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/ctabfolder/ctabfolder-dropdown.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/ctabfolder/maximize.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/ctabfolder/maximize.gif
deleted file mode 100644
index bd829f4..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/ctabfolder/maximize.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/ctabfolder/minimize.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/ctabfolder/minimize.gif
deleted file mode 100644
index d69b3b1..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/ctabfolder/minimize.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/ctabfolder/restore.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/ctabfolder/restore.gif
deleted file mode 100644
index 959170f..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/ctabfolder/restore.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/cursors/alias.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/cursors/alias.gif
deleted file mode 100644
index 3b46c72..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/cursors/alias.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/cursors/copy.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/cursors/copy.gif
deleted file mode 100644
index 2a59a4a..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/cursors/copy.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/cursors/move.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/cursors/move.gif
deleted file mode 100644
index adc9a64..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/cursors/move.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/cursors/nodrop.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/cursors/nodrop.gif
deleted file mode 100644
index 3a25866..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/cursors/nodrop.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/cursors/up_arrow.cur b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/cursors/up_arrow.cur
deleted file mode 100644
index 3f6494a..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/cursors/up_arrow.cur
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/scale/h_line.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/scale/h_line.gif
deleted file mode 100644
index bdd4425..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/scale/h_line.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/scale/v_line.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/scale/v_line.gif
deleted file mode 100644
index 397f10b..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/scale/v_line.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/tree/loading.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/tree/loading.gif
deleted file mode 100644
index 2042fbd..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resource/widget/rap/tree/loading.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resources.js b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resources.js
deleted file mode 100644
index 9dbe595..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/resources.js
+++ /dev/null
@@ -1,591 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2012 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "org.eclipse.ui.forms.widgets.ToggleHyperlink", {
-  extend : rwt.widgets.base.Image,
-
-  construct : function() {
-    this.base( arguments );
-    this.setCursor( "pointer" );
-    this._hover = false;
-    this._expanded = false;
-    this._collapseNormal = null;
-    this._collapseHover = null;
-    this._expandHover = null;
-    this._expandNormal = null;
-    this.addEventListener( "mousemove", this._onMouseMove, this );
-    this.addEventListener( "mouseout", this._onMouseOut, this );
-  },
-
-  destruct : function() {
-    this.removeEventListener( "mousemove", this._onMouseMove, this );
-    this.removeEventListener( "mouseout", this._onMouseOut, this );
-  },
-
-  members : {
-
-    setImages : function( collapseNormal, collapseHover, expandNormal, expandHover ) {
-      this._collapseNormal = collapseNormal;
-      this._collapseHover = collapseHover != null ? collapseHover : collapseNormal;
-      this._expandNormal = expandNormal;
-      this._expandHover = expandHover != null ? expandHover : expandNormal;
-      this._updateImage();
-    },
-
-    setExpanded : function( value ) {
-      this._expanded = value;
-      this._updateImage();
-    },
-
-    setHasDefaultSelectionListener : function( value ) {
-      if( value ) {
-        this.addEventListener( "click", rwt.remote.EventUtil.widgetDefaultSelected, this );
-      } else {
-        this.removeEventListener( "click", rwt.remote.EventUtil.widgetDefaultSelected, this );
-      }
-    },
-
-    _onMouseMove : function( evt ) {
-      this._hover = true;
-      this._updateImage();
-    },
-
-    _onMouseOut : function( evt ) {
-      this._hover = false;
-      this._updateImage();
-    },
-
-    _updateImage : function() {
-      var source;
-      if( this._expanded ) {
-        source = this._hover ? this._collapseHover : this._collapseNormal;
-      } else {
-        source = this._hover ? this._expandHover : this._expandNormal;
-      }
-      this.setSource( source );
-    }
-
-  }
-
-} );
-
-
-/*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "forms.widgets.ToggleHyperlink", {
-
-  factory : function( properties ) {
-    var result = new org.eclipse.ui.forms.widgets.ToggleHyperlink();
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "images",
-    "expanded"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    "images" : function( widget, value ) {
-      var collapseNormal = value[ 0 ] === null ? null : value[ 0 ][ 0 ];
-      var collapseHover = value[ 1 ] === null ? null : value[ 1 ][ 0 ];
-      var expandNormal = value[ 2 ] === null ? null : value[ 2 ][ 0 ];
-      var expandHover = value[ 3 ] === null ? null : value[ 3 ][ 0 ];
-      widget.setImages( collapseNormal, collapseHover, expandNormal, expandHover );
-    }
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [
-    "DefaultSelection"
-  ] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} ),
-
-  methods : []
-
-} );
-/*******************************************************************************
- * Copyright (c) 2007, 2012 Innoopract Informationssysteme GmbH and others.
- * 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:
- *    Innoopract Informationssysteme GmbH - initial API and implementation
- *    EclipseSource - ongoing development
- ******************************************************************************/
-
-rwt.qx.Class.define( "org.eclipse.ui.forms.widgets.Hyperlink", {
-  extend : rwt.widgets.base.Atom,
-
-  construct : function( style ) {
-    this.base( arguments );
-    this.setAppearance( "hyperlink" );
-    // TODO [rh] workaround for weird getLabelObject behavior
-    this.setLabel( "(empty)" );
-    // End of workaround
-    var labelObject = this.getLabelObject();
-    labelObject.setAppearance( "hyperlink-label" );
-    labelObject.setMode( "html" );
-    labelObject.setWrap( rwt.util.Strings.contains( style, "wrap" ) );
-    // TODO [rh] workaround for weird getLabelObject behavior
-    this.setLabel( "" );
-    // End of workaround
-    this._text = "";
-    this._underlined = false;
-    this._savedBackgroundColor = null;
-    this._savedTextColor = null;
-    this._activeBackgroundColor = null;
-    this._activeTextColor = null;
-    this._underlineMode = null;
-    this._hover = false;
-    this.addEventListener( "mousemove", this._onMouseMove, this );
-    this.addEventListener( "mouseout", this._onMouseOut, this );
-  },
-
-  destruct : function() {
-    this.removeEventListener( "mousemove", this._onMouseMove, this );
-    this.removeEventListener( "mouseout", this._onMouseOut, this );
-  },
-
-  statics : {
-    UNDERLINE_NEVER : 1,
-    UNDERLINE_HOVER : 2,
-    UNDERLINE_ALWAYS : 3
-  },
-
-  members : {
-
-    setText : function( value ) {
-      this._text = value;
-      this._updateText();
-    },
-
-    setUnderlined : function( value ) {
-      this._underlined = value;
-      this._updateText();
-    },
-
-    _updateText : function() {
-      var text = this._underlined ? "<u>" + this._text + "</u>" : this._text;
-      this.setLabel( text );
-    },
-
-    setActiveBackgroundColor : function( value ) {
-      this._activeBackgroundColor = value;
-    },
-
-    setActiveTextColor : function( value ) {
-      this._activeTextColor = value;
-    },
-
-    setUnderlineMode : function( value ) {
-      this._underlineMode = value;
-    },
-
-    setHasDefaultSelectionListener : function( value ) {
-      if( value ) {
-        this.addEventListener( "click", rwt.remote.EventUtil.widgetDefaultSelected, this );
-      } else {
-        this.removeEventListener( "click", rwt.remote.EventUtil.widgetDefaultSelected, this );
-      }
-    },
-
-    _onMouseMove : function( evt ) {
-      if( !this._hover ) {
-        this._savedBackgroundColor = this.getBackgroundColor();
-        if( this._activeBackgroundColor != null ) {
-          this.setBackgroundColor( this._activeBackgroundColor );
-        }
-        this._savedTextColor = this.getTextColor();
-        if( this._activeTextColor != null ) {
-          this.setTextColor( this._activeTextColor );
-        }
-        var mode = org.eclipse.ui.forms.widgets.Hyperlink.UNDERLINE_HOVER;
-        if( this._underlineMode == mode ) {
-          this.setStyleProperty( "textDecoration", "underline");
-        }
-        this._hover = true;
-      }
-    },
-
-    _onMouseOut : function( evt ) {
-      if( this._hover ) {
-        this._hover = false;
-        this.setBackgroundColor( this._savedBackgroundColor );
-        this.setTextColor( this._savedTextColor );
-        var mode = org.eclipse.ui.forms.widgets.Hyperlink.UNDERLINE_HOVER;
-        if( this._underlineMode == mode ) {
-          this.setStyleProperty( "textDecoration", "none");
-        }
-      }
-    }
-  }
-
-} );
-
-/*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "forms.widgets.Hyperlink", {
-
-  factory : function( properties ) {
-    var wrap = properties.style.indexOf( "WRAP" ) !== -1 ? "wrap" : "";
-    var result = new org.eclipse.ui.forms.widgets.Hyperlink( wrap );
-    rwt.remote.HandlerUtil.addStatesForStyles( result, properties.style );
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "text",
-    "image",
-    "underlined",
-    "underlineMode",
-    "activeForeground",
-    "activeBackground"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    "text" : function( widget, value ) {
-      var EncodingUtil = rwt.util.Encoding;
-      var text = EncodingUtil.escapeText( value, false );
-      widget.setText( text );
-    },
-    "image" : function( widget, value ) {
-      if( value === null ) {
-        widget.setIcon( null );
-      } else {
-        widget.setIcon( value[ 0 ] );
-      }
-    },
-    "activeForeground" : function( widget, value ) {
-      if( value === null ) {
-        widget.setActiveTextColor( null );
-      } else {
-        widget.setActiveTextColor( rwt.util.Colors.rgbToRgbString( value ) );
-      }
-    },
-    "activeBackground" : function( widget, value ) {
-      if( value === null ) {
-        widget.setActiveBackgroundColor( null );
-      } else {
-        widget.setActiveBackgroundColor( rwt.util.Colors.rgbToRgbString( value ) );
-      }
-    }
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [
-    "DefaultSelection"
-  ] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} ),
-
-  methods : []
-
-} );
-/*******************************************************************************
- * Copyright (c) 2009, 2013 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.qx.Class.define( "org.eclipse.ui.forms.widgets.FormText", {
-  extend : rwt.widgets.base.Parent,
-
-  construct : function() {
-    this.base( arguments );
-    this.setAppearance( "formtext" );
-    this._hyperlinks = [];
-    this._segments = [];
-    this._hyperlinkMode = org.eclipse.ui.forms.widgets.FormText.UNDERLINE_ALWAYS;
-    this._hyperlinkForeground = "#0000FF";
-    this._hyperlinkActiveForeground = "#0000FF";
-  },
-
-  destruct : function() {
-    this.clearContent();
-  },
-
-  statics : {
-    UNDERLINE_NEVER : 1,
-    UNDERLINE_HOVER : 2,
-    UNDERLINE_ALWAYS : 3
-  },
-
-  members : {
-
-    createBullet : function( style, image, text, bounds ) {
-      var bullet = new rwt.widgets.base.Atom();
-      bullet.setAppearance( "formtext-bullet" );
-      switch( style ) {
-        case 2:
-          bullet.setLabel( text );
-          break;
-        case 3:
-          bullet.setIcon( image );
-          break;
-        default:
-          bullet.setIcon( image );
-      }
-      bullet.set( {
-        left   : bounds[ 0 ],
-        top    : bounds[ 1 ],
-        width  : bounds[ 2 ],
-        height : bounds[ 3 ]
-      } );
-      this._segments[ this._segments.length ] = bullet;
-      this.add( bullet );
-    },
-
-    createTextHyperlinkSegment : function( text, toolTip, bounds, font ) {
-      var textHyperlink = new rwt.widgets.base.Label();
-      textHyperlink.setAppearance( "formtext-hyperlink" );
-      var escapedText = this._escapeText( text );
-      textHyperlink.set( {
-        text   : escapedText,
-        left   : bounds[ 0 ],
-        top    : bounds[ 1 ],
-        width  : bounds[ 2 ],
-        height : bounds[ 3 ]
-      } );
-      var widgetManager = rwt.remote.WidgetManager.getInstance();
-      widgetManager.setToolTip( textHyperlink, toolTip );
-      if( font != null ) {
-        widgetManager.setFont( textHyperlink, font[ 0 ], font[ 1 ], font[ 2 ], font[ 3 ] );
-      }
-      textHyperlink.addEventListener( "mousemove", this._onMouseMove, this );
-      textHyperlink.addEventListener( "mouseout", this._onMouseOut, this );
-      this._hyperlinks[ this._hyperlinks.length ] = textHyperlink;
-      this.add( textHyperlink );
-    },
-
-    createTextSegment : function( text, bounds, font, color ) {
-      var textFragment = new rwt.widgets.base.Label();
-      textFragment.setAppearance( "formtext-text" );
-      var escapedText = this._escapeText( text );
-      textFragment.set( {
-        text   : escapedText,
-        left   : bounds[ 0 ],
-        top    : bounds[ 1 ],
-        width  : bounds[ 2 ],
-        height : bounds[ 3 ]
-      } );
-      if( font != null ) {
-        textFragment.setFont( rwt.html.Font.fromArray( font ) );
-      }
-      if( color != null ) {
-        textFragment.setTextColor( rwt.util.Colors.rgbToRgbString( color ) );
-      }
-      this._segments[ this._segments.length ] = textFragment;
-      this.add( textFragment );
-    },
-
-    createImageHyperlinkSegment : function( source, toolTip, bounds ) {
-      var imageHyperlink = new rwt.widgets.base.Image();
-      imageHyperlink.setAppearance( "formtext-hyperlink" );
-      imageHyperlink.set( {
-        source     : source,
-        left       : bounds[ 0 ],
-        top        : bounds[ 1 ],
-        width      : bounds[ 2 ],
-        height     : bounds[ 3 ],
-        paddingTop : 2
-      } );
-      var widgetManager = rwt.remote.WidgetManager.getInstance();
-      widgetManager.setToolTip( imageHyperlink, toolTip );
-      this._segments[ this._segments.length ] = imageHyperlink;
-      this.add( imageHyperlink );
-    },
-
-    createImageSegment : function( source, bounds ) {
-      var image = new rwt.widgets.base.Image();
-      image.setAppearance( "formtext-image" );
-      image.set( {
-        source : source,
-        left   : bounds[ 0 ],
-        top    : bounds[ 1 ],
-        width  : bounds[ 2 ],
-        height : bounds[ 3 ]
-      } );
-      this._segments[ this._segments.length ] = image;
-      this.add( image );
-    },
-
-    setHyperlinkSettings : function( mode, foreground, activeForeground ) {
-      this._hyperlinkMode = mode;
-      if( foreground != null ) {
-        this._hyperlinkForeground = foreground;
-      }
-      if( activeForeground != null ) {
-        this._hyperlinkActiveForeground = activeForeground;
-      }
-      this.updateHyperlinks();
-    },
-
-    updateHyperlinks : function() {
-      for( var i = 0; i < this._hyperlinks.length; i++ ) {
-        this._hyperlinks[ i ].setTextColor( this._hyperlinkForeground );
-        if( this._hyperlinkMode == org.eclipse.ui.forms.widgets.FormText.UNDERLINE_ALWAYS ) {
-          this._hyperlinks[ i ].setStyleProperty( "textDecoration", "underline");
-        }
-      }
-    },
-
-    clearContent : function() {
-      for( var i = 0; i < this._hyperlinks.length; i++ ) {
-        this._hyperlinks[ i ].removeEventListener( "mousemove",
-                                                   this._onMouseMove,
-                                                   this );
-        this._hyperlinks[ i ].removeEventListener( "mouseout",
-                                                   this._onMouseOut,
-                                                   this );
-        this._hyperlinks[ i ].destroy();
-      }
-      for( var i = 0; i < this._segments.length; i++ ) {
-        this._segments[ i ].destroy();
-      }
-      this._hyperlinks = [];
-      this._segments = [];
-    },
-
-    _escapeText : function( text ) {
-      return text.replace( / /g, "&nbsp;" );
-    },
-
-    _onMouseMove : function( evt ) {
-      var hyperlink = evt.getTarget();
-      if( !this.hasState( "hover" ) ) {
-        this.addState( "hover" );
-        hyperlink.setTextColor( this._hyperlinkActiveForeground );
-        if( this._hyperlinkMode == org.eclipse.ui.forms.widgets.FormText.UNDERLINE_HOVER ) {
-          hyperlink.setStyleProperty( "textDecoration", "underline");
-        }
-      }
-    },
-
-    _onMouseOut : function( evt ) {
-      var hyperlink = evt.getTarget();
-      if( this.hasState( "hover" ) ) {
-        this.removeState( "hover" );
-        hyperlink.setTextColor( this._hyperlinkForeground );
-        if( this._hyperlinkMode == org.eclipse.ui.forms.widgets.FormText.UNDERLINE_HOVER ) {
-          hyperlink.setStyleProperty( "textDecoration", "none");
-        }
-      }
-    }
-  }
-} );
-
-/*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
- * 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:
- *    EclipseSource - initial API and implementation
- ******************************************************************************/
-
-rwt.remote.HandlerRegistry.add( "forms.widgets.FormText", {
-
-  factory : function( properties ) {
-    var result = new org.eclipse.ui.forms.widgets.FormText();
-    result.setUserData( "isControl", true );
-    rwt.remote.HandlerUtil.setParent( result, properties.parent );
-    return result;
-  },
-
-  destructor : rwt.remote.HandlerUtil.getControlDestructor(),
-
-  getDestroyableChildren : rwt.remote.HandlerUtil.getDestroyableChildrenFinder(),
-
-  properties : rwt.remote.HandlerUtil.extendControlProperties( [
-    "text",
-    "hyperlinkSettings"
-  ] ),
-
-  propertyHandler : rwt.remote.HandlerUtil.extendControlPropertyHandler( {
-    "text" : function( widget, value ) {
-      widget.clearContent();
-      for( var i = 0; i < value.length; i++ ) {
-        var type = value[ i ][ 0 ];
-        var args = value[ i ].slice( 1 );
-        switch( type ) {
-          case "bullet":
-            widget.createBullet.apply( widget, args );
-          break;
-          case "textHyperlink":
-            widget.createTextHyperlinkSegment.apply( widget, args );
-          break;
-          case "text":
-            widget.createTextSegment.apply( widget, args );
-          break;
-          case "imageHyperlink":
-            widget.createImageHyperlinkSegment.apply( widget, args );
-          break;
-          case "image":
-            widget.createImageSegment.apply( widget, args );
-          break;
-        }
-      }
-      widget.updateHyperlinks();
-    },
-    "hyperlinkSettings" : function( widget, value ) {
-      var ColorUtil = rwt.util.Colors;
-      var foreground = value[ 1 ] !== null ? ColorUtil.rgbToRgbString( value[ 1 ] ) : null;
-      var activeForeground = value[ 2 ] !== null ? ColorUtil.rgbToRgbString( value[ 2 ] ) : null;
-      widget.setHyperlinkSettings( value[ 0 ], foreground, activeForeground );
-    }
-  } ),
-
-  listeners : rwt.remote.HandlerUtil.extendControlListeners( [] ),
-
-  listenerHandler : rwt.remote.HandlerUtil.extendControlListenerHandler( {} ),
-
-  methods : []
-
-} );
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/110f0331.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/110f0331.png
deleted file mode 100644
index da355c6..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/110f0331.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1113ce64.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1113ce64.png
deleted file mode 100644
index c915808..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1113ce64.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/12dc3365.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/12dc3365.png
deleted file mode 100644
index d83f349..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/12dc3365.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/144ea8f9.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/144ea8f9.gif
deleted file mode 100644
index 767f285..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/144ea8f9.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1597b236.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1597b236.png
deleted file mode 100644
index dd642c1..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1597b236.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/15db4987.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/15db4987.png
deleted file mode 100644
index 7a66150..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/15db4987.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/15e0a581.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/15e0a581.png
deleted file mode 100644
index 6958bf3..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/15e0a581.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1677980f.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1677980f.png
deleted file mode 100644
index 13dd0fb..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1677980f.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1691d3de.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1691d3de.gif
deleted file mode 100644
index 2d3935a..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1691d3de.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/17352e6f.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/17352e6f.png
deleted file mode 100644
index 3734835..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/17352e6f.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/175852a9.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/175852a9.png
deleted file mode 100644
index b34b2a5..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/175852a9.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1888a858.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1888a858.png
deleted file mode 100644
index 3c5bdd0..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1888a858.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/18938a9d.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/18938a9d.png
deleted file mode 100644
index b3277ee..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/18938a9d.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1932f866.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1932f866.png
deleted file mode 100644
index 24bdbc4..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1932f866.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/193a0649.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/193a0649.png
deleted file mode 100644
index 030e239..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/193a0649.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1a81f5fd.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1a81f5fd.png
deleted file mode 100644
index 83425ca..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1a81f5fd.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1a9f03bf.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1a9f03bf.png
deleted file mode 100644
index ff6e8f1..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1a9f03bf.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1ac11829.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1ac11829.png
deleted file mode 100644
index 7230432..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1ac11829.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1c99cf1e.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1c99cf1e.png
deleted file mode 100644
index 96642db..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1c99cf1e.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1d0cc994.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1d0cc994.png
deleted file mode 100644
index b34b2a5..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1d0cc994.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1faf9af7.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1faf9af7.png
deleted file mode 100644
index 849e968..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/1faf9af7.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2011457e.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2011457e.png
deleted file mode 100644
index 6c2b422..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2011457e.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/21bc6434.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/21bc6434.gif
deleted file mode 100644
index 7a73f82..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/21bc6434.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2525a1c4.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2525a1c4.png
deleted file mode 100644
index 2df60b3..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2525a1c4.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/252f45a6.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/252f45a6.png
deleted file mode 100644
index 39161d2..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/252f45a6.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/25db362.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/25db362.png
deleted file mode 100644
index 6c2b422..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/25db362.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/27211de7.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/27211de7.png
deleted file mode 100644
index 0ddf904..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/27211de7.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/282bf613.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/282bf613.png
deleted file mode 100644
index 84fa072..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/282bf613.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/28932128.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/28932128.png
deleted file mode 100644
index 611189d..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/28932128.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/28dbc48b.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/28dbc48b.png
deleted file mode 100644
index 35656c2..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/28dbc48b.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2c4058a5.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2c4058a5.png
deleted file mode 100644
index 1dbef8c..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2c4058a5.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2d244d58.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2d244d58.png
deleted file mode 100644
index 6c2b422..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2d244d58.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2ed10572.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2ed10572.png
deleted file mode 100644
index b82dc94..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2ed10572.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2ede037a.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2ede037a.png
deleted file mode 100644
index 7c9e5af..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2ede037a.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2fc16aa8.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2fc16aa8.png
deleted file mode 100644
index 18df5c8..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/2fc16aa8.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/306e0068.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/306e0068.png
deleted file mode 100644
index da355c6..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/306e0068.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/30bae239.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/30bae239.png
deleted file mode 100644
index 999625c..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/30bae239.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/34777395.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/34777395.png
deleted file mode 100644
index cbe0e3c..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/34777395.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/35ff8519.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/35ff8519.png
deleted file mode 100644
index 1ea81f9..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/35ff8519.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3622b9ea.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3622b9ea.png
deleted file mode 100644
index 0b82cbb..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3622b9ea.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3655dc8d.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3655dc8d.png
deleted file mode 100644
index c9f54c9..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3655dc8d.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/38325440.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/38325440.png
deleted file mode 100644
index 24bdbc4..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/38325440.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3aee7904.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3aee7904.png
deleted file mode 100644
index dae97b1..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3aee7904.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3bad9072.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3bad9072.png
deleted file mode 100644
index 71b41fe..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3bad9072.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3bbaf0cf.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3bbaf0cf.png
deleted file mode 100644
index fc6f270..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3bbaf0cf.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3bc1b40f.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3bc1b40f.png
deleted file mode 100644
index 7230432..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3bc1b40f.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3c7d3330.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3c7d3330.png
deleted file mode 100644
index bc1dd63..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3c7d3330.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3d796824.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3d796824.png
deleted file mode 100644
index d633e0d..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3d796824.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3d99024e.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3d99024e.png
deleted file mode 100644
index 87a94ee..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3d99024e.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3f63f168.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3f63f168.png
deleted file mode 100644
index 199e6c5..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/3f63f168.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/42378b7e.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/42378b7e.png
deleted file mode 100644
index 389ce78..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/42378b7e.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/453ee3bb.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/453ee3bb.png
deleted file mode 100644
index ee74198..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/453ee3bb.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/456d9ca6.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/456d9ca6.png
deleted file mode 100644
index d38ffd6..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/456d9ca6.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/46c15c8d.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/46c15c8d.png
deleted file mode 100644
index d8cbb2d..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/46c15c8d.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/46d9d135.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/46d9d135.png
deleted file mode 100644
index 45f244c..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/46d9d135.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/484d1dea.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/484d1dea.png
deleted file mode 100644
index 6958bf3..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/484d1dea.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/49104d78.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/49104d78.png
deleted file mode 100644
index 457895c..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/49104d78.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4994768a.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4994768a.png
deleted file mode 100644
index 14ba81f..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4994768a.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4a542b6d.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4a542b6d.png
deleted file mode 100644
index 1526932..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4a542b6d.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4b0a131f.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4b0a131f.png
deleted file mode 100644
index 18df5c8..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4b0a131f.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4b219dca.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4b219dca.png
deleted file mode 100644
index 206fb85..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4b219dca.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4c63d54b.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4c63d54b.png
deleted file mode 100644
index 209b3f1..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4c63d54b.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4cdd7012.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4cdd7012.png
deleted file mode 100644
index 66d191d..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4cdd7012.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4d43ec79.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4d43ec79.png
deleted file mode 100644
index d7c713d..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4d43ec79.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4e7a0982.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4e7a0982.png
deleted file mode 100644
index b4771f3..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4e7a0982.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4ee00e3c.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4ee00e3c.png
deleted file mode 100644
index dd642c1..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4ee00e3c.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4f61765f.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4f61765f.gif
deleted file mode 100644
index 3288d10..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/4f61765f.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/50cab11f.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/50cab11f.png
deleted file mode 100644
index 6f149ca..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/50cab11f.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5135da6d.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5135da6d.png
deleted file mode 100644
index 70295aa..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5135da6d.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/541d109a.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/541d109a.gif
deleted file mode 100644
index 0c7252d..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/541d109a.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5490d203.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5490d203.gif
deleted file mode 100644
index 2d3935a..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5490d203.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5525f68c.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5525f68c.png
deleted file mode 100644
index 7a928b3..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5525f68c.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5586d417.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5586d417.png
deleted file mode 100644
index 87a94ee..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5586d417.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/55afddf7.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/55afddf7.png
deleted file mode 100644
index ccd4958..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/55afddf7.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/56abe5a7.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/56abe5a7.png
deleted file mode 100644
index da355c6..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/56abe5a7.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/58d22720.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/58d22720.png
deleted file mode 100644
index d856c24..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/58d22720.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5ad536ed.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5ad536ed.png
deleted file mode 100644
index 43dea72..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5ad536ed.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5b8ba614.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5b8ba614.png
deleted file mode 100644
index c24ec6a..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5b8ba614.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5be1033a.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5be1033a.png
deleted file mode 100644
index 0d2ffc3..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5be1033a.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5c00d24b.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5c00d24b.png
deleted file mode 100644
index 70295aa..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5c00d24b.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5e607740.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5e607740.png
deleted file mode 100644
index c6918b2..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5e607740.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5fd49387.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5fd49387.png
deleted file mode 100644
index 79bb72e..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/5fd49387.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/60504cca.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/60504cca.png
deleted file mode 100644
index cf2c8b5..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/60504cca.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/619fc3dc.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/619fc3dc.png
deleted file mode 100644
index 2483edd..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/619fc3dc.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/627301a4.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/627301a4.png
deleted file mode 100644
index 70dcfe0..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/627301a4.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/63a3ac85.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/63a3ac85.png
deleted file mode 100644
index 99a8133..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/63a3ac85.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/65054866.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/65054866.png
deleted file mode 100644
index 7902212..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/65054866.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/669675bb.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/669675bb.png
deleted file mode 100644
index 2df60b3..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/669675bb.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/6753adb8.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/6753adb8.png
deleted file mode 100644
index 39161d2..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/6753adb8.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/679d075a.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/679d075a.png
deleted file mode 100644
index 716c5ce..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/679d075a.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/68188572.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/68188572.png
deleted file mode 100644
index 9418ee0..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/68188572.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/689d44d2.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/689d44d2.png
deleted file mode 100644
index f00fd90..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/689d44d2.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/68b89865.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/68b89865.png
deleted file mode 100644
index 6504816..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/68b89865.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/692c09fc.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/692c09fc.png
deleted file mode 100644
index ae5a824..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/692c09fc.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/697d1ede.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/697d1ede.png
deleted file mode 100644
index c2010f3..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/697d1ede.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/6a297860.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/6a297860.png
deleted file mode 100644
index ecafb19..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/6a297860.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/6a48ea6b.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/6a48ea6b.png
deleted file mode 100644
index d0b4147..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/6a48ea6b.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/6cbccb98.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/6cbccb98.png
deleted file mode 100644
index d38ffd6..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/6cbccb98.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/6edf2b8a.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/6edf2b8a.png
deleted file mode 100644
index c610f24..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/6edf2b8a.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/7a1d1d0e.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/7a1d1d0e.png
deleted file mode 100644
index 89a3734..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/7a1d1d0e.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/7b90a35a.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/7b90a35a.png
deleted file mode 100644
index cb29e97..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/7b90a35a.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/7c732bfb.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/7c732bfb.png
deleted file mode 100644
index 2b1a50b..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/7c732bfb.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/7c7acb13.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/7c7acb13.png
deleted file mode 100644
index 0e1e55e..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/7c7acb13.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/7c86072d.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/7c86072d.png
deleted file mode 100644
index e35989e..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/7c86072d.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/7d708cd9.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/7d708cd9.png
deleted file mode 100644
index da355c6..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/7d708cd9.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/801ec7f4.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/801ec7f4.png
deleted file mode 100644
index c24ec6a..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/801ec7f4.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/802659c.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/802659c.png
deleted file mode 100644
index ccd4958..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/802659c.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/80945361.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/80945361.png
deleted file mode 100644
index 098f13b..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/80945361.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/80b4cb50.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/80b4cb50.png
deleted file mode 100644
index 2ab8934..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/80b4cb50.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/820410.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/820410.png
deleted file mode 100644
index cb29e97..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/820410.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/82638d00.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/82638d00.png
deleted file mode 100644
index 13de98d..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/82638d00.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/827a3489.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/827a3489.png
deleted file mode 100644
index c610f24..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/827a3489.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/83e441e9.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/83e441e9.png
deleted file mode 100644
index cdf49e9..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/83e441e9.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/83e5081f.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/83e5081f.png
deleted file mode 100644
index dd642c1..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/83e5081f.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/84135394.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/84135394.png
deleted file mode 100644
index 9aec39b..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/84135394.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/85536675.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/85536675.png
deleted file mode 100644
index 18df5c8..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/85536675.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/89265bb2.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/89265bb2.png
deleted file mode 100644
index 9aec39b..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/89265bb2.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/893ea652.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/893ea652.png
deleted file mode 100644
index 1de7a6f..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/893ea652.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/89b0dad4.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/89b0dad4.png
deleted file mode 100644
index d56ba2c..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/89b0dad4.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/8a7aa6f4.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/8a7aa6f4.gif
deleted file mode 100644
index b6cfa37..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/8a7aa6f4.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/8dd42372.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/8dd42372.png
deleted file mode 100644
index 79bb72e..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/8dd42372.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/8e927efd.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/8e927efd.png
deleted file mode 100644
index 40ade1e..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/8e927efd.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/8fc99d60.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/8fc99d60.png
deleted file mode 100644
index a5e3976..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/8fc99d60.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/903dd6ca.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/903dd6ca.png
deleted file mode 100644
index 66bd083..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/903dd6ca.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/90e84629.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/90e84629.png
deleted file mode 100644
index 14c739d..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/90e84629.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/91f761d1.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/91f761d1.png
deleted file mode 100644
index 5e64ca0..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/91f761d1.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/92c0aead.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/92c0aead.png
deleted file mode 100644
index 098f13b..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/92c0aead.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/94a6048c.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/94a6048c.png
deleted file mode 100644
index 337b68b..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/94a6048c.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/951d388e.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/951d388e.png
deleted file mode 100644
index 1fe50da..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/951d388e.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/956fb108.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/956fb108.png
deleted file mode 100644
index 4022cea..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/956fb108.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/96610370.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/96610370.png
deleted file mode 100644
index 0ded08e..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/96610370.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/973e534e.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/973e534e.png
deleted file mode 100644
index cced7e5..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/973e534e.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/9753a8ea.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/9753a8ea.png
deleted file mode 100644
index e469e8e..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/9753a8ea.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/976f4c7b.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/976f4c7b.png
deleted file mode 100644
index 5737864..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/976f4c7b.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/994dccc6.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/994dccc6.png
deleted file mode 100644
index 70dcfe0..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/994dccc6.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/99f733cb.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/99f733cb.png
deleted file mode 100644
index 30d6177..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/99f733cb.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/9b0a9001.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/9b0a9001.png
deleted file mode 100644
index 611189d..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/9b0a9001.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/9b457764.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/9b457764.png
deleted file mode 100644
index 13c2008..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/9b457764.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/9db0efc.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/9db0efc.png
deleted file mode 100644
index 11a0066..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/9db0efc.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/9eddc0e7.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/9eddc0e7.png
deleted file mode 100644
index 13de98d..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/9eddc0e7.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/9f435c8c.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/9f435c8c.png
deleted file mode 100644
index d7c713d..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/9f435c8c.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a30b8da1.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a30b8da1.png
deleted file mode 100644
index dae97b1..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a30b8da1.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a351e552.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a351e552.png
deleted file mode 100644
index 6f149ca..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a351e552.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a36ad05a.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a36ad05a.png
deleted file mode 100644
index 4263a57..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a36ad05a.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a3cefa91.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a3cefa91.png
deleted file mode 100644
index 60dc1bb..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a3cefa91.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a53d4a3.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a53d4a3.png
deleted file mode 100644
index 3e35a38..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a53d4a3.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a58c3797.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a58c3797.png
deleted file mode 100644
index 42e5ef7..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a58c3797.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a5dd20b5.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a5dd20b5.png
deleted file mode 100644
index 1beb59a..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a5dd20b5.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a65fa588.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a65fa588.png
deleted file mode 100644
index 9aec39b..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a65fa588.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a7a20297.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a7a20297.png
deleted file mode 100644
index 315e47b..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a7a20297.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a98bc12c.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a98bc12c.gif
deleted file mode 100644
index fb7cd3c..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/a98bc12c.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/aa96e44e.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/aa96e44e.png
deleted file mode 100644
index 3c5bdd0..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/aa96e44e.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ad06bd9.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ad06bd9.png
deleted file mode 100644
index d270caa..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ad06bd9.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ae8b4acf.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ae8b4acf.png
deleted file mode 100644
index 098f13b..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ae8b4acf.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ae8c2849.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ae8c2849.png
deleted file mode 100644
index 8de7a88..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ae8c2849.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/afa52be2.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/afa52be2.png
deleted file mode 100644
index 7a66150..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/afa52be2.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/b107e71b.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/b107e71b.png
deleted file mode 100644
index cced7e5..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/b107e71b.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/b114ca5.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/b114ca5.png
deleted file mode 100644
index e35989e..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/b114ca5.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/b6f1bd73.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/b6f1bd73.png
deleted file mode 100644
index 26215d8..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/b6f1bd73.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/b6f71a3f.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/b6f71a3f.png
deleted file mode 100644
index 90ed0af..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/b6f71a3f.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ba1d7000.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ba1d7000.png
deleted file mode 100644
index 0d2ffc3..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ba1d7000.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/baf651b9.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/baf651b9.png
deleted file mode 100644
index 8c95572..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/baf651b9.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/bc32ef3d.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/bc32ef3d.png
deleted file mode 100644
index ee74198..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/bc32ef3d.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/bc44aa73.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/bc44aa73.png
deleted file mode 100644
index cced7e5..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/bc44aa73.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/bd03145b.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/bd03145b.png
deleted file mode 100644
index ae3242f..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/bd03145b.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/be30b3d3.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/be30b3d3.png
deleted file mode 100644
index 60d26fa..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/be30b3d3.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/be95e0e0.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/be95e0e0.png
deleted file mode 100644
index 2b1a50b..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/be95e0e0.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/bf448660.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/bf448660.png
deleted file mode 100644
index 3ecfc86..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/bf448660.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/bf671604.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/bf671604.png
deleted file mode 100644
index b82dc94..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/bf671604.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c00e5c5e.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c00e5c5e.png
deleted file mode 100644
index 3adb1b1..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c00e5c5e.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c1d64071.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c1d64071.png
deleted file mode 100644
index 2096d6f..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c1d64071.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c290fe4b.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c290fe4b.png
deleted file mode 100644
index 7dbbd7d..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c290fe4b.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c2ef0d9b.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c2ef0d9b.png
deleted file mode 100644
index 9852425..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c2ef0d9b.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c3df1af3.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c3df1af3.png
deleted file mode 100644
index f944975..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c3df1af3.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c47ac08b.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c47ac08b.png
deleted file mode 100644
index a83ed73..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c47ac08b.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c537732e.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c537732e.png
deleted file mode 100644
index 86bd2b7..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c537732e.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c782daa1.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c782daa1.png
deleted file mode 100644
index 39161d2..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c782daa1.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c87d4673.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c87d4673.png
deleted file mode 100644
index c89839d..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c87d4673.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c9297456.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c9297456.png
deleted file mode 100644
index c24ec6a..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c9297456.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c94fc8ad.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c94fc8ad.png
deleted file mode 100644
index a83ed73..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/c94fc8ad.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/cac8be21.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/cac8be21.png
deleted file mode 100644
index 4b667af..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/cac8be21.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/cc0e49ec.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/cc0e49ec.png
deleted file mode 100644
index b3277ee..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/cc0e49ec.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/cdaf2a02.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/cdaf2a02.png
deleted file mode 100644
index 849e968..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/cdaf2a02.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/cde2f9ef.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/cde2f9ef.png
deleted file mode 100644
index 13dd0fb..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/cde2f9ef.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ce10b6e1.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ce10b6e1.png
deleted file mode 100644
index 1958365..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ce10b6e1.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/cf31b060.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/cf31b060.png
deleted file mode 100644
index 5239d50..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/cf31b060.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d0d699cc.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d0d699cc.png
deleted file mode 100644
index c8198a9..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d0d699cc.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d140090f.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d140090f.png
deleted file mode 100644
index cced7e5..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d140090f.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d1516768.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d1516768.png
deleted file mode 100644
index da355c6..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d1516768.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d19cc93d.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d19cc93d.png
deleted file mode 100644
index 1dbef8c..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d19cc93d.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d1af3dc.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d1af3dc.png
deleted file mode 100644
index 3ecfc86..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d1af3dc.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d218be7e.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d218be7e.gif
deleted file mode 100644
index b6cfa37..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d218be7e.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d282b4e5.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d282b4e5.png
deleted file mode 100644
index cb29e97..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d282b4e5.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d2972433.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d2972433.png
deleted file mode 100644
index 6f149ca..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d2972433.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d3acc3a4.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d3acc3a4.png
deleted file mode 100644
index 5aef745..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d3acc3a4.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d40ddead.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d40ddead.png
deleted file mode 100644
index 1afb252..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d40ddead.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d5e845a0.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d5e845a0.png
deleted file mode 100644
index d38ffd6..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d5e845a0.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d6a28f76.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d6a28f76.png
deleted file mode 100644
index fa81453..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d6a28f76.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d7a9517.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d7a9517.png
deleted file mode 100644
index 5239d50..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d7a9517.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d807ea26.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d807ea26.png
deleted file mode 100644
index 13dd0fb..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d807ea26.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d886e9d6.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d886e9d6.png
deleted file mode 100644
index 457895c..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d886e9d6.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d98c3abb.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d98c3abb.png
deleted file mode 100644
index 1dcc8e5..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/d98c3abb.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/dadc0503.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/dadc0503.png
deleted file mode 100644
index 1de7a6f..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/dadc0503.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/dc7ace07.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/dc7ace07.png
deleted file mode 100644
index 57ec1ef..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/dc7ace07.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/dcbf5c35.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/dcbf5c35.png
deleted file mode 100644
index c7c0ad4..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/dcbf5c35.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/dd8098c.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/dd8098c.png
deleted file mode 100644
index 999625c..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/dd8098c.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/dd851a27.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/dd851a27.png
deleted file mode 100644
index b82dc94..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/dd851a27.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/de3d280e.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/de3d280e.png
deleted file mode 100644
index b6c3e37..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/de3d280e.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/dee8cc66.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/dee8cc66.png
deleted file mode 100644
index 90ed0af..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/dee8cc66.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/e09a4464.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/e09a4464.png
deleted file mode 100644
index 999625c..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/e09a4464.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/e2782041.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/e2782041.png
deleted file mode 100644
index 2ab8934..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/e2782041.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/e27d1512.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/e27d1512.png
deleted file mode 100644
index 06ec597..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/e27d1512.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/e7e44ccd.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/e7e44ccd.png
deleted file mode 100644
index 6280e35..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/e7e44ccd.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/eb8ac0f1.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/eb8ac0f1.gif
deleted file mode 100644
index fb7cd3c..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/eb8ac0f1.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ec38c861.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ec38c861.png
deleted file mode 100644
index 18538d0..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ec38c861.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/edb7d80a.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/edb7d80a.png
deleted file mode 100644
index 0b82cbb..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/edb7d80a.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ee7d83c5.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ee7d83c5.png
deleted file mode 100644
index bc1dd63..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ee7d83c5.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/eee56d43.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/eee56d43.png
deleted file mode 100644
index 7594bed..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/eee56d43.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ef158107.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ef158107.png
deleted file mode 100644
index 7a66150..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ef158107.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f38bdb4e.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f38bdb4e.png
deleted file mode 100644
index 06ec597..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f38bdb4e.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f4b75a7a.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f4b75a7a.png
deleted file mode 100644
index 0b9f3a5..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f4b75a7a.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f641cb59.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f641cb59.png
deleted file mode 100644
index 75bcb42..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f641cb59.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f80ab95c.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f80ab95c.png
deleted file mode 100644
index fa81453..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f80ab95c.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f8b1f12a.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f8b1f12a.png
deleted file mode 100644
index 2920ae5..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f8b1f12a.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f9b67789.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f9b67789.png
deleted file mode 100644
index 7e7d9f7..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f9b67789.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f9b9fbf2.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f9b9fbf2.png
deleted file mode 100644
index 2f460ed..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/f9b9fbf2.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fa5334b.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fa5334b.png
deleted file mode 100644
index 26215d8..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fa5334b.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/faa5e887.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/faa5e887.png
deleted file mode 100644
index 1afb252..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/faa5e887.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fb90316c.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fb90316c.png
deleted file mode 100644
index 3734835..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fb90316c.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fcb47c07.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fcb47c07.png
deleted file mode 100644
index 0ddf904..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fcb47c07.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fe40e850.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fe40e850.png
deleted file mode 100644
index 96642db..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fe40e850.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fe639e2a.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fe639e2a.png
deleted file mode 100644
index ad9dee6..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fe639e2a.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fe88b7d7.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fe88b7d7.png
deleted file mode 100644
index 0099e85..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fe88b7d7.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fea0bb8.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fea0bb8.png
deleted file mode 100644
index 39c03e8..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fea0bb8.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fea3fec0.png b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fea3fec0.png
deleted file mode 100644
index d83f349..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/fea3fec0.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ff030f0f.gif b/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ff030f0f.gif
deleted file mode 100644
index 767f285..0000000
--- a/tests/org.eclipse.draw2d.test/workspace/.metadata/.plugins/org.eclipse.rap.ui/context/rwt-resources/themes/images/ff030f0f.gif
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.gef.test/.gitignore b/tests/org.eclipse.gef.test/.gitignore
index 4dc0091..6063275 100644
--- a/tests/org.eclipse.gef.test/.gitignore
+++ b/tests/org.eclipse.gef.test/.gitignore
@@ -1,2 +1,3 @@
 /target
 /bin
+/workspace
diff --git a/tests/org.eclipse.gef.test/META-INF/MANIFEST.MF b/tests/org.eclipse.gef.test/META-INF/MANIFEST.MF
index a7fbe45..d90eb50 100644
--- a/tests/org.eclipse.gef.test/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.gef.test/META-INF/MANIFEST.MF
@@ -11,6 +11,6 @@
  org.eclipse.rap.draw2d;bundle-version="0.1.0",
  org.eclipse.rap.jface;bundle-version="2.1.1",
  org.eclipse.rap.ui.workbench;bundle-version="2.1.1",
- org.eclipse.rap.rwt.testfixture;bundle-version="[2.1.0,3.0.0)"
+ org.eclipse.rap.rwt.testfixture;bundle-version="[2.1.0,4.0.0)"
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
 
diff --git a/tests/org.eclipse.zest.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.zest.tests/META-INF/MANIFEST.MF
index 75c94a6..5ff46f4 100644
--- a/tests/org.eclipse.zest.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.zest.tests/META-INF/MANIFEST.MF
@@ -6,11 +6,11 @@
 Require-Bundle: org.eclipse.core.runtime,
  org.junit,
  org.eclipse.rap.zest.core;bundle-version="0.1.0",
- org.eclipse.rap.rwt;bundle-version="[2.1.0,3.0.0)",
+ org.eclipse.rap.rwt;bundle-version="[2.1.0,4.0.0)",
  org.eclipse.rap.zest.layouts;bundle-version="0.1.0",
- org.eclipse.rap.jface;bundle-version="[2.1.0,3.0.0)",
+ org.eclipse.rap.jface;bundle-version="[2.1.0,4.0.0)",
  org.eclipse.rap.draw2d.compatibility;bundle-version="0.1.0",
- org.eclipse.rap.rwt.testfixture;bundle-version="[2.1.0,3.0.0)"
+ org.eclipse.rap.rwt.testfixture;bundle-version="[2.1.0,4.0.0)"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.4