changeset 536:e758a49258e8 digilibPDF

Merge with 9936604d466e3c44d8a2609519848f33f2801629 (changes to HEAD)
author casties
date Wed, 25 Aug 2010 18:29:08 +0200
parents 87cb3dc2aa12 (current diff) 9936604d466e (diff)
children bd1080df81ad
files CVSROOT/checkoutlist CVSROOT/commitinfo CVSROOT/config CVSROOT/cvswrappers CVSROOT/editinfo CVSROOT/loginfo CVSROOT/modules CVSROOT/notify CVSROOT/rcsinfo CVSROOT/taginfo CVSROOT/verifymsg client/digitallibrary/WEB-INF/digilib-config.xml client/digitallibrary/WEB-INF/web.xml servlet/src/digilib/Utils.java servlet/src/digilib/auth/AuthOps.java servlet/src/digilib/auth/AuthOpsImpl.java servlet/src/digilib/auth/DBAuthOpsImpl.java servlet/src/digilib/auth/HashTree.java servlet/src/digilib/auth/XMLAuthOps.java servlet/src/digilib/auth/dlDataModule.java servlet/src/digilib/image/DocuImage.java servlet/src/digilib/image/DocuImageImpl.java servlet/src/digilib/image/ImageLoaderDocuImage.java servlet/src/digilib/image/JAIDocuImage.java servlet/src/digilib/image/JAIImageLoaderDocuImage.java servlet/src/digilib/image/JIMIDocuImage.java servlet/src/digilib/io/AliasingDocuDirCache.java servlet/src/digilib/io/DocuDirCache.java servlet/src/digilib/io/DocuDirectory.java servlet/src/digilib/io/DocuDirent.java servlet/src/digilib/io/FileOps.java servlet/src/digilib/io/ImageFileset.java servlet/src/digilib/io/XMLListLoader.java servlet/src/digilib/io/XMLMetaLoader.java servlet/src/digilib/servlet/DigilibConfiguration.java servlet/src/digilib/servlet/DigilibImageWorker.java servlet/src/digilib/servlet/DigilibRequest.java servlet/src/digilib/servlet/DigilibWorker.java servlet/src/digilib/servlet/DocumentBean.java servlet/src/digilib/servlet/Initialiser.java servlet/src/digilib/servlet/Parameter.java servlet/src/digilib/servlet/ParameterMap.java servlet/src/digilib/servlet/Scaler.java
diffstat 274 files changed, 19072 insertions(+), 821 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgtags	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,9 @@
+07bb7d594477a2d2291b0730d7ce56847a4f7b54 Root_gen2
+1b2f8a9762ab308f930fbdfb1ab3791e19e4a047 ver_1_6
+39ee473b4711047d304271a8ed1efb6647a020e9 MAIN
+5d0c0da080ecfef3149cf92c5ab1ae7c30dbe797 scaleable_1
+72604a10ee1a7d94d678aa99dd429db60dac1fb6 Root_jquery
+85126da2ae2113b60adc42a70bb6002b47071c11 start
+87d2ed21bdec2253e10d53f00b8f507af335b7a0 Root_digilibPDF
+a336f89a9fbf0a79f964d9750b56d4e6f83bb4c8 release_1_2
+e1c10653f14311e6d048df4daf10e921d6631caf Root_gen2_1
--- a/CVSROOT/checkoutlist	Fri Apr 09 18:22:05 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-# The "checkoutlist" file is used to support additional version controlled
-# administrative files in $CVSROOT/CVSROOT, such as template files.
-#
-# The first entry on a line is a filename which will be checked out from
-# the corresponding RCS file in the $CVSROOT/CVSROOT directory.
-# The remainder of the line is an error message to use if the file cannot
-# be checked out.
-#
-# File format:
-#
-#	[<whitespace>]<filename><whitespace><error message><end-of-line>
-#
-# comment lines begin with '#'
--- a/CVSROOT/commitinfo	Fri Apr 09 18:22:05 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-# The "commitinfo" file is used to control pre-commit checks.
-# The filter on the right is invoked with the repository and a list 
-# of files to check.  A non-zero exit of the filter program will 
-# cause the commit to be aborted.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being committed to, relative
-# to the $CVSROOT.  For the first match that is found, then the remainder
-# of the line is the name of the filter to run.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".
--- a/CVSROOT/config	Fri Apr 09 18:22:05 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-# Set this to "no" if pserver shouldn't check system users/passwords
-#SystemAuth=no
-
-# Put CVS lock files in this directory rather than directly in the repository.
-#LockDir=/var/lock/cvs
-
-# Set `TopLevelAdmin' to `yes' to create a CVS directory at the top
-# level of the new working directory when using the `cvs checkout'
-# command.
-#TopLevelAdmin=no
-
-# Set `LogHistory' to `all' or `TOFEWGCMAR' to log all transactions to the
-# history file, or a subset as needed (ie `TMAR' logs all write operations)
-#LogHistory=TOFEWGCMAR
--- a/CVSROOT/cvswrappers	Fri Apr 09 18:22:05 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-# This file affects handling of files based on their names.
-#
-# The -t/-f options allow one to treat directories of files
-# as a single file, or to transform a file in other ways on
-# its way in and out of CVS.
-#
-# The -m option specifies whether CVS attempts to merge files.
-#
-# The -k option specifies keyword expansion (e.g. -kb for binary).
-#
-# Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers)
-#
-#  wildcard	[option value][option value]...
-#
-#  where option is one of
-#  -f		from cvs filter		value: path to filter
-#  -t		to cvs filter		value: path to filter
-#  -m		update methodology	value: MERGE or COPY
-#  -k		expansion mode		value: b, o, kkv, &c
-#
-#  and value is a single-quote delimited value.
-# For example:
-#*.gif -k 'b'
--- a/CVSROOT/editinfo	Fri Apr 09 18:22:05 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-# The "editinfo" file is used to allow verification of logging
-# information.  It works best when a template (as specified in the
-# rcsinfo file) is provided for the logging procedure.  Given a
-# template with locations for, a bug-id number, a list of people who
-# reviewed the code before it can be checked in, and an external
-# process to catalog the differences that were code reviewed, the
-# following test can be applied to the code:
-#
-#   Making sure that the entered bug-id number is correct.
-#   Validating that the code that was reviewed is indeed the code being
-#       checked in (using the bug-id number or a seperate review
-#       number to identify this particular code set.).
-#
-# If any of the above test failed, then the commit would be aborted.
-#
-# Actions such as mailing a copy of the report to each reviewer are
-# better handled by an entry in the loginfo file.
-#
-# One thing that should be noted is the the ALL keyword is not
-# supported.  There can be only one entry that matches a given
-# repository.
--- a/CVSROOT/loginfo	Fri Apr 09 18:22:05 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-# The "loginfo" file controls where "cvs commit" log information
-# is sent.  The first entry on a line is a regular expression which must match
-# the directory that the change is being made to, relative to the
-# $CVSROOT.  If a match is found, then the remainder of the line is a filter
-# program that should expect log information on its standard input.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name ALL appears as a regular expression it is always used
-# in addition to the first matching regex or DEFAULT.
-#
-# You may specify a format string as part of the
-# filter.  The string is composed of a `%' followed
-# by a single format character, or followed by a set of format
-# characters surrounded by `{' and `}' as separators.  The format
-# characters are:
-#
-#   s = file name
-#   V = old version number (pre-checkin)
-#   v = new version number (post-checkin)
-#
-# For example:
-#DEFAULT (echo ""; id; echo %s; date; cat) >> $CVSROOT/CVSROOT/commitlog
-# or
-#DEFAULT (echo ""; id; echo %{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog
--- a/CVSROOT/modules	Fri Apr 09 18:22:05 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-# Three different line formats are valid:
-#	key	-a    aliases...
-#	key [options] directory
-#	key [options] directory files...
-#
-# Where "options" are composed of:
-#	-i prog		Run "prog" on "cvs commit" from top-level of module.
-#	-o prog		Run "prog" on "cvs checkout" of module.
-#	-e prog		Run "prog" on "cvs export" of module.
-#	-t prog		Run "prog" on "cvs rtag" of module.
-#	-u prog		Run "prog" on "cvs update" of module.
-#	-d dir		Place module in directory "dir" instead of module name.
-#	-l		Top-level directory only -- do not recurse.
-#
-# NOTE:  If you change any of the "Run" options above, you'll have to
-# release and re-checkout any working directories of these modules.
-#
-# And "directory" is a path to a directory relative to $CVSROOT.
-#
-# The "-a" option specifies an alias.  An alias is interpreted as if
-# everything on the right of the "-a" had been typed on the command line.
-#
-# You can encode a module within a module by using the special '&'
-# character to interpose another module into the current module.  This
-# can be useful for creating a module that consists of many directories
-# spread out over the entire source repository.
--- a/CVSROOT/notify	Fri Apr 09 18:22:05 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-# The "notify" file controls where notifications from watches set by
-# "cvs watch add" or "cvs edit" are sent.  The first entry on a line is
-# a regular expression which is tested against the directory that the
-# change is being made to, relative to the $CVSROOT.  If it matches,
-# then the remainder of the line is a filter program that should contain
-# one occurrence of %s for the user to notify, and information on its
-# standard input.
-#
-# "ALL" or "DEFAULT" can be used in place of the regular expression.
-#
-# For example:
-#ALL mail %s -s "CVS notification"
--- a/CVSROOT/rcsinfo	Fri Apr 09 18:22:05 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-# The "rcsinfo" file is used to control templates with which the editor
-# is invoked on commit and import.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being made to, relative to the
-# $CVSROOT.  For the first match that is found, then the remainder of the
-# line is the name of the file that contains the template.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".
--- a/CVSROOT/taginfo	Fri Apr 09 18:22:05 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-# The "taginfo" file is used to control pre-tag checks.
-# The filter on the right is invoked with the following arguments:
-#
-# $1 -- tagname
-# $2 -- operation "add" for tag, "mov" for tag -F, and "del" for tag -d
-# $3 -- repository
-# $4->  file revision [file revision ...]
-#
-# A non-zero exit of the filter program will cause the tag to be aborted.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being committed to, relative
-# to the $CVSROOT.  For the first match that is found, then the remainder
-# of the line is the name of the filter to run.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".
--- a/CVSROOT/verifymsg	Fri Apr 09 18:22:05 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-# The "verifymsg" file is used to allow verification of logging
-# information.  It works best when a template (as specified in the
-# rcsinfo file) is provided for the logging procedure.  Given a
-# template with locations for, a bug-id number, a list of people who
-# reviewed the code before it can be checked in, and an external
-# process to catalog the differences that were code reviewed, the
-# following test can be applied to the code:
-#
-#   Making sure that the entered bug-id number is correct.
-#   Validating that the code that was reviewed is indeed the code being
-#       checked in (using the bug-id number or a seperate review
-#       number to identify this particular code set.).
-#
-# If any of the above test failed, then the commit would be aborted.
-#
-# Actions such as mailing a copy of the report to each reviewer are
-# better handled by an entry in the loginfo file.
-#
-# One thing that should be noted is the the ALL keyword is not
-# supported.  There can be only one entry that matches a given
-# repository.
Binary file client/digitallibrary/WEB-INF/classes/Relato.class has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/WEB-INF/classes/Relato.java	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,74 @@
+import java.io.*;
+import java.net.*;
+import java.util.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import javax.xml.transform.*;
+import javax.xml.transform.dom.*;
+import javax.xml.transform.stream.*;
+import org.apache.xerces.parsers.DOMParser;
+import org.apache.xpath.*;
+import org.w3c.dom.*;
+
+public class Relato extends HttpServlet {
+  
+	public final static String FS = System.getProperty("file.separator"); 
+
+	// Respond to HTTP GET requests from browsers.
+	public void doGet (HttpServletRequest request, HttpServletResponse response)
+                       throws ServletException, IOException {
+
+		Hashtable params = new Hashtable();
+		Enumeration enum = request.getParameterNames();
+		while (enum.hasMoreElements()) {
+			String pName = (String) enum.nextElement();
+			params.put(pName, request.getParameter(pName));
+
+		}
+		// Set content type for HTML.
+		response.setContentType("text/html; charset=UTF-8");    
+		// Output goes to the response PrintWriter.
+		PrintWriter out = response.getWriter();
+		DOMParser parser = new DOMParser();
+
+		try {	
+			TransformerFactory tFactory = TransformerFactory.newInstance();
+			//get the real path for xml and xsl files.
+			String ctx = getServletContext().getRealPath("") + FS;        
+
+			parser.parse(ctx + (String) params.get("xml"));
+			Document document = parser.getDocument();
+			
+			Element topFrameset = (Element) XPathAPI.selectSingleNode(document, "/relato/frames/frameset");
+			topFrameset.setAttribute("onload", "init();");
+			
+			NodeList nodelist = XPathAPI.selectNodeList(document, "//frameset/frame");
+			for (int i = 0; i < nodelist.getLength(); i++) {
+				Element elem = (Element)nodelist.item(i);
+				String name = elem.getAttribute("name");
+				if (name != "") {
+					if (params.containsKey(name)) {
+						String src  = (String) params.get(name);
+						elem.setAttribute("src", src);
+					}
+				}
+			}
+
+			Source xmlSource = new DOMSource (document);
+			Source xslSource = new StreamSource (new URL("file", "", ctx+"relato/relato.xsl").openStream());
+			// Generate the transformer.
+			Transformer transformer = tFactory.newTransformer(xslSource);
+			// Perform the transformation, sending the output to the response.
+			transformer.transform(xmlSource, new StreamResult(out));
+    	}
+
+		// If an Exception occurs, return the error to the client.
+		catch (Exception e) {
+			out.write(e.getMessage());
+			e.printStackTrace(out);    
+		}
+
+		// Close the PrintWriter.
+		out.close();
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/WEB-INF/classes/info.txt	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,4 @@
+# hier zusaetzliche klassen zum kompilieren, diese muessen im laufenden
+# tomcat system in WEB-INF/lib sein.
+
+export CLASSPATH=$CLASSPATH:/opt/javalibs/xerces/xercesImpl.jar:/opt/javalibs/xerces/xml-apis.jar:/opt/javalibs/xalan/bin/xalan.jar:/opt/tomcat/common/lib/servlet-api.jar
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/WEB-INF/digilib-auth.xml	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Authentication configuration file for Digital Document Library -->
+<auth-config>
+
+  <digilib-paths>
+    <!-- 
+      A user must supply one of the roles under "role"
+      to access the directory "name".
+      Roles under "role" must be separated by comma only (no spaces).  
+    -->
+    <path name="histast/eastwood-collection" role="eastwood-coll" />
+    <path name="ptolemaios_geo" role="ptolemaios-geo" />
+  </digilib-paths>
+
+  <digilib-addresses>
+    <!-- 
+      A computer with an ip address that matches "ip"
+      is automatically granted all roles under "role".
+      The ip address is matched from the left (in full quads).
+      Roles under "role" must be separated by comma only (no spaces). 
+    -->
+    <address ip="127" role="local" />
+    <address ip="130.92.68" role="eastwood-coll,ptolemaios-geo" />
+    <address ip="130.92.151" role="ALL" />
+  </digilib-addresses>
+
+</auth-config>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/WEB-INF/digilib-map.xml	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- mapping of "virtual" and real directories on digilib server -->
+<digilib-aliases>
+  <mapping link="exp1/archimedes/hutto_dicti_1625" dir="lib2/china/QiQi/Vol1"/>
+  <mapping link="exp1/archimedes/kopernicus" dir="pro1/sundries/kop2"/>
+</digilib-aliases>
\ No newline at end of file
Binary file client/digitallibrary/WEB-INF/lib/DigilibServlet.jar has changed
Binary file client/digitallibrary/WEB-INF/lib/imageinfo.jar has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/WEB-INF/log4j-config.xml	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+        
+  <appender name="cons" class="org.apache.log4j.ConsoleAppender">
+    <layout class="org.apache.log4j.PatternLayout">
+      <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>
+    </layout>
+  </appender>
+
+  <appender name="log" class="org.apache.log4j.FileAppender">
+    <param name="File" value="digilib-log.txt"/>
+    <param name="Append" value="true"/>
+    <layout class="org.apache.log4j.PatternLayout">
+      <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>
+    </layout>
+  </appender>
+
+  <appender name="account" class="org.apache.log4j.FileAppender">
+    <param name="File" value="dl-access-log.txt"/>
+    <param name="Append" value="true"/>
+    <layout class="org.apache.log4j.PatternLayout">
+      <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>
+    </layout>
+  </appender>
+
+  <logger name="account.request">
+    <level value ="debug"/>
+    <appender-ref ref="account"/>
+  </logger>  
+
+  <root>
+    <level value ="debug"/>
+    <appender-ref ref="cons"/>
+    <appender-ref ref="log"/>
+  </root>
+
+</log4j:configuration>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/baselib.js	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,638 @@
+/* Copyright (C) 2003,2004 IT-Group MPIWG, WTWG Uni Bern and others
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+ 
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+ 
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
+ 
+Authors: 
+  Christian Luginbuehl, 01.05.2003 (first version)
+  DW 24.03.2004 (Changed for digiLib in Zope)
+  Robert Casties, 22.1.2008
+
+*/
+
+function base_init() {
+    // init function
+    baseScriptVersion = "1.2.4";
+    dlParams = new Object();
+    browserType = getBrowserType();
+}
+
+
+function getInt(n) {
+    // returns always an integer
+    n = parseInt(n);
+    if (isNaN(n)) return 0;
+    return n;
+}
+
+function defined(x) {
+    // returns if x is defined
+    return (typeof arguments[0] != "undefined");
+}
+
+function cropFloat(x) {
+    // auxiliary function to crop senseless precision
+    return parseInt(10000*x)/10000;
+}
+
+function getBrowserType() {
+    // browser sniffer
+    var bt = Object();
+    bt.doDHTML = false;
+    bt.versIE = 0;
+
+    if ((! document.cssonly && document.layers) || document.all || document.getElementById) {
+        var vers = navigator.appVersion.split('MSIE ');
+        vers = vers[vers.length - 1];
+        bt.versIE = getInt(vers);
+        bt.isIE = navigator.userAgent.indexOf('MSIE') >= 0;
+        bt.isMac = navigator.platform.indexOf('Mac') >= 0;
+        bt.isWin = navigator.platform.indexOf('Win') >= 0;
+        bt.isN4 = (navigator.userAgent.indexOf('Mozilla/4.') >= 0) && ! bt.isIE;
+        bt.isIEWin = bt.versIE > 0 && bt.isWin;
+        if (navigator.appVersion.indexOf('MSIE') < 0 || ! bt.isMac || bt.versIE >= 5) {
+            bt.doDHTML = true;
+            bt.isOpera = navigator.userAgent.indexOf(' Opera ') >= 0;
+            bt.isKonq = navigator.userAgent.indexOf(' Konqueror') >= 0;
+        }
+    }
+    return bt;
+}
+
+// fixes for javascript < 1.2
+if (! Array.prototype.push) {
+    Array.prototype.push = function(val) {
+        this[this.length] = val;
+        return this.length;
+    }
+    Array.prototype.pop = function() {
+        var val = this[this.length-1];
+        this.length -= 1;
+        return val;
+    }
+}
+
+
+/* **********************************************
+ *     geometry classes
+ * ******************************************** */
+
+/*
+ * Size class
+ */
+function Size(w, h) {
+    this.width = parseFloat(w);
+    this.height = parseFloat(h);
+    return this;
+}
+Size.prototype.toString = function() {
+    return this.width + "x" + this.height;
+}
+
+
+/*
+ * Position class
+ */
+function Position(x, y) {
+    this.x = parseFloat(x);
+    this.y = parseFloat(y);
+    return this;
+}
+Position.prototype.toString = function() {
+    return this.x + "," + this.y;
+}
+
+/*
+ * Rectangle class
+ */
+function Rectangle(x, y, w, h) {
+    this.x = parseFloat(x);
+    this.y = parseFloat(y);
+    this.width = parseFloat(w);
+    this.height = parseFloat(h);
+    return this;
+}
+Rectangle.prototype.toString = function() {
+    return this.width+"x"+this.height+"@"+this.x+","+this.y;
+}
+Rectangle.prototype.copy = function() {
+    // returns a copy of this Rectangle
+    return new Rectangle(this.x, this.y, this.width, this.height);
+}
+Rectangle.prototype.getPosition = function() {
+    // returns the position of this Rectangle
+    return new Position(this.x, this.y);
+}
+Rectangle.prototype.getSize = function() {
+    // returns the size of this Rectangle
+    return new Size(this.width, this.height);
+}
+Rectangle.prototype.getArea = function() {
+    // returns the area of this Rectangle
+    return (this.width * this.height);
+}
+Rectangle.prototype.containsPosition = function(pos) {
+    // returns if the given Position lies in this Rectangle
+    return ((pos.x >= this.x)&&(pos.y >= this.y)&&(pos.x <= this.x+this.width)&&(pos.y <= this.y+this.width));
+}
+Rectangle.prototype.intersect = function(rect) {
+    // returns the intersection of the given Rectangle and this one
+    var sec = rect.copy();
+    if (sec.x < this.x) {
+        sec.width = sec.width - (this.x - sec.x);
+        sec.x = this.x;
+    }
+    if (sec.y < this.y) {
+        sec.height = sec.height - (this.y - sec.y);
+        sec.y = this.y;
+    }
+    if (sec.x + sec.width > this.x + this.width) {
+        sec.width = (this.x + this.width) - sec.x;
+    }
+    if (sec.y + sec.height > this.y + this.height) {
+        sec.height = (this.y + this.height) - sec.y;
+    }
+    return sec;
+}
+Rectangle.prototype.fit = function(rect) {
+    // returns a Rectangle that fits into this one (by moving first)
+    var sec = rect.copy();
+    sec.x = Math.max(sec.x, this.x);
+    sec.x = Math.max(sec.x, this.x);
+    if (sec.x + sec.width > this.x + this.width) {
+        sec.x = this.x + this.width - sec.width;
+    }
+    if (sec.y + sec.height > this.y + this.height) {
+        sec.y = this.y + this.height - sec.height;
+    }
+    return sec.intersect(this);
+}
+
+/*
+ * Transform class
+ *
+ * defines a class of affine transformations
+ */
+function Transform() {
+    this.m00 = 1.0;
+    this.m01 = 0.0;
+    this.m02 = 0.0;
+    this.m10 = 0.0;
+    this.m11 = 1.0;
+    this.m12 = 0.0;
+    this.m20 = 0.0;
+    this.m21 = 0.0;
+    this.m22 = 1.0;
+    return this;
+}
+Transform.prototype.concat = function(traf) {
+    // add Transform traf to this Transform
+    for (var i = 0; i < 3; i++) {
+        for (var j = 0; j < 3; j++) {
+            var c = 0.0;
+            for (var k = 0; k < 3; k++) {
+                c += traf["m"+i+k] * this["m"+k+j];
+            }
+            this["m"+i+j] = c;
+        }
+    }
+    return this;
+}
+Transform.prototype.transform = function(rect) {
+    // returns transformed Rectangle or Position with this Transform applied
+    var x = this.m00 * rect.x + this.m01 * rect.y + this.m02;
+    var y = this.m10 * rect.x + this.m11 * rect.y + this.m12;
+    if (rect.width) {
+        var width = this.m00 * rect.width + this.m01 * rect.height;
+        var height = this.m10 * rect.width + this.m11 * rect.height;
+        return new Rectangle(x, y, width, height);
+    }
+    return new Position(x, y);
+}
+Transform.prototype.invtransform = function(pos) {
+    // returns transformed Position pos with the inverse of this Transform applied
+    var det = this.m00 * this.m11 - this.m01 * this.m10;
+    var x = (this.m11 * pos.x - this.m01 * pos.y - this.m11 * this.m02 + this.m01 * this.m12) / det;
+    var y = (- this.m10 * pos.x + this.m00 * pos.y + this.m10 * this.m02 - this.m00 * this.m12) / det;
+    return new Position(x, y);
+}
+function getRotation(angle, pos) {
+    // returns a Transform that is a rotation by angle degrees around [pos.x, pos.y]
+    var traf = new Transform();
+    if (angle != 0) {
+        var t = 2.0 * Math.PI * parseFloat(angle) / 360.0;
+        traf.m00 = Math.cos(t);
+        traf.m01 = - Math.sin(t);
+        traf.m10 = Math.sin(t);
+        traf.m11 = Math.cos(t);
+        traf.m02 = pos.x - pos.x * Math.cos(t) + pos.y * Math.sin(t);
+        traf.m12 = pos.y - pos.x * Math.sin(t) - pos.y * Math.cos(t);
+    }
+    return traf;
+}
+function getTranslation(pos) {
+    // returns a Transform that is a translation by [pos.x, pos,y]
+    var traf = new Transform();
+    traf.m02 = pos.x;
+    traf.m12 = pos.y;
+    return traf;
+}
+function getScale(size) {
+    // returns a Transform that is a scale by [size.width, size.height]
+    var traf = new Transform();
+    traf.m00 = size.width;
+    traf.m11 = size.height;
+    return traf;
+}
+
+
+/* **********************************************
+ *     parameter routines
+ * ******************************************** */
+
+function newParameter(name, defaultValue, detail) {
+    // create a new parameter with a name and a default value
+    if (defined(dlParams[name])) {
+        alert("Fatal: An object with name '" + name + "' already exists - cannot recreate!");
+        return false;
+    } else {
+        dlParams[name] = new Object();
+        dlParams[name].defaultValue = defaultValue;
+        dlParams[name].hasValue = false;
+        dlParams[name].value = defaultValue;
+        dlParams[name].detail = detail;
+        return dlParams[name];
+    }
+}
+
+function getParameter(name) {
+    // returns the named parameter value or its default value
+    if (defined(dlParams[name])) {
+        if (dlParams[name].hasValue) {
+            return dlParams[name].value;
+        } else {
+            return dlParams[name].defaultValue;
+        }
+    } else {
+        return null;
+    }
+}
+
+function setParameter(name, value, relative) {
+    // sets parameter value (relative values with +/- unless literal)
+    if (defined(dlParams[name])) {
+    	if ((relative)&&(value.slice)) {
+	    	var sign = value.slice(0,1);
+			if (sign == '+') {
+				dlParams[name].value = parseFloat(dlParams[name].value) + parseFloat(value.slice(1));
+			} else if (sign == '-') {
+				dlParams[name].value = parseFloat(dlParams[name].value) - parseFloat(value.slice(1));
+			} else {
+	        	dlParams[name].value = value;
+	        }
+	    } else {
+	        dlParams[name].value = value;
+	    }
+        dlParams[name].hasValue = true;
+        return true;
+    }
+    return false;
+}
+
+function hasParameter(name) {
+    // returns if the parameter's value has been set
+    if (defined(dlParams[name])) {
+        return dlParams[name].hasValue;
+    }
+    return false;
+}
+
+function getAllParameters(detail) {
+    // returns a string of all parameters in query format
+    if (! detail) {
+        detail = 255;
+    }
+    var params = new Array();
+    for (param in dlParams) {
+        if (((dlParams[param].detail & detail) > 0)&&(dlParams[param].hasValue)) {
+            var val = getParameter(param);
+            if (val != "") {
+                params.push(param + "=" + val);
+            }
+        }
+    }
+    return params.join("&");
+}
+
+function parseParameters(query) {
+    // gets parameter values from query format string
+    var params = query.split("&");
+    for (var i = 0; i < params.length; i++) {
+        var keyval = params[i].split("=");
+        if (keyval.length == 2) {
+            setParameter(keyval[0], keyval[1]);
+        }
+    }
+}
+
+
+/* **********************************************
+ *     HTML/DOM routines
+ * ******************************************** */
+
+function getElement(tagid, quiet) {
+    // returns the element object with the id tagid
+    var e;
+    if (document.getElementById) {
+        e = document.getElementById(tagid);
+    } else if (document.all) {
+        alert("document.all!");
+        e = document.all[tagid];
+    } else if (document.layers) {
+        e = document.layers[tagid];
+    } 
+    if (e) {
+        return e;
+    } else {
+        if (! quiet) {
+            alert("unable to find element: "+tagid);
+        }
+        return null;
+    }
+}
+
+function getElementPosition(elem) {
+    // returns a Position with the position of the element
+    var x = 0;
+    var y = 0;
+    if (defined(elem.offsetParent)) {
+        // use .offsetLeft for most browsers
+        var e = elem;
+        while (e) {
+            if (browserType.isIE) {
+                if (browserType.isMac) {
+                    // IE for Mac extraspecial
+                    if (e.offsetParent.tagName == "BODY") {
+                        x += e.clientLeft;
+                        y += e.clientTop;
+                        break;
+                    }
+                } else {
+                    // special for IE
+                    if ((e.tagName != "TABLE") && (e.tagName != "BODY")) {
+                        x += e.clientLeft;
+                        y += e.clientTop;
+                    }
+                }
+            }
+            x += e.offsetLeft;
+            y += e.offsetTop;
+            e = e.offsetParent;
+        }
+    } else if (defined(elem.x)) {
+        // use .x for other (which?)
+        x = elem.x;
+        y = elem.y;
+    } else if (defined(elem.pageX)) {
+        // use pageX for N4
+        x = elem.pageX;
+        y = elem.pageY;
+    } else {
+        alert("unable to get position of "+elem+" (id:"+elem.id+")");
+    }
+    return new Position(getInt(x), getInt(y));
+}
+
+function getElementSize(elem) {
+    // returns a Rectangle with the size of the element
+    var width = 0;
+    var height = 0;
+    if (defined(elem.offsetWidth)) {
+        width = elem.offsetWidth;
+        height = elem.offsetHeight;
+    } else if (defined(elem.width)) {
+        width = elem.width;
+        height = elem.height;
+    } else if (defined(elem.clip.width)) {
+        width = elem.clip.width;
+        height = elem.clip.height;
+    } else {
+        alert("unable to get size of "+elem+" (id:"+elem.id+")");
+    }
+    return new Size(getInt(width), getInt(height));
+}
+
+function getElementRect(elem) {
+    // returns a Rectangle with the size and position of the element
+    var pos = getElementPosition(elem);
+    var size = getElementSize(elem);
+    return new Rectangle(pos.x, pos.y, size.width, size.height);
+}
+
+function moveElement(elem, rect) {
+    // moves and sizes the element
+    if (elem.style) {
+        if (defined(rect.x)) {
+            elem.style.left = Math.round(rect.x) + "px";
+            elem.style.top = Math.round(rect.y) + "px";
+        }
+        if (defined(rect.width)) {
+            elem.style.width = Math.round(rect.width) + "px";
+            elem.style.height = Math.round(rect.height) + "px";
+        }
+    } else if (document.layers) {
+        if (defined(rect.x)) {
+            elem.pageX = getInt(rect.x);
+            elem.pageY = getInt(rect.y);
+        }
+        if (defined(rect.width)) {
+            elem.clip.width = getInt(rect.width);
+            elem.clip.height = getInt(rect.height);
+        }
+    } else {
+        alert("moveelement: no style nor layer property!");
+        return false;
+    }
+    return true;
+}
+
+function showElement(elem, show) {
+    // shows or hides the element
+    if (elem.style) {
+        if (show) {
+            elem.style.visibility = "visible";
+        } else {
+            elem.style.visibility = "hidden";
+        }
+    } else if (defined(elem.visibility)) {
+        if (show) {
+            elem.visibility = "show";
+        } else {
+            elem.visibility = "hide";
+        }
+    } else {
+        alert("showelement: no style nor layer property!");
+    }
+    return true;
+}
+
+function isElementVisible(elem) {
+    // returns of the is shown or hidden
+    if (elem.style) {
+        return (elem.style.visibility == "visible");
+    } else if (defined(elem.visibility)) {
+        return (elem.visibility == "show");
+    } else {
+        alert("iselementvisible: no style nor layer property!");
+    }
+}
+
+function evtPosition(evt) {
+    // returns the on-screen Position of the Event 
+    var x;
+    var y;
+    evt = (evt) ? evt : window.event;
+    if (!evt) {
+        alert("no event found! "+evt);
+        return;
+    }
+    if (defined(evt.pageX)) {
+        x = parseInt(evt.pageX);
+        y = parseInt(evt.pageY);
+    } else if (defined(evt.clientX)) {
+        x = parseInt(document.body.scrollLeft+evt.clientX);
+        y = parseInt(document.body.scrollTop+evt.clientY);
+    } else {
+        alert("evtPosition: don't know how to deal with "+evt);
+    }
+    return new Position(x, y);
+}
+
+function registerEvent(type, elem, handler) {
+    // register the given event handler on the indicated element
+    if (elem.addEventListener) {
+        elem.addEventListener(type, handler, false);
+    } else {
+        if (type == "mousedown") {
+            if (elem.captureEvents) {
+                elem.captureEvents(Event.MOUSEDOWN);
+            }
+            elem.onmousedown = handler;
+        } else if (type == "mouseup") {
+            if (elem.captureEvents) {
+                elem.captureEvents(Event.MOUSEUP);
+            }
+            elem.onmouseup = handler;
+        } else if (type == "mousemove") {
+            if (elem.captureEvents) {
+                elem.captureEvents(Event.MOUSEMOVE);
+            }
+            elem.onmousemove = handler;
+        } else if (type == "keypress") {
+            if (elem.captureEvents) {
+                elem.captureEvents(Event.KEYPRESS);
+            }
+            elem.onkeypress = handler;
+        } else {
+            alert("registerEvent: unknown event type "+type);
+            return false;
+        }
+    }
+    return true;
+}
+
+function unregisterEvent(type, elem, handler) {
+    // unregister the given event handler from the indicated element
+    if (elem.removeEventListener) {
+        elem.removeEventListener(type, handler, false);
+    } else {
+        if (type == "mousedown") {
+            if (elem.releaseEvents) {
+                elem.releaseEvents(Event.MOUSEDOWN);
+            }
+            elem.onmousedown = null;
+        } else if (type == "mouseup") {
+            if (elem.releaseEvents) {
+                elem.releaseEvents(Event.MOUSEUP);
+            }
+            elem.onmouseup = null;
+        } else if (type == "mousemove") {
+            if (elem.releaseEvents) {
+                elem.releaseEvents(Event.MOUSEMOVE);
+            }
+            elem.onmousemove = null;
+        } else if (type == "keypress") {
+            if (elem.releaseEvents) {
+                elem.releaseEvents(Event.KEYPRESS);
+            }
+            elem.onkeypress = null;
+        } else {
+            alert("unregisterEvent: unknown event type "+type);
+            return false;
+        }
+    }
+    return true;
+}
+
+
+// old registerXXYY API for compatibility
+function registerMouseDown(elem, handler) {
+    return registerEvent("mousedown", elem, handler);
+}
+function unregisterMouseDown(elem, handler) {
+    return unregisterEvent("mousedown", elem, handler);
+}
+function registerMouseMove(elem, handler) {
+    return registerEvent("mousemove", elem, handler);
+}
+function unregisterMouseMove(elem, handler) {
+    return unregisterEvent("mousemove", elem, handler);
+}
+function registerKeyDown(handler) {
+    return registerEvent("keypress", elem, handler);
+}
+
+
+function getWinSize() {
+    // returns a Size with the current window size (mostly from www.quirksmode.org)
+    var wsize = new Size(100, 100);
+    if (defined(self.innerHeight))  {
+        // all except Explorer
+        if ((self.innerWidth == 0)||(self.innerHeight == 0)) {
+            // Safari 1.2 (and other) bug
+            if (parent) {
+                wsize.height = parent.innerHeight;
+                wsize.width = parent.innerWidth;
+            }
+        } else {
+            wsize.width = self.innerWidth;
+            wsize.height = self.innerHeight;
+        }
+    } else if (document.documentElement && document.documentElement.clientHeight) {
+        // Explorer 6 Strict Mode
+        wsize.width = document.documentElement.clientWidth;
+        wsize.height = document.documentElement.clientHeight;
+    } else if (document.body) {
+        // other Explorers
+        wsize.width = document.body.clientWidth;
+        wsize.height = document.body.clientHeight;
+    }
+    return wsize;
+}
+
+function openWin(url, name, params) {
+    // open browser window
+    var ow = window.open(url, name, params);
+    ow.focus();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/contexto/contexto.jsp	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,53 @@
+<%@ page language="java" %>                                                       
+<%@ page import="java.io.*" %>
+<%@ page import="java.net.*" %>
+
+<%
+    digilib.servlet.DigilibRequest dlRequest = new digilib.servlet.DigilibRequest();
+    dlRequest.setWithRequest(request);
+
+%>
+
+<%
+    // Possible parameters
+    String htmlPage = request.getParameter("htmlPage");
+    // neu eingebaut - christian
+    // @beat: kannst du das zeugs bitte checken und mir sagen, ob du
+    // dagegen bist oder nicht. es ist ein uebler hack, der keine
+    // kontrollmechanismen hat, aber im moment halt meinen anspruechen
+    // genuegt. (den import von java.net.* ist auch von mir)
+    String htmlURL = request.getParameter("htmlURL");
+    String xmlURL = request.getParameter("xmlURL");
+    String xslURL = request.getParameter("xslURL");
+    String fileName = request.getParameter("fn");
+    String pageNumber = request.getParameter("pn");
+
+    // funcktioniert leider nicht - christian
+    //System.setProperty("http.proxyHost", "proxy.unibe.ch");
+    //System.setProperty("http.proxyPort", "8080");
+
+    if(htmlPage != null) {
+        response.getWriter().println(htmlPage);
+        // neue parameterart eingebaut - christian
+    } else if(htmlURL != null) { 
+        try {
+            URL u = new URL(htmlURL);
+            String content_type = u.openConnection().getContentType();
+            InputStream is = u.openStream();
+            InputStreamReader isr = new InputStreamReader(is);
+            BufferedReader br = new BufferedReader(isr);
+            //response.setContentType(content_type);
+            String aLine;
+            while ((aLine = br.readLine()) != null) {
+                response.getWriter().println(aLine);
+            }
+        } catch (Exception e) {
+            response.getWriter().println(e);
+        }
+    } else if((xmlURL != null)  && (xslURL != null)) { 
+        out.println("xsl");
+        response.sendRedirect("http://sophia.unibe.ch:8080/xslt/ApplyXSLT?URL="+ xmlURL + "&xslURL=" + xslURL);
+    } else if(fileName != null && pageNumber != null) {
+        response.sendRedirect("http://hera.unibe.ch:8080/alcatraz/servlet/Texter?fn=" + fileName + "&pn=" + pageNumber);
+    }
+%>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/digicat.html	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title>Digital Library Redirect</title>
+</head>
+
+<script LANGUAGE="JavaScript">
+
+<!-- Beginning of JavaScript --------
+
+//this.location = "http://"+location.host+"/docuserver/digitallibrary/digicat.jsp"+location.search;
+
+this.location.replace(this.location.href.replace(/\.html/, ".jsp"));
+
+// -- End of JavaScript code -------------- -->
+
+</SCRIPT>
+
+<body>
+<h1>Digital Library Redirect</h1>
+
+<p>You should automatically be redirected to the Digital Library page.
+    (<tt>digicat.<b>jsp</b></tt>)</p>
+
+<p>If this doesn't happen make shure JavaScript is enabled in your browser. 
+    The Digital Library pages need JavaScript to work. If your problem still 
+    remains, please contact the administrator.</p>
+
+<hr>
+<address>robert.casties@philo.unibe.ch</address>
+</body> </html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/digicat.jsp	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,39 @@
+<%@ page language="java" %><%!
+// authentication stuff - robert
+// -----------------------------
+// create DocumentBean instance for all JSP requests
+digilib.servlet.DocumentBean docBean = new digilib.servlet.DocumentBean();
+
+// initialize DocumentBean instance in JSP init
+public void jspInit() {
+    try {
+        // set servlet init-parameter
+        docBean.setConfig(getServletConfig());
+    } catch (javax.servlet.ServletException e) {
+        System.out.println(e);
+    }
+}
+%><%
+
+// parsing the query
+// -----------------
+
+digilib.servlet.DigilibRequest dcRequest = new digilib.servlet.DigilibRequest(request);
+// check if authentication is needed and redirect if necessary
+docBean.doAuthentication(dcRequest, response);
+
+// set number of pages  
+dcRequest.setValue("pt", docBean.getNumPages(dcRequest));
+String baseUrl = dcRequest.getAsString("base.url");
+%>
+<html>
+<head>
+<title>Digital Document Library - Digicat</title>
+</head>
+
+<frameset cols="*,90" border="0">
+  <frame name="mainFrame" src="oldskin/dcMain.jsp?<%= dcRequest.getAsString() %>" scrolling="auto">
+  <frame name="rightFrame" src="oldskin/dcMenu.html" scrolling="no" noresize>
+</frameset>
+
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/digilib-fail.html	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html> <head>
+<title>Login to digilib</title>
+</head>
+
+<body>
+<h1>Login to digilib failed</h1>
+
+<p>The name and password are incorrect!</p>
+
+<p>You can use the browser's &quot;Back&quot; button and try again.</p>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/digilib-login.html	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html> <head>
+<title>Login to digilib</title>
+</head>
+
+<body>
+
+<h2>This document requires authentication</h2>
+
+<p>Please enter the name and the password to access this document.<p>
+
+<form method=POST action=j_security_check>
+<table>
+  <tr>
+    <td>Name:</td>
+    <td><input type="text" name="j_username"></td>
+  </tr>
+  <tr>
+    <td>Password:</td>
+    <td><input type="password" name="j_password"></td>
+  </tr>
+  <tr>
+    <td></td>
+    <td><input type="SUBMIT" value="  OK  "></td>
+  </tr>
+  </table>
+</form>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/digilib-new.html	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,366 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/transitional.dtd"> 
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+	<title>The new digilib</title>
+	<meta name="author" content="Martin Raspe" />
+	<meta name="date" content="07.12.2005, 19:14 h" />
+	<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1" />
+	
+	<style type="text/css">
+		body		{ background-color: #E0E0E0; color: black; font-size: 8pt }
+		code		{ font-family: monospace; color: blue; }
+		pre		{ color: #006060; }
+		img.png 	{ border: none; }
+		a.icon		{ margin: 0px; padding: 0px; }
+		div.button	{ margin: -4px; padding: 0px; }
+		
+	</style>
+	
+	<script language="JavaScript" src="baselib.js"></script>
+
+	<script language="JavaScript" src="dllib.js"></script>
+	
+	<script language="JavaScript">
+
+		function highlightPNG(id, on) {
+			var elem = document.getElementById(id);
+			//var div  = elem.parentNode.parentNode;
+			elem.style.backgroundImage = on 
+				? "url('corona.png')"
+				: null;
+		}
+
+	</script>
+</head>
+
+<body>
+
+<div id="buttons" 
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:showOptions(0);setMark()"
+			>
+
+			<img
+				class="png"
+				id="mark"
+				onmouseover="highlightPNG('mark', 1)"
+				onmouseout="highlightPNG('mark', 0)"
+				title="set a mark"
+				src="greyskin\mark.png"
+			>
+		</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:removeMark()"
+			>
+
+			<img
+				class="png"
+				id="delmark"
+				onmouseover="highlightPNG('delmark', 1)"
+				onmouseout="highlightPNG('delmark', 0)"
+				title="delete the last mark"
+				src="greyskin\delmark.png"
+				>
+		</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:getRefWin()"
+			>
+
+			<img
+				class="png"
+				id="reference"
+				onmouseover="highlightPNG('reference', 1)"
+				onmouseout="highlightPNG('reference', 0)"
+				title="get a reference URL"
+				src="greyskin\reference.png"
+			>
+		</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:zoomBy(1.4)"
+			>
+
+			<img
+				class="png"
+				id="zoom-in"
+				onmouseover="highlightPNG('zoom-in', 1)"
+				onmouseout="highlightPNG('zoom-in', 0)"
+				title="zoom in"
+				src="greyskin\zoom-in.png"
+			>
+	</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:zoomBy(0.7)"
+			>
+
+			<img
+				class="png"
+				id="zoom-out"
+				onmouseover="highlightPNG('zoom-out', 1)"
+				onmouseout="highlightPNG('zoom-out', 0)"
+				title="zoom out"
+				src="greyskin\zoom-out.png"
+			>
+	</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:showOptions(0);zoomArea()"
+			>
+
+			<img
+				class="png"
+				id="zoom-area"
+				onmouseover="highlightPNG('zoom-area', 1)"
+				onmouseout="highlightPNG('zoom-area', 0)"
+				title="zoom area"
+				src="greyskin\zoom-area.png"
+			>
+		</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:zoomFullpage()"
+			>
+
+			<img
+				class="png"
+				id="zoom-full"
+				onmouseover="highlightPNG('zoom-full', 1)"
+				onmouseout="highlightPNG('zoom-full', 0)"
+				title="view the whole image"
+				src="greyskin\zoom-full.png"
+			>
+	</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:mirror('h')"
+			>
+
+			<img
+				class="png"
+				id="mirror-h"
+				onmouseover="highlightPNG('mirror-h', 1)"
+				onmouseout="highlightPNG('mirror-h', 0)"
+				title="mirror horizontally"
+				src="greyskin\mirror-horizontal.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:mirror('v')"
+			>
+
+			<img
+				class="png"
+				id="mirror-v"
+				onmouseover="highlightPNG('mirror-v', 1)"
+				onmouseout="highlightPNG('mirror-v', 0)"
+				title="mirror vertically"
+				src="greyskin\mirror-vertical.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setParamWin('rot', 'Rotate (0..360) clockwise')"
+			>
+
+			<img
+				class="png"
+				id="rotate"
+				onmouseover="highlightPNG('rotate', 1)"
+				onmouseout="highlightPNG('rotate', 0)"
+				title="rotate image"
+				src="greyskin\rotate.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setParamWin('brgt', 'Brightness (-255..255)')"
+			>
+
+			<img
+				class="png"
+				id="brightness"
+				onmouseover="highlightPNG('brightness', 1)"
+				onmouseout="highlightPNG('brightness', 0)"
+				title="set brightness"
+				src="greyskin\brightness.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setParamWin('cont', 'Contrast (0..8)')"
+			>
+
+			<img
+				class="png"
+				id="contrast"
+				onmouseover="highlightPNG('contrast', 1)"
+				onmouseout="highlightPNG('contrast', 0)"
+				title="set contrast"
+				src="greyskin\contrast.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setParamWin('rgb', '...')"
+			>
+
+			<img
+				class="png"
+				id="rgb"
+				onmouseover="highlightPNG('rgb', 1)"
+				onmouseout="highlightPNG('rgb', 0)"
+				title="set rgb values"
+				src="greyskin\rgb.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setParamWin('size', '...')"
+			>
+
+			<img
+				class="png"
+				id="size"
+				onmouseover="highlightPNG('size', 1)"
+				onmouseout="highlightPNG('size', 0)"
+				title="resize page"
+				src="greyskin\size.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setQualityWin('Quality (0..2)')"
+			>
+
+			<img
+				class="png"
+				id="quality"
+				onmouseover="highlightPNG('quality', 1)"
+				onmouseout="highlightPNG('quality', 0)"
+				title="set image quality"
+				src="greyskin\quality.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:gotoPage('-1')"
+			>
+
+			<img
+				class="png"
+				id="back"
+				onmouseover="highlightPNG('back', 1)"
+				onmouseout="highlightPNG('back', 0)"
+				title="goto previous image"
+				src="greyskin\back.png"
+			>
+	</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:gotoPage('+1')"
+			>
+
+			<img
+				class="png"
+				id="fwd"
+				onmouseover="highlightPNG('fwd', 1)"
+				onmouseout="highlightPNG('fwd', 0)"
+				title="goto next image"
+				src="greyskin\fwd.png"
+			>
+	</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:gotoPageWin()"
+			>
+
+			<img
+				class="png"
+				id="page"
+				onmouseover="highlightPNG('page', 1)"
+				onmouseout="highlightPNG('page', 0)"
+				title="specify image"
+				src="greyskin\page.png"
+			>
+	</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:help()"
+			>
+
+			<img
+				class="png"
+				id="help"
+				onmouseover="highlightPNG('help', 1)"
+				onmouseout="highlightPNG('help', 0)"
+				title="help"
+				src="greyskin\help.png"
+			>
+		</a>
+	</div>
+	
+</div>
+
+</body>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/digilib.html	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title>Digital Library Redirect</title>
+</head>
+
+<script LANGUAGE="JavaScript">
+<!-- Beginning of JavaScript --------
+
+// this.location = "http://"+location.host+"/docuserver/digitallibrary/digilib.jsp"+location.search;
+
+this.location.replace(this.location.href.replace(/\.html/, ".jsp"));
+
+// -- End of JavaScript code -------------- -->
+</script>
+
+<body>
+<h1>Digital Library Redirect</h1>
+
+<p>You should automatically be redirected to the Digital Library page. 
+    (<tt>digilib.<b>jsp</b></tt>)</p>
+
+<p>If this doesn't happen make shure JavaScript is enabled in your browser. 
+    The Digital Library pages need JavaScript to work. If your problem still 
+    remains, please contact the administrator.</p>
+
+<hr>
+<address>robert.casties@philo.unibe.ch</address>
+</body> </html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/digilib.jsp	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,40 @@
+<%@ page language="java" %><%!
+// authentication stuff - robert
+// -----------------------------
+// create DocumentBean instance for all JSP requests
+digilib.servlet.DocumentBean docBean = new digilib.servlet.DocumentBean();
+
+// initialize DocumentBean instance in JSP init
+public void jspInit() {
+    try {
+        // set servlet init-parameter
+        docBean.setConfig(getServletConfig());
+    } catch (javax.servlet.ServletException e) {
+        System.out.println(e);
+    }
+}
+%><%
+
+// parsing the query
+// -----------------
+
+digilib.servlet.DigilibRequest dlRequest = new digilib.servlet.DigilibRequest(request);
+// check if authentication is needed and redirect if necessary
+docBean.doAuthentication(dlRequest, response);
+    
+String digiURL = "digimage.jsp?" + dlRequest.getAsString();
+
+%><html>
+<head>
+<title>Digital Document Library</title>
+</head>
+
+<frameset cols="*,90" border="0" onload="pageFrame.show()">
+  <frame name="mainFrame" src="<%= digiURL %>" scrolling="auto">
+  <frameset rows="25,*" border="0">
+    <frame name="pageFrame" src="oldskin/pageWin.html" scrolling="no" noresize>
+    <frame name="rightFrame" src="oldskin/dlMenu.html" scrolling="no" noresize>
+  </frameset>
+</frameset>
+
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/digimage.jsp	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,86 @@
+<%@ page language="java" %><%!
+// -- JSP init -------------
+
+// create DocumentBean instance for all JSP requests
+digilib.servlet.DocumentBean docBean = new digilib.servlet.DocumentBean();
+
+// initialize DocumentBean instance in JSP init
+public void jspInit() {
+    try {
+        // set servlet init-parameter
+        docBean.setConfig(getServletConfig());
+    } catch (javax.servlet.ServletException e) {
+        System.out.println(e);
+    }
+}
+// -- end of JSP init -------------
+%><%
+// -- JSP request -------------
+
+// parsing the query
+// -----------------
+digilib.servlet.DigilibRequest dlRequest = new digilib.servlet.DigilibRequest(request);
+docBean.setRequest(dlRequest);
+// check if authentication is needed and redirect if necessary
+docBean.doAuthentication(response);
+// add number of pages
+dlRequest.setValue("pt", docBean.getNumPages());
+// store objects for jsp:include
+pageContext.setAttribute("docBean", docBean, pageContext.REQUEST_SCOPE);
+%><html>
+<head>
+    <title>Digital Document Library (L1)</title>
+    <script type="text/javascript" src="baselib.js"></script>
+    <script type="text/javascript" src="dllib.js"></script>
+<script type="text/javascript">
+  base_init();
+  var dlTarget = window.name;
+  var baseUrl = '<%= dlRequest.getAsString("base.url") %>';
+  var toolbarEnabledURL = window.location.href;
+  newParameter('fn', '', 1);
+  newParameter('pn', '1', 1);
+  newParameter('ws', '1.0', 2);
+  newParameter('mo', '', 2);
+  newParameter('wx', '0.0', 4);
+  newParameter('wy', '0.0', 4);
+  newParameter('ww', '1.0', 4);
+  newParameter('wh', '1.0', 4);
+  newParameter('brgt', '0.0', 4);
+  newParameter('cont', '0.0', 4);
+  newParameter('rot', '0.0', 4);
+  newParameter('rgba', '', 4);
+  newParameter('rgbm', '', 4);
+  newParameter('ddpi', '', 8);
+  newParameter('ddpix', '', 8);
+  newParameter('ddpiy', '', 8);
+  newParameter('mk', '', 16);
+  newParameter('pt', '0', 32);
+  setParameter('pt', '<%= dlRequest.getAsString("pt") %>');
+  document.id='digilib';
+  dl_param_init();
+</script>
+</head>
+<body bgcolor="#666666" onload="dl_init();">
+<% if (dlRequest.hasOption("clop", "noarrows")) {
+%><jsp:include page="digimage_img_inc.jsp" /><%
+} else {
+%><jsp:include page="digimage_tbl_inc.jsp" /><%
+}
+%>
+
+ <div id="dot0" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="img/mark1.gif" border="0"></div>
+ <div id="dot1" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="img/mark2.gif" border="0"></div>
+ <div id="dot2" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="img/mark3.gif" border="0"></div>
+ <div id="dot3" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="img/mark4.gif" border="0"></div>
+ <div id="dot4" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="img/mark5.gif" border="0"></div>
+ <div id="dot5" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="img/mark6.gif" border="0"></div>
+ <div id="dot6" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="img/mark7.gif" border="0"></div>
+ <div id="dot7" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="img/mark8.gif" border="0"></div>
+ <div id="eck1" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="img/olinks.gif" border="0"></div>
+ <div id="eck2" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="img/orechts.gif" border="0"></div>
+ <div id="eck3" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="img/ulinks.gif" border="0"></div>
+ <div id="eck4" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="img/urechts.gif" border="0"></div>
+
+</body>
+
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/digimage_img_inc.jsp	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,25 @@
+<%@ page language="java" %><%
+// retrieve objects from context
+digilib.servlet.DocumentBean docBean = (digilib.servlet.DocumentBean) pageContext.getAttribute("docBean", pageContext.REQUEST_SCOPE);
+digilib.servlet.DigilibRequest dlRequest = docBean.getRequest();
+String ua = request.getHeader("User-Agent");
+boolean isN4 = ((ua.indexOf("Mozilla/4.") > -1)&&(ua.indexOf("MSIE") == -1));
+%>
+<%
+    if (isN4) {
+%><ilayer name="scaler"><%
+	    } else {
+%><div id="scaler"><%
+	    }
+%>
+<script type="text/javascript">
+var ps = bestPicSize(getElement('scaler'), 10);
+document.write('<img id="pic" src="<%= dlRequest.getAsString("base.url") + "/servlet/Scaler?" + dlRequest.getAsString('s') %>&dw='+ps.width+'&dh='+ps.height+'" />');
+</script>
+<%   
+    if (isN4) {
+%></ilayer><%
+	    } else {
+%></div><%
+	    }
+%>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/digimage_tbl_inc.jsp	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,61 @@
+<%@ page language="java" %><%
+// retrieve objects from context
+digilib.servlet.DocumentBean docBean = (digilib.servlet.DocumentBean) pageContext.getAttribute("docBean", pageContext.REQUEST_SCOPE);
+digilib.servlet.DigilibRequest dlRequest = docBean.getRequest();
+String ua = request.getHeader("User-Agent");
+boolean isN4 = ((ua.indexOf("Mozilla/4.") > -1)&&(ua.indexOf("MSIE") == -1));
+%>
+<table border="0"  cellpadding="0" cellspacing="0">
+  <tr>
+    <td></td>
+    <td align="center"><%
+      if (docBean.canMoveUp()) {
+        %><a href="javascript:moveBy(0, -0.5)"><img src="img/up.gif" border="0" /></a><%
+      }
+      %></td>
+      <td></td>
+  </tr>
+  <tr>
+    <td valign="center"><%
+      if (docBean.canMoveLeft()) {
+        %><a href="javascript:moveBy(-0.5, 0)"><img src="img/left.gif" border="0" /></a><%
+      }
+      %></td>
+	  <td>
+<%
+	  if(isN4) {
+	      %><ilayer name="scaler"><%
+		  } else {
+	      %><div id="scaler" style="visibility:visible"><%
+		  }
+%>
+<script type="text/javascript">
+var ps = bestPicSize(getElement('scaler'), 10);
+document.write('<img id="pic" src="<%=
+  dlRequest.getAsString("base.url") + "/servlet/Scaler?" + dlRequest.getAsString('s')
+%>&dw='+ps.width+'&dh='+ps.height+'" />');
+</script>
+<% 
+    if(isN4) {
+	%></ilayer><%
+	    } else {
+	%></div><%
+	    }
+%>
+    </td>
+    <td valign="center"><%
+      if (docBean.canMoveRight()) {
+        %><a href="javascript:moveBy(0.5, 0)"><img src="img/right.gif" border="0" /></a><%
+      }
+      %></td>
+  </tr>
+  <tr>
+    <td></td>
+    <td align="center"><%
+      if (docBean.canMoveDown()) {
+        %><a href="javascript:moveBy(0, 0.5)"><img src="img/down.gif" border="0" /></a><%
+      }
+      %></td>
+    <td></td>
+  </tr>
+</table>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/dirInfo-xml.jsp	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,46 @@
+<%@ page language="java" %><%!
+// create DocumentBean instance for all JSP requests
+digilib.servlet.DocumentBean docBean = new digilib.servlet.DocumentBean();
+
+// initialize DocumentBean instance in JSP init
+public void jspInit() {
+    try {
+        // set servlet init-parameter
+        docBean.setConfig(getServletConfig());
+    } catch (javax.servlet.ServletException e) {
+        System.out.println(e);
+    }
+}
+%><?xml version="1.0" encoding="UTF-8" ?>
+<%
+// process request
+// get digilib config
+digilib.servlet.DigilibConfiguration dlConfig = docBean.getDlConfig();
+// parsing the query
+digilib.servlet.DigilibRequest dlRequest = new digilib.servlet.DigilibRequest(request);
+// dir cache
+digilib.io.DocuDirCache dirCache = (digilib.io.DocuDirCache) dlConfig.getValue("servlet.dir.cache");
+// get directory
+digilib.io.DocuDirectory dir = dirCache.getDirectory(dlRequest.getFilePath());
+
+%><!-- Automatically generated XML snippet with directory info -->
+<dir><% if (dir != null) { %>
+  <size><%= dir.size() %></size>
+  <name><%= dir.getDirName() %></name>
+  <fsname><%= dir.getDir().getPath() %></fsname> 
+<%
+    if (!dlRequest.hasOption("mo", "dir")) {
+      int l = dir.size();
+      for (int i = 0; i < l; i++) {
+        digilib.io.DocuDirent f = dir.get(i);
+        String fn = (f != null) ? f.getName() : "null";
+%>  <file>
+    <index><%= i+1 %></index>
+    <name><%= digilib.io.FileOps.basename(fn) %></name>
+    <fsname><%= fn %></fsname>
+  </file>
+<%
+      } // for 
+    } // if not dironly
+  } // if dir 
+%></dir>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/dlContext-xml.jsp	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,43 @@
+<%@ page language="java" %><%!
+// create DocumentBean instance for all JSP requests
+digilib.servlet.DocumentBean docBean = new digilib.servlet.DocumentBean();
+
+// initialize DocumentBean instance in JSP init
+public void jspInit() {
+    try {
+        // set servlet init-parameter
+        docBean.setConfig(getServletConfig());
+    } catch (javax.servlet.ServletException e) {
+        System.out.println(e);
+    }
+}
+%><?xml version="1.0" encoding="UTF-8" ?>
+<%
+// process request
+// get digilib config
+digilib.servlet.DigilibConfiguration dlConfig = docBean.getDlConfig();
+// parsing the query
+digilib.servlet.DigilibRequest dlRequest = new digilib.servlet.DigilibRequest(request);
+// dir cache
+digilib.io.DocuDirCache dirCache = (digilib.io.DocuDirCache) dlConfig.getValue("servlet.dir.cache");
+
+%><!-- Automatically generated XML snippet with document context -->
+<result>
+<%
+int pn = dlRequest.getAsInt("pn");
+String fn = dlRequest.getFilePath();
+String ctx = "";
+digilib.io.DocuDirent f = dirCache.getFile(fn, pn, digilib.io.FileOps.CLASS_IMAGE);
+if (f != null) {
+    //ctx = "hasfile:"+f.getName();
+    f.checkMeta();
+    java.util.HashMap meta = f.getFileMeta();
+    if (meta != null) {
+	//ctx = "JSP:hasmeta!";
+	if (meta.containsKey("context")) {
+	    ctx = (String) meta.get("context");
+	}
+    }
+}
+%><%= ctx %>
+</result>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/dlInfo-js.jsp	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,34 @@
+<%@ page language="java" %>
+<%!
+// create DocumentBean instance for all JSP requests
+digilib.servlet.DocumentBean docBean = new digilib.servlet.DocumentBean();
+
+// initialize DocumentBean instance in JSP init
+public void jspInit() {
+    try {
+        // set servlet init-parameter
+        docBean.setConfig(getServletConfig());
+    } catch (javax.servlet.ServletException e) {
+        System.out.println(e);
+    }
+}
+%><%
+// parsing the query
+digilib.servlet.DigilibRequest dlRequest = new digilib.servlet.DigilibRequest(request);
+docBean.setRequest(dlRequest);
+%>
+// Automatically generated JavaScript snippet with parameters
+<%
+    Object[] keys = dlRequest.keySet().toArray();
+    java.util.Arrays.sort(keys);
+    int l = keys.length;
+    for (int i = 0; i < l; i++) {
+	String key = (String) keys[i];
+	String val = dlRequest.getAsString(key);
+	if (val.length() == 0) {
+	    val = "";
+	}
+	%>var dl_<%= key %> = "<%= val %>";
+<%
+       }
+%>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/dlInfo-xml.jsp	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,38 @@
+<%@ page language="java" %><%!
+// create DocumentBean instance for all JSP requests
+digilib.servlet.DocumentBean docBean = new digilib.servlet.DocumentBean();
+
+// initialize DocumentBean instance in JSP init
+public void jspInit() {
+    try {
+        // set servlet init-parameter
+        docBean.setConfig(getServletConfig());
+    } catch (javax.servlet.ServletException e) {
+        System.out.println(e);
+    }
+}
+%><?xml version="1.0" encoding="UTF-8" ?>
+<%
+// process request
+// get digilib config
+digilib.servlet.DigilibConfiguration dlConfig = docBean.getDlConfig();
+// parsing the query
+digilib.servlet.DigilibRequest dlRequest = new digilib.servlet.DigilibRequest(request);
+docBean.setRequest(dlRequest);
+
+%><!-- Automatically generated XML snippet with document parameters -->
+<document-parameters>
+<%
+    Object[] keys = dlRequest.keySet().toArray();
+    java.util.Arrays.sort(keys);
+    int l = keys.length;
+    for (int i = 0; i < l; i++) {
+	String key = (String) keys[i];
+	String val = dlRequest.getAsString(key);
+	if (val.length() == 0) {
+	    val = "";
+	}
+%>  <parameter name="<%= key %>" value="<%= val %>"/>
+<%
+       }
+%></document-parameters>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/dllib.js	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,616 @@
+/* Copyright (C) 2003,2004 IT-Group MPIWG, WTWG Uni Bern and others
+ 
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+ 
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+ 
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
+ 
+Authors:
+  Christian Luginbuehl, 01.05.2003 (first version)
+  DW 24.03.2004 (Changed for digiLib in Zope)
+  Robert Casties, 8.11.2005
+
+  ! Requires baselib.js !
+
+*/
+
+
+function identify() {
+        // used for identifying a digilib instance
+        // Relato uses that function - lugi
+        return "Digilib 0.6";
+}
+
+
+/*
+ * more parameter handling
+ */
+
+function parseArea() {
+    // returns area Rectangle from current parameters
+    return new Rectangle(getParameter("wx"), getParameter("wy"), getParameter("ww"), getParameter("wh"));
+}
+
+function setParamFromArea(rect) {
+    // sets digilib wx etc. from rect
+    setParameter("wx", cropFloat(rect.x));
+    setParameter("wy", cropFloat(rect.y));
+    setParameter("ww", cropFloat(rect.width));
+    setParameter("wh", cropFloat(rect.height));
+    return true;
+}
+
+function parseTrafo(elem) {
+    // returns Transform from current dlArea and picsize
+    var picsize = getElementRect(elem);
+    var trafo = new Transform();
+    // subtract area offset and size
+    trafo.concat(getTranslation(new Position(-dlArea.x, -dlArea.y)));
+    trafo.concat(getScale(new Size(1/dlArea.width, 1/dlArea.height)));
+    // scale to screen size
+    trafo.concat(getScale(picsize));
+    trafo.concat(getTranslation(picsize));
+    // rotate
+    //trafo.concat(getRotation(- getParameter("rot"), new Position(0.5*picsize.width, 0.5*picsize.height)));
+    // mirror
+    //if (hasFlag("hmir")) {
+    //trafo.m00 = - trafo.m00;
+    //}
+    //if (hasFlag("vmir")) {
+    //trafo.m11 = - trafo.m11;
+    //}
+    return trafo;
+}
+
+
+function parseMarks() {
+    // returns marks array from current parameters
+    var marks = new Array();
+    var ma;
+    var mk = getParameter("mk");
+    if (mk.indexOf(";") >= 0) {
+        // old format with ";"
+        ma = mk.split(";");
+    } else {
+        ma = mk.split(",");
+    }
+    for (var i = 0; i < ma.length ; i++) {
+        var pos = ma[i].split("/");
+        if (pos.length > 1) {
+            marks.push(new Position(pos[0], pos[1]));
+        }
+    }
+    return marks;
+}
+
+function getAllMarks() {
+    // returns a string with all marks in query format
+    var marks = new Array();
+    for (var i = 0; i < dlMarks.length; i++) {
+        marks.push(cropFloat(dlMarks[i].x) + "/" + cropFloat(dlMarks[i].y));
+    }
+    return marks.join(",");
+}
+
+function addMark(pos) {
+    // add a mark
+    dlMarks.push(pos);
+    setParameter("mk", getAllMarks());
+    return true;
+}
+
+function deleteMark() {
+    // delete the last mark
+    dlMarks.pop();
+    setParameter("mk", getAllMarks());
+    return true;
+}
+
+function hasFlag(mode) {
+    // returns if mode flag is set
+    return (dlFlags[mode]);
+}
+
+function addFlag(mode) {
+    // add a mode flag
+    dlFlags[mode] = mode;
+    setParameter("mo", getAllFlags());
+    return true;
+}
+
+function removeFlag(mode) {
+    // remove a mode flag
+    if (dlFlags[mode]) {
+        delete dlFlags[mode];
+    }
+    setParameter("mo", getAllFlags());
+    return true;
+}
+
+function toggleFlag(mode) {
+    // change a mode flag
+    if (dlFlags[mode]) {
+        delete dlFlags[mode];
+    } else {
+        dlFlags[mode] = mode;
+    }
+    setParameter("mo", getAllFlags());
+    return true;
+}
+
+function getAllFlags() {
+    // returns a string with all flags in query format
+    var fa = new Array();
+    for (var f in dlFlags) {
+        if ((f != "")&&(dlFlags[f] != null)) {
+            fa.push(f);
+        }
+    }
+    return fa.join(",");
+}
+
+function parseFlags() {
+    // sets dlFlags from the current parameters
+    var flags = new Object();
+    var fa = getParameter("mo").split(",");
+    for (var i = 0; i < fa.length ; i++) {
+        var f = fa[i];
+        if (f != "") {
+            flags[f] = f;
+        }
+    }
+    return flags;
+}    
+
+
+function bestPicSize(elem, inset) {
+    // returns a Size with the best image size for the given element
+    if (! defined(inset)) {
+        inset = 25;
+    }
+    var ws = getWinSize();
+    var es = getElementPosition(elem);
+    if (es) {
+        ws.width = ws.width - es.x - inset;
+        ws.height = ws.height - es.y - inset;
+    }
+    return ws;
+}
+
+function setDLParam(e, s, relative) {
+	// sets parameter based on HTML event
+	var nam;
+    var val;
+    if (s.type && (s.type == "select-one")) {
+        nam = s.name;
+        val = s.options[s.selectedIndex].value;
+    } else if (s.name && s.value) {
+        nam = s.name;
+        val = s.value;
+    }
+    if (nam && val) {
+        setParameter(nam, val, relative);
+        display();
+    } else {
+        alert("ERROR: unable to process event!");
+    }
+    return true;
+}
+
+
+/* **********************************************
+ *     digilib specific routines
+ * ******************************************** */
+
+
+function dl_param_init() {
+    // parameter initialisation before onload
+    if (!baseScriptVersion) {
+        base_init();
+    }
+    dlScriptVersion = "1.2b";
+    dlArea = new Rectangle(0.0, 0.0, 1.0, 1.0);
+    dlMaxArea = new Rectangle(0.0, 0.0, 1.0, 1.0);
+    dlTrafo = new Transform();
+    dlMarks = new Array();
+    dlFlags = new Object();
+    elemScaler = null;
+    picElem = null;
+    ZOOMFACTOR = Math.sqrt(2);
+
+    // put the query parameters (sans "?") in the parameters array
+    parseParameters(location.search.slice(1));
+    // treat special parameters
+    dlMarks = parseMarks();
+    dlArea = parseArea();
+    dlFlags = parseFlags();
+}
+
+
+function dl_init() {
+    // initalisation on load
+    if (!dlScriptVersion) {
+        dl_param_init();
+    }
+    elemScaler = getElement("scaler", true);
+    picElem = getElement("pic", true);
+    if (picElem == null && elemScaler) {
+        // in N4 pic is in the scaler layer
+        picElem = elemScaler.document.images[0];
+    }
+    if ((!elemScaler)||(!picElem)) {
+        alert("Sorry, digilib doesn't work here!");
+        return false;
+    }
+    // give a name to the window containing digilib
+    if (defined(dlTarget)&&(dlTarget)) {
+        window.name = dlTarget;
+    } else {
+        window.name = "digilib";
+    }
+    // put the query parameters (sans "?") in the parameters array
+    parseParameters(location.search.slice(1));
+    // treat special parameters
+    dlMarks = parseMarks();
+    dlArea = parseArea();
+    dlFlags = parseFlags();
+    // wait for image to load and display marks
+    renderMarks();
+    // done
+    focus();
+    return;
+}
+
+
+function display(detail) {
+    // redisplay the page
+    if (! detail) {
+        detail = 255;
+    }
+    var queryString = getAllParameters(detail);
+    location.href = location.protocol + "//" + location.host + location.pathname + "?" + queryString;
+}
+
+
+/* **********************************************
+ *     interactive digilib functions
+ * ******************************************** */
+
+
+function renderMarks() {
+    // put the visible marks on the image
+    var mark_count = dlMarks.length;
+    // make shure the image is loaded so we know its size
+    if (defined(picElem.complete) && picElem.complete == false && ! browserType.isN4 ) {
+        setTimeout("renderMarks()", 100);
+    } else {
+        dlTrafo = parseTrafo(picElem);
+        for (var i = 0; i < 8; i++) {
+            var me = getElement("dot"+i);
+            if (i < mark_count) {
+                if (dlArea.containsPosition(dlMarks[i])) {
+                    var mpos = dlTrafo.transform(dlMarks[i]);
+                    // suboptimal to place -5 pixels and not half size of mark-image
+                    mpos.x = mpos.x -5;
+                    mpos.y = mpos.y -5;
+                    moveElement(me, mpos);
+                    showElement(me, true);
+                }
+            } else {
+                // hide the other marks
+                showElement(me, false);
+            }
+        }
+    }
+}
+
+
+function setMark(reload) {
+    // add a mark where clicked
+    if ( dlMarks.length > 7 ) {
+        alert("Only 8 marks are possible at the moment!");
+        return;
+    }
+    window.focus();
+
+    function markEvent(evt) {
+        // event handler adding a new mark
+        unregisterEvent("mousedown", elemScaler, markEvent);
+        var p = dlTrafo.invtransform(evtPosition(evt));
+        addMark(p);
+        if (defined(reload)&&(!reload)) {
+            // don't redisplay
+            renderMarks();
+            return;
+        }
+        display();
+    }
+
+    // starting event capture
+    registerEvent("mousedown", elemScaler, markEvent);
+}
+
+
+function removeMark(reload) {
+    // remove the last mark
+    deleteMark();
+    if (defined(reload)&&(!reload)) {
+        // don't redisplay
+        renderMarks();
+        return;
+    }
+    display();
+}
+
+
+function zoomArea() {
+    var click = 1;
+    var pt1, pt2;
+    var eck1pos, eck2pos, eck3pos, eck4pos;
+    window.focus();
+    var eck1 = getElement("eck1");
+    var eck2 = getElement("eck2");
+    var eck3 = getElement("eck3");
+    var eck4 = getElement("eck4");
+
+    function zoomClick(evt) {
+        // mouse click handler
+        if (click == 1) {
+            // first click -- start moving
+            click = 2;
+            pt1 = evtPosition(evt);
+            pt2 = pt1;
+            eck1pos = pt1;
+            eck2pos = new Position(pt1.x - 12, pt1.y);
+            eck3pos = new Position(pt1.x, pt1.y - 12);
+            eck4pos = new Position(pt1.y - 12, pt1.y - 12);
+            moveElement(eck1, eck1pos);
+            moveElement(eck2, eck2pos);
+            moveElement(eck3, eck3pos);
+            moveElement(eck4, eck4pos);
+            showElement(eck1, true);
+            showElement(eck2, true);
+            showElement(eck3, true);
+            showElement(eck4, true);
+            // show moving
+            registerEvent("mousemove", elemScaler, zoomMove);
+            registerEvent("mousemove", eck4, zoomMove);
+            // enable drag-to-zoom
+            registerEvent("mouseup", elemScaler, zoomClick);
+            registerEvent("mouseup", eck4, zoomClick);
+        } else {
+            // second click -- end moving
+            pt2 = evtPosition(evt);
+            showElement(eck1, false);
+            showElement(eck2, false);
+            showElement(eck3, false);
+            showElement(eck4, false);
+            unregisterEvent("mousemove", elemScaler, zoomMove);
+            unregisterEvent("mousemove", eck4, zoomMove);
+            unregisterEvent("mousedown", elemScaler, zoomClick);
+            unregisterEvent("mousedown", eck4, zoomClick);
+            var p1 = dlTrafo.invtransform(pt1);
+            var p2 = dlTrafo.invtransform(pt2);
+            var ww = p2.x-p1.x;
+            var wh = p2.y-p1.y;
+            if ((ww > 0)&&(wh > 0)) {
+                setParameter("wx", cropFloat(p1.x));
+                setParameter("wy", cropFloat(p1.y));
+                setParameter("ww", cropFloat(ww));
+                setParameter("wh", cropFloat(wh));
+                parseArea();
+                // zoomed is always fit
+                setParameter("ws", 1);
+                display();
+            }
+        }
+    }
+
+    function zoomMove(evt) {
+        // mouse move handler
+        pt2 = evtPosition(evt);
+        // restrict marks to move right and down
+        eck1pos = pt1;
+        eck2pos = new Position(Math.max(pt1.x, pt2.x)-12, pt1.y);
+        eck3pos = new Position(pt1.x, Math.max(pt1.y, pt2.y)-12);
+        eck4pos = new Position(Math.max(pt1.x, pt2.x)-12, Math.max(pt1.y, pt2.y)-12);
+        moveElement(eck1, eck1pos);
+        moveElement(eck2, eck2pos);
+        moveElement(eck3, eck3pos);
+        moveElement(eck4, eck4pos);
+    }
+
+    // starting event capture
+    registerEvent("mousedown", elemScaler, zoomClick);
+    registerEvent("mousedown", eck4, zoomClick);
+}
+
+function zoomBy(factor) {
+    // zooms by the given factor
+    var newarea = dlArea.copy();
+    newarea.width /= factor;
+    newarea.height /= factor;
+    newarea.x -= 0.5 * (newarea.width - dlArea.width);
+    newarea.y -= 0.5 * (newarea.height - dlArea.height);
+    newarea = dlMaxArea.fit(newarea);
+    setParamFromArea(newarea);
+    display();
+}
+
+
+function zoomFullpage() {
+    // zooms out to show the whole image
+    setParameter("wx", 0.0);
+    setParameter("wy", 0.0);
+    setParameter("ww", 1.0);
+    setParameter("wh", 1.0);
+    display();
+}
+
+
+function moveCenter() {
+    // move visible area so that it's centered around the clicked point
+    if ( (dlArea.width == 1.0) && (dlArea.height == 1.0) ) {
+        // nothing to do
+        return;
+    }
+    window.focus();
+
+    function moveCenterEvent(evt) {
+        // move to handler
+        unregisterEvent("mousedown", elemScaler, moveCenterEvent);
+        var pt = dlTrafo.invtransform(evtPosition(evt));
+        var newarea = new Rectangle(pt.x-0.5*dlArea.width, pt.y-0.5*dlArea.height, dlArea.width, dlArea.height);
+        newarea = dlMaxArea.fit(newarea);
+        // set parameters
+        setParamFromArea(newarea);
+        parseArea();
+        display();
+    }
+
+    // starting event capture
+    registerEvent("mousedown", elemScaler, moveCenterEvent);
+}
+
+function moveBy(movx, movy) {
+    // move visible area by movx and movy (in units of ww, wh)
+    if ((dlArea.width == 1.0)&&(dlArea.height == 1.0)) {
+        // nothing to do
+        return;
+    }
+    var newarea = dlArea.copy();
+    newarea.x += parseFloat(movx)*dlArea.width;
+    newarea.y += parseFloat(movy)*dlArea.height;
+    newarea = dlMaxArea.fit(newarea);
+    // set parameters
+    setParamFromArea(newarea);
+    parseArea();
+    display();
+}
+
+function getRef() {
+    // returns a reference to the current digilib set
+    if (! baseUrl) {
+        var baseUrl = location.protocol + "//" + location.host + location.pathname;
+    }
+    var hyperlinkRef = baseUrl;
+    var par = getAllParameters(7+16); // all without ddpi, pt
+    if (par.length > 0) {
+        hyperlinkRef += "?" + par;
+    }
+    return hyperlinkRef;
+}
+
+function getRefWin(type, msg) {
+    // shows an alert with a reference to the current digilib set
+    if (! msg) {
+        msg = "Link for HTML documents";
+    }
+    prompt(msg, getRef());
+}
+
+function getQuality() {
+	// returns the current q setting
+    for (var i = 0; i < 3; i++) {
+        if (hasFlag("q"+i)) {
+        	return i;
+        }
+    }
+    return 1
+}
+
+function setQuality(qual) {
+    // set the image quality
+    for (var i = 0; i < 3; i++) {
+        removeFlag("q"+i);
+        if (i == qual) {
+            addFlag("q"+i);
+        }
+    }
+    setParameter("mo", getAllFlags());
+    display();
+}    
+
+function setQualityWin(msg) {
+	// dialog for setting quality
+	if (! msg) {
+		msg = "Quality (0..2)";
+	}
+	var q = getQuality();
+	var newq = window.prompt(msg, q);
+	if (newq) {
+		setQuality(newq);
+	}
+}
+
+function mirror(dir) {
+    // mirror the image horizontally or vertically
+    if (dir == "h") {
+        toggleFlag("hmir");
+    } else {
+        toggleFlag("vmir");
+    }
+    setParameter("mo", getAllFlags());
+    display();
+}
+
+function gotoPage(gopage, keep) {
+	// goto given page nr (+/-: relative)
+	var oldpn = parseInt(getParameter("pn"));
+	// try setParameter with relative value
+	setParameter("pn", gopage, true);
+	// check the result
+	var pn = parseInt(getParameter("pn"));
+	if (pn < 1) {
+		alert("No such page! (Page number too low)");
+		setParameter("pn", oldpn);
+		return;
+	}
+	if (hasParameter("pt")) {
+		pt = parseInt(getParameter("pt"))
+		if (pn > pt) {
+			alert("No such page! (Page number too high)");
+			setParameter("pn", oldpn);
+			return;
+		}
+	}
+	if (keep) {
+		display(15+32); // all, no mark
+	} else {	
+		display(3+32); // fn, pn, ws, mo + pt
+	}
+}
+
+function gotoPageWin() {
+	// dialog to ask for new page nr
+	var pn = getParameter("pn");
+	var gopage = window.prompt("Go to page", pn);
+	if (gopage) {
+		gotoPage(gopage);
+	}
+}
+
+function setParamWin(param, text, relative) {
+	// dialog to ask for new parameter value
+	var val = getParameter(param);
+	var newval = window.prompt(text, val);
+	if (newval) {
+		setParameter(param, newval, relative);
+		display();
+	}
+}
+
+function showOptions(show) {
+	// show or hide option div
+	var elem = getElement("dloptions");
+	showElement(elem, show);
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/empty.html	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,8 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+</head>
+
+<body>
+</body>
+</html>
Binary file client/digitallibrary/greyskin/back.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/back.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,97 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="back.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\back.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="22"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:#707070;fill-opacity:0.35526314;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.50331128;opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none"
+       d="M 23.6875 3.53125 C 13.517688 3.9243803 5.3749998 12.44746 5.375 22.875 C 5.375 33.552802 13.927192 42.218749 24.4375 42.21875 C 34.947807 42.21875 43.468749 33.552802 43.46875 22.875 C 43.46875 12.197198 34.947807 3.53125 24.4375 3.53125 C 24.191165 3.53125 23.931575 3.5218149 23.6875 3.53125 z M 31.75 13.75 L 31.75 33.3125 L 14.75 23.3125 L 31.75 13.75 z "
+       id="path2396" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.5000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
+       d="M 17.000000,13.428571 L 17.000000,33.000000 L 34.000000,23.000000 L 17.000000,13.428571 z "
+       id="path7614" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 31.25,13.678571 L 31.25,33.25 L 14.25,23.25 L 31.25,13.678571 z "
+       id="path2474" />
+  </g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/baselib.js	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,981 @@
+/* Copyright (C) 2003-2006 IT-Group MPIWG, WTWG Uni Bern and others
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+ 
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+ 
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
+ 
+Authors: 
+  Christian Luginbuehl, 01.05.2003 (first version)
+  DW 24.03.2004 (Changed for digiLib in Zope)
+  Robert Casties, 2.11.2004 (almost complete rewrite)
+  Martin Raspe, 12.12.2005 (changes for Digilib NG)
+  Robert Casties, 3.9.2009
+*/
+
+// was: function base_init() {
+baseLibVersion = "2.011";
+browserType = getBrowserType();
+
+sliders = {};
+activeSlider = null;
+
+function getInt(n) {
+    // returns always an integer
+    n = parseInt(n);
+    return (isNaN(n)) ? 0 : n;
+}
+
+function defined(x) {
+    // returns if x is defined
+    return (typeof arguments[0] != "undefined");
+}
+
+function cropFloat(x) {
+    // auxiliary function to crop senseless precision
+    return parseInt(10000 * x) / 10000;
+}
+
+function getBrowserType() {
+    // browser sniffer
+    var bt = Object();
+    bt.doDHTML = false;
+    bt.versIE = 0;
+
+    if ((! document.cssonly && document.layers) || document.all || document.getElementById) {
+        var vers = navigator.appVersion.split('MSIE ');
+        vers = vers[vers.length - 1];
+        bt.versIE = getInt(vers);
+        bt.isIE = navigator.userAgent.indexOf('MSIE') >= 0;
+        bt.isMac = navigator.platform.indexOf('Mac') >= 0;
+        bt.isWin = navigator.platform.indexOf('Win') >= 0;
+        bt.isN4 = (navigator.userAgent.indexOf('Mozilla/4.') >= 0) && ! bt.isIE;
+        bt.isIEWin = bt.versIE > 0 && bt.isWin;
+        if (navigator.appVersion.indexOf('MSIE') < 0 || ! bt.isMac || bt.versIE >= 5) {
+            bt.doDHTML = true;
+            bt.isOpera = navigator.userAgent.indexOf(' Opera ') >= 0;
+            bt.isKonq = navigator.userAgent.indexOf(' Konqueror') >= 0;
+        }
+    }
+    return bt;
+}
+
+// fixes for javascript < 1.2
+if (! Array.prototype.push) {
+    Array.prototype.push = function(val) {
+        this[this.length] = val;
+        return this.length;
+    }
+    Array.prototype.pop = function() {
+        var val = this[this.length-1];
+        this.length -= 1;
+        return val;
+    }
+}
+
+
+/* **********************************************
+ *     geometry classes
+ * ******************************************** */
+
+/*
+ * Size class
+ */
+function Size(w, h) {
+    this.width = parseFloat(w);
+    this.height = parseFloat(h);
+    return this;
+}
+Size.prototype.toString = function() {
+    return this.width + "x" + this.height;
+}
+Size.prototype.equals = function(other) {
+	return (this.width == other.width
+        &&  this.height == other.height)
+    }
+
+/*
+ * Position class
+ */
+function Position(x, y) {
+    this.x = parseFloat(x);
+    this.y = parseFloat(y);
+    return this;
+}
+Position.prototype.toString = function() {
+    return this.x + "," + this.y;
+}
+Position.prototype.equals = function(other) {
+	return (this.x == other.x
+        &&  this.y == other.y)
+}
+/*
+ * Rectangle class
+ */
+function Rectangle(x, y, w, h) {
+	if (typeof x == "object") {
+		// assume x and y are Position
+		this.x = x.x;
+		this.y = x.y;
+		this.width = y.x - x.x;
+		this.height = y.y - x.y;
+		return this;
+	}
+    this.x = parseFloat(x);
+    this.y = parseFloat(y);
+    this.width = parseFloat(w);
+    this.height = parseFloat(h);
+    return this;
+}
+Rectangle.prototype.toString = function() {
+    return this.width+"x"+this.height+"@"+this.x+","+this.y;
+}
+Rectangle.prototype.copy = function() {
+    // returns a copy of this Rectangle
+    return new Rectangle(this.x, this.y, this.width, this.height);
+}
+Rectangle.prototype.getPosition = function() {
+    // returns the position of this Rectangle
+    return new Position(this.x, this.y);
+}
+Rectangle.prototype.getPt1 = Rectangle.prototype.getPosition;
+// returns the upper left corner position
+
+Rectangle.prototype.getPt2 = function() {
+    // returns the lower right corner position of this Rectangle
+    return new Position(this.x + this.width, this.y + this.height);
+}
+Rectangle.prototype.setPt1 = function(pos) {
+    // sets the upper left corner to position pos
+    this.x = pos.x;
+    this.y = pos.y;
+    return this;
+}
+Rectangle.prototype.setPt2 = function(pos) {
+    // sets the lower right corner to position pos
+    this.width = pos.x - this.x;
+    this.height = pos.y - this.y;
+    return this;
+}
+Rectangle.prototype.getCenter = function() {
+    // returns the center position of this Rectangle
+    return new Position(this.x + this.width / 2, this.y + this.height / 2);
+}
+Rectangle.prototype.setCenter = function(pos) {
+    // moves this Rectangle's center to position pos
+    this.x = pos.x - this.width / 2;
+    this.y = pos.y - this.height / 2;
+    return this;
+}
+Rectangle.prototype.getSize = function() {
+    // returns the size of this Rectangle
+    return new Size(this.width, this.height);
+}
+Rectangle.prototype.equals = function(other) {
+    // equal props
+    return (this.getPosition().equals(other.getPosition())
+        &&  this.getSize().equals(other.getSize())
+        );
+}
+Rectangle.prototype.getArea = function() {
+    // returns the area of this Rectangle
+    return (this.width * this.height);
+}
+Rectangle.prototype.normalize = function() {
+    // eliminates negative width and height
+    var p = this.getPt2();
+    this.x = Math.min(this.x, p.x);
+    this.y = Math.min(this.y, p.y);
+    this.width = Math.abs(this.width);
+    this.height = Math.abs(this.height);
+    return this;
+}
+Rectangle.prototype.containsPosition = function(pos) {
+    // returns if Position "pos" lies inside of this rectangle
+    return ((pos.x >= this.x)
+        && (pos.y >= this.y)
+    && (pos.x <= this.x + this.width)
+    && (pos.y <= this.y + this.width)
+    );
+}
+Rectangle.prototype.containsRect = function(rect) {
+    // returns if rectangle "rect" is contained in this rectangle
+    return (this.containsPosition(rect.getPt1()) 
+        && this.containsPosition(rect.getPt2()));
+}
+Rectangle.prototype.stayInside = function(rect) {
+    // changes this rectangle's x/y values so it stays inside of rectangle rect
+    // keeping the proportions
+    if (this.x < rect.x) this.x = rect.x;
+    if (this.y < rect.y) this.y = rect.y;
+    if (this.x + this.width > rect.x + rect.width) 
+        this.x = rect.x + rect.width - this.width;
+    if (this.y + this.height > rect.y + rect.height)
+        this.y = rect.y + rect.height - this.height;
+    return this;
+}
+Rectangle.prototype.clipTo = function(rect) {
+    // clips this rectangle so it stays inside of rectangle rect
+    var p1 = rect.getPt1();
+    var p2 = rect.getPt2();
+    var this2 = this.getPt2();
+    this.setPt1(new Position(Math.max(this.x, p1.x), Math.max(this.y, p1.y)));
+    this.setPt2(new Position(Math.min(this2.x, p2.x), Math.min(this2.y, p2.y)));
+    return this;
+}
+Rectangle.prototype.intersect = function(rect) {
+    // returns the intersection of the given Rectangle and this one
+    // FIX ME: not really, it should return null if there is no overlap 
+    var sec = rect.copy();
+    if (sec.x < this.x) {
+        sec.width = sec.width - (this.x - sec.x);
+        sec.x = this.x;
+    }
+    if (sec.y < this.y) {
+        sec.height = sec.height - (this.y - sec.y);
+        sec.y = this.y;
+    }
+    if (sec.x + sec.width > this.x + this.width) {
+        sec.width = (this.x + this.width) - sec.x;
+    }
+    if (sec.y + sec.height > this.y + this.height) {
+        sec.height = (this.y + this.height) - sec.y;
+    }
+    return sec;
+}
+Rectangle.prototype.fit = function(rect) {
+    // returns a Rectangle that fits into this one (by moving first)
+    var sec = rect.copy();
+    sec.x = Math.max(sec.x, this.x);
+    sec.y = Math.max(sec.y, this.x);
+    if (sec.x + sec.width > this.x + this.width) {
+        sec.x = this.x + this.width - sec.width;
+    }
+    if (sec.y + sec.height > this.y + this.height) {
+        sec.y = this.y + this.height - sec.height;
+    }
+    return sec.intersect(this);
+}
+
+/*
+ * Transform class
+ *
+ * defines a class of affine transformations
+ */
+function Transform() {
+    this.m00 = 1.0;
+    this.m01 = 0.0;
+    this.m02 = 0.0;
+    this.m10 = 0.0;
+    this.m11 = 1.0;
+    this.m12 = 0.0;
+    this.m20 = 0.0;
+    this.m21 = 0.0;
+    this.m22 = 1.0;
+    return this;
+}
+Transform.prototype.concat = function(traf) {
+    // add Transform traf to this Transform
+    for (var i = 0; i < 3; i++) {
+        for (var j = 0; j < 3; j++) {
+            var c = 0.0;
+            for (var k = 0; k < 3; k++) {
+                c += traf["m"+i+k] * this["m"+k+j];
+            }
+            this["m"+i+j] = c;
+        }
+    }
+    return this;
+}
+Transform.prototype.transform = function(rect) {
+    // returns transformed Rectangle or Position with this Transform applied
+    var x = this.m00 * rect.x + this.m01 * rect.y + this.m02;
+    var y = this.m10 * rect.x + this.m11 * rect.y + this.m12;
+    if (rect.width) {
+        // transform the other corner points
+        var pt2 = rect.getPt2();
+        var x2 = this.m00 * pt2.x + this.m01 * pt2.y + this.m02;
+        var y2 = this.m10 * pt2.x + this.m11 * pt2.y + this.m12;
+        var width = x2 - x;
+        var height = y2 - y;
+        return new Rectangle(x, y, width, height);
+    }
+    return new Position(x, y);
+}
+Transform.prototype.invtransform = function(rect) {
+    // returns transformed Rectangle or Position with the inverse of this Transform applied
+    var det = this.m00 * this.m11 - this.m01 * this.m10;
+    var x = (this.m11 * rect.x - this.m01 * rect.y - this.m11 * this.m02 + this.m01 * this.m12) / det;
+    var y = (- this.m10 * rect.x + this.m00 * rect.y + this.m10 * this.m02 - this.m00 * this.m12) / det;
+    if (rect.width) {
+        /* transforming width and height like points seems to be wrong 
+        var width = (this.m11 * rect.width - this.m01 * rect.height - this.m11 * this.m02 + this.m01 * this.m12) / det;
+        var height = (- this.m10 * rect.width + this.m00 * rect.height + this.m10 * this.m02 - this.m00 * this.m12) / det;
+        */
+        // transform the other corner points
+        var pt2 = rect.getPt2();
+        var x2 = (this.m11 * pt2.x - this.m01 * pt2.y - this.m11 * this.m02 + this.m01 * this.m12) / det;
+        var y2 = (- this.m10 * pt2.x + this.m00 * pt2.y + this.m10 * this.m02 - this.m00 * this.m12) / det;
+        var width = x2 - x;
+        var height = y2 - y;
+        return new Rectangle(x, y, width, height);
+    }
+    return new Position(x, y);
+}
+function getRotation(angle, pos) {
+    // returns a Transform that is a rotation by angle degrees around [pos.x, pos.y]
+    var traf = new Transform();
+    if (angle != 0) {
+        var t = 2.0 * Math.PI * parseFloat(angle) / 360.0;
+        traf.m00 = Math.cos(t);
+        traf.m01 = - Math.sin(t);
+        traf.m10 = Math.sin(t);
+        traf.m11 = Math.cos(t);
+        traf.m02 = pos.x - pos.x * Math.cos(t) + pos.y * Math.sin(t);
+        traf.m12 = pos.y - pos.x * Math.sin(t) - pos.y * Math.cos(t);
+    }
+    return traf;
+}
+Transform.prototype.getRotation = getRotation;
+function getTranslation(pos) {
+    // returns a Transform that is a translation by [pos.x, pos,y]
+    var traf = new Transform();
+    traf.m02 = pos.x;
+    traf.m12 = pos.y;
+    return traf;
+}
+Transform.prototype.getTranslation = getTranslation;
+function getScale(size) {
+    // returns a Transform that is a scale by [size.width, size.height]
+    var traf = new Transform();
+    traf.m00 = size.width;
+    traf.m11 = size.height;
+    return traf;
+}
+Transform.prototype.getScale = getScale;
+
+
+/*
+ *  parameters class
+ */
+
+function Parameters() {
+	this.params = new Object();
+	this.PARAM_ALL = 65535;
+	return this;
+}
+Parameters.prototype.define = function(name, defaultValue, detail) {
+    // create a new parameter with a name and a default value
+    if (!this.params[name]) this.params[name] = new Object();
+    this.params[name].defaultValue = defaultValue;
+    this.params[name].hasValue = false;
+    this.params[name].value = defaultValue;
+    this.params[name].detail = detail;
+    return this.params[name];
+}
+Parameters.prototype.reset = function(name) {
+    // resets the given parameter to its default value
+    if (!this.params[name]) {
+    		alert("Could not reset non-existing parameter '" + name + "'");
+		return false;
+    }
+    this.params[name].hasValue = false;
+    this.params[name].value = this.params[name].defaultValue;
+    return this.params[name];
+}
+Parameters.prototype.resetAll = function() {
+    // resets all parameters to their default values
+    for (var p in this.params) {
+    		this.reset(p);
+    	}
+    return true;
+}
+Parameters.prototype.remove = function(name) {
+    if (!defined(this.params[name])) return false;
+    delete this.params[name];
+    return true;
+}
+Parameters.prototype.get = function(name) {
+    // returns the named parameter value or its default value
+    if (!defined(this.params[name])) return null;
+    return this.params[name].hasValue ? this.params[name].value : this.params[name].defaultValue;
+}
+Parameters.prototype.set = function(name, value, relative) {
+    // sets parameter value (relative values with +/- if relative=true)
+    if (!defined(this.params[name])) return null;
+    var p = this.params[name];
+    if (relative && value.slice) {
+    		// value is a string -- check if it starts with +/-
+        var sign = value.slice(0, 1);
+        if (sign == '+') {
+            p.value = parseFloat(p.value) + parseFloat(value.slice(1));
+        } else if (sign == '-') {
+            p.value = parseFloat(p.value) - parseFloat(value.slice(1));
+        } else {
+            p.value = value;
+        }
+    } else {
+    		p.value = value;
+    	}
+    p.hasValue = true;
+    return p.value;
+}
+Parameters.prototype.isSet = function(name) {
+    // returns if the parameter's value has been set
+    if (!defined(this.params[name])) return null;
+    return this.params[name].hasValue;
+}
+Parameters.prototype.getAll = function(detail) {
+    // returns a string of all parameters in query format
+    if (!detail) detail = this.PARAM_ALL;
+    var pa = new Array();
+    for (p in this.params) {
+        if (((this.params[p].detail & detail) > 0)
+        && (this.params[p].hasValue)) {
+            var val = this.params[p].value;
+            if (val != "") {
+                pa.push(p + "=" + val);
+            }
+        }
+    }
+    return pa.join("&");
+}
+Parameters.prototype.parse = function(query) {
+    // gets parameter values from query format string
+    var pa = query.split("&");
+    for (var i = 0; i < pa.length; i++) {
+        var keyval = pa[i].split("=");
+        if (keyval.length == 2) {
+            this.set(keyval[0], keyval[1]);
+        }
+    }
+}
+
+/*
+ * Flags class
+ *
+ * Flags are (hash-) collections of unique strings.
+ */
+function Flags() {
+    this.flags = new Object();
+    return this;
+}
+Flags.prototype.define = function(name, detail) {
+    // create a new flag with a name and detail level
+    this.flags[name] = new Object();
+    this.flags[name].set = false;
+    this.flags[name].detail = detail;
+    return this.flags[name];
+}
+Flags.prototype.get = function(name) {
+	return (this.flags[name]) ? this.flags[name].set : false;
+}
+Flags.prototype.set = function(name, value) {
+	if (!defined(value)) value = true;
+	if (!this.flags[name]) this.flags[name] = new Object;
+	this.flags[name].set = value;
+}
+Flags.prototype.reset = function(name) {
+	if (!this.flags[name]) this.flags[name] = new Object;
+	this.flags[name].set = false;
+}
+Flags.prototype.toggle = function(name) {
+	if (!this.flags[name]) this.flags[name] = new Object;
+	this.flags[name].set = !this.flags[name].set;
+}
+Flags.prototype.resetAll = function() {
+	for (var f in this.flags) {
+		this.flags[f].set = false;
+	}
+}
+Flags.prototype.parse = function(query, sep) {
+    // sets the flags from the string query
+    if (!sep) sep = ",";
+    var fa = query.split(sep);
+    for (var i = 0; i < fa.length ; i++) {
+        var f = fa[i];
+        if (f != "") {
+            this.set(f);
+        }
+    }
+}
+Flags.prototype.getAll = function(detail, sep) {
+    // returns a string of all flags in query format
+    if (!detail) detail = 255;
+    if (!sep) sep = ",";
+    var fa = new Array();
+    for (f in this.flags) {
+        if (this.flags[f].set) {
+        		// if the flag has a detail level it must match
+        		// otherwise we assume detail=128
+        		if (this.flags[f].detail) {
+	        		if ((this.flags[f].detail & detail) > 0) {
+	        			fa.push(f);
+	        		}
+	        	} else {
+        		  	if ((detail & 128) > 0) {
+        				fa.push(f);
+        			}
+        		}
+        	}
+    }
+    return fa.join(sep);
+}
+
+
+/* **********************************************
+ *     HTML/DOM routines
+ * ******************************************** */
+
+function getElement(tagid, quiet) {
+    // returns the element object with the id tagid
+    var e;
+    if (document.getElementById) {
+        e = document.getElementById(tagid);
+    } else if (document.all) {
+        alert("document.all!");
+        e = document.all[tagid];
+    } else if (document.layers) {
+        e = document.layers[tagid];
+    } 
+    if (e) {
+        return e;
+    } else {
+        if (! quiet) {
+            alert("unable to find element: "+tagid);
+        }
+        return null;
+    }
+}
+
+function getElementPosition(elem) {
+    // returns a Position with the position of the element
+    var x = 0;
+    var y = 0;
+    if (defined(elem.offsetLeft)) {
+        var e = elem;
+        while (e) {
+            if (browserType.isIE) {
+                if (browserType.isMac) {
+                    if (e.offsetParent.tagName == "BODY") {
+                        // IE for Mac extraspecial
+                        x += e.clientLeft;
+                        y += e.clientTop;
+                        break;
+                    }
+                } else {
+                    if ((e.tagName != "TABLE") && (e.tagName != "BODY")) {
+                        x += e.clientLeft;
+                        y += e.clientTop;
+                    }
+                }
+            }
+            x += e.offsetLeft;
+            y += e.offsetTop;
+            e = e.offsetParent;
+        }
+    } else if (defined(elem.x)) {
+        // use .x for other (which?)
+        x = elem.x;
+        y = elem.y;
+    } else if (defined(elem.pageX)) {
+        // use pageX for N4
+        x = elem.pageX;
+        y = elem.pageY;
+    } else {
+        alert("unable to get position of " + elem + " (id:" + elem.id + ")");
+    }
+    return new Position(getInt(x), getInt(y));
+}
+
+function getElementSize(elem) {
+    // returns a Rectangle with the size of the element
+    var width = 0;
+    var height = 0;
+    if (defined(elem.offsetWidth)) {
+        width = elem.offsetWidth;
+        height = elem.offsetHeight;
+    } else if (defined(elem.width)) {
+        width = elem.width;
+        height = elem.height;
+    } else if (defined(elem.clip.width)) {
+        width = elem.clip.width;
+        height = elem.clip.height;
+    } else {
+        alert("unable to get size of " + elem + " (id:" + elem.id + ")");
+    }
+    return new Size(getInt(width), getInt(height));
+}
+
+function getElementRect(elem) {
+    // returns a Rectangle with the size and position of the element
+    // FIX ME: what about borders?
+    var pos = getElementPosition(elem);
+    var size = getElementSize(elem);
+    return new Rectangle(pos.x, pos.y, size.width, size.height);
+}
+
+function moveElement(elem, rect) {
+    // moves and sizes the element
+    if (elem.style) {
+        if (defined(rect.x)) {
+            elem.style.left = Math.round(rect.x) + "px";
+            elem.style.top = Math.round(rect.y) + "px";
+        }
+        if (defined(rect.width)) {
+            elem.style.width = Math.round(rect.width) + "px";
+            elem.style.height = Math.round(rect.height) + "px";
+        }
+    } else if (document.layers) {
+        if (defined(rect.x)) {
+            elem.pageX = getInt(rect.x);
+            elem.pageY = getInt(rect.y);
+        }
+        if (defined(rect.width)) {
+            elem.clip.width = getInt(rect.width);
+            elem.clip.height = getInt(rect.height);
+        }
+    } else {
+        alert("moveElement(): element has no style or layer property!");
+        return false;
+    }
+    return true;
+}
+
+function showElement(elem, show) {
+    // shows or hides the element
+    if (elem.style)
+        elem.style.visibility = show ? "visible" : "hidden";
+    else if (defined(elem.visibility))
+        elem.visibility = show ? "show" : "hide";
+    else
+        alert("showElement(): element has no style or layer property!");
+    return true;
+}
+
+function evtPosition(evt) {
+    // returns the on-screen Position of the Event 
+    var x;
+    var y;
+    evt = (evt) ? evt : window.event;
+    if (!evt) {
+        alert("no event found! " + evt);
+        return;
+        }
+    if (defined(evt.pageX)) {
+        x = parseInt(evt.pageX);
+        y = parseInt(evt.pageY);
+    } else if (defined(evt.clientX)) {
+        x = parseInt(document.body.scrollLeft + evt.clientX);
+        y = parseInt(document.body.scrollTop  + evt.clientY);
+    } else {
+        alert("evtPosition(): don't know how to deal with " + evt);
+        }
+    return new Position(x, y);
+}
+
+function registerEvent(type, elem, handler) {
+    // register the given event handler on the indicated element
+    if (elem.addEventListener) {
+        elem.addEventListener(type, handler, false);    // bubble
+        }
+    else if (elem.attachEvent) {
+        elem.attachEvent("on" + type, handler);
+        }
+    else if (elem.captureEvents) {
+        if (Event) { 
+            t = type.toUpperCase();
+            elem.captureEvents(Event[t]);
+            elem[ "on" + type ] = handler;
+            }
+        }
+    else {
+        alert("Could not register event of type " + type);
+        return false;
+        }
+    return true;
+    }
+    
+function unregisterEvent(type, elem, handler) {
+    // unregister the given event handler from the indicated element
+    if (elem.removeEventListener) {
+        elem.removeEventListener(type, handler, false);
+            }
+    else if (elem.detachEvent) {
+        elem.detachEvent("on" + type, handler);
+        }
+    else if (elem.releaseEvents) {
+        if (Event) { 
+            t = type.toUpperCase();
+            elem.releaseEvents(Event[t]);
+            elem[ "on" + type ] = null;
+            }
+        }
+    else {
+        alert("Could not register event of type " + type);
+        return false;
+        }
+    return true;
+}
+
+function registerEventById(type, id, handler) {
+    registerEvent(type, getElement(id), handler);
+    }
+
+function unregisterEventById(type, id, handler) {
+    unregisterEvent(type, getElement(id), handler);
+    }
+
+function stopEvent(e) {
+    if (!e) var e = window.event;
+    e.cancelBubble = true;
+    if (e.stopPropagation) e.stopPropagation();
+    return false;
+}
+
+function getEventSrc(e) {
+    if (e.target) return e.target;
+    if (e.srcElement) return e.srcElement;
+}
+
+// old registerXXYY API for compatibility
+function registerMouseDown(elem, handler) {
+    return registerEvent("mousedown", elem, handler);
+}
+function unregisterMouseDown(elem, handler) {
+    return unregisterEvent("mousedown", elem, handler);
+}
+function registerMouseMove(elem, handler) {
+    return registerEvent("mousemove", elem, handler);
+}
+function unregisterMouseMove(elem, handler) {
+    return unregisterEvent("mousemove", elem, handler);
+}
+function registerKeyDown(handler) {
+    return registerEvent("keypress", elem, handler);
+}
+
+
+function getWinSize() {
+    // returns a Size with the current window size (mostly from www.quirksmode.org)
+    var wsize = new Size(100, 100);
+    if (defined(self.innerHeight))  {
+        // all except Explorer
+        if ((self.innerWidth == 0)||(self.innerHeight == 0)) {
+            // Safari 1.2 (and other) bug
+            if (parent) {
+                wsize.height = parent.innerHeight;
+                wsize.width = parent.innerWidth;
+            }
+        } else {
+            wsize.width = self.innerWidth;
+            wsize.height = self.innerHeight;
+        }
+    } else if (document.documentElement && document.documentElement.clientHeight) {
+        // Explorer 6 Strict Mode
+        wsize.width = document.documentElement.clientWidth;
+        wsize.height = document.documentElement.clientHeight;
+    } else if (document.body) {
+        // other Explorers
+        wsize.width = document.body.clientWidth;
+        wsize.height = document.body.clientHeight;
+    }
+    return wsize;
+}
+
+function getWinRect() {
+    var size = getWinSize();
+    return new Rectangle(0, 0, size.width, size.height);
+}
+    
+function openWin(url, name, params) {
+    // open browser window
+    var ow = window.open(url, name, params);
+    ow.focus();
+}
+
+/* **********************************************
+ *     cookie class
+ * ******************************************** */
+
+function Cookie() {
+    return this.read();
+}
+
+Cookie.prototype.read = function() {
+    var s = document.cookie;
+    var lines = s.split("; ");  // semicolon and space for all browsers?
+    for (var i in lines) {
+        var line = lines[i];
+        var sep = line.indexOf("=");
+        if (sep != -1) this.add(
+            line.substr(0, sep),
+            line.substr(sep + 1)
+            );
+        }
+	return this;
+}
+
+Cookie.prototype.store = function() {
+    var lines = new Array();
+    for (var i in this) {
+        var item = this[i];
+        if (typeof(item) == typeof(lines)) // Array
+            lines.push(i + "=" + item.join(","));
+        else if (typeof(item) != "function") // single item
+            lines.push(i + "=" + item);
+        }
+    // var s = lines.join(";")
+	for (line in lines) document.cookie = lines[line];
+    return this;
+	}
+
+Cookie.prototype.add = function(key, value) {
+    value = value.toString();
+    if (value.indexOf(",") == -1) 
+            this[key] = value;  // single value
+        else
+            this[key] = value.split(",");   // list of values
+    return this[key];
+    }
+
+Cookie.prototype.get = function(key) {
+    return this[key];
+    }
+
+Cookie.prototype.addbool = function(key, value) {
+    this[key] = Boolean(value).toString();
+    return this[key];
+    }
+
+Cookie.prototype.getbool = function(key) {
+    var val = this[key];
+    return (val > "") && (val != "0") && (val != "false");
+    }
+
+Cookie.prototype.remove = function(key) {
+    delete this[key];
+    }
+
+function Slider(id, valMin, valMax, valStart, stepSize, onChange) {
+    // a (horizontal) slider widget
+    this.id = id;
+    this.elem   = getElement(id);
+    this.slider = getElement(id + "-slider");   // the slider handle
+    this.input  = getElement(id + "-input", 1); // optional input field
+    this.bar    = getElement(id + "-bar");      // the slider bar 
+    this.barRect = getElementRect(this.bar);
+    this.sliderRect = getElementRect(this.slider);
+    this.xMin = this.barRect.x;
+    this.xMax = this.xMin + this.barRect.width; 
+    this.xDiff = this.xMax - this.xMin; 
+    this.Y = this.barRect.getCenter().y;        // middle axis of bar 
+    this.valMin = valMin;
+    this.valMax = valMax;
+    this.valDiff = Math.abs(valMax - valMin);
+    this.valStart = valStart;
+    this.value = valStart;
+    this.stepSize = stepSize;
+    this.valueLabel  = getElement(id + "-value", 1);
+    this.valMinLabel = getElement(id + "-valmin", 1);
+    this.valMaxLabel = getElement(id + "-valmax", 1);
+    this.onChange = onChange ? onChange : function() {};
+    this.update();
+    this.activate();
+    sliders[id + '-slider'] = this; // make a handle to the object
+    return this;
+    }
+
+Slider.prototype.show = function(show) {
+    showElement(this.elem, show);
+    this.activate();
+    }
+    
+Slider.prototype.activate = function() {
+    this.setupEvents();
+    }
+
+Slider.prototype.deactivate = function() {
+    unregisterEvent("mousedown", this.slider, this.onDragStart);
+    }
+
+Slider.prototype.reset = function() {
+    this.setValue(this.startVal);
+    }
+
+Slider.prototype.setValue = function(newVal) {
+    // sets slider to new value and updates
+    this.value = newVal;
+    this.update();
+    }
+
+Slider.prototype.calcValue = function() {
+    // calculates value from slider position
+    var xSlider = this.sliderRect.getCenter().x - this.xMin;
+    this.value = xSlider * this.valDiff / this.xDiff;
+    return this.value;
+    }
+
+Slider.prototype.update = function() {
+    // updates slider position to new value
+    var xSlider = this.value * this.xDiff / this.valDiff;
+    moveElement(this.slider, this.sliderRect.setCenter(
+        new Position(xSlider + this.xMin, this.Y)));
+    var strVal = this.value.toString();
+    if (this.valueLabel) this.valueLabel.innerHTML = strVal;
+    if (this.input) this.input.value = strVal;
+    }
+
+Slider.prototype.setupEvents = function() {
+    // installs all event callbacks
+    registerEvent("mousedown", this.slider, this.onDragStart);
+    }
+
+Slider.prototype.onDragStart = function(evt) {
+    var slider = sliders[this.id];
+    activeSlider = slider;
+    unregisterEvent("mousedown", slider.slider, slider.onDragStart);
+    registerEvent("mousemove", document, slider.onDrag);
+    registerEvent("mouseup",   document, slider.onDragEnd);
+    slider.startPos = evtPosition(evt);
+    slider.startX = slider.sliderRect.getCenter().x;
+    return stopEvent(evt);
+    }
+
+Slider.prototype.onDrag = function(evt) {
+    var slider = activeSlider;
+    var pos = evtPosition(evt);
+    var currX = slider.slider
+    var newX = pos.x - slider.startPos + slider.startX;
+    if (newX < slider.xMin) newX = slider.xMin;
+    if (newX > slider.xMax) newX = slider.xMax;
+    moveElement(slider.slider, slider.sliderRect.setCenter(
+        new Position(newX, slider.Y)));
+    return stopEvent(evt);
+    }
+
+Slider.prototype.onDragEnd = function(evt) {
+    var slider = activeSlider;
+    unregisterEvent("mousemove", document, slider.onDrag);
+    unregisterEvent("mouseup",   document, slider.onDragEnd);
+    slider.onChange(slider.calcValue());
+    activeSlider = null;
+    return stopEvent(evt);
+    }
+
+Slider.prototype.onInputChange = function() {
+    var slider = activeSlider;
+    slider.onChange(s.value);
+    }
+
+// :tabSize=4:indentSize=4:noTabs=true:
+
Binary file client/digitallibrary/greyskin/bg.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/bg.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,63 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg7651"
+   sodipodi:version="0.32"
+   inkscape:version="0.42.2"
+   sodipodi:docbase="/Volumes/User/Users/casties/Desktop/web-devel/digibutton"
+   sodipodi:docname="bg.svg">
+  <defs
+     id="defs7653" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.197802"
+     inkscape:cx="8.0000000"
+     inkscape:cy="8.0000000"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="688"
+     inkscape:window-height="481"
+     inkscape:window-x="8"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata7656">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       style="opacity:1.0000000;fill:#707070;fill-opacity:0.44078943;stroke:none;stroke-width:1.5000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:0.50331128"
+       id="rect7659"
+       width="12.000000"
+       height="11.432178"
+       x="2.0000000"
+       y="2.0000000"
+       inkscape:export-xdpi="15.000000"
+       inkscape:export-ydpi="15.000000" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/birds-eye.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/birds-eye.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,98 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\Digilib\greyskin"
+   sodipodi:docname="birds-eye.svg"
+   inkscape:export-filename="C:\digilib\greyskin\birds-eye.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16"
+     inkscape:cx="35.156972"
+     inkscape:cy="33.422353"
+     inkscape:current-layer="layer3"
+     showgrid="false"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1024"
+     inkscape:window-height="749"
+     inkscape:window-x="-4"
+     inkscape:window-y="-4" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:#707070;fill-opacity:0.35526314;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.50331128;opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none"
+       d="M 23.6875 3.53125 C 13.517688 3.9243803 5.3749998 12.44746 5.375 22.875 C 5.375 33.552802 13.927192 42.218749 24.4375 42.21875 C 34.947807 42.21875 43.468749 33.552802 43.46875 22.875 C 43.46875 12.197198 34.947807 3.53125 24.4375 3.53125 C 24.191165 3.53125 23.931575 3.5218149 23.6875 3.53125 z M 12.1875 8.5625 C 20.242446 8.5625 28.288805 8.5625 36.34375 8.5625 C 36.165958 16.203164 36.198276 28.144598 35.96875 37.4375 C 28.043342 37.4375 20.112909 37.4375 12.1875 37.4375 C 12.1875 27.807871 12.1875 18.192129 12.1875 8.5625 z "
+       id="path2396" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.5000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
+       d="M 17.000000,13.428571 L 17.000000,33.000000 L 34.000000,23.000000 L 17.000000,13.428571 z "
+       id="path7614" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 24.5,21.513718 C 23.529478,19.451202 20.04955,17.297524 17.924811,17.280601 C 14.551956,17.154256 13.115556,19.712673 9.7679007,19.880851 C 9.175544,19.995079 7.3045086,19.191243 8.1201307,20.071917 C 9.3529217,21.839129 13.189646,20.035951 15.217464,19.753732 C 17.989372,19.514959 19.047506,20.331214 21.808507,21.214122 C 23.64299,22.764883 23.175698,25.542255 24.233985,26.252244 M 24.5,21.513718 C 25.470522,19.451202 28.636456,17.422524 30.761195,17.405601 C 34.13405,17.279256 35.444825,19.982025 38.792481,20.150203 C 39.384927,20.264152 41.696015,19.191654 40.879073,20.071761 C 39.651613,21.816668 35.758369,19.964307 33.748194,19.710782 C 30.869949,19.485317 29.793252,19.993322 26.924411,20.883904 C 24.731743,21.503029 26.059266,25.524828 24.171484,26.157098"
+       id="path2398"
+       sodipodi:nodetypes="cccccccccccccc" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/blue.png has changed
Binary file client/digitallibrary/greyskin/brightness-on.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/brightness-on.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,157 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="brightness-on.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\brightness-on.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       id="path2396"
+       sodipodi:cx="30.214285"
+       sodipodi:cy="26.214285"
+       sodipodi:rx="17.928572"
+       sodipodi:ry="18.214285"
+       d="M 48.142857 26.214285 A 17.928572 18.214285 0 1 1  12.285713,26.214285 A 17.928572 18.214285 0 1 1  48.142857 26.214285 z"
+       transform="matrix(1.062015,0,0,1.062015,-7.659466,-4.965116)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <g
+       id="g2978"
+       style="fill:#ffffff;fill-opacity:0.98214287">
+      <path
+         transform="translate(-10.42857,10.28571)"
+         d="M 44.857142 12.5 A 10.214286 10.214286 0 1 1  24.428571,12.5 A 10.214286 10.214286 0 1 1  44.857142 12.5 z"
+         sodipodi:ry="10.214286"
+         sodipodi:rx="10.214286"
+         sodipodi:cy="12.5"
+         sodipodi:cx="34.642857"
+         id="path2955"
+         style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:0.98214287;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         sodipodi:type="arc" />
+      <g
+         id="g2968"
+         style="fill:#ffffff;fill-opacity:0.98214287">
+        <rect
+           style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:0.98214287;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           id="rect2959"
+           width="2.4285715"
+           height="33"
+           x="23"
+           y="6" />
+        <rect
+           style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:0.98214287;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           id="rect2966"
+           width="2.4285715"
+           height="33"
+           x="-24"
+           y="7.500001"
+           transform="matrix(0,-1,1,0,0,0)" />
+      </g>
+      <g
+         transform="matrix(0.707107,0.707107,-0.707107,0.707107,23.26192,-10.5061)"
+         id="g2972"
+         style="display:inline;fill:#ffffff;fill-opacity:0.98214287">
+        <rect
+           style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:0.98214287;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           id="rect2974"
+           width="2.4285715"
+           height="33"
+           x="23"
+           y="6" />
+        <rect
+           style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:0.98214287;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           id="rect2976"
+           width="2.4285715"
+           height="33"
+           x="-24"
+           y="7.500001"
+           transform="matrix(0,-1,1,0,0,0)" />
+      </g>
+    </g>
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/brightness.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/brightness.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,157 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="brightness.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\brightness.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       id="path2396"
+       sodipodi:cx="30.214285"
+       sodipodi:cy="26.214285"
+       sodipodi:rx="17.928572"
+       sodipodi:ry="18.214285"
+       d="M 48.142857 26.214285 A 17.928572 18.214285 0 1 1  12.285713,26.214285 A 17.928572 18.214285 0 1 1  48.142857 26.214285 z"
+       transform="matrix(1.062015,0,0,1.062015,-7.659466,-4.965116)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <g
+       id="g3803"
+       style="fill:#919191;fill-opacity:1">
+      <path
+         transform="translate(-10.42857,10.28571)"
+         d="M 44.857142 12.5 A 10.214286 10.214286 0 1 1  24.428571,12.5 A 10.214286 10.214286 0 1 1  44.857142 12.5 z"
+         sodipodi:ry="10.214286"
+         sodipodi:rx="10.214286"
+         sodipodi:cy="12.5"
+         sodipodi:cx="34.642857"
+         id="path2955"
+         style="opacity:1;color:#000000;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         sodipodi:type="arc" />
+      <g
+         id="g2968"
+         style="fill:#919191;fill-opacity:1">
+        <rect
+           style="opacity:1;color:#000000;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           id="rect2959"
+           width="2.4285715"
+           height="33"
+           x="23"
+           y="6" />
+        <rect
+           style="opacity:1;color:#000000;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           id="rect2966"
+           width="2.4285715"
+           height="33"
+           x="-24"
+           y="7.500001"
+           transform="matrix(0,-1,1,0,0,0)" />
+      </g>
+      <g
+         transform="matrix(0.707107,0.707107,-0.707107,0.707107,23.26192,-10.5061)"
+         id="g2972"
+         style="display:inline;fill:#919191;fill-opacity:1">
+        <rect
+           style="opacity:1;color:#000000;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           id="rect2974"
+           width="2.4285715"
+           height="33"
+           x="23"
+           y="6" />
+        <rect
+           style="opacity:1;color:#000000;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           id="rect2976"
+           width="2.4285715"
+           height="33"
+           x="-24"
+           y="7.500001"
+           transform="matrix(0,-1,1,0,0,0)" />
+      </g>
+    </g>
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/calibration-x.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/calibration-x.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,139 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\Digilib\greyskin"
+   sodipodi:docname="calibration-x.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\brightness.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.791667"
+     inkscape:cx="24"
+     inkscape:cy="24.142434"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       id="path2396"
+       sodipodi:cx="30.214285"
+       sodipodi:cy="26.214285"
+       sodipodi:rx="17.928572"
+       sodipodi:ry="18.214285"
+       d="M 48.142857 26.214285 A 17.928572 18.214285 0 1 1  12.285713,26.214285 A 17.928572 18.214285 0 1 1  48.142857 26.214285 z"
+       transform="matrix(1.062015,0,0,1.062015,-7.659466,-4.965116)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <rect
+       style="opacity:1;color:#000000;fill:#ffa060;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.4133637;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="rect1503"
+       width="0.093103863"
+       height="10.204791"
+       x="9.2002144"
+       y="18.706682" />
+    <rect
+       style="opacity:1;color:#000000;fill:#ffa060;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.4133637;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="rect1505"
+       width="0.093103863"
+       height="10.204791"
+       x="24.200214"
+       y="18.706682" />
+    <rect
+       style="opacity:1;color:#000000;fill:#ffa060;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.4133637;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="rect1507"
+       width="0.093103863"
+       height="10.204791"
+       x="39.200214"
+       y="18.706682" />
+    <rect
+       style="opacity:1;color:#000000;fill:#ffa060;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.30705214;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="rect1511"
+       width="0.22194758"
+       height="3.6609969"
+       x="32.124527"
+       y="18.653526" />
+    <rect
+       style="opacity:1;color:#000000;fill:#ffa060;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.30705214;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="rect1513"
+       width="0.22194758"
+       height="3.6609969"
+       x="16.653526"
+       y="18.653526" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/calibration-y.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/calibration-y.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,143 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\Digilib\greyskin"
+   sodipodi:docname="calibration-y.svg"
+   inkscape:export-filename="C:\digilib\greyskin\calibration-y.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.791667"
+     inkscape:cx="24"
+     inkscape:cy="25.408925"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       id="path2396"
+       sodipodi:cx="30.214285"
+       sodipodi:cy="26.214285"
+       sodipodi:rx="17.928572"
+       sodipodi:ry="18.214285"
+       d="M 48.142857 26.214285 A 17.928572 18.214285 0 1 1  12.285713,26.214285 A 17.928572 18.214285 0 1 1  48.142857 26.214285 z"
+       transform="matrix(1.062015,0,0,1.062015,-7.659466,-4.965116)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <g
+       id="g1515"
+       transform="matrix(0,-1,1,0,0.437689,47.54928)">
+      <rect
+         y="18.706682"
+         x="9.2002144"
+         height="10.204791"
+         width="0.093103863"
+         id="rect1503"
+         style="opacity:1;color:#000000;fill:#ffa060;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.4133637;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         y="18.706682"
+         x="24.200214"
+         height="10.204791"
+         width="0.093103863"
+         id="rect1505"
+         style="opacity:1;color:#000000;fill:#ffa060;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.4133637;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         y="18.706682"
+         x="39.200214"
+         height="10.204791"
+         width="0.093103863"
+         id="rect1507"
+         style="opacity:1;color:#000000;fill:#ffa060;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.4133637;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         y="18.653526"
+         x="32.124527"
+         height="3.6609969"
+         width="0.22194758"
+         id="rect1511"
+         style="opacity:1;color:#000000;fill:#ffa060;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.30705214;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         y="18.653526"
+         x="16.653526"
+         height="3.6609969"
+         width="0.22194758"
+         id="rect1513"
+         style="opacity:1;color:#000000;fill:#ffa060;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.30705214;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    </g>
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/cat.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/cat.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,131 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="cat.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\cat.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.188034"
+     inkscape:cx="21.038579"
+     inkscape:cy="24.285714"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <sodipodi:guide
+       orientation="vertical"
+       position="11.857143"
+       id="guide2331" />
+    <sodipodi:guide
+       orientation="vertical"
+       position="36.735676"
+       id="guide2333" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:#707070;fill-opacity:0.35526314;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.50331128;opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none"
+       d="M 23.0625 3.53125 C 13.169888 4.224269 5.3749998 12.649853 5.375 22.875 C 5.375 33.552802 13.927192 42.218749 24.4375 42.21875 C 34.947807 42.21875 43.468749 33.552802 43.46875 22.875 C 43.46875 12.197198 34.947807 3.53125 24.4375 3.53125 C 24.191165 3.53125 23.931575 3.5218149 23.6875 3.53125 C 23.608048 3.5343213 23.516701 3.5271892 23.4375 3.53125 C 23.358917 3.5352791 23.265829 3.5262514 23.1875 3.53125 C 23.148642 3.5337298 23.101295 3.5285323 23.0625 3.53125 z M 13.34375 10.5 L 22.15625 10.5 L 22.15625 20.90625 L 13.34375 20.90625 L 13.34375 10.5 z M 26.6875 10.5 L 35.5 10.5 L 35.5 20.90625 L 26.6875 20.90625 L 26.6875 10.5 z M 13.46875 24.65625 L 22.3125 24.65625 L 22.3125 35.0625 L 13.46875 35.0625 L 13.46875 24.65625 z M 26.75 24.65625 L 35.5625 24.65625 L 35.5625 35.0625 L 26.75 35.0625 L 26.75 24.65625 z "
+       id="path2396" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect2338"
+       width="8.8160076"
+       height="10.410372"
+       x="13.144758"
+       y="10.5" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect2340"
+       width="8.8160076"
+       height="10.410372"
+       x="26.5"
+       y="10.5" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect2342"
+       width="8.8160076"
+       height="10.410372"
+       x="13.287616"
+       y="24.642857" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect2344"
+       width="8.8160076"
+       height="10.410372"
+       x="26.541136"
+       y="24.642857" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.5000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
+       d="M 17.000000,13.428571 L 17.000000,33.000000 L 34.000000,23.000000 L 17.000000,13.428571 z "
+       id="path7614" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline" />
+</svg>
Binary file client/digitallibrary/greyskin/contrast-on.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/contrast-on.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,112 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="brightness-on.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\brightness-on.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       id="path2396"
+       sodipodi:cx="30.214285"
+       sodipodi:cy="26.214285"
+       sodipodi:rx="17.928572"
+       sodipodi:ry="18.214285"
+       d="M 48.142857 26.214285 A 17.928572 18.214285 0 1 1  12.285713,26.214285 A 17.928572 18.214285 0 1 1  48.142857 26.214285 z"
+       transform="matrix(1.062015,0,0,1.062015,-7.659466,-4.965116)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <path
+       style="opacity:1;color:#000000;fill:#000000;fill-opacity:0.98214285;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 23.375 13.03125 C 18.128391 13.497684 14 17.914036 14 23.28125 C 14 28.716305 18.221162 33.19164 23.5625 33.5625 L 23.5625 13.03125 C 23.497118 13.035814 23.440041 13.025468 23.375 13.03125 z "
+       id="path2882" />
+    <path
+       style="opacity:1;color:#000000;fill:#fefefe;fill-opacity:0.98214285;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 25.625,13.001808 C 30.871609,13.468242 35,17.884594 35,23.251808 C 35,28.686863 30.778838,33.162198 25.4375,33.533058 L 25.4375,13.001808 C 25.502882,13.006372 25.559959,12.996026 25.625,13.001808 z "
+       id="path2891" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/contrast.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/contrast.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,112 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="brightness.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\brightness.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       id="path2396"
+       sodipodi:cx="30.214285"
+       sodipodi:cy="26.214285"
+       sodipodi:rx="17.928572"
+       sodipodi:ry="18.214285"
+       d="M 48.142857 26.214285 A 17.928572 18.214285 0 1 1  12.285713,26.214285 A 17.928572 18.214285 0 1 1  48.142857 26.214285 z"
+       transform="matrix(1.062015,0,0,1.062015,-7.659466,-4.965116)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <path
+       style="opacity:1;color:#000000;fill:#7f7f7f;fill-opacity:0.98214287;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 23.375 13.03125 C 18.128391 13.497684 14 17.914036 14 23.28125 C 14 28.716305 18.221162 33.19164 23.5625 33.5625 L 23.5625 13.03125 C 23.497118 13.035814 23.440041 13.025468 23.375 13.03125 z "
+       id="path2882" />
+    <path
+       style="opacity:1;color:#000000;fill:#d2d2d2;fill-opacity:0.98214287;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 25.625,13.001808 C 30.871609,13.468242 35,17.884594 35,23.251808 C 35,28.686863 30.778838,33.162198 25.4375,33.533058 L 25.4375,13.001808 C 25.502882,13.006372 25.559959,12.996026 25.625,13.001808 z "
+       id="path2891" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/corona.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/corona.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
+<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://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg472"
+   sodipodi:version="0.32"
+   width="210mm"
+   height="210mm"
+   sodipodi:docbase="C:\Digilib\greyskin"
+   sodipodi:docname="corona1.svg"
+   inkscape:version="0.43"
+   inkscape:export-filename="C:\Digilib\greyskin\corona1.png"
+   inkscape:export-xdpi="3.8699999"
+   inkscape:export-ydpi="3.8699999">
+  <metadata
+     id="metadata2508">
+    <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="defs474">
+    <linearGradient
+       id="linearGradient6383">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6385" />
+      <stop
+         id="stop6391"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop6387" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient496">
+      <stop
+         style="stop-color:#fcfcfc;stop-opacity:0.47741935;"
+         offset="0"
+         id="stop497" />
+      <stop
+         id="stop2526"
+         offset="0.83177572"
+         style="stop-color:#bdbdbd;stop-opacity:0.2;" />
+      <stop
+         style="stop-color:#404040;stop-opacity:0;"
+         offset="1"
+         id="stop498" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient485">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.50196081;"
+         offset="0"
+         id="stop486" />
+      <stop
+         id="stop2514"
+         offset="0.26168224"
+         style="stop-color:#474747;stop-opacity:0.5032258;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.48387095;"
+         offset="1"
+         id="stop487" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient477">
+      <stop
+         style="stop-color:#ffcb39;stop-opacity:1;"
+         offset="0"
+         id="stop478" />
+      <stop
+         id="stop6394"
+         offset="0.86915886"
+         style="stop-color:#ffe59c;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffcb39;stop-opacity:0;"
+         offset="1"
+         id="stop479" />
+    </linearGradient>
+    <radialGradient
+       xlink:href="#linearGradient477"
+       id="radialGradient480"
+       cx="0.53846157"
+       cy="0.50000000"
+       fx="0.53846157"
+       fy="0.50000000"
+       r="0.66683644"
+       gradientUnits="objectBoundingBox"
+       spreadMethod="pad" />
+    <radialGradient
+       xlink:href="#linearGradient485"
+       id="radialGradient484"
+       cx="293.69321"
+       cy="685.94305"
+       fx="284.35916"
+       fy="748.98859"
+       r="291.13598"
+       gradientUnits="userSpaceOnUse"
+       spreadMethod="pad"
+       gradientTransform="matrix(0.203097,0.358167,-0.311967,0.176899,355.5512,235.3307)" />
+    <radialGradient
+       xlink:href="#linearGradient496"
+       id="radialGradient489"
+       cx="0.49386612"
+       cy="0.48700377"
+       fx="0.49386612"
+       fy="0.48700377"
+       r="0.71423900"
+       gradientUnits="objectBoundingBox"
+       spreadMethod="pad" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient496"
+       id="radialGradient2522"
+       cx="565.23035"
+       cy="576.22406"
+       fx="555.30066"
+       fy="573.31244"
+       r="227.42172"
+       gradientTransform="matrix(-0.541407,-0.758332,1.163093,-0.830405,141.165,1490.071)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient485"
+       id="radialGradient3671"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.203097,0.358167,-0.311967,0.176899,355.5512,235.3307)"
+       spreadMethod="pad"
+       cx="310.76443"
+       cy="786.34125"
+       fx="301.43039"
+       fy="849.38678"
+       r="291.13599" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient496"
+       id="radialGradient3673"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.69009,-0.652739,0.900015,-0.951537,391.167,1497.043)"
+       cx="562.72363"
+       cy="597.58929"
+       fx="562.72363"
+       fy="597.58929"
+       r="227.42172" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient477"
+       id="radialGradient6381"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.592132,0.954487,-0.942161,0.584474,329.2198,8.028518)"
+       spreadMethod="pad"
+       cx="288.15497"
+       cy="136.10474"
+       fx="288.15503"
+       fy="136.10484"
+       r="291.13599" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     inkscape:zoom="0.50262434"
+     inkscape:cx="365.2634"
+     inkscape:cy="286.5522"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="121"
+     inkscape:window-y="101"
+     inkscape:current-layer="layer5" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="glass"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6381);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+       id="path476"
+       d="M 707.05579 362.61322 A 335.4404 335.44043 0 1 1  36.174988,362.61322 A 335.4404 335.44043 0 1 1  707.05579 362.61322 z"
+       sodipodi:cx="371.61539"
+       sodipodi:cy="362.61322"
+       sodipodi:rx="335.4404"
+       sodipodi:ry="335.44043"
+       transform="matrix(0,1.142349,-1.142349,0,790.2569,-58.43568)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;color:#000000;fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.01823568;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="path6426"
+       sodipodi:cx="372.04724"
+       sodipodi:cy="366.07858"
+       sodipodi:rx="274.55893"
+       sodipodi:ry="260.63202"
+       d="M 646.60617 366.07858 A 274.55893 260.63202 0 1 1  97.488312,366.07858 A 274.55893 260.63202 0 1 1  646.60617 366.07858 z"
+       transform="translate(5.968672,5.968672)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="draw"
+     style="display:inline" />
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/debug.js	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,111 @@
+var Debug = null;
+var _now = {};
+
+function element(name, content) {
+	var E = document.createElement(name);
+	if (content) {
+		if (content.nodeType) // it's a node
+			E.appendChild(content)
+		else // it's text
+			E.appendChild(document.createTextNode(content))
+		};
+	return E;
+	}
+	
+function appendElement(node, name, content) {
+	if (node == null || ! node.appendChild)
+        return node;
+	return node.appendChild(element(name,content));
+	}
+
+function getDebug() {
+	if (Debug == null) {
+		Debug = document.getElementById('debug');
+		if (Debug == null) {
+			Debug = appendElement(document.body, 'div');
+			Debug.setAttribute('class', 'debug');
+			Debug.setAttribute('id', 'debug');
+			Debug.innerhtml = '<h3>Debug</h3>';
+			};
+		};
+	return Debug;
+	}
+
+function debug() {
+	var D = getDebug();
+	// return alertObject(D);
+	var msg = "";
+	for (var i = 0; i<arguments.length; i++) msg += arguments[i] + " ";
+	return appendElement(D, "p", msg);
+	}
+
+function debugObject(obj, exclude) {
+	if (exclude == null)
+	    exclude = '';
+	var noConst = exclude.indexOf('const') > -1;
+	var A = new Array();
+	for (var prop in obj) A.push(prop); 
+	A.sort();
+	var D = getDebug();
+	var T = appendElement(D, "table");
+	for (var i = 0; i < A.length; i++) {
+		var key = A[i];
+		var value = obj[key];
+		var type = typeof(value);
+		// exclude specified types
+		if (exclude.indexOf(type) > -1)
+			continue;
+		// exclude uppercase-only properties (= constants)
+		if (noConst && key.search(/^[A-Z0-9_]+$/) > -1)
+			continue;
+		var TR = appendElement(T, "tr");
+		appendElement(TR, "td", element("b", key));
+		appendElement(TR, "td", type); 
+		appendElement(TR, "td", value + ""); 
+		if (type == "function") 
+			appendElement(TR, "td", value.toSource());
+		};
+	}
+
+function strObject(obj) {
+	var res = "";
+	var A = new Array();
+	try {
+		for (var i in obj) A[i] = typeof(obj[i]);
+		}
+	catch(e) { typ = "unknown" };
+    var count = 0;
+	for (var item in A) {
+		count++;
+        typ = A[item];
+		res += item + " (" + typ + "): ";
+		if (typ != "function") res += obj[item];
+		res += "\t";
+        if (count % 4 == 0)
+            res += "\n";
+		}
+	return res;
+	}
+
+function alertObject(obj) {
+	return alert(strObject(obj));
+	}
+
+function alertHTML(obj) {
+	if (obj)
+        return alert(obj.tagName + ".innerHTML:\n" + obj.innerHTML);
+	}
+
+function serialize(xmlobject) {
+	return (new XMLSerializer()).serializeToString(xmlobject);
+	}
+	
+function startTime(s) {
+	_now[s] = new Date();
+	}
+	
+function elapsedTime(s) {
+	var diff = new Date(new Date - _now[s]);
+	debug(s + ": " + diff.getSeconds() + "." + diff.getMilliseconds() + " sec.");
+	}
+
Binary file client/digitallibrary/greyskin/delmark.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/delmark.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,129 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="delmark.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\delmark.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="60"
+     inkscape:window-y="26" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1.0000000;fill:#707070;fill-opacity:0.35526314;fill-rule:evenodd;stroke:#000000;stroke-width:0.52965354;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       id="path2396"
+       sodipodi:cx="30.214285"
+       sodipodi:cy="26.214285"
+       sodipodi:rx="17.928572"
+       sodipodi:ry="18.214285"
+       d="M 48.142857 26.214285 A 17.928572 18.214285 0 1 1  12.285713,26.214285 A 17.928572 18.214285 0 1 1  48.142857 26.214285 z"
+       transform="matrix(1.062015,0.000000,0.000000,1.062015,-7.659466,-4.965116)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <rect
+       style="opacity:1;color:#000000;fill:#818181;fill-opacity:0.98214287;fill-rule:nonzero;stroke:none;stroke-width:1.01823568;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="rect2405"
+       width="18.981764"
+       height="18.981375"
+       x="14.573074"
+       y="13.296871" />
+    <text
+       xml:space="preserve"
+       style="font-size:23.58337593px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.00000036;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="15.091353"
+       y="33.00325"
+       id="text2403"
+       transform="scale(1.074523,0.930646)"><tspan
+         sodipodi:role="line"
+         id="tspan2405"
+         x="15.091353"
+         y="33.00325">1</tspan></text>
+    <rect
+       style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="rect2510"
+       width="30.717447"
+       height="2.8014932"
+       x="-14.440524"
+       y="-34.634766"
+       transform="matrix(0.707107,-0.707107,-0.707107,-0.707107,0,0)" />
+  </g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/digimage-neu.jsp	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,443 @@
+<%@ page language="java" %><%!
+// -- JSP init -------------
+
+// create DocumentBean instance for all JSP requests
+digilib.servlet.DocumentBean docBean = new digilib.servlet.DocumentBean();
+
+// initialize DocumentBean instance in JSP init
+public void jspInit() {
+    try {
+        // set servlet init-parameter
+        docBean.setConfig(getServletConfig());
+    } catch (javax.servlet.ServletException e) {
+        System.out.println(e);
+    }
+}
+// -- end of JSP init -------------
+%><%
+// -- JSP request -------------
+
+// parsing the query
+// -----------------
+digilib.servlet.DigilibRequest dlRequest = new digilib.servlet.DigilibRequest(request);
+docBean.setRequest(dlRequest);
+// check if authentication is needed and redirect if necessary
+docBean.doAuthentication(response);
+// add number of pages
+dlRequest.setValue("pt", docBean.getNumPages());
+// store objects for jsp:include
+pageContext.setAttribute("docBean", docBean, pageContext.REQUEST_SCOPE);
+%><html>
+<head>
+    <title>Digital Document Library NG</title>
+    
+    	<style type="text/css">
+		body		{ background-color: #E0E0E0; color: black; font-size: 8pt }
+		code		{ font-family: monospace; color: blue; }
+		pre		{ color: #006060; }
+		img.png 	{ border: none; }
+		a.icon		{ margin: 0px; padding: 0px; }
+		div.button	{ margin: -4px; padding: 0px; }
+		div#scaler-table { padding-right: 40px; }
+		div#buttons	{ position: absolute; right: 10px; top: 10px; }
+		
+	</style>
+	
+
+    <script type="text/javascript" src="../baselib.js"></script>
+
+    <script type="text/javascript" src="../dllib.js"></script>
+
+<script language="JavaScript">
+
+	function highlightPNG(id, on) {
+		var elem = document.getElementById(id);
+		//var div  = elem.parentNode.parentNode;
+		elem.style.backgroundImage = on 
+			? "url('corona.png')"
+			: null;
+	}
+
+</script>
+
+<script type="text/javascript">
+  base_init();
+  var dlTarget = window.name;
+  var baseUrl = '<%= dlRequest.getAsString("base.url") %>';
+  var toolbarEnabledURL = window.location.href;
+  newParameter('fn', '', 1);
+  newParameter('pn', '1', 1);
+  newParameter('ws', '1.0', 1);
+  newParameter('mo', '', 1);
+  newParameter('mk', '', 3);
+  newParameter('wx', '0.0', 2);
+  newParameter('wy', '0.0', 2);
+  newParameter('ww', '1.0', 2);
+  newParameter('wh', '1.0', 2);
+  newParameter('pt', '<%= dlRequest.getAsString("pt") %>', 1);
+  newParameter('brgt', '0.0', 1);
+  newParameter('cont', '0.0', 1);
+  newParameter('rot', '0.0', 1);
+  newParameter('rgba', '', 1);
+  newParameter('rgbm', '', 1);
+  newParameter('ddpix', '', 1);
+  newParameter('ddpiy', '', 1);
+  document.id='digilib';
+  dl_param_init();
+</script>
+</head>
+
+<body bgcolor="#666666" onload="dl_init();">
+<div id="scaler-table">
+	<% if (dlRequest.hasOption("clop", "noarrows")) {
+	%><jsp:include page="digimage_img_inc.jsp" /><%
+	} else {
+	%><jsp:include page="digimage_tbl_inc.jsp" /><%
+	}
+	%>
+</div>
+
+ <div id="dot0" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="../img/mark1.gif" border="0"></div>
+ <div id="dot1" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="../img/mark2.gif" border="0"></div>
+ <div id="dot2" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="../img/mark3.gif" border="0"></div>
+ <div id="dot3" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="../img/mark4.gif" border="0"></div>
+ <div id="dot4" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="../img/mark5.gif" border="0"></div>
+ <div id="dot5" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="../img/mark6.gif" border="0"></div>
+ <div id="dot6" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="../img/mark7.gif" border="0"></div>
+ <div id="dot7" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="../img/mark8.gif" border="0"></div>
+ <div id="eck1" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="../img/olinks.gif" border="0"></div>
+ <div id="eck2" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="../img/orechts.gif" border="0"></div>
+ <div id="eck3" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="../img/ulinks.gif" border="0"></div>
+ <div id="eck4" style="position:absolute; left:-20; top:100; visibility:hidden"><img src="../img/urechts.gif" border="0"></div>
+ 
+ 
+ <div id="buttons" 
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:showOptions(0);setMark()"
+			>
+
+			<img
+				class="png"
+				id="mark"
+				onmouseover="highlightPNG('mark', 1)"
+				onmouseout="highlightPNG('mark', 0)"
+				title="set a mark"
+				src="mark.png"
+			>
+		</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:removeMark()"
+			>
+
+			<img
+				class="png"
+				id="delmark"
+				onmouseover="highlightPNG('delmark', 1)"
+				onmouseout="highlightPNG('delmark', 0)"
+				title="delete the last mark"
+				src="delmark.png"
+				>
+		</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:getRefWin()"
+			>
+
+			<img
+				class="png"
+				id="reference"
+				onmouseover="highlightPNG('reference', 1)"
+				onmouseout="highlightPNG('reference', 0)"
+				title="get a reference URL"
+				src="reference.png"
+			>
+		</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:zoomBy(1.4)"
+			>
+
+			<img
+				class="png"
+				id="zoom-in"
+				onmouseover="highlightPNG('zoom-in', 1)"
+				onmouseout="highlightPNG('zoom-in', 0)"
+				title="zoom in"
+				src="zoom-in.png"
+			>
+	</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:zoomBy(0.7)"
+			>
+
+			<img
+				class="png"
+				id="zoom-out"
+				onmouseover="highlightPNG('zoom-out', 1)"
+				onmouseout="highlightPNG('zoom-out', 0)"
+				title="zoom out"
+				src="zoom-out.png"
+			>
+	</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:showOptions(0);zoomArea()"
+			>
+
+			<img
+				class="png"
+				id="zoom-area"
+				onmouseover="highlightPNG('zoom-area', 1)"
+				onmouseout="highlightPNG('zoom-area', 0)"
+				title="zoom area"
+				src="zoom-area.png"
+			>
+		</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:zoomFullpage()"
+			>
+
+			<img
+				class="png"
+				id="zoom-full"
+				onmouseover="highlightPNG('zoom-full', 1)"
+				onmouseout="highlightPNG('zoom-full', 0)"
+				title="view the whole image"
+				src="zoom-full.png"
+			>
+	</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:mirror('h')"
+			>
+
+			<img
+				class="png"
+				id="mirror-h"
+				onmouseover="highlightPNG('mirror-h', 1)"
+				onmouseout="highlightPNG('mirror-h', 0)"
+				title="mirror horizontally"
+				src="mirror-horizontal.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:mirror('v')"
+			>
+
+			<img
+				class="png"
+				id="mirror-v"
+				onmouseover="highlightPNG('mirror-v', 1)"
+				onmouseout="highlightPNG('mirror-v', 0)"
+				title="mirror vertically"
+				src="mirror-vertical.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setParamWin('rot', 'Rotate (0..360) clockwise')"
+			>
+
+			<img
+				class="png"
+				id="rotate"
+				onmouseover="highlightPNG('rotate', 1)"
+				onmouseout="highlightPNG('rotate', 0)"
+				title="rotate image"
+				src="rotate.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setParamWin('brgt', 'Brightness (-255..255)')"
+			>
+
+			<img
+				class="png"
+				id="brightness"
+				onmouseover="highlightPNG('brightness', 1)"
+				onmouseout="highlightPNG('brightness', 0)"
+				title="set brightness"
+				src="brightness.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setParamWin('cont', 'Contrast (0..8)')"
+			>
+
+			<img
+				class="png"
+				id="contrast"
+				onmouseover="highlightPNG('contrast', 1)"
+				onmouseout="highlightPNG('contrast', 0)"
+				title="set contrast"
+				src="contrast.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setParamWin('rgb', '...')"
+			>
+
+			<img
+				class="png"
+				id="rgb"
+				onmouseover="highlightPNG('rgb', 1)"
+				onmouseout="highlightPNG('rgb', 0)"
+				title="set rgb values"
+				src="rgb.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setParamWin('size', '...')"
+			>
+
+			<img
+				class="png"
+				id="size"
+				onmouseover="highlightPNG('size', 1)"
+				onmouseout="highlightPNG('size', 0)"
+				title="resize page"
+				src="size.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setQualityWin('Quality (0..2)')"
+			>
+
+			<img
+				class="png"
+				id="quality"
+				onmouseover="highlightPNG('quality', 1)"
+				onmouseout="highlightPNG('quality', 0)"
+				title="set image quality"
+				src="quality.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:gotoPage('-1')"
+			>
+
+			<img
+				class="png"
+				id="back"
+				onmouseover="highlightPNG('back', 1)"
+				onmouseout="highlightPNG('back', 0)"
+				title="goto previous image"
+				src="back.png"
+			>
+	</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:gotoPage('+1')"
+			>
+
+			<img
+				class="png"
+				id="fwd"
+				onmouseover="highlightPNG('fwd', 1)"
+				onmouseout="highlightPNG('fwd', 0)"
+				title="goto next image"
+				src="fwd.png"
+			>
+	</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:gotoPageWin()"
+			>
+
+			<img
+				class="png"
+				id="page"
+				onmouseover="highlightPNG('page', 1)"
+				onmouseout="highlightPNG('page', 0)"
+				title="specify image"
+				src="page.png"
+			>
+	</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:help()"
+			>
+
+			<img
+				class="png"
+				id="help"
+				onmouseover="highlightPNG('help', 1)"
+				onmouseout="highlightPNG('help', 0)"
+				title="help"
+				src="help.png"
+			>
+		</a>
+	</div>
+	
+</div>
+
+
+</body>
+
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/digimage.jsp	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,459 @@
+<%@ page language="java" %><%!
+	// -- JSP init -------------
+	
+	// create DocumentBean instance for all JSP requests
+	digilib.servlet.DocumentBean docBean = new digilib.servlet.DocumentBean();
+	
+	// initialize DocumentBean instance in JSP init
+	public void jspInit() {
+	    try {
+		// set servlet init-parameter
+		docBean.setConfig(getServletConfig());
+	    } catch (javax.servlet.ServletException e) {
+		System.out.println(e);
+	    }
+	}
+	// -- end of JSP init -------------
+%>
+
+<%
+	// -- JSP request -------------
+	
+	// parsing the query
+	// -----------------
+	digilib.servlet.DigilibRequest dlRequest = new digilib.servlet.DigilibRequest(request);
+	docBean.setRequest(dlRequest);
+	// check if authentication is needed and redirect if necessary
+	docBean.doAuthentication(response);
+	// add number of pages
+	dlRequest.setValue("pt", docBean.getNumPages());
+	// store objects for jsp:include
+	pageContext.setAttribute("docBean", docBean, pageContext.REQUEST_SCOPE);
+%>
+
+<html>
+
+<head>
+	<title>Digital Document Library NG</title>
+	
+	<style type="text/css">
+
+		body		{ background-color: #E0E0E0; color: black; font-size: 8pt }
+		code		{ font-family: monospace; color: blue; }
+		pre		{ color: #006060; }
+
+		a.icon		{ margin: 0px; padding: 0px; }
+
+		img.png 	{ border: none; }
+		img.mark 	{ border: none; }
+
+		div.button	{ margin: -4px; padding: 0px; }
+		div.dot		{ position: absolute; left: -20; top: 100; visibility: hidden }		div#scaler-table { padding-right: 40px; }
+
+		div#buttons	{ position: absolute; right: 10px; top: 10px; }
+		
+	</style>
+	
+	<script type="text/javascript" src="../baselib.js"></script>
+	
+	<script type="text/javascript" src="../dllib.js"></script>
+
+	<script language="JavaScript">
+		function highlightPNG(id, on) {
+			var elem = document.getElementById(id);
+			//var div  = elem.parentNode.parentNode;
+			elem.style.backgroundImage = on 
+				? "url('corona.png')"
+				: null;
+		}
+
+		base_init();
+		var dlTarget = window.name;
+		var baseUrl = '<%= dlRequest.getAsString("base.url") %>';
+		var toolbarEnabledURL = window.location.href;
+		newParameter('fn', '', 1);
+		newParameter('pn', '1', 1);
+		newParameter('ws', '1.0', 1);
+		newParameter('mo', '', 1);
+		newParameter('mk', '', 3);
+		newParameter('wx', '0.0', 2);
+		newParameter('wy', '0.0', 2);
+		newParameter('ww', '1.0', 2);
+		newParameter('wh', '1.0', 2);
+		newParameter('pt', '<%= dlRequest.getAsString("pt") %>', 1);
+		newParameter('brgt', '0.0', 1);
+		newParameter('cont', '0.0', 1);
+		newParameter('rot', '0.0', 1);
+		newParameter('rgba', '', 1);
+		newParameter('rgbm', '', 1);
+		newParameter('ddpix', '', 1);
+		newParameter('ddpiy', '', 1);
+		document.id='digilib';
+		dl_param_init();
+		
+		function init() {
+			dl_init();
+			var scaler = getElement('scaler');
+			var pic = getElement('pic');
+			var ps = bestPicSize(scaler, 50);
+			var src = "../servlet/Scaler?fn=&dw=" + ps.width + "&dh=" + ps.height;
+			pic.src = src;
+			}
+	</script>
+</head>
+
+<body onload="init();">
+
+ <div id="scaler-table">
+ 	<div id="scaler" style="visibility:visible">
+		<img id="pic"></img>
+	</div>
+ </div>
+
+ <!-- marks as dynamically created divs with numbers or text? -->
+ <div id="dot0" class="dot"><img class="mark" src="../img/mark1.gif" ></div>
+ <div id="dot1" class="dot"><img class="mark" src="../img/mark2.gif" ></div>
+ <div id="dot2" class="dot"><img class="mark" src="../img/mark3.gif" ></div>
+ <div id="dot3" class="dot"><img class="mark" src="../img/mark4.gif" ></div>
+ <div id="dot4" class="dot"><img class="mark" src="../img/mark5.gif" ></div>
+ <div id="dot5" class="dot"><img class="mark" src="../img/mark6.gif" ></div>
+ <div id="dot6" class="dot"><img class="mark" src="../img/mark7.gif" ></div>
+ <div id="dot7" class="dot"><img class="mark" src="../img/mark8.gif" ></div>
+
+ <!-- zoom area with a transparent div ? -->
+ <div id="eck1" class="dot"><img class="mark" src="../img/olinks.gif" ></div>
+ <div id="eck2" class="dot"><img class="mark" src="../img/orechts.gif" ></div>
+ <div id="eck3" class="dot"><img class="mark" src="../img/ulinks.gif" ></div>
+ <div id="eck4" class="dot"><img class="mark" src="../img/urechts.gif" ></div>
+ 
+ 
+ <div id="buttons" 
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:showOptions(0);setMark()"
+			>
+
+			<img
+				class="png"
+				id="mark"
+				onmouseover="highlightPNG('mark', 1)"
+				onmouseout="highlightPNG('mark', 0)"
+				title="set a mark"
+				src="mark.png"
+			>
+		</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:removeMark()"
+			>
+
+			<img
+				class="png"
+				id="delmark"
+				onmouseover="highlightPNG('delmark', 1)"
+				onmouseout="highlightPNG('delmark', 0)"
+				title="delete the last mark"
+				src="delmark.png"
+				>
+		</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:getRefWin()"
+			>
+
+			<img
+				class="png"
+				id="reference"
+				onmouseover="highlightPNG('reference', 1)"
+				onmouseout="highlightPNG('reference', 0)"
+				title="get a reference URL"
+				src="reference.png"
+			>
+		</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:zoomBy(1.4)"
+			>
+
+			<img
+				class="png"
+				id="zoom-in"
+				onmouseover="highlightPNG('zoom-in', 1)"
+				onmouseout="highlightPNG('zoom-in', 0)"
+				title="zoom in"
+				src="zoom-in.png"
+			>
+	</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:zoomBy(0.7)"
+			>
+
+			<img
+				class="png"
+				id="zoom-out"
+				onmouseover="highlightPNG('zoom-out', 1)"
+				onmouseout="highlightPNG('zoom-out', 0)"
+				title="zoom out"
+				src="zoom-out.png"
+			>
+	</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:showOptions(0);zoomArea()"
+			>
+
+			<img
+				class="png"
+				id="zoom-area"
+				onmouseover="highlightPNG('zoom-area', 1)"
+				onmouseout="highlightPNG('zoom-area', 0)"
+				title="zoom area"
+				src="zoom-area.png"
+			>
+		</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:zoomFullpage()"
+			>
+
+			<img
+				class="png"
+				id="zoom-full"
+				onmouseover="highlightPNG('zoom-full', 1)"
+				onmouseout="highlightPNG('zoom-full', 0)"
+				title="view the whole image"
+				src="zoom-full.png"
+			>
+	</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:mirror('h')"
+			>
+
+			<img
+				class="png"
+				id="mirror-h"
+				onmouseover="highlightPNG('mirror-h', 1)"
+				onmouseout="highlightPNG('mirror-h', 0)"
+				title="mirror horizontally"
+				src="mirror-horizontal.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:mirror('v')"
+			>
+
+			<img
+				class="png"
+				id="mirror-v"
+				onmouseover="highlightPNG('mirror-v', 1)"
+				onmouseout="highlightPNG('mirror-v', 0)"
+				title="mirror vertically"
+				src="mirror-vertical.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setParamWin('rot', 'Rotate (0..360) clockwise')"
+			>
+
+			<img
+				class="png"
+				id="rotate"
+				onmouseover="highlightPNG('rotate', 1)"
+				onmouseout="highlightPNG('rotate', 0)"
+				title="rotate image"
+				src="rotate.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setParamWin('brgt', 'Brightness (-255..255)')"
+			>
+
+			<img
+				class="png"
+				id="brightness"
+				onmouseover="highlightPNG('brightness', 1)"
+				onmouseout="highlightPNG('brightness', 0)"
+				title="set brightness"
+				src="brightness.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setParamWin('cont', 'Contrast (0..8)')"
+			>
+
+			<img
+				class="png"
+				id="contrast"
+				onmouseover="highlightPNG('contrast', 1)"
+				onmouseout="highlightPNG('contrast', 0)"
+				title="set contrast"
+				src="contrast.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setParamWin('rgb', '...')"
+			>
+
+			<img
+				class="png"
+				id="rgb"
+				onmouseover="highlightPNG('rgb', 1)"
+				onmouseout="highlightPNG('rgb', 0)"
+				title="set rgb values"
+				src="rgb.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setParamWin('size', '...')"
+			>
+
+			<img
+				class="png"
+				id="size"
+				onmouseover="highlightPNG('size', 1)"
+				onmouseout="highlightPNG('size', 0)"
+				title="resize page"
+				src="size.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setQualityWin('Quality (0..2)')"
+			>
+
+			<img
+				class="png"
+				id="quality"
+				onmouseover="highlightPNG('quality', 1)"
+				onmouseout="highlightPNG('quality', 0)"
+				title="set image quality"
+				src="quality.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:gotoPage('-1')"
+			>
+
+			<img
+				class="png"
+				id="back"
+				onmouseover="highlightPNG('back', 1)"
+				onmouseout="highlightPNG('back', 0)"
+				title="goto previous image"
+				src="back.png"
+			>
+	</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:gotoPage('+1')"
+			>
+
+			<img
+				class="png"
+				id="fwd"
+				onmouseover="highlightPNG('fwd', 1)"
+				onmouseout="highlightPNG('fwd', 0)"
+				title="goto next image"
+				src="fwd.png"
+			>
+	</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:gotoPageWin()"
+			>
+
+			<img
+				class="png"
+				id="page"
+				onmouseover="highlightPNG('page', 1)"
+				onmouseout="highlightPNG('page', 0)"
+				title="specify image"
+				src="page.png"
+			>
+	</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:help()"
+			>
+
+			<img
+				class="png"
+				id="help"
+				onmouseover="highlightPNG('help', 1)"
+				onmouseout="highlightPNG('help', 0)"
+				title="help"
+				src="help.png"
+			>
+		</a>
+	</div>
+	
+</div>
+
+
+</body>
+
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/digimage_img_inc.jsp	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,25 @@
+<%@ page language="java" %><%
+// retrieve objects from context
+digilib.servlet.DocumentBean docBean = (digilib.servlet.DocumentBean) pageContext.getAttribute("docBean", pageContext.REQUEST_SCOPE);
+digilib.servlet.DigilibRequest dlRequest = docBean.getRequest();
+String ua = request.getHeader("User-Agent");
+boolean isN4 = ((ua.indexOf("Mozilla/4.") > -1)&&(ua.indexOf("MSIE") == -1));
+%>
+<%
+    if (isN4) {
+%><ilayer name="scaler"><%
+	    } else {
+%><div id="scaler"><%
+	    }
+%>
+<script type="text/javascript">
+var ps = bestPicSize(getElement('scaler'), 50);
+document.write('<img id="pic" src="<%= dlRequest.getAsString("base.url") + "/servlet/Scaler?" + dlRequest.getAsString('s') %>&dw='+ps.width+'&dh='+ps.height+'" />');
+</script>
+<%   
+    if (isN4) {
+%></ilayer><%
+	    } else {
+%></div><%
+	    }
+%>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/digimage_tbl_inc.jsp	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,61 @@
+<%@ page language="java" %><%
+// retrieve objects from context
+digilib.servlet.DocumentBean docBean = (digilib.servlet.DocumentBean) pageContext.getAttribute("docBean", pageContext.REQUEST_SCOPE);
+digilib.servlet.DigilibRequest dlRequest = docBean.getRequest();
+String ua = request.getHeader("User-Agent");
+boolean isN4 = ((ua.indexOf("Mozilla/4.") > -1)&&(ua.indexOf("MSIE") == -1));
+%>
+<table border="0"  cellpadding="0" cellspacing="0">
+  <tr>
+    <td></td>
+    <td align="center"><%
+      if (docBean.canMoveUp()) {
+        %><a href="javascript:moveBy(0, -0.5)"><img src="../img/up.gif" border="0" /></a><%
+      }
+      %></td>
+      <td></td>
+  </tr>
+  <tr>
+    <td valign="center"><%
+      if (docBean.canMoveLeft()) {
+        %><a href="javascript:moveBy(-0.5, 0)"><img src="../img/left.gif" border="0" /></a><%
+      }
+      %></td>
+	  <td>
+<%
+	  if(isN4) {
+	      %><ilayer name="scaler"><%
+		  } else {
+	      %><div id="scaler" style="visibility:visible"><%
+		  }
+%>
+<script type="text/javascript">
+var ps = bestPicSize(getElement('scaler'), 50);
+document.write('<img id="pic" src="<%=
+  dlRequest.getAsString("base.url") + "/../servlet/Scaler?" + dlRequest.getAsString('s')
+%>&dw='+ps.width+'&dh='+ps.height+'" />');
+</script>
+<% 
+    if(isN4) {
+	%></ilayer><%
+	    } else {
+	%></div><%
+	    }
+%>
+    </td>
+    <td valign="center"><%
+      if (docBean.canMoveRight()) {
+        %><a href="javascript:moveBy(0.5, 0)"><img src="../img/right.gif" border="0" /></a><%
+      }
+      %></td>
+  </tr>
+  <tr>
+    <td></td>
+    <td align="center"><%
+      if (docBean.canMoveDown()) {
+        %><a href="javascript:moveBy(0, 0.5)"><img src="../img/down.gif" border="0" /></a><%
+      }
+      %></td>
+    <td></td>
+  </tr>
+</table>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/diginew.css	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,276 @@
+/* Styles for Digilib NG */
+/* (c) 2005 by Martin Raspe <hertzhaft@biblhertz.it> */
+/* Bibliotheca Hertziana (Max-Planck-Institute for Art History), Rome */
+
+body {
+	background-color: #E0E0E0;
+	color: black;
+	font-size: 8pt;
+	margin-left: 8px;
+	margin-top: 8px;
+	padding: 0px;
+	}
+
+code {
+	font-family: monospace;
+	color: blue;
+	}
+
+pre	{ color: #006060; }
+
+
+a.icon {
+	margin: 0px;
+	padding: 0px;
+	}
+
+a.arrow {
+	display: block;
+	position: absolute;
+	border: none;
+	z-index: 50;
+	background-repeat: no-repeat;
+	background-position: center;
+	}
+
+a#up:hover {
+	background-image: url('up.png');
+	}
+
+a#down:hover {
+	background-image: url('down.png');
+	}
+
+a#left:hover {
+	background-image: url('left.png');
+	}
+
+a#right:hover {
+	background-image: url('right.png');
+	}
+
+/* Images */
+
+img.logo {
+	border: none;
+	}
+
+img.png {
+	border: none;
+	}
+
+img.png:hover {
+	background-image: url('corona.png');
+	}
+	
+img#bird-image {
+	border: none;
+	position: fixed;
+	bottom: 8px;
+	right:  48px;
+	visibility: hidden;
+	z-index: 1;
+	}
+
+/* DIVs */
+
+div.button {
+	padding: 0px;
+	}
+
+div.separator {
+	margin-bottom: 4px;
+	border-top: 2px solid lightgrey;
+	}
+
+div.mark {
+	position: absolute;
+	color: white;
+	background: url('mark-bg-16.png');
+	font-family: Verdana, Arial, Helvetica, sans-serif;
+	font-weight: bold;
+	font-size:11px;
+	height: 15px;
+	width: 16px;
+	padding-top: 1px;
+	text-align: center;
+	z-index: 10;
+	visibility: hidden;
+	/* filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='mark-bg-16.png') */
+	}
+		
+div#bg {
+	position: absolute;
+	background-color: grey;
+    background-repeat:no-repeat;
+    cursor: move;
+    visibility: hidden;
+}
+	
+div#scaler {
+    margin-right: 50px;
+    /*	position: absolute;
+	left: 8px;
+	top: 8px;
+	bottom: 8px;
+	right: 44px;
+*/	/* overflow: auto; */
+	}
+
+div#scaler img {
+    cursor: default;
+}
+
+div#overlay, div#bird-overlay {
+	position: fixed;
+	background-color: transparent;
+	border: none;
+	z-index: 100;
+	visibility: hidden;
+	/* box-sizing: border-box;
+	-moz-box-sizing: border-box; */
+	}
+
+div#buttons {
+	position: fixed;
+	right: 5px;
+	top: 5px;
+	padding: 3px;
+/*	background-color: #E0E0E0; */
+    background-color: lightgrey;	 
+  }
+
+div#dloptions {
+	position: fixed;
+	right: 5px;
+	top: 5px;
+	padding: 3px;
+/*	background-color: #E0E0E0; */
+    background-color: lightgrey;
+	visibility: hidden;
+	}
+
+div#zoom {
+	position: absolute;
+	/* border: 2px solid #ffa060; */
+	border: 2px solid #ff0000;
+	z-index: 200;
+	visibility: hidden;
+	/* box-sizing: border-box;
+	-moz-box-sizing: border-box; */
+	}
+
+div#bird-area {
+	position: fixed;
+	/* border: 2px solid #ffa060; */
+	border: 2px solid #ff0000;
+	background-color: transparent;
+	/* box-sizing: border-box;
+	-moz-box-sizing: border-box; */
+	z-index: 10;
+	visibility: hidden;
+	}
+
+div#calibration {
+	background: url('blue.png');
+	position: absolute;
+	top: 0px;
+	width: 400px;
+	padding: 0px;
+	visibility: hidden;
+	z-index: 1000;
+	}
+
+div#calibration div {
+	width: 100%;
+	height: 100%;
+	margin: 0px;
+	padding: 0px;
+	font-family: Verdana, Arial, Helvetica, sans-serif;
+	text-align: center;
+	color: lightcyan;
+	border: 1px solid lightcyan;
+	background: url('ruler-top.gif') 0px -1px repeat-x;
+	z-index: 1001;
+	}
+
+p.cm {
+	font-weight: bold;
+	}
+
+div.popup-menu {
+	position: absolute;
+	top: 0px;
+	padding: 0px 2px;
+	font-family: Verdana, Arial, Helvetica, sans-serif;
+	border: 2px solid lightcyan;
+	background-color: lightgrey;
+	text-align: center;
+	visibility: hidden;
+	z-index: 1005;
+	}
+
+div.popup-menu p {
+	margin: 2px 0px;
+	padding: 0px;
+	}
+
+div.popup-menu p:hover {
+	background-color: #ffa060;
+	}
+
+div.popup-menu a {
+	text-decoration: none;
+	color: black;
+	}
+
+div#about {
+	position: absolute;
+	width: 200px;
+	top: 100px;
+	left: 350px;
+	height: 200px;
+	padding: 0px 2px;
+	font-family: Verdana, Arial, Helvetica, sans-serif;
+	border: 2px solid lightcyan;
+	background-color: lightgrey;
+	text-align: center;
+	visibility: hidden;
+	z-index: 1000;
+	}
+
+div#about p {
+	margin: 6px;
+	}
+
+	
+/* DEBUG elements */
+
+div#debug {
+	position: absolute;
+	width: 150px;
+	top: 50px;
+	right: 36px;
+	bottom: 50px;
+	overflow: auto;
+	padding: 0px 2px;
+	font-family: Verdana, Arial, Helvetica, sans-serif;
+	color: lightgreen;
+	border: 1px dotted black;
+	background-color: transparent;
+	visibility: hidden;
+	}
+
+div#debug p.debug, h1 {
+	font-weight: bold;
+	color: lightcyan;
+	}
+
+div#debug p, h1 {
+	margin: 0px;
+	padding: 2px 0px;
+	font-size: 9px;
+	background-color: black;
+	}	
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/diginew.jsp	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,618 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<%@ page language="java" pageEncoding="UTF-8"%><%!
+	// -- JSP init -------------
+	
+	// create DocumentBean instance for all JSP requests
+	digilib.servlet.DocumentBean docBean = new digilib.servlet.DocumentBean();
+	
+	// initialize DocumentBean instance in JSP init
+	public void jspInit() {
+	    try {
+            // set servlet init-parameter
+		    docBean.setConfig(getServletConfig());
+	    } catch (javax.servlet.ServletException e) {
+		    System.out.println(e);
+	    }
+	}
+	// -- end of JSP init -------------
+%><%
+	// -- JSP request -------------
+	
+	// parsing the query
+	// -----------------
+	digilib.servlet.DigilibRequest dlRequest = new digilib.servlet.DigilibRequest(request);
+	docBean.setRequest(dlRequest);
+	// check if authentication is needed and redirect if necessary
+	docBean.doAuthentication(response);
+	// add number of pages
+	dlRequest.setValue("pt", docBean.getNumPages());
+	// store objects for jsp:include
+	pageContext.setAttribute("docBean", docBean, pageContext.REQUEST_SCOPE);
+
+%><html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<title>Digital Document Library NG</title>
+	
+	<link rel="stylesheet" type="text/css" href="diginew.css" />
+	
+<!-- <script type="text/javascript" src="debug.js"></script> -->
+
+	<script type="text/javascript" src="baselib.js"></script>
+	
+	<script type="text/javascript" src="dllib.js"></script>
+
+	<script language="JavaScript">
+
+	var jspVersion = "diginew.jsp 1.023";
+	var cookie = new Cookie();
+	// alert(strObject(cookie));
+
+	var isOptionDivVisible = cookie.getbool("isOptionDivVisible");
+	var isBirdDivVisible = cookie.getbool("isBirdDivVisible");
+	var isAboutDivVisible = false;
+	var isSizeMenuVisible = false;
+    var isScaleMenuVisible = false;
+	var isOriginalSize = false;
+	var isPixelByPixel = false;
+	var dlTarget = window.name;
+	var baseUrl = '<%= dlRequest.getAsString("base.url") %>';
+	var toolbarEnabledURL = window.location.href;
+	var waited = 0;
+
+	function toggleOptionDiv() {
+		isOptionDivVisible = !isOptionDivVisible;
+		cookie.addbool("isOptionDivVisible", isOptionDivVisible);
+		showOptions(isOptionDivVisible);
+		}
+
+	function toggleBirdDiv() {
+		isBirdDivVisible = !isBirdDivVisible;
+		cookie.addbool("isBirdDivVisible", isBirdDivVisible);
+		showBirdDiv(isBirdDivVisible);
+		}
+
+	function toggleAboutDiv() {
+		isAboutDivVisible = !isAboutDivVisible;
+		showAboutDiv(isAboutDivVisible);
+		}
+
+	function toggleSizeMenu() {
+		isSizeMenuVisible = !isSizeMenuVisible;
+		showMenu("size-menu", "size", isSizeMenuVisible);
+		}
+
+    function toggleScaleMenu() {
+        isScaleMenuVisible = !isScaleMenuVisible;
+        showMenu("scale-menu", "scale", isScaleMenuVisible);
+        }
+
+	function setOnImage(id, src, value) {
+	// replace img src and display "on" status
+		var elem = getElement(id);
+		elem.src = src;
+		if (value)
+			elem.title += ": " + value;
+		else
+			elem.title += ": on";
+		}
+
+	// change icons if image functions are on
+	function reflectImageStatus() {
+		if (hasFlag("hmir")) setOnImage("hmir", "mirror-horizontal-on.png");
+		if (hasFlag("vmir")) setOnImage("vmir", "mirror-vertical-on.png");
+		if (hasParameter("brgt"))
+			setOnImage("brgt", "brightness-on.png", getParameter("brgt"));
+		if (hasParameter("cont"))
+			setOnImage("cont", "contrast-on.png", getParameter("cont"));
+		if (hasParameter("rot"))
+			setOnImage("rot", "rotate-on.png", getParameter("rot"));
+		if (hasParameter("rgb"))
+			setOnImage("rgb", "rgb-on.png", getParameter("rgb"));
+		}
+    
+
+	// initialize digilib; called by body.onload
+	function onBodyLoad() {
+		document.id = 'digilib';
+        dl.onLoad();
+        dl.showOptions(isOptionDivVisible);
+        reflectImageStatus(); // adjust icons
+	}
+
+	function onBodyUnload() {
+		// alert(strObject(cookie));
+		cookie.store();
+		}
+
+	</script>
+</head>
+
+<body onload="onBodyLoad();" onunload="onBodyUnload();">
+ <!-- slot for the scaled image -->
+ 
+ <div id="bg"></div>
+ 
+ <div id="scaler">
+	<img id="pic"></img>
+ </div>
+
+ <!-- sensitive overlay for zoom area etc -->
+ <div id="overlay"></div>
+ <div id="bird-overlay"></div>
+ 
+ <!-- the zoom area selection rectangle -->
+ <div id="zoom"></div>
+ 
+ <!-- the bird's eye overview image -->
+ <img id="bird-image"></img>
+
+ <!-- the bird's eye select area -->
+ <div id="bird-area"></div>
+
+ <!-- the arrows -->
+ <a class="arrow" id="up"    href="javascript:moveBy(0, -0.5)"><img style="border: 0px; width: 100%; height: 100%;" src="trans.gif"/></a>
+ <a class="arrow" id="down"  href="javascript:moveBy(0, 0.5)"><img style="border: 0px; width: 100%; height: 100%;" src="trans.gif"/></a>
+ <a class="arrow" id="left"  href="javascript:moveBy(-0.5, 0)"><img style="border: 0px; width: 100%; height: 100%;" src="trans.gif"/></a>
+ <a class="arrow" id="right" href="javascript:moveBy(0.5, 0)"><img style="border: 0px; width: 100%; height: 100%;" src="trans.gif"/></a>
+
+ <!-- the about window -->
+ <div id="about" class="about" onclick="toggleAboutDiv()">
+ 	<p>Digilib Graphic Viewer</p>
+ 	<a href="http://digilib.berlios.de" target="_blank" >
+ 		<img class="logo" src="../img/digilib-logo-text1.png" title="digilib"></img>
+	</a>
+	<p id="digilib-version"></p>
+	<p id="jsp-version"></p>
+	<p id="baselib-version"></p>
+	<p id="dllib-version"></p>
+ </div>
+
+ <!-- the calibration div -->
+ <div id="calibration">
+ 	<div>
+ 	<p class="cm">measure the length of this scale on your screen</p>
+	</div>
+ </div>
+
+ <!-- the size menu -->
+ <div id="size-menu" class="popup-menu">
+	<p><a href="javascript:setSize(1)">1 x</a></p>
+	<p><a href="javascript:setSize(1.41)">1.41 x</a></p>
+	<p><a href="javascript:setSize(2)">2 x</a></p>
+	<p><a href="javascript:setSize(3)">3 x</a></p>
+	<div id="sizes-bar">
+		<div id="sizes-slider"></div>
+	</div>
+	<p id="sizes-value"></p>
+ </div>
+
+<!-- the scale menu -->
+ <div id="scale-menu" class="popup-menu">
+  <p><a href="javascript:setScale('fit')">fit to screen</a></p>
+  <p><a href="javascript:setScale('pixel')">pixel by pixel</a></p>
+  <p><a href="javascript:setScale('original')">original size</a></p>
+ </div>
+
+ <!-- the buttons -->
+ <div id="buttons">
+	<div class="separator">
+	</div>
+
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:getRefWin()"
+			>
+
+			<img
+				class="png"
+				id="reference"
+				title="get a reference URL"
+				src="reference.png"
+			>
+		</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:dl.zoomBy(1.4)"
+			>
+
+			<img
+				class="png"
+				id="zoom-in"
+				title="zoom in"
+				src="zoom-in.png"
+			>
+	</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:zoomBy(0.7)"
+			>
+
+			<img
+				class="png"
+				id="zoom-out"
+				title="zoom out"
+				src="zoom-out.png"
+			>
+	</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:zoomArea()"
+			>
+
+			<img
+				class="png"
+				id="zoom-area"
+				title="zoom area"
+				src="zoom-area.png"
+			>
+		</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:zoomFullpage()"
+			>
+
+			<img
+				class="png"
+				id="zoom-full"
+				title="view the whole image"
+				src="zoom-full.png"
+			>
+	</a> 
+	</div>
+
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:zoomFullpage('width')"
+			>
+
+			<img
+				class="png"
+				id="page-width"
+				title="page width"
+				src="pagewidth.png"
+			>
+		</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:gotoPage('-1')"
+			>
+
+			<img
+				class="png"
+				id="back"
+				title="goto previous image"
+				src="back.png"
+			>
+	</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:gotoPage('+1')"
+			>
+
+			<img
+				class="png"
+				id="fwd"
+				title="goto next image"
+				src="fwd.png"
+			>
+	</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:gotoPageWin()"
+			>
+
+			<img
+				class="png"
+				id="page"
+				title="specify image"
+				src="page.png"
+			>
+	</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:toggleBirdDiv()"
+			>
+
+			<img
+				class="png"
+				id="bird"
+				title="show bird's eye view"
+				src="birds-eye.png"
+			>
+		</a>
+	</div>
+	
+	<div class="separator">
+	</div>
+
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:toggleAboutDiv()"
+			>
+
+			<img
+				class="png"
+				id="help"
+				title="about Digilib"
+				src="help.png"
+			>
+		</a>
+	</div>
+
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:resetImage()"
+			>
+
+			<img
+				class="png"
+				id="help"
+				title="reset image"
+				src="reset.png"
+			>
+		</a>
+	</div>
+
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:toggleOptionDiv()"
+			>
+
+			<img
+				class="png"
+				id="options"
+				title="more options"
+				src="options.png"
+			>
+		</a>
+	</div>
+
+	<div class="separator">
+	</div>
+</div>
+
+<!-- options div -->
+
+<div id="dloptions">
+	<div class="separator">
+	</div>
+
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setMark();"
+			>
+
+			<img
+				class="png"
+				id="mark"
+				title="set a mark"
+				src="mark.png"
+			>
+		</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:removeMark()"
+			>
+
+			<img
+				class="png"
+				id="delmark"
+				title="delete the last mark"
+				src="delmark.png"
+				>
+		</a> 
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:mirror('h')"
+			>
+
+			<img
+				class="png"
+				id="hmir"
+				title="mirror horizontally"
+				src="mirror-horizontal.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:mirror('v')"
+			>
+
+			<img
+				class="png"
+				id="vmir"
+				title="mirror vertically"
+				src="mirror-vertical.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setParamWin('rot', 'Rotate (0..360) clockwise')"
+			>
+
+			<img
+				class="png"
+				id="rot"
+				title="rotate image"
+				src="rotate.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setParamWin('brgt', 'Brightness (-255..255)')"
+			>
+
+			<img
+				class="png"
+				id="brgt"
+				title="set brightness"
+				src="brightness.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setParamWin('cont', 'Contrast (0..8)')"
+			>
+
+			<img
+				class="png"
+				id="cont"
+				title="set contrast"
+				src="contrast.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setParamWin('rgb', '...')"
+			>
+
+			<img
+				class="png"
+				id="rgb"
+				title="set rgb values"
+				src="rgb.png"
+			>
+		</a>
+	</div>
+	
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:setQualityWin('Quality (0..2)')"
+			>
+
+			<img
+				class="png"
+				id="quality"
+				title="set image quality"
+				src="quality.png"
+			>
+		</a>
+	</div>
+	
+  <div class="button">
+    <a
+      class="icon"
+      href="javascript:toggleSizeMenu()"
+      >
+
+      <img
+        class="png"
+        id="size"
+        title="set page size"
+        src="size.png"
+      >
+    </a>
+  </div>
+
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:calibrate('x')"
+			>
+
+			<img
+				class="png"
+				id="calibration-x"
+				title="calibrate screen x-ratio"
+				src="calibration-x.png"
+			>
+		</a>
+	</div>
+  
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:toggleScaleMenu()"
+			>
+
+			<img
+				class="png"
+				id="scale"
+				title="change image scale"
+				src="original-size.png"
+			>
+		</a>
+	</div>
+
+	<div class="separator">
+	</div>
+
+	<div class="button">
+		<a
+			class="icon"
+			href="javascript:toggleOptionDiv()"
+			>
+
+			<img
+				class="png"
+				id="options-1"
+				title="hide options"
+				src="options.png"
+			>
+		</a>
+	</div>
+
+	<div class="separator">
+	</div>
+
+</div>
+
+<div class="debug" id="debug"><p class="debug">Debug</p></div>
+
+</body>
+
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/dlMenu.html	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,175 @@
+<html>
+<head>
+<style type="text/css">
+body { margin: 3px; background-color: #f0f0f0 }
+.menu {position:absolute; visibility:hidden}
+img { border: none }
+
+.item1 {position:absolute; left:33; width:50; height:14; clip:rect(0,50,14,0); visibility:hidden}
+.item2 {position:absolute; left:43; width:40; height:14; clip:rect(0,40,14,0); visibility:hidden}
+.item3 {position:absolute; left:3; width:80; height:14; clip:rect(0,80,14,0); visibility:hidden}
+.logo { margin-left: 5px; margin-top: 10px; }
+
+.text {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; color: #FFFFFF; text-decoration: none}
+</style>
+<script language="JavaScript" src="../oldskin/buttons/menu.js"></script>
+
+<script language="JavaScript">
+// because on a netscape 4.xx bug (messing up with layers on resize) we cache the window
+// resize event and redisplay the navigation frame
+if (document.layers && !document.getElementById) {
+    window.onresize = function() {parent.rightFrame.location.reload();}
+}
+
+/**
+ * overriding 'page' in navigation.js
+ */
+function page(page, details) {
+
+    var pn = parseInt(parent.mainFrame.getParameter("pn"));
+    var pt = parseInt(parent.mainFrame.getParameter("pt"));
+
+    if ( details == null ) {
+	details = 1;
+    }
+  
+    if ( page && page.indexOf('-') == 0 ) {
+	if ( pn > 1 ) {
+	    page = Math.max(pn - parseInt(page.slice(1)), 1);
+	    parent.mainFrame.setParameter("pn", page);
+	    display(details);
+	} else {
+	    alert("You are already on the first page!");
+	}
+
+    } else if ( page && page.indexOf('+') == 0 ) {
+	if ( pn < pt ) {
+	    page = Math.min(pn + parseInt(page.slice(1)), pt);
+	    parent.mainFrame.setParameter("pn", page);
+	    display(details);
+	} else {
+	    alert("You are already on the last page!");
+	}
+    } else if ( page && page == parseInt(page) ) {
+	if ( (page > 0) && (page <= pt) ) {
+	    parent.mainFrame.setParameter("pn", page);
+	    display(details);
+	} else {
+	    alert ("Illegal page number (should be 1 - " + pt + ")!");
+	}
+    }
+}
+
+/*
+ * new display function to refresh the pagesTotal frame
+ */
+
+function display(detail) {
+    parent.pageFrame.show();
+    parent.mainFrame.display(detail);
+}
+
+
+function askPage() {
+    do {
+	p = prompt("Goto Page:", 1);
+    } while ((p != null) && (p < 1));
+    page(p);
+}
+
+function showRef(select) {
+    var hyperlinkRef = parent.mainFrame.baseUrl + "/digilib.jsp?";
+    hyperlinkRef += parent.mainFrame.getAllParameters();
+    if ( select == 0 ) {
+	prompt("Link for LaTeX-documents", "\\href{" + hyperlinkRef + "}{TEXT}");
+    } else if ( select == 1 ) {
+	prompt("Link for HTML-documents", hyperlinkRef);
+    }
+}
+
+function setSize(size) {
+    parent.mainFrame.setParameter('ws', size);
+    display();
+}
+
+function digicat() {
+    var fn = parent.mainFrame.getParameter("fn");
+    var pn = parent.mainFrame.getParameter("pn");
+    var url = parent.mainFrame.baseUrl + "/digicat.jsp?fn=" + fn + "&pn=" + pn;
+    win = window.open(url, "digicat");
+    win.focus();
+}
+
+// boolean variable to either show or not show the additional help
+// change in the menuitem its original mark
+var showHelp = false;
+
+// variable to tell if while changing to another page it should keep the area
+// change in the menuitem its original mark (1 = false, 2 = true)
+var keepArea = 2;
+
+
+// variable that store the texts for contexthelp
+var helpText = new Array();
+
+helpText[0]  = "'back'-button|Click on this button to load the previous image (usually the next page from a manuscript).";
+helpText[1]  = "'next'-button|Click on this button to load the next image (usually the next page from a manuscript).";
+helpText[2]  = "'page'-button|After clicking 'page' you will be prompted for a specific page you want to see.<br>Note that the page number refers to the same serie you are in now.";
+helpText[3]  = "'digicat'-button|Click here to open a new window containing thumbnails of the current series pages to navigate.";
+helpText[4]  = "'mark'-button|You can set marks into the picture. After hitting 'mark' you have to click on the desired picures location, a numbered mark appears.<br>Check out 'reference' to make these marks (up to 8) visible for others.";
+helpText[5]  = "'reference'-button|Choose LaTeX or HTML mode to get a link for the actual (zoomed) picture with all set marks.<br>This link can easily be included in a TeX- or HTML-formatted document/page.";
+helpText[6]  = "'zoom area'-button|With 'zoom area' you can zoom into any rectangular field for the current picture.<br>After clicking on the button click on the image to set any corner (ex. topleft), release the mousebutton and move the mouse until you have the desired size, then click again.";
+helpText[7]  = "'zoom in'-button|Clicking on 'zoom in' zooms in around the current center.";
+helpText[8]  = "'zoom out'-button|Clicking on 'zoom out' zooms out around the current center.";
+helpText[9]  = "'full page'-button|To gain the original unzoomed picture, click on 'full page'.<br>Note that any set marks are still saved at their positions.";
+helpText[10] = "'size'-button|By clicking on one of the menu entries you can select the size of the currently displayed picture in relation to your browser window.<br>Note: a scale factor of '1.0' means that the picture fits right into the working area, while '2.0' means that it will be twice as high and wide.";
+helpText[11] = "'?'-button|In its menu you are able change options like the visibility of this contextsensitive help, with 'Keep area' digilib keeps its current zoom area when changing to another page.";
+
+</script>
+</head>
+
+<body onload="preloadImages()" onunload="closeContextHelp()">
+
+<a href="javascript:page('-1', keepArea)" onmouseover="highlightButton(1)" onmouseout="awayButton(0)"><img src="left.png" title="next image"></a><br>
+<a href="javascript:page('+1', keepArea)" onmouseover="overButton(1)" onmouseout="awayButton(1)"><img src="right.png" title="previous image"></a><br>
+<a href="javascript:askPage()" onmouseover="overButton(2)" onmouseout="awayButton(2)"><img src="page.png" title="select image by index"></a><br>
+<a href="javascript:digicat()" onmouseover="overButton(3)" onmouseout="awayButton(3)"><img src="cat.png" title="image catalogue"></a><br><br>
+<a href="javascript:parent.mainFrame.setMark(false);" onmouseover="overButton(4)" onmouseout="awayButton(4)"><img src="mark.png" title="set a mark"></a><br>
+<a href="javascript:hideMenu(); showMenu(1)" onmouseover="overButton(5)" onmouseout="awayButton(5)"><img src="reference.png" title="get an URL to this view"></a><br><br>
+<a href="javascript:parent.mainFrame.zoomArea()" onmouseover="overButton(6)" onmouseout="awayButton(6)"><img src="zoom-area.png" title="zoom to selected area"></a><br>
+<a href="javascript:parent.mainFrame.zoomBy(1.4142)" onmouseover="overButton(7)" onmouseout="awayButton(7)"><img src="zoom-in.png" title="zoom in"></a><br>
+<a href="javascript:parent.mainFrame.zoomBy(0.7071)" onmouseover="overButton(8)" onmouseout="awayButton(8)"><img src="zoom-out.png" title="zoom out"></a><br>
+<a href="javascript:parent.mainFrame.zoomFullpage()" onmouseover="overButton(9)" onmouseout="awayButton(9)"><img src="zoom-full.png" title="full image"></a><br><br>
+<a href="javascript:hideMenu(); showMenu(2)" onmouseover="overButton(10)" onmouseout="awayButton(10)"><img src="size.png" title="set image size"></a><br><br>
+<a href="javascript:hideMenu(); showMenu(3)" onmouseover="overButton(11)" onmouseout="awayButton(11)"><img src="buttons/questionmark0.gif" ></a><br><br>
+
+<div id="menu1" class="menu" style="top:201; left:31; width:54; height:33; clip:rect(0,54,33,0)"></div>
+ <div id="menu11" class="item1" style="top:203"><center><a href="#" class="text" onClick="hideMenu(); showRef(0); return false;" onmouseover="overItem(11)" onmouseout="awayItem(11)">LaTeX</a></center></div>
+ <div id="menu12" class="item1" style="top:218"><center><a href="#" class="text" onClick="hideMenu(); showRef(1); return false;" onmouseover="overItem(12)" onmouseout="awayItem(12)">HTML</a></center></div>
+
+<div id="menu2" class="menu" style="top:379; left:41; width:44; height:93; clip:rect(0,44,93,0)"></div>
+ <div id="menu21" class="item2" style="top:381"><center><a href="#" class="text" onClick="hideMenu(); setSize(0.7); return false;" onmouseover="overItem(21)" onmouseout="awayItem(21)">0.7</a></center></div>
+ <div id="menu22" class="item2" style="top:396"><center><a href="#" class="text" onClick="hideMenu(); setSize(1.0); return false;" onmouseover="overItem(22)" onmouseout="awayItem(22)">1.0</a></center></div>
+ <div id="menu23" class="item2" style="top:411"><center><a href="#" class="text" onClick="hideMenu(); setSize(1.5); return false;" onmouseover="overItem(23)" onmouseout="awayItem(23)">1.5</a></center></div>
+ <div id="menu24" class="item2" style="top:426"><center><a href="#" class="text" onClick="hideMenu(); setSize(2.0); return false;" onmouseover="overItem(24)" onmouseout="awayItem(24)">2.0</a></center></div>
+ <div id="menu25" class="item2" style="top:441"><center><a href="#" class="text" onClick="hideMenu(); setSize(2.5); return false;" onmouseover="overItem(25)" onmouseout="awayItem(25)">2.5</a></center></div>
+ <div id="menu26" class="item2" style="top:456"><center><a href="#" class="text" onClick="hideMenu(); setSize(3.0); return false;" onmouseover="overItem(26)" onmouseout="awayItem(26)">3.0</a></center></div>
+
+<div id="menu3" class="menu" style="top:430; left:1; width:84; height:33; clip:rect(0,84,33,0)"></div>
+ <div id="menu31" class="item3" style="top:432"><center><a href="#" class="text" onclick="changeMark(31); hideMenu(); changeHelp(); return false;" onmouseover="overItem(31)" onmouseout="awayItem(31)"><img id="mark31" src="buttons/nomark.gif" >Contexthelp</a></center></div>
+ <div id="menu32" class="item3" style="top:447"><center><a href="#" class="text" onclick="changeMark(32); keepArea = (keepArea == 1) ? 2 : 1; return false;" onmouseover="overItem(32)" onmouseout="awayItem(32)"><img id="mark32" src="buttons/mark.gif" >Keep&nbsp;area</a></center></div>
+ <div id="logo" class="logo">
+ 	<a href="http://digilib.berlios.de" target="_blank" >
+ 		<img  src="../img/digilib-logo-text1.png" title="digilib"></img>
+	</a>
+ </div>
+
+<script language="Javascript">
+// initial background color of the menues (has to be done like this, 
+// otherwise menues in ns4 you will have wrong dimensions)
+changeBc("menu1", "#666666");
+changeBc("menu2", "#666666");
+changeBc("menu3", "#666666");
+</script>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/dllib.js	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,1045 @@
+/* Copyright (C) 2003,2004 IT-Group MPIWG, WTWG Uni Bern and others
+ 
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+ 
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+ 
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
+ 
+Authors:
+  Christian Luginbuehl, 01.05.2003 (first version)
+  DW 24.03.2004 (Changed for digiLib in Zope)
+  Robert Casties, 8.11.2005
+  Martin Raspe <hertzhaft@biblhertz.it>, 12.12.2005
+  Robert Casties, 4.9.2009
+  
+  ! Requires baselib.js !
+*/
+digilibVersion = "Digilib NG";
+dllibVersion = "2.042";
+
+function identify() {
+        // used for identifying a digilib instance
+        // Relato uses that function - lugi
+        return digilibVersion;
+}
+
+function createMarkDiv(index) {
+    var div = document.createElement("div");
+    div.className = "mark";
+    div.id = "mark" + index;
+    div.innerHTML = index + 1;
+    document.body.appendChild(div);
+    return div;
+}
+
+function bestPicSize(elem, inset) {
+    // returns a Size with the best image size for the given element
+    if (! defined(inset)) {
+        inset = 0; 
+        // original value was 25 
+        // digilib seems to use the available space better without inset
+        }
+    var ws = getWinSize();
+    var es = getElementPosition(elem);
+    if (es) {
+        ws.width = ws.width - es.x - inset;
+        ws.height = ws.height - es.y - inset;
+    }
+    return ws;
+}
+
+
+/****************************************************
+ * digilib specific classes (must be defined first)
+ ****************************************************/
+ 
+/*
+ * Marks class
+ */ 
+function Marks() {
+	return this;
+}
+// Marks inherits from Array
+Marks.prototype = new Array();
+Marks.prototype.parse = function(query) {
+	this.length = 0;
+    if (query.indexOf(";") >= 0) {
+        var pa = query.split(";");    // old format with ";"
+    } else {
+        var pa = query.split(",");    // new format
+    }
+    for (var i = 0; i < pa.length ; i++) {
+        var pos = pa[i].split("/");
+        if (pos.length > 1) this.push(new Position(pos[0], pos[1]));
+    }
+}
+Marks.prototype.getAll = function() {
+    var ma = new Array();
+    for (var i = 0; i < this.length; i++) {
+        ma.push(cropFloat(this[i].x) + "/" + cropFloat(this[i].y));
+   	}
+    return ma.join(",");
+}
+Marks.prototype.addEvent = function(evt, digilib) {
+    // add a mark from a screen event
+    if (!digilib) digilib = dl;
+    var pos = digilib.trafo.invtransform(evtPosition(evt));
+    this.push(pos);
+}
+
+/*
+ * DLParameters -- digilib parameter class
+ */
+function DLParameters() {
+	// flags for parameter sets
+	this.PARAM_FILE = 1;
+	this.PARAM_MODE = 2;
+	this.PARAM_DIM = 4;
+	this.PARAM_IMAGE = 8;
+	this.PARAM_DPI = 16;
+	this.PARAM_SIZE = 32;
+	this.PARAM_MARK = 64;
+	this.PARAM_PAGES = 128;
+	this.PARAM_CLIENT = 256;
+	/* request parameters */
+	with (this) {
+	// file
+	    define('fn', '',    PARAM_FILE);
+	    define('pn', '1',   PARAM_FILE);
+	// mode
+	    define('mo', '',    PARAM_MODE);
+	// relative dimensions of zoomed image
+	    define('wx', '0.0', PARAM_DIM);
+	    define('wy', '0.0', PARAM_DIM);
+	    define('ww', '1.0', PARAM_DIM);
+	    define('wh', '1.0', PARAM_DIM);
+	// image manipulation
+	    define('brgt', '0.0', PARAM_IMAGE);
+	    define('cont', '0.0', PARAM_IMAGE);
+	    define('rot',  '0.0', PARAM_IMAGE);
+	    define('rgba', '',    PARAM_IMAGE);
+	    define('rgbm', '',    PARAM_IMAGE);
+	// resolution
+	    define('ddpi',  '', PARAM_DPI);
+	    define('ddpix', '', PARAM_DPI);
+	    define('ddpiy', '', PARAM_DPI);
+	// marks
+	    define('mk', '', PARAM_MARK);
+	// pages total
+	    define('pt', '0', PARAM_PAGES);
+	// size
+	    define('ws', '1.0', PARAM_SIZE);
+	    // client side options
+	    define('clop', '', PARAM_CLIENT);
+	}
+	return this;
+}
+DLParameters.prototype = new Parameters();
+// move the inherited getAll because we need it later
+DLParameters.prototype._getAll = Parameters.prototype.getAll;
+DLParameters.prototype.getAll = function(paDetail, moDetail, digilib) {
+	if (!digilib) digilib = dl;
+	// get Flags and Marks first
+    var mo = digilib.flags.getAll(moDetail);
+    this.set("mo", mo);
+    var clop = digilib.opts.getAll();
+    this.set("clop", clop);
+    var mk = digilib.marks.getAll();
+    this.set("mk", mk);
+    var ret = this._getAll(paDetail);
+	return ret;
+}
+
+/*
+ * DLModes -- digilib flags class
+ */
+function DLFlags() {
+    // flags for mode sets
+    this.MODE_QUAL = 1;
+    this.MODE_SIZE = 2;
+    this.MODE_MIR = 4;
+    this.MODE_OTHER = 128;
+    this.MODE_ALL = 255;
+    /* mode flags */
+    with (this) {
+        define('q0', MODE_QUAL);
+        define('q1', MODE_QUAL);
+        define('q2', MODE_QUAL);
+        define('fit',   MODE_SIZE);
+        define('clip',  MODE_SIZE);
+        define('osize', MODE_SIZE);
+        define('vmir', MODE_MIR);
+        define('hmir', MODE_MIR);
+    }
+    return this;
+}
+// inherits from Flags
+DLFlags.prototype = new Flags();
+
+
+/*
+ * Digilib -- digilib base class
+ */
+function Digilib() {
+    if (!baseLibVersion) alert("ERROR: baselib.js not loaded!");
+    /* constants */
+    this.MAX_AREA = new Rectangle(0.0, 0.0, 1.0, 1.0);
+    // default inset (for scalerImg relativ to scalerDiv 
+    this.INSET = 40; // because of scrollbars of main window and scaler [Firefox bug?]
+    // mouse drag area that counts as one click 
+    this.MIN_AREA_SIZE = 3 * 3 + 1;
+    // standard zoom factor
+    this.ZOOMFACTOR = Math.sqrt(2);
+    // bird's eye view dimensions
+    this.BIRD_MAXX = 200;
+    this.BIRD_MAXY = 200;
+    // witdh of arrow bars
+    this.ARROW_WIDTH = 32;
+    // width of calibration bar
+    this.CALIBRATION_WIDTH = 64;
+    /* variables */
+    this.fitOnlyWidth = false;
+    this.fitOnlyHeight = false;
+    this.trafo = null;
+    // page elements
+    this.scalerDiv = null;
+    this.scalerImg = null;
+    this.buttons1Div = null;
+    this.buttons2Div = null;
+    /* parse parameters */
+    this.params = new DLParameters();
+    // put the query parameters (sans "?") in the parameters array
+    this.params.parse(location.search.slice(1));
+    // treat special parameters
+    this.area = this.parseArea();
+    this.marks = new Marks();
+    this.marks.parse(this.params.get("mk"));
+    this.flags = new DLFlags();
+    this.flags.parse(this.params.get("mo"));
+    this.opts = new Flags();
+    this.opts.parse(this.params.get("clop"));
+    return this;
+}
+Digilib.prototype.setDLParam = function(e, s, relative) {
+    // sets parameter based on HTML event
+    var nam;
+    var val;
+    if (s.type && (s.type == "select-one")) {
+        nam = s.name;
+        val = s.options[s.selectedIndex].value;
+    } else if (s.name && s.value) {
+        nam = s.name;
+        val = s.value;
+    }
+    if (nam && val) {
+        dl.params.set(nam, val, relative);
+        display();
+    } else {
+        alert("ERROR: unable to process event!");
+    }
+    return true;
+}
+Digilib.prototype.parseArea = function() {
+    // returns area Rectangle from current parameters
+    return new Rectangle(
+        this.params.get("wx"),
+        this.params.get("wy"),
+        this.params.get("ww"),
+        this.params.get("wh"));
+}
+Digilib.prototype.setParamFromArea = function(rect) {
+    // sets digilib wx etc. from rect
+    this.params.set("wx", cropFloat(rect.x));
+    this.params.set("wy", cropFloat(rect.y));
+    this.params.set("ww", cropFloat(rect.width));
+    this.params.set("wh", cropFloat(rect.height));
+    return true;
+}
+
+Digilib.prototype.parseTrafo = function(elem) {
+    // returns Transform from current dlArea and picsize
+    var picsize = getElementRect(elem);
+    var trafo = new Transform();
+    // subtract area offset and size
+    trafo.concat(trafo.getTranslation(new Position(-this.area.x, -this.area.y)));
+    trafo.concat(trafo.getScale(new Size(1/this.area.width, 1/this.area.height)));
+    // scale to screen size
+    trafo.concat(trafo.getScale(picsize));
+    trafo.concat(trafo.getTranslation(picsize));
+    // FIX ME: Robert, kannst Du mal nachsehen, ob das folgende tut, was es soll?
+    // oder gibt es dafuer neuen Code? -- ROC: Bisher funktioniert es nicht!
+    // rotate
+    //var rot = getRotation(- dl.params.get("rot"), new Position(0.5*picsize.width, 0.5*picsize.height));
+    //trafo.concat(rot);
+    // mirror
+    //if (hasFlag("hmir")) trafo.m00 = - trafo.m00; // ??
+    //if (hasFlag("vmir")) trafo.m11 = - trafo.m11; // ??
+    return trafo;
+}
+
+Digilib.prototype.onLoad = function() {
+    // initialize digilib; called by body.onload
+    this.scalerDiv = getElement("scaler", true);
+    this.scalerImg = getElement("pic", true);
+    this.buttons1Div = getElement("buttons", true);
+    this.buttons2Div = getElement("options", true);
+    /*
+     * if (this.scalerImg == null && this.scalerDiv) { // in N4 pic is in the
+     * scaler layer this.scalerImg = this.scalerDiv.document.images[0]; }
+     */
+    if ((!this.scalerImg)||(!this.scalerDiv)) {
+        alert("Sorry, digilib doesn't work here!");
+        return false;
+    }
+    // fix fixed menus
+    var ms1 = getElementSize(this.buttons1Div);
+    var ms2 = getElementSize(this.buttons2Div);
+    var maxh = (ms1.height > ms2.height) ? ms1.height : ms2.height;
+    var wins = getWinSize();
+    if ((wins.height <= maxh) || (browserType.isIE && (browserType.versIE < 7))) {
+        // unlock fixed menus to absolute if window is too small or IE
+        this.buttons1Div.style.position = "absolute";
+        this.buttons2Div.style.position = "absolute";
+    }
+    this.setScalerImage();	// setzt auch onImgLoad
+    this.setBirdImage();	// laedt das Bird's Eye Bild
+}
+
+Digilib.prototype.setScalerImage = function() {
+    // set the scaler image source (needs the browser size)
+    var picsize = bestPicSize(this.scalerDiv);
+    var menusize = getElementSize(this.buttons1Div);
+    // subtract menu width
+    picsize.width -= menusize.width;
+    picsize.height -= this.INSET;
+    // compose Scaler URL
+    var src = "../servlet/Scaler?" 
+        + this.params.getAll(this.params.PARAM_ALL & ~(this.params.PARAM_MARK | this.params.PARAM_PAGES));
+    if (this.opts.get('fitwidth')) {
+        src += "&dw=" + picsize.width;
+    } else if (this.opts.get('fitheight')) {
+        src += "&dh=" + picsize.height;
+    } else {
+        src += "&dw=" + picsize.width + "&dh=" + picsize.height;
+    }
+    // debug(src);
+    this.scalerImg.onload = onImgLoad;
+    this.scalerImg.src = src;
+
+    var digilib = this;
+    // this is a local callback function that can use the current scope
+
+    function onImgLoad() {
+        if (! digilib)
+            return;
+        // make sure the image is loaded so we know its size
+        /* this test seems to have problems sometimes :-(
+	    if (defined(digilib.scalerImg.complete) && !digilib.scalerImg.complete) {
+			alert("ERROR: the image seems not to be complete in onImgLoad!?");
+		} */
+        digilib.trafo = digilib.parseTrafo(digilib.scalerImg);
+        // display marks
+        digilib.renderMarks();
+        digilib.showBirdDiv(isBirdDivVisible);
+        digilib.showArrows();		// show arrow overlays for zoom navigation
+        //digilib.moveCenter(true);	// click to move point to center
+        // new Slider("sizes", 1, 5, 2);
+        
+        //Drag Image (8.9.2009)
+        if (!digilib.isFullArea())
+            registerEvent("mousedown", digilib.scalerDiv, dragImage);
+
+        focus();
+    }
+}
+
+Digilib.prototype.renderMarks = function() {
+    // make sure the image is loaded so we know its size
+    if (!this.trafo) {
+        alert("ERROR: trafo missing, cannot render marks!");
+        return;
+    }
+    // debugProps(dlArea, "dlArea");
+    for (var i = 0; i < this.marks.length; i++) {
+        var div = getElement("mark" + i, true) || createMarkDiv(i);
+        var mark = this.marks[i];
+        // debugProps(mark, "mark");
+        if (this.area.containsPosition(mark)) {
+            var mpos = this.trafo.transform(mark);
+            // debugProps(mark, "mpos");
+            // better not hide the marked spot (MR)
+            // suboptimal to place -5 pixels and not half size of mark-image
+            // mpos.x = mpos.x -5;
+            // mpos.y = mpos.y -5;
+            moveElement(div, mpos);
+            showElement(div, true);
+        } else {
+            // hide the other marks
+            showElement(div, false);
+        }
+    }
+}
+
+Digilib.prototype.display = function(detail, moDetail) {
+    // redisplay the page
+    var queryString = this.params.getAll(detail, moDetail);
+	location.href
+        = location.protocol + "//"
+    	    + location.host
+    	    + location.pathname
+        + "?" + queryString;
+}
+
+/* **********************************************
+ *     interactive digilib functions
+ * ******************************************** */
+
+Digilib.prototype.setMark = function() {
+    // add a mark where clicked
+    window.focus();
+    this.moveCenter(false);
+    
+    // start event capturing
+    registerEvent("mousedown", this.scalerDiv, markEvent);
+
+    // our own reference to this for the local function
+    var digilib = this;
+	
+    function markEvent(evt) {
+    // event handler adding a new mark
+        unregisterEvent("mousedown", digilib.scalerDiv, markEvent);
+        digilib.marks.addEvent(evt);
+        digilib.display();
+        return stopEvent(evt);
+    }
+    
+}
+
+Digilib.prototype.removeMark = function() {
+    // remove the last mark
+    this.marks.pop();
+    this.display();
+}
+
+Digilib.prototype.resetImage = function() {
+    // reset the image to its original state
+    this.display(this.params.PARAM_FILE); // keep only fn/pn
+}
+
+Digilib.prototype.dragImage = function(evt) {
+    // drag the image and load a new detail on mouse up
+    // makes sense only when zoomed
+    if (this.isFullArea())
+        return;
+    if(evt.preventDefault) evt.preventDefault(); // no Firefox drag and drop
+	var digilib = this; // our own reference to this for the local function
+    var startPos = evtPosition(evt);
+    var pic = this.scalerImg;
+    var picRect = getElementRect(pic);
+     // fit the grey div to the scaler image
+    var div = getElement("bg");
+    var dx = 0;
+    var dy = 0;
+    moveElement(div, picRect);
+    // hide the scaler image, show it as background of div instead
+    showElement(pic, false); 
+    showElement(div, true);
+    div.style.backgroundImage = "url(" + pic.src + ")";
+    div.style.cursor = "move";
+    // start event capturing
+    registerEvent("mousemove", document, moveDragEvent);
+    registerEvent("mouseup", document, moveEndEvent);
+    window.focus();
+
+	function moveDragEvent(evt) {
+    // mousemove handler: drag
+        var pos = evtPosition(evt);
+        // don't use Firefox Drag and Drop feature 
+        if(evt.preventDefault) evt.preventDefault();
+        dx = pos.x - startPos.x;
+        dy = pos.y - startPos.y;
+        // move the background image to the new position
+        div.style.backgroundPosition = dx + "px " + dy + "px";
+        return stopEvent(evt);
+	    }
+
+	function moveEndEvent(evt) {
+    // mouseup handler: reload digilib
+        div.style.cursor = "default";
+        unregisterEvent("mousemove", document, moveDragEvent);
+        unregisterEvent("mouseup", document, moveEndEvent);
+        // calculate relative offset
+        var x = -dx / pic.width;
+        var y = -dy / pic.height;
+        stopEvent(evt);
+        if (dx == 0 && dy == 0)
+            return // no movement
+        // reload with scaler image showing the new ausschnitt
+        return digilib.moveBy(x, y);
+    }
+}
+
+Digilib.prototype.zoomArea = function() {
+    var pt1, pt2;
+    var zoomdiv = getElement("zoom");
+    var overlay = getElement("overlay");
+    // use overlay div to avoid <img> mousemove problems
+    var picRect = getElementRect(this.scalerImg);
+    // FIX ME: is there a way to query the border width from CSS info?
+    // rect.x -= 2; // account for overlay borders
+    // rect.y -= 2;
+    moveElement(overlay, picRect);
+    showElement(overlay, true);
+    // start event capturing
+    registerEvent("mousedown", overlay, zoomStart);
+    registerEvent("mousedown", this.scalerImg, zoomStart);
+    window.focus();
+
+    // our own reference to "this" for the local functions
+    var digilib = this;
+	
+    // mousedown handler: start moving
+    function zoomStart(evt) {
+        pt1 = evtPosition(evt);
+        unregisterEvent("mousedown", overlay, zoomStart);
+        unregisterEvent("mousedown", digilib.scalerImg, zoomStart);
+        // setup and show zoom div
+        moveElement(zoomdiv, Rectangle(pt1.x, pt1.y, 0, 0));
+        showElement(zoomdiv, true);
+        // register events
+        registerEvent("mousemove", document, zoomMove);
+        registerEvent("mouseup", document, zoomEnd);
+        return stopEvent(evt);
+    }
+    
+    // mouseup handler: end moving
+    function zoomEnd(evt) {
+        pt2 = evtPosition(evt);
+        // assume a click if the area is too small (up to 3 x 3 pixel)
+        var clickRect = new Rectangle(pt1, pt2);
+        clickRect.normalize();
+        if (clickRect.getArea() <= digilib.MIN_AREA_SIZE) {
+            return stopEvent(evt);
+        }
+        // hide zoom div
+        showElement(zoomdiv, false);
+        showElement(overlay, false);
+        // unregister events
+        unregisterEvent("mousemove", document, zoomMove);
+        unregisterEvent("mouseup", document, zoomEnd);
+        // clip and transform
+        clickRect.clipTo(picRect);
+        var area = digilib.trafo.invtransform(clickRect);
+        digilib.setParamFromArea(area);
+        // zoomed is always fit
+        digilib.params.set("ws", 1);
+        digilib.display();
+        return stopEvent(evt);
+    }
+    
+    // mouse move handler
+    function zoomMove(evt) {
+        pt2 = evtPosition(evt);
+        var rect = new Rectangle(pt1, pt2);
+        rect.normalize();
+        rect.clipTo(picRect);
+        // update zoom div
+        moveElement(zoomdiv, rect);
+        return stopEvent(evt);
+    	}
+}
+
+Digilib.prototype.zoomBy = function(factor) {
+    // zooms by the given factor
+    var newarea = this.area.copy();
+    newarea.width /= factor;
+    newarea.height /= factor;
+    newarea.x -= 0.5 * (newarea.width - this.area.width);
+    newarea.y -= 0.5 * (newarea.height - this.area.height);
+    newarea = this.MAX_AREA.fit(newarea);
+    this.setParamFromArea(newarea);
+    this.display();
+}
+
+
+Digilib.prototype.zoomFullpage = function(fit) {
+    // zooms out to show the whole image
+    this.params.set("wx", 0.0);
+    this.params.set("wy", 0.0);
+    this.params.set("ww", 1.0);
+    this.params.set("wh", 1.0);
+    if (fit == "width") {
+    		this.opts.set('fitwidth');
+    	} else if (fit == "height") {
+    		this.opts.set('fitheight');
+    	} else {
+    		this.opts.reset('fitwidth');
+    		this.opts.reset('fitheight');
+	}
+    this.display();
+}
+
+
+Digilib.prototype.moveCenter = function(on) {
+    // move visible area so that it's centered around the clicked point
+    if (this.isFullArea()) return; // nothing to do
+    // starting event capture
+    if (on) registerEvent("mousedown", this.scalerImg, moveCenterEvent);
+    else  unregisterEvent("mousedown", this.scalerImg, moveCenterEvent);
+    window.focus();
+    
+	// our own reference to this for the local function
+	var digilib = this;
+
+	function moveCenterEvent(evt) {
+	    // move to handler
+	    var pt = digilib.trafo.invtransform(evtPosition(evt));
+	    var newarea = digilib.area.copy();
+		newarea.setCenter(pt);
+	    newarea.stayInside(this.MAX_AREA);
+	    // newarea = dlMaxArea.fit(newarea);
+	    // debugProps(newarea, "newarea");
+	    // debugProps(dlArea, "dlArea");
+	    if (newarea.equals(digilib.area)) return; // keep event handler
+	    unregisterEvent("mousedown", digilib.scalerImg, moveCenterEvent);
+	    // set parameters
+	    digilib.setParamFromArea(newarea);
+		digilib.display();
+	}
+}
+
+Digilib.prototype.isFullArea = function(area) {
+    if (!area) area = this.area;
+    return (area.width == 1.0) && (area.height == 1.0);
+}
+
+Digilib.prototype.canMove = function(movx, movy) {
+    if (this.isFullArea()) return false;
+    var x2 = this.area.x + this.area.width;
+    var y2 = this.area.y + this.area.height;
+    // debugProps(dlArea);
+    return ((movx < 0) && (this.area.x > 0))
+    	|| ((movx > 0) && (x2 < 1.0))
+	|| ((movy < 0) && (this.area.y > 0))
+    	|| ((movy > 0) && (y2 < 1.0))
+}
+
+Digilib.prototype.moveBy = function(movx, movy) {
+    // move visible area by movx and movy (in units of ww, wh)
+    if (!this.canMove(movx, movy)) return; // nothing to do
+    var newarea = this.area.copy();
+    newarea.x += parseFloat(movx)*this.area.width;
+    newarea.y += parseFloat(movy)*this.area.height;
+    newarea = this.MAX_AREA.fit(newarea);
+    // set parameters
+    this.setParamFromArea(newarea);
+    this.display();
+}
+
+Digilib.prototype.getRef = function(baseUrl) {
+    // returns a reference to the current digilib set
+    if (!baseUrl) baseUrl 
+        = location.protocol
+        + "//" 
+        + location.host
+        + location.pathname;
+    var hyperlinkRef = baseUrl;
+    with (this.params) {
+    		// all without ddpi, pt
+    		var ps = getAll(PARAM_ALL & ~(PARAM_DPI | PARAM_PAGES | PARAM_CLIENT)); 
+    	}
+    if (ps.length > 0) hyperlinkRef += "?" + ps;
+    return hyperlinkRef;
+}
+
+Digilib.prototype.getRefWin = function(type, msg) {
+    // shows an alert with a reference to the current digilib set
+    if (! msg) msg = "URL reference to the current view";
+    prompt(msg, this.getRef());
+}
+
+Digilib.prototype.getQuality = function() {
+    // returns the current q setting
+    for (var i = 0; i < 3; i++) {
+        if (this.flags.get("q"+i)) return i;
+    }
+    return 1
+}
+
+Digilib.prototype.setQuality = function(qual) {
+    // set the image quality
+    if ((qual < 0)||(qual > 2)) return alert("Quality setting not supported");
+    for (var i = 0; i < 3; i++) this.flags.reset("q" + i);
+    this.flags.set("q" + qual);
+    this.display();
+}
+
+Digilib.prototype.setQualityWin = function(msg) {
+    // dialog for setting quality
+    if (! msg) msg = "Quality (0..2)";
+    var q = this.getQuality();
+    var newq = window.prompt(msg, q);
+    if (newq) this.setQuality(newq);
+}
+
+Digilib.prototype.mirror = function(dir) {
+    // mirror the image horizontally or vertically
+    if (dir == "h") {
+    		this.flags.toggle("hmir");
+    	} else {
+    		this.flags.toggle("vmir");
+	}
+    this.display();
+}
+
+Digilib.prototype.gotoPage = function(gopage, keep) {
+    // goto given page nr (+/-: relative)
+    var oldpn = parseInt(this.params.get("pn"));
+    // set with relative=true uses the sign
+    this.params.set("pn", gopage, true);
+    // now check the outcome
+    var pn = parseInt(this.params.get("pn"));
+    if (pn < 1) {
+        alert("No such page! (Page number too low)");
+        this.params.set("pn", oldpn);
+        return;
+    }
+    if (this.params.isSet("pt")) {
+        pt = parseInt(this.params.get("pt"))
+        if (pn > pt) {
+            alert("No such page! (Page number too high)");
+            this.params.set("pn", oldpn);
+            return;
+        }
+    }
+    if (keep) {
+        this.display(this.params.PARAM_ALL & ~this.params.PARAM_MARK); // all, no mark
+    } else {
+        this.display(this.params.PARAM_FILE | this.params.PARAM_MODE | this.params.PARAM_PAGES, this.params.MODE_QUAL | this.params.MODE_OTHER); // fn, pn, ws, mo + pt
+    }
+}
+
+Digilib.prototype.gotoPageWin = function() {
+    // dialog to ask for new page nr
+    var pn = this.params.get("pn");
+    var gopage = window.prompt("Go to page", pn);
+    if (gopage) this.gotoPage(gopage);
+}
+
+Digilib.prototype.setParamWin = function(param, text, relative) {
+    // dialog to ask for new parameter value
+    var val = this.params.get(param);
+    var newval = window.prompt(text, val);
+    if (newval) {
+        this.params.set(param, newval, relative);
+        this.display();
+    }
+}
+
+Digilib.prototype.showOptions = function(show) {
+    // show or hide option div
+    var elem = getElement("dloptions");
+    showElement(elem, show);
+    // FIX ME: get rid of the dotted line around the buttons when focused
+    }
+
+Digilib.prototype.showAboutDiv = function(show) {
+    // show or hide "about" div
+    var elem = getElement("about");
+    if (elem == null) {
+        if (show) alert("About Digilib - dialog missing in HTML code!"
+            + "\nDigilib Version: " + digilibVersion
+            + "\JSP Version: " + jspVersion
+            + "\ndlLib Version: " + dllibVersion
+            + "\nbaseLib Version: " + baseLibVersion);
+        return;
+        }
+    if (show) {
+        getElement("digilib-version").innerHTML = "Digilib Version: " + digilibVersion;
+        getElement("jsp-version").innerHTML = "JSP Version: " + jspVersion;
+        getElement("baselib-version").innerHTML = "baseLib Version: " + baseLibVersion;
+        getElement("dllib-version").innerHTML = "dlLib Version: " + dllibVersion;
+        var aboutRect = getElementRect(elem);
+        aboutRect.setCenter(getWinRect().getCenter());
+        moveElement(elem, aboutRect);
+        }
+    showElement(elem, show);
+    }
+    
+Digilib.prototype.setBirdImage = function() {
+    var img = getElement("bird-image");
+    var src = "../servlet/Scaler?" 
+        + this.params.getAll(this.params.PARAM_FILE)
+        + "&dw=" + this.BIRD_MAXX 
+        + "&dh=" + this.BIRD_MAXY;
+    img.src = src;
+}
+    
+Digilib.prototype.showBirdDiv = function(show) {
+    // show or hide "bird's eye" div
+    var startPos; // anchor for dragging
+    var newRect;  // position after drag
+    var birdImg = getElement("bird-image");
+    var birdArea = getElement("bird-area");
+    var overlay = getElement("bird-overlay");
+    showElement(birdImg, show);
+    // dont show selector if area has full size
+    if (!show || this.isFullArea()) {
+        // hide area
+        showElement(birdArea, false);
+        showElement(overlay, false);
+        return;
+    };
+    var birdImgRect = getElementRect(birdImg);
+    var area = this.area;
+    if (this.flags.get("osize") || this.flags.get("clip")) {
+    		// in original-size and pixel-by-pixel mode the area size is not valid
+    		var birdAreaRect = new Rectangle(
+        		birdImgRect.x + birdImgRect.width  * area.x,
+        		birdImgRect.y + birdImgRect.height * area.y, 
+        		5, 
+        		5);
+    } else {
+    		// scale area down to img size
+    		var birdAreaRect = new Rectangle(
+        		// what about borders ??
+        		birdImgRect.x + birdImgRect.width  * area.x,
+	        birdImgRect.y + birdImgRect.height * area.y,
+	        birdImgRect.width  * area.width,
+	        birdImgRect.height * area.height);
+	}
+    moveElement(birdArea, birdAreaRect);
+    showElement(birdArea, true);
+    moveElement(overlay, birdImgRect);
+    showElement(overlay, true);
+    registerEvent("mousedown", overlay, birdAreaStartDrag);
+    registerEvent("mousedown", birdImg, birdAreaStartDrag);
+
+	// our own reference to this for local functions
+	var digilib = this;
+
+    function birdAreaStartDrag(evt) {
+    // mousedown handler: start drag
+        startPos = evtPosition(evt);
+        unregisterEvent("mousedown", overlay, birdAreaStartDrag);
+        unregisterEvent("mousedown", birdImg, birdAreaStartDrag);
+        registerEvent("mousemove", document, birdAreaMove);
+        registerEvent("mouseup",   document, birdAreaEndDrag);
+        // debugProps(getElementRect(bird))
+        return stopEvent(evt);
+    }
+
+    function birdAreaMove(evt) {
+    // mousemove handler: drag
+        var pos = evtPosition(evt);
+        var dx = pos.x - startPos.x;
+        var dy = pos.y - startPos.y;
+        // move birdArea div, keeping size
+        newRect = new Rectangle(
+            birdAreaRect.x + dx,
+            birdAreaRect.y + dy,
+            birdAreaRect.width,
+            birdAreaRect.height);
+        // stay within image
+        newRect.stayInside(birdImgRect);
+        moveElement(birdArea, newRect);
+        showElement(birdArea, true);
+        return stopEvent(evt);
+    }
+
+    function birdAreaEndDrag(evt) {
+    // mouseup handler: reload page
+        unregisterEvent("mousemove", document, birdAreaMove);
+        unregisterEvent("mouseup",   document, birdAreaEndDrag);
+        showElement(overlay, false);
+        if (newRect == null) { // no movement happened
+            startPos = birdAreaRect.getCenter();
+            birdAreaMove(evt); // set center to click position
+            }
+        digilib.params.set("wx", cropFloat((newRect.x - birdImgRect.x) / birdImgRect.width));
+        digilib.params.set("wy", cropFloat((newRect.y - birdImgRect.y) / birdImgRect.height));
+        // zoomed is always fit
+        digilib.params.set("ws", 1);
+        digilib.display();
+        return stopEvent(evt);
+    }
+}
+
+Digilib.prototype.showArrow = function(name, rect, show) {
+    var arrow = getElement(name);
+    moveElement(arrow, rect);
+    showElement(arrow, show);
+}
+	
+Digilib.prototype.showArrows = function() {
+    // show the 4 arrow bars on top of scaler img according to current dlArea
+    var r = getElementRect(this.scalerImg);
+    this.showArrow('up',
+        new Rectangle(r.x, r.y, r.width, this.ARROW_WIDTH), 
+        this.canMove(0, -1)
+        );
+    this.showArrow('down',
+        new Rectangle(r.x, r.y + r.height - this.ARROW_WIDTH, r.width, this.ARROW_WIDTH),
+        this.canMove(0, 1)
+        );
+    this.showArrow('left',
+        new Rectangle(r.x, r.y, this.ARROW_WIDTH, r.height),
+        this.canMove(-1, 0)
+        );
+    this.showArrow('right',
+        new Rectangle(r.x + r.width - this.ARROW_WIDTH, r.y, this.ARROW_WIDTH, r.height),
+        this.canMove(1, 0)
+        );
+	}
+
+Digilib.prototype.calibrate = function() {
+    // calibrate screen resolution
+    var calDiv = getElement("calibration");
+    var calRect = getElementRect(calDiv);
+    moveCenter(false);
+    var wins = getWinSize();
+    calRect.setCenter(new Position(wins.width / 2, wins.height / 2));
+    moveElement(calDiv, calRect);
+    showElement(calDiv, true);
+    var cm = window.prompt("The length of the scale on your screen in centimeter:");
+    if (cm) {
+    		var dpi = calRect.width / parseFloat(cm) * 2.54;
+    		this.params.set("ddpi", cropFloat(dpi));
+    	}
+    	showElement(calDiv, false);
+}
+
+
+Digilib.prototype.setScale = function(scale) {
+	// sets original-size, pixel-by-pixel or fit-to-screen scale type
+	if (scale == "pixel") {
+		// pixel by pixel
+		this.flags.set("clip");
+		this.flags.reset("osize");
+		this.flags.reset("fit");
+	} else if (scale == "original") {
+		// original size -- needs calibrated screen
+        if (!this.params.isSet("ddpi")) {
+        		var dpi = cookie.get("ddpi");
+	        if (dpi == null) {
+    		        alert("Your screen has not yet been calibrated - using default value of 72 dpi");
+            		dpi = 72;
+            	}
+        		this.params.set("ddpi", dpi);
+        	}
+        this.flags.set("osize");
+        this.flags.reset("clip");
+		this.flags.reset("fit");
+    } else {
+    		// scale to screen size (default)
+    		this.flags.reset("clip");
+    		this.flags.reset("osize");
+    	}
+    this.display();
+}
+
+Digilib.prototype.getScale = function() {
+	// returns scale type
+	if (this.flags.get("clip")) {
+		return "pixel";
+	} else if (this.flags.get("osize")) {
+		return "original";
+	} else {
+		return "fit";
+	}
+}	
+
+Digilib.prototype.pageWidth = function() {
+	this.zoomFullpage('width');
+}
+
+Digilib.prototype.setSize = function(factor) {
+    this.params.set("ws", factor);
+    this.display();
+}
+
+Digilib.prototype.showMenu = function(menuId, buttonId, show) {
+    var menu = getElement(menuId);
+    if (show) {
+        // align right side of menu with button
+        var buttonPos = getElementPosition(getElement(buttonId));
+        var menusize = getElementSize(menu);
+        moveElement(menu, new Position(buttonPos.x - menusize.width - 3, buttonPos.y));
+        }
+    showElement(menu, show);
+}
+
+
+/********************************
+ * global variables
+ ********************************/
+
+var dl = new Digilib();
+
+/* old parameter function compatibility stuff */
+function newParameter(a,b,c) {return dl.params.define(a,b,c)};
+function resetParameter(a) {return dl.params.reset(a)};
+function deleteParameter(a) {return dl.params.remove(a)};
+function getParameter(a) {return dl.params.get(a)};
+function setParameter(a,b,c) {return dl.params.set(a,b,c)};
+function hasParameter(a) {return dl.params.isSet(a)};
+function getAllParameters(a) {return dl.params.getAll(a)};
+getQueryString = getAllParameters;
+function parseParameters(a) {return dl.params.parse(a)};
+function getAllMarks() {return dl.marks.getAll()};
+getMarksQueryString = getAllMarks;
+function addMark(evt) {return dl.marks.addEvent(evt)};
+function deleteMark() {return dl.marks.pop()};
+function deleteAllMarks() {return dl.marks = new Marks()};
+function hasFlag(mode) {return dl.flags.get(mode)};
+function addFlag(mode) {return dl.flags.set(mode)};
+function removeFlag(mode) {return dl.flags.reset(mode)};
+function toggleFlag(mode) {return dl.flags.toggle(mode)};
+function getAllFlags() {return dl.flags.getAll()};
+/* old digilib function compatibility */
+function setDLParam(e, s, relative) {dl.setDLParam(e, s, relative)};
+function display(detail, moDetail) {dl.display(detail, moDetail)};
+function setMark(reload) {dl.setMark(reload)};
+function removeMark(reload) {dl.removeMark(reload)};
+function resetImage() {dl.resetImage()};
+function dragImage(evt) {dl.dragImage(evt)};
+function zoomArea() {dl.zoomArea()};
+function zoomBy(factor) {dl.zoomBy(factor)};
+function zoomFullpage(a) {dl.zoomFullpage(a)};
+function moveCenter(on) {dl.moveCenter(on)};
+function isFullArea(area) {dl.isFullArea(area)};
+function canMove(movx, movy) {dl.canMove(movx, movy)};
+function moveBy(movx, movy) {dl.moveBy(movx, movy)};
+function getRef(baseURL) {dl.getRef(baseURL)};
+function getRefWin(type, msg) {dl.getRefWin(type, msg)};
+function getQuality() {dl.getQuality()};
+function setQuality(qual) {dl.setQuality(qual)};
+function setQualityWin(msg) {dl.setQualityWin(msg)};
+function mirror(dir) {dl.mirror(dir)};
+function gotoPage(gopage, keep) {dl.gotoPage(gopage, keep)};
+function gotoPageWin() {dl.gotoPageWin()};
+function setParamWin(param, text, relative) {dl.setParamWin(param, text, relative)};
+function showOptions(show) {dl.showOptions(show)};
+function showBirdDiv(show) {dl.showBirdDiv(show)};
+function showAboutDiv(show) {dl.showAboutDiv(show)};
+function calibrate(direction) {dl.calibrate(direction)};
+function setScale(a) {dl.setScale(a)};
+function getScale(a) {dl.getScale(a)};
+function originalSize(on) {dl.originalSize(on)};
+function pixelByPixel(on) {dl.pixelByPixel(on)};
+function pageWidth() {dl.pageWidth()};
+function setSize(factor) {dl.setSize(factor)};
+function showMenu(a,b,c) {dl.showMenu(a,b,c)};
+
+
+// :tabSize=4:indentSize=4:noTabs=true:
+
Binary file client/digitallibrary/greyskin/down.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/down.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,79 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48"
+   height="48"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\Digilib\greyskin"
+   sodipodi:docname="down.svg"
+   inkscape:export-filename="C:\digilib\greyskin\down.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000"
+   version="1.0">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="30.235294"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="234"
+     inkscape:window-y="77" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       style="opacity:1;fill:#ffa060;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       d="M 23.6875,42.214557 C 13.517688,41.821426 5.3749998,33.298347 5.375,22.870807 C 5.375,12.193005 13.927192,3.5270576 24.4375,3.5270566 C 31.499113,3.5270566 37.650231,7.4400376 40.9375,13.245807 L 24.5,13.245807 L 8,13.245807 L 16.25,27.527057 L 24.5,41.808307 L 32.75,27.527057 L 40.96875,13.308307 C 42.552395,16.129468 43.46875,19.392821 43.46875,22.870807 C 43.46875,33.548609 34.947807,42.214557 24.4375,42.214557 C 24.191165,42.214557 23.931575,42.223992 23.6875,42.214557 z "
+       id="path2396" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/first.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/first.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,106 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="first.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\first.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       d="M 23.6875 3.53125 C 13.517688 3.9243803 5.3749998 12.44746 5.375 22.875 C 5.375 33.552802 13.927192 42.218749 24.4375 42.21875 C 34.947807 42.21875 43.468749 33.552802 43.46875 22.875 C 43.46875 12.197198 34.947807 3.53125 24.4375 3.53125 C 24.191165 3.53125 23.931575 3.5218149 23.6875 3.53125 z M 33.15625 16 L 33.15625 32.09375 L 19.1875 23.875 L 33.15625 16 z "
+       id="path2396" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;display:inline"
+       d="M 17.017857,14.285715 L 17.017857,33.142857"
+       id="path1372" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 33.383475,15.616525 L 33.383475,31.704904 L 19.408897,23.484565 L 33.383475,15.616525 z "
+       id="path2576" />
+  </g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/firstlast.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,111 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.42.2"
+   sodipodi:docbase="/Volumes/User/Users/casties/Desktop/web-devel/digibutton"
+   sodipodi:docname="firstlast.svg"
+   inkscape:export-filename="/Volumes/User/Users/casties/Desktop/web-devel/digibutton/first.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7.0000000"
+     inkscape:cx="24.000000"
+     inkscape:cy="20.000000"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="688"
+     inkscape:window-height="491"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1.0000000;fill:#707070;fill-opacity:0.35526314;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:0.50331128"
+       id="path2396"
+       sodipodi:cx="30.214285"
+       sodipodi:cy="26.214285"
+       sodipodi:rx="17.928572"
+       sodipodi:ry="18.214285"
+       d="M 48.142857 26.214285 A 17.928572 18.214285 0 1 1  12.285713,26.214285 A 17.928572 18.214285 0 1 1  48.142857 26.214285 z"
+       transform="matrix(1.062015,0.000000,0.000000,1.062015,-7.659466,-4.965116)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2330508;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+       d="M 33.000000,13.571429 L 33.000000,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2330508;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000;display:inline"
+       d="M 33.151332,16.009382 L 33.151332,32.097761 L 19.176755,23.877422 L 33.151332,16.009382 z "
+       id="path1370" />
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;display:inline"
+       d="M 17.017857,14.285715 L 17.017857,33.142857"
+       id="path1372" />
+  </g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/fixed.js	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,354 @@
+// fixed.js: fix fixed positioning and fixed backgrounds in IE/Win
+// version 1.8, 08-Aug-2003
+// written by Andrew Clover <and@doxdesk.com>, use freely
+
+/*@cc_on
+@if (@_win32 && @_jscript_version>4)
+
+var fixed_positions= new Array();
+var fixed_backgrounds= new Array();
+var fixed_viewport;
+
+// Initialisation. Called when the <body> tag arrives. Set up viewport so the
+// rest of the script knows we're going, and add a measurer div, used to detect
+// font size changes and measure image sizes for backgrounds later   
+
+function fixed_init() {
+  fixed_viewport= (document.compatMode=='CSS1Compat') ?
+    document.documentElement : document.body;
+  var el= document.createElement('div');
+  el.setAttribute('id', 'fixed-measure');
+  el.style.position= 'absolute';
+  el.style.top= '0'; el.style.left= '0';
+  el.style.overflow= 'hidden'; el.style.visibility= 'hidden';
+  el.style.fontSize= 'xx-large'; el.style.height= '5em';
+  el.style.setExpression('width', 'fixed_measureFont()');
+  document.body.insertBefore(el, document.body.firstChild);
+}
+
+// Binding. Called every time an element is added to the document, check it
+// for fixed features, if found add to our lists and set initial props   
+
+function fixed_bind(el) {
+  var needLayout= false;
+  var tag= el.tagName.toLowerCase();
+  var st= el.style;
+  var cst= el.currentStyle;
+  var anc;
+
+  // find fixed-position elements
+  if (cst.position=='fixed') {
+    needLayout= true;
+    fixed_positions[fixed_positions.length]= el;
+    // store original positioning as we'll overwrite it
+    st.position= 'absolute';
+    st.fixedPLeft=   cst.left;
+    st.fixedPTop=    cst.top;
+    st.fixedPRight=  cst.right;
+    st.fixedPBottom= cst.bottom;
+    st.fixedPWidth=  fixed_parseLength(cst.width);
+    st.fixedPHeight= fixed_parseLength(cst.height);
+    // find element that will act as containing box, for convenience later
+    st.fixedCB= null;
+    for (anc= el; (anc= anc.parentElement).parentElement;) {
+      if (anc.currentStyle.position!='static') {
+        st.fixedCB= anc;
+        break;
+    } }
+    // detect nested fixed positioning (only ancestor need move)
+    st.fixedNest= false;
+    for (anc= el; anc= anc.parentElement;) {
+      if (anc.style.fixedNest!=null)
+        st.fixedNest= true;
+        break;
+    }
+  }
+
+  // find fixed-background elements (not body/html which IE already gets right)
+  if (cst.backgroundAttachment=='fixed' && tag!='body' && tag!='html') {
+    needLayout= true;
+    fixed_backgrounds[fixed_backgrounds.length]= el;
+    // get background offset, converting from keyword if necessary
+    st.fixedBLeft= fixed_parseLength(cst.backgroundPositionX);
+    st.fixedBTop=  fixed_parseLength(cst.backgroundPositionY);
+    // if it's a non-zero %age, need to know size of image for layout
+    if (st.fixedBLeft[1]=='%' || st.fixedBTop[1]=='%') {
+      st.fixedBWidth= 0; st.fixedBHeight= 0;
+      fixed_measureBack(el);
+    }
+  }
+  if (needLayout) fixed_layout();
+}
+
+// Layout. On every window or font size change, recalculate positioning   
+
+// Request re-layout at next free moment
+var fixed_delaying= false;
+function fixed_delayout() {
+  if (fixed_delaying) return;
+  fixed_delaying= true;
+  window.setTimeout(fixed_layout, 0);
+}
+
+var fixed_ARBITRARY= 200;
+
+function fixed_layout() {
+  fixed_delaying= false;
+  if (!fixed_viewport) return;
+  var i, el, st, j, pr, tmp, A= 'auto';
+  var cb, cbLeft, cbTop, cbRight, cbBottom, oLeft, oTop, oRight, oBottom;
+  var vpWidth=fixed_viewport.clientWidth, vpHeight=fixed_viewport.clientHeight;
+
+  // calculate initial position for fixed-position elements [black magic]
+  for (i= fixed_positions.length; i-->0;) {
+    el= fixed_positions[i]; st= el.style;
+    // find positioning of containing block
+    cb= st.fixedCB; if (!cb) cb= fixed_viewport;
+    cbLeft= fixed_pageLeft(cb); cbTop= fixed_pageTop(cb);
+    if (cb!=fixed_viewport) { cbLeft+= cb.clientLeft; cbTop+= cb.clientTop; }
+    cbRight= fixed_viewport.clientWidth-cbLeft-cb.clientWidth;
+    cbBottom= fixed_viewport.clientHeight-cbTop-cb.clientHeight;
+    // if size is in %, must recalculate relative to viewport
+    if (st.fixedPWidth[1]=='%')
+      st.width= Math.round(vpWidth*st.fixedPWidth[0]/100)+'px';
+    if (st.fixedPHeight[1]=='%')
+      st.height= Math.round(vpHeight*st.fixedPHeight[0]/100)+'px';
+    // find out offset values at max size, to account for margins
+    st.left= A; st.right= '0'; st.top= A; st.bottom= '0';
+    oRight= el.offsetLeft+el.offsetWidth; oBottom= el.offsetTop+el.offsetHeight;
+    st.left= '0'; st.right= A; st.top= '0'; st.bottom= A;
+    oLeft= el.offsetLeft; oTop= el.offsetTop;
+    // use this to convert all edges to pixels
+    st.left= A; st.right= st.fixedPRight;
+    st.top= A; st.bottom= st.fixedPBottom;
+    oRight-= el.offsetLeft+el.offsetWidth;
+    oBottom-= el.offsetTop+el.offsetHeight;
+    st.left= st.fixedPLeft; st.top= st.fixedPTop;
+    oLeft= el.offsetLeft-oLeft; oTop= el.offsetTop-oTop;
+    // edge positioning fix
+    if (st.fixedPWidth[1]==A && st.fixedPLeft!=A && st.fixedPRight!=A) {
+      tmp= el.offsetLeft; st.left= A; st.width= fixed_ARBITRARY+'px';
+      tmp= fixed_ARBITRARY+el.offsetLeft-tmp+cbLeft+cbRight;
+      st.left= st.fixedPLeft; st.width= ((tmp<1)?1:tmp)+'px';
+    }
+    if (st.fixedPHeight[1]==A && st.fixedPTop!=A && st.fixedPBottom!=A) {
+      tmp= el.offsetTop; st.top= A; st.height= fixed_ARBITRARY+'px';
+      tmp= fixed_ARBITRARY+el.offsetTop-tmp+cbTop+cbBottom;
+      st.top= st.fixedPTop; st.height= ((tmp<1)?1:tmp)+'px';
+    }
+    // move all non-auto edges relative to the viewport
+    st.fixedCLeft= (st.fixedPLeft=='auto') ? oLeft : oLeft-cbLeft;
+    st.fixedCTop= (st.fixedPTop=='auto') ? oTop : oTop-cbTop;
+    st.fixedCRight= (st.fixedPRight=='auto') ? oRight : oRight-cbRight;
+    st.fixedCBottom= (st.fixedPBottom=='auto') ? oBottom : oBottom-cbBottom;
+    // remove left-positioning of right-positioned elements
+    if (st.fixedPLeft=='auto' && st.fixedPRight!='auto') st.fixedCLeft= 'auto';
+    if (st.fixedPTop=='auto' && st.fixedPBottom!='auto') st.fixedCTop= 'auto';
+  }
+
+
+  // calculate initial positioning of fixed backgrounds
+  for (i= fixed_backgrounds.length; i-->0;) {
+    el= fixed_backgrounds[i]; st= el.style;
+    tmp= st.fixedBImage;
+    if (tmp) {
+      if (tmp.readyState!='uninitialized') {
+        st.fixedBWidth= tmp.offsetWidth;
+        st.fixedBHeight= tmp.offsetHeight;
+        st.fixedBImage= window.undefined;
+      }
+    }
+    st.fixedBX= fixed_length(el, st.fixedBLeft, vpWidth-st.fixedBWidth);
+    st.fixedBY= fixed_length(el, st.fixedBTop, vpHeight-st.fixedBHeight);
+  }
+
+  // now call scroll() to set the positions from the values just calculated
+  fixed_scroll();
+}
+
+// Scrolling. Offset fixed elements relative to viewport scrollness
+
+var fixed_lastX, fixed_lastY;
+var fixed_PATCHDELAY= 300;
+var fixed_patching= false;
+
+// callback function after a scroll, because incorrect scroll position is
+// often reported first go!
+function fixed_patch() {
+  fixed_patching= false;
+  var scrollX= fixed_viewport.scrollLeft, scrollY= fixed_viewport.scrollTop;
+  if (scrollX!=fixed_lastX && scrollY!=fixed_lastY) fixed_scroll();
+}
+
+function fixed_scroll() {
+  if (!fixed_viewport) return;
+  var i, el, st, viewportX, viewportY;
+  var scrollX= fixed_viewport.scrollLeft, scrollY= fixed_viewport.scrollTop;
+  fixed_lastX= scrollX; fixed_lastY= scrollY;
+
+  // move non-nested fixed-position elements
+  for (i= fixed_positions.length; i-->0;) {
+    st= fixed_positions[i].style;
+    viewportX= (st.fixedNest) ? 0 : scrollX;
+    viewportY= (st.fixedNest) ? 0 : scrollY;
+    if (st.fixedCLeft!='auto') st.left= (st.fixedCLeft+viewportX)+'px';
+    if (st.fixedCTop!='auto') st.top= (st.fixedCTop+viewportY)+'px';
+    viewportX= (st.fixedCB==null || st.fixedCB==fixed_viewport) ? 0 : viewportX;
+    viewportY= (st.fixedCB==null || st.fixedCB==fixed_viewport) ? 0 : viewportY;
+    st.right= (st.fixedCRight-viewportX+1)+'px'; st.right= (st.fixedCRight-viewportX)+'px';
+    st.bottom= (st.fixedCBottom-viewportY+1)+'px'; st.bottom= (st.fixedCBottom-viewportY)+'px';
+  }
+
+  // align fixed backgrounds to viewport
+  for (i= fixed_backgrounds.length; i-->0;) {
+    el= fixed_backgrounds[i]; st= el.style;
+    viewportX= scrollX;
+    viewportY= scrollY;
+    while (el.offsetParent) {
+      viewportX-= el.offsetLeft+el.clientLeft;
+      viewportY-= el.offsetTop +el.clientTop;
+      el= el.offsetParent;
+    }
+    st.backgroundPositionX= (st.fixedBX+viewportX)+'px';
+    st.backgroundPositionY= (st.fixedBY+viewportY)+'px';
+  }
+
+  // call back again in a tic
+  if (!fixed_patching) {
+    fixed_patching= true;
+    window.setTimeout(fixed_patch, fixed_PATCHDELAY);
+  }
+}
+
+// Measurement. Load bg-image into an invisible element on the page, when
+// loaded write the width/height to an element's style for layout use; detect
+// when font size changes
+
+function fixed_measureBack(el) {
+  var measure= document.getElementById('fixed-measure');
+  var img= document.createElement('img');
+  img.setAttribute('src', fixed_parseURL(el.currentStyle.backgroundImage));
+  measure.appendChild(img);
+  el.style.fixedBImage= img;
+  if (img.readyState=='uninitialized')
+    img.attachEvent('onreadystatechange', fixed_measureBackImage_ready);
+}
+
+function fixed_measureBackImage_ready() {
+  var img= event.srcElement;
+  if (img && img.readyState!='uninitialized') {
+    img.detachEvent('onreadystatechange', fixed_measureBackImage_ready);
+    fixed_layout();
+  }
+}
+
+var fixed_fontsize= 0;
+function fixed_measureFont() {
+  var fs= document.getElementById('fixed-measure').offsetHeight;
+  if (fixed_fontsize!=fs && fixed_fontsize!=0)
+    fixed_delayout();
+  fixed_fontsize= fs;
+  return '5em';
+}
+
+// Utility. General-purpose functions
+
+// parse url() to get value inside
+
+function fixed_parseURL(v) {
+  v= v.substring(4, v.length-1);
+  if (v.charAt(0)=='"' && v.charAt(v.length-1)=='"' ||
+      v.charAt(0)=="'" && v.charAt(v.length-1)=="'")
+    return v.substring(1, v.length-1);
+  else return v;
+}
+
+// parse length or auto or background-position keyword into number and unit
+
+var fixed_numberChars= '+-0123456789.';
+var fixed_ZERO= new Array(0, 'px');
+var fixed_50PC= new Array(50, '%');
+var fixed_100PC= new Array(100, '%');
+var fixed_AUTO= new Array(0, 'auto');
+
+function fixed_parseLength(v) {
+  var num, i;
+  if (v=='left'  || v=='top')    return fixed_ZERO;
+  if (v=='right' || v=='bottom') return fixed_100PC;
+  if (v=='center') return fixed_50PC;
+  if (v=='auto')   return fixed_AUTO;
+  i= 0;
+  while (i<v.length && fixed_numberChars.indexOf(v.charAt(i))!=-1)
+    i++;
+  num= parseFloat(v.substring(0, i));
+  if (num==0) return fixed_ZERO;
+  else return new Array(num, v.substring(i));
+}
+
+// convert parsed (number, unit) into a number of pixels
+
+function fixed_length(el, l, full) {
+  var tmp, x;
+  if (l[1]=='px') return l[0];
+  if (l[1]=='%')  return Math.round(full*l[0]/100);
+  // other units - measure by setting position; this is rather inefficient
+  // but then these units are used for background-position so seldom...
+  tmp= el.currentStyle.left;
+  el.style.left= '0';
+  x= el.offsetLeft;
+  el.style.left= l[0]+l[1];
+  x= el.offsetLeft-x;
+  el.style.left= tmp;
+  return x;
+}
+
+// convert stupid IE offsetLeft/Top to page-relative values
+
+function fixed_pageLeft(el) {
+  var v= 0;
+  while (el.offsetParent) {
+    v+= el.offsetLeft;
+    el= el.offsetParent;
+  }
+  return v;
+}
+function fixed_pageTop(el) {
+  var v= 0;
+  while (el.offsetParent) {
+    v+= el.offsetTop;
+    el= el.offsetParent;
+  }
+  return v;
+}
+
+// Scanning. Check document every so often until it has finished loading. Do
+// nothing until <body> arrives, then call main init. Pass any new elements
+// found on each scan to be bound   
+
+var fixed_SCANDELAY= 500;
+
+function fixed_scan() {
+  if (!document.body) return;
+  if (!fixed_viewport) fixed_init();
+  var el;
+  for (var i= 0; i<document.all.length; i++) {
+    el= document.all[i];
+    if (!el.fixed_bound) {
+      el.fixed_bound= true;
+      fixed_bind(el);
+  } }
+}
+
+var fixed_scanner;
+function fixed_stop() {
+  window.clearInterval(fixed_scanner);
+  fixed_scan();
+}
+
+fixed_scan();
+fixed_scanner= window.setInterval(fixed_scan, fixed_SCANDELAY);
+window.attachEvent('onload', fixed_stop);
+window.attachEvent('onresize', fixed_delayout);
+window.attachEvent('onscroll', fixed_scroll);
+
+@end @*/
Binary file client/digitallibrary/greyskin/fwd.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/fwd.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,97 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="fwd.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\fwd.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="22"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       d="M 25.15625,3.53125 C 35.326062,3.9243803 43.46875,12.44746 43.46875,22.875 C 43.46875,33.552802 34.916558,42.218749 24.40625,42.21875 C 13.895943,42.21875 5.375001,33.552802 5.375,22.875 C 5.375,12.197198 13.895943,3.53125 24.40625,3.53125 C 24.652585,3.53125 24.912175,3.5218149 25.15625,3.53125 z M 17.09375,13.75 L 17.09375,33.3125 L 34.09375,23.3125 L 17.09375,13.75 z "
+       id="path2396" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.5000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
+       d="M 17.000000,13.428571 L 17.000000,33.000000 L 34.000000,23.000000 L 17.000000,13.428571 z "
+       id="path7614" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 17.59375,13.678571 L 17.59375,33.25 L 34.59375,23.25 L 17.59375,13.678571 z "
+       id="path2474" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/help.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/help.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,115 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="help.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\help.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       id="path2396"
+       sodipodi:cx="30.214285"
+       sodipodi:cy="26.214285"
+       sodipodi:rx="17.928572"
+       sodipodi:ry="18.214285"
+       d="M 48.142857 26.214285 A 17.928572 18.214285 0 1 1  12.285713,26.214285 A 17.928572 18.214285 0 1 1  48.142857 26.214285 z"
+       transform="matrix(1.062015,0,0,1.062015,-7.659466,-4.965116)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <text
+       xml:space="preserve"
+       style="font-size:39.96018219px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="13.12768"
+       y="39.322536"
+       id="text4225"
+       transform="scale(1.062771,0.940936)"><tspan
+         sodipodi:role="line"
+         id="tspan4227"
+         x="13.12768"
+         y="39.322536">?</tspan></text>
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/last.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/last.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,106 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="last.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\last.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       d="M 25.15625,3.53125 C 35.326062,3.9243803 43.46875,12.44746 43.46875,22.875 C 43.46875,33.552802 34.916558,42.218749 24.40625,42.21875 C 13.895943,42.21875 5.375001,33.552802 5.375,22.875 C 5.375,12.197198 13.895943,3.53125 24.40625,3.53125 C 24.652585,3.53125 24.912175,3.5218149 25.15625,3.53125 z M 15.6875,16 L 15.6875,32.09375 L 29.65625,23.875 L 15.6875,16 z "
+       id="path2396" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="M 31.825893,14.285715 L 31.825893,33.142857"
+       id="path1372" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 15.460275,15.616525 L 15.460275,31.704904 L 29.434853,23.484565 L 15.460275,15.616525 z "
+       id="path2576" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/left.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/left.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,79 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48"
+   height="48"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\Digilib\greyskin"
+   sodipodi:docname="left.svg"
+   inkscape:export-filename="C:\digilib\greyskin\left.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000"
+   version="1.0">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="30.235294"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       style="opacity:1;fill:#ffa060;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       d="M 5.0802215,22.138528 C 5.4733525,11.968716 13.996431,3.8260283 24.423971,3.8260285 C 35.101773,3.8260285 43.767721,12.37822 43.767722,22.888528 C 43.767722,29.950141 39.854741,36.101259 34.048971,39.388528 L 34.048971,22.951028 L 34.048971,6.4510285 L 19.767721,14.701028 L 5.4864715,22.951028 L 19.767721,31.201028 L 33.986471,39.419778 C 31.16531,41.003423 27.901957,41.919778 24.423971,41.919778 C 13.746169,41.919778 5.0802215,33.398835 5.0802215,22.888528 C 5.0802215,22.642193 5.0707865,22.382603 5.0802215,22.138528 z "
+       id="path2396" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/mark-bg-16.png has changed
Binary file client/digitallibrary/greyskin/mark-bg.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/mark-bg.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,119 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="210mm"
+   height="297mm"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="/Volumes/Schlachteplatte/Users/casties/Documents/prog/java/workspace/client/digitallibrary/greyskin"
+   sodipodi:docname="mark-bg2.svg"
+   inkscape:export-filename="/Volumes/Schlachteplatte/Users/casties/Documents/prog/java/workspace/client/digitallibrary/greyskin/mark-bg-16.png"
+   inkscape:export-xdpi="4.654716"
+   inkscape:export-ydpi="4.654716">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3076">
+      <stop
+         id="stop3078"
+         offset="0"
+         style="stop-color:#651f0f;stop-opacity:1;" />
+      <stop
+         id="stop3080"
+         offset="1"
+         style="stop-color:#e46648;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3963">
+      <stop
+         style="stop-color:#c49c85;stop-opacity:1;"
+         offset="0"
+         id="stop3965" />
+      <stop
+         style="stop-color:#db4521;stop-opacity:1;"
+         offset="1"
+         id="stop3967" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3082">
+      <stop
+         id="stop3084"
+         offset="0"
+         style="stop-color:#ff0000;stop-opacity:1;" />
+      <stop
+         id="stop3086"
+         offset="1"
+         style="stop-color:#ff0000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient1310">
+      <stop
+         style="stop-color:#ff0000;stop-opacity:1;"
+         offset="0"
+         id="stop1312" />
+      <stop
+         style="stop-color:#ff0000;stop-opacity:0;"
+         offset="1"
+         id="stop1314" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="3.8757764"
+     inkscape:cx="151.17398"
+     inkscape:cy="906.44231"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     inkscape:window-width="879"
+     inkscape:window-height="711"
+     inkscape:window-x="88"
+     inkscape:window-y="88"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <sodipodi:guide
+       orientation="vertical"
+       position="110.152"
+       id="guide1315" />
+    <sodipodi:guide
+       orientation="horizontal"
+       position="944.16"
+       id="guide1317" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <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>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:#f12d00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="M 86.073825,86.856886 C 110.16054,119.9571 127.91147,196.14366 127.15806,199.22781 C 127.15806,199.22781 120.92452,223.45391 120.92452,245.85115 C 120.92452,323.13115 174.1575,389.5 251.4375,389.5 C 328.7175,389.5 391.43749,326.78 391.4375,249.5 C 391.4375,172.22 326.99551,114.81273 249.97796,121.17633 L 207.73033,124.66706 C 202.54179,125.44165 124.88498,107.49727 86.073825,86.856886 z "
+       id="path3088"
+       sodipodi:nodetypes="ccsssscc"
+       inkscape:export-filename="/Volumes/Schlachteplatte/Users/casties/Documents/prog/java/workspace/client/digitallibrary/greyskin/mark-bg.png"
+       inkscape:export-xdpi="6.9820738"
+       inkscape:export-ydpi="6.9820738" />
+  </g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/mark-bg_old.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,126 @@
+<?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://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="210mm"
+   height="297mm"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="/Volumes/Schlachteplatte/Users/casties/Documents/prog/java/workspace/client/digitallibrary/greyskin"
+   sodipodi:docname="mark-bg.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3963">
+      <stop
+         style="stop-color:#c49c85;stop-opacity:1;"
+         offset="0"
+         id="stop3965" />
+      <stop
+         style="stop-color:#db4521;stop-opacity:1;"
+         offset="1"
+         id="stop3967" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3082">
+      <stop
+         id="stop3084"
+         offset="0"
+         style="stop-color:#ff0000;stop-opacity:1;" />
+      <stop
+         id="stop3086"
+         offset="1"
+         style="stop-color:#ff0000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient1310">
+      <stop
+         style="stop-color:#ff0000;stop-opacity:1;"
+         offset="0"
+         id="stop1312" />
+      <stop
+         style="stop-color:#ff0000;stop-opacity:0;"
+         offset="1"
+         id="stop1314" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3963"
+       id="radialGradient3969"
+       cx="163.01688"
+       cy="332.7197"
+       fx="163.01688"
+       fy="332.7197"
+       r="140.5"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-5.18401e-7,0.572953,-0.63396,-5.735991e-7,373.7883,110.3898)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.3283607"
+     inkscape:cx="250.79029"
+     inkscape:cy="803.50858"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="88"
+     inkscape:window-y="88"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <sodipodi:guide
+       orientation="vertical"
+       position="110.152"
+       id="guide1315" />
+    <sodipodi:guide
+       orientation="horizontal"
+       position="944.16"
+       id="guide1317" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <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>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:#da4521;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 181.33867,127.68485 L 110.152,108.20218 L 135.62933,169.64752 L 181.33867,127.68485 z "
+       id="path1319" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient3969);fill-opacity:1.0;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="path3088"
+       sodipodi:cx="222.85715"
+       sodipodi:cy="238.07646"
+       sodipodi:rx="140"
+       sodipodi:ry="140"
+       d="M 362.85715 238.07646 A 140 140 0 1 1  82.857147,238.07646 A 140 140 0 1 1  362.85715 238.07646 z"
+       transform="translate(28.57143,11.42857)"
+       inkscape:export-filename="C:\Digilib\greyskin\mark-bg-16.png"
+       inkscape:export-xdpi="5.1245551"
+       inkscape:export-ydpi="5.1245551" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/mark.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/mark.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,121 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="mark.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\mark.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1.0000000;fill:#707070;fill-opacity:0.35526314;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:0.50331128"
+       id="path2396"
+       sodipodi:cx="30.214285"
+       sodipodi:cy="26.214285"
+       sodipodi:rx="17.928572"
+       sodipodi:ry="18.214285"
+       d="M 48.142857 26.214285 A 17.928572 18.214285 0 1 1  12.285713,26.214285 A 17.928572 18.214285 0 1 1  48.142857 26.214285 z"
+       transform="matrix(1.062015,0.000000,0.000000,1.062015,-7.659466,-4.965116)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <rect
+       style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.01823568;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="rect2405"
+       width="18.981764"
+       height="18.981375"
+       x="14.573074"
+       y="13.296871" />
+    <text
+       xml:space="preserve"
+       style="font-size:23.58337593px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.00000036;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="15.091353"
+       y="33.00325"
+       id="text2403"
+       transform="scale(1.074523,0.930646)"><tspan
+         sodipodi:role="line"
+         id="tspan2405"
+         x="15.091353"
+         y="33.00325">1</tspan></text>
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/mirror-horizontal-on.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/mirror-horizontal-on.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,103 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\Digilib\greyskin"
+   sodipodi:docname="mirror-horizontal-on.svg"
+   inkscape:export-filename="C:\digilib\greyskin\mirror-horizontal-on.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       d="M 23.6875 3.53125 C 13.517688 3.9243803 5.3749998 12.44746 5.375 22.875 C 5.375 33.552802 13.927192 42.218749 24.4375 42.21875 C 34.947807 42.21875 43.468749 33.552802 43.46875 22.875 C 43.46875 12.197198 34.947807 3.53125 24.4375 3.53125 C 24.191165 3.53125 23.931575 3.5218149 23.6875 3.53125 z M 11.4375 13 L 23.4375 13 L 23.4375 36 L 11.4375 13 z "
+       id="path2396" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <path
+       style="color:#000000;fill:#000000;fill-opacity:0.98214287;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 25.428571,13 L 37.428571,13 L 25.428571,36 L 25.428571,13 z "
+       id="rect2628"
+       sodipodi:nodetypes="cccc" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/mirror-horizontal.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/mirror-horizontal.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,103 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="mirror-horizontal.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\mirror-horizontal.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       d="M 23.6875 3.53125 C 13.517688 3.9243803 5.3749998 12.44746 5.375 22.875 C 5.375 33.552802 13.927192 42.218749 24.4375 42.21875 C 34.947807 42.21875 43.468749 33.552802 43.46875 22.875 C 43.46875 12.197198 34.947807 3.53125 24.4375 3.53125 C 24.191165 3.53125 23.931575 3.5218149 23.6875 3.53125 z M 11.4375 13 L 23.4375 13 L 23.4375 36 L 11.4375 13 z "
+       id="path2396" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <path
+       style="color:#000000;fill:#818181;fill-opacity:0.98214285;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 25.428571,13 L 37.428571,13 L 25.428571,36 L 25.428571,13 z "
+       id="rect2628"
+       sodipodi:nodetypes="cccc" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/mirror-vertical-on.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/mirror-vertical-on.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,109 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="mirror-vertical-on.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\mirror-horizontal-on.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="15.983193"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <g
+       id="g2685"
+       transform="matrix(0,-1,1,0,1.548972,47.29478)"
+       inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\mirror-vertical-on.png"
+       inkscape:export-xdpi="60"
+       inkscape:export-ydpi="60">
+      <path
+         id="path2396"
+         d="M 23.6875,3.5312497 C 13.517688,3.92438 5.3749993,12.44746 5.3750003,22.875 C 5.3750003,33.552802 13.927192,42.218749 24.4375,42.21875 C 34.947807,42.21875 43.468749,33.552802 43.46875,22.875 C 43.46875,12.197198 34.947807,3.5312497 24.4375,3.5312497 C 24.191165,3.5312497 23.931575,3.5218146 23.6875,3.5312497 z M 11.4375,13 L 23.4375,13 L 23.4375,36 L 11.4375,13 z "
+         style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128;display:inline" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="rect2628"
+         d="M 25.428571,13 L 37.428571,13 L 25.428571,36 L 25.428571,13 z "
+         style="color:#000000;fill:#000000;fill-opacity:0.98214285;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    </g>
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/mirror-vertical.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/mirror-vertical.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,109 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="mirror-vertical.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\mirror-vertical.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <g
+       id="g2813"
+       transform="matrix(0,-1,1,0,1.548972,47.29478)"
+       inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\mirror-vertical.png"
+       inkscape:export-xdpi="60"
+       inkscape:export-ydpi="60">
+      <path
+         id="path2396"
+         d="M 23.6875,3.53125 C 13.517688,3.9243803 5.3749998,12.44746 5.375,22.875 C 5.375,33.552802 13.927192,42.218749 24.4375,42.21875 C 34.947807,42.21875 43.468749,33.552802 43.46875,22.875 C 43.46875,12.197198 34.947807,3.53125 24.4375,3.53125 C 24.191165,3.53125 23.931575,3.5218149 23.6875,3.53125 z M 11.4375,13 L 23.4375,13 L 23.4375,36 L 11.4375,13 z "
+         style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128;display:inline" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="rect2628"
+         d="M 25.428571,13 L 37.428571,13 L 25.428571,36 L 25.428571,13 z "
+         style="color:#000000;fill:#818181;fill-opacity:0.98214285;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    </g>
+  </g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/mirror.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,112 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="mirror.svg"
+   inkscape:export-filename="/Volumes/User/Users/casties/Desktop/web-devel/digibutton/first.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       id="path2396"
+       sodipodi:cx="30.214285"
+       sodipodi:cy="26.214285"
+       sodipodi:rx="17.928572"
+       sodipodi:ry="18.214285"
+       d="M 48.142857 26.214285 A 17.928572 18.214285 0 1 1  12.285713,26.214285 A 17.928572 18.214285 0 1 1  48.142857 26.214285 z"
+       transform="matrix(1.062015,0,0,1.062015,-7.659466,-4.965116)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2330508;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000;display:inline"
+       d="M 33.151332,16.009382 L 33.151332,32.097761 L 19.176755,23.877422 L 33.151332,16.009382 z "
+       id="path1370" />
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;display:inline"
+       d="M 17.017857,14.285715 L 17.017857,33.142857"
+       id="path1372" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/options.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/options.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,96 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\Digilib\greyskin"
+   sodipodi:docname="options.svg"
+   inkscape:export-filename="C:\digilib\greyskin\options.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="opacity:1.0000000;fill:#707070;fill-opacity:0.35526314;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:0.50331128"
+       d="M 23.1875 3.53125 C 13.239732 4.1660714 5.3749998 12.609754 5.375 22.875 C 5.375 33.552802 13.927192 42.218749 24.4375 42.21875 C 34.947807 42.21875 43.468749 33.552802 43.46875 22.875 C 43.46875 12.197198 34.947807 3.53125 24.4375 3.53125 C 24.191165 3.53125 23.931575 3.5218149 23.6875 3.53125 C 23.608048 3.5343213 23.516701 3.5271892 23.4375 3.53125 C 23.358917 3.5352791 23.265829 3.5262514 23.1875 3.53125 z M 12 23 L 17.5625 23 L 17.5625 28.5625 L 12 28.5625 L 12 23 z M 21.5 23 L 27.0625 23 L 27.0625 28.5625 L 21.5 28.5625 L 21.5 23 z M 31 23 L 36.5625 23 L 36.5625 28.5625 L 31 28.5625 L 31 23 z "
+       id="path2396" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline" />
+</svg>
Binary file client/digitallibrary/greyskin/original-size.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/original-size.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,137 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="original-size.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\original-size.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="18.655462"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:#707070;fill-opacity:0.35526314;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.50331128;opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none"
+       d="M 23.6875 3.53125 C 13.517688 3.9243803 5.3749998 12.44746 5.375 22.875 C 5.375 33.552802 13.927192 42.218749 24.4375 42.21875 C 34.947807 42.21875 43.468749 33.552802 43.46875 22.875 C 43.46875 12.197198 34.947807 3.53125 24.4375 3.53125 C 24.191165 3.53125 23.931575 3.5218149 23.6875 3.53125 z M 12.1875 8.5625 C 20.242446 8.5625 28.288805 8.5625 36.34375 8.5625 C 36.165958 16.203164 36.198276 28.144598 35.96875 37.4375 C 28.043342 37.4375 20.112909 37.4375 12.1875 37.4375 C 12.1875 27.807871 12.1875 18.192129 12.1875 8.5625 z "
+       id="path2396" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.5000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
+       d="M 17.000000,13.428571 L 17.000000,33.000000 L 34.000000,23.000000 L 17.000000,13.428571 z "
+       id="path7614" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <g
+       id="g3544"
+       transform="translate(-0.642857,0.428572)">
+      <path
+         transform="translate(-1.071429,-0.714287)"
+         d="M 27.285715 18.785715 A 1.9285715 1.9285715 0 1 1  23.428572,18.785715 A 1.9285715 1.9285715 0 1 1  27.285715 18.785715 z"
+         sodipodi:ry="1.9285715"
+         sodipodi:rx="1.9285715"
+         sodipodi:cy="18.785715"
+         sodipodi:cx="25.357143"
+         id="path3538"
+         style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         sodipodi:type="arc" />
+      <path
+         transform="translate(-1.071429,8.285713)"
+         d="M 27.285715 18.785715 A 1.9285715 1.9285715 0 1 1  23.428572,18.785715 A 1.9285715 1.9285715 0 1 1  27.285715 18.785715 z"
+         sodipodi:ry="1.9285715"
+         sodipodi:rx="1.9285715"
+         sodipodi:cy="18.785715"
+         sodipodi:cx="25.357143"
+         id="path3542"
+         style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         sodipodi:type="arc" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:23.75772667px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="7.5327549"
+       y="31.319475"
+       id="text3548"><tspan
+         sodipodi:role="line"
+         id="tspan3550"
+         x="7.5327549"
+         y="31.319475">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:23.75772667px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans"
+       x="25.077103"
+       y="31"
+       id="text3552"><tspan
+         sodipodi:role="line"
+         id="tspan3554"
+         x="25.077103"
+         y="31">1</tspan></text>
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/page.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/page.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,102 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="page.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\page.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="22"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:#707070;fill-opacity:0.35526314;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.50331128;opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none"
+       d="M 23.6875 3.53125 C 13.517688 3.9243803 5.3749998 12.44746 5.375 22.875 C 5.375 33.552802 13.927192 42.218749 24.4375 42.21875 C 34.947807 42.21875 43.468749 33.552802 43.46875 22.875 C 43.46875 12.197198 34.947807 3.53125 24.4375 3.53125 C 24.191165 3.53125 23.931575 3.5218149 23.6875 3.53125 z M 15 10 L 29 10 L 29.15625 10 L 34.4375 16.84375 L 34.4375 36 L 15 36 L 15 10 z "
+       id="path2396" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="M 29,10 C 29,17 29,17 29,17 L 35,17"
+       id="path2414" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.5000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
+       d="M 17.000000,13.428571 L 17.000000,33.000000 L 34.000000,23.000000 L 17.000000,13.428571 z "
+       id="path7614" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <path
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 15.285714,9.75 L 29.285713,9.75 L 29.428571,9.75 L 34.714286,16.607143 L 34.714286,35.75 L 15.285714,35.75 L 15.285714,9.75 z "
+       id="path2438"
+       sodipodi:nodetypes="ccccccc" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/pagewidth.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/pagewidth.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,136 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\Digilib\greyskin"
+   sodipodi:docname="pagewidth.svg"
+   inkscape:export-filename="C:\digilib\pagewidth.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.791667"
+     inkscape:cx="24"
+     inkscape:cy="24.142434"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1024"
+     inkscape:window-height="749"
+     inkscape:window-x="-4"
+     inkscape:window-y="-4" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       d="M 23.6875 3.53125 C 13.517688 3.9243803 5.3749998 12.44746 5.375 22.875 C 5.375 26.436406 6.3451688 29.758089 8 32.625 L 8 13.4375 L 41 13.4375 L 41 32.40625 C 42.570104 29.594036 43.46875 26.336944 43.46875 22.875 C 43.46875 12.197198 34.947807 3.53125 24.4375 3.53125 C 24.191165 3.53125 23.931575 3.5218149 23.6875 3.53125 z M 14 39.0625 C 16.993555 41.054839 20.594037 42.21875 24.4375 42.21875 C 28.271488 42.21875 31.823448 41.045827 34.8125 39.0625 L 14 39.0625 z "
+       id="path2396" />
+    <path
+       sodipodi:type="star"
+       style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="path2222"
+       sodipodi:sides="3"
+       sodipodi:cx="15.514512"
+       sodipodi:cy="22.353563"
+       sodipodi:r1="3.2910488"
+       sodipodi:r2="1.6455244"
+       sodipodi:arg1="1.046877"
+       sodipodi:arg2="2.0940745"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="M 17.16095,25.203168 L 14.692207,23.778893 L 12.223463,22.354618 L 14.691293,20.928761 L 17.159123,19.502904 L 17.160036,22.353036 L 17.16095,25.203168 z "
+       transform="matrix(1.056109,0,0,1.093566,-3.711289,-1.423286)" />
+    <rect
+       style="opacity:1;color:#000000;fill:#adadad;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69064897;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="rect2227"
+       width="23"
+       height="0.45308331"
+       x="13.345325"
+       y="22.795227" />
+    <path
+       sodipodi:type="star"
+       style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="path3103"
+       sodipodi:sides="3"
+       sodipodi:cx="15.514512"
+       sodipodi:cy="22.353563"
+       sodipodi:r1="3.2910488"
+       sodipodi:r2="1.6455244"
+       sodipodi:arg1="1.046877"
+       sodipodi:arg2="2.0940745"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="M 17.16095,25.203168 L 14.692207,23.778893 L 12.223463,22.354618 L 14.691293,20.928761 L 17.159123,19.502904 L 17.160036,22.353036 L 17.16095,25.203168 z "
+       transform="matrix(-1.056109,0,0,1.093566,52.66117,-1.410426)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline" />
+</svg>
Binary file client/digitallibrary/greyskin/pixel-by-pixel.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/pixel-by-pixel.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,135 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\Digilib\greyskin"
+   sodipodi:docname="pixel-by-pixel.svg"
+   inkscape:export-filename="C:\digilib\greyskin\pixel-by-pixel.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="14"
+     inkscape:cx="27.241845"
+     inkscape:cy="23.144712"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:#707070;fill-opacity:0.35526314;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.50331128;opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none"
+       d="M 23.6875 3.53125 C 13.517688 3.9243803 5.3749998 12.44746 5.375 22.875 C 5.375 33.552802 13.927192 42.218749 24.4375 42.21875 C 34.947807 42.21875 43.468749 33.552802 43.46875 22.875 C 43.46875 12.197198 34.947807 3.53125 24.4375 3.53125 C 24.191165 3.53125 23.931575 3.5218149 23.6875 3.53125 z M 12.1875 8.5625 C 20.242446 8.5625 28.288805 8.5625 36.34375 8.5625 C 36.165958 16.203164 36.198276 28.144598 35.96875 37.4375 C 28.043342 37.4375 20.112909 37.4375 12.1875 37.4375 C 12.1875 27.807871 12.1875 18.192129 12.1875 8.5625 z "
+       id="path2396" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.5000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
+       d="M 17.000000,13.428571 L 17.000000,33.000000 L 34.000000,23.000000 L 17.000000,13.428571 z "
+       id="path7614" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <g
+       id="g3773"
+       transform="translate(0.251193,0)">
+      <rect
+         y="18.237497"
+         x="10.237497"
+         height="8.8062553"
+         width="8.8062553"
+         id="rect3532"
+         style="opacity:1;color:#000000;fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.4749949;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         y="18.237497"
+         x="29.297611"
+         height="8.8062553"
+         width="8.8062553"
+         id="rect3534"
+         style="opacity:1;color:#000000;fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.4749949;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    </g>
+    <g
+       id="g3544"
+       transform="translate(0.214285,0.428572)">
+      <path
+         transform="translate(-1.071429,-0.714287)"
+         d="M 27.285715 18.785715 A 1.9285715 1.9285715 0 1 1  23.428572,18.785715 A 1.9285715 1.9285715 0 1 1  27.285715 18.785715 z"
+         sodipodi:ry="1.9285715"
+         sodipodi:rx="1.9285715"
+         sodipodi:cy="18.785715"
+         sodipodi:cx="25.357143"
+         id="path3538"
+         style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         sodipodi:type="arc" />
+      <path
+         transform="translate(-1.071429,8.285713)"
+         d="M 27.285715 18.785715 A 1.9285715 1.9285715 0 1 1  23.428572,18.785715 A 1.9285715 1.9285715 0 1 1  27.285715 18.785715 z"
+         sodipodi:ry="1.9285715"
+         sodipodi:rx="1.9285715"
+         sodipodi:cy="18.785715"
+         sodipodi:cx="25.357143"
+         id="path3542"
+         style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         sodipodi:type="arc" />
+    </g>
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/quality.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/quality.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,114 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="quality.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\quality.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       id="path2396"
+       sodipodi:cx="30.214285"
+       sodipodi:cy="26.214285"
+       sodipodi:rx="17.928572"
+       sodipodi:ry="18.214285"
+       d="M 48.142857 26.214285 A 17.928572 18.214285 0 1 1  12.285713,26.214285 A 17.928572 18.214285 0 1 1  48.142857 26.214285 z"
+       transform="matrix(1.062015,0,0,1.062015,-7.659466,-4.965116)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <text
+       xml:space="preserve"
+       style="font-size:23.83600235px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="15.291191"
+       y="30.690783"
+       id="text3673"><tspan
+         sodipodi:role="line"
+         id="tspan3675"
+         x="15.291191"
+         y="30.690783">Q</tspan></text>
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/reference.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/reference.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,107 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="reference.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\reference.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="opacity:1.0000000;fill:#707070;fill-opacity:0.35526314;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:0.50331128"
+       d="M 23.6875 3.53125 C 17.438542 3.7728135 11.984671 7.0989567 8.6875 12.03125 L 40.1875 12.03125 C 36.761546 6.9063083 30.990651 3.53125 24.4375 3.53125 C 24.191165 3.53125 23.931575 3.5218149 23.6875 3.53125 z M 8.25 33.03125 C 11.607176 38.538487 17.596957 42.218749 24.4375 42.21875 C 31.278043 42.21875 37.267824 38.538487 40.625 33.03125 L 8.25 33.03125 z "
+       id="path2396" />
+    <text
+       xml:space="preserve"
+       style="font-size:16.89605904px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="3.6020906"
+       y="28.190752"
+       id="text3313"
+       transform="scale(1.056842,0.946215)"><tspan
+         sodipodi:role="line"
+         id="tspan3315"
+         x="3.6020906"
+         y="28.190752">http:</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline" />
+</svg>
Binary file client/digitallibrary/greyskin/reset.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/reset.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,138 @@
+<?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://creativecommons.org/ns#"
+   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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.46+devel"
+   sodipodi:docname="reset.svg"
+   inkscape:export-filename="/home/wolfdietrich/mounts/hertz/grafik-button-create/reset/reset.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs2390">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 24 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="48 : 24 : 1"
+       inkscape:persp3d-origin="24 : 16 : 1"
+       id="perspective18" />
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective829"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.4748737"
+     inkscape:cx="27.338402"
+     inkscape:cy="-32.044727"
+     inkscape:current-layer="layer4"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1280"
+     inkscape:window-height="738"
+     inkscape:window-x="-4"
+     inkscape:window-y="-3"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <sodipodi:guide
+       orientation="1,0"
+       position="24.857143,20.571429"
+       id="guide22" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="37.285714,24.571429"
+       id="guide24" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata2393">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Ebene">
+    <g
+       id="g845"
+       inkscape:export-xdpi="60"
+       inkscape:export-ydpi="60">
+      <path
+         sodipodi:nodetypes="cssssc"
+         id="path2396"
+         d="M 23.6875,3.53125 C 13.517688,3.9243803 5.3749998,12.44746 5.375,22.875 c 0,10.677802 8.552192,19.343749 19.0625,19.34375 10.510307,0 19.031249,-8.665948 19.03125,-19.34375 0,-10.677802 -8.520943,-19.34375 -19.03125,-19.34375 -0.246335,0 -0.505925,-0.00944 -0.75,0 z"
+         style="display:inline;fill:#707070;fill-opacity:0.35526315000000003;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273000000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.50331128000000003;stroke-dasharray:none" />
+      <path
+         id="path811"
+         d="M 15.5625 12.84375 C 15.471394 12.841739 15.374159 12.880561 15.28125 12.90625 C 15.27061 12.90915 15.26062 12.90295 15.25 12.90625 L 15.25 12.9375 C 14.899967 13.050963 14.670821 13.327726 14.59375 13.625 C 14.51797 13.917276 14.60406 14.263512 14.84375 14.53125 L 14.8125 14.5625 L 14.84375 14.59375 L 23.28125 23.5625 L 14.53125 31.8125 C 14.52275 31.8196 14.53945 31.8364 14.53125 31.84375 C 14.24365 32.100575 14.115992 32.472114 14.21875 32.84375 C 14.22165 32.85439 14.21545 32.86438 14.21875 32.875 L 14.25 32.875 C 14.363463 33.225033 14.640226 33.454179 14.9375 33.53125 C 15.229776 33.60703 15.576012 33.52094 15.84375 33.28125 L 15.875 33.3125 L 15.90625 33.28125 L 24.65625 25.03125 L 32.8125 33.6875 C 33.602654 34.549486 35.102654 33.174486 34.3125 32.3125 L 26.15625 23.65625 L 35 15.3125 C 35.861986 14.522346 34.486986 13.022346 33.625 13.8125 L 24.75 22.1875 L 16.3125 13.21875 C 16.3054 13.21025 16.2886 13.22695 16.28125 13.21875 C 16.088631 13.00305 15.835818 12.849784 15.5625 12.84375 z "
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" />
+    </g>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 16.866525,15.295096 0,16.088379 13.974577,-8.220339 -13.974577,-7.86804 z"
+       id="path7614" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 33,13.571429 0,18.857142"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline" />
+</svg>
Binary file client/digitallibrary/greyskin/rgb-on.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/rgb-on.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,119 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\Digilib\greyskin"
+   sodipodi:docname="rgb-on.svg"
+   inkscape:export-filename="C:\digilib\greyskin\rgb-on.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       d="M 23.6875 3.53125 C 13.517688 3.9243803 5.3749998 12.44746 5.375 22.875 C 5.375 33.552802 13.927192 42.218749 24.4375 42.21875 C 34.947807 42.21875 43.468749 33.552802 43.46875 22.875 C 43.46875 12.197198 34.947807 3.53125 24.4375 3.53125 C 24.191165 3.53125 23.931575 3.5218149 23.6875 3.53125 z M 24.3125 14.71875 C 24.347511 14.718306 24.402384 14.71875 24.4375 14.71875 C 28.932357 14.71875 32.5625 18.380143 32.5625 22.875 C 32.5625 27.369858 28.932357 31.03125 24.4375 31.03125 C 19.942642 31.031249 16.28125 27.369857 16.28125 22.875 C 16.28125 18.415259 19.866057 14.775135 24.3125 14.71875 z "
+       id="path2396" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <rect
+       style="opacity:1;color:#000000;fill:#ff2424;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="rect4326"
+       width="11"
+       height="11.428572"
+       x="19"
+       y="8.5714283" />
+    <rect
+       style="opacity:1;color:#000000;fill:#3cff27;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="rect4328"
+       width="11"
+       height="11.428572"
+       x="12"
+       y="22" />
+    <rect
+       style="opacity:1;color:#000000;fill:#2330ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="rect4330"
+       width="11"
+       height="11.428572"
+       x="26"
+       y="22" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/rgb.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/rgb.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,125 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\Digilib\greyskin"
+   sodipodi:docname="rgb.svg"
+   inkscape:export-filename="C:\digilib\greyskin\rgb.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       id="path2396"
+       sodipodi:cx="30.214285"
+       sodipodi:cy="26.214285"
+       sodipodi:rx="17.928572"
+       sodipodi:ry="18.214285"
+       d="M 48.142857 26.214285 A 17.928572 18.214285 0 1 1  12.285713,26.214285 A 17.928572 18.214285 0 1 1  48.142857 26.214285 z"
+       transform="matrix(1.062015,0,0,1.062015,-7.659466,-4.965116)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <rect
+       style="opacity:1;color:#000000;fill:#ff2424;fill-opacity:0.5;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="rect4326"
+       width="11"
+       height="11.428572"
+       x="19"
+       y="8.5714283" />
+    <rect
+       style="opacity:1;color:#000000;fill:#3cff27;fill-opacity:0.50196081;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="rect4328"
+       width="11"
+       height="11.428572"
+       x="12"
+       y="22" />
+    <rect
+       style="opacity:1;color:#000000;fill:#2330ff;fill-opacity:0.50196081;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="rect4330"
+       width="11"
+       height="11.428572"
+       x="26"
+       y="22" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/right.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/right.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,82 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48"
+   height="48"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\Digilib\greyskin"
+   sodipodi:docname="right.svg"
+   inkscape:export-filename="C:\\digilib\greyskin\right.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000"
+   version="1.0">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="30.235294"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       style="opacity:1;fill:#ffa060;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       d="M 43.763529,23.607278 C 43.370398,33.77709 34.847319,41.919778 24.419779,41.919778 C 13.741977,41.919778 5.0760293,33.367586 5.0760283,22.857278 C 5.0760283,15.795665 8.9890093,9.644547 14.794779,6.3572783 L 14.794779,22.794778 L 14.794779,39.294778 L 29.076029,31.044778 L 43.357279,22.794778 L 29.076029,14.544778 L 14.857279,6.3260283 C 17.67844,4.7423833 20.941793,3.8260283 24.419779,3.8260283 C 35.097581,3.8260283 43.763529,12.346971 43.763529,22.857278 C 43.763529,23.103613 43.772964,23.363203 43.763529,23.607278 z "
+       id="path2396"
+       inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\right.png"
+       inkscape:export-xdpi="60"
+       inkscape:export-ydpi="60" />
+  </g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/rightleft.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,103 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.42.2"
+   sodipodi:docbase="/Volumes/User/Users/casties/Desktop/web-devel/digibutton"
+   sodipodi:docname="rightleft.svg"
+   inkscape:export-filename="/Volumes/User/Users/casties/Desktop/web-devel/digibutton/left.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7.0000000"
+     inkscape:cx="24.000000"
+     inkscape:cy="22.000000"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="688"
+     inkscape:window-height="509"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:#707070;fill-opacity:0.35526314;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.50331128;opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none"
+       id="path2396"
+       sodipodi:cx="30.214285"
+       sodipodi:cy="26.214285"
+       sodipodi:rx="17.928572"
+       sodipodi:ry="18.214285"
+       d="M 48.142857 26.214285 A 17.928572 18.214285 0 1 1  12.285713,26.214285 A 17.928572 18.214285 0 1 1  48.142857 26.214285 z"
+       transform="matrix(1.062015,0.000000,0.000000,1.062015,-7.659466,-4.965116)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.5000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
+       d="M 17.000000,13.428571 L 17.000000,33.000000 L 34.000000,23.000000 L 17.000000,13.428571 z "
+       id="path7614" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.5000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000;display:inline"
+       d="M 31.750000,13.750000 L 31.750000,33.321429 L 14.750000,23.321429 L 31.750000,13.750000 z "
+       id="path7649" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/rotate-on.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/rotate-on.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,124 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="rotate-on.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\rotate-on.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       id="path2396"
+       sodipodi:cx="30.214285"
+       sodipodi:cy="26.214285"
+       sodipodi:rx="17.928572"
+       sodipodi:ry="18.214285"
+       d="M 48.142857 26.214285 A 17.928572 18.214285 0 1 1  12.285713,26.214285 A 17.928572 18.214285 0 1 1  48.142857 26.214285 z"
+       transform="matrix(1.062015,0,0,1.062015,-7.659466,-4.965116)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <path
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 24.286853,12.87354 C 19.030287,13.204565 14.87354,17.597075 14.87354,22.93677 C 14.87354,22.965702 14.873296,22.991755 14.87354,23.02063 L 17.074871,23.02063 C 17.074597,22.993581 17.074871,22.963883 17.074871,22.93677 C 17.074871,18.70033 20.424718,15.23459 24.622294,15.074871 C 24.723036,15.071038 24.835095,15.074871 24.93677,15.074871 C 29.274884,15.074871 32.798668,18.598655 32.798668,22.93677 C 32.798668,27.146097 29.474235,30.597972 25.314141,30.798668 L 25.314141,33 C 30.696611,32.803733 35,28.366904 35,22.93677 C 35,17.381867 30.491673,12.87354 24.93677,12.87354 C 24.784878,12.87354 24.625795,12.866869 24.475538,12.87354 C 24.412904,12.87632 24.349184,12.869615 24.286853,12.87354 z "
+       id="path3724" />
+    <path
+       sodipodi:type="star"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="path3738"
+       sodipodi:sides="3"
+       sodipodi:cx="7.7142859"
+       sodipodi:cy="23.142857"
+       sodipodi:r1="5.1448407"
+       sodipodi:r2="2.5724204"
+       sodipodi:arg1="1.5707963"
+       sodipodi:arg2="2.6179939"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="M 7.714286,28.287697 L 5.4865044,24.429067 L 3.258723,20.570436 L 7.7142859,20.570436 L 12.169849,20.570436 L 9.9420672,24.429067 L 7.714286,28.287697 z "
+       transform="matrix(0.991317,0,0,0.991317,8.494228,1.957927)" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/rotate.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/rotate.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,124 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="rotate.svg"
+   inkscape:export-filename="/Volumes/User/Users/casties/Desktop/web-devel/digibutton/first.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       id="path2396"
+       sodipodi:cx="30.214285"
+       sodipodi:cy="26.214285"
+       sodipodi:rx="17.928572"
+       sodipodi:ry="18.214285"
+       d="M 48.142857 26.214285 A 17.928572 18.214285 0 1 1  12.285713,26.214285 A 17.928572 18.214285 0 1 1  48.142857 26.214285 z"
+       transform="matrix(1.062015,0,0,1.062015,-7.659466,-4.965116)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <path
+       style="color:#000000;fill:#797979;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 24.286853,12.87354 C 19.030287,13.204565 14.87354,17.597075 14.87354,22.93677 C 14.87354,22.965702 14.873296,22.991755 14.87354,23.02063 L 17.074871,23.02063 C 17.074597,22.993581 17.074871,22.963883 17.074871,22.93677 C 17.074871,18.70033 20.424718,15.23459 24.622294,15.074871 C 24.723036,15.071038 24.835095,15.074871 24.93677,15.074871 C 29.274884,15.074871 32.798668,18.598655 32.798668,22.93677 C 32.798668,27.146097 29.474235,30.597972 25.314141,30.798668 L 25.314141,33 C 30.696611,32.803733 35,28.366904 35,22.93677 C 35,17.381867 30.491673,12.87354 24.93677,12.87354 C 24.784878,12.87354 24.625795,12.866869 24.475538,12.87354 C 24.412904,12.87632 24.349184,12.869615 24.286853,12.87354 z "
+       id="path3724" />
+    <path
+       sodipodi:type="star"
+       style="color:#000000;fill:#797979;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5625;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="path3738"
+       sodipodi:sides="3"
+       sodipodi:cx="7.7142859"
+       sodipodi:cy="23.142857"
+       sodipodi:r1="5.1448407"
+       sodipodi:r2="2.5724204"
+       sodipodi:arg1="1.5707963"
+       sodipodi:arg2="2.6179939"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="M 7.714286,28.287697 L 5.4865044,24.429067 L 3.258723,20.570436 L 7.7142859,20.570436 L 12.169849,20.570436 L 9.9420672,24.429067 L 7.714286,28.287697 z "
+       transform="matrix(0.991317,0,0,0.991317,8.494228,1.957927)" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/ruler-top.gif has changed
Binary file client/digitallibrary/greyskin/size.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/size.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,174 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="size.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\size.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="21.142857"
+     inkscape:cy="17.503443"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="13.142857"
+       y="20.142857"
+       id="text3280"><tspan
+         sodipodi:role="line"
+         id="tspan3282"
+         x="13.142857"
+         y="20.142857" /></text>
+    <path
+       style="fill:#707070;fill-opacity:0.35526315;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       d="M 23.0625 3.53125 C 13.169888 4.224269 5.3749998 12.649853 5.375 22.875 C 5.375 33.552802 13.927192 42.218749 24.4375 42.21875 C 34.947807 42.21875 43.468749 33.552802 43.46875 22.875 C 43.46875 12.197198 34.947807 3.53125 24.4375 3.53125 C 24.191165 3.53125 23.931575 3.5218149 23.6875 3.53125 C 23.608048 3.5343213 23.516701 3.5271892 23.4375 3.53125 C 23.358917 3.5352791 23.265829 3.5262514 23.1875 3.53125 C 23.148642 3.5337298 23.101295 3.5285323 23.0625 3.53125 z M 24.78125 4.625 L 27.59375 9.53125 L 30.375 14.40625 L 24.75 14.375 L 19.125 14.375 L 21.96875 9.5 L 24.78125 4.625 z M 16.21875 17.8125 L 16.25 23.4375 L 16.25 29.0625 L 11.375 26.25 L 6.5 23.46875 L 11.34375 20.625 L 16.21875 17.8125 z M 33.1875 17.8125 L 38.0625 20.625 L 42.9375 23.46875 L 38.03125 26.25 L 33.15625 29.0625 L 33.1875 23.4375 L 33.1875 17.8125 z M 24.75 31.3125 L 30.375 31.3125 L 27.59375 36.1875 L 24.78125 41.0625 L 21.96875 36.1875 L 19.125 31.34375 L 24.75 31.3125 z "
+       id="path2396" />
+    <g
+       id="g2382"
+       transform="translate(34.36755,-3.061025)">
+      <path
+         transform="matrix(0.832068,0.650269,-0.650269,0.832068,-25.54226,-3.7102)"
+         d="M 26.285714,22.285714 L 21.010257,23.045787 L 15.734799,23.80586 L 17.714285,18.857143 L 19.693772,13.908426 L 22.989743,18.09707 L 26.285714,22.285714 z "
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.4277039"
+         sodipodi:arg1="0.38050638"
+         sodipodi:r2="3.0772371"
+         sodipodi:r1="6.1544743"
+         sodipodi:cy="20"
+         sodipodi:cx="20.571428"
+         sodipodi:sides="3"
+         id="path2370"
+         style="color:#000000;fill:none;fill-opacity:0.35294118;fill-rule:nonzero;stroke:#000000;stroke-width:0.82857955;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         sodipodi:type="star" />
+      <path
+         transform="matrix(-0.832068,0.650269,0.650269,0.832068,6.113689,-3.7102)"
+         d="M 26.285714,22.285714 L 21.010257,23.045787 L 15.734799,23.80586 L 17.714285,18.857143 L 19.693772,13.908426 L 22.989743,18.09707 L 26.285714,22.285714 z "
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.4277039"
+         sodipodi:arg1="0.38050638"
+         sodipodi:r2="3.0772371"
+         sodipodi:r1="6.1544743"
+         sodipodi:cy="20"
+         sodipodi:cx="20.571428"
+         sodipodi:sides="3"
+         id="path2372"
+         style="color:#000000;fill:none;fill-opacity:0.35294118;fill-rule:nonzero;stroke:#000000;stroke-width:0.82857955;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         sodipodi:type="star" />
+      <path
+         transform="matrix(0.650269,-0.832068,0.832068,0.650269,-39.67515,41.54226)"
+         d="M 26.285714,22.285714 L 21.010257,23.045787 L 15.734799,23.80586 L 17.714285,18.857143 L 19.693772,13.908426 L 22.989743,18.09707 L 26.285714,22.285714 z "
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.4277039"
+         sodipodi:arg1="0.38050638"
+         sodipodi:r2="3.0772371"
+         sodipodi:r1="6.1544743"
+         sodipodi:cy="20"
+         sodipodi:cx="20.571428"
+         sodipodi:sides="3"
+         id="path2374"
+         style="color:#000000;fill:none;fill-opacity:0.35294118;fill-rule:nonzero;stroke:#000000;stroke-width:0.82857955;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         sodipodi:type="star" />
+      <path
+         transform="matrix(0.650269,0.832068,0.832068,-0.650269,-39.67515,9.886315)"
+         d="M 26.285714,22.285714 L 21.010257,23.045787 L 15.734799,23.80586 L 17.714285,18.857143 L 19.693772,13.908426 L 22.989743,18.09707 L 26.285714,22.285714 z "
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.4277039"
+         sodipodi:arg1="0.38050638"
+         sodipodi:r2="3.0772371"
+         sodipodi:r1="6.1544743"
+         sodipodi:cy="20"
+         sodipodi:cx="20.571428"
+         sodipodi:sides="3"
+         id="path2376"
+         style="color:#000000;fill:none;fill-opacity:0.35294118;fill-rule:nonzero;stroke:#000000;stroke-width:0.82857955;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         sodipodi:type="star" />
+    </g>
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/trans.gif has changed
Binary file client/digitallibrary/greyskin/up.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/up.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,79 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48"
+   height="48"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\Digilib\greyskin"
+   sodipodi:docname="up.svg"
+   inkscape:export-filename="C:\digilib\greyskin\up.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000"
+   version="1.0">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="30.235294"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       style="opacity:1;fill:#ffa060;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50331128"
+       d="M 23.6875 3.53125 C 13.517688 3.9243803 5.3749998 12.44746 5.375 22.875 C 5.375 33.552802 13.927192 42.218749 24.4375 42.21875 C 31.499113 42.21875 37.650231 38.305769 40.9375 32.5 L 24.5 32.5 L 8 32.5 L 16.25 18.21875 L 24.5 3.9375 L 32.75 18.21875 L 40.96875 32.4375 C 42.552395 29.616339 43.46875 26.352986 43.46875 22.875 C 43.46875 12.197198 34.947807 3.53125 24.4375 3.53125 C 24.191165 3.53125 23.931575 3.5218149 23.6875 3.53125 z "
+       id="path2396" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/zoom-area.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/zoom-area.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,114 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="zoom-area.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\zoom-area.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="18.655462"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:#707070;fill-opacity:0.35526314;fill-rule:evenodd;stroke:#000000;stroke-width:0.529;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.50331128;opacity:1.0000000;stroke-miterlimit:4;stroke-dasharray:none"
+       d="M 23.6875 3.53125 C 13.517688 3.9243803 5.3749998 12.44746 5.375 22.875 C 5.375 33.552802 13.927192 42.218749 24.4375 42.21875 C 34.947807 42.21875 43.468749 33.552802 43.46875 22.875 C 43.46875 12.197198 34.947807 3.53125 24.4375 3.53125 C 24.191165 3.53125 23.931575 3.5218149 23.6875 3.53125 z M 12.1875 8.5625 C 20.242446 8.5625 28.288805 8.5625 36.34375 8.5625 C 36.165958 16.203164 36.198276 28.144598 35.96875 37.4375 C 28.043342 37.4375 20.112909 37.4375 12.1875 37.4375 C 12.1875 27.807871 12.1875 18.192129 12.1875 8.5625 z "
+       id="path2396" />
+    <rect
+       style="opacity:1;color:#000000;fill:#707070;fill-opacity:0.35294118;fill-rule:nonzero;stroke:#000000;stroke-width:0.52899998;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.50196078;visibility:visible;display:inline;overflow:visible"
+       id="rect2218"
+       width="11.125114"
+       height="10.765433"
+       x="18.755346"
+       y="17.050652" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.5000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
+       d="M 17.000000,13.428571 L 17.000000,33.000000 L 34.000000,23.000000 L 17.000000,13.428571 z "
+       id="path7614" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-opacity:1;display:inline"
+       id="path3286"
+       sodipodi:cx="18.857143"
+       sodipodi:cy="16.857143"
+       sodipodi:rx="6"
+       sodipodi:ry="5.5714288"
+       d="M 24.857143 16.857143 A 6 5.5714288 0 1 1  12.857143,16.857143 A 6 5.5714288 0 1 1  24.857143 16.857143 z"
+       transform="matrix(1.088683,0,0,1.172638,-8.357024,16.759)" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3.0204308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 7.4897846,41.510215 C 1.7078166,46.946991 1.7078166,46.946991 1.7078166,46.946991"
+       id="path3290" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/zoom-full.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/zoom-full.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,107 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="zoom-full.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\zoom-full.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="18.655462"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:#707070;fill-opacity:0.35526314;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.50331128;opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none"
+       d="M 23.6875 3.53125 C 13.517688 3.9243803 5.3749998 12.44746 5.375 22.875 C 5.375 33.552802 13.927192 42.218749 24.4375 42.21875 C 34.947807 42.21875 43.468749 33.552802 43.46875 22.875 C 43.46875 12.197198 34.947807 3.53125 24.4375 3.53125 C 24.191165 3.53125 23.931575 3.5218149 23.6875 3.53125 z M 12.1875 8.5625 C 20.242446 8.5625 28.288805 8.5625 36.34375 8.5625 C 36.165958 16.203164 36.198276 28.144598 35.96875 37.4375 C 28.043342 37.4375 20.112909 37.4375 12.1875 37.4375 C 12.1875 27.807871 12.1875 18.192129 12.1875 8.5625 z "
+       id="path2396" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.5000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
+       d="M 17.000000,13.428571 L 17.000000,33.000000 L 34.000000,23.000000 L 17.000000,13.428571 z "
+       id="path7614" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-opacity:1;display:inline"
+       id="path3286"
+       sodipodi:cx="18.857143"
+       sodipodi:cy="16.857143"
+       sodipodi:rx="6"
+       sodipodi:ry="5.5714288"
+       d="M 24.857143 16.857143 A 6 5.5714288 0 1 1  12.857143,16.857143 A 6 5.5714288 0 1 1  24.857143 16.857143 z"
+       transform="matrix(1.088683,0,0,1.172638,-8.357024,16.759)" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3.0204308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 7.4897846,41.510215 C 1.7078166,46.946991 1.7078166,46.946991 1.7078166,46.946991"
+       id="path3290" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/zoom-in.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/zoom-in.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,136 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="zoom-in.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\zoom-in.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="opacity:1.0000000;fill:#707070;fill-opacity:0.35526314;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:0.50331128"
+       d="M 23.4375 3.53125 C 13.378936 4.04697 5.3749998 12.528925 5.375 22.875 C 5.375 33.552802 13.927192 42.218749 24.4375 42.21875 C 34.947807 42.21875 43.468749 33.552802 43.46875 22.875 C 43.46875 12.197198 34.947807 3.53125 24.4375 3.53125 C 24.191165 3.53125 23.931575 3.5218149 23.6875 3.53125 C 23.608048 3.5343213 23.516701 3.5271892 23.4375 3.53125 z M 23.3125 11.4375 C 23.355991 11.433691 23.393865 11.440789 23.4375 11.4375 C 23.442997 11.437086 23.463446 11.437656 23.46875 11.4375 C 23.489416 11.437624 23.510548 11.437243 23.53125 11.4375 C 23.536568 11.437394 23.556985 11.437848 23.5625 11.4375 C 23.56528 11.437324 23.587298 11.437439 23.59375 11.4375 C 23.614386 11.437591 23.635578 11.437274 23.65625 11.4375 C 23.661589 11.437416 23.681923 11.437783 23.6875 11.4375 C 23.871718 11.42815 24.063473 11.4375 24.25 11.4375 C 30.21888 11.4375 35.0625 16.280052 35.0625 22.25 C 35.062502 28.219949 30.21888 33.0625 24.25 33.0625 C 18.281121 33.062498 13.4375 28.219948 13.4375 22.25 C 13.4375 16.601105 17.789186 11.921302 23.3125 11.4375 z "
+       id="path2396" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;color:#000000;fill:none;fill-opacity:0.35294118;fill-rule:nonzero;stroke:#000000;stroke-width:1.46576595;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="path3217"
+       sodipodi:cx="27.142857"
+       sodipodi:cy="19.714285"
+       sodipodi:rx="10.428572"
+       sodipodi:ry="10.142858"
+       d="M 37.571428 19.714285 A 10.428572 10.142858 0 1 1  16.714285,19.714285 A 10.428572 10.142858 0 1 1  37.571428 19.714285 z"
+       transform="matrix(1,0,0,1.047257,-3.321428,1.726256)" />
+    <rect
+       style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.18805659;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="rect2223"
+       width="2.5"
+       height="10.969203"
+       x="-23.834541"
+       y="18.436769"
+       transform="matrix(0,-1,1,0,0,0)" />
+    <rect
+       style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.18805659;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="rect2244"
+       width="2.5"
+       height="10.969203"
+       x="22.594028"
+       y="17.022598" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="13.142857"
+       y="20.142857"
+       id="text3280"><tspan
+         sodipodi:role="line"
+         id="tspan3282"
+         x="13.142857"
+         y="20.142857" /></text>
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.5,30.071429 C 6.928571,39.071429 6.928571,39.071429 6.928571,39.071429"
+       id="path3290" />
+  </g>
+</svg>
Binary file client/digitallibrary/greyskin/zoom-out.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/greyskin/zoom-out.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,129 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2388"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\src\ECHO\digilib\client\digitallibrary\greyskin"
+   sodipodi:docname="zoom-out.svg"
+   inkscape:export-filename="C:\src\ECHO\digilib\client\digitallibrary\greyskin\zoom-out.png"
+   inkscape:export-xdpi="60.000000"
+   inkscape:export-ydpi="60.000000">
+  <defs
+     id="defs2390">
+    <linearGradient
+       id="linearGradient3124">
+      <stop
+         id="stop7644"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.19587629;" />
+      <stop
+         style="stop-color:#545454;stop-opacity:0.22680412;"
+         offset="0.50000000"
+         id="stop7646" />
+      <stop
+         style="stop-color:#5f5f5f;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3128" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7"
+     inkscape:cx="24"
+     inkscape:cy="20"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="830"
+     inkscape:window-height="540"
+     inkscape:window-x="17"
+     inkscape:window-y="22" />
+  <metadata
+     id="metadata2393">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="opacity:1.0000000;fill:#707070;fill-opacity:0.35526314;fill-rule:evenodd;stroke:#000000;stroke-width:0.52918273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:0.50331128"
+       d="M 23.4375 3.53125 C 13.378936 4.04697 5.3749998 12.528925 5.375 22.875 C 5.375 33.552802 13.927192 42.218749 24.4375 42.21875 C 34.947807 42.21875 43.468749 33.552802 43.46875 22.875 C 43.46875 12.197198 34.947807 3.53125 24.4375 3.53125 C 24.191165 3.53125 23.931575 3.5218149 23.6875 3.53125 C 23.608048 3.5343213 23.516701 3.5271892 23.4375 3.53125 z M 23.3125 11.4375 C 23.355991 11.433691 23.393865 11.440789 23.4375 11.4375 C 23.442997 11.437086 23.463446 11.437656 23.46875 11.4375 C 23.489416 11.437624 23.510548 11.437243 23.53125 11.4375 C 23.536568 11.437394 23.556985 11.437848 23.5625 11.4375 C 23.56528 11.437324 23.587298 11.437439 23.59375 11.4375 C 23.614386 11.437591 23.635578 11.437274 23.65625 11.4375 C 23.661589 11.437416 23.681923 11.437783 23.6875 11.4375 C 23.871718 11.42815 24.063473 11.4375 24.25 11.4375 C 30.21888 11.4375 35.0625 16.280052 35.0625 22.25 C 35.062502 28.219949 30.21888 33.0625 24.25 33.0625 C 18.281121 33.062498 13.4375 28.219948 13.4375 22.25 C 13.4375 16.601105 17.789186 11.921302 23.3125 11.4375 z "
+       id="path2396" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;color:#000000;fill:none;fill-opacity:0.35294118;fill-rule:nonzero;stroke:#000000;stroke-width:1.46576595;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="path3217"
+       sodipodi:cx="27.142857"
+       sodipodi:cy="19.714285"
+       sodipodi:rx="10.428572"
+       sodipodi:ry="10.142858"
+       d="M 37.571428 19.714285 A 10.428572 10.142858 0 1 1  16.714285,19.714285 A 10.428572 10.142858 0 1 1  37.571428 19.714285 z"
+       transform="matrix(1,0,0,1.047257,-3.321428,1.726256)" />
+    <rect
+       style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.18805659;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="rect2223"
+       width="2.5"
+       height="10.969203"
+       x="-23.834541"
+       y="18.436769"
+       transform="matrix(0,-1,1,0,0,0)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="l2"
+     style="display:none">
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.23305082;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.866525,15.295096 L 16.866525,31.383475 L 30.841102,23.163136 L 16.866525,15.295096 z "
+       id="path7614" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 33,13.571429 L 33,32.428571"
+       id="path1367" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="l3"
+     style="display:inline">
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="13.142857"
+       y="20.142857"
+       id="text3280"><tspan
+         sodipodi:role="line"
+         id="tspan3282"
+         x="13.142857"
+         y="20.142857" /></text>
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 16.5,30.071429 C 6.928571,39.071429 6.928571,39.071429 6.928571,39.071429"
+       id="path3290" />
+  </g>
+</svg>
Binary file client/digitallibrary/img/digilib-denied.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/img/digilib-denied.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,239 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg1307"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\temp"
+   sodipodi:docname="digilib-denied.svg"
+   inkscape:export-filename="C:\temp\digilib-denied.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs1309" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8.2782051"
+     inkscape:cx="34.898932"
+     inkscape:cy="35.775981"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:window-width="1280"
+     inkscape:window-height="753"
+     inkscape:window-x="-4"
+     inkscape:window-y="-4">
+    <sodipodi:guide
+       orientation="vertical"
+       position="-1.9327861"
+       id="guide23493" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata1312">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.04922342px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="rect1319"
+       width="34.523312"
+       height="42.631897"
+       x="-73.168289"
+       y="40.459969"
+       transform="matrix(-0.846554,0.532302,-2.654126e-3,0.999996,0,0)" />
+    <rect
+       style="fill:#0000ff;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="rect8613"
+       width="2.4545455"
+       height="0"
+       x="58.545456"
+       y="6" />
+    <rect
+       style="fill:#c5c5c5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.0745697px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="rect9490"
+       width="18.989349"
+       height="30.290173"
+       x="-63.894802"
+       y="44.831184"
+       transform="matrix(-0.85293,0.522025,1.174035e-2,0.999931,0,0)" />
+    <rect
+       style="fill:#c5c5c5;fill-opacity:1"
+       id="rect10365"
+       width="10"
+       height="7.5454545"
+       x="-43"
+       y="11.454545" />
+    <rect
+       style="fill:#262626;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect16478"
+       width="8.6068287"
+       height="8.6778221"
+       x="-37.568077"
+       y="0.25004297"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#262626;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19107"
+       width="8.6068287"
+       height="8.6778221"
+       x="-29.251465"
+       y="34.880619"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#464646;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19109"
+       width="8.6068287"
+       height="8.6778221"
+       x="-28.961241"
+       y="0.25004297"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#585858;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19111"
+       width="8.6068287"
+       height="8.6778221"
+       x="-20.538849"
+       y="0.25004297"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#464646;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19113"
+       width="8.6068287"
+       height="8.6778221"
+       x="-29.251465"
+       y="17.202801"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#7d7d7d;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19115"
+       width="8.6068287"
+       height="8.6778221"
+       x="-37.568077"
+       y="8.9278679"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#7d7d7d;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19117"
+       width="8.6068287"
+       height="8.6778221"
+       x="-20.723278"
+       y="8.9278679"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#c2c2c2;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19119"
+       width="8.6068287"
+       height="8.6778221"
+       x="-28.961241"
+       y="8.9278679"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#7d7d7d;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24390"
+       width="8.6068287"
+       height="8.6778221"
+       x="-37.568077"
+       y="26.132593"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#7d7d7d;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24392"
+       width="8.6068287"
+       height="8.6778221"
+       x="-20.289255"
+       y="25.880625"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#585858;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24394"
+       width="8.6068287"
+       height="8.6778221"
+       x="-20.289255"
+       y="17.202801"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#262626;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24396"
+       width="8.6068287"
+       height="8.6778221"
+       x="-29.251465"
+       y="25.880625"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#262626;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24398"
+       width="8.6068287"
+       height="8.6778221"
+       x="-11.682427"
+       y="0.20279986"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#262626;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24400"
+       width="8.6068287"
+       height="8.6778221"
+       x="-12.021473"
+       y="17.202801"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#787878;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24404"
+       width="8.6068287"
+       height="8.6778221"
+       x="-12.021473"
+       y="34.880619"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#585858;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24406"
+       width="8.6068287"
+       height="8.6778221"
+       x="-37.519249"
+       y="17.202801"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#d20000;fill-opacity:1;stroke:none;stroke-opacity:1"
+       id="path3136"
+       sodipodi:cx="35.152546"
+       sodipodi:cy="24.377884"
+       sodipodi:rx="12.079913"
+       sodipodi:ry="11.596717"
+       d="M 47.232459 24.377884 A 12.079913 11.596717 0 1 1  23.072633,24.377884 A 12.079913 11.596717 0 1 1  47.232459 24.377884 z"
+       transform="matrix(1.769606,0,0,1.869472,-29.36785,-18.58286)" />
+    <rect
+       style="fill:#fffdfd;fill-opacity:1;stroke:none;stroke-opacity:1"
+       id="rect3140"
+       width="27.137299"
+       height="11.311166"
+       x="18.862701"
+       y="21" />
+  </g>
+</svg>
Binary file client/digitallibrary/img/digilib-error.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/img/digilib-error.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,234 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg1307"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\temp"
+   sodipodi:docname="digilib-error.svg"
+   inkscape:export-filename="C:\temp\digilib-error.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs1309" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8.2782051"
+     inkscape:cx="34.898932"
+     inkscape:cy="35.775981"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:window-width="1280"
+     inkscape:window-height="753"
+     inkscape:window-x="-4"
+     inkscape:window-y="-4">
+    <sodipodi:guide
+       orientation="vertical"
+       position="-1.9327861"
+       id="guide23493" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata1312">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.04922342px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="rect1319"
+       width="34.523312"
+       height="42.631897"
+       x="-73.168289"
+       y="40.459969"
+       transform="matrix(-0.846554,0.532302,-2.654126e-3,0.999996,0,0)" />
+    <rect
+       style="fill:#0000ff;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="rect8613"
+       width="2.4545455"
+       height="0"
+       x="58.545456"
+       y="6" />
+    <rect
+       style="fill:#c5c5c5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.0745697px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="rect9490"
+       width="18.989349"
+       height="30.290173"
+       x="-63.894802"
+       y="44.831184"
+       transform="matrix(-0.85293,0.522025,1.174035e-2,0.999931,0,0)" />
+    <rect
+       style="fill:#c5c5c5;fill-opacity:1"
+       id="rect10365"
+       width="10"
+       height="7.5454545"
+       x="-43"
+       y="11.454545" />
+    <rect
+       style="fill:#262626;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect16478"
+       width="8.6068287"
+       height="8.6778221"
+       x="-37.568077"
+       y="0.25004297"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#262626;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19107"
+       width="8.6068287"
+       height="8.6778221"
+       x="-29.251465"
+       y="34.880619"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#464646;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19109"
+       width="8.6068287"
+       height="8.6778221"
+       x="-28.961241"
+       y="0.25004297"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#585858;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19111"
+       width="8.6068287"
+       height="8.6778221"
+       x="-20.538849"
+       y="0.25004297"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#464646;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19113"
+       width="8.6068287"
+       height="8.6778221"
+       x="-29.251465"
+       y="17.202801"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#7d7d7d;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19115"
+       width="8.6068287"
+       height="8.6778221"
+       x="-37.568077"
+       y="8.9278679"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#7d7d7d;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19117"
+       width="8.6068287"
+       height="8.6778221"
+       x="-20.723278"
+       y="8.9278679"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#c2c2c2;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19119"
+       width="8.6068287"
+       height="8.6778221"
+       x="-28.961241"
+       y="8.9278679"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#7d7d7d;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24390"
+       width="8.6068287"
+       height="8.6778221"
+       x="-37.568077"
+       y="26.132593"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#7d7d7d;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24392"
+       width="8.6068287"
+       height="8.6778221"
+       x="-20.289255"
+       y="25.880625"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#585858;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24394"
+       width="8.6068287"
+       height="8.6778221"
+       x="-20.289255"
+       y="17.202801"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#262626;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24396"
+       width="8.6068287"
+       height="8.6778221"
+       x="-29.251465"
+       y="25.880625"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#262626;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24398"
+       width="8.6068287"
+       height="8.6778221"
+       x="-11.682427"
+       y="0.20279986"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#262626;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24400"
+       width="8.6068287"
+       height="8.6778221"
+       x="-12.021473"
+       y="17.202801"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#787878;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24404"
+       width="8.6068287"
+       height="8.6778221"
+       x="-12.021473"
+       y="34.880619"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#585858;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24406"
+       width="8.6068287"
+       height="8.6778221"
+       x="-37.519249"
+       y="17.202801"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <text
+       xml:space="preserve"
+       style="font-size:87.45126343px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#f20000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans Mono"
+       x="13.068455"
+       y="68.538353"
+       id="text2236"
+       sodipodi:linespacing="125%"
+       transform="scale(1.196511,0.835764)"><tspan
+         sodipodi:role="line"
+         id="tspan2238"
+         x="13.068455"
+         y="68.538353">!</tspan></text>
+  </g>
+</svg>
Binary file client/digitallibrary/img/digilib-logo-small.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/img/digilib-logo-sw.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,219 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg1307"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\temp"
+   sodipodi:docname="Digilib-logo-2-sw.svg">
+  <defs
+     id="defs1309" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8.2782051"
+     inkscape:cx="34.898932"
+     inkscape:cy="26.066316"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:window-width="1280"
+     inkscape:window-height="753"
+     inkscape:window-x="-4"
+     inkscape:window-y="-4">
+    <sodipodi:guide
+       orientation="vertical"
+       position="-1.9327861"
+       id="guide23493" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata1312">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.04922342px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="rect1319"
+       width="34.523312"
+       height="42.631897"
+       x="-73.168289"
+       y="40.459969"
+       transform="matrix(-0.846554,0.532302,-2.654126e-3,0.999996,0,0)" />
+    <rect
+       style="fill:#0000ff;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="rect8613"
+       width="2.4545455"
+       height="0"
+       x="58.545456"
+       y="6" />
+    <rect
+       style="fill:#c5c5c5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.0745697px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="rect9490"
+       width="18.989349"
+       height="30.290173"
+       x="-63.894802"
+       y="44.831184"
+       transform="matrix(-0.85293,0.522025,1.174035e-2,0.999931,0,0)" />
+    <rect
+       style="fill:#c5c5c5;fill-opacity:1"
+       id="rect10365"
+       width="10"
+       height="7.5454545"
+       x="-43"
+       y="11.454545" />
+    <rect
+       style="fill:#262626;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect16478"
+       width="8.6068287"
+       height="8.6778221"
+       x="-37.568077"
+       y="0.25004297"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#262626;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19107"
+       width="8.6068287"
+       height="8.6778221"
+       x="-29.251465"
+       y="34.880619"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#464646;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19109"
+       width="8.6068287"
+       height="8.6778221"
+       x="-28.961241"
+       y="0.25004297"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#585858;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19111"
+       width="8.6068287"
+       height="8.6778221"
+       x="-20.538849"
+       y="0.25004297"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#464646;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19113"
+       width="8.6068287"
+       height="8.6778221"
+       x="-29.251465"
+       y="17.202801"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#7d7d7d;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19115"
+       width="8.6068287"
+       height="8.6778221"
+       x="-37.568077"
+       y="8.9278679"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#7d7d7d;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19117"
+       width="8.6068287"
+       height="8.6778221"
+       x="-20.723278"
+       y="8.9278679"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#c2c2c2;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19119"
+       width="8.6068287"
+       height="8.6778221"
+       x="-28.961241"
+       y="8.9278679"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#7d7d7d;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24390"
+       width="8.6068287"
+       height="8.6778221"
+       x="-37.568077"
+       y="26.132593"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#7d7d7d;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24392"
+       width="8.6068287"
+       height="8.6778221"
+       x="-20.289255"
+       y="25.880625"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#585858;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24394"
+       width="8.6068287"
+       height="8.6778221"
+       x="-20.289255"
+       y="17.202801"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#262626;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24396"
+       width="8.6068287"
+       height="8.6778221"
+       x="-29.251465"
+       y="25.880625"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#262626;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24398"
+       width="8.6068287"
+       height="8.6778221"
+       x="-11.682427"
+       y="0.20279986"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#262626;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24400"
+       width="8.6068287"
+       height="8.6778221"
+       x="-12.021473"
+       y="17.202801"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#787878;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24404"
+       width="8.6068287"
+       height="8.6778221"
+       x="-12.021473"
+       y="34.880619"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#585858;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24406"
+       width="8.6068287"
+       height="8.6778221"
+       x="-37.519249"
+       y="17.202801"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+  </g>
+</svg>
Binary file client/digitallibrary/img/digilib-logo-text1.png has changed
Binary file client/digitallibrary/img/digilib-logo.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/img/digilib-logo.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,219 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg1307"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\temp"
+   sodipodi:docname="Digilib-logo-2.svg">
+  <defs
+     id="defs1309" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8.2782051"
+     inkscape:cx="34.898932"
+     inkscape:cy="35.775981"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:window-width="1280"
+     inkscape:window-height="753"
+     inkscape:window-x="-4"
+     inkscape:window-y="-4">
+    <sodipodi:guide
+       orientation="vertical"
+       position="-1.9327861"
+       id="guide23493" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata1312">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.04922342px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="rect1319"
+       width="34.523312"
+       height="42.631897"
+       x="-73.168289"
+       y="40.459969"
+       transform="matrix(-0.846554,0.532302,-2.654126e-3,0.999996,0,0)" />
+    <rect
+       style="fill:#0000ff;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="rect8613"
+       width="2.4545455"
+       height="0"
+       x="58.545456"
+       y="6" />
+    <rect
+       style="fill:#c5c5c5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.0745697px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="rect9490"
+       width="18.989349"
+       height="30.290173"
+       x="-63.894802"
+       y="44.831184"
+       transform="matrix(-0.85293,0.522025,1.174035e-2,0.999931,0,0)" />
+    <rect
+       style="fill:#c5c5c5;fill-opacity:1"
+       id="rect10365"
+       width="10"
+       height="7.5454545"
+       x="-43"
+       y="11.454545" />
+    <rect
+       style="fill:#000080;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect16478"
+       width="8.6068287"
+       height="8.6778221"
+       x="-37.568077"
+       y="0.25004297"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19107"
+       width="8.6068287"
+       height="8.6778221"
+       x="-29.251465"
+       y="34.880619"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#b00000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19109"
+       width="8.6068287"
+       height="8.6778221"
+       x="-28.961241"
+       y="0.25004297"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#b0b000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19111"
+       width="8.6068287"
+       height="8.6778221"
+       x="-20.538849"
+       y="0.25004297"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#0000b0;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19113"
+       width="8.6068287"
+       height="8.6778221"
+       x="-29.251465"
+       y="17.202801"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#0000f0;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19115"
+       width="8.6068287"
+       height="8.6778221"
+       x="-37.568077"
+       y="8.9278679"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#f00000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19117"
+       width="8.6068287"
+       height="8.6778221"
+       x="-20.723278"
+       y="8.9278679"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#f0f000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19119"
+       width="8.6068287"
+       height="8.6778221"
+       x="-28.961241"
+       y="8.9278679"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#f00000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24390"
+       width="8.6068287"
+       height="8.6778221"
+       x="-37.568077"
+       y="26.132593"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#0000f0;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24392"
+       width="8.6068287"
+       height="8.6778221"
+       x="-20.289255"
+       y="25.880625"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#b0b000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24394"
+       width="8.6068287"
+       height="8.6778221"
+       x="-20.289255"
+       y="17.202801"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#000080;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24396"
+       width="8.6068287"
+       height="8.6778221"
+       x="-29.251465"
+       y="25.880625"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#000080;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24398"
+       width="8.6068287"
+       height="8.6778221"
+       x="-11.682427"
+       y="0.20279986"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#800000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24400"
+       width="8.6068287"
+       height="8.6778221"
+       x="-12.021473"
+       y="17.202801"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#f00000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24404"
+       width="8.6068287"
+       height="8.6778221"
+       x="-12.021473"
+       y="34.880619"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#b0b000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24406"
+       width="8.6068287"
+       height="8.6778221"
+       x="-37.519249"
+       y="17.202801"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+  </g>
+</svg>
Binary file client/digitallibrary/img/digilib-notfound.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/img/digilib-notfound.svg	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,230 @@
+<?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:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg1307"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="C:\temp"
+   sodipodi:docname="digilib-notfound.svg">
+  <defs
+     id="defs1309" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8.2782051"
+     inkscape:cx="34.898932"
+     inkscape:cy="35.775981"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:window-width="1280"
+     inkscape:window-height="753"
+     inkscape:window-x="-4"
+     inkscape:window-y="-4">
+    <sodipodi:guide
+       orientation="vertical"
+       position="-1.9327861"
+       id="guide23493" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata1312">
+    <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>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.04922342px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="rect1319"
+       width="34.523312"
+       height="42.631897"
+       x="-73.168289"
+       y="40.459969"
+       transform="matrix(-0.846554,0.532302,-2.654126e-3,0.999996,0,0)" />
+    <rect
+       style="fill:#0000ff;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="rect8613"
+       width="2.4545455"
+       height="0"
+       x="58.545456"
+       y="6" />
+    <rect
+       style="fill:#c5c5c5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.0745697px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="rect9490"
+       width="18.989349"
+       height="30.290173"
+       x="-63.894802"
+       y="44.831184"
+       transform="matrix(-0.85293,0.522025,1.174035e-2,0.999931,0,0)" />
+    <rect
+       style="fill:#c5c5c5;fill-opacity:1"
+       id="rect10365"
+       width="10"
+       height="7.5454545"
+       x="-43"
+       y="11.454545" />
+    <rect
+       style="fill:#262626;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect16478"
+       width="8.6068287"
+       height="8.6778221"
+       x="-37.568077"
+       y="0.25004297"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#262626;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19107"
+       width="8.6068287"
+       height="8.6778221"
+       x="-29.251465"
+       y="34.880619"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#464646;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19109"
+       width="8.6068287"
+       height="8.6778221"
+       x="-28.961241"
+       y="0.25004297"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#585858;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19111"
+       width="8.6068287"
+       height="8.6778221"
+       x="-20.538849"
+       y="0.25004297"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#464646;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19113"
+       width="8.6068287"
+       height="8.6778221"
+       x="-29.251465"
+       y="17.202801"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#7d7d7d;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19115"
+       width="8.6068287"
+       height="8.6778221"
+       x="-37.568077"
+       y="8.9278679"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#7d7d7d;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19117"
+       width="8.6068287"
+       height="8.6778221"
+       x="-20.723278"
+       y="8.9278679"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#c2c2c2;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect19119"
+       width="8.6068287"
+       height="8.6778221"
+       x="-28.961241"
+       y="8.9278679"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#7d7d7d;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24390"
+       width="8.6068287"
+       height="8.6778221"
+       x="-37.568077"
+       y="26.132593"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#7d7d7d;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24392"
+       width="8.6068287"
+       height="8.6778221"
+       x="-20.289255"
+       y="25.880625"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#585858;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24394"
+       width="8.6068287"
+       height="8.6778221"
+       x="-20.289255"
+       y="17.202801"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#262626;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24396"
+       width="8.6068287"
+       height="8.6778221"
+       x="-29.251465"
+       y="25.880625"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#262626;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24398"
+       width="8.6068287"
+       height="8.6778221"
+       x="-11.682427"
+       y="0.20279986"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#262626;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24400"
+       width="8.6068287"
+       height="8.6778221"
+       x="-12.021473"
+       y="17.202801"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#787878;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24404"
+       width="8.6068287"
+       height="8.6778221"
+       x="-12.021473"
+       y="34.880619"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <rect
+       style="fill:#585858;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect24406"
+       width="8.6068287"
+       height="8.6778221"
+       x="-37.519249"
+       y="17.202801"
+       transform="matrix(-0.851875,-0.523744,0,1,0,0)" />
+    <text
+       xml:space="preserve"
+       style="font-size:62.7486763px;font-style:normal;font-weight:normal;fill:#058200;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="27.729532"
+       y="49.141472"
+       id="text3132"
+       transform="scale(1.023781,0.976772)"><tspan
+         sodipodi:role="line"
+         id="tspan3134"
+         x="27.729532"
+         y="49.141472">?</tspan></text>
+  </g>
+</svg>
Binary file client/digitallibrary/img/down.gif has changed
Binary file client/digitallibrary/img/left.gif has changed
Binary file client/digitallibrary/img/mark1.gif has changed
Binary file client/digitallibrary/img/mark2.gif has changed
Binary file client/digitallibrary/img/mark3.gif has changed
Binary file client/digitallibrary/img/mark4.gif has changed
Binary file client/digitallibrary/img/mark5.gif has changed
Binary file client/digitallibrary/img/mark6.gif has changed
Binary file client/digitallibrary/img/mark7.gif has changed
Binary file client/digitallibrary/img/mark8.gif has changed
Binary file client/digitallibrary/img/olinks.gif has changed
Binary file client/digitallibrary/img/orechts.gif has changed
Binary file client/digitallibrary/img/right.gif has changed
Binary file client/digitallibrary/img/ulinks.gif has changed
Binary file client/digitallibrary/img/up.gif has changed
Binary file client/digitallibrary/img/urechts.gif has changed
Binary file client/digitallibrary/modules/cm_separator.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/modules/imago.js	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,441 @@
+/*
+
+Copyright (C) 2003 WTWG, Uni Bern
+ 
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+ 
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+ 
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
+ 
+Author: Christian Luginbuehl, 22.05.2003 , Version Alcatraz 0.4
+
+*/
+
+/*************************************************************************
+ *  imago.js : digilib-module                                            *
+ *                                                                       *
+ *  desc: adds different image manipulation functions.                   *
+ *                                                                       *
+ *************************************************************************/
+
+
+/**
+ * brightness (value of brightness between -255 - +255)
+ */
+function brightness(value) {
+
+  if ( (value >= -255) && (value <= 255) ) {
+    
+    dlParams.brgt.value = value;
+    display(3);
+
+  }
+
+}
+
+
+/**
+ * contrast (value of contrast - range?)
+ */
+function contrast(value) {
+
+  dlParams.cont.value = parseFloat(value);
+  display(3);
+
+}
+
+
+/**
+ * brightness/contrast in one call
+ */
+function brightnessContrast(brightness, contrast) {
+
+  dlParams.cont.value = parseFloat(contrast);
+
+  if ( (brightness >= -255) && (brightness <= 255) ) {
+
+    dlParams.brgt.value = parseFloat(brightness);
+    display(3);
+
+  }
+
+}
+
+
+/**
+ * mirror (horizontal or vertical)
+ */
+function mirror(direction) {
+
+  if ( direction == 'v' ) {
+    if ( dlParams.mo.value.indexOf('vmir') > -1 ) {
+      removeMoFlag('vmir');
+    } else {
+      addMoFlag('vmir');
+    }
+  }
+  
+  if ( direction == 'h' ) {
+    if ( dlParams.mo.value.indexOf('hmir') > -1 ) {
+      removeMoFlag('hmir');
+    } else {
+      addMoFlag('hmir');
+    }
+  }
+
+  display(3);
+
+}
+
+
+/**
+ * rotation
+ */
+function rotation(value) {
+
+  value = parseFloat(value) % 360;
+  
+  if ( value < 0 ) {
+    value += 360;
+  }
+
+  dlParams.rot.value = value;
+  display(3);
+
+}
+
+
+/**
+ * rgb add (r/g/b, each value from -255 to +255)
+ */
+function rgba(value) {
+
+  values = value.split("/");
+  
+  if ( values.length != 3 ) {
+    alert ("Illegal parameter format (r/g/b)");
+  } else if ( (values[0] < -255) || (values[0] > 255) ) {
+    alert ("Illegal red additioner (-255 to 255)");
+  } else if ( (values[1] < -255) || (values[1] > 255) ) {
+    alert ("Illegal green additioner (-255 to 255)");
+  } else if ( (values[2] < -255) || (values[2] > 255) ) {
+    alert ("Illegal blue additioner (-255 to 255)");
+  } else {
+ 
+    dlParams.rgba.value = value;
+    display(3);
+
+  }
+}
+
+
+/**
+ * rgb mutiply (r/g/b, range?)
+ */
+function rgbm(value) {
+
+  values = value.split("/");
+  
+  if ( values.length != 3 ) {
+    alert ("Illegal parameter format (r/g/b)");
+  } else if ( !isFinite(values[0]) ) {
+    alert ("Illegal red exponent");
+  } else if ( !isFinite(values[1]) ) {
+    alert ("Illegal green exponent");
+  } else if ( !isFinite(values[2]) ) {
+    alert ("Illegal blue exponent");
+  } else {
+ 
+    dlParams.rgbm.value = value;
+    display(3);
+
+  }
+}
+
+
+/**
+ * rgba/rgbm in one call
+ */
+function colors(rgba, rgbm) {
+
+  add  = rgba.split("/");
+  mult = rgba.split("/");
+  
+  if ( (add.length) == 3 && (mult.length == 3) &&
+       (add[0] >= -255) && (add[0] <= 255) &&
+       (add[1] >= -255) && (add[1] <= 255) &&
+       (add[2] >= -255) && (add[2] <= 255) &&
+       (isFinite(mult[0])) &&
+       (isFinite(mult[1])) &&
+       (isFinite(mult[2])) ) {
+
+    dlParams.rgba.value = rgba;
+    dlParams.rgbm.value = rgbm;
+
+    display(3);
+
+  }
+}
+
+
+/**
+ * pixel by pixel view of images
+ */
+function pixelByPixel() {
+
+  removeMoFlag('osize');
+
+  addMoFlag('clip');
+  
+  // change scale to 1
+  dlParams.ws.value = 1.0;
+  
+  display(3);
+
+}
+
+
+/**
+ * original size view of images
+ */
+function originalSize(dpi_v, dpi_h) {
+
+  removeMoFlag('clip');
+  
+  addMoFlag('osize');
+  
+  // change scale to 1
+  dlParams.ws.value = 1.0;
+
+  dlParams.ddpix.value = cropFloat(dpi_h);
+  dlParams.ddpiy.value = cropFloat(dpi_v);
+
+  display(3);
+
+}
+
+
+/**
+ * scale (overriding old one)
+ *   as pixel by pixel is some kind of scale, it does turn scale factor to 1 
+ *   if chosen. also if a scale factor is chosen,
+ *   then pixel by pixel is turned off.
+ */
+function scale(factor) {
+
+  dlParams.ws.value = factor;
+
+  removeMoFlag('clip');
+  removeMoFlag('osize');
+
+  display(3);
+
+}
+
+
+/**
+ * placeMarks (overriding old one)
+ *   take care of rotation and mirroring when placing marks
+ */
+function placeMarks() {
+
+  if ( dlParams.mk.value != '' ) {
+
+    var mark = dlParams.mk.value.split(";");
+    var mark_count = mark.length;
+
+    // maximum of marks is 8
+    // we do not report this error because this is already done in function 'mark'
+    if ( mark_count > 8 ) mark_count = 8;
+
+    var picWidth  = (document.all) ? parseInt(document.all.lay1.offsetWidth) : (typeof(document.getElementById) == "function") ? parseInt(document.pic.offsetWidth) : parseInt(document.lay1.clip.width);
+    var picHeight = (document.all) ? parseInt(document.all.lay1.offsetHeight) : (typeof(document.getElementById) == "function") ? parseInt(document.pic.offsetHeight) : parseInt(document.lay1.clip.height);
+
+    // catch the cases where the picture had not been loaded already and
+    // make a timeout so that the coordinates are calculated with the real dimensions
+    if (  (picWidth > 30) || (document.pic.complete) ) {
+
+      var xOffset = (document.all) ? parseInt(document.all.lay1.style.left) : (typeof(document.getElementById) == "function") ? parseInt(document.getElementById('lay1').style.left) : document.lay1.left;
+      var yOffset = (document.all) ? parseInt(document.all.lay1.style.top) : (typeof(document.getElementById) == "function") ? parseInt(document.getElementById('lay1').style.top) : document.lay1.top;
+
+      for (var i = 0; i < mark_count; i++) {
+        mark[i] = mark[i].split("/");
+
+        if ( (parseFloat(mark[i][0]) >= parseFloat(dlParams.wx.value)) && 
+             (parseFloat(mark[i][1]) >= parseFloat(dlParams.wy.value)) &&
+             (parseFloat(mark[i][0]) <= (parseFloat(dlParams.wx.value) + parseFloat(dlParams.ww.value))) &&
+             (parseFloat(mark[i][1]) <= (parseFloat(dlParams.wy.value) + parseFloat(dlParams.wh.value))) ) {
+
+          mark[i][0] = (mark[i][0] - dlParams.wx.value)/dlParams.ww.value;
+          mark[i][1] = (mark[i][1] - dlParams.wy.value)/dlParams.wh.value;
+ 					
+          // mirror
+          if ( dlParams.mo.value.indexOf('hmir') > -1 ) {
+  	    mark[i][0] = 1 - mark[i][0];
+          }
+          if ( dlParams.mo.value.indexOf('vmir') > -1 ) {
+  	    mark[i][1] = 1 - mark[i][1];
+          }
+
+          // just the beginning - not working currently
+          var ang_rad = dlParams.rot.value*2*3.1415926/360;
+          
+          var ws = Math.sin(ang_rad)/(Math.cos(ang_rad)*dlParams.ww.value/dlParams.wh.value+Math.sin(ang_rad)) * picWidth;
+          var wc = (Math.cos(ang_rad)*dlParams.ww.value/dlParams.wh.value)/(Math.cos(ang_rad)*dlParams.ww.value/dlParams.wh.value+Math.sin(ang_rad)) * picWidth;
+
+          var hs = (Math.sin(ang_rad)*dlParams.ww.value/dlParams.wh.value)/(Math.sin(ang_rad)*dlParams.ww.value/dlParams.wh.value+Math.cos(ang_rad)) * picHeight;
+          var hc = Math.cos(ang_rad)/(Math.sin(ang_rad)*dlParams.ww.value/dlParams.wh.value+Math.cos(ang_rad)) * picHeight;
+
+          var origPicWidth  = Math.sqrt(Math.pow(wc, 2) + Math.pow(hs, 2));
+          var origPicHeight = Math.sqrt(Math.pow(ws, 2) + Math.pow(hc, 2));
+          // end of the beginning ;-)
+          
+          mark[i][0] = parseInt(xOffset + picWidth * mark[i][0]);
+          mark[i][1] = parseInt(yOffset + picHeight * mark[i][1]);
+
+          if ( (document.all) || (typeof(document.getElementById) == "function") ) {
+            // suboptimal to place -5 pixels and not half size of mark-image
+            // should be changed in the future
+            document.getElementById("dot" + i).style.left = mark[i][0]-5;
+            document.getElementById("dot" + i).style.top = mark[i][1]-5;
+            document.getElementById("dot" + i).style.visibility = "visible";
+          } else {
+     	    document.layers[i+1].moveTo(mark[i][0]-5, mark[i][1]-5);
+    	    document.layers[i+1].visibility = "show";
+          }
+        }
+      }
+
+    } else {
+      setTimeout("placeMarks()", 100);
+    }
+  }
+}
+
+
+/****
+ * helper functions
+ ****/
+
+/**
+ * Point (overriding old one)
+ *   constructor holding different values of a point
+ *  depending also on mirror or rotation
+ */
+function Point(evt) {
+
+	if ( document.all ) {
+
+    this.pageX = parseInt(document.body.scrollLeft+event.clientX);
+    this.pageY = parseInt(document.body.scrollLeft+event.clientY);
+
+    this.x = this.pageX-parseInt(document.all.lay1.style.left);
+    this.y = this.pageY-parseInt(document.all.lay1.style.top);
+
+    // mirror
+    if ( dlParams.mo.value.indexOf('hmir') > -1 ) {
+      this.relX = cropFloat(parseFloat(parseFloat(dlParams.wx.value)+parseFloat(dlParams.ww.value))-(dlParams.ww.value*this.x/document.all.lay1.offsetWidth));
+    } else {
+      this.relX = cropFloat(parseFloat(dlParams.wx.value)+(dlParams.ww.value*this.x/document.all.lay1.offsetWidth));
+    }
+    if ( dlParams.mo.value.indexOf('vmir') > -1 ) {
+      this.relY = cropFloat(parseFloat(parseFloat(dlParams.wy.value)+parseFloat(dlParams.wh.value))-(dlParams.wh.value*this.y/document.all.lay1.offsetHeight));
+    } else {
+      this.relY = cropFloat(parseFloat(dlParams.wy.value)+(dlParams.wh.value*this.y/document.all.lay1.offsetHeight));
+    }
+
+	} else {
+
+    this.pageX = parseInt(evt.pageX);
+    this.pageY = parseInt(evt.pageY);
+
+	  if ( typeof(document.getElementById) == "function" ) {
+
+      this.x = this.pageX-parseInt(document.getElementById("lay1").style.left);
+      this.y = this.pageY-parseInt(document.getElementById("lay1").style.top);
+
+      // mirror
+      if ( dlParams.mo.value.indexOf('hmir') > -1 ) {
+        this.relX = cropFloat(parseFloat(parseFloat(dlParams.wx.value)+parseFloat(dlParams.ww.value))-(dlParams.ww.value*this.x/document.pic.offsetWidth));
+      } else {
+        this.relX = cropFloat(parseFloat(dlParams.wx.value)+(dlParams.ww.value*this.x/document.pic.offsetWidth));
+      }
+      if ( dlParams.mo.value.indexOf('vmir') > -1 ) {
+        this.relY = cropFloat(parseFloat(parseFloat(dlParams.wy.value)+parseFloat(dlParams.wh.value))-(dlParams.wh.value*this.y/document.pic.offsetHeight));
+      } else {
+        this.relY = cropFloat(parseFloat(dlParams.wy.value)+(dlParams.wh.value*this.y/document.pic.offsetHeight));
+      }
+
+    } else {
+
+      this.x = this.pageX-document.lay1.left;
+      this.y = this.pageY-document.lay1.top;
+
+      // mirror
+      if ( dlParams.mo.value.indexOf('hmir') > -1 ) {
+        this.relX = cropFloat(parseFloat(parseFloat(dlParams.wx.value)+parseFloat(dlParams.ww.value))-(dlParams.ww.value*this.x/document.lay1.clip.width));
+      } else {
+        this.relX = cropFloat(parseFloat(dlParams.wx.value)+(dlParams.ww.value*this.x/document.lay1.clip.width));
+      }
+      if ( dlParams.mo.value.indexOf('vmir') > -1 ) {
+        this.relY = cropFloat(parseFloat(parseFloat(dlParams.wy.value)+parseFloat(dlParams.wh.value))-(dlParams.wh.value*this.y/document.lay1.clip.height));
+      } else {
+        this.relY = cropFloat(parseFloat(dlParams.wy.value)+(dlParams.wh.value*this.y/document.lay1.clip.height));
+      }
+
+    }
+
+  }
+
+  return this;
+
+}
+
+
+/**
+ * removeMoFlag from mo parameter
+ */
+function removeMoFlag(name) {
+
+  if ( dlParams.mo.value != '' ) {
+
+    var idx_comma_after  = dlParams.mo.value.indexOf(name + ',');
+    var idx_comma_before = dlParams.mo.value.indexOf(',' + name);
+    var idx_nocomma      = dlParams.mo.value.indexOf(name);
+    
+    if ( idx_comma_after > -1 ) {
+      dlParams.mo.value = dlParams.mo.value.slice(0, idx_comma_after) + dlParams.mo.value.slice(idx_comma_after+name.length+1);
+    }else if ( idx_comma_before > -1 ) {
+      dlParams.mo.value = dlParams.mo.value.slice(0, idx_comma_before) + dlParams.mo.value.slice(idx_comma_before+name.length+1);
+    } else if ( idx_nocomma > -1 ) {
+      dlParams.mo.value = dlParams.mo.value.slice(0, idx_nocomma) + dlParams.mo.value.slice(idx_nocomma+name.length);
+    }
+  }
+
+}
+
+
+/**
+ * addMoFlag from mo parameter
+ */
+function addMoFlag(name) {
+
+  if ( dlParams.mo.value.indexOf(name) == -1 ) {
+
+    if ( dlParams.mo.value.length > 0 ) {
+      dlParams.mo.value += ',' + name;
+    } else {
+      dlParams.mo.value = name;
+    }
+  }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/modules/newReferences.js	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,82 @@
+/*
+
+Copyright (C) 2003 WTWG, Uni Bern
+ 
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+ 
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+ 
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
+ 
+Author: Christian Luginbuehl, 22.05.2003 , Version Alcatraz 0.4
+
+*/
+
+/*************************************************************************
+ *  newReferences.js : digilib-module                                    *
+ *                                                                       *
+ *  desc: creates references in the new parameter format (key-value)     *
+ *                                                                       *
+ *************************************************************************/
+
+
+/**
+ * ref, overriding original one
+ */
+function ref(select) {
+
+  var hyperlinkRef = baseUrl + "/digilib.jsp?";
+
+  if ( select >= 2 ) {
+    
+    // no original size is referenced at the moment,
+    // because the dpi values are not constant from user to user
+    removeMoFlag('osize');
+
+    var parameterString = '';
+    
+    for ( param in dlParams ) {
+      if ( (dlParams[param].detail < 9) && (dlParams[param].defaultValue != dlParams[param].value) ) {
+        parameterString += "&" + param + "=" + dlParams[param].value;
+      }
+    }
+    
+    if (select == 2) {
+      parameterString += "&lv=3";    // level three
+      parameterString = parameterString.slice(1);
+      prompt("Alcatraz-style HTML link", hyperlinkRef + parameterString);
+    } else {
+      parameterString += "&lv=1";    // i just really want the image
+      parameterString = parameterString.slice(1);
+      return hyperlinkRef + parameterString;
+    }
+
+  } else {
+                
+    var parameterString = '';
+
+  	parameterString += dlParams.fn.value + "+" + dlParams.pn.value + "+" + dlParams.ws.value + "+";
+  	parameterString += dlParams.mo.value + "+" + dlParams.mk.value;
+	
+  	if ( (dlParams.wx.value != 0) || (dlParams.wy.value != 0) || (dlParams.ww.value != 1) || (dlParams.wh.value != 1) ) {
+  		parameterString += "+" + dlParams.wx.value + "+" + dlParams.wy.value + "+" + dlParams.ww.value;
+  		parameterString += "+" + dlParams.wh.value;
+  	}
+
+    if ( select == 1 ) {
+      prompt("Link for HTML-documents", hyperlinkRef + parameterString);
+    }
+    
+    if ( select == 0 ) {
+      prompt("Link for LaTeX-documents", "\\href{" + hyperlinkRef + parameterString + "}{TEXT}");
+    }
+  }
+}
Binary file client/digitallibrary/oldskin/buttons/back0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/back1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/background0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/background1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/description0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/description1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/digicat0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/digicat1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/download0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/download1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/fullpage0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/fullpage1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/glossar0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/help0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/home0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/home1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/makepdf0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/makepdf1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/mark.gif has changed
Binary file client/digitallibrary/oldskin/buttons/mark0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/mark1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/matrix0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/matrix1.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/oldskin/buttons/menu.js	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,240 @@
+function checkBrowser() {
+
+	this.ua    = navigator.userAgent;
+	this.ver   = navigator.appVersion;
+	this.dom   = ( document.getElementById );
+	this.opera = ( this.dom ) && ( this.ua.toLowerCase().indexOf("opera") > -1 );
+	this.ie4   = ( document.all ) && ( !this.dom );
+	this.ie5   = ( this.ver.indexOf("MSIE 5") > -1 ) && ( this.dom );
+	this.ie6   = ( this.ver.indexOf("MSIE 6") > -1 ) && ( this.dom );
+	this.ns4   = ( document.layers ) && ( !this.dom );
+	this.ns6   = ( this.dom ) && ( parseInt(this.ver) >= 5 ) && ( !this.opera );
+	this.ns    = this.ns4 || this.ns6;
+	this.ie    = this.ie4 || this.ie5 || this.ie6;
+
+	return this;
+}
+
+browser = new checkBrowser();
+
+function changeBc(obj, color){
+	var div;
+
+	if (color == '' && browser.ns4) color = null;
+
+	if (browser.ns4) div = document.layers[obj];
+	else if (browser.dom) div = document.getElementById(obj).style;
+	else if (browser.ie) div = document.all[obj].style;
+
+	if (browser.dom || browser.ie) div.backgroundColor = color;
+	if (browser.ns4) div.bgColor = color;
+}
+
+function makeArray(n){
+	this.length = n;
+	for (var i = 0; i < n; i++) {
+		this[i] = new Image();
+	}
+
+	return this;
+}
+
+function preloadImages() {
+	over = new makeArray(document.images.length);
+	away = new makeArray(document.images.length);
+
+	for (i = 0; i < document.images.length; i++) {
+		currName = document.images[i].src.slice(0, document.images[i].src.lastIndexOf('.')-1);
+		away[i].src = currName + "0.gif";
+		over[i].src = currName + "1.gif";
+	}
+}
+
+function overButton(n) {
+	currButton = document.images[n];
+
+	currButton.src = over[n].src;
+	if (showHelp) contextHelp(n);
+}
+
+function awayButton(n) {
+	currButton = document.images[n];
+
+	currButton.src = away[n].src;
+}
+
+function overItem(obj) {
+	changeBc("menu" + obj, '#770000');
+	clearTimeout(timeID);
+}
+
+function awayItem(obj) {
+	changeBc("menu" + obj, '#666666');
+	timeID = setTimeout("hideMenu()", 700);
+}
+
+var timeID = null;
+
+function changeMark(obj) {
+	var object;
+
+	if (browser.ns4) object = document.layers["menu" + obj].document.images[0];
+	else if (browser.dom) object = document.getElementById("mark" + obj);
+	else if (browser.ie) object = document.all["mark" + obj];
+	
+	var path = object.src.slice(0, object.src.lastIndexOf('/')+1);
+	
+	object.src = (object.src.indexOf("nomark") > -1) ? path + "mark.gif" : path + "nomark.gif";
+}
+
+function showMenu(obj) {
+	menu(obj, true);
+}
+
+function menu(obj, show) {
+	var currObj = "menu" + obj;
+	var idx = 0;
+	while(true) {
+		if (browser.ns4 && document.layers[currObj]) document.layers[currObj].visibility = (show) ? "show" : "hide";
+		else if (browser.dom && document.getElementById(currObj)) document.getElementById(currObj).style.visibility = (show) ? "visible" : "hidden";
+		else if (browser.ie && document.all[currObj]) document.all[currObj].style.visibility = (show) ? "visible" : "hidden";
+		else break;
+		
+		currObj = "menu" + obj + (++idx);
+	}
+	if (!show) activeMenu = '';
+	else activeMenu = obj;
+
+	timeID = setTimeout("hideMenu()", 2000);
+}
+
+function hideMenu() {
+	if (activeMenu != '') menu(activeMenu, false);
+	clearTimeout(timeID);
+}
+
+var activeMenu = '';
+
+
+// just to be sure, that no buffer overflow can arrive
+var semaphor = true;
+
+function contextHelp(n) {
+
+	if (helpWindow.closed) {
+		changeMark(31);
+		changeHelp();
+		return;
+	}
+
+	if ((navigator.appVersion.indexOf("Macintosh") < 0) && semaphor) {
+		semaphor = false;	
+		var help = helpText[n].split("|");
+	
+		helpWindow.focus();
+		helpWindow.document.open();
+		helpWindow.document.write('<html><head><title>Context Help</title>');
+		helpWindow.document.write('<style type="text/css">');
+		helpWindow.document.write('.title {font-family: Verdana, sans-serif, Arial; font-size: 12px; font-weight: bold; color: #FFFFFF}');
+		helpWindow.document.write('.text {font-family: Verdana, sans-serif, Arial; font-size: 10px; color: #000000}');
+		helpWindow.document.write('</style></head><body bgcolor="#CCCCCC" leftmargin="7" topmargin="7" marginwidth="7" marginheight="7" onload="opener.semaphor = true;">');
+		helpWindow.document.write('<table width="99%" border="0" cellspacing="0" cellpadding="3"><tr><td bgcolor="#666666" class="title">');
+		helpWindow.document.write(help[0] + '</tr><tr><td class="text">');
+		helpWindow.document.write(help[1] + '</tr></td></table></body></html>');
+		helpWindow.document.close();	
+
+		// stupid workaround because of netscape 6, that doesen't know the opener property
+		// this workaround is still ok because netscape 6 has eventbuffer checks so no overflow
+    	if (browser.ns6) {
+        	semaphor = true;
+		}
+
+		// next stupid workaround because of opera 6, that somehow don't start the 'onLoad'-
+		// attribute in the body tag (the helpwindow does not finish loading)
+    	if (browser.opera) {
+        	setTimeout("semaphor = true;", 50);
+		}
+
+	}
+}
+
+function openContextHelp() {
+	if (navigator.appVersion.indexOf("Macintosh") > -1) {
+		openContextHelpMac();
+		return;
+	}
+
+	semaphor = false;
+	
+	var winWidth = 270;
+	var winHeight = 130;
+
+	var xScreen = 0.9*(screen.width-winWidth);
+	var yScreen = 0.8*(screen.height-winHeight);
+
+	helpWindow = window.open("", "ContextHelp", "width=" + winWidth + ",height=" + winHeight + ",screenX=" + xScreen + ",screenY=" + yScreen + ",left=" + xScreen + ",top=" + yScreen);
+
+	helpWindow.focus();
+	helpWindow.document.open();
+	helpWindow.document.write('<html><head><title>Context Help</title>');
+	helpWindow.document.write('<style type="text/css">');
+	helpWindow.document.write('.title {font-family: Verdana, sans-serif, Arial; font-size: 12px; font-weight: bold; color: #FFFFFF}');
+	helpWindow.document.write('.text {font-family: Verdana, sans-serif, Arial; font-size: 10px; color: #000000}');
+	helpWindow.document.write('</style></head><body bgcolor="#CCCCCC" leftmargin="7" topmargin="7" marginwidth="7" marginheight="7">');
+	helpWindow.document.write('<table width="99%" border="0" cellspacing="0" cellpadding="3"><tr><td bgcolor="#666666" class="title">');
+	helpWindow.document.write('Context Help</tr><tr><td class="text">');
+	helpWindow.document.write('Move over any button to get some more information about its function</tr></td></table></body></html>');
+	helpWindow.document.close();
+	
+	// for some safety reason help-requests have to be blocked while opening the window
+	setTimeout("semaphor = true;", 200);
+}
+
+// because macs have a strange window focus behaviour we have to go a special
+// way for them - just opening a window that contains all button-descriptions
+function openContextHelpMac() {
+
+	var winWidth = 270;
+	var winHeight = 600;
+
+	var xScreen = 0.9*(screen.width-winWidth);
+	var yScreen = 0.8*(screen.height-winHeight);
+
+	helpWindow = window.open("", "ContextHelp", "width=" + winWidth + ",height=" + winHeight + ",screenX=" + xScreen + ",screenY=" + yScreen + ",left=" + xScreen + ",top=" + yScreen + ",scrollbars");
+
+	helpWindow.focus();
+	helpWindow.document.open();
+	helpWindow.document.write('<html><head><title>Context Help Macintosh</title>');
+	helpWindow.document.write('<style type="text/css">');
+	helpWindow.document.write('.title {font-family: Verdana, sans-serif, Arial; font-size: 12px; font-weight: bold; color: #FFFFFF}');
+	helpWindow.document.write('.text {font-family: Verdana, sans-serif, Arial; font-size: 10px; color: #000000}');
+	helpWindow.document.write('</style></head><body bgcolor="#CCCCCC" leftmargin="7" topmargin="7" marginwidth="7" marginheight="7">');
+	helpWindow.document.write('<table width="99%" border="0" cellspacing="0" cellpadding="3">');
+
+	for (n = 0; n < helpText.length; n++) {
+
+		help = helpText[n].split("|");
+		helpWindow.document.write('<tr><td bgcolor="#666666" class="title">');
+		helpWindow.document.write(help[0] + '</tr><tr><td class="text">');
+		helpWindow.document.write('<p>' + help[1] + '<br>&nbsp;</p></tr></td>');
+	}
+	helpWindow.document.write('</table></body></html>');
+	helpWindow.document.close();
+}
+
+
+function closeContextHelp() {
+	if (helpWindow != '' && !helpWindow.closed) {
+		helpWindow.close();
+	}
+	helpWindow = '';
+}
+
+function changeHelp() {
+	showHelp = !showHelp;
+	showHelp ? openContextHelp() : closeContextHelp();
+}
+
+
+// variable containing the contextwindow
+var helpWindow = '';
\ No newline at end of file
Binary file client/digitallibrary/oldskin/buttons/moveto0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/moveto1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/newwindow0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/newwindow1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/next0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/next1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/nomark.gif has changed
Binary file client/digitallibrary/oldskin/buttons/page0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/page1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/questionmark0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/questionmark1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/reference0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/reference1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/refresh0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/refresh1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/relation0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/relation1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/scale0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/scale1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/spacer.gif has changed
Binary file client/digitallibrary/oldskin/buttons/type0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/type1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/work0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/work1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/zoomarea0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/zoomarea1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/zoomin0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/zoomin1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/zoomout0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/zoomout1.gif has changed
Binary file client/digitallibrary/oldskin/buttons/zoompoint0.gif has changed
Binary file client/digitallibrary/oldskin/buttons/zoompoint1.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/oldskin/dcMain.jsp	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,83 @@
+<%@ page language="java" %><%!
+// authentication stuff - robert
+// -----------------------------
+// create DocumentBean instance for all JSP requests
+digilib.servlet.DocumentBean docBean = new digilib.servlet.DocumentBean();
+
+// initialize DocumentBean instance in JSP init
+public void jspInit() {
+    try {
+        // set servlet init-parameter
+        docBean.setConfig(getServletConfig());
+    } catch (javax.servlet.ServletException e) {
+        System.out.println(e);
+    }
+}
+%><%
+
+// parsing the query
+// -----------------
+
+digilib.servlet.DigilibRequest dcRequest = new digilib.servlet.DigilibRequest(request);
+// check if authentication is needed and redirect if necessary
+docBean.doAuthentication(dcRequest, response);
+// set number of pages  
+dcRequest.setValue("pt", docBean.getNumPages(dcRequest));
+// chop off /oldskin -- ugly ;-(
+String baseUrl = dcRequest.getAsString("base.url");
+int p = baseUrl.lastIndexOf("/oldskin");
+if (p > 0) {
+   baseUrl = baseUrl.substring(0, p);
+}
+%>
+<html>
+<head>
+<script type="text/javascript" src="../baselib.js"></script>
+<script type="text/javascript" src="dclib.js"></script>
+<script type="text/javascript">
+base_init();
+var baseUrl = "<%= baseUrl %>";
+newParameter('fn', '', 1);
+newParameter('pn', 1, 1);
+newParameter('pt', 9, 9);
+newParameter('mx', '6x4', 1);
+newParameter('mo', '', 1);
+newParameter('dw', 0, 1);
+newParameter('dh', 0, 1);
+dc_init();
+</script>
+
+<style type="text/css">
+td {
+  font-family: Helvetica, Arial, sans-serif;
+  font-size: 11px;
+  color: #FFFFFF;
+  text-align: center;
+  vertical-align: middle;
+}
+.number {
+  font-family: Helvetica, Arial, sans-serif;
+  font-size: 11px;
+  color: #FFFFFF;
+  padding-top: 2px;
+}
+.nonumber {
+  font-family: Helvetica, Arial, sans-serif;
+  font-size: 11px;
+  color: #000000;
+  padding-top: 2px;
+}
+</style>
+</head>
+
+<body bgcolor="#666666">
+
+<div align="center">
+<script type="text/javascript">
+  dc_render(document);
+</script>
+</div>
+
+</body>
+
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/oldskin/dcMenu.html	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,49 @@
+<html>
+<head>
+<style type="text/css">
+.menu1 {position:absolute; top:122; left:41; width:44; height:138; clip:rect(0,44,138,0); visibility:hidden}
+.item1 {position:absolute; left:43; width:40; height:14; clip:rect(0,40,14,0); visibility:hidden}
+
+.text {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; color: #FFFFFF; text-decoration: none}
+</style>
+<script language="JavaScript" src="buttons/menu.js"></script>
+<script language="JavaScript">
+// because on a netscape 4.xx bug (messing up with layers on resize) we cache the window
+// resize event and redisplay the navigation frame
+if (document.layers && !document.getElementById) {
+	window.onresize = function() {parent.rightFrame.location.reload();}
+}
+
+function reloadTable(row, col) {
+    parent.mainFrame.setParameter("mx", row+"x"+col);
+    parent.mainFrame.display();
+}
+
+// turn off the contexthelp
+var showHelp = false;
+</script>
+</head>
+
+<body bgcolor="#CCCCCC" leftmargin="8" marginwidth="8" topmargin="20" marginheight="20" onload="preloadImages();">
+<a href="javascript:parent.mainFrame.Backpage()" onmouseover="overButton(0)" onmouseout="awayButton(0)"><img src="buttons/back0.gif" width="73" height="30" border="0"></a><br>
+<a href="javascript:parent.mainFrame.Nextpage()" onmouseover="overButton(1)" onmouseout="awayButton(1)"><img src="buttons/next0.gif" width="73" height="30" border="0"></a><br><br>
+<a href="javascript:hideMenu();showMenu(1);" onmouseover="overButton(2)" onmouseout="awayButton(2)"><img src="buttons/matrix0.gif" width="73" height="30" border="0"></a><br>
+
+<div id="menu1" class="menu1"></div>
+ <div id="menu11" class="item1" style="top:124"><center><a href="#" class="text" onClick="hideMenu(); reloadTable(1, 2); return false;" onmouseover="overItem(11)" onmouseout="awayItem(11)">1x2</a></center></div>
+ <div id="menu12" class="item1" style="top:139"><center><a href="#" class="text" onClick="hideMenu(); reloadTable(2, 3); return false;" onmouseover="overItem(12)" onmouseout="awayItem(12)">2x3</a></center></div>
+ <div id="menu13" class="item1" style="top:154"><center><a href="#" class="text" onClick="hideMenu(); reloadTable(2, 4); return false;" onmouseover="overItem(13)" onmouseout="awayItem(13)">2x4</a></center></div>
+ <div id="menu14" class="item1" style="top:169"><center><a href="#" class="text" onClick="hideMenu(); reloadTable(3, 2); return false;" onmouseover="overItem(14)" onmouseout="awayItem(14)">3x2</a></center></div>
+ <div id="menu15" class="item1" style="top:184"><center><a href="#" class="text" onClick="hideMenu(); reloadTable(3, 3); return false;" onmouseover="overItem(15)" onmouseout="awayItem(15)">3x3</a></center></div>
+ <div id="menu16" class="item1" style="top:199"><center><a href="#" class="text" onClick="hideMenu(); reloadTable(3, 4); return false;" onmouseover="overItem(16)" onmouseout="awayItem(16)">3x4</a></center></div>
+ <div id="menu17" class="item1" style="top:214"><center><a href="#" class="text" onClick="hideMenu(); reloadTable(3, 5); return false;" onmouseover="overItem(17)" onmouseout="awayItem(17)">3x5</a></center></div>
+ <div id="menu18" class="item1" style="top:229"><center><a href="#" class="text" onClick="hideMenu(); reloadTable(4, 5); return false;" onmouseover="overItem(18)" onmouseout="awayItem(18)">4x5</a></center></div>
+ <div id="menu19" class="item1" style="top:244"><center><a href="#" class="text" onClick="hideMenu(); reloadTable(4, 6); return false;" onmouseover="overItem(19)" onmouseout="awayItem(19)">4x6</a></center></div>
+
+<script language="Javascript">
+// initial background color of the menues (has to be done like this, 
+// otherwise menues in ns4 you will have wrong dimensions)
+changeBc("menu1", "#666666");
+</script>
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/oldskin/dclib.js	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,124 @@
+/*
+Copyright (C) 2003-2004 WTWG Uni Bern, MPIWG Berlin
+ 
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+ 
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+ 
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
+ 
+Author: 
+  Christian Luginbuehl, 07.04.2004 , Version Alcatraz 0.6
+  Robert Casties 28.10.2004
+
+!! requires baselib.js !!
+
+*/
+
+function identify() {
+  return 'Digicat v0.4';
+}
+
+var cells = null;
+
+
+function dc_init() {
+  // put the query parameters (sans "?") in the parameters array
+  parseParameters(location.search.slice(1));
+}
+
+function display(detail) {
+    // redisplay the page
+    if (! detail) {
+	detail = 9;
+    }
+    var queryString = getAllParameters(detail);
+    location.href = location.protocol + "//" + location.host + location.pathname + "?" + queryString;
+}
+
+function dc_render(doc) {
+    // creates the HTML for the image table
+    var wsize = getWinSize();
+    var fWidth  = wsize.width;
+    var fHeight = wsize.height;
+
+    var mx = getParameter("mx");
+    cells = mx.split('x');
+  
+    var dw = getParameter("dw");
+    var dh = getParameter("dh");
+    var pt = getParameter("pt");
+    var pn = parseInt(getParameter("pn"));
+    var fn = getParameter("fn");
+    var par_mo = (hasParameter("mo")) ? "mo="+getParameter("mo") : "";
+
+    var picWidth = (dw != 0) ? dw : Math.floor((fWidth-30)/cells[0])-2*cells[0]-1;
+    var picHeight = (dh != 0) ? dh : picWidth;
+
+    if (cells.length > 1) {
+	picHeight = (dh != 0) ? dh : Math.floor(((fHeight-30)-12*cells[1])/cells[1])-2*cells[1]-1;
+    } else {
+	cells[1] = Math.ceil(pt/cells[0]);
+    }
+
+    var cellWidth  = parseInt(picWidth)+8;
+    var cellHeight = parseInt(picHeight)+18;
+
+    doc.writeln('<table width="100%" height="100%" border="0" cellspacing="1" cellpadding="0">');
+
+    for (var j = 0; j < cells[1]; j++) {
+	doc.writeln('<tr>');
+	for (var i = 0; i < cells[0]; i++) {
+	    var idx  = pn+i+j*cells[0];
+	    var img  = baseUrl + "/servlet/Scaler?fn=" + fn + "&pn=" + idx;
+	    img += "&dw=" + picWidth + "&dh=" + picHeight + par_mo;
+	    doc.write('<td width="'+cellWidth+'" height="'+cellHeight+'">');
+	    if (idx <= pt) {
+		doc.write('<a href="'+dl_link(idx)+'" target="_blank"><img src="'+img+'" border="0"></a><div class="number">'+idx+'</div>');
+	    } else {
+		doc.write('<div class="nonumber">'+idx+'</div>');
+	    }
+	    doc.writeln('</td>');
+	}
+	doc.writeln(' </tr>');
+    }
+    doc.writeln('</table>');
+}
+
+
+function dl_link(i) {
+    var link = baseUrl+"/digilib.jsp?fn="+getParameter("fn")+"&pn="+i+"&mo="+getParameter("mo");
+    return link;
+}  
+
+
+function Backpage() {
+    var pn = parseInt(getParameter("pn"));
+    if (pn <= 1) {
+	pn = 1;
+        alert("You are already on the first page!");
+    }
+
+    pn = pn - parseInt(cells[0]*cells[1]);
+
+    if (pn < 1) {
+    	pn = 1;
+    }
+    setParameter("pn", pn);
+    display();
+}
+
+function Nextpage() {
+    var pn = parseInt(getParameter("pn"));
+    pn = pn + parseInt(cells[0]*cells[1]);
+    setParameter("pn", pn);
+    display();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/oldskin/dlMenu.html	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,151 @@
+<html>
+<head>
+<style type="text/css">
+.menu {position:absolute; visibility:hidden}
+
+.item1 {position:absolute; left:33; width:50; height:14; clip:rect(0,50,14,0); visibility:hidden}
+.item2 {position:absolute; left:43; width:40; height:14; clip:rect(0,40,14,0); visibility:hidden}
+.item3 {position:absolute; left:3; width:80; height:14; clip:rect(0,80,14,0); visibility:hidden}
+.logo { margin-left: 5px; margin-top: 10px; }
+
+.text {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; color: #FFFFFF; text-decoration: none}
+</style>
+<script language="JavaScript" src="buttons/menu.js"></script>
+
+<script language="JavaScript">
+// because on a netscape 4.xx bug (messing up with layers on resize) we cache the window
+// resize event and redisplay the navigation frame
+if (document.layers && !document.getElementById) {
+    window.onresize = function() {parent.rightFrame.location.reload();}
+}
+
+/**
+ * overriding 'page' in navigation.js
+ */
+function page(page, keep) {
+
+    parent.mainFrame.gotoPage(page, keep);
+    if (parent.pageFrame.show) {
+      parent.pageFrame.show();
+    } else {
+      parent.pageFrame.location.reload();
+    }
+}
+
+/*
+ * new display function to refresh the pagesTotal frame
+ */
+
+function display(detail) {
+    if (parent.pageFrame.show) {
+      parent.pageFrame.show();
+    } else {
+      parent.pageFrame.location.reload();
+    }
+    parent.mainFrame.display(detail);
+}
+
+
+function askPage() {
+    do {
+	p = prompt("Goto Page:", 1);
+    } while ((p != null) && (p < 1));
+    page(p);
+}
+
+function showRef(select) {
+    var hyperlinkRef = parent.mainFrame.baseUrl + "/digilib.jsp?";
+    hyperlinkRef += parent.mainFrame.getAllParameters();
+    if ( select == 0 ) {
+	prompt("Link for LaTeX-documents", "\\href{" + hyperlinkRef + "}{TEXT}");
+    } else if ( select == 1 ) {
+	prompt("Link for HTML-documents", hyperlinkRef);
+    }
+}
+
+function setSize(size) {
+    parent.mainFrame.setParameter('ws', size);
+    display();
+}
+
+function digicat() {
+    var fn = parent.mainFrame.getParameter("fn");
+    var pn = parent.mainFrame.getParameter("pn");
+    var url = parent.mainFrame.baseUrl + "/digicat.jsp?fn=" + fn + "&pn=" + pn;
+    win = window.open(url, "digicat");
+    win.focus();
+}
+
+// boolean variable to either show or not show the additional help
+// change in the menuitem its original mark
+var showHelp = false;
+
+// variable to tell if while changing to another page it should keep the area
+// change in the menuitem its original mark
+var keepArea = false;
+
+
+// variable that store the texts for contexthelp
+var helpText = new Array();
+
+helpText[0]  = "'back'-button|Click on this button to load the previous image (usually the next page from a manuscript).";
+helpText[1]  = "'next'-button|Click on this button to load the next image (usually the next page from a manuscript).";
+helpText[2]  = "'page'-button|After clicking 'page' you will be prompted for a specific page you want to see.<br>Note that the page number refers to the same serie you are in now.";
+helpText[3]  = "'digicat'-button|Click here to open a new window containing thumbnails of the current series pages to navigate.";
+helpText[4]  = "'mark'-button|You can set marks into the picture. After hitting 'mark' you have to click on the desired picures location, a numbered mark appears.<br>Check out 'reference' to make these marks (up to 8) visible for others.";
+helpText[5]  = "'reference'-button|Choose LaTeX or HTML mode to get a link for the actual (zoomed) picture with all set marks.<br>This link can easily be included in a TeX- or HTML-formatted document/page.";
+helpText[6]  = "'zoom area'-button|With 'zoom area' you can zoom into any rectangular field for the current picture.<br>After clicking on the button click on the image to set any corner (ex. topleft), release the mousebutton and move the mouse until you have the desired size, then click again.";
+helpText[7]  = "'zoom in'-button|Clicking on 'zoom in' zooms in around the current center.";
+helpText[8]  = "'zoom out'-button|Clicking on 'zoom out' zooms out around the current center.";
+helpText[9]  = "'full page'-button|To gain the original unzoomed picture, click on 'full page'.<br>Note that any set marks are still saved at their positions.";
+helpText[10] = "'size'-button|By clicking on one of the menu entries you can select the size of the currently displayed picture in relation to your browser window.<br>Note: a scale factor of '1.0' means that the picture fits right into the working area, while '2.0' means that it will be twice as high and wide.";
+helpText[11] = "'?'-button|In its menu you are able change options like the visibility of this contextsensitive help, with 'Keep area' digilib keeps its current zoom area when changing to another page.";
+
+</script>
+</head>
+
+<body bgcolor="#CCCCCC" leftmargin="8" marginwidth="8" topmargin="5" marginheight="5" onload="preloadImages()" onunload="closeContextHelp()">
+
+<a href="javascript:page('-1', keepArea)" onmouseover="overButton(0)" onmouseout="awayButton(0)"><img src="buttons/back0.gif" width="73" height="30" border="0"></a><br>
+<a href="javascript:page('+1', keepArea)" onmouseover="overButton(1)" onmouseout="awayButton(1)"><img src="buttons/next0.gif" width="73" height="30" border="0"></a><br>
+<a href="javascript:askPage()" onmouseover="overButton(2)" onmouseout="awayButton(2)"><img src="buttons/page0.gif" width="73" height="30" border="0"></a><br>
+<a href="javascript:digicat()" onmouseover="overButton(3)" onmouseout="awayButton(3)"><img src="buttons/digicat0.gif" width="73" height="30" border="0"></a><br><br>
+<a href="javascript:parent.mainFrame.setMark(false);" onmouseover="overButton(4)" onmouseout="awayButton(4)"><img src="buttons/mark0.gif" width="73" height="30" border="0"></a><br>
+<a href="javascript:hideMenu(); showMenu(1)" onmouseover="overButton(5)" onmouseout="awayButton(5)"><img src="buttons/reference0.gif" width="73" height="30" border="0"></a><br><br>
+<a href="javascript:parent.mainFrame.zoomArea()" onmouseover="overButton(6)" onmouseout="awayButton(6)"><img src="buttons/zoomarea0.gif" width="73" height="30" border="0"></a><br>
+<a href="javascript:parent.mainFrame.zoomBy(1.4142)" onmouseover="overButton(7)" onmouseout="awayButton(7)"><img src="buttons/zoomin0.gif" width="73" height="30" border="0"></a><br>
+<a href="javascript:parent.mainFrame.zoomBy(0.7071)" onmouseover="overButton(8)" onmouseout="awayButton(8)"><img src="buttons/zoomout0.gif" width="73" height="30" border="0"></a><br>
+<a href="javascript:parent.mainFrame.zoomFullpage()" onmouseover="overButton(9)" onmouseout="awayButton(9)"><img src="buttons/fullpage0.gif" width="73" height="30" border="0"></a><br><br>
+<a href="javascript:hideMenu(); showMenu(2)" onmouseover="overButton(10)" onmouseout="awayButton(10)"><img src="buttons/scale0.gif" width="73" height="30" border="0"></a><br><br>
+<a href="javascript:hideMenu(); showMenu(3)" onmouseover="overButton(11)" onmouseout="awayButton(11)"><img src="buttons/questionmark0.gif" width="73" height="30" border="0"></a><br><br>
+
+<div id="menu1" class="menu" style="top:201; left:31; width:54; height:33; clip:rect(0,54,33,0)"></div>
+ <div id="menu11" class="item1" style="top:203"><center><a href="#" class="text" onClick="hideMenu(); showRef(0); return false;" onmouseover="overItem(11)" onmouseout="awayItem(11)">LaTeX</a></center></div>
+ <div id="menu12" class="item1" style="top:218"><center><a href="#" class="text" onClick="hideMenu(); showRef(1); return false;" onmouseover="overItem(12)" onmouseout="awayItem(12)">HTML</a></center></div>
+
+<div id="menu2" class="menu" style="top:379; left:41; width:44; height:93; clip:rect(0,44,93,0)"></div>
+ <div id="menu21" class="item2" style="top:381"><center><a href="#" class="text" onClick="hideMenu(); setSize(0.7); return false;" onmouseover="overItem(21)" onmouseout="awayItem(21)">0.7</a></center></div>
+ <div id="menu22" class="item2" style="top:396"><center><a href="#" class="text" onClick="hideMenu(); setSize(1.0); return false;" onmouseover="overItem(22)" onmouseout="awayItem(22)">1.0</a></center></div>
+ <div id="menu23" class="item2" style="top:411"><center><a href="#" class="text" onClick="hideMenu(); setSize(1.5); return false;" onmouseover="overItem(23)" onmouseout="awayItem(23)">1.5</a></center></div>
+ <div id="menu24" class="item2" style="top:426"><center><a href="#" class="text" onClick="hideMenu(); setSize(2.0); return false;" onmouseover="overItem(24)" onmouseout="awayItem(24)">2.0</a></center></div>
+ <div id="menu25" class="item2" style="top:441"><center><a href="#" class="text" onClick="hideMenu(); setSize(2.5); return false;" onmouseover="overItem(25)" onmouseout="awayItem(25)">2.5</a></center></div>
+ <div id="menu26" class="item2" style="top:456"><center><a href="#" class="text" onClick="hideMenu(); setSize(3.0); return false;" onmouseover="overItem(26)" onmouseout="awayItem(26)">3.0</a></center></div>
+
+<div id="menu3" class="menu" style="top:430; left:1; width:84; height:33; clip:rect(0,84,33,0)"></div>
+ <div id="menu31" class="item3" style="top:432"><center><a href="#" class="text" onclick="changeMark(31); hideMenu(); changeHelp(); return false;" onmouseover="overItem(31)" onmouseout="awayItem(31)"><img id="mark31" src="buttons/nomark.gif" border="0">Contexthelp</a></center></div>
+ <div id="menu32" class="item3" style="top:447"><center><a href="#" class="text" onclick="changeMark(32); keepArea = (keepArea) ? false : true; return false;" onmouseover="overItem(32)" onmouseout="awayItem(32)"><img id="mark32" src="buttons/nomark.gif" border="0">Keep&nbsp;area</a></center></div>
+<!-- <div id="logo" class="logo">
+ 	<a href="http://digilib.berlios.de" target="_blank" >
+ 		<img border="0" src="../img/digilib-logo-text1.png" title="digilib"></img>
+	</a>
+ </div> -->
+
+<script language="Javascript">
+// initial background color of the menues (has to be done like this, 
+// otherwise menues in ns4 you will have wrong dimensions)
+changeBc("menu1", "#666666");
+changeBc("menu2", "#666666");
+changeBc("menu3", "#666666");
+</script>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/oldskin/pageWin.html	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,24 @@
+<html>
+<head>
+<script type="text/javascript">
+var pn = "-";
+var pt = "-";
+if ((parent.mainFrame.getParameter)&&(parent.mainFrame.getParameter("pn"))) {
+    pt = parent.mainFrame.getParameter("pt");
+    pn = parent.mainFrame.getParameter("pn");
+} else {
+    // if the mainFrame is not ready then wait
+    setTimeout("show()", 500);
+}
+
+function show() {
+  location.reload();
+}
+</script>
+</head>
+<body bgcolor="#CCCCCC" topmargin="5" marginheight="5">
+<p style="font-family: Verdana, Arial, Helvetica, sans-serif; text-align: center; color: #CC3333; font-size: 11px">
+    <script type="text/javascript">document.write(pn+'<b> of </b>'+pt);</script>
+</p>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/relato/astro.xml	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<relato>
+
+  <frames>
+    <frameset cols="0,100%" border="0" frameborder="0" framespacing="0">
+      <frame name="navigation" src="http://pythia2.unibe.ch:8080/docuserver/digitallibrary/contexto/contexto.jsp?htmlURL=http://www.philoscience.unibe.ch/docuserver/echo/projekte/compago/navigation.html" />
+      <frame name="mainFrame" />
+      <noframes>
+        In order to use <i>relato</i> you need to have a frame capable browser.
+      </noframes>
+    </frameset>
+  </frames>
+  
+  <functions>
+    <function name="getParameter" quiet="true">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="listParameters" quiet="true">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="listParametersAsString" quiet="true">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="page">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="zoomPoint">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="zoomArea">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="mark">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="ref">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="zoomOut">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="zoomExtends">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="moveTo">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="scale">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="brightnessContrast">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="mirror">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="rotation">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="colors">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="pixelByPixel">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="originalSize">
+      <validInFrame name="mainFrame" />
+    </function>
+  </functions>
+
+  <buttons>
+    <button name="home" command="navigation.home()" />
+    <button name="e-publications" command="navigation.publications()" />
+  </buttons>
+
+  <protected>
+    <frame name="navigation" />
+  </protected>
+
+</relato>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/relato/blank.html	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,8 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+</head>
+
+<body bgcolor="#666666">
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/relato/compare.xml	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<relato>
+
+  <frames>
+    <frameset rows="0,33,*,15%" border="0" frameborder="0" framespacing="0">
+      <frame name="navigation" />
+      <frame name="title" />
+      <frameset cols="50%,50%" border="0" frameborder="0" framespacing="0">
+        <frame name="mainFrameLeft" />
+        <frame name="mainFrameRight" />
+      </frameset>
+      <frameset cols="16%,38%,46%" border="0" frameborder="0" framespacing="0">
+        <frame name="motiv" />
+        <frame name="kriterium" />
+        <frame name="krittext" />
+      </frameset>
+      <noframes>
+        In order to use <i>relato</i> you need to have a frame capable browser.
+      </noframes>
+    </frameset>
+  </frames>
+  
+  <functions>
+    <function name="getParameter" quiet="true">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="listParameters" quiet="true">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="listParametersAsString" quiet="true">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="page">
+    </function>
+    <function name="zoomPoint">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="zoomArea">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="mark">
+    </function>
+    <function name="ref">
+    </function>
+    <function name="zoomOut">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="zoomExtends">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="moveTo">
+    </function>
+    <function name="scale">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="brightnessContrast">
+    </function>
+    <function name="mirror">
+    </function>
+    <function name="rotation">
+    </function>
+    <function name="colors">
+    </function>
+    <function name="pixelByPixel">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="originalSize">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+  </functions>
+
+  <buttons>
+    <button name="home" command="navigation.home()" />
+    <button name="relation" command="navigation.relation()" />
+    <button name="description" command="navigation.description()" />
+    <!--
+    <button name="new window" command="navigation.newwindow()" />
+    -->
+  </buttons>
+
+  <protected>
+    <frame name="navigation" />
+    <frame name="title" />
+    <frame name="motiv" />
+    <frame name="kriterium" />
+    <frame name="krittext" />
+  </protected>
+
+  <default>
+  </default>
+
+</relato>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/relato/digicat-digilib.xml	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<relato>
+
+  <frames>
+    <frameset cols="0,256,*" border="1" frameborder="1" framespacing="0">
+      <frame name="navigation" src="http://pythia2.unibe.ch:8080/docuserver/digitallibrary/contexto/contexto.jsp?htmlURL=http://www.philoscience.unibe.ch/docuserver/echo/projekte/neugebauer/navigation.html" />
+      <frame name="digicat" />
+      <frame name="mainFrame" />
+      <noframes>
+        In order to use <i>relato</i> you need to have a frame capable browser.
+      </noframes>
+    </frameset>
+  </frames>
+  
+  <functions>
+    <function name="getParameter" quiet="true">
+      <validInFrame name="digicat" />
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="listParameters" quiet="true">
+      <validInFrame name="digicat" />
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="listParametersAsString" quiet="true">
+      <validInFrame name="digicat" />
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="page">
+      <validInFrame name="digicat" />
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="zoomPoint">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="zoomArea">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="mark">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="ref">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="zoomOut">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="zoomExtends">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="moveTo">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="scale">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="brightnessContrast">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="mirror">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="rotation">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="colors">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="pixelByPixel">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="originalSize">
+      <validInFrame name="mainFrame" />
+    </function>
+  </functions>
+
+  <protected>
+    <frame name="digicat" />
+  </protected>
+
+  <default>
+    <frame name="mainFrame" />
+  </default>
+
+</relato>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/relato/digilib-digilib.xml	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<relato>
+
+  <frames>
+    <frameset cols="50%,50%" border="1" frameborder="1" framespacing="0">
+      <frame name="mainFrameLeft" />
+      <frame name="mainFrameRight" />
+      <noframes>
+        In order to use <i>relato</i> you need to have a frame capable browser.
+      </noframes>
+    </frameset>
+  </frames>
+  
+  <functions>
+    <function name="getParameter" quiet="true">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="listParameters" quiet="true">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="listParametersAsString" quiet="true">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="page">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="zoomPoint">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="zoomArea">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="mark">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="ref">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="zoomOut">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="zoomExtends">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="moveTo">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="scale">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="brightnessContrast">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="mirror">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="rotation">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="colors">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="pixelByPixel">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+    <function name="originalSize">
+      <validInFrame name="mainFrameLeft" />
+      <validInFrame name="mainFrameRight" />
+    </function>
+  </functions>
+
+  <protected>
+  </protected>
+
+  <default>
+    <frame name="mainFrameRight" />
+  </default>
+
+</relato>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/relato/neugebauer.xml	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<relato>
+
+  <frames>
+    <frameset cols="0,100%" border="0" frameborder="0" framespacing="0">
+      <frame name="navigation" src="http://pythia2.unibe.ch:8080/docuserver/digitallibrary/contexto/contexto.jsp?htmlURL=http://www.philoscience.unibe.ch/docuserver/echo/projekte/neugebauer/navigation.html" />
+      <frame name="mainFrame" />
+      <noframes>
+        In order to use <i>relato</i> you need to have a frame capable browser.
+      </noframes>
+    </frameset>
+  </frames>
+  
+  <functions>
+    <function name="getParameter" quiet="true">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="listParameters" quiet="true">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="listParametersAsString" quiet="true">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="page">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="zoomPoint">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="zoomArea">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="mark">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="ref">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="zoomOut">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="zoomExtends">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="moveTo">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="scale">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="brightnessContrast">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="mirror">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="rotation">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="colors">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="pixelByPixel">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="originalSize">
+      <validInFrame name="mainFrame" />
+    </function>
+  </functions>
+
+  <buttons>
+    <button name="home" command="navigation.home()" />
+    <button name="database" command="navigation.database()" />
+  </buttons>
+
+  <protected>
+    <frame name="navigation" />
+  </protected>
+
+  <default>
+    <frame name="mainFrame" />
+  </default>
+
+</relato>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/relato/picture.xml	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<relato>
+
+  <frames>
+    <frameset cols="0,50%,50%" border="0" frameborder="0" framespacing="0">
+      <frame name="navigation" />
+      <frameset rows="25,*" border="0" frameborder="0" framespacing="0">
+        <frame name="picturelabel" />
+        <frame name="mainFrame" />
+      </frameset>
+      <frameset rows="15%,85%" border="0" frameborder="0" framespacing="0">
+        <frame name="title" />
+        <frame name="text" />
+      </frameset>
+      <noframes>
+        In order to use <i>relato</i> you need to have a frame capable browser.
+      </noframes>
+    </frameset>
+  </frames>
+  
+  <functions>
+    <function name="getParameter" quiet="true">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="listParameters" quiet="true">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="listParametersAsString" quiet="true">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="page">
+    </function>
+    <function name="zoomPoint">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="zoomArea">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="mark">
+    </function>
+    <function name="ref">
+    </function>
+    <function name="zoomOut">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="zoomExtends">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="moveTo">
+    </function>
+    <function name="scale">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="brightnessContrast">
+    </function>
+    <function name="mirror">
+    </function>
+    <function name="rotation">
+    </function>
+    <function name="colors">
+    </function>
+    <function name="pixelByPixel">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="originalSize">
+      <validInFrame name="mainFrame" />
+    </function>
+  </functions>
+
+  <buttons>
+    <button name="home" command="navigation.home()" />
+    <button name="work" command="navigation.work()" />
+    <button name="type" command="navigation.type()" />
+    <button name="relation" command="navigation.relation()" />
+    <!--<button name="new window" command="navigation.newwindow()" />-->
+  </buttons>
+
+  <protected>
+    <frame name="navigation" />
+    <frame name="picturelabel" />
+    <frame name="title" />
+    <frame name="text" />
+  </protected>
+
+  <default>
+    <frame name="mainFrame" />
+  </default>
+
+</relato>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/relato/relato.js	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,193 @@
+top.name = 'f';
+
+if ( !top.focused )
+  top.focused = new Object();
+
+
+function identify() {
+  return 'Relato v0.1';
+}
+
+
+function frameSelected() {
+  return top.focused != '';
+}
+
+
+function frameSelectable(name) {
+  // created by xls
+  var frames = protectedFrames();
+  var selectable = true;
+  for (var i=0; i<frames.length; i++) {
+    if (frames[i] == name) {
+      selectable = false;
+    }
+  }
+  return selectable;
+}
+
+
+function noFrameSelected() {
+  alert( "No frame activated at the moment - click on the desired frame to activate it!" );
+}
+
+
+function nameOfSelectedFrame() {
+  return top.focused.name;
+}
+
+
+function selectedFrameObject() {
+  return top.focused;
+}
+
+
+function init() {
+  // do the initialisation just if it is top-level relato
+  if ( top == window ) {
+    init_rec( top, top.name );
+  }
+  return true;
+}
+
+
+function init_rec( current, name ) {
+  
+  if (current.frames.length > 0) {
+    for ( i=0; i < current.frames.length; i++ ) {
+      if (!current.frames[i].name) {
+        current.frames[i].name = name + i;
+      }
+      if (frameSelectable(current.frames[i].name)) {
+        current.frames[i].addEventListener( 'click', focusListener, true );
+        if (current.frames[i].name == nameOfSelectedFrame()) {
+          top.focused = current.frames[i];
+        }
+      } else {
+        if (current.frames[i] == selectedFrameObject()) {
+          top.focused = '';
+        }
+      } 
+      current.frames[i].addEventListener( 'unload', unloadListener, true );
+      init_rec( current.frames[i], current.frames[i].name );
+    }
+  }    
+}
+
+
+function listFrames() {
+
+  var frames = new Array();
+
+  function listFrames_rec( current )  {
+
+    if (current.frames.length > 0) {
+      for (var i=0; i < current.frames.length; i++) {
+        listFrames_rec(current.frames[i]);
+      }
+    } else {
+      frames.push(current);
+    }
+  }
+
+  listFrames_rec(top);
+
+  return frames;
+
+}
+
+
+function getXML() {
+  query_string = location.search;
+  query_string.search(/xml=([^\&]*)\&/);
+  return RegExp.$1;
+} 
+
+
+function blink() {
+  orig_color = top.focused.document.bgColor;
+  top.focused.document.bgColor="black";
+  setTimeout('top.focused.document.bgColor="' + orig_color + '"', 100);
+}
+
+
+function focusListener( event ) {
+
+  var active = this;
+  
+  if ( event.ctrlKey ) {
+    active = this.parent;
+  }
+
+  // can be used in future to mark several frames 
+  // markActiveFrame_rec( top, active );
+
+  top.focused = active;
+
+  blink();
+
+  // just debug information
+  window.status = top.focused.name;
+}
+
+
+function unloadListener( event ) {
+  setTimeout('init()', 250);
+}
+
+
+function markActiveFrame_rec(current, active) {
+  
+  if ( current.frames.length > 0 ) {
+    for ( i=0; i < current.frames.length; i++ ) {
+      markActiveFrame_rec( current.frames[i], active );
+    }
+  } else {
+    if ( current.name.indexOf(active.name) == 0 ) {
+      current.document.bgColor = '#444444';
+    } else {
+      current.document.bgColor = '#666666';
+    }
+  }
+}
+
+
+function loadFocusedFrame(url) {
+
+  if (frameSelected()) {
+    top.focused.location.href = url;
+    setTimeout( 'top.init()', 1000 );
+  } else {
+    noFrameSelected();
+  }
+}
+
+
+function loadNamedFrame(url, framename) {
+
+  desired = loadNamedFrame_rec(top, framename);
+  if ( desired ) {
+    desired.location.href = url;
+    setTimeout( 'top.init()', 1000 );
+  } else {
+    alert( "Error - a frame with this name does not exist!" );
+  }
+}
+
+function loadNamedFrame_rec(current, framename) {
+
+  if ( current.frames.length > 0 ) {
+    for ( i=0; i < current.frames.length; i++ ) {
+      thisone = loadNamedFrame_rec(current.frames[i], framename);
+      if (thisone) {
+        return thisone;
+      }
+    }
+  } else {
+  	if (current.name == framename) {
+      return current;
+    } else {
+      return null;
+    }
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/relato/relato.xsl	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,81 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+  <xsl:output method="xml" indent="yes" encoding="iso-8859-1"
+    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+    doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" />
+
+  <!-- the start -->
+  <xsl:template match="relato">
+    <html xmlns="http://www.w3.org/1999/xhtml">
+      <head>
+        <script type="text/javascript" src="relato/relato.js">
+        // this comment has to be here, otherwise xerces translates this
+        // empty tag to a self-closing one, which is bad for HTML that
+        // needs a closing script-tag
+        </script>
+        <script type="text/javascript">
+          <xsl:apply-templates select="functions" />
+          <xsl:apply-templates select="buttons" />
+          <xsl:apply-templates select="protected" />
+          <xsl:apply-templates select="default" />
+        </script>
+      </head>
+      <xsl:apply-templates select="frames" />
+    </html>
+  </xsl:template>
+
+  <xsl:template match="frames">
+    <xsl:copy-of select="frameset" />
+  </xsl:template>
+
+  <xsl:template match="functions">
+    <xsl:for-each select="function">
+      function <xsl:value-of select="@name" />() {
+        if (frameSelected()) {
+          <xsl:for-each select="validInFrame">
+            if (nameOfSelectedFrame() == "<xsl:value-of select="@name" />") {
+              id = selectedFrameObject();
+              if (typeof(id.<xsl:value-of select="../@name" />) == 'function') {
+                return id.<xsl:value-of select="../@name" />(<xsl:value-of select="../@name" />.arguments[0], <xsl:value-of select="../@name" />.arguments[1], <xsl:value-of select="../@name" />.arguments[2], <xsl:value-of select="../@name" />.arguments[3]);
+              }
+            }
+          </xsl:for-each>
+        } else {
+          <xsl:choose>
+            <xsl:when test="not(@quiet = 'true')">
+              // alert message
+              noFrameSelected();
+            </xsl:when>
+            <xsl:otherwise>
+              // be quiet
+              return false;
+            </xsl:otherwise>
+          </xsl:choose>
+        }
+      }
+    </xsl:for-each>
+  </xsl:template>
+
+  <xsl:template match="buttons">
+    function dynamicButtons() {
+      var btns = '';
+      <xsl:for-each select="button">
+      btns += '#<xsl:value-of select="@name" />|<xsl:value-of select="@command" />';</xsl:for-each>
+      return btns.slice(1);
+    }
+  </xsl:template>
+
+  <xsl:template match="protected">
+    function protectedFrames() {
+      var frames = new Array ();
+      <xsl:for-each select="frame">
+      frames.push('<xsl:value-of select="@name" />');</xsl:for-each>
+      return frames;
+    }
+  </xsl:template>
+
+  <xsl:template match="default">
+    top.focused.name = '<xsl:value-of select="frame/@name" />';
+  </xsl:template>
+
+</xsl:stylesheet>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/relato/type.xml	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<relato>
+
+  <frames>
+    <frameset cols="0,50%,50%" border="0" frameborder="0" framespacing="0">
+     <frame name="navigation" />
+      <frameset rows="70%,30%" border="0" frameborder="0" framespacing="0">
+        <frame name="mainFrame" />
+        <frame name="links" />
+      </frameset>
+      <frame name="text" />
+      <noframes>
+        In order to use <i>relato</i> you need to have a frame capable browser.
+      </noframes>
+    </frameset>
+  </frames>
+  
+  <functions>
+    <function name="getParameter" quiet="true">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="listParameters" quiet="true">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="listParametersAsString" quiet="true">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="page">
+    </function>
+    <function name="zoomPoint">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="zoomArea">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="mark">
+    </function>
+    <function name="ref">
+    </function>
+    <function name="zoomOut">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="zoomExtends">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="moveTo">
+    </function>
+    <function name="scale">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="brightnessContrast">
+    </function>
+    <function name="mirror">
+    </function>
+    <function name="rotation">
+    </function>
+    <function name="colors">
+    </function>
+    <function name="pixelByPixel">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="originalSize">
+      <validInFrame name="mainFrame" />
+    </function>
+  </functions>
+
+  <buttons>
+    <button name="home" command="navigation.home()" />
+    <button name="relation" command="navigation.relation()" />
+  </buttons>
+
+  <protected>
+    <frame name="navigation" />
+    <frame name="links" />
+    <frame name="text" />
+  </protected>
+
+  <default>
+    <frame name="mainFrame" />
+  </default>
+
+</relato>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/relato/work.xml	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<relato>
+
+  <frames>
+    <frameset cols="0,50%,50%" border="0" frameborder="0" framespacing="0">
+      <frame name="navigation" />
+      <frameset rows="70%,30%" border="0" frameborder="0" framespacing="0">
+        <frame name="mainFrame" />
+        <frame name="links" />
+      </frameset>
+      <frameset rows="15%,85%" border="0" frameborder="0" framespacing="0">
+        <frame name="title" />
+        <frame name="text" />
+      </frameset>
+      <noframes>
+        In order to use <i>relato</i> you need to have a frame capable browser.
+      </noframes>
+    </frameset>
+  </frames>
+  
+  <functions>
+    <function name="getParameter" quiet="true">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="listParameters" quiet="true">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="listParametersAsString" quiet="true">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="page">
+    </function>
+    <function name="zoomPoint">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="zoomArea">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="mark">
+    </function>
+    <function name="ref">
+    </function>
+    <function name="zoomOut">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="zoomExtends">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="moveTo">
+    </function>
+    <function name="scale">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="brightnessContrast">
+    </function>
+    <function name="mirror">
+    </function>
+    <function name="rotation">
+    </function>
+    <function name="colors">
+    </function>
+    <function name="pixelByPixel">
+      <validInFrame name="mainFrame" />
+    </function>
+    <function name="originalSize">
+      <validInFrame name="mainFrame" />
+    </function>
+  </functions>
+
+  <buttons>
+    <button name="home" command="navigation.home()" />
+    <!--
+    <button name="description" command="navigation.description()" />
+    -->
+    <!--
+    <button name="new window" command="navigation.newwindow()" />
+    -->
+  </buttons>
+
+  <protected>
+    <frame name="navigation" />
+    <frame name="links" />
+    <frame name="title" />
+    <frame name="text" />
+  </protected>
+
+  <default>
+    <frame name="mainFrame" />
+  </default>
+
+</relato>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/server/dlCache.jsp	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,73 @@
+<%@ page language="java" %>
+
+<%!
+// authentication stuff - robert
+// -----------------------------
+// create DocumentBean instance for all JSP requests
+digilib.servlet.DocumentBean docBean = new digilib.servlet.DocumentBean();
+
+// initialize DocumentBean instance in JSP init
+public void jspInit() {
+    try {
+        // set servlet init-parameter
+        docBean.setConfig(getServletConfig());
+    } catch (javax.servlet.ServletException e) {
+        System.out.println(e);
+    }
+}
+%>
+
+<%
+// get digilib config
+digilib.servlet.DigilibConfiguration dlConfig = docBean.getDlConfig();
+// dir cache
+digilib.io.DocuDirCache dirCache = (digilib.io.DocuDirCache) dlConfig.getValue("servlet.dir.cache");
+%>
+
+<html>
+<head>
+<title>Digilib cache info</title>
+</head>
+
+<h1>Digilib cache info</h1>
+
+
+ <table>
+  <tr>
+	<td>size (directories)</td><td><b><%= dirCache.size() %></b></td>
+    <td></td>
+  </tr>
+  <tr>
+	<td>numFiles</td><td><b><%= dirCache.getNumFiles() %></b></td>
+    <td></td>
+  </tr>
+  <tr>
+	<td>hits</td><td><b><%= dirCache.getHits() %></b></td>
+    <td></td>
+  </tr>
+  <tr>
+	<td>misses</td><td><b><%= dirCache.getMisses() %></b></td>
+    <td></td>
+  </tr>
+</table>
+
+<table>
+<%
+    Object[] keys = dirCache.getChildren("", true).toArray();
+    java.util.Arrays.sort(keys);
+    int l = keys.length;
+    for (int i = 0; i < l; i++) {
+	String key = (String) keys[i];
+	//	digilib.io.DocuDirectory val = (digilib.io.DocuDirectory) dirCache.getDirectory(key);
+%>
+  <tr>
+       <td valign="top"><%= key %></td><td><b><%= 1 /* val.getDirName() */ %></b></td>
+    <td></td>
+  </tr>
+<%
+       }
+%>
+</table>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/server/dlConfig.jsp	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,152 @@
+<%@ page language="java" %>
+
+<%!
+// authentication stuff - robert
+// -----------------------------
+// create DocumentBean instance for all JSP requests
+digilib.servlet.DocumentBean docBean = new digilib.servlet.DocumentBean();
+
+// initialize DocumentBean instance in JSP init
+public void jspInit() {
+    try {
+        // set servlet init-parameter
+        docBean.setConfig(getServletConfig());
+    } catch (javax.servlet.ServletException e) {
+        System.out.println(e);
+    }
+}
+%>
+
+<%
+// get digilib config
+digilib.servlet.DigilibConfiguration dlConfig = docBean.getDlConfig();
+// parsing the query
+digilib.servlet.DigilibRequest dlRequest = new digilib.servlet.DigilibRequest(request);
+// add number of pages
+dlRequest.setValue("pt", docBean.getNumPages(dlRequest));
+// dir cache
+digilib.io.DocuDirCache dirCache = (digilib.io.DocuDirCache) dlConfig.getValue("servlet.dir.cache");
+%>
+
+<html>
+<head>
+<title>Digilib configuration page</title>
+</head>
+<body>
+
+<h1>Global servlet configuration</h1>
+
+<table>
+<%
+    Object[] keys = dlConfig.keySet().toArray();
+    java.util.Arrays.sort(keys);
+    int l = keys.length;
+    for (int i = 0; i < l; i++) {
+	String key = (String) keys[i];
+	String val = dlConfig.getAsString(key);
+	if (key.equals("basedir-list")) {
+	    String[] bd = (String[]) dlConfig.getValue("basedir-list");
+	    val = "";
+	    if (bd != null) {
+		for (int j = 0; j < bd.length; j++) {
+		    val += bd[j] + "<br> ";
+		}
+	    }
+	}
+	if (val.length() == 0) {
+	    val = "(none)";
+	}
+%>
+  <tr>
+    <td valign="top"><%= key %></td><td><b><%= val %></b></td>
+    <td></td>
+  </tr>
+<%
+       }
+%>
+</table>
+
+<h2>Threads</h2>
+
+<table>
+  <tr>
+    <td>currently waiting</td><td><b><%= digilib.servlet.DigilibWorker.getNumWaiting() %></b></td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>currently running</td><td><b><%= digilib.servlet.DigilibWorker.getNumRunning() %></b></td>
+    <td></td>
+  </tr>
+</table>
+
+<h2>Directory cache</h2>
+
+<table>
+  <tr>
+	<td>size (directories)</td><td><b><%= dirCache.size() %></b></td>
+    <td></td>
+  </tr>
+  <tr>
+	<td>numFiles</td><td><b><%= dirCache.getNumFiles() %></b></td>
+    <td></td>
+  </tr>
+  <tr>
+	<td>hits</td><td><b><%= dirCache.getHits() %></b></td>
+    <td></td>
+  </tr>
+  <tr>
+	<td>misses</td><td><b><%= dirCache.getMisses() %></b></td>
+    <td></td>
+  </tr>
+</table>
+
+<h2>JVM configuration</h2>
+
+<table>
+  <tr>
+	<td>java.awt.headless</td><td><b><%= System.getProperty("java.awt.headless") %></b></td>
+    <td></td>
+  </tr>
+  <tr>
+	<td>java.version</td><td><b><%= System.getProperty("java.version") %></b></td>
+    <td></td>
+  </tr>
+  <tr>
+	<td>java.vendor</td><td><b><%= System.getProperty("java.vendor") %></b></td>
+    <td></td>
+  </tr>
+  <tr>
+	<td>os.name</td><td><b><%= System.getProperty("os.name") %></b></td>
+    <td></td>
+  </tr>
+  <tr>
+	<td>Runtime.maxMemory</td><td><b><%= Runtime.getRuntime().maxMemory() %></b></td>
+    <td></td>
+  </tr>
+  <tr>
+	<td>Runtime.totalMemory</td><td><b><%= Runtime.getRuntime().totalMemory() %></b></td>
+    <td></td>
+  </tr>
+  <tr>
+	<td>Runtime.freeMemory</td><td><b><%= Runtime.getRuntime().freeMemory() %></b></td>
+    <td></td>
+  </tr>
+</table>
+
+<h2>DocuImage configuration</h2>
+
+<p>Supported image types</p>
+<ul>
+<% 
+  java.util.Iterator dlfs = dlConfig.getDocuImageInstance().getSupportedFormats();
+  for (Object f = dlfs.next(); dlfs.hasNext(); f = dlfs.next()) {
+%>
+  <li><%= (String)f %></li>
+<% 
+  }
+%>
+</ul>
+
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/server/dlRequest.jsp	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,117 @@
+<%@ page language="java" %>
+
+<%!
+// authentication stuff - robert
+// -----------------------------
+// create DocumentBean instance for all JSP requests
+digilib.servlet.DocumentBean docBean = new digilib.servlet.DocumentBean();
+
+// initialize DocumentBean instance in JSP init
+public void jspInit() {
+    try {
+        // set servlet init-parameter
+        docBean.setConfig(getServletConfig());
+    } catch (javax.servlet.ServletException e) {
+        System.out.println(e);
+    }
+}
+%>
+
+<%
+// get digilib config
+digilib.servlet.DigilibConfiguration dlConfig = docBean.getDlConfig();
+// parsing the query
+digilib.servlet.DigilibRequest dlRequest = new digilib.servlet.DigilibRequest(request);
+// add number of pages
+dlRequest.setValue("pt", docBean.getNumPages(dlRequest));
+// dir cache
+digilib.io.DocuDirCache dirCache = (digilib.io.DocuDirCache) dlConfig.getValue("servlet.dir.cache");
+%>
+
+<html>
+<head>
+<title>Digilib configuration page</title>
+</head>
+
+<body>
+<h1>Local request information</h1>
+
+<table>
+  <tr>
+    <td>Pt</td><td><b><%= dlRequest.getAsString("pt") %></b></td>
+    <td><i>total number of pages (generated by servlet)</i></td>
+  </tr>
+  <tr>
+    <td>RequestPath</td><td><b><%= dlRequest.getAsString("request.path") %></b></td>
+    <td><i>url of the page/document</i></td>
+  </tr>
+  <tr>
+    <td>Fn</td><td><b><b><%= dlRequest.getAsString("fn") %></b></td><td><i>url of the page/document</i></td>
+  </tr>
+  <tr>
+    <td>FilePath</td><td><b><%= dlRequest.getFilePath() %></b></td><td><i>effective path of the page/document</i></td>
+  </tr>
+  <tr>
+    <td>Pn</td><td><b><%= dlRequest.getAsString("pn") %></b></td><td><i>page number</i></td>
+  </tr>
+  <tr>
+    <td>Dw</td><td><b><%= dlRequest.getAsString("dw") %></b></td><td><i>width of client in pixels</i></td>
+  </tr>
+  <tr>
+    <td>Dh</td><td><b><%= dlRequest.getAsString("dh") %></b></td><td><i>height of client in pixels</i></td>
+  </tr>
+  <tr>
+    <td>Wx</td><td><b><%= dlRequest.getAsString("wx") %></b></td><td><i>left edge of image (float from 0 to 1)</i></td>
+  </tr>
+  <tr>
+    <td>Wy</td><td><b><%= dlRequest.getAsString("wy") %></b></td><td><i>top edge in image (float from 0 to 1)</i></td>
+  </tr>
+  <tr>
+    <td>Ww</td><td><b><%= dlRequest.getAsString("ww") %></b></td><td><i>width of image (float from 0 to 1)</i></td>
+  </tr>
+  <tr>
+    <td>Wh</td><td><b><%= dlRequest.getAsString("wh") %></b></td><td><i>height of image (float from 0 to 1)</i></td>
+  </tr>
+  <tr>
+    <td>Ws</td><td><b><%= dlRequest.getAsString("ws") %></b></td><td><i>scale factor</i></td>
+  </tr>
+  <tr>
+    <td>Mo</td><td><b><%= dlRequest.getAsString("mo") %></b></td><td><i>special options like 'fit' for gifs</i></td>
+  </tr>
+  <tr>
+    <td>Mk</td><td><b><%= dlRequest.getAsString("mk") %></b></td><td><i>marks</i></td>
+  </tr>
+  <tr>
+    <td>BaseURL</td><td colspan="2"><b><%= dlRequest.getAsString("base.url") %></b></td>
+  </tr>
+  <tr>
+    <td></td><td></td><td><i>base URL (from http:// to below /servlet)</i></td>
+  </tr>
+</table>
+
+<h2>All parameters<h2>
+
+<table>
+<%
+    Object[] keys = dlRequest.keySet().toArray();
+    java.util.Arrays.sort(keys);
+    int l = keys.length;
+    for (int i = 0; i < l; i++) {
+	String key = (String) keys[i];
+	String val = dlRequest.getAsString(key);
+	if (val.length() == 0) {
+	    val = "</b>(none)<b>";
+	}
+%>
+  <tr>
+    <td valign="top"><%= key %></td><td><b><%= val %></b></td>
+    <td><% if (! dlRequest.hasValue(key)) { %> (default) <% } %></td>
+  </tr>
+<%
+       }
+%>
+</table>
+
+
+</body>
+</html>
Binary file client/digitallibrary/xul/alcatraz.xpi has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/digitallibrary/xul/install.html	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,47 @@
+<html>
+<head>
+
+<title>Install Alcatraz for Firefox</title>
+
+<script type="application/x-javascript">
+
+function dynamicButtons() {
+  return "google|google()";
+}
+
+function google() {
+  top.location = "http://www.google.com";
+}
+
+function install() {
+	InstallTrigger.install ( {'alcatraz' : 'alcatraz.xpi'} );
+	InstallTrigger.install ( {'jslib' : 'http://downloads.mozdev.org/jslib/xpi/jslib_current.xpi'} );
+}
+
+</script>
+
+</head>
+<body>
+
+	<h3>Alcatraz XUL Package for Firefox</h3>
+<p>Contains a sidebar, a toolbar and the <a href="http://jslib.mozdev.org">jslib-package</a> from mozdev</p>
+<h4>Installation:</h4>
+<ul>
+  <li>press the &quot;install alcatraz&quot; button
+      <input type="button" name="install alcatraz" value="install alcatraz" onClick="install();">
+  </li>
+
+  <li>Restart Firefox and you will find the new toolbar installed. The sidebar can be enabled anytime under View -&gt; Sidebar or with the shortcut [Ctrl]-[a].</li>
+
+</ul>
+
+<hr>
+
+<address><a href="mailto:luginbuehl@student.unibe.ch">Christian Luginbuehl</a></address>
+<script type="text/javascript">
+<!--
+  document.write("Last modified: " + document.lastModified)
+-->
+</script>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/doc/digilib_install.html	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,365 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title>Installation of digilib</title>
+</head>
+
+<body>
+<h1>What you need to install digilib</h1>
+
+<ul>
+  <li>
+  <a href="http://java.sun.com/downloads/index.html" >Java JDK</a> &gt;1.2 (preferred 1.4 and up)
+  </li>
+  
+  <li>
+  <a href="http://jakarta.apache.org/tomcat/index.html" >Jakarta
+  Tomcat</a> version 4 or later (preferred 4.1 and up) from
+  <a href="http://jakarta.apache.org">http://jakarta.apache.org</a>
+  </li>
+  
+  <li>The digilib distribution package <a href="http://download.berlios.de/digilib/digilib-core.zip"><b>digilib-core.zip</b></a> (from
+  <a href="http://developer.berlios.de">http://developer.berlios.de</a>)
+  
+  </li>
+
+  <li>Some auxiliary Java libraries to be put in <code>digitallibrary/WEB-INF/lib</code> (can also be found in the <a href="http://download.berlios.de/digilib/digilib-ext.zip">digilib-ext.zip</a> package)
+  <ul>
+    <li>
+    <b>concurrent.jar</b> from Doug Lea's <a href="http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html">util.concurrent library</a> (see <a href="http://gee.cs.oswego.edu/dl/">http://gee.cs.oswego.edu/dl/</a>).
+    </li>
+
+    <li>
+    <b>log4j.jar</b> from the <a href="http://logging.apache.org/log4j/docs/download.html">Log4J library</a> (see <a href="http://logging.apache.org">http://logging.apache.org</a>)
+    </li>
+
+    <li>
+    <b>jai_imageio.jar</b> (and its native libraries) with JDK >= 1.4, from the <a href="http://java.sun.com/products/java-media/jai/current.html">Java Advanced Imaging Image-IO Tools</a> (see <a href="http://java.sun.com/products/java-media/jai/index.jsp">http://java.sun.com/products/java-media/jai/</a>)
+    </li>
+
+    <li>
+    <b>jai_core.jar, jai_codec.jar</b> if you want to use the JAIDocuImage implementation, from the <a href="http://java.sun.com/products/java-media/jai/current.html">Java Advanced Imaging API</a> (see <a href="http://java.sun.com/products/java-media/jai/index.jsp">http://java.sun.com/products/java-media/jai/</a>)
+    </li>
+
+    <li>
+    <b>batik-*.jar</b> if you want to use the Raster servlet, from the <a href="http://www.apache.org/dyn/closer.cgi/xml/batik">Apache Batik library</a> (see <a href="http://xml.apache.org/batik/">http://xml.apache.org/batik/</a>)
+    </li>
+
+    <li>
+    <b>jena.jar</b> from the <a href="http://www.hpl.hp.com/semweb/jena1.htm">JENA RDF library version 1.6.1</a> (see <a href="http://jena.sourceforge.net/">http://jena.sourceforge.net/</a>)
+    </li>
+  </ul>
+</ul>
+
+<h1>Installation</h1>
+
+<h2>On Linux/Unix</h2>
+
+<ol>
+  <li>Make shure the Java JDK is installed (a JRE won't do).</li>
+
+  <li>Create a base directory for digilib (the default used here is
+  <code>/docuserver</code>) and for the web interface
+  (<code>/docuserver/www</code>).</li>
+
+  <li>Unpack the <b>digilib-core.zip</b> package in the web
+  interface directory (<code>/docuserver/www</code>). This will create
+  the digilib directory <code>digitallibrary</code>.</li>
+
+  <li>Install the auxiliary Java libraries in
+  <code>digitallibrary/WEB-INF/lib</code>. (Or just unpack the
+  <b>digilib-ext.zip</b> package there.)</li>
+
+  <li>Unpack Jakarta Tomcat 5.0.29 in <code>/docuserver</code> This should
+  produce a directory <code>/docuserver/jakarta-tomcat-5.0.29</code>. Create a
+  link <code>/docuserver/tomcat</code> to the new directory.</li>
+
+  <li>Create a link from the digilib directory into the Tomcat webapps
+  directory <code>/docuserver/tomcat/webapps</code> (type <code>ln -s
+  /docuserver/www/digitallibrary /docuserver/tomcat/webapps/</code>) This installs
+  digilib in the default Tomcat instance running on port 8080 as
+  <code>http://myserver:8080/digitallibrary/</code>.</li>
+
+  <li>Adjust the path to the JDK and its options in
+  <code>catalina.sh</code> (in the directory
+  <code>/docuserver/tomcat/bin</code>, see below for details)</li>
+</ol>
+
+
+<h2>On Windows (quick install)</h2>
+
+<ol>
+<li>Set the following Environment Variables:<br />
+  <code>CATALINA_HOME = C:\jakarta-tomcat-4.1.24</code> (or similar)<br />
+  <code>JAVA_HOME = C:\j2sdk</code> (or similar)
+</li>
+
+<li>
+Start Tomcat server: Open a console window (start <code>cmd.exe</code>).<br />
+Type: <code>%CATALINA_HOME%\bin\startup</code>
+</li>
+
+<li>
+Try the following URL in your browser: 
+<code>http://localhost:8080</code> or 
+<code>http://127.0.0.1:8080</code> 
+</li>
+
+<li>
+You should now be able to see the Tomcat opening screen: <em>If you're seeing this page via a web browser, it means you've setup Tomcat successfully. Congratulations!</em>
+</li>
+
+<li>
+Shut it down again: In the console window type <code>%CATALINA_HOME%\bin\shutdown</code>.
+</li>
+
+<li>
+Extract the <b>diglib-core.zip</b> package, possibly to <code>C:\docuserver</code>.
+</li>
+
+<li>
+Install the auxiliary Java libraries in <code>digitallibrary\WEB-INF\lib</code>.
+(Or just unpack the <b>digilib-ext.zip</b> package there.)
+</li>
+
+<li>
+ Modify the following configuration files according to your paths (as in the &quot;On Linux&quot; section):
+<br>
+For tomcat
+<ul>
+  <li><code>C:\jakarta-tomcat-4.1.24\conf\server.xml</code></li>
+  <li><code>C:\jakarta-tomcat-4.1.24\conf\tomcat-users.xml</code></li>
+</ul>
+For digilib
+<ul>
+  <li><code>C:\docuserver\digitallibrary\WEB-INF\digilib-config.xml</code></li>
+  <li><code>C:\docuserver\digitallibrary\WEB-INF\digilib-auth.xml</code></li>
+</ul>
+In the <code>alcatraz-win-conf.zip</code> package you can find
+prepared configuration files with the following default values:
+<ul>
+  <li>The image file directory is <code>C:\bilder</code>. </li>
+  <li>The username for viewing image files is <code>digilib</code>.</li>
+  <li>The password for viewing image files is <code>digilib</code>.</li>
+  <li>The digilib server runs on Port <code>9090</code>.</li>
+</ul>
+</li>
+
+<li>
+Now you can restart the Tomcat server: <code>http://localhost:9090</code> or 
+<code>http://127.0.0.1:9090</code>.
+</li>
+
+<li>
+Watch the images:
+<a href="http://localhost:9090/docuserver/digitallibrary/digilib.jsp">http://localhost:9090/docuserver/digitallibrary/digilib.jsp</a>
+</li>
+</ol>
+
+
+<h1>Configuration</h1>
+
+<h2>Tomcat</h2>
+
+<h3>catalina.sh / catalina.bat</h3>
+
+<p>The file <code>catalina.sh</code> (in <code>/docuserver/tomcat/bin</code>
+can be modified to provide the path to the JDK and runtime options
+for the Java VM. Somewhere at the beginning of the file you can put two lines
+like this:</p>
+
+<pre>
+export JAVA_HOME=/usr/local/lib/IBMJava2-14
+export CATALINA_OPTS="-mx512m"
+</pre>
+
+<p>or, on Windows<p>
+
+<pre>
+set CATALINA_HOME=C:\jakarta-tomcat-4.1.24
+set JAVA_HOME=C:\j2sdk
+</pre>
+
+<p>Adjust the <code>JAVA_HOME</code> path to point to your Java JDK
+installation directory. You can adjust the memory used by the Java VM
+with the <code>-mx</code> option.</p>
+
+
+<h3>tomcat-users.xml</h3>
+
+<p>All passwords and usernames have to be set up in the file
+<code>tomcat-users.xml</code> in <code>/docuserver/tomcat/conf</code> if you
+want to use authentication in digilib. The file looks like this:</p>
+
+<pre>
+&lt;tomcat-users&gt;
+  &lt;user name="tomcat" password="tomcat" roles="tomcat" /&gt;
+  &lt;user name="role1"  password="tomcat" roles="role1"  /&gt;
+  &lt;user name="both"   password="tomcat" roles="tomcat,role1" /&gt;
+&lt;/tomcat-users&gt;
+</pre>
+
+<p>A user is identified by a <code>name</code> and
+<code>password</code>. These two elements have to be entered in a
+authentication form presented by the browser when accessing a
+restricted resource. A user can have one or more
+<code>roles</code>. These roles will be used by digilib to decide if
+an authenticated user is allowed to access a document (see
+<code>digilib-auth.xml</code> below).</p>
+
+<p>If you want to use the webinterface to configure Tomcat, you have to
+add administrational account with the roles <code>admin</code> and
+<code>manager</code>.</p>
+
+<p>tomcat has to be restarted before changes to
+<code>tomcat-users.xml</code> have effect!</p>
+
+
+<h2>Digilib</h2>
+
+<h3>digilib-config.xml</h3>
+
+<p>The main configuration for digilib is
+<code>digilib-config.xml</code>. It's normally in the
+<code>WEB-INF</code> directory in the webapp. (If you really need
+another location you can define it in the <code>config-file</code>
+init-parameter to the servlet)</p>
+
+<p>In the configuration file you can set several paths and
+options. The file looks like this:</p>
+
+<pre>
+&lt;!-- Digilib servlet config file --&gt;
+
+&lt;digilib-config&gt;
+  &lt;!--  Image to be sent to indicate general failure. --&gt;
+  &lt;parameter name=&quot;error-image&quot; value=<b>&quot;/docuserver/images/icons/broken.gif&quot;</b> /&gt;
+
+  &lt;!--  Image to be sent to indicate authorization failure. --&gt;
+  &lt;parameter name=&quot;denied-image&quot; value=<b>&quot;/docuserver/images/icons/alert.red.gif&quot;</b> /&gt;
+
+  &lt;!-- List of directories where images are searched.
+       The authoritative directory with the high-resolution images
+       is first in list. --&gt;
+  &lt;parameter name=&quot;basedir-list&quot; value=<b>&quot;/docuserver/images:/docuserver/scaled/small&quot;</b> /&gt;
+
+  &lt;!-- Java class to use for image operations --&gt;
+  &lt;parameter name=&quot;docuimage-class&quot; value=&quot;digilib.image.JAIDocuImage&quot; /&gt;
+
+  &lt;!-- mimimum amount of scaling done with antialiasing --&gt;
+  &lt;parameter name=&quot;subsample-minimum&quot; value=&quot;2&quot;/&gt;
+  
+  &lt;!-- default interpolation quality (0=worst) --&gt;
+  &lt;parameter name=&quot;default-quality&quot; value=&quot;1&quot;/&gt;
+  
+  &lt;!-- is sending whole image files with mo=file allowed? --&gt;
+  &lt;parameter name=&quot;sendfile-allowed&quot; value=&quot;true&quot; /&gt;
+
+  &lt;!-- the a maximum size of any sent image. (0 means no limit) --&gt;
+  &lt;parameter name=&quot;max-image-size&quot; value=&quot;0&quot; /&gt;
+
+  &lt;!-- use safe but slow directory indexing --&gt;
+  &lt;parameter name=&quot;safe-dir-index&quot; value=&quot;false&quot; /&gt;
+
+  &lt;!-- number of working threads --&gt;
+  &lt;parameter name=&quot;worker-threads&quot; value=&quot;2&quot; /&gt;
+
+  &lt;!-- Restrict access to authorized users.
+       User authentication and roles are provided by the servlet container 
+       (see tomcat-users.xml).
+       Authorization for resources (directories) is evaluated by the servlet 
+       (see auth-file). --&gt;
+  &lt;parameter name=&quot;use-authorization&quot; value=&quot;true&quot;/&gt;
+
+  &lt;!-- Location of XML file with authorization requirements. --&gt;
+  &lt;parameter name=&quot;auth-file&quot; value=&quot;digilib-auth.xml&quot;/&gt;
+
+  &lt;!-- Part of URL to indicate authenticated access to Tomcat. --&gt;
+  &lt;parameter name=&quot;auth-url-path&quot; value=&quot;authenticated/&quot;/&gt;
+
+  &lt;!-- use mapping of &quot;virtual directories&quot; to real directories on the server --
+&gt;
+  &lt;parameter name=&quot;use-mapping&quot; value=&quot;false&quot;/&gt;
+  
+  &lt;!-- location of XML mapping file --&gt;
+  &lt;parameter name=&quot;mapping-file&quot; value=&quot;digilib-map.xml&quot;/&gt;
+  
+  &lt;!-- location of logger config file --&gt;
+  &lt;parameter name=&quot;log-config-file&quot; value=&quot;log4j-config.xml&quot;/&gt;
+&lt;/digilib-config&gt;
+</pre>
+
+<p>You have to adjust the <code>basedir-list</code> parameter to the
+directories where your images are installed. You need only one
+directory if you don't provide prescaled low resolution versions of your
+images. The directory with the high-resolution images must be the
+first entry in the list.</p>
+
+<p>You can supply your own icons for the &quot;error&quot; and
+&quot;access denied&quot; messages by the servlet. Standard images
+will be used if these parameters are undefined.</p>
+
+<p>You can specify the Java toolkit implementation with the
+<code>docuimage-class</code> parameter. The
+<code>ImageLoaderDocuImage</code> might give best performance but
+works only with JDK 1.4 and up. <code>JAIDocuImage</code> works with
+JDK 1.3 and up.</p>
+
+
+<h3>digilib-auth.xml</h3>
+
+<p>The digilib access authorization is defined in the file defined by
+the <code>auth-file</code> parameter (usually
+<code>digilib-auth.xml</code> in <code>WEB-INF</code>). </p>
+
+<p>The file has two parts <code>diglib-paths</code> and
+<code>diglib-addresses</code>. It looks like this:</p>
+
+<pre>
+&lt;auth-config&gt;
+
+  &lt;digilib-paths&gt;
+    &lt;!-- 
+      A user must supply one of the roles under &quot;role&quot;
+      to access the directory &quot;name&quot;.
+      Roles under &quot;role&quot; must be separated by comma only (no spaces).  
+    --&gt;
+    &lt;path name=&quot;histast/eastwood-collection&quot; role=&quot;eastwood-coll&quot; /&gt;
+    &lt;path name=&quot;ptolemaios_geo&quot; role=&quot;ptolemaios-geo&quot; /&gt;
+  &lt;/digilib-paths&gt;
+
+  &lt;digilib-addresses&gt;
+    &lt;!-- 
+      A computer with an ip address that matches &quot;ip&quot;
+      is automatically granted all roles under &quot;role&quot;.
+      The ip address is matched from the left (in full quads).
+      Roles under &quot;role&quot; must be separated by comma only (no spaces). 
+    --&gt;
+    &lt;address ip=&quot;127&quot; role=&quot;local&quot; /&gt;
+    &lt;address ip=&quot;130.92.68&quot; role=&quot;eastwood-coll,ptolemaios-geo&quot; /&gt;
+    &lt;address ip=&quot;130.92.151&quot; role=&quot;ALL&quot; /&gt;
+  &lt;/digilib-addresses&gt;
+
+&lt;/auth-config&gt;
+</pre>
+
+<p><code>diglib-paths</code> defines restricted directories and
+the roles needed for access. The roles are defined with the users in
+<code>tomcat-users.xml</code> (see above). All subdirectories of the
+given directories have the same restrictions. All directories not
+listed here (and not subdirectories of listed directories) are freely
+accessible.</p>
+
+<p><code>diglib-addresses</code> defines hosts or networks of
+computers that are automatically authenticated without username and
+password. Hosts can be assigned roles. The special keyword <code>ALL</code>
+authorizes for everything. If the role assigned to the computer is not
+sufficient to access a resource the user will be asked for username
+and password.</p>
+
+
+
+<hr>
+<address>robcast@mail.berlios.de</address>
+<!-- hhmts start -->Last modified: Tue Nov  2 13:14:57 CET 2004 <!-- hhmts end -->
+</body> </html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/doc/digilib_interop.html	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,63 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+  <title>digilib toolbar interoperability</title>
+</head>
+<body>
+<h1>Interoperability of digilib HTML pages with the Alcatraz toolbar</h1>
+
+<p>A toolbar-friendly digilib page must define a Javascript variable
+<b><code>toolbarEnabledURL</code></b> whose value is a HTTP URL that
+produces a <em>toolbar-enabled</em> page. The toolbar should present a
+button to &quot;take over&quot; the page design by replacing
+the current page with the page from the given URL.</p>
+
+<h2>Toolbar-enabled page</h2>
+
+<p>A <em>toolbar-enabled</em> page must offer the following Javascript functions:</p>
+
+<h3>Identification</h3>
+
+<ul>
+  <li><b><code>dlScriptVersion</code></b>: a String variable that contains the version number of the Javascript code (e.g. &quot;1.12b3&quot;)<br>
+  The existence of this variable can be used to test for a <em>toolbar-enabled</em> page</li>
+</ul>
+
+<h3>Interactive operations</h3>
+
+<ul>
+  <li><b><code>setMark()</code></b>: lets the user click and sets a mark at the clicked location</li>
+  <li><b><code>zoomArea()</code></b>: lets the user click to select an area and zooms to the selected area</li>
+  <li><b><code>moveCenter()</code></b>: lets the user click and recenters the image around the clicked location</li>
+</ul>
+
+<h3>Page operations</h3>
+
+<ul>
+  <li><b><code>getRef()</code></b>: returns a String with a URL reference to the current document</li>
+  <li><b><code>removeMark()</code></b>: removes the last mark</li>
+  <li><b><code>zoomBy(float factor)</code></b>: magnifies the image by the given factor around the current center</li>
+  <li><b><code>zoomFullpage()</code></b>: zooms out so that the whole image is visible</li>
+  <li><b><code>display(int prio)</code></b>: reloads the page with the current parameters</li>
+</ul>
+
+<h3>Parameter operations</h3>
+
+<ul>
+  <li><b><code>newParameter(String name, String defaultValue, int prio)</code></b>: declares a new parameter with name, default value (can be of any type) and priority</li>
+  <li><b><code>getParameter(String name)</code></b>: returns the value of the parameter with the name <code>name</code></li>
+  <li><b><code>setParameter(String name, String value)</code></b>: sets the value of the named parameter (value can be of any type)</li>
+  <li><b><code>getAllParameters(int prio)</code></b>: returns a String of all parameters in HTTP request format (name=value) below the given priority</li>
+  <li><b><code>addMark(Position pos)</code></b>: adds a mark with the given Position</li>
+  <li><b><code>deleteMark()</code></b>: removes the last mark form the list</li>
+  <li><b><code>getAllMarks()</code></b>: returns a String with all current marks in digilib format (for parameter &quot;mk&quot;)</li>
+  <li><b><code>addFlag(String name)</code></b>: adds a digilib mode flag with the given name</li>
+  <li><b><code>hasFlag(String name)</code></b>: returns if the given flag is currently set</li>
+  <li><b><code>removeFlag(String name)</code></b>: removes the given flag</li>
+  <li><b><code>toggleFlag(String name)</code></b>: toggles the given flag</li>
+  <li><b><code>getAllFlags()</code></b>: returns a String with all current flags in digilib format (for parameter &quot;mo&quot;)</li>
+</ul>
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/doc/old/digilib_client.html	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,428 @@
+<html>
+<head>
+<title>Documentation: digilib-client</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h1>Dokumentation: digilib-client</h1>
+
+<h3>Table of contents</h3>
+
+<h4>1 Introduction</h4>
+
+<h4>2 Files</h4>
+
+<b>&nbsp;&nbsp;2.1 digilib.jsp<br>
+&nbsp;&nbsp;2.2 dlImage.jsp<br>
+&nbsp;&nbsp;2.3 navigation_XX.js<br>
+&nbsp;&nbsp;2.4 dlMenu.html<br>
+&nbsp;&nbsp;2.5 Modules<br></b>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.5.1 pdfMaker.js<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.5.2 pagesTotal.js
+
+<h4>3 Future</h4>
+
+<h4>4 Information</h4>
+
+<b>&nbsp;&nbsp;4.1 Supported browsers and platforms<br>&nbsp;</b>
+
+<hr>
+
+<h3>1 Introduction</h3>
+
+<p>
+Digilib is a client-server-software that transforms high-resolution images to
+formats that are acceptable for internet network connetions. the client software
+is based on HTML and JavaScript so that everybody can use it with a normal
+browser. To see in full detail which browsers and platforms are supported check
+chapter 4.1. This software provides lots of features like zooming areas of
+pictures, setting marks to the pictures, jumping to different pictures while
+always being able to generate URLs so that people can distibute these and
+everybody can see the same picture with ist marks.<br>
+It has been put lots of attention providing files that are as intependant of
+each other as possible so that embedding it in other kind of pages will be as
+simple as it can be. Stuff like providing modules or a different menubar are
+just some of the stuff you can easily do without having to change the files
+provided.
+</p>
+<p>
+Some of the the client-files contain JSP code, to do some serverside
+configuration. Because of the fact that the serverside software has to use a
+java module for the web-server there is no need to install more stuff than what
+is needed by the server-scripts.
+</p>
+<p>
+This software is still work in progress and it is quite probable that lots of
+stuff will change in the future, so check this file with every new version of
+software you downloaded.
+</p>
+
+<h3>2 Files</h3>
+
+<p>
+There are quite some files the client software needs to run all the interactive
+user-interface. To give you a detailed view of the files there is a subsection
+provided in this document explaining what each file does and how it interacts
+with the others.
+</p>
+
+<h4>2.1 digilib.jsp</h4>
+
+<p>
+This is the file you will request from the server and which will call the
+other files. The main purposes of this file are:
+</p>
+
+<ul>
+ <li>User authentication when wanting to access restriced documents. Check out
+     the serverside documentation for detailed explanation of how to set it
+     up.</li>
+ <li>Converting the query-string to the servlet style parameters (because of some 
+     historical reasons the two parameter-sets are not equal and a project at the 
+     Univerity of Berne based on digilib requires the first kind of parameters. So
+     for the moment we have to live with it...)</li>
+ <li>Building the frameset for the different frames like the one actually holding
+     the image, one for navigation, etc.. It's up to the developer of a certain
+     application to change it to its needs.</li>
+</ul>
+
+<p>
+The crutial point in this file is the way the query on the URL (get-method) is
+made. After <kbd>digilib.jsp?</kbd> there is a comma-separated list of parameters. It is
+to say that principally all of them are optional, but the first of them
+describing the url of the image-directory should really be set.<br>
+Here is the list of the diffenent attributes in
+<kbd>digilib.jsp?[att0]+[att1]+[att2]+[att3]+[att4]+ ... +[att8]</kbd>: 
+</p>
+
+<table border="0" align="center" width="95%">
+ <tr>
+  <td width="8%" valign="top">[att0]</td>
+  <td>Directory where the image can be found (check the documentation for
+      serverside).</td>
+ </tr>
+ <tr>
+  <td width="8%" valign="top">[att1]</td>
+  <td>The page number (equals the index of the image in the sorted directory).</td>
+ </tr>
+ <tr>
+  <td width="8%" valign="top">[att2]</td>
+  <td>The dimension relative to the visible height/width in the frame (1.0 means
+      that the image fits exactly into the frame, while 2.0 means twice that
+      size).</td>
+ </tr>
+ <tr>
+  <td width="8%" valign="top">[att3]</td>
+  <td>Attribute to pass extra options to the servlet (for example 'fit' means
+      that normally not resized gif-images will be scaled).</td>
+ </tr>
+ <tr>
+  <td width="8%" valign="top">[att4]</td>
+  <td>Here are the marks passed separated by ';', while the coordinates are
+      separated with '/'. The cooridnates are in a relative format (0.0 -
+      1.0).<br>
+      Example ... +0.33/0.5;0.25/0.25+ ... means that there are two marks one a
+      third from the left and half down the image and the second a quarter from
+      left and top of the image.</td>
+ </tr>
+ <tr>
+  <td width="8%" valign="top">[att5]</td>
+  <td>Relative (0.0 - 1.0) value giving the most left pixels visible in the
+      zoomed image.</td>
+ </tr>
+ <tr>
+  <td width="8%" valign="top">[att6]</td>
+  <td>Dito with the topmost pixels.</td>
+ </tr>
+ <tr>
+  <td width="8%" valign="top">[att7]</td>
+  <td>Gives the visible width of the image (also 0.0 - 1.0).</td>
+ </tr>
+ <tr>
+  <td width="8%" valign="top">[att8]</td>
+  <td>Same with the height.</td>
+ </tr>
+</table>
+
+<p>
+It is important to understand that all cooridnates that are used by digilib are
+passed as relative values where the width/height of an image is 1. This way it
+is possible that the images are displayed the same way on all kind of different
+screen-sizes and so making opening the possibility of sharing a url between
+people that will see the same on their screens.
+</p>
+
+<h4>2.2 dlImage.jsp</h4>
+
+<p>
+The parameterlist in dlImage.jsp is quite the same as in digilib.jsp but is
+represented in another format. As in chapter 2.1 we are discussing here the
+parameterlist. The parameters are no longer separated with the plus-sign put
+with an ampersand '&', which is the official way of passing different parameters
+through the URL. The parameters have all a name followed by a value, like <kbd>
+.../dlImage.jsp?fn=histbot/botany&pn=3& ... </kbd>. I will give you now a list of
+parameters dlImage.jsp understands by default by indication the name and its
+equivalent in digilib.jsp and if needed some special comments. It is possible
+and the somehow the aim of dlImage to pass more parameters to this file for
+additional functionality. Check out section 2.5.1 where is a good example of how
+to modify dlImage.jsp for adding new functionality.
+</p>
+
+<table border="0" align="center" width="95%">
+ <tr>
+  <td width="8%" valign="top">fn</td>
+  <td>= att0</td>
+ </tr>
+ <tr>
+  <td width="8%" valign="top">pn</td>
+  <td>= att1</td>
+ </tr>
+ <tr>
+  <td width="8%" valign="top">ws</td>
+  <td>= att2</td>
+ </tr>
+ <tr>
+  <td width="8%" valign="top">mo</td>
+  <td>= att3</td>
+ </tr>
+ <tr>
+  <td width="8%" valign="top">mk</td>
+  <td>= att4</td>
+ </tr>
+ <tr>
+  <td width="8%" valign="top">wx</td>
+  <td>= att5</td>
+ </tr>
+ <tr>
+  <td width="8%" valign="top">wy</td>
+  <td>= att6</td>
+ </tr>
+ <tr>
+  <td width="8%" valign="top">ww</td>
+  <td>= att7</td>
+ </tr>
+ <tr>
+  <td width="8%" valign="top">wh</td>
+  <td>= att8</td>
+ </tr>
+ <tr>
+  <td width="8%" valign="top">dx</td>
+  <td>Width of the frame containing the to be displayed image in pixels.</td>
+ </tr>
+ <tr>
+  <td width="8%" valign="top">dy</td>
+  <td>Dito with the height.</td>
+ </tr>
+</table>
+
+<p>
+DlImage.jsp can react in two completely different ways on a request. When
+requesting the file it checks whether the width and height of the frame are
+passed as parameters in the URL. This is not the case on every first view of a
+session. If the dimensions are not set, then dlImage sends a dummy page to the
+client, calculates the width and height of the frame (which is only possible
+with a correct html-file) and resends the request to dlImage.jsp this time with
+the indicated dimensions.
+</p>
+<p>
+The other way dlImage.jsp reacts is its noraml reaction. This means that it
+parses the parameterslist and fills in some default values if they are missing
+(check out the source-code to see them). Then the file is going to include some
+script files that do offer the functionality. Part of these JavaScript-files are
+browser dependant, some are not. The most important files are named with
+navigation_XX.js where XX is a shortcut for the browser. The other files (the
+ones not browser-dependant) are some sample modules that are discussed in
+section 2.5.<br>
+Then it is time to build the actual HTML for the frame. There is one layer
+holding the picture (the way the parameters should be passed is described in the
+serverside dokumentaion). The layers named 'dotX' are the layers holding the
+marks, the ones named 'eckX' are the corners when zooming a rectangle.<br>
+Last but not least the parameters are passed to the navigation-script or the the
+module using them (<kbd>&lt;body bgcolor="#666666" onload='init_XXXXX("&lt;%= fn ...
+")'&gt;</kbd>).
+</p>
+
+<h4>2.3 navigation_XX.js</h4>
+
+<p>
+Let's look at the crucail points about navigation_XX.js-files. Most important is
+that the parameters passed to the init-function are stored in an array globally
+accesible (the code in init shows this). The name of the array is 'att'. There
+is also a function called 'loadPicture' that puts together a new URL
+(dlImage.jsp?...) for loading a new picture or another part of the same. Then we
+have lots of functions dealing with different parts of the digilib
+functionality:
+</p>
+
+<table border="0" align="center" width="95%">
+ <tr>
+  <td width="10%" valign="top">backPage</td>
+  <td>Loading the previous picture in the directory.</td>
+ </tr>
+ <tr>
+  <td width="10%" valign="top">nextPage</td>
+  <td>Loading the next picture in the directory.</td>
+ </tr>
+ <tr>
+  <td width="10%" valign="top">page</td>
+  <td>Loading a picture in the same directory by index.</td>
+ </tr>
+ <tr>
+  <td width="10%" valign="top">digicat</td>
+  <td>Loading a new window containing thumbnails of images in the directoy (some
+      closely related project called 'digicat').</td>
+ </tr>
+ <tr>
+  <td width="10%" valign="top">ref</td>
+  <td>Generating HTML- or LaTeX-style links for the special part of picture
+      including marks to build into other documents. The URL is made with
+      <kbd>digilib.jsp?...+... </kbd>.</td>
+ </tr>
+ <tr>
+  <td width="10%" valign="top">mark</td>
+  <td>Sets a mark to the current picture.</td>
+ </tr>
+ <tr>
+  <td width="10%" valign="top">zoomArea</td>
+  <td>Zooms an area of the current picture.</td>
+ </tr>
+ <tr>
+  <td width="10%" valign="top">zoomPoint</td>
+  <td>Zooms in around the selected point on the picture.</td>
+ </tr>
+ <tr>
+  <td width="10%" valign="top">moveTo</td>
+  <td>Moves the center of a image area to this point while maintaining the same
+      zooming grade (sometimes this is known as 'pan').</td>
+ </tr>
+ <tr>
+  <td width="10%" valign="top">scale</td>
+  <td>Scales an image relative to the dimensions of the image-frame (normally
+      the image fits right into it).</td>
+ </tr>
+</table>
+
+<p>
+The other functions are helpers that are should not be directly accessed from
+outside the frame.
+</p>
+
+<h4>2.4 dlMenu.html</h4>
+
+<p>
+This file generates the navigation-frame with buttons and menus. From this point
+the calls are made to navigation_XX.js. Please consider this frame as a sample
+the we at the University of Berne are currently using. If you are good in
+graphics design feel free to create your own buttons.<br>
+The files related to dlMenu.html are in a subdirectory called 'buttons' where
+the gif-images are stored and also the menu.js-scripts handling the menus.
+</p>
+
+<h4>2.5 Modules</h4>
+
+<p>
+The modules form a very important part of the whole project. This software aims
+to be easy to upgrade with new functionality. Because of the fact that
+JavaScript is not a full featured programming language modularisation  in so
+that intuitive and simple. Still we have found a way of providing enough freedom
+to build new modules and adding features to digilib. The example of two sample
+modules (that are nevertheless useful), we would like to show how we think one
+should implement another module to add new functionality.
+</p>
+
+<h5>2.5.1 pdfMaker.js</h5>
+
+<p>
+In the subdirectory 'modules' is a very simple module called pdfMaker.js. This
+very basic module only has one function (makePDF) that does nothing more than
+giving a prompt where one can enter a number of image-indices and call a
+serverside script that creates a PDF-file with the different picures. To make
+this module work it has first to be loaded by dlImage.jsp. Because it is
+browser-independant there is only one version of it. Aften being loaded it has
+access to the whole 'att'-array which is quite stupidely shown in makePDF by
+giving the index of the currently displayed image as default value.<br>
+One other thing that has to be done is to enter a new button to navigation.html
+so that the new function can be called... quite logic i know.
+</p>
+
+<h5>2.5.2 pagesTotal.js</h5>
+
+<p>
+'pagesTotal.js' is a lot more complicated than the first module and shows some
+more things to think of when making a module. It aims to show the current
+pagenumber (index) and the total number of images in the directory in a
+separated frame. The first thing that has to be done is implementing a new frame
+in diglib.jsp to provide space to write down the information.<br>
+As we know the current index is stored in the parameter 'pn' in dlImage.jsp and
+easily accessible in the scripts with 'att[1]', where as the total number of
+pages is only known by the server. To get this information one has to make a
+call to a server function. This is done in digilib.jsp (query += "&pt=" +
+DB.getNumPages(request);) the resulting number that should not cheange during a
+session is stored in a new parameter 'pt' that is sent in the parameter-list to
+dlImage.jsp.<br>
+In dlImage we have to load the module (configure 2.5.1). Next thing is to make
+the 'pt' accessible through all the scripts (adding a new cell to the
+'att'-array) by creating an init'function in the module. While the original
+function is called 'init' the one in pagesTotal is called 'init_pagesTotal' and
+acception the additional parameter 'pt'. In 'init_pagesTotal' there is a call to
+the original 'init' with all parameters but 'pt' and so filling the first nine
+cells of the att-array. Then it's time to add a new cell with 'pt' as its value.
+Further on there is a call to function 'pagesTotal' that writes the data into
+the new frame.<br>
+As you can see there are some functions overriding the original ones.
+'nextPage', 'page' and 'loadPicture' are rewritten in the module to make use of
+the new functionality. In the first two functions we can make now some
+additional checks that we cannot run past the last image. 'loadPicture' has to
+be improved so that 'pt' will be in the URL sent when loading a new picture or
+area.
+</p>
+
+
+<h3>3 Future</h3>
+
+<p>
+There are some future plans concerning the cilent software. While there is no
+actual list of things that have to be done, but some vague ideas of
+improvements:
+</p>
+
+<ul>
+ <li>Cleaning up the different stiles of holding the parameters.</li>
+ <li>Makeing some handy generic functions like mouseclicks or mousemoves so that
+     they can be used in modules.</li>
+ <li>Makeing the implementation of modules clearer, easier and safer than it is
+     now. In JavaScript there are some (rudimentary?) object-oriented ideas that
+     might help improving it - but I didn't got it until now.</li>
+ <li>Make it work on more platforms/browsers.</li>
+ <li>You can always make the code clearer, smaller, better, faster, ... :-)</li>
+</ul>
+
+
+<h3>4 Information</h3>
+
+<h4>4.1 Supported browsers and platforms</h4>
+
+<p>
+Here is a very incomplete list of browsers and platforms known to work with
+digilib. We provide three different navigation-scripts to work with different
+implementations of JavaScript in different browsers. These are Netscape 4,
+Internet Explorer (working on versions 4 - 6), Opera 6 and the Mozilla5-engine. Due to
+some bugs in the browsers and special behaviours of different platforms we
+cannot garantee that digilib works on every platform supported by for example
+the Mozilla5-engine. Anyone having success on a different platform than the ones
+indicated below, please send a note.
+</p>
+
+<ul>
+ <li>Netscape 4.7x (Windows, MacOS 9.0/9.1, MacOS X, Linux, Solaris)</li>
+ <li>Mozilla 0.9.x (Windows, Linux, MacOS X)</li>
+ <li>Internet Explorer 4.01+ (Windows)</li>
+ <li>Internet Explorer 5 (MacOS 9.0/9.1, MacOS X)</li>
+ <li>Opera 6 (Windows, possibly other platforms)</li>
+</ul>
+
+<hr>
+<address>
+University of Berne - Switzerland : History and Philosophy of Science<br>
+18.02.2002 - Christian Luginbuehl 
+(<a href="mailto:luginbuehl@student.unibe.ch">luginbuehl@student.unibe.ch</a>)
+</address>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/build.xml	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project basedir="." default="build" name="digilib-servlet">
+  <property environment="env"/>
+  <property name="debuglevel" value="source,lines,vars"/>
+  <property name="target" value="1.4"/>
+  <property name="source" value="1.4"/>
+  <path id="digilib.classpath">
+    <pathelement location="bin"/>
+    <fileset dir="lib">
+      <include name="**/*.jar"/>
+    </fileset>
+  </path>
+
+  <target name="init">
+    <tstamp/>
+    <mkdir dir="bin"/>
+    <mkdir dir="dist"/>
+    <available file="servlet/src" property="has.servlet.src"/>
+    <available file="client/digitallibrary" property="has.webapp.src"/>
+  </target>
+
+  <target name="clean">
+    <delete dir="bin"/>
+  </target>
+
+  <target name="cleanall" depends="clean">
+    <delete dir="client"/>
+    <delete dir="servlet"/>
+  </target>
+
+  <target name="build" depends="pkg-servlet,move-servlet"/>
+
+  <target name="dist" depends="build,copy-lib,pkg-webapp"/>
+
+  <target name="dist-nolib" depends="build,pkg-webapp"/>
+
+  <target depends="init,get-src" name="build-servlet">
+    <echo message="${ant.project.name}: ${ant.file}"/>
+    <javac debug="true" debuglevel="${debuglevel}" destdir="bin" source="${source}" target="${target}">
+      <src path="servlet/src"/>
+      <classpath refid="digilib.classpath"/>
+    </javac>
+    <!-- Create the time stamp -->
+    <tstamp/>
+  </target>
+
+  <target name="pkg-servlet" depends="build-servlet">
+    <!-- Put everything in ${build} into the jar file -->
+    <jar destfile="dist/DigilibServlet-${DSTAMP}.jar" basedir="bin" index="yes"/>
+  </target>
+
+  <target name="move-servlet" depends="pkg-servlet,get-webapp">
+    <!-- put the new jar file in the webapp -->
+    <copy file="dist/DigilibServlet-${DSTAMP}.jar"
+          tofile="client/digitallibrary/WEB-INF/lib/DigilibServlet.jar"/>
+  </target>
+
+  <target name="copy-lib">
+    <!-- copy all files in lib in the webapp -->
+    <copy todir="client/digitallibrary/WEB-INF/lib" includeemptydirs="false">
+      <fileset dir="lib"/>
+    </copy>
+  </target>
+
+  <target name="pkg-webapp" depends="get-webapp">
+    <zip destfile="dist/digilib-${DSTAMP}.zip" basedir="client" />
+  </target>
+
+  <target name="get-all" depends="get-src,get-webapp"/>
+
+  <target name="get-src" depends="init" unless="has.servlet.src"
+          description="download fresh set of sources from CVS">
+    <cvs cvsRoot=":pserver:anonymous@cvs.digilib.berlios.de:/cvsroot/digilib"
+         package="servlet/src" compression="true"/>
+  </target>
+
+  <target name="get-webapp" depends="init" unless="has.webapp.src"
+          description="download fresh webapp directory from CVS">
+    <cvs cvsRoot=":pserver:anonymous@cvs.digilib.berlios.de:/cvsroot/digilib"
+         package="client/digitallibrary" compression="true"/>
+  </target>
+
+  <!-- CVS update should not be needed, checkout is preferrable -->
+  <target name="update" depends="init,update-src,update-webapp"/>
+
+  <target name="update-src" description="update sources from CVS" >
+    <cvs dest="servlet/src" command="update" compression="true"/>
+  </target>
+
+  <target name="update-webapp" description="update webapp from CVS" >
+    <cvs dest="client/digitallibrary" command="update" compression="true"/>
+  </target>
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/tomcat/bin/catalina.sh	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,237 @@
+#!/bin/sh
+# -----------------------------------------------------------------------------
+# catalina.sh - Start/Stop Script for the CATALINA Server
+#
+# Environment Variable Prequisites
+#
+#   CATALINA_BASE (Optional) Base directory for resolving dynamic portions
+#                 of a Catalina installation.  If not present, resolves to
+#                 the same directory that CATALINA_HOME points to.
+#
+#   CATALINA_HOME (Optional) May point at your Catalina "build" directory.
+#                 If not present, the current working directory is assumed.
+#
+#   CATALINA_OPTS (Optional) Java runtime options used when the "start",
+#                 "stop", or "run" command is executed.
+#
+#   JAVA_HOME     Must point at your Java Development Kit installation.
+#
+#   JPDA_OPTS     (Optional) Java runtime options used when the "jpda start"
+#                 command is executed.  Defaults to
+#                 "-classic -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
+#
+#   JSSE_HOME     (Optional) May point at your Java Secure Sockets Extension
+#                 (JSSE) installation, whose JAR files will be added to the
+#                 system class path used to start Tomcat.
+#
+# $Id$
+# -----------------------------------------------------------------------------
+
+export JAVA_HOME=/usr/local/lib/IBMJava2-13
+export CATALINA_OPTS="-mx512m"
+
+
+# ----- Verify and Set Required Environment Variables -------------------------
+
+if [ -z "$CATALINA_HOME" ] ; then
+  ## resolve links - $0 may be a link to  home
+  PRG=$0
+  progname=`basename $0`
+  
+  while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '.*/.*' > /dev/null; then
+	PRG="$link"
+    else
+	PRG="`dirname $PRG`/$link"
+    fi
+  done
+  
+  CATALINA_HOME_1=`dirname "$PRG"`/..
+  echo "Guessing CATALINA_HOME from catalina.sh to ${CATALINA_HOME_1}" 
+    if [ -d ${CATALINA_HOME_1}/conf ] ; then 
+	CATALINA_HOME=${CATALINA_HOME_1}
+	echo "Setting CATALINA_HOME to $CATALINA_HOME"
+    fi
+fi
+
+if [ -z "$CATALINA_OPTS" ] ; then
+  CATALINA_OPTS=""
+fi
+
+if [ -z "$JPDA_OPTS" ] ; then
+  JPDA_OPTS="-classic -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+  echo You must set JAVA_HOME to point at your Java Development Kit installation
+  exit 1
+fi
+
+
+# ----- Cygwin Unix Paths Setup -----------------------------------------------
+
+# Cygwin support.  $cygwin _must_ be set to either true or false.
+case "`uname`" in
+  CYGWIN*) cygwin=true ;;
+  *) cygwin=false ;;
+esac
+ 
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+  [ -n "$CATALINA_HOME" ] &&
+    CATALINA_HOME=`cygpath --unix "$CATALINA_HOME"`
+    [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+
+# ----- Set Up The System Classpath -------------------------------------------
+
+CP="$CATALINA_HOME/bin/bootstrap.jar"
+
+if [ -f "$JAVA_HOME/lib/tools.jar" ] ; then
+  CP=$CP:"$JAVA_HOME/lib/tools.jar"
+fi
+if [ -f "$JSSE_HOME/lib/jsse.jar" ] ; then
+  CP=$CP:"$JSSE_HOME/lib/jcert.jar":"$JSSE_HOME/lib/jnet.jar":"$JSSE_HOME/lib/jsse.jar"
+fi
+
+
+# ----- Cygwin Windows Paths Setup --------------------------------------------
+
+# convert the existing path to windows
+if $cygwin ; then
+   CP=`cygpath --path --windows "$CP"`
+   CATALINA_HOME=`cygpath --path --windows "$CATALINA_HOME"`
+   JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+fi
+
+
+# ----- Set Up CATALINA_BASE If Necessary -------------------------------------
+
+if [ -z "$CATALINA_BASE" ] ; then
+  CATALINA_BASE=$CATALINA_HOME
+fi
+
+
+# ----- Execute The Requested Command -----------------------------------------
+
+echo "Using CLASSPATH:     $CP"
+echo "Using CATALINA_BASE: $CATALINA_BASE"
+echo "Using CATALINA_HOME: $CATALINA_HOME"
+echo "Using JAVA_HOME:     $JAVA_HOME"
+
+if [ "$1" = "jpda" ] ; then
+  CATALINA_OPTS="${CATALINA_OPTS} ${JPDA_OPTS}"
+  shift
+fi
+
+if [ "$1" = "debug" ] ; then
+
+  shift
+  if [ "$1" = "-security" ] ; then
+    shift
+    $JAVA_HOME/bin/jdb \
+       $CATALINA_OPTS \
+       -sourcepath $CATALINA_HOME/../../jakarta-tomcat-4.0/catalina/src/share \
+       -classpath $CP \
+       -Dcatalina.base=$CATALINA_BASE \
+       -Dcatalina.home=$CATALINA_HOME \
+       org.apache.catalina.startup.Bootstrap "$@" start
+  else
+    $JAVA_HOME/bin/jdb \
+       $CATALINA_OPTS \
+       -sourcepath $CATALINA_HOME/../../jakarta-tomcat-4.0/catalina/src/share \
+       -classpath $CP \
+       -Dcatalina.base=$CATALINA_BASE \
+       -Dcatalina.home=$CATALINA_HOME \
+       org.apache.catalina.startup.Bootstrap "$@" start
+  fi
+
+elif [ "$1" = "embedded" ] ; then
+
+  shift
+  for i in ${CATALINA_HOME}/server/lib/*.jar ; do
+    CP=$i:${CP}
+  done
+  for i in ${CATALINA_HOME}/common/lib/*.jar ; do
+    CP=$i:${CP}
+  done
+  echo Embedded Classpath: $CP
+  $JAVA_HOME/bin/java $CATALINA_OPTS -classpath $CP \
+   -Dcatalina.base=$CATALINA_BASE \
+   -Dcatalina.home=$CATALINA_HOME \
+   org.apache.catalina.startup.Embedded "$@"
+
+elif [ "$1" = "env" ] ; then
+
+  export BP CATALINA_HOME CP
+  exit 0
+
+elif [ "$1" = "run" ] ; then
+
+  shift
+  if [ "$1" = "-security" ] ; then
+    echo Using Security Manager
+    shift
+    $JAVA_HOME/bin/java $CATALINA_OPTS -classpath $CP \
+     -Djava.security.manager \
+     -Djava.security.policy==$CATALINA_BASE/conf/catalina.policy \
+     -Dcatalina.base=$CATALINA_BASE \
+     -Dcatalina.home=$CATALINA_HOME \
+     org.apache.catalina.startup.Bootstrap "$@" start
+  else
+    $JAVA_HOME/bin/java $CATALINA_OPTS -classpath $CP \
+     -Dcatalina.base=$CATALINA_BASE \
+     -Dcatalina.home=$CATALINA_HOME \
+     org.apache.catalina.startup.Bootstrap "$@" start
+  fi
+
+elif [ "$1" = "start" ] ; then
+
+  shift
+  touch $CATALINA_BASE/logs/catalina.out
+  if [ "$1" = "-security" ] ; then
+    echo Using Security Manager
+    shift
+    $JAVA_HOME/bin/java $CATALINA_OPTS -classpath $CP \
+     -Djava.security.manager \
+     -Djava.security.policy==$CATALINA_BASE/conf/catalina.policy \
+     -Dcatalina.base=$CATALINA_BASE \
+     -Dcatalina.home=$CATALINA_HOME \
+     org.apache.catalina.startup.Bootstrap "$@" start \
+     >> $CATALINA_BASE/logs/catalina.out 2>&1 &
+  else
+    $JAVA_HOME/bin/java $CATALINA_OPTS -classpath $CP \
+     -Dcatalina.base=$CATALINA_BASE \
+     -Dcatalina.home=$CATALINA_HOME \
+     org.apache.catalina.startup.Bootstrap "$@" start \
+     >> $CATALINA_BASE/logs/catalina.out 2>&1 &
+  fi
+
+elif [ "$1" = "stop" ] ; then
+
+  shift
+  $JAVA_HOME/bin/java $CATALINA_OPTS -classpath $CP \
+   -Dcatalina.base=$CATALINA_BASE \
+   -Dcatalina.home=$CATALINA_HOME \
+   org.apache.catalina.startup.Bootstrap "$@" stop
+
+else
+
+  echo "Usage: catalina.sh ( env | run | start | stop)"
+  echo "Commands:"
+  echo "  debug             Start Catalina in a debugger"
+  echo "  debug -security   Debug Catalina with a security manager"
+  echo "  env               Set up environment variables that would be used"
+  echo "  jpda start        Start Catalina under JPDA debugger"
+  echo "  run               Start Catalina in the current window"
+  echo "  run -security     Start in the current window with security manager"
+  echo "  start             Start Catalina in a separate window"
+  echo "  start -security   Start in a separate window with security manager"
+  echo "  stop              Stop Catalina"
+  exit 1
+
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/tomcat/bin/rctomcat	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,87 @@
+#! /bin/sh
+#
+
+. /etc/rc.config
+
+# Determine the base and follow a runlevel link name.
+base=${0##*/}
+link=${base#*[SK][0-9][0-9]}
+
+# Force execution if not called by a runlevel directory.
+#test $link = $base && START_XNTPD=yes
+#test "$START_XNTPD" = yes || exit 0
+
+#
+# docuservers tomcat (ROC 2.11.01)
+#
+TOMCATLOG=/usr/local/httpd/logs/tomcat-err.log
+TOMCATDIR=/opt/tomcat
+
+TOMCAT_PID="";
+
+function tomcat_runs() {
+# we're looking at java vms executing org.apache.catalina.startup.Bootstrap
+#ALL_TOMS=$( ps xa | grep org.apache.catalina.startup | grep -v grep )
+#ALL_TOM_IDS=$( echo $ALL_TOMS | cut -d " " -f 1 )
+ALL_TOMS=$( pgrep -u wwwrun java )
+TOMCAT_PID=$( echo $ALL_TOMS | head -1 )
+test -n "$TOMCAT_PID"
+}
+
+return="$rc_done"
+
+case "$1" in
+    start)
+	echo -n "Starting Tomcat Servlet server "
+	su - wwwrun -c "$TOMCATDIR/bin/startup.sh" >> $TOMCATLOG 2>&1 || return=$rc_failed
+	echo -e "$return"
+	;;
+    stop)
+	echo -n "Stopping Tomcat Servlet server "
+	if su - wwwrun -c "$TOMCATDIR/bin/shutdown.sh" >> $TOMCATLOG 2>&1
+	then
+	    for i in 1 2 3 4 5
+	    do
+		if tomcat_runs
+		then
+		    return=$rc_failed
+		    echo -n "."
+		    sleep 2
+		else
+		    return=$rc_done
+		    break
+		fi
+	    done
+	    if tomcat_runs
+	    then
+		echo -n " killing."
+		kill $TOMCAT_PID
+		sleep 2
+	    fi
+	    if tomcat_runs
+	    then
+		return=$rc_failed
+	    else
+		return=$rc_done
+	    fi
+	else 
+	    return=$rc_failed
+	fi
+	
+	echo -e "$return"
+	;;
+    reload|restart)
+        $0 stop  &&  $0 start  ||  return=$rc_failed
+        ;;
+    status)
+	echo -n "Checking for service tomcat: "
+	tomcat_runs && echo OK || echo No process
+        ;;
+    *)
+	echo "Usage: $0 {start|stop|status|reload|restart}"
+	exit 1
+esac
+
+# Inform the caller not only verbosely and set an exit status.
+test "$return" = "$rc_done" || exit 1
+exit 0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/tomcat/conf/server.xml	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,42 @@
+<!-- Digilib Server Configuration File -->
+
+<Server port="8005" shutdown="SHUTDOWN" debug="0">
+
+  <!-- Define an Apache-Connector Service -->
+  <Service name="Tomcat-Docuserver">
+
+    <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
+    <Connector className="org.apache.catalina.connector.http.HttpConnector"
+               port="8080" minProcessors="5" maxProcessors="75"
+               acceptCount="10" debug="0" connectionTimeout="60000"/>
+
+    <!-- Replace "localhost" with what your Apache "ServerName" is set to -->
+    <Engine className="org.apache.catalina.connector.warp.WarpEngine"
+     name="Apache" debug="1" appBase="webapps" defaultHost="hera.unibe.ch">
+
+      <!-- Global logger unless overridden at lower levels -->
+      <Logger className="org.apache.catalina.logger.FileLogger"
+              prefix="apache_log." suffix=".txt"
+              timestamp="true"/>
+
+      <!-- Define the default virtual host. Hostname must match the engine's. -->
+      <Host name="hera.unibe.ch" debug="0" appBase="/docuserver/tmp/digilib-test/docuserver">
+
+        <Context path="/docuserver/digitallibrary" docBase="/docuserver/tmp/digilib-test/docuserver/digitallibrary" debug="0" reloadable="false">
+	</Context>
+
+<!--
+        <Context path="/manager" docBase="/opt/tomcat/webapps/manager" debug="0" reloadable="false">
+	</Context>
+-->
+
+      </Host>
+
+      <!-- Because this Realm is here, an instance will be shared globally -->
+      <Realm className="org.apache.catalina.realm.MemoryRealm" />
+
+    </Engine>
+
+  </Service>
+
+</Server>
--- a/servlet/doc/Scaler.html	Fri Apr 09 18:22:05 2010 +0200
+++ b/servlet/doc/Scaler.html	Wed Aug 25 18:29:08 2010 +0200
@@ -1,64 +1,157 @@
-<HTML>
-<HEAD>
-<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
-<TITLE>JBuilder Project ScaleServlet2.jpx</TITLE>
-</HEAD>
-<BODY>
-<H1>Scaler</H1>
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Scaler servlet</title>
+</head>
+<body>
+<h1>Scaler</h1>
 
-<p>A Servlet for scaling images.</p>
+<p>A Servlet for scaling images. (Version 1.5.2)</p>
+
+<h2>Web API</h2>
 
-<p>Scaler takes parameters in the http request format:
-<code>Scaler/request_path/?param1=value1&param2=value2&...</code></p>
+<p>The Scaler servlet takes parameters in the http request format:
+<code>Scaler/request_path/?param1=value1&amp;param2=value2&amp;...</code>
+Unknown parameters will be silently ignored.</p>
 
-<p>Recognised parameters:
+<p>Recognised parameters:</p>
 <ul>
-  <li><b>request_path</b> path to file or directory.
+  <li><b>request_path</b> path to file or directory.</li>
 
-  <li><b>fn</b> path to file or directory below <code>/docuserver/images</code>.
+  <li><b>fn</b> path to file or directory below <code>/docuserver/images</code> 
+    (or other configured image directory).
     This path will be added to the <code>request_path</code> behind the servlet name.
-    Either parameter can be empty.
+    Either parameter can be empty.</li>
 
   <li><b>pn</b> page number. Index into the (alphabetically sorted) directory
     given by the path. Starts with 1. Ignored if the path points to a file.
-    Default: 1.
+    Default: 1.</li>
 
-  <li><b>dw</b> destination image width (pixels).
-  <li><b>dh</b> destination image height.
+  <li><b>dw</b> destination image width (pixels). If omitted the image is scaled to fit 
+    dh.</li>
+  
+  <li><b>dh</b> destination image height (pixels). If omitted the image is scaled to fit 
+    dw.</li>
 
   <li><b>wx</b> relative x offset of the image area to be sent (0 &lt;= wx &lt;= 1).
-    Default: 0.
-  <li><b>wy</b> relative y offset of the image area to be sent.
-    Default: 0.
-  <li><b>ww</b> relative width of the image area to be sent.
-    Default: 1.
-  <li><b>wh</b> relative height of the image area to be sent.
-    Default: 1.
+    Default: 0.</li>
+    
+  <li><b>wy</b> relative y offset of the image area to be sent (0 &lt;= wy &lt;= 1).
+    Default: 0.</li>
+    
+  <li><b>ww</b> relative width of the image area to be sent (0 &lt;= ww &lt;= 1).
+    Default: 1.</li>
+    
+  <li><b>wh</b> relative height of the image area to be sent (0 &lt;= wh &lt;= 1).
+    Default: 1.</li>
 
   <li><b>ws</b> additional scaling factor. The resulting image will have the size
-    <code>[ws*dw,ws*dh]</code>. Default: 1.
+    <code>[ws*dw,ws*dh]</code>. Default: 1.</li>
 
-  <li><b>mo</b> flags for the mode of operation separated by "+".
+    <li><b>mo</b> flags for the mode of operation separated by ",".
     <ul>
-      <li><b>fit</b>: always scale the image to fit <code>[dw,dh]</code>.<br>
-        <b>file</b>: send the file as-is (may be very large and all sorts of image types!).<br>
-        If none of these flags is set heuristics is used (send unzoomed GIF as-is).
+      <li><b>fit</b>: always scale the image to fit
+      <code>[dw,dh]</code> (default).<br>
 
+      <b>clip</b>: send the file in its
+      original resolution, cropped to fit <code>[dw,dh]</code>.
+      <br>
+      
+      <b>osize</b>: scale to original size based on the image resolution
+      (from the image metadata) and display resolution (from parameter 
+      <code>ddpi</code>). Fails if either resolution is unknown.
+      </li>
+      
+      <li>
+      <b>file</b>: send the file as-is (may
+      be very large and all sorts of image types!). If configuration
+      doesn't allow sending files
+      (<code>sendfile-allowed=false</code>) revert to
+      <code>clip</code>.<br>
+
+      <b>rawfile</b>: send the file as-is with a mime-type of
+      <code>application/octet-stream</code> so it can be downloaded with
+      the browser.
+      </li>
+      
       <li><b>errtxt</b>: send error response as HTML.<br>
-        <b>errimg</b>: response as image (default).
+      <b>errimg</b>: response as image (default).</li>
 
       <li><b>q0</b>-<b>q2</b>: quality of interpolation in scaling
-        (<code>q0</code>: worst, default).
+      (<code>q0</code>: worst, default).</li>
 
       <li><b>lores</b>: try to use scaled image (default)<br>
-        <b>hires</b>: always use unscaled image.<br>
-        If the image is zoomed (ww, wh &lt; 1) the unscaled image is used in any case.
+      
+      <b>hires</b>: always use unscaled image.<br>
+      
+      If the image is zoomed (ww, wh &lt; 1) the use of the scaled
+      image files depends on the requested resolution.</li>
+      
+      <li><b>vmir</b>: mirror image vertically.<br>
+      
+      <b>hmir</b>: mirror image horizontally.</li>
+
+      <li><b>jpg</b>: the resulting image is always sent as JPEG
+      (otherwise TIFF and PNG images are sent as PNG).
+      </li>
     </ul>
+  </li>
 
+  <li><b>cont</b>: change contrast of the image. Negative value
+  reduces contrast, positive value enhances contrast. Pixel value is
+  multiplied by 2^cont. Default: 0</li>
+
+  <li><b>brgt</b>: change brightness of image. Negative value reduces
+  brightness, positive value enhances brightness. The value brgt is
+  added to the pixel value. Default: 0</li>
+
+  <li><b>rot</b>: rotate image. Rotation angle is given in
+  degrees. Default: 0</li>
+  
+  <li><b>rgbm</b>: modify color by multiplication. The contrast of the
+  red green and blue components of the image can be reduced or
+  enhanced similar to the <code>cont</code> parameter. The factors for
+  red, green and blue are separated by slashes (for example
+  0.86/0/-0.5). Default: 0/0/0</li>
+  
+  <li><b>rgba</b>: modify color by addition. The brightness of the red
+  green and blue components of the image can be reduced or enhanced
+  similar to the <code>brgt</code> parameter. The factors for red,
+  green and blue are separated by slashes (for example
+  100/0/25). Default: 0/0/0</li>
+  
+  <li><b>ddpi</b>: resolution of client display for <code>osize</code> mode. 
+  Either <code>ddpi</code> or <code>ddpix</code> and <code>ddpiy</code> must
+  be set to use <code>osize</code> mode.</li>
+  
+  <li><b>ddpix</b>: resolution of client display in x direction for 
+  <code>osize</code> mode.</li>
+  
+  <li><b>ddpiy</b>: resolution of client display in y direction for 
+  <code>osize</code> mode.</li>
+  
 </ul>
-The image will be scaled equally in horizontal and vertical direction such that
-the resulting image does not exceed the rectangle <code>[ww,wh]</code>.
-</p>
+
+  <p>The image to be loaded can be specified by the
+  <code>request_path</code> (deprecated) or the <code>fn</code> 
+   (preferred) parameter and the optional index <code>pn</code></p>
+  <ul>
+      <li> if <code>fn</code> points to a directory then the file with
+      the index <code>pn</code> (in alphabetical order according to
+      ASCII) will be loaded</li>
 
-</BODY>
-</HTML>
+      <li>if <code>fn</code> points to a file (with or without
+      extension) then this file will be loaded</li>
+  </ul>
+
+  <p>The image will be scaled equally in horizontal and vertical
+  direction such that the resulting image does not exceed the rectangle
+  <code>[dw,dh]</code>. If only either height or width is given the
+  image is scaled to match only the given parameter. The size of the
+  resulting image in the other parameter is determined by the aspect
+  ratio of the image.
+  </p>
+
+</body>
+</html>
--- a/servlet/src/digilib/Utils.java	Fri Apr 09 18:22:05 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*  Utils -- general utility classes for scaler servlet
-
-  Digital Image Library servlet components
-
-  Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de)
-
-  This program is free software; you can redistribute  it and/or modify it
-  under  the terms of  the GNU General  Public License as published by the
-  Free Software Foundation;  either version 2 of the  License, or (at your
-  option) any later version.
-   
-  Please read license.txt for the full details. A copy of the GPL
-  may be found at http://www.gnu.org/copyleft/lgpl.html
-
-  You should have received a copy of the GNU General Public License
-  along with this program; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-*/
-
-package digilib;
-
-public class Utils {
-
-  public Utils() {
-  }
-
-  public Utils(int dbg) {
-    debugLevel = dbg;
-  }
-
-  /**
-   *  Debugging help
-   *    dprintln(1, "blabla");
-   *    will be printed on stdout if debug >= 1
-   */
-  public static int debugLevel = 10;
-  public static void dprintln(int dbg, String s) {
-    if (debugLevel >= dbg) {
-      String ind = "";
-      // indent by debuglevel
-      for (int i = 0; i < dbg; i++) {
-        ind += "  ";
-      }
-      System.out.println(ind+s);
-    }
-  }
-}
--- a/servlet/src/digilib/auth/AuthOpException.java	Fri Apr 09 18:22:05 2010 +0200
+++ b/servlet/src/digilib/auth/AuthOpException.java	Wed Aug 25 18:29:08 2010 +0200
@@ -1,30 +1,33 @@
 /*  AuthOpException -- Authentication exception class
 
-  Digital Image Library servlet components
+ Digital Image Library servlet components
 
-  Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de)
+ Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de)
 
-  This program is free software; you can redistribute  it and/or modify it
-  under  the terms of  the GNU General  Public License as published by the
-  Free Software Foundation;  either version 2 of the  License, or (at your
-  option) any later version.
-   
-  Please read license.txt for the full details. A copy of the GPL
-  may be found at http://www.gnu.org/copyleft/lgpl.html
+ This program is free software; you can redistribute  it and/or modify it
+ under  the terms of  the GNU General  Public License as published by the
+ Free Software Foundation;  either version 2 of the  License, or (at your
+ option) any later version.
+ 
+ Please read license.txt for the full details. A copy of the GPL
+ may be found at http://www.gnu.org/copyleft/lgpl.html
 
-  You should have received a copy of the GNU General Public License
-  along with this program; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
-*/
+ */
 
 package digilib.auth;
 
 public class AuthOpException extends Exception {
 
-  public AuthOpException() {
-  }
-  public AuthOpException(String s) {
-    super(s);
-  }
+	private static final long serialVersionUID = 4908131122710826645L;
+
+	public AuthOpException() {
+	}
+
+	public AuthOpException(String s) {
+		super(s);
+	}
 }
--- a/servlet/src/digilib/auth/DBAuthOpsImpl.java	Fri Apr 09 18:22:05 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,134 +0,0 @@
-/*  DBAuthOpsImpl -- Authentication class using database
-
-  Digital Image Library servlet components
-
-  Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de)
-
-  This program is free software; you can redistribute  it and/or modify it
-  under  the terms of  the GNU General  Public License as published by the
-  Free Software Foundation;  either version 2 of the  License, or (at your
-  option) any later version.
-   
-  Please read license.txt for the full details. A copy of the GPL
-  may be found at http://www.gnu.org/copyleft/lgpl.html
-
-  You should have received a copy of the GNU General Public License
-  along with this program; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-*/
-
-package digilib.auth;
-
-import javax.servlet.http.*;
-import java.util.*;
-import com.borland.dx.dataset.*;
-
-import digilib.*;
-
-public class DBAuthOpsImpl implements AuthOps {
-
-  private Utils util = null;
-  private dlDataModule dlDataModule1;
-
-  public DBAuthOpsImpl() {
-    util = new Utils();
-    dbInit();
-  }
-
-  public DBAuthOpsImpl(Utils u) {
-    util = u;
-    dbInit();
-  }
-
-  void dbInit() {
-    try {
-      dlDataModule1 = new dlDataModule();
-      dlDataModule1.getAuthPathsQuery().open();
-    }
-    catch(Exception e) {
-      e.printStackTrace();
-    }
-  }
-
-  public void setUtils(Utils u) {
-    util = u;
-  }
-
-  public boolean isAuthRequired(String filepath, HttpServletRequest request) throws AuthOpException {
-    // check permissions
-    List rolesRequired = rolesForPath(filepath, request);
-    return (rolesRequired != null);
-  }
-
-  public boolean isAuthorized(String filepath, HttpServletRequest request) throws AuthOpException {
-    List rolesAllowed = rolesForPath(filepath, request);
-    return isRoleAuthorized(rolesAllowed, request);
-  };
-
-  public List rolesForPath(String filepath, HttpServletRequest request) throws AuthOpException {
-    util.dprintln(4, "rolesForPath ("+filepath+")");
-    String p = "";
-    List r;
-    LinkedList roles = new LinkedList();
-
-    // split path in directories
-    StringTokenizer path = new StringTokenizer(filepath, "/");
-    // walk directories and check with db
-    while (path.hasMoreTokens()) {
-      p += "/" + path.nextToken();
-      r = dbRolesForPath(p);
-      if (r != null) {
-         roles.addAll(r);
-      }
-    }
-    if (roles.size() > 0) {
-      return roles;
-    } else {
-      return null;
-    }
-  }
-
-  public boolean isRoleAuthorized(List roles, HttpServletRequest request) {
-    ListIterator r = roles.listIterator();
-    String s = "";
-    while (r.hasNext()) {
-      s = (String)r.next();
-      util.dprintln(5, "Testing role: "+s);
-      if (request.isUserInRole(s)) {
-        util.dprintln(5, "Role Authorized");
-        return true;
-      }
-    }
-    return false;
-  }
-
-  private List dbRolesForPath(String filepath) throws AuthOpException {
-    util.dprintln(4, "dbRolesForPath ("+filepath+")");
-
-    LinkedList roles = new LinkedList();
-    DataSet query = dlDataModule1.getAuthPathsQuery();
-    if (query == null) {
-      throw new AuthOpException("Unable to access database!");
-    }
-    // search for PATH_NAME == filepath
-    DataRow lookupRow = new DataRow(query, "PATH_NAME");
-    lookupRow.setString("PATH_NAME", filepath);
-
-    if (query.locate(lookupRow, Locate.FIRST)) {
-      roles.add(query.getString("ROLE_NAME"));
-      util.dprintln(5, "role found: "+query.getString("ROLE_NAME"));
-      // any more matches?
-      while (query.locate(lookupRow, Locate.NEXT_FAST)) {
-        roles.add(query.getString("ROLE_NAME"));
-        util.dprintln(5, "role found: "+query.getString("ROLE_NAME"));
-      }
-    }
-    if (roles.size() > 0) {
-      return roles;
-    } else {
-      return null;
-    }
-  }
-
-}
--- a/servlet/src/digilib/auth/dlDataModule.java	Fri Apr 09 18:22:05 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-/* dlDataModule -- Database access helper class
-
-  Digital Image Library servlet components
-
-  Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de)
-
-  This program is free software; you can redistribute  it and/or modify it
-  under  the terms of  the GNU General  Public License as published by the
-  Free Software Foundation;  either version 2 of the  License, or (at your
-  option) any later version.
-   
-  Please read license.txt for the full details. A copy of the GPL
-  may be found at http://www.gnu.org/copyleft/lgpl.html
-
-  You should have received a copy of the GNU General Public License
-  along with this program; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-*/
-
-package digilib.auth;
-
-import com.borland.dx.dataset.*;
-import com.borland.dx.sql.dataset.*;
-
-
-public class dlDataModule implements DataModule {
-  private static dlDataModule myDM;
-  Database dlDatabase = new Database();
-  QueryDataSet authPathsQuery = new QueryDataSet();
-
-  public dlDataModule() {
-    try {
-      jbInit();
-    }
-    catch(Exception e) {
-      e.printStackTrace();
-    }
-  }
-  private void jbInit() throws Exception {
-    authPathsQuery.setReadOnly(true);
-    authPathsQuery.setEditable(false);
-    authPathsQuery.setQuery(new com.borland.dx.sql.dataset.QueryDescriptor(dlDatabase, "select * from digilib_paths", null, true, Load.ALL));
-    dlDatabase.setConnection(new com.borland.dx.sql.dataset.ConnectionDescriptor("jdbc:oracle:thin:@penelope.unibe.ch:1521:WTWG", "digilib_auth", "allesmainz", false, "oracle.jdbc.driver.OracleDriver"));
-  }
-  public static dlDataModule getDataModule() {
-    if (myDM == null) {
-      myDM = new dlDataModule();
-    }
-    return myDM;
-  }
-  public com.borland.dx.sql.dataset.Database getDlDatabase() {
-    return dlDatabase;
-  }
-  public com.borland.dx.sql.dataset.QueryDataSet getAuthPathsQuery() {
-    return authPathsQuery;
-  }
-}
--- a/servlet/src/digilib/image/ImageOpException.java	Fri Apr 09 18:22:05 2010 +0200
+++ b/servlet/src/digilib/image/ImageOpException.java	Wed Aug 25 18:29:08 2010 +0200
@@ -1,31 +1,33 @@
 /* ImageOpException -- Exception class for image operations
 
-  Digital Image Library servlet components
+ Digital Image Library servlet components
 
-  Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de)
+ Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de)
 
-  This program is free software; you can redistribute  it and/or modify it
-  under  the terms of  the GNU General  Public License as published by the
-  Free Software Foundation;  either version 2 of the  License, or (at your
-  option) any later version.
-   
-  Please read license.txt for the full details. A copy of the GPL
-  may be found at http://www.gnu.org/copyleft/lgpl.html
+ This program is free software; you can redistribute  it and/or modify it
+ under  the terms of  the GNU General  Public License as published by the
+ Free Software Foundation;  either version 2 of the  License, or (at your
+ option) any later version.
+ 
+ Please read license.txt for the full details. A copy of the GPL
+ may be found at http://www.gnu.org/copyleft/lgpl.html
 
-  You should have received a copy of the GNU General Public License
-  along with this program; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
-*/
+ */
 
 package digilib.image;
 
-
 public class ImageOpException extends Exception {
 
-  public ImageOpException() {
-  }
-  public ImageOpException(String s) {
-    super(s);
-  }
+	private static final long serialVersionUID = -8662921779682407942L;
+
+	public ImageOpException() {
+	}
+
+	public ImageOpException(String s) {
+		super(s);
+	}
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servlet/src/digilib/image/ImageOps.java	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,51 @@
+/* ImageOps -- convenience methods for images
+ 
+ Digital Image Library servlet components
+ 
+ Copyright (C) 2004 Robert Casties (robcast@mail.berlios.de)
+ 
+ This program is free software; you can redistribute  it and/or modify it
+ under  the terms of  the GNU General  Public License as published by the
+ Free Software Foundation;  either version 2 of the  License, or (at your
+ option) any later version.
+ 
+ Please read license.txt for the full details. A copy of the GPL
+ may be found at http://www.gnu.org/copyleft/lgpl.html
+ 
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ 
+ * Created on 13.10.2004
+ */
+package digilib.image;
+
+import java.io.IOException;
+
+import digilib.io.ImageFile;
+
+/**
+ * convenience methods for images
+ *
+ * @author casties
+ */
+public class ImageOps {
+    
+    public static final int TYPE_AUTO = 0;
+    public static final int TYPE_JPEG = 1;
+    public static final int TYPE_PNG = 2;
+    
+    private static DocuImage docuImg;
+    
+    public static boolean checkFile(ImageFile imgf) throws IOException {
+        return docuImg.identify(imgf);
+    }
+    
+    public static void setDocuImage(DocuImage di) {
+        docuImg = di;
+    }
+    
+    public static DocuImage getDocuImage() {
+        return docuImg;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servlet/src/digilib/image/ImageSize.java	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,230 @@
+/*
+ * ImageSize.java -- digilib image size class. 
+ * Digital Image Library servlet components 
+ * Copyright (C) 2003 Robert Casties (robcast@mail.berlios.de) 
+ * This program is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version. Please read license.txt for the full details. A copy of the GPL may
+ * be found at http://www.gnu.org/copyleft/lgpl.html You should have received a
+ * copy of the GNU General Public License along with this program; if not,
+ * write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307 USA Created on 26.08.2003
+ */
+
+package digilib.image;
+
+/** Class for image size (width, height).
+ * 
+ * A width or height of 0 is treated as a 'wildcard' that matches any size.
+ * 
+ * @author casties
+ *          
+ */
+public class ImageSize {
+	public int width;
+	public int height;
+
+	public ImageSize() {
+		super();
+	}
+
+	public ImageSize(int width, int height) {
+		this.width = width;
+		this.height = height;
+	}
+
+	public ImageSize(ImageSize i) {
+		this.width = i.width;
+		this.height = i.height;
+	}
+
+	public void setSize(int width, int height) {
+		this.width = width;
+		this.height = height;
+	}
+
+	/**
+	 * Returns if the size of this image is smaller in every dimension than the
+	 * other image.
+	 * 
+	 * 
+	 * 
+	 * @param is
+	 * @return
+	 */
+	public boolean isTotallySmallerThan(ImageSize is) {
+		if ((this.width == 0)||(is.width == 0)) {
+			// width wildcard
+			return (this.height <= is.height);
+		}
+		if ((this.height == 0)||(is.height == 0)) {
+			// height wildcard
+			return (this.width <= is.width);
+		}
+		return ((this.width <= is.width)&&(this.height <= is.height));
+	}
+
+	/**
+	 * Returns if the size of this image is smaller in at least one dimension
+	 * than the other image.
+	 * 
+	 * @param is
+	 * @return
+	 */
+	public boolean isSmallerThan(ImageSize is) {
+		if ((this.width == 0)||(is.width == 0)) {
+			// width wildcard
+			return (this.height <= is.height);
+		}
+		if ((this.height == 0)||(is.height == 0)) {
+			// height wildcard
+			return (this.width <= is.width);
+		}
+		return ((this.width <= is.width) || (this.height <= is.height));
+	}
+
+	/**
+	 * Returns if the size of this image is bigger in every dimension than the
+	 * other image.
+	 * 
+	 * 
+	 * 
+	 * @param is
+	 * @return
+	 */
+	public boolean isTotallyBiggerThan(ImageSize is) {
+		if ((this.width == 0)||(is.width == 0)) {
+			// width wildcard
+			return (this.height >= is.height);
+		}
+		if ((this.height == 0)||(is.height == 0)) {
+			// height wildcard
+			return (this.width >= is.width);
+		}
+		return ((this.width >= is.width) && (this.height >= is.height));
+	}
+
+	/**
+	 * Returns if the size of this image is bigger in at least one dimension
+	 * than the other image.
+	 * 
+	 * 
+	 * 
+	 * @param is
+	 * @return
+	 */
+	public boolean isBiggerThan(ImageSize is) {
+		if ((this.width == 0)||(is.width == 0)) {
+			// width wildcard
+			return (this.height >= is.height);
+		}
+		if ((this.height == 0)||(is.height == 0)) {
+			// height wildcard
+			return (this.width >= is.width);
+		}
+		return ((this.width >= is.width) || (this.height >= is.height));
+	}
+
+	/**
+	 * Returns if this image has the same size or height as the other image.
+	 * 
+	 * 
+	 * 
+	 * @param is
+	 * @return
+	 */
+	public boolean fitsIn(ImageSize is) {
+		if ((this.width == 0)||(is.width == 0)) {
+			// width wildcard
+			return (this.height == is.height);
+		}
+		if ((this.height == 0)||(is.height == 0)) {
+			// height wildcard
+			return (this.width == is.width);
+		}
+		return (
+			(this.width == is.width)
+				&& (this.height <= is.height)
+				|| (this.width <= is.width)
+				&& (this.height == is.height));
+	}
+
+	/**
+	 * Returns if the size of this image is the same as the other image.
+	 * 
+	 * 
+	 * 
+	 * @param is
+	 * @return
+	 */
+	public boolean equals(ImageSize is) {
+		if ((this.width == 0)||(is.width == 0)) {
+			// width wildcard
+			return (this.height == is.height);
+		}
+		if ((this.height == 0)||(is.height == 0)) {
+			// height wildcard
+			return (this.width == is.width);
+		}
+		return ((this.width == is.width) && (this.height == is.height));
+	}
+
+	/**
+	 * @return
+	 */
+	public int getHeight() {
+		return height;
+	}
+
+	/**
+	 * @param height
+	 */
+	public void setHeight(int height) {
+		this.height = height;
+	}
+
+	/**
+	 * @return
+	 */
+	public int getWidth() {
+		return width;
+	}
+
+	/**
+	 * @param width
+	 */
+	public void setWidth(int width) {
+		this.width = width;
+	}
+
+	/**
+	 * Returns the aspect ratio.
+	 * 
+	 * Aspect ratio is (width/height). So it's <1 for portrait and  >1 for
+	 * landscape.
+	 * 
+	 * @return
+	 */
+	public float getAspect() {
+		return (height > 0) ? ((float) width / (float) height) : 0;
+	}
+	
+	/**
+	 * Returns a scaled copy of this image size. 
+	 * 
+	 * @param scale
+	 * @return
+	 */
+	public ImageSize getScaled(float scale) {
+		return new ImageSize((int) (width * scale), (int) (height * scale));
+	}
+	
+	/* (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		String s = "[" + width + "x" + height + "]";
+		return s;
+	}
+}
--- a/servlet/src/digilib/image/JIMIDocuImage.java	Fri Apr 09 18:22:05 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,143 +0,0 @@
-/* JAIDocuImage -- Image class implementation using JIMI toolkit
-
-  Digital Image Library servlet components
-
-  Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de)
-
-  This program is free software; you can redistribute  it and/or modify it
-  under  the terms of  the GNU General  Public License as published by the
-  Free Software Foundation;  either version 2 of the  License, or (at your
-  option) any later version.
-   
-  Please read license.txt for the full details. A copy of the GPL
-  may be found at http://www.gnu.org/copyleft/lgpl.html
-
-  You should have received a copy of the GNU General Public License
-  along with this program; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-*/
-
-package digilib.image;
-
-import javax.servlet.*;
-import javax.servlet.http.*;
-import java.io.*;
-import java.util.*;
-
-import com.sun.jimi.core.*;
-import com.sun.jimi.core.raster.*;
-import com.sun.jimi.core.filters.*;
-
-import java.awt.*;
-import java.awt.image.*;
-
-import digilib.*;
-import digilib.io.*;
-
-
-public class JIMIDocuImage extends DocuImageImpl {
-
-  private JimiRasterImage img;
-  private ImageProducer imgp;
-
-  public JIMIDocuImage() {
-  }
-
-  public JIMIDocuImage(Utils u) {
-    util = u;
-  }
-
-  /**
-   *  load image file
-   */
-  public void loadImage(File f) throws FileOpException {
-    System.gc();
-    try {
-    img = Jimi.getRasterImage(f.toURL());
-    } catch (java.net.MalformedURLException e) {
-      util.dprintln(3, "ERROR(loadImage): MalformedURLException");
-    } catch (JimiException e) {
-      util.dprintln(3, "ERROR(loadImage): JIMIException");
-      throw new FileOpException("Unable to load File!"+e);
-    }
-    if (img == null) {
-      util.dprintln(3, "ERROR(loadImage): unable to load file");
-      throw new FileOpException("Unable to load File!");
-    }
-  }
-
-  /**
-   *  write image of type mt to Stream
-   */
-  public void writeImage(String mt, ServletResponse res)
-         throws FileOpException {
-    try {
-    // setup output
-    res.setContentType(mt);
-    // render output
-    Jimi.putImage(mt, imgp, res.getOutputStream());
-
-    } catch (JimiException e) {
-      throw new FileOpException("Error writing image!"+e);
-    } catch (IOException e) {
-      throw new FileOpException("Error writing image."+e);
-    }
-  }
-
-  public int getWidth() {
-    if (img != null) {
-      return img.getWidth();
-    }
-    return 0;
-  }
-
-  public int getHeight() {
-    if (img != null) {
-      return img.getHeight();
-    }
-    return 0;
-  }
-
-
-  /**
-   *  crop and scale image
-   *    take rectangle width,height at position x_off,y_off
-   *    and scale by scale
-   */
-   public void cropAndScale(int x_off, int y_off, int width, int height,
-         float scale, int qual) throws ImageOpException {
-
-    ImageFilter scaleFilter;
-    int destWidth = (int)(scale * (float)width);
-    int destHeight = (int)(scale * (float)height);
-
-    // setup Crop
-    ImageProducer croppedImg = img.getCroppedImageProducer(x_off, y_off, width, height);
-    //util.dprintln(3, "CROP:"+croppedImg.getWidth()+"x"+croppedImg.getHeight()); //DEBUG
-
-    if (croppedImg == null) {
-      util.dprintln(2, "ERROR(cropAndScale): error in crop");
-      throw new ImageOpException("Unable to crop");
-    }
-
-    // setup scale and interpolation quality
-    if (qual > 0) {
-      util.dprintln(4, "quality q1");
-      scaleFilter = new AreaAverageScaleFilter(destWidth, destHeight);
-    } else {
-      util.dprintln(4, "quality q0");
-      scaleFilter = new ReplicatingScaleFilter(destWidth, destHeight);
-    }
-
-    ImageProducer scaledImg = new FilteredImageSource(croppedImg, scaleFilter);
-
-    if (scaledImg == null) {
-      util.dprintln(2, "ERROR(cropAndScale): error in scale");
-      throw new ImageOpException("Unable to scale");
-    }
-
-    imgp = scaledImg;
-  }
-
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servlet/src/digilib/io/Directory.java	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,141 @@
+/* Directory -- Filesystem directory object
+
+  Digital Image Library servlet components
+
+  Copyright (C) 2003 Robert Casties (robcast@mail.berlios.de)
+
+  This program is free software; you can redistribute  it and/or modify it
+  under  the terms of  the GNU General  Public License as published by the
+  Free Software Foundation;  either version 2 of the  License, or (at your
+  option) any later version.
+   
+  Please read license.txt for the full details. A copy of the GPL
+  may be found at http://www.gnu.org/copyleft/lgpl.html
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+ * Created on 26.08.2003
+ *
+ */
+package digilib.io;
+
+import java.io.File;
+import java.util.Arrays;
+
+import org.apache.log4j.Logger;
+
+/** Class for filesystem directories
+ * @author casties
+ *
+ */
+public class Directory {
+
+	protected Logger logger = Logger.getLogger(this.getClass());
+
+	/** File object pointing to the directory */
+	protected File dir = null;
+	/** parent directory */
+	protected Directory parent = null;
+	/** list of filenames in the directory */
+	protected String[] list = null;
+
+	/** Default constructor.
+	 * 
+	 */
+	public Directory() {
+		super();
+	}
+	
+	/** Constructor taking a File object.
+	 * 
+	 * @param d
+	 */
+	public Directory(File d) {
+		dir = d;
+	}
+
+	/** Constructor taking a File object and a parent.
+	 * 
+	 * @param dir
+	 * @param parent
+	 */
+	public Directory(File dir, Directory parent) {
+		this.dir = dir;
+		this.parent = parent;
+	}
+
+	/** Constructor taking a directory name.
+	 * 
+	 * @param d
+	 */
+	public Directory(String dn) {
+		dir = new File(dn);
+	}
+	
+	
+	/** Reads the names of the files in the directory.
+	 * Fills the filenames array. Returns if the operation was successful.
+	 * 
+	 * @return
+	 */
+	public boolean readDir() {
+		if (dir != null) {
+			//logger.debug("reading dir: "+dir.getPath());
+			list = dir.list();
+			if (list != null) {
+				Arrays.sort(list);
+			}
+			//logger.debug("  done");
+		}
+		return (list != null);
+	}
+	
+	/**
+	 * @return
+	 */
+	public File getDir() {
+		return dir;
+	}
+
+	/**
+	 * @param dir
+	 */
+	public void setDir(File dir) {
+		this.dir = dir;
+	}
+	
+	/**
+	 * @return
+	 */
+	Directory getParent() {
+		return parent;
+	}
+
+	/**
+	 * @param parent
+	 */
+	void setParent(Directory parent) {
+		this.parent = parent;
+	}
+
+
+	/**
+	 * @return Returns the filenames.
+	 */
+	public String[] getFilenames() {
+		return list;
+	}
+	
+	/**
+	 * @param filenames The filenames to set.
+	 */
+	public void setFilenames(String[] filenames) {
+		this.list = filenames;
+	}
+	
+	public void clearFilenames() {
+		this.list = null;
+	}
+}
--- a/servlet/src/digilib/io/FileOpException.java	Fri Apr 09 18:22:05 2010 +0200
+++ b/servlet/src/digilib/io/FileOpException.java	Wed Aug 25 18:29:08 2010 +0200
@@ -1,33 +1,35 @@
 /*  FileOpException -- Exception class for file operations
 
-  Digital Image Library servlet components
+ Digital Image Library servlet components
 
-  Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de)
+ Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de)
 
-  This program is free software; you can redistribute  it and/or modify it
-  under  the terms of  the GNU General  Public License as published by the
-  Free Software Foundation;  either version 2 of the  License, or (at your
-  option) any later version.
-   
-  Please read license.txt for the full details. A copy of the GPL
-  may be found at http://www.gnu.org/copyleft/lgpl.html
+ This program is free software; you can redistribute  it and/or modify it
+ under  the terms of  the GNU General  Public License as published by the
+ Free Software Foundation;  either version 2 of the  License, or (at your
+ option) any later version.
+ 
+ Please read license.txt for the full details. A copy of the GPL
+ may be found at http://www.gnu.org/copyleft/lgpl.html
 
-  You should have received a copy of the GNU General Public License
-  along with this program; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
-*/
+ */
 
 package digilib.io;
 
 import java.io.IOException;
 
-
 public class FileOpException extends IOException {
 
-  public FileOpException() {
-  }
-  public FileOpException(String s) {
-    super(s);
-  }
+	private static final long serialVersionUID = 7299056561734277644L;
+
+	public FileOpException() {
+	}
+
+	public FileOpException(String s) {
+		super(s);
+	}
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servlet/src/digilib/io/ImageFile.java	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,140 @@
+/* ImageFile.java -- digilib image file class.
+
+  Digital Image Library servlet components
+
+  Copyright (C) 2003 Robert Casties (robcast@mail.berlios.de)
+
+  This program is free software; you can redistribute  it and/or modify it
+  under  the terms of  the GNU General  Public License as published by the
+  Free Software Foundation;  either version 2 of the  License, or (at your
+  option) any later version.
+   
+  Please read license.txt for the full details. A copy of the GPL
+  may be found at http://www.gnu.org/copyleft/lgpl.html
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+ * Created on 25.02.2003
+ */
+ 
+package digilib.io;
+
+import java.io.File;
+
+import digilib.image.ImageSize;
+
+/**
+ * @author casties
+ */
+public class ImageFile {
+	
+	// file name
+	private String filename = null;
+	// parent ImageFileset
+	private ImageFileset parent = null;
+	// parent directory
+	private Directory dir = null;
+	// mime file type
+	private String mimetype = null;
+	// image size in pixels
+	private ImageSize pixelSize = null;
+
+	public ImageFile(String fn, ImageFileset parent, Directory dir) {
+		this.filename = fn;
+		this.parent = parent;
+		this.dir = dir;
+	}
+	
+	public ImageFile(String fn) {
+		File f = new File(fn);
+		this.dir = new Directory(f.getParentFile());
+		this.filename = f.getName();
+	}
+	
+	/** Returns the file name (without path).
+	 * 
+	 * @return
+	 */
+	public String getName() {
+		return filename;
+	}
+
+
+	/**
+	 * @return File
+	 */
+	public File getFile() {
+		if (dir == null) {
+			return null;
+		}
+		File f = new File(dir.getDir(), filename);
+		return f;
+	}
+
+	/**
+	 * @return ImageSize
+	 */
+	public ImageSize getSize() {
+		return pixelSize;
+	}
+
+	/**
+	 * @return String
+	 */
+	public String getMimetype() {
+		return mimetype;
+	}
+
+	/**
+	 * Sets the imageSize.
+	 * @param imageSize The imageSize to set
+	 */
+	public void setSize(ImageSize imageSize) {
+		this.pixelSize = imageSize;
+		// pass on to parent
+		if (this.parent != null) {
+			this.parent.setAspect(imageSize);
+		}
+	}
+
+	/**
+	 * Sets the mimetype.
+	 * @param mimetype The mimetype to set
+	 */
+	public void setMimetype(String filetype) {
+		this.mimetype = filetype;
+	}
+
+	/**
+	 * @return ImageFileset
+	 */
+	public ImageFileset getParent() {
+		return parent;
+	}
+
+	/**
+	 * Sets the parent.
+	 * @param parent The parent to set
+	 */
+	public void setParent(ImageFileset parent) {
+		this.parent = parent;
+	}
+
+	/**
+	 * @return boolean
+	 */
+	public boolean isChecked() {
+		return (pixelSize != null);
+	}
+	
+	/** Returns the aspect ratio of the image (width/height).
+	 * 
+	 * @return
+	 */
+	public float getAspect() {
+		return (pixelSize != null) ? pixelSize.getAspect() : 0;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servlet/src/digilib/io/SVGFile.java	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,60 @@
+/* SVGFile -- Class for SVG files
+
+  Digital Image Library servlet components
+
+  Copyright (C) 2003 Robert Casties (robcast@mail.berlios.de)
+
+  This program is free software; you can redistribute  it and/or modify it
+  under  the terms of  the GNU General  Public License as published by the
+  Free Software Foundation;  either version 2 of the  License, or (at your
+  option) any later version.
+   
+  Please read license.txt for the full details. A copy of the GPL
+  may be found at http://www.gnu.org/copyleft/lgpl.html
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+ * Created on 25.11.2003 by casties
+ *
+ */
+package digilib.io;
+
+import java.io.File;
+
+/** Class for SVG files.
+ * 
+ * @author casties
+ *
+ */
+public class SVGFile extends DocuDirent {
+	/** this is a text file */
+	protected static int fileClass = FileOps.CLASS_SVG;
+	/** our File instance */
+	protected File file = null;
+	
+	/** Constructor taking a file.
+	 * 
+	 * @param f
+	 */
+	public SVGFile(File f) {
+		this.file = f;
+	}
+
+	/* (non-Javadoc)
+	 * @see digilib.io.DocuDirent#checkMeta()
+	 */
+	public void checkMeta() {
+		// Auto-generated method stub
+
+	}
+
+	/* (non-Javadoc)
+	 * @see digilib.io.DocuDirent#getFile()
+	 */
+	public File getFile() {
+		return file;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servlet/src/digilib/io/TextFile.java	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,60 @@
+/* TextFile.java -- Class for text files
+
+  Digital Image Library servlet components
+
+  Copyright (C) 2003 Robert Casties (robcast@mail.berlios.de)
+
+  This program is free software; you can redistribute  it and/or modify it
+  under  the terms of  the GNU General  Public License as published by the
+  Free Software Foundation;  either version 2 of the  License, or (at your
+  option) any later version.
+   
+  Please read license.txt for the full details. A copy of the GPL
+  may be found at http://www.gnu.org/copyleft/lgpl.html
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+ * Created on 15.09.2003 by casties
+ *
+ */
+package digilib.io;
+
+import java.io.File;
+
+/** Class for text files.
+ * 
+ * @author casties
+ *
+ */
+public class TextFile extends DocuDirent {
+	/** this is a text file */
+	protected static int fileClass = FileOps.CLASS_TEXT;
+	/** our File instance */
+	protected File file = null;
+	
+	/** Constructor taking a file.
+	 * 
+	 * @param f
+	 */
+	public TextFile(File f) {
+		this.file = f;
+	}
+
+	/* (non-Javadoc)
+	 * @see digilib.io.DocuDirent#checkMeta()
+	 */
+	public void checkMeta() {
+		// TODO Auto-generated method stub
+
+	}
+
+	/* (non-Javadoc)
+	 * @see digilib.io.DocuDirent#getFile()
+	 */
+	public File getFile() {
+		return file;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servlet/src/digilib/servlet/Raster.java	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,328 @@
+/*
+ * Raster -- Servlet for displaying rasterized SVG graphics
+ * 
+ * Digital Image Library servlet components
+ * 
+ * Copyright (C) 2003 Robert Casties (robcast@mail.berlios.de)
+ * 
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ * 
+ * Please read license.txt for the full details. A copy of the GPL may be found
+ * at http://www.gnu.org/copyleft/lgpl.html You should have received a copy of
+ * the GNU General Public License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307 USA
+ * 
+ * Created on 25.11.2003 by casties
+ */
+
+package digilib.servlet;
+
+import java.awt.geom.Rectangle2D;
+import java.io.IOException;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.apache.batik.dom.svg.SAXSVGDocumentFactory;
+import org.apache.batik.transcoder.TranscoderException;
+import org.apache.batik.transcoder.TranscoderInput;
+import org.apache.batik.transcoder.TranscoderOutput;
+import org.apache.batik.transcoder.image.PNGTranscoder;
+import org.apache.batik.util.XMLResourceDescriptor;
+import org.apache.log4j.Logger;
+import org.w3c.dom.svg.SVGDocument;
+import org.w3c.dom.svg.SVGSVGElement;
+
+import digilib.auth.AuthOps;
+import digilib.io.DocuDirCache;
+import digilib.io.DocuDirectory;
+import digilib.io.FileOpException;
+import digilib.io.FileOps;
+import digilib.io.SVGFile;
+
+/**
+ * Servlet for displaying SVG graphics
+ * 
+ * @author casties
+ *  
+ */
+public class Raster extends HttpServlet {
+
+	private static final long serialVersionUID = -7756999389932675241L;
+
+	/** Servlet version */
+	public static String servletVersion = "0.2b1";
+	/** DigilibConfiguration instance */
+	DigilibConfiguration dlConfig = null;
+	/** general logger */
+	Logger logger = Logger.getLogger("digilib.raster");
+	/** AuthOps instance */
+	AuthOps authOp;
+	/** DocuDirCache instance */
+	DocuDirCache dirCache;
+	/** SVG document factory */
+	SAXSVGDocumentFactory docFactory;
+
+	/** use authentication */
+	boolean useAuthentication = false;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
+	 */
+	public void init(ServletConfig config) throws ServletException {
+		super.init(config);
+
+		System.out.println(
+			"***** Digital Image Library SVG Render Servlet (version "
+				+ servletVersion
+				+ ") *****");
+
+		// get our ServletContext
+		ServletContext context = config.getServletContext();
+		// see if there is a Configuration instance
+		dlConfig =
+			(DigilibConfiguration) context.getAttribute(
+				"digilib.servlet.configuration");
+		if (dlConfig == null) {
+			// no config
+			throw new ServletException("ERROR: No Configuration!");
+		}
+		// say hello in the log file
+		logger.info(
+			"***** Digital Image Library SVG Render Servlet (version "
+				+ servletVersion
+				+ ") *****");
+
+		// set our AuthOps
+		useAuthentication = dlConfig.getAsBoolean("use-authorization");
+		authOp = (AuthOps) dlConfig.getValue("servlet.auth.op");
+		// DocuDirCache instance
+		dirCache = (DocuDirCache) dlConfig.getValue("servlet.dir.cache");
+		// parser name as a String (I hate you for not using JAXP, Batik!)
+		String parserName = null;
+		try {
+			// try the proper JAXP way
+			parserName = SAXParserFactory.newInstance().newSAXParser().getXMLReader().getClass().getName();
+		} catch (Exception e) {
+			// fall back to Batik's hack
+			parserName = XMLResourceDescriptor.getXMLParserClassName();
+		}
+		logger.debug("parser name: "+parserName);
+		docFactory = new SAXSVGDocumentFactory(parserName);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest,
+	 *      javax.servlet.http.HttpServletResponse)
+	 */
+	protected void doGet(
+		HttpServletRequest request,
+		HttpServletResponse response)
+		throws ServletException, IOException {
+		// create new request with defaults
+		DigilibRequest dlReq = new DigilibRequest();
+		// set with request parameters
+		dlReq.setWithRequest(request);
+		// add DigilibRequest to ServletRequest
+		request.setAttribute("digilib.servlet.request", dlReq);
+		// do the processing
+		processRequest(request, response);
+	}
+
+	/*
+	 */
+	protected void doPost(
+		HttpServletRequest request,
+		HttpServletResponse response)
+		throws ServletException, IOException {
+		// create new request with defaults
+		DigilibRequest dlReq = new DigilibRequest();
+		// set with request parameters
+		dlReq.setWithRequest(request);
+		// add DigilibRequest to ServletRequest
+		request.setAttribute("digilib.servlet.request", dlReq);
+		// do the processing
+		processRequest(request, response);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.servlet.http.HttpServlet#getLastModified(javax.servlet.http.HttpServletRequest)
+	 */
+	protected long getLastModified(HttpServletRequest request) {
+		logger.debug("GetLastModified from " + request.getRemoteAddr()
+				+ " for " + request.getQueryString());
+		long mtime = -1;
+		// create new request with defaults
+		DigilibRequest dlReq = new DigilibRequest();
+		// set with request parameters
+		dlReq.setWithRequest(request);
+		// find the requested file
+		
+		// get PathInfo
+		String loadPathName = dlReq.getFilePath();
+		// find the file(set)
+		SVGFile fileToLoad =
+			(SVGFile) dirCache.getFile(
+				loadPathName,
+				dlReq.getAsInt("pn"),
+				FileOps.CLASS_SVG);
+		if (fileToLoad != null) {
+			DocuDirectory dd = (DocuDirectory) fileToLoad.getParent();
+			mtime = dd.getDirMTime() / 1000 * 1000;
+		}
+		return mtime;
+	}
+
+	
+	
+	
+	protected void processRequest(
+		HttpServletRequest request,
+		HttpServletResponse response)
+		throws ServletException, IOException {
+
+		logger.debug("request: "+request.getQueryString());
+		// time for benchmarking
+		long startTime = System.currentTimeMillis();
+
+		/*
+		 * request parameters
+		 */
+		DigilibRequest dlRequest =
+			(DigilibRequest) request.getAttribute("digilib.servlet.request");
+
+		// destination image width
+		int paramDW = dlRequest.getAsInt("dw");
+		// destination image height
+		int paramDH = dlRequest.getAsInt("dh");
+		// relative area x_offset (0..1)
+		float paramWX = dlRequest.getAsFloat("wx");
+		// relative area y_offset
+		float paramWY = dlRequest.getAsFloat("wy");
+		// relative area width (0..1)
+		double paramWW = dlRequest.getAsFloat("ww");
+		// relative area height
+		double paramWH = dlRequest.getAsFloat("wh");
+
+		try {
+
+			/*
+			 * find the file to load/send
+			 */
+
+			// get PathInfo
+			String loadPathName = dlRequest.getFilePath();
+			// find the file(set)
+			SVGFile fileToLoad =
+				(SVGFile) dirCache.getFile(
+					loadPathName,
+					dlRequest.getAsInt("pn"),
+					FileOps.CLASS_SVG);
+			if (fileToLoad == null) {
+				throw new FileOpException(
+					"File "
+						+ loadPathName
+						+ "("
+						+ dlRequest.getAsString("pn")
+						+ ") not found.");
+			}
+
+			/*
+			 * read the SVG document
+			 */
+
+			// read the document
+			SVGDocument doc =
+				docFactory.createSVGDocument(
+					fileToLoad.getFile().toURI().toString());
+			// extract the SVG root
+			SVGSVGElement svgroot = doc.getRootElement();
+			// get document width and height
+			float imgWidth = svgroot.getWidth().getBaseVal().getValue();
+			float imgHeight = svgroot.getHeight().getBaseVal().getValue();
+			logger.debug("IMG: "+imgWidth+"x"+imgHeight);
+			
+			/*
+			 * set up the transcoder
+			 */
+
+			// create a PNG transcoder
+			PNGTranscoder transcoder = new PNGTranscoder();
+			// create the transcoder input
+			//InputStream is = new FileInputStream(fileToLoad.getFile());
+			TranscoderInput input = new TranscoderInput(doc);
+			logger.info("Loading: " + fileToLoad.getFile());
+			// create the transcoder output
+			TranscoderOutput output =
+				new TranscoderOutput(response.getOutputStream());
+			// output is image/png
+			response.setContentType("image/png");
+
+			// area of interest
+			Rectangle2D aoi =
+			new Rectangle2D.Double(
+					paramWX * imgWidth,
+					paramWY * imgHeight,
+					paramWW * imgWidth,
+					paramWH * imgHeight);
+			transcoder.addTranscodingHint(PNGTranscoder.KEY_AOI, aoi);
+
+			// destination image dimensions
+			if (paramDW > 0) {
+				transcoder.addTranscodingHint(
+					PNGTranscoder.KEY_WIDTH,
+					new Float(paramDW));
+			}
+			if (paramDH > 0) {
+				transcoder.addTranscodingHint(
+					PNGTranscoder.KEY_HEIGHT,
+					new Float(paramDH));
+			}
+
+			/*
+			 * transcode
+			 */
+
+			transcoder.transcode(input, output);
+
+			logger.info(
+				"Done in " + (System.currentTimeMillis() - startTime) + "ms");
+
+			/*
+			 * error handling
+			 */
+			
+		} catch (FileOpException e) {
+			logger.error("ERROR: File IO Error: ", e);
+			try {
+				ServletOps.htmlMessage("ERROR: File IO Error: " + e, response);
+			} catch (Exception ex) {
+			} // so we don't get a loop
+		} catch (TranscoderException e) {
+			logger.error("ERROR: SVG encoder error: ", e);
+			try {
+				ServletOps.htmlMessage(
+					"ERROR: SVG encoder error: " + e,
+					response);
+			} catch (Exception ex) {
+			} // so we don't get a loop
+		}
+
+	}
+
+}
--- a/servlet/src/digilib/servlet/ServletOps.java	Fri Apr 09 18:22:05 2010 +0200
+++ b/servlet/src/digilib/servlet/ServletOps.java	Wed Aug 25 18:29:08 2010 +0200
@@ -1,156 +1,225 @@
-/* ServletOps -- Servlet utility class
-
-  Digital Image Library servlet components
-
-  Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de)
-
-  This program is free software; you can redistribute  it and/or modify it
-  under  the terms of  the GNU General  Public License as published by the
-  Free Software Foundation;  either version 2 of the  License, or (at your
-  option) any later version.
-   
-  Please read license.txt for the full details. A copy of the GPL
-  may be found at http://www.gnu.org/copyleft/lgpl.html
-
-  You should have received a copy of the GNU General Public License
-  along with this program; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-*/
+/*
+ * ServletOps -- Servlet utility class
+ * 
+ * Digital Image Library servlet components
+ * 
+ * Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de)
+ * 
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ * 
+ * Please read license.txt for the full details. A copy of the GPL may be found
+ * at http://www.gnu.org/copyleft/lgpl.html
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ *  
+ */
 
 package digilib.servlet;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
-import java.io.*;
-import java.util.*;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.util.StringTokenizer;
 
-import digilib.*;
-import digilib.io.*;
+import javax.servlet.ServletConfig;
+import javax.servlet.http.HttpServletResponse;
 
+import org.apache.log4j.Logger;
+
+import digilib.io.FileOpException;
+import digilib.io.FileOps;
 
 public class ServletOps {
 
-  private Utils util = null;
-  private Hashtable confTable = null;
-
-  public ServletOps() {
-    util = new Utils();
-  }
+	private static Logger logger = Logger.getLogger("servlet.op");
 
-  public ServletOps(Utils u) {
-    util = u;
-  }
+	/**
+	 * convert a string with a list of pathnames into an array of strings using
+	 * the system's path seperator string
+	 */
+	public static String[] getPathArray(String paths) {
+		// split list into directories
+		StringTokenizer dirs = new StringTokenizer(paths,
+				java.io.File.pathSeparator);
+		int n = dirs.countTokens();
+		if (n < 1) {
+			return null;
+		}
+		// add directories into array
+		String[] pathArray = new String[n];
+		for (int i = 0; i < n; i++) {
+			pathArray[i] = dirs.nextToken();
+		}
+		return pathArray;
+	}
 
-  public ServletOps(Utils u, ServletConfig sc) throws ServletException {
-    util = u;
-    setConfig(sc);
-  }
-
-  public void setUtils(Utils u) {
-    util = u;
-  }
+	/**
+	 * get a real File for a web app File.
+	 * 
+	 * If the File is not absolute the path is appended to the base directory
+	 * of the web-app.
+	 * 
+	 * @param file
+	 * @param sc
+	 * @return
+	 */
+	public static File getFile(File f, ServletConfig sc) {
+		// is the filename absolute?
+		if (!f.isAbsolute()) {
+			// relative path -> use getRealPath to resolve in WEB-INF
+			String fn = sc.getServletContext().getRealPath(f.getPath());
+			f = new File(fn);
+		}
+		return f;
+	}
 
-  /**
-   * read parameter list from the XML file in init parameter "config-file"
-   */
-  public void setConfig(ServletConfig c) throws ServletException {
-    // reset parameter table
-    confTable = null;
-    if (c == null) {
-      return;
-    }
-    // get config file name
-    String fn = c.getInitParameter("config-file");
-    if (fn == null) {
-      util.dprintln(4, "setConfig: no param config-file");
-      return;
-    }
-    File f = new File(fn);
-    // setup config file list reader
-    XMLListLoader lilo = new XMLListLoader("digilib-config", "parameter", "name", "value");
-    try {
-      confTable = lilo.loadURL(f.toURL().toString());
-    } catch (Exception e) {
-      util.dprintln(4, "setConfig: unable to read file "+fn);
-      throw new ServletException(e);
-    }
-  }
+	/**
+	 * get a real file name for a web app file pathname.
+	 * 
+	 * If filename starts with "/" its treated as absolute else the path is
+	 * appended to the base directory of the web-app.
+	 * 
+	 * @param filename
+	 * @param sc
+	 * @return
+	 */
+	public static String getFile(String filename, ServletConfig sc) {
+		File f = new File(filename);
+		// is the filename absolute?
+		if (!f.isAbsolute()) {
+			// relative path -> use getRealPath to resolve in WEB-INF
+			filename = sc.getServletContext()
+					.getRealPath(filename);
+		}
+		return filename;
+	}
 
-  /**
-   *  print a servlet response and exit
-   */
-  public static void htmlMessage(String s, HttpServletResponse response) throws IOException {
-    response.setContentType("text/html; charset=iso-8859-1");
-    PrintWriter out = response.getWriter();
-    out.println("<html>");
-    out.println("<head><title>Scaler</title></head>");
-    out.println("<body>");
-    out.println("<p>"+s+"</p>");
-    out.println("</body></html>");
-  }
+	/**
+	 * get a real File for a config File.
+	 * 
+	 * If the File is not absolute the path is appended to the WEB-INF directory
+	 * of the web-app.
+	 * 
+	 * @param file
+	 * @param sc
+	 * @return
+	 */
+	public static File getConfigFile(File f, ServletConfig sc) {
+	    String fn = f.getPath();
+		// is the filename absolute?
+		if (f.isAbsolute()) {
+		    // does it exist?
+		    if (f.canRead()) {
+		        // fine
+		        return f;
+		    } else {
+		        // try just the filename as relative
+		        fn = f.getName();
+		    }
+		}
+		// relative path -> use getRealPath to resolve in WEB-INF
+		String newfn = sc.getServletContext().getRealPath(
+		        "WEB-INF/" + fn);
+		f = new File(newfn);
+		return f;
+	}
 
-  /**
-   *  get a parameter from request and return it if set, otherwise return default
-   */
-  public int tryToGetParam(String s, int i, HttpServletRequest r) {
-    try {
-      i = Integer.parseInt(r.getParameter(s));
-    } catch(Exception e) {
-      util.dprintln(4, "trytoGetParam(int) failed on param "+s);
-      //e.printStackTrace();
-    }
-    return i;
-  }
-  public float tryToGetParam(String s, float f, HttpServletRequest r) {
-    try {
-      f = Float.parseFloat(r.getParameter(s));
-    } catch(Exception e) {
-      util.dprintln(4, "trytoGetParam(float) failed on param "+s);
-      //e.printStackTrace();
-    }
-    return f;
-  }
-  public String tryToGetParam(String s, String x, HttpServletRequest r) {
-    if (r.getParameter(s) != null) {
-      x = r.getParameter(s);
-    } else {
-      util.dprintln(4, "trytoGetParam(string) failed on param "+s);
-    }
-    return x;
-  }
+	/**
+	 * get a real file name for a config file pathname.
+	 * 
+	 * If filename starts with "/" its treated as absolute else the path is
+	 * appended to the WEB-INF directory of the web-app.
+	 * 
+	 * @param filename
+	 * @param sc
+	 * @return
+	 */
+	public static String getConfigFile(String filename, ServletConfig sc) {
+		File f = new File(filename);
+		// is the filename absolute?
+		if (!f.isAbsolute()) {
+			// relative path -> use getRealPath to resolve in WEB-INF
+			filename = sc.getServletContext()
+					.getRealPath("WEB-INF/" + filename);
+		}
+		return filename;
+	}
 
+	/**
+	 * print a servlet response and exit
+	 */
+	public static void htmlMessage(String msg, HttpServletResponse response)
+			throws IOException {
+		htmlMessage("Scaler", msg, response);
+	}
+
+	/**
+	 * print a servlet response and exit
+	 */
+	public static void htmlMessage(String title, String msg,
+			HttpServletResponse response) throws IOException {
+		response.setContentType("text/html; charset=iso-8859-1");
+		PrintWriter out = response.getWriter();
+		out.println("<html>");
+		out.println("<head><title>" + title + "</title></head>");
+		out.println("<body>");
+		out.println("<p>" + msg + "</p>");
+		out.println("</body></html>");
+	}
 
-  /**
-   *  get an init parameter from config and return it if set, otherwise return default
-   */
-  public int tryToGetInitParam(String s, int i) {
-    //System.out.println("trytogetInitParam("+s+", "+i+")");
-    try {
-      //System.out.println("trytogetInitParam: "+(String)confTable.get(s));
-      i = Integer.parseInt((String)confTable.get(s));
-    } catch(Exception e) {
-      util.dprintln(4, "trytogetInitParam(int) failed on param "+s);
-      //e.printStackTrace();
-    }
-    return i;
-  }
-  public float tryToGetInitParam(String s, float f) {
-    try {
-      f = Float.parseFloat((String)confTable.get(s));
-    } catch(Exception e) {
-      util.dprintln(4, "trytoGetInitParam(float) failed on param "+s);
-      //e.printStackTrace();
-    }
-    return f;
-  }
-  public String tryToGetInitParam(String s, String x) {
-    if ((confTable != null)&&((String)confTable.get(s) != null)) {
-      x = (String)confTable.get(s);
-    } else {
-      util.dprintln(4, "trytoGetInitParam(string) failed on param "+s);
-    }
-    return x;
-  }
+	/**
+	 * Transfers an image file as-is with the mime type mt.
+	 * 
+	 * The local file is copied to the <code>OutputStream</code> of the
+	 * <code>ServletResponse</code>. If mt is null then the mime-type is
+	 * auto-detected with mimeForFile.
+	 * 
+	 * @param mt
+	 *            mime-type of the file.
+	 * @param f
+	 *            Image file to be sent.
+	 * @param res
+	 *            ServletResponse where the image file will be sent.
+	 * @throws FileOpException
+	 *             Exception is thrown for a IOException.
+	 */
+	public static void sendFile(File f, String mt,
+			HttpServletResponse response) throws FileOpException {
+		logger.debug("sendRawFile(" + mt + ", " + f + ")");
+		if (mt == null) {
+			// auto-detect mime-type
+			mt = FileOps.mimeForFile(f);
+			if (mt == null) {
+				throw new FileOpException("Unknown file type.");
+			}
+		}
+		response.setContentType(mt);
+		// open file
+		try {
+			if (mt.equals("application/octet-stream")) {
+				response.addHeader("Content-Disposition",
+						"attachment; filename=\"" + f.getName() + "\"");
+			}
+			FileInputStream inFile = new FileInputStream(f);
+			OutputStream outStream = response.getOutputStream();
+			byte dataBuffer[] = new byte[4096];
+			int len;
+			while ((len = inFile.read(dataBuffer)) != -1) {
+				// copy out file
+				outStream.write(dataBuffer, 0, len);
+			}
+			inFile.close();
+			response.flushBuffer();
+		} catch (IOException e) {
+			throw new FileOpException("Unable to send file.");
+		}
+	}
 
-}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servlet/src/digilib/servlet/Texter.java	Wed Aug 25 18:29:08 2010 +0200
@@ -0,0 +1,190 @@
+/* Texter.java -- Servlet for displaying text  
+ * Digital Image Library servlet components  
+ * Copyright (C) 2003 Robert Casties (robcast@mail.berlios.de)
+ *  
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.  Please read license.txt for the full details. A copy of
+ * the GPL may be found at http://www.gnu.org/copyleft/lgpl.html  
+ * You should have received a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA  
+ * 
+ * Created on 15.09.2003 by casties  
+ */
+
+package digilib.servlet;
+
+import java.io.IOException;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.log4j.Logger;
+
+import digilib.auth.AuthOps;
+import digilib.io.DocuDirCache;
+import digilib.io.FileOpException;
+import digilib.io.FileOps;
+import digilib.io.TextFile;
+
+/**
+ * Servlet for displaying text
+ * 
+ * 
+ * @author casties
+ *  
+ */
+public class Texter extends HttpServlet {
+
+	private static final long serialVersionUID = -8539178734033662322L;
+
+	/** Servlet version */
+	public static String tlVersion = "0.1b2";
+
+	/** DigilibConfiguration instance */
+	DigilibConfiguration dlConfig = null;
+
+	/** general logger */
+	Logger logger = Logger.getLogger("digilib.texter");
+
+	/** FileOps instance */
+	FileOps fileOp;
+
+	/** AuthOps instance */
+	AuthOps authOp;
+
+	/** ServletOps instance */
+	ServletOps servletOp;
+
+	/** DocuDirCache instance */
+	DocuDirCache dirCache;
+
+	/** use authentication */
+	boolean useAuthentication = false;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
+	 */
+	public void init(ServletConfig config) throws ServletException {
+		super.init(config);
+
+		System.out.println("***** Digital Image Library Text Servlet (version "
+				+ tlVersion + ") *****");
+
+		// get our ServletContext
+		ServletContext context = config.getServletContext();
+		// see if there is a Configuration instance
+		dlConfig = (DigilibConfiguration) context
+				.getAttribute("digilib.servlet.configuration");
+		if (dlConfig == null) {
+			// no Configuration
+			throw new ServletException("No Configuration!");
+		}
+		// say hello in the log file
+		logger.info("***** Digital Image Library Text Servlet (version "
+				+ tlVersion + ") *****");
+
+		// set our AuthOps
+		useAuthentication = dlConfig.getAsBoolean("use-authorization");
+		authOp = (AuthOps) dlConfig.getValue("servlet.auth.op");
+		// DocuDirCache instance
+		dirCache = (DocuDirCache) dlConfig.getValue("servlet.dir.cache");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest,
+	 *      javax.servlet.http.HttpServletResponse)
+	 */
+	protected void doGet(HttpServletRequest request,
+			HttpServletResponse response) throws ServletException, IOException {
+		// create new request with defaults
+		DigilibRequest dlReq = new DigilibRequest();
+		// set with request parameters
+		dlReq.setWithRequest(request);
+		// add DigilibRequest to ServletRequest
+		request.setAttribute("digilib.servlet.request", dlReq);
+		// do the processing
+		processRequest(request, response);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest,
+	 *      javax.servlet.http.HttpServletResponse)
+	 */
+	protected void doPost(HttpServletRequest request,
+			HttpServletResponse response) throws ServletException, IOException {
+		// create new request with defaults
+		DigilibRequest dlReq = new DigilibRequest();
+		// set with request parameters
+		dlReq.setWithRequest(request);
+		// add DigilibRequest to ServletRequest
+		request.setAttribute("digilib.servlet.request", dlReq);
+		// do the processing
+		processRequest(request, response);
+	}
+
+	protected void processRequest(HttpServletRequest request,
+			HttpServletResponse response) throws ServletException, IOException {
+		
+		/*
+		 * request parameters
+		 */
+		DigilibRequest dlRequest = (DigilibRequest) request.getAttribute("digilib.servlet.request");
+		try {
+			
+			/*
+			 * find the file to load/send
+			 */
+			TextFile f = getTextFile(dlRequest, "/txt");
+			if (f != null) {
+				ServletOps.sendFile(f.getFile(), null, response);
+			} else {
+				f = getTextFile(dlRequest, "");
+				if (f != null) {
+					ServletOps.sendFile(f.getFile(),	null, response);
+				} else {
+					response.sendError(HttpServletResponse.SC_NOT_FOUND, "Text-File not found!");
+					//ServletOps.htmlMessage("No Text-File!", response);
+				}
+			}
+			
+		} catch (FileOpException e) {
+			logger.error("ERROR: File IO Error: ", e);
+			try {
+				ServletOps.htmlMessage("ERROR: File IO Error: " + e, response);
+			} catch (FileOpException ex) {
+			} // so we don't get a loop
+		}
+	}
+	
+
+	/**
+	 * Looks for a file in the given subDirectory.
+	 * 
+	 * @param dlRequest
+	 *            The received request which has the file path.
+	 * @param subDirectory
+	 *            The subDirectory of the file path where the file should
+	 *            be found.
+	 * @return The wanted Textfile or null if there wasn't a file.
+	 */
+
+	private TextFile getTextFile(DigilibRequest dlRequest, String subDirectory) {
+		String loadPathName = dlRequest.getFilePath() + subDirectory;
+		// find the file(set)
+		return (TextFile) dirCache.getFile(loadPathName, dlRequest
+				.getAsInt("pn"), FileOps.CLASS_TEXT);
+	}
+}
\ No newline at end of file