You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by je...@apache.org on 2012/04/04 10:55:13 UTC

svn commit: r1309292 [1/8] - in /chemistry/playground/chemistry-opencmis-javascript-relax: ./ src/ src/main/ src/main/webapp/ src/main/webapp/WEB-INF/ src/main/webapp/css/ src/main/webapp/css/eggplant/ src/main/webapp/css/eggplant/images/ src/main/weba...

Author: jens
Date: Wed Apr  4 08:55:11 2012
New Revision: 1309292

URL: http://svn.apache.org/viewvc?rev=1309292&view=rev
Log:
add a javascript sample application

Added:
    chemistry/playground/chemistry-opencmis-javascript-relax/
    chemistry/playground/chemistry-opencmis-javascript-relax/pom.xml
    chemistry/playground/chemistry-opencmis-javascript-relax/src/
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/WEB-INF/
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/WEB-INF/web.xml
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/cmislib.js
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_flat_0_aaaaaa_40x100.png   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_flat_0_eeeeee_40x100.png   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_flat_55_994d53_40x100.png   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_flat_55_fafafa_40x100.png   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_gloss-wave_30_3d3644_500x100.png   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_highlight-soft_100_dcd9de_1x100.png   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_highlight-soft_100_eae6ea_1x100.png   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_highlight-soft_25_30273a_1x100.png   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_highlight-soft_45_5f5964_1x100.png   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_454545_256x240.png   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_734d99_256x240.png   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_8d78a5_256x240.png   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_a8a3ae_256x240.png   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_ebccce_256x240.png   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_ffffff_256x240.png   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/jquery-ui-1.8.18.custom.css
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/mediaplayer-relax.css
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/filterbyalbum.html
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/filterbyartist.html
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/filterbytitle.html
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/first.png   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/last.png   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/musical-notes.jpg   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/next.png   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/prev.png   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/index-nativehtml5.html
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/index.html
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/jplayer/
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/jplayer.html
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/jplayer/Jplayer.swf   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/jplayer/add-on/
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/jplayer/add-on/jplayer.playlist.min.js
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/jplayer/add-on/jquery.jplayer.inspector.js
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/jplayer/jquery.jplayer.min.js
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/jplayer/playlist.min.js
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/jplayer/skin/
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/jplayer/skin/pink.flag/
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/jplayer/skin/pink.flag/jplayer.pink.flag.css
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/jplayer/skin/pink.flag/jplayer.pink.flag.jpg   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/jplayer/skin/pink.flag/jplayer.pink.flag.seeking.gif   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/jplayer/skin/pink.flag/jplayer.pink.flag.video.play.png   (with props)
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/js/
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/js/jquery-1.7.1.js
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/js/jquery-1.7.1.min.js
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/js/jquery-ui-1.8.18.custom.min.js
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/js/jquery.layout-1.3.0-rc30.4.js
    chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/playerpage.js
    chemistry/playground/chemistry-opencmis-javascript-relax/src/test/

