Merge lp:~coopebm1/sloecode/wiki-merge-proposal into lp:sloecode

Proposed by Brendan Cooper
Status: Needs review
Proposed branch: lp:~coopebm1/sloecode/wiki-merge-proposal
Merge into: lp:sloecode
Diff against target: 2926 lines (+2321/-63)
57 files modified
.bzrignore (+1/-0)
debian/README.Debian (+38/-0)
debian/apache-config/sloecode (+37/-0)
debian/changelog (+39/-0)
debian/compat (+1/-0)
debian/control (+28/-0)
debian/copyright (+1/-0)
debian/dbtemplate.ini (+11/-0)
debian/po/POTFILES.in (+2/-0)
debian/po/templates.pot (+76/-0)
debian/postinst (+95/-0)
debian/postrm (+32/-0)
debian/prerm (+12/-0)
debian/pycompat (+1/-0)
debian/rules (+11/-0)
debian/sloecode.config (+25/-0)
debian/sloecode.dirs (+10/-0)
debian/sloecode.init (+66/-0)
debian/sloecode.install (+11/-0)
debian/sloecode.links (+1/-0)
debian/sloecode.templates (+24/-0)
debian/sloecode.wsgi (+4/-0)
debian/source/lintian-overrides (+2/-0)
development.ini (+7/-1)
sloecode/bzr/display.py (+7/-3)
sloecode/bzr/factory.py (+23/-18)
sloecode/config/environment.py (+0/-1)
sloecode/config/routing.py (+11/-2)
sloecode/controllers/admin/project.py (+8/-9)
sloecode/controllers/admin/wiki.py (+91/-0)
sloecode/controllers/project.py (+8/-12)
sloecode/controllers/wiki.py (+145/-0)
sloecode/lib/base.py (+2/-0)
sloecode/lib/helpers.py (+3/-0)
sloecode/model/__init__.py (+1/-0)
sloecode/model/meta.py (+10/-2)
sloecode/model/template.py (+72/-0)
sloecode/public/css/smoothness/jquery-ui-1.8.23.custom.css (+563/-0)
sloecode/public/css/wiki.css (+239/-0)
sloecode/public/js/jquery-ui-1.8.23.custom.min.js (+69/-0)
sloecode/public/js/wiki-edit-helpers.js (+66/-0)
sloecode/sshserver/accesslog.py (+0/-1)
sloecode/templates/admin/template-edit.html (+17/-0)
sloecode/templates/admin/template-view.html (+12/-0)
sloecode/templates/admin/template-viewall.html (+13/-0)
sloecode/templates/project-details.html (+5/-0)
sloecode/templates/wiki/base.html (+21/-0)
sloecode/templates/wiki/directory.html (+31/-0)
sloecode/templates/wiki/edit.html (+42/-0)
sloecode/templates/wiki/load-template.html (+3/-0)
sloecode/templates/wiki/newfile.html (+43/-0)
sloecode/templates/wiki/page.html (+31/-0)
sloecode/templates/wiki/text.html (+5/-0)
sloecode/tests/test_project.py (+1/-1)
sloecode/tests/test_template.py (+83/-0)
sloecode/websetup.py (+2/-13)
sloecode/wikkid_view_adapters.py (+159/-0)
To merge this branch: bzr merge lp:~coopebm1/sloecode/wiki-merge-proposal
Reviewer Review Type Date Requested Status
Thomi Richards Pending
Review via email: mp+125084@code.launchpad.net

Description of the change

Adds a project wiki for each project.
Uses wikkid wiki to give users the ability to create documentation for their project from within sloecode.

As an administrator, templates can be created and edited so that users can create pages based on these templates.
Upon creating a project, A wiki branch is created in the same place as trunk.

To post a comment you must log in.
244. By Brendan Cooper

Added debian packaging stuff

Unmerged revisions

244. By Brendan Cooper

Added debian packaging stuff

243. By Brendan Cooper

Added some tests for the template model.

242. By Sam Bailey

Merged Brendan's PEP fixes into main codebase.

241. By Sam Bailey

Refactored wiki css and javascript into seperate files.

240. By Sam Bailey

Link-adding dialog closes when done on edit page.

239. By Sam Bailey

Replaced the wikkidviewadapters class structure with one file

238. By Sam Bailey

Skeleton for wikkid view adapters being done in one file

237. By Sam Bailey

Reverted un-needed PEP8 changes

236. By Sam Bailey

PEP8 fixes

235. By Sam Bailey

