summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordlaniel <dlaniel@3ed937ae-f919-0410-9a43-8e6f19e4ba6e>2009-03-09 15:36:52 (GMT)
committerdlaniel <dlaniel@3ed937ae-f919-0410-9a43-8e6f19e4ba6e>2009-03-09 15:36:52 (GMT)
commit4e795057a53420b774737dc3605784e56bd45ead (patch)
treee26a21f884c380acbb23deb73725baddfc4c2b7c
parentc11ed6dae1e3cb7ad15e68ba9e5ad95983190867 (diff)
downloadlarpe-4e795057a53420b774737dc3605784e56bd45ead.zip
larpe-4e795057a53420b774737dc3605784e56bd45ead.tar.gz
larpe-4e795057a53420b774737dc3605784e56bd45ead.tar.bz2
merged last fixes from trunk
git-svn-id: svn+ssh://labs.libre-entreprise.org/svnroot/larpe@468 3ed937ae-f919-0410-9a43-8e6f19e4ba6e
-rw-r--r--larpe/tags/release-1.0/debian/changelog3
-rw-r--r--larpe/tags/release-1.0/debian/control4
-rwxr-xr-xlarpe/tags/release-1.0/debian/rules1
-rw-r--r--larpe/tags/release-1.0/debian/templates37
-rwxr-xr-xlarpe/tags/release-1.0/larpe/filter/larpe-filter.py164
-rw-r--r--larpe/tags/release-1.0/po/fr.po38
-rw-r--r--larpe/tags/release-1.0/po/larpe.pot38
-rw-r--r--larpe/tags/release-1.0/root/larpe/js/jscalendar/README33
-rw-r--r--larpe/tags/release-1.0/root/larpe/js/jscalendar/calendar.js1806
-rw-r--r--larpe/tags/release-1.0/root/larpe/js/jscalendar/helpers.js118
-rw-r--r--larpe/tags/release-1.0/root/larpe/js/jscalendar/lang/calendar-en.js127
-rw-r--r--larpe/tags/release-1.0/root/larpe/js/jscalendar/lang/calendar-fr.js125
-rw-r--r--larpe/tags/release-1.0/root/larpe/js/listing.js41
-rw-r--r--larpe/tags/release-1.0/root/larpe/js/prototype.js1041
-rw-r--r--larpe/tags/release-1.0/root/larpe/js/scriptaculous/controls.js699
-rw-r--r--larpe/tags/release-1.0/root/larpe/js/scriptaculous/dragdrop.js545
-rw-r--r--larpe/tags/release-1.0/root/larpe/js/scriptaculous/effects.js707
-rw-r--r--larpe/tags/release-1.0/root/larpe/js/scriptaculous/scriptaculous.js26
-rw-r--r--larpe/tags/release-1.0/root/larpe/js/scriptaculous/unittest.js381
-rw-r--r--larpe/tags/release-1.0/root/larpe/js/scriptaculous/util.js429
-rw-r--r--larpe/tags/release-1.0/root/larpe/js/sorttable.js185
21 files changed, 43 insertions, 6505 deletions
diff --git a/larpe/tags/release-1.0/debian/changelog b/larpe/tags/release-1.0/debian/changelog
index 96298e2..5acdd39 100644
--- a/larpe/tags/release-1.0/debian/changelog
+++ b/larpe/tags/release-1.0/debian/changelog
@@ -7,7 +7,8 @@ larpe (1.0-1) unstable; urgency=low
- Fully tested for several sites with very different behaviours
- Plugin system to handle specific behaviour of some sites
- Automatic Apache 2 configuration
- - Automatic creation of Apache python filters to transform authentication boxes on the sites
+ - Automatic creation of Apache python filters to transform authentication
+ boxes on the sites
- Support for proxies
- Logging and debug options
diff --git a/larpe/tags/release-1.0/debian/control b/larpe/tags/release-1.0/debian/control
index 20f26b5..068df8a 100644
--- a/larpe/tags/release-1.0/debian/control
+++ b/larpe/tags/release-1.0/debian/control
@@ -3,13 +3,13 @@ Section: web
Priority: optional
Maintainer: Damien Laniel <dlaniel@entrouvert.com>
Build-Depends: debhelper (>= 5.0.37.2), python, python-central (>= 0.5), gettext
-Standards-Version: 3.7.2.0
+Standards-Version: 3.8.0
XS-Python-Version: current
Package: larpe
Architecture: any
XB-Python-Version: ${python:Versions}
-Depends: ${python:Depends}, python-quixote | quixote (>= 2.0), python-lasso (>= 0.6.5), python-scgi, python-libxml2, apache2, libapache2-mod-scgi, libapache2-mod-python, libapache2-mod-proxy-html
+Depends: ${shlibs:Depends}, ${python:Depends}, python-quixote | quixote (>= 2.0), python-lasso (>= 0.6.5), python-scgi, python-libxml2, apache2, libapache2-mod-scgi, libapache2-mod-python, libapache2-mod-proxy-html
Description: Liberty Alliance Reverse Proxy
Larpe allows any service provider (that is a website) to use Liberty Alliance
identity management and Single Sign On features without changing the code of
diff --git a/larpe/tags/release-1.0/debian/rules b/larpe/tags/release-1.0/debian/rules
index 2ff8134..3a237ee 100755
--- a/larpe/tags/release-1.0/debian/rules
+++ b/larpe/tags/release-1.0/debian/rules
@@ -65,6 +65,7 @@ binary-arch: build install
dh_fixperms -X /var/lib/larpe -X /usr/sbin/larpe-reload-apache2
dh_pycentral
dh_installdeb
+ dh_shlibdeps
dh_gencontrol
dh_md5sums
dh_builddeb
diff --git a/larpe/tags/release-1.0/debian/templates b/larpe/tags/release-1.0/debian/templates
deleted file mode 100644
index 9a6cc43..0000000
--- a/larpe/tags/release-1.0/debian/templates
+++ /dev/null
@@ -1,37 +0,0 @@
-Template: larpe/hostname
-Type: string
-Default: localhost
-Description: Hostname :
- This is the name by which this reverse-proxy will be known on the network.
- Your DNS server must have been configured accordingly.
-
-Template: larpe/enable_vhost
-Type: boolean
-Default: false
-Description: Enable this vhost :
- A new virtual host for Larpe will be created with the hostname you chose. It may break
- your Apache2 configuration.
- .
- If you didn't tweak your Apache2 configuration a lot
- and you don't have vital websites on the same server, you can safely say "yes" here
- to enable it, and fix it later if needed.
- .
- If you prefer checking this vhost will fit well with your Apache2 configuration first,
- and enable it by yourself later, say "no".
-
-Template: larpe/admin_username
-Type: string
-Default: admin
-Description: Administrator login :
- This is the login which will be used to connect to the administrator interface
-
-Template: larpe/admin_password
-Type: password
-Description: Administrator password :
- This is the password which will be used to connect to the administrator interface
-
-Template: larpe/admin_email
-Type: string
-Default: root@localhost
-Description: Administrator email address :
- This is the email address to which problem reports will be sent
diff --git a/larpe/tags/release-1.0/larpe/filter/larpe-filter.py b/larpe/tags/release-1.0/larpe/filter/larpe-filter.py
deleted file mode 100755
index 2d9973b..0000000
--- a/larpe/tags/release-1.0/larpe/filter/larpe-filter.py
+++ /dev/null
@@ -1,164 +0,0 @@
-import os
-import re
-
-from mod_python import apache
-
-#import larpe.hosts
-
-app_dir = '/var/lib/larpe'
-
-def outputfilter(filter):
- # Only filter html code
- if filter.req.content_type is not None:
- is_html = re.search('text/html', filter.req.content_type)
- if filter.req.content_type is not None and not is_html:
- filter.pass_on()
- else:
- if not hasattr(filter.req, 'temp_doc'): # the start
- filter.req.temp_doc = [] # create new attribute to hold document
- # If content-length ended up wrong, Gecko browsers truncated data, so
- if 'Content-Length' in filter.req.headers_out:
- del filter.req.headers_out['Content-Length']
-
-# filter.write(filter.req.headers_in['Cookie'])
-# delete_cookies(filter)
- #filter.req.headers_out['Set-Cookie'] = 'dc_admin="deleted"; max-age=0; expires=Thu, 01-Jan-1970 00:00:00 GMT; path=/'
-
- temp_doc = filter.req.temp_doc
- s = filter.read()
- while s: # could get '' at any point, but only get None at end
- temp_doc.append(s)
- s = filter.read()
-
- if s is None: # the end
- page = ''.join(temp_doc)
-
- page = filter_dispatch(filter, page)
-
- filter.write(page)
- filter.close()
-
-def filter_dispatch(filter, page):
-# host = get_host_from_url(filter)
-# if host is None:
-# apache.log_error('Host not found')
-# return page
- try:
-# function_name = 'filter_' + host.label.lowercase()
- host_name = filter.req.hostname.split('.')[-3]
- function_name = 'filter_' + host_name
- return eval(function_name + '(filter, page)')
- except:
- return page
-# return filter_default(filter, page)
-
-
-def filter_default(filter, page):
-# host = get_host_from_url(filter)
-# if host is None:
-# apache.log_error('Host not found')
-# return page
-# if host.auth_url is not None or host.auth_form is None:
-# return page
- form = find_auth_form(page)
- if form is not None:
- try:
- host_name = filter.req.hostname.split('.')[-3]
- return page.replace(form, """
- <form method="post" action="/liberty/%s/login">
- <input type="submit" value="Connexion" />
- </form>""" % host_name)
- except:
- pass
- return page
-
-def find_auth_form(page):
- regexp = re.compile("""<form.*?</form>""", re.DOTALL | re.IGNORECASE)
- found_forms = regexp.findall(page)
-
- for found_form in found_forms:
- regexp = re.compile("""<input[^>]*?type="password"[^>]*?>""", re.DOTALL | re.IGNORECASE)
- if regexp.search(found_form) is not None:
- return found_form
- return None
-
-#def get_host_from_url(filter):
-# try:
-# return list(Host.select(lambda x: x.reversed_hostname == filter.req.hostname \
-# and x.reversed_directory == get_proxied_site_name(filter)))[0]
-# except:
-# return None
-
-
-def filter_linuxfr(filter, page):
- str_to_replace = re.compile(str('<form method="post" action="/login.html" id="formulaire">.*?</form>'), re.DOTALL)
- return str_to_replace.sub(str(r"""<form method="post" action="/liberty/linuxfr/login" id="formulaire">
- <div style="text-align: center; font-size: 13px;" class="loginbox">
- <input type="submit" value="Connexion" />
- <br />
- <a href="/user_new.html">Cr&eacute;er un compte</a>
- </div>
- </form>"""
- ), page)
-
-def filter_dotclear(filter, page):
- if filter.req.uri == '/dot/ecrire/redac_list.php':
- str_to_replace = re.compile(str('(\[[^\?]+\?id=)([^"]+)(">[^\]]*)\]'), re.DOTALL)
- return str_to_replace.sub(str(r'\1\2\3 - <a href="/liberty/dot/admin_token?id=\2">token</a> ]'), page)
- if filter.req.uri == '/dot/ecrire/redacteur.php':
- str_to_replace = re.compile(str('(<form action=")redacteur.php'))
- page = str_to_replace.sub(str(r'\1/liberty/dot/admin_new_user'), page)
- str_to_replace = re.compile(str('<p class="field"><label class="float" for="user_pwd">.*?</p>'), re.DOTALL)
- return str_to_replace.sub(r'', page)
- return page
-
-def filter_concerto(filter, page):
- str_to_replace = re.compile(str('<form action="login.do" method="post">.*?</form>'), re.DOTALL)
- return str_to_replace.sub(str(r"""<form method="post" action="/liberty/concerto/login" id="formulaire">
- <div style="text-align: center; font-size: 13px;" class="loginbox">
- <input type="submit" value="Connexion" />
- </div>
- </form>"""
- ), page)
-
-def get_abs_path(s):
- if not s:
- return s
- if s[0] == '/':
- return s
- return os.path.join(app_dir, s)
-
-def get_proxied_site_path(filter):
- proxy_domain_name = filter.req.hostname
- proxied_site_dir = get_proxied_site_name(filter)
- return get_abs_path(os.path.join('sp', proxy_domain_name, proxied_site_dir))
-
-def get_proxied_site_name(filter):
- uri_tokens = filter.req.uri.split('/')
- if uri_tokens[1] != 'liberty':
- return uri_tokens[1]
- return uri_tokens[2]
-
-def delete_cookies(filter):
- success = False
- cookies_file_name = get_abs_path(os.path.join(get_proxied_site_path(filter), 'cookies_to_delete'))
- cookies_file = open(cookies_file_name, 'r')
- for cookie in cookies_file.read().split():
- if filter.req.headers_in.has_key('Cookie'):
- cookies_header = filter.req.headers_in['Cookie']
-# filter.req.temp_doc.append(filter.req.headers_in['Cookie'])
- #filter.req.temp_doc.append(cookie[len(cookie) -1:])
- cookies_match = re.findall(cookie[:len(cookie) -1], cookies_header)
- if len(cookies_match) > 0:
- filter.req.temp_doc.append('User-Agent')
-# filter.req.temp_doc.append('%s="deleted"; max-age=0; expires=Thu, 01-Jan-1970 00:00:00 GMT; path=/' % cookie.split('=')[0])
- filter.req.headers_out['Set-Cookie'] = '%s="deleted"; max-age=0; expires=Thu, 01-Jan-1970 00:00:00 GMT; path=/' % cookie.split('=')[0]
-# cookies_file.close()
-# cookies_file = open(cookies_file_name, 'w')
- break
-# else:
-# filter.req.temp_doc.append('dommage')
- cookies_file.close()
-# if success:
-# cookies_file = open(cookies_file_name, 'w')
-# cookies_file.close()
diff --git a/larpe/tags/release-1.0/po/fr.po b/larpe/tags/release-1.0/po/fr.po
index 3592344..58a6a1b 100644
--- a/larpe/tags/release-1.0/po/fr.po
+++ b/larpe/tags/release-1.0/po/fr.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Larpe 0.2.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-03-09 15:32+0100\n"
+"POT-Creation-Date: 2009-03-09 16:05+0100\n"
"PO-Revision-Date: 2007-01-29 16:57+0200\n"
"Last-Translator: Damien Laniel <dlaniel@entrouvert.com>\n"
"Language-Team: French\n"
@@ -15,19 +15,19 @@ msgid "Liberty support is not yet configured"
msgstr "Le support Liberty n'est pas encore configuré"
#: ../larpe/liberty.ptl:58 ../larpe/qommon/liberty.ptl:59
-#: ../larpe/qommon/saml2.ptl:97 ../larpe/qommon/saml2.ptl:376
-#: ../larpe/qommon/saml2.ptl:542 ../larpe/saml2.ptl:64
+#: ../larpe/qommon/saml2.ptl:99 ../larpe/qommon/saml2.ptl:378
+#: ../larpe/qommon/saml2.ptl:544 ../larpe/saml2.ptl:64
msgid "Failure to communicate with identity provider"
msgstr "Impossible de communiquer avec le fournisseur d'identités."
#: ../larpe/liberty.ptl:63 ../larpe/qommon/liberty.ptl:64
-#: ../larpe/qommon/saml2.ptl:103 ../larpe/qommon/saml2.ptl:214
-#: ../larpe/qommon/saml2.ptl:241 ../larpe/saml2.ptl:70
+#: ../larpe/qommon/saml2.ptl:105 ../larpe/qommon/saml2.ptl:216
+#: ../larpe/qommon/saml2.ptl:243 ../larpe/saml2.ptl:70
msgid "Unknown authentication failure"
msgstr "Erreur d'authentification inconnue"
#: ../larpe/liberty.ptl:66 ../larpe/qommon/liberty.ptl:67
-#: ../larpe/qommon/saml2.ptl:105 ../larpe/saml2.ptl:72
+#: ../larpe/qommon/saml2.ptl:107 ../larpe/saml2.ptl:72
msgid "Authentication failure; unknown principal"
msgstr "Erreur d'authentification: utilisateur inconnu"
@@ -37,7 +37,7 @@ msgstr "Le fournisseur d'identité n'a pas accepté l'artifact."
#: ../larpe/liberty.ptl:142 ../larpe/liberty.ptl:173
#: ../larpe/qommon/liberty.ptl:120 ../larpe/qommon/liberty.ptl:146
-#: ../larpe/qommon/saml2.ptl:456 ../larpe/saml2.ptl:324
+#: ../larpe/qommon/saml2.ptl:458 ../larpe/saml2.ptl:324
msgid "Failed to check single logout request signature."
msgstr "Erreur à la vérification de la signature de la demande de déconnexion"
@@ -1680,39 +1680,39 @@ msgstr ""
"suivant un lien depuis un autre site, veuillez informer le propriétaire de "
"cette autre page."
-#: ../larpe/qommon/saml2.ptl:37 ../larpe/qommon/saml2.ptl:62
-#: ../larpe/qommon/saml2.ptl:76 ../larpe/qommon/saml2.ptl:204
-#: ../larpe/qommon/saml2.ptl:230 ../larpe/saml2.ptl:32 ../larpe/saml2.ptl:46
+#: ../larpe/qommon/saml2.ptl:39 ../larpe/qommon/saml2.ptl:64
+#: ../larpe/qommon/saml2.ptl:78 ../larpe/qommon/saml2.ptl:206
+#: ../larpe/qommon/saml2.ptl:232 ../larpe/saml2.ptl:32 ../larpe/saml2.ptl:46
msgid "SAML 2.0 support not yet configured."
msgstr "Le support SAML 2.0 n'est pas encore configuré"
-#: ../larpe/qommon/saml2.ptl:83 ../larpe/saml2.ptl:53
+#: ../larpe/qommon/saml2.ptl:85 ../larpe/saml2.ptl:53
msgid "Missing SAML Artifact"
msgstr "Artifact SAML manquant"
-#: ../larpe/qommon/saml2.ptl:86
+#: ../larpe/qommon/saml2.ptl:88
msgid "Authentication request initiated by an unaffiliated provider."
msgstr "Requête d'authentification initié par un fournisseur non-affilié"
-#: ../larpe/qommon/saml2.ptl:107
+#: ../larpe/qommon/saml2.ptl:109
msgid "Authentication failure; federation not found"
msgstr "Erreur d'authentification: pas de fédération"
-#: ../larpe/qommon/saml2.ptl:208
+#: ../larpe/qommon/saml2.ptl:210
msgid "No SAML Response"
msgstr "Pas de réponse SAML"
-#: ../larpe/qommon/saml2.ptl:216 ../larpe/qommon/saml2.ptl:243
+#: ../larpe/qommon/saml2.ptl:218 ../larpe/qommon/saml2.ptl:245
msgid "Request from unknown provider ID"
msgstr "Requête d'un fournisseur inconnu"
-#: ../larpe/qommon/saml2.ptl:218 ../larpe/qommon/saml2.ptl:220
-#: ../larpe/qommon/saml2.ptl:222 ../larpe/qommon/saml2.ptl:245
-#: ../larpe/qommon/saml2.ptl:247 ../larpe/qommon/saml2.ptl:249
+#: ../larpe/qommon/saml2.ptl:220 ../larpe/qommon/saml2.ptl:222
+#: ../larpe/qommon/saml2.ptl:224 ../larpe/qommon/saml2.ptl:247
+#: ../larpe/qommon/saml2.ptl:249 ../larpe/qommon/saml2.ptl:251
msgid "Error checking signature"
msgstr "Erreur à la vérification de signature"
-#: ../larpe/qommon/saml2.ptl:235
+#: ../larpe/qommon/saml2.ptl:237
msgid "No SAML Response in query string"
msgstr "Pas de réponse SAML dans la 'query string'"
diff --git a/larpe/tags/release-1.0/po/larpe.pot b/larpe/tags/release-1.0/po/larpe.pot
index 3272bcf..550707f 100644
--- a/larpe/tags/release-1.0/po/larpe.pot
+++ b/larpe/tags/release-1.0/po/larpe.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-03-09 15:32+0100\n"
+"POT-Creation-Date: 2009-03-09 16:05+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -21,19 +21,19 @@ msgid "Liberty support is not yet configured"
msgstr ""
#: ../larpe/liberty.ptl:58 ../larpe/qommon/liberty.ptl:59
-#: ../larpe/qommon/saml2.ptl:97 ../larpe/qommon/saml2.ptl:376
-#: ../larpe/qommon/saml2.ptl:542 ../larpe/saml2.ptl:64
+#: ../larpe/qommon/saml2.ptl:99 ../larpe/qommon/saml2.ptl:378
+#: ../larpe/qommon/saml2.ptl:544 ../larpe/saml2.ptl:64
msgid "Failure to communicate with identity provider"
msgstr ""
#: ../larpe/liberty.ptl:63 ../larpe/qommon/liberty.ptl:64
-#: ../larpe/qommon/saml2.ptl:103 ../larpe/qommon/saml2.ptl:214
-#: ../larpe/qommon/saml2.ptl:241 ../larpe/saml2.ptl:70
+#: ../larpe/qommon/saml2.ptl:105 ../larpe/qommon/saml2.ptl:216
+#: ../larpe/qommon/saml2.ptl:243 ../larpe/saml2.ptl:70
msgid "Unknown authentication failure"
msgstr ""
#: ../larpe/liberty.ptl:66 ../larpe/qommon/liberty.ptl:67
-#: ../larpe/qommon/saml2.ptl:105 ../larpe/saml2.ptl:72
+#: ../larpe/qommon/saml2.ptl:107 ../larpe/saml2.ptl:72
msgid "Authentication failure; unknown principal"
msgstr ""
@@ -43,7 +43,7 @@ msgstr ""
#: ../larpe/liberty.ptl:142 ../larpe/liberty.ptl:173
#: ../larpe/qommon/liberty.ptl:120 ../larpe/qommon/liberty.ptl:146
-#: ../larpe/qommon/saml2.ptl:456 ../larpe/saml2.ptl:324
+#: ../larpe/qommon/saml2.ptl:458 ../larpe/saml2.ptl:324
msgid "Failed to check single logout request signature."
msgstr ""
@@ -1582,39 +1582,39 @@ msgid ""
"following a link from an external page, please inform that page's maintainer."
msgstr ""
-#: ../larpe/qommon/saml2.ptl:37 ../larpe/qommon/saml2.ptl:62
-#: ../larpe/qommon/saml2.ptl:76 ../larpe/qommon/saml2.ptl:204
-#: ../larpe/qommon/saml2.ptl:230 ../larpe/saml2.ptl:32 ../larpe/saml2.ptl:46
+#: ../larpe/qommon/saml2.ptl:39 ../larpe/qommon/saml2.ptl:64
+#: ../larpe/qommon/saml2.ptl:78 ../larpe/qommon/saml2.ptl:206
+#: ../larpe/qommon/saml2.ptl:232 ../larpe/saml2.ptl:32 ../larpe/saml2.ptl:46
msgid "SAML 2.0 support not yet configured."
msgstr ""
-#: ../larpe/qommon/saml2.ptl:83 ../larpe/saml2.ptl:53
+#: ../larpe/qommon/saml2.ptl:85 ../larpe/saml2.ptl:53
msgid "Missing SAML Artifact"
msgstr ""
-#: ../larpe/qommon/saml2.ptl:86
+#: ../larpe/qommon/saml2.ptl:88
msgid "Authentication request initiated by an unaffiliated provider."
msgstr ""
-#: ../larpe/qommon/saml2.ptl:107
+#: ../larpe/qommon/saml2.ptl:109
msgid "Authentication failure; federation not found"
msgstr ""
-#: ../larpe/qommon/saml2.ptl:208
+#: ../larpe/qommon/saml2.ptl:210
msgid "No SAML Response"
msgstr ""
-#: ../larpe/qommon/saml2.ptl:216 ../larpe/qommon/saml2.ptl:243
+#: ../larpe/qommon/saml2.ptl:218 ../larpe/qommon/saml2.ptl:245
msgid "Request from unknown provider ID"
msgstr ""
-#: ../larpe/qommon/saml2.ptl:218 ../larpe/qommon/saml2.ptl:220
-#: ../larpe/qommon/saml2.ptl:222 ../larpe/qommon/saml2.ptl:245
-#: ../larpe/qommon/saml2.ptl:247 ../larpe/qommon/saml2.ptl:249
+#: ../larpe/qommon/saml2.ptl:220 ../larpe/qommon/saml2.ptl:222
+#: ../larpe/qommon/saml2.ptl:224 ../larpe/qommon/saml2.ptl:247
+#: ../larpe/qommon/saml2.ptl:249 ../larpe/qommon/saml2.ptl:251
msgid "Error checking signature"
msgstr ""
-#: ../larpe/qommon/saml2.ptl:235
+#: ../larpe/qommon/saml2.ptl:237
msgid "No SAML Response in query string"
msgstr ""
diff --git a/larpe/tags/release-1.0/root/larpe/js/jscalendar/README b/larpe/tags/release-1.0/root/larpe/js/jscalendar/README
deleted file mode 100644
index 455ab3d..0000000
--- a/larpe/tags/release-1.0/root/larpe/js/jscalendar/README
+++ /dev/null
@@ -1,33 +0,0 @@
-The DHTML Calendar
--------------------
-
- Author: Mihai Bazon, <mihai_bazon@yahoo.com>
- http://dynarch.com/mishoo/
-
- This program is free software published under the
- terms of the GNU Lesser General Public License.
-
- For the entire license text please refer to
- http://www.gnu.org/licenses/lgpl.html
-
-Contents
----------
-
- calendar.js -- the main program file
- lang/*.js -- internalization files
- *.css -- color themes
- cal.html -- example usage file
- doc/ -- documentation, in PDF and HTML
- simple-1.html -- quick setup examples [popup calendars]
- simple-2.html -- quick setup example for flat calendar
- calendar.php -- PHP wrapper
- test.php -- test file for the PHP wrapper
-
-Homepage
----------
-
- For details and latest versions please refer to calendar
- homepage, located on my website:
-
- http://dynarch.com/mishoo/calendar.epl
-
diff --git a/larpe/tags/release-1.0/root/larpe/js/jscalendar/calendar.js b/larpe/tags/release-1.0/root/larpe/js/jscalendar/calendar.js
deleted file mode 100644
index 1860d19..0000000
--- a/larpe/tags/release-1.0/root/larpe/js/jscalendar/calendar.js
+++ /dev/null
@@ -1,1806 +0,0 @@
-/* Copyright Mihai Bazon, 2002-2005 | www.bazon.net/mishoo
- * -----------------------------------------------------------
- *
- * The DHTML Calendar, version 1.0 "It is happening again"
- *
- * Details and latest version at:
- * www.dynarch.com/projects/calendar
- *
- * This script is developed by Dynarch.com. Visit us at www.dynarch.com.
- *
- * This script is distributed under the GNU Lesser General Public License.
- * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html
- */
-
-// $Id: calendar.js,v 1.1 2006/04/03 19:10:44 rchantereau Exp $
-
-/** The Calendar object constructor. */
-Calendar = function (firstDayOfWeek, dateStr, onSelected, onClose) {
- // member variables
- this.activeDiv = null;
- this.currentDateEl = null;
- this.getDateStatus = null;
- this.getDateToolTip = null;
- this.getDateText = null;
- this.timeout = null;
- this.onSelected = onSelected || null;
- this.onClose = onClose || null;
- this.dragging = false;
- this.hidden = false;
- this.minYear = 1970;
- this.maxYear = 2050;
- this.dateFormat = Calendar._TT["DEF_DATE_FORMAT"];
- this.ttDateFormat = Calendar._TT["TT_DATE_FORMAT"];
- this.isPopup = true;
- this.weekNumbers = true;
- this.firstDayOfWeek = typeof firstDayOfWeek == "number" ? firstDayOfWeek : Calendar._FD; // 0 for Sunday, 1 for Monday, etc.
- this.showsOtherMonths = false;
- this.dateStr = dateStr;
- this.ar_days = null;
- this.showsTime = false;
- this.time24 = true;
- this.yearStep = 2;
- this.hiliteToday = true;
- this.multiple = null;
- // HTML elements
- this.table = null;
- this.element = null;
- this.tbody = null;
- this.firstdayname = null;
- // Combo boxes
- this.monthsCombo = null;
- this.yearsCombo = null;
- this.hilitedMonth = null;
- this.activeMonth = null;
- this.hilitedYear = null;
- this.activeYear = null;
- // Information
- this.dateClicked = false;
-
- // one-time initializations
- if (typeof Calendar._SDN == "undefined") {
- // table of short day names
- if (typeof Calendar._SDN_len == "undefined")
- Calendar._SDN_len = 3;
- var ar = new Array();
- for (var i = 8; i > 0;) {
- ar[--i] = Calendar._DN[i].substr(0, Calendar._SDN_len);
- }
- Calendar._SDN = ar;
- // table of short month names
- if (typeof Calendar._SMN_len == "undefined")
- Calendar._SMN_len = 3;
- ar = new Array();
- for (var i = 12; i > 0;) {
- ar[--i] = Calendar._MN[i].substr(0, Calendar._SMN_len);
- }
- Calendar._SMN = ar;
- }
-};
-
-// ** constants
-
-/// "static", needed for event handlers.
-Calendar._C = null;
-
-/// detect a special case of "web browser"
-Calendar.is_ie = ( /msie/i.test(navigator.userAgent) &&
- !/opera/i.test(navigator.userAgent) );
-
-Calendar.is_ie5 = ( Calendar.is_ie && /msie 5\.0/i.test(navigator.userAgent) );
-
-/// detect Opera browser
-Calendar.is_opera = /opera/i.test(navigator.userAgent);
-
-/// detect KHTML-based browsers
-Calendar.is_khtml = /Konqueror|Safari|KHTML/i.test(navigator.userAgent);
-
-// BEGIN: UTILITY FUNCTIONS; beware that these might be moved into a separate
-// library, at some point.
-
-Calendar.getAbsolutePos = function(el) {
- var SL = 0, ST = 0;
- var is_div = /^div$/i.test(el.tagName);
- if (is_div && el.scrollLeft)
- SL = el.scrollLeft;
- if (is_div && el.scrollTop)
- ST = el.scrollTop;
- var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST };
- if (el.offsetParent) {
- var tmp = this.getAbsolutePos(el.offsetParent);
- r.x += tmp.x;
- r.y += tmp.y;
- }
- return r;
-};
-
-Calendar.isRelated = function (el, evt) {
- var related = evt.relatedTarget;
- if (!related) {
- var type = evt.type;
- if (type == "mouseover") {
- related = evt.fromElement;
- } else if (type == "mouseout") {
- related = evt.toElement;
- }
- }
- while (related) {
- if (related == el) {
- return true;
- }
- related = related.parentNode;
- }
- return false;
-};
-
-Calendar.removeClass = function(el, className) {
- if (!(el && el.className)) {
- return;
- }
- var cls = el.className.split(" ");
- var ar = new Array();
- for (var i = cls.length; i > 0;) {
- if (cls[--i] != className) {
- ar[ar.length] = cls[i];
- }
- }
- el.className = ar.join(" ");
-};
-
-Calendar.addClass = function(el, className) {
- Calendar.removeClass(el, className);
- el.className += " " + className;
-};
-
-// FIXME: the following 2 functions totally suck, are useless and should be replaced immediately.
-Calendar.getElement = function(ev) {
- var f = Calendar.is_ie ? window.event.srcElement : ev.currentTarget;
- while (f.nodeType != 1 || /^div$/i.test(f.tagName))
- f = f.parentNode;
- return f;
-};
-
-Calendar.getTargetElement = function(ev) {
- var f = Calendar.is_ie ? window.event.srcElement : ev.target;
- while (f.nodeType != 1)
- f = f.parentNode;
- return f;
-};
-
-Calendar.stopEvent = function(ev) {
- ev || (ev = window.event);
- if (Calendar.is_ie) {
- ev.cancelBubble = true;
- ev.returnValue = false;
- } else {
- ev.preventDefault();
- ev.stopPropagation();
- }
- return false;
-};
-
-Calendar.addEvent = function(el, evname, func) {
- if (el.attachEvent) { // IE
- el.attachEvent("on" + evname, func);
- } else if (el.addEventListener) { // Gecko / W3C
- el.addEventListener(evname, func, true);
- } else {
- el["on" + evname] = func;
- }
-};
-
-Calendar.removeEvent = function(el, evname, func) {
- if (el.detachEvent) { // IE
- el.detachEvent("on" + evname, func);
- } else if (el.removeEventListener) { // Gecko / W3C
- el.removeEventListener(evname, func, true);
- } else {
- el["on" + evname] = null;
- }
-};
-
-Calendar.createElement = function(type, parent) {
- var el = null;
- if (document.createElementNS) {
- // use the XHTML namespace; IE won't normally get here unless
- // _they_ "fix" the DOM2 implementation.
- el = document.createElementNS("http://www.w3.org/1999/xhtml", type);
- } else {
- el = document.createElement(type);
- }
- if (typeof parent != "undefined") {
- parent.appendChild(el);
- }
- return el;
-};
-
-// END: UTILITY FUNCTIONS
-
-// BEGIN: CALENDAR STATIC FUNCTIONS
-
-/** Internal -- adds a set of events to make some element behave like a button. */
-Calendar._add_evs = function(el) {
- with (Calendar) {
- addEvent(el, "mouseover", dayMouseOver);
- addEvent(el, "mousedown", dayMouseDown);
- addEvent(el, "mouseout", dayMouseOut);
- if (is_ie) {
- addEvent(el, "dblclick", dayMouseDblClick);
- el.setAttribute("unselectable", true);
- }
- }
-};
-
-Calendar.findMonth = function(el) {
- if (typeof el.month != "undefined") {
- return el;
- } else if (typeof el.parentNode.month != "undefined") {
- return el.parentNode;
- }
- return null;
-};
-
-Calendar.findYear = function(el) {
- if (typeof el.year != "undefined") {
- return el;
- } else if (typeof el.parentNode.year != "undefined") {
- return el.parentNode;
- }
- return null;
-};
-
-Calendar.showMonthsCombo = function () {
- var cal = Calendar._C;
- if (!cal) {
- return false;
- }
- var cal = cal;
- var cd = cal.activeDiv;
- var mc = cal.monthsCombo;
- if (cal.hilitedMonth) {
- Calendar.removeClass(cal.hilitedMonth, "hilite");
- }
- if (cal.activeMonth) {
- Calendar.removeClass(cal.activeMonth, "active");
- }
- var mon = cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()];
- Calendar.addClass(mon, "active");
- cal.activeMonth = mon;
- var s = mc.style;
- s.display = "block";
- if (cd.navtype < 0)
- s.left = cd.offsetLeft + "px";
- else {
- var mcw = mc.offsetWidth;
- if (typeof mcw == "undefined")
- // Konqueror brain-dead techniques
- mcw = 50;
- s.left = (cd.offsetLeft + cd.offsetWidth - mcw) + "px";
- }
- s.top = (cd.offsetTop + cd.offsetHeight) + "px";
-};
-
-Calendar.showYearsCombo = function (fwd) {
- var cal = Calendar._C;
- if (!cal) {
- return false;
- }
- var cal = cal;
- var cd = cal.activeDiv;
- var yc = cal.yearsCombo;
- if (cal.hilitedYear) {
- Calendar.removeClass(cal.hilitedYear, "hilite");
- }
- if (cal.activeYear) {
- Calendar.removeClass(cal.activeYear, "active");
- }
- cal.activeYear = null;
- var Y = cal.date.getFullYear() + (fwd ? 1 : -1);
- var yr = yc.firstChild;
- var show = false;
- for (var i = 12; i > 0; --i) {
- if (Y >= cal.minYear && Y <= cal.maxYear) {
- yr.innerHTML = Y;
- yr.year = Y;
- yr.style.display = "block";
- show = true;
- } else {
- yr.style.display = "none";
- }
- yr = yr.nextSibling;
- Y += fwd ? cal.yearStep : -cal.yearStep;
- }
- if (show) {
- var s = yc.style;
- s.display = "block";
- if (cd.navtype < 0)
- s.left = cd.offsetLeft + "px";
- else {
- var ycw = yc.offsetWidth;
- if (typeof ycw == "undefined")
- // Konqueror brain-dead techniques
- ycw = 50;
- s.left = (cd.offsetLeft + cd.offsetWidth - ycw) + "px";
- }
- s.top = (cd.offsetTop + cd.offsetHeight) + "px";
- }
-};
-
-// event handlers
-
-Calendar.tableMouseUp = function(ev) {
- var cal = Calendar._C;
- if (!cal) {
- return false;
- }
- if (cal.timeout) {
- clearTimeout(cal.timeout);
- }
- var el = cal.activeDiv;
- if (!el) {
- return false;
- }
- var target = Calendar.getTargetElement(ev);
- ev || (ev = window.event);
- Calendar.removeClass(el, "active");
- if (target == el || target.parentNode == el) {
- Calendar.cellClick(el, ev);
- }
- var mon = Calendar.findMonth(target);
- var date = null;
- if (mon) {
- date = new Date(cal.date);
- if (mon.month != date.getMonth()) {
- date.setMonth(mon.month);
- cal.setDate(date);
- cal.dateClicked = false;
- cal.callHandler();
- }
- } else {
- var year = Calendar.findYear(target);
- if (year) {
- date = new Date(cal.date);
- if (year.year != date.getFullYear()) {
- date.setFullYear(year.year);
- cal.setDate(date);
- cal.dateClicked = false;
- cal.callHandler();
- }
- }
- }
- with (Calendar) {
- removeEvent(document, "mouseup", tableMouseUp);
- removeEvent(document, "mouseover", tableMouseOver);
- removeEvent(document, "mousemove", tableMouseOver);
- cal._hideCombos();
- _C = null;
- return stopEvent(ev);
- }
-};
-
-Calendar.tableMouseOver = function (ev) {
- var cal = Calendar._C;
- if (!cal) {
- return;
- }
- var el = cal.activeDiv;
- var target = Calendar.getTargetElement(ev);
- if (target == el || target.parentNode == el) {
- Calendar.addClass(el, "hilite active");
- Calendar.addClass(el.parentNode, "rowhilite");
- } else {
- if (typeof el.navtype == "undefined" || (el.navtype != 50 && (el.navtype == 0 || Math.abs(el.navtype) > 2)))
- Calendar.removeClass(el, "active");
- Calendar.removeClass(el, "hilite");
- Calendar.removeClass(el.parentNode, "rowhilite");
- }
- ev || (ev = window.event);
- if (el.navtype == 50 && target != el) {
- var pos = Calendar.getAbsolutePos(el);
- var w = el.offsetWidth;
- var x = ev.clientX;
- var dx;
- var decrease = true;
- if (x > pos.x + w) {
- dx = x - pos.x - w;
- decrease = false;
- } else
- dx = pos.x - x;
-
- if (dx < 0) dx = 0;
- var range = el._range;
- var current = el._current;
- var count = Math.floor(dx / 10) % range.length;
- for (var i = range.length; --i >= 0;)
- if (range[i] == current)
- break;
- while (count-- > 0)
- if (decrease) {
- if (--i < 0)
- i = range.length - 1;
- } else if ( ++i >= range.length )
- i = 0;
- var newval = range[i];
- el.innerHTML = newval;
-
- cal.onUpdateTime();
- }
- var mon = Calendar.findMonth(target);
- if (mon) {
- if (mon.month != cal.date.getMonth()) {
- if (cal.hilitedMonth) {
- Calendar.removeClass(cal.hilitedMonth, "hilite");
- }
- Calendar.addClass(mon, "hilite");
- cal.hilitedMonth = mon;
- } else if (cal.hilitedMonth) {
- Calendar.removeClass(cal.hilitedMonth, "hilite");
- }
- } else {
- if (cal.hilitedMonth) {
- Calendar.removeClass(cal.hilitedMonth, "hilite");
- }
- var year = Calendar.findYear(target);
- if (year) {
- if (year.year != cal.date.getFullYear()) {
- if (cal.hilitedYear) {
- Calendar.removeClass(cal.hilitedYear, "hilite");
- }
- Calendar.addClass(year, "hilite");
- cal.hilitedYear = year;
- } else if (cal.hilitedYear) {
- Calendar.removeClass(cal.hilitedYear, "hilite");
- }
- } else if (cal.hilitedYear) {
- Calendar.removeClass(cal.hilitedYear, "hilite");
- }
- }
- return Calendar.stopEvent(ev);
-};
-
-Calendar.tableMouseDown = function (ev) {
- if (Calendar.getTargetElement(ev) == Calendar.getElement(ev)) {
- return Calendar.stopEvent(ev);
- }
-};
-
-Calendar.calDragIt = function (ev) {
- var cal = Calendar._C;
- if (!(cal && cal.dragging)) {
- return false;
- }
- var posX;
- var posY;
- if (Calendar.is_ie) {
- posY = window.event.clientY + document.body.scrollTop;
- posX = window.event.clientX + document.body.scrollLeft;
- } else {
- posX = ev.pageX;
- posY = ev.pageY;
- }
- cal.hideShowCovered();
- var st = cal.element.style;
- st.left = (posX - cal.xOffs) + "px";
- st.top = (posY - cal.yOffs) + "px";
- return Calendar.stopEvent(ev);
-};
-
-Calendar.calDragEnd = function (ev) {
- var cal = Calendar._C;
- if (!cal) {
- return false;
- }
- cal.dragging = false;
- with (Calendar) {
- removeEvent(document, "mousemove", calDragIt);
- removeEvent(document, "mouseup", calDragEnd);
- tableMouseUp(ev);
- }
- cal.hideShowCovered();
-};
-
-Calendar.dayMouseDown = function(ev) {
- var el = Calendar.getElement(ev);
- if (el.disabled) {
- return false;
- }
- var cal = el.calendar;
- cal.activeDiv = el;
- Calendar._C = cal;
- if (el.navtype != 300) with (Calendar) {
- if (el.navtype == 50) {
- el._current = el.innerHTML;
- addEvent(document, "mousemove", tableMouseOver);
- } else
- addEvent(document, Calendar.is_ie5 ? "mousemove" : "mouseover", tableMouseOver);
- addClass(el, "hilite active");
- addEvent(document, "mouseup", tableMouseUp);
- } else if (cal.isPopup) {
- cal._dragStart(ev);
- }
- if (el.navtype == -1 || el.navtype == 1) {
- if (cal.timeout) clearTimeout(cal.timeout);
- cal.timeout = setTimeout("Calendar.showMonthsCombo()", 250);
- } else if (el.navtype == -2 || el.navtype == 2) {
- if (cal.timeout) clearTimeout(cal.timeout);
- cal.timeout = setTimeout((el.navtype > 0) ? "Calendar.showYearsCombo(true)" : "Calendar.showYearsCombo(false)", 250);
- } else {
- cal.timeout = null;
- }
- return Calendar.stopEvent(ev);
-};
-
-Calendar.dayMouseDblClick = function(ev) {
- Calendar.cellClick(Calendar.getElement(ev), ev || window.event);
- if (Calendar.is_ie) {
- document.selection.empty();
- }
-};
-
-Calendar.dayMouseOver = function(ev) {
- var el = Calendar.getElement(ev);
- if (Calendar.isRelated(el, ev) || Calendar._C || el.disabled) {
- return false;
- }
- if (el.ttip) {
- if (el.ttip.substr(0, 1) == "_") {
- el.ttip = el.caldate.print(el.calendar.ttDateFormat) + el.ttip.substr(1);
- }
- el.calendar.tooltips.innerHTML = el.ttip;
- }
- if (el.navtype != 300) {
- Calendar.addClass(el, "hilite");
- if (el.caldate) {
- Calendar.addClass(el.parentNode, "rowhilite");
- }
- }
- return Calendar.stopEvent(ev);
-};
-
-Calendar.dayMouseOut = function(ev) {
- with (Calendar) {
- var el = getElement(ev);
- if (isRelated(el, ev) || _C || el.disabled)
- return false;
- removeClass(el, "hilite");
- if (el.caldate)
- removeClass(el.parentNode, "rowhilite");
- if (el.calendar)
- el.calendar.tooltips.innerHTML = _TT["SEL_DATE"];
- return stopEvent(ev);
- }
-};
-
-/**
- * A generic "click" handler :) handles all types of buttons defined in this
- * calendar.
- */
-Calendar.cellClick = function(el, ev) {
- var cal = el.calendar;
- var closing = false;
- var newdate = false;
- var date = null;
- if (typeof el.navtype == "undefined") {
- if (cal.currentDateEl) {
- Calendar.removeClass(cal.currentDateEl, "selected");
- Calendar.addClass(el, "selected");
- closing = (cal.currentDateEl == el);
- if (!closing) {
- cal.currentDateEl = el;
- }
- }
- cal.date.setDateOnly(el.caldate);
- date = cal.date;
- var other_month = !(cal.dateClicked = !el.otherMonth);
- if (!other_month && !cal.currentDateEl)
- cal._toggleMultipleDate(new Date(date));
- else
- newdate = !el.disabled;
- // a date was clicked
- if (other_month)
- cal._init(cal.firstDayOfWeek, date);
- } else {
- if (el.navtype == 200) {
- Calendar.removeClass(el, "hilite");
- cal.callCloseHandler();
- return;
- }
- date = new Date(cal.date);
- if (el.navtype == 0)
- date.setDateOnly(new Date()); // TODAY
- // unless "today" was clicked, we assume no date was clicked so
- // the selected handler will know not to close the calenar when
- // in single-click mode.
- // cal.dateClicked = (el.navtype == 0);
- cal.dateClicked = false;
- var year = date.getFullYear();
- var mon = date.getMonth();
- function setMonth(m) {
- var day = date.getDate();
- var max = date.getMonthDays(m);
- if (day > max) {
- date.setDate(max);
- }
- date.setMonth(m);
- };
- switch (el.navtype) {
- case 400:
- Calendar.removeClass(el, "hilite");
- var text = Calendar._TT["ABOUT"];
- if (typeof text != "undefined") {
- text += cal.showsTime ? Calendar._TT["ABOUT_TIME"] : "";
- } else {
- // FIXME: this should be removed as soon as lang files get updated!
- text = "Help and about box text is not translated into this language.\n" +
- "If you know this language and you feel generous please update\n" +
- "the corresponding file in \"lang\" subdir to match calendar-en.js\n" +
- "and send it back to <mihai_bazon@yahoo.com> to get it into the distribution ;-)\n\n" +
- "Thank you!\n" +
- "http://dynarch.com/mishoo/calendar.epl\n";
- }
- alert(text);
- return;
- case -2:
- if (year > cal.minYear) {
- date.setFullYear(year - 1);
- }
- break;
- case -1:
- if (mon > 0) {
- setMonth(mon - 1);
- } else if (year-- > cal.minYear) {
- date.setFullYear(year);
- setMonth(11);
- }
- break;
- case 1:
- if (mon < 11) {
- setMonth(mon + 1);
- } else if (year < cal.maxYear) {
- date.setFullYear(year + 1);
- setMonth(0);
- }
- break;
- case 2:
- if (year < cal.maxYear) {
- date.setFullYear(year + 1);
- }
- break;
- case 100:
- cal.setFirstDayOfWeek(el.fdow);
- return;
- case 50:
- var range = el._range;
- var current = el.innerHTML;
- for (var i = range.length; --i >= 0;)
- if (range[i] == current)
- break;
- if (ev && ev.shiftKey) {
- if (--i < 0)
- i = range.length - 1;
- } else if ( ++i >= range.length )
- i = 0;
- var newval = range[i];
- el.innerHTML = newval;
- cal.onUpdateTime();
- return;
- case 0:
- // TODAY will bring us here
- if ((typeof cal.getDateStatus == "function") &&
- cal.getDateStatus(date, date.getFullYear(), date.getMonth(), date.getDate())) {
- return false;
- }
- break;
- }
- if (!date.equalsTo(cal.date)) {
- cal.setDate(date);
- newdate = true;
- } else if (el.navtype == 0)
- newdate = closing = true;
- }
- if (newdate) {
- ev && cal.callHandler();
- }
- if (closing) {
- Calendar.removeClass(el, "hilite");
- ev && cal.callCloseHandler();
- }
-};
-
-// END: CALENDAR STATIC FUNCTIONS
-
-// BEGIN: CALENDAR OBJECT FUNCTIONS
-
-/**
- * This function creates the calendar inside the given parent. If _par is
- * null than it creates a popup calendar inside the BODY element. If _par is
- * an element, be it BODY, then it creates a non-popup calendar (still
- * hidden). Some properties need to be set before calling this function.
- */
-Calendar.prototype.create = function (_par) {
- var parent = null;
- if (! _par) {
- // default parent is the document body, in which case we create
- // a popup calendar.
- parent = document.getElementsByTagName("body")[0];
- this.isPopup = true;
- } else {
- parent = _par;
- this.isPopup = false;
- }
- this.date = this.dateStr ? new Date(this.dateStr) : new Date();
-
- var table = Calendar.createElement("table");
- this.table = table;
- table.cellSpacing = 0;
- table.cellPadding = 0;
- table.calendar = this;
- Calendar.addEvent(table, "mousedown", Calendar.tableMouseDown);
-
- var div = Calendar.createElement("div");
- this.element = div;
- div.className = "calendar";
- if (this.isPopup) {
- div.style.position = "absolute";
- div.style.display = "none";
- }
- div.appendChild(table);
-
- var thead = Calendar.createElement("thead", table);
- var cell = null;
- var row = null;
-
- var cal = this;
- var hh = function (text, cs, navtype) {
- cell = Calendar.createElement("td", row);
- cell.colSpan = cs;
- cell.className = "button";
- if (navtype != 0 && Math.abs(navtype) <= 2)
- cell.className += " nav";
- Calendar._add_evs(cell);
- cell.calendar = cal;
- cell.navtype = navtype;
- cell.innerHTML = "<div unselectable='on'>" + text + "</div>";
- return cell;
- };
-
- row = Calendar.createElement("tr", thead);
- var title_length = 6;
- (this.isPopup) && --title_length;
- (this.weekNumbers) && ++title_length;
-
- hh("?", 1, 400).ttip = Calendar._TT["INFO"];
- this.title = hh("", title_length, 300);
- this.title.className = "title";
- if (this.isPopup) {
- this.title.ttip = Calendar._TT["DRAG_TO_MOVE"];
- this.title.style.cursor = "move";
- hh("&#x00d7;", 1, 200).ttip = Calendar._TT["CLOSE"];
- }
-
- row = Calendar.createElement("tr", thead);
- row.className = "headrow";
-
- this._nav_py = hh("&#x00ab;", 1, -2);
- this._nav_py.ttip = Calendar._TT["PREV_YEAR"];
-
- this._nav_pm = hh("&#x2039;", 1, -1);
- this._nav_pm.ttip = Calendar._TT["PREV_MONTH"];
-
- this._nav_now = hh(Calendar._TT["TODAY"], this.weekNumbers ? 4 : 3, 0);
- this._nav_now.ttip = Calendar._TT["GO_TODAY"];
-
- this._nav_nm = hh("&#x203a;", 1, 1);
- this._nav_nm.ttip = Calendar._TT["NEXT_MONTH"];
-
- this._nav_ny = hh("&#x00bb;", 1, 2);
- this._nav_ny.ttip = Calendar._TT["NEXT_YEAR"];
-
- // day names
- row = Calendar.createElement("tr", thead);
- row.className = "daynames";
- if (this.weekNumbers) {
- cell = Calendar.createElement("td", row);
- cell.className = "name wn";
- cell.innerHTML = Calendar._TT["WK"];
- }
- for (var i = 7; i > 0; --i) {
- cell = Calendar.createElement("td", row);
- if (!i) {
- cell.navtype = 100;
- cell.calendar = this;
- Calendar._add_evs(cell);
- }
- }
- this.firstdayname = (this.weekNumbers) ? row.firstChild.nextSibling : row.firstChild;
- this._displayWeekdays();
-
- var tbody = Calendar.createElement("tbody", table);
- this.tbody = tbody;
-
- for (i = 6; i > 0; --i) {
- row = Calendar.createElement("tr", tbody);
- if (this.weekNumbers) {
- cell = Calendar.createElement("td", row);
- }
- for (var j = 7; j > 0; --j) {
- cell = Calendar.createElement("td", row);
- cell.calendar = this;
- Calendar._add_evs(cell);
- }
- }
-
- if (this.showsTime) {
- row = Calendar.createElement("tr", tbody);
- row.className = "time";
-
- cell = Calendar.createElement("td", row);
- cell.className = "time";
- cell.colSpan = 2;
- cell.innerHTML = Calendar._TT["TIME"] || "&nbsp;";
-
- cell = Calendar.createElement("td", row);
- cell.className = "time";
- cell.colSpan = this.weekNumbers ? 4 : 3;
-
- (function(){
- function makeTimePart(className, init, range_start, range_end) {
- var part = Calendar.createElement("span", cell);
- part.className = className;
- part.innerHTML = init;
- part.calendar = cal;
- part.ttip = Calendar._TT["TIME_PART"];
- part.navtype = 50;
- part._range = [];
- if (typeof range_start != "number")
- part._range = range_start;
- else {
- for (var i = range_start; i <= range_end; ++i) {
- var txt;
- if (i < 10 && range_end >= 10) txt = '0' + i;
- else txt = '' + i;
- part._range[part._range.length] = txt;
- }
- }
- Calendar._add_evs(part);
- return part;
- };
- var hrs = cal.date.getHours();
- var mins = cal.date.getMinutes();
- var t12 = !cal.time24;
- var pm = (hrs > 12);
- if (t12 && pm) hrs -= 12;
- var H = makeTimePart("hour", hrs, t12 ? 1 : 0, t12 ? 12 : 23);
- var span = Calendar.createElement("span", cell);
- span.innerHTML = ":";
- span.className = "colon";
- var M = makeTimePart("minute", mins, 0, 59);
- var AP = null;
- cell = Calendar.createElement("td", row);
- cell.className = "time";
- cell.colSpan = 2;
- if (t12)
- AP = makeTimePart("ampm", pm ? "pm" : "am", ["am", "pm"]);
- else
- cell.innerHTML = "&nbsp;";
-
- cal.onSetTime = function() {
- var pm, hrs = this.date.getHours(),
- mins = this.date.getMinutes();
- if (t12) {
- pm = (hrs >= 12);
- if (pm) hrs -= 12;
- if (hrs == 0) hrs = 12;
- AP.innerHTML = pm ? "pm" : "am";
- }
- H.innerHTML = (hrs < 10) ? ("0" + hrs) : hrs;
- M.innerHTML = (mins < 10) ? ("0" + mins) : mins;
- };
-
- cal.onUpdateTime = function() {
- var date = this.date;
- var h = parseInt(H.innerHTML, 10);
- if (t12) {
- if (/pm/i.test(AP.innerHTML) && h < 12)
- h += 12;
- else if (/am/i.test(AP.innerHTML) && h == 12)
- h = 0;
- }
- var d = date.getDate();
- var m = date.getMonth();
- var y = date.getFullYear();
- date.setHours(h);
- date.setMinutes(parseInt(M.innerHTML, 10));
- date.setFullYear(y);
- date.setMonth(m);
- date.setDate(d);
- this.dateClicked = false;
- this.callHandler();
- };
- })();
- } else {
- this.onSetTime = this.onUpdateTime = function() {};
- }
-
- var tfoot = Calendar.createElement("tfoot", table);
-
- row = Calendar.createElement("tr", tfoot);
- row.className = "footrow";
-
- cell = hh(Calendar._TT["SEL_DATE"], this.weekNumbers ? 8 : 7, 300);
- cell.className = "ttip";
- if (this.isPopup) {
- cell.ttip = Calendar._TT["DRAG_TO_MOVE"];
- cell.style.cursor = "move";
- }
- this.tooltips = cell;
-
- div = Calendar.createElement("div", this.element);
- this.monthsCombo = div;
- div.className = "combo";
- for (i = 0; i < Calendar._MN.length; ++i) {
- var mn = Calendar.createElement("div");
- mn.className = Calendar.is_ie ? "label-IEfix" : "label";
- mn.month = i;
- mn.innerHTML = Calendar._SMN[i];
- div.appendChild(mn);
- }
-
- div = Calendar.createElement("div", this.element);
- this.yearsCombo = div;
- div.className = "combo";
- for (i = 12; i > 0; --i) {
- var yr = Calendar.createElement("div");
- yr.className = Calendar.is_ie ? "label-IEfix" : "label";
- div.appendChild(yr);
- }
-
- this._init(this.firstDayOfWeek, this.date);
- parent.appendChild(this.element);
-};
-
-/** keyboard navigation, only for popup calendars */
-Calendar._keyEvent = function(ev) {
- var cal = window._dynarch_popupCalendar;
- if (!cal || cal.multiple)
- return false;
- (Calendar.is_ie) && (ev = window.event);
- var act = (Calendar.is_ie || ev.type == "keypress"),
- K = ev.keyCode;
- if (ev.ctrlKey) {
- switch (K) {
- case 37: // KEY left
- act && Calendar.cellClick(cal._nav_pm);
- break;
- case 38: // KEY up
- act && Calendar.cellClick(cal._nav_py);
- break;
- case 39: // KEY right
- act && Calendar.cellClick(cal._nav_nm);
- break;
- case 40: // KEY down
- act && Calendar.cellClick(cal._nav_ny);
- break;
- default:
- return false;
- }
- } else switch (K) {
- case 32: // KEY space (now)
- Calendar.cellClick(cal._nav_now);
- break;
- case 27: // KEY esc
- act && cal.callCloseHandler();
- break;
- case 37: // KEY left
- case 38: // KEY up
- case 39: // KEY right
- case 40: // KEY down
- if (act) {
- var prev, x, y, ne, el, step;
- prev = K == 37 || K == 38;
- step = (K == 37 || K == 39) ? 1 : 7;
- function setVars() {
- el = cal.currentDateEl;
- var p = el.pos;
- x = p & 15;
- y = p >> 4;
- ne = cal.ar_days[y][x];
- };setVars();
- function prevMonth() {
- var date = new Date(cal.date);
- date.setDate(date.getDate() - step);
- cal.setDate(date);
- };
- function nextMonth() {
- var date = new Date(cal.date);
- date.setDate(date.getDate() + step);
- cal.setDate(date);
- };
- while (1) {
- switch (K) {
- case 37: // KEY left
- if (--x >= 0)
- ne = cal.ar_days[y][x];
- else {
- x = 6;
- K = 38;
- continue;
- }
- break;
- case 38: // KEY up
- if (--y >= 0)
- ne = cal.ar_days[y][x];
- else {
- prevMonth();
- setVars();
- }
- break;
- case 39: // KEY right
- if (++x < 7)
- ne = cal.ar_days[y][x];
- else {
- x = 0;
- K = 40;
- continue;
- }
- break;
- case 40: // KEY down
- if (++y < cal.ar_days.length)
- ne = cal.ar_days[y][x];
- else {
- nextMonth();
- setVars();
- }
- break;
- }
- break;
- }
- if (ne) {
- if (!ne.disabled)
- Calendar.cellClick(ne);
- else if (prev)
- prevMonth();
- else
- nextMonth();
- }
- }
- break;
- case 13: // KEY enter
- if (act)
- Calendar.cellClick(cal.currentDateEl, ev);
- break;
- default:
- return false;
- }
- return Calendar.stopEvent(ev);
-};
-
-/**
- * (RE)Initializes the calendar to the given date and firstDayOfWeek
- */
-Calendar.prototype._init = function (firstDayOfWeek, date) {
- var today = new Date(),
- TY = today.getFullYear(),
- TM = today.getMonth(),
- TD = today.getDate();
- this.table.style.visibility = "hidden";
- var year = date.getFullYear();
- if (year < this.minYear) {
- year = this.minYear;
- date.setFullYear(year);
- } else if (year > this.maxYear) {
- year = this.maxYear;
- date.setFullYear(year);
- }
- this.firstDayOfWeek = firstDayOfWeek;
- this.date = new Date(date);
- var month = date.getMonth();
- var mday = date.getDate();
- var no_days = date.getMonthDays();
-
- // calendar voodoo for computing the first day that would actually be
- // displayed in the calendar, even if it's from the previous month.
- // WARNING: this is magic. ;-)
- date.setDate(1);
- var day1 = (date.getDay() - this.firstDayOfWeek) % 7;
- if (day1 < 0)
- day1 += 7;
- date.setDate(-day1);
- date.setDate(date.getDate() + 1);
-
- var row = this.tbody.firstChild;
- var MN = Calendar._SMN[month];
- var ar_days = this.ar_days = new Array();
- var weekend = Calendar._TT["WEEKEND"];
- var dates = this.multiple ? (this.datesCells = {}) : null;
- for (var i = 0; i < 6; ++i, row = row.nextSibling) {
- var cell = row.firstChild;
- if (this.weekNumbers) {
- cell.className = "day wn";
- cell.innerHTML = date.getWeekNumber();
- cell = cell.nextSibling;
- }
- row.className = "daysrow";
- var hasdays = false, iday, dpos = ar_days[i] = [];
- for (var j = 0; j < 7; ++j, cell = cell.nextSibling, date.setDate(iday + 1)) {
- iday = date.getDate();
- var wday = date.getDay();
- cell.className = "day";
- cell.pos = i << 4 | j;
- dpos[j] = cell;
- var current_month = (date.getMonth() == month);
- if (!current_month) {
- if (this.showsOtherMonths) {
- cell.className += " othermonth";
- cell.otherMonth = true;
- } else {
- cell.className = "emptycell";
- cell.innerHTML = "&nbsp;";
- cell.disabled = true;
- continue;
- }
- } else {
- cell.otherMonth = false;
- hasdays = true;
- }
- cell.disabled = false;
- cell.innerHTML = this.getDateText ? this.getDateText(date, iday) : iday;
- if (dates)
- dates[date.print("%Y%m%d")] = cell;
- if (this.getDateStatus) {
- var status = this.getDateStatus(date, year, month, iday);
- if (this.getDateToolTip) {
- var toolTip = this.getDateToolTip(date, year, month, iday);
- if (toolTip)
- cell.title = toolTip;
- }
- if (status === true) {
- cell.className += " disabled";
- cell.disabled = true;
- } else {
- if (/disabled/i.test(status))
- cell.disabled = true;
- cell.className += " " + status;
- }
- }
- if (!cell.disabled) {
- cell.caldate = new Date(date);
- cell.ttip = "_";
- if (!this.multiple && current_month
- && iday == mday && this.hiliteToday) {
- cell.className += " selected";
- this.currentDateEl = cell;
- }
- if (date.getFullYear() == TY &&
- date.getMonth() == TM &&
- iday == TD) {
- cell.className += " today";
- cell.ttip += Calendar._TT["PART_TODAY"];
- }
- if (weekend.indexOf(wday.toString()) != -1)
- cell.className += cell.otherMonth ? " oweekend" : " weekend";
- }
- }
- if (!(hasdays || this.showsOtherMonths))
- row.className = "emptyrow";
- }
- this.title.innerHTML = Calendar._MN[month] + ", " + year;
- this.onSetTime();
- this.table.style.visibility = "visible";
- this._initMultipleDates();
- // PROFILE
- // this.tooltips.innerHTML = "Generated in " + ((new Date()) - today) + " ms";
-};
-
-Calendar.prototype._initMultipleDates = function() {
- if (this.multiple) {
- for (var i in this.multiple) {
- var cell = this.datesCells[i];
- var d = this.multiple[i];
- if (!d)
- continue;
- if (cell)
- cell.className += " selected";
- }
- }
-};
-
-Calendar.prototype._toggleMultipleDate = function(date) {
- if (this.multiple) {
- var ds = date.print("%Y%m%d");
- var cell = this.datesCells[ds];
- if (cell) {
- var d = this.multiple[ds];
- if (!d) {
- Calendar.addClass(cell, "selected");
- this.multiple[ds] = date;
- } else {
- Calendar.removeClass(cell, "selected");
- delete this.multiple[ds];
- }
- }
- }
-};
-
-Calendar.prototype.setDateToolTipHandler = function (unaryFunction) {
- this.getDateToolTip = unaryFunction;
-};
-
-/**
- * Calls _init function above for going to a certain date (but only if the
- * date is different than the currently selected one).
- */
-Calendar.prototype.setDate = function (date) {
- if (!date.equalsTo(this.date)) {
- this._init(this.firstDayOfWeek, date);
- }
-};
-
-/**
- * Refreshes the calendar. Useful if the "disabledHandler" function is
- * dynamic, meaning that the list of disabled date can change at runtime.
- * Just * call this function if you think that the list of disabled dates
- * should * change.
- */
-Calendar.prototype.refresh = function () {
- this._init(this.firstDayOfWeek, this.date);
-};
-
-/** Modifies the "firstDayOfWeek" parameter (pass 0 for Synday, 1 for Monday, etc.). */
-Calendar.prototype.setFirstDayOfWeek = function (firstDayOfWeek) {
- this._init(firstDayOfWeek, this.date);
- this._displayWeekdays();
-};
-
-/**
- * Allows customization of what dates are enabled. The "unaryFunction"
- * parameter must be a function object that receives the date (as a JS Date
- * object) and returns a boolean value. If the returned value is true then
- * the passed date will be marked as disabled.
- */
-Calendar.prototype.setDateStatusHandler = Calendar.prototype.setDisabledHandler = function (unaryFunction) {
- this.getDateStatus = unaryFunction;
-};
-
-/** Customization of allowed year range for the calendar. */
-Calendar.prototype.setRange = function (a, z) {
- this.minYear = a;
- this.maxYear = z;
-};
-
-/** Calls the first user handler (selectedHandler). */
-Calendar.prototype.callHandler = function () {
- if (this.onSelected) {
- this.onSelected(this, this.date.print(this.dateFormat));
- }
-};
-
-/** Calls the second user handler (closeHandler). */
-Calendar.prototype.callCloseHandler = function () {
- if (this.onClose) {
- this.onClose(this);
- }
- this.hideShowCovered();
-};
-
-/** Removes the calendar object from the DOM tree and destroys it. */
-Calendar.prototype.destroy = function () {
- var el = this.element.parentNode;
- el.removeChild(this.element);
- Calendar._C = null;
- window._dynarch_popupCalendar = null;
-};
-
-/**
- * Moves the calendar element to a different section in the DOM tree (changes
- * its parent).
- */
-Calendar.prototype.reparent = function (new_parent) {
- var el = this.element;
- el.parentNode.removeChild(el);
- new_parent.appendChild(el);
-};
-
-// This gets called when the user presses a mouse button anywhere in the
-// document, if the calendar is shown. If the click was outside the open
-// calendar this function closes it.
-Calendar._checkCalendar = function(ev) {
- var calendar = window._dynarch_popupCalendar;
- if (!calendar) {
- return false;
- }
- var el = Calendar.is_ie ? Calendar.getElement(ev) : Calendar.getTargetElement(ev);
- for (; el != null && el != calendar.element; el = el.parentNode);
- if (el == null) {
- // calls closeHandler which should hide the calendar.
- window._dynarch_popupCalendar.callCloseHandler();
- return Calendar.stopEvent(ev);
- }
-};
-
-/** Shows the calendar. */
-Calendar.prototype.show = function () {
- var rows = this.table.getElementsByTagName("tr");
- for (var i = rows.length; i > 0;) {
- var row = rows[--i];
- Calendar.removeClass(row, "rowhilite");
- var cells = row.getElementsByTagName("td");
- for (var j = cells.length; j > 0;) {
- var cell = cells[--j];
- Calendar.removeClass(cell, "hilite");
- Calendar.removeClass(cell, "active");
- }
- }
- this.element.style.display = "block";
- this.hidden = false;
- if (this.isPopup) {
- window._dynarch_popupCalendar = this;
- Calendar.addEvent(document, "keydown", Calendar._keyEvent);
- Calendar.addEvent(document, "keypress", Calendar._keyEvent);
- Calendar.addEvent(document, "mousedown", Calendar._checkCalendar);
- }
- this.hideShowCovered();
-};
-
-/**
- * Hides the calendar. Also removes any "hilite" from the class of any TD
- * element.
- */
-Calendar.prototype.hide = function () {
- if (this.isPopup) {
- Calendar.removeEvent(document, "keydown", Calendar._keyEvent);
- Calendar.removeEvent(document, "keypress", Calendar._keyEvent);
- Calendar.removeEvent(document, "mousedown", Calendar._checkCalendar);
- }
- this.element.style.display = "none";
- this.hidden = true;
- this.hideShowCovered();
-};
-
-/**
- * Shows the calendar at a given absolute position (beware that, depending on
- * the calendar element style -- position property -- this might be relative
- * to the parent's containing rectangle).
- */
-Calendar.prototype.showAt = function (x, y) {
- var s = this.element.style;
- s.left = x + "px";
- s.top = y + "px";
- this.show();
-};
-
-/** Shows the calendar near a given element. */
-Calendar.prototype.showAtElement = function (el, opts) {
- var self = this;
- var p = Calendar.getAbsolutePos(el);
- if (!opts || typeof opts != "string") {
- this.showAt(p.x, p.y + el.offsetHeight);
- return true;
- }
- function fixPosition(box) {
- if (box.x < 0)
- box.x = 0;
- if (box.y < 0)
- box.y = 0;
- var cp = document.createElement("div");
- var s = cp.style;
- s.position = "absolute";
- s.right = s.bottom = s.width = s.height = "0px";
- document.body.appendChild(cp);
- var br = Calendar.getAbsolutePos(cp);
- document.body.removeChild(cp);
- if (Calendar.is_ie) {
- br.y += document.body.scrollTop;
- br.x += document.body.scrollLeft;
- } else {
- br.y += window.scrollY;
- br.x += window.scrollX;
- }
- var tmp = box.x + box.width - br.x;
- if (tmp > 0) box.x -= tmp;
- tmp = box.y + box.height - br.y;
- if (tmp > 0) box.y -= tmp;
- };
- this.element.style.display = "block";
- Calendar.continuation_for_the_fucking_khtml_browser = function() {
- var w = self.element.offsetWidth;
- var h = self.element.offsetHeight;
- self.element.style.display = "none";
- var valign = opts.substr(0, 1);
- var halign = "l";
- if (opts.length > 1) {
- halign = opts.substr(1, 1);
- }
- // vertical alignment
- switch (valign) {
- case "T": p.y -= h; break;
- case "B": p.y += el.offsetHeight; break;
- case "C": p.y += (el.offsetHeight - h) / 2; break;
- case "t": p.y += el.offsetHeight - h; break;
- case "b": break; // already there
- }
- // horizontal alignment
- switch (halign) {
- case "L": p.x -= w; break;
- case "R": p.x += el.offsetWidth; break;
- case "C": p.x += (el.offsetWidth - w) / 2; break;
- case "l": p.x += el.offsetWidth - w; break;
- case "r": break; // already there
- }
- p.width = w;
- p.height = h + 40;
- self.monthsCombo.style.display = "none";
- fixPosition(p);
- self.showAt(p.x, p.y);
- };
- if (Calendar.is_khtml)
- setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()", 10);
- else
- Calendar.continuation_for_the_fucking_khtml_browser();
-};
-
-/** Customizes the date format. */
-Calendar.prototype.setDateFormat = function (str) {
- this.dateFormat = str;
-};
-
-/** Customizes the tooltip date format. */
-Calendar.prototype.setTtDateFormat = function (str) {
- this.ttDateFormat = str;
-};
-
-/**
- * Tries to identify the date represented in a string. If successful it also
- * calls this.setDate which moves the calendar to the given date.
- */
-Calendar.prototype.parseDate = function(str, fmt) {
- if (!fmt)
- fmt = this.dateFormat;
- this.setDate(Date.parseDate(str, fmt));
-};
-
-Calendar.prototype.hideShowCovered = function () {
- if (!Calendar.is_ie && !Calendar.is_opera)
- return;
- function getVisib(obj){
- var value = obj.style.visibility;
- if (!value) {
- if (document.defaultView && typeof (document.defaultView.getComputedStyle) == "function") { // Gecko, W3C
- if (!Calendar.is_khtml)
- value = document.defaultView.
- getComputedStyle(obj, "").getPropertyValue("visibility");
- else
- value = '';
- } else if (obj.currentStyle) { // IE
- value = obj.currentStyle.visibility;
- } else
- value = '';
- }
- return value;
- };
-
- var tags = new Array("applet", "iframe", "select");
- var el = this.element;
-
- var p = Calendar.getAbsolutePos(el);
- var EX1 = p.x;
- var EX2 = el.offsetWidth + EX1;
- var EY1 = p.y;
- var EY2 = el.offsetHeight + EY1;
-
- for (var k = tags.length; k > 0; ) {
- var ar = document.getElementsByTagName(tags[--k]);
- var cc = null;
-
- for (var i = ar.length; i > 0;) {
- cc = ar[--i];
-
- p = Calendar.getAbsolutePos(cc);
- var CX1 = p.x;
- var CX2 = cc.offsetWidth + CX1;
- var CY1 = p.y;
- var CY2 = cc.offsetHeight + CY1;
-
- if (this.hidden || (CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 < EY1)) {
- if (!cc.__msh_save_visibility) {
- cc.__msh_save_visibility = getVisib(cc);
- }
- cc.style.visibility = cc.__msh_save_visibility;
- } else {
- if (!cc.__msh_save_visibility) {
- cc.__msh_save_visibility = getVisib(cc);
- }
- cc.style.visibility = "hidden";
- }
- }
- }
-};
-
-/** Internal function; it displays the bar with the names of the weekday. */
-Calendar.prototype._displayWeekdays = function () {
- var fdow = this.firstDayOfWeek;
- var cell = this.firstdayname;
- var weekend = Calendar._TT["WEEKEND"];
- for (var i = 0; i < 7; ++i) {
- cell.className = "day name";
- var realday = (i + fdow) % 7;
- if (i) {
- cell.ttip = Calendar._TT["DAY_FIRST"].replace("%s", Calendar._DN[realday]);
- cell.navtype = 100;
- cell.calendar = this;
- cell.fdow = realday;
- Calendar._add_evs(cell);
- }
- if (weekend.indexOf(realday.toString()) != -1) {
- Calendar.addClass(cell, "weekend");
- }
- cell.innerHTML = Calendar._SDN[(i + fdow) % 7];
- cell = cell.nextSibling;
- }
-};
-
-/** Internal function. Hides all combo boxes that might be displayed. */
-Calendar.prototype._hideCombos = function () {
- this.monthsCombo.style.display = "none";
- this.yearsCombo.style.display = "none";
-};
-
-/** Internal function. Starts dragging the element. */
-Calendar.prototype._dragStart = function (ev) {
- if (this.dragging) {
- return;
- }
- this.dragging = true;
- var posX;
- var posY;
- if (Calendar.is_ie) {
- posY = window.event.clientY + document.body.scrollTop;
- posX = window.event.clientX + document.body.scrollLeft;
- } else {
- posY = ev.clientY + window.scrollY;
- posX = ev.clientX + window.scrollX;
- }
- var st = this.element.style;
- this.xOffs = posX - parseInt(st.left);
- this.yOffs = posY - parseInt(st.top);
- with (Calendar) {
- addEvent(document, "mousemove", calDragIt);
- addEvent(document, "mouseup", calDragEnd);
- }
-};
-
-// BEGIN: DATE OBJECT PATCHES
-
-/** Adds the number of days array to the Date object. */
-Date._MD = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
-
-/** Constants used for time computations */
-Date.SECOND = 1000 /* milliseconds */;
-Date.MINUTE = 60 * Date.SECOND;
-Date.HOUR = 60 * Date.MINUTE;
-Date.DAY = 24 * Date.HOUR;
-Date.WEEK = 7 * Date.DAY;
-
-Date.parseDate = function(str, fmt) {
- var today = new Date();
- var y = 0;
- var m = -1;
- var d = 0;
- var a = str.split(/\W+/);
- var b = fmt.match(/%./g);
- var i = 0, j = 0;
- var hr = 0;
- var min = 0;
- for (i = 0; i < a.length; ++i) {
- if (!a[i])
- continue;
- switch (b[i]) {
- case "%d":
- case "%e":
- d = parseInt(a[i], 10);
- break;
-
- case "%m":
- m = parseInt(a[i], 10) - 1;
- break;
-
- case "%Y":
- case "%y":
- y = parseInt(a[i], 10);
- (y < 100) && (y += (y > 29) ? 1900 : 2000);
- break;
-
- case "%b":
- case "%B":
- for (j = 0; j < 12; ++j) {
- if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { m = j; break; }
- }
- break;
-
- case "%H":
- case "%I":
- case "%k":
- case "%l":
- hr = parseInt(a[i], 10);
- break;
-
- case "%P":
- case "%p":
- if (/pm/i.test(a[i]) && hr < 12)
- hr += 12;
- else if (/am/i.test(a[i]) && hr >= 12)
- hr -= 12;
- break;
-
- case "%M":
- min = parseInt(a[i], 10);
- break;
- }
- }
- if (isNaN(y)) y = today.getFullYear();
- if (isNaN(m)) m = today.getMonth();
- if (isNaN(d)) d = today.getDate();
- if (isNaN(hr)) hr = today.getHours();
- if (isNaN(min)) min = today.getMinutes();
- if (y != 0 && m != -1 && d != 0)
- return new Date(y, m, d, hr, min, 0);
- y = 0; m = -1; d = 0;
- for (i = 0; i < a.length; ++i) {
- if (a[i].search(/[a-zA-Z]+/) != -1) {
- var t = -1;
- for (j = 0; j < 12; ++j) {
- if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { t = j; break; }
- }
- if (t != -1) {
- if (m != -1) {
- d = m+1;
- }
- m = t;
- }
- } else if (parseInt(a[i], 10) <= 12 && m == -1) {
- m = a[i]-1;
- } else if (parseInt(a[i], 10) > 31 && y == 0) {
- y = parseInt(a[i], 10);
- (y < 100) && (y += (y > 29) ? 1900 : 2000);
- } else if (d == 0) {
- d = a[i];
- }
- }
- if (y == 0)
- y = today.getFullYear();
- if (m != -1 && d != 0)
- return new Date(y, m, d, hr, min, 0);
- return today;
-};
-
-/** Returns the number of days in the current month */
-Date.prototype.getMonthDays = function(month) {
- var year = this.getFullYear();
- if (typeof month == "undefined") {
- month = this.getMonth();
- }
- if (((0 == (year%4)) && ( (0 != (year%100)) || (0 == (year%400)))) && month == 1) {
- return 29;
- } else {
- return Date._MD[month];
- }
-};
-
-/** Returns the number of day in the year. */
-Date.prototype.getDayOfYear = function() {
- var now = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
- var then = new Date(this.getFullYear(), 0, 0, 0, 0, 0);
- var time = now - then;
- return Math.floor(time / Date.DAY);
-};
-
-/** Returns the number of the week in year, as defined in ISO 8601. */
-Date.prototype.getWeekNumber = function() {
- var d = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
- var DoW = d.getDay();
- d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu
- var ms = d.valueOf(); // GMT
- d.setMonth(0);
- d.setDate(4); // Thu in Week 1
- return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1;
-};
-
-/** Checks date and time equality */
-Date.prototype.equalsTo = function(date) {
- return ((this.getFullYear() == date.getFullYear()) &&
- (this.getMonth() == date.getMonth()) &&
- (this.getDate() == date.getDate()) &&
- (this.getHours() == date.getHours()) &&
- (this.getMinutes() == date.getMinutes()));
-};
-
-/** Set only the year, month, date parts (keep existing time) */
-Date.prototype.setDateOnly = function(date) {
- var tmp = new Date(date);
- this.setDate(1);
- this.setFullYear(tmp.getFullYear());
- this.setMonth(tmp.getMonth());
- this.setDate(tmp.getDate());
-};
-
-/** Prints the date in a string according to the given format. */
-Date.prototype.print = function (str) {
- var m = this.getMonth();
- var d = this.getDate();
- var y = this.getFullYear();
- var wn = this.getWeekNumber();
- var w = this.getDay();
- var s = {};
- var hr = this.getHours();
- var pm = (hr >= 12);
- var ir = (pm) ? (hr - 12) : hr;
- var dy = this.getDayOfYear();
- if (ir == 0)
- ir = 12;
- var min = this.getMinutes();
- var sec = this.getSeconds();
- s["%a"] = Calendar._SDN[w]; // abbreviated weekday name [FIXME: I18N]
- s["%A"] = Calendar._DN[w]; // full weekday name
- s["%b"] = Calendar._SMN[m]; // abbreviated month name [FIXME: I18N]
- s["%B"] = Calendar._MN[m]; // full month name
- // FIXME: %c : preferred date and time representation for the current locale
- s["%C"] = 1 + Math.floor(y / 100); // the century number
- s["%d"] = (d < 10) ? ("0" + d) : d; // the day of the month (range 01 to 31)
- s["%e"] = d; // the day of the month (range 1 to 31)
- // FIXME: %D : american date style: %m/%d/%y
- // FIXME: %E, %F, %G, %g, %h (man strftime)
- s["%H"] = (hr < 10) ? ("0" + hr) : hr; // hour, range 00 to 23 (24h format)
- s["%I"] = (ir < 10) ? ("0" + ir) : ir; // hour, range 01 to 12 (12h format)
- s["%j"] = (dy < 100) ? ((dy < 10) ? ("00" + dy) : ("0" + dy)) : dy; // day of the year (range 001 to 366)
- s["%k"] = hr; // hour, range 0 to 23 (24h format)
- s["%l"] = ir; // hour, range 1 to 12 (12h format)
- s["%m"] = (m < 9) ? ("0" + (1+m)) : (1+m); // month, range 01 to 12
- s["%M"] = (min < 10) ? ("0" + min) : min; // minute, range 00 to 59
- s["%n"] = "\n"; // a newline character
- s["%p"] = pm ? "PM" : "AM";
- s["%P"] = pm ? "pm" : "am";
- // FIXME: %r : the time in am/pm notation %I:%M:%S %p
- // FIXME: %R : the time in 24-hour notation %H:%M
- s["%s"] = Math.floor(this.getTime() / 1000);
- s["%S"] = (sec < 10) ? ("0" + sec) : sec; // seconds, range 00 to 59
- s["%t"] = "\t"; // a tab character
- // FIXME: %T : the time in 24-hour notation (%H:%M:%S)
- s["%U"] = s["%W"] = s["%V"] = (wn < 10) ? ("0" + wn) : wn;
- s["%u"] = w + 1; // the day of the week (range 1 to 7, 1 = MON)
- s["%w"] = w; // the day of the week (range 0 to 6, 0 = SUN)
- // FIXME: %x : preferred date representation for the current locale without the time
- // FIXME: %X : preferred time representation for the current locale without the date
- s["%y"] = ('' + y).substr(2, 2); // year without the century (range 00 to 99)
- s["%Y"] = y; // year with the century
- s["%%"] = "%"; // a literal '%' character
-
- var re = /%./g;
- if (!Calendar.is_ie5 && !Calendar.is_khtml)
- return str.replace(re, function (par) { return s[par] || par; });
-
- var a = str.match(re);
- for (var i = 0; i < a.length; i++) {
- var tmp = s[a[i]];
- if (tmp) {
- re = new RegExp(a[i], 'g');
- str = str.replace(re, tmp);
- }
- }
-
- return str;
-};
-
-Date.prototype.__msh_oldSetFullYear = Date.prototype.setFullYear;
-Date.prototype.setFullYear = function(y) {
- var d = new Date(this);
- d.__msh_oldSetFullYear(y);
- if (d.getMonth() != this.getMonth())
- this.setDate(28);
- this.__msh_oldSetFullYear(y);
-};
-
-// END: DATE OBJECT PATCHES
-
-
-// global object that remembers the calendar
-window._dynarch_popupCalendar = null;
diff --git a/larpe/tags/release-1.0/root/larpe/js/jscalendar/helpers.js b/larpe/tags/release-1.0/root/larpe/js/jscalendar/helpers.js
deleted file mode 100644
index bc94b02..0000000
--- a/larpe/tags/release-1.0/root/larpe/js/jscalendar/helpers.js
+++ /dev/null
@@ -1,118 +0,0 @@
-
-var oldLink = null;
-// code to change the active stylesheet
-function setActiveStyleSheet(link, title) {
- var i, a, main;
- for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
- if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
- a.disabled = true;
- if(a.getAttribute("title") == title) a.disabled = false;
- }
- }
- if (oldLink) oldLink.style.fontWeight = 'normal';
- oldLink = link;
- link.style.fontWeight = 'bold';
- return false;
-}
-
-// This function gets called when the end-user clicks on some date.
-function selected(cal, date) {
- cal.sel.value = date; // just update the date in the input field.
- if (cal.dateClicked && (cal.sel.id == "sel1" || cal.sel.id == "sel3"))
- // if we add this call we close the calendar on single-click.
- // just to exemplify both cases, we are using this only for the 1st
- // and the 3rd field, while 2nd and 4th will still require double-click.
- cal.callCloseHandler();
-}
-
-// And this gets called when the end-user clicks on the _selected_ date,
-// or clicks on the "Close" button. It just hides the calendar without
-// destroying it.
-function closeHandler(cal) {
- cal.hide(); // hide the calendar
-// cal.destroy();
- _dynarch_popupCalendar = null;
-}
-
-// This function shows the calendar under the element having the given id.
-// It takes care of catching "mousedown" signals on document and hiding the
-// calendar if the click was outside.
-function showCalendar(id, format, showsTime, showsOtherMonths) {
- var el = document.getElementById(id);
- if (_dynarch_popupCalendar != null) {
- // we already have some calendar created
- _dynarch_popupCalendar.hide(); // so we hide it first.
- } else {
- // first-time call, create the calendar.
- var cal = new Calendar(1, null, selected, closeHandler);
- // uncomment the following line to hide the week numbers
- // cal.weekNumbers = false;
- if (typeof showsTime == "string") {
- cal.showsTime = true;
- cal.time24 = (showsTime == "24");
- }
- if (showsOtherMonths) {
- cal.showsOtherMonths = true;
- }
- _dynarch_popupCalendar = cal; // remember it in the global var
- cal.setRange(1900, 2070); // min/max year allowed.
- cal.create();
- }
- _dynarch_popupCalendar.setDateFormat(format); // set the specified date format
- _dynarch_popupCalendar.parseDate(el.value); // try to parse the text in field
- _dynarch_popupCalendar.sel = el; // inform it what input field we use
-
- // the reference element that we pass to showAtElement is the button that
- // triggers the calendar. In this example we align the calendar bottom-right
- // to the button.
- _dynarch_popupCalendar.showAtElement(el.nextSibling, "Br"); // show the calendar
-
- return false;
-}
-
-var MINUTE = 60 * 1000;
-var HOUR = 60 * MINUTE;
-var DAY = 24 * HOUR;
-var WEEK = 7 * DAY;
-
-// If this handler returns true then the "date" given as
-// parameter will be disabled. In this example we enable
-// only days within a range of 10 days from the current
-// date.
-// You can use the functions date.getFullYear() -- returns the year
-// as 4 digit number, date.getMonth() -- returns the month as 0..11,
-// and date.getDate() -- returns the date of the month as 1..31, to
-// make heavy calculations here. However, beware that this function
-// should be very fast, as it is called for each day in a month when
-// the calendar is (re)constructed.
-function isDisabled(date) {
- var today = new Date();
- return (Math.abs(date.getTime() - today.getTime()) / DAY) > 10;
-}
-
-function flatSelected(cal, date) {
- var el = document.getElementById("preview");
- el.innerHTML = date;
-}
-
-function showFlatCalendar() {
- var parent = document.getElementById("display");
-
- // construct a calendar giving only the "selected" handler.
- var cal = new Calendar(0, null, flatSelected);
-
- // hide week numbers
- cal.weekNumbers = false;
-
- // We want some dates to be disabled; see function isDisabled above
- cal.setDisabledHandler(isDisabled);
- cal.setDateFormat("%A, %B %e");
-
- // this call must be the last as it might use data initialized above; if
- // we specify a parent, as opposite to the "showCalendar" function above,
- // then we create a flat calendar -- not popup. Hidden, though, but...
- cal.create(parent);
-
- // ... we can show it here.
- cal.show();
-}
diff --git a/larpe/tags/release-1.0/root/larpe/js/jscalendar/lang/calendar-en.js b/larpe/tags/release-1.0/root/larpe/js/jscalendar/lang/calendar-en.js
deleted file mode 100644
index 0dbde79..0000000
--- a/larpe/tags/release-1.0/root/larpe/js/jscalendar/lang/calendar-en.js
+++ /dev/null
@@ -1,127 +0,0 @@
-// ** I18N
-
-// Calendar EN language
-// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
-// Encoding: any
-// Distributed under the same terms as the calendar itself.
-
-// For translators: please use UTF-8 if possible. We strongly believe that
-// Unicode is the answer to a real internationalized world. Also please
-// include your contact information in the header, as can be seen above.
-
-// full day names
-Calendar._DN = new Array
-("Sunday",
- "Monday",
- "Tuesday",
- "Wednesday",
- "Thursday",
- "Friday",
- "Saturday",
- "Sunday");
-
-// Please note that the following array of short day names (and the same goes
-// for short month names, _SMN) isn't absolutely necessary. We give it here
-// for exemplification on how one can customize the short day names, but if
-// they are simply the first N letters of the full name you can simply say:
-//
-// Calendar._SDN_len = N; // short day name length
-// Calendar._SMN_len = N; // short month name length
-//
-// If N = 3 then this is not needed either since we assume a value of 3 if not
-// present, to be compatible with translation files that were written before
-// this feature.
-
-// short day names
-Calendar._SDN = new Array
-("Sun",
- "Mon",
- "Tue",
- "Wed",
- "Thu",
- "Fri",
- "Sat",
- "Sun");
-
-// First day of the week. "0" means display Sunday first, "1" means display
-// Monday first, etc.
-Calendar._FD = 0;
-
-// full month names
-Calendar._MN = new Array
-("January",
- "February",
- "March",
- "April",
- "May",
- "June",
- "July",
- "August",
- "September",
- "October",
- "November",
- "December");
-
-// short month names
-Calendar._SMN = new Array
-("Jan",
- "Feb",
- "Mar",
- "Apr",
- "May",
- "Jun",
- "Jul",
- "Aug",
- "Sep",
- "Oct",
- "Nov",
- "Dec");
-
-// tooltips
-Calendar._TT = {};
-Calendar._TT["INFO"] = "About the calendar";
-
-Calendar._TT["ABOUT"] =
-"DHTML Date/Time Selector\n" +
-"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
-"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
-"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
-"\n\n" +
-"Date selection:\n" +
-"- Use the \xab, \xbb buttons to select year\n" +
-"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" +
-"- Hold mouse button on any of the above buttons for faster selection.";
-Calendar._TT["ABOUT_TIME"] = "\n\n" +
-"Time selection:\n" +
-"- Click on any of the time parts to increase it\n" +
-"- or Shift-click to decrease it\n" +
-"- or click and drag for faster selection.";
-
-Calendar._TT["PREV_YEAR"] = "Prev. year (hold for menu)";
-Calendar._TT["PREV_MONTH"] = "Prev. month (hold for menu)";
-Calendar._TT["GO_TODAY"] = "Go Today";
-Calendar._TT["NEXT_MONTH"] = "Next month (hold for menu)";
-Calendar._TT["NEXT_YEAR"] = "Next year (hold for menu)";
-Calendar._TT["SEL_DATE"] = "Select date";
-Calendar._TT["DRAG_TO_MOVE"] = "Drag to move";
-Calendar._TT["PART_TODAY"] = " (today)";
-
-// the following is to inform that "%s" is to be the first day of week
-// %s will be replaced with the day name.
-Calendar._TT["DAY_FIRST"] = "Display %s first";
-
-// This may be locale-dependent. It specifies the week-end days, as an array
-// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
-// means Monday, etc.
-Calendar._TT["WEEKEND"] = "0,6";
-
-Calendar._TT["CLOSE"] = "Close";
-Calendar._TT["TODAY"] = "Today";
-Calendar._TT["TIME_PART"] = "(Shift-)Click or drag to change value";
-
-// date formats
-Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
-Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
-
-Calendar._TT["WK"] = "wk";
-Calendar._TT["TIME"] = "Time:";
diff --git a/larpe/tags/release-1.0/root/larpe/js/jscalendar/lang/calendar-fr.js b/larpe/tags/release-1.0/root/larpe/js/jscalendar/lang/calendar-fr.js
deleted file mode 100644
index 2a9e0b2..0000000
--- a/larpe/tags/release-1.0/root/larpe/js/jscalendar/lang/calendar-fr.js
+++ /dev/null
@@ -1,125 +0,0 @@
-// ** I18N
-
-// Calendar EN language
-// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
-// Encoding: any
-// Distributed under the same terms as the calendar itself.
-
-// For translators: please use UTF-8 if possible. We strongly believe that
-// Unicode is the answer to a real internationalized world. Also please
-// include your contact information in the header, as can be seen above.
-
-// Translator: David Duret, <pilgrim@mala-template.net> from previous french version
-
-// full day names
-Calendar._DN = new Array
-("Dimanche",
- "Lundi",
- "Mardi",
- "Mercredi",
- "Jeudi",
- "Vendredi",
- "Samedi",
- "Dimanche");
-
-// Please note that the following array of short day names (and the same goes
-// for short month names, _SMN) isn't absolutely necessary. We give it here
-// for exemplification on how one can customize the short day names, but if
-// they are simply the first N letters of the full name you can simply say:
-//
-// Calendar._SDN_len = N; // short day name length
-// Calendar._SMN_len = N; // short month name length
-//
-// If N = 3 then this is not needed either since we assume a value of 3 if not
-// present, to be compatible with translation files that were written before
-// this feature.
-
-// short day names
-Calendar._SDN = new Array
-("Dim",
- "Lun",
- "Mar",
- "Mar",
- "Jeu",
- "Ven",
- "Sam",
- "Dim");
-
-// full month names
-Calendar._MN = new Array
-("Janvier",
- "Fvrier",
- "Mars",
- "Avril",
- "Mai",
- "Juin",
- "Juillet",
- "Aot",
- "Septembre",
- "Octobre",
- "Novembre",
- "Dcembre");
-
-// short month names
-Calendar._SMN = new Array
-("Jan",
- "Fev",
- "Mar",
- "Avr",
- "Mai",
- "Juin",
- "Juil",
- "Aout",
- "Sep",
- "Oct",
- "Nov",
- "Dec");
-
-// tooltips
-Calendar._TT = {};
-Calendar._TT["INFO"] = "A propos du calendrier";
-
-Calendar._TT["ABOUT"] =
-"DHTML Date/Heure Selecteur\n" +
-"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
-"Pour la derniere version visitez : http://www.dynarch.com/projects/calendar/\n" +
-"Distribu par GNU LGPL. Voir http://gnu.org/licenses/lgpl.html pour les details." +
-"\n\n" +
-"Selection de la date :\n" +
-"- Utiliser les bouttons \xab, \xbb pour selectionner l\'annee\n" +
-"- Utiliser les bouttons " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " pour selectionner les mois\n" +
-"- Garder la souris sur n'importe quels boutons pour une selection plus rapide";
-Calendar._TT["ABOUT_TIME"] = "\n\n" +
-"Selection de l\'heure :\n" +
-"- Cliquer sur heures ou minutes pour incrementer\n" +
-"- ou Maj-clic pour decrementer\n" +
-"- ou clic et glisser-deplacer pour une selection plus rapide";
-
-Calendar._TT["PREV_YEAR"] = "Anne prc. (maintenir pour menu)";
-Calendar._TT["PREV_MONTH"] = "Mois prc. (maintenir pour menu)";
-Calendar._TT["GO_TODAY"] = "Atteindre la date du jour";
-Calendar._TT["NEXT_MONTH"] = "Mois suiv. (maintenir pour menu)";
-Calendar._TT["NEXT_YEAR"] = "Anne suiv. (maintenir pour menu)";
-Calendar._TT["SEL_DATE"] = "Slectionner une date";
-Calendar._TT["DRAG_TO_MOVE"] = "Dplacer";
-Calendar._TT["PART_TODAY"] = " (Aujourd'hui)";
-
-// the following is to inform that "%s" is to be the first day of week
-// %s will be replaced with the day name.
-Calendar._TT["DAY_FIRST"] = "Afficher %s en premier";
-
-// This may be locale-dependent. It specifies the week-end days, as an array
-// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
-// means Monday, etc.
-Calendar._TT["WEEKEND"] = "0,6";
-
-Calendar._TT["CLOSE"] = "Fermer";
-Calendar._TT["TODAY"] = "Aujourd'hui";
-Calendar._TT["TIME_PART"] = "(Maj-)Clic ou glisser pour modifier la valeur";
-
-// date formats
-Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y";
-Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
-
-Calendar._TT["WK"] = "Sem.";
-Calendar._TT["TIME"] = "Heure :";
diff --git a/larpe/tags/release-1.0/root/larpe/js/listing.js b/larpe/tags/release-1.0/root/larpe/js/listing.js
deleted file mode 100644
index d9f6d35..0000000
--- a/larpe/tags/release-1.0/root/larpe/js/listing.js
+++ /dev/null
@@ -1,41 +0,0 @@
-var xmlhttp=false;
-/*@cc_on @*/
-/*@if (@_jscript_version >= 5)
-// JScript gives us Conditional compilation, we can cope with old IE versions.
-// and security blocked creation of the objects.
- try {
- xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
- } catch (e) {
- try {
- xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
- } catch (E) { xmlhttp = false;
- }
- }
-@end @*/
-if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
- xmlhttp = new XMLHttpRequest();
-}
-
-function updateListing(e) {
- xmlhttp.open("POST", "ajax_listing", true);
- xmlhttp.onreadystatechange=function() {
- if (xmlhttp.readyState==4) {
- document.getElementById('listing').getElementsByTagName('TBODY')[0].innerHTML = xmlhttp.responseText;
- displayForm();
- }
- }
- elems = document.getElementById('listing').getElementsByTagName('SELECT');
- val = "";
- for ( i = 0; i < elems.length; i++ ) {
- elem = elems[i];
- val = val + elem.name + "|" + elem.value + "\n";
- }
- xmlhttp.send(val);
-}
-
-function displayForm() {
- document.getElementById('listing').getElementsByTagName('THEAD')[1].style.display = 'table-header-group';
-}
-
-displayForm();
-
diff --git a/larpe/tags/release-1.0/root/larpe/js/prototype.js b/larpe/tags/release-1.0/root/larpe/js/prototype.js
deleted file mode 100644
index 6967d37..0000000
--- a/larpe/tags/release-1.0/root/larpe/js/prototype.js
+++ /dev/null
@@ -1,1041 +0,0 @@
-/* Prototype JavaScript framework, version 1.4.0_pre2
- * (c) 2005 Sam Stephenson <sam@conio.net>
- *
- * THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff
- * against the source tree, available from the Prototype darcs repository.
- *
- * Prototype is freely distributable under the terms of an MIT-style license.
- *
- * For details, see the Prototype web site: http://prototype.conio.net/
- *
-/*--------------------------------------------------------------------------*/
-
-var Prototype = {
- Version: '1.4.0_pre2',
- emptyFunction: function() {}
-}
-
-var Class = {
- create: function() {
- return function() {
- this.initialize.apply(this, arguments);
- }
- }
-}
-
-var Abstract = new Object();
-
-Object.extend = function(destination, source) {
- for (property in source) {
- destination[property] = source[property];
- }
- return destination;
-}
-
-/*
-Object.prototype.extend = function(object) {
- return Object.extend.apply(this, [this, object]);
-}
-*/
-
-Function.prototype.bind = function(object) {
- var __method = this;
- return function() {
- return __method.apply(object, arguments);
- }
-}
-
-Function.prototype.bindAsEventListener = function(object) {
- var __method = this;
- return function(event) {
- return __method.call(object, event || window.event);
- }
-}
-
-Number.prototype.toColorPart = function() {
- var digits = this.toString(16);
- if (this < 16) return '0' + digits;
- return digits;
-}
-
-var Try = {
- these: function() {
- var returnValue;
-
- for (var i = 0; i < arguments.length; i++) {
- var lambda = arguments[i];
- try {
- returnValue = lambda();
- break;
- } catch (e) {}
- }
-
- return returnValue;
- }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var PeriodicalExecuter = Class.create();
-PeriodicalExecuter.prototype = {
- initialize: function(callback, frequency) {
- this.callback = callback;
- this.frequency = frequency;
- this.currentlyExecuting = false;
-
- this.registerCallback();
- },
-
- registerCallback: function() {
- setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
- },
-
- onTimerEvent: function() {
- if (!this.currentlyExecuting) {
- try {
- this.currentlyExecuting = true;
- this.callback();
- } finally {
- this.currentlyExecuting = false;
- }
- }
- }
-}
-
-/*--------------------------------------------------------------------------*/
-
-function $() {
- var elements = new Array();
-
- for (var i = 0; i < arguments.length; i++) {
- var element = arguments[i];
- if (typeof element == 'string')
- element = document.getElementById(element);
-
- if (arguments.length == 1)
- return element;
-
- elements.push(element);
- }
-
- return elements;
-}
-
-if (!Array.prototype.push) {
- Array.prototype.push = function() {
- var startLength = this.length;
- for (var i = 0; i < arguments.length; i++)
- this[startLength + i] = arguments[i];
- return this.length;
- }
-}
-
-if (!Function.prototype.apply) {
- // Based on code from http://www.youngpup.net/
- Function.prototype.apply = function(object, parameters) {
- var parameterStrings = new Array();
- if (!object) object = window;
- if (!parameters) parameters = new Array();
-
- for (var i = 0; i < parameters.length; i++)
- parameterStrings[i] = 'parameters[' + i + ']';
-
- object.__apply__ = this;
- var result = eval('object.__apply__(' +
- parameterStrings.join(', ') + ')');
- object.__apply__ = null;
-
- return result;
- }
-}
-
-Object.extend(String.prototype, {
- stripTags: function() {
- return this.replace(/<\/?[^>]+>/gi, '');
- },
-
- escapeHTML: function() {
- var div = document.createElement('div');
- var text = document.createTextNode(this);
- div.appendChild(text);
- return div.innerHTML;
- },
-
- unescapeHTML: function() {
- var div = document.createElement('div');
- div.innerHTML = this.stripTags();
- return div.childNodes[0].nodeValue;
- }
-});
-
-var Ajax = {
- getTransport: function() {
- return Try.these(
- function() {return new ActiveXObject('Msxml2.XMLHTTP')},
- function() {return new ActiveXObject('Microsoft.XMLHTTP')},
- function() {return new XMLHttpRequest()}
- ) || false;
- }
-}
-
-Ajax.Base = function() {};
-Ajax.Base.prototype = {
- setOptions: function(options) {
- this.options = {
- method: 'post',
- asynchronous: true,
- parameters: ''
- }
- Object.extend(this.options, options || {});
- },
-
- responseIsSuccess: function() {
- return this.transport.status == undefined
- || this.transport.status == 0
- || (this.transport.status >= 200 && this.transport.status < 300);
- },
-
- responseIsFailure: function() {
- return !this.responseIsSuccess();
- }
-}
-
-Ajax.Request = Class.create();
-Ajax.Request.Events =
- ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
-
-Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
- initialize: function(url, options) {
- this.transport = Ajax.getTransport();
- this.setOptions(options);
- this.request(url);
- },
-
- request: function(url) {
- var parameters = this.options.parameters || '';
- if (parameters.length > 0) parameters += '&_=';
-
- try {
- if (this.options.method == 'get')
- url += '?' + parameters;
-
- this.transport.open(this.options.method, url,
- this.options.asynchronous);
-
- if (this.options.asynchronous) {
- this.transport.onreadystatechange = this.onStateChange.bind(this);
- setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);
- }
-
- this.setRequestHeaders();
-
- var body = this.options.postBody ? this.options.postBody : parameters;
- this.transport.send(this.options.method == 'post' ? body : null);
-
- } catch (e) {
- }
- },
-
- setRequestHeaders: function() {
- var requestHeaders =
- ['X-Requested-With', 'XMLHttpRequest',
- 'X-Prototype-Version', Prototype.Version];
-
- if (this.options.method == 'post') {
- requestHeaders.push('Content-type',
- 'application/x-www-form-urlencoded');
-
- /* Force "Connection: close" for Mozilla browsers to work around
- * a bug where XMLHttpReqeuest sends an incorrect Content-length
- * header. See Mozilla Bugzilla #246651.
- */
- if (this.transport.overrideMimeType)
- requestHeaders.push('Connection', 'close');
- }
-
- if (this.options.requestHeaders)
- requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);
-
- for (var i = 0; i < requestHeaders.length; i += 2)
- this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);
- },
-
- onStateChange: function() {
- var readyState = this.transport.readyState;
- if (readyState != 1)
- this.respondToReadyState(this.transport.readyState);
- },
-
- respondToReadyState: function(readyState) {
- var event = Ajax.Request.Events[readyState];
-
- if (event == 'Complete')
- (this.options['on' + this.transport.status]
- || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')]
- || Prototype.emptyFunction)(this.transport);
-
- (this.options['on' + event] || Prototype.emptyFunction)(this.transport);
-
- /* Avoid memory leak in MSIE: clean up the oncomplete event handler */
- if (event == 'Complete')
- this.transport.onreadystatechange = Prototype.emptyFunction;
- }
-});
-
-Ajax.Updater = Class.create();
-Ajax.Updater.ScriptFragment = '(?:<script.*?>)((\n|.)*?)(?:<\/script>)';
-
-Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
- initialize: function(container, url, options) {
- this.containers = {
- success: container.success ? $(container.success) : $(container),
- failure: container.failure ? $(container.failure) :
- (container.success ? null : $(container))
- }
-
- this.transport = Ajax.getTransport();
- this.setOptions(options);
-
- var onComplete = this.options.onComplete || Prototype.emptyFunction;
- this.options.onComplete = (function() {
- this.updateContent();
- onComplete(this.transport);
- }).bind(this);
-
- this.request(url);
- },
-
- updateContent: function() {
- var receiver = this.responseIsSuccess() ?
- this.containers.success : this.containers.failure;
-
- var match = new RegExp(Ajax.Updater.ScriptFragment, 'img');
- var response = this.transport.responseText.replace(match, '');
- var scripts = this.transport.responseText.match(match);
-
- if (receiver) {
- if (this.options.insertion) {
- new this.options.insertion(receiver, response);
- } else {
- receiver.innerHTML = response;
- }
- }
-
- if (this.responseIsSuccess()) {
- if (this.onComplete)
- setTimeout((function() {this.onComplete(
- this.transport)}).bind(this), 10);
- }
-
- if (this.options.evalScripts && scripts) {
- match = new RegExp(Ajax.Updater.ScriptFragment, 'im');
- setTimeout((function() {
- for (var i = 0; i < scripts.length; i++)
- eval(scripts[i].match(match)[1]);
- }).bind(this), 10);
- }
- }
-});
-
-Ajax.PeriodicalUpdater = Class.create();
-Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
- initialize: function(container, url, options) {
- this.setOptions(options);
- this.onComplete = this.options.onComplete;
-
- this.frequency = (this.options.frequency || 2);
- this.decay = 1;
-
- this.updater = {};
- this.container = container;
- this.url = url;
-
- this.start();
- },
-
- start: function() {
- this.options.onComplete = this.updateComplete.bind(this);
- this.onTimerEvent();
- },
-
- stop: function() {
- this.updater.onComplete = undefined;
- clearTimeout(this.timer);
- (this.onComplete || Ajax.emptyFunction).apply(this, arguments);
- },
-
- updateComplete: function(request) {
- if (this.options.decay) {
- this.decay = (request.responseText == this.lastText ?
- this.decay * this.options.decay : 1);
-
- this.lastText = request.responseText;
- }
- this.timer = setTimeout(this.onTimerEvent.bind(this),
- this.decay * this.frequency * 1000);
- },
-
- onTimerEvent: function() {
- this.updater = new Ajax.Updater(this.container, this.url, this.options);
- }
-});
-
-document.getElementsByClassName = function(className) {
- var children = document.getElementsByTagName('*') || document.all;
- var elements = new Array();
-
- for (var i = 0; i < children.length; i++) {
- var child = children[i];
- var classNames = child.className.split(' ');
- for (var j = 0; j < classNames.length; j++) {
- if (classNames[j] == className) {
- elements.push(child);
- break;
- }
- }
- }
-
- return elements;
-}
-
-/*--------------------------------------------------------------------------*/
-
-if (!window.Element) {
- var Element = new Object();
-}
-
-Object.extend(Element, {
- toggle: function() {
- for (var i = 0; i < arguments.length; i++) {
- var element = $(arguments[i]);
- element.style.display =
- (element.style.display == 'none' ? '' : 'none');
- }
- },
-
- hide: function() {
- for (var i = 0; i < arguments.length; i++) {
- var element = $(arguments[i]);
- element.style.display = 'none';
- }
- },
-
- show: function() {
- for (var i = 0; i < arguments.length; i++) {
- var element = $(arguments[i]);
- element.style.display = '';
- }
- },
-
- remove: function(element) {
- element = $(element);
- element.parentNode.removeChild(element);
- },
-
- getHeight: function(element) {
- element = $(element);
- return element.offsetHeight;
- },
-
- hasClassName: function(element, className) {
- element = $(element);
- if (!element)
- return;
- var a = element.className.split(' ');
- for (var i = 0; i < a.length; i++) {
- if (a[i] == className)
- return true;
- }
- return false;
- },
-
- addClassName: function(element, className) {
- element = $(element);
- Element.removeClassName(element, className);
- element.className += ' ' + className;
- },
-
- removeClassName: function(element, className) {
- element = $(element);
- if (!element)
- return;
- var newClassName = '';
- var a = element.className.split(' ');
- for (var i = 0; i < a.length; i++) {
- if (a[i] != className) {
- if (i > 0)
- newClassName += ' ';
- newClassName += a[i];
- }
- }
- element.className = newClassName;
- },
-
- // removes whitespace-only text node children
- cleanWhitespace: function(element) {
- var element = $(element);
- for (var i = 0; i < element.childNodes.length; i++) {
- var node = element.childNodes[i];
- if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
- Element.remove(node);
- }
- }
-});
-
-var Toggle = new Object();
-Toggle.display = Element.toggle;
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.Insertion = function(adjacency) {
- this.adjacency = adjacency;
-}
-
-Abstract.Insertion.prototype = {
- initialize: function(element, content) {
- this.element = $(element);
- this.content = content;
-
- if (this.adjacency && this.element.insertAdjacentHTML) {
- this.element.insertAdjacentHTML(this.adjacency, this.content);
- } else {
- this.range = this.element.ownerDocument.createRange();
- if (this.initializeRange) this.initializeRange();
- this.fragment = this.range.createContextualFragment(this.content);
- this.insertContent();
- }
- }
-}
-
-var Insertion = new Object();
-
-Insertion.Before = Class.create();
-Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
- initializeRange: function() {
- this.range.setStartBefore(this.element);
- },
-
- insertContent: function() {
- this.element.parentNode.insertBefore(this.fragment, this.element);
- }
-});
-
-Insertion.Top = Class.create();
-Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
- initializeRange: function() {
- this.range.selectNodeContents(this.element);
- this.range.collapse(true);
- },
-
- insertContent: function() {
- this.element.insertBefore(this.fragment, this.element.firstChild);
- }
-});
-
-Insertion.Bottom = Class.create();
-Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
- initializeRange: function() {
- this.range.selectNodeContents(this.element);
- this.range.collapse(this.element);
- },
-
- insertContent: function() {
- this.element.appendChild(this.fragment);
- }
-});
-
-Insertion.After = Class.create();
-Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
- initializeRange: function() {
- this.range.setStartAfter(this.element);
- },
-
- insertContent: function() {
- this.element.parentNode.insertBefore(this.fragment,
- this.element.nextSibling);
- }
-});
-
-var Field = {
- clear: function() {
- for (var i = 0; i < arguments.length; i++)
- $(arguments[i]).value = '';
- },
-
- focus: function(element) {
- $(element).focus();
- },
-
- present: function() {
- for (var i = 0; i < arguments.length; i++)
- if ($(arguments[i]).value == '') return false;
- return true;
- },
-
- select: function(element) {
- $(element).select();
- },
-
- activate: function(element) {
- $(element).focus();
- $(element).select();
- }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var Form = {
- serialize: function(form) {
- var elements = Form.getElements($(form));
- var queryComponents = new Array();
-
- for (var i = 0; i < elements.length; i++) {
- var queryComponent = Form.Element.serialize(elements[i]);
- if (queryComponent)
- queryComponents.push(queryComponent);
- }
-
- return queryComponents.join('&');
- },
-
- getElements: function(form) {
- var form = $(form);
- var elements = new Array();
-
- for (tagName in Form.Element.Serializers) {
- var tagElements = form.getElementsByTagName(tagName);
- for (var j = 0; j < tagElements.length; j++)
- elements.push(tagElements[j]);
- }
- return elements;
- },
-
- getInputs: function(form, typeName, name) {
- var form = $(form);
- var inputs = form.getElementsByTagName('input');
-
- if (!typeName && !name)
- return inputs;
-
- var matchingInputs = new Array();
- for (var i = 0; i < inputs.length; i++) {
- var input = inputs[i];
- if ((typeName && input.type != typeName) ||
- (name && input.name != name))
- continue;
- matchingInputs.push(input);
- }
-
- return matchingInputs;
- },
-
- disable: function(form) {
- var elements = Form.getElements(form);
- for (var i = 0; i < elements.length; i++) {
- var element = elements[i];
- element.blur();
- element.disabled = 'true';
- }
- },
-
- enable: function(form) {
- var elements = Form.getElements(form);
- for (var i = 0; i < elements.length; i++) {
- var element = elements[i];
- element.disabled = '';
- }
- },
-
- focusFirstElement: function(form) {
- var form = $(form);
- var elements = Form.getElements(form);
- for (var i = 0; i < elements.length; i++) {
- var element = elements[i];
- if (element.type != 'hidden' && !element.disabled) {
- Field.activate(element);
- break;
- }
- }
- },
-
- reset: function(form) {
- $(form).reset();
- }
-}
-
-Form.Element = {
- serialize: function(element) {
- var element = $(element);
- var method = element.tagName.toLowerCase();
- var parameter = Form.Element.Serializers[method](element);
-
- if (parameter)
- return encodeURIComponent(parameter[0]) + '=' +
- encodeURIComponent(parameter[1]);
- },
-
- getValue: function(element) {
- var element = $(element);
- var method = element.tagName.toLowerCase();
- var parameter = Form.Element.Serializers[method](element);
-
- if (parameter)
- return parameter[1];
- }
-}
-
-Form.Element.Serializers = {
- input: function(element) {
- switch (element.type.toLowerCase()) {
- case 'submit':
- case 'hidden':
- case 'password':
- case 'text':
- return Form.Element.Serializers.textarea(element);
- case 'checkbox':
- case 'radio':
- return Form.Element.Serializers.inputSelector(element);
- }
- return false;
- },
-
- inputSelector: function(element) {
- if (element.checked)
- return [element.name, element.value];
- },
-
- textarea: function(element) {
- return [element.name, element.value];
- },
-
- select: function(element) {
- var value = '';
- if (element.type == 'select-one') {
- var index = element.selectedIndex;
- if (index >= 0)
- value = element.options[index].value || element.options[index].text;
- } else {
- value = new Array();
- for (var i = 0; i < element.length; i++) {
- var opt = element.options[i];
- if (opt.selected)
- value.push(opt.value || opt.text);
- }
- }
- return [element.name, value];
- }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var $F = Form.Element.getValue;
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.TimedObserver = function() {}
-Abstract.TimedObserver.prototype = {
- initialize: function(element, frequency, callback) {
- this.frequency = frequency;
- this.element = $(element);
- this.callback = callback;
-
- this.lastValue = this.getValue();
- this.registerCallback();
- },
-
- registerCallback: function() {
- setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
- },
-
- onTimerEvent: function() {
- var value = this.getValue();
- if (this.lastValue != value) {
- this.callback(this.element, value);
- this.lastValue = value;
- }
- }
-}
-
-Form.Element.Observer = Class.create();
-Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
- getValue: function() {
- return Form.Element.getValue(this.element);
- }
-});
-
-Form.Observer = Class.create();
-Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
- getValue: function() {
- return Form.serialize(this.element);
- }
-});
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.EventObserver = function() {}
-Abstract.EventObserver.prototype = {
- initialize: function(element, callback) {
- this.element = $(element);
- this.callback = callback;
-
- this.lastValue = this.getValue();
- if (this.element.tagName.toLowerCase() == 'form')
- this.registerFormCallbacks();
- else
- this.registerCallback(this.element);
- },
-
- onElementEvent: function() {
- var value = this.getValue();
- if (this.lastValue != value) {
- this.callback(this.element, value);
- this.lastValue = value;
- }
- },
-
- registerFormCallbacks: function() {
- var elements = Form.getElements(this.element);
- for (var i = 0; i < elements.length; i++)
- this.registerCallback(elements[i]);
- },
-
- registerCallback: function(element) {
- if (element.type) {
- switch (element.type.toLowerCase()) {
- case 'checkbox':
- case 'radio':
- element.target = this;
- element.prev_onclick = element.onclick || Prototype.emptyFunction;
- element.onclick = function() {
- this.prev_onclick();
- this.target.onElementEvent();
- }
- break;
- case 'password':
- case 'text':
- case 'textarea':
- case 'select-one':
- case 'select-multiple':
- element.target = this;
- element.prev_onchange = element.onchange || Prototype.emptyFunction;
- element.onchange = function() {
- this.prev_onchange();
- this.target.onElementEvent();
- }
- break;
- }
- }
- }
-}
-
-Form.Element.EventObserver = Class.create();
-Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
- getValue: function() {
- return Form.Element.getValue(this.element);
- }
-});
-
-Form.EventObserver = Class.create();
-Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
- getValue: function() {
- return Form.serialize(this.element);
- }
-});
-
-
-if (!window.Event) {
- var Event = new Object();
-}
-
-Object.extend(Event, {
- KEY_BACKSPACE: 8,
- KEY_TAB: 9,
- KEY_RETURN: 13,
- KEY_ESC: 27,
- KEY_LEFT: 37,
- KEY_UP: 38,
- KEY_RIGHT: 39,
- KEY_DOWN: 40,
- KEY_DELETE: 46,
-
- element: function(event) {
- return event.target || event.srcElement;
- },
-
- isLeftClick: function(event) {
- return (((event.which) && (event.which == 1)) ||
- ((event.button) && (event.button == 1)));
- },
-
- pointerX: function(event) {
- return event.pageX || (event.clientX +
- (document.documentElement.scrollLeft || document.body.scrollLeft));
- },
-
- pointerY: function(event) {
- return event.pageY || (event.clientY +
- (document.documentElement.scrollTop || document.body.scrollTop));
- },
-
- stop: function(event) {
- if (event.preventDefault) {
- event.preventDefault();
- event.stopPropagation();
- } else {
- event.returnValue = false;
- }
- },
-
- // find the first node with the given tagName, starting from the
- // node the event was triggered on; traverses the DOM upwards
- findElement: function(event, tagName) {
- var element = Event.element(event);
- while (element.parentNode && (!element.tagName ||
- (element.tagName.toUpperCase() != tagName.toUpperCase())))
- element = element.parentNode;
- return element;
- },
-
- observers: false,
-
- _observeAndCache: function(element, name, observer, useCapture) {
- if (!this.observers) this.observers = [];
- if (element.addEventListener) {
- this.observers.push([element, name, observer, useCapture]);
- element.addEventListener(name, observer, useCapture);
- } else if (element.attachEvent) {
- this.observers.push([element, name, observer, useCapture]);
- element.attachEvent('on' + name, observer);
- }
- },
-
- unloadCache: function() {
- if (!Event.observers) return;
- for (var i = 0; i < Event.observers.length; i++) {
- Event.stopObserving.apply(this, Event.observers[i]);
- Event.observers[i][0] = null;
- }
- Event.observers = false;
- },
-
- observe: function(element, name, observer, useCapture) {
- var element = $(element);
- useCapture = useCapture || false;
-
- if (name == 'keypress' &&
- ((/Konqueror|Safari|KHTML/.test(navigator.userAgent))
- || element.attachEvent))
- name = 'keydown';
-
- this._observeAndCache(element, name, observer, useCapture);
- },
-
- stopObserving: function(element, name, observer, useCapture) {
- var element = $(element);
- useCapture = useCapture || false;
-
- if (name == 'keypress' &&
- ((/Konqueror|Safari|KHTML/.test(navigator.userAgent))
- || element.detachEvent))
- name = 'keydown';
-
- if (element.removeEventListener) {
- element.removeEventListener(name, observer, useCapture);
- } else if (element.detachEvent) {
- element.detachEvent('on' + name, observer);
- }
- }
-});
-
-/* prevent memory leaks in IE */
-Event.observe(window, 'unload', Event.unloadCache, false);
-
-var Position = {
-
- // set to true if needed, warning: firefox performance problems
- // NOT neeeded for page scrolling, only if draggable contained in
- // scrollable elements
- includeScrollOffsets: false,
-
- // must be called before calling withinIncludingScrolloffset, every time the
- // page is scrolled
- prepare: function() {
- this.deltaX = window.pageXOffset
- || document.documentElement.scrollLeft
- || document.body.scrollLeft
- || 0;
- this.deltaY = window.pageYOffset
- || document.documentElement.scrollTop
- || document.body.scrollTop
- || 0;
- },
-
- realOffset: function(element) {
- var valueT = 0, valueL = 0;
- do {
- valueT += element.scrollTop || 0;
- valueL += element.scrollLeft || 0;
- element = element.parentNode;
- } while (element);
- return [valueL, valueT];
- },
-
- cumulativeOffset: function(element) {
- var valueT = 0, valueL = 0;
- do {
- valueT += element.offsetTop || 0;
- valueL += element.offsetLeft || 0;
- element = element.offsetParent;
- } while (element);
- return [valueL, valueT];
- },
-
- // caches x/y coordinate pair to use with overlap
- within: function(element, x, y) {
- if (this.includeScrollOffsets)
- return this.withinIncludingScrolloffsets(element, x, y);
- this.xcomp = x;
- this.ycomp = y;
- this.offset = this.cumulativeOffset(element);
-
- return (y >= this.offset[1] &&
- y < this.offset[1] + element.offsetHeight &&
- x >= this.offset[0] &&
- x < this.offset[0] + element.offsetWidth);
- },
-
- withinIncludingScrolloffsets: function(element, x, y) {
- var offsetcache = this.realOffset(element);
-
- this.xcomp = x + offsetcache[0] - this.deltaX;
- this.ycomp = y + offsetcache[1] - this.deltaY;
- this.offset = this.cumulativeOffset(element);
-
- return (this.ycomp >= this.offset[1] &&
- this.ycomp < this.offset[1] + element.offsetHeight &&
- this.xcomp >= this.offset[0] &&
- this.xcomp < this.offset[0] + element.offsetWidth);
- },
-
- // within must be called directly before
- overlap: function(mode, element) {
- if (!mode) return 0;
- if (mode == 'vertical')
- return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
- element.offsetHeight;
- if (mode == 'horizontal')
- return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
- element.offsetWidth;
- },
-
- clone: function(source, target) {
- source = $(source);
- target = $(target);
- target.style.position = 'absolute';
- var offsets = this.cumulativeOffset(source);
- target.style.top = offsets[1] + 'px';
- target.style.left = offsets[0] + 'px';
- target.style.width = source.offsetWidth + 'px';
- target.style.height = source.offsetHeight + 'px';
- }
-}
diff --git a/larpe/tags/release-1.0/root/larpe/js/scriptaculous/controls.js b/larpe/tags/release-1.0/root/larpe/js/scriptaculous/controls.js
deleted file mode 100644
index 43cdb3e..0000000
--- a/larpe/tags/release-1.0/root/larpe/js/scriptaculous/controls.js
+++ /dev/null
@@ -1,699 +0,0 @@
-// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// (c) 2005 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
-// (c) 2005 Jon Tirsen (http://www.tirsen.com)
-// Contributors:
-// Richard Livsey
-// Rahul Bhargava
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-// Autocompleter.Base handles all the autocompletion functionality
-// that's independent of the data source for autocompletion. This
-// includes drawing the autocompletion menu, observing keyboard
-// and mouse events, and similar.
-//
-// Specific autocompleters need to provide, at the very least,
-// a getUpdatedChoices function that will be invoked every time
-// the text inside the monitored textbox changes. This method
-// should get the text for which to provide autocompletion by
-// invoking this.getToken(), NOT by directly accessing
-// this.element.value. This is to allow incremental tokenized
-// autocompletion. Specific auto-completion logic (AJAX, etc)
-// belongs in getUpdatedChoices.
-//
-// Tokenized incremental autocompletion is enabled automatically
-// when an autocompleter is instantiated with the 'tokens' option
-// in the options parameter, e.g.:
-// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
-// will incrementally autocomplete with a comma as the token.
-// Additionally, ',' in the above example can be replaced with
-// a token array, e.g. { tokens: [',', '\n'] } which
-// enables autocompletion on multiple tokens. This is most
-// useful when one of the tokens is \n (a newline), as it
-// allows smart autocompletion after linebreaks.
-
-var Autocompleter = {}
-Autocompleter.Base = function() {};
-Autocompleter.Base.prototype = {
- baseInitialize: function(element, update, options) {
- this.element = $(element);
- this.update = $(update);
- this.hasFocus = false;
- this.changed = false;
- this.active = false;
- this.index = 0;
- this.entryCount = 0;
-
- if (this.setOptions)
- this.setOptions(options);
- else
- this.options = options || {};
-
- this.options.paramName = this.options.paramName || this.element.name;
- this.options.tokens = this.options.tokens || [];
- this.options.frequency = this.options.frequency || 0.4;
- this.options.minChars = this.options.minChars || 1;
- this.options.onShow = this.options.onShow ||
- function(element, update){
- if(!update.style.position || update.style.position=='absolute') {
- update.style.position = 'absolute';
- Position.clone(element, update, {setHeight: false, offsetTop: element.offsetHeight});
- }
- new Effect.Appear(update,{duration:0.15});
- };
- this.options.onHide = this.options.onHide ||
- function(element, update){ new Effect.Fade(update,{duration:0.15}) };
-
- if (typeof(this.options.tokens) == 'string')
- this.options.tokens = new Array(this.options.tokens);
-
- this.observer = null;
-
- this.element.setAttribute('autocomplete','off');
-
- Element.hide(this.update);
-
- Event.observe(this.element, "blur", this.onBlur.bindAsEventListener(this));
- Event.observe(this.element, "keypress", this.onKeyPress.bindAsEventListener(this));
- },
-
- show: function() {
- if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
- if(!this.iefix && (navigator.appVersion.indexOf('MSIE')>0) && (Element.getStyle(this.update, 'position')=='absolute')) {
- new Insertion.After(this.update,
- '<iframe id="' + this.update.id + '_iefix" '+
- 'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
- 'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
- this.iefix = $(this.update.id+'_iefix');
- }
- if(this.iefix) {
- Position.clone(this.update, this.iefix);
- this.iefix.style.zIndex = 1;
- this.update.style.zIndex = 2;
- Element.show(this.iefix);
- }
- },
-
- hide: function() {
- if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
- if(this.iefix) Element.hide(this.iefix);
- },
-
- startIndicator: function() {
- if(this.options.indicator) Element.show(this.options.indicator);
- },
-
- stopIndicator: function() {
- if(this.options.indicator) Element.hide(this.options.indicator);
- },
-
- onKeyPress: function(event) {
- if(this.active)
- switch(event.keyCode) {
- case Event.KEY_TAB:
- case Event.KEY_RETURN:
- this.selectEntry();
- Event.stop(event);
- case Event.KEY_ESC:
- this.hide();
- this.active = false;
- Event.stop(event);
- return;
- case Event.KEY_LEFT:
- case Event.KEY_RIGHT:
- return;
- case Event.KEY_UP:
- this.markPrevious();
- this.render();
- if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event);
- return;
- case Event.KEY_DOWN:
- this.markNext();
- this.render();
- if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event);
- return;
- }
- else
- if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN)
- return;
-
- this.changed = true;
- this.hasFocus = true;
-
- if(this.observer) clearTimeout(this.observer);
- this.observer =
- setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
- },
-
- onHover: function(event) {
- var element = Event.findElement(event, 'LI');
- if(this.index != element.autocompleteIndex)
- {
- this.index = element.autocompleteIndex;
- this.render();
- }
- Event.stop(event);
- },
-
- onClick: function(event) {
- var element = Event.findElement(event, 'LI');
- this.index = element.autocompleteIndex;
- this.selectEntry();
- this.hide();
- },
-
- onBlur: function(event) {
- // needed to make click events working
- setTimeout(this.hide.bind(this), 250);
- this.hasFocus = false;
- this.active = false;
- },
-
- render: function() {
- if(this.entryCount > 0) {
- for (var i = 0; i < this.entryCount; i++)
- this.index==i ?
- Element.addClassName(this.getEntry(i),"selected") :
- Element.removeClassName(this.getEntry(i),"selected");
-
- if(this.hasFocus) {
- this.show();
- this.active = true;
- }
- } else this.hide();
- },
-
- markPrevious: function() {
- if(this.index > 0) this.index--
- else this.index = this.entryCcount-1;
- },
-
- markNext: function() {
- if(this.index < this.entryCount-1) this.index++
- else this.index = 0;
- },
-
- getEntry: function(index) {
- return this.update.firstChild.childNodes[index];
- },
-
- getCurrentEntry: function() {
- return this.getEntry(this.index);
- },
-
- selectEntry: function() {
- this.active = false;
- this.updateElement(this.getCurrentEntry());
- },
-
- updateElement: function(selectedElement) {
- if (this.options.updateElement) {
- this.options.updateElement(selectedElement);
- return;
- }
-
- var value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
- var lastTokenPos = this.findLastToken();
- if (lastTokenPos != -1) {
- var newValue = this.element.value.substr(0, lastTokenPos + 1);
- var whitespace = this.element.value.substr(lastTokenPos + 1).match(/^\s+/);
- if (whitespace)
- newValue += whitespace[0];
- this.element.value = newValue + value;
- } else {
- this.element.value = value;
- }
- this.element.focus();
- },
-
- updateChoices: function(choices) {
- if(!this.changed && this.hasFocus) {
- this.update.innerHTML = choices;
- Element.cleanWhitespace(this.update);
- Element.cleanWhitespace(this.update.firstChild);
-
- if(this.update.firstChild && this.update.firstChild.childNodes) {
- this.entryCount =
- this.update.firstChild.childNodes.length;
- for (var i = 0; i < this.entryCount; i++) {
- var entry = this.getEntry(i);
- entry.autocompleteIndex = i;
- this.addObservers(entry);
- }
- } else {
- this.entryCount = 0;
- }
-
- this.stopIndicator();
-
- this.index = 0;
- this.render();
- }
- },
-
- addObservers: function(element) {
- Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
- Event.observe(element, "click", this.onClick.bindAsEventListener(this));
- },
-
- onObserverEvent: function() {
- this.changed = false;
- if(this.getToken().length>=this.options.minChars) {
- this.startIndicator();
- this.getUpdatedChoices();
- } else {
- this.active = false;
- this.hide();
- }
- },
-
- getToken: function() {
- var tokenPos = this.findLastToken();
- if (tokenPos != -1)
- var ret = this.element.value.substr(tokenPos + 1).replace(/^\s+/,'').replace(/\s+$/,'');
- else
- var ret = this.element.value;
-
- return /\n/.test(ret) ? '' : ret;
- },
-
- findLastToken: function() {
- var lastTokenPos = -1;
-
- for (var i=0; i<this.options.tokens.length; i++) {
- var thisTokenPos = this.element.value.lastIndexOf(this.options.tokens[i]);
- if (thisTokenPos > lastTokenPos)
- lastTokenPos = thisTokenPos;
- }
- return lastTokenPos;
- }
-}
-
-Ajax.Autocompleter = Class.create();
-Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), {
- initialize: function(element, update, url, options) {
- this.baseInitialize(element, update, options);
- this.options.asynchronous = true;
- this.options.onComplete = this.onComplete.bind(this);
- this.options.defaultParams = this.options.parameters || null;
- this.url = url;
- },
-
- getUpdatedChoices: function() {
- entry = encodeURIComponent(this.options.paramName) + '=' +
- encodeURIComponent(this.getToken());
-
- this.options.parameters = this.options.callback ?
- this.options.callback(this.element, entry) : entry;
-
- if(this.options.defaultParams)
- this.options.parameters += '&' + this.options.defaultParams;
-
- new Ajax.Request(this.url, this.options);
- },
-
- onComplete: function(request) {
- this.updateChoices(request.responseText);
- }
-
-});
-
-// The local array autocompleter. Used when you'd prefer to
-// inject an array of autocompletion options into the page, rather
-// than sending out Ajax queries, which can be quite slow sometimes.
-//
-// The constructor takes four parameters. The first two are, as usual,
-// the id of the monitored textbox, and id of the autocompletion menu.
-// The third is the array you want to autocomplete from, and the fourth
-// is the options block.
-//
-// Extra local autocompletion options:
-// - choices - How many autocompletion choices to offer
-//
-// - partialSearch - If false, the autocompleter will match entered
-// text only at the beginning of strings in the
-// autocomplete array. Defaults to true, which will
-// match text at the beginning of any *word* in the
-// strings in the autocomplete array. If you want to
-// search anywhere in the string, additionally set
-// the option fullSearch to true (default: off).
-//
-// - fullSsearch - Search anywhere in autocomplete array strings.
-//
-// - partialChars - How many characters to enter before triggering
-// a partial match (unlike minChars, which defines
-// how many characters are required to do any match
-// at all). Defaults to 2.
-//
-// - ignoreCase - Whether to ignore case when autocompleting.
-// Defaults to true.
-//
-// It's possible to pass in a custom function as the 'selector'
-// option, if you prefer to write your own autocompletion logic.
-// In that case, the other options above will not apply unless
-// you support them.
-
-Autocompleter.Local = Class.create();
-Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), {
- initialize: function(element, update, array, options) {
- this.baseInitialize(element, update, options);
- this.options.array = array;
- },
-
- getUpdatedChoices: function() {
- this.updateChoices(this.options.selector(this));
- },
-
- setOptions: function(options) {
- this.options = Object.extend({
- choices: 10,
- partialSearch: true,
- partialChars: 2,
- ignoreCase: true,
- fullSearch: false,
- selector: function(instance) {
- var ret = []; // Beginning matches
- var partial = []; // Inside matches
- var entry = instance.getToken();
- var count = 0;
-
- for (var i = 0; i < instance.options.array.length &&
- ret.length < instance.options.choices ; i++) {
-
- var elem = instance.options.array[i];
- var foundPos = instance.options.ignoreCase ?
- elem.toLowerCase().indexOf(entry.toLowerCase()) :
- elem.indexOf(entry);
-
- while (foundPos != -1) {
- if (foundPos == 0 && elem.length != entry.length) {
- ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" +
- elem.substr(entry.length) + "</li>");
- break;
- } else if (entry.length >= instance.options.partialChars &&
- instance.options.partialSearch && foundPos != -1) {
- if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
- partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
- elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
- foundPos + entry.length) + "</li>");
- break;
- }
- }
-
- foundPos = instance.options.ignoreCase ?
- elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
- elem.indexOf(entry, foundPos + 1);
-
- }
- }
- if (partial.length)
- ret = ret.concat(partial.slice(0, instance.options.choices - ret.length))
- return "<ul>" + ret.join('') + "</ul>";
- }
- }, options || {});
- }
-});
-
-// AJAX in-place editor
-//
-// The constructor takes three parameters. The first is the element
-// that should support in-place editing. The second is the url to submit
-// the changed value to. The server should respond with the updated
-// value (the server might have post-processed it or validation might
-// have prevented it from changing). The third is a hash of options.
-//
-// Supported options are (all are optional and have sensible defaults):
-// - okText - The text of the submit button that submits the changed value
-// to the server (default: "ok")
-// - cancelText - The text of the link that cancels editing (default: "cancel")
-// - savingText - The text being displayed as the AJAX engine communicates
-// with the server (default: "Saving...")
-// - formId - The id given to the <form> element
-// (default: the id of the element to edit plus '-inplaceeditor')
-
-Ajax.InPlaceEditor = Class.create();
-Ajax.InPlaceEditor.defaultHighlightColor = "#FFFF99";
-Ajax.InPlaceEditor.prototype = {
- initialize: function(element, url, options) {
- this.url = url;
- this.element = $(element);
-
- this.options = Object.extend({
- okText: "ok",
- cancelText: "cancel",
- savingText: "Saving...",
- clickToEditText: "Click to edit",
- okText: "ok",
- rows: 1,
- onComplete: function(transport, element) {
- new Effect.Highlight(element, {startcolor: this.options.highlightcolor});
- },
- onFailure: function(transport) {
- alert("Error communicating with the server: " + transport.responseText.stripTags());
- },
- callback: function(form) {
- return Form.serialize(form);
- },
- loadingText: 'Loading...',
- savingClassName: 'inplaceeditor-saving',
- formClassName: 'inplaceeditor-form',
- highlightcolor: Ajax.InPlaceEditor.defaultHighlightColor,
- highlightendcolor: "#FFFFFF",
- externalControl: null,
- ajaxOptions: {}
- }, options || {});
-
- if(!this.options.formId && this.element.id) {
- this.options.formId = this.element.id + "-inplaceeditor";
- if ($(this.options.formId)) {
- // there's already a form with that name, don't specify an id
- this.options.formId = null;
- }
- }
-
- if (this.options.externalControl) {
- this.options.externalControl = $(this.options.externalControl);
- }
-
- this.originalBackground = Element.getStyle(this.element, 'background-color');
- if (!this.originalBackground) {
- this.originalBackground = "transparent";
- }
-
- this.element.title = this.options.clickToEditText;
-
- this.onclickListener = this.enterEditMode.bindAsEventListener(this);
- this.mouseoverListener = this.enterHover.bindAsEventListener(this);
- this.mouseoutListener = this.leaveHover.bindAsEventListener(this);
- Event.observe(this.element, 'click', this.onclickListener);
- Event.observe(this.element, 'mouseover', this.mouseoverListener);
- Event.observe(this.element, 'mouseout', this.mouseoutListener);
- if (this.options.externalControl) {
- Event.observe(this.options.externalControl, 'click', this.onclickListener);
- Event.observe(this.options.externalControl, 'mouseover', this.mouseoverListener);
- Event.observe(this.options.externalControl, 'mouseout', this.mouseoutListener);
- }
- },
- enterEditMode: function() {
- if (this.saving) return;
- if (this.editing) return;
- this.editing = true;
- this.onEnterEditMode();
- if (this.options.externalControl) {
- Element.hide(this.options.externalControl);
- }
- Element.hide(this.element);
- this.form = this.getForm();
- this.element.parentNode.insertBefore(this.form, this.element);
- },
- getForm: function() {
- form = document.createElement("form");
- form.id = this.options.formId;
- Element.addClassName(form, this.options.formClassName)
- form.onsubmit = this.onSubmit.bind(this);
-
- this.createEditField(form);
-
- if (this.options.textarea) {
- var br = document.createElement("br");
- form.appendChild(br);
- }
-
- okButton = document.createElement("input");
- okButton.type = "submit";
- okButton.value = this.options.okText;
- form.appendChild(okButton);
-
- cancelLink = document.createElement("a");
- cancelLink.href = "#";
- cancelLink.appendChild(document.createTextNode(this.options.cancelText));
- cancelLink.onclick = this.onclickCancel.bind(this);
- form.appendChild(cancelLink);
- return form;
- },
- createEditField: function(form) {
- if (this.options.rows == 1) {
- this.options.textarea = false;
- var textField = document.createElement("input");
- textField.type = "text";
- textField.name = "value";
- textField.value = this.getText();
- textField.style.backgroundColor = this.options.highlightcolor;
- var size = this.options.size || this.options.cols || 0;
- if (size != 0)
- textField.size = size;
- form.appendChild(textField);
- this.editField = textField;
- } else {
- this.options.textarea = true;
- var textArea = document.createElement("textarea");
- textArea.name = "value";
- textArea.value = this.getText();
- textArea.rows = this.options.rows;
- textArea.cols = this.options.cols || 40;
- form.appendChild(textArea);
- this.editField = textArea;
- }
- },
- getText: function() {
- if (this.options.loadTextURL) {
- this.loadExternalText();
- return this.options.loadingText;
- } else {
- return this.element.innerHTML;
- }
- },
- loadExternalText: function() {
- new Ajax.Request(
- this.options.loadTextURL,
- {
- asynchronous: true,
- onComplete: this.onLoadedExternalText.bind(this)
- }
- );
- },
- onLoadedExternalText: function(transport) {
- this.form.value.value = transport.responseText.stripTags();
- },
- onclickCancel: function() {
- this.onComplete();
- this.leaveEditMode();
- return false;
- },
- onFailure: function(transport) {
- this.options.onFailure(transport);
- if (this.oldInnerHTML) {
- this.element.innerHTML = this.oldInnerHTML;
- this.oldInnerHTML = null;
- }
- return false;
- },
- onSubmit: function() {
- this.saving = true;
- new Ajax.Updater(
- {
- success: this.element,
- // don't update on failure (this could be an option)
- failure: null
- },
- this.url,
- Object.extend({
- parameters: this.options.callback(this.form, this.editField.value),
- onComplete: this.onComplete.bind(this),
- onFailure: this.onFailure.bind(this)
- }, this.options.ajaxOptions)
- );
- this.onLoading();
- return false;
- },
- onLoading: function() {
- this.saving = true;
- this.removeForm();
- this.leaveHover();
- this.showSaving();
- },
- showSaving: function() {
- this.oldInnerHTML = this.element.innerHTML;
- this.element.innerHTML = this.options.savingText;
- Element.addClassName(this.element, this.options.savingClassName);
- this.element.style.backgroundColor = this.originalBackground;
- Element.show(this.element);
- },
- removeForm: function() {
- if(this.form) {
- Element.remove(this.form);
- this.form = null;
- }
- },
- enterHover: function() {
- if (this.saving) return;
- this.element.style.backgroundColor = this.options.highlightcolor;
- if (this.effect) {
- this.effect.cancel();
- }
- Element.addClassName(this.element, this.options.hoverClassName)
- },
- leaveHover: function() {
- if (this.options.backgroundColor) {
- this.element.style.backgroundColor = this.oldBackground;
- }
- Element.removeClassName(this.element, this.options.hoverClassName)
- if (this.saving) return;
- this.effect = new Effect.Highlight(this.element, {
- startcolor: this.options.highlightcolor,
- endcolor: this.options.highlightendcolor,
- restorecolor: this.originalBackground
- });
- },
- leaveEditMode: function() {
- Element.removeClassName(this.element, this.options.savingClassName);
- this.removeForm();
- this.leaveHover();
- this.element.style.backgroundColor = this.originalBackground;
- Element.show(this.element);
- if (this.options.externalControl) {
- Element.show(this.options.externalControl);
- }
- this.editing = false;
- this.saving = false;
- this.oldInnerHTML = null;
- this.onLeaveEditMode();
- },
- onComplete: function(transport) {
- this.leaveEditMode();
- this.options.onComplete.bind(this)(transport, this.element);
- },
- onEnterEditMode: function() {},
- onLeaveEditMode: function() {},
- dispose: function() {
- if (this.oldInnerHTML) {
- this.element.innerHTML = this.oldInnerHTML;
- }
- this.leaveEditMode();
- Event.stopObserving(this.element, 'click', this.onclickListener);
- Event.stopObserving(this.element, 'mouseover', this.mouseoverListener);
- Event.stopObserving(this.element, 'mouseout', this.mouseoutListener);
- if (this.options.externalControl) {
- Event.stopObserving(this.options.externalControl, 'click', this.onclickListener);
- Event.stopObserving(this.options.externalControl, 'mouseover', this.mouseoverListener);
- Event.stopObserving(this.options.externalControl, 'mouseout', this.mouseoutListener);
- }
- }
-}; \ No newline at end of file
diff --git a/larpe/tags/release-1.0/root/larpe/js/scriptaculous/dragdrop.js b/larpe/tags/release-1.0/root/larpe/js/scriptaculous/dragdrop.js
deleted file mode 100644
index 8ce29d5..0000000
--- a/larpe/tags/release-1.0/root/larpe/js/scriptaculous/dragdrop.js
+++ /dev/null
@@ -1,545 +0,0 @@
-// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//
-// Element.Class part Copyright (c) 2005 by Rick Olson
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
-/*--------------------------------------------------------------------------*/
-
-var Droppables = {
- drops: false,
-
- remove: function(element) {
- for(var i = 0; i < this.drops.length; i++)
- if(this.drops[i].element == element)
- this.drops.splice(i,1);
- },
-
- add: function(element) {
- element = $(element);
- var options = Object.extend({
- greedy: true,
- hoverclass: null
- }, arguments[1] || {});
-
- // cache containers
- if(options.containment) {
- options._containers = new Array();
- var containment = options.containment;
- if((typeof containment == 'object') &&
- (containment.constructor == Array)) {
- for(var i=0; i<containment.length; i++)
- options._containers.push($(containment[i]));
- } else {
- options._containers.push($(containment));
- }
- options._containers_length =
- options._containers.length-1;
- }
-
- Element.makePositioned(element); // fix IE
-
- options.element = element;
-
- // activate the droppable
- if(!this.drops) this.drops = [];
- this.drops.push(options);
- },
-
- isContained: function(element, drop) {
- var containers = drop._containers;
- var parentNode = element.parentNode;
- var i = drop._containers_length;
- do { if(parentNode==containers[i]) return true; } while (i--);
- return false;
- },
-
- isAffected: function(pX, pY, element, drop) {
- return (
- (drop.element!=element) &&
- ((!drop._containers) ||
- this.isContained(element, drop)) &&
- ((!drop.accept) ||
- (Element.Class.has_any(element, drop.accept))) &&
- Position.within(drop.element, pX, pY) );
- },
-
- deactivate: function(drop) {
- Element.Class.remove(drop.element, drop.hoverclass);
- this.last_active = null;
- },
-
- activate: function(drop) {
- if(this.last_active) this.deactivate(this.last_active);
- if(drop.hoverclass)
- Element.Class.add(drop.element, drop.hoverclass);
- this.last_active = drop;
- },
-
- show: function(event, element) {
- if(!this.drops) return;
- var pX = Event.pointerX(event);
- var pY = Event.pointerY(event);
- Position.prepare();
-
- var i = this.drops.length-1; do {
- var drop = this.drops[i];
- if(this.isAffected(pX, pY, element, drop)) {
- if(drop.onHover)
- drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
- if(drop.greedy) {
- this.activate(drop);
- return;
- }
- }
- } while (i--);
- },
-
- fire: function(event, element) {
- if(!this.last_active) return;
- Position.prepare();
-
- if (this.isAffected(Event.pointerX(event), Event.pointerY(event), element, this.last_active))
- if (this.last_active.onDrop)
- this.last_active.onDrop(element, this.last_active.element);
-
- },
-
- reset: function() {
- if(this.last_active)
- this.deactivate(this.last_active);
- }
-}
-
-var Draggables = {
- observers: new Array(),
- addObserver: function(observer) {
- this.observers.push(observer);
- },
- removeObserver: function(element) { // element instead of obsever fixes mem leaks
- for(var i = 0; i < this.observers.length; i++)
- if(this.observers[i].element && (this.observers[i].element == element))
- this.observers.splice(i,1);
- },
- notify: function(eventName, draggable) { // 'onStart', 'onEnd'
- for(var i = 0; i < this.observers.length; i++)
- this.observers[i][eventName](draggable);
- }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var Draggable = Class.create();
-Draggable.prototype = {
- initialize: function(element) {
- var options = Object.extend({
- handle: false,
- starteffect: function(element) {
- new Effect.Opacity(element, {duration:0.2, from:1.0, to:0.7});
- },
- reverteffect: function(element, top_offset, left_offset) {
- var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
- new Effect.MoveBy(element, -top_offset, -left_offset, {duration:dur});
- },
- endeffect: function(element) {
- new Effect.Opacity(element, {duration:0.2, from:0.7, to:1.0});
- },
- zindex: 1000,
- revert: false
- }, arguments[1] || {});
-
- this.element = $(element);
- this.handle = options.handle ? $(options.handle) : this.element;
-
- Element.makePositioned(this.element); // fix IE
-
- this.offsetX = 0;
- this.offsetY = 0;
- this.originalLeft = this.currentLeft();
- this.originalTop = this.currentTop();
- this.originalX = this.element.offsetLeft;
- this.originalY = this.element.offsetTop;
- this.originalZ = parseInt(this.element.style.zIndex || "0");
-
- this.options = options;
-
- this.active = false;
- this.dragging = false;
-
- this.eventMouseDown = this.startDrag.bindAsEventListener(this);
- this.eventMouseUp = this.endDrag.bindAsEventListener(this);
- this.eventMouseMove = this.update.bindAsEventListener(this);
- this.eventKeypress = this.keyPress.bindAsEventListener(this);
-
- Event.observe(this.handle, "mousedown", this.eventMouseDown);
- },
- destroy: function() {
- Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
- this.unregisterEvents();
- },
- registerEvents: function() {
- if(this.active) return;
- Event.observe(document, "mouseup", this.eventMouseUp);
- Event.observe(document, "mousemove", this.eventMouseMove);
- Event.observe(document, "keypress", this.eventKeypress);
- },
- unregisterEvents: function() {
- if(!this.active) return;
- Event.stopObserving(document, "mouseup", this.eventMouseUp);
- Event.stopObserving(document, "mousemove", this.eventMouseMove);
- Event.stopObserving(document, "keypress", this.eventKeypress);
- },
- currentLeft: function() {
- return parseInt(this.element.style.left || '0');
- },
- currentTop: function() {
- return parseInt(this.element.style.top || '0')
- },
- startDrag: function(event) {
- if(Event.isLeftClick(event)) {
- this.registerEvents();
- this.active = true;
- var pointer = [Event.pointerX(event), Event.pointerY(event)];
- var offsets = Position.cumulativeOffset(this.element);
- this.offsetX = (pointer[0] - offsets[0]);
- this.offsetY = (pointer[1] - offsets[1]);
- Event.stop(event);
- }
- },
- finishDrag: function(event, success) {
- this.unregisterEvents();
-
- this.active = false;
- this.dragging = false;
-
- if(this.options.ghosting) {
- Position.relativize(this.element);
- Element.remove(this._clone);
- this._clone = null;
- }
-
- if(success) Droppables.fire(event, this.element);
- Draggables.notify('onEnd', this);
-
- var revert = this.options.revert;
- if(revert && typeof revert == 'function') revert = revert(this.element);
-
- if(revert && this.options.reverteffect) {
- this.options.reverteffect(this.element,
- this.currentTop()-this.originalTop,
- this.currentLeft()-this.originalLeft);
- } else {
- this.originalLeft = this.currentLeft();
- this.originalTop = this.currentTop();
- }
-
- this.element.style.zIndex = this.originalZ;
-
- if(this.options.endeffect)
- this.options.endeffect(this.element);
-
-
- Droppables.reset();
- },
- keyPress: function(event) {
- if(this.active) {
- if(event.keyCode==Event.KEY_ESC) {
- this.finishDrag(event, false);
- Event.stop(event);
- }
- }
- },
- endDrag: function(event) {
- if(this.active && this.dragging) {
- this.finishDrag(event, true);
- Event.stop(event);
- }
- this.active = false;
- this.dragging = false;
- },
- draw: function(event) {
- var pointer = [Event.pointerX(event), Event.pointerY(event)];
- var offsets = Position.cumulativeOffset(this.element);
- offsets[0] -= this.currentLeft();
- offsets[1] -= this.currentTop();
- var style = this.element.style;
- if((!this.options.constraint) || (this.options.constraint=='horizontal'))
- style.left = (pointer[0] - offsets[0] - this.offsetX) + "px";
- if((!this.options.constraint) || (this.options.constraint=='vertical'))
- style.top = (pointer[1] - offsets[1] - this.offsetY) + "px";
- if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
- },
- update: function(event) {
- if(this.active) {
- if(!this.dragging) {
- var style = this.element.style;
- this.dragging = true;
- if(style.position=="") style.position = "relative";
- style.zIndex = this.options.zindex;
-
- if(this.options.ghosting) {
- this._clone = this.element.cloneNode(true);
- Position.absolutize(this.element);
- this.element.parentNode.insertBefore(this._clone, this.element);
- }
-
- Draggables.notify('onStart', this);
- if(this.options.starteffect) this.options.starteffect(this.element);
- }
-
- Droppables.show(event, this.element);
- this.draw(event);
- if(this.options.change) this.options.change(this);
-
- // fix AppleWebKit rendering
- if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
-
- Event.stop(event);
- }
- }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var SortableObserver = Class.create();
-SortableObserver.prototype = {
- initialize: function(element, observer) {
- this.element = $(element);
- this.observer = observer;
- this.lastValue = Sortable.serialize(this.element);
- },
- onStart: function() {
- this.lastValue = Sortable.serialize(this.element);
- },
- onEnd: function() {
- Sortable.unmark();
- if(this.lastValue != Sortable.serialize(this.element))
- this.observer(this.element)
- }
-}
-
-var Sortable = {
- sortables: new Array(),
- options: function(element){
- element = $(element);
- for(var i=0;i<this.sortables.length;i++)
- if(this.sortables[i].element == element)
- return this.sortables[i];
- return null;
- },
- destroy: function(element){
- element = $(element);
- for(var i=0;i<this.sortables.length;i++) {
- if(this.sortables[i].element == element) {
- var s = this.sortables[i];
- Draggables.removeObserver(s.element);
- for(var j=0;j<s.droppables.length;j++)
- Droppables.remove(s.droppables[j]);
- for(j=0;j<s.draggables.length;j++)
- s.draggables[j].destroy();
- this.sortables.splice(i,1);
- }
- }
- },
- create: function(element) {
- element = $(element);
- var options = Object.extend({
- element: element,
- tag: 'li', // assumes li children, override with tag: 'tagname'
- dropOnEmpty: false,
- tree: false, // fixme: unimplemented
- overlap: 'vertical', // one of 'vertical', 'horizontal'
- constraint: 'vertical', // one of 'vertical', 'horizontal', false
- containment: element, // also takes array of elements (or id's); or false
- handle: false, // or a CSS class
- only: false,
- hoverclass: null,
- ghosting: false,
- onChange: function() {},
- onUpdate: function() {}
- }, arguments[1] || {});
-
- // clear any old sortable with same element
- this.destroy(element);
-
- // build options for the draggables
- var options_for_draggable = {
- revert: true,
- ghosting: options.ghosting,
- constraint: options.constraint,
- handle: handle };
-
- if(options.starteffect)
- options_for_draggable.starteffect = options.starteffect;
-
- if(options.reverteffect)
- options_for_draggable.reverteffect = options.reverteffect;
- else
- if(options.ghosting) options_for_draggable.reverteffect = function(element) {
- element.style.top = 0;
- element.style.left = 0;
- };
-
- if(options.endeffect)
- options_for_draggable.endeffect = options.endeffect;
-
- if(options.zindex)
- options_for_draggable.zindex = options.zindex;
-
- // build options for the droppables
- var options_for_droppable = {
- overlap: options.overlap,
- containment: options.containment,
- hoverclass: options.hoverclass,
- onHover: Sortable.onHover,
- greedy: !options.dropOnEmpty
- }
-
- // fix for gecko engine
- Element.cleanWhitespace(element);
-
- options.draggables = [];
- options.droppables = [];
-
- // make it so
-
- // drop on empty handling
- if(options.dropOnEmpty) {
- Droppables.add(element,
- {containment: options.containment, onHover: Sortable.onEmptyHover, greedy: false});
- options.droppables.push(element);
- }
-
- var elements = this.findElements(element, options);
- if(elements) {
- for (var i = 0; i < elements.length; i++) {
- // handles are per-draggable
- var handle = options.handle ?
- Element.Class.childrenWith(elements[i], options.handle)[0] : elements[i];
- options.draggables.push(new Draggable(elements[i], Object.extend(options_for_draggable, { handle: handle })));
- Droppables.add(elements[i], options_for_droppable);
-
- options.droppables.push(elements[i]);
- }
- }
-
- // keep reference
- this.sortables.push(options);
-
- // for onupdate
- Draggables.addObserver(new SortableObserver(element, options.onUpdate));
-
- },
-
- // return all suitable-for-sortable elements in a guaranteed order
- findElements: function(element, options) {
- if(!element.hasChildNodes()) return null;
- var elements = [];
- var children = element.childNodes;
- for(var i = 0; i<children.length; i++) {
- if(children[i].tagName && children[i].tagName==options.tag.toUpperCase() &&
- (!options.only || (Element.Class.has(children[i], options.only))))
- elements.push(children[i]);
- if(options.tree) {
- var grandchildren = this.findElements(children[i], options);
- if(grandchildren) elements.push(grandchildren);
- }
- }
-
- return (elements.length>0 ? elements.flatten() : null);
- },
-
- onHover: function(element, dropon, overlap) {
- if(overlap>0.5) {
- Sortable.mark(dropon, 'before');
- if(dropon.previousSibling != element) {
- var oldParentNode = element.parentNode;
- element.style.visibility = "hidden"; // fix gecko rendering
- dropon.parentNode.insertBefore(element, dropon);
- if(dropon.parentNode!=oldParentNode)
- Sortable.options(oldParentNode).onChange(element);
- Sortable.options(dropon.parentNode).onChange(element);
- }
- } else {
- Sortable.mark(dropon, 'after');
- var nextElement = dropon.nextSibling || null;
- if(nextElement != element) {
- var oldParentNode = element.parentNode;
- element.style.visibility = "hidden"; // fix gecko rendering
- dropon.parentNode.insertBefore(element, nextElement);
- if(dropon.parentNode!=oldParentNode)
- Sortable.options(oldParentNode).onChange(element);
- Sortable.options(dropon.parentNode).onChange(element);
- }
- }
- },
-
- onEmptyHover: function(element, dropon) {
- if(element.parentNode!=dropon) {
- dropon.appendChild(element);
- }
- },
-
- unmark: function() {
- if(Sortable._marker) Element.hide(Sortable._marker);
- },
-
- mark: function(dropon, position) {
- // mark on ghosting only
- var sortable = Sortable.options(dropon.parentNode);
- if(sortable && !sortable.ghosting) return;
-
- if(!Sortable._marker) {
- Sortable._marker = $('dropmarker') || document.createElement('DIV');
- Element.hide(Sortable._marker);
- Element.Class.add(Sortable._marker, 'dropmarker');
- Sortable._marker.style.position = 'absolute';
- document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
- }
- var offsets = Position.cumulativeOffset(dropon);
- Sortable._marker.style.top = offsets[1] + 'px';
- if(position=='after') Sortable._marker.style.top = (offsets[1]+dropon.clientHeight) + 'px';
- Sortable._marker.style.left = offsets[0] + 'px';
- Element.show(Sortable._marker);
- },
-
- serialize: function(element) {
- element = $(element);
- var sortableOptions = this.options(element);
- var options = Object.extend({
- tag: sortableOptions.tag,
- only: sortableOptions.only,
- name: element.id
- }, arguments[1] || {});
-
- var items = $(element).childNodes;
- var queryComponents = new Array();
-
- for(var i=0; i<items.length; i++)
- if(items[i].tagName && items[i].tagName==options.tag.toUpperCase() &&
- (!options.only || (Element.Class.has(items[i], options.only))))
- queryComponents.push(
- encodeURIComponent(options.name) + "[]=" +
- encodeURIComponent(items[i].id.split("_")[1]));
-
- return queryComponents.join("&");
- }
-}
diff --git a/larpe/tags/release-1.0/root/larpe/js/scriptaculous/effects.js b/larpe/tags/release-1.0/root/larpe/js/scriptaculous/effects.js
deleted file mode 100644
index 71de14c..0000000
--- a/larpe/tags/release-1.0/root/larpe/js/scriptaculous/effects.js
+++ /dev/null
@@ -1,707 +0,0 @@
-// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//
-// Parts (c) 2005 Justin Palmer (http://encytemedia.com/)
-// Parts (c) 2005 Mark Pilgrim (http://diveintomark.org/)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-var Effect = {
- tagifyText: function(element) {
- var tagifyStyle = "position:relative";
- if(/MSIE/.test(navigator.userAgent)) tagifyStyle += ";zoom:1";
- element = $(element);
- var children = element.childNodes;
- for (var i = 0; i < children.length; i++)
- if(children[i].nodeType==3) {
- var child = children[i];
- for (var j = 0; j < child.nodeValue.length; j++)
- element.insertBefore(
- Builder.node('span',{style: tagifyStyle},
- child.nodeValue.substr(j,1) == " " ? String.fromCharCode(160) :
- child.nodeValue.substr(j,1)), child);
- Element.remove(child);
- }
- },
- multiple: function(element, effect) {
- if(((typeof element == 'object') ||
- (typeof element == 'function')) &&
- (element.length))
- var elements = element;
- else
- var elements = $(element).childNodes;
-
- var options = Object.extend({
- speed: 0.1,
- delay: 0.0
- }, arguments[2] || {});
- var speed = options.speed;
- var delay = options.delay;
-
- for(var i = 0; i < elements.length; i++)
- new effect(elements[i],
- Object.extend(options, { delay: delay + i*speed }));
- }
-};
-
-var Effect2 = Effect; // deprecated
-
-/* ------------- transitions ------------- */
-
-Effect.Transitions = {}
-
-Effect.Transitions.linear = function(pos) {
- return pos;
-}
-Effect.Transitions.sinoidal = function(pos) {
- return (-Math.cos(pos*Math.PI)/2) + 0.5;
-}
-Effect.Transitions.reverse = function(pos) {
- return 1-pos;
-}
-Effect.Transitions.flicker = function(pos) {
- return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random(0.25);
-}
-Effect.Transitions.wobble = function(pos) {
- return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
-}
-Effect.Transitions.pulse = function(pos) {
- return (Math.floor(pos*10) % 2 == 0 ?
- (pos*10-Math.floor(pos*10)) : 1-(pos*10-Math.floor(pos*10)));
-}
-Effect.Transitions.none = function(pos) {
- return 0;
-}
-Effect.Transitions.full = function(pos) {
- return 1;
-}
-
-/* ------------- core effects ------------- */
-
-Effect.Queue = {
- effects: [],
- interval: null,
- findLast: function() {
- var timestamp = false;
- for(var i = 0; i < this.effects.length; i++)
- if(!timestamp || (this.effects[i].finishOn>timestamp))
- timestamp = this.effects[i].finishOn;
- return timestamp;
- },
- add: function(effect) {
- var timestamp = new Date().getTime();
-
- switch(effect.options.queue) {
- case 'front':
- // move unstarted effects after this effect
- for(var i = 0; i < this.effects.length; i++)
- if(this.effects[i].state == 'idle') {
- this.effects[i].startOn += effect.finishOn;
- this.effects[i].finishOn += effect.finishOn;
- }
- break;
- case 'end':
- // start effect after last queued effect has finished
- timestamp = this.findLast() || timestamp;
- break;
- }
-
- effect.startOn += timestamp;
- effect.finishOn += timestamp;
-
- this.effects.push(effect);
-
- if(!this.interval)
- this.interval = setInterval(this.loop.bind(this), 40);
- },
- remove: function(effect) {
- for(var i = 0; i < this.effects.length; i++)
- if(this.effects[i]==effect) this.effects.splice(i,1);
- if(this.effects.length == 0) {
- clearInterval(this.interval);
- this.interval = null;
- }
- },
- loop: function() {
- var timePos = new Date().getTime();
- for(var i = 0; i < this.effects.length; i++) {
- this.effects[i].loop(timePos);
- }
- }
-}
-
-Effect.Base = function() {};
-Effect.Base.prototype = {
- setOptions: function(options) {
- this.options = Object.extend({
- transition: Effect.Transitions.sinoidal,
- duration: 1.0, // seconds
- fps: 25.0, // max. 25fps due to Effect.Queue implementation
- sync: false, // true for combining
- from: 0.0,
- to: 1.0,
- delay: 0.0,
- queue: 'parallel'
- }, options || {});
- },
- start: function(options) {
- this.setOptions(options || {});
- this.currentFrame = 0;
- this.state = 'idle';
- this.startOn = this.options.delay*1000;
- this.finishOn = this.startOn + (this.options.duration*1000);
- if(this.options.beforeStart) this.options.beforeStart(this);
- if(!this.options.sync) Effect.Queue.add(this);
- },
- loop: function(timePos) {
- if(timePos >= this.startOn) {
- if(timePos >= this.finishOn) {
- this.render(1.0);
- this.cancel();
- if(this.finish) this.finish();
- if(this.options.afterFinish) this.options.afterFinish(this);
- return;
- }
- var pos = (timePos - this.startOn) / (this.finishOn - this.startOn);
- var frame = Math.round(pos * this.options.fps * this.options.duration);
- if(frame > this.currentFrame) {
- this.render(pos);
- this.currentFrame = frame;
- }
- }
- },
- render: function(pos) {
- if(this.state == 'idle') {
- this.state = 'running';
- if(this.setup) this.setup();
- }
- if(this.options.transition) pos = this.options.transition(pos);
- pos *= (this.options.to-this.options.from);
- pos += this.options.from;
- if(this.options.beforeUpdate) this.options.beforeUpdate(this);
- if(this.update) this.update(pos);
- if(this.options.afterUpdate) this.options.afterUpdate(this);
- },
- cancel: function() {
- if(!this.options.sync) Effect.Queue.remove(this);
- this.state = 'finished';
- }
-}
-
-Effect.Parallel = Class.create();
-Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {
- initialize: function(effects) {
- this.effects = effects || [];
- this.start(arguments[1]);
- },
- update: function(position) {
- for (var i = 0; i < this.effects.length; i++)
- this.effects[i].render(position);
- },
- finish: function(position) {
- for (var i = 0; i < this.effects.length; i++) {
- this.effects[i].cancel();
- if(this.effects[i].finish) this.effects[i].finish(position);
- }
- }
-});
-
-// Internet Explorer caveat: works only on elements that have
-// a 'layout', meaning having a given width or height.
-// There is no way to safely set this automatically.
-Effect.Opacity = Class.create();
-Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {
- initialize: function(element) {
- this.element = $(element);
- var options = Object.extend({
- from: 0.0,
- to: 1.0
- }, arguments[1] || {});
- this.start(options);
- },
- update: function(position) {
- this.setOpacity(position);
- },
- setOpacity: function(opacity) {
- if(opacity<0.0001) opacity = 0; // fix errors with things like 6.152242992829571e-8
- if(opacity==1.0) {
- this.element.style.opacity = '0.999999';
- this.element.style.filter = null;
- } else {
- this.element.style.opacity = opacity;
- this.element.style.filter = "alpha(opacity:"+opacity*100+")";
- }
- }
-});
-
-Effect.MoveBy = Class.create();
-Object.extend(Object.extend(Effect.MoveBy.prototype, Effect.Base.prototype), {
- initialize: function(element, toTop, toLeft) {
- this.element = $(element);
- this.toTop = toTop;
- this.toLeft = toLeft;
- this.start(arguments[3]);
- },
- setup: function() {
- this.originalTop = parseFloat(Element.getStyle(this.element,'top') || '0');
- this.originalLeft = parseFloat(Element.getStyle(this.element,'left') || '0');
- Element.makePositioned(this.element);
- },
- update: function(position) {
- topd = this.toTop * position + this.originalTop;
- leftd = this.toLeft * position + this.originalLeft;
- this.setPosition(topd, leftd);
- },
- setPosition: function(topd, leftd) {
- this.element.style.top = topd + "px";
- this.element.style.left = leftd + "px";
- }
-});
-
-Effect.Scale = Class.create();
-Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {
- initialize: function(element, percent) {
- this.element = $(element)
- var options = Object.extend({
- scaleX: true,
- scaleY: true,
- scaleContent: true,
- scaleFromCenter: false,
- scaleMode: 'box', // 'box' or 'contents' or {} with provided values
- scaleFrom: 100.0,
- scaleTo: percent
- }, arguments[2] || {});
- this.start(options);
- },
- setup: function() {
- this.originalTop = this.element.offsetTop;
- this.originalLeft = this.element.offsetLeft;
- if(Element.getStyle(this.element,'font-size')=="") this.sizeEm = 1.0;
- if(Element.getStyle(this.element,'font-size') && Element.getStyle(this.element,'font-size').indexOf("em")>0)
- this.sizeEm = parseFloat(Element.getStyle(this.element,'font-size'));
- this.factor = (this.options.scaleTo/100.0) - (this.options.scaleFrom/100.0);
- if(this.options.scaleMode=='box') {
- this.originalHeight = this.element.clientHeight;
- this.originalWidth = this.element.clientWidth;
- } else
- if(this.options.scaleMode=='contents') {
- this.originalHeight = this.element.scrollHeight;
- this.originalWidth = this.element.scrollWidth;
- } else {
- this.originalHeight = this.options.scaleMode.originalHeight;
- this.originalWidth = this.options.scaleMode.originalWidth;
- }
- },
- update: function(position) {
- var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
- if(this.options.scaleContent && this.sizeEm)
- this.element.style.fontSize = this.sizeEm*currentScale + "em";
- this.setDimensions(
- this.originalWidth * currentScale,
- this.originalHeight * currentScale);
- },
- setDimensions: function(width, height) {
- if(this.options.scaleX) this.element.style.width = width + 'px';
- if(this.options.scaleY) this.element.style.height = height + 'px';
- if(this.options.scaleFromCenter) {
- var topd = (height - this.originalHeight)/2;
- var leftd = (width - this.originalWidth)/2;
- if(Element.getStyle(this.element,'position')=='absolute') {
- if(this.options.scaleY) this.element.style.top = this.originalTop-topd + "px";
- if(this.options.scaleX) this.element.style.left = this.originalLeft-leftd + "px";
- } else {
- if(this.options.scaleY) this.element.style.top = -topd + "px";
- if(this.options.scaleX) this.element.style.left = -leftd + "px";
- }
- }
- }
-});
-
-Effect.Highlight = Class.create();
-Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {
- initialize: function(element) {
- this.element = $(element);
- var options = Object.extend({
- startcolor: "#ffff99"
- }, arguments[1] || {});
- this.start(options);
- },
- setup: function() {
- // try to parse current background color as default for endcolor
- // browser stores this as: "rgb(255, 255, 255)", convert to "#ffffff" format
- if(!this.options.endcolor) {
- var endcolor = "#ffffff";
- var current = Element.getStyle(this.element, 'background-color');
- if(current && current.slice(0,4) == "rgb(") {
- endcolor = "#";
- var cols = current.slice(4,current.length-1).split(',');
- var i=0; do { endcolor += parseInt(cols[i]).toColorPart() } while (++i<3);
- }
- this.options.endcolor = endcolor;
- }
- // init color calculations
- this.colors_base = [
- parseInt(this.options.startcolor.slice(1,3),16),
- parseInt(this.options.startcolor.slice(3,5),16),
- parseInt(this.options.startcolor.slice(5),16) ];
- this.colors_delta = [
- parseInt(this.options.endcolor.slice(1,3),16)-this.colors_base[0],
- parseInt(this.options.endcolor.slice(3,5),16)-this.colors_base[1],
- parseInt(this.options.endcolor.slice(5),16)-this.colors_base[2]];
- },
- update: function(position) {
- var colors = [
- Math.round(this.colors_base[0]+(this.colors_delta[0]*position)),
- Math.round(this.colors_base[1]+(this.colors_delta[1]*position)),
- Math.round(this.colors_base[2]+(this.colors_delta[2]*position)) ];
- this.element.style.backgroundColor = "#" +
- colors[0].toColorPart() + colors[1].toColorPart() + colors[2].toColorPart();
- },
- finish: function() {
- this.element.style.backgroundColor = this.options.restorecolor;
- }
-});
-
-Effect.ScrollTo = Class.create();
-Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {
- initialize: function(element) {
- this.element = $(element);
- this.start(arguments[1] || {});
- },
- setup: function() {
- Position.prepare();
- var offsets = Position.cumulativeOffset(this.element);
- var max = window.innerHeight ?
- window.height - window.innerHeight :
- document.body.scrollHeight -
- (document.documentElement.clientHeight ?
- document.documentElement.clientHeight : document.body.clientHeight);
- this.scrollStart = Position.deltaY;
- this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;
- },
- update: function(position) {
- Position.prepare();
- window.scrollTo(Position.deltaX,
- this.scrollStart + (position*this.delta));
- }
-});
-
-/* ------------- combination effects ------------- */
-
-Effect.Fade = function(element) {
- var options = Object.extend({
- from: 1.0,
- to: 0.0,
- afterFinish: function(effect)
- { Element.hide(effect.element);
- effect.setOpacity(1); }
- }, arguments[1] || {});
- return new Effect.Opacity(element,options);
-}
-
-Effect.Appear = function(element) {
- var options = Object.extend({
- from: 0.0,
- to: 1.0,
- beforeStart: function(effect)
- { effect.setOpacity(0);
- Element.show(effect.element); },
- afterUpdate: function(effect)
- { Element.show(effect.element); }
- }, arguments[1] || {});
- return new Effect.Opacity(element,options);
-}
-
-Effect.Puff = function(element) {
- return new Effect.Parallel(
- [ new Effect.Scale(element, 200, { sync: true, scaleFromCenter: true }),
- new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0 } ) ],
- Object.extend({ duration: 1.0,
- beforeUpdate: function(effect)
- { effect.effects[0].element.style.position = 'absolute'; },
- afterFinish: function(effect)
- { Element.hide(effect.effects[0].element); }
- }, arguments[1] || {})
- );
-}
-
-Effect.BlindUp = function(element) {
- element = $(element);
- Element.makeClipping(element);
- return new Effect.Scale(element, 0,
- Object.extend({ scaleContent: false,
- scaleX: false,
- afterFinish: function(effect)
- {
- Element.hide(effect.element);
- Element.undoClipping(effect.element);
- }
- }, arguments[1] || {})
- );
-}
-
-Effect.BlindDown = function(element) {
- element = $(element);
- element.style.height = '0px';
- Element.makeClipping(element);
- Element.show(element);
- return new Effect.Scale(element, 100,
- Object.extend({ scaleContent: false,
- scaleX: false,
- scaleMode: 'contents',
- scaleFrom: 0,
- afterFinish: function(effect) {
- Element.undoClipping(effect.element);
- }
- }, arguments[1] || {})
- );
-}
-
-Effect.SwitchOff = function(element) {
- return new Effect.Appear(element,
- { duration: 0.4,
- transition: Effect.Transitions.flicker,
- afterFinish: function(effect)
- { effect.element.style.overflow = 'hidden';
- new Effect.Scale(effect.element, 1,
- { duration: 0.3, scaleFromCenter: true,
- scaleX: false, scaleContent: false,
- afterUpdate: function(effect) {
- if(effect.element.style.position=="")
- effect.element.style.position = 'relative'; },
- afterFinish: function(effect) { Element.hide(effect.element); }
- } )
- }
- } );
-}
-
-Effect.DropOut = function(element) {
- return new Effect.Parallel(
- [ new Effect.MoveBy(element, 100, 0, { sync: true }),
- new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0 } ) ],
- Object.extend(
- { duration: 0.5,
- afterFinish: function(effect)
- { Element.hide(effect.effects[0].element); }
- }, arguments[1] || {}));
-}
-
-Effect.Shake = function(element) {
- return new Effect.MoveBy(element, 0, 20,
- { duration: 0.05, afterFinish: function(effect) {
- new Effect.MoveBy(effect.element, 0, -40,
- { duration: 0.1, afterFinish: function(effect) {
- new Effect.MoveBy(effect.element, 0, 40,
- { duration: 0.1, afterFinish: function(effect) {
- new Effect.MoveBy(effect.element, 0, -40,
- { duration: 0.1, afterFinish: function(effect) {
- new Effect.MoveBy(effect.element, 0, 40,
- { duration: 0.1, afterFinish: function(effect) {
- new Effect.MoveBy(effect.element, 0, -20,
- { duration: 0.05, afterFinish: function(effect) {
- }}) }}) }}) }}) }}) }});
-}
-
-Effect.SlideDown = function(element) {
- element = $(element);
- element.style.height = '0px';
- Element.makeClipping(element);
- Element.cleanWhitespace(element);
- Element.makePositioned(element.firstChild);
- Element.show(element);
- return new Effect.Scale(element, 100,
- Object.extend({ scaleContent: false,
- scaleX: false,
- scaleMode: 'contents',
- scaleFrom: 0,
- afterUpdate: function(effect)
- { effect.element.firstChild.style.bottom =
- (effect.originalHeight - effect.element.clientHeight) + 'px'; },
- afterFinish: function(effect)
- { Element.undoClipping(effect.element); }
- }, arguments[1] || {})
- );
-}
-
-Effect.SlideUp = function(element) {
- element = $(element);
- Element.makeClipping(element);
- Element.cleanWhitespace(element);
- Element.makePositioned(element.firstChild);
- Element.show(element);
- return new Effect.Scale(element, 0,
- Object.extend({ scaleContent: false,
- scaleX: false,
- afterUpdate: function(effect)
- { effect.element.firstChild.style.bottom =
- (effect.originalHeight - effect.element.clientHeight) + 'px'; },
- afterFinish: function(effect)
- {
- Element.hide(effect.element);
- Element.undoClipping(effect.element);
- }
- }, arguments[1] || {})
- );
-}
-
-Effect.Squish = function(element) {
- return new Effect.Scale(element, 0,
- { afterFinish: function(effect) { Element.hide(effect.element); } });
-}
-
-Effect.Grow = function(element) {
- element = $(element);
- var options = arguments[1] || {};
-
- var originalWidth = element.clientWidth;
- var originalHeight = element.clientHeight;
- element.style.overflow = 'hidden';
- Element.show(element);
-
- var direction = options.direction || 'center';
- var moveTransition = options.moveTransition || Effect.Transitions.sinoidal;
- var scaleTransition = options.scaleTransition || Effect.Transitions.sinoidal;
- var opacityTransition = options.opacityTransition || Effect.Transitions.full;
-
- var initialMoveX, initialMoveY;
- var moveX, moveY;
-
- switch (direction) {
- case 'top-left':
- initialMoveX = initialMoveY = moveX = moveY = 0;
- break;
- case 'top-right':
- initialMoveX = originalWidth;
- initialMoveY = moveY = 0;
- moveX = -originalWidth;
- break;
- case 'bottom-left':
- initialMoveX = moveX = 0;
- initialMoveY = originalHeight;
- moveY = -originalHeight;
- break;
- case 'bottom-right':
- initialMoveX = originalWidth;
- initialMoveY = originalHeight;
- moveX = -originalWidth;
- moveY = -originalHeight;
- break;
- case 'center':
- initialMoveX = originalWidth / 2;
- initialMoveY = originalHeight / 2;
- moveX = -originalWidth / 2;
- moveY = -originalHeight / 2;
- break;
- }
-
- return new Effect.MoveBy(element, initialMoveY, initialMoveX, {
- duration: 0.01,
- beforeUpdate: function(effect) { $(element).style.height = '0px'; },
- afterFinish: function(effect) {
- new Effect.Parallel(
- [ new Effect.Opacity(element, { sync: true, to: 1.0, from: 0.0, transition: opacityTransition }),
- new Effect.MoveBy(element, moveY, moveX, { sync: true, transition: moveTransition }),
- new Effect.Scale(element, 100, {
- scaleMode: { originalHeight: originalHeight, originalWidth: originalWidth },
- sync: true, scaleFrom: 0, scaleTo: 100, transition: scaleTransition })],
- options); }
- });
-}
-
-Effect.Shrink = function(element) {
- element = $(element);
- var options = arguments[1] || {};
-
- var originalWidth = element.clientWidth;
- var originalHeight = element.clientHeight;
- element.style.overflow = 'hidden';
- Element.show(element);
-
- var direction = options.direction || 'center';
- var moveTransition = options.moveTransition || Effect.Transitions.sinoidal;
- var scaleTransition = options.scaleTransition || Effect.Transitions.sinoidal;
- var opacityTransition = options.opacityTransition || Effect.Transitions.none;
-
- var moveX, moveY;
-
- switch (direction) {
- case 'top-left':
- moveX = moveY = 0;
- break;
- case 'top-right':
- moveX = originalWidth;
- moveY = 0;
- break;
- case 'bottom-left':
- moveX = 0;
- moveY = originalHeight;
- break;
- case 'bottom-right':
- moveX = originalWidth;
- moveY = originalHeight;
- break;
- case 'center':
- moveX = originalWidth / 2;
- moveY = originalHeight / 2;
- break;
- }
-
- return new Effect.Parallel(
- [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: opacityTransition }),
- new Effect.Scale(element, 0, { sync: true, transition: moveTransition }),
- new Effect.MoveBy(element, moveY, moveX, { sync: true, transition: scaleTransition }) ],
- options);
-}
-
-Effect.Pulsate = function(element) {
- element = $(element);
- var options = arguments[1] || {};
- var transition = options.transition || Effect.Transitions.sinoidal;
- var reverser = function(pos){ return transition(1-Effect.Transitions.pulse(pos)) };
- reverser.bind(transition);
- return new Effect.Opacity(element,
- Object.extend(Object.extend({ duration: 3.0,
- afterFinish: function(effect) { Element.show(effect.element); }
- }, options), {transition: reverser}));
-}
-
-Effect.Fold = function(element) {
- element = $(element);
- element.style.overflow = 'hidden';
- return new Effect.Scale(element, 5, Object.extend({
- scaleContent: false,
- scaleTo: 100,
- scaleX: false,
- afterFinish: function(effect) {
- new Effect.Scale(element, 1, {
- scaleContent: false,
- scaleTo: 0,
- scaleY: false,
- afterFinish: function(effect) { Element.hide(effect.element) } });
- }}, arguments[1] || {}));
-}
-
-// old: new Effect.ContentZoom(element, percent)
-// new: Element.setContentZoom(element, percent)
-
-Element.setContentZoom = function(element, percent) {
- element = $(element);
- element.style.fontSize = (percent/100) + "em";
- if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
-}
diff --git a/larpe/tags/release-1.0/root/larpe/js/scriptaculous/scriptaculous.js b/larpe/tags/release-1.0/root/larpe/js/scriptaculous/scriptaculous.js
deleted file mode 100644
index ea1ad40..0000000
--- a/larpe/tags/release-1.0/root/larpe/js/scriptaculous/scriptaculous.js
+++ /dev/null
@@ -1,26 +0,0 @@
-var Scriptaculous = {
- Version: '1.5_pre4',
- require: function(libraryName) {
- // inserting via DOM fails in Safari 2.0, so brute force approach
- document.write('<script type="text/javascript" src="'+libraryName+'"></script>');
- },
- load: function() {
- if((typeof Prototype=='undefined') ||
- parseFloat(Prototype.Version.split(".")[0] + "." +
- Prototype.Version.split(".")[1]) < 1.4)
- throw("script.aculo.us requires the Prototype JavaScript framework >= 1.4.0");
- var scriptTags = document.getElementsByTagName("script");
- for(var i=0;i<scriptTags.length;i++) {
- if(scriptTags[i].src && scriptTags[i].src.match(/scriptaculous\.js$/)) {
- var path = scriptTags[i].src.replace(/scriptaculous\.js$/,'');
- this.require(path + 'util.js');
- this.require(path + 'effects.js');
- this.require(path + 'dragdrop.js');
- this.require(path + 'controls.js');
- break;
- }
- }
- }
-}
-
-Scriptaculous.load(); \ No newline at end of file
diff --git a/larpe/tags/release-1.0/root/larpe/js/scriptaculous/unittest.js b/larpe/tags/release-1.0/root/larpe/js/scriptaculous/unittest.js
deleted file mode 100644
index b53d65e..0000000
--- a/larpe/tags/release-1.0/root/larpe/js/scriptaculous/unittest.js
+++ /dev/null
@@ -1,381 +0,0 @@
-// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// (c) 2005 Jon Tirsen (http://www.tirsen.com)
-// (c) 2005 Michael Schuerig (http://www.schuerig.de/michael/)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
-// experimental, Firefox-only
-Event.simulateMouse = function(element, eventName) {
- var options = Object.extend({
- pointerX: 0,
- pointerY: 0,
- buttons: 0
- }, arguments[2] || {});
- var oEvent = document.createEvent("MouseEvents");
- oEvent.initMouseEvent(eventName, true, true, document.defaultView,
- options.buttons, options.pointerX, options.pointerY, options.pointerX, options.pointerY,
- false, false, false, false, 0, $(element));
-
- if(this.mark) Element.remove(this.mark);
- this.mark = document.createElement('div');
- this.mark.appendChild(document.createTextNode(" "));
- document.body.appendChild(this.mark);
- this.mark.style.position = 'absolute';
- this.mark.style.top = options.pointerY + "px";
- this.mark.style.left = options.pointerX + "px";
- this.mark.style.width = "5px";
- this.mark.style.height = "5px;";
- this.mark.style.borderTop = "1px solid red;"
- this.mark.style.borderLeft = "1px solid red;"
-
- if(this.step)
- alert('['+new Date().getTime().toString()+'] '+eventName+'/'+Test.Unit.inspect(options));
-
- $(element).dispatchEvent(oEvent);
-};
-
-// Note: Due to a fix in Firefox 1.0.5/6 that probably fixed "too much", this doesn't work in 1.0.6 or DP2.
-// You need to downgrade to 1.0.4 for now to get this working
-// See https://bugzilla.mozilla.org/show_bug.cgi?id=289940 for the fix that fixed too much
-Event.simulateKey = function(element, eventName) {
- var options = Object.extend({
- ctrlKey: false,
- altKey: false,
- shiftKey: false,
- metaKey: false,
- keyCode: 0,
- charCode: 0
- }, arguments[2] || {});
-
- var oEvent = document.createEvent("KeyEvents");
- oEvent.initKeyEvent(eventName, true, true, window,
- options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,
- options.keyCode, options.charCode );
- $(element).dispatchEvent(oEvent);
-};
-
-Event.simulateKeys = function(element, command) {
- for(var i=0; i<command.length; i++) {
- Event.simulateKey(element,'keypress',{charCode:command.charCodeAt(i)});
- }
-};
-
-var Test = {}
-Test.Unit = {};
-
-// security exception workaround
-Test.Unit.inspect = function(obj) {
- var info = [];
-
- if(typeof obj=="string" ||
- typeof obj=="number") {
- return obj;
- } else {
- for(property in obj)
- if(typeof obj[property]!="function")
- info.push(property + ' => ' +
- (typeof obj[property] == "string" ?
- '"' + obj[property] + '"' :
- obj[property]));
- }
-
- return ("'" + obj + "' #" + typeof obj +
- ": {" + info.join(", ") + "}");
-}
-
-Test.Unit.Logger = Class.create();
-Test.Unit.Logger.prototype = {
- initialize: function(log) {
- this.log = $(log);
- if (this.log) {
- this._createLogTable();
- }
- },
- start: function(testName) {
- if (!this.log) return;
- this.testName = testName;
- this.lastLogLine = document.createElement('tr');
- this.statusCell = document.createElement('td');
- this.nameCell = document.createElement('td');
- this.nameCell.appendChild(document.createTextNode(testName));
- this.messageCell = document.createElement('td');
- this.lastLogLine.appendChild(this.statusCell);
- this.lastLogLine.appendChild(this.nameCell);
- this.lastLogLine.appendChild(this.messageCell);
- this.loglines.appendChild(this.lastLogLine);
- },
- finish: function(status, summary) {
- if (!this.log) return;
- this.lastLogLine.className = status;
- this.statusCell.innerHTML = status;
- this.messageCell.innerHTML = this._toHTML(summary);
- },
- message: function(message) {
- if (!this.log) return;
- this.messageCell.innerHTML = this._toHTML(message);
- },
- summary: function(summary) {
- if (!this.log) return;
- this.logsummary.innerHTML = this._toHTML(summary);
- },
- _createLogTable: function() {
- this.log.innerHTML =
- '<div id="logsummary"></div>' +
- '<table id="logtable">' +
- '<thead><tr><th>Status</th><th>Test</th><th>Message</th></tr></thead>' +
- '<tbody id="loglines"></tbody>' +
- '</table>';
- this.logsummary = $('logsummary')
- this.loglines = $('loglines');
- },
- _toHTML: function(txt) {
- return txt.escapeHTML().replace(/\n/g,"<br/>");
- }
-}
-
-Test.Unit.Runner = Class.create();
-Test.Unit.Runner.prototype = {
- initialize: function(testcases) {
- this.options = Object.extend({
- testLog: 'testlog'
- }, arguments[1] || {});
- this.options.resultsURL = this.parseResultsURLQueryParameter();
- if (this.options.testLog) {
- this.options.testLog = $(this.options.testLog) || null;
- }
- if(this.options.tests) {
- this.tests = [];
- for(var i = 0; i < this.options.tests.length; i++) {
- if(/^test/.test(this.options.tests[i])) {
- this.tests.push(new Test.Unit.Testcase(this.options.tests[i], testcases[this.options.tests[i]], testcases["setup"], testcases["teardown"]));
- }
- }
- } else {
- if (this.options.test) {
- this.tests = [new Test.Unit.Testcase(this.options.test, testcases[this.options.test], testcases["setup"], testcases["teardown"])];
- } else {
- this.tests = [];
- for(var testcase in testcases) {
- if(/^test/.test(testcase)) {
- this.tests.push(new Test.Unit.Testcase(testcase, testcases[testcase], testcases["setup"], testcases["teardown"]));
- }
- }
- }
- }
- this.currentTest = 0;
- this.logger = new Test.Unit.Logger(this.options.testLog);
- setTimeout(this.runTests.bind(this), 1000);
- },
- parseResultsURLQueryParameter: function() {
- return window.location.search.parseQuery()["resultsURL"];
- },
- // Returns:
- // "ERROR" if there was an error,
- // "FAILURE" if there was a failure, or
- // "SUCCESS" if there was neither
- getResult: function() {
- var hasFailure = false;
- for(var i=0;i<this.tests.length;i++) {
- if (this.tests[i].errors > 0) {
- return "ERROR";
- }
- if (this.tests[i].failures > 0) {
- hasFailure = true;
- }
- }
- if (hasFailure) {
- return "FAILURE";
- } else {
- return "SUCCESS";
- }
- },
- postResults: function() {
- if (this.options.resultsURL) {
- new Ajax.Request(this.options.resultsURL,
- { method: 'get', parameters: 'result=' + this.getResult(), asynchronous: false });
- }
- },
- runTests: function() {
- var test = this.tests[this.currentTest];
- if (!test) {
- // finished!
- this.postResults();
- this.logger.summary(this.summary());
- return;
- }
- if(!test.isWaiting) {
- this.logger.start(test.name);
- }
- test.run();
- if(test.isWaiting) {
- this.logger.message("Waiting for " + test.timeToWait + "ms");
- setTimeout(this.runTests.bind(this), test.timeToWait || 1000);
- } else {
- this.logger.finish(test.status(), test.summary());
- this.currentTest++;
- // tail recursive, hopefully the browser will skip the stackframe
- this.runTests();
- }
- },
- summary: function() {
- var assertions = 0;
- var failures = 0;
- var errors = 0;
- var messages = [];
- for(var i=0;i<this.tests.length;i++) {
- assertions += this.tests[i].assertions;
- failures += this.tests[i].failures;
- errors += this.tests[i].errors;
- }
- return (
- this.tests.length + " tests, " +
- assertions + " assertions, " +
- failures + " failures, " +
- errors + " errors");
- }
-}
-
-Test.Unit.Assertions = Class.create();
-Test.Unit.Assertions.prototype = {
- initialize: function() {
- this.assertions = 0;
- this.failures = 0;
- this.errors = 0;
- this.messages = [];
- },
- summary: function() {
- return (
- this.assertions + " assertions, " +
- this.failures + " failures, " +
- this.errors + " errors" + "\n" +
- this.messages.join("\n"));
- },
- pass: function() {
- this.assertions++;
- },
- fail: function(message) {
- this.failures++;
- this.messages.push("Failure: " + message);
- },
- error: function(error) {
- this.errors++;
- this.messages.push(error.name + ": "+ error.message + "(" + Test.Unit.inspect(error) +")");
- },
- status: function() {
- if (this.failures > 0) return 'failed';
- if (this.errors > 0) return 'error';
- return 'passed';
- },
- assert: function(expression) {
- var message = arguments[1] || 'assert: got "' + Test.Unit.inspect(expression) + '"';
- try { expression ? this.pass() :
- this.fail(message); }
- catch(e) { this.error(e); }
- },
- assertEqual: function(expected, actual) {
- var message = arguments[2] || "assertEqual";
- try { (expected == actual) ? this.pass() :
- this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
- '", actual "' + Test.Unit.inspect(actual) + '"'); }
- catch(e) { this.error(e); }
- },
- assertNotEqual: function(expected, actual) {
- var message = arguments[2] || "assertNotEqual";
- try { (expected != actual) ? this.pass() :
- this.fail(message + ': got "' + Test.Unit.inspect(actual) + '"'); }
- catch(e) { this.error(e); }
- },
- assertNull: function(obj) {
- var message = arguments[1] || 'assertNull'
- try { (obj==null) ? this.pass() :
- this.fail(message + ': got "' + Test.Unit.inspect(obj) + '"'); }
- catch(e) { this.error(e); }
- },
- assertHidden: function(element) {
- var message = arguments[1] || 'assertHidden';
- this.assertEqual("none", element.style.display, message);
- },
- assertNotNull: function(object) {
- var message = arguments[1] || 'assertNotNull';
- this.assert(object != null, message);
- },
- assertInstanceOf: function(expected, actual) {
- var message = arguments[2] || 'assertInstanceOf';
- try {
- (actual instanceof expected) ? this.pass() :
- this.fail(message + ": object was not an instance of the expected type"); }
- catch(e) { this.error(e); }
- },
- assertNotInstanceOf: function(expected, actual) {
- var message = arguments[2] || 'assertNotInstanceOf';
- try {
- !(actual instanceof expected) ? this.pass() :
- this.fail(message + ": object was an instance of the not expected type"); }
- catch(e) { this.error(e); }
- },
- _isVisible: function(element) {
- element = $(element);
- if(!element.parentNode) return true;
- this.assertNotNull(element);
- if(element.style && Element.getStyle(element, 'display') == 'none')
- return false;
-
- return this._isVisible(element.parentNode);
- },
- assertNotVisible: function(element) {
- this.assert(!this._isVisible(element), Test.Unit.inspect(element) + " was not hidden and didn't have a hidden parent either. " + ("" || arguments[1]));
- },
- assertVisible: function(element) {
- this.assert(this._isVisible(element), Test.Unit.inspect(element) + " was not visible. " + ("" || arguments[1]));
- }
-}
-
-Test.Unit.Testcase = Class.create();
-Object.extend(Object.extend(Test.Unit.Testcase.prototype, Test.Unit.Assertions.prototype), {
- initialize: function(name, test, setup, teardown) {
- Test.Unit.Assertions.prototype.initialize.bind(this)();
- this.name = name;
- this.test = test || function() {};
- this.setup = setup || function() {};
- this.teardown = teardown || function() {};
- this.isWaiting = false;
- this.timeToWait = 1000;
- },
- wait: function(time, nextPart) {
- this.isWaiting = true;
- this.test = nextPart;
- this.timeToWait = time;
- },
- run: function() {
- try {
- try {
- if (!this.isWaiting) this.setup.bind(this)();
- this.isWaiting = false;
- this.test.bind(this)();
- } finally {
- if(!this.isWaiting) {
- this.teardown.bind(this)();
- }
- }
- }
- catch(e) { this.error(e); }
- }
-}); \ No newline at end of file
diff --git a/larpe/tags/release-1.0/root/larpe/js/scriptaculous/util.js b/larpe/tags/release-1.0/root/larpe/js/scriptaculous/util.js
deleted file mode 100644
index 9170a95..0000000
--- a/larpe/tags/release-1.0/root/larpe/js/scriptaculous/util.js
+++ /dev/null
@@ -1,429 +0,0 @@
-// small but works-for-me stuff for testing javascripts
-// not ready for "production" use
-
-Object.inspect = function(obj) {
- var info = [];
-
- if(typeof obj in ["string","number"]) {
- return obj;
- } else {
- for(property in obj)
- if(typeof obj[property]!="function")
- info.push(property + ' => ' +
- (typeof obj[property] == "string" ?
- '"' + obj[property] + '"' :
- obj[property]));
- }
-
- return ("'" + obj + "' #" + typeof obj +
- ": {" + info.join(", ") + "}");
-}
-
-// borrowed from http://www.schuerig.de/michael/javascript/stdext.js
-// Copyright (c) 2005, Michael Schuerig, michael@schuerig.de
-
-Array.flatten = function(array, excludeUndefined) {
- if (excludeUndefined === undefined) {
- excludeUndefined = false;
- }
- var result = [];
- var len = array.length;
- for (var i = 0; i < len; i++) {
- var el = array[i];
- if (el instanceof Array) {
- var flat = el.flatten(excludeUndefined);
- result = result.concat(flat);
- } else if (!excludeUndefined || el != undefined) {
- result.push(el);
- }
- }
- return result;
-};
-
-if (!Array.prototype.flatten) {
- Array.prototype.flatten = function(excludeUndefined) {
- return Array.flatten(this, excludeUndefined);
- }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var Builder = {
- node: function(elementName) {
- var element = document.createElement('div');
- element.innerHTML =
- "<" + elementName + "></" + elementName + ">";
-
- // attributes (or text)
- if(arguments[1])
- if(this._isStringOrNumber(arguments[1]) ||
- (arguments[1] instanceof Array)) {
- this._children(element.firstChild, arguments[1]);
- } else {
- var attrs = this._attributes(arguments[1]);
- if(attrs.length)
- element.innerHTML = "<" +elementName + " " +
- attrs + "></" + elementName + ">";
- }
-
- // text, or array of children
- if(arguments[2])
- this._children(element.firstChild, arguments[2]);
-
- return element.firstChild;
- },
- _text: function(text) {
- return document.createTextNode(text);
- },
- _attributes: function(attributes) {
- var attrs = [];
- for(attribute in attributes)
- attrs.push((attribute=='className' ? 'class' : attribute) +
- '="' + attributes[attribute].toString().escapeHTML() + '"');
- return attrs.join(" ");
- },
- _children: function(element, children) {
- if(typeof children=='object') { // array can hold nodes and text
- children = children.flatten();
- for(var i = 0; i<children.length; i++)
- if(typeof children[i]=='object')
- element.appendChild(children[i]);
- else
- if(this._isStringOrNumber(children[i]))
- element.appendChild(this._text(children[i]));
- } else
- if(this._isStringOrNumber(children))
- element.appendChild(this._text(children));
- },
- _isStringOrNumber: function(param) {
- return(typeof param=='string' || typeof param=='number');
- }
-}
-
-/* ------------- element ext -------------- */
-
-// adapted from http://dhtmlkitchen.com/learn/js/setstyle/index4.jsp
-// note: Safari return null on elements with display:none; see http://bugzilla.opendarwin.org/show_bug.cgi?id=4125
-// instead of "auto" values returns null so it's easier to use with || constructs
-
-String.prototype.camelize = function() {
- var oStringList = this.split('-');
- if(oStringList.length == 1)
- return oStringList[0];
- var ret = this.indexOf("-") == 0 ?
- oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1) : oStringList[0];
- for(var i = 1, len = oStringList.length; i < len; i++){
- var s = oStringList[i];
- ret += s.charAt(0).toUpperCase() + s.substring(1)
- }
- return ret;
-}
-
-Element.getStyle = function(element, style) {
- element = $(element);
- var value = element.style[style.camelize()];
- if(!value)
- if(document.defaultView && document.defaultView.getComputedStyle) {
- var css = document.defaultView.getComputedStyle(element, null);
- value = (css!=null) ? css.getPropertyValue(style) : null;
- } else if(element.currentStyle) {
- value = element.currentStyle[style.camelize()];
- }
- if(value=='auto') value = null;
- return value;
-}
-
-Element.makePositioned = function(element) {
- element = $(element);
- if(Element.getStyle(element, 'position')=='static')
- element.style.position = "relative";
-}
-
-Element.makeClipping = function(element) {
- element = $(element);
- element._overflow = Element.getStyle(element, 'overflow') || 'visible';
- if(element._overflow!='hidden') element.style.overflow = 'hidden';
-}
-
-Element.undoClipping = function(element) {
- element = $(element);
- if(element._overflow!='hidden') element.style.overflow = element._overflow;
-}
-
-Element.collectTextNodesIgnoreClass = function(element, ignoreclass) {
- var children = $(element).childNodes;
- var text = "";
- var classtest = new RegExp("^([^ ]+ )*" + ignoreclass+ "( [^ ]+)*$","i");
-
- for (var i = 0; i < children.length; i++) {
- if(children[i].nodeType==3) {
- text+=children[i].nodeValue;
- } else {
- if((!children[i].className.match(classtest)) && children[i].hasChildNodes())
- text += Element.collectTextNodesIgnoreClass(children[i], ignoreclass);
- }
- }
-
- return text;
-}
-
-/*--------------------------------------------------------------------------*/
-
-Position.positionedOffset = function(element) {
- var valueT = 0, valueL = 0;
- do {
- valueT += element.offsetTop || 0;
- valueL += element.offsetLeft || 0;
- element = element.offsetParent;
- if (element) {
- p = Element.getStyle(element,'position');
- if(p == 'relative' || p == 'absolute') break;
- }
- } while (element);
- return [valueL, valueT];
-}
-
-// Safari returns margins on body which is incorrect if the child is absolutely positioned.
-// for performance reasons, we create a specialized version of Position.positionedOffset for
-// KHTML/WebKit only
-
-if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
- Position.cumulativeOffset = function(element) {
- var valueT = 0, valueL = 0;
- do {
- valueT += element.offsetTop || 0;
- valueL += element.offsetLeft || 0;
-
- if (element.offsetParent==document.body)
- if (Element.getStyle(element,'position')=='absolute') break;
-
- element = element.offsetParent;
- } while (element);
- return [valueL, valueT];
- }
-}
-
-Position.page = function(forElement) {
- if(element == document.body) return [0, 0];
- var valueT = 0, valueL = 0;
-
- var element = forElement;
- do {
- valueT += element.offsetTop || 0;
- valueL += element.offsetLeft || 0;
-
- // Safari fix
- if (element.offsetParent==document.body)
- if (Element.getStyle(element,'position')=='absolute') break;
-
- } while (element = element.offsetParent);
-
- element = forElement;
- do {
- valueT -= element.scrollTop || 0;
- valueL -= element.scrollLeft || 0;
- } while (element = element.parentNode);
-
- return [valueL, valueT];
-}
-
-// elements with display:none don't return an offsetParent,
-// fall back to manual calculation
-Position.offsetParent = function(element) {
- if(element.offsetParent) return element.offsetParent;
- if(element == document.body) return element;
-
- while ((element = element.parentNode) && element != document.body)
- if (Element.getStyle(element,'position')!='static')
- return element;
-
- return document.body;
-}
-
-Position.clone = function(source, target) {
- var options = Object.extend({
- setLeft: true,
- setTop: true,
- setWidth: true,
- setHeight: true,
- offsetTop: 0,
- offsetLeft: 0
- }, arguments[2] || {})
-
- // find page position of source
- source = $(source);
- var p = Position.page(source);
-
- // find coordinate system to use
- target = $(target);
- var delta = [0, 0];
- var parent = null;
- // delta [0,0] will do fine with position: fixed elements,
- // position:absolute needs offsetParent deltas
- if (Element.getStyle(target,'position') == 'absolute') {
- parent = Position.offsetParent(target);
- delta = Position.page(parent);
- }
-
- // correct by body offsets (fixes Safari)
- if (parent==document.body) {
- delta[0] -= document.body.offsetLeft;
- delta[1] -= document.body.offsetTop;
- }
-
- // set position
- if(options.setLeft) target.style.left = (p[0] - delta[0] + options.offsetLeft) + "px";
- if(options.setTop) target.style.top = (p[1] - delta[1] + options.offsetTop) + "px";
- if(options.setWidth) target.style.width = source.offsetWidth + "px";
- if(options.setHeight) target.style.height = source.offsetHeight + "px";
-}
-
-Position.absolutize = function(element) {
- element = $(element);
- if(element.style.position=='absolute') return;
- Position.prepare();
-
- var offsets = Position.positionedOffset(element);
- var top = offsets[1];
- var left = offsets[0];
- var width = element.clientWidth;
- var height = element.clientHeight;
-
- element._originalLeft = left - parseFloat(element.style.left || 0);
- element._originalTop = top - parseFloat(element.style.top || 0);
- element._originalWidth = element.style.width;
- element._originalHeight = element.style.height;
-
- element.style.position = 'absolute';
- element.style.top = top + 'px';;
- element.style.left = left + 'px';;
- element.style.width = width + 'px';;
- element.style.height = height + 'px';;
-}
-
-Position.relativize = function(element) {
- element = $(element);
- if(element.style.position=='relative') return;
- Position.prepare();
-
- element.style.position = 'relative';
- var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);
- var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
-
- element.style.top = top + 'px';
- element.style.left = left + 'px';
- element.style.height = element._originalHeight;
- element.style.width = element._originalWidth;
-}
-
-/*--------------------------------------------------------------------------*/
-
-Element.Class = {
- // Element.toggleClass(element, className) toggles the class being on/off
- // Element.toggleClass(element, className1, className2) toggles between both classes,
- // defaulting to className1 if neither exist
- toggle: function(element, className) {
- if(Element.Class.has(element, className)) {
- Element.Class.remove(element, className);
- if(arguments.length == 3) Element.Class.add(element, arguments[2]);
- } else {
- Element.Class.add(element, className);
- if(arguments.length == 3) Element.Class.remove(element, arguments[2]);
- }
- },
-
- // gets space-delimited classnames of an element as an array
- get: function(element) {
- element = $(element);
- return element.className.split(' ');
- },
-
- // functions adapted from original functions by Gavin Kistner
- remove: function(element) {
- element = $(element);
- var regEx;
- for(var i = 1; i < arguments.length; i++) {
- regEx = new RegExp("(^|\\s)" + arguments[i] + "(\\s|$)", 'g');
- element.className = element.className.replace(regEx, '')
- }
- },
-
- add: function(element) {
- element = $(element);
- for(var i = 1; i < arguments.length; i++) {
- Element.Class.remove(element, arguments[i]);
- element.className += (element.className.length > 0 ? ' ' : '') + arguments[i];
- }
- },
-
- // returns true if all given classes exist in said element
- has: function(element) {
- element = $(element);
- if(!element || !element.className) return false;
- var regEx;
- for(var i = 1; i < arguments.length; i++) {
- if((typeof arguments[i] == 'object') &&
- (arguments[i].constructor == Array)) {
- for(var j = 0; j < arguments[i].length; j++) {
- regEx = new RegExp("(^|\\s)" + arguments[i][j] + "(\\s|$)");
- if(!regEx.test(element.className)) return false;
- }
- } else {
- regEx = new RegExp("(^|\\s)" + arguments[i] + "(\\s|$)");
- if(!regEx.test(element.className)) return false;
- }
- }
- return true;
- },
-
- // expects arrays of strings and/or strings as optional paramters
- // Element.Class.has_any(element, ['classA','classB','classC'], 'classD')
- has_any: function(element) {
- element = $(element);
- if(!element || !element.className) return false;
- var regEx;
- for(var i = 1; i < arguments.length; i++) {
- if((typeof arguments[i] == 'object') &&
- (arguments[i].constructor == Array)) {
- for(var j = 0; j < arguments[i].length; j++) {
- regEx = new RegExp("(^|\\s)" + arguments[i][j] + "(\\s|$)");
- if(regEx.test(element.className)) return true;
- }
- } else {
- regEx = new RegExp("(^|\\s)" + arguments[i] + "(\\s|$)");
- if(regEx.test(element.className)) return true;
- }
- }
- return false;
- },
-
- childrenWith: function(element, className) {
- var children = $(element).getElementsByTagName('*');
- var elements = new Array();
-
- for (var i = 0; i < children.length; i++) {
- if (Element.Class.has(children[i], className)) {
- elements.push(children[i]);
- break;
- }
- }
-
- return elements;
- }
-}
-
-/*--------------------------------------------------------------------------*/
-
-String.prototype.parseQuery = function() {
- var str = this;
- if(str.substring(0,1) == '?') {
- str = this.substring(1);
- }
- var result = {};
- var pairs = str.split('&');
- for(var i = 0; i < pairs.length; i++) {
- var pair = pairs[i].split('=');
- result[pair[0]] = pair[1];
- }
- return result;
-} \ No newline at end of file
diff --git a/larpe/tags/release-1.0/root/larpe/js/sorttable.js b/larpe/tags/release-1.0/root/larpe/js/sorttable.js
deleted file mode 100644
index 9436294..0000000
--- a/larpe/tags/release-1.0/root/larpe/js/sorttable.js
+++ /dev/null
@@ -1,185 +0,0 @@
-// MIT License: http://www.kryogenix.org/code/browser/licence.html
-
-addEvent(window, "load", sortables_init);
-
-var SORT_COLUMN_INDEX;
-
-function sortables_init() {
- // Find all tables with class sortable and make them sortable
- if (!document.getElementsByTagName) return;
- tbls = document.getElementsByTagName("table");
- for (ti=0;ti<tbls.length;ti++) {
- thisTbl = tbls[ti];
- if (((' '+thisTbl.className+' ').indexOf("sortable") != -1) && (thisTbl.id)) {
- //initTable(thisTbl.id);
- ts_makeSortable(thisTbl);
- }
- }
-}
-
-function ts_makeSortable(table) {
- if (table.rows && table.rows.length > 0) {
- var firstRow = table.rows[0];
- }
- if (!firstRow) return;
-
- // We have a first row: assume it's the header, and make its contents clickable links
- for (var i=0;i<firstRow.cells.length;i++) {
- var cell = firstRow.cells[i];
- var txt = ts_getInnerText(cell);
- cell.innerHTML = '<a href="#" class="sortheader" onclick="ts_resortTable(this);return false;">'+txt+'<span class="sortarrow">&nbsp;&nbsp;&nbsp;</span></a>';
- }
-}
-
-function ts_getInnerText(el) {
- if (typeof el == "string") return el;
- if (typeof el == "undefined") { return el };
- if (el.innerText) return el.innerText; //Not needed but it is faster
- var str = "";
-
- var cs = el.childNodes;
- var l = cs.length;
- for (var i = 0; i < l; i++) {
- switch (cs[i].nodeType) {
- case 1: //ELEMENT_NODE
- str += ts_getInnerText(cs[i]);
- break;
- case 3: //TEXT_NODE
- str += cs[i].nodeValue;
- break;
- }
- }
- return str;
-}
-
-function ts_resortTable(lnk) {
- // get the span
- var span;
- for (var ci=0;ci<lnk.childNodes.length;ci++) {
- if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];
- }
- var spantext = ts_getInnerText(span);
- var td = lnk.parentNode;
- var column = td.cellIndex;
- var table = getParent(td,'TABLE');
-
- // Work out a type for the column
- if (table.rows.length <= 1) return;
- var itm = ts_getInnerText(table.rows[1].cells[column]);
- sortfn = ts_sort_caseinsensitive;
- //if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;
- //if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = ts_sort_date;
- //if (itm.match(/^[£$]/)) sortfn = ts_sort_currency;
- //if (itm.match(/^[\d\.]+$/)) sortfn = ts_sort_numeric;
- SORT_COLUMN_INDEX = column;
- var firstRow = new Array();
- var newRows = new Array();
- for (i=0;i<table.rows[0].length;i++) { firstRow[i] = table.rows[0][i]; }
- for (j=1;j<table.rows.length;j++) { newRows[j-1] = table.rows[j]; }
-
- newRows.sort(sortfn);
-
- if (span.getAttribute("sortdir") == 'down') {
- ARROW = '&nbsp;&nbsp;&uarr;';
- newRows.reverse();
- span.setAttribute('sortdir','up');
- } else {
- ARROW = '&nbsp;&nbsp;&darr;';
- span.setAttribute('sortdir','down');
- }
-
- // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
- // don't do sortbottom rows
- for (i=0;i<newRows.length;i++) { if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) table.tBodies[0].appendChild(newRows[i]);}
- // do sortbottom rows only
- for (i=0;i<newRows.length;i++) { if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) table.tBodies[0].appendChild(newRows[i]);}
-
- // Delete any other arrows there may be showing
- var allspans = document.getElementsByTagName("span");
- for (var ci=0;ci<allspans.length;ci++) {
- if (allspans[ci].className == 'sortarrow') {
- if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us?
- allspans[ci].innerHTML = '&nbsp;&nbsp;&nbsp;';
- }
- }
- }
-
- span.innerHTML = ARROW;
-}
-
-function getParent(el, pTagName) {
- if (el == null) return null;
- else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) // Gecko bug, supposed to be uppercase
- return el;
- else
- return getParent(el.parentNode, pTagName);
-}
-function ts_sort_date(a,b) {
- // y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
- aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
- bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
- if (aa.length == 10) {
- dt1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2);
- } else {
- yr = aa.substr(6,2);
- if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
- dt1 = yr+aa.substr(3,2)+aa.substr(0,2);
- }
- if (bb.length == 10) {
- dt2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2);
- } else {
- yr = bb.substr(6,2);
- if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
- dt2 = yr+bb.substr(3,2)+bb.substr(0,2);
- }
- if (dt1==dt2) return 0;
- if (dt1<dt2) return -1;
- return 1;
-}
-
-function ts_sort_currency(a,b) {
- aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
- bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
- return parseFloat(aa) - parseFloat(bb);
-}
-
-function ts_sort_numeric(a,b) {
- aa = parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
- if (isNaN(aa)) aa = 0;
- bb = parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX]));
- if (isNaN(bb)) bb = 0;
- return aa-bb;
-}
-
-function ts_sort_caseinsensitive(a,b) {
- aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
- bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
- if (aa==bb) return 0;
- if (aa<bb) return -1;
- return 1;
-}
-
-function ts_sort_default(a,b) {
- aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
- bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
- if (aa==bb) return 0;
- if (aa<bb) return -1;
- return 1;
-}
-
-
-function addEvent(elm, evType, fn, useCapture)
-// addEvent and removeEvent
-// cross-browser event handling for IE5+, NS6 and Mozilla
-// By Scott Andrew
-{
- if (elm.addEventListener){
- elm.addEventListener(evType, fn, useCapture);
- return true;
- } else if (elm.attachEvent){
- var r = elm.attachEvent("on"+evType, fn);
- return r;
- } else {
- alert("Handler could not be removed");
- }
-}