Added: chemistry/playground/chemistry-opencmis-javascript-relax/pom.xml
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/pom.xml?rev=1309292&view=auto
==============================================================================
--- chemistry/playground/chemistry-opencmis-javascript-relax/pom.xml (added)
+++ chemistry/playground/chemistry-opencmis-javascript-relax/pom.xml Wed Apr  4 08:55:11 2012
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- Licensed under the Apache License, Version 2.0 (the "License"); you 
+	may not use this file except in compliance with the License. You may obtain 
+	a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless 
+	required by applicable law or agreed to in writing, software distributed 
+	under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES 
+	OR CONDITIONS OF ANY KIND, either express or implied. See the License for 
+	the specific language governing permissions and limitations under the License. -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.apache.chemistry.opencmis</groupId>
+		<artifactId>chemistry-opencmis</artifactId>
+		<version>0.7.0-SNAPSHOT</version>
+		<relativePath>../../pom.xml</relativePath>
+	</parent>
+
+	<artifactId>chemistry-opencmis-javascript-relax</artifactId>
+	<name>OpenCMIS Javacript Media Player</name>
+	<packaging>war</packaging>
+
+	<properties>
+		<parentBasedir>../../</parentBasedir>
+	</properties>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-war-plugin</artifactId>
+				<configuration>
+					<archive>
+						<manifestEntries>
+							<Bundle-Name>org.apache.chemistry.opencmis.client.player</Bundle-Name>
+							<Bundle-SymbolicName>org.apache.chemistry.opencmis.client.player</Bundle-SymbolicName>
+							<Bundle-Version>0.0.1</Bundle-Version>
+							<Import-Package></Import-Package>
+							<Bundle-Classpath>.</Bundle-Classpath>
+							<Web-ContextPath>player</Web-ContextPath>
+						</manifestEntries>
+					</archive>
+                </configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-eclipse-plugin</artifactId>
+				<version>2.9</version>
+				<configuration>
+					<wtpversion>2.0</wtpversion>
+					<wtpContextName>player</wtpContextName>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+	<dependencies>
+	</dependencies>
+
+</project>

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/WEB-INF/web.xml?rev=1309292&view=auto
==============================================================================
--- chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/WEB-INF/web.xml (added)
+++ chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/WEB-INF/web.xml Wed Apr  4 08:55:11 2012
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd"
+	version="2.5">
+</web-app>
\ No newline at end of file

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/cmislib.js
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/cmislib.js?rev=1309292&view=auto
==============================================================================
--- chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/cmislib.js (added)
+++ chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/cmislib.js Wed Apr  4 08:55:11 2012
@@ -0,0 +1,485 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance   
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+function trace(text) {
+    if (window.console && window.console.log) {  
+      window.console.log(text);  
+    }  
+}
+
+function OperationContext() {
+	
+    this.propertyFilter = "*";
+    this.maxItems = 25;
+    this.skipCount = 0;
+    this.includeAcls = false;
+    this.includeAllowableActions = false;
+    this.includePolicies = false;
+    this.includeRelationships = "none";
+    this.renditionFilter = null;
+    this.includePathSegments = false;
+    this.orderBy = null;
+    this.includePropertyDefinitions = true;
+    this.searchAllVersions = true;
+}
+
+
+function CmisSessionFactory (parameters) { 
+    var PARAM_URL = "url";
+    var PARAM_REPOSITORY_ID = "repositoryId";
+    var PARAM_JSONP = "jsonp";
+    var PARAM_USER = "user";
+    var PARAM_PWD = "password";
+    this.params = parameters;
+  
+    this.createSession = function() {
+        return new CmisSession(this.params[PARAM_URL], this.params[PARAM_REPOSITORY_ID], this.params[PARAM_JSONP],
+                this.params[PARAM_USER], this.params[PARAM_PWD]);
+    };
+        
+    this.getRepositories = function(cbFct, cbFctError) {
+        trace("getRepositories() for URL: " + this.params[PARAM_URL]);
+        doJson(this.params[PARAM_URL], null, "GET", this.params[PARAM_USER], this.params[PARAM_PWD], cbFct, function(jqXHR, textStatus, errorThrown) {
+            var errorMsg = "Failed to connect " + errorThrown + "(" + textStatus + ")";
+            trace(errorMsg);
+            if (cbFctError != undefined && cbFctError != null)
+                return cbFctError.call(this, errorMsg); 
+        });
+    };
+};
+
+function CmisError (httpCode, message, cmisException, stackTrace) { 
+    this.httpCode = httpCode;
+    this.message = message;
+    this.cmisException = cmisException;
+    this.stackTrace = stackTrace;
+    
+    trace(this.toString());    
+};
+
+CmisError.prototype.toString = function() {
+    return "Error in CMIS call! http-code: " + this.httpCode + ", CMIS Exception: " + this.cmisException +
+    ", message: " + this.message;
+};
+
+function TypeCache() {
+    this.types = {}; // a map from a type id to to a CMIS type definition
+    this.lastAccessed = {}; // a map from a type id to a time stamp when it was last use
+    this.maxSize = 10; // number of types to be cached
+    
+    this.reset = function () {
+        this.types = {};
+        this.lastAccessed = {};        
+    };
+    
+    this.getType = function (typeId) {
+        return this.types[typeId]; // type id or null
+    };
+    
+    this.addType = function (typeDef) {
+        this.removeOldestElements();
+        this.types[typeDef.id] = typeDef;
+        this.lastAccessed[typeDef.id] = new Date();
+        return this;
+    };
+    
+    this.isTypeInCache = function(typeId) {
+        return this.types.hasOwnProperty(typeId);
+    };
+    
+    this.removeOldestElements  = function () {
+        while (this.getSize() >= this.maxSize)
+            this.removeOldestElement();
+        return this;
+    };
+    
+    this.removeOldestElement  = function () {
+        var oldest = new Date();
+        var oldestKey = null;
+        // find oldest element
+        for (var key in this.lastAccessed) {
+            if (this.lastAccessed[key] < oldest) {
+                oldest = this.lastAccessed[key];
+                oldestKey = key;
+            }
+        }
+        // remove oldest key
+        delete this.types[oldestKey];
+        delete this.lastAccessed[oldestKey];
+    };
+    
+    this.getSize = function() {
+        var size = 0, key;
+        for (key in this.types) {
+            if (this.types.hasOwnProperty(key)) size++;
+        }
+        return size;
+    }
+};
+
+function PagingContext(skipCount, totalItems, opCtx) {
+    this.skipCount =  skipCount;
+    this.totalItems = totalItems;
+    this.opCtx = opCtx;
+
+    this.getTotalItems = function() {
+        return  this.totalItems==null || this.totalItems==0 ? 4294967295 : this.totalItems;
+    };
+    
+    this.getCurrentPage = function() {
+        return Math.floor(this.skipCount / this.opCtx.maxItems) + 1;
+    };
+    
+    this.getTotalPages = function() {
+        var totalPages;
+        if (this.totalItems==null || this.opCtx.maxItems==null || this.opCtx.maxItems==0)
+            totalPages = "(unknown)";
+        else
+            totalPages = ((this.totalItems - (this.totalItems % this.opCtx.maxItems)) / this.opCtx.maxItems) + 1;
+        return totalPages;
+    };
+    
+    this.setPreviousPage = function() {
+        this.skipCount = this.skipCount - this.opCtx.maxItems;
+        if (this.skipCount < 0)
+            this.skipCount = 0;
+    }
+    
+    this.setNextPage = function() {
+        this.skipCount = this.skipCount + this.opCtx.maxItems;
+        if (this.skipCount >= this.totalItems)
+            this.skipCount = this.totalItems - this.opCtx.maxItems;
+    }
+    
+    this.setFirstPage = function() {
+        this.skipCount = 0;
+    }
+
+    this.setLastPage = function() {
+        if (this.totalItems==null)
+            return;
+        var totalPages = this.getTotalPages() - 1;
+        this.skipCount = totalPages * this.opCtx.maxItems;
+    }
+}
+
+function CmisSession(urlPrefix, repositoryId, jsonp, user, password) {
+    this.repId = repositoryId;;
+    this.urlPrefix = urlPrefix; // "/inmemory/browser/" + repId
+    this.rootUrl = null;
+    this.opCtx = new OperationContext();
+    this.rootFolderId; // just use a place to store the id, must be filled by user of a CmisSession
+    this.typeCache = new TypeCache();    
+    this.pagingContext = {};
+    this.jsonp = jsonp;
+    this.user = user;
+    this.password = password;
+    
+    
+	this.getUrl = function() {
+		return this.urlPrefix + "/" + this.repId;
+	};
+	
+    this.getRootUrl = function() {
+        return this.rootUrl;
+    };
+    
+    this.setRootUrl = function(url) {
+        this.rootUrl = url;
+    };
+
+    this.createErrorFromErrorResponse = function(jsonObj) {
+      return new CmisError(0, jsonObj.message, jsonObj.exception,
+              jsonObj.stacktrace);
+    };
+
+    this.addPagingContext = function (elementId, skipCount, numItemsTotal) {        
+        this.pagingContext[elementId] = new PagingContext(skipCount, numItemsTotal, this.opCtx);
+    };
+    
+    this.getPagingContext = function (elementId) {
+        return this.pagingContext[elementId];
+    };
+    
+    this.setPagingContextOffset = function (elementId, offset) {
+        var pgCtx = this.pagingContext[elementId];
+        if (pgCtx == undefined || pgCtx == null)
+            return false;
+        else {
+            this.pagingContext[elementId].skipCount = offset;
+            return true;
+        }
+    };
+    
+    this.getPagingContextOffset = function (elementId) {
+        var pgCtx = this.pagingContext[elementId];
+        if (pgCtx == undefined || pgCtx == null)
+            return 0;
+        else 
+            return this.pagingContext[elementId].skipCount;
+    };
+
+    this.deletePagingContext = function (elementId) {
+        this.pagingContext[elementId] = null;
+    };
+
+    this.getRepositoryInfo = function(cbFct) {
+        var url = this.getUrl();
+        var data = {
+                cmisSelector: "repositoryInfo"
+            };
+
+        trace("getRepositoryInfo(): " + url);
+        this.doJsonGet(url, data, cbFct);
+    };
+
+    this.getDocument = function(id, cbFct) {
+        var url = this.getRootUrl();
+        var data = {
+            objectId: id,
+            cmisSelector: "object",
+            filter: this.opCtx.filter,
+            includeAllowableActions: this.opCtx.includeAllowableActions,
+            includeRelationships: this.opCtx.includeRelationships,
+            includePolicyIds: this.opCtx.includePolicies,
+            includeACL: this.opCtx.includeAcls,
+            suppressResponseCodes: true
+        };
+
+        trace("getDocument(): " + url);
+        this.doJsonGet(url, data, cbFct);
+    };
+
+    this.getChildren = function(id, cbFct) {
+        var url = this.getRootUrl();
+        var data = {
+            objectId: id,
+            cmisSelector: "children",
+            filter: this.opCtx.filter,
+            includeAllowableActions: this.opCtx.includeAllowableActions,
+            includeRelationships: this.opCtx.includeRelationships,
+            includePolicyIds: this.opCtx.includePolicies,
+            includeACL: this.opCtx.includeAcls,
+            includePathSegment: this.opCtx.includePathSegments,
+            skipCount: this.opCtx.skipCount,
+            maxItems: this.opCtx.maxItems,
+            suppressResponseCodes: true
+        };
+
+        trace("getDocument(): " + url);
+        this.doJsonGet(url, data, cbFct);
+    };
+
+    this.deleteDocument = function(objectId, cbFct) {
+        var url = this.getRootUrl();
+
+        var properties = {
+                cmisaction: "delete",
+                objectId: objectId,
+                suppressResponseCodes: true
+        };
+        
+        trace("deleteDocument(): " + url);
+        this.doJsonPost(url, properties, cbFct);
+    };
+    
+    this.createDocument = function(name, typeId, folderId, customProperties, cbFct) {
+        trace("createDocument(), name: " + name + ", typeId: " + typeId + ", folderId: " + folderId);
+        return this.create(name, typeId, folderId, customProperties, "createDocument", cbFct);
+    };
+    
+    this.createFolder = function(name, typeId, folderId, customProperties, cbFct) {
+        trace("createFolder(), name: " + name + ", typeId: " + typeId + ", folderId: " + folderId);
+        return this.create(name, typeId, folderId, customProperties, "createFolder", cbFct);
+    };
+
+    this.create = function(name, typeId, folderId, customProperties, cmisAction, cbFct) {
+        var url = this.getRootUrl();
+
+        var properties = {
+                cmisaction: cmisAction,
+                objectId: folderId,
+                "propertyId[0]": "cmis:name",
+                "propertyValue[0]": name,
+                "propertyId[1]": "cmis:objectTypeId",
+                "propertyValue[1]": typeId,
+                suppressResponseCodes: true
+        };
+        
+        // add custom properties
+        if (null != customProperties) {
+            var i=1;
+            for (var customProp in customProperties) {
+                properties["propertyId[++i]"] = customProp;
+                properties["propertyValue[i]"] = customProperties[customProp];
+            }
+            }
+        
+        this.doJsonPost(url, properties, cbFct);
+    };
+        
+    this.getTypeDefinition = function(typeId, cbFct) {
+        var url = this.getUrl();
+        var data = {
+            typeId: typeId,
+            cmisselector: "typeDefinition",
+            includePropertyDefinitions: this.opCtx.includePropertyDefinitions,
+            suppressResponseCodes: true
+        };
+
+        trace("getTypeDefinition() " + url);
+        // try cache first:
+        var cache = this.typeCache;
+        var cachedTypeDef = this.typeCache.getType(typeId);
+        if (null == cachedTypeDef) { // not found in cache get it from server
+            this.doJsonGet(url, data, function(type) {
+                cache.addType(type); // add found type to the cache
+                return cbFct.call(this, type);
+            });
+        } else {
+            // call callback function with cached type
+            return cbFct.call(this, cachedTypeDef);            
+        }
+    };
+    
+    this.getTypeChildren = function(typeIdent, cbFct) {
+        var url = this.getUrl();
+        var data = {
+            typeId: typeIdent,
+            cmisselector: "typeChildren",
+            includePropertyDefinitions: this.opCtx.includePropertyDefinitions,
+            skipCount: this.opCtx.skipCount,
+            suppressResponseCodes: true
+        };
+
+        trace("getTypeDefinition() " + url);
+        this.doJsonGet(url, data, cbFct);        
+    };
+    
+    this.doQuery = function(queryString, cbFct) {
+        var url = this.getUrl();
+        var properties = {
+            q: queryString,
+            cmisaction: "query",
+            maxItems: this.opCtx.maxItems,
+            searchAllVersions: this.opCtx.searchAllVersions,
+            includeAllowableAction: this.opCtx.searchAllVersions,
+            includeRelationships: this.opCtx.includeRelationships,
+            skipCount: this.opCtx.skipCount,
+            suppressResponseCodes: true
+        };
+
+        trace("doQuery() " + url);
+        this.doJsonPost(url, properties, cbFct);
+    };
+    
+    this.doQueryPaged = function(queryString, elementId, cbFct) {
+        trace("doQueryPaged()");
+        var url = this.getUrl();
+        var pgCtx = this.getPagingContext(elementId);
+        var skipCount = this.getPagingContextOffset(elementId);
+        if (null == skipCount)
+            skipCount = 0;
+        var properties = {
+            q: queryString,
+            cmisaction: "query",
+            maxItems: this.opCtx.maxItems,
+            searchAllVersions: this.opCtx.searchAllVersions,
+            includeAllowableAction: this.opCtx.searchAllVersions,
+            includeRelationships: this.opCtx.includeRelationships,
+            skipCount: skipCount,
+            suppressResponseCodes: true
+        };
+
+        trace("doQuery() " + url);
+        this.doJsonPost(url, properties, function (data) {
+            if (null == pgCtx) 
+                session.addPagingContext(elementId, 0, data.numItems)
+            else
+                pgCtx.totalItems = data.numItems;
+            return cbFct.call(this, data);    
+            }      
+        );
+    };
+    
+    
+    this.getObjectFromTransaction = function (transId, cbFct) {
+        var url = this.getUrl();
+        var data = {
+            cmisselector: "lastResult",
+            cmistransaction: transId,
+            suppressResponseCodes: true
+        };
+
+        trace("getObjectFromTransaction(): " + url  + ", transaction-id: " + transId);
+        this.doJsonGet(url, data, cbFct);
+    };
+    
+    this.doJsonPost = function(url, params, cbFct) {
+        doJson(url, params, "POST", this.user, this.password, cbFct);
+    };
+    
+    this.doJsonGet = function(url, params, cbFct) {
+        doJson(url, params, "GET", this.user, this.password, cbFct);
+	};
+	
+};
+
+CmisSession.defaultErrorHandler = function (event, jqXHR, settings, excep) {
+    var cmisError;
+    
+    if (null == jqXHR || null == jqXHR.responseText)
+        cmisError = CmisError(null == jqXHR ? 0 : jqXHR.status, "Unknown error", "Unknown CMIS exception",
+            "<no stacktrace available>");
+    else {
+        try {
+            var cmisErr = jQuery.parseJSON(jqXHR.responseText);
+            if (null == cmisErr)
+                cmisError = CmisError(jqXHR.status, "Unknown error, unparsable response", "Unknown CMIS exception",
+                    "<no stacktrace available>");
+            else
+                cmisError =  new CmisError(jqXHR.status, cmisErr.message, cmisErr.exception,
+                        cmisErr.stacktrace);
+        } catch (exc) {
+            trace("Failed to parse Error as JSON: " + jqXHR.responseText);
+            cmisError = jqXHR.responseText;
+        }
+    }
+    
+    return cmisError;
+};
+
+function doJson(url, params, method, username, password, cbFct, cbFctError) {
+    
+    if (username != null && username.length == 0)
+        username=null;
+    
+    if (password != null && password.length == 0)
+        password=null;
+
+    $.ajax( { 
+        url: url,
+        data: params,
+        dataType: (this.jsonp ? "jsonp" : "json"),
+        type:  method,
+        username: username,
+        password: password,
+        success: cbFct,
+        error: cbFctError == undefined ? null : cbFctError
+    });
+};

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_flat_0_aaaaaa_40x100.png
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_flat_0_aaaaaa_40x100.png?rev=1309292&view=auto
==============================================================================
Binary file - no diff available.