Added some JQuery to allow users to automatically generate links via a javascript popup when using Markdown

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '.bzrignore'
2--- .bzrignore 2011-06-18 22:06:36 +0000
3+++ .bzrignore 2012-09-26 01:36:19 +0000
4@@ -6,3 +6,4 @@
5 sloecode/public/help
6 twistd.pid
7 ./docs/build/*
8+p
9
10=== added directory 'debian'
11=== added file 'debian/README.Debian'
12--- debian/README.Debian 1970-01-01 00:00:00 +0000
13+++ debian/README.Debian 2012-09-26 01:36:19 +0000
14@@ -0,0 +1,38 @@
15+#
16+# configuration of the Pylons application 'sloecode' for production use
17+#
18+
19+# Configure your contact email address and SMTP server
20+[DEFAULT]
21+debug = true
22+email_to = root@localhost
23+smtp_server = localhost
24+error_email_from = paste@localhost
25+
26+# Configure the IP address and TCP port where the web server will listen
27+[server:main]
28+use = egg:Paste#http
29+host = 0.0.0.0
30+port = 5000
31+
32+# Configure the Pylons application
33+# IMPORTANT: change the session_secret to another long string
34+[app:main]
35+use = egg:sloecode
36+cache_dir = /var/cache/pylons-sloecode
37+session_key = sloecode
38+session_secret = HJtS52NNQzesc87wuO4zvU8CI90M9OCg
39+
40+# Specify the database for SQLAlchemy to use via
41+# pylons.database.session_context.
42+#sqlalchemy.dburi = sqlite:///location/of/sqlite.db
43+#sqlalchemy.dburi = postgres://username:password@host/database
44+#sqlalchemy.dburi = mysql://username:password@host/database
45+
46+# Specify the database for SQLObject to use via pylons.database.PackageHub.
47+#sqlobject.dburi = sqlite:///location/of/sqlite.db
48+#sqlobject.dburi = postgres://username:password@host/database
49+#sqlobject.dburi = mysql://username:password@host/database
50+
51+# Only enable debug mode if needed. It's dangerous in production use!
52+set debug = false
53
54=== added directory 'debian/apache-config'
55=== added file 'debian/apache-config/sloecode'
56--- debian/apache-config/sloecode 1970-01-01 00:00:00 +0000
57+++ debian/apache-config/sloecode 2012-09-26 01:36:19 +0000
58@@ -0,0 +1,37 @@
59+#
60+# Apache configuration for sloecode web-app. See comments below for configuration:
61+
62+# set this to the hostname you want to serve with this VirtualHost, or keep it as-is
63+# to serve all VirtualHosts. NOTE: Keeping it as-is will conflict with the default
64+# apache2 site (you will have to disable it manually).
65+<VirtualHost *:80>
66+
67+ # Replace this with the name of your server:
68+ ServerName localhost
69+ # Replace this with the email address of the server admin.
70+ ServerAdmin root@localhost
71+
72+ DocumentRoot /var/www
73+
74+ # Change the first part of this to be where you want the site hosted.
75+ # The default will host the site at the root of your particular hostname.
76+ # NOTE: If you're not hosting this at the host-root, the first part of this
77+ # directive SHOULD NOT have a trailing slash!
78+ WSGIScriptAlias / /usr/share/sloecode/wsgi/sloecode.wsgi
79+
80+ # The first argument to this must be unique across ALL mod_wsgi daemons.
81+ # If you're going to run sloecode on multiple virtual hosts then you may
82+ # need to change the first parameter to be something unique.
83+ #
84+ # The string at the end includes the user and group that the wsgi daemon will
85+ # run as.
86+ WSGIDaemonProcess SloecodeWsgiDaemon user=SLOECODE_USER group=SLOECODE_GROUP
87+ # This must match the first parameter of the line above:
88+ WSGIProcessGroup SloecodeWsgiDaemon
89+
90+ <Directory /usr/share/sloecode/wsgi>
91+ Order allow,deny
92+ Allow from all
93+ </Directory>
94+
95+</VirtualHost>
96
97=== added file 'debian/changelog'
98--- debian/changelog 1970-01-01 00:00:00 +0000
99+++ debian/changelog 2012-09-26 01:36:19 +0000
100@@ -0,0 +1,39 @@
101+sloecode (1.1) precise; urgency=low
102+
103+ * Sloecode error pages no link to missing static resources (Closes: 914550)
104+ * Creating a new project repository and branch no longer fails when running
105+ against bzr 2.1 (Closes: 948483)
106+ * Deleting a branch no works when running against bzrlib 2.1 (Closes:
107+ 965830)
108+ * Help page links now open correctly across Firefix, Chrome, and IE browsers
109+ (Closes: 757157)
110+ * Generated URLs now take into account the application url prefix. (Closes:
111+ 912118)
112+ * Can now delete branches pushed to the Bazaar server. (Closes: 826476)
113+ * Cleaned up static resource locations. (Closes: 912114)
114+ * Add the option to make Bazaar smart-server run under tcpd wrapper (Closes:
115+ 746815)
116+ * Fixed a problem in the Sloecode Person model that made it incompatible
117+ with SQLAlchemy 0.7 (Closes: 814106)
118+ * Configuraing the port for the sloecode web application to listen to is now
119+ much easier. (Closes: 814537)
120+ * Script to generate help pages on installation is now compatible with
121+ python virtual environments (Closes: 814700)
122+ * Page footers no longer cover content for very long pages (Closes: 825606)
123+ * Fixed a crash when a user tried to push to a branch without the correct
124+ permissions (Closes: 860915)
125+ * Static resources linked to by CSS files now use relative paths. (Closes:
126+ 912112)
127+ * Several static resources linked to from CSS files had incorrect case in
128+ path names (Closes: 912113)
129+ * SSH Keys are now stored in /var/lib/sloecode/keys, in accordance with FHS.
130+ * Sloecode now supports both public and private projects.
131+ * Newlines in commit messages are now displayed correctly in HTML pages.
132+
133+ -- Thomi Richards <thomi@perv> Sat, 03 Mar 2012 13:37:24 +1300
134+
135+sloecode (0.1dev) unstable; urgency=low
136+
137+ * Initial release. (Closes: #735628)
138+
139+ -- Thomi Richards <sloecode-dev@lists.launchpad.net> Thu, 14 Apr 2011 16:56:40 +1200
140
141=== added file 'debian/compat'
142--- debian/compat 1970-01-01 00:00:00 +0000
143+++ debian/compat 2012-09-26 01:36:19 +0000
144@@ -0,0 +1,1 @@
145+5
146
147=== added file 'debian/control'
148--- debian/control 1970-01-01 00:00:00 +0000
149+++ debian/control 2012-09-26 01:36:19 +0000
150@@ -0,0 +1,28 @@
151+Source: sloecode
152+Section: vcs
153+Priority: optional
154+Maintainer: Sloecode Developers <sloecode-dev@lists.launchpad.net>
155+Build-Depends: debhelper (>= 7.0.50~), python (>= 2.5),
156+ python-setuptools (>= 0.6b3), python-docutils, po-debconf, python-nose,
157+ python-pylons, python-zope.component, python-pyasn1,
158+ python-crypto, python-repoze.what-plugins, python-jinja2,
159+ python-twisted-conch, python-bzrlib | bzr (<< 2.3)
160+Standards-Version: 3.9.2
161+XS-Python-Version: current, >=2.3
162+
163+Package: sloecode
164+Architecture: all
165+Depends: ${python:Depends}, ${misc:Depends}, python-pylons (>=0.10),
166+ python-sqlalchemy (>=0.6), python-sqlalchemy-ext (>= 0.6), python-jinja2,
167+ python-formencode, python-repoze.who, python-repoze.who-plugins,
168+ python-repoze.what, python-repoze.what-plugins, python-zope.component,
169+ python-zope.event, bzr, dbconfig-common, python-pastescript,
170+ libapache2-mod-wsgi, sqlite3 | mysql-server
171+Recommends: python-mysqldb
172+Pre-Depends: python-twisted-conch
173+XB-Python-Version: ${python:Versions}
174+Description: Bazaar VCS server for small teams
175+ Sloecode is an installable server application for hosting and managing Bazaar
176+ repositories. It provides a web-based user interface to create and manage
177+ teams of developers with several possible levels of access to one or more
178+ projects.
179
180=== added file 'debian/copyright'
181--- debian/copyright 1970-01-01 00:00:00 +0000
182+++ debian/copyright 2012-09-26 01:36:19 +0000
183@@ -0,0 +1,1 @@
184+Copyright 2012 Thomi Richards <thomir@gmail.com>
185
186=== added file 'debian/dbtemplate.ini'
187--- debian/dbtemplate.ini 1970-01-01 00:00:00 +0000
188+++ debian/dbtemplate.ini 2012-09-26 01:36:19 +0000
189@@ -0,0 +1,11 @@
190+; database config file for sloecode. See main sloecode file for other
191+; (non-database) configuration options.
192+
193+[database]
194+dbuser = _DBC_DBUSER_
195+dbpass = _DBC_DBPASS_
196+dbname = _DBC_DBNAME_
197+dbserver = _DBC_DBSERVER_
198+dbport = _DBC_DBPORT_
199+dbtype = _DBC_DBTYPE_
200+dbpath = _DBC_BASEPATH_
201\ No newline at end of file
202
203=== added directory 'debian/po'
204=== added file 'debian/po/POTFILES.in'
205--- debian/po/POTFILES.in 1970-01-01 00:00:00 +0000
206+++ debian/po/POTFILES.in 2012-09-26 01:36:19 +0000
207@@ -0,0 +1,2 @@
208+[type: gettext/rfc822deb] sloecode.templates
209+
210
211=== added file 'debian/po/templates.pot'
212--- debian/po/templates.pot 1970-01-01 00:00:00 +0000
213+++ debian/po/templates.pot 2012-09-26 01:36:19 +0000
214@@ -0,0 +1,76 @@
215+# SOME DESCRIPTIVE TITLE.
216+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
217+# This file is distributed under the same license as the PACKAGE package.
218+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
219+#
220+#, fuzzy
221+msgid ""
222+msgstr ""
223+"Project-Id-Version: sloecode\n"
224+"Report-Msgid-Bugs-To: sloecode@packages.debian.org\n"
225+"POT-Creation-Date: 2012-02-06 14:29+1300\n"
226+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
227+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
228+"Language-Team: LANGUAGE <LL@li.org>\n"
229+"Language: \n"
230+"MIME-Version: 1.0\n"
231+"Content-Type: text/plain; charset=CHARSET\n"
232+"Content-Transfer-Encoding: 8bit\n"
233+
234+#. Type: string
235+#. Description
236+#: ../sloecode.templates:1001
237+msgid "User to run the sloecode WSGI daemon run as:"
238+msgstr ""
239+
240+#. Type: string
241+#. Description
242+#: ../sloecode.templates:1001
243+msgid ""
244+"The sloecode web application runs under an Apache mod_wsgi daemon process. "
245+"You may customize which user this process runs as."
246+msgstr ""
247+
248+#. Type: note
249+#. Description
250+#: ../sloecode.templates:2001
251+msgid "Setup Complete"
252+msgstr ""
253+
254+#. Type: note
255+#. Description
256+#: ../sloecode.templates:2001
257+msgid ""
258+"The sloecode code-forge has been installed. To continue you need to inspect "
259+"the apache site configuration in:"
260+msgstr ""
261+
262+#. Type: note
263+#. Description
264+#: ../sloecode.templates:2001
265+msgid "/etc/apache2/sites-available/sloecode"
266+msgstr ""
267+
268+#. Type: note
269+#. Description
270+#: ../sloecode.templates:2001
271+msgid "and then enable the site by running:"
272+msgstr ""
273+
274+#. Type: note
275+#. Description
276+#: ../sloecode.templates:2001
277+msgid "a2ensite sloecode"
278+msgstr ""
279+
280+#. Type: note
281+#. Description
282+#: ../sloecode.templates:2001
283+msgid "At any time you may re-configure sloecode by running:"
284+msgstr ""
285+
286+#. Type: note
287+#. Description
288+#: ../sloecode.templates:2001
289+msgid "dpkg-reconfigure sloecode"
290+msgstr ""
291
292=== added file 'debian/postinst'
293--- debian/postinst 1970-01-01 00:00:00 +0000
294+++ debian/postinst 2012-09-26 01:36:19 +0000
295@@ -0,0 +1,95 @@
296+#!/bin/sh
297+set -e
298+
299+# for all DB types, generate a config file:
300+dbc_generate_include="template:/etc/sloecode/database.ini"
301+dbc_generate_include_args="-o template_infile=/etc/sloecode/dbtemplate.ini --ucf"
302+dbc_generate_include_perms="644"
303+
304+. /usr/share/debconf/confmodule
305+# source dbconfig-common stuff
306+. /usr/share/dbconfig-common/dpkg/postinst
307+dbc_go sloecode $@ || true
308+
309+# Finally, create the public/private key pair so we can start the smart server
310+# 'Here' document for creating keys in python:
311+OUTFILE=`tempfile -s ".py"`
312+(
313+cat << 'EOF'
314+#!/usr/bin/python
315+
316+"""
317+Generates 1024-bit RSA key pairs for the sloecode server. We could use
318+ssh-keygen for this, but it's not guaranteed to be installed, whereas
319+python-twisted.conch is.
320+
321+Keys are only generated if "install" is the first argument to this script
322+and the key files do not already exist.
323+"""
324+import getpass, os, socket
325+from os.path import dirname, exists
326+from os import system
327+from sys import argv
328+
329+from twisted.conch.ssh import keys, common
330+from twisted.python import filepath, randbytes
331+
332+from Crypto.PublicKey import RSA
333+
334+KEY_LENGTH = 1024
335+FILE_PATH='/var/lib/sloecode/keys/sloecode_rsa'
336+
337+if not exists(FILE_PATH) and not exists(FILE_PATH+'.pub'):
338+ #print 'Generating public/private rsa key pair.'
339+ key = RSA.generate(KEY_LENGTH, randbytes.secureRandom)
340+
341+ keyObj = keys.Key(key)
342+ comment = '%s@%s' % (getpass.getuser(), socket.gethostname())
343+
344+ # Pass a password string as the second argument to toString() below to set
345+ # a key password.
346+ filepath.FilePath(FILE_PATH).setContent(keyObj.toString('openssh', None))
347+ os.chmod(FILE_PATH, 0600)
348+
349+ filepath.FilePath(FILE_PATH + '.pub').setContent(
350+ keyObj.public().toString('openssh', comment))
351+ os.chmod(FILE_PATH+'.pub', 0644)
352+
353+ #print "Key pair stored in: " + dirname(FILE_PATH)
354+ #print "Key fingerprint is: " + keyObj.fingerprint()
355+EOF
356+)>$OUTFILE
357+
358+python $OUTFILE
359+rm $OUTFILE
360+
361+
362+# get user & group config parameters:
363+db_get sloecode/run_as_user
364+SC_USER=$RET
365+
366+#db_get sloecode/run_as_group
367+#SC_GROUP=$RET
368+
369+# add user and group to the system:
370+if ! getent passwd $SC_USER >/dev/null; then
371+ useradd -r $RET
372+ #groupadd -r $RET
373+fi
374+
375+# modify apache config file appropriately:
376+sed -i "s/SLOECODE_USER/${SC_USER}/" /etc/apache2/sites-available/sloecode
377+sed -i "s/SLOECODE_GROUP/${SC_USER}/" /etc/apache2/sites-available/sloecode
378+
379+# change ownership of bazaar staging area:
380+chown -R $SC_USER.$SC_USER /srv/sloecode
381+# and the pylons sloecode cache directory:
382+chown -R $SC_USER.$SC_USER /var/cache/pylons-sloecode
383+
384+# run any auto-generated debhelper commands:
385+# this will start the sloecode servers (and maybe do other things as well)
386+#DEBHELPER#
387+
388+# the twistd app leaves at least one file descriptor open, which cases the debconf
389+# front-end to hang, which means I need to do this manually:
390+db_stop
391
392=== added file 'debian/postrm'
393--- debian/postrm 1970-01-01 00:00:00 +0000
394+++ debian/postrm 2012-09-26 01:36:19 +0000
395@@ -0,0 +1,32 @@
396+#!/bin/sh
397+set -e
398+
399+# postrm maintainer script for sloecode
400+
401+# source debconf stuff
402+. /usr/share/debconf/confmodule
403+# source dbconfig-common stuff
404+. /usr/share/dbconfig-common/dpkg/postrm
405+dbc_go sloecode $@
406+
407+cf="/etc/sloecode/database.ini"
408+if [ "$1" = "purge" ]; then
409+ rm -f $cf
410+ if which ucf >/dev/null 2>&1; then
411+ ucf --purge $cf
412+ fi
413+ # Remove user and group we ran the sloecode wsgi daemon as:
414+ db_get sloecode/run_as_user
415+ SC_USER=$RET
416+ if getent passwd $SC_USER >/dev/null; then
417+ userdel $SC_USER
418+ fi
419+ db_get sloecode/run_as_user
420+ SC_GROUP=$RET
421+ if getent group $SC_GROUP >/dev/null; then
422+ groupdel $SC_GROUP
423+ fi
424+fi
425+
426+# run any auto-generated debhelper commands:
427+#DEBHELPER#
428
429=== added file 'debian/prerm'
430--- debian/prerm 1970-01-01 00:00:00 +0000
431+++ debian/prerm 2012-09-26 01:36:19 +0000
432@@ -0,0 +1,12 @@
433+#!/bin/sh
434+set -e
435+# prerm maintainer script for sloecode
436+
437+# source debconf stuff
438+. /usr/share/debconf/confmodule
439+# source dbconfig-common stuff
440+. /usr/share/dbconfig-common/dpkg/prerm
441+dbc_go sloecode $@
442+
443+# run any auto-generated debhelper commands:
444+#DEBHELPER#
445
446=== added file 'debian/pycompat'
447--- debian/pycompat 1970-01-01 00:00:00 +0000
448+++ debian/pycompat 2012-09-26 01:36:19 +0000
449@@ -0,0 +1,1 @@
450+2
451
452=== added file 'debian/rules'
453--- debian/rules 1970-01-01 00:00:00 +0000
454+++ debian/rules 2012-09-26 01:36:19 +0000
455@@ -0,0 +1,11 @@
456+#!/usr/bin/make -f
457+
458+export DH_VERBOSE=1
459+
460+%:
461+ dh $@ --with python2 --buildsystem=python_distutils
462+
463+override_dh_auto_configure:
464+ make help
465+ dh_auto_configure -- --buildsystem=python_distutils
466+
467
468=== added file 'debian/sloecode.config'
469--- debian/sloecode.config 1970-01-01 00:00:00 +0000
470+++ debian/sloecode.config 2012-09-26 01:36:19 +0000
471@@ -0,0 +1,25 @@
472+#!/bin/sh
473+set -e
474+
475+# config maintainer script for sloecode
476+
477+# source debconf stuff
478+. /usr/share/debconf/confmodule
479+
480+# dbconfig-common stuff:
481+if [ -f /usr/share/dbconfig-common/dpkg/config ]; then
482+ # we support mysql and sqlite3
483+ dbc_dbtypes="mysql, sqlite3"
484+ # for sqlite, store the database next to bazaar repos
485+ dbc_basepath="/srv/sloecode/"
486+
487+
488+ # source dbconfig-common stuff
489+ . /usr/share/dbconfig-common/dpkg/config
490+ dbc_go sloecode $@ || true
491+fi
492+
493+# get user to run wsgi daemon as:
494+db_input high sloecode/run_as_user || true
495+db_go || true
496+
497
498=== added file 'debian/sloecode.dirs'
499--- debian/sloecode.dirs 1970-01-01 00:00:00 +0000
500+++ debian/sloecode.dirs 2012-09-26 01:36:19 +0000
501@@ -0,0 +1,10 @@
502+/var/cache/pylons-sloecode
503+/var/log/sloecode
504+/var/lib/sloecode
505+/var/lib/sloecode/keys
506+/srv/sloecode
507+/etc/sloecode
508+/usr/share/sloecode/wsgi
509+/usr/share/sloecode/dbpatches
510+/usr/share/sloecode/dbpatches/patches
511+/usr/share/dbconfig-common/data/sloecode/install
512
513=== added file 'debian/sloecode.init'
514--- debian/sloecode.init 1970-01-01 00:00:00 +0000
515+++ debian/sloecode.init 2012-09-26 01:36:19 +0000
516@@ -0,0 +1,66 @@
517+#!/bin/sh
518+#
519+### BEGIN INIT INFO
520+# Provides: sloecode
521+# Required-Start: $network $local_fs
522+# Required-Stop: $network $local_fs
523+# Default-Start: 2 3 4 5
524+# Default-Stop: 0 1 6
525+# Short-Description: Start and stop the Pylons-based application 'sloecode'
526+### END INIT INFO
527+
528+export SLOECODE_CONFIG="/etc/sloecode/production.ini"
529+PASTE_OPTIONS="--pid-file=/var/run/sloecode-webapp --log-file /var/log/sloecode/webapp.log --daemon $SLOECODE_CONFIG"
530+TWISTD_OPTIONS="--pidfile=/var/run/sloecode-smartserver --logfile=/var/log/sloecode/smartserver.log --no_save --python /etc/default/bzrssh.tac"
531+
532+smartserver_start()
533+{
534+ twistd $TWISTD_OPTIONS
535+}
536+
537+smartserver_stop()
538+{
539+ if [ -e /var/run/sloecode-smartserver ]
540+ then
541+ kill `cat /var/run/sloecode-smartserver` || true
542+ fi
543+}
544+
545+smartserver_restart()
546+{
547+ smartserver_stop
548+ smartserver_start
549+}
550+
551+
552+case "$1" in
553+ start)
554+ smartserver_start
555+ echo "Starting Sloecode"
556+ ;;
557+
558+ stop)
559+ smartserver_stop
560+ echo "Stopping Sloecode"
561+ ;;
562+
563+ reload)
564+ smartserver_restart
565+ ;;
566+
567+ force-reload)
568+ smartserver_restart
569+ ;;
570+
571+ restart)
572+ smartserver_restart
573+ ;;
574+
575+ status)
576+ # TODO: check smartserver status by looking at pid file.
577+ ;;
578+
579+ *)
580+ echo "Usage: $0 {stop|start|reload}" >&2
581+ ;;
582+esac
583
584=== added file 'debian/sloecode.install'
585--- debian/sloecode.install 1970-01-01 00:00:00 +0000
586+++ debian/sloecode.install 2012-09-26 01:36:19 +0000
587@@ -0,0 +1,11 @@
588+production.ini /etc/sloecode/
589+sloecode/sshserver/bzrssh.tac /etc/default/
590+
591+dbpatches/schema/sqlite3 /usr/share/dbconfig-common/data/sloecode/install/
592+dbpatches/schema/mysql /usr/share/dbconfig-common/data/sloecode/install/
593+
594+dbpatches/patches/* /usr/share/sloecode/dbpatches/patches/
595+
596+debian/sloecode.wsgi /usr/share/sloecode/wsgi/
597+debian/dbtemplate.ini /etc/sloecode/
598+debian/apache-config/sloecode /etc/apache2/sites-available/
599
600=== added file 'debian/sloecode.links'
601--- debian/sloecode.links 1970-01-01 00:00:00 +0000
602+++ debian/sloecode.links 2012-09-26 01:36:19 +0000
603@@ -0,0 +1,1 @@
604+/etc/sloecode/production.ini /etc/default/sloecode-production.ini
605
606=== added file 'debian/sloecode.templates'
607--- debian/sloecode.templates 1970-01-01 00:00:00 +0000
608+++ debian/sloecode.templates 2012-09-26 01:36:19 +0000
609@@ -0,0 +1,24 @@
610+Template: sloecode/run_as_user
611+Type: string
612+Default: sloecode
613+_Description: User to run the sloecode WSGI daemon run as:
614+ The sloecode web application runs under an Apache mod_wsgi daemon process. You
615+ may customize which user this process runs as.
616+
617+Template: sloecode/setup_complete
618+Type: note
619+_Description: Setup Complete
620+ The sloecode code-forge has been installed. To continue you need to inspect
621+ the apache site configuration in:
622+ .
623+ /etc/apache2/sites-available/sloecode
624+ .
625+ and then enable the site by running:
626+ .
627+ a2ensite sloecode
628+ .
629+ At any time you may re-configure sloecode by running:
630+ .
631+ dpkg-reconfigure sloecode
632+
633+
634
635=== added file 'debian/sloecode.wsgi'
636--- debian/sloecode.wsgi 1970-01-01 00:00:00 +0000
637+++ debian/sloecode.wsgi 2012-09-26 01:36:19 +0000
638@@ -0,0 +1,4 @@
639+from paste.deploy import loadapp
640+from os.path import realpath
641+application = loadapp('config:' + realpath('/etc/default/sloecode-production.ini'))
642+
643
644=== added directory 'debian/source'
645=== added file 'debian/source/lintian-overrides'
646--- debian/source/lintian-overrides 1970-01-01 00:00:00 +0000
647+++ debian/source/lintian-overrides 2012-09-26 01:36:19 +0000
648@@ -0,0 +1,2 @@
649+# This is where sloecode puts bzr repositories.
650+sloecode: dir-or-file-in-srv
651
652=== modified file 'development.ini'
653--- development.ini 2012-04-22 06:35:21 +0000
654+++ development.ini 2012-09-26 01:36:19 +0000
655@@ -17,6 +17,7 @@
656 bzr_person_root = %(bzr_root)s/person
657 bzr_deleted_project_root = %(bzr_root)s/deleted_project
658 bzr_deleted_person_root = %(bzr_root)s/deleted_person
659+bzr_template_root = %(bzr_root)s/template
660
661 # Change this to change the port the sloecode web interface runs on:
662 http_server_port = 5000
663@@ -82,8 +83,13 @@
664 handlers =
665 qualname = sloecode
666
667+[logger_wikkid]
668+level = DEBUG
669+handlers =
670+qualname = wikkid
671+
672 [logger_sqlalchemy]
673-level = INFO
674+level = WARN
675 handlers =
676 qualname = sqlalchemy.engine
677 # "level = INFO" logs SQL queries.
678
679=== modified file 'sloecode/bzr/display.py'
680--- sloecode/bzr/display.py 2012-05-01 04:14:51 +0000
681+++ sloecode/bzr/display.py 2012-09-26 01:36:19 +0000
682@@ -99,13 +99,17 @@
683 """Get the branch name.
684
685 In fact this returns the branch nickname, since the branch name
686- seems to always be set to None
687+ seems to always be set to None.
688+
689 """
690 return html_escape(self.branch.get_config().get_nickname())
691
692+ def get_bzrlib_branch(self):
693+ """Get the bzrlib.branch.Branch."""
694+ return self.branch
695+
696 def get_log(self):
697- """Get a log of this branch.
698- """
699+ """Get a log of this branch."""
700 from bzrlib.log import Logger, make_log_request_dict
701
702 buf = StringIO()
703
704=== modified file 'sloecode/bzr/factory.py'
705--- sloecode/bzr/factory.py 2012-05-01 04:14:51 +0000
706+++ sloecode/bzr/factory.py 2012-09-26 01:36:19 +0000
707@@ -51,7 +51,7 @@
708 to_transport.ensure_base()
709 newdir = format.initialize_on_transport(to_transport)
710 repo = newdir.create_repository(shared=True)
711- repo.set_make_working_trees(False)
712+ repo.set_make_working_trees(True)
713 return repo
714
715
716@@ -94,23 +94,28 @@
717 def create_shared_repository_for_project(self, project_name):
718 """Create a repository for the project with a trunk branch."""
719 dir_name = self.get_project_repo_dir(project_name)
720- if os.path.exists(dir_name):
721- logger.warning("Path '%s' already exists, not creating a new repository for project '%s'",
722- dir_name, project_name)
723- else:
724- repo = create_shared_repo(dir_name)
725- # Now to create the trunk.
726- try:
727- to_transport = repo.user_transport.clone('trunk')
728- except AttributeError:
729- # Fixes lp:948483 bzrlib version 2.1 (which is current in debian
730- # squeeze) uses a different name for this:
731- to_transport = repo._transport.clone('trunk')
732- format = bzrdir.format_registry.make_bzrdir('default')
733- branch = bzrdir.BzrDir.create_branch_convenience(
734- to_transport.base, format=format,
735- possible_transports=[to_transport])
736- branch.set_append_revisions_only(True)
737+ repo = create_shared_repo(dir_name)
738+ return repo
739+
740+ def create_shared_repository_for_templates(self):
741+ """Create a repository to store global templates in."""
742+ dir_name = self.get_template_dir()
743+ repo = create_shared_repo(dir_name)
744+ return repo
745+
746+ def create_branch_on_repository (self, repo, branch_name):
747+ """Create a branch for the project."""
748+ try:
749+ to_transport = repo.user_transport.clone(branch_name)
750+ except AttributeError:
751+ # Fixes lp:948483 bzrlib version 2.1 (which is current in debian
752+ # squeeze) uses a different name for this:
753+ to_transport = repo._transport.clone(branch_name)
754+ format = bzrdir.format_registry.make_bzrdir('default')
755+ branch = bzrdir.BzrDir.create_branch_convenience(
756+ to_transport.base, format=format,
757+ possible_transports=[to_transport])
758+ branch.set_append_revisions_only(True)
759
760 def get_repository_for_project(self, project_name):
761 """Get a bzrlib.repository.Repository object for a given project
762
763=== modified file 'sloecode/config/environment.py'
764--- sloecode/config/environment.py 2012-05-01 04:14:51 +0000
765+++ sloecode/config/environment.py 2012-09-26 01:36:19 +0000
766@@ -33,7 +33,6 @@
767 from sloecode.config.routing import make_map
768 from sloecode.model import init_model, maybe_upgrade_database
769
770-
771 def load_environment(global_conf, app_conf):
772 """Configure the Pylons environment via the ``pylons.config``
773 object
774
775=== modified file 'sloecode/config/routing.py'
776--- sloecode/config/routing.py 2012-05-01 04:14:51 +0000
777+++ sloecode/config/routing.py 2012-09-26 01:36:19 +0000
778@@ -40,13 +40,14 @@
779
780 # CUSTOM ROUTES HERE
781
782-
783 # Map / to the index controller:
784 map.connect('/', controller='index', action='front_page')
785 # Map /p/foo
786+ map.connect('/p/{project_name}/wiki/+newfile', controller='wiki', action='new_file', postfix='/+newfile')
787+ map.connect('/p/{project_name}/wiki/{path:.*}', controller='wiki', action='wiki')
788+ map.connect('/p/{project_name}/wiki', controller='wiki', action='wiki')
789 map.connect('/p/{project_name}/{action}', controller='project')
790 map.connect('/p/{project_name}', controller='project', action='index')
791-
792 # map '/me' to the portal page. This allows us to show the user portal
793 # no matter who logs in:
794 map.connect('/me', controller='person', action='me')
795@@ -59,6 +60,14 @@
796 map.connect('/a/person/{action}', controller='admin/person')
797 map.connect('/a/person/{action}/{id}', controller='admin/person')
798
799+ map.connect('/a/template', controller='admin/wiki', action='list_templates')
800+ map.connect('/a/template/+load', controller='wiki', action='load_template')
801+ map.connect('/a/template/+newfile', controller='admin/wiki', action='new_file')
802+ map.connect('/a/template/{filename}', controller='admin/wiki', action='view_template')
803+ map.connect('/a/template/{filename}/+edit', controller='admin/wiki', action='edit_template')
804+ # Don't actually need the filename in this map however it makes the URL nicer.
805+ map.connect('/a/template/{filename}/+save', controller='admin/wiki', action='save_template')
806+
807 # TODO: I ahve no idea why we need this. It seems that the xmlrpc controller
808 # should be found without needing an explicit route to it, but I cannot seem
809 # to make it work.
810
811=== modified file 'sloecode/controllers/admin/project.py'
812--- sloecode/controllers/admin/project.py 2012-05-01 04:14:51 +0000
813+++ sloecode/controllers/admin/project.py 2012-09-26 01:36:19 +0000
814@@ -18,21 +18,16 @@
815 import logging
816 import formencode
817 import formencode.htmlfill
818-
819+import sloecode.lib.helpers as h
820 from pylons import config, request
821 from pylons.controllers.util import redirect
822-
823 from repoze.what.plugins.pylonshq import ControllerProtector
824-
825-from webhelpers.paginate import Page
826-
827 from sloecode.lib.base import BaseController
828 from sloecode.model.project import Project, ProjectSchema
829 from sloecode.model.site_role import PROJECT_ADMIN
830 from sloecode.model.meta import Session
831 from sloecode.lib.predicates import has_site_role
832-import sloecode.lib.helpers as h
833-
834+from webhelpers.paginate import Page
835 log = logging.getLogger(__name__)
836
837
838@@ -74,8 +69,11 @@
839 Session.commit()
840 h.flash("Project Added Successfully")
841 # Create a shared repo for the project.
842- config['bzr.factory'].create_shared_repository_for_project(
843+ repo = config['bzr.factory'].create_shared_repository_for_project(
844 new_project.name)
845+ config['bzr.factory'].create_branch_on_repository (repo,'trunk')
846+ config['bzr.factory'].create_branch_on_repository (repo,'wiki')
847+
848 return redirect(h.url(controller='admin/project', action='retrieve'))
849
850 def retrieve(self):
851@@ -88,7 +86,8 @@
852 def update(self, id):
853 "Render project update form page."
854
855- return self.render('/admin/project-update.html', {'project': Project.get(id=id)[0]})
856+ return self.render('/admin/project-update.html',
857+ {'project': Project.get(id=id)[0]})
858
859 def process_update(self, id):
860 "Process project update request."
861
862=== added file 'sloecode/controllers/admin/wiki.py'
863--- sloecode/controllers/admin/wiki.py 1970-01-01 00:00:00 +0000
864+++ sloecode/controllers/admin/wiki.py 2012-09-26 01:36:19 +0000
865@@ -0,0 +1,91 @@
866+# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
867+#
868+# This program is free software: you can redistribute it and/or modify
869+# it under the terms of the GNU General Public License as published by
870+# the Free Software Foundation, either version 3 of the License, or
871+# (at your option) any later version.
872+
873+# This program is distributed in the hope that it will be useful,
874+# but WITHOUT ANY WARRANTY; without even the implied warranty of
875+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
876+# GNU General Public License for more details.
877+
878+# You should have received a copy of the GNU General Public License
879+# along with this program. If not, see <http://www.gnu.org/licenses/>.
880+
881+# Copyright 2012 Sloecode Developers
882+
883+
884+import urllib
885+import formencode
886+import formencode.htmlfill
887+import sloecode.lib.helpers as h
888+
889+from pylons import request
890+from pylons.controllers.util import redirect
891+from repoze.what.plugins.pylonshq import ControllerProtector
892+from sloecode.lib.predicates import has_site_role
893+from sloecode.lib.base import BaseController
894+from sloecode.model.site_role import PROJECT_ADMIN
895+from sloecode.model.template import Template, TemplateSchema, get_template_names
896+from sloecode.model.meta import Session
897+
898+
899+@ControllerProtector(has_site_role(PROJECT_ADMIN))
900+class WikiController(BaseController):
901+ """Controller for wiki related operations."""
902+
903+ def edit_template(self, filename):
904+ """Edit wiki page templates and save wiki templates."""
905+
906+ template = Template.get(name=filename)
907+ existing_template = template[0] if template else None
908+ prefix = urllib.unquote(h.url.current())
909+ prefix = prefix[1:-len("/+edit")]
910+
911+ return self.render('admin/template-edit.html',
912+ {'template': existing_template,
913+ 'path': prefix})
914+
915+ def save_template(self, filename):
916+ """Save templates into the database."""
917+ schema = TemplateSchema
918+ try:
919+ form_result = schema.to_python(request.params)
920+ except formencode.Invalid, e:
921+ errors = e.unpack_errors()
922+ return formencode.htmlfill.render(self.edit_template(filename), defaults=request.params,
923+ errors=errors)
924+
925+ #If there is already a template in the database with this name then pull it
926+ #out and overwrite the values in it, otherwise create a new template.
927+
928+ templates = Template.get(name=form_result['old_name'])
929+ new_template = templates[0] if templates else Template()
930+ new_template.name = form_result['name']
931+ new_template.save_location = form_result['save_location']
932+ new_template.description = form_result['description']
933+ new_template.content = form_result['content']
934+
935+ #If no templates were found to begin with then we want to add the new template
936+ #to the DB, otherwise we are just overwriting an existing one.
937+ if templates == []:
938+ Session.add(new_template)
939+ Session.commit()
940+ return redirect(h.url(controller='admin/wiki', action='view_template',
941+ filename=form_result['name']))
942+
943+ def list_templates(self):
944+ """Return a list of all the templates stored in the database."""
945+ template_names = get_template_names()
946+ return self.render('/admin/template-viewall.html',
947+ {'template_names': template_names})
948+
949+ def view_template(self, filename):
950+ """View an individual template."""
951+
952+ templates = Template.get(name=filename)
953+ template = templates[0] if templates else None
954+ return self.render('/admin/template-view.html',
955+ {'template' : template})
956+
957
958=== modified file 'sloecode/controllers/project.py'
959--- sloecode/controllers/project.py 2012-05-01 04:14:51 +0000
960+++ sloecode/controllers/project.py 2012-09-26 01:36:19 +0000
961@@ -14,24 +14,19 @@
962 # along with this program. If not, see <http://www.gnu.org/licenses/>.
963
964 # Copyright 2012 Sloecode Developers
965-
966-import logging
967+import sloecode.lib.helpers as h
968
969 from pylons import request, config
970 from pylons.controllers.util import redirect, abort
971 from repoze.what.plugins.pylonshq import ActionProtector
972 from repoze.what.predicates import Any
973-
974 from sloecode.lib.base import BaseController
975+from sloecode.lib.predicates import has_site_role, has_project_read_access, has_project_write_access
976+from sloecode.model.membership import Membership
977+from sloecode.model.meta import Session
978+from sloecode.model.person import Person
979 from sloecode.model.project import Project
980-from sloecode.model.person import Person
981-from sloecode.model.membership import Membership
982 from sloecode.model.site_role import PROJECT_ADMIN
983-from sloecode.model.meta import Session
984-from sloecode.lib.predicates import has_site_role, has_project_read_access, has_project_write_access
985-import sloecode.lib.helpers as h
986-
987-log = logging.getLogger(__name__)
988
989
990 class ProjectController(BaseController):
991@@ -39,12 +34,12 @@
992 model.
993
994 This includes basic CRUD information.
995+
996 """
997
998 @ActionProtector(Any(has_site_role(PROJECT_ADMIN), has_project_read_access()))
999 def index(self, project_name):
1000- """Render project details page.
1001- """
1002+ """Render project details page."""
1003 projects = Project.get(name=project_name)
1004 existing_project = projects[0] if projects else None
1005
1006@@ -59,6 +54,7 @@
1007 # Grab the project repository object. This is actually an
1008 # adaptor that hides the bzrlib implementation.
1009 repo = config['bzr.factory'].get_repository_for_project(project_name)
1010+
1011 return self.render('/project-details.html',
1012 {'project': existing_project,
1013 'user_role': user_role,
1014
1015=== added file 'sloecode/controllers/wiki.py'
1016--- sloecode/controllers/wiki.py 1970-01-01 00:00:00 +0000
1017+++ sloecode/controllers/wiki.py 2012-09-26 01:36:19 +0000
1018@@ -0,0 +1,145 @@
1019+import logging
1020+import sloecode.lib.helpers as h
1021+import urllib
1022+
1023+from pylons import request, config
1024+from pylons.controllers.util import abort
1025+from repoze.what.plugins.pylonshq import ActionProtector
1026+from repoze.what.predicates import Any
1027+from sloecode.lib.base import BaseController
1028+from sloecode.lib.predicates import has_site_role, has_project_write_access
1029+from sloecode.model.project import Project
1030+from sloecode.model.site_role import PROJECT_ADMIN
1031+from sloecode.model.template import Template, get_template_names
1032+from sloecode.wikkid_view_adapters import get_page_fragments
1033+from wikkid.app import WikkidApp
1034+from wikkid.user.bzr import create_bzr_user_from_author_string
1035+from wikkid.filestore.bzr import BranchFileStore
1036+from wikkid.context import ExecutionContext
1037+
1038+
1039+log = logging.getLogger(__name__)
1040+
1041+
1042+def _get_context(path):
1043+ """Returns an ExecutionContext with prefix as the script_name.
1044+
1045+ Sets prefix to be the url minus the wiki path
1046+
1047+ """
1048+ prefix = urllib.unquote(h.url.current())
1049+ if len(path) > 0:
1050+ prefix = prefix[:-(len(path) + 1)]
1051+ log.info("Prefix: '%s', current url: '%s'", prefix, h.url.current())
1052+ return ExecutionContext(script_name=prefix, default_format="markdown")
1053+
1054+
1055+def _change_home_crumb_name(crumbs):
1056+ """Change the title of the 'Home' crumb to 'Wiki Homepage'.
1057+ This works as it is always the first in the list.
1058+
1059+ """
1060+ changed_crumbs = []
1061+ #Pull the crumb off the end and change it.
1062+ home_crumb = crumbs.next()
1063+ home_crumb.title = "Wiki Homepage"
1064+ changed_crumbs.append(home_crumb)
1065+ #Add the rest of the crumbs to the list.
1066+ for crumb in crumbs:
1067+ changed_crumbs.append(crumb)
1068+ return changed_crumbs
1069+
1070+
1071+class WikiController(BaseController):
1072+ """Controller for non-administrative wiki actions."""
1073+ def serve_wiki_page(self, path, branch, view_name=None):
1074+ """Returns the fragments from the determined Wikkid view adapter.
1075+
1076+ Alternatively, the Wikkid view can be specified as a parameter.
1077+
1078+ """
1079+ context = _get_context(path)
1080+ #Create the WikkipApp and filestore
1081+ wikkid_filestore = BranchFileStore(branch.get_bzrlib_branch())
1082+ app = WikkidApp(wikkid_filestore, execution_context=context)
1083+
1084+ #Get the currently logged in user
1085+ environ = request.environ
1086+ user = environ['repoze.who.identity'].get('user')
1087+ #Make a fake Wikkid user from the currently logged in sloecode user
1088+ environ['wikkid.user'] = create_bzr_user_from_author_string("%s <%s>" % (user.name, user.email))
1089+
1090+ app_request, path = app.preprocess_environ(environ)
1091+ log.info("Path: " + path)
1092+ fragments = get_page_fragments(app, environ)
1093+
1094+ #Go through the WikkidApp for static files of if view adapter can't
1095+ # be found (mostly used for binary/images)
1096+ if (path.startswith('/static/')) or (fragments is None):
1097+ return app(environ, self.start_response)
1098+ if fragments['breadcrumbs'] is not None:
1099+ fragments['breadcrumbs'] = _change_home_crumb_name(fragments['breadcrumbs'])
1100+ return fragments
1101+
1102+ @ActionProtector(Any(has_site_role(PROJECT_ADMIN), has_project_write_access()))
1103+ def wiki(self, project_name, path=''):
1104+ """Render the wiki for the project.
1105+
1106+ This includes everything that uses a Wikkid View.
1107+
1108+ """
1109+ projects = Project.get(name=project_name)
1110+ existing_project = projects[0] if projects else None
1111+ if existing_project:
1112+ repo = config['bzr.factory'].get_repository_for_project(project_name)
1113+ branch = repo.get_branch('wiki')
1114+ if branch is not None:
1115+ fragments = self.serve_wiki_page(path, branch)
1116+
1117+ #fragments can sometimes return a WikkidApp response.
1118+ #We simply want to return this if this is the case
1119+ if isinstance(fragments, dict):
1120+ #Get template location from fragments['template']
1121+ return self.render(fragments['template'],
1122+ {'fragments': fragments})
1123+ return fragments
1124+ abort(404)
1125+
1126+ @ActionProtector(Any(has_site_role(PROJECT_ADMIN), has_project_write_access()))
1127+ def new_file(self, project_name, postfix):
1128+ """Display dialogue for creating a new wiki file.
1129+
1130+ postfix: The 'action' part of the url that matches this method's route.
1131+
1132+ """
1133+ #Construct the current sloecode+wikkid path
1134+ prefix = urllib.unquote(h.url.current())
1135+ prefix = prefix[1:-len(postfix)]
1136+ log.info("Prefix: '%s', current url: '%s'", prefix, h.url.current())
1137+ #Test that the project exists and has a branch called 'wiki'
1138+ projects = Project.get(name=project_name)
1139+ existing_project = projects[0] if projects else None
1140+ if existing_project:
1141+ repo = config['bzr.factory'].get_repository_for_project(project_name)
1142+ branch = repo.get_branch('wiki')
1143+ if branch is not None:
1144+ template_names = ['Please Select a Template']
1145+ template_names.extend(get_template_names())
1146+ return self.render('/wiki/newfile.html',
1147+ {'project': existing_project,
1148+ 'repo': repo,
1149+ 'path': prefix,
1150+ 'template_names' : template_names })
1151+ abort(404)
1152+
1153+ def load_template(self):
1154+ """Loads a template to the form."""
1155+ try:
1156+ template_name = urllib.quote(request.params['template_name'])
1157+ except KeyError:
1158+ abort(406)
1159+ templates = Template.get(name=template_name)
1160+ template = templates[0] if templates else None
1161+ log.info(vars(template))
1162+ return self.render('/wiki/load-template.html',
1163+ {'template': template})
1164
1165=== modified file 'sloecode/lib/base.py'
1166--- sloecode/lib/base.py 2012-05-01 04:14:51 +0000
1167+++ sloecode/lib/base.py 2012-09-26 01:36:19 +0000
1168@@ -24,9 +24,11 @@
1169 from pylons.templating import render_jinja2 as render
1170 from pylons import request
1171
1172+import sloecode.lib.helpers as h
1173 from sloecode.model.meta import Session
1174
1175
1176+
1177 class BaseController(WSGIController):
1178 "Base class for all sloecode controllers."
1179
1180
1181=== modified file 'sloecode/lib/helpers.py'
1182--- sloecode/lib/helpers.py 2012-05-01 04:14:51 +0000
1183+++ sloecode/lib/helpers.py 2012-09-26 01:36:19 +0000
1184@@ -29,6 +29,7 @@
1185 from webhelpers.html.tags import stylesheet_link, javascript_link, ModelTags, hidden, select
1186 from webhelpers.html.tags import checkbox, image, textarea
1187
1188+
1189 # url allows us to generate URLs for specific controllers on disk, which
1190 # makes it easier to reorganise routes without having to touch template code:
1191 # Those of you who are used to url should use this in exactly the same way.
1192@@ -46,9 +47,11 @@
1193 # a simple link_to implementation that handles a confirm kwarg that prints
1194 # very simple javascript asking the user if they really want to continue.
1195 from webhelpers.html.tags import link_to as _link_to
1196+
1197 def link_to(label, url, **kwargs):
1198 """A patched version of the link_to function that accepts a confirm
1199 parameter.
1200+
1201 """
1202 # only add JS if the user has not already put something in onclick handler
1203 if 'confirm' in kwargs and 'onclick' not in kwargs:
1204
1205=== modified file 'sloecode/model/__init__.py'
1206--- sloecode/model/__init__.py 2012-05-01 04:14:51 +0000
1207+++ sloecode/model/__init__.py 2012-09-26 01:36:19 +0000
1208@@ -29,6 +29,7 @@
1209 from sloecode.model.project import Project
1210 from sloecode.model.site_role import SiteRole
1211 from sloecode.model.version import DatabaseVersion
1212+from sloecode.model.template import Template
1213
1214 logger = logging.getLogger(__name__)
1215 CURRENT_SCHEMA_VERSION=4
1216
1217=== modified file 'sloecode/model/meta.py'
1218--- sloecode/model/meta.py 2012-05-01 04:14:51 +0000
1219+++ sloecode/model/meta.py 2012-09-26 01:36:19 +0000
1220@@ -40,6 +40,8 @@
1221
1222 # A simple mix-in class that contains several methods that wrap sqlalchemy
1223 # methods, making common operations a bit easier:
1224+
1225+
1226 class QueryMixin(object):
1227 """A mix-in class that provides easier query methods than the default
1228 SQLAlchemy ones.
1229@@ -47,8 +49,14 @@
1230
1231 @classmethod
1232 def get(cls, **kwargs):
1233- """Wrap the SQLAlchemy crap up in this function. Return a list of Person
1234- objects that match the args passed in.
1235+ """Wrap the SQLAlchemy crap up in this function.
1236+
1237+ Return a list of Person objects that match the args passed in.
1238+
1239 """
1240 return Session.query(cls).filter_by(**kwargs).all()
1241
1242+ @classmethod
1243+ def get_one(cls, **kwargs):
1244+ """Return ONE object"""
1245+ return Session.query(cls).filter_by(**kwargs).first()
1246
1247=== added file 'sloecode/model/template.py'
1248--- sloecode/model/template.py 1970-01-01 00:00:00 +0000
1249+++ sloecode/model/template.py 2012-09-26 01:36:19 +0000
1250@@ -0,0 +1,72 @@
1251+# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
1252+#
1253+# This program is free software: you can redistribute it and/or modify
1254+# it under the terms of the GNU General Public License as published by
1255+# the Free Software Foundation, either version 3 of the License, or
1256+# (at your option) any later version.
1257+
1258+# This program is distributed in the hope that it will be useful,
1259+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1260+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1261+# GNU General Public License for more details.
1262+
1263+# You should have received a copy of the GNU General Public License
1264+# along with this program. If not, see <http://www.gnu.org/licenses/>.
1265+
1266+# Copyright 2012 Sloecode Developers
1267+
1268+"""Template model."""
1269+import formencode
1270+import re
1271+
1272+from sloecode.model.meta import Base, QueryMixin
1273+from sqlalchemy import Column
1274+from sqlalchemy.types import Integer, Text
1275+
1276+
1277+def get_template_names():
1278+ templates = Template.get()
1279+ template_names = []
1280+ for template in templates:
1281+ template_names.append(template.name)
1282+ return template_names
1283+
1284+
1285+class Template(Base, QueryMixin):
1286+ """ A model for a page template in sloecode."""
1287+ __tablename__ = "template"
1288+
1289+ id = Column(Integer, primary_key=True)
1290+ name = Column(Text, unique=True)
1291+
1292+ description = Column(Text)
1293+ save_location = Column(Text)
1294+ content = Column(Text)
1295+
1296+
1297+class UniqueTemplate(formencode.FancyValidator):
1298+ """A simple formencode validator that checks Project names are unique."""
1299+
1300+ template_regex = re.compile(r'^[a-z0-9][a-z0-9_.-]{2,23}$')
1301+
1302+ def _to_python(self, value, state):
1303+ """Validate form-data."""
1304+ value = value.strip()
1305+ if not self.template_regex.match(value):
1306+ raise formencode.Invalid(
1307+ 'A template name must be lower case letters, numbers, or _-., and be 3-24 characters long.',
1308+ value, state)
1309+ return value
1310+
1311+
1312+class TemplateSchema(formencode.Schema):
1313+ """A formencode schema for the Project object."""
1314+
1315+ allow_extra_fields = True
1316+ filter_extra_fields = True
1317+
1318+ name = UniqueTemplate(not_empty=True)
1319+ old_name = formencode.validators.String(not_empty=False)
1320+ description = formencode.validators.String(not_empty=False)
1321+ save_location = formencode.validators.String(not_empty=True)
1322+ content = formencode.validators.String(not_empty=False)
1323
1324=== added file 'sloecode/public/css/ico_file.gif'
1325Binary files sloecode/public/css/ico_file.gif 1970-01-01 00:00:00 +0000 and sloecode/public/css/ico_file.gif 2012-09-26 01:36:19 +0000 differ
1326=== added file 'sloecode/public/css/ico_folder.gif'
1327Binary files sloecode/public/css/ico_folder.gif 1970-01-01 00:00:00 +0000 and sloecode/public/css/ico_folder.gif 2012-09-26 01:36:19 +0000 differ
1328=== added file 'sloecode/public/css/ico_folder_up.gif'
1329Binary files sloecode/public/css/ico_folder_up.gif 1970-01-01 00:00:00 +0000 and sloecode/public/css/ico_folder_up.gif 2012-09-26 01:36:19 +0000 differ
1330=== added directory 'sloecode/public/css/smoothness'
1331=== added directory 'sloecode/public/css/smoothness/images'
1332=== added file 'sloecode/public/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png'
1333Binary files sloecode/public/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png 2012-09-26 01:36:19 +0000 differ
1334=== added file 'sloecode/public/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png'
1335Binary files sloecode/public/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png 2012-09-26 01:36:19 +0000 differ
1336=== added file 'sloecode/public/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png'
1337Binary files sloecode/public/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png 2012-09-26 01:36:19 +0000 differ
1338=== added file 'sloecode/public/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png'
1339Binary files sloecode/public/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png 2012-09-26 01:36:19 +0000 differ
1340=== added file 'sloecode/public/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png'
1341Binary files sloecode/public/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png 2012-09-26 01:36:19 +0000 differ
1342=== added file 'sloecode/public/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png'
1343Binary files sloecode/public/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png 2012-09-26 01:36:19 +0000 differ
1344=== added file 'sloecode/public/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png'
1345Binary files sloecode/public/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png 2012-09-26 01:36:19 +0000 differ
1346=== added file 'sloecode/public/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png'
1347Binary files sloecode/public/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png 2012-09-26 01:36:19 +0000 differ
1348=== added file 'sloecode/public/css/smoothness/images/ui-icons_222222_256x240.png'
1349Binary files sloecode/public/css/smoothness/images/ui-icons_222222_256x240.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-icons_222222_256x240.png 2012-09-26 01:36:19 +0000 differ
1350=== added file 'sloecode/public/css/smoothness/images/ui-icons_2e83ff_256x240.png'
1351Binary files sloecode/public/css/smoothness/images/ui-icons_2e83ff_256x240.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-icons_2e83ff_256x240.png 2012-09-26 01:36:19 +0000 differ
1352=== added file 'sloecode/public/css/smoothness/images/ui-icons_454545_256x240.png'
1353Binary files sloecode/public/css/smoothness/images/ui-icons_454545_256x240.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-icons_454545_256x240.png 2012-09-26 01:36:19 +0000 differ
1354=== added file 'sloecode/public/css/smoothness/images/ui-icons_888888_256x240.png'
1355Binary files sloecode/public/css/smoothness/images/ui-icons_888888_256x240.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-icons_888888_256x240.png 2012-09-26 01:36:19 +0000 differ
1356=== added file 'sloecode/public/css/smoothness/images/ui-icons_cd0a0a_256x240.png'
1357Binary files sloecode/public/css/smoothness/images/ui-icons_cd0a0a_256x240.png 1970-01-01 00:00:00 +0000 and sloecode/public/css/smoothness/images/ui-icons_cd0a0a_256x240.png 2012-09-26 01:36:19 +0000 differ
1358=== added file 'sloecode/public/css/smoothness/jquery-ui-1.8.23.custom.css'
1359--- sloecode/public/css/smoothness/jquery-ui-1.8.23.custom.css 1970-01-01 00:00:00 +0000
1360+++ sloecode/public/css/smoothness/jquery-ui-1.8.23.custom.css 2012-09-26 01:36:19 +0000
1361@@ -0,0 +1,563 @@
1362+/*!
1363+ * jQuery UI CSS Framework 1.8.23
1364+ *
1365+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
1366+ * Dual licensed under the MIT or GPL Version 2 licenses.
1367+ * http://jquery.org/license
1368+ *
1369+ * http://docs.jquery.com/UI/Theming/API
1370+ */
1371+
1372+/* Layout helpers
1373+----------------------------------*/
1374+.ui-helper-hidden { display: none; }
1375+.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
1376+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
1377+.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
1378+.ui-helper-clearfix:after { clear: both; }
1379+.ui-helper-clearfix { zoom: 1; }
1380+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
1381+
1382+
1383+/* Interaction Cues
1384+----------------------------------*/
1385+.ui-state-disabled { cursor: default !important; }
1386+
1387+
1388+/* Icons
1389+----------------------------------*/
1390+
1391+/* states and images */
1392+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
1393+
1394+
1395+/* Misc visuals
1396+----------------------------------*/
1397+
1398+/* Overlays */
1399+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
1400+
1401+
1402+/*!
1403+ * jQuery UI CSS Framework 1.8.23
1404+ *
1405+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
1406+ * Dual licensed under the MIT or GPL Version 2 licenses.
1407+ * http://jquery.org/license
1408+ *
1409+ * http://docs.jquery.com/UI/Theming/API
1410+ *
1411+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
1412+ */
1413+
1414+
1415+/* Component containers
1416+----------------------------------*/
1417+.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
1418+.ui-widget .ui-widget { font-size: 1em; }
1419+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
1420+.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
1421+.ui-widget-content a { color: #222222; }
1422+.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
1423+.ui-widget-header a { color: #222222; }
1424+
1425+/* Interaction states
1426+----------------------------------*/
1427+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
1428+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
1429+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
1430+.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
1431+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
1432+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
1433+.ui-widget :active { outline: none; }
1434+
1435+/* Interaction Cues
1436+----------------------------------*/
1437+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
1438+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
1439+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
1440+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
1441+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
1442+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
1443+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
1444+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
1445+
1446+/* Icons
1447+----------------------------------*/
1448+
1449+/* states and images */
1450+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
1451+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
1452+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
1453+.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
1454+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
1455+.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
1456+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
1457+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
1458+
1459+/* positioning */
1460+.ui-icon-carat-1-n { background-position: 0 0; }
1461+.ui-icon-carat-1-ne { background-position: -16px 0; }
1462+.ui-icon-carat-1-e { background-position: -32px 0; }
1463+.ui-icon-carat-1-se { background-position: -48px 0; }
1464+.ui-icon-carat-1-s { background-position: -64px 0; }
1465+.ui-icon-carat-1-sw { background-position: -80px 0; }
1466+.ui-icon-carat-1-w { background-position: -96px 0; }
1467+.ui-icon-carat-1-nw { background-position: -112px 0; }
1468+.ui-icon-carat-2-n-s { background-position: -128px 0; }
1469+.ui-icon-carat-2-e-w { background-position: -144px 0; }
1470+.ui-icon-triangle-1-n { background-position: 0 -16px; }
1471+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
1472+.ui-icon-triangle-1-e { background-position: -32px -16px; }
1473+.ui-icon-triangle-1-se { background-position: -48px -16px; }
1474+.ui-icon-triangle-1-s { background-position: -64px -16px; }
1475+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
1476+.ui-icon-triangle-1-w { background-position: -96px -16px; }
1477+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
1478+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
1479+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
1480+.ui-icon-arrow-1-n { background-position: 0 -32px; }
1481+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
1482+.ui-icon-arrow-1-e { background-position: -32px -32px; }
1483+.ui-icon-arrow-1-se { background-position: -48px -32px; }
1484+.ui-icon-arrow-1-s { background-position: -64px -32px; }
1485+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
1486+.ui-icon-arrow-1-w { background-position: -96px -32px; }
1487+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
1488+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
1489+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
1490+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
1491+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
1492+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
1493+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
1494+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
1495+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
1496+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
1497+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
1498+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
1499+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
1500+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
1501+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
1502+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
1503+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
1504+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
1505+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
1506+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
1507+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
1508+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
1509+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
1510+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
1511+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
1512+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
1513+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
1514+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
1515+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
1516+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
1517+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
1518+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
1519+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
1520+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
1521+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
1522+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
1523+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
1524+.ui-icon-arrow-4 { background-position: 0 -80px; }
1525+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
1526+.ui-icon-extlink { background-position: -32px -80px; }
1527+.ui-icon-newwin { background-position: -48px -80px; }
1528+.ui-icon-refresh { background-position: -64px -80px; }
1529+.ui-icon-shuffle { background-position: -80px -80px; }
1530+.ui-icon-transfer-e-w { background-position: -96px -80px; }
1531+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
1532+.ui-icon-folder-collapsed { background-position: 0 -96px; }
1533+.ui-icon-folder-open { background-position: -16px -96px; }
1534+.ui-icon-document { background-position: -32px -96px; }
1535+.ui-icon-document-b { background-position: -48px -96px; }
1536+.ui-icon-note { background-position: -64px -96px; }
1537+.ui-icon-mail-closed { background-position: -80px -96px; }
1538+.ui-icon-mail-open { background-position: -96px -96px; }
1539+.ui-icon-suitcase { background-position: -112px -96px; }
1540+.ui-icon-comment { background-position: -128px -96px; }
1541+.ui-icon-person { background-position: -144px -96px; }
1542+.ui-icon-print { background-position: -160px -96px; }
1543+.ui-icon-trash { background-position: -176px -96px; }
1544+.ui-icon-locked { background-position: -192px -96px; }
1545+.ui-icon-unlocked { background-position: -208px -96px; }
1546+.ui-icon-bookmark { background-position: -224px -96px; }
1547+.ui-icon-tag { background-position: -240px -96px; }
1548+.ui-icon-home { background-position: 0 -112px; }
1549+.ui-icon-flag { background-position: -16px -112px; }
1550+.ui-icon-calendar { background-position: -32px -112px; }
1551+.ui-icon-cart { background-position: -48px -112px; }
1552+.ui-icon-pencil { background-position: -64px -112px; }
1553+.ui-icon-clock { background-position: -80px -112px; }
1554+.ui-icon-disk { background-position: -96px -112px; }
1555+.ui-icon-calculator { background-position: -112px -112px; }
1556+.ui-icon-zoomin { background-position: -128px -112px; }
1557+.ui-icon-zoomout { background-position: -144px -112px; }
1558+.ui-icon-search { background-position: -160px -112px; }
1559+.ui-icon-wrench { background-position: -176px -112px; }
1560+.ui-icon-gear { background-position: -192px -112px; }
1561+.ui-icon-heart { background-position: -208px -112px; }
1562+.ui-icon-star { background-position: -224px -112px; }
1563+.ui-icon-link { background-position: -240px -112px; }
1564+.ui-icon-cancel { background-position: 0 -128px; }
1565+.ui-icon-plus { background-position: -16px -128px; }
1566+.ui-icon-plusthick { background-position: -32px -128px; }
1567+.ui-icon-minus { background-position: -48px -128px; }
1568+.ui-icon-minusthick { background-position: -64px -128px; }
1569+.ui-icon-close { background-position: -80px -128px; }
1570+.ui-icon-closethick { background-position: -96px -128px; }
1571+.ui-icon-key { background-position: -112px -128px; }
1572+.ui-icon-lightbulb { background-position: -128px -128px; }
1573+.ui-icon-scissors { background-position: -144px -128px; }
1574+.ui-icon-clipboard { background-position: -160px -128px; }
1575+.ui-icon-copy { background-position: -176px -128px; }
1576+.ui-icon-contact { background-position: -192px -128px; }
1577+.ui-icon-image { background-position: -208px -128px; }
1578+.ui-icon-video { background-position: -224px -128px; }
1579+.ui-icon-script { background-position: -240px -128px; }
1580+.ui-icon-alert { background-position: 0 -144px; }
1581+.ui-icon-info { background-position: -16px -144px; }
1582+.ui-icon-notice { background-position: -32px -144px; }
1583+.ui-icon-help { background-position: -48px -144px; }
1584+.ui-icon-check { background-position: -64px -144px; }
1585+.ui-icon-bullet { background-position: -80px -144px; }
1586+.ui-icon-radio-off { background-position: -96px -144px; }
1587+.ui-icon-radio-on { background-position: -112px -144px; }
1588+.ui-icon-pin-w { background-position: -128px -144px; }
1589+.ui-icon-pin-s { background-position: -144px -144px; }
1590+.ui-icon-play { background-position: 0 -160px; }
1591+.ui-icon-pause { background-position: -16px -160px; }
1592+.ui-icon-seek-next { background-position: -32px -160px; }
1593+.ui-icon-seek-prev { background-position: -48px -160px; }
1594+.ui-icon-seek-end { background-position: -64px -160px; }
1595+.ui-icon-seek-start { background-position: -80px -160px; }
1596+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
1597+.ui-icon-seek-first { background-position: -80px -160px; }
1598+.ui-icon-stop { background-position: -96px -160px; }
1599+.ui-icon-eject { background-position: -112px -160px; }
1600+.ui-icon-volume-off { background-position: -128px -160px; }
1601+.ui-icon-volume-on { background-position: -144px -160px; }
1602+.ui-icon-power { background-position: 0 -176px; }
1603+.ui-icon-signal-diag { background-position: -16px -176px; }
1604+.ui-icon-signal { background-position: -32px -176px; }
1605+.ui-icon-battery-0 { background-position: -48px -176px; }
1606+.ui-icon-battery-1 { background-position: -64px -176px; }
1607+.ui-icon-battery-2 { background-position: -80px -176px; }
1608+.ui-icon-battery-3 { background-position: -96px -176px; }
1609+.ui-icon-circle-plus { background-position: 0 -192px; }
1610+.ui-icon-circle-minus { background-position: -16px -192px; }
1611+.ui-icon-circle-close { background-position: -32px -192px; }
1612+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
1613+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
1614+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
1615+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
1616+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
1617+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
1618+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
1619+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
1620+.ui-icon-circle-zoomin { background-position: -176px -192px; }
1621+.ui-icon-circle-zoomout { background-position: -192px -192px; }
1622+.ui-icon-circle-check { background-position: -208px -192px; }
1623+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
1624+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
1625+.ui-icon-circlesmall-close { background-position: -32px -208px; }
1626+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
1627+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
1628+.ui-icon-squaresmall-close { background-position: -80px -208px; }
1629+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
1630+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
1631+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
1632+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
1633+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
1634+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
1635+
1636+
1637+/* Misc visuals
1638+----------------------------------*/
1639+
1640+/* Corner radius */
1641+.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
1642+.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
1643+.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
1644+.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
1645+
1646+/* Overlays */
1647+.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
1648+.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*!
1649+ * jQuery UI Resizable 1.8.23
1650+ *
1651+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
1652+ * Dual licensed under the MIT or GPL Version 2 licenses.
1653+ * http://jquery.org/license
1654+ *
1655+ * http://docs.jquery.com/UI/Resizable#theming
1656+ */
1657+.ui-resizable { position: relative;}
1658+.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; }
1659+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
1660+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
1661+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
1662+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
1663+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
1664+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
1665+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
1666+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
1667+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*!
1668+ * jQuery UI Selectable 1.8.23
1669+ *
1670+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
1671+ * Dual licensed under the MIT or GPL Version 2 licenses.
1672+ * http://jquery.org/license
1673+ *
1674+ * http://docs.jquery.com/UI/Selectable#theming
1675+ */
1676+.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
1677+/*!
1678+ * jQuery UI Accordion 1.8.23
1679+ *
1680+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
1681+ * Dual licensed under the MIT or GPL Version 2 licenses.
1682+ * http://jquery.org/license
1683+ *
1684+ * http://docs.jquery.com/UI/Accordion#theming
1685+ */
1686+/* IE/Win - Fix animation bug - #4615 */
1687+.ui-accordion { width: 100%; }
1688+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
1689+.ui-accordion .ui-accordion-li-fix { display: inline; }
1690+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
1691+.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
1692+.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
1693+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
1694+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
1695+.ui-accordion .ui-accordion-content-active { display: block; }
1696+/*!
1697+ * jQuery UI Autocomplete 1.8.23
1698+ *
1699+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
1700+ * Dual licensed under the MIT or GPL Version 2 licenses.
1701+ * http://jquery.org/license
1702+ *
1703+ * http://docs.jquery.com/UI/Autocomplete#theming
1704+ */
1705+.ui-autocomplete { position: absolute; cursor: default; }
1706+
1707+/* workarounds */
1708+* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
1709+
1710+/*
1711+ * jQuery UI Menu 1.8.23
1712+ *
1713+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
1714+ * Dual licensed under the MIT or GPL Version 2 licenses.
1715+ * http://jquery.org/license
1716+ *
1717+ * http://docs.jquery.com/UI/Menu#theming
1718+ */
1719+.ui-menu {
1720+ list-style:none;
1721+ padding: 2px;
1722+ margin: 0;
1723+ display:block;
1724+ float: left;
1725+}
1726+.ui-menu .ui-menu {
1727+ margin-top: -3px;
1728+}
1729+.ui-menu .ui-menu-item {
1730+ margin:0;
1731+ padding: 0;
1732+ zoom: 1;
1733+ float: left;
1734+ clear: left;
1735+ width: 100%;
1736+}
1737+.ui-menu .ui-menu-item a {
1738+ text-decoration:none;
1739+ display:block;
1740+ padding:.2em .4em;
1741+ line-height:1.5;
1742+ zoom:1;
1743+}
1744+.ui-menu .ui-menu-item a.ui-state-hover,
1745+.ui-menu .ui-menu-item a.ui-state-active {
1746+ font-weight: normal;
1747+ margin: -1px;
1748+}
1749+/*!
1750+ * jQuery UI Button 1.8.23
1751+ *
1752+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
1753+ * Dual licensed under the MIT or GPL Version 2 licenses.
1754+ * http://jquery.org/license
1755+ *
1756+ * http://docs.jquery.com/UI/Button#theming
1757+ */
1758+.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
1759+.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
1760+button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
1761+.ui-button-icons-only { width: 3.4em; }
1762+button.ui-button-icons-only { width: 3.7em; }
1763+
1764+/*button text element */
1765+.ui-button .ui-button-text { display: block; line-height: 1.4; }
1766+.ui-button-text-only .ui-button-text { padding: .4em 1em; }
1767+.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
1768+.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
1769+.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
1770+.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
1771+/* no icon support for input elements, provide padding by default */
1772+input.ui-button { padding: .4em 1em; }
1773+
1774+/*button icon element(s) */
1775+.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
1776+.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
1777+.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
1778+.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
1779+.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
1780+
1781+/*button sets*/
1782+.ui-buttonset { margin-right: 7px; }
1783+.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
1784+
1785+/* workarounds */
1786+button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
1787+/*!
1788+ * jQuery UI Dialog 1.8.23
1789+ *
1790+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
1791+ * Dual licensed under the MIT or GPL Version 2 licenses.
1792+ * http://jquery.org/license
1793+ *
1794+ * http://docs.jquery.com/UI/Dialog#theming
1795+ */
1796+.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
1797+.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
1798+.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
1799+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
1800+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
1801+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
1802+.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
1803+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
1804+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
1805+.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
1806+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
1807+.ui-draggable .ui-dialog-titlebar { cursor: move; }
1808+/*!
1809+ * jQuery UI Slider 1.8.23
1810+ *
1811+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
1812+ * Dual licensed under the MIT or GPL Version 2 licenses.
1813+ * http://jquery.org/license
1814+ *
1815+ * http://docs.jquery.com/UI/Slider#theming
1816+ */
1817+.ui-slider { position: relative; text-align: left; }
1818+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
1819+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
1820+
1821+.ui-slider-horizontal { height: .8em; }
1822+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
1823+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
1824+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
1825+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
1826+
1827+.ui-slider-vertical { width: .8em; height: 100px; }
1828+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
1829+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
1830+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
1831+.ui-slider-vertical .ui-slider-range-max { top: 0; }/*!
1832+ * jQuery UI Tabs 1.8.23
1833+ *
1834+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
1835+ * Dual licensed under the MIT or GPL Version 2 licenses.
1836+ * http://jquery.org/license
1837+ *
1838+ * http://docs.jquery.com/UI/Tabs#theming
1839+ */
1840+.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
1841+.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
1842+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
1843+.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
1844+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
1845+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
1846+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
1847+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
1848+.ui-tabs .ui-tabs-hide { display: none !important; }
1849+/*!
1850+ * jQuery UI Datepicker 1.8.23
1851+ *
1852+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
1853+ * Dual licensed under the MIT or GPL Version 2 licenses.
1854+ * http://jquery.org/license
1855+ *
1856+ * http://docs.jquery.com/UI/Datepicker#theming
1857+ */
1858+.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
1859+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
1860+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
1861+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
1862+.ui-datepicker .ui-datepicker-prev { left:2px; }
1863+.ui-datepicker .ui-datepicker-next { right:2px; }
1864+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
1865+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
1866+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
1867+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
1868+.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
1869+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
1870+.ui-datepicker select.ui-datepicker-month,
1871+.ui-datepicker select.ui-datepicker-year { width: 49%;}
1872+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
1873+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
1874+.ui-datepicker td { border: 0; padding: 1px; }
1875+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
1876+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
1877+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
1878+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
1879+
1880+/* with multiple calendars */
1881+.ui-datepicker.ui-datepicker-multi { width:auto; }
1882+.ui-datepicker-multi .ui-datepicker-group { float:left; }
1883+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
1884+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
1885+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
1886+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
1887+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
1888+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
1889+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
1890+.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
1891+
1892+/* RTL support */
1893+.ui-datepicker-rtl { direction: rtl; }
1894+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
1895+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
1896+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
1897+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
1898+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
1899+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
1900+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
1901+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
1902+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
1903+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
1904+
1905+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
1906+.ui-datepicker-cover {
1907+ position: absolute; /*must have*/
1908+ z-index: -1; /*must have*/
1909+ filter: mask(); /*must have*/
1910+ top: -4px; /*must have*/
1911+ left: -4px; /*must have*/
1912+ width: 200px; /*must have*/
1913+ height: 200px; /*must have*/
1914+}/*!
1915+ * jQuery UI Progressbar 1.8.23
1916+ *
1917+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
1918+ * Dual licensed under the MIT or GPL Version 2 licenses.
1919+ * http://jquery.org/license
1920+ *
1921+ * http://docs.jquery.com/UI/Progressbar#theming
1922+ */
1923+.ui-progressbar { height:2em; text-align: left; overflow: hidden; }
1924+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
1925\ No newline at end of file
1926
1927=== added file 'sloecode/public/css/wiki.css'
1928--- sloecode/public/css/wiki.css 1970-01-01 00:00:00 +0000
1929+++ sloecode/public/css/wiki.css 2012-09-26 01:36:19 +0000
1930@@ -0,0 +1,239 @@
1931+.wikkid_wrapper {
1932+ padding: 5px;
1933+ border: solid 1px black;
1934+}
1935+
1936+.edit-content textarea {
1937+ font-family: courier;
1938+ width: 100%;
1939+ height: auto;
1940+}
1941+
1942+#content {
1943+ margin-top: 5px;
1944+}
1945+
1946+.wiki_content {
1947+ border: solid 1px #172961;
1948+ padding: 10px;
1949+}
1950+.wiki_actions_wrapper {
1951+ border-right: solid 1px #CCCCCC;
1952+ border-left: solid 1px #CCCCCC;
1953+}
1954+.wiki_actions_wrapper a {
1955+ color: inherit;
1956+ text-decoration: inherit;
1957+}
1958+.wiki_actions_wrapper li {
1959+ background: rgb(255,255,255); /* Old browsers */
1960+ background: -moz-linear-gradient(top, rgba(255,255,255,1) 49%, rgba(200,200,200,1) 100%); /* FF3.6+ */
1961+ background: -webkit-gradient(linear, left top, left bottom, color-stop(49%,rgba(255,255,255,1)), color-stop(100%,rgba(200,200,200,1))); /* Chrome,Safari4+ */
1962+ background: -webkit-linear-gradient(top, rgba(255,255,255,1) 49%,rgba(200,200,200,1) 100%); /* Chrome10+,Safari5.1+ */
1963+ background: -o-linear-gradient(top, rgba(255,255,255,1) 49%,rgba(200,200,200,1) 100%); /* Opera 11.10+ */
1964+ background: -ms-linear-gradient(top, rgba(255,255,255,1) 49%,rgba(200,200,200,1) 100%); /* IE10+ */
1965+ background: linear-gradient(to bottom, rgba(255,255,255,1) 49%,rgba(200,200,200,1) 100%); /* W3C */
1966+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#c8c8c8',GradientType=0 ); /* IE6-9 */
1967+ z-index: 499;
1968+}
1969+.wiki_actions_wrapper li:hover {
1970+ background: rgb(255,255,255); /* Old browsers */
1971+ background: -moz-linear-gradient(top, rgba(255,255,255,1) 0%, rgba(189,217,255,1) 100%); /* FF3.6+ */
1972+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,1)), color-stop(100%,rgba(189,217,255,1))); /* Chrome,Safari4+ */
1973+ background: -webkit-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(189,217,255,1) 100%); /* Chrome10+,Safari5.1+ */
1974+ background: -o-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(189,217,255,1) 100%); /* Opera 11.10+ */
1975+ background: -ms-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(189,217,255,1) 100%); /* IE10+ */
1976+ background: linear-gradient(to bottom, rgba(255,255,255,1) 0%,rgba(189,217,255,1) 100%); /* W3C */
1977+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#bdd9ff',GradientType=0 ); /* IE6-9 */
1978+ z-index: 499;
1979+}
1980+.wiki_action_button_wrapper, .wiki_action_button_wrapper li {
1981+ list-style: none;
1982+ float: right;
1983+ margin: 0px !important;
1984+}
1985+.wiki_action_button {
1986+ float: right;
1987+ padding: 5px;
1988+ border-left: solid 1px #CCCCCC;
1989+}
1990+.wiki_breadcrumbs {
1991+ border-right: solid 1px #CCCCCC;
1992+}
1993+.wiki_breadcrumbs, .wiki_breadcrumbs li {
1994+ list-style: none;
1995+ float: left;
1996+ margin: 0px !important;
1997+}
1998+.wiki_crumb {
1999+ list-style: none;
2000+ float: left;
2001+ padding: 5px;
2002+ padding-left: 10px !important;
2003+ padding-right: 10px !important;
2004+ margin: 0px !important;
2005+}
2006+.wiki_breadcrumbs li:first-child a{
2007+ background-image: none;
2008+}
2009+.wiki_breadcrumbs li a{
2010+ background-image: url('/yui/3.3.0/build/node-menunav/assets/skins/sam/vertical-menu-submenu-indicator.png');
2011+ background-repeat: no-repeat;
2012+ background-position: 0;
2013+ z-index: 500;
2014+}
2015+ul.edit-toolbar-buttons {
2016+ padding: 0;
2017+ margin: 0;
2018+ margin-bottom: -1px;
2019+}
2020+.edit-toolbar-buttons, .edit-toolbar-buttons li {
2021+ list-style: none;
2022+ float: left;
2023+}
2024+.edit-toolbar-buttons li {
2025+ text-align: center;
2026+ width: 23px;
2027+ font-family: courier;
2028+ font-size: 1.4em;
2029+ margin-right: 2px;
2030+ border: solid 1px;
2031+}
2032+.edit-toolbar-buttons li:hover {
2033+ background-color: #DDDDDD;
2034+}
2035+.edit-toolbar-buttons li a {
2036+ color: inherit;
2037+ text-decoration: inherit;
2038+ cursor: default;
2039+ display: block;
2040+}
2041+.field-helper {
2042+ color: grey;
2043+}
2044+.clear {
2045+ clear: both;
2046+}
2047+
2048+
2049+/*Stuff from Wikkid*/
2050+
2051+.highlight .hll { background-color: #ffffcc }
2052+.highlight { background: #f8f8f8; }
2053+.highlight .c { color: #408080; font-style: italic } /* Comment */
2054+.highlight .err { border: 1px solid #FF0000 } /* Error */
2055+.highlight .k { color: #008000; font-weight: bold } /* Keyword */
2056+.highlight .o { color: #666666 } /* Operator */
2057+.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
2058+.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
2059+.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
2060+.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
2061+.highlight .gd { color: #A00000 } /* Generic.Deleted */
2062+.highlight .ge { font-style: italic } /* Generic.Emph */
2063+.highlight .gr { color: #FF0000 } /* Generic.Error */
2064+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
2065+.highlight .gi { color: #00A000 } /* Generic.Inserted */
2066+.highlight .go { color: #808080 } /* Generic.Output */
2067+.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
2068+.highlight .gs { font-weight: bold } /* Generic.Strong */
2069+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
2070+.highlight .gt { color: #0040D0 } /* Generic.Traceback */
2071+.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
2072+.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
2073+.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
2074+.highlight .kp { color: #008000 } /* Keyword.Pseudo */
2075+.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
2076+.highlight .kt { color: #B00040 } /* Keyword.Type */
2077+.highlight .m { color: #666666 } /* Literal.Number */
2078+.highlight .s { color: #BA2121 } /* Literal.String */
2079+.highlight .na { color: #7D9029 } /* Name.Attribute */
2080+.highlight .nb { color: #008000 } /* Name.Builtin */
2081+.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
2082+.highlight .no { color: #880000 } /* Name.Constant */
2083+.highlight .nd { color: #AA22FF } /* Name.Decorator */
2084+.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
2085+.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
2086+.highlight .nf { color: #0000FF } /* Name.Function */
2087+.highlight .nl { color: #A0A000 } /* Name.Label */
2088+.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
2089+.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
2090+.highlight .nv { color: #19177C } /* Name.Variable */
2091+.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
2092+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
2093+.highlight .mf { color: #666666 } /* Literal.Number.Float */
2094+.highlight .mh { color: #666666 } /* Literal.Number.Hex */
2095+.highlight .mi { color: #666666 } /* Literal.Number.Integer */
2096+.highlight .mo { color: #666666 } /* Literal.Number.Oct */
2097+.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
2098+.highlight .sc { color: #BA2121 } /* Literal.String.Char */
2099+.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
2100+.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
2101+.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
2102+.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
2103+.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
2104+.highlight .sx { color: #008000 } /* Literal.String.Other */
2105+.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
2106+.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
2107+.highlight .ss { color: #19177C } /* Literal.String.Symbol */
2108+.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
2109+.highlight .vc { color: #19177C } /* Name.Variable.Class */
2110+.highlight .vg { color: #19177C } /* Name.Variable.Global */
2111+.highlight .vi { color: #19177C } /* Name.Variable.Instance */
2112+.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
2113+
2114+.dir-listing {
2115+ width: 100%;
2116+}
2117+
2118+.dir-listing .even {
2119+ background: #e0e0e0;
2120+}
2121+
2122+.dir-listing .odd {
2123+ background: #efefef;
2124+}
2125+
2126+.dir-listing a {
2127+ padding: 2px 0px 2px 20px;
2128+ background-repeat: no-repeat;
2129+ background-position: 2px center;
2130+}
2131+.dir-listing .up {
2132+ background-image: url("ico_folder_up.gif");
2133+}
2134+
2135+.dir-listing .directory {
2136+ background-image: url("ico_folder.gif");
2137+}
2138+
2139+.dir-listing .file {
2140+ background-image: url("ico_file.gif");
2141+ background-position: 4px center;
2142+}
2143+
2144+.wikkid h1, .wikkid h2, .wikkid h3, .wikkid h4, .wikkid h5, .wikkid h6 {color:#242c38;}
2145+.wikkid h1 { font-size: 1.8em; }
2146+.wikkid h2, .wikkid div.section h1 { font-size: 1.5em; }
2147+.wikkid h3, .wikkid div.section div.section h1 { font-size: 1.4em; }
2148+.wikkid h4 { font-size: 1.3em; }
2149+.wikkid h5 { font-size: 1.2em; }
2150+.wikkid h6 { font-size: 1.1em; }
2151+.wikkid p {
2152+ font-size: 1em;
2153+ margin:0 0 10px;
2154+ line-height: 1.4em;
2155+}
2156+.wikkid p.last-edit {
2157+ font-size: 0.6em;
2158+ margin-left: 1em;
2159+}
2160+.wikkid ul, .wikkid ol, .wikkid dl {
2161+ list-style-position:inside;
2162+ margin:15px;
2163+}
2164+.wikkid ul ul, .wikkid ul ol, .wikkid ul dl, .wikkid ol ol, .wikkid ol ul, .wikkid ol dl, .wikkid dl dl, .wikkid dl ol, .wikkid dl ul {
2165+ margin:0 0 0 15px;
2166+}
2167+.wikkid li {
2168+ margin:0 0 3px;
2169+}
2170
2171=== added file 'sloecode/public/js/jquery-ui-1.8.23.custom.min.js'
2172--- sloecode/public/js/jquery-ui-1.8.23.custom.min.js 1970-01-01 00:00:00 +0000
2173+++ sloecode/public/js/jquery-ui-1.8.23.custom.min.js 2012-09-26 01:36:19 +0000
2174@@ -0,0 +1,69 @@
2175+/*! jQuery UI - v1.8.23 - 2012-08-15
2176+* https://github.com/jquery/jquery-ui
2177+* Includes: jquery.ui.core.js
2178+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
2179+(function(a,b){function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;return!b.href||!g||f.nodeName.toLowerCase()!=="map"?!1:(h=a("img[usemap=#"+g+"]")[0],!!h&&d(h))}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(a.ui.version)return;a.extend(a.ui,{version:"1.8.23",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;return a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0),/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a("<a>").outerWidth(1).jquery||a.each(["Width","Height"],function(c,d){function h(b,c,d,f){return a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)}),c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){return c===b?g["inner"+d].call(this):this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){return typeof b!="number"?g["outer"+d].call(this,b):this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:a.expr.createPseudo?a.expr.createPseudo(function(b){return function(c){return!!a.data(c,b)}}):function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.curCSS||(a.curCSS=a.css),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!d||!a.element[0].parentNode)return;for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css("overflow")==="hidden")return!1;var d=c&&c==="left"?"scrollLeft":"scrollTop",e=!1;return b[d]>0?!0:(b[d]=1,e=b[d]>0,b[d]=0,e)},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15
2180+* https://github.com/jquery/jquery-ui
2181+* Includes: jquery.ui.widget.js
2182+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
2183+(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler("remove")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){return c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(b){}}),d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(".")[0],f;b=b.split(".")[1],f=e+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e=="string",g=Array.prototype.slice.call(arguments,1),h=this;return e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e,f&&e.charAt(0)==="_"?h:(f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b)return h=f,!1}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))}),h)}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}),this._create(),this._trigger("create"),this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName),this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+"ui-state-disabled")},widget:function(){return this.element},option:function(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c=="string"){if(d===b)return this.options[c];e={},e[c]=d}return this._setOptions(e),this},_setOptions:function(b){var c=this;return a.each(b,function(a,b){c._setOption(a,b)}),this},_setOption:function(a,b){return this.options[a]=b,a==="disabled"&&this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled"+" "+"ui-state-disabled").attr("aria-disabled",b),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);return this.element.trigger(c,d),!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15
2184+* https://github.com/jquery/jquery-ui
2185+* Includes: jquery.ui.mouse.js
2186+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
2187+(function(a,b){var c=!1;a(document).mouseup(function(a){c=!1}),a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(a){return b._mouseDown(a)}).bind("click."+this.widgetName,function(c){if(!0===a.data(c.target,b.widgetName+".preventClickEvent"))return a.removeData(c.target,b.widgetName+".preventClickEvent"),c.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(b){if(c)return;this._mouseStarted&&this._mouseUp(b),this._mouseDownEvent=b;var d=this,e=b.which==1,f=typeof this.options.cancel=="string"&&b.target.nodeName?a(b.target).closest(this.options.cancel).length:!1;if(!e||f||!this._mouseCapture(b))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=this._mouseStart(b)!==!1;if(!this._mouseStarted)return b.preventDefault(),!0}return!0===a.data(b.target,this.widgetName+".preventClickEvent")&&a.removeData(b.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(a){return d._mouseMove(a)},this._mouseUpDelegate=function(a){return d._mouseUp(a)},a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),b.preventDefault(),c=!0,!0},_mouseMove:function(b){return!a.browser.msie||document.documentMode>=9||!!b.button?this._mouseStarted?(this._mouseDrag(b),b.preventDefault()):(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b)),!this._mouseStarted):this._mouseUp(b)},_mouseUp:function(b){return a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b)),!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15
2188+* https://github.com/jquery/jquery-ui
2189+* Includes: jquery.ui.position.js
2190+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
2191+(function(a,b){a.ui=a.ui||{};var c=/left|center|right/,d=/top|center|bottom/,e="center",f={},g=a.fn.position,h=a.fn.offset;a.fn.position=function(b){if(!b||!b.of)return g.apply(this,arguments);b=a.extend({},b);var h=a(b.of),i=h[0],j=(b.collision||"flip").split(" "),k=b.offset?b.offset.split(" "):[0,0],l,m,n;return i.nodeType===9?(l=h.width(),m=h.height(),n={top:0,left:0}):i.setTimeout?(l=h.width(),m=h.height(),n={top:h.scrollTop(),left:h.scrollLeft()}):i.preventDefault?(b.at="left top",l=m=0,n={top:b.of.pageY,left:b.of.pageX}):(l=h.outerWidth(),m=h.outerHeight(),n=h.offset()),a.each(["my","at"],function(){var a=(b[this]||"").split(" ");a.length===1&&(a=c.test(a[0])?a.concat([e]):d.test(a[0])?[e].concat(a):[e,e]),a[0]=c.test(a[0])?a[0]:e,a[1]=d.test(a[1])?a[1]:e,b[this]=a}),j.length===1&&(j[1]=j[0]),k[0]=parseInt(k[0],10)||0,k.length===1&&(k[1]=k[0]),k[1]=parseInt(k[1],10)||0,b.at[0]==="right"?n.left+=l:b.at[0]===e&&(n.left+=l/2),b.at[1]==="bottom"?n.top+=m:b.at[1]===e&&(n.top+=m/2),n.left+=k[0],n.top+=k[1],this.each(function(){var c=a(this),d=c.outerWidth(),g=c.outerHeight(),h=parseInt(a.curCSS(this,"marginLeft",!0))||0,i=parseInt(a.curCSS(this,"marginTop",!0))||0,o=d+h+(parseInt(a.curCSS(this,"marginRight",!0))||0),p=g+i+(parseInt(a.curCSS(this,"marginBottom",!0))||0),q=a.extend({},n),r;b.my[0]==="right"?q.left-=d:b.my[0]===e&&(q.left-=d/2),b.my[1]==="bottom"?q.top-=g:b.my[1]===e&&(q.top-=g/2),f.fractions||(q.left=Math.round(q.left),q.top=Math.round(q.top)),r={left:q.left-h,top:q.top-i},a.each(["left","top"],function(c,e){a.ui.position[j[c]]&&a.ui.position[j[c]][e](q,{targetWidth:l,targetHeight:m,elemWidth:d,elemHeight:g,collisionPosition:r,collisionWidth:o,collisionHeight:p,offset:k,my:b.my,at:b.at})}),a.fn.bgiframe&&c.bgiframe(),c.offset(a.extend(q,{using:b.using}))})},a.ui.position={fit:{left:function(b,c){var d=a(window),e=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft();b.left=e>0?b.left-e:Math.max(b.left-c.collisionPosition.left,b.left)},top:function(b,c){var d=a(window),e=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop();b.top=e>0?b.top-e:Math.max(b.top-c.collisionPosition.top,b.top)}},flip:{left:function(b,c){if(c.at[0]===e)return;var d=a(window),f=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft(),g=c.my[0]==="left"?-c.elemWidth:c.my[0]==="right"?c.elemWidth:0,h=c.at[0]==="left"?c.targetWidth:-c.targetWidth,i=-2*c.offset[0];b.left+=c.collisionPosition.left<0?g+h+i:f>0?g+h+i:0},top:function(b,c){if(c.at[1]===e)return;var d=a(window),f=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop(),g=c.my[1]==="top"?-c.elemHeight:c.my[1]==="bottom"?c.elemHeight:0,h=c.at[1]==="top"?c.targetHeight:-c.targetHeight,i=-2*c.offset[1];b.top+=c.collisionPosition.top<0?g+h+i:f>0?g+h+i:0}}},a.offset.setOffset||(a.offset.setOffset=function(b,c){/static/.test(a.curCSS(b,"position"))&&(b.style.position="relative");var d=a(b),e=d.offset(),f=parseInt(a.curCSS(b,"top",!0),10)||0,g=parseInt(a.curCSS(b,"left",!0),10)||0,h={top:c.top-e.top+f,left:c.left-e.left+g};"using"in c?c.using.call(b,h):d.css(h)},a.fn.offset=function(b){var c=this[0];return!c||!c.ownerDocument?null:b?a.isFunction(b)?this.each(function(c){a(this).offset(b.call(this,c,a(this).offset()))}):this.each(function(){a.offset.setOffset(this,b)}):h.call(this)}),a.curCSS||(a.curCSS=a.css),function(){var b=document.getElementsByTagName("body")[0],c=document.createElement("div"),d,e,g,h,i;d=document.createElement(b?"div":"body"),g={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},b&&a.extend(g,{position:"absolute",left:"-1000px",top:"-1000px"});for(var j in g)d.style[j]=g[j];d.appendChild(c),e=b||document.documentElement,e.insertBefore(d,e.firstChild),c.style.cssText="position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;",h=a(c).offset(function(a,b){return b}).offset(),d.innerHTML="",e.removeChild(d),i=h.top+h.left+(b?2e3:0),f.fractions=i>21&&i<22}()})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15
2192+* https://github.com/jquery/jquery-ui
2193+* Includes: jquery.ui.draggable.js
2194+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
2195+(function(a,b){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1},_create:function(){this.options.helper=="original"&&!/^(?:r|a|f)/.test(this.element.css("position"))&&(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},destroy:function(){if(!this.element.data("draggable"))return;return this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy(),this},_mouseCapture:function(b){var c=this.options;return this.helper||c.disabled||a(b.target).is(".ui-resizable-handle")?!1:(this.handle=this._getHandle(b),this.handle?(c.iframeFix&&a(c.iframeFix===!0?"iframe":c.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(a(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(b){var c=this.options;return this.helper=this._createHelper(b),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),a.ui.ddmanager&&(a.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(b),this.originalPageX=b.pageX,this.originalPageY=b.pageY,c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt),c.containment&&this._setContainment(),this._trigger("start",b)===!1?(this._clear(),!1):(this._cacheHelperProportions(),a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this._mouseDrag(b,!0),a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,b),!0)},_mouseDrag:function(b,c){this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute");if(!c){var d=this._uiHash();if(this._trigger("drag",b,d)===!1)return this._mouseUp({}),!1;this.position=d.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";return a.ui.ddmanager&&a.ui.ddmanager.drag(this,b),!1},_mouseStop:function(b){var c=!1;a.ui.ddmanager&&!this.options.dropBehaviour&&(c=a.ui.ddmanager.drop(this,b)),this.dropped&&(c=this.dropped,this.dropped=!1);var d=this.element[0],e=!1;while(d&&(d=d.parentNode))d==document&&(e=!0);if(!e&&this.options.helper==="original")return!1;if(this.options.revert=="invalid"&&!c||this.options.revert=="valid"&&c||this.options.revert===!0||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,c)){var f=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){f._trigger("stop",b)!==!1&&f._clear()})}else this._trigger("stop",b)!==!1&&this._clear();return!1},_mouseUp:function(b){return this.options.iframeFix===!0&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,b),a.ui.mouse.prototype._mouseUp.call(this,b)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?!0:!1;return a(this.options.handle,this.element).find("*").andSelf().each(function(){this==b.target&&(c=!0)}),c},_createHelper:function(b){var c=this.options,d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[b])):c.helper=="clone"?this.element.clone().removeAttr("id"):this.element;return d.parents("body").length||d.appendTo(c.appendTo=="parent"?this.element[0].parentNode:c.appendTo),d[0]!=this.element[0]&&!/(fixed|absolute)/.test(d.css("position"))&&d.css("position","absolute"),d},_adjustOffsetFromHelper:function(b){typeof b=="string"&&(b=b.split(" ")),a.isArray(b)&&(b={left:+b[0],top:+b[1]||0}),"left"in b&&(this.offset.click.left=b.left+this.margins.left),"right"in b&&(this.offset.click.left=this.helperProportions.width-b.right+this.margins.left),"top"in b&&(this.offset.click.top=b.top+this.margins.top),"bottom"in b&&(this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])&&(b.left+=this.scrollParent.scrollLeft(),b.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)b={top:0,left:0};return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var b=this.options;b.containment=="parent"&&(b.containment=this.helper[0].parentNode);if(b.containment=="document"||b.containment=="window")this.containment=[b.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,b.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,(b.containment=="document"?0:a(window).scrollLeft())+a(b.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(b.containment=="document"?0:a(window).scrollTop())+(a(b.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(b.containment)&&b.containment.constructor!=Array){var c=a(b.containment),d=c[0];if(!d)return;var e=c.offset(),f=a(d).css("overflow")!="hidden";this.containment=[(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0),(parseInt(a(d).css("borderTopWidth"),10)||0)+(parseInt(a(d).css("paddingTop"),10)||0),(f?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(f?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=c}else b.containment.constructor==Array&&(this.containment=b.containment)},_convertPositionTo:function(b,c){c||(c=this.position);var d=b=="absolute"?1:-1,e=this.options,f=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=/(html|body)/i.test(f[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():g?0:f.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:f.scrollLeft())*d)}},_generatePosition:function(b){var c=this.options,d=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(d[0].tagName),f=b.pageX,g=b.pageY;if(this.originalPosition){var h;if(this.containment){if(this.relative_container){var i=this.relative_container.offset();h=[this.containment[0]+i.left,this.containment[1]+i.top,this.containment[2]+i.left,this.containment[3]+i.top]}else h=this.containment;b.pageX-this.offset.click.left<h[0]&&(f=h[0]+this.offset.click.left),b.pageY-this.offset.click.top<h[1]&&(g=h[1]+this.offset.click.top),b.pageX-this.offset.click.left>h[2]&&(f=h[2]+this.offset.click.left),b.pageY-this.offset.click.top>h[3]&&(g=h[3]+this.offset.click.top)}if(c.grid){var j=c.grid[1]?this.originalPageY+Math.round((g-this.originalPageY)/c.grid[1])*c.grid[1]:this.originalPageY;g=h?j-this.offset.click.top<h[1]||j-this.offset.click.top>h[3]?j-this.offset.click.top<h[1]?j+c.grid[1]:j-c.grid[1]:j:j;var k=c.grid[0]?this.originalPageX+Math.round((f-this.originalPageX)/c.grid[0])*c.grid[0]:this.originalPageX;f=h?k-this.offset.click.left<h[0]||k-this.offset.click.left>h[2]?k-this.offset.click.left<h[0]?k+c.grid[0]:k-c.grid[0]:k:k}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:d.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:d.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(b,c,d){return d=d||this._uiHash(),a.ui.plugin.call(this,b,[c,d]),b=="drag"&&(this.positionAbs=this._convertPositionTo("absolute")),a.Widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(a){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),a.extend(a.ui.draggable,{version:"1.8.23"}),a.ui.plugin.add("draggable","connectToSortable",{start:function(b,c){var d=a(this).data("draggable"),e=d.options,f=a.extend({},c,{item:d.element});d.sortables=[],a(e.connectToSortable).each(function(){var c=a.data(this,"sortable");c&&!c.options.disabled&&(d.sortables.push({instance:c,shouldRevert:c.options.revert}),c.refreshPositions(),c._trigger("activate",b,f))})},stop:function(b,c){var d=a(this).data("draggable"),e=a.extend({},c,{item:d.element});a.each(d.sortables,function(){this.instance.isOver?(this.instance.isOver=0,d.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=!0),this.instance._mouseStop(b),this.instance.options.helper=this.instance.options._helper,d.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",b,e))})},drag:function(b,c){var d=a(this).data("draggable"),e=this,f=function(b){var c=this.offset.click.top,d=this.offset.click.left,e=this.positionAbs.top,f=this.positionAbs.left,g=b.height,h=b.width,i=b.top,j=b.left;return a.ui.isOver(e+c,f+d,i,j,g,h)};a.each(d.sortables,function(f){this.instance.positionAbs=d.positionAbs,this.instance.helperProportions=d.helperProportions,this.instance.offset.click=d.offset.click,this.instance._intersectsWith(this.instance.containerCache)?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=a(e).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return c.helper[0]},b.target=this.instance.currentItem[0],this.instance._mouseCapture(b,!0),this.instance._mouseStart(b,!0,!0),this.instance.offset.click.top=d.offset.click.top,this.instance.offset.click.left=d.offset.click.left,this.instance.offset.parent.left-=d.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=d.offset.parent.top-this.instance.offset.parent.top,d._trigger("toSortable",b),d.dropped=this.instance.element,d.currentItem=d.element,this.instance.fromOutside=d),this.instance.currentItem&&this.instance._mouseDrag(b)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",b,this.instance._uiHash(this.instance)),this.instance._mouseStop(b,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),d._trigger("fromSortable",b),d.dropped=!1)})}}),a.ui.plugin.add("draggable","cursor",{start:function(b,c){var d=a("body"),e=a(this).data("draggable").options;d.css("cursor")&&(e._cursor=d.css("cursor")),d.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;d._cursor&&a("body").css("cursor",d._cursor)}}),a.ui.plugin.add("draggable","opacity",{start:function(b,c){var d=a(c.helper),e=a(this).data("draggable").options;d.css("opacity")&&(e._opacity=d.css("opacity")),d.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;d._opacity&&a(c.helper).css("opacity",d._opacity)}}),a.ui.plugin.add("draggable","scroll",{start:function(b,c){var d=a(this).data("draggable");d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"&&(d.overflowOffset=d.scrollParent.offset())},drag:function(b,c){var d=a(this).data("draggable"),e=d.options,f=!1;if(d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"){if(!e.axis||e.axis!="x")d.overflowOffset.top+d.scrollParent[0].offsetHeight-b.pageY<e.scrollSensitivity?d.scrollParent[0].scrollTop=f=d.scrollParent[0].scrollTop+e.scrollSpeed:b.pageY-d.overflowOffset.top<e.scrollSensitivity&&(d.scrollParent[0].scrollTop=f=d.scrollParent[0].scrollTop-e.scrollSpeed);if(!e.axis||e.axis!="y")d.overflowOffset.left+d.scrollParent[0].offsetWidth-b.pageX<e.scrollSensitivity?d.scrollParent[0].scrollLeft=f=d.scrollParent[0].scrollLeft+e.scrollSpeed:b.pageX-d.overflowOffset.left<e.scrollSensitivity&&(d.scrollParent[0].scrollLeft=f=d.scrollParent[0].scrollLeft-e.scrollSpeed)}else{if(!e.axis||e.axis!="x")b.pageY-a(document).scrollTop()<e.scrollSensitivity?f=a(document).scrollTop(a(document).scrollTop()-e.scrollSpeed):a(window).height()-(b.pageY-a(document).scrollTop())<e.scrollSensitivity&&(f=a(document).scrollTop(a(document).scrollTop()+e.scrollSpeed));if(!e.axis||e.axis!="y")b.pageX-a(document).scrollLeft()<e.scrollSensitivity?f=a(document).scrollLeft(a(document).scrollLeft()-e.scrollSpeed):a(window).width()-(b.pageX-a(document).scrollLeft())<e.scrollSensitivity&&(f=a(document).scrollLeft(a(document).scrollLeft()+e.scrollSpeed))}f!==!1&&a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(d,b)}}),a.ui.plugin.add("draggable","snap",{start:function(b,c){var d=a(this).data("draggable"),e=d.options;d.snapElements=[],a(e.snap.constructor!=String?e.snap.items||":data(draggable)":e.snap).each(function(){var b=a(this),c=b.offset();this!=d.element[0]&&d.snapElements.push({item:this,width:b.outerWidth(),height:b.outerHeight(),top:c.top,left:c.left})})},drag:function(b,c){var d=a(this).data("draggable"),e=d.options,f=e.snapTolerance,g=c.offset.left,h=g+d.helperProportions.width,i=c.offset.top,j=i+d.helperProportions.height;for(var k=d.snapElements.length-1;k>=0;k--){var l=d.snapElements[k].left,m=l+d.snapElements[k].width,n=d.snapElements[k].top,o=n+d.snapElements[k].height;if(!(l-f<g&&g<m+f&&n-f<i&&i<o+f||l-f<g&&g<m+f&&n-f<j&&j<o+f||l-f<h&&h<m+f&&n-f<i&&i<o+f||l-f<h&&h<m+f&&n-f<j&&j<o+f)){d.snapElements[k].snapping&&d.options.snap.release&&d.options.snap.release.call(d.element,b,a.extend(d._uiHash(),{snapItem:d.snapElements[k].item})),d.snapElements[k].snapping=!1;continue}if(e.snapMode!="inner"){var p=Math.abs(n-j)<=f,q=Math.abs(o-i)<=f,r=Math.abs(l-h)<=f,s=Math.abs(m-g)<=f;p&&(c.position.top=d._convertPositionTo("relative",{top:n-d.helperProportions.height,left:0}).top-d.margins.top),q&&(c.position.top=d._convertPositionTo("relative",{top:o,left:0}).top-d.margins.top),r&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l-d.helperProportions.width}).left-d.margins.left),s&&(c.position.left=d._convertPositionTo("relative",{top:0,left:m}).left-d.margins.left)}var t=p||q||r||s;if(e.snapMode!="outer"){var p=Math.abs(n-i)<=f,q=Math.abs(o-j)<=f,r=Math.abs(l-g)<=f,s=Math.abs(m-h)<=f;p&&(c.position.top=d._convertPositionTo("relative",{top:n,left:0}).top-d.margins.top),q&&(c.position.top=d._convertPositionTo("relative",{top:o-d.helperProportions.height,left:0}).top-d.margins.top),r&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l}).left-d.margins.left),s&&(c.position.left=d._convertPositionTo("relative",{top:0,left:m-d.helperProportions.width}).left-d.margins.left)}!d.snapElements[k].snapping&&(p||q||r||s||t)&&d.options.snap.snap&&d.options.snap.snap.call(d.element,b,a.extend(d._uiHash(),{snapItem:d.snapElements[k].item})),d.snapElements[k].snapping=p||q||r||s||t}}}),a.ui.plugin.add("draggable","stack",{start:function(b,c){var d=a(this).data("draggable").options,e=a.makeArray(a(d.stack)).sort(function(b,c){return(parseInt(a(b).css("zIndex"),10)||0)-(parseInt(a(c).css("zIndex"),10)||0)});if(!e.length)return;var f=parseInt(e[0].style.zIndex)||0;a(e).each(function(a){this.style.zIndex=f+a}),this[0].style.zIndex=f+e.length}}),a.ui.plugin.add("draggable","zIndex",{start:function(b,c){var d=a(c.helper),e=a(this).data("draggable").options;d.css("zIndex")&&(e._zIndex=d.css("zIndex")),d.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;d._zIndex&&a(c.helper).css("zIndex",d._zIndex)}})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15
2196+* https://github.com/jquery/jquery-ui
2197+* Includes: jquery.ui.droppable.js
2198+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
2199+(function(a,b){a.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect"},_create:function(){var b=this.options,c=b.accept;this.isover=0,this.isout=1,this.accept=a.isFunction(c)?c:function(a){return a.is(c)},this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight},a.ui.ddmanager.droppables[b.scope]=a.ui.ddmanager.droppables[b.scope]||[],a.ui.ddmanager.droppables[b.scope].push(this),b.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){var b=a.ui.ddmanager.droppables[this.options.scope];for(var c=0;c<b.length;c++)b[c]==this&&b.splice(c,1);return this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable"),this},_setOption:function(b,c){b=="accept"&&(this.accept=a.isFunction(c)?c:function(a){return a.is(c)}),a.Widget.prototype._setOption.apply(this,arguments)},_activate:function(b){var c=a.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),c&&this._trigger("activate",b,this.ui(c))},_deactivate:function(b){var c=a.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),c&&this._trigger("deactivate",b,this.ui(c))},_over:function(b){var c=a.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return;this.accept.call(this.element[0],c.currentItem||c.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",b,this.ui(c)))},_out:function(b){var c=a.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return;this.accept.call(this.element[0],c.currentItem||c.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",b,this.ui(c)))},_drop:function(b,c){var d=c||a.ui.ddmanager.current;if(!d||(d.currentItem||d.element)[0]==this.element[0])return!1;var e=!1;return this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var b=a.data(this,"droppable");if(b.options.greedy&&!b.options.disabled&&b.options.scope==d.options.scope&&b.accept.call(b.element[0],d.currentItem||d.element)&&a.ui.intersect(d,a.extend(b,{offset:b.element.offset()}),b.options.tolerance))return e=!0,!1}),e?!1:this.accept.call(this.element[0],d.currentItem||d.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",b,this.ui(d)),this.element):!1},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}}),a.extend(a.ui.droppable,{version:"1.8.23"}),a.ui.intersect=function(b,c,d){if(!c.offset)return!1;var e=(b.positionAbs||b.position.absolute).left,f=e+b.helperProportions.width,g=(b.positionAbs||b.position.absolute).top,h=g+b.helperProportions.height,i=c.offset.left,j=i+c.proportions.width,k=c.offset.top,l=k+c.proportions.height;switch(d){case"fit":return i<=e&&f<=j&&k<=g&&h<=l;case"intersect":return i<e+b.helperProportions.width/2&&f-b.helperProportions.width/2<j&&k<g+b.helperProportions.height/2&&h-b.helperProportions.height/2<l;case"pointer":var m=(b.positionAbs||b.position.absolute).left+(b.clickOffset||b.offset.click).left,n=(b.positionAbs||b.position.absolute).top+(b.clickOffset||b.offset.click).top,o=a.ui.isOver(n,m,k,i,c.proportions.height,c.proportions.width);return o;case"touch":return(g>=k&&g<=l||h>=k&&h<=l||g<k&&h>l)&&(e>=i&&e<=j||f>=i&&f<=j||e<i&&f>j);default:return!1}},a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(b,c){var d=a.ui.ddmanager.droppables[b.options.scope]||[],e=c?c.type:null,f=(b.currentItem||b.element).find(":data(droppable)").andSelf();g:for(var h=0;h<d.length;h++){if(d[h].options.disabled||b&&!d[h].accept.call(d[h].element[0],b.currentItem||b.element))continue;for(var i=0;i<f.length;i++)if(f[i]==d[h].element[0]){d[h].proportions.height=0;continue g}d[h].visible=d[h].element.css("display")!="none";if(!d[h].visible)continue;e=="mousedown"&&d[h]._activate.call(d[h],c),d[h].offset=d[h].element.offset(),d[h].proportions={width:d[h].element[0].offsetWidth,height:d[h].element[0].offsetHeight}}},drop:function(b,c){var d=!1;return a.each(a.ui.ddmanager.droppables[b.options.scope]||[],function(){if(!this.options)return;!this.options.disabled&&this.visible&&a.ui.intersect(b,this,this.options.tolerance)&&(d=this._drop.call(this,c)||d),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],b.currentItem||b.element)&&(this.isout=1,this.isover=0,this._deactivate.call(this,c))}),d},dragStart:function(b,c){b.element.parents(":not(body,html)").bind("scroll.droppable",function(){b.options.refreshPositions||a.ui.ddmanager.prepareOffsets(b,c)})},drag:function(b,c){b.options.refreshPositions&&a.ui.ddmanager.prepareOffsets(b,c),a.each(a.ui.ddmanager.droppables[b.options.scope]||[],function(){if(this.options.disabled||this.greedyChild||!this.visible)return;var d=a.ui.intersect(b,this,this.options.tolerance),e=!d&&this.isover==1?"isout":d&&this.isover==0?"isover":null;if(!e)return;var f;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");g.length&&(f=a.data(g[0],"droppable"),f.greedyChild=e=="isover"?1:0)}f&&e=="isover"&&(f.isover=0,f.isout=1,f._out.call(f,c)),this[e]=1,this[e=="isout"?"isover":"isout"]=0,this[e=="isover"?"_over":"_out"].call(this,c),f&&e=="isout"&&(f.isout=0,f.isover=1,f._over.call(f,c))})},dragStop:function(b,c){b.element.parents(":not(body,html)").unbind("scroll.droppable"),b.options.refreshPositions||a.ui.ddmanager.prepareOffsets(b,c)}}})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15
2200+* https://github.com/jquery/jquery-ui
2201+* Includes: jquery.ui.resizable.js
2202+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
2203+(function(a,b){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1e3},_create:function(){var b=this,c=this.options;this.element.addClass("ui-resizable"),a.extend(this,{_aspectRatio:!!c.aspectRatio,aspectRatio:c.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:c.helper||c.ghost||c.animate?c.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(a('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("resizable",this.element.data("resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=c.handles||(a(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se");if(this.handles.constructor==String){this.handles=="all"&&(this.handles="n,e,s,w,se,sw,ne,nw");var d=this.handles.split(",");this.handles={};for(var e=0;e<d.length;e++){var f=a.trim(d[e]),g="ui-resizable-"+f,h=a('<div class="ui-resizable-handle '+g+'"></div>');h.css({zIndex:c.zIndex}),"se"==f&&h.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[f]=".ui-resizable-"+f,this.element.append(h)}}this._renderAxis=function(b){b=b||this.element;for(var c in this.handles){this.handles[c].constructor==String&&(this.handles[c]=a(this.handles[c],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var d=a(this.handles[c],this.element),e=0;e=/sw|ne|nw|se|n|s/.test(c)?d.outerHeight():d.outerWidth();var f=["padding",/ne|nw|n/.test(c)?"Top":/se|sw|s/.test(c)?"Bottom":/^e$/.test(c)?"Right":"Left"].join("");b.css(f,e),this._proportionallyResize()}if(!a(this.handles[c]).length)continue}},this._renderAxis(this.element),this._handles=a(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){if(!b.resizing){if(this.className)var a=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=a&&a[1]?a[1]:"se"}}),c.autoHide&&(this._handles.hide(),a(this.element).addClass("ui-resizable-autohide").hover(function(){if(c.disabled)return;a(this).removeClass("ui-resizable-autohide"),b._handles.show()},function(){if(c.disabled)return;b.resizing||(a(this).addClass("ui-resizable-autohide"),b._handles.hide())})),this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(b){a(b).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var c=this.element;c.after(this.originalElement.css({position:c.css("position"),width:c.outerWidth(),height:c.outerHeight(),top:c.css("top"),left:c.css("left")})).remove()}return this.originalElement.css("resize",this.originalResizeStyle),b(this.originalElement),this},_mouseCapture:function(b){var c=!1;for(var d in this.handles)a(this.handles[d])[0]==b.target&&(c=!0);return!this.options.disabled&&c},_mouseStart:function(b){var d=this.options,e=this.element.position(),f=this.element;this.resizing=!0,this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()},(f.is(".ui-draggable")||/absolute/.test(f.css("position")))&&f.css({position:"absolute",top:e.top,left:e.left}),this._renderProxy();var g=c(this.helper.css("left")),h=c(this.helper.css("top"));d.containment&&(g+=a(d.containment).scrollLeft()||0,h+=a(d.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:g,top:h},this.size=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalSize=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalPosition={left:g,top:h},this.sizeDiff={width:f.outerWidth()-f.width(),height:f.outerHeight()-f.height()},this.originalMousePosition={left:b.pageX,top:b.pageY},this.aspectRatio=typeof d.aspectRatio=="number"?d.aspectRatio:this.originalSize.width/this.originalSize.height||1;var i=a(".ui-resizable-"+this.axis).css("cursor");return a("body").css("cursor",i=="auto"?this.axis+"-resize":i),f.addClass("ui-resizable-resizing"),this._propagate("start",b),!0},_mouseDrag:function(b){var c=this.helper,d=this.options,e={},f=this,g=this.originalMousePosition,h=this.axis,i=b.pageX-g.left||0,j=b.pageY-g.top||0,k=this._change[h];if(!k)return!1;var l=k.apply(this,[b,i,j]),m=a.browser.msie&&a.browser.version<7,n=this.sizeDiff;this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)l=this._updateRatio(l,b);return l=this._respectSize(l,b),this._propagate("resize",b),c.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"}),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),this._updateCache(l),this._trigger("resize",b,this.ui()),!1},_mouseStop:function(b){this.resizing=!1;var c=this.options,d=this;if(this._helper){var e=this._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName),g=f&&a.ui.hasScroll(e[0],"left")?0:d.sizeDiff.height,h=f?0:d.sizeDiff.width,i={width:d.helper.width()-h,height:d.helper.height()-g},j=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,k=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;c.animate||this.element.css(a.extend(i,{top:k,left:j})),d.helper.height(d.size.height),d.helper.width(d.size.width),this._helper&&!c.animate&&this._proportionallyResize()}return a("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",b),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(a){var b=this.options,c,e,f,g,h;h={minWidth:d(b.minWidth)?b.minWidth:0,maxWidth:d(b.maxWidth)?b.maxWidth:Infinity,minHeight:d(b.minHeight)?b.minHeight:0,maxHeight:d(b.maxHeight)?b.maxHeight:Infinity};if(this._aspectRatio||a)c=h.minHeight*this.aspectRatio,f=h.minWidth/this.aspectRatio,e=h.maxHeight*this.aspectRatio,g=h.maxWidth/this.aspectRatio,c>h.minWidth&&(h.minWidth=c),f>h.minHeight&&(h.minHeight=f),e<h.maxWidth&&(h.maxWidth=e),g<h.maxHeight&&(h.maxHeight=g);this._vBoundaries=h},_updateCache:function(a){var b=this.options;this.offset=this.helper.offset(),d(a.left)&&(this.position.left=a.left),d(a.top)&&(this.position.top=a.top),d(a.height)&&(this.size.height=a.height),d(a.width)&&(this.size.width=a.width)},_updateRatio:function(a,b){var c=this.options,e=this.position,f=this.size,g=this.axis;return d(a.height)?a.width=a.height*this.aspectRatio:d(a.width)&&(a.height=a.width/this.aspectRatio),g=="sw"&&(a.left=e.left+(f.width-a.width),a.top=null),g=="nw"&&(a.top=e.top+(f.height-a.height),a.left=e.left+(f.width-a.width)),a},_respectSize:function(a,b){var c=this.helper,e=this._vBoundaries,f=this._aspectRatio||b.shiftKey,g=this.axis,h=d(a.width)&&e.maxWidth&&e.maxWidth<a.width,i=d(a.height)&&e.maxHeight&&e.maxHeight<a.height,j=d(a.width)&&e.minWidth&&e.minWidth>a.width,k=d(a.height)&&e.minHeight&&e.minHeight>a.height;j&&(a.width=e.minWidth),k&&(a.height=e.minHeight),h&&(a.width=e.maxWidth),i&&(a.height=e.maxHeight);var l=this.originalPosition.left+this.originalSize.width,m=this.position.top+this.size.height,n=/sw|nw|w/.test(g),o=/nw|ne|n/.test(g);j&&n&&(a.left=l-e.minWidth),h&&n&&(a.left=l-e.maxWidth),k&&o&&(a.top=m-e.minHeight),i&&o&&(a.top=m-e.maxHeight);var p=!a.width&&!a.height;return p&&!a.left&&a.top?a.top=null:p&&!a.top&&a.left&&(a.left=null),a},_proportionallyResize:function(){var b=this.options;if(!this._proportionallyResizeElements.length)return;var c=this.helper||this.element;for(var d=0;d<this._proportionallyResizeElements.length;d++){var e=this._proportionallyResizeElements[d];if(!this.borderDif){var f=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],g=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];this.borderDif=a.map(f,function(a,b){var c=parseInt(a,10)||0,d=parseInt(g[b],10)||0;return c+d})}if(!a.browser.msie||!a(c).is(":hidden")&&!a(c).parents(":hidden").length)e.css({height:c.height()-this.borderDif[0]-this.borderDif[2]||0,width:c.width()-this.borderDif[1]-this.borderDif[3]||0});else continue}},_renderProxy:function(){var b=this.element,c=this.options;this.elementOffset=b.offset();if(this._helper){this.helper=this.helper||a('<div style="overflow:hidden;"></div>');var d=a.browser.msie&&a.browser.version<7,e=d?1:0,f=d?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+f,height:this.element.outerHeight()+f,position:"absolute",left:this.elementOffset.left-e+"px",top:this.elementOffset.top-e+"px",zIndex:++c.zIndex}),this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(a,b,c){return{width:this.originalSize.width+b}},w:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{left:f.left+b,width:e.width-b}},n:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{top:f.top+c,height:e.height-c}},s:function(a,b,c){return{height:this.originalSize.height+c}},se:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},sw:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,c,d]))},ne:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},nw:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,c,d]))}},_propagate:function(b,c){a.ui.plugin.call(this,b,[c,this.ui()]),b!="resize"&&this._trigger(b,c,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),a.extend(a.ui.resizable,{version:"1.8.23"}),a.ui.plugin.add("resizable","alsoResize",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=function(b){a(b).each(function(){var b=a(this);b.data("resizable-alsoresize",{width:parseInt(b.width(),10),height:parseInt(b.height(),10),left:parseInt(b.css("left"),10),top:parseInt(b.css("top"),10)})})};typeof e.alsoResize=="object"&&!e.alsoResize.parentNode?e.alsoResize.length?(e.alsoResize=e.alsoResize[0],f(e.alsoResize)):a.each(e.alsoResize,function(a){f(a)}):f(e.alsoResize)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.originalSize,g=d.originalPosition,h={height:d.size.height-f.height||0,width:d.size.width-f.width||0,top:d.position.top-g.top||0,left:d.position.left-g.left||0},i=function(b,d){a(b).each(function(){var b=a(this),e=a(this).data("resizable-alsoresize"),f={},g=d&&d.length?d:b.parents(c.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(g,function(a,b){var c=(e[b]||0)+(h[b]||0);c&&c>=0&&(f[b]=c||null)}),b.css(f)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(a,b){i(a,b)}):i(e.alsoResize)},stop:function(b,c){a(this).removeData("resizable-alsoresize")}}),a.ui.plugin.add("resizable","animate",{stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d._proportionallyResizeElements,g=f.length&&/textarea/i.test(f[0].nodeName),h=g&&a.ui.hasScroll(f[0],"left")?0:d.sizeDiff.height,i=g?0:d.sizeDiff.width,j={width:d.size.width-i,height:d.size.height-h},k=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,l=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;d.element.animate(a.extend(j,l&&k?{top:l,left:k}:{}),{duration:e.animateDuration,easing:e.animateEasing,step:function(){var c={width:parseInt(d.element.css("width"),10),height:parseInt(d.element.css("height"),10),top:parseInt(d.element.css("top"),10),left:parseInt(d.element.css("left"),10)};f&&f.length&&a(f[0]).css({width:c.width,height:c.height}),d._updateCache(c),d._propagate("resize",b)}})}}),a.ui.plugin.add("resizable","containment",{start:function(b,d){var e=a(this).data("resizable"),f=e.options,g=e.element,h=f.containment,i=h instanceof a?h.get(0):/parent/.test(h)?g.parent().get(0):h;if(!i)return;e.containerElement=a(i);if(/document/.test(h)||h==document)e.containerOffset={left:0,top:0},e.containerPosition={left:0,top:0},e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight};else{var j=a(i),k=[];a(["Top","Right","Left","Bottom"]).each(function(a,b){k[a]=c(j.css("padding"+b))}),e.containerOffset=j.offset(),e.containerPosition=j.position(),e.containerSize={height:j.innerHeight()-k[3],width:j.innerWidth()-k[1]};var l=e.containerOffset,m=e.containerSize.height,n=e.containerSize.width,o=a.ui.hasScroll(i,"left")?i.scrollWidth:n,p=a.ui.hasScroll(i)?i.scrollHeight:m;e.parentData={element:i,left:l.left,top:l.top,width:o,height:p}}},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.containerSize,g=d.containerOffset,h=d.size,i=d.position,j=d._aspectRatio||b.shiftKey,k={top:0,left:0},l=d.containerElement;l[0]!=document&&/static/.test(l.css("position"))&&(k=g),i.left<(d._helper?g.left:0)&&(d.size.width=d.size.width+(d._helper?d.position.left-g.left:d.position.left-k.left),j&&(d.size.height=d.size.width/d.aspectRatio),d.position.left=e.helper?g.left:0),i.top<(d._helper?g.top:0)&&(d.size.height=d.size.height+(d._helper?d.position.top-g.top:d.position.top),j&&(d.size.width=d.size.height*d.aspectRatio),d.position.top=d._helper?g.top:0),d.offset.left=d.parentData.left+d.position.left,d.offset.top=d.parentData.top+d.position.top;var m=Math.abs((d._helper?d.offset.left-k.left:d.offset.left-k.left)+d.sizeDiff.width),n=Math.abs((d._helper?d.offset.top-k.top:d.offset.top-g.top)+d.sizeDiff.height),o=d.containerElement.get(0)==d.element.parent().get(0),p=/relative|absolute/.test(d.containerElement.css("position"));o&&p&&(m-=d.parentData.left),m+d.size.width>=d.parentData.width&&(d.size.width=d.parentData.width-m,j&&(d.size.height=d.size.width/d.aspectRatio)),n+d.size.height>=d.parentData.height&&(d.size.height=d.parentData.height-n,j&&(d.size.width=d.size.height*d.aspectRatio))},stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.position,g=d.containerOffset,h=d.containerPosition,i=d.containerElement,j=a(d.helper),k=j.offset(),l=j.outerWidth()-d.sizeDiff.width,m=j.outerHeight()-d.sizeDiff.height;d._helper&&!e.animate&&/relative/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m}),d._helper&&!e.animate&&/static/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m})}}),a.ui.plugin.add("resizable","ghost",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size;d.ghost=d.originalElement.clone(),d.ghost.css({opacity:.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof e.ghost=="string"?e.ghost:""),d.ghost.appendTo(d.helper)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})},stop:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.helper&&d.helper.get(0).removeChild(d.ghost.get(0))}}),a.ui.plugin.add("resizable","grid",{resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size,g=d.originalSize,h=d.originalPosition,i=d.axis,j=e._aspectRatio||b.shiftKey;e.grid=typeof e.grid=="number"?[e.grid,e.grid]:e.grid;var k=Math.round((f.width-g.width)/(e.grid[0]||1))*(e.grid[0]||1),l=Math.round((f.height-g.height)/(e.grid[1]||1))*(e.grid[1]||1);/^(se|s|e)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l):/^(ne)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l):/^(sw)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.left=h.left-k):(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l,d.position.left=h.left-k)}});var c=function(a){return parseInt(a,10)||0},d=function(a){return!isNaN(parseInt(a,10))}})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15
2204+* https://github.com/jquery/jquery-ui
2205+* Includes: jquery.ui.selectable.js
2206+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
2207+(function(a,b){a.widget("ui.selectable",a.ui.mouse,{options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch"},_create:function(){var b=this;this.element.addClass("ui-selectable"),this.dragged=!1;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]),c.addClass("ui-selectee"),c.each(function(){var b=a(this),c=b.offset();a.data(this,"selectable-item",{element:this,$element:b,left:c.left,top:c.top,right:c.left+b.outerWidth(),bottom:c.top+b.outerHeight(),startselected:!1,selected:b.hasClass("ui-selected"),selecting:b.hasClass("ui-selecting"),unselecting:b.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=c.addClass("ui-selectee"),this._mouseInit(),this.helper=a("<div class='ui-selectable-helper'></div>")},destroy:function(){return this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable"),this._mouseDestroy(),this},_mouseStart:function(b){var c=this;this.opos=[b.pageX,b.pageY];if(this.options.disabled)return;var d=this.options;this.selectees=a(d.filter,this.element[0]),this._trigger("start",b),a(d.appendTo).append(this.helper),this.helper.css({left:b.clientX,top:b.clientY,width:0,height:0}),d.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var d=a.data(this,"selectable-item");d.startselected=!0,!b.metaKey&&!b.ctrlKey&&(d.$element.removeClass("ui-selected"),d.selected=!1,d.$element.addClass("ui-unselecting"),d.unselecting=!0,c._trigger("unselecting",b,{unselecting:d.element}))}),a(b.target).parents().andSelf().each(function(){var d=a.data(this,"selectable-item");if(d){var e=!b.metaKey&&!b.ctrlKey||!d.$element.hasClass("ui-selected");return d.$element.removeClass(e?"ui-unselecting":"ui-selected").addClass(e?"ui-selecting":"ui-unselecting"),d.unselecting=!e,d.selecting=e,d.selected=e,e?c._trigger("selecting",b,{selecting:d.element}):c._trigger("unselecting",b,{unselecting:d.element}),!1}})},_mouseDrag:function(b){var c=this;this.dragged=!0;if(this.options.disabled)return;var d=this.options,e=this.opos[0],f=this.opos[1],g=b.pageX,h=b.pageY;if(e>g){var i=g;g=e,e=i}if(f>h){var i=h;h=f,f=i}return this.helper.css({left:e,top:f,width:g-e,height:h-f}),this.selectees.each(function(){var i=a.data(this,"selectable-item");if(!i||i.element==c.element[0])return;var j=!1;d.tolerance=="touch"?j=!(i.left>g||i.right<e||i.top>h||i.bottom<f):d.tolerance=="fit"&&(j=i.left>e&&i.right<g&&i.top>f&&i.bottom<h),j?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,c._trigger("selecting",b,{selecting:i.element}))):(i.selecting&&((b.metaKey||b.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),c._trigger("unselecting",b,{unselecting:i.element}))),i.selected&&!b.metaKey&&!b.ctrlKey&&!i.startselected&&(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,c._trigger("unselecting",b,{unselecting:i.element})))}),!1},_mouseStop:function(b){var c=this;this.dragged=!1;var d=this.options;return a(".ui-unselecting",this.element[0]).each(function(){var d=a.data(this,"selectable-item");d.$element.removeClass("ui-unselecting"),d.unselecting=!1,d.startselected=!1,c._trigger("unselected",b,{unselected:d.element})}),a(".ui-selecting",this.element[0]).each(function(){var d=a.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected"),d.selecting=!1,d.selected=!0,d.startselected=!0,c._trigger("selected",b,{selected:d.element})}),this._trigger("stop",b),this.helper.remove(),!1}}),a.extend(a.ui.selectable,{version:"1.8.23"})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15
2208+* https://github.com/jquery/jquery-ui
2209+* Includes: jquery.ui.sortable.js
2210+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
2211+(function(a,b){a.widget("ui.sortable",a.ui.mouse,{widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3},_create:function(){var a=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},destroy:function(){a.Widget.prototype.destroy.call(this),this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var b=this.items.length-1;b>=0;b--)this.items[b].item.removeData(this.widgetName+"-item");return this},_setOption:function(b,c){b==="disabled"?(this.options[b]=c,this.widget()[c?"addClass":"removeClass"]("ui-sortable-disabled")):a.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(b,c){var d=this;if(this.reverting)return!1;if(this.options.disabled||this.options.type=="static")return!1;this._refreshItems(b);var e=null,f=this,g=a(b.target).parents().each(function(){if(a.data(this,d.widgetName+"-item")==f)return e=a(this),!1});a.data(b.target,d.widgetName+"-item")==f&&(e=a(b.target));if(!e)return!1;if(this.options.handle&&!c){var h=!1;a(this.options.handle,e).find("*").andSelf().each(function(){this==b.target&&(h=!0)});if(!h)return!1}return this.currentItem=e,this._removeCurrentsFromItems(),!0},_mouseStart:function(b,c,d){var e=this.options,f=this;this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(b),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(b),this.originalPageX=b.pageX,this.originalPageY=b.pageY,e.cursorAt&&this._adjustOffsetFromHelper(e.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!=this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),e.containment&&this._setContainment(),e.cursor&&(a("body").css("cursor")&&(this._storedCursor=a("body").css("cursor")),a("body").css("cursor",e.cursor)),e.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",e.opacity)),e.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",e.zIndex)),this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",b,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions();if(!d)for(var g=this.containers.length-1;g>=0;g--)this.containers[g]._trigger("activate",b,f._uiHash(this));return a.ui.ddmanager&&(a.ui.ddmanager.current=this),a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(b),!0},_mouseDrag:function(b){this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs);if(this.options.scroll){var c=this.options,d=!1;this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-b.pageY<c.scrollSensitivity?this.scrollParent[0].scrollTop=d=this.scrollParent[0].scrollTop+c.scrollSpeed:b.pageY-this.overflowOffset.top<c.scrollSensitivity&&(this.scrollParent[0].scrollTop=d=this.scrollParent[0].scrollTop-c.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-b.pageX<c.scrollSensitivity?this.scrollParent[0].scrollLeft=d=this.scrollParent[0].scrollLeft+c.scrollSpeed:b.pageX-this.overflowOffset.left<c.scrollSensitivity&&(this.scrollParent[0].scrollLeft=d=this.scrollParent[0].scrollLeft-c.scrollSpeed)):(b.pageY-a(document).scrollTop()<c.scrollSensitivity?d=a(document).scrollTop(a(document).scrollTop()-c.scrollSpeed):a(window).height()-(b.pageY-a(document).scrollTop())<c.scrollSensitivity&&(d=a(document).scrollTop(a(document).scrollTop()+c.scrollSpeed)),b.pageX-a(document).scrollLeft()<c.scrollSensitivity?d=a(document).scrollLeft(a(document).scrollLeft()-c.scrollSpeed):a(window).width()-(b.pageX-a(document).scrollLeft())<c.scrollSensitivity&&(d=a(document).scrollLeft(a(document).scrollLeft()+c.scrollSpeed))),d!==!1&&a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(var e=this.items.length-1;e>=0;e--){var f=this.items[e],g=f.item[0],h=this._intersectsWithPointer(f);if(!h)continue;if(g!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=g&&!a.ui.contains(this.placeholder[0],g)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],g):!0)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(f))this._rearrange(b,f);else break;this._trigger("change",b,this._uiHash());break}}return this._contactContainers(b),a.ui.ddmanager&&a.ui.ddmanager.drag(this,b),this._trigger("sort",b,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(b,c){if(!b)return;a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,b);if(this.options.revert){var d=this,e=d.placeholder.offset();d.reverting=!0,a(this.helper).animate({left:e.left-this.offset.parent.left-d.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-d.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){d._clear(b)})}else this._clear(b,c);return!1},cancel:function(){var b=this;if(this.dragging){this._mouseUp({target:null}),this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("deactivate",null,b._uiHash(this)),this.containers[c].containerCache.over&&(this.containers[c]._trigger("out",null,b._uiHash(this)),this.containers[c].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),a.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(b){var c=this._getItemsAsjQuery(b&&b.connected),d=[];return b=b||{},a(c).each(function(){var c=(a(b.item||this).attr(b.attribute||"id")||"").match(b.expression||/(.+)[-=_](.+)/);c&&d.push((b.key||c[1]+"[]")+"="+(b.key&&b.expression?c[1]:c[2]))}),!d.length&&b.key&&d.push(b.key+"="),d.join("&")},toArray:function(b){var c=this._getItemsAsjQuery(b&&b.connected),d=[];return b=b||{},c.each(function(){d.push(a(b.item||this).attr(b.attribute||"id")||"")}),d},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,d=this.positionAbs.top,e=d+this.helperProportions.height,f=a.left,g=f+a.width,h=a.top,i=h+a.height,j=this.offset.click.top,k=this.offset.click.left,l=d+j>h&&d+j<i&&b+k>f&&b+k<g;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?l:f<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<g&&h<d+this.helperProportions.height/2&&e-this.helperProportions.height/2<i},_intersectsWithPointer:function(b){var c=this.options.axis==="x"||a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,b.top,b.height),d=this.options.axis==="y"||a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,b.left,b.width),e=c&&d,f=this._getDragVerticalDirection(),g=this._getDragHorizontalDirection();return e?this.floating?g&&g=="right"||f=="down"?2:1:f&&(f=="down"?2:1):!1},_intersectsWithSides:function(b){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,b.top+b.height/2,b.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,b.left+b.width/2,b.width),e=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();return this.floating&&f?f=="right"&&d||f=="left"&&!d:e&&(e=="down"&&c||e=="up"&&!c)},_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){return this._refreshItems(a),this.refreshPositions(),this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(b){var c=this,d=[],e=[],f=this._connectWith();if(f&&b)for(var g=f.length-1;g>=0;g--){var h=a(f[g]);for(var i=h.length-1;i>=0;i--){var j=a.data(h[i],this.widgetName);j&&j!=this&&!j.options.disabled&&e.push([a.isFunction(j.options.items)?j.options.items.call(j.element):a(j.options.items,j.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),j])}}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(var g=e.length-1;g>=0;g--)e[g][0].each(function(){d.push(this)});return a(d)},_removeCurrentsFromItems:function(){var a=this.currentItem.find(":data("+this.widgetName+"-item)");for(var b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(b){this.items=[],this.containers=[this];var c=this.items,d=this,e=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],b,{item:this.currentItem}):a(this.options.items,this.element),this]],f=this._connectWith();if(f&&this.ready)for(var g=f.length-1;g>=0;g--){var h=a(f[g]);for(var i=h.length-1;i>=0;i--){var j=a.data(h[i],this.widgetName);j&&j!=this&&!j.options.disabled&&(e.push([a.isFunction(j.options.items)?j.options.items.call(j.element[0],b,{item:this.currentItem}):a(j.options.items,j.element),j]),this.containers.push(j))}}for(var g=e.length-1;g>=0;g--){var k=e[g][1],l=e[g][0];for(var i=0,m=l.length;i<m;i++){var n=a(l[i]);n.data(this.widgetName+"-item",k),c.push({item:n,instance:k,width:0,height:0,left:0,top:0})}}},refreshPositions:function(b){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());for(var c=this.items.length-1;c>=0;c--){var d=this.items[c];if(d.instance!=this.currentContainer&&this.currentContainer&&d.item[0]!=this.currentItem[0])continue;var e=this.options.toleranceElement?a(this.options.toleranceElement,d.item):d.item;b||(d.width=e.outerWidth(),d.height=e.outerHeight());var f=e.offset();d.left=f.left,d.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(var c=this.containers.length-1;c>=0;c--){var f=this.containers[c].element.offset();this.containers[c].containerCache.left=f.left,this.containers[c].containerCache.top=f.top,this.containers[c].containerCache.width=this.containers[c].element.outerWidth(),this.containers[c].containerCache.height=this.containers[c].element.outerHeight()}return this},_createPlaceholder:function(b){var c=b||this,d=c.options;if(!d.placeholder||d.placeholder.constructor==String){var e=d.placeholder;d.placeholder={element:function(){var b=a(document.createElement(c.currentItem[0].nodeName)).addClass(e||c.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];return e||(b.style.visibility="hidden"),b},update:function(a,b){if(e&&!d.forcePlaceholderSize)return;b.height()||b.height(c.currentItem.innerHeight()-parseInt(c.currentItem.css("paddingTop")||0,10)-parseInt(c.currentItem.css("paddingBottom")||0,10)),b.width()||b.width(c.currentItem.innerWidth()-parseInt(c.currentItem.css("paddingLeft")||0,10)-parseInt(c.currentItem.css("paddingRight")||0,10))}}}c.placeholder=a(d.placeholder.element.call(c.element,c.currentItem)),c.currentItem.after(c.placeholder),d.placeholder.update(c,c.placeholder)},_contactContainers:function(b){var c=null,d=null;for(var e=this.containers.length-1;e>=0;e--){if(a.ui.contains(this.currentItem[0],this.containers[e].element[0]))continue;if(this._intersectsWith(this.containers[e].containerCache)){if(c&&a.ui.contains(this.containers[e].element[0],c.element[0]))continue;c=this.containers[e],d=e}else this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",b,this._uiHash(this)),this.containers[e].containerCache.over=0)}if(!c)return;if(this.containers.length===1)this.containers[d]._trigger("over",b,this._uiHash(this)),this.containers[d].containerCache.over=1;else if(this.currentContainer!=this.containers[d]){var f=1e4,g=null,h=this.positionAbs[this.containers[d].floating?"left":"top"];for(var i=this.items.length-1;i>=0;i--){if(!a.ui.contains(this.containers[d].element[0],this.items[i].item[0]))continue;var j=this.containers[d].floating?this.items[i].item.offset().left:this.items[i].item.offset().top;Math.abs(j-h)<f&&(f=Math.abs(j-h),g=this.items[i],this.direction=j-h>0?"down":"up")}if(!g&&!this.options.dropOnEmpty)return;this.currentContainer=this.containers[d],g?this._rearrange(b,g,null,!0):this._rearrange(b,null,this.containers[d].element,!0),this._trigger("change",b,this._uiHash()),this.containers[d]._trigger("change",b,this._uiHash(this)),this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[d]._trigger("over",b,this._uiHash(this)),this.containers[d].containerCache.over=1}},_createHelper:function(b){var c=this.options,d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[b,this.currentItem])):c.helper=="clone"?this.currentItem.clone():this.currentItem;return d.parents("body").length||a(c.appendTo!="parent"?c.appendTo:this.currentItem[0].parentNode)[0].appendChild(d[0]),d[0]==this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(d[0].style.width==""||c.forceHelperSize)&&d.width(this.currentItem.width()),(d[0].style.height==""||c.forceHelperSize)&&d.height(this.currentItem.height()),d},_adjustOffsetFromHelper:function(b){typeof b=="string"&&(b=b.split(" ")),a.isArray(b)&&(b={left:+b[0],top:+b[1]||0}),"left"in b&&(this.offset.click.left=b.left+this.margins.left),"right"in b&&(this.offset.click.left=this.helperProportions.width-b.right+this.margins.left),"top"in b&&(this.offset.click.top=b.top+this.margins.top),"bottom"in b&&(this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])&&(b.left+=this.scrollParent.scrollLeft(),b.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)b={top:0,left:0};return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var b=this.options;b.containment=="parent"&&(b.containment=this.helper[0].parentNode);if(b.containment=="document"||b.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(b.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(b.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(b.containment)){var c=a(b.containment)[0],d=a(b.containment).offset(),e=a(c).css("overflow")!="hidden";this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(e?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(e?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(b,c){c||(c=this.position);var d=b=="absolute"?1:-1,e=this.options,f=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=/(html|body)/i.test(f[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():g?0:f.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:f.scrollLeft())*d)}},_generatePosition:function(b){var c=this.options,d=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(d[0].tagName);this.cssPosition=="relative"&&(this.scrollParent[0]==document||this.scrollParent[0]==this.offsetParent[0])&&(this.offset.relative=this._getRelativeOffset());var f=b.pageX,g=b.pageY;if(this.originalPosition){this.containment&&(b.pageX-this.offset.click.left<this.containment[0]&&(f=this.containment[0]+this.offset.click.left),b.pageY-this.offset.click.top<this.containment[1]&&(g=this.containment[1]+this.offset.click.top),b.pageX-this.offset.click.left>this.containment[2]&&(f=this.containment[2]+this.offset.click.left),b.pageY-this.offset.click.top>this.containment[3]&&(g=this.containment[3]+this.offset.click.top));if(c.grid){var h=this.originalPageY+Math.round((g-this.originalPageY)/c.grid[1])*c.grid[1];g=this.containment?h-this.offset.click.top<this.containment[1]||h-this.offset.click.top>this.containment[3]?h-this.offset.click.top<this.containment[1]?h+c.grid[1]:h-c.grid[1]:h:h;var i=this.originalPageX+Math.round((f-this.originalPageX)/c.grid[0])*c.grid[0];f=this.containment?i-this.offset.click.left<this.containment[0]||i-this.offset.click.left>this.containment[2]?i-this.offset.click.left<this.containment[0]?i+c.grid[0]:i-c.grid[0]:i:i}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:d.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:d.scrollLeft())}},_rearrange:function(a,b,c,d){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],this.direction=="down"?b.item[0]:b.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var e=this,f=this.counter;window.setTimeout(function(){f==e.counter&&e.refreshPositions(!d)},0)},_clear:function(b,c){this.reverting=!1;var d=[],e=this;!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var f in this._storedCSS)if(this._storedCSS[f]=="auto"||this._storedCSS[f]=="static")this._storedCSS[f]="";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!c&&d.push(function(a){this._trigger("receive",a,this._uiHash(this.fromOutside))}),(this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!c&&d.push(function(a){this._trigger("update",a,this._uiHash())});if(!a.ui.contains(this.element[0],this.currentItem[0])){c||d.push(function(a){this._trigger("remove",a,this._uiHash())});for(var f=this.containers.length-1;f>=0;f--)a.ui.contains(this.containers[f].element[0],this.currentItem[0])&&!c&&(d.push(function(a){return function(b){a._trigger("receive",b,this._uiHash(this))}}.call(this,this.containers[f])),d.push(function(a){return function(b){a._trigger("update",b,this._uiHash(this))}}.call(this,this.containers[f])))}for(var f=this.containers.length-1;f>=0;f--)c||d.push(function(a){return function(b){a._trigger("deactivate",b,this._uiHash(this))}}.call(this,this.containers[f])),this.containers[f].containerCache.over&&(d.push(function(a){return function(b){a._trigger("out",b,this._uiHash(this))}}.call(this,this.containers[f])),this.containers[f].containerCache.over=0);this._storedCursor&&a("body").css("cursor",this._storedCursor),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex),this.dragging=!1;if(this.cancelHelperRemoval){if(!c){this._trigger("beforeStop",b,this._uiHash());for(var f=0;f<d.length;f++)d[f].call(this,b);this._trigger("stop",b,this._uiHash())}return this.fromOutside=!1,!1}c||this._trigger("beforeStop",b,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!=this.currentItem[0]&&this.helper.remove(),this.helper=null;if(!c){for(var f=0;f<d.length;f++)d[f].call(this,b);this._trigger("stop",b,this._uiHash())}return this.fromOutside=!1,!0},_trigger:function(){a.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(b){var c=b||this;return{helper:c.helper,placeholder:c.placeholder||a([]),position:c.position,originalPosition:c.originalPosition,offset:c.positionAbs,item:c.currentItem,sender:b?b.element:null}}}),a.extend(a.ui.sortable,{version:"1.8.23"})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15
2212+* https://github.com/jquery/jquery-ui
2213+* Includes: jquery.ui.accordion.js
2214+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
2215+(function(a,b){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:!0,clearStyle:!1,collapsible:!1,event:"click",fillSpace:!1,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:!1,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var b=this,c=b.options;b.running=0,b.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"),b.headers=b.element.find(c.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){if(c.disabled)return;a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){if(c.disabled)return;a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){if(c.disabled)return;a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){if(c.disabled)return;a(this).removeClass("ui-state-focus")}),b.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");if(c.navigation){var d=b.element.find("a").filter(c.navigationFilter).eq(0);if(d.length){var e=d.closest(".ui-accordion-header");e.length?b.active=e:b.active=d.closest(".ui-accordion-content").prev()}}b.active=b._findActive(b.active||c.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top"),b.active.next().addClass("ui-accordion-content-active"),b._createIcons(),b.resize(),b.element.attr("role","tablist"),b.headers.attr("role","tab").bind("keydown.accordion",function(a){return b._keydown(a)}).next().attr("role","tabpanel"),b.headers.not(b.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide(),b.active.length?b.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):b.headers.eq(0).attr("tabIndex",0),a.browser.safari||b.headers.find("a").attr("tabIndex",-1),c.event&&b.headers.bind(c.event.split(" ").join(".accordion ")+".accordion",function(a){b._clickHandler.call(b,a,this),a.preventDefault()})},_createIcons:function(){var b=this.options;b.icons&&(a("<span></span>").addClass("ui-icon "+b.icons.header).prependTo(this.headers),this.active.children(".ui-icon").toggleClass(b.icons.header).toggleClass(b.icons.headerSelected),this.element.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.children(".ui-icon").remove(),this.element.removeClass("ui-accordion-icons")},destroy:function(){var b=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"),this.headers.find("a").removeAttr("tabIndex"),this._destroyIcons();var c=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");return(b.autoHeight||b.fillHeight)&&c.css("height",""),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b=="active"&&this.activate(c),b=="icons"&&(this._destroyIcons(),c&&this._createIcons()),b=="disabled"&&this.headers.add(this.headers.next())[c?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(b){if(this.options.disabled||b.altKey||b.ctrlKey)return;var c=a.ui.keyCode,d=this.headers.length,e=this.headers.index(b.target),f=!1;switch(b.keyCode){case c.RIGHT:case c.DOWN:f=this.headers[(e+1)%d];break;case c.LEFT:case c.UP:f=this.headers[(e-1+d)%d];break;case c.SPACE:case c.ENTER:this._clickHandler({target:b.target},b.target),b.preventDefault()}return f?(a(b.target).attr("tabIndex",-1),a(f).attr("tabIndex",0),f.focus(),!1):!0},resize:function(){var b=this.options,c;if(b.fillSpace){if(a.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}c=this.element.parent().height(),a.browser.msie&&this.element.parent().css("overflow",d),this.headers.each(function(){c-=a(this).outerHeight(!0)}),this.headers.next().each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+a(this).height()))}).css("overflow","auto")}else b.autoHeight&&(c=0,this.headers.next().each(function(){c=Math.max(c,a(this).height("").height())}).height(c));return this},activate:function(a){this.options.active=a;var b=this._findActive(a)[0];return this._clickHandler({target:b},b),this},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===!1?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,c){var d=this.options;if(d.disabled)return;if(!b.target){if(!d.collapsible)return;this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),this.active.next().addClass("ui-accordion-content-active");var e=this.active.next(),f={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:e},g=this.active=a([]);this._toggle(g,e,f);return}var h=a(b.currentTarget||c),i=h[0]===this.active[0];d.active=d.collapsible&&i?!1:this.headers.index(h);if(this.running||!d.collapsible&&i)return;var j=this.active,g=h.next(),e=this.active.next(),f={options:d,newHeader:i&&d.collapsible?a([]):h,oldHeader:this.active,newContent:i&&d.collapsible?a([]):g,oldContent:e},k=this.headers.index(this.active[0])>this.headers.index(h[0]);this.active=i?a([]):h,this._toggle(g,e,f,i,k),j.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),i||(h.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected),h.next().addClass("ui-accordion-content-active"));return},_toggle:function(b,c,d,e,f){var g=this,h=g.options;g.toShow=b,g.toHide=c,g.data=d;var i=function(){if(!g)return;return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data),g.running=c.size()===0?b.size():c.size();if(h.animated){var j={};h.collapsible&&e?j={toShow:a([]),toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace}:j={toShow:b,toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace},h.proxied||(h.proxied=h.animated),h.proxiedDuration||(h.proxiedDuration=h.duration),h.animated=a.isFunction(h.proxied)?h.proxied(j):h.proxied,h.duration=a.isFunction(h.proxiedDuration)?h.proxiedDuration(j):h.proxiedDuration;var k=a.ui.accordion.animations,l=h.duration,m=h.animated;m&&!k[m]&&!a.easing[m]&&(m="slide"),k[m]||(k[m]=function(a){this.slide(a,{easing:m,duration:l||700})}),k[m](j)}else h.collapsible&&e?b.toggle():(c.hide(),b.show()),i(!0);c.prev().attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).blur(),b.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(this.running)return;this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""}),this.toHide.removeClass("ui-accordion-content-active"),this.toHide.length&&(this.toHide.parent()[0].className=this.toHide.parent()[0].className),this._trigger("change",null,this.data)}}),a.extend(a.ui.accordion,{version:"1.8.23",animations:{slide:function(b,c){b=a.extend({easing:"swing",duration:300},b,c);if(!b.toHide.size()){b.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},b);return}if(!b.toShow.size()){b.toHide.animate({height:"hide",paddingTop:"hide",paddingBottom:"hide"},b);return}var d=b.toShow.css("overflow"),e=0,f={},g={},h=["height","paddingTop","paddingBottom"],i,j=b.toShow;i=j[0].style.width,j.width(j.parent().width()-parseFloat(j.css("paddingLeft"))-parseFloat(j.css("paddingRight"))-(parseFloat(j.css("borderLeftWidth"))||0)-(parseFloat(j.css("borderRightWidth"))||0)),a.each(h,function(c,d){g[d]="hide";var e=(""+a.css(b.toShow[0],d)).match(/^([\d+-.]+)(.*)$/);f[d]={value:e[1],unit:e[2]||"px"}}),b.toShow.css({height:0,overflow:"hidden"}).show(),b.toHide.filter(":hidden").each(b.complete).end().filter(":visible").animate(g,{step:function(a,c){c.prop=="height"&&(e=c.end-c.start===0?0:(c.now-c.start)/(c.end-c.start)),b.toShow[0].style[c.prop]=e*f[c.prop].value+f[c.prop].unit},duration:b.duration,easing:b.easing,complete:function(){b.autoHeight||b.toShow.css("height",""),b.toShow.css({width:i,overflow:d}),b.complete()}})},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1e3:200})}}})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15
2216+* https://github.com/jquery/jquery-ui
2217+* Includes: jquery.ui.autocomplete.js
2218+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
2219+(function(a,b){var c=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var b=this,c=this.element[0].ownerDocument,d;this.isMultiLine=this.element.is("textarea"),this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(b.options.disabled||b.element.propAttr("readOnly"))return;d=!1;var e=a.ui.keyCode;switch(c.keyCode){case e.PAGE_UP:b._move("previousPage",c);break;case e.PAGE_DOWN:b._move("nextPage",c);break;case e.UP:b._keyEvent("previous",c);break;case e.DOWN:b._keyEvent("next",c);break;case e.ENTER:case e.NUMPAD_ENTER:b.menu.active&&(d=!0,c.preventDefault());case e.TAB:if(!b.menu.active)return;b.menu.select(c);break;case e.ESCAPE:b.element.val(b.term),b.close(c);break;default:clearTimeout(b.searching),b.searching=setTimeout(function(){b.term!=b.element.val()&&(b.selectedItem=null,b.search(null,c))},b.options.delay)}}).bind("keypress.autocomplete",function(a){d&&(d=!1,a.preventDefault())}).bind("focus.autocomplete",function(){if(b.options.disabled)return;b.selectedItem=null,b.previous=b.element.val()}).bind("blur.autocomplete",function(a){if(b.options.disabled)return;clearTimeout(b.searching),b.closing=setTimeout(function(){b.close(a),b._change(a)},150)}),this._initSource(),this.menu=a("<ul></ul>").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",c)[0]).mousedown(function(c){var d=b.menu.element[0];a(c.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(c){c.target!==b.element[0]&&c.target!==d&&!a.ui.contains(d,c.target)&&b.close()})},1),setTimeout(function(){clearTimeout(b.closing)},13)}).menu({focus:function(a,c){var d=c.item.data("item.autocomplete");!1!==b._trigger("focus",a,{item:d})&&/^key/.test(a.originalEvent.type)&&b.element.val(d.value)},selected:function(a,d){var e=d.item.data("item.autocomplete"),f=b.previous;b.element[0]!==c.activeElement&&(b.element.focus(),b.previous=f,setTimeout(function(){b.previous=f,b.selectedItem=e},1)),!1!==b._trigger("select",a,{item:e})&&b.element.val(e.value),b.term=b.element.val(),b.close(a),b.selectedItem=e},blur:function(a,c){b.menu.element.is(":visible")&&b.element.val()!==b.term&&b.element.val(b.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"),a.fn.bgiframe&&this.menu.element.bgiframe(),b.beforeunloadHandler=function(){b.element.removeAttr("autocomplete")},a(window).bind("beforeunload",b.beforeunloadHandler)},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup"),this.menu.element.remove(),a(window).unbind("beforeunload",this.beforeunloadHandler),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b==="source"&&this._initSource(),b==="appendTo"&&this.menu.element.appendTo(a(c||"body",this.element[0].ownerDocument)[0]),b==="disabled"&&c&&this.xhr&&this.xhr.abort()},_initSource:function(){var b=this,c,d;a.isArray(this.options.source)?(c=this.options.source,this.source=function(b,d){d(a.ui.autocomplete.filter(c,b.term))}):typeof this.options.source=="string"?(d=this.options.source,this.source=function(c,e){b.xhr&&b.xhr.abort(),b.xhr=a.ajax({url:d,data:c,dataType:"json",success:function(a,b){e(a)},error:function(){e([])}})}):this.source=this.options.source},search:function(a,b){a=a!=null?a:this.element.val(),this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)===!1)return;return this._search(a)},_search:function(a){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.source({term:a},this._response())},_response:function(){var a=this,b=++c;return function(d){b===c&&a.__response(d),a.pending--,a.pending||a.element.removeClass("ui-autocomplete-loading")}},__response:function(a){!this.options.disabled&&a&&a.length?(a=this._normalize(a),this._suggest(a),this._trigger("open")):this.close()},close:function(a){clearTimeout(this.closing),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.deactivate(),this._trigger("close",a))},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(b){return b.length&&b[0].label&&b[0].value?b:a.map(b,function(b){return typeof b=="string"?{label:b,value:b}:a.extend({label:b.label||b.value,value:b.value||b.label},b)})},_suggest:function(b){var c=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(c,b),this.menu.deactivate(),this.menu.refresh(),c.show(),this._resizeMenu(),c.position(a.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(new a.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(b,c){var d=this;a.each(c,function(a,c){d._renderItem(b,c)})},_renderItem:function(b,c){return a("<li></li>").data("item.autocomplete",c).append(a("<a></a>").text(c.label)).appendTo(b)},_move:function(a,b){if(!this.menu.element.is(":visible")){this.search(null,b);return}if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term),this.menu.deactivate();return}this.menu[a](b)},widget:function(){return this.menu.element},_keyEvent:function(a,b){if(!this.isMultiLine||this.menu.element.is(":visible"))this._move(a,b),b.preventDefault()}}),a.extend(a.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(b,c){var d=new RegExp(a.ui.autocomplete.escapeRegex(c),"i");return a.grep(b,function(a){return d.test(a.label||a.value||a)})}})})(jQuery),function(a){a.widget("ui.menu",{_create:function(){var b=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){if(!a(c.target).closest(".ui-menu-item a").length)return;c.preventDefault(),b.select(c)}),this.refresh()},refresh:function(){var b=this,c=this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem");c.children("a").addClass("ui-corner-all").attr("tabindex",-1).mouseenter(function(c){b.activate(c,a(this).parent())}).mouseleave(function(){b.deactivate()})},activate:function(a,b){this.deactivate();if(this.hasScroll()){var c=b.offset().top-this.element.offset().top,d=this.element.scrollTop(),e=this.element.height();c<0?this.element.scrollTop(d+c):c>=e&&this.element.scrollTop(d+c-e+b.height())}this.active=b.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end(),this._trigger("focus",a,{item:b})},deactivate:function(){if(!this.active)return;this.active.children("a").removeClass("ui-state-hover").removeAttr("id"),this._trigger("blur"),this.active=null},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(a,b,c){if(!this.active){this.activate(c,this.element.children(b));return}var d=this.active[a+"All"](".ui-menu-item").eq(0);d.length?this.activate(c,d):this.activate(c,this.element.children(b))},nextPage:function(b){if(this.hasScroll()){if(!this.active||this.last()){this.activate(b,this.element.children(".ui-menu-item:first"));return}var c=this.active.offset().top,d=this.element.height(),e=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c-d+a(this).height();return b<10&&b>-10});e.length||(e=this.element.children(".ui-menu-item:last")),this.activate(b,e)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(b){if(this.hasScroll()){if(!this.active||this.first()){this.activate(b,this.element.children(".ui-menu-item:last"));return}var c=this.active.offset().top,d=this.element.height(),e=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c+d-a(this).height();return b<10&&b>-10});e.length||(e=this.element.children(".ui-menu-item:first")),this.activate(b,e)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[a.fn.prop?"prop":"attr"]("scrollHeight")},select:function(a){this._trigger("selected",a,{item:this.active})}})}(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15
2220+* https://github.com/jquery/jquery-ui
2221+* Includes: jquery.ui.button.js
2222+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
2223+(function(a,b){var c,d,e,f,g="ui-button ui-widget ui-state-default ui-corner-all",h="ui-state-hover ui-state-active ",i="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",j=function(){var b=a(this).find(":ui-button");setTimeout(function(){b.button("refresh")},1)},k=function(b){var c=b.name,d=b.form,e=a([]);return c&&(d?e=a(d).find("[name='"+c+"']"):e=a("[name='"+c+"']",b.ownerDocument).filter(function(){return!this.form})),e};a.widget("ui.button",{options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",j),typeof this.options.disabled!="boolean"?this.options.disabled=!!this.element.propAttr("disabled"):this.element.propAttr("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var b=this,h=this.options,i=this.type==="checkbox"||this.type==="radio",l="ui-state-hover"+(i?"":" ui-state-active"),m="ui-state-focus";h.label===null&&(h.label=this.buttonElement.html()),this.buttonElement.addClass(g).attr("role","button").bind("mouseenter.button",function(){if(h.disabled)return;a(this).addClass("ui-state-hover"),this===c&&a(this).addClass("ui-state-active")}).bind("mouseleave.button",function(){if(h.disabled)return;a(this).removeClass(l)}).bind("click.button",function(a){h.disabled&&(a.preventDefault(),a.stopImmediatePropagation())}),this.element.bind("focus.button",function(){b.buttonElement.addClass(m)}).bind("blur.button",function(){b.buttonElement.removeClass(m)}),i&&(this.element.bind("change.button",function(){if(f)return;b.refresh()}),this.buttonElement.bind("mousedown.button",function(a){if(h.disabled)return;f=!1,d=a.pageX,e=a.pageY}).bind("mouseup.button",function(a){if(h.disabled)return;if(d!==a.pageX||e!==a.pageY)f=!0})),this.type==="checkbox"?this.buttonElement.bind("click.button",function(){if(h.disabled||f)return!1;a(this).toggleClass("ui-state-active"),b.buttonElement.attr("aria-pressed",b.element[0].checked)}):this.type==="radio"?this.buttonElement.bind("click.button",function(){if(h.disabled||f)return!1;a(this).addClass("ui-state-active"),b.buttonElement.attr("aria-pressed","true");var c=b.element[0];k(c).not(c).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown.button",function(){if(h.disabled)return!1;a(this).addClass("ui-state-active"),c=this,a(document).one("mouseup",function(){c=null})}).bind("mouseup.button",function(){if(h.disabled)return!1;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(b){if(h.disabled)return!1;(b.keyCode==a.ui.keyCode.SPACE||b.keyCode==a.ui.keyCode.ENTER)&&a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(b){b.keyCode===a.ui.keyCode.SPACE&&a(this).click()})),this._setOption("disabled",h.disabled),this._resetButton()},_determineButtonType:function(){this.element.is(":checkbox")?this.type="checkbox":this.element.is(":radio")?this.type="radio":this.element.is("input")?this.type="input":this.type="button";if(this.type==="checkbox"||this.type==="radio"){var a=this.element.parents().filter(":last"),b="label[for='"+this.element.attr("id")+"']";this.buttonElement=a.find(b),this.buttonElement.length||(a=a.length?a.siblings():this.element.siblings(),this.buttonElement=a.filter(b),this.buttonElement.length||(this.buttonElement=a.find(b))),this.element.addClass("ui-helper-hidden-accessible");var c=this.element.is(":checked");c&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.attr("aria-pressed",c)}else this.buttonElement=this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(g+" "+h+" "+i).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title"),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled"){c?this.element.propAttr("disabled",!0):this.element.propAttr("disabled",!1);return}this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b),this.type==="radio"?k(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):this.type==="checkbox"&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if(this.type==="input"){this.options.label&&this.element.val(this.options.label);return}var b=this.buttonElement.removeClass(i),c=a("<span></span>",this.element[0].ownerDocument).addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary,f=[];d.primary||d.secondary?(this.options.text&&f.push("ui-button-text-icon"+(e?"s":d.primary?"-primary":"-secondary")),d.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>"),d.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>"),this.options.text||(f.push(e?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||b.attr("title",c))):f.push("ui-button-text-only"),b.addClass(f.join(" "))}}),a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c),a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var b=this.element.css("direction")==="rtl";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(b?"ui-corner-left":"ui-corner-right").end().end()},destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy"),a.Widget.prototype.destroy.call(this)}})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15
2224+* https://github.com/jquery/jquery-ui
2225+* Includes: jquery.ui.dialog.js
2226+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
2227+(function(a,b){var c="ui-dialog ui-widget ui-widget-content ui-corner-all ",d={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},e={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0};a.widget("ui.dialog",{options:{autoOpen:!0,buttons:{},closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:!1,maxWidth:!1,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",collision:"fit",using:function(b){var c=a(this).css(b).offset().top;c<0&&a(this).css("top",b.top-c)}},resizable:!0,show:null,stack:!0,title:"",width:300,zIndex:1e3},_create:function(){this.originalTitle=this.element.attr("title"),typeof this.originalTitle!="string"&&(this.originalTitle=""),this.options.title=this.options.title||this.originalTitle;var b=this,d=b.options,e=d.title||"&#160;",f=a.ui.dialog.getTitleId(b.element),g=(b.uiDialog=a("<div></div>")).appendTo(document.body).hide().addClass(c+d.dialogClass).css({zIndex:d.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(c){d.closeOnEscape&&!c.isDefaultPrevented()&&c.keyCode&&c.keyCode===a.ui.keyCode.ESCAPE&&(b.close(c),c.preventDefault())}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(a){b.moveToTop(!1,a)}),h=b.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g),i=(b.uiDialogTitlebar=a("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),j=a('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){j.addClass("ui-state-hover")},function(){j.removeClass("ui-state-hover")}).focus(function(){j.addClass("ui-state-focus")}).blur(function(){j.removeClass("ui-state-focus")}).click(function(a){return b.close(a),!1}).appendTo(i),k=(b.uiDialogTitlebarCloseText=a("<span></span>")).addClass("ui-icon ui-icon-closethick").text(d.closeText).appendTo(j),l=a("<span></span>").addClass("ui-dialog-title").attr("id",f).html(e).prependTo(i);a.isFunction(d.beforeclose)&&!a.isFunction(d.beforeClose)&&(d.beforeClose=d.beforeclose),i.find("*").add(i).disableSelection(),d.draggable&&a.fn.draggable&&b._makeDraggable(),d.resizable&&a.fn.resizable&&b._makeResizable(),b._createButtons(d.buttons),b._isOpen=!1,a.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;return a.overlay&&a.overlay.destroy(),a.uiDialog.hide(),a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"),a.uiDialog.remove(),a.originalTitle&&a.element.attr("title",a.originalTitle),a},widget:function(){return this.uiDialog},close:function(b){var c=this,d,e;if(!1===c._trigger("beforeClose",b))return;return c.overlay&&c.overlay.destroy(),c.uiDialog.unbind("keypress.ui-dialog"),c._isOpen=!1,c.options.hide?c.uiDialog.hide(c.options.hide,function(){c._trigger("close",b)}):(c.uiDialog.hide(),c._trigger("close",b)),a.ui.dialog.overlay.resize(),c.options.modal&&(d=0,a(".ui-dialog").each(function(){this!==c.uiDialog[0]&&(e=a(this).css("z-index"),isNaN(e)||(d=Math.max(d,e)))}),a.ui.dialog.maxZ=d),c},isOpen:function(){return this._isOpen},moveToTop:function(b,c){var d=this,e=d.options,f;return e.modal&&!b||!e.stack&&!e.modal?d._trigger("focus",c):(e.zIndex>a.ui.dialog.maxZ&&(a.ui.dialog.maxZ=e.zIndex),d.overlay&&(a.ui.dialog.maxZ+=1,d.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ)),f={scrollTop:d.element.scrollTop(),scrollLeft:d.element.scrollLeft()},a.ui.dialog.maxZ+=1,d.uiDialog.css("z-index",a.ui.dialog.maxZ),d.element.attr(f),d._trigger("focus",c),d)},open:function(){if(this._isOpen)return;var b=this,c=b.options,d=b.uiDialog;return b.overlay=c.modal?new a.ui.dialog.overlay(b):null,b._size(),b._position(c.position),d.show(c.show),b.moveToTop(!0),c.modal&&d.bind("keydown.ui-dialog",function(b){if(b.keyCode!==a.ui.keyCode.TAB)return;var c=a(":tabbable",this),d=c.filter(":first"),e=c.filter(":last");if(b.target===e[0]&&!b.shiftKey)return d.focus(1),!1;if(b.target===d[0]&&b.shiftKey)return e.focus(1),!1}),a(b.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus(),b._isOpen=!0,b._trigger("open"),b},_createButtons:function(b){var c=this,d=!1,e=a("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),f=a("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);c.uiDialog.find(".ui-dialog-buttonpane").remove(),typeof b=="object"&&b!==null&&a.each(b,function(){return!(d=!0)}),d&&(a.each(b,function(b,d){d=a.isFunction(d)?{click:d,text:b}:d;var e=a('<button type="button"></button>').click(function(){d.click.apply(c.element[0],arguments)}).appendTo(f);a.each(d,function(a,b){if(a==="click")return;a in e?e[a](b):e.attr(a,b)}),a.fn.button&&e.button()}),e.appendTo(c.uiDialog))},_makeDraggable:function(){function f(a){return{position:a.position,offset:a.offset}}var b=this,c=b.options,d=a(document),e;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(d,g){e=c.height==="auto"?"auto":a(this).height(),a(this).height(a(this).height()).addClass("ui-dialog-dragging"),b._trigger("dragStart",d,f(g))},drag:function(a,c){b._trigger("drag",a,f(c))},stop:function(g,h){c.position=[h.position.left-d.scrollLeft(),h.position.top-d.scrollTop()],a(this).removeClass("ui-dialog-dragging").height(e),b._trigger("dragStop",g,f(h)),a.ui.dialog.overlay.resize()}})},_makeResizable:function(c){function h(a){return{originalPosition:a.originalPosition,originalSize:a.originalSize,position:a.position,size:a.size}}c=c===b?this.options.resizable:c;var d=this,e=d.options,f=d.uiDialog.css("position"),g=typeof c=="string"?c:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:g,start:function(b,c){a(this).addClass("ui-dialog-resizing"),d._trigger("resizeStart",b,h(c))},resize:function(a,b){d._trigger("resize",a,h(b))},stop:function(b,c){a(this).removeClass("ui-dialog-resizing"),e.height=a(this).height(),e.width=a(this).width(),d._trigger("resizeStop",b,h(c)),a.ui.dialog.overlay.resize()}}).css("position",f).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(b){var c=[],d=[0,0],e;if(b){if(typeof b=="string"||typeof b=="object"&&"0"in b)c=b.split?b.split(" "):[b[0],b[1]],c.length===1&&(c[1]=c[0]),a.each(["left","top"],function(a,b){+c[a]===c[a]&&(d[a]=c[a],c[a]=b)}),b={my:c.join(" "),at:c.join(" "),offset:d.join(" ")};b=a.extend({},a.ui.dialog.prototype.options.position,b)}else b=a.ui.dialog.prototype.options.position;e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.css({top:0,left:0}).position(a.extend({of:window},b)),e||this.uiDialog.hide()},_setOptions:function(b){var c=this,f={},g=!1;a.each(b,function(a,b){c._setOption(a,b),a in d&&(g=!0),a in e&&(f[a]=b)}),g&&this._size(),this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",f)},_setOption:function(b,d){var e=this,f=e.uiDialog;switch(b){case"beforeclose":b="beforeClose";break;case"buttons":e._createButtons(d);break;case"closeText":e.uiDialogTitlebarCloseText.text(""+d);break;case"dialogClass":f.removeClass(e.options.dialogClass).addClass(c+d);break;case"disabled":d?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case"draggable":var g=f.is(":data(draggable)");g&&!d&&f.draggable("destroy"),!g&&d&&e._makeDraggable();break;case"position":e._position(d);break;case"resizable":var h=f.is(":data(resizable)");h&&!d&&f.resizable("destroy"),h&&typeof d=="string"&&f.resizable("option","handles",d),!h&&d!==!1&&e._makeResizable(d);break;case"title":a(".ui-dialog-title",e.uiDialogTitlebar).html(""+(d||"&#160;"))}a.Widget.prototype._setOption.apply(e,arguments)},_size:function(){var b=this.options,c,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0}),b.minWidth>b.width&&(b.width=b.minWidth),c=this.uiDialog.css({height:"auto",width:b.width}).height(),d=Math.max(0,b.minHeight-c);if(b.height==="auto")if(a.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();var f=this.element.css("height","auto").height();e||this.uiDialog.hide(),this.element.height(Math.max(f,d))}else this.element.height(Math.max(b.height-c,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}}),a.extend(a.ui.dialog,{version:"1.8.23",uuid:0,maxZ:0,getTitleId:function(a){var b=a.attr("id");return b||(this.uuid+=1,b=this.uuid),"ui-dialog-title-"+b},overlay:function(b){this.$el=a.ui.dialog.overlay.create(b)}}),a.extend(a.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(b){this.instances.length===0&&(setTimeout(function(){a.ui.dialog.overlay.instances.length&&a(document).bind(a.ui.dialog.overlay.events,function(b){if(a(b.target).zIndex()<a.ui.dialog.overlay.maxZ)return!1})},1),a(document).bind("keydown.dialog-overlay",function(c){b.options.closeOnEscape&&!c.isDefaultPrevented()&&c.keyCode&&c.keyCode===a.ui.keyCode.ESCAPE&&(b.close(c),c.preventDefault())}),a(window).bind("resize.dialog-overlay",a.ui.dialog.overlay.resize));var c=(this.oldInstances.pop()||a("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});return a.fn.bgiframe&&c.bgiframe(),this.instances.push(c),c},destroy:function(b){var c=a.inArray(b,this.instances);c!=-1&&this.oldInstances.push(this.instances.splice(c,1)[0]),this.instances.length===0&&a([document,window]).unbind(".dialog-overlay"),b.remove();var d=0;a.each(this.instances,function(){d=Math.max(d,this.css("z-index"))}),this.maxZ=d},height:function(){var b,c;return a.browser.msie&&a.browser.version<7?(b=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),c=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight),b<c?a(window).height()+"px":b+"px"):a(document).height()+"px"},width:function(){var b,c;return a.browser.msie?(b=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth),c=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth),b<c?a(window).width()+"px":b+"px"):a(document).width()+"px"},resize:function(){var b=a([]);a.each(a.ui.dialog.overlay.instances,function(){b=b.add(this)}),b.css({width:0,height:0}).css({width:a.ui.dialog.overlay.width(),height:a.ui.dialog.overlay.height()})}}),a.extend(a.ui.dialog.overlay.prototype,{destroy:function(){a.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15
2228+* https://github.com/jquery/jquery-ui
2229+* Includes: jquery.ui.slider.js
2230+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
2231+(function(a,b){var c=5;a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var b=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",g=d.values&&d.values.length||1,h=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":"")),this.range=a([]),d.range&&(d.range===!0&&(d.values||(d.values=[this._valueMin(),this._valueMin()]),d.values.length&&d.values.length!==2&&(d.values=[d.values[0],d.values[0]])),this.range=a("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:"")));for(var i=e.length;i<g;i+=1)h.push(f);this.handles=e.add(a(h.join("")).appendTo(b.element)),this.handle=this.handles.eq(0),this.handles.add(this.range).filter("a").click(function(a){a.preventDefault()}).hover(function(){d.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){d.disabled?a(this).blur():(a(".ui-slider .ui-state-focus").removeClass("ui-state-focus"),a(this).addClass("ui-state-focus"))}).blur(function(){a(this).removeClass("ui-state-focus")}),this.handles.each(function(b){a(this).data("index.ui-slider-handle",b)}),this.handles.keydown(function(d){var e=a(this).data("index.ui-slider-handle"),f,g,h,i;if(b.options.disabled)return;switch(d.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:d.preventDefault();if(!b._keySliding){b._keySliding=!0,a(this).addClass("ui-state-active"),f=b._start(d,e);if(f===!1)return}}i=b.options.step,b.options.values&&b.options.values.length?g=h=b.values(e):g=h=b.value();switch(d.keyCode){case a.ui.keyCode.HOME:h=b._valueMin();break;case a.ui.keyCode.END:h=b._valueMax();break;case a.ui.keyCode.PAGE_UP:h=b._trimAlignValue(g+(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.PAGE_DOWN:h=b._trimAlignValue(g-(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(g===b._valueMax())return;h=b._trimAlignValue(g+i);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(g===b._valueMin())return;h=b._trimAlignValue(g-i)}b._slide(d,e,h)}).keyup(function(c){var d=a(this).data("index.ui-slider-handle");b._keySliding&&(b._keySliding=!1,b._stop(c,d),b._change(c,d),a(this).removeClass("ui-state-active"))}),this._refreshValue(),this._animateOff=!1},destroy:function(){return this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider"),this._mouseDestroy(),this},_mouseCapture:function(b){var c=this.options,d,e,f,g,h,i,j,k,l;return c.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),d={x:b.pageX,y:b.pageY},e=this._normValueFromMouse(d),f=this._valueMax()-this._valueMin()+1,h=this,this.handles.each(function(b){var c=Math.abs(e-h.values(b));f>c&&(f=c,g=a(this),i=b)}),c.range===!0&&this.values(1)===c.min&&(i+=1,g=a(this.handles[i])),j=this._start(b,i),j===!1?!1:(this._mouseSliding=!0,h._handleIndex=i,g.addClass("ui-state-active").focus(),k=g.offset(),l=!a(b.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:b.pageX-k.left-g.width()/2,top:b.pageY-k.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(b,i,e),this._animateOff=!0,!0))},_mouseStart:function(a){return!0},_mouseDrag:function(a){var b={x:a.pageX,y:a.pageY},c=this._normValueFromMouse(b);return this._slide(a,this._handleIndex,c),!1},_mouseStop:function(a){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(a,this._handleIndex),this._change(a,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b,c,d,e,f;return this.orientation==="horizontal"?(b=this.elementSize.width,c=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(b=this.elementSize.height,c=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),d=c/b,d>1&&(d=1),d<0&&(d=0),this.orientation==="vertical"&&(d=1-d),e=this._valueMax()-this._valueMin(),f=this._valueMin()+d*e,this._trimAlignValue(f)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};return this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("start",a,c)},_slide:function(a,b,c){var d,e,f;this.options.values&&this.options.values.length?(d=this.values(b?0:1),this.options.values.length===2&&this.options.range===!0&&(b===0&&c>d||b===1&&c<d)&&(c=d),c!==this.values(b)&&(e=this.values(),e[b]=c,f=this._trigger("slide",a,{handle:this.handles[b],value:c,values:e}),d=this.values(b?0:1),f!==!1&&this.values(b,c,!0))):c!==this.value()&&(f=this._trigger("slide",a,{handle:this.handles[b],value:c}),f!==!1&&this.value(c))},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("change",a,c)}},value:function(a){if(arguments.length){this.options.value=this._trimAlignValue(a),this._refreshValue(),this._change(null,0);return}return this._value()},values:function(b,c){var d,e,f;if(arguments.length>1){this.options.values[b]=this._trimAlignValue(c),this._refreshValue(),this._change(null,b);return}if(!arguments.length)return this._values();if(!a.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(b):this.value();d=this.options.values,e=arguments[0];for(f=0;f<d.length;f+=1)d[f]=this._trimAlignValue(e[f]),this._change(null,f);this._refreshValue()},_setOption:function(b,c){var d,e=0;a.isArray(this.options.values)&&(e=this.options.values.length),a.Widget.prototype._setOption.apply(this,arguments);switch(b){case"disabled":c?(this.handles.filter(".ui-state-focus").blur(),this.handles.removeClass("ui-state-hover"),this.handles.propAttr("disabled",!0),this.element.addClass("ui-disabled")):(this.handles.propAttr("disabled",!1),this.element.removeClass("ui-disabled"));break;case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":this._animateOff=!0,this._refreshValue();for(d=0;d<e;d+=1)this._change(null,d);this._animateOff=!1}},_value:function(){var a=this.options.value;return a=this._trimAlignValue(a),a},_values:function(a){var b,c,d;if(arguments.length)return b=this.options.values[a],b=this._trimAlignValue(b),b;c=this.options.values.slice();for(d=0;d<c.length;d+=1)c[d]=this._trimAlignValue(c[d]);return c},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b,d=a-c;return Math.abs(c)*2>=b&&(d+=c>0?b:-b),parseFloat(d.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var b=this.options.range,c=this.options,d=this,e=this._animateOff?!1:c.animate,f,g={},h,i,j,k;this.options.values&&this.options.values.length?this.handles.each(function(b,i){f=(d.values(b)-d._valueMin())/(d._valueMax()-d._valueMin())*100,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",a(this).stop(1,1)[e?"animate":"css"](g,c.animate),d.options.range===!0&&(d.orientation==="horizontal"?(b===0&&d.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({width:f-h+"%"},{queue:!1,duration:c.animate})):(b===0&&d.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({height:f-h+"%"},{queue:!1,duration:c.animate}))),h=f}):(i=this.value(),j=this._valueMin(),k=this._valueMax(),f=k!==j?(i-j)/(k-j)*100:0,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",this.handle.stop(1,1)[e?"animate":"css"](g,c.animate),b==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},c.animate),b==="max"&&this.orientation==="horizontal"&&this.range[e?"animate":"css"]({width:100-f+"%"},{queue:!1,duration:c.animate}),b==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},c.animate),b==="max"&&this.orientation==="vertical"&&this.range[e?"animate":"css"]({height:100-f+"%"},{queue:!1,duration:c.animate}))}}),a.extend(a.ui.slider,{version:"1.8.23"})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15
2232+* https://github.com/jquery/jquery-ui
2233+* Includes: jquery.ui.tabs.js
2234+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
2235+(function(a,b){function e(){return++c}function f(){return++d}var c=0,d=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:!1,cookie:null,collapsible:!1,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(!0)},_setOption:function(a,b){if(a=="selected"){if(this.options.collapsible&&b==this.options.selected)return;this.select(b)}else this.options[a]=b,this._tabify()},_tabId:function(a){return a.title&&a.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+e()},_sanitizeSelector:function(a){return a.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+f());return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(a,b){return{tab:a,panel:b,index:this.anchors.index(a)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function m(b,c){b.css("display",""),!a.support.opacity&&c.opacity&&b[0].style.removeAttribute("filter")}var d=this,e=this.options,f=/^#.+/;this.list=this.element.find("ol,ul").eq(0),this.lis=a(" > li:has(a[href])",this.list),this.anchors=this.lis.map(function(){return a("a",this)[0]}),this.panels=a([]),this.anchors.each(function(b,c){var g=a(c).attr("href"),h=g.split("#")[0],i;h&&(h===location.toString().split("#")[0]||(i=a("base")[0])&&h===i.href)&&(g=c.hash,c.href=g);if(f.test(g))d.panels=d.panels.add(d.element.find(d._sanitizeSelector(g)));else if(g&&g!=="#"){a.data(c,"href.tabs",g),a.data(c,"load.tabs",g.replace(/#.*$/,""));var j=d._tabId(c);c.href="#"+j;var k=d.element.find("#"+j);k.length||(k=a(e.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(d.panels[b-1]||d.list),k.data("destroy.tabs",!0)),d.panels=d.panels.add(k)}else e.disabled.push(b)}),c?(this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"),this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.lis.addClass("ui-state-default ui-corner-top"),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom"),e.selected===b?(location.hash&&this.anchors.each(function(a,b){if(b.hash==location.hash)return e.selected=a,!1}),typeof e.selected!="number"&&e.cookie&&(e.selected=parseInt(d._cookie(),10)),typeof e.selected!="number"&&this.lis.filter(".ui-tabs-selected").length&&(e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))),e.selected=e.selected||(this.lis.length?0:-1)):e.selected===null&&(e.selected=-1),e.selected=e.selected>=0&&this.anchors[e.selected]||e.selected<0?e.selected:0,e.disabled=a.unique(e.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(a,b){return d.lis.index(a)}))).sort(),a.inArray(e.selected,e.disabled)!=-1&&e.disabled.splice(a.inArray(e.selected,e.disabled),1),this.panels.addClass("ui-tabs-hide"),this.lis.removeClass("ui-tabs-selected ui-state-active"),e.selected>=0&&this.anchors.length&&(d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash)).removeClass("ui-tabs-hide"),this.lis.eq(e.selected).addClass("ui-tabs-selected ui-state-active"),d.element.queue("tabs",function(){d._trigger("show",null,d._ui(d.anchors[e.selected],d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash))[0]))}),this.load(e.selected)),a(window).bind("unload",function(){d.lis.add(d.anchors).unbind(".tabs"),d.lis=d.anchors=d.panels=null})):e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")),this.element[e.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible"),e.cookie&&this._cookie(e.selected,e.cookie);for(var g=0,h;h=this.lis[g];g++)a(h)[a.inArray(g,e.disabled)!=-1&&!a(h).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");e.cache===!1&&this.anchors.removeData("cache.tabs"),this.lis.add(this.anchors).unbind(".tabs");if(e.event!=="mouseover"){var i=function(a,b){b.is(":not(.ui-state-disabled)")&&b.addClass("ui-state-"+a)},j=function(a,b){b.removeClass("ui-state-"+a)};this.lis.bind("mouseover.tabs",function(){i("hover",a(this))}),this.lis.bind("mouseout.tabs",function(){j("hover",a(this))}),this.anchors.bind("focus.tabs",function(){i("focus",a(this).closest("li"))}),this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var k,l;e.fx&&(a.isArray(e.fx)?(k=e.fx[0],l=e.fx[1]):k=l=e.fx);var n=l?function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.hide().removeClass("ui-tabs-hide").animate(l,l.duration||"normal",function(){m(c,l),d._trigger("show",null,d._ui(b,c[0]))})}:function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.removeClass("ui-tabs-hide"),d._trigger("show",null,d._ui(b,c[0]))},o=k?function(a,b){b.animate(k,k.duration||"normal",function(){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),m(b,k),d.element.dequeue("tabs")})}:function(a,b,c){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),d.element.dequeue("tabs")};this.anchors.bind(e.event+".tabs",function(){var b=this,c=a(b).closest("li"),f=d.panels.filter(":not(.ui-tabs-hide)"),g=d.element.find(d._sanitizeSelector(b.hash));if(c.hasClass("ui-tabs-selected")&&!e.collapsible||c.hasClass("ui-state-disabled")||c.hasClass("ui-state-processing")||d.panels.filter(":animated").length||d._trigger("select",null,d._ui(this,g[0]))===!1)return this.blur(),!1;e.selected=d.anchors.index(this),d.abort();if(e.collapsible){if(c.hasClass("ui-tabs-selected"))return e.selected=-1,e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){o(b,f)}).dequeue("tabs"),this.blur(),!1;if(!f.length)return e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this)),this.blur(),!1}e.cookie&&d._cookie(e.selected,e.cookie);if(g.length)f.length&&d.element.queue("tabs",function(){o(b,f)}),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this));else throw"jQuery UI Tabs: Mismatching fragment identifier.";a.browser.msie&&this.blur()}),this.anchors.bind("click.tabs",function(){return!1})},_getIndex:function(a){return typeof a=="string"&&(a=this.anchors.index(this.anchors.filter("[href$='"+a+"']"))),a},destroy:function(){var b=this.options;return this.abort(),this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs"),this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.anchors.each(function(){var b=a.data(this,"href.tabs");b&&(this.href=b);var c=a(this).unbind(".tabs");a.each(["href","load","cache"],function(a,b){c.removeData(b+".tabs")})}),this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}),b.cookie&&this._cookie(null,b.cookie),this},add:function(c,d,e){e===b&&(e=this.anchors.length);var f=this,g=this.options,h=a(g.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,d)),i=c.indexOf("#")?this._tabId(a("a",h)[0]):c.replace("#","");h.addClass("ui-state-default ui-corner-top").data("destroy.tabs",!0);var j=f.element.find("#"+i);return j.length||(j=a(g.panelTemplate).attr("id",i).data("destroy.tabs",!0)),j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"),e>=this.lis.length?(h.appendTo(this.list),j.appendTo(this.list[0].parentNode)):(h.insertBefore(this.lis[e]),j.insertBefore(this.panels[e])),g.disabled=a.map(g.disabled,function(a,b){return a>=e?++a:a}),this._tabify(),this.anchors.length==1&&(g.selected=0,h.addClass("ui-tabs-selected ui-state-active"),j.removeClass("ui-tabs-hide"),this.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[0],f.panels[0]))}),this.load(0)),this._trigger("add",null,this._ui(this.anchors[e],this.panels[e])),this},remove:function(b){b=this._getIndex(b);var c=this.options,d=this.lis.eq(b).remove(),e=this.panels.eq(b).remove();return d.hasClass("ui-tabs-selected")&&this.anchors.length>1&&this.select(b+(b+1<this.anchors.length?1:-1)),c.disabled=a.map(a.grep(c.disabled,function(a,c){return a!=b}),function(a,c){return a>=b?--a:a}),this._tabify(),this._trigger("remove",null,this._ui(d.find("a")[0],e[0])),this},enable:function(b){b=this._getIndex(b);var c=this.options;if(a.inArray(b,c.disabled)==-1)return;return this.lis.eq(b).removeClass("ui-state-disabled"),c.disabled=a.grep(c.disabled,function(a,c){return a!=b}),this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b])),this},disable:function(a){a=this._getIndex(a);var b=this,c=this.options;return a!=c.selected&&(this.lis.eq(a).addClass("ui-state-disabled"),c.disabled.push(a),c.disabled.sort(),this._trigger("disable",null,this._ui(this.anchors[a],this.panels[a]))),this},select:function(a){a=this._getIndex(a);if(a==-1)if(this.options.collapsible&&this.options.selected!=-1)a=this.options.selected;else return this;return this.anchors.eq(a).trigger(this.options.event+".tabs"),this},load:function(b){b=this._getIndex(b);var c=this,d=this.options,e=this.anchors.eq(b)[0],f=a.data(e,"load.tabs");this.abort();if(!f||this.element.queue("tabs").length!==0&&a.data(e,"cache.tabs")){this.element.dequeue("tabs");return}this.lis.eq(b).addClass("ui-state-processing");if(d.spinner){var g=a("span",e);g.data("label.tabs",g.html()).html(d.spinner)}return this.xhr=a.ajax(a.extend({},d.ajaxOptions,{url:f,success:function(f,g){c.element.find(c._sanitizeSelector(e.hash)).html(f),c._cleanup(),d.cache&&a.data(e,"cache.tabs",!0),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.success(f,g)}catch(h){}},error:function(a,f,g){c._cleanup(),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.error(a,f,b,e)}catch(g){}}})),c.element.dequeue("tabs"),this},abort:function(){return this.element.queue([]),this.panels.stop(!1,!0),this.element.queue("tabs",this.element.queue("tabs").splice(-2,2)),this.xhr&&(this.xhr.abort(),delete this.xhr),this._cleanup(),this},url:function(a,b){return this.anchors.eq(a).removeData("cache.tabs").data("load.tabs",b),this},length:function(){return this.anchors.length}}),a.extend(a.ui.tabs,{version:"1.8.23"}),a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(a,b){var c=this,d=this.options,e=c._rotate||(c._rotate=function(b){clearTimeout(c.rotation),c.rotation=setTimeout(function(){var a=d.selected;c.select(++a<c.anchors.length?a:0)},a),b&&b.stopPropagation()}),f=c._unrotate||(c._unrotate=b?function(a){e()}:function(a){a.clientX&&c.rotate(null)});return a?(this.element.bind("tabsshow",e),this.anchors.bind(d.event+".tabs",f),e()):(clearTimeout(c.rotation),this.element.unbind("tabsshow",e),this.anchors.unbind(d.event+".tabs",f),delete this._rotate,delete this._unrotate),this}})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15
2236+* https://github.com/jquery/jquery-ui
2237+* Includes: jquery.ui.datepicker.js
2238+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
2239+(function($,undefined){function Datepicker(){this.debug=!1,this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},$.extend(this._defaults,this.regional[""]),this.dpDiv=bindHover($('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function bindHover(a){var b="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return a.bind("mouseout",function(a){var c=$(a.target).closest(b);if(!c.length)return;c.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(c){var d=$(c.target).closest(b);if($.datepicker._isDisabledDatepicker(instActive.inline?a.parent()[0]:instActive.input[0])||!d.length)return;d.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),d.addClass("ui-state-hover"),d.hasClass("ui-datepicker-prev")&&d.addClass("ui-datepicker-prev-hover"),d.hasClass("ui-datepicker-next")&&d.addClass("ui-datepicker-next-hover")})}function extendRemove(a,b){$.extend(a,b);for(var c in b)if(b[c]==null||b[c]==undefined)a[c]=b[c];return a}function isArray(a){return a&&($.browser.safari&&typeof a=="object"&&a.length||a.constructor&&a.constructor.toString().match(/\Array\(\)/))}$.extend($.ui,{datepicker:{version:"1.8.23"}});var PROP_NAME="datepicker",dpuuid=(new Date).getTime(),instActive;$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){return extendRemove(this._defaults,a||{}),this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase(),inline=nodeName=="div"||nodeName=="span";target.id||(this.uuid+=1,target.id="dp"+this.uuid);var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{}),nodeName=="input"?this._connectDatepicker(target,inst):inline&&this._inlineDatepicker(target,inst)},_newInst:function(a,b){var c=a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1");return{id:c,input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:b?bindHover($('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')):this.dpDiv}},_connectDatepicker:function(a,b){var c=$(a);b.append=$([]),b.trigger=$([]);if(c.hasClass(this.markerClassName))return;this._attachments(c,b),c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(a,c,d){b.settings[c]=d}).bind("getData.datepicker",function(a,c){return this._get(b,c)}),this._autoSize(b),$.data(a,PROP_NAME,b),b.settings.disabled&&this._disableDatepicker(a)},_attachments:function(a,b){var c=this._get(b,"appendText"),d=this._get(b,"isRTL");b.append&&b.append.remove(),c&&(b.append=$('<span class="'+this._appendClass+'">'+c+"</span>"),a[d?"before":"after"](b.append)),a.unbind("focus",this._showDatepicker),b.trigger&&b.trigger.remove();var e=this._get(b,"showOn");(e=="focus"||e=="both")&&a.focus(this._showDatepicker);if(e=="button"||e=="both"){var f=this._get(b,"buttonText"),g=this._get(b,"buttonImage");b.trigger=$(this._get(b,"buttonImageOnly")?$("<img/>").addClass(this._triggerClass).attr({src:g,alt:f,title:f}):$('<button type="button"></button>').addClass(this._triggerClass).html(g==""?f:$("<img/>").attr({src:g,alt:f,title:f}))),a[d?"before":"after"](b.trigger),b.trigger.click(function(){return $.datepicker._datepickerShowing&&$.datepicker._lastInput==a[0]?$.datepicker._hideDatepicker():$.datepicker._datepickerShowing&&$.datepicker._lastInput!=a[0]?($.datepicker._hideDatepicker(),$.datepicker._showDatepicker(a[0])):$.datepicker._showDatepicker(a[0]),!1})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var d=function(a){var b=0,c=0;for(var d=0;d<a.length;d++)a[d].length>b&&(b=a[d].length,c=d);return c};b.setMonth(d(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort"))),b.setDate(d(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=$(a);if(c.hasClass(this.markerClassName))return;c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(a,c,d){b.settings[c]=d}).bind("getData.datepicker",function(a,c){return this._get(b,c)}),$.data(a,PROP_NAME,b),this._setDate(b,this._getDefaultDate(b),!0),this._updateDatepicker(b),this._updateAlternate(b),b.settings.disabled&&this._disableDatepicker(a),b.dpDiv.css("display","block")},_dialogDatepicker:function(a,b,c,d,e){var f=this._dialogInst;if(!f){this.uuid+=1;var g="dp"+this.uuid;this._dialogInput=$('<input type="text" id="'+g+'" style="position: absolute; top: -100px; width: 0px;"/>'),this._dialogInput.keydown(this._doKeyDown),$("body").append(this._dialogInput),f=this._dialogInst=this._newInst(this._dialogInput,!1),f.settings={},$.data(this._dialogInput[0],PROP_NAME,f)}extendRemove(f.settings,d||{}),b=b&&b.constructor==Date?this._formatDate(f,b):b,this._dialogInput.val(b),this._pos=e?e.length?e:[e.pageX,e.pageY]:null;if(!this._pos){var h=document.documentElement.clientWidth,i=document.documentElement.clientHeight,j=document.documentElement.scrollLeft||document.body.scrollLeft,k=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[h/2-100+j,i/2-150+k]}return this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),f.settings.onSelect=c,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),$.blockUI&&$.blockUI(this.dpDiv),$.data(this._dialogInput[0],PROP_NAME,f),this},_destroyDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!b.hasClass(this.markerClassName))return;var d=a.nodeName.toLowerCase();$.removeData(a,PROP_NAME),d=="input"?(c.append.remove(),c.trigger.remove(),b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):(d=="div"||d=="span")&&b.removeClass(this.markerClassName).empty()},_enableDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!b.hasClass(this.markerClassName))return;var d=a.nodeName.toLowerCase();if(d=="input")a.disabled=!1,c.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""});else if(d=="div"||d=="span"){var e=b.children("."+this._inlineClass);e.children().removeClass("ui-state-disabled"),e.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=$.map(this._disabledInputs,function(b){return b==a?null:b})},_disableDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!b.hasClass(this.markerClassName))return;var d=a.nodeName.toLowerCase();if(d=="input")a.disabled=!0,c.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"});else if(d=="div"||d=="span"){var e=b.children("."+this._inlineClass);e.children().addClass("ui-state-disabled"),e.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=$.map(this._disabledInputs,function(b){return b==a?null:b}),this._disabledInputs[this._disabledInputs.length]=a},_isDisabledDatepicker:function(a){if(!a)return!1;for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return!0;return!1},_getInst:function(a){try{return $.data(a,PROP_NAME)}catch(b){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(a,b,c){var d=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?$.extend({},$.datepicker._defaults):d?b=="all"?$.extend({},d.settings):this._get(d,b):null;var e=b||{};typeof b=="string"&&(e={},e[b]=c);if(d){this._curInst==d&&this._hideDatepicker();var f=this._getDateDatepicker(a,!0),g=this._getMinMaxDate(d,"min"),h=this._getMinMaxDate(d,"max");extendRemove(d.settings,e),g!==null&&e.dateFormat!==undefined&&e.minDate===undefined&&(d.settings.minDate=this._formatDate(d,g)),h!==null&&e.dateFormat!==undefined&&e.maxDate===undefined&&(d.settings.maxDate=this._formatDate(d,h)),this._attachments($(a),d),this._autoSize(d),this._setDate(d,f),this._updateAlternate(d),this._updateDatepicker(d)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){var b=this._getInst(a);b&&this._updateDatepicker(b)},_setDateDatepicker:function(a,b){var c=this._getInst(a);c&&(this._setDate(c,b),this._updateDatepicker(c),this._updateAlternate(c))},_getDateDatepicker:function(a,b){var c=this._getInst(a);return c&&!c.inline&&this._setDateFromField(c,b),c?this._getDate(c):null},_doKeyDown:function(a){var b=$.datepicker._getInst(a.target),c=!0,d=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=!0;if($.datepicker._datepickerShowing)switch(a.keyCode){case 9:$.datepicker._hideDatepicker(),c=!1;break;case 13:var e=$("td."+$.datepicker._dayOverClass+":not(."+$.datepicker._currentClass+")",b.dpDiv);e[0]&&$.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,e[0]);var f=$.datepicker._get(b,"onSelect");if(f){var g=$.datepicker._formatDate(b);f.apply(b.input?b.input[0]:null,[g,b])}else $.datepicker._hideDatepicker();return!1;case 27:$.datepicker._hideDatepicker();break;case 33:$.datepicker._adjustDate(a.target,a.ctrlKey?-$.datepicker._get(b,"stepBigMonths"):-$.datepicker._get(b,"stepMonths"),"M");break;case 34:$.datepicker._adjustDate(a.target,a.ctrlKey?+$.datepicker._get(b,"stepBigMonths"):+$.datepicker._get(b,"stepMonths"),"M");break;case 35:(a.ctrlKey||a.metaKey)&&$.datepicker._clearDate(a.target),c=a.ctrlKey||a.metaKey;break;case 36:(a.ctrlKey||a.metaKey)&&$.datepicker._gotoToday(a.target),c=a.ctrlKey||a.metaKey;break;case 37:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,d?1:-1,"D"),c=a.ctrlKey||a.metaKey,a.originalEvent.altKey&&$.datepicker._adjustDate(a.target,a.ctrlKey?-$.datepicker._get(b,"stepBigMonths"):-$.datepicker._get(b,"stepMonths"),"M");break;case 38:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,-7,"D"),c=a.ctrlKey||a.metaKey;break;case 39:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,d?-1:1,"D"),c=a.ctrlKey||a.metaKey,a.originalEvent.altKey&&$.datepicker._adjustDate(a.target,a.ctrlKey?+$.datepicker._get(b,"stepBigMonths"):+$.datepicker._get(b,"stepMonths"),"M");break;case 40:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,7,"D"),c=a.ctrlKey||a.metaKey;break;default:c=!1}else a.keyCode==36&&a.ctrlKey?$.datepicker._showDatepicker(this):c=!1;c&&(a.preventDefault(),a.stopPropagation())},_doKeyPress:function(a){var b=$.datepicker._getInst(a.target);if($.datepicker._get(b,"constrainInput")){var c=$.datepicker._possibleChars($.datepicker._get(b,"dateFormat")),d=String.fromCharCode(a.charCode==undefined?a.keyCode:a.charCode);return a.ctrlKey||a.metaKey||d<" "||!c||c.indexOf(d)>-1}},_doKeyUp:function(a){var b=$.datepicker._getInst(a.target);if(b.input.val()!=b.lastVal)try{var c=$.datepicker.parseDate($.datepicker._get(b,"dateFormat"),b.input?b.input.val():null,$.datepicker._getFormatConfig(b));c&&($.datepicker._setDateFromField(b),$.datepicker._updateAlternate(b),$.datepicker._updateDatepicker(b))}catch(d){$.datepicker.log(d)}return!0},_showDatepicker:function(a){a=a.target||a,a.nodeName.toLowerCase()!="input"&&(a=$("input",a.parentNode)[0]);if($.datepicker._isDisabledDatepicker(a)||$.datepicker._lastInput==a)return;var b=$.datepicker._getInst(a);$.datepicker._curInst&&$.datepicker._curInst!=b&&($.datepicker._curInst.dpDiv.stop(!0,!0),b&&$.datepicker._datepickerShowing&&$.datepicker._hideDatepicker($.datepicker._curInst.input[0]));var c=$.datepicker._get(b,"beforeShow"),d=c?c.apply(a,[a,b]):{};if(d===!1)return;extendRemove(b.settings,d),b.lastVal=null,$.datepicker._lastInput=a,$.datepicker._setDateFromField(b),$.datepicker._inDialog&&(a.value=""),$.datepicker._pos||($.datepicker._pos=$.datepicker._findPos(a),$.datepicker._pos[1]+=a.offsetHeight);var e=!1;$(a).parents().each(function(){return e|=$(this).css("position")=="fixed",!e}),e&&$.browser.opera&&($.datepicker._pos[0]-=document.documentElement.scrollLeft,$.datepicker._pos[1]-=document.documentElement.scrollTop);var f={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null,b.dpDiv.empty(),b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),$.datepicker._updateDatepicker(b),f=$.datepicker._checkOffset(b,f,e),b.dpDiv.css({position:$.datepicker._inDialog&&$.blockUI?"static":e?"fixed":"absolute",display:"none",left:f.left+"px",top:f.top+"px"});if(!b.inline){var g=$.datepicker._get(b,"showAnim"),h=$.datepicker._get(b,"duration"),i=function(){var a=b.dpDiv.find("iframe.ui-datepicker-cover");if(!!a.length){var c=$.datepicker._getBorders(b.dpDiv);a.css({left:-c[0],top:-c[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex($(a).zIndex()+1),$.datepicker._datepickerShowing=!0,$.effects&&$.effects[g]?b.dpDiv.show(g,$.datepicker._get(b,"showOptions"),h,i):b.dpDiv[g||"show"](g?h:null,i),(!g||!h)&&i(),b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus(),$.datepicker._curInst=b}},_updateDatepicker:function(a){var b=this;b.maxRows=4;var c=$.datepicker._getBorders(a.dpDiv);instActive=a,a.dpDiv.empty().append(this._generateHTML(a)),this._attachHandlers(a);var d=a.dpDiv.find("iframe.ui-datepicker-cover");!d.length||d.css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()}),a.dpDiv.find("."+this._dayOverClass+" a").mouseover();var e=this._getNumberOfMonths(a),f=e[1],g=17;a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),f>1&&a.dpDiv.addClass("ui-datepicker-multi-"+f).css("width",g*f+"em"),a.dpDiv[(e[0]!=1||e[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi"),a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),a==$.datepicker._curInst&&$.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var h=a.yearshtml;setTimeout(function(){h===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml),h=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(a){return{thin:1,medium:2,thick:3}[a]||a};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var d=a.dpDiv.outerWidth(),e=a.dpDiv.outerHeight(),f=a.input?a.input.outerWidth():0,g=a.input?a.input.outerHeight():0,h=document.documentElement.clientWidth+(c?0:$(document).scrollLeft()),i=document.documentElement.clientHeight+(c?0:$(document).scrollTop());return b.left-=this._get(a,"isRTL")?d-f:0,b.left-=c&&b.left==a.input.offset().left?$(document).scrollLeft():0,b.top-=c&&b.top==a.input.offset().top+g?$(document).scrollTop():0,b.left-=Math.min(b.left,b.left+d>h&&h>d?Math.abs(b.left+d-h):0),b.top-=Math.min(b.top,b.top+e>i&&i>e?Math.abs(e+g):0),b},_findPos:function(a){var b=this._getInst(a),c=this._get(b,"isRTL");while(a&&(a.type=="hidden"||a.nodeType!=1||$.expr.filters.hidden(a)))a=a[c?"previousSibling":"nextSibling"];var d=$(a).offset();return[d.left,d.top]},_hideDatepicker:function(a){var b=this._curInst;if(!b||a&&b!=$.data(a,PROP_NAME))return;if(this._datepickerShowing){var c=this._get(b,"showAnim"),d=this._get(b,"duration"),e=function(){$.datepicker._tidyDialog(b)};$.effects&&$.effects[c]?b.dpDiv.hide(c,$.datepicker._get(b,"showOptions"),d,e):b.dpDiv[c=="slideDown"?"slideUp":c=="fadeIn"?"fadeOut":"hide"](c?d:null,e),c||e(),this._datepickerShowing=!1;var f=this._get(b,"onClose");f&&f.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),$.blockUI&&($.unblockUI(),$("body").append(this.dpDiv))),this._inDialog=!1}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(!$.datepicker._curInst)return;var b=$(a.target),c=$.datepicker._getInst(b[0]);(b[0].id!=$.datepicker._mainDivId&&b.parents("#"+$.datepicker._mainDivId).length==0&&!b.hasClass($.datepicker.markerClassName)&&!b.closest("."+$.datepicker._triggerClass).length&&$.datepicker._datepickerShowing&&(!$.datepicker._inDialog||!$.blockUI)||b.hasClass($.datepicker.markerClassName)&&$.datepicker._curInst!=c)&&$.datepicker._hideDatepicker()},_adjustDate:function(a,b,c){var d=$(a),e=this._getInst(d[0]);if(this._isDisabledDatepicker(d[0]))return;this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c),this._updateDatepicker(e)},_gotoToday:function(a){var b=$(a),c=this._getInst(b[0]);if(this._get(c,"gotoCurrent")&&c.currentDay)c.selectedDay=c.currentDay,c.drawMonth=c.selectedMonth=c.currentMonth,c.drawYear=c.selectedYear=c.currentYear;else{var d=new Date;c.selectedDay=d.getDate(),c.drawMonth=c.selectedMonth=d.getMonth(),c.drawYear=c.selectedYear=d.getFullYear()}this._notifyChange(c),this._adjustDate(b)},_selectMonthYear:function(a,b,c){var d=$(a),e=this._getInst(d[0]);e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10),this._notifyChange(e),this._adjustDate(d)},_selectDay:function(a,b,c,d){var e=$(a);if($(d).hasClass(this._unselectableClass)||this._isDisabledDatepicker(e[0]))return;var f=this._getInst(e[0]);f.selectedDay=f.currentDay=$("a",d).html(),f.selectedMonth=f.currentMonth=b,f.selectedYear=f.currentYear=c,this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))},_clearDate:function(a){var b=$(a),c=this._getInst(b[0]);this._selectDate(b,"")},_selectDate:function(a,b){var c=$(a),d=this._getInst(c[0]);b=b!=null?b:this._formatDate(d),d.input&&d.input.val(b),this._updateAlternate(d);var e=this._get(d,"onSelect");e?e.apply(d.input?d.input[0]:null,[b,d]):d.input&&d.input.trigger("change"),d.inline?this._updateDatepicker(d):(this._hideDatepicker(),this._lastInput=d.input[0],typeof d.input[0]!="object"&&d.input.focus(),this._lastInput=null)},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),d=this._getDate(a),e=this.formatDate(c,d,this._getFormatConfig(a));$(b).each(function(){$(this).val(e)})}},noWeekends:function(a){var b=a.getDay();return[b>0&&b<6,""]},iso8601Week:function(a){var b=new Date(a.getTime());b.setDate(b.getDate()+4-(b.getDay()||7));var c=b.getTime();return b.setMonth(0),b.setDate(1),Math.floor(Math.round((c-b)/864e5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var d=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;d=typeof d!="string"?d:(new Date).getFullYear()%100+parseInt(d,10);var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,g=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,h=(c?c.monthNames:null)||this._defaults.monthNames,i=-1,j=-1,k=-1,l=-1,m=!1,n=function(b){var c=s+1<a.length&&a.charAt(s+1)==b;return c&&s++,c},o=function(a){var c=n(a),d=a=="@"?14:a=="!"?20:a=="y"&&c?4:a=="o"?3:2,e=new RegExp("^\\d{1,"+d+"}"),f=b.substring(r).match(e);if(!f)throw"Missing number at position "+r;return r+=f[0].length,parseInt(f[0],10)},p=function(a,c,d){var e=$.map(n(a)?d:c,function(a,b){return[[b,a]]}).sort(function(a,b){return-(a[1].length-b[1].length)}),f=-1;$.each(e,function(a,c){var d=c[1];if(b.substr(r,d.length).toLowerCase()==d.toLowerCase())return f=c[0],r+=d.length,!1});if(f!=-1)return f+1;throw"Unknown name at position "+r},q=function(){if(b.charAt(r)!=a.charAt(s))throw"Unexpected literal at position "+r;r++},r=0;for(var s=0;s<a.length;s++)if(m)a.charAt(s)=="'"&&!n("'")?m=!1:q();else switch(a.charAt(s)){case"d":k=o("d");break;case"D":p("D",e,f);break;case"o":l=o("o");break;case"m":j=o("m");break;case"M":j=p("M",g,h);break;case"y":i=o("y");break;case"@":var t=new Date(o("@"));i=t.getFullYear(),j=t.getMonth()+1,k=t.getDate();break;case"!":var t=new Date((o("!")-this._ticksTo1970)/1e4);i=t.getFullYear(),j=t.getMonth()+1,k=t.getDate();break;case"'":n("'")?q():m=!0;break;default:q()}if(r<b.length)throw"Extra/unparsed characters found in date: "+b.substring(r);i==-1?i=(new Date).getFullYear():i<100&&(i+=(new Date).getFullYear()-(new Date).getFullYear()%100+(i<=d?0:-100));if(l>-1){j=1,k=l;do{var u=this._getDaysInMonth(i,j-1);if(k<=u)break;j++,k-=u}while(!0)}var t=this._daylightSavingAdjust(new Date(i,j-1,k));if(t.getFullYear()!=i||t.getMonth()+1!=j||t.getDate()!=k)throw"Invalid date";return t},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1e7,formatDate:function(a,b,c){if(!b)return"";var d=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,e=(c?c.dayNames:null)||this._defaults.dayNames,f=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,h=function(b){var c=m+1<a.length&&a.charAt(m+1)==b;return c&&m++,c},i=function(a,b,c){var d=""+b;if(h(a))while(d.length<c)d="0"+d;return d},j=function(a,b,c,d){return h(a)?d[b]:c[b]},k="",l=!1;if(b)for(var m=0;m<a.length;m++)if(l)a.charAt(m)=="'"&&!h("'")?l=!1:k+=a.charAt(m);else switch(a.charAt(m)){case"d":k+=i("d",b.getDate(),2);break;case"D":k+=j("D",b.getDay(),d,e);break;case"o":k+=i("o",Math.round(((new Date(b.getFullYear(),b.getMonth(),b.getDate())).getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864e5),3);break;case"m":k+=i("m",b.getMonth()+1,2);break;case"M":k+=j("M",b.getMonth(),f,g);break;case"y":k+=h("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case"@":k+=b.getTime();break;case"!":k+=b.getTime()*1e4+this._ticksTo1970;break;case"'":h("'")?k+="'":l=!0;break;default:k+=a.charAt(m)}return k},_possibleChars:function(a){var b="",c=!1,d=function(b){var c=e+1<a.length&&a.charAt(e+1)==b;return c&&e++,c};for(var e=0;e<a.length;e++)if(c)a.charAt(e)=="'"&&!d("'")?c=!1:b+=a.charAt(e);else switch(a.charAt(e)){case"d":case"m":case"y":case"@":b+="0123456789";break;case"D":case"M":return null;case"'":d("'")?b+="'":c=!0;break;default:b+=a.charAt(e)}return b},_get:function(a,b){return a.settings[b]!==undefined?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()==a.lastVal)return;var c=this._get(a,"dateFormat"),d=a.lastVal=a.input?a.input.val():null,e,f;e=f=this._getDefaultDate(a);var g=this._getFormatConfig(a);try{e=this.parseDate(c,d,g)||f}catch(h){this.log(h),d=b?"":d}a.selectedDay=e.getDate(),a.drawMonth=a.selectedMonth=e.getMonth(),a.drawYear=a.selectedYear=e.getFullYear(),a.currentDay=d?e.getDate():0,a.currentMonth=d?e.getMonth():0,a.currentYear=d?e.getFullYear():0,this._adjustInstDate(a)},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var d=function(a){var b=new Date;return b.setDate(b.getDate()+a),b},e=function(b){try{return $.datepicker.parseDate($.datepicker._get(a,"dateFormat"),b,$.datepicker._getFormatConfig(a))}catch(c){}var d=(b.toLowerCase().match(/^c/)?$.datepicker._getDate(a):null)||new Date,e=d.getFullYear(),f=d.getMonth(),g=d.getDate(),h=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,i=h.exec(b);while(i){switch(i[2]||"d"){case"d":case"D":g+=parseInt(i[1],10);break;case"w":case"W":g+=parseInt(i[1],10)*7;break;case"m":case"M":f+=parseInt(i[1],10),g=Math.min(g,$.datepicker._getDaysInMonth(e,f));break;case"y":case"Y":e+=parseInt(i[1],10),g=Math.min(g,$.datepicker._getDaysInMonth(e,f))}i=h.exec(b)}return new Date(e,f,g)},f=b==null||b===""?c:typeof b=="string"?e(b):typeof b=="number"?isNaN(b)?c:d(b):new Date(b.getTime());return f=f&&f.toString()=="Invalid Date"?c:f,f&&(f.setHours(0),f.setMinutes(0),f.setSeconds(0),f.setMilliseconds(0)),this._daylightSavingAdjust(f)},_daylightSavingAdjust:function(a){return a?(a.setHours(a.getHours()>12?a.getHours()+2:0),a):null},_setDate:function(a,b,c){var d=!b,e=a.selectedMonth,f=a.selectedYear,g=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=g.getDate(),a.drawMonth=a.selectedMonth=a.currentMonth=g.getMonth(),a.drawYear=a.selectedYear=a.currentYear=g.getFullYear(),(e!=a.selectedMonth||f!=a.selectedYear)&&!c&&this._notifyChange(a),this._adjustInstDate(a),a.input&&a.input.val(d?"":this._formatDate(a))},_getDate:function(a){var b=!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return b},_attachHandlers:function(a){var b=this._get(a,"stepMonths"),c="#"+a.id.replace(/\\\\/g,"\\");a.dpDiv.find("[data-handler]").map(function(){var a={prev:function(){window["DP_jQuery_"+dpuuid].datepicker._adjustDate(c,-b,"M")},next:function(){window["DP_jQuery_"+dpuuid].datepicker._adjustDate(c,+b,"M")},hide:function(){window["DP_jQuery_"+dpuuid].datepicker._hideDatepicker()},today:function(){window["DP_jQuery_"+dpuuid].datepicker._gotoToday(c)},selectDay:function(){return window["DP_jQuery_"+dpuuid].datepicker._selectDay(c,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return window["DP_jQuery_"+dpuuid].datepicker._selectMonthYear(c,this,"M"),!1},selectYear:function(){return window["DP_jQuery_"+dpuuid].datepicker._selectMonthYear(c,this,"Y"),!1}};$(this).bind(this.getAttribute("data-event"),a[this.getAttribute("data-handler")])})},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),d=this._get(a,"showButtonPanel"),e=this._get(a,"hideIfNoPrevNext"),f=this._get(a,"navigationAsDateFormat"),g=this._getNumberOfMonths(a),h=this._get(a,"showCurrentAtPos"),i=this._get(a,"stepMonths"),j=g[0]!=1||g[1]!=1,k=this._daylightSavingAdjust(a.currentDay?new Date(a.currentYear,a.currentMonth,a.currentDay):new Date(9999,9,9)),l=this._getMinMaxDate(a,"min"),m=this._getMinMaxDate(a,"max"),n=a.drawMonth-h,o=a.drawYear;n<0&&(n+=12,o--);if(m){var p=this._daylightSavingAdjust(new Date(m.getFullYear(),m.getMonth()-g[0]*g[1]+1,m.getDate()));p=l&&p<l?l:p;while(this._daylightSavingAdjust(new Date(o,n,1))>p)n--,n<0&&(n=11,o--)}a.drawMonth=n,a.drawYear=o;var q=this._get(a,"prevText");q=f?this.formatDate(q,this._daylightSavingAdjust(new Date(o,n-i,1)),this._getFormatConfig(a)):q;var r=this._canAdjustMonth(a,-1,o,n)?'<a class="ui-datepicker-prev ui-corner-all" data-handler="prev" data-event="click" title="'+q+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+q+"</span></a>":e?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+q+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+q+"</span></a>",s=this._get(a,"nextText");s=f?this.formatDate(s,this._daylightSavingAdjust(new Date(o,n+i,1)),this._getFormatConfig(a)):s;var t=this._canAdjustMonth(a,1,o,n)?'<a class="ui-datepicker-next ui-corner-all" data-handler="next" data-event="click" title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>":e?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>",u=this._get(a,"currentText"),v=this._get(a,"gotoCurrent")&&a.currentDay?k:b;u=f?this.formatDate(u,v,this._getFormatConfig(a)):u;var w=a.inline?"":'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" data-handler="hide" data-event="click">'+this._get(a,"closeText")+"</button>",x=d?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?w:"")+(this._isInRange(a,v)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" data-handler="today" data-event="click">'+u+"</button>":"")+(c?"":w)+"</div>":"",y=parseInt(this._get(a,"firstDay"),10);y=isNaN(y)?0:y;var z=this._get(a,"showWeek"),A=this._get(a,"dayNames"),B=this._get(a,"dayNamesShort"),C=this._get(a,"dayNamesMin"),D=this._get(a,"monthNames"),E=this._get(a,"monthNamesShort"),F=this._get(a,"beforeShowDay"),G=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths"),I=this._get(a,"calculateWeek")||this.iso8601Week,J=this._getDefaultDate(a),K="";for(var L=0;L<g[0];L++){var M="";this.maxRows=4;for(var N=0;N<g[1];N++){var O=this._daylightSavingAdjust(new Date(o,n,a.selectedDay)),P=" ui-corner-all",Q="";if(j){Q+='<div class="ui-datepicker-group';if(g[1]>1)switch(N){case 0:Q+=" ui-datepicker-group-first",P=" ui-corner-"+(c?"right":"left");break;case g[1]-1:Q+=" ui-datepicker-group-last",P=" ui-corner-"+(c?"left":"right");break;default:Q+=" ui-datepicker-group-middle",P=""}Q+='">'}Q+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+P+'">'+(/all|left/.test(P)&&L==0?c?t:r:"")+(/all|right/.test(P)&&L==0?c?r:t:"")+this._generateMonthYearHeader(a,n,o,l,m,L>0||N>0,D,E)+'</div><table class="ui-datepicker-calendar"><thead>'+"<tr>";var R=z?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(var S=0;S<7;S++){var T=(S+y)%7;R+="<th"+((S+y+6)%7>=5?' class="ui-datepicker-week-end"':"")+">"+'<span title="'+A[T]+'">'+C[T]+"</span></th>"}Q+=R+"</tr></thead><tbody>";var U=this._getDaysInMonth(o,n);o==a.selectedYear&&n==a.selectedMonth&&(a.selectedDay=Math.min(a.selectedDay,U));var V=(this._getFirstDayOfMonth(o,n)-y+7)%7,W=Math.ceil((V+U)/7),X=j?this.maxRows>W?this.maxRows:W:W;this.maxRows=X;var Y=this._daylightSavingAdjust(new Date(o,n,1-V));for(var Z=0;Z<X;Z++){Q+="<tr>";var _=z?'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(Y)+"</td>":"";for(var S=0;S<7;S++){var ba=F?F.apply(a.input?a.input[0]:null,[Y]):[!0,""],bb=Y.getMonth()!=n,bc=bb&&!H||!ba[0]||l&&Y<l||m&&Y>m;_+='<td class="'+((S+y+6)%7>=5?" ui-datepicker-week-end":"")+(bb?" ui-datepicker-other-month":"")+(Y.getTime()==O.getTime()&&n==a.selectedMonth&&a._keyEvent||J.getTime()==Y.getTime()&&J.getTime()==O.getTime()?" "+this._dayOverClass:"")+(bc?" "+this._unselectableClass+" ui-state-disabled":"")+(bb&&!G?"":" "+ba[1]+(Y.getTime()==k.getTime()?" "+this._currentClass:"")+(Y.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!bb||G)&&ba[2]?' title="'+ba[2]+'"':"")+(bc?"":' data-handler="selectDay" data-event="click" data-month="'+Y.getMonth()+'" data-year="'+Y.getFullYear()+'"')+">"+(bb&&!G?"&#xa0;":bc?'<span class="ui-state-default">'+Y.getDate()+"</span>":'<a class="ui-state-default'+(Y.getTime()==b.getTime()?" ui-state-highlight":"")+(Y.getTime()==k.getTime()?" ui-state-active":"")+(bb?" ui-priority-secondary":"")+'" href="#">'+Y.getDate()+"</a>")+"</td>",Y.setDate(Y.getDate()+1),Y=this._daylightSavingAdjust(Y)}Q+=_+"</tr>"}n++,n>11&&(n=0,o++),Q+="</tbody></table>"+(j?"</div>"+(g[0]>0&&N==g[1]-1?'<div class="ui-datepicker-row-break"></div>':""):""),M+=Q}K+=M}return K+=x+($.browser.msie&&parseInt($.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':""),a._keyEvent=!1,K},_generateMonthYearHeader:function(a,b,c,d,e,f,g,h){var i=this._get(a,"changeMonth"),j=this._get(a,"changeYear"),k=this._get(a,"showMonthAfterYear"),l='<div class="ui-datepicker-title">',m="";if(f||!i)m+='<span class="ui-datepicker-month">'+g[b]+"</span>";else{var n=d&&d.getFullYear()==c,o=e&&e.getFullYear()==c;m+='<select class="ui-datepicker-month" data-handler="selectMonth" data-event="change">';for(var p=0;p<12;p++)(!n||p>=d.getMonth())&&(!o||p<=e.getMonth())&&(m+='<option value="'+p+'"'+(p==b?' selected="selected"':"")+">"+h[p]+"</option>");m+="</select>"}k||(l+=m+(f||!i||!j?"&#xa0;":""));if(!a.yearshtml){a.yearshtml="";if(f||!j)l+='<span class="ui-datepicker-year">'+c+"</span>";else{var q=this._get(a,"yearRange").split(":"),r=(new Date).getFullYear(),s=function(a){var b=a.match(/c[+-].*/)?c+parseInt(a.substring(1),10):a.match(/[+-].*/)?r+parseInt(a,10):parseInt(a,10);return isNaN(b)?r:b},t=s(q[0]),u=Math.max(t,s(q[1]||""));t=d?Math.max(t,d.getFullYear()):t,u=e?Math.min(u,e.getFullYear()):u,a.yearshtml+='<select class="ui-datepicker-year" data-handler="selectYear" data-event="change">';for(;t<=u;t++)a.yearshtml+='<option value="'+t+'"'+(t==c?' selected="selected"':"")+">"+t+"</option>";a.yearshtml+="</select>",l+=a.yearshtml,a.yearshtml=null}}return l+=this._get(a,"yearSuffix"),k&&(l+=(f||!i||!j?"&#xa0;":"")+m),l+="</div>",l},_adjustInstDate:function(a,b,c){var d=a.drawYear+(c=="Y"?b:0),e=a.drawMonth+(c=="M"?b:0),f=Math.min(a.selectedDay,this._getDaysInMonth(d,e))+(c=="D"?b:0),g=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(d,e,f)));a.selectedDay=g.getDate(),a.drawMonth=a.selectedMonth=g.getMonth(),a.drawYear=a.selectedYear=g.getFullYear(),(c=="M"||c=="Y")&&this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max"),e=c&&b<c?c:b;return e=d&&e>d?d:e,e},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");b&&b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){var b=this._get(a,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,d){var e=this._getNumberOfMonths(a),f=this._daylightSavingAdjust(new Date(c,d+(b<0?b:e[0]*e[1]),1));return b<0&&f.setDate(this._getDaysInMonth(f.getFullYear(),f.getMonth())),this._isInRange(a,f)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!d||b.getTime()<=d.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");return b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10),{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,d){b||(a.currentDay=a.selectedDay,a.currentMonth=a.selectedMonth,a.currentYear=a.selectedYear);var e=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(d,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),e,this._getFormatConfig(a))}}),$.fn.datepicker=function(a){if(!this.length)return this;$.datepicker.initialized||($(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv),$.datepicker.initialized=!0);var b=Array.prototype.slice.call(arguments,1);return typeof a!="string"||a!="isDisabled"&&a!="getDate"&&a!="widget"?a=="option"&&arguments.length==2&&typeof arguments[1]=="string"?$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b)):this.each(function(){typeof a=="string"?$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this].concat(b)):$.datepicker._attachDatepicker(this,a)}):$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b))},$.datepicker=new Datepicker,$.datepicker.initialized=!1,$.datepicker.uuid=(new Date).getTime(),$.datepicker.version="1.8.23",window["DP_jQuery_"+dpuuid]=$})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15
2240+* https://github.com/jquery/jquery-ui
2241+* Includes: jquery.ui.progressbar.js
2242+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
2243+(function(a,b){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()}),this.valueDiv=a("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this.oldValue=this._value(),this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove(),a.Widget.prototype.destroy.apply(this,arguments)},value:function(a){return a===b?this._value():(this._setOption("value",a),this)},_setOption:function(b,c){b==="value"&&(this.options.value=c,this._refreshValue(),this._value()===this.options.max&&this._trigger("complete")),a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;return typeof a!="number"&&(a=0),Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*this._value()/this.options.max},_refreshValue:function(){var a=this.value(),b=this._percentage();this.oldValue!==a&&(this.oldValue=a,this._trigger("change")),this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(b.toFixed(0)+"%"),this.element.attr("aria-valuenow",a)}}),a.extend(a.ui.progressbar,{version:"1.8.23"})})(jQuery);;
2244\ No newline at end of file
2245
2246=== added file 'sloecode/public/js/wiki-edit-helpers.js'
2247--- sloecode/public/js/wiki-edit-helpers.js 1970-01-01 00:00:00 +0000
2248+++ sloecode/public/js/wiki-edit-helpers.js 2012-09-26 01:36:19 +0000
2249@@ -0,0 +1,66 @@
2250+function wrap_text(leftTag, rightTag) {
2251+ var textArea = $('textarea#content');
2252+ var len = textArea.val().length;
2253+ var start = textArea[0].selectionStart;
2254+ var end = textArea[0].selectionEnd;
2255+ var selectedText = textArea.val().substring(start, end);
2256+
2257+ var existingOutsideLeftTag = textArea.val().substring(start - leftTag.length, start);
2258+ var existingOutsideRightTag = textArea.val().substring(end, end + rightTag.length);
2259+ var existingInsideLeftTag = textArea.val().substring(start, start + leftTag.length);
2260+ var existingInsideRightTag = textArea.val().substring(end - rightTag.length, end);
2261+
2262+ if (existingOutsideLeftTag == leftTag && existingOutsideRightTag == rightTag)
2263+ {
2264+ var leftSubstring = textArea.val().substring(0, start - leftTag.length);
2265+ var rightSubstring = textArea.val().substring(end + rightTag.length);
2266+ textArea.val(leftSubstring + selectedText + rightSubstring);
2267+ textArea[0].selectionStart = start - leftTag.length;
2268+ textArea[0].selectionEnd = end - leftTag.length;
2269+ }
2270+ else if (existingInsideLeftTag == leftTag && existingInsideRightTag == rightTag)
2271+ {
2272+ var leftSubstring = textArea.val().substring(0, start);
2273+ var rightSubstring = textArea.val().substring(end);
2274+ selectedText = selectedText.substring(leftTag.length, selectedText.length - rightTag.length)
2275+ textArea.val(leftSubstring + selectedText + rightSubstring);
2276+ textArea[0].selectionStart = start;
2277+ textArea[0].selectionEnd = end - 2 * leftTag.length;
2278+ }
2279+ else
2280+ {
2281+ var replacement = leftTag + selectedText + rightTag;
2282+ textArea.val(textArea.val().substring(0, start) + replacement + textArea.val().substring(end, len));
2283+ textArea[0].selectionStart = start + leftTag.length;
2284+ textArea[0].selectionEnd = end + leftTag.length;
2285+ }
2286+}
2287+function display_link_window() {
2288+ $("#dialog-modal").dialog({
2289+ width: 300,
2290+ height: 200,
2291+ buttons: {
2292+ "Add Link": function() {
2293+ var textArea = $('textarea#content');
2294+ var len = textArea.val().length;
2295+ var start = textArea[0].selectionStart;
2296+ var leftText = textArea.val().substring(0, start);
2297+ var rightText = textArea.val().substring(start);
2298+ var linkString = "[" + $("#link_title").val() + "](" + $("#link_href").val() + ")";
2299+ textArea.val(leftText + linkString + rightText);
2300+ $(this).dialog("close");
2301+ }
2302+ }
2303+ });
2304+}
2305+$(document).ready(function(){
2306+ $('.toolbar-bold').click(function(){
2307+ wrap_text("**", "**");
2308+ });
2309+ $('.toolbar-italic').click(function(){
2310+ wrap_text("*", "*");
2311+ });
2312+ $('.toolbar-link').click(function(){
2313+ display_link_window();
2314+ });
2315+});
2316
2317=== modified file 'sloecode/sshserver/accesslog.py'
2318--- sloecode/sshserver/accesslog.py 2011-01-07 09:27:32 +0000
2319+++ sloecode/sshserver/accesslog.py 2012-09-26 01:36:19 +0000
2320@@ -17,7 +17,6 @@
2321 provideHandler,
2322 )
2323 # This non-standard import is necessary to hook up the event system.
2324-import zope.component.event
2325
2326 from sloecode.sshserver.events import ILoggingEvent
2327
2328
2329=== added file 'sloecode/templates/admin/template-edit.html'
2330--- sloecode/templates/admin/template-edit.html 1970-01-01 00:00:00 +0000
2331+++ sloecode/templates/admin/template-edit.html 2012-09-26 01:36:19 +0000
2332@@ -0,0 +1,17 @@
2333+{% extends "base.html" %}
2334+
2335+{% block title %} Wiki {% endblock %}
2336+
2337+{% block content %}
2338+{% set pathurl = h.url(controller=path, action="+save") %}
2339+<p>{{ h.form(pathurl, method="post", name="wiki") }}
2340+ {{ h.hidden('old_name', template['name']) }}
2341+ Name: {{ h.text('name', template['name']) }}<br>
2342+ Folder Location: {{ h.text('save_location', template['save_location']) }}<br>
2343+ Description: {{ h.text('description', template['description']) }}<br>
2344+ {{ h.textarea("content", template['content'], rows=20, style='width:99%') }}<br>
2345+ {{ h.submit('save', 'Save') }}
2346+{{ h.end_form() }}</p>
2347+{% endblock %}
2348+
2349+
2350
2351=== added file 'sloecode/templates/admin/template-view.html'
2352--- sloecode/templates/admin/template-view.html 1970-01-01 00:00:00 +0000
2353+++ sloecode/templates/admin/template-view.html 2012-09-26 01:36:19 +0000
2354@@ -0,0 +1,12 @@
2355+{% extends "base.html" %}
2356+
2357+{% block title %} Wiki {% endblock %}
2358+
2359+{% block content %}
2360+{{ h.link_to("Edit", h.url(controller="admin/wiki", action="edit_template", filename=template.name)) }}<br>
2361+Name: {{ template.name }}<br>
2362+Description: {{ template.description }}<br>
2363+Save Location: {{ template.save_location }}<br>
2364+Content: {{ template.content.replace('\n', '<br>') }}<br>
2365+
2366+{% endblock %}
2367\ No newline at end of file
2368
2369=== added file 'sloecode/templates/admin/template-viewall.html'
2370--- sloecode/templates/admin/template-viewall.html 1970-01-01 00:00:00 +0000
2371+++ sloecode/templates/admin/template-viewall.html 2012-09-26 01:36:19 +0000
2372@@ -0,0 +1,13 @@
2373+{% extends "base.html" %}
2374+
2375+{% block title %} Wiki - Page Templates {% endblock %}
2376+
2377+{% block content %}
2378+<div style='float:left'>
2379+ {% for template in template_names %}
2380+ {{h.link_to(template, h.url(controller="admin/wiki", action="edit_template", filename=template))
2381+ }}
2382+ {% endfor %}
2383+</div>
2384+
2385+{% endblock %}
2386\ No newline at end of file
2387
2388=== modified file 'sloecode/templates/project-details.html'
2389--- sloecode/templates/project-details.html 2012-01-14 16:01:49 +0000
2390+++ sloecode/templates/project-details.html 2012-09-26 01:36:19 +0000
2391@@ -16,6 +16,11 @@
2392 <div class="content-left">
2393 <h1>{{ project.name }}: {{ project.displayname|e }}</h1>
2394 <h4>{{ project.description|e }}</h4>
2395+ <h2>
2396+ <a href='/p/{{ project.name }}/wiki'>
2397+ Project Wiki
2398+ </a>
2399+ </h2
2400 </div>
2401 </div>
2402 </div>
2403
2404=== added directory 'sloecode/templates/wiki'
2405=== added file 'sloecode/templates/wiki/base.html'
2406--- sloecode/templates/wiki/base.html 1970-01-01 00:00:00 +0000
2407+++ sloecode/templates/wiki/base.html 2012-09-26 01:36:19 +0000
2408@@ -0,0 +1,21 @@
2409+{% extends "base.html" %}
2410+
2411+{% block prehead_includes %}
2412+ {{ h.stylesheet_link(h.url('/css/wiki.css')) }}
2413+ {% block header %}{% endblock %}
2414+{% endblock %}
2415+
2416+{% block title %} Wiki {% endblock %}
2417+
2418+{% block content %}
2419+<div class='wiki_actions_wrapper'>
2420+ <div class='wikkid'>
2421+ {% block wiki_actions %}{% endblock %}
2422+ </div>
2423+ <div class='clear'></div>
2424+</div>
2425+<div class='clear'></div>
2426+<div class='wikkid_wrapper'>
2427+{% block wiki_content %}{% endblock %}
2428+</div>
2429+{% endblock %}
2430
2431=== added file 'sloecode/templates/wiki/directory.html'
2432--- sloecode/templates/wiki/directory.html 1970-01-01 00:00:00 +0000
2433+++ sloecode/templates/wiki/directory.html 2012-09-26 01:36:19 +0000
2434@@ -0,0 +1,31 @@
2435+{% extends "wiki/base.html" %}
2436+
2437+{% block title %} Wiki {% endblock %}
2438+
2439+{% block wiki_actions %}
2440+ <div class='wikkid'>
2441+ <ul class='wiki_breadcrumbs'>
2442+ {% for crumb in fragments['breadcrumbs'] %}
2443+ <li>
2444+ <a class='wiki_crumb' href="{{ crumb.path }}"><span class='wiki_crumb_content'>{{ crumb.title }}</span></a>
2445+ </li>
2446+ {% endfor %}
2447+ </ul>
2448+ </div>
2449+{% endblock %}
2450+
2451+{% block wiki_content %}
2452+ <table class="dir-listing">
2453+ {% if fragments['content'] %}
2454+ {% for item in fragments['content'] %}
2455+ <tr class="{{ loop.cycle('odd', 'even') }}">
2456+ <td>
2457+ <a href="{{ item.url }}" class="{{ item.css_class }}">{{ item.name }}</a>
2458+ </td>
2459+ </tr>
2460+ {% endfor %}
2461+ {% else %}
2462+ There are no files at the moment.
2463+ {% endif %}
2464+ </table>
2465+{% endblock %}
2466
2467=== added file 'sloecode/templates/wiki/edit.html'
2468--- sloecode/templates/wiki/edit.html 1970-01-01 00:00:00 +0000
2469+++ sloecode/templates/wiki/edit.html 2012-09-26 01:36:19 +0000
2470@@ -0,0 +1,42 @@
2471+{% extends "wiki/page.html" %}
2472+
2473+{% block header %}
2474+ {{ h.javascript_link(h.url('http://code.jquery.com/jquery-latest.min.js')) }}
2475+ {{ h.javascript_link(h.url('/js/jquery-ui-1.8.23.custom.min.js')) }}
2476+ {{ h.stylesheet_link(h.url('/css/smoothness/jquery-ui-1.8.23.custom.css')) }}
2477+ {{ h.javascript_link(h.url('/js/wiki-edit-helpers.js')) }}
2478+{% endblock %}
2479+
2480+{% block page_content %}
2481+{{ h.form(fragments['save_url'], method="post", name="wiki") }}
2482+ {{ h.hidden('description') }}
2483+ {{ h.hidden('rev-id', value=fragments['rev-id']) }}
2484+ <div class='edit-toolbar'>
2485+ <ul class='edit-toolbar-buttons'>
2486+ <li><a href='#' class='toolbar-bold'><b>B</b></a></li>
2487+ <li><a href='#' class='toolbar-italic'><i>I</i></a></li>
2488+ <li><a href='#' class='toolbar-link'>l</a></li>
2489+ </ul>
2490+ </div>
2491+ <div class='edit-content'>
2492+ {{ h.textarea("content", fragments['content'], rows=30) }}
2493+ </div><br>
2494+ {{ h.submit('save', 'Save') }}
2495+ {{ h.submit('preview', 'Preview') }}
2496+ <a href="{{ fragments['cancel_url'] }}">Cancel</a>
2497+ {% if fragments['preview'] %}
2498+ {{ fragments['preview'] }}
2499+ {% endif %}
2500+{{ h.end_form() }}</p>
2501+<div id="dialog-modal" style="display:none">
2502+ <form>
2503+ <label for="link_title">Text To Show:</label>
2504+ <br />
2505+ <input type="textbox" id="link_title"/>
2506+ <br /><br />
2507+ <label for="link_href">URL:</label>
2508+ <br />
2509+ <input type="textbox" id="link_href"/>
2510+ </form>
2511+</div>
2512+{% endblock %}
2513
2514=== added file 'sloecode/templates/wiki/load-template.html'
2515--- sloecode/templates/wiki/load-template.html 1970-01-01 00:00:00 +0000
2516+++ sloecode/templates/wiki/load-template.html 2012-09-26 01:36:19 +0000
2517@@ -0,0 +1,3 @@
2518+Save Location: {{ h.text('save_location', template.save_location) }}<span class='field-helper'>This is the folder that your new file will go into.</span><br>
2519+{{ h.textarea('content', template.content, rows=20, style='width:99%') }}<br>
2520+{{ h.submit('save', 'Save') }}
2521\ No newline at end of file
2522
2523=== added file 'sloecode/templates/wiki/newfile.html'
2524--- sloecode/templates/wiki/newfile.html 1970-01-01 00:00:00 +0000
2525+++ sloecode/templates/wiki/newfile.html 2012-09-26 01:36:19 +0000
2526@@ -0,0 +1,43 @@
2527+{% extends "base.html" %}
2528+
2529+{% block title %} Wiki {% endblock %}
2530+
2531+{% block content %}
2532+{% set pathurl = h.url(controller=path, action="+save") %}
2533+<p>{{ h.form(pathurl, method="post", name="wiki") }}
2534+ Filename: {{ h.text('filename') }}<span class='field-helper'>This is what your new file will be called. Can include slashes to denote directories.</span><br>
2535+ Description: {{ h.text('description') }}<span class='field-helper'>A brief description of the purpose of this file.</span><br>
2536+ Template: {{ h.select('template', None, template_names) }}<span class='field-helper'>You can pre-populate your file with content from a template by selecting one of these.</span><br>
2537+ <div id="template_load_content"></div>
2538+{{ h.end_form() }}</p>
2539+<script type="text/javascript" src='http://code.jquery.com/jquery-latest.min.js'></script>
2540+<script type="text/javascript">
2541+ $('form[name=wiki]').submit(function(){
2542+ //Get Filename (and possibly folders) from filename field
2543+ var baseUrl = "{{pathurl}}";
2544+ var lastSlashIndex = baseUrl.lastIndexOf('/');
2545+ var leftUrl = baseUrl.substring(0, lastSlashIndex);
2546+ var rightUrl = baseUrl.substring(lastSlashIndex);
2547+ var filename = $('#filename').val();
2548+ var urlFilename = "";
2549+ if (filename.length > 0)
2550+ {
2551+ urlFilename = "/" + filename;
2552+ }
2553+ var saveLocation = $('#save_location').val();
2554+ var urlFolder = "";
2555+ if (saveLocation.length > 0)
2556+ {
2557+ urlFolder = "/" + saveLocation;
2558+ }
2559+ $('form[name=wiki]').attr('action', leftUrl + urlFolder + urlFilename + rightUrl);
2560+ });
2561+ $('#template').change(function(){
2562+ var url = "{{ h.url(controller='wiki', action='load_template') }}";
2563+ var filename = $('#template').val();
2564+ var map = {};
2565+ map["template_name"] = filename;
2566+ $.post(url, map, function(data){ $('#template_load_content').html(data); }, "html")
2567+ });
2568+</script>
2569+{% endblock %}
2570
2571=== added file 'sloecode/templates/wiki/page.html'
2572--- sloecode/templates/wiki/page.html 1970-01-01 00:00:00 +0000
2573+++ sloecode/templates/wiki/page.html 2012-09-26 01:36:19 +0000
2574@@ -0,0 +1,31 @@
2575+{% extends "wiki/base.html" %}
2576+
2577+{% block title %} Wiki {% endblock %}
2578+
2579+{% block wiki_actions %}
2580+<div class='wikkid'>
2581+ <ul class='wiki_breadcrumbs'>
2582+ {% for crumb in fragments['breadcrumbs'] %}
2583+ <li>
2584+ <a class='wiki_crumb' href="{{ crumb.path }}"><span class='wiki_crumb_content'>{{ crumb.title }}</span></a>
2585+ </li>
2586+ {% endfor %}
2587+ </ul>
2588+ </div>
2589+ <ul class='wiki_action_button_wrapper'>
2590+ <li>{{ h.link_to("Edit", fragments['edit_url'], class="wiki_action_button") }}</li>
2591+ <li>{{ h.link_to("Browse Wiki Contents", fragments['listing_url'], class="wiki_action_button") }}</li>
2592+ <li>{{ h.link_to("New File", fragments['newfile_url'], class="wiki_action_button") }}</li>
2593+ </ul>
2594+ <div class='clear'></div>
2595+</div>
2596+{% endblock %}
2597+
2598+{% block wiki_content %}
2599+ {% block page_content %} {% endblock %}
2600+ <div>
2601+ {% if fragments['last_modified_by'] %}
2602+ Last modified on <b>{{ fragments['last_modified_date'] }}</b> by <b>{{ fragments['last_modified_by'] }}</b>.
2603+ {% endif %}
2604+ </div>
2605+{% endblock %}
2606
2607=== added file 'sloecode/templates/wiki/text.html'
2608--- sloecode/templates/wiki/text.html 1970-01-01 00:00:00 +0000
2609+++ sloecode/templates/wiki/text.html 2012-09-26 01:36:19 +0000
2610@@ -0,0 +1,5 @@
2611+{% extends "wiki/page.html" %}
2612+
2613+{% block page_content %}
2614+{{ fragments['content'] }}
2615+{% endblock %}
2616
2617=== modified file 'sloecode/tests/test_project.py'
2618--- sloecode/tests/test_project.py 2012-05-01 04:14:51 +0000
2619+++ sloecode/tests/test_project.py 2012-09-26 01:36:19 +0000
2620@@ -66,4 +66,4 @@
2621 self.assertTrue(me in Session)
2622
2623 self.assertTrue(mem not in Session)
2624- self.assertTrue(sc not in Session)
2625+ self.assertTrue(sc not in Session)
2626\ No newline at end of file
2627
2628=== added file 'sloecode/tests/test_template.py'
2629--- sloecode/tests/test_template.py 1970-01-01 00:00:00 +0000
2630+++ sloecode/tests/test_template.py 2012-09-26 01:36:19 +0000
2631@@ -0,0 +1,83 @@
2632+# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2633+#
2634+# This program is free software: you can redistribute it and/or modify
2635+# it under the terms of the GNU General Public License as published by
2636+# the Free Software Foundation, either version 3 of the License, or
2637+# (at your option) any later version.
2638+
2639+# This program is distributed in the hope that it will be useful,
2640+# but WITHOUT ANY WARRANTY; without even the implied warranty of
2641+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2642+# GNU General Public License for more details.
2643+
2644+# You should have received a copy of the GNU General Public License
2645+# along with this program. If not, see <http://www.gnu.org/licenses/>.
2646+
2647+# Copyright 2012 Sloecode Developers
2648+from sloecode.model.meta import Session
2649+from sloecode.model import Template
2650+from sloecode.tests import SloecodeTestCase
2651+from sqlalchemy.exc import IntegrityError
2652+
2653+
2654+class TestTemplate(SloecodeTestCase):
2655+
2656+ def test_create(self):
2657+ """Create a person."""
2658+ blog_template = Template(name='blog', description='This is a blog post',
2659+ save_location='/', content='Some content.')
2660+ self.failIf(blog_template is None)
2661+
2662+ def test_unique(self):
2663+ """Make sure the blog name is unique."""
2664+ blog_template = Template(name='blog', description='This is a blog post',
2665+ save_location='/', content='Some content.')
2666+ Session.add(blog_template)
2667+ Session.commit()
2668+
2669+ another_blog_template = Template(name='blog', description='This is a blog post',
2670+ save_location='/', content='Some content.')
2671+ Session.add(another_blog_template)
2672+ self.failUnlessRaises(IntegrityError, Session.commit)
2673+
2674+ def test_tests(self):
2675+ """make sure DB data is flushed between tests."""
2676+ blog_template = Template(name='blog')
2677+ Session.add(blog_template)
2678+ Session.commit()
2679+
2680+ def test_querying(self):
2681+ """make sure we can query the database for specific templates."""
2682+ # Add some users:
2683+ Session.add(Template(name='blog', description='blog post'))
2684+ Session.add(Template(name='milestones', description='milestones',
2685+ content='some content'))
2686+ Session.add(Template(name='blank page', description='blank page',
2687+ save_location='/'))
2688+ Session.commit()
2689+
2690+ # query all templates:
2691+ qi = Session.query(Template)
2692+ self.assertTrue(len(qi.all()) == 3)
2693+
2694+ # Check get_one returns a Template not a list of Templates
2695+ blog_template = Template.get_one(name='blog')
2696+ self.assertTrue(isinstance(blog_template, Template))
2697+
2698+ def test_update(self):
2699+ """Make sure we can edit a template in the database."""
2700+
2701+ Session.add(Template(name='blog', description='a blog spot',
2702+ content='This is some content.'))
2703+ Session.commit()
2704+
2705+ blog_template = Template.get(name='blog')[0]
2706+ blog_template.name = 'blog spot'
2707+ blog_template.content = 'This is some more content'
2708+ blog_template.save_location = '/'
2709+ Session.merge(blog_template)
2710+ Session.commit()
2711+
2712+ blog = Template.get(name='blog spot')[0]
2713+ self.assertTrue(blog.save_location == '/')
2714+ self.assertTrue(blog is blog_template)
2715
2716=== modified file 'sloecode/websetup.py'
2717--- sloecode/websetup.py 2012-05-01 04:14:51 +0000
2718+++ sloecode/websetup.py 2012-09-26 01:36:19 +0000
2719@@ -18,16 +18,12 @@
2720 """Setup the sloecode application"""
2721
2722 import logging
2723-
2724 import pylons.test
2725
2726-from sloecode.bzr.factory import BazaarRepositoryFactory
2727 from sloecode.config.environment import load_environment
2728 from sloecode.model.meta import Session, metadata, Base
2729 from sloecode.model import Person, SiteRole
2730 from sloecode.model.site_role import USER_ADMIN, PROJECT_ADMIN
2731-
2732-
2733 log = logging.getLogger(__name__)
2734
2735
2736@@ -35,7 +31,7 @@
2737 """Place any commands to setup sloecode here"""
2738 # Don't reload the app if it was loaded under the testing environment
2739 if not pylons.test.pylonsapp:
2740- load_environment(conf.global_conf, conf.local_conf)
2741+ config = load_environment(conf.global_conf, conf.local_conf)
2742
2743 # Create the tables if they don't already exist
2744 metadata.create_all(bind=Session.bind)
2745@@ -54,16 +50,9 @@
2746 Session.commit()
2747 log.info("Successfully setup")
2748
2749- # Ensure that the directories exist for the repositories.
2750- fact = BazaarRepositoryFactory(
2751- conf.global_conf['bzr_person_root'],
2752- conf.global_conf['bzr_project_root'],
2753- conf.global_conf['bzr_deleted_person_root'],
2754- conf.global_conf['bzr_deleted_project_root'],
2755- )
2756 # create repo for admin user we created above:
2757 # TODO: this will crash if the admin user was already created, which
2758 # will be the case if the database has been wiped or moved from one
2759 # backend to another. We should detect this and warn about it, but
2760 # probably not crash!
2761- fact.create_shared_repository_for_person(admin.login)
2762+ config['bzr.factory'].create_shared_repository_for_person(admin.login)
2763
2764=== added file 'sloecode/wikkid_view_adapters.py'
2765--- sloecode/wikkid_view_adapters.py 1970-01-01 00:00:00 +0000
2766+++ sloecode/wikkid_view_adapters.py 2012-09-26 01:36:19 +0000
2767@@ -0,0 +1,159 @@
2768+# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2769+#
2770+# This program is free software: you can redistribute it and/or modify
2771+# it under the terms of the GNU General Public License as published by
2772+# the Free Software Foundation, either version 3 of the License, or
2773+# (at your option) any later version.
2774+
2775+# This program is distributed in the hope that it will be useful,
2776+# but WITHOUT ANY WARRANTY; without even the implied warranty of
2777+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2778+# GNU General Public License for more details.
2779+
2780+# You should have received a copy of the GNU General Public License
2781+# along with this program. If not, see <http://www.gnu.org/licenses/>.
2782+
2783+# Copyright 2012 Sloecode Developers
2784+
2785+
2786+import logging
2787+
2788+
2789+log = logging.getLogger(__name__)
2790+
2791+
2792+def _add_single_page_fragments(fragments, view):
2793+ """Adds fragments for single-page based views to the dict passed in."""
2794+ try:
2795+ fragments['last_modified_by'] = view.last_modified_by.display_name
2796+ fragments['last_modified_date'] = view.last_modified_date
2797+ except:
2798+ pass
2799+ fragments['listing_url'] = view.canonical_url(view.context.root_resource,
2800+ 'listing')
2801+ fragments['edit_url'] = view.canonical_url(view.context, 'edit')
2802+ fragments['breadcrumbs'] = view.breadcrumbs
2803+ # The template may be overwritten in child classes
2804+ fragments['template'] = '/wiki/text.html'
2805+
2806+
2807+def _get_base_fragments(app, environ):
2808+ """Performs actions that are common to every view.
2809+
2810+ Returns a dictionary containing values common to every view.
2811+
2812+ """
2813+ view = app.get_view(environ)
2814+ #Perform any redirects if they need to happen
2815+ view.before_render()
2816+ newfile_url = view.canonical_url(view.context.root_resource, 'newfile')
2817+ fragments = {
2818+ 'newfile_url': newfile_url,
2819+ }
2820+ return fragments, view
2821+
2822+
2823+def _get_directory_fragments(app, environ):
2824+ """Returns fragments for views related to directories."""
2825+ fragments, view = _get_base_fragments(app, environ)
2826+
2827+ fragments['breadcrumbs'] = view.breadcrumbs
2828+ fragments['content'] = view.items
2829+ fragments['template'] = '/wiki/directory.html'
2830+
2831+ return fragments
2832+
2833+
2834+def _get_missing_page_fragments(app, environ):
2835+ """Returns fragments for views related to missing pages."""
2836+ fragments, view = _get_base_fragments(app, environ)
2837+
2838+ fragments['listing_url'] = view.canonical_url(view.context.root_resource,
2839+ 'listing')
2840+ fragments['edit_url'] = view.canonical_url(view.context, 'edit')
2841+ fragments['breadcrumbs'] = view.breadcrumbs
2842+ fragments['template'] = '/wiki/text.html'
2843+ not_found_msg = "File not found: %s <br><a href='%s'>Create a new page</a>"
2844+ fragments['content'] = not_found_msg % (view.title,
2845+ view.canonical_url(view.context,
2846+ 'newfile'))
2847+
2848+ return fragments
2849+
2850+
2851+def _get_edit_fragments(app, environ):
2852+ """Returns fragments for views related to edit pages."""
2853+ fragments, view = _get_base_fragments(app, environ)
2854+ _add_single_page_fragments(fragments, view)
2855+
2856+ fragments['content'] = view.content
2857+ fragments['save_url'] = view.save_url
2858+ fragments['cancel_url'] = view.cancel_url
2859+ fragments['rev-id'] = view.rev_id
2860+ fragments['cancel_url'] = view.cancel_url
2861+ fragments['template'] = '/wiki/edit.html'
2862+ try:
2863+ fragments['preview'] = view.preview_content
2864+ except:
2865+ pass
2866+
2867+ return fragments
2868+
2869+
2870+def _get_root_fragments(app, environ):
2871+ """Returns fragments for views related to the root resource."""
2872+ fragments, view = _get_base_fragments(app, environ)
2873+ # This will get redirected to the actual root resource.
2874+ # Have put an explicit call to the function that redirects just in case.
2875+ view.before_render()
2876+
2877+
2878+def _get_source_text_fragments(app, environ):
2879+ """Returns fragments for views related to source text pages."""
2880+ fragments, view = _get_base_fragments(app, environ)
2881+ _add_single_page_fragments(fragments, view)
2882+
2883+ fragments['content'] = view.content
2884+
2885+ return fragments
2886+
2887+
2888+def _get_wiki_page_fragments(app, environ):
2889+ """Returns fragments for views related to wiki pages."""
2890+ fragments, view = _get_base_fragments(app, environ)
2891+ _add_single_page_fragments(fragments, view)
2892+
2893+ fragments['content'] = view.content
2894+
2895+ return fragments
2896+
2897+
2898+_view_map = {
2899+ 'DirectoryListingPage': _get_directory_fragments,
2900+ 'MissingPage': _get_missing_page_fragments,
2901+ 'MissingDirectory': _get_missing_page_fragments,
2902+ 'NewWikiPage': _get_edit_fragments,
2903+ 'RootPage': _get_root_fragments,
2904+ 'SourceTextPage': _get_wiki_page_fragments,
2905+ 'EditTextFile': _get_edit_fragments,
2906+ 'UpdateTextFile': _get_edit_fragments,
2907+ 'SaveNewTextFile': _get_edit_fragments,
2908+ 'WikiPage': _get_wiki_page_fragments,
2909+}
2910+
2911+
2912+def get_page_fragments(app, environ, view_name=None):
2913+ """Returns a dictionary containing the page fragments required for the
2914+ passed environ.
2915+
2916+ Also performs any redirects that need to happen for the view.
2917+
2918+ Returns None if view is not in dictionary.
2919+
2920+ """
2921+ if view_name is None:
2922+ view_name = app.get_view(environ).__class__.__name__
2923+ log.info("View: %s" % view_name)
2924+ if view_name in _view_map:
2925+ return _view_map[view_name](app, environ)
2926+ return None

Subscribers

People subscribed via source and target branches