diff --git a/sw/in_progress/pow/InstallCert.java b/sw/in_progress/pow/InstallCert.java
new file mode 100644
index 0000000000..f979cc7868
--- /dev/null
+++ b/sw/in_progress/pow/InstallCert.java
@@ -0,0 +1,188 @@
+
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * - Neither the name of Sun Microsystems nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/**
+ * @see http://blogs.sun.com/gc/entry/unable_to_find_valid_certification
+ */
+import java.io.*;
+
+import java.security.*;
+import java.security.cert.*;
+
+import javax.net.ssl.*;
+
+public class InstallCert {
+
+ public static void main(String[] args) throws Exception {
+ String host;
+ int port;
+ char[] passphrase;
+ if ((args.length == 1) || (args.length == 2)) {
+ String[] c = args[0].split(":");
+ host = c[0];
+ port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);
+ String p = (args.length == 1) ? "changeit" : args[1];
+ passphrase = p.toCharArray();
+ } else {
+ System.out.println("Usage: java InstallCert [:port] [passphrase]");
+ return;
+ }
+
+ File file = new File("jssecacerts");
+ if (file.isFile() == false) {
+ char SEP = File.separatorChar;
+ File dir = new File(System.getProperty("java.home") + SEP
+ + "lib" + SEP + "security");
+ file = new File(dir, "jssecacerts");
+ if (file.isFile() == false) {
+ file = new File(dir, "cacerts");
+ }
+ }
+ System.out.println("Loading KeyStore " + file + "...");
+ InputStream in = new FileInputStream(file);
+ KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
+ ks.load(in, passphrase);
+ in.close();
+
+ SSLContext context = SSLContext.getInstance("TLS");
+ TrustManagerFactory tmf =
+ TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
+ tmf.init(ks);
+ X509TrustManager defaultTrustManager = (X509TrustManager)tmf.getTrustManagers()[0];
+ SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
+ context.init(null, new TrustManager[] {tm}, null);
+ SSLSocketFactory factory = context.getSocketFactory();
+
+ System.out.println("Opening connection to " + host + ":" + port + "...");
+ SSLSocket socket = (SSLSocket)factory.createSocket(host, port);
+ socket.setSoTimeout(10000);
+ try {
+ System.out.println("Starting SSL handshake...");
+ socket.startHandshake();
+ socket.close();
+ System.out.println();
+ System.out.println("No errors, certificate is already trusted");
+ } catch (SSLException e) {
+ System.out.println();
+ e.printStackTrace(System.out);
+ }
+
+ X509Certificate[] chain = tm.chain;
+ if (chain == null) {
+ System.out.println("Could not obtain server certificate chain");
+ return;
+ }
+
+ BufferedReader reader =
+ new BufferedReader(new InputStreamReader(System.in));
+
+ System.out.println();
+ System.out.println("Server sent " + chain.length + " certificate(s):");
+ System.out.println();
+ MessageDigest sha1 = MessageDigest.getInstance("SHA1");
+ MessageDigest md5 = MessageDigest.getInstance("MD5");
+ for (int i = 0; i < chain.length; i++) {
+ X509Certificate cert = chain[i];
+ System.out.println
+ (" " + (i + 1) + " Subject " + cert.getSubjectDN());
+ System.out.println(" Issuer " + cert.getIssuerDN());
+ sha1.update(cert.getEncoded());
+ System.out.println(" sha1 " + toHexString(sha1.digest()));
+ md5.update(cert.getEncoded());
+ System.out.println(" md5 " + toHexString(md5.digest()));
+ System.out.println();
+ }
+
+ System.out.println("Enter certificate to add to trusted keystore or 'q' to quit: [1]");
+ String line = reader.readLine().trim();
+ int k;
+ try {
+ k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1;
+ } catch (NumberFormatException e) {
+ System.out.println("KeyStore not changed");
+ return;
+ }
+
+ X509Certificate cert = chain[k];
+ String alias = host + "-" + (k + 1);
+ ks.setCertificateEntry(alias, cert);
+
+ OutputStream out = new FileOutputStream("jssecacerts");
+ ks.store(out, passphrase);
+ out.close();
+
+ System.out.println();
+ System.out.println(cert);
+ System.out.println();
+ System.out.println
+ ("Added certificate to keystore 'jssecacerts' using alias '"
+ + alias + "'");
+ }
+
+ private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();
+
+ private static String toHexString(byte[] bytes) {
+ StringBuilder sb = new StringBuilder(bytes.length * 3);
+ for (int b : bytes) {
+ b &= 0xff;
+ sb.append(HEXDIGITS[b >> 4]);
+ sb.append(HEXDIGITS[b & 15]);
+ sb.append(' ');
+ }
+ return sb.toString();
+ }
+
+ private static class SavingTrustManager implements X509TrustManager {
+
+ private final X509TrustManager tm;
+ private X509Certificate[] chain;
+
+ SavingTrustManager(X509TrustManager tm) {
+ this.tm = tm;
+ }
+
+ public X509Certificate[] getAcceptedIssuers() {
+ throw new UnsupportedOperationException();
+ }
+
+ public void checkClientTrusted(X509Certificate[] chain, String authType)
+ throws CertificateException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void checkServerTrusted(X509Certificate[] chain, String authType)
+ throws CertificateException {
+ this.chain = chain;
+ tm.checkServerTrusted(chain, authType);
+ }
+ }
+
+}
diff --git a/sw/in_progress/pow/ServletPow/InstallCert.java b/sw/in_progress/pow/ServletPow/InstallCert.java
new file mode 100644
index 0000000000..f979cc7868
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/InstallCert.java
@@ -0,0 +1,188 @@
+
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * - Neither the name of Sun Microsystems nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/**
+ * @see http://blogs.sun.com/gc/entry/unable_to_find_valid_certification
+ */
+import java.io.*;
+
+import java.security.*;
+import java.security.cert.*;
+
+import javax.net.ssl.*;
+
+public class InstallCert {
+
+ public static void main(String[] args) throws Exception {
+ String host;
+ int port;
+ char[] passphrase;
+ if ((args.length == 1) || (args.length == 2)) {
+ String[] c = args[0].split(":");
+ host = c[0];
+ port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);
+ String p = (args.length == 1) ? "changeit" : args[1];
+ passphrase = p.toCharArray();
+ } else {
+ System.out.println("Usage: java InstallCert [:port] [passphrase]");
+ return;
+ }
+
+ File file = new File("jssecacerts");
+ if (file.isFile() == false) {
+ char SEP = File.separatorChar;
+ File dir = new File(System.getProperty("java.home") + SEP
+ + "lib" + SEP + "security");
+ file = new File(dir, "jssecacerts");
+ if (file.isFile() == false) {
+ file = new File(dir, "cacerts");
+ }
+ }
+ System.out.println("Loading KeyStore " + file + "...");
+ InputStream in = new FileInputStream(file);
+ KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
+ ks.load(in, passphrase);
+ in.close();
+
+ SSLContext context = SSLContext.getInstance("TLS");
+ TrustManagerFactory tmf =
+ TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
+ tmf.init(ks);
+ X509TrustManager defaultTrustManager = (X509TrustManager)tmf.getTrustManagers()[0];
+ SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
+ context.init(null, new TrustManager[] {tm}, null);
+ SSLSocketFactory factory = context.getSocketFactory();
+
+ System.out.println("Opening connection to " + host + ":" + port + "...");
+ SSLSocket socket = (SSLSocket)factory.createSocket(host, port);
+ socket.setSoTimeout(10000);
+ try {
+ System.out.println("Starting SSL handshake...");
+ socket.startHandshake();
+ socket.close();
+ System.out.println();
+ System.out.println("No errors, certificate is already trusted");
+ } catch (SSLException e) {
+ System.out.println();
+ e.printStackTrace(System.out);
+ }
+
+ X509Certificate[] chain = tm.chain;
+ if (chain == null) {
+ System.out.println("Could not obtain server certificate chain");
+ return;
+ }
+
+ BufferedReader reader =
+ new BufferedReader(new InputStreamReader(System.in));
+
+ System.out.println();
+ System.out.println("Server sent " + chain.length + " certificate(s):");
+ System.out.println();
+ MessageDigest sha1 = MessageDigest.getInstance("SHA1");
+ MessageDigest md5 = MessageDigest.getInstance("MD5");
+ for (int i = 0; i < chain.length; i++) {
+ X509Certificate cert = chain[i];
+ System.out.println
+ (" " + (i + 1) + " Subject " + cert.getSubjectDN());
+ System.out.println(" Issuer " + cert.getIssuerDN());
+ sha1.update(cert.getEncoded());
+ System.out.println(" sha1 " + toHexString(sha1.digest()));
+ md5.update(cert.getEncoded());
+ System.out.println(" md5 " + toHexString(md5.digest()));
+ System.out.println();
+ }
+
+ System.out.println("Enter certificate to add to trusted keystore or 'q' to quit: [1]");
+ String line = reader.readLine().trim();
+ int k;
+ try {
+ k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1;
+ } catch (NumberFormatException e) {
+ System.out.println("KeyStore not changed");
+ return;
+ }
+
+ X509Certificate cert = chain[k];
+ String alias = host + "-" + (k + 1);
+ ks.setCertificateEntry(alias, cert);
+
+ OutputStream out = new FileOutputStream("jssecacerts");
+ ks.store(out, passphrase);
+ out.close();
+
+ System.out.println();
+ System.out.println(cert);
+ System.out.println();
+ System.out.println
+ ("Added certificate to keystore 'jssecacerts' using alias '"
+ + alias + "'");
+ }
+
+ private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();
+
+ private static String toHexString(byte[] bytes) {
+ StringBuilder sb = new StringBuilder(bytes.length * 3);
+ for (int b : bytes) {
+ b &= 0xff;
+ sb.append(HEXDIGITS[b >> 4]);
+ sb.append(HEXDIGITS[b & 15]);
+ sb.append(' ');
+ }
+ return sb.toString();
+ }
+
+ private static class SavingTrustManager implements X509TrustManager {
+
+ private final X509TrustManager tm;
+ private X509Certificate[] chain;
+
+ SavingTrustManager(X509TrustManager tm) {
+ this.tm = tm;
+ }
+
+ public X509Certificate[] getAcceptedIssuers() {
+ throw new UnsupportedOperationException();
+ }
+
+ public void checkClientTrusted(X509Certificate[] chain, String authType)
+ throws CertificateException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void checkServerTrusted(X509Certificate[] chain, String authType)
+ throws CertificateException {
+ this.chain = chain;
+ tm.checkServerTrusted(chain, authType);
+ }
+ }
+
+}
diff --git a/sw/in_progress/pow/ServletPow/JARLIB/commons-codec-1.4.jar b/sw/in_progress/pow/ServletPow/JARLIB/commons-codec-1.4.jar
new file mode 100755
index 0000000000..458d432da8
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/JARLIB/commons-codec-1.4.jar differ
diff --git a/sw/in_progress/pow/ServletPow/JARLIB/commons-fileupload-1.2.1.jar b/sw/in_progress/pow/ServletPow/JARLIB/commons-fileupload-1.2.1.jar
new file mode 100755
index 0000000000..aa209b3887
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/JARLIB/commons-fileupload-1.2.1.jar differ
diff --git a/sw/in_progress/pow/ServletPow/JARLIB/commons-httpclient-3.1.jar b/sw/in_progress/pow/ServletPow/JARLIB/commons-httpclient-3.1.jar
new file mode 100755
index 0000000000..7c59774aed
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/JARLIB/commons-httpclient-3.1.jar differ
diff --git a/sw/in_progress/pow/ServletPow/JARLIB/commons-io-1.4.jar b/sw/in_progress/pow/ServletPow/JARLIB/commons-io-1.4.jar
new file mode 100755
index 0000000000..133dc6cb35
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/JARLIB/commons-io-1.4.jar differ
diff --git a/sw/in_progress/pow/ServletPow/JARLIB/commons-logging-1.1.1.jar b/sw/in_progress/pow/ServletPow/JARLIB/commons-logging-1.1.1.jar
new file mode 100755
index 0000000000..8758a96b70
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/JARLIB/commons-logging-1.1.1.jar differ
diff --git a/sw/in_progress/pow/ServletPow/JARLIB/ivy-1.2.13.jar b/sw/in_progress/pow/ServletPow/JARLIB/ivy-1.2.13.jar
new file mode 100755
index 0000000000..be51c0e1f0
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/JARLIB/ivy-1.2.13.jar differ
diff --git a/sw/in_progress/pow/ServletPow/JARLIB/jakarta-regexp-1.5.jar b/sw/in_progress/pow/ServletPow/JARLIB/jakarta-regexp-1.5.jar
new file mode 100755
index 0000000000..652bc822c9
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/JARLIB/jakarta-regexp-1.5.jar differ
diff --git a/sw/in_progress/pow/ServletPow/JARLIB/jdom.jar b/sw/in_progress/pow/ServletPow/JARLIB/jdom.jar
new file mode 100755
index 0000000000..65a1b3f737
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/JARLIB/jdom.jar differ
diff --git a/sw/in_progress/pow/ServletPow/JARLIB/log4j-1.2.16.jar b/sw/in_progress/pow/ServletPow/JARLIB/log4j-1.2.16.jar
new file mode 100755
index 0000000000..3f9d847618
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/JARLIB/log4j-1.2.16.jar differ
diff --git a/sw/in_progress/pow/ServletPow/JARLIB/mysql-connector-java-5.1.12-bin.jar b/sw/in_progress/pow/ServletPow/JARLIB/mysql-connector-java-5.1.12-bin.jar
new file mode 100755
index 0000000000..af5847eed4
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/JARLIB/mysql-connector-java-5.1.12-bin.jar differ
diff --git a/sw/in_progress/pow/ServletPow/JARLIB/pushlet.jar b/sw/in_progress/pow/ServletPow/JARLIB/pushlet.jar
new file mode 100755
index 0000000000..6dc1c22e21
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/JARLIB/pushlet.jar differ
diff --git a/sw/in_progress/pow/ServletPow/JARLIB/pushletclient.jar b/sw/in_progress/pow/ServletPow/JARLIB/pushletclient.jar
new file mode 100755
index 0000000000..c699b8b25f
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/JARLIB/pushletclient.jar differ
diff --git a/sw/in_progress/pow/ServletPow/JARLIB/rome-1.0.jar b/sw/in_progress/pow/ServletPow/JARLIB/rome-1.0.jar
new file mode 100755
index 0000000000..7138baaca1
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/JARLIB/rome-1.0.jar differ
diff --git a/sw/in_progress/pow/ServletPow/JARLIB/serializer.jar b/sw/in_progress/pow/ServletPow/JARLIB/serializer.jar
new file mode 100755
index 0000000000..de9b007b4c
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/JARLIB/serializer.jar differ
diff --git a/sw/in_progress/pow/ServletPow/JARLIB/servlet-api.jar b/sw/in_progress/pow/ServletPow/JARLIB/servlet-api.jar
new file mode 100755
index 0000000000..a71c371333
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/JARLIB/servlet-api.jar differ
diff --git a/sw/in_progress/pow/ServletPow/JARLIB/xerces.jar b/sw/in_progress/pow/ServletPow/JARLIB/xerces.jar
new file mode 100755
index 0000000000..e9fe08ad45
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/JARLIB/xerces.jar differ
diff --git a/sw/in_progress/pow/ServletPow/ServletPow.war b/sw/in_progress/pow/ServletPow/ServletPow.war
new file mode 100755
index 0000000000..0888047d40
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/ServletPow.war differ
diff --git a/sw/in_progress/pow/ServletPow/conf apache2/mods_available/jk.load b/sw/in_progress/pow/ServletPow/conf apache2/mods_available/jk.load
new file mode 100755
index 0000000000..841cf3d0c2
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/conf apache2/mods_available/jk.load
@@ -0,0 +1,6 @@
+LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so
+
+JkWorkersFile /etc/apache2/workers.properties
+JkLogFile /var/log/apache2/mod_jk.log
+JkLogLevel debug
+JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
diff --git a/sw/in_progress/pow/ServletPow/conf apache2/mods_available/php5.conf b/sw/in_progress/pow/ServletPow/conf apache2/mods_available/php5.conf
new file mode 100755
index 0000000000..9152fe14f6
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/conf apache2/mods_available/php5.conf
@@ -0,0 +1,20 @@
+
+AddType application/x-httpd-php .php .phtml .php3
+AddType application/x-httpd-php-source .phps
+
+
+
+ SetHandler application/x-httpd-php
+
+
+ SetHandler application/x-httpd-php-source
+
+ # To re-enable php in user directories comment the following lines
+ # (from to .) Do NOT set it to On as it
+ # prevents .htaccess files from disabling it.
+
+
+ php_admin_value engine Off
+
+
+
diff --git a/sw/in_progress/pow/ServletPow/conf apache2/mods_available/php5.load b/sw/in_progress/pow/ServletPow/conf apache2/mods_available/php5.load
new file mode 100755
index 0000000000..0d6a55eb43
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/conf apache2/mods_available/php5.load
@@ -0,0 +1 @@
+LoadModule php5_module /usr/lib/apache2/modules/libphp5.so
\ No newline at end of file
diff --git a/sw/in_progress/pow/ServletPow/conf apache2/mods_available/ssl.conf b/sw/in_progress/pow/ServletPow/conf apache2/mods_available/ssl.conf
new file mode 100755
index 0000000000..1e4ce40c44
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/conf apache2/mods_available/ssl.conf
@@ -0,0 +1,64 @@
+
+#
+# Pseudo Random Number Generator (PRNG):
+# Configure one or more sources to seed the PRNG of the SSL library.
+# The seed data should be of good random quality.
+# WARNING! On some platforms /dev/random blocks if not enough entropy
+# is available. This means you then cannot use the /dev/random device
+# because it would lead to very long connection times (as long as
+# it requires to make more entropy available). But usually those
+# platforms additionally provide a /dev/urandom device which doesn't
+# block. So, if available, use this one instead. Read the mod_ssl User
+# Manual for more details.
+#
+SSLRandomSeed startup builtin
+SSLRandomSeed startup file:/dev/urandom 512
+SSLRandomSeed connect builtin
+SSLRandomSeed connect file:/dev/urandom 512
+
+##
+## SSL Global Context
+##
+## All SSL configuration in this context applies both to
+## the main server and all SSL-enabled virtual hosts.
+##
+
+#
+# Some MIME-types for downloading Certificates and CRLs
+#
+AddType application/x-x509-ca-cert .crt
+AddType application/x-pkcs7-crl .crl
+
+# Pass Phrase Dialog:
+# Configure the pass phrase gathering process.
+# The filtering dialog program (`builtin' is a internal
+# terminal dialog) has to provide the pass phrase on stdout.
+SSLPassPhraseDialog builtin
+
+# Inter-Process Session Cache:
+# Configure the SSL Session Cache: First the mechanism
+# to use and second the expiring timeout (in seconds).
+#SSLSessionCache dbm:/var/run/apache2/ssl_scache
+SSLSessionCache shmcb:/var/run/apache2/ssl_scache(512000)
+SSLSessionCacheTimeout 300
+
+# Semaphore:
+# Configure the path to the mutual exclusion semaphore the
+# SSL engine uses internally for inter-process synchronization.
+SSLMutex file:/var/run/apache2/ssl_mutex
+
+# SSL Cipher Suite:
+# List the ciphers that the client is permitted to negotiate.
+# See the mod_ssl documentation for a complete list.
+# enable only secure ciphers:
+SSLCipherSuite HIGH:MEDIUM:!ADH
+# Use this instead if you want to allow cipher upgrades via SGC facility.
+# In this case you also have to use something like
+# SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128
+# see http://httpd.apache.org/docs/2.2/ssl/ssl_howto.html.en#upgradeenc
+#SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
+
+# enable only secure protocols: SSLv3 and TLSv1, but not SSLv2
+SSLProtocol all -SSLv2
+
+
diff --git a/sw/in_progress/pow/ServletPow/conf apache2/mods_available/ssl.load b/sw/in_progress/pow/ServletPow/conf apache2/mods_available/ssl.load
new file mode 100755
index 0000000000..ff861daab5
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/conf apache2/mods_available/ssl.load
@@ -0,0 +1 @@
+LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
diff --git a/sw/in_progress/pow/ServletPow/conf apache2/ports.conf b/sw/in_progress/pow/ServletPow/conf apache2/ports.conf
new file mode 100755
index 0000000000..7830895dc0
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/conf apache2/ports.conf
@@ -0,0 +1,23 @@
+# If you just change the port or add more ports here, you will likely also
+# have to change the VirtualHost statement in
+# /etc/apache2/sites-enabled/000-default
+# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
+# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
+# README.Debian.gz
+
+#NameVirtualHost *:80
+Listen 80
+
+
+ # If you add NameVirtualHost *:443 here, you will also have to change
+ # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
+ # to
+ # Server Name Indication for SSL named virtual hosts is currently not
+ # supported by MSIE on Windows XP.
+ Listen 443
+
+
+
+ Listen 443
+
+
diff --git a/sw/in_progress/pow/ServletPow/conf apache2/sites-available/default b/sw/in_progress/pow/ServletPow/conf apache2/sites-available/default
new file mode 100755
index 0000000000..0559ce148e
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/conf apache2/sites-available/default
@@ -0,0 +1,42 @@
+NameVirtualHost *:80
+
+ ServerAdmin webmaster@localhost
+
+ DocumentRoot /var/www
+
+ Options FollowSymLinks
+ AllowOverride None
+
+
+ Options Indexes FollowSymLinks MultiViews
+ AllowOverride None
+ Order allow,deny
+ allow from all
+
+
+ ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
+
+ AllowOverride None
+ Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
+ Order allow,deny
+ Allow from all
+
+
+ ErrorLog /var/log/apache2/error.log
+
+ # Possible values include: debug, info, notice, warn, error, crit,
+ # alert, emerg.
+ LogLevel warn
+
+ CustomLog /var/log/apache2/access.log combined
+
+ Alias /doc/ "/usr/share/doc/"
+
+ Options Indexes MultiViews FollowSymLinks
+ AllowOverride None
+ Order deny,allow
+ Deny from all
+ Allow from 127.0.0.0/255.0.0.0 ::1/128
+
+
+
diff --git a/sw/in_progress/pow/ServletPow/conf apache2/sites-available/powV2_ssl b/sw/in_progress/pow/ServletPow/conf apache2/sites-available/powV2_ssl
new file mode 100755
index 0000000000..7a4efcaca3
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/conf apache2/sites-available/powV2_ssl
@@ -0,0 +1,42 @@
+
+NameVirtualHost *:443
+
+
+ ServerAdmin admin@pow.fr
+ ServerName blanc
+
+ LogLevel warn
+
+ CustomLog /var/log/apache2/access.log combined
+ ServerSignature On
+
+ SSLEngine on
+ SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
+ #SSLCertificateFile /etc/ssl/private/serveur.cert
+ #SSLCertificateKeyFile /etc/ssl/private/serveur.key
+ #SSLCACertificateFile /etc/ssl/private/ca-root.cert
+ SSLCertificateFile /etc/ssl/server.crt
+ SSLCertificateKeyFile /etc/ssl/server.key
+ SSLCACertificatePath /etc/ssl
+
+#SSLVerifyClient optional_no_ca
+#SSLOptions +ExportCertData +StdEnvVars
+ SetEnvIf User-Agent ".*MSIE.*" \
+ nokeepalive ssl-unclean-shutdown \
+ downgrade-1.0 force-response-1.0
+
+ JkExtractSSL On
+ JkOptions +FlushPackets
+ JkOptions +FlushHeader
+ JkMount /ServletPow worker1
+ JkMount /ServletPow/* worker1
+ JkMount /examples/* worker1
+ JkMount /examples worker1
+
+#Redirect https://www.recherche.enac.fr/TestServletPow https://www.recherche.enac.fr/evaluation/TestServletPow
+
+
+
+
+
+
diff --git a/sw/in_progress/pow/ServletPow/conf apache2/workers.properties b/sw/in_progress/pow/ServletPow/conf apache2/workers.properties
new file mode 100755
index 0000000000..996a10559b
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/conf apache2/workers.properties
@@ -0,0 +1,9 @@
+workers.tomcat_home=/users/genin/apache-tomcat-6.0.26
+
+workers.java_home=/usr/lib/jvm/java-6-sun
+ps=/
+worker.list=worker1
+worker.worker1.port=8009
+worker.worker1.host=localhost
+worker.worker1.type=ajp13
+worker.worker1.lbfactor=1
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/.classpath b/sw/in_progress/pow/ServletPow/eclipse ServletPow/.classpath
new file mode 100755
index 0000000000..fd0f78ce42
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/.classpath
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/.project b/sw/in_progress/pow/ServletPow/eclipse ServletPow/.project
new file mode 100755
index 0000000000..3470d17f2e
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/.project
@@ -0,0 +1,36 @@
+
+
+ ServletPow
+
+
+
+
+
+ org.eclipse.wst.jsdt.core.javascriptValidator
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.wst.common.project.facet.core.builder
+
+
+
+
+ org.eclipse.wst.validation.validationbuilder
+
+
+
+
+
+ org.eclipse.jem.workbench.JavaEMFNature
+ org.eclipse.wst.common.modulecore.ModuleCoreNature
+ org.eclipse.wst.common.project.facet.core.nature
+ org.eclipse.jdt.core.javanature
+ org.eclipse.wst.jsdt.core.jsNature
+
+
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/.settings/.jsdtscope b/sw/in_progress/pow/ServletPow/eclipse ServletPow/.settings/.jsdtscope
new file mode 100755
index 0000000000..bbb8e68be8
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/.settings/.jsdtscope
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/.settings/org.eclipse.jdt.core.prefs b/sw/in_progress/pow/ServletPow/eclipse ServletPow/.settings/org.eclipse.jdt.core.prefs
new file mode 100755
index 0000000000..420b6fb9b2
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+#Tue Apr 20 15:09:25 CEST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/.settings/org.eclipse.wst.common.component b/sw/in_progress/pow/ServletPow/eclipse ServletPow/.settings/org.eclipse.wst.common.component
new file mode 100755
index 0000000000..72dafadb28
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/.settings/org.eclipse.wst.common.component
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/.settings/org.eclipse.wst.common.project.facet.core.xml b/sw/in_progress/pow/ServletPow/eclipse ServletPow/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100755
index 0000000000..53d628c892
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/.settings/org.eclipse.wst.jsdt.ui.superType.container b/sw/in_progress/pow/ServletPow/eclipse ServletPow/.settings/org.eclipse.wst.jsdt.ui.superType.container
new file mode 100755
index 0000000000..3bd5d0a480
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/.settings/org.eclipse.wst.jsdt.ui.superType.container
@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/.settings/org.eclipse.wst.jsdt.ui.superType.name b/sw/in_progress/pow/ServletPow/eclipse ServletPow/.settings/org.eclipse.wst.jsdt.ui.superType.name
new file mode 100755
index 0000000000..05bd71b6ec
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/.settings/org.eclipse.wst.jsdt.ui.superType.name
@@ -0,0 +1 @@
+Window
\ No newline at end of file
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/design.css b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/design.css
new file mode 100755
index 0000000000..7903f3723e
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/design.css
@@ -0,0 +1,220 @@
+body
+{
+ background-color: #CCFFCC;
+ margin: 0%;
+ padding: 0%;
+ outline: 0%;
+ height: 100%;
+ overflow:hidden;
+ max-width:2048px;
+ font-size : 11;
+}
+
+select{
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+ font-size: 11px;
+ vertical-align: middle;
+ background-color: #F5F5DC;
+}
+input {
+ background-color:#F5F5DC;
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+}
+
+label {
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+ font-size: 11px;
+}
+
+#welcome
+{
+ position:absolute;
+ top:0;
+ left:0;
+ height:3%;
+ width: 100%;
+ background-color: #EEEEEE;
+ text-align: center;
+ font-weight:bold;
+ font-size : 12;
+}
+#usr
+{
+ position:absolute;
+ top:0;
+ right:6%;
+ height:3%;
+ width:25%;
+ background-color: #EEEEEE;
+ text-align: right;
+ white-space:nowrap;
+}
+#page
+{
+position:absolute;
+top:3%;
+left:0;
+height:97%;
+width: 100%;
+}
+
+
+#choicePanel{
+ position:absolute;
+ top:0%;
+ left:0%;
+ height: 13%;
+ width : 15%;
+ background-color: #EEEEEE;
+ border: 1px solid black;
+}
+
+#aircraftSelector
+{
+ text-align: center;
+ background-color: #EEEEEE;
+}
+
+#trackdiv
+{
+ text-align: center;
+ background-color: #EEEEEE;
+ -moz-border-radius: 7px 7px 7px 7px;
+ -webkit-border-radius: 7px 7px 7px 7px;
+ border-radius: 7px 7px 7px 7px;
+ -webkit-border-top-left-radius: 7px; /* pour Chrome */
+ -webkit-border-top-right-radius: 7px; /* pour Chrome */
+ -webkit-border-bottom-left-radius: 7px; /* pour Chrome */
+ -webkit-border-bottom-right-radius: 7px; /* pour Chrome */
+ width: 140px;
+ color: white;
+ vertical-align:middle;
+}
+
+#active_block
+{
+ font-size:11;
+ text-align: center;
+}
+
+#FlightPlan
+{
+ overflow:auto;
+ position:absolute;
+ top:0%;
+ left:15%;
+ height: 40%;
+ width : 14.9%;
+ background-color: #EEEEEE;
+ border: 1px solid black;
+}
+
+#FlightParams
+{
+ position:absolute;
+ top:13%;
+ left :0%
+ text-align: center;
+ height: 27%;
+ width : 14.9%;
+ border: 1px solid black;
+ background-color: #EEEEEE;
+}
+
+#map_canvas
+{
+ position:absolute;
+ top:0;
+ left:30%;
+ width:70%;
+ height: 95%;
+ border:1px solid black;
+}
+
+
+#Settings
+{
+ overflow:auto;
+ position:absolute;
+ left:0%;
+ top:40%;
+ text-align: left;
+ height: 55%;
+ width: 29.9%;
+ background-color: #EEEEEE;
+ border: 1px solid black;
+}
+
+#page_setting {
+
+}
+
+#setting {
+ width: 400px;
+ height: 250px;
+ padding: 0.5em;
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+ font-size: 8;
+}
+#param
+{
+ overflow:auto;
+}
+
+#NewsDiv
+{
+ position:absolute;
+ overflow:auto;
+ left:0%;
+ top:95%;
+ height: 5%;
+ width: 100%;
+ text-align: left;
+ vertical-align:top;
+ background-color: #EEEEEE;
+ border: 1px solid black;
+}
+
+#info
+{
+ text-align: left;
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+ font-size: 11px;
+}
+
+#Debug
+{
+ overflow:auto;
+ position:absolute;
+ left:65%;
+ top:50%;
+ text-align: center;
+ height: 50%;
+ width: 35%;
+ background-color: #EEEEEE;
+ border: 1px solid black;
+ padding-top:20px;
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+ font-size: 11px;
+}
+
+#title{
+ font-weight:bold;
+ font-size:18;
+ text-align:center;
+}
+
+table.param {
+border:3px solid #6495ed;
+border-collapse:collapse;
+width:90%;
+margin:auto;
+}
+td.param {
+font-family:sans-serif;
+font-size:11px;
+border:1px solid #6495ed;
+padding:5px;
+text-align:left;
+}
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/designHelp.css b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/designHelp.css
new file mode 100755
index 0000000000..df08745f31
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/designHelp.css
@@ -0,0 +1,21 @@
+body
+{
+ width: 90%;
+ margin-top: 5px;
+ margin-bottom: 5px;
+ margin-left:5%;
+ margin-reight:5%;
+ background-color: #CCFFCC;
+ text-align:justify;
+}
+
+h3,h2
+{
+ color : navy;
+ text-align:center;
+ text-decoration:underline;
+}
+#problem
+{
+ color:red;
+}
\ No newline at end of file
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/designLogOut.css b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/designLogOut.css
new file mode 100755
index 0000000000..02a1a63f3f
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/designLogOut.css
@@ -0,0 +1,12 @@
+body
+{
+ background-color: #CCFFCC;
+ margin-top: 2%;
+ padding: 0%;
+ outline: 0%;
+ height: 100%;
+ overflow:hidden;
+ max-width:2048px;
+ text-align:center;
+ font-size:24px;
+}
\ No newline at end of file
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/designWelcome.css b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/designWelcome.css
new file mode 100755
index 0000000000..e6cd8076f0
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/designWelcome.css
@@ -0,0 +1,30 @@
+body
+{
+ width: 960px;
+ margin-top: 100px;
+ margin-bottom: 5px;
+ background-image: url("Icons/logo.png");
+ background-repeat:no-repeat;
+ background-color: #CCFFCC;
+
+}
+
+#signIn
+{
+ margin: auto;
+ width: 300px;
+ height: 140px;
+ border: 1px solid black;
+}
+
+#log
+{
+ margin-left: 30px;
+}
+
+a
+{
+ position:absolute;
+ right:1%;
+ top:80%;
+}
\ No newline at end of file
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/design_admin.css b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/design_admin.css
new file mode 100755
index 0000000000..867056a7a6
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/design_admin.css
@@ -0,0 +1,99 @@
+body {
+ background-color: #EEEEEE;
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+ font-size: 11px;
+}
+
+select{
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+ font-size: 11px;
+ vertical-align: middle;
+ background-color: #F5F5DC;
+}
+input {
+ border:1px solid black;
+ background-color:#F5F5DC;
+ font-size: 11px;
+}
+
+label {
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+ font-size: 11px;
+}
+
+span {
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+ font-size: 11px;
+}
+
+td {
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+ font-size: 11px;
+}
+
+#title {
+ position : absolute;
+ top : 0%;
+ left : 0%;
+ height : 5%;
+ width : 100%;
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+ text-align : right;
+ font-size : 11px;
+ background-color: #BC8F8F;
+ border: 1px solid black;
+}
+
+#page {
+ position : absolute;
+ top : 15%;
+ left : 15%;
+ width : 70%;
+ height : 65%;
+ border: 1px solid black;
+ background-color: #EEEEEE;
+}
+
+
+#modifImmat {
+ position : absolute;
+ top : 15%;
+}
+
+
+#modifPwd {
+ position : absolute;
+ top : 15%;
+}
+
+
+#modifRight {
+ position : absolute;
+ top : 15%;
+}
+
+#modifyUser {
+ position : absolute;
+ top : 15%;
+}
+
+#createUser {
+ position : absolute;
+ top : 15%;
+}
+
+#mainForm {
+ position : absolute;
+ top : 15%;
+}
+
+
+#createIvyUser {
+ position : absolute;
+ top : 15%;
+}
+
+#listIvyUser {
+ position : absolute;
+ top : 15%;
+}
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/designbackup.css b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/designbackup.css
new file mode 100755
index 0000000000..b9ea91607d
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/designbackup.css
@@ -0,0 +1,87 @@
+body
+{
+ background-color: #CCFFCC;
+ margin: 0%;
+ padding: 0%;
+ outline: 0%;
+ height: 95%;
+}
+#page
+{
+ width: 100%;
+ height: 95%;
+}
+
+#logo
+{
+ width: 960px;
+ height: 100px;
+ background-image: url("banniere.jpg");
+ background-repeat: repeat-x;
+ margin-bottom: 10px;
+}
+
+#leftmenu
+{
+ /* float: left; /* Le menu flottera à gauche */
+ /* width: 120px; *//* Très important : donner une taille au menu */
+}
+#welcome
+{
+ text-align: center;
+ background-color: #EEEEEE;
+ border: 2px solid black;
+ margin-bottom: 10px; /* Pour éviter que les éléments du menu ne soient trop collés */
+}
+#choice
+{
+float: left;
+ text-align: center;
+ background-color: #EEEEEE;
+ border: 2px solid black;
+ height: 190px;
+ width: 20px;
+}
+#map_canvas
+{
+ width: 690px;
+ height: 350px;
+ margin-left: 125px;
+}
+
+#FlightPlan
+{
+ float: right;
+ width: 135px; /* Très important : donner une taille au menu */
+ height: 345px;
+ border: 2px solid black;
+ background-color: #EEEEEE;
+}
+
+
+
+#ControlPanel
+{
+ float: left;
+ text-align: center;
+ height: 150px;
+ width: 600px;
+ border: 2px solid black;
+ background-color: #EEEEEE;
+}
+#FlightParams
+{
+ text-align: center;
+ float: right;
+ height: 150px;
+ width: 350px;
+ border: 2px solid black;
+ background-color: #EEEEEE;
+}
+table
+{
+ margin-left: 20px;
+ margin-bottom: 20px;
+}
+
+
\ No newline at end of file
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/dtree.css b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/dtree.css
new file mode 100755
index 0000000000..ccc20f8c35
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/dtree.css
@@ -0,0 +1,34 @@
+/*--------------------------------------------------|
+| dTree 2.05 | www.destroydrop.com/javascript/tree/ |
+|---------------------------------------------------|
+| Copyright (c) 2002-2003 Geir Landrö |
+|--------------------------------------------------*/
+
+.dtree {
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+ font-size: 11px;
+ color: #666;
+ white-space: nowrap;
+}
+.dtree img {
+ border: 0px;
+ vertical-align: middle;
+}
+.dtree a {
+ color: #333;
+ text-decoration: none;
+}
+.dtree a.node, .dtree a.nodeSel {
+ white-space: nowrap;
+ padding: 1px 2px 1px 2px;
+}
+.dtree a.node:hover, .dtree a.nodeSel:hover {
+ color: #333;
+ text-decoration: underline;
+}
+.dtree a.nodeSel {
+ background-color: #c0d2ec;
+}
+.dtree .clip {
+ overflow: hidden;
+}
\ No newline at end of file
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/tab.css b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/tab.css
new file mode 100755
index 0000000000..2e9043ed76
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/tab.css
@@ -0,0 +1,110 @@
+/* $Id: example.css,v 1.5 2006/03/27 02:44:36 pat Exp $ */
+
+/*--------------------------------------------------
+ REQUIRED to hide the non-active tab content.
+ But do not hide them in the print stylesheet!
+ --------------------------------------------------*/
+.tabberlive .tabbertabhide {
+ display:none;
+}
+
+/*--------------------------------------------------
+ .tabber = before the tabber interface is set up
+ .tabberlive = after the tabber interface is set up
+ --------------------------------------------------*/
+.tabber {
+}
+.tabberlive {
+ margin-top:1em;
+}
+
+/*--------------------------------------------------
+ ul.tabbernav = the tab navigation list
+ li.tabberactive = the active tab
+ --------------------------------------------------*/
+ul.tabbernav
+{
+ margin:0;
+ padding: 3px 0;
+ border-bottom: 1px solid #778;
+ font: bold 12px Verdana, sans-serif;
+}
+
+ul.tabbernav li
+{
+ list-style: none;
+ margin: 0;
+ display: inline;
+}
+
+ul.tabbernav li a
+{
+ padding: 3px 0.5em;
+ margin-left: 3px;
+ border: 1px solid #778;
+ border-bottom: none;
+ background: #DDE;
+ text-decoration: none;
+}
+
+ul.tabbernav li a:link { color: #448; }
+ul.tabbernav li a:visited { color: #667; }
+
+ul.tabbernav li a:hover
+{
+ color: #000;
+ background: #AAE;
+ border-color: #227;
+}
+
+ul.tabbernav li.tabberactive a
+{
+ background-color: #fff;
+ border-bottom: 1px solid #fff;
+}
+
+ul.tabbernav li.tabberactive a:hover
+{
+ color: #000;
+ background: white;
+ border-bottom: 1px solid white;
+}
+
+/*--------------------------------------------------
+ .tabbertab = the tab content
+ Add style only after the tabber interface is set up (.tabberlive)
+ --------------------------------------------------*/
+.tabberlive .tabbertab {
+ padding:5px;
+ border:1px solid #aaa;
+ border-top:0;
+
+ /* If you don't want the tab size changing whenever a tab is changed
+ you can set a fixed height */
+
+ /* height:200px; */
+
+ /* If you set a fix height set overflow to auto and you will get a
+ scrollbar when necessary */
+
+ /* overflow:auto; */
+}
+
+/* If desired, hide the heading since a heading is provided by the tab */
+.tabberlive .tabbertab h2 {
+ display:none;
+}
+.tabberlive .tabbertab h3 {
+ display:none;
+}
+
+/* Example of using an ID to set different styles for the tabs on the page */
+.tabberlive#tab1 {
+}
+.tabberlive#tab2 {
+}
+.tabberlive#tab2 .tabbertab {
+ height:200px;
+ overflow:auto;
+}
+
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-anim_basic_16x16.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-anim_basic_16x16.gif
new file mode 100755
index 0000000000..085ccaecaf
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-anim_basic_16x16.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
new file mode 100755
index 0000000000..954e22dbd9
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
new file mode 100755
index 0000000000..64ece5707d
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
new file mode 100755
index 0000000000..abdc01082b
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_flat_10_000000_40x100.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
new file mode 100755
index 0000000000..9b383f4d2e
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
new file mode 100755
index 0000000000..a23baad25b
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100755
index 0000000000..42ccba269b
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
new file mode 100755
index 0000000000..39d5824d6a
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
new file mode 100755
index 0000000000..f1273672d2
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
new file mode 100755
index 0000000000..359397acff
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-icons_222222_256x240.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-icons_222222_256x240.png
new file mode 100755
index 0000000000..b273ff111d
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-icons_222222_256x240.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-icons_228ef1_256x240.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-icons_228ef1_256x240.png
new file mode 100755
index 0000000000..c357355aa7
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-icons_228ef1_256x240.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-icons_ef8c08_256x240.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-icons_ef8c08_256x240.png
new file mode 100755
index 0000000000..85e63e9f60
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-icons_ef8c08_256x240.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-icons_ffd27a_256x240.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-icons_ffd27a_256x240.png
new file mode 100755
index 0000000000..e117effa3d
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-icons_ffd27a_256x240.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-icons_ffffff_256x240.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-icons_ffffff_256x240.png
new file mode 100755
index 0000000000..42f8f992c7
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/images/ui-icons_ffffff_256x240.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/jquery-ui-1.8.2.custom.css b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/jquery-ui-1.8.2.custom.css
new file mode 100755
index 0000000000..312dd8043e
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/CSS/ui-lightness/jquery-ui-1.8.2.custom.css
@@ -0,0 +1,489 @@
+/*
+* jQuery UI CSS Framework
+* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
+*/
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+/*
+* jQuery UI CSS Framework
+* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+*/
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
+.ui-widget-content a { color: #333333; }
+.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
+.ui-widget-header a { color: #ffffff; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
+.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
+.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* Resizable
+----------------------------------*/
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Selectable
+----------------------------------*/
+.ui-selectable-helper { border:1px dotted black }
+/* Accordion
+----------------------------------*/
+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+.ui-accordion .ui-accordion-li-fix { display: inline; }
+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
+/* IE7-/Win - Fix extra vertical space in lists */
+.ui-accordion a { zoom: 1; }
+.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
+.ui-accordion .ui-accordion-content-active { display: block; }/* Autocomplete
+----------------------------------*/
+.ui-autocomplete { position: absolute; cursor: default; }
+.ui-autocomplete-loading { background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat; }
+
+/* workarounds */
+* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
+
+/* Menu
+----------------------------------*/
+.ui-menu {
+ list-style:none;
+ padding: 2px;
+ margin: 0;
+ display:block;
+}
+.ui-menu .ui-menu {
+ margin-top: -3px;
+}
+.ui-menu .ui-menu-item {
+ margin:0;
+ padding: 0;
+ zoom: 1;
+ float: left;
+ clear: left;
+ width: 100%;
+}
+.ui-menu .ui-menu-item a {
+ text-decoration:none;
+ display:block;
+ padding:.2em .4em;
+ line-height:1.5;
+ zoom:1;
+}
+.ui-menu .ui-menu-item a.ui-state-hover,
+.ui-menu .ui-menu-item a.ui-state-active {
+ font-weight: normal;
+ margin: -1px;
+}
+/* Button
+----------------------------------*/
+
+.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
+.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
+button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
+.ui-button-icons-only { width: 3.4em; }
+button.ui-button-icons-only { width: 3.7em; }
+
+/*button text element */
+.ui-button .ui-button-text { display: block; line-height: 1.4; }
+.ui-button-text-only .ui-button-text { padding: .4em 1em; }
+.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
+.ui-button-text-icon .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
+.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+/* no icon support for input elements, provide padding by default */
+input.ui-button { padding: .4em 1em; }
+
+/*button icon element(s) */
+.ui-button-icon-only .ui-icon, .ui-button-text-icon .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
+.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
+.ui-button-text-icon .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
+.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+
+/*button sets*/
+.ui-buttonset { margin-right: 7px; }
+.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+
+/* workarounds */
+button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
+
+
+
+
+
+/* Dialog
+----------------------------------*/
+.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
+.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; }
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
+/* Slider
+----------------------------------*/
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 0.8em; height: 0.8em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
+----------------------------------*/
+.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
+.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
+/* Datepicker
+----------------------------------*/
+.ui-datepicker { width: 17em; padding: .2em .2em 0; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+ display: none; /*sorry for IE5*/
+ display/**/: block; /*sorry for IE5*/
+ position: absolute; /*must have*/
+ z-index: -1; /*must have*/
+ filter: mask(); /*must have*/
+ top: -4px; /*must have*/
+ left: -4px; /*must have*/
+ width: 200px; /*must have*/
+ height: 200px; /*must have*/
+}/* Progressbar
+----------------------------------*/
+.ui-progressbar { height:2em; text-align: left; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/E.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/E.png
new file mode 100755
index 0000000000..c54150820a
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/E.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/N.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/N.png
new file mode 100755
index 0000000000..b7a747cd39
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/N.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/NE.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/NE.png
new file mode 100755
index 0000000000..14d39ae0f0
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/NE.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/NW.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/NW.png
new file mode 100755
index 0000000000..e57382d0d4
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/NW.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/S.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/S.png
new file mode 100755
index 0000000000..edeabb494d
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/S.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/SE.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/SE.png
new file mode 100755
index 0000000000..e2e35ba552
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/SE.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/SW.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/SW.png
new file mode 100755
index 0000000000..71f3be47ae
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/SW.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/W.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/W.png
new file mode 100755
index 0000000000..baa74b59ad
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/W.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/arrow.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/arrow.png
new file mode 100755
index 0000000000..3a004f60b5
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/arrow.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/arrow2.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/arrow2.png
new file mode 100755
index 0000000000..d2cae73712
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/arrow2.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/blue-dot.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/blue-dot.png
new file mode 100755
index 0000000000..98b280d301
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/blue-dot.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/favicon.ico b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/favicon.ico
new file mode 100755
index 0000000000..7cd42a2755
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/favicon.ico differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/logo.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/logo.png
new file mode 100755
index 0000000000..032f6d16e7
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/logo.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/losange.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/losange.gif
new file mode 100755
index 0000000000..dfadf2d823
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/losange.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/losange.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/losange.png
new file mode 100755
index 0000000000..0786209c39
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/losange.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/red-dot.png b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/red-dot.png
new file mode 100755
index 0000000000..b0f3f0e928
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Icons/red-dot.png differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Interface.jsp b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Interface.jsp
new file mode 100755
index 0000000000..3ef63cc678
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/Interface.jsp
@@ -0,0 +1,1943 @@
+<%@page import="pow.webserver.Conf,java.util.StringTokenizer,java.util.NoSuchElementException" %>
+
+<%
+ if (session.getAttribute("login")==null) {
+ out.println("");
+ }
+%>
+
+
+
+
+
+
+
+ POW
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ");
+ }
+ else {
+ String login = ((String) (session.getAttribute("login"))).toString();
+ String right = ((String) (session.getAttribute("rights"))).toString();
+ if (right.equals("visitor"))
+ { out.println("var usr_right=\"visitor\";");
+ out.println("var usr_login=\"nologged\";");
+ }
+ else if (right.equals("admin"))
+ {
+ out.println("var usr_right=\"admin\";");
+ out.println("var usr_login=\""+login+"\";");
+ }
+ else if (right.equals("user")){ // gestion de la liste des drones controlables
+ out.println("var usr_right=\"user\";");
+ out.println("var usr_login=\""+login+"\";");
+ out.println("var drone_ctl=new Array();");
+ String droneCtl = ((String) (session.getAttribute("dronectl"))).toString();
+ StringTokenizer st = new StringTokenizer(droneCtl,";");
+ String d;
+ for(int i = 0 ; i< st.countTokens() ;i++){
+ d=st.nextToken();
+ out.println("drone_ctl[\""+ d +"\"]=1;");
+ }
+ try{
+ while (st.hasMoreTokens()) {
+ d=st.nextToken();
+ }
+ }
+ catch (NoSuchElementException ex){}
+
+ }
+ }
+ String default_folder = this.getServletConfig().getServletContext().getRealPath("");
+ Conf myconf =new Conf(default_folder,"pow_conf.xml");
+ out.println("//10sec after plane_die event remove drone");
+ out.println("var dieEventTimeoutTime = "+myconf.getDieEventTimeoutTime()+";");
+ out.println("//5sec without any position data about a drone remove drone");
+ out.println("var dataEventTimeoutTime = "+myconf.getDataEventTimeoutTime()+";");
+ out.println("// time to wait before order was cancelled");
+ out.println("var order_response_timeout = "+myconf.getOrderResponseTimeout()+";");
+ %>
+ var noPlaneBefore=true; // pour initialiser au premier push flight param
+ var ajax_url = "ajaxRqst.srv";
+/* ********** drone state timeout ******** */
+ var droneStateDieEvent = new Array(); // timeout en cas d'event die
+ var droneStateDataEvent = new Array(); // timeout en cas de non evenement data
+ var waypoint_modif = new Array(); //
+ var block_jump_timeout=-1;
+ var setting_change_timeout=-1;
+ var setting_to_change_id=-1;
+/* *************************************************************************** Global variables *************************************************************************************** */
+ var map;
+
+ var planes = new Array();
+ var nb_planes =0;
+ var markers = new Array();
+ var markers_color = new Array(); // stock les balises de couleurs de chaque drone
+ var diametre_drone_balise = 50; //50m de base
+ var selected_plane = "";
+ var selected_plane_id = 0;
+ var selected_index=0;
+ var tracking = false;
+
+/* *******************Flight Plan variables :******************** */
+ var waypoints = new Array();
+ var waypoint_tmp = null;
+ var index_wpt = 0;
+ var blocks= new Array();
+ var index_block = 0;
+ var active_block_id=0;
+ var active_block_name="";
+ var fpl_name="";
+ var lat0=0;
+ var lon0=0;
+ var fpl_alt=0;
+ var security_height=0;
+ var fpl_ground_alt=0;
+ var max_dist=0;
+
+
+/* ********************Planes and waypoints icons******************** */
+ var plane_icons = new Array();
+ for (var i=0;i<8;i++){
+ plane_icons[i] = new GIcon();
+ plane_icons[i].shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
+ plane_icons[i].iconSize = new GSize(60,60);
+ plane_icons[i].shadowSize = new GSize(22, 20);
+ plane_icons[i].infoWindowAnchor = new GPoint(50, 1);
+ plane_icons[i].iconAnchor = new GPoint(30, 30);
+ }
+ plane_icons[0].image="Icons/N.png";
+ plane_icons[1].image="Icons/NE.png";
+ plane_icons[2].image="Icons/E.png";
+ plane_icons[3].image="Icons/SE.png";
+ plane_icons[4].image="Icons/S.png";
+ plane_icons[5].image="Icons/SW.png";
+ plane_icons[6].image="Icons/W.png";
+ plane_icons[7].image="Icons/NW.png";
+
+ var wpt_icon=new GIcon();
+ wpt_icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
+ wpt_icon.iconSize = new GSize(20,20);
+ wpt_icon.shadowSize = new GSize(22, 20);
+ wpt_icon.infoWindowAnchor = new GPoint(8, 1);
+ wpt_icon.iconAnchor = new GPoint(6, 20);
+ //wpt_icon.image="Icons/losange.png";
+ wpt_icon.image="Icons/blue-dot.png";
+
+ var iconMarkerTemp=new GIcon();
+ iconMarkerTemp.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
+ iconMarkerTemp.iconSize = new GSize(20,20);
+ iconMarkerTemp.shadowSize = new GSize(22, 20);
+ iconMarkerTemp.infoWindowAnchor = new GPoint(8, 1);
+ iconMarkerTemp.iconAnchor = new GPoint(6, 20);
+ iconMarkerTemp.image="Icons/red-dot.png";
+/* *************************************************************************** Functions **************************************************************************************************** */
+
+/* ************ prevent user from going back to this page by browser's forward button****************************** */
+
+function backButtonOverride()
+{
+ // Work around a Safari bug
+ // that sometimes produces a blank page
+ setTimeout("backButtonOverrideBody()", 1);
+
+}
+
+function backButtonOverrideBody()
+{
+ // Works if we backed up to get here
+ try {
+ history.forward();
+ } catch (e) {
+ // OK to ignore
+ }
+ // Every quarter-second, try again. The only
+ // guaranteed method for Opera, Firefox,
+ // and Safari, which don't always call
+ // onLoad but *do* resume any timers when
+ // returning to a page
+ setTimeout("backButtonOverrideBody()", 500);
+}
+/* ******************* Useful functions ******************** */
+// Gets an element of the html document by its class name
+ function getElementsByClass(tag, className){
+ var elements = document.getElementsByTagName(tag);
+ var results = new Array();
+ for(var i=0; i< elements.length; i++){
+ if(elements[i].className == className){
+ results[results.length] = elements[i];
+ }
+ }
+ return results;
+ }
+
+
+ function pause(time){
+ d=new Date();
+ diff=0;
+ while(diff < time){
+ n=new Date();
+ diff=n-d;
+ }
+ }
+
+
+ //Creates a GoogleMaps marker
+
+
+
+
+ function createMarker(point, legend, icon){
+ var marker = new GMarker(point, icon);
+ GEvent.addListener(marker, 'click', function() {
+ marker.openInfoWindowHtml(legend);
+ });
+ return marker;
+ }
+
+ var old_lat;
+ var old_lon;
+ //Creates a draggable marker with an EventListener
+ function createDraggableMarker(point,namewpt,wpt_icon,index_wpt, bool){
+ var fpl_file_name="upload/"+planes[selected_index]["id"]+"/flight_plan.xml";
+ var marker = new GMarker(point,{legend: namewpt,icon: wpt_icon,draggable: bool,bouncy:true});
+ //var marker = new GMarker(point,{title: name,draggable: bool});
+ //var marker = new GMarker(point,{draggable: bool});
+ GEvent.addListener(marker, 'click', function() {
+ marker.openInfoWindowHtml(namewpt);
+ });
+ if (bool){
+ GEvent.addListener(marker, 'dragend', function(latlng) {
+ if (latlng){
+ //alert("id wpt="+index_wpt+" name=" +namewpt+" lat="+latlng.lat()+" lon="+latlng.lng());
+ var lat = latlng.lat();
+ var lon = latlng.lng();
+ moveWpt(selected_plane_id,namewpt,lat,lon,false,true,index_wpt);
+ }
+ });
+
+ GEvent.addListener(marker, 'dragstart', function(latlng) {
+ if (latlng){
+ old_lat=latlng.lat();
+ old_lon=latlng.lng();
+ }
+ });
+ }
+
+ return marker;
+ }
+
+
+
+
+
+//Converts ditances from (lat0,lon0) given in meters into latitudes or longitudes, and vice versa
+ function xMetersToDegrees(x,lat0){
+ return (x/1852/60+parseFloat(lat0));
+ }
+ function yMetersToDegrees(y,lat,lon0){
+ return (y/1852/60*Math.cos(lat)+parseFloat(lon0));
+ }
+
+ function xDegreesToMeters(lat,lat0){
+ return((lat-lat0)*1852*60);
+ }
+ function yDegreesToMeters(lat,lon,lon0){
+ return(lat!=0?(lon-lon0)/Math.cos(lat)*1852*60:0);
+ }
+
+
+ function name_from_id(id){
+ var match=false;
+ for (var i=0;i< planes.length;i++){
+ if(planes[i]["id"]==id){match=true;break;}
+ }
+ if (match){
+ return (planes[i]["name"]);
+ }else{
+ return (null);
+ }
+ }
+ /* *************** JQUERY stuffs ***************************** */
+ $(function(){
+ //init();
+ //$("#Settings").draggable();$("#Settings").resizable();
+ //$("#map_canvas").draggable();$("#map_canvas").resizable();
+ //$("#Debug").draggable();$("#Debug").resizable();
+ //$("#choicePanel").draggable();$("#choicePanel").resizable();
+ //$("#FlightPlan").draggable();$("#FlightPlan").resizable();
+ //$("#FlightParams").draggable();$("#FlightParams").resizable();
+ });
+/* ********************* Fonctions de Push ******************** */
+
+ function initialize_push() {
+ // alert('go');
+ p_join_listen(null, 'stream');
+ // TODO il faudra gerer le cas ou cela bloque !!!! et passer en pull
+ // p_join_listen(null, 'pull');
+ p_subscribe('/data/drone/iskill', 'msg from serveur');
+ p_subscribe('/data/drones_maj', 'msg from serveur');
+ p_subscribe('/data/order/waypoint_moved', 'msg from serveur');
+ p_subscribe('/data/order/change_setting', 'msg from serveur');
+ p_subscribe('/data/order/plane_die', 'msg from serveur');
+ p_subscribe('/data/order/plane_resurect', 'msg from serveur');
+ p_subscribe('/data/order/new_plane', 'msg from serveur');
+ p_subscribe('/data/order/block_changed', 'msg from serveur');
+ p_subscribe('/data/order/other', 'msg from serveur');
+ p_subscribe('/data/order/settings', 'msg from serveur');
+
+ p_subscribe('/chat','msg from web client');
+ p_subscribe('/client_action','action from web client');
+ }
+
+ function initialize_push_pullmode() {
+
+ p_join_listen(null, 'pull');
+ p_subscribe('/data/drone/iskill', 'msg from serveur');
+ p_subscribe('/data/drones_maj', 'msg from serveur');
+ p_subscribe('/data/order/waypoint_moved', 'msg from serveur');
+ p_subscribe('/data/order/change_setting', 'msg from serveur');
+ p_subscribe('/data/order/plane_die', 'msg from serveur');
+ p_subscribe('/data/order/plane_resurect', 'msg from serveur');
+ p_subscribe('/data/order/new_plane', 'msg from serveur');
+ p_subscribe('/data/order/block_changed', 'msg from serveur');
+ p_subscribe('/data/order/other', 'msg from serveur');
+ p_subscribe('/data/order/settings', 'msg from serveur');
+
+ p_subscribe('/chat','msg from web client');
+ p_subscribe('/client_action','action from web client');
+ }
+
+ function displayControl(aString) {
+ document.debugEventDisplay.event.value = aString;
+ }
+ // callback on data Events
+ // call apropirate function according to the received event
+
+ function onData(event) {
+ var subject = event.get('p_subject');
+
+ // displayControl(""+ event.toString());
+
+ if (subject=="/data/drones_maj") { handleDronePositionUpsate(event);}
+ else if (subject =="/data/order/waypoint_moved") {orderprocessing_waypoint(event);}
+ else if (subject =="/data/order/block_changed") {orderprocessing_jump2block(event);}
+ else if (subject =="/data/order/change_setting") {orderprocessing_setting(event);}
+ else if (subject =="/data/order/plane_die") {orderprocessing_planedie(event);}
+ else if (subject =="/data/order/plane_resurect"){orderprocessing_planeressurect(event);}
+ else if (subject =="/data/order/new_plane") {orderprocessing_newplane(event);}
+ else if (subject =="/data/drone/iskill") {orderprocessing_planekilled(event);}
+ else if (subject =="/data/order/settings") {orderprocessing_csv_settings(event);}
+ else if (subject =="/chat") {orderprocessing_chat(event);}
+ else if (subject =="/client_action") {orderprocessing_client_action(event);}
+ }
+
+ // callback on all other kind of Events
+
+ <%--function onEvent(event) {
+ var subject = event.get('p_subject');
+ displayControl("EVENT CALLBACK "+subject+"\n" + event.toString());
+
+
+ }
+ --%>
+/* ********************* initilization de l'interface ******************* */
+ function initialize_display(){
+ var aircraftList = document.getElementById("aircraftForm").aircraftList;
+ if (nb_planes ==0)//If there is no active aircraft, the list only has one option : No aircraft
+ {aircraftList.options[0]=new Option("No aircraft");}
+}
+
+/* *********************functions to check airplanes ******************* */
+
+/* *********************Processing events ******************* */
+ // recherche si l'id de l'avion est deja present dans le tableau des drones deja
+ function handleDronePositionUpsate(event){
+ if (planes.length==0) {noPlaneBefore=true;}
+ var id = parseInt(event.get('aircraftId'));
+ var match=false;
+ var insert=false;
+ var aircraftList = document.getElementById("aircraftForm").aircraftList;
+ nb_planes=planes.length;
+ for (var i=0;i< nb_planes;i++){
+ if(planes[i]["id"]> id){insert=true;break;} // on garde le tableau trié
+ if (planes[i]["id"]==id){match=true;break;} // on recupere en i le drone correspondant à id
+ }
+ if(!match){
+ var k=0;
+ if(insert){ // on insert au milieu
+ k=i;
+ planes.splice(i,0,new Array());
+ markers.splice(i,0,null);
+ markers_color.splice(i,0,null);
+ // on insere l'aircraft dan sla liste deroulante
+ //see http://www.mredkj.com/tutorials/tutorial005.html
+ var elOptNew = document.createElement('option');
+ elOptNew.text = event.get('dbName')
+ var elOptOld = aircraftList.options[i];
+ try {
+ aircraftList.add(elOptNew, elOptOld); // standards compliant; doesn't work in IE
+ }
+ catch(ex) {
+ aircraftList.add(elOptNew, i); // IE only
+ }
+ }else{ // on met à la fin du tableau
+ k=planes.length;
+ planes[k] = new Array();
+ markers[k]= null; // inutile
+ markers_color[k]=null;
+ aircraftList.options[k]=new Option(event.get('dbName'));
+ }
+ droneStateDieEvent[k] = -1; // init un timeout vide
+ //
+ planes[k]["id"]=id;
+ planes[k]["name"] =event.get('dbName');
+ planes[k]["lat"] = event.get('dbLatitude');
+ planes[k]["lon"] = event.get('dbLongitude');
+ planes[k]["heading"]= event.get('dbCourse');
+ // maj des param pour selected acrf
+ planes[k]["speed"]= event.get('dbSpeed');
+ planes[k]["altitude"]= event.get('dbAmsl');
+ planes[k]["vspeed"]= event.get('dbVert_speed');
+ planes[k]["height"]= event.get('dbAgl');
+ planes[k]["battery"]= event.get('dbStat_battery');
+ planes[k]["GPS"]= event.get('dbStat_gps');
+ planes[k]["activeBlock"]= event.get('dbActive_block');
+ planes[k]["engine"]= event.get('dbEngine_status');
+ planes[k]["setting_id"]= event.get('dbId_Setting');
+ planes[k]["setting_value"]= event.get('dbSetting_Value');
+ planes[k]["drone_color"]= event.get('drone_color');
+ // gere si le drone peut etre controlé ou non
+ if ((usr_right=="admin")||((usr_right=="user")&&(drone_ctl[event.get('dbName')]!=null))){
+ planes[k]["rights"]= 1;
+ }
+ else
+ {planes[k]["rights"]=0;}
+
+ var icon;
+ if (planes[k]["heading"]>=338 || planes[i]["heading"]< 23){
+ icon = plane_icons[0];
+ }else if (planes[k]["heading"]>=23 && planes[i]["heading"]<68){
+ icon = plane_icons[1];
+ }else if (planes[k]["heading"]>=68 && planes[i]["heading"]<113){
+ icon = plane_icons[2];
+ }else if (planes[k]["heading"]>=113 && planes[i]["heading"]<158){
+ icon = plane_icons[3];
+ }else if (planes[k]["heading"]>=158 && planes[i]["heading"]<203){
+ icon = plane_icons[4];
+ }else if (planes[k]["heading"]>=203 && planes[i]["heading"]<248){
+ icon = plane_icons[5];
+ }else if (planes[k]["heading"]>=248 && planes[i]["heading"]<293){
+ icon = plane_icons[6];
+ }else if (planes[k]["heading"]>=293 && planes[i]["heading"]<337){
+ icon = plane_icons[7];
+ }
+ //A marker is created and added on the map
+ var pos = new GLatLng(planes[k]["lat"],planes[k]["lon"]);
+ markers[k]=createMarker(pos,planes[k]["name"],icon);
+ markers_color[k] = GPolygon.Circle(pos,diametre_drone_balise,"#000000",1,1,planes[i]["drone_color"],0.5)
+ map.addOverlay(markers[k]);
+ map.addOverlay(markers_color[k]);
+ droneStateDataEvent[k] = setTimeout("nodataEventCallBack("+id+")",dataEventTimeoutTime);
+ }
+ else // l event envoyé correspond à un drone deja dans le tableau
+ {
+ if (droneStateDataEvent[i]!=-1) {clearTimeout(droneStateDataEvent[i]);}
+ var heading_changed;
+ //Update of the planes array
+ planes[i]["lat"] = event.get('dbLatitude');
+ planes[i]["lon"] = event.get('dbLongitude');
+ // maj des param pour selected acrf
+ planes[i]["speed"]= event.get('dbSpeed');
+ planes[i]["altitude"]= event.get('dbAmsl');
+ planes[i]["vspeed"]= event.get('dbVert_speed');
+ planes[i]["height"]= event.get('dbAgl');
+ planes[i]["battery"]= event.get('dbStat_battery');
+ planes[i]["GPS"]= event.get('dbStat_gps');
+ planes[i]["activeBlock"]= event.get('dbActive_block');
+ planes[i]["engine"]= event.get('dbEngine_status');
+ planes[i]["setting_id"]= event.get('dbId_Setting');
+ planes[i]["setting_value"]= event.get('dbSetting_Value');
+ planes[i]["drone_color"]= event.get('drone_color');
+ //
+ var new_heading = event.get('dbCourse');
+ var old_heading = planes[i]["heading"];
+ //Update of the icons if the heading has changed
+ if (Math.abs(new_heading-old_heading)>2){
+ var image;
+ if (new_heading>=338 || new_heading< 23){
+ image = plane_icons[0].image;
+ }else if (new_heading>=23 && new_heading<68){
+ image = plane_icons[1].image;
+ }else if (new_heading>=68 && new_heading<113){
+ image = plane_icons[2].image;
+ }else if (new_heading>=113 && new_heading<158){
+ image = plane_icons[3].image;
+ }else if (new_heading>=158 && new_heading<203){
+ image = plane_icons[4].image;
+ }else if (new_heading>=203 && new_heading<248){
+ image = plane_icons[5].image;
+ }else if (new_heading>=248 && new_heading<293){
+ image = plane_icons[6].image;
+ }else if (new_heading>=293 && new_heading<337){
+ image = plane_icons[7].image;
+ }
+ markers[i].setImage(image);
+ }
+ planes[i]["heading"] = new_heading;
+ //Setting the marker to its new position
+ var new_pos = new GLatLng(planes[i]["lat"],planes[i]["lon"]);
+ markers[i].setLatLng(new_pos);
+ //see http://econym.org.uk/gmap/eshapes.htm
+ map.removeOverlay(markers_color[i]);
+ markers_color[i] = GPolygon.Circle(new_pos,diametre_drone_balise,"#000000",1,1,planes[i]["drone_color"],0.5);
+ map.addOverlay(markers_color[i]);
+ droneStateDataEvent[i] = setTimeout("nodataEventCallBack("+id+")",dataEventTimeoutTime);
+ }
+ nb_planes=planes.length;
+
+ document.getElementById("aircraftList").options.length=planes.length;
+ if (tracking&&nb_planes!=0){//If tracking is activated, the map is centered on the aircraft
+ var zoom = map.getZoom();
+ var plane_number = aircraftList.selectedIndex;
+ map.setCenter(new GLatLng(planes[plane_number]["lat"],planes[plane_number]["lon"]),zoom);
+ }
+
+ if (noPlaneBefore==true){
+ noPlaneBefore=false;// !!! interruption possible
+ active_block_id=planes[0]["activeBlock"];
+ aircraftList.options[0].selected=true;
+ selected_plane = planes[0]["name"];
+ selected_plane_id = planes[0]["id"];
+ DOMImplementation("upload/"+planes[0]["id"]+"/flight_plan.xml",fplDisplay);
+ DOMImplementation("upload/"+planes[0]["id"]+"/settings.xml",settingsDisplay);
+ }
+ selected_plane_update(selected_plane_id);
+ }
+
+
+/* ******************** affichage log ******************* */
+
+var coloryellow = true;
+function addMsgLog(msg)
+{
+ var element = document.getElementById("info");
+ var newinfodiv = document.createElement("div");
+ var newinfotxt = document.createTextNode(msg);
+ if (coloryellow) {newinfodiv.style.background = '#FFE4B5';coloryellow=false;}
+ else {newinfodiv.style.background = '#D2B48C';coloryellow=true;}
+ newinfodiv.appendChild(newinfotxt);
+ element.appendChild(newinfodiv);
+}
+/* ******************** Initialization of the page ******************* */
+
+/* Initialization of the page : map, markers, aircraft list... */
+
+
+ function initialize() {
+
+ if (GBrowserIsCompatible()) {
+ // initialize_planes_data();
+ initialize_display();
+ initialize_push();
+ map = new GMap2(document.getElementById("map_canvas"));//Map creation
+ map.setMapType(G_HYBRID_MAP);
+ var point= new GLatLng(43.46223, 1.27289);
+ map.setCenter(point,15);//Center the map on a temporary point
+ map.setUIToDefault();
+ //
+ GEvent.addListener(map, "zoomend", function(oldlevel,newlevel) {
+ var d = newlevel-oldlevel;
+ if (d<0) {
+ diametre_drone_balise=diametre_drone_balise*(-2*d);
+ }
+ else
+ {
+ diametre_drone_balise=diametre_drone_balise/(2*d);
+ }
+ });
+ }else{
+ alert("Your browser is not compatible with Google Maps !");
+ }
+ }
+
+
+
+/* Updating of the selected aircraft flight parameters */
+// recherche la place de l'avion dans le tableau
+ function seekIndex(plane_id)
+ {
+ var i = 0;
+ var trouve = false;
+ var res=-1;
+ while ((ilat y->lon !');
+ x = parseFloat(childXML.getAttribute("x"));
+ y = parseFloat(childXML.getAttribute("y"));
+ lat=xMetersToDegrees(x,lat0);
+ lon=yMetersToDegrees(y,lat,lon0);
+ }
+ else
+ {
+ lat=parseFloat(childXML.getAttribute("lat"));
+ lon=parseFloat(childXML.getAttribute("long"));
+ }
+ var right=planes[selected_index]["rights"];
+ waypoints[index_wpt]["marker"]=null;
+
+ if (right==1){
+ waypoints[index_wpt]["marker"]=createDraggableMarker(new GLatLng(lat,lon),nameWpt,wpt_icon,index_wpt, true);
+ }else {
+ waypoints[index_wpt]["marker"]=createDraggableMarker(new GLatLng(lat,lon),nameWpt,wpt_icon,index_wpt, false);
+ }
+ map.addOverlay(waypoints[index_wpt]["marker"]);
+
+ var alt=false;
+ if (childXML.getAttribute("alt")!=null){
+ alt=childXML.getAttribute("alt");
+ waypoints[index_wpt]["alt"]=parseFloat(childXML.getAttribute("alt"));
+ }
+ var node_url="";
+ if (right==1){
+ node_url = "javascript:moveWpt("+selected_index+",'"+nameWpt+"',"+lat+","+lon+","+alt+",false,"+(index_wpt)+")";
+ }
+ /////
+ index_wpt++;
+ var newindex = index++;
+ fpl_tree.add(newindex,index_pere,nameWpt,node_url);
+ for(var k =0;k< nbr_attrib;k++){
+ var newindex_attrib_name = index++;
+ var newindex_attrib_value = index++;
+ fpl_tree.add(newindex_attrib_name,newindex,childXML.attributes[k].nodeName);
+ fpl_tree.add(newindex_attrib_value,newindex_attrib_name,childXML.attributes[k].nodeValue);
+ //txt = txt + childXML.attributes[k].nodeName + "=" + childXML.attributes[k].nodeValue +" ";
+ }
+ }
+ }
+ else if (childXML.nodeName=="block")
+ { var node_url="";var txt_block_name="";
+ if(childXML.attributes!=null){
+ var block_name=childXML.getAttribute("name");//.replace(/ /g, '_');
+ blocks[index_block]=new Array();
+ blocks[index_block]["name"]=block_name;
+ if (active_block_id==index_block){
+ active_block_name=block_name;
+ txt_block_name = ""+block_name+" ";
+ }
+ else
+ {
+ txt_block_name = block_name;
+ }
+ var right=planes[selected_index]["rights"];
+
+ if (right==1){
+ node_url="javascript:activateBlock("+selected_index+",'"+block_name+"',"+index_block+")";
+ }
+ index_block++;
+ var txt = txt_block_name+ " : ";
+ var nbr_attrib = childXML.attributes.length;
+ for(var k =0;k< nbr_attrib;k++){
+ if (childXML.attributes[k].nodeName!="name"){
+ var newindex_attrib_name = index++;
+ var newindex_attrib_value = index++;
+ txt = txt + childXML.attributes[k].nodeName + "=" + childXML.attributes[k].nodeValue +" ";
+ }
+ }
+ }
+ var newindex = index++;
+ fpl_tree.add(newindex,index_pere,txt,node_url);
+ }
+ // recursion
+ if(childXML.hasChildNodes()) {
+ var nodes=childXML.childNodes.length;
+ for(var i=0; i90.0)||(l<-90.0)||isNaN(new_lat)) {
+ alert('wrong format for a latitude... should be within [-90:+90]');
+ return;
+ }
+ new_lon=prompt("longitude=",mylon);
+ if ((new_lon==null)){
+ return;
+ }
+ l = parseFloat(new_lon);
+ if ((l>180.0)||(l<-180.0)||isNaN(new_lon)) {
+ alert('wrong format for a longitude... should be within [-180:+180]');
+ return;
+ }
+ if (alt){
+ new_alt=prompt("altitude=",alt);
+ if ((new_alt==null)){
+ return;
+ }
+ l = parseFloat(new_alt);
+ if ((l<=0.0)||isNaN(new_alt)) {
+ alert('wrong format for an altitude... should be positive');
+ return;
+ }
+ }
+ //
+ old_lat = waypoints[idwpt]["lat"];
+ old_lon = waypoints[idwpt]["lon"];
+ }else{
+ new_lat=mylat;
+ new_lon=mylon;
+ }
+
+
+ //Ajax request to edit the flight plan xml file
+ var xhr = getXMLHttpRequest();
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState == 4 && xhr.status == 200) {
+ // maj de l'affichage fpl
+ var xmlResponse = xhr.responseXML.documentElement;
+ var rep = xmlResponse.getElementsByTagName("waypoint_to_move")[0];
+ var idwpt_requested = parseInt(rep.getAttribute("idwpt"))-1;// cf waypoint fictif ivy
+ var acid_requested = parseInt(rep.getAttribute("acid"));
+ var lat_requested = parseFloat(rep.getAttribute("newlat"));
+ var lon_requested = parseFloat(rep.getAttribute("newlon"));
+ var was_dragged = rep.getAttribute("dragged");
+ var name_drone = planes[seekIndex(acid_requested)]["name"];
+ // on ne met à jour visuellement que si le focus est sur le drone selecté
+ if (acid_requested==selected_plane_id){
+ // mettre le waypoint dans un etat intermediaire
+ // en attendant l'accuse de reception
+ var right=planes[selected_index]["rights"];
+ var marker_tmp;
+ if (right==1){
+ marker_tmp=createDraggableMarker(new GLatLng(old_lat,old_lon),waypoints[idwpt_requested]["name"],wpt_icon,idwpt_requested, true);
+ }else {
+ marker_tmp=createDraggableMarker(new GLatLng(old_lat,old_lon),waypoints[idwpt_requested]["name"],wpt_icon,idwpt_requested, false);
+ }
+ var name_wpt = waypoints[idwpt_requested]["name"];
+ var timer=setTimeout("callback_waypoint("+acid_requested+","+idwpt_requested+")",order_response_timeout);
+ waypoint_modif[idwpt_requested] = new createWaypoint(acid_requested,idwpt_requested,name_wpt,marker_tmp,timer);
+ // on efface le marker courant
+ // meme si elle a ete deplacé par drag & drop
+ // on cree un marker non draggable avec une icone temporaire
+ map.removeOverlay(waypoints[idwpt_requested]["marker"]);
+ waypoints[idwpt_requested]["marker"] = createMarker(new GLatLng(lat_requested,lon_requested),name_wpt,iconMarkerTemp);
+ if (waypoints[idwpt_requested]["marker"]!=null) map.addOverlay(waypoints[idwpt_requested]["marker"]);
+ else alert('echec creation wpt tmp');
+ addMsgLog("waypoint "+ name_wpt +" for drone " + name_drone +" will be moved");
+ }
+ else
+ {
+ addMsgLog("waypoint "+ idwpt_requested +" for drone " + name_drone +" will be moved");
+ }
+
+ }
+ };
+ xhr.open("POST",ajax_url,true);
+ xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
+ // on informe les autres clients de ne pas modifier le waypoint en cours (via pushlet)
+ p_publish('/client_action', 'login',usr_login,'action', 'lock', 'type_obj', 'waypoint', 'id_obj',idwpt,'webiddrone',selected_plane_id);
+ // on passe en parametre le index_wpt+1 car dans paparazzi il y a un wpt predefini a zero
+
+ if(alt!=false){
+ xhr.send("order=fpl_update&wpt_name="+name+"&aircraft_id=" +selected_plane_id+"&wpt_id="+(idwpt+1)+"&new_lat="+new_lat+"&new_lon="+new_lon+"&new_alt="+new_alt+"&dragged="+dragged+"&new_alt_for_fpl=1");
+ //alert("wptid="+i+" lat="+new_lat+"lon="+new_lon+"alt="+new_alt);
+ }else{
+ var alti=document.getElementById("altitude");var h=parseFloat(alti.innerHTML);
+ xhr.send("order=fpl_update&wpt_name="+name+"&aircraft_id=" +selected_plane_id+"&wpt_id="+(idwpt+1)+"&new_lat="+new_lat+"&new_lon="+new_lon+"&new_alt="+parseFloat(alti.innerHTML)+"&dragged="+dragged+"&new_alt_for_fpl=0");
+ //alert("wptid="+i+" lat="+new_lat+"lon="+new_lon+"alt="+h);
+ }
+}
+
+
+/* ******** Activate a flight plan block ******** */
+
+
+
+ function activateBlock(ac_webid,blockname,block_id){
+ // verifie qu'il n'y pas pas un verrou sur le block posé par un autre client
+ var k=0;
+ var trouve = false;
+ while ((!trouve)&&(k= parseFloat(min)) ){
+ correct=true;
+ var xhr = getXMLHttpRequest();
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState == 4 && xhr.status == 200) {
+ var xmlResponse = xhr.responseXML.documentElement;
+ var rep = xmlResponse.getElementsByTagName("setting_to_change")[0];
+ var idsetting_requested = parseInt(rep.getAttribute("setting_id"));
+ var acid_requested = parseInt(rep.getAttribute("acid"));
+ var name_drone = planes[seekIndex(acid_requested)]["name"];
+ addMsgLog("request change setting "+ idsetting_requested +" for drone " + name_drone +" has been sent");
+ // mise en place d'un timer d'accusé reception
+ if(acid_requested==planes[selected_index]["id"]){
+ setting_change_timeout=setTimeout("callback_setting("+acid_requested+","+idsetting_requested+")",order_response_timeout);
+ setting_to_change_id = idsetting_requested;
+ }
+ }
+ };
+ xhr.open("POST",ajax_url,true);
+ xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
+ //Send the parameters to the php page :
+ xhr.send("order=modif_setting&aircraft_id=" +selected_plane_id+"&setting_id="+idsetting+"&value="+new_value);
+
+ }else{
+ new_value=prompt("Wrong value, please enter a value between "+min+" and "+max+" with a step of "+step+" :");
+ if (new_value==null){return;}
+ }
+ }
+ }
+
+ function changeSetting2(idsetting,new_value){
+
+ var xhr = getXMLHttpRequest();
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState == 4 && xhr.status == 200) {
+ var xmlResponse = xhr.responseXML.documentElement;
+ var rep = xmlResponse.getElementsByTagName("setting_to_change")[0];
+ var idsetting_requested = parseInt(rep.getAttribute("setting_id"));
+ var acid_requested = parseInt(rep.getAttribute("acid"));
+ var name_drone = planes[seekIndex(acid_requested)]["name"];
+ addMsgLog("request change setting "+ idsetting_requested +" for drone " + name_drone +" has been sent");
+ // mise en place d'un timer d'accusé reception
+ if(acid_requested==planes[selected_index]["id"]){
+ setting_change_timeout=setTimeout("callback_setting("+acid_requested+","+idsetting_requested+")",order_response_timeout);
+ setting_to_change_id = idsetting_requested;
+ }
+ }
+ };
+ // on informe les autres clients de ne pas modifier le setting en cours (via pushlet)
+ p_publish('/client_action', 'login',usr_login,'action', 'lock', 'type_obj', 'setting', 'id_obj',idsetting,'webiddrone',selected_plane_id);
+ //
+ xhr.open("POST",ajax_url,true);
+ xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
+ //Send the parameters to the servlet :
+ xhr.send("order=modif_setting&aircraft_id=" +selected_plane_id+"&setting_id="+idsetting+"&value="+new_value);
+
+ }
+
+/* ************************* handle event orders from server ********************************************* */
+
+ function orderprocessing_waypoint(event){
+
+ var acft_id = parseInt(event.get('aircraftId'));
+ var wpt_id = parseInt(event.get('waypointId'))-1; // cf indentation des waypoint sous ivy
+ var lat = event.get('latitude');
+ var lon = event.get('longitude');
+ var alt = event.get('altitude');
+ var name=name_from_id(acft_id);
+ if ((wpt_id>=0)&&(acft_id==selected_plane_id)) {
+ if (waypoint_modif[wpt_id]!=null)
+ {
+ addMsgLog('waypoint ' + wpt_id+' for drone '+name+ ' has been moved to '+lat+"//"+lon+' !');
+ clearTimeout(waypoint_modif[wpt_id].timer)
+ waypoint_modif[wpt_id] = null;
+ DOMImplementation("upload/"+planes[selected_index]["id"]+"/flight_plan.xml",fplDisplay);
+ // inform other web client that waypoint can be changed
+ p_publish('/client_action', 'login',usr_login,'action', 'unlock', 'type_obj', 'waypoint', 'id_obj',wpt_id,'webiddrone',acft_id);
+ }
+ }
+ //document.getElementById("info").innerHTML='waypoint' + wpt_id+' for drone '+name+ ' has been moved !';
+ //addMsgLog('waypoint' + wpt_id+' for drone '+name+ ' has been moved !');
+ //alert(' waypoint' + wpt_id+' for drone '+name+ ' has been moved !');
+ }
+
+ function orderprocessing_jump2block(event) {
+ var acft_id = event.get('aircraftId');
+ var current_block_id = event.get('currentBlockId');
+ if (acft_id==selected_plane_id){
+ /// maj de l'affichage fpl
+ var name_block=blocks[current_block_id]["name"];
+ var name_drone=name_from_id(acft_id);
+ clearTimeout(block_jump_timeout);
+ active_block_id = current_block_id;
+ active_block_name =name_block;
+ // inform other web client that block can be changed
+ p_publish('/client_action', 'login',usr_login,'action', 'unlock', 'type_obj', 'block', 'id_obj',current_block_id,'webiddrone',acft_id);
+ addMsgLog('drone '+ name_drone + ' has jump to block '+ name_block +' !');
+ DOMImplementation("upload/"+planes[selected_index]["id"]+"/flight_plan.xml",fplDisplay);
+ }
+ }
+
+ function orderprocessing_setting(event) {
+ var acft_id = event.get('aircraftId');
+ var setting_id = parseInt(event.get('settingId'));
+ var value = event.get('settingValue');
+ if ((acft_id==selected_plane_id)&&(setting_to_change_id==setting_id)){
+ clearTimeout(setting_change_timeout);
+ setting_to_change_id = -1; // reset
+ var name=name_from_id(acft_id);
+ //DOMImplementation("upload/"+planes[selected_index]["id"]+"/settings.xml",settingsDisplay);
+ selected_plane_update(acft_id);
+ addMsgLog('setting ' + setting_id +' for drone '+ name + ' has been changed to value '+ value +' !');
+ // inform other web client that block can be changed
+ p_publish('/client_action', 'login',usr_login,'action', 'unlock', 'type_obj', 'setting', 'id_obj',setting_id,'webiddrone',acft_id);
+ }
+ }
+
+
+ function orderprocessing_planedie(event){
+ var acft_id = event.get('aircraftId');
+ var order_string = event.get('order');
+ var name=name_from_id(acft_id);
+ //document.getElementById('info').innerHTML='drone ' + name+' is not alive !';
+ addMsgLog('drone ' + name+' is not alive !');
+ var drone_index = seekIndex(acft_id);
+ if(drone_index!=-1)
+ {
+ addMsgLog('drone ' + name+' will be removed in 10 seconds !');
+ droneStateDieEvent[drone_index] = setTimeout("droneDieCallback("+acft_id+")", dieEventTimeoutTime);
+ // on grise l'aircraft sur l'interface
+ }
+ }
+
+ function orderprocessing_planeressurect(event){
+ var acft_id = event.get('aircraftId');
+ var order_string = event.get('order');
+ //document.getElementById('info').innerHTML='drone ' +name+' has been resurrected !';
+ addMsgLog('drone ' +acft_id+' has been resurrected !');
+ var drone_index = seekIndex(acft_id);
+ if(drone_index!=-1)
+ {
+ clearTimeout ( droneStateDieEvent[drone_index] );
+ // on remet l'aircraft en couleur
+ }
+ }
+
+ function orderprocessing_newplane(event){
+ var acft_id = event.get('aircraftId');
+ var order_string = event.get('order');
+ var name= event.get('aircraftName');
+ //document.getElementById('info').innerHTML='drone ' +name+' has been connected !';
+ addMsgLog('drone ' +name+' has been connected !');
+ }
+
+
+ function orderprocessing_planekilled(event){
+ var acft_id = event.get('aircraftId');
+ var name=name_from_id(acft_id);
+ addMsgLog("drone " + name + " deconnection caused by death of ivy bus...");
+ //document.getElementById('info').innerHTML="drone " + name + " deconnection caused by death of ivy bus...";
+ // remove drone...markers....
+ removeDroneDisplay(acft_id);
+ }
+
+ function orderprocessing_csv_settings(event){
+ var acft_id = event.get('aircraftId');
+ var csv = event.get('csv');
+ var index_drone = seekIndex(acft_id);
+ var name=name_from_id(acft_id);
+ if (index_drone!=-1) {
+ planes[index_drone]["csv"]= csv;
+ //addMsgLog("settings updated for drone " + name);
+ if(index_drone==selected_index)
+ {
+ DOMImplementation("upload/"+planes[selected_index]["id"]+"/settings.xml",settingsDisplay);
+ }
+ }
+ }
+
+ function orderprocessing_chat(event){
+ }
+
+ function createLock(id_drone,typ_obj,id_obj,login){
+ this.id_drone = id_drone;
+ this.type_object = typ_obj;
+ this.id_object = id_obj;
+ this.request_login = login;
+ this.lockmsg = function()
+ {return ("user "+this.request_login+ " has locked "+this.type_object +" " +this.id_object);}
+ this.unlockmsg = function()
+ {return ("user "+this.request_login+ " has unlocked "+this.type_object +" " +this.id_object);}
+ }
+
+ var external_waypoint_lock = new Array();
+ var external_block_lock = new Array();
+ var external_setting_lock = new Array();
+ // set or remove a lock to prevent user to change sthg taht is to be changed by another user
+ function orderprocessing_client_action(event){
+ var rqst_login = event.get('login');
+ var rqst_action = event.get('action');
+ var rqst_obj_type = event.get('type_obj');
+ var rqst_obj_id = event.get('id_obj');
+ var rqst_id_drone = event.get('webiddrone');
+ if (rqst_action=='lock'){
+ var lock_obj = new createLock(rqst_id_drone,rqst_obj_type,rqst_obj_id,rqst_login);
+ if (rqst_obj_type=='waypoint') {external_waypoint_lock.push(lock_obj);}
+ else if (rqst_obj_type=='block') {external_block_lock.push(lock_obj);}
+ else if (rqst_obj_type=='setting') {external_setting_lock.push(lock_obj);}
+ addMsgLog(lock_obj.lockmsg());
+ }
+ else if (rqst_action =='unlock'){
+ var trouve = false;
+ var cur_id_obj=-1;
+ var i=0;
+ if (rqst_obj_type=='waypoint')
+ {
+ while((!trouve)&&(i
+
+
+
+
+
+
+
+
+-------- Paparazzi On the Web ! --------
+
+Welcome,
+<%
+ String log = (String) session.getAttribute("login");
+ if(log != null) {
+ out.print(log + "!");
+ String rights = (String) session.getAttribute("rights");
+ if (rights.equals("admin")){
+ out.println(" |
admin page ");
+ }
+ out.println(" |
\"pull\" mode ");
+ out.println(" |
log out ");
+ }
+ else
+ {
+ out.println("");
+ }
+
+%>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+loading...
+
+
+
+
+loading...
+
+
+
+
+
+
Flight Parameters
+
+
+
+
+
+ altitude (m)
+ 0
+
+
+ height
+ 0 m
+
+
+ battery level
+ 0V
+
+
+ speed
+ 0 km/h
+
+
+ GPS status
+ OFF
+
+
+ vertical speed
+ 0 m/s
+
+
+ engine power
+ 0%
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<%
+ out.println("");
+%>
+
+
+<%-- --%>
+
+
\ No newline at end of file
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/META-INF/MANIFEST.MF b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/META-INF/MANIFEST.MF
new file mode 100755
index 0000000000..5e9495128c
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/classes/pushlet.properties b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/classes/pushlet.properties
new file mode 100755
index 0000000000..ba656e138f
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/classes/pushlet.properties
@@ -0,0 +1,128 @@
+#
+# Pushlet configuration.
+# Place this file in the CLASSPATH (e.g. WEB-INF/classes) or directly under WEB-INF.
+#
+# $Id: pushlet.properties,v 1.13 2007/12/07 12:57:40 justb Exp $
+#
+
+#
+#
+#
+config.version=1.0.2
+
+#
+# CLASS FACTORY SPECIFICATION
+#
+# Change these if you want to override any of the core classes
+# within the Pushlet framework with your own custom classes.
+#
+# Examples:
+# - custom SessionManager for authorisation
+# - maintain lists of active subjects (topics)
+# - send events on subscription
+# - plug in custom logging like log4j
+# Note that you must maintain the semantics of each class !
+# Below are the default properties for the core classes.
+controller.class=nl.justobjects.pushlet.core.Controller
+dispatcher.class=nl.justobjects.pushlet.core.Dispatcher
+logger.class=nl.justobjects.pushlet.util.Log4jLogger
+# logger.class=nl.justobjects.pushlet.util.DefaultLogger
+sessionmanager.class=nl.justobjects.pushlet.core.SessionManager
+session.class=nl.justobjects.pushlet.core.Session
+subscriber.class=nl.justobjects.pushlet.core.Subscriber
+subscription.class=nl.justobjects.pushlet.core.Subscription
+
+# sessionmanager.maxsessions=200
+
+#
+# DISPATCHER
+#
+
+
+# TODO: allow properties to be maintained in
+# a user dir
+# config.redirect=/etc/pushlet.properties
+
+#
+# LOGGING
+#
+
+# log level (trace(6) debug(5) info (4), warn(3), error(2), fatal(1))
+# default is info(4)
+log.level=4
+
+#
+# LOCAL EVENT SOURCES
+#
+
+# should local sources be loaded ?
+sources.activate=true
+
+#
+# SESSION
+#
+
+
+# algoritm to generate session key:
+# values: "randomstring" (default) or "uuid".
+# session.id.generation=uuid
+session.id.generation=randomstring
+
+# length of generated session key when using "randomstring" generation
+session.id.size=10
+
+# Overall session lease time in minutes
+# Mainly used for clients that do not perform
+# listening, e.g. when publishing only.
+session.timeout.mins=5
+
+#
+# EVENT QUEUE
+#
+# Properties for per-client data event queue
+
+# Size for
+queue.size=24
+queue.read.timeout.millis=20000
+queue.write.timeout.millis=20
+
+#
+# LISTENING MODE
+#
+
+# You may force all clients to use pull mode
+# for scalability
+listen.force.pull.all=false
+
+#
+# Comma-separated list of User Agent substrings.
+# Force these browsers to use pull mode, since they
+# don't support JS streaming, matching is done using
+# String.indexOf() with lowercased agent strings
+# use multiple criteria with &.
+#
+listen.force.pull.agents=safari
+
+#
+# PULL MODE
+#
+
+# time server should wait on refresing pull client
+pull.refresh.timeout.millis=45000
+
+# minimum/maximum wait time client should wait before refreshing
+# server provides a random time between these values
+pull.refresh.wait.min.millis=2000
+pull.refresh.wait.max.millis=6000
+
+#
+# POLL MODE
+#
+
+# time server should wait on refresing poll client
+poll.refresh.timeout.millis=60000
+
+# minimum/maximum wait time client should wait before refreshing
+# server provides a random time between these values
+poll.refresh.wait.min.millis=6000
+poll.refresh.wait.max.millis=10000
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/classes/sources.properties b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/classes/sources.properties
new file mode 100755
index 0000000000..e8aeb36a43
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/classes/sources.properties
@@ -0,0 +1,28 @@
+#
+# Properties file for EventSource objects to be instantiated.
+#
+# Place this file in the CLASSPATH (e.g. WEB-INF/classes) or directly under WEB-INF.
+#
+# $Id: sources.properties,v 1.2 2007/11/10 14:12:16 justb Exp $
+#
+# Each EventSource is defined as =
+# 1. should be unique within this file but may be any name
+# 2. is the full class name
+#
+#
+# Define Pull Sources here. These classes must be derived from
+# nl.justobjects.pushlet.core.EventPullSource
+# Inner classes are separated with a $ sign from the outer class.
+#source1=nl.justobjects.pushlet.test.TestEventPullSources$TemperatureEventPullSource
+#source2=nl.justobjects.pushlet.test.TestEventPullSources$SystemStatusEventPullSource
+#source3=nl.justobjects.pushlet.test.TestEventPullSources$PushletStatusEventPullSource
+#source4=nl.justobjects.pushlet.test.TestEventPullSources$AEXStocksEventPullSource
+#source5=nl.justobjects.pushlet.test.TestEventPullSources$WebPresentationEventPullSource
+#source6=nl.justobjects.pushlet.test.TestEventPullSources$PingEventPullSource
+
+source1=pow.webserver.Serveur$IvyEventSource
+
+# TO BE DONE IN NEXT VERSION
+# define Push Sources here. These must implement the interface
+# nl.justobjects.pushlet.core.EventSource
+
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/commons-codec-1.4.jar b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/commons-codec-1.4.jar
new file mode 100755
index 0000000000..458d432da8
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/commons-codec-1.4.jar differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/commons-fileupload-1.2.1.jar b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/commons-fileupload-1.2.1.jar
new file mode 100755
index 0000000000..aa209b3887
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/commons-fileupload-1.2.1.jar differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/commons-httpclient-3.1.jar b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/commons-httpclient-3.1.jar
new file mode 100755
index 0000000000..7c59774aed
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/commons-httpclient-3.1.jar differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/commons-io-1.4.jar b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/commons-io-1.4.jar
new file mode 100755
index 0000000000..133dc6cb35
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/commons-io-1.4.jar differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/commons-logging-1.1.1.jar b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/commons-logging-1.1.1.jar
new file mode 100755
index 0000000000..8758a96b70
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/commons-logging-1.1.1.jar differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/jdom.jar b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/jdom.jar
new file mode 100755
index 0000000000..65a1b3f737
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/jdom.jar differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/log4j-1.2.16.jar b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/log4j-1.2.16.jar
new file mode 100755
index 0000000000..3f9d847618
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/log4j-1.2.16.jar differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/mysql-connector-java-5.1.12-bin.jar b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/mysql-connector-java-5.1.12-bin.jar
new file mode 100755
index 0000000000..af5847eed4
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/mysql-connector-java-5.1.12-bin.jar differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/pushlet.jar b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/pushlet.jar
new file mode 100755
index 0000000000..6dc1c22e21
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/lib/pushlet.jar differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/web.xml b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/web.xml
new file mode 100755
index 0000000000..16b18bbc06
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/WEB-INF/web.xml
@@ -0,0 +1,54 @@
+
+
+ ServletPow
+
+ index.html
+ index.htm
+ index.jsp
+ default.html
+ default.htm
+ default.jsp
+
+
+
+ Greeting
+ Greeting
+ pow.webserver.Greeting
+
+
+ Greeting
+ /Greeting.srv
+
+
+
+ Pushlet
+ Pushlet
+ nl.justobjects.pushlet.servlet.Pushlet
+ 1
+
+
+ Pushlet
+ /pushlet.srv
+
+
+
+ Ivy2TomcatHttpServer
+ Ivy2TomcatHttpServer
+ pow.webserver.Ivy2TomcatHttpServer
+ 1
+
+
+ Ivy2TomcatHttpServer
+ /Ivy2TomcatHttpServer.srv
+
+
+
+ ajaxRqst
+ ajaxRqst
+ pow.webserver.AjaxRqst
+
+
+ ajaxRqst
+ /ajaxRqst.srv
+
+
\ No newline at end of file
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/admin.jsp b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/admin.jsp
new file mode 100755
index 0000000000..77c8c2fa9c
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/admin.jsp
@@ -0,0 +1,790 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+<%@page import="java.util.*,pow.webserver.UserTab,pow.webserver.User,javax.xml.parsers.*, org.w3c.dom.*,org.xml.sax.*,java.io.*" %>
+<%
+// recuperation des données sur le serveur
+ String default_folder = this.getServletContext().getRealPath("");
+ UserTab logTab = UserTab.unserialize(default_folder + "/conf/"+"userTable.tbl");
+ Iterator itr=logTab.getLoginIterator();
+ //
+ UserTab logIvyTab = UserTab.unserialize(default_folder + "/conf/"+"userIvyTable.tbl");
+ Iterator itrIvy=logIvyTab.getLoginIterator();
+ // lecture liste des noms de drones ds immat.xml
+ DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
+ // création d'un constructeur de documents
+ DocumentBuilder constructeur = fabrique.newDocumentBuilder();
+ // lecture du contenu d'un fichier XML avec DOM
+ File xml = new File(default_folder + "/conf/"+"immat.xml");
+ Document document = constructeur.parse(xml);
+
+
+%>
+
+
+
+
+
+
+
+Administration page
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/conf/immat.xml b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/conf/immat.xml
new file mode 100755
index 0000000000..42965d30c1
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/conf/immat.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/conf/pow_conf.xml b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/conf/pow_conf.xml
new file mode 100755
index 0000000000..23600da6cd
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/conf/pow_conf.xml
@@ -0,0 +1,24 @@
+
+
+ 8535
+ 8536
+ 1024
+ 10000
+ pow_sql
+ true silent pow_user
+ pwdpow_user
+ admin
+ admin@pow.fr
+
+ 1200000
+
+ 60000
+
+
+10000
+
+5000
+
+30000
+ 30000
+
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/help.jsp b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/help.jsp
new file mode 100755
index 0000000000..cc8eedffa0
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/help.jsp
@@ -0,0 +1,58 @@
+<%@page import="pow.webserver.Conf" %>
+
+
+
+
+
+ Welcome to Paparazzi On the Web
+
+
+
+
+
+
+
+
+
+Welcome on Paparazzi On the Web help page.
+ This page is here to help you to use the Paparazzi On the Web (POW) application. POW is a part of Paparazzi which is a open-project of civil UAV control. With Paparazzi On the Web, you are able to observe and eventually control the UAVs of the system Paparazzi thanks to a browser with your internet connexion. To learn more about Paparazzi project, click here .
+Paparazzi On the Web is optimised for Firefox browser. If you want to have a better performance, you can dowload Firefox here .
+Start page
+If you have a login and a password on Paparazzi On the Web, you can use them to enter the application. Else, click on enter as a guest.
+
+Main page
+You are now on Paparazzi On the Web main page. You can see several boxes. We will describe all those boxes and show you the interactions you can have with them.
+
+Choose an aircraft
+Here you can select the aircraft you want to observe or control. Click on the arrow to see the list of the aircrafts that are available. Click on the aircraft you want to interacte with.
+You can also choose to activate or desactivate tracking. When tracking is activated, the map is always centered on the selected aircraft.
+
+
+
+The map
+On the map, you can see all the aircrafts that are available. If tracking is activated, the map will be centered on the selected aircraft. There are also red lozenges which are the waypoints of the selected UAV. If you are autentified on Paparazzi On the Web and if your profile gives you the authorization, you can move those waypoints with drag and drop.
+
+The flight plan
+Through this box, you can obtain some informations on the flight plan that is followed by the selected plane. If you move your cursor on the informations tab, you obtain informations on the flightplan. If you put your cursor on the "active block" tab, you can see the list of the flight plan blocks that the plane can follow. The active block is in red. If you are authentified and if you have the authorization, you can change the active block by clicking on its name. The waypoints tab gives you informations on the different waypoints. If you are authentified and if you have the authorization, you can move those waypoints by clicking on "move waypoint". In this case, a new windows is openned where you indicate where you want to move the waypoint.
+You can also move a waypoint by dragging the icon on the map to its new position.
+
+The flight parameters
+This box displays the flight parameters of the selected aircraft. When a value is out of its normal range, it becomes red.
+
+The settings
+In this box you can, if you are allowed to control the selected aircraft, you change some settings of this aircraft by clicking on the name of the setting.
+
+Any problem ?
+If you have any display problem, such as a ghost aircraft icon, or an aircraft that is not displayed in the aircrafts list, you might resolve it by reloading the page by pressing F5 key.
+For any other problem, please inform
+<%
+out.print("the administrator "); %>.
+Click here to return to the homepage.
+
+
+
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/idError.html b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/idError.html
new file mode 100755
index 0000000000..a15edb3f6d
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/idError.html
@@ -0,0 +1,14 @@
+
+
+
+
+ Welcome to Paparazzi On the Web
+
+
+
+
+
+Sorry, an error occured during your identification. Click here to return on the homepage.
+
+
\ No newline at end of file
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/base.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/base.gif
new file mode 100755
index 0000000000..9ac0b117b0
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/base.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/cd.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/cd.gif
new file mode 100755
index 0000000000..7503819404
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/cd.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/empty.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/empty.gif
new file mode 100755
index 0000000000..b5cf52378f
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/empty.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/folder.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/folder.gif
new file mode 100755
index 0000000000..eb129763dc
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/folder.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/folderopen.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/folderopen.gif
new file mode 100755
index 0000000000..c5c31102d5
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/folderopen.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/globe.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/globe.gif
new file mode 100755
index 0000000000..57123d0e69
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/globe.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/imgfolder.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/imgfolder.gif
new file mode 100755
index 0000000000..e6d880347f
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/imgfolder.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/join.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/join.gif
new file mode 100755
index 0000000000..34dd47610a
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/join.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/joinbottom.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/joinbottom.gif
new file mode 100755
index 0000000000..48b81c80a9
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/joinbottom.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/line.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/line.gif
new file mode 100755
index 0000000000..1a259eea00
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/line.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/minus.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/minus.gif
new file mode 100755
index 0000000000..3d212a97ae
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/minus.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/minusbottom.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/minusbottom.gif
new file mode 100755
index 0000000000..dc3198be27
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/minusbottom.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/musicfolder.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/musicfolder.gif
new file mode 100755
index 0000000000..f620789feb
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/musicfolder.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/nolines_minus.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/nolines_minus.gif
new file mode 100755
index 0000000000..2592ac20f3
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/nolines_minus.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/nolines_plus.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/nolines_plus.gif
new file mode 100755
index 0000000000..f258ce211a
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/nolines_plus.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/page.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/page.gif
new file mode 100755
index 0000000000..42d7318c5d
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/page.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/plus.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/plus.gif
new file mode 100755
index 0000000000..b2c997233b
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/plus.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/plusbottom.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/plusbottom.gif
new file mode 100755
index 0000000000..b5671d891a
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/plusbottom.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/question.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/question.gif
new file mode 100755
index 0000000000..dd4e685078
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/question.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/trash.gif b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/trash.gif
new file mode 100755
index 0000000000..cfa0f000e1
Binary files /dev/null and b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/img/trash.gif differ
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/index.jsp b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/index.jsp
new file mode 100755
index 0000000000..aad5c605b5
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/index.jsp
@@ -0,0 +1,69 @@
+
+
+
+
+ Welcome to Paparazzi On the Web
+
+
+
+
+
+
+
+
+
+
+
+Welcome to Paparazzi On The Web !
+
+
+
+
+
+
+
+or
+
+
+
+
+help ?
+
+
\ No newline at end of file
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/js/DOMImplementation.js b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/js/DOMImplementation.js
new file mode 100755
index 0000000000..5e94107932
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/js/DOMImplementation.js
@@ -0,0 +1,24 @@
+function DOMImplementation(sUrl, fCallback) {
+ var dom;
+ if(window.ActiveXObject) {
+ dom = new ActiveXObject("Microsoft.XMLDOM");
+ dom.onreadystatechange = function() {
+ if(dom.readyState == 4) {
+ //alert("win "+sUrl+" loaded");
+ fCallback(dom);
+ }
+ };
+ }
+ else if(document.implementation && document.implementation.createDocument) {
+ dom = document.implementation.createDocument("", "", null);
+ dom.onload = function() {
+ //alert("other "+sUrl+" loaded");
+ fCallback(dom);
+ }
+ }
+ else {
+ alert("Votre navigateur ne gère pas l'importation de fichiers XML");
+ return;
+ }
+ dom.load(sUrl);
+}
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/js/XHR_object.js b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/js/XHR_object.js
new file mode 100755
index 0000000000..544a2b1a2e
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/js/XHR_object.js
@@ -0,0 +1,20 @@
+function getXMLHttpRequest() {
+ var xhr = null;
+
+ if (window.XMLHttpRequest || window.ActiveXObject) {
+ if (window.ActiveXObject) {
+ try {
+ xhr = new ActiveXObject("Msxml2.XMLHTTP");
+ } catch(e) {
+ xhr = new ActiveXObject("Microsoft.XMLHTTP");
+ }
+ } else {
+ xhr = new XMLHttpRequest();
+ }
+ } else {
+ alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
+ return null;
+ }
+
+ return xhr;
+}
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/js/browserdetect.js b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/js/browserdetect.js
new file mode 100755
index 0000000000..1e0b64da62
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/js/browserdetect.js
@@ -0,0 +1,97 @@
+// Browser Detect Lite v2.1.4
+// http://www.dithered.com/javascript/browser_detect/index.html
+// modified by Chris Nott (chris@NOSPAMdithered.com - remove NOSPAM)
+
+
+function BrowserDetectLite() {
+ var ua = navigator.userAgent.toLowerCase();
+
+ // browser name
+ this.isGecko = (ua.indexOf('gecko') != -1 && ua.indexOf('safari') == -1);
+ this.isMozilla = (this.isGecko && ua.indexOf('gecko/') + 14 == ua.length);
+ this.isNS = ( (this.isGecko) ? (ua.indexOf('netscape') != -1) : ( (ua.indexOf('mozilla') != -1) && (ua.indexOf('spoofer') == -1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1) && (ua.indexOf('hotjava') == -1) ) );
+ this.isIE = ( (ua.indexOf('msie') != -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1) );
+ this.isSafari = (ua.indexOf('safari') != - 1);
+ this.isOpera = (ua.indexOf('opera') != -1);
+ this.isKonqueror = (ua.indexOf('konqueror') != -1 && !this.isSafari);
+ this.isIcab = (ua.indexOf('icab') != -1);
+ this.isAol = (ua.indexOf('aol') != -1);
+
+ // spoofing and compatible browsers
+ this.isIECompatible = ( (ua.indexOf('msie') != -1) && !this.isIE);
+ this.isNSCompatible = ( (ua.indexOf('mozilla') != -1) && !this.isNS && !this.isMozilla);
+
+ // browser version
+ this.versionMinor = parseFloat(navigator.appVersion);
+
+ // correct version number
+ if (this.isNS && this.isGecko) {
+ this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('/') + 1 ) );
+ }
+ else if (this.isIE && this.versionMinor >= 4) {
+ this.versionMinor = parseFloat( ua.substring( ua.indexOf('msie ') + 5 ) );
+ }
+ else if (this.isMozilla) {
+ this.versionMinor = parseFloat( ua.substring( ua.indexOf('rv:') + 3 ) );
+ }
+ else if (this.isSafari) {
+ this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('/') + 1 ) );
+ }
+ else if (this.isOpera) {
+ if (ua.indexOf('opera/') != -1) {
+ this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera/') + 6 ) );
+ }
+ else {
+ this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera ') + 6 ) );
+ }
+ }
+ else if (this.isKonqueror) {
+ this.versionMinor = parseFloat( ua.substring( ua.indexOf('konqueror/') + 10 ) );
+ }
+ else if (this.isIcab) {
+ if (ua.indexOf('icab/') != -1) {
+ this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab/') + 6 ) );
+ }
+ else {
+ this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab ') + 6 ) );
+ }
+ }
+
+ this.versionMajor = parseInt(this.versionMinor);
+ this.geckoVersion = ( (this.isGecko) ? ua.substring( (ua.lastIndexOf('gecko/') + 6), (ua.lastIndexOf('gecko/') + 14) ) : -1 );
+
+ // dom support
+ this.isDOM1 = (document.getElementById);
+ this.isDOM2Event = (document.addEventListener && document.removeEventListener);
+
+ // css compatibility mode
+ this.mode = document.compatMode ? document.compatMode : 'BackCompat';
+
+ // platform
+ this.isWin = (ua.indexOf('win') != -1);
+ this.isWin32 = (this.isWin && ( ua.indexOf('95') != -1 || ua.indexOf('98') != -1 || ua.indexOf('nt') != -1 || ua.indexOf('win32') != -1 || ua.indexOf('32bit') != -1 || ua.indexOf('xp') != -1) );
+ this.isMac = (ua.indexOf('mac') != -1);
+ this.isUnix = (ua.indexOf('unix') != -1 || ua.indexOf('sunos') != -1 || ua.indexOf('bsd') != -1 || ua.indexOf('x11') != -1)
+ this.isLinux = (ua.indexOf('linux') != -1);
+
+ // specific browser shortcuts
+ this.isNS4x = (this.isNS && this.versionMajor == 4);
+ this.isNS40x = (this.isNS4x && this.versionMinor < 4.5);
+ this.isNS47x = (this.isNS4x && this.versionMinor >= 4.7);
+ this.isNS4up = (this.isNS && this.versionMinor >= 4);
+ this.isNS6x = (this.isNS && this.versionMajor == 6);
+ this.isNS6up = (this.isNS && this.versionMajor >= 6);
+ this.isNS7x = (this.isNS && this.versionMajor == 7);
+ this.isNS7up = (this.isNS && this.versionMajor >= 7);
+
+ this.isIE4x = (this.isIE && this.versionMajor == 4);
+ this.isIE4up = (this.isIE && this.versionMajor >= 4);
+ this.isIE5x = (this.isIE && this.versionMajor == 5);
+ this.isIE55 = (this.isIE && this.versionMinor == 5.5);
+ this.isIE5up = (this.isIE && this.versionMajor >= 5);
+ this.isIE6x = (this.isIE && this.versionMajor == 6);
+ this.isIE6up = (this.isIE && this.versionMajor >= 6);
+
+ this.isIE4xMac = (this.isIE4x && this.isMac);
+}
+var browser = new BrowserDetectLite();
diff --git a/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/js/curvycorners.js b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/js/curvycorners.js
new file mode 100755
index 0000000000..511c78dd9d
--- /dev/null
+++ b/sw/in_progress/pow/ServletPow/eclipse ServletPow/WebContent/js/curvycorners.js
@@ -0,0 +1 @@
+function browserdetect(){var A=navigator.userAgent.toLowerCase();this.isIE=A.indexOf("msie")>-1;this.ieVer=this.isIE?/msie\s(\d\.\d)/.exec(A)[1]:0;this.isMoz=A.indexOf("firefox")!=-1;this.isSafari=A.indexOf("safari")!=-1;this.quirksMode=this.isIE&&(!document.compatMode||document.compatMode.indexOf("BackCompat")>-1);this.isOp="opera" in window;this.isWebKit=A.indexOf("webkit")!=-1;if(this.isIE){this.get_style=function(D,F){if(!(F in D.currentStyle)){return""}var C=/^([\d.]+)(\w*)/.exec(D.currentStyle[F]);if(!C){return D.currentStyle[F]}if(C[1]==0){return"0"}if(C[2]&&C[2]!=="px"){var B=D.style.left;var E=D.runtimeStyle.left;D.runtimeStyle.left=D.currentStyle.left;D.style.left=C[1]+C[2];C[0]=D.style.pixelLeft;D.style.left=B;D.runtimeStyle.left=E}return C[0]}}else{this.get_style=function(B,C){C=C.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase();return document.defaultView.getComputedStyle(B,"").getPropertyValue(C)}}}var curvyBrowser=new browserdetect;if(curvyBrowser.isIE){try{document.execCommand("BackgroundImageCache",false,true)}catch(e){}}function curvyCnrSpec(A){this.selectorText=A;this.tlR=this.trR=this.blR=this.brR=0;this.tlu=this.tru=this.blu=this.bru="";this.antiAlias=true}curvyCnrSpec.prototype.setcorner=function(B,C,A,D){if(!B){this.tlR=this.trR=this.blR=this.brR=parseInt(A);this.tlu=this.tru=this.blu=this.bru=D}else{propname=B.charAt(0)+C.charAt(0);this[propname+"R"]=parseInt(A);this[propname+"u"]=D}};curvyCnrSpec.prototype.get=function(D){if(/^(t|b)(l|r)(R|u)$/.test(D)){return this[D]}if(/^(t|b)(l|r)Ru$/.test(D)){var C=D.charAt(0)+D.charAt(1);return this[C+"R"]+this[C+"u"]}if(/^(t|b)Ru?$/.test(D)){var B=D.charAt(0);B+=this[B+"lR"]>this[B+"rR"]?"l":"r";var A=this[B+"R"];if(D.length===3&&D.charAt(2)==="u"){A+=this[B="u"]}return A}throw new Error("Don't recognize property "+D)};curvyCnrSpec.prototype.radiusdiff=function(A){if(A!=="t"&&A!=="b"){throw new Error("Param must be 't' or 'b'")}return Math.abs(this[A+"lR"]-this[A+"rR"])};curvyCnrSpec.prototype.setfrom=function(A){this.tlu=this.tru=this.blu=this.bru="px";if("tl" in A){this.tlR=A.tl.radius}if("tr" in A){this.trR=A.tr.radius}if("bl" in A){this.blR=A.bl.radius}if("br" in A){this.brR=A.br.radius}if("antiAlias" in A){this.antiAlias=A.antiAlias}};curvyCnrSpec.prototype.cloneOn=function(G){var E=["tl","tr","bl","br"];var H=0;var C,A;for(C in E){if(!isNaN(C)){A=this[E[C]+"u"];if(A!==""&&A!=="px"){H=new curvyCnrSpec;break}}}if(!H){H=this}else{var B,D,F=curvyBrowser.get_style(G,"left");for(C in E){if(!isNaN(C)){B=E[C];A=this[B+"u"];D=this[B+"R"];if(A!=="px"){var F=G.style.left;G.style.left=D+A;D=G.style.pixelLeft;G.style.left=F}H[B+"R"]=D;H[B+"u"]="px"}}G.style.left=F}return H};curvyCnrSpec.prototype.radiusSum=function(A){if(A!=="t"&&A!=="b"){throw new Error("Param must be 't' or 'b'")}return this[A+"lR"]+this[A+"rR"]};curvyCnrSpec.prototype.radiusCount=function(A){var B=0;if(this[A+"lR"]){++B}if(this[A+"rR"]){++B}return B};curvyCnrSpec.prototype.cornerNames=function(){var A=[];if(this.tlR){A.push("tl")}if(this.trR){A.push("tr")}if(this.blR){A.push("bl")}if(this.brR){A.push("br")}return A};function operasheet(C){var A=document.styleSheets.item(C).ownerNode.text;A=A.replace(/\/\*(\n|\r|.)*?\*\//g,"");var D=new RegExp("^s*([\\w.#][-\\w.#, ]+)[\\n\\s]*\\{([^}]+border-((top|bottom)-(left|right)-)?radius[^}]*)\\}","mg");var G;this.rules=[];while((G=D.exec(A))!==null){var F=new RegExp("(..)border-((top|bottom)-(left|right)-)?radius:\\s*([\\d.]+)(in|em|px|ex|pt)","g");var E,B=new curvyCnrSpec(G[1]);while((E=F.exec(G[2]))!==null){if(E[1]!=="z-"){B.setcorner(E[3],E[4],E[5],E[6])}}this.rules.push(B)}}operasheet.contains_border_radius=function(A){return/border-((top|bottom)-(left|right)-)?radius/.test(document.styleSheets.item(A).ownerNode.text)};function curvyCorners(){var G,D,E,B,J;if(typeof arguments[0]!=="object"){throw curvyCorners.newError("First parameter of curvyCorners() must be an object.")}if(arguments[0] instanceof curvyCnrSpec){B=arguments[0];if(!B.selectorText&&typeof arguments[1]==="string"){B.selectorText=arguments[1]}}else{if(typeof arguments[1]!=="object"&&typeof arguments[1]!=="string"){throw curvyCorners.newError("Second parameter of curvyCorners() must be an object or a class name.")}D=arguments[1];if(typeof D!=="string"){D=""}if(D!==""&&D.charAt(0)!=="."&&"autoPad" in arguments[0]){D="."+D}B=new curvyCnrSpec(D);B.setfrom(arguments[0])}if(B.selectorText){J=0;var I=B.selectorText.replace(/\s+$/,"").split(/,\s*/);E=new Array;function A(M){var L=M.split("#");return(L.length===2?"#":"")+L.pop()}for(G=0;G7?curvyBrowser.get_style(this.box,"filter"):null;var H=this.spec.get("tR");var M=this.spec.get("bR");var W=function(f){if(typeof f==="number"){return f}if(typeof f!=="string"){throw new Error("unexpected styleToNPx type "+typeof f)}var d=/^[-\d.]([a-z]+)$/.exec(f);if(d&&d[1]!="px"){throw new Error("Unexpected unit "+d[1])}if(isNaN(f=parseInt(f))){f=0}return f};var T=function(d){return d<=0?"0":d+"px"};try{this.borderWidth=W(b);this.borderWidthB=W(J);this.borderWidthL=W(D);this.borderWidthR=W(B);this.boxColour=curvyObject.format_colour(E);this.topPadding=W(Z);this.bottomPadding=W(c);this.leftPadding=W(Q);this.rightPadding=W(a);this.boxWidth=K;this.boxHeight=this.box.clientHeight;this.borderColour=curvyObject.format_colour(I);this.borderColourB=curvyObject.format_colour(G);this.borderColourL=curvyObject.format_colour(A);this.borderString=this.borderWidth+"px solid "+this.borderColour;this.borderStringB=this.borderWidthB+"px solid "+this.borderColourB;this.backgroundImage=((C!="none")?C:"");this.backgroundRepeat=Y}catch(X){throw this.newError("getMessage" in X?X.getMessage():X.message)}var F=this.boxHeight;var V=K;if(curvyBrowser.isOp){R=W(R);P=W(P);if(R){var N=V+this.borderWidthL+this.borderWidthR;if(R>N){R=N}R=(N/R*100)+"%"}if(P){var N=F+this.borderWidth+this.borderWidthB;if(P>N){P=N}P=(N/P*100)+"%"}}if(curvyBrowser.quirksMode){}else{this.boxWidth-=this.leftPadding+this.rightPadding;this.boxHeight-=this.topPadding+this.bottomPadding}this.contentContainer=document.createElement("div");if(filter){this.contentContainer.style.filter=filter}while(this.box.firstChild){this.contentContainer.appendChild(this.box.removeChild(this.box.firstChild))}if(O!="absolute"){this.box.style.position="relative"}this.box.style.padding="0";this.box.style.border=this.box.style.backgroundImage="none";this.box.style.backgroundColor="transparent";this.box.style.width=(V+this.borderWidthL+this.borderWidthR)+"px";this.box.style.height=(F+this.borderWidth+this.borderWidthB)+"px";var L=document.createElement("div");L.style.position="absolute";if(filter){L.style.filter=filter}if(curvyBrowser.quirksMode){L.style.width=(V+this.borderWidthL+this.borderWidthR)+"px"}else{L.style.width=V+"px"}L.style.height=T(F+this.borderWidth+this.borderWidthB-H-M);L.style.padding="0";L.style.top=H+"px";L.style.left="0";if(this.borderWidthL){L.style.borderLeft=this.borderWidthL+"px solid "+this.borderColourL}if(this.borderWidth&&!H){L.style.borderTop=this.borderWidth+"px solid "+this.borderColour}if(this.borderWidthR){L.style.borderRight=this.borderWidthR+"px solid "+this.borderColourL}if(this.borderWidthB&&!M){L.style.borderBottom=this.borderWidthB+"px solid "+this.borderColourB}L.style.backgroundColor=E;L.style.backgroundImage=this.backgroundImage;L.style.backgroundRepeat=this.backgroundRepeat;this.shell=this.box.appendChild(L);K=curvyBrowser.get_style(this.shell,"width");if(K===""||K==="auto"||K.indexOf("%")!==-1){throw this.newError("Shell width is "+K)}this.boxWidth=(K!=""&&K!="auto"&&K.indexOf("%")==-1)?parseInt(K):this.shell.clientWidth;this.applyCorners=function(){if(this.backgroundObject){var w=function(AO,i,t){if(AO===0){return 0}var k;if(AO==="right"||AO==="bottom"){return t-i}if(AO==="center"){return(t-i)/2}if(AO.indexOf("%")>0){return(t-i)*100/parseInt(AO)}return W(AO)};this.backgroundPosX=w(R,this.backgroundObject.width,V);this.backgroundPosY=w(P,this.backgroundObject.height,F)}else{if(this.backgroundImage){this.backgroundPosX=W(R);this.backgroundPosY=W(P)}}if(H){v=document.createElement("div");v.style.width=this.boxWidth+"px";v.style.fontSize="1px";v.style.overflow="hidden";v.style.position="absolute";v.style.paddingLeft=this.borderWidth+"px";v.style.paddingRight=this.borderWidth+"px";v.style.height=H+"px";v.style.top=-H+"px";v.style.left=-this.borderWidthL+"px";this.topContainer=this.shell.appendChild(v)}if(M){var v=document.createElement("div");v.style.width=this.boxWidth+"px";v.style.fontSize="1px";v.style.overflow="hidden";v.style.position="absolute";v.style.paddingLeft=this.borderWidthB+"px";v.style.paddingRight=this.borderWidthB+"px";v.style.height=M+"px";v.style.bottom=-M+"px";v.style.left=-this.borderWidthL+"px";this.bottomContainer=this.shell.appendChild(v)}var AG=this.spec.cornerNames();for(var AK in AG){if(!isNaN(AK)){var AC=AG[AK];var AD=this.spec[AC+"R"];var AE,AH,j,AF;if(AC=="tr"||AC=="tl"){AE=this.borderWidth;AH=this.borderColour;AF=this.borderWidth}else{AE=this.borderWidthB;AH=this.borderColourB;AF=this.borderWidthB}j=AD-AF;var u=document.createElement("div");u.style.height=this.spec.get(AC+"Ru");u.style.width=this.spec.get(AC+"Ru");u.style.position="absolute";u.style.fontSize="1px";u.style.overflow="hidden";var r,q,p;var n=filter?parseInt(/alpha\(opacity.(\d+)\)/.exec(filter)[1]):100;for(r=0;r=j)?-1:Math.floor(Math.sqrt(Math.pow(j,2)-Math.pow(r+1,2)))-1;if(j!=AD){var h=(r>=j)?-1:Math.ceil(Math.sqrt(Math.pow(j,2)-Math.pow(r,2)));var f=(r+1>=AD)?-1:Math.floor(Math.sqrt(Math.pow(AD,2)-Math.pow((r+1),2)))-1}var d=(r>=AD)?-1:Math.ceil(Math.sqrt(Math.pow(AD,2)-Math.pow(r,2)));if(m>-1){this.drawPixel(r,0,this.boxColour,n,(m+1),u,true,AD)}if(j!=AD){if(this.spec.antiAlias){for(q=m+1;q=30,AD)}else{if(this.boxColour!=="transparent"){var AB=curvyObject.BlendColour(this.boxColour,AH,curvyObject.pixelFraction(r,q,j));this.drawPixel(r,q,AB,n,1,u,false,AD)}else{this.drawPixel(r,q,AH,n>>1,1,u,false,AD)}}}if(f>=h){if(h==-1){h=0}this.drawPixel(r,h,AH,n,(f-h+1),u,false,0)}p=AH;q=f}else{if(f>m){this.drawPixel(r,(m+1),AH,n,(f-m),u,false,0)}}}else{p=this.boxColour;q=m}if(this.spec.antiAlias){while(++q>>4]+""+A[B&15]};curvyObject.BlendColour=function(L,J,G){if(L==="transparent"||J==="transparent"){throw this.newError("Cannot blend with transparent")}if(L.charAt(0)!=="#"){L=curvyObject.format_colour(L)}if(J.charAt(0)!=="#"){J=curvyObject.format_colour(J)}var D=parseInt(L.substr(1,2),16);var K=parseInt(L.substr(3,2),16);var F=parseInt(L.substr(5,2),16);var C=parseInt(J.substr(1,2),16);var I=parseInt(J.substr(3,2),16);var E=parseInt(J.substr(5,2),16);if(G>1||G<0){G=1}var H=Math.round((D*G)+(C*(1-G)));if(H>255){H=255}if(H<0){H=0}var B=Math.round((K*G)+(I*(1-G)));if(B>255){B=255}if(B<0){B=0}var A=Math.round((F*G)+(E*(1-G)));if(A>255){A=255}if(A<0){A=0}return"#"+curvyObject.IntToHex(H)+curvyObject.IntToHex(B)+curvyObject.IntToHex(A)};curvyObject.pixelFraction=function(H,G,A){var J;var E=A*A;var B=new Array(2);var F=new Array(2);var I=0;var C="";var D=Math.sqrt(E-Math.pow(H,2));if(D>=G&&D<(G+1)){C="Left";B[I]=0;F[I]=D-G;++I}D=Math.sqrt(E-Math.pow(G+1,2));if(D>=H&&D<(H+1)){C+="Top";B[I]=D-H;F[I]=1;++I}D=Math.sqrt(E-Math.pow(H+1,2));if(D>=G&&D<(G+1)){C+="Right";B[I]=1;F[I]=D-G;++I}D=Math.sqrt(E-Math.pow(G,2));if(D>=H&&D<(H+1)){C+="Bottom";B[I]=D-H;F[I]=0}switch(C){case"LeftRight":J=Math.min(F[0],F[1])+((Math.max(F[0],F[1])-Math.min(F[0],F[1]))/2);break;case"TopRight":J=1-(((1-B[0])*(1-F[1]))/2);break;case"TopBottom":J=Math.min(B[0],B[1])+((Math.max(B[0],B[1])-Math.min(B[0],B[1]))/2);break;case"LeftBottom":J=F[0]*B[1]/2;break;default:J=1}return J};curvyObject.rgb2Array=function(A){var B=A.substring(4,A.indexOf(")"));return B.split(", ")};curvyObject.rgb2Hex=function(B){try{var C=curvyObject.rgb2Array(B);var G=parseInt(C[0]);var E=parseInt(C[1]);var A=parseInt(C[2]);var D="#"+curvyObject.IntToHex(G)+curvyObject.IntToHex(E)+curvyObject.IntToHex(A)}catch(F){var H="getMessage" in F?F.getMessage():F.message;throw new Error("Error ("+H+") converting RGB value to Hex in rgb2Hex")}return D};curvyObject.setOpacity=function(F,C){C=(C==100)?99.999:C;if(curvyBrowser.isSafari&&F.tagName!="IFRAME"){var B=curvyObject.rgb2Array(F.style.backgroundColor);var E=parseInt(B[0]);var D=parseInt(B[1]);var A=parseInt(B[2]);F.style.backgroundColor="rgba("+E+", "+D+", "+A+", "+C/100+")"}else{if(typeof F.style.opacity!=="undefined"){F.style.opacity=C/100}else{if(typeof F.style.MozOpacity!=="undefined"){F.style.MozOpacity=C/100}else{if(typeof F.style.filter!="undefined"){F.style.filter="alpha(opacity="+C+")"}else{if(typeof F.style.KHTMLOpacity!="undefined"){F.style.KHTMLOpacity=C/100}}}}}};function addEvent(D,C,B,A){if(D.addEventListener){D.addEventListener(C,B,A);return true}if(D.attachEvent){return D.attachEvent("on"+C,B)}D["on"+C]=B;return false}curvyObject.getComputedColour=function(E){var F=document.createElement("DIV");F.style.backgroundColor=E;document.body.appendChild(F);if(window.getComputedStyle){var D=document.defaultView.getComputedStyle(F,null).getPropertyValue("background-color");F.parentNode.removeChild(F);if(D.substr(0,3)==="rgb"){D=curvyObject.rgb2Hex(D)}return D}else{var A=document.body.createTextRange();A.moveToElementText(F);A.execCommand("ForeColor",false,E);var B=A.queryCommandValue("ForeColor");var C="rgb("+(B&255)+", "+((B&65280)>>8)+", "+((B&16711680)>>16)+")";F.parentNode.removeChild(F);A=null;return curvyObject.rgb2Hex(C)}};curvyObject.format_colour=function(A){if(A!=""&&A!="transparent"){if(A.substr(0,3)==="rgb"){A=curvyObject.rgb2Hex(A)}else{if(A.charAt(0)!=="#"){A=curvyObject.getComputedColour(A)}else{if(A.length===4){A="#"+A.charAt(1)+A.charAt(1)+A.charAt(2)+A.charAt(2)+A.charAt(3)+A.charAt(3)}}}}return A};curvyCorners.getElementsByClass=function(H,F){var E=new Array;if(F===undefined){F=document}H=H.split(".");var A="*";if(H.length===1){A=H[0];H=false}else{if(H[0]){A=H[0]}H=H[1]}var D,C,B;if(A.charAt(0)==="#"){C=document.getElementById(A.substr(1));if(C){E.push(C)}}else{C=F.getElementsByTagName(A);B=C.length;if(H){var G=new RegExp("(^|\\s)"+H+"(\\s|$)");for(D=0;D6){var H=J["-webkit-border-radius"]||0;var K=J["-webkit-border-top-right-radius"]||0;var F=J["-webkit-border-top-left-radius"]||0;var G=J["-webkit-border-bottom-right-radius"]||0;var M=J["-webkit-border-bottom-left-radius"]||0}else{var H=J["webkit-border-radius"]||0;var K=J["webkit-border-top-right-radius"]||0;var F=J["webkit-border-top-left-radius"]||0;var G=J["webkit-border-bottom-right-radius"]||0;var M=J["webkit-border-bottom-left-radius"]||0}if(H||F||K||G||M){var I=new curvyCnrSpec(L.selectorText);if(H){I.setcorner(null,null,parseInt(H),B(H))}else{if(K){I.setcorner("t","r",parseInt(K),B(K))}if(F){I.setcorner("t","l",parseInt(F),B(F))}if(M){I.setcorner("b","l",parseInt(M),B(M))}if(G){I.setcorner("b","r",parseInt(G),B(G))}}curvyCorners(I)}}for(E=0;E';
+ if (!this.selectedFound) this.selectedNode = null;
+ this.completed = true;
+ return str;
+};
+
+// Creates the tree structure
+dTree.prototype.addNode = function(pNode) {
+ var str = '';
+ var n=0;
+ if (this.config.inOrder) n = pNode._ai;
+ for (n; n ';
+ }
+ if (node.url) {
+ str += '';
+ }
+ else if ((!this.config.folderLinks || !node.url) && node._hc && node.pid != this.root.id)
+ str += ' ';
+ str += node.name;
+ if (node.url || ((!this.config.folderLinks || !node.url) && node._hc)) str += ' ';
+ str += '';
+ if (node._hc) {
+ str += '';
+ str += this.addNode(node);
+ str += '
';
+ }
+ this.aIndent.pop();
+ return str;
+};
+
+// Adds the empty and line icons
+dTree.prototype.indent = function(node, nodeId) {
+ var str = '';
+ if (this.root.id != node.pid) {
+ for (var n=0; n ';
+ (node._ls) ? this.aIndent.push(0) : this.aIndent.push(1);
+ if (node._hc) {
+ str += ' ';
+ } else str += ' ';
+ }
+ return str;
+};
+
+// Checks if a node has any children and if it is the last sibling
+dTree.prototype.setCS = function(node) {
+ var lastId;
+ for (var n=0; n)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
+Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
+(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
+a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
+"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
+function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;ba ";
+var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
+parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
+false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML=" ";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
+s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
+applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
+else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
+a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
+w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
+cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
+c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
+a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
+function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
+k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
+C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type=
+e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
+f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
+if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
+e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
+"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
+d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
+t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
+g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
+CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
+g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
+text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
+setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
+h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
+"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
+h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l ";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
+q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=" ";
+if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="
";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
+(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
+function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
+{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
+"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
+d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
+a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
+1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"+d+">"},F={option:[1,""," "],legend:[1,""," "],thead:[1,""],tr:[2,""],td:[3,""],col:[2,""],area:[1,""," "],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
+c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
+wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
+prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
+this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
+return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
+""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
+return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
+""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
+c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
+c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
+function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
+Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
+"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
+a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
+a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/
+
+
+
+
+
+
+
+
+