Propchange: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_flat_0_aaaaaa_40x100.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_flat_0_eeeeee_40x100.png
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_flat_0_eeeeee_40x100.png?rev=1309292&view=auto
==============================================================================
Binary file - no diff available.

Propchange: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_flat_0_eeeeee_40x100.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_flat_55_994d53_40x100.png
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_flat_55_994d53_40x100.png?rev=1309292&view=auto
==============================================================================
Binary file - no diff available.

Propchange: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_flat_55_994d53_40x100.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_flat_55_fafafa_40x100.png
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_flat_55_fafafa_40x100.png?rev=1309292&view=auto
==============================================================================
Binary file - no diff available.

Propchange: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_flat_55_fafafa_40x100.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_gloss-wave_30_3d3644_500x100.png
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_gloss-wave_30_3d3644_500x100.png?rev=1309292&view=auto
==============================================================================
Binary file - no diff available.

Propchange: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_gloss-wave_30_3d3644_500x100.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_highlight-soft_100_dcd9de_1x100.png
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_highlight-soft_100_dcd9de_1x100.png?rev=1309292&view=auto
==============================================================================
Binary file - no diff available.

Propchange: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_highlight-soft_100_dcd9de_1x100.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_highlight-soft_100_eae6ea_1x100.png
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_highlight-soft_100_eae6ea_1x100.png?rev=1309292&view=auto
==============================================================================
Binary file - no diff available.

Propchange: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_highlight-soft_100_eae6ea_1x100.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_highlight-soft_25_30273a_1x100.png
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_highlight-soft_25_30273a_1x100.png?rev=1309292&view=auto
==============================================================================
Binary file - no diff available.

Propchange: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_highlight-soft_25_30273a_1x100.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_highlight-soft_45_5f5964_1x100.png
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_highlight-soft_45_5f5964_1x100.png?rev=1309292&view=auto
==============================================================================
Binary file - no diff available.

Propchange: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-bg_highlight-soft_45_5f5964_1x100.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_454545_256x240.png
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_454545_256x240.png?rev=1309292&view=auto
==============================================================================
Binary file - no diff available.

Propchange: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_454545_256x240.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_734d99_256x240.png
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_734d99_256x240.png?rev=1309292&view=auto
==============================================================================
Binary file - no diff available.

Propchange: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_734d99_256x240.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_8d78a5_256x240.png
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_8d78a5_256x240.png?rev=1309292&view=auto
==============================================================================
Binary file - no diff available.

Propchange: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_8d78a5_256x240.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_a8a3ae_256x240.png
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_a8a3ae_256x240.png?rev=1309292&view=auto
==============================================================================
Binary file - no diff available.

Propchange: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_a8a3ae_256x240.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_ebccce_256x240.png
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_ebccce_256x240.png?rev=1309292&view=auto
==============================================================================
Binary file - no diff available.

Propchange: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_ebccce_256x240.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_ffffff_256x240.png
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_ffffff_256x240.png?rev=1309292&view=auto
==============================================================================
Binary file - no diff available.

Propchange: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/images/ui-icons_ffffff_256x240.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/jquery-ui-1.8.18.custom.css
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/jquery-ui-1.8.18.custom.css?rev=1309292&view=auto
==============================================================================
--- chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/jquery-ui-1.8.18.custom.css (added)
+++ chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/eggplant/jquery-ui-1.8.18.custom.css Wed Apr  4 08:55:11 2012
@@ -0,0 +1,610 @@
+/*
+ * jQuery UI CSS Framework 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
+.ui-helper-clearfix:after { clear: both; }
+.ui-helper-clearfix { zoom: 1; }
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+/*
+ * jQuery UI CSS Framework 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande,%20Lucida%20Sans,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=30273a&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=25&borderColorHeader=231d2b&fcHeader=ffffff&iconColorHeader=a8a3ae&bgColorContent=3d3644&bgTextureContent=12_gloss_wave.png&bgImgOpacityContent=30&borderColorContent=7e7783&fcContent=ffffff&iconColorContent=ffffff&bgColorDefault=dcd9de&bgTextureDefault=03_highlight_soft.png&bgImgOpacityDefault=100&borderColorDefault=dcd9de&fcDefault=665874&iconColorDefault=8d78a5&bgColorHover=eae6ea&bgTextureHover=03_highlight_soft.png&bgImgOpacityHover=100&borderColorHover=d1c5d8&fcHover=734d99&iconColorHover=734d99&bgColorActive=5f5964&bgTextureActive=03_highlight_soft.png&bgImgOpacityActive=45&borderColorActive=7e7783&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=fafafa&bgTextureHighlight=01_flat.png&bgImgOpacityHighli
 ght=55&borderColorHighlight=ffdb1f&fcHighlight=333333&iconColorHighlight=8d78a5&bgColorError=994d53&bgTextureError=01_flat.png&bgImgOpacityError=55&borderColorError=994d53&fcError=ffffff&iconColorError=ebccce&bgColorOverlay=eeeeee&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0px
+ */
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Verdana, Arial, sans-serif;  font-size: 0.8em; } /* {font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 0.8em; }*/
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button {font-family: Verdana, Arial, sans-serif;  font-size: 1em; } /*{ font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1em; }*/
+.ui-widget-content { border: 1px solid #7e7783; background: #3d3644 url(images/ui-bg_gloss-wave_30_3d3644_500x100.png) 50% top repeat-x; color: #ffffff; }
+.ui-widget-content a { color: #ffffff; }
+.ui-widget-header { border: 1px solid #231d2b; background: #30273a url(images/ui-bg_highlight-soft_25_30273a_1x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
+.ui-widget-header a { color: #ffffff; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #dcd9de; background: #dcd9de url(images/ui-bg_highlight-soft_100_dcd9de_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #665874; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #665874; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #d1c5d8; background: #eae6ea url(images/ui-bg_highlight-soft_100_eae6ea_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #734d99; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #734d99; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #7e7783; background: #5f5964 url(images/ui-bg_highlight-soft_45_5f5964_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #ffdb1f; background: #fafafa url(images/ui-bg_flat_55_fafafa_40x100.png) 50% 50% repeat-x; color: #333333; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #333333; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #994d53; background: #994d53 url(images/ui-bg_flat_55_994d53_40x100.png) 50% 50% repeat-x; color: #ffffff; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_ffffff_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_a8a3ae_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_8d78a5_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_734d99_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_8d78a5_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ebccce_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -khtml-border-top-left-radius: 6px; border-top-left-radius: 6px; }
+.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; -khtml-border-top-right-radius: 6px; border-top-right-radius: 6px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; -khtml-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; -khtml-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #eeeeee url(images/ui-bg_flat_0_eeeeee_40x100.png) 50% 50% repeat-x; opacity: .80;filter:Alpha(Opacity=80); }
+.ui-widget-shadow { margin: -4px 0 0 -4px; padding: 4px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .60;filter:Alpha(Opacity=60); -moz-border-radius: 0px; -khtml-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; }/*
+ * jQuery UI Resizable 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizable#theming
+ */
+.ui-resizable { position: relative; }
+
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
+ * jQuery UI Selectable 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectable#theming
+ */
+.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
+/*
+ * jQuery UI Accordion 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Accordion#theming
+ */
+/* IE/Win - Fix animation bug - #4615 */
+.ui-accordion { width: 100%; }
+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+.ui-accordion .ui-accordion-li-fix { display: inline; }
+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+.ui-accordion .ui-accordion-header a { display: block; font-size: .8em; padding: .5em .5em .5em .7em; }
+.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
+.ui-accordion .ui-accordion-content-active { display: block; }
+/*
+ * jQuery UI Autocomplete 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete#theming
+ */
+.ui-autocomplete { position: absolute; cursor: default; }	
+
+/* workarounds */
+* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
+
+/*
+ * jQuery UI Menu 1.8.18
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Menu#theming
+ */
+.ui-menu {
+	list-style:none;
+	padding: 2px;
+	margin: 0;
+	display:block;
+	float: left;
+}
+.ui-menu .ui-menu {
+	margin-top: -3px;
+}
+.ui-menu .ui-menu-item {
+	margin:0;
+	padding: 0;
+	zoom: 1;
+	float: left;
+	clear: left;
+	width: 100%;
+}
+.ui-menu .ui-menu-item a {
+	text-decoration:none;
+	display:block;
+	padding:.2em .4em;
+	line-height:1.5;
+	zoom:1;
+}
+.ui-menu .ui-menu-item a.ui-state-hover,
+.ui-menu .ui-menu-item a.ui-state-active {
+	font-weight: normal;
+	margin: -1px;
+}
+/*
+ * jQuery UI Button 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Button#theming
+ */
+.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: hidden; *overflow: visible; } /* the overflow property removes extra width in IE */
+.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
+button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
+.ui-button-icons-only { width: 3.4em; } 
+button.ui-button-icons-only { width: 3.7em; } 
+
+/*button text element */
+.ui-button .ui-button-text { display: block; line-height: 1.4;  }
+.ui-button-text-only .ui-button-text { padding: .4em 1em; }
+.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
+.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
+.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
+.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+/* no icon support for input elements, provide padding by default */
+input.ui-button { padding: .4em 1em; }
+
+/*button icon element(s) */
+.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
+.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
+.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
+.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+
+/*button sets*/
+.ui-buttonset { margin-right: 7px; }
+.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+
+/* workarounds */
+button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
+/*
+ * jQuery UI Dialog 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog#theming
+ */
+.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
+.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative;  }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } 
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
+.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
+/*
+ * jQuery UI Slider 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider#theming
+ */
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
+ * jQuery UI Tabs 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs#theming
+ */
+.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
+.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
+/*
+ * jQuery UI Datepicker 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker#theming
+ */
+.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month, 
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+    display: none; /*sorry for IE5*/
+    display/**/: block; /*sorry for IE5*/
+    position: absolute; /*must have*/
+    z-index: -1; /*must have*/
+    filter: mask(); /*must have*/
+    top: -4px; /*must have*/
+    left: -4px; /*must have*/
+    width: 200px; /*must have*/
+    height: 200px; /*must have*/
+}/*
+ * jQuery UI Progressbar 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar#theming
+ */
+.ui-progressbar { height:2em; text-align: left; overflow: hidden; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
+
+
+.ui-layout-resizer	{ /* all 'resizer-bars' */
+	background:		#7f7f7f;
+	border:			1px solid #BBB;
+	border-width:	0;
+	}
+.ui-layout-resizer-drag {		/* REAL resizer while resize in progress */
+}
+.ui-layout-resizer-hover	{	/* affects both open and closed states */
+}
+/* NOTE: It looks best when 'hover' and 'dragging' are set to the same color,
+	otherwise color shifts while dragging when bar can't keep up with mouse */
+.ui-layout-resizer-open-hover ,	/* hover-color to 'resize' */
+.ui-layout-resizer-dragging {	/* resizer beging 'dragging' */
+	background: #C4E1A4;
+}
+.ui-layout-resizer-dragging {	/* CLONED resizer being dragged */
+	border: 	 1px solid #BBB;
+}
+/* NOTE: Add a 'dragging-limit' color to provide visual feedback when resizer hits min/max size limits */
+.ui-layout-resizer-dragging-limit {	/* CLONED resizer at min or max size-limit */
+	background: #E1A4A4; /* red */
+}
+
+.ui-layout-resizer-closed-hover	{ /* hover-color to 'slide open' */
+	background: #EBD5AA;
+}
+.ui-layout-resizer-sliding {	/* resizer when pane is 'slid open' */
+	opacity: .10; /* show only a slight shadow */
+	filter:  alpha(opacity=10);
+	}
+	.ui-layout-resizer-sliding-hover {	/* sliding resizer - hover */
+		opacity: 1.00; /* on-hover, show the resizer-bar normally */
+		filter:  alpha(opacity=100);
+	}
+	/* sliding resizer - add 'outside-border' to resizer on-hover 
+	 * this sample illustrates how to target specific panes and states */
+	.ui-layout-resizer-north-sliding-hover	{ border-bottom-width:	1px; }
+	.ui-layout-resizer-south-sliding-hover	{ border-top-width:		1px; }
+	.ui-layout-resizer-west-sliding-hover	{ border-right-width:	1px; }
+	.ui-layout-resizer-east-sliding-hover	{ border-left-width:	1px; }
+	
+	
\ No newline at end of file

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/mediaplayer-relax.css
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/mediaplayer-relax.css?rev=1309292&view=auto
==============================================================================
--- chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/mediaplayer-relax.css (added)
+++ chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/css/mediaplayer-relax.css Wed Apr  4 08:55:11 2012
@@ -0,0 +1,12 @@
+@CHARSET "UTF-8";
+
+.artist {
+	font-size:.8em;
+	color:#8C7A99;
+	vertical-align: middle;
+}
+
+.resultlist {
+	list-style-type: none;
+	list-style-position:inside;	
+}
\ No newline at end of file

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/filterbyalbum.html
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/filterbyalbum.html?rev=1309292&view=auto
==============================================================================
--- chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/filterbyalbum.html (added)
+++ chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/filterbyalbum.html Wed Apr  4 08:55:11 2012
@@ -0,0 +1,37 @@
+<p>
+	<h4>Retrieve albums starting with:</h4>
+	<a href="javascript:filterByAlbum('A')">A</a>
+	<a href="javascript:filterByAlbum('B')">B</a>
+	<a href="javascript:filterByAlbum('C')">C</a>
+	<a href="javascript:filterByAlbum('D')">D</a>
+	<a href="javascript:filterByAlbum('E')">E</a>
+	<a href="javascript:filterByAlbum('F')">F</a>
+	<a href="javascript:filterByAlbum('G')">G</a>
+	<a href="javascript:filterByAlbum('H')">H</a>
+	<a href="javascript:filterByAlbum('I')">I</a>
+	<a href="javascript:filterByAlbum('J')">J</a>
+	<a href="javascript:filterByAlbum('K')">K</a>
+	<a href="javascript:filterByAlbum('L')">L</a>
+	<a href="javascript:filterByAlbum('M')">M</a>
+	<a href="javascript:filterByAlbum('N')">N</a>
+	<a href="javascript:filterByAlbum('O')">O</a>
+	<a href="javascript:filterByAlbum('P')">P</a>
+	<a href="javascript:filterByAlbum('Q')">Q</a>
+	<a href="javascript:filterByAlbum('R')">R</a>
+	<a href="javascript:filterByAlbum('S')">S</a>
+	<a href="javascript:filterByAlbum('T')">T</a>
+	<a href="javascript:filterByAlbum('U')">U</a>
+	<a href="javascript:filterByAlbum('V')">V</a>
+	<a href="javascript:filterByAlbum('W')">W</a>
+	<a href="javascript:filterByAlbum('X')">X</a>
+	<a href="javascript:filterByAlbum('Y')">Y</a>
+	<a href="javascript:filterByAlbum('Z')">Z</a>
+	<a href="javascript:filterByAlbum()">(all)</a>
+</p>
+<div id="filterresult">
+  <h4>Found Albums:</h4>
+  <ul id="filterresultlist" class="resultlist">
+  </ul>
+  <div id="pagingbuttons"> </div>  
+</div>
+

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/filterbyartist.html
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/filterbyartist.html?rev=1309292&view=auto
==============================================================================
--- chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/filterbyartist.html (added)
+++ chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/filterbyartist.html Wed Apr  4 08:55:11 2012
@@ -0,0 +1,37 @@
+<p>
+	<h4>Retrieve albums by artists starting with:</h4>
+	<a href="javascript:filterByArtist('A')">A</a>
+	<a href="javascript:filterByArtist('B')">B</a>
+	<a href="javascript:filterByArtist('C')">C</a>
+	<a href="javascript:filterByArtist('D')">D</a>
+	<a href="javascript:filterByArtist('E')">E</a>
+	<a href="javascript:filterByArtist('F')">F</a>
+	<a href="javascript:filterByArtist('G')">G</a>
+	<a href="javascript:filterByArtist('H')">H</a>
+	<a href="javascript:filterByArtist('I')">I</a>
+	<a href="javascript:filterByArtist('J')">J</a>
+	<a href="javascript:filterByArtist('K')">K</a>
+	<a href="javascript:filterByArtist('L')">L</a>
+	<a href="javascript:filterByArtist('M')">M</a>
+	<a href="javascript:filterByArtist('N')">N</a>
+	<a href="javascript:filterByArtist('O')">O</a>
+	<a href="javascript:filterByArtist('P')">P</a>
+	<a href="javascript:filterByArtist('Q')">Q</a>
+	<a href="javascript:filterByArtist('R')">R</a>
+	<a href="javascript:filterByArtist('S')">S</a>
+	<a href="javascript:filterByArtist('T')">T</a>
+	<a href="javascript:filterByArtist('U')">U</a>
+	<a href="javascript:filterByArtist('V')">V</a>
+	<a href="javascript:filterByArtist('W')">W</a>
+	<a href="javascript:filterByArtist('X')">X</a>
+	<a href="javascript:filterByArtist('Y')">Y</a>
+	<a href="javascript:filterByArtist('Z')">Z</a>
+	<a href="javascript:filterByArtist()">(all)</a>
+</p>
+<div id="filterresult">
+  <h4>Found Artist:</h4>
+  <ul id="filterresultlist" class="resultlist">
+  </ul>
+  <div id="pagingbuttons"> </div>  
+</div>
+

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/filterbytitle.html
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/filterbytitle.html?rev=1309292&view=auto
==============================================================================
--- chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/filterbytitle.html (added)
+++ chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/filterbytitle.html Wed Apr  4 08:55:11 2012
@@ -0,0 +1,38 @@
+<p>
+	<h4>Retrieve titles starting with:</h4>
+	<a href="javascript:filterByTitle('A')">A</a>
+	<a href="javascript:filterByTitle('B')">B</a>
+	<a href="javascript:filterByTitle('C')">C</a>
+	<a href="javascript:filterByTitle('D')">D</a>
+	<a href="javascript:filterByTitle('E')">E</a>
+	<a href="javascript:filterByTitle('F')">F</a>
+	<a href="javascript:filterByTitle('G')">G</a>
+	<a href="javascript:filterByTitle('H')">H</a>
+	<a href="javascript:filterByTitle('I')">I</a>
+	<a href="javascript:filterByTitle('J')">J</a>
+	<a href="javascript:filterByTitle('K')">K</a>
+	<a href="javascript:filterByTitle('L')">L</a>
+	<a href="javascript:filterByTitle('M')">M</a>
+	<a href="javascript:filterByTitle('N')">N</a>
+	<a href="javascript:filterByTitle('O')">O</a>
+	<a href="javascript:filterByTitle('P')">P</a>
+	<a href="javascript:filterByTitle('Q')">Q</a>
+	<a href="javascript:filterByTitle('R')">R</a>
+	<a href="javascript:filterByTitle('S')">S</a>
+	<a href="javascript:filterByTitle('T')">T</a>
+	<a href="javascript:filterByTitle('U')">U</a>
+	<a href="javascript:filterByTitle('V')">V</a>
+	<a href="javascript:filterByTitle('W')">W</a>
+	<a href="javascript:filterByTitle('X')">X</a>
+	<a href="javascript:filterByTitle('Y')">Y</a>
+	<a href="javascript:filterByTitle('Z')">Z</a>
+	<a href="javascript:filterByTitle()">(all)</a>
+</p>
+<div id="filterresult">
+  <h4>Found Titles:</h4>
+  <ul id="filterresultlist" class="resultlist">
+  </ul>
+  <div id="pagingbuttons"> </div>
+  <div id="playerpane"> </div>    
+</div>
+

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/first.png
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/first.png?rev=1309292&view=auto
==============================================================================
Binary file - no diff available.

Propchange: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/first.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/last.png
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/last.png?rev=1309292&view=auto
==============================================================================
Binary file - no diff available.

Propchange: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/last.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/musical-notes.jpg
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/musical-notes.jpg?rev=1309292&view=auto
==============================================================================
Binary file - no diff available.

Propchange: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/musical-notes.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/next.png
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/next.png?rev=1309292&view=auto
==============================================================================
Binary file - no diff available.

Propchange: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/next.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/prev.png
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/prev.png?rev=1309292&view=auto
==============================================================================
Binary file - no diff available.

Propchange: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/images/prev.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/index-nativehtml5.html
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/index-nativehtml5.html?rev=1309292&view=auto
==============================================================================
--- chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/index-nativehtml5.html (added)
+++ chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/index-nativehtml5.html Wed Apr  4 08:55:11 2012
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<!--  DOCTYPE tag MUST be on the first line otherwise IE uses quirks mode! -->
+<!-- 
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<head>
+    <title>CMIS Media Player</title>
+    <!-- Enable the following to get debugging information: 
+    <link rel="stylesheet" href="theme/style.css" type="text/css" media="screen" />
+    <script type="text/javascript" src="jquery-1.7.1.js"></script>
+    <script type="text/javascript" src="projekktor-1.0.07r22.min.js"></script> 
+     -->
+    <script type="text/javascript" src="jquery-1.7.1.js"></script>
+</head>
+<body>
+    
+    <script type="text/javascript" src="cmislib.js"></script>
+    <script type="text/javascript" src="playerpage.js"></script>
+    <!-- Enable the following to get debugging information: 
+    <script type="text/javascript" src="https://getfirebug.com/firebug-lite.js"></script>
+     -->
+    <div id="errorsection"> </div>
+    <h3>CMIS in Javascript</h3>
+    <form >
+	    <table>
+	      <tr>
+	        <td><label for="reposfield">URL:</label></td>
+	        <td><input type="text" id="reposfield" value="/inmemory/browser"/></td>
+	      </tr>
+	      <tr>
+	        <td><label for="userfield">User:</label></td>
+	        <td><input type="text" id="userfield" value="jsuser"/></td>
+	      </tr>
+	      <tr>
+	        <td><label for="pwdfield">Password:</label></td>
+	        <td><input type="password" id="pwdfield" value="pass"/></td>
+	      </tr>
+	      <tr>
+	        <td></td>
+	        <td><input type="checkbox" id="jsonpfield" name="jsonp" checked="checked" value="jsonp"/>JSON-P</td>
+	      </tr>
+	    </table>
+	</form>
+    <button id="repositories">Connect!</button> <br/>
+    
+    <div id="repositoriessection">
+    </div>
+    <form >
+	    <table>
+	      <tr>
+	        <td><label for="repoidfield">Using Repository-Id:</label></td>
+	        <td><input type="text" id="repoidfield" value="?" readonly="readonly"/></td>
+	      </tr>
+	    </table>
+	</form>
+
+    <hr/>    
+    <form >
+	    <table>
+	      <tr>
+	        <td><label for="docidfield">Doc-Id:</label></td>
+	        <td><input type="text" id="docidfield" value="133"/></td>
+	      </tr>
+	    </table>
+	</form>    
+    <button id="getbutton">Get Document!</button>  <br/>
+    <button id="playbutton">Play!</button>  <br/>
+    <div id="documentsection">
+    </div>
+<!-- 
+    <video id="player_1" poster="poster.jpg" title="CMIS Video" width="640" height="385" controls>
+        <source src="adrian.mp4" type="video/mp4"> </source>
+    </video>
+  		<source src="http://localhost:8080/inmemory/browser/A1/root?objectId=136&cmisselector=content" />
+-->
+    <video controls="controls" autoplay="autoplay">
+  		<source src="http://localhost:8080/inmemory/browser/A1/root?objectId=136&cmisselector=content" />
+  		Video not playing? <a href="adrian.mp4">Download file</a> instead.
+	</video>
+
+    <div id="viewer">
+    </div>
+  </body>
+</